From 52a69dc942dfe301c9720fb53f991580e2b6e819 Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Thu, 13 Apr 2017 16:37:55 -0700 Subject: [PATCH 001/236] basic functionality of randomized invariants search --- bench_horn/bouncy_two_counters_merged.smt2 | 33 + bench_horn/recur_1.smt2 | 68 + bench_horn/recur_102.smt2 | 79 ++ bench_horn/samples_multiple_inv_01.smt2 | 31 + bench_horn/samples_multiple_inv_02.smt2 | 36 + bench_horn/samples_only_01.smt2 | 33 + bench_horn/samples_only_02.smt2 | 47 + bench_horn/samples_only_03.smt2 | 41 + bench_horn/samples_only_04.smt2 | 39 + bench_horn/samples_only_05.smt2 | 38 + bench_horn/samples_only_06.smt2 | 34 + bench_horn/samples_only_07.smt2 | 36 + bench_horn/samples_only_08.smt2 | 31 + bench_horn/samples_search_01.smt2 | 29 + bench_horn/samples_search_02.smt2 | 40 + bench_horn/samples_search_03.smt2 | 40 + bench_horn/samples_search_04.smt2 | 38 + bench_horn/samples_search_05.smt2 | 38 + bench_horn/samples_search_06.smt2 | 32 + bench_horn/samples_search_07.smt2 | 37 + bench_horn/samples_search_08.smt2 | 30 + bench_horn/samples_search_disj_ite_01.smt2 | 41 + bench_horn/samples_search_disj_ite_02.smt2 | 40 + bench_horn/samples_search_disj_ite_03.smt2 | 41 + bench_horn/samples_search_disj_ite_04.smt2 | 41 + .../samples_shrink_big_numbers_1024.smt2 | 1053 +++++++++++++++ .../samples_shrink_big_numbers_2048.smt2 | 285 ++++ .../samples_shrink_big_numbers_4096.smt2 | 541 ++++++++ .../samples_shrink_big_numbers_8192.smt2 | 1053 +++++++++++++++ include/ae/AeValSolver.hpp | 2 +- include/ae/ExprSimpl.hpp | 567 +++++++- include/ae/SMTUtils.hpp | 27 +- include/deep/CodeSampler.hpp | 271 ++++ include/deep/Distribution.hpp | 114 ++ include/deep/Horn.hpp | 218 +++ include/deep/LinCom.hpp | 1164 +++++++++++++++++ include/deep/RndLearner.hpp | 417 ++++++ include/ufo/Expr.hpp | 25 + tools/CMakeLists.txt | 2 + tools/deep/CMakeLists.txt | 4 + tools/deep/DeepHorn.cpp | 28 + 41 files changed, 6756 insertions(+), 8 deletions(-) create mode 100644 bench_horn/bouncy_two_counters_merged.smt2 create mode 100644 bench_horn/recur_1.smt2 create mode 100644 bench_horn/recur_102.smt2 create mode 100644 bench_horn/samples_multiple_inv_01.smt2 create mode 100644 bench_horn/samples_multiple_inv_02.smt2 create mode 100644 bench_horn/samples_only_01.smt2 create mode 100644 bench_horn/samples_only_02.smt2 create mode 100644 bench_horn/samples_only_03.smt2 create mode 100644 bench_horn/samples_only_04.smt2 create mode 100644 bench_horn/samples_only_05.smt2 create mode 100644 bench_horn/samples_only_06.smt2 create mode 100644 bench_horn/samples_only_07.smt2 create mode 100644 bench_horn/samples_only_08.smt2 create mode 100644 bench_horn/samples_search_01.smt2 create mode 100644 bench_horn/samples_search_02.smt2 create mode 100644 bench_horn/samples_search_03.smt2 create mode 100644 bench_horn/samples_search_04.smt2 create mode 100644 bench_horn/samples_search_05.smt2 create mode 100644 bench_horn/samples_search_06.smt2 create mode 100644 bench_horn/samples_search_07.smt2 create mode 100644 bench_horn/samples_search_08.smt2 create mode 100644 bench_horn/samples_search_disj_ite_01.smt2 create mode 100644 bench_horn/samples_search_disj_ite_02.smt2 create mode 100644 bench_horn/samples_search_disj_ite_03.smt2 create mode 100644 bench_horn/samples_search_disj_ite_04.smt2 create mode 100644 bench_horn/samples_shrink_big_numbers_1024.smt2 create mode 100644 bench_horn/samples_shrink_big_numbers_2048.smt2 create mode 100644 bench_horn/samples_shrink_big_numbers_4096.smt2 create mode 100644 bench_horn/samples_shrink_big_numbers_8192.smt2 create mode 100644 include/deep/CodeSampler.hpp create mode 100644 include/deep/Distribution.hpp create mode 100644 include/deep/Horn.hpp create mode 100644 include/deep/LinCom.hpp create mode 100644 include/deep/RndLearner.hpp create mode 100644 tools/deep/CMakeLists.txt create mode 100644 tools/deep/DeepHorn.cpp diff --git a/bench_horn/bouncy_two_counters_merged.smt2 b/bench_horn/bouncy_two_counters_merged.smt2 new file mode 100644 index 000000000..cd4e849f3 --- /dev/null +++ b/bench_horn/bouncy_two_counters_merged.smt2 @@ -0,0 +1,33 @@ +(declare-rel itp1 (Int Int Int)) + +(declare-var x1 Int) +(declare-var y1 Int) +(declare-var z1 Int) +(declare-var x2 Int) +(declare-var y2 Int) +(declare-var z2 Int) + +(declare-rel fail ()) + +; COUNTERs -> x and y (nondet choice) +(rule (=> + (and + (itp1 x1 y1 z1) + (or + (and (= x2 (+ x1 1)) (= y2 y1) (= z2 (+ z1 1))) + (and (= y2 (+ y1 1)) (= x2 x1) (= z2 (- z1 1))) + ) + ;(= x2 (+ y2 z2)) ; desired invariant + ) + (itp1 x2 y2 z2) + ) +) + +; the problem is assumption (= x1 y1) that does not hold after a single iter of the loop making the body unsatisfiable. + +(rule (=> (and (itp1 x1 y1 z1) (= x1 y1) (not (= z1 0))) fail)) + + +(query fail :print-certificate true) + + diff --git a/bench_horn/recur_1.smt2 b/bench_horn/recur_1.smt2 new file mode 100644 index 000000000..fa3bc563d --- /dev/null +++ b/bench_horn/recur_1.smt2 @@ -0,0 +1,68 @@ +(declare-rel itp1 (Int Int)) +(declare-rel fail ()) + +(declare-var cnt1 Int) +(declare-var cnt2 Int) +(declare-var cnt3 Int) +(declare-var cnt4 Int) +(declare-var cnt5 Int) +(declare-var cnt6 Int) + +(declare-var pre1 Int) +(declare-var pre2 Int) +(declare-var pre3 Int) +(declare-var pre4 Int) +(declare-var pre5 Int) +(declare-var pre6 Int) + +(declare-var pre_cnt_1 Int) +(declare-var pre_cnt_2 Int) +(declare-var pre_cnt_3 Int) +(declare-var pre_cnt_4 Int) +(declare-var pre_cnt_5 Int) +(declare-var pre_cnt_6 Int) + +(declare-var st1 Int) +(declare-var st2 Int) +(declare-var st3 Int) +(declare-var st4 Int) +(declare-var st5 Int) +(declare-var st6 Int) + +(declare-var cnt_all_1 Int) +(declare-var cnt_all_2 Int) +(declare-var st_all_1 Int) +(declare-var st_all_2 Int) + +(declare-var segm1 Int) +(declare-var segm2 Int) + +(declare-var m Int) + + + +(rule (=> (and (= cnt_all_1 0) (= st_all_1 0)) + (itp1 cnt_all_1 st_all_1))) + + +(rule (=> + (and + (itp1 cnt_all_1 st_all_1) + + (ite (= m 1) + (= cnt_all_2 (+ 1 cnt_all_1)) + (= cnt_all_2 cnt_all_1)) + + (= st_all_2 (+ st_all_1 1)) + ) + (itp1 cnt_all_2 st_all_2 ) + ) +) + +(rule (=> (and (itp1 cnt_all_1 st_all_1 ) + + (not (<= cnt_all_1 st_all_1))) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/recur_102.smt2 b/bench_horn/recur_102.smt2 new file mode 100644 index 000000000..99407a9c8 --- /dev/null +++ b/bench_horn/recur_102.smt2 @@ -0,0 +1,79 @@ +(declare-rel itp1 (Int Int)) +(declare-rel fail ()) + +(declare-var cnt1 Int) +(declare-var cnt2 Int) +(declare-var cnt3 Int) +(declare-var cnt4 Int) +(declare-var cnt5 Int) +(declare-var cnt6 Int) + +(declare-var pre1 Int) +(declare-var pre2 Int) +(declare-var pre3 Int) +(declare-var pre4 Int) +(declare-var pre5 Int) +(declare-var pre6 Int) + +(declare-var pre_cnt_1 Int) +(declare-var pre_cnt_2 Int) +(declare-var pre_cnt_3 Int) +(declare-var pre_cnt_4 Int) +(declare-var pre_cnt_5 Int) +(declare-var pre_cnt_6 Int) + +(declare-var st1 Int) +(declare-var st2 Int) +(declare-var st3 Int) +(declare-var st4 Int) +(declare-var st5 Int) +(declare-var st6 Int) + +(declare-var cnt_all_1 Int) +(declare-var cnt_all_2 Int) +(declare-var st_all_1 Int) +(declare-var st_all_2 Int) + +(declare-var segm1 Int) +(declare-var segm2 Int) + +(declare-var m Int) + + + + +(define-fun rec1 ((m Int) (state1 Int) (state2 Int) (res1 Int) (res2 Int)) Bool + + (ite (and (= m 1) (= state1 0)) + (and (= state2 1) (= res2 res1)) + (ite (and (= m 2) (= state1 1)) + (and (= state2 0) (= res2 (+ 1 res1))) + (and (= state2 state1) (= res2 res1)) + ) + ) +) + +(rule (=> (and (= cnt_all_1 0) (= st_all_1 0)) + (itp1 cnt_all_1 st_all_1))) + + +(rule (=> + (and + (itp1 cnt_all_1 st_all_1) + + + (rec1 m st_all_1 st_all_2 cnt_all_1 cnt_all_2) + + + ) + (itp1 cnt_all_2 st_all_2 ) + ) +) + +(rule (=> (and (itp1 cnt_all_1 st_all_1 ) + + (not (and (>= cnt_all_1 0) (<= st_all_1 1)) )) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/samples_multiple_inv_01.smt2 b/bench_horn/samples_multiple_inv_01.smt2 new file mode 100644 index 000000000..7a551a4ac --- /dev/null +++ b/bench_horn/samples_multiple_inv_01.smt2 @@ -0,0 +1,31 @@ +(declare-rel WRAP (Int)) +(declare-rel NEST (Int)) +(declare-var m Int) +(declare-var m1 Int) + +(declare-rel fail ()) + +(rule (=> + (= m 0) (WRAP m) + ) +) + + +(rule (=> (WRAP m) (NEST m))) + +(rule (=> + (and + (NEST m) + (= m1 (+ m 1)) + ) + (NEST m1) + ) +) + +(rule (=> (NEST m) (WRAP m))) + + +(rule (=> (and (WRAP m) (not (>= m 0))) fail)) + +(query fail :print-certificate true) + diff --git a/bench_horn/samples_multiple_inv_02.smt2 b/bench_horn/samples_multiple_inv_02.smt2 new file mode 100644 index 000000000..43fed33c8 --- /dev/null +++ b/bench_horn/samples_multiple_inv_02.smt2 @@ -0,0 +1,36 @@ +(declare-rel FUN (Int)) +(declare-rel SAD (Int)) +(declare-var m Int) +(declare-var m1 Int) + +(declare-rel fail ()) + +(rule (=> + (> m 50) (FUN m) + ) +) + +(rule (=> + (and + (FUN m) + (= m1 (+ m 1)) + ) + (FUN m1) + ) +) + +(rule (=> (FUN m) (SAD m))) + +(rule (=> + (and + (SAD m) + (= m1 (+ m 2)) + ) + (SAD m1) + ) +) + +(rule (=> (and (SAD m) (not (>= m 30))) fail)) + +(query fail :print-certificate true) + diff --git a/bench_horn/samples_only_01.smt2 b/bench_horn/samples_only_01.smt2 new file mode 100644 index 000000000..5f22bb4c1 --- /dev/null +++ b/bench_horn/samples_only_01.smt2 @@ -0,0 +1,33 @@ +(declare-rel itp (Int Int)) +(declare-var m Int) +(declare-var m1 Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var b Int) + +(declare-rel fail ()) + ; (2i + m < 0) +; (2i + m < 3) + + +(rule (=> + (and (= m 0) (= i 0)) (itp m i) + ) +) + +(rule (=> + (and + (itp m i) + (= i1 (+ i 55)) + (= m1 (+ m 66)) + ) + (itp m1 i1) + ) +) + + +(rule (=> (and (itp m i) (not (>= (+ m i) 0))) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/samples_only_02.smt2 b/bench_horn/samples_only_02.smt2 new file mode 100644 index 000000000..f859d0b23 --- /dev/null +++ b/bench_horn/samples_only_02.smt2 @@ -0,0 +1,47 @@ +(declare-rel itp (Int Int Int Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) +(declare-var x7 Int) +(declare-var x8 Int) +(declare-var x9 Int) + +(declare-rel fail ()) + +(rule (=> + (and (= x1 2) (= x2 2) (= x3 2) (= x4 2) (= x5 2)) (itp x1 x2 x3 x4 x5) + ) +) + +(rule (=> + (and + (itp x1 x3 x5 x7 x9) + (= x2 (+ x1 1)) + (= x4 (+ x3 1)) + (= x6 (+ x5 1)) + (= x8 (+ x7 1)) + (= x0 (+ x9 1)) + ) + (itp x2 x4 x6 x8 x0) + ) +) + + +(rule (=> (and (itp x1 x3 x5 x7 x9) + (not + (and + (> x1 0) + (> x3 0) + (> x5 0) + (> x7 0) + (> x9 0) + ) + )) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/samples_only_03.smt2 b/bench_horn/samples_only_03.smt2 new file mode 100644 index 000000000..c99ce183a --- /dev/null +++ b/bench_horn/samples_only_03.smt2 @@ -0,0 +1,41 @@ +(declare-rel itp (Int Int )) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) +(declare-var x7 Int) +(declare-var x8 Int) +(declare-var x9 Int) + +(declare-rel fail ()) + +(rule (=> + (and (= x1 0) (= x3 0)) (itp x1 x3) + ) +) + +(rule (=> + (and + (itp x1 x3 ) + (= x2 (+ x1 1)) + (= x4 (- x3 1)) + ) + (itp x2 x4) + ) +) + + +(rule (=> (and (itp x1 x3) + (not + (and + (>= x1 0) + (<= x3 0) + ) + )) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/samples_only_04.smt2 b/bench_horn/samples_only_04.smt2 new file mode 100644 index 000000000..0e0ce3e28 --- /dev/null +++ b/bench_horn/samples_only_04.smt2 @@ -0,0 +1,39 @@ +(declare-rel itp (Int Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) +(declare-var x7 Int) +(declare-var x8 Int) +(declare-var x9 Int) + +(declare-rel fail ()) + +(rule (=> + (and (= x1 0) (= x3 0) (= x5 0)) (itp x1 x3 x5) + ) +) + +(rule (=> + (and + (itp x1 x3 x5) + (or (and (= x2 (+ x1 1)) (= x4 (- x3 1))) + (and (= x2 (- x1 1)) (= x4 (+ x3 1)))) + (= x6 (+ x5 x2 x4)) + ) + (itp x2 x4 x6) + ) +) + + +(rule (=> (and (itp x1 x3 x5) + (not + (>= x5 0) + )) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/samples_only_05.smt2 b/bench_horn/samples_only_05.smt2 new file mode 100644 index 000000000..c14a3d65d --- /dev/null +++ b/bench_horn/samples_only_05.smt2 @@ -0,0 +1,38 @@ +(declare-rel itp (Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) +(declare-var x7 Int) +(declare-var x8 Int) +(declare-var x9 Int) + +(declare-rel fail ()) + +(rule (=> + (and (= x1 0) (>= x3 x1)) (itp x1 x3) + ) +) + +(rule (=> + (and + (itp x1 x3) + (= x2 (+ x1 1)) + (= x4 (+ x3 1)) + ) + (itp x2 x4) + ) +) + + +(rule (=> (and (itp x1 x3) (> x1 1000) + (not + (> x3 1000) + )) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/samples_only_06.smt2 b/bench_horn/samples_only_06.smt2 new file mode 100644 index 000000000..e767f9673 --- /dev/null +++ b/bench_horn/samples_only_06.smt2 @@ -0,0 +1,34 @@ +(declare-rel inv (Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) +(declare-var i Int) +(declare-var i1 Int) + +(declare-rel fail ()) + +(rule (=> + (and (= x 0) (= y 0) (= i 0)) (inv x y i) + ) +) + +(rule (=> + (and + (inv x y i) + (= i1 (+ i 1)) + (= x1 (+ x i1)) + (= y1 (- y i1)) + ) + (inv x1 y1 i1) + ) +) + +;(= 0 (- x (+ y (- 8 i 7)))) - not needed actually, just to test + + +(rule (=> (and (inv x y i) (= 0 (- x (+ y (- 8 i 7)))) (not (= x (- y)))) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/samples_only_07.smt2 b/bench_horn/samples_only_07.smt2 new file mode 100644 index 000000000..a3ba55daa --- /dev/null +++ b/bench_horn/samples_only_07.smt2 @@ -0,0 +1,36 @@ +(declare-rel itp (Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) +(declare-var x7 Int) +(declare-var x8 Int) +(declare-var x9 Int) + +(declare-rel fail ()) + +(rule (=> (= x3 0) (itp x3) + ) +) + +(rule (=> + (and + (itp x3) + (= x4 (ite (= x3 10) 0 (+ x3 1))) + ) + (itp x4) + ) +) + + +(rule (=> (and (itp x3) + (not + (<= x3 10) + )) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/samples_only_08.smt2 b/bench_horn/samples_only_08.smt2 new file mode 100644 index 000000000..5260c65eb --- /dev/null +++ b/bench_horn/samples_only_08.smt2 @@ -0,0 +1,31 @@ +(declare-rel inv (Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) +(declare-var x7 Int) +(declare-var x8 Int) +(declare-var x9 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= x3 100)) (inv x1 x3))) + +(rule (=> + (and + (inv x1 x3) + (= x2 (+ x1 1)) + (ite (ite (> x2 0) (> x3 0) (= x3 5)) + (= x4 x2) (= x4 x3)) + ) + (inv x2 x4) + ) +) + +(rule (=> (and (inv x1 x3) (not (> x3 0) )) fail)) + +(query fail :print-certificate true) + diff --git a/bench_horn/samples_search_01.smt2 b/bench_horn/samples_search_01.smt2 new file mode 100644 index 000000000..8694a704a --- /dev/null +++ b/bench_horn/samples_search_01.smt2 @@ -0,0 +1,29 @@ +(declare-rel inv (Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var i Int) +(declare-var i1 Int) + +(declare-rel fail ()) + +(rule (=> + (and (= x 32) (= i 25)) (inv x i) + ) +) + +(rule (=> + (and + (inv x i) + (= i1 (+ i 112)) + (= x1 (+ x i1)) + ) + (inv x1 i1) + ) +) + + +(rule (=> (and (inv x i) (not (>= x 0))) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/samples_search_02.smt2 b/bench_horn/samples_search_02.smt2 new file mode 100644 index 000000000..e0eb57b8e --- /dev/null +++ b/bench_horn/samples_search_02.smt2 @@ -0,0 +1,40 @@ +(declare-rel itp (Int Int Int Int )) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) +(declare-var x7 Int) +(declare-var x8 Int) +(declare-var x9 Int) + +(declare-rel fail ()) + +(rule (=> + (and (= x1 0) (= x3 0) (= x5 0) (= x7 0)) (itp x1 x3 x5 x7) + ) +) + +(rule (=> + (and + (itp x1 x3 x5 x7) + (= x2 (+ x1 1)) + (= x4 (+ x3 x2)) + (= x6 (+ x5 x4)) + (= x8 (+ x7 x6)) + ) + (itp x2 x4 x6 x8) + ) +) + + +(rule (=> (and (itp x1 x3 x5 x7) + (not + (>= x7 0) + )) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/samples_search_03.smt2 b/bench_horn/samples_search_03.smt2 new file mode 100644 index 000000000..85ce80505 --- /dev/null +++ b/bench_horn/samples_search_03.smt2 @@ -0,0 +1,40 @@ +(declare-rel itp (Int Int Int )) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) +(declare-var x7 Int) +(declare-var x8 Int) +(declare-var x9 Int) + +(declare-rel fail ()) + +(rule (=> + (and (= x1 0) (= x3 0) (= x5 0)) (itp x1 x3 x5) + ) +) + +(rule (=> + (and + (itp x1 x3 x5) + (and (= x2 (+ x1 1)) + (= x4 (+ x3 1))) + (or (= x6 (+ x5 x2)) + (= x6 (+ x5 x4))) + ) + (itp x2 x4 x6) + ) +) + + +(rule (=> (and (itp x1 x3 x5) + (not + (>= x5 0) + )) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/samples_search_04.smt2 b/bench_horn/samples_search_04.smt2 new file mode 100644 index 000000000..8bd206ca2 --- /dev/null +++ b/bench_horn/samples_search_04.smt2 @@ -0,0 +1,38 @@ +(declare-rel itp (Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) +(declare-var x7 Int) +(declare-var x8 Int) +(declare-var x9 Int) + +(declare-rel fail ()) + +(rule (=> + (and (= x1 0) (= x3 0)) (itp x1 x3) + ) +) + +(rule (=> + (and + (itp x1 x3) + (= x2 (+ x1 1)) + (= x4 (+ x3 1)) + ) + (itp x2 x4) + ) +) + + +(rule (=> (and (itp x1 x3) (> x1 0) + (not + (> x3 0) + )) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/samples_search_05.smt2 b/bench_horn/samples_search_05.smt2 new file mode 100644 index 000000000..7167a75e1 --- /dev/null +++ b/bench_horn/samples_search_05.smt2 @@ -0,0 +1,38 @@ +(declare-rel itp (Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) +(declare-var x7 Int) +(declare-var x8 Int) +(declare-var x9 Int) + +(declare-rel fail ()) + +(rule (=> + (and (= x1 0) (> x3 x1)) (itp x1 x3) + ) +) + +(rule (=> + (and + (itp x1 x3) + (= x2 (+ x1 1)) + (= x4 (+ x3 2)) + ) + (itp x2 x4) + ) +) + + +(rule (=> (and (itp x1 x3) (> x1 1000) + (not + (> x3 2000) + )) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/samples_search_06.smt2 b/bench_horn/samples_search_06.smt2 new file mode 100644 index 000000000..8e105ddd6 --- /dev/null +++ b/bench_horn/samples_search_06.smt2 @@ -0,0 +1,32 @@ +(declare-rel inv (Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) +(declare-var i Int) +(declare-var i1 Int) + +(declare-rel fail ()) + +(rule (=> + (and (= x 0) (= y 0) (= i 0)) (inv x y i) + ) +) + +(rule (=> + (and + (inv x y i) + (= i1 (+ i 1)) + (= x1 (+ x i1)) + (= y1 (- y i1)) + ) + (inv x1 y1 i1) + ) +) + + +(rule (=> (and (inv x y i) (not (>= x y))) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/samples_search_07.smt2 b/bench_horn/samples_search_07.smt2 new file mode 100644 index 000000000..914099c4c --- /dev/null +++ b/bench_horn/samples_search_07.smt2 @@ -0,0 +1,37 @@ +(declare-rel inv (Int Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) +(declare-var nondet1 Int) +(declare-var nondet2 Int) + +(declare-rel fail ()) + +(rule (=> + (and (= x 0) (= y 0) (= i 0) (= j 0)) (inv x y i j) + ) +) + +(rule (=> + (and + (inv x y i j) + (= i1 (+ i nondet1)) + (= j1 (+ j nondet2)) + (= x1 (+ x nondet1)) + (= y1 (+ y nondet2)) + ) + (inv x1 y1 i1 j1) + ) +) + + +(rule (=> (and (inv x y i j) (>= i j) (not (>= x y))) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/samples_search_08.smt2 b/bench_horn/samples_search_08.smt2 new file mode 100644 index 000000000..4cd0d5085 --- /dev/null +++ b/bench_horn/samples_search_08.smt2 @@ -0,0 +1,30 @@ +(declare-rel inv (Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) +(declare-var x7 Int) +(declare-var x8 Int) +(declare-var x9 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 -100) (= x3 (* 2 x1))) (inv x1 x3))) + +(rule (=> + (and + (inv x1 x3) + (= x2 (+ x1 1)) + (= x4 (+ x2 2)) + ) + (inv x2 x4) + ) +) + +(rule (=> (and (inv x1 x3) (not (=> (> x1 0) (> x3 0) ))) fail)) + +(query fail :print-certificate true) + diff --git a/bench_horn/samples_search_disj_ite_01.smt2 b/bench_horn/samples_search_disj_ite_01.smt2 new file mode 100644 index 000000000..3d9011c3d --- /dev/null +++ b/bench_horn/samples_search_disj_ite_01.smt2 @@ -0,0 +1,41 @@ +(declare-rel itp (Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) +(declare-var x7 Int) +(declare-var x8 Int) +(declare-var x9 Int) + +(declare-rel fail ()) + + +(rule (=> + (and (= x1 0) (= x3 100)) (itp x1 x3) + ) +) + +(rule (=> + (and + (itp x1 x3) + (= x2 (+ x1 1)) + (= x4 (+ (ite (> x2 0) 1 0) + (ite (> x3 10) -1 x3))) + + ) + (itp x2 x4) + ) +) + + +(rule (=> (and (itp x1 x3) (> x1 10) + (not + (< x3 x1) + )) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/samples_search_disj_ite_02.smt2 b/bench_horn/samples_search_disj_ite_02.smt2 new file mode 100644 index 000000000..674a769bd --- /dev/null +++ b/bench_horn/samples_search_disj_ite_02.smt2 @@ -0,0 +1,40 @@ +(declare-rel itp (Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) +(declare-var x7 Int) +(declare-var x8 Int) +(declare-var x9 Int) + +(declare-rel fail ()) + +(rule (=> + (and (= x1 0) (= x3 100)) (itp x1 x3) + ) +) + +(rule (=> + (and + (itp x1 x3) + (= x2 (+ x1 1)) + (= (ite (> x2 0) x4 (+ 1 x4)) + (ite (> x3 10) 0 (+ x3 1))) + + ) + (itp x2 x4) + ) +) + + +(rule (=> (and (itp x1 x3) (> x1 10) + (not + (< x3 x1) + )) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/samples_search_disj_ite_03.smt2 b/bench_horn/samples_search_disj_ite_03.smt2 new file mode 100644 index 000000000..e03ae8422 --- /dev/null +++ b/bench_horn/samples_search_disj_ite_03.smt2 @@ -0,0 +1,41 @@ +(declare-rel itp (Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) +(declare-var x7 Int) +(declare-var x8 Int) +(declare-var x9 Int) + +(declare-rel fail ()) + +(rule (=> + (and (= x1 0) (= x3 100)) (itp x1 x3) + ) +) + +(rule (=> + (and + (itp x1 x3) + (= x2 (+ x1 1)) + (= x4 (ite (> x3 10) 0 (+ x3 1))) + + ; (or (and (> x3 10) (= x4 0)) + ; (and (<= x3 10) (= x4 (+ x3 1)))) + ) + (itp x2 x4) + ) +) + + +(rule (=> (and (itp x1 x3) (> x1 10) + (not + (< x3 x1) + )) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/samples_search_disj_ite_04.smt2 b/bench_horn/samples_search_disj_ite_04.smt2 new file mode 100644 index 000000000..49cc95d9d --- /dev/null +++ b/bench_horn/samples_search_disj_ite_04.smt2 @@ -0,0 +1,41 @@ +(declare-rel itp (Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) +(declare-var x7 Int) +(declare-var x8 Int) +(declare-var x9 Int) + +(declare-rel fail ()) + +; same as samples_search_06, but with a more complicated ITE + +(rule (=> + (and (= x1 0) (= x3 100)) (itp x1 x3) + ) +) + +(rule (=> + (and + (itp x1 x3) + (= x2 (+ x1 1)) + (= (+ 1 (ite (> x3 10) -1 x3)) x4) + + ) + (itp x2 x4) + ) +) + + +(rule (=> (and (itp x1 x3) (> x1 10) + (not + (< x3 x1) + )) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/samples_shrink_big_numbers_1024.smt2 b/bench_horn/samples_shrink_big_numbers_1024.smt2 new file mode 100644 index 000000000..89079c463 --- /dev/null +++ b/bench_horn/samples_shrink_big_numbers_1024.smt2 @@ -0,0 +1,1053 @@ +(declare-rel itp (Int)) +(declare-var x Int) +(declare-var x1 Int) + +(declare-rel fail ()) + +(rule (=> (and + (or + (= x 1) + (= x 2) + (= x 3) + (= x 4) + (= x 5) + (= x 6) + (= x 7) + (= x 8) + (= x 9) + (= x 10) + (= x 11) + (= x 12) + (= x 13) + (= x 14) + (= x 15) + (= x 16) + (= x 17) + (= x 18) + (= x 19) + (= x 20) + (= x 21) + (= x 22) + (= x 23) + (= x 24) + (= x 25) + (= x 26) + (= x 27) + (= x 28) + (= x 29) + (= x 30) + (= x 31) + (= x 32) + (= x 33) + (= x 34) + (= x 35) + (= x 36) + (= x 37) + (= x 38) + (= x 39) + (= x 40) + (= x 41) + (= x 42) + (= x 43) + (= x 44) + (= x 45) + (= x 46) + (= x 47) + (= x 48) + (= x 49) + (= x 50) + (= x 51) + (= x 52) + (= x 53) + (= x 54) + (= x 55) + (= x 56) + (= x 57) + (= x 58) + (= x 59) + (= x 60) + (= x 61) + (= x 62) + (= x 63) + (= x 64) + (= x 65) + (= x 66) + (= x 67) + (= x 68) + (= x 69) + (= x 70) + (= x 71) + (= x 72) + (= x 73) + (= x 74) + (= x 75) + (= x 76) + (= x 77) + (= x 78) + (= x 79) + (= x 80) + (= x 81) + (= x 82) + (= x 83) + (= x 84) + (= x 85) + (= x 86) + (= x 87) + (= x 88) + (= x 89) + (= x 90) + (= x 91) + (= x 92) + (= x 93) + (= x 94) + (= x 95) + (= x 96) + (= x 97) + (= x 98) + (= x 99) + (= x 100) + (= x 101) + (= x 102) + (= x 103) + (= x 104) + (= x 105) + (= x 106) + (= x 107) + (= x 108) + (= x 109) + (= x 110) + (= x 111) + (= x 112) + (= x 113) + (= x 114) + (= x 115) + (= x 116) + (= x 117) + (= x 118) + (= x 119) + (= x 120) + (= x 121) + (= x 122) + (= x 123) + (= x 124) + (= x 125) + (= x 126) + (= x 127) + (= x 128) + (= x 129) + (= x 130) + (= x 131) + (= x 132) + (= x 133) + (= x 134) + (= x 135) + (= x 136) + (= x 137) + (= x 138) + (= x 139) + (= x 140) + (= x 141) + (= x 142) + (= x 143) + (= x 144) + (= x 145) + (= x 146) + (= x 147) + (= x 148) + (= x 149) + (= x 150) + (= x 151) + (= x 152) + (= x 153) + (= x 154) + (= x 155) + (= x 156) + (= x 157) + (= x 158) + (= x 159) + (= x 160) + (= x 161) + (= x 162) + (= x 163) + (= x 164) + (= x 165) + (= x 166) + (= x 167) + (= x 168) + (= x 169) + (= x 170) + (= x 171) + (= x 172) + (= x 173) + (= x 174) + (= x 175) + (= x 176) + (= x 177) + (= x 178) + (= x 179) + (= x 180) + (= x 181) + (= x 182) + (= x 183) + (= x 184) + (= x 185) + (= x 186) + (= x 187) + (= x 188) + (= x 189) + (= x 190) + (= x 191) + (= x 192) + (= x 193) + (= x 194) + (= x 195) + (= x 196) + (= x 197) + (= x 198) + (= x 199) + (= x 200) + (= x 201) + (= x 202) + (= x 203) + (= x 204) + (= x 205) + (= x 206) + (= x 207) + (= x 208) + (= x 209) + (= x 210) + (= x 211) + (= x 212) + (= x 213) + (= x 214) + (= x 215) + (= x 216) + (= x 217) + (= x 218) + (= x 219) + (= x 220) + (= x 221) + (= x 222) + (= x 223) + (= x 224) + (= x 225) + (= x 226) + (= x 227) + (= x 228) + (= x 229) + (= x 230) + (= x 231) + (= x 232) + (= x 233) + (= x 234) + (= x 235) + (= x 236) + (= x 237) + (= x 238) + (= x 239) + (= x 240) + (= x 241) + (= x 242) + (= x 243) + (= x 244) + (= x 245) + (= x 246) + (= x 247) + (= x 248) + (= x 249) + (= x 250) + (= x 251) + (= x 252) + (= x 253) + (= x 254) + (= x 255) + (= x 256) + (= x 257) + (= x 258) + (= x 259) + (= x 260) + (= x 261) + (= x 262) + (= x 263) + (= x 264) + (= x 265) + (= x 266) + (= x 267) + (= x 268) + (= x 269) + (= x 270) + (= x 271) + (= x 272) + (= x 273) + (= x 274) + (= x 275) + (= x 276) + (= x 277) + (= x 278) + (= x 279) + (= x 280) + (= x 281) + (= x 282) + (= x 283) + (= x 284) + (= x 285) + (= x 286) + (= x 287) + (= x 288) + (= x 289) + (= x 290) + (= x 291) + (= x 292) + (= x 293) + (= x 294) + (= x 295) + (= x 296) + (= x 297) + (= x 298) + (= x 299) + (= x 300) + (= x 301) + (= x 302) + (= x 303) + (= x 304) + (= x 305) + (= x 306) + (= x 307) + (= x 308) + (= x 309) + (= x 310) + (= x 311) + (= x 312) + (= x 313) + (= x 314) + (= x 315) + (= x 316) + (= x 317) + (= x 318) + (= x 319) + (= x 320) + (= x 321) + (= x 322) + (= x 323) + (= x 324) + (= x 325) + (= x 326) + (= x 327) + (= x 328) + (= x 329) + (= x 330) + (= x 331) + (= x 332) + (= x 333) + (= x 334) + (= x 335) + (= x 336) + (= x 337) + (= x 338) + (= x 339) + (= x 340) + (= x 341) + (= x 342) + (= x 343) + (= x 344) + (= x 345) + (= x 346) + (= x 347) + (= x 348) + (= x 349) + (= x 350) + (= x 351) + (= x 352) + (= x 353) + (= x 354) + (= x 355) + (= x 356) + (= x 357) + (= x 358) + (= x 359) + (= x 360) + (= x 361) + (= x 362) + (= x 363) + (= x 364) + (= x 365) + (= x 366) + (= x 367) + (= x 368) + (= x 369) + (= x 370) + (= x 371) + (= x 372) + (= x 373) + (= x 374) + (= x 375) + (= x 376) + (= x 377) + (= x 378) + (= x 379) + (= x 380) + (= x 381) + (= x 382) + (= x 383) + (= x 384) + (= x 385) + (= x 386) + (= x 387) + (= x 388) + (= x 389) + (= x 390) + (= x 391) + (= x 392) + (= x 393) + (= x 394) + (= x 395) + (= x 396) + (= x 397) + (= x 398) + (= x 399) + (= x 400) + (= x 401) + (= x 402) + (= x 403) + (= x 404) + (= x 405) + (= x 406) + (= x 407) + (= x 408) + (= x 409) + (= x 410) + (= x 411) + (= x 412) + (= x 413) + (= x 414) + (= x 415) + (= x 416) + (= x 417) + (= x 418) + (= x 419) + (= x 420) + (= x 421) + (= x 422) + (= x 423) + (= x 424) + (= x 425) + (= x 426) + (= x 427) + (= x 428) + (= x 429) + (= x 430) + (= x 431) + (= x 432) + (= x 433) + (= x 434) + (= x 435) + (= x 436) + (= x 437) + (= x 438) + (= x 439) + (= x 440) + (= x 441) + (= x 442) + (= x 443) + (= x 444) + (= x 445) + (= x 446) + (= x 447) + (= x 448) + (= x 449) + (= x 450) + (= x 451) + (= x 452) + (= x 453) + (= x 454) + (= x 455) + (= x 456) + (= x 457) + (= x 458) + (= x 459) + (= x 460) + (= x 461) + (= x 462) + (= x 463) + (= x 464) + (= x 465) + (= x 466) + (= x 467) + (= x 468) + (= x 469) + (= x 470) + (= x 471) + (= x 472) + (= x 473) + (= x 474) + (= x 475) + (= x 476) + (= x 477) + (= x 478) + (= x 479) + (= x 480) + (= x 481) + (= x 482) + (= x 483) + (= x 484) + (= x 485) + (= x 486) + (= x 487) + (= x 488) + (= x 489) + (= x 490) + (= x 491) + (= x 492) + (= x 493) + (= x 494) + (= x 495) + (= x 496) + (= x 497) + (= x 498) + (= x 499) + (= x 500) + (= x 501) + (= x 502) + (= x 503) + (= x 504) + (= x 505) + (= x 506) + (= x 507) + (= x 508) + (= x 509) + (= x 510) + (= x 511) + (= x 512) + (= x 513) + (= x 514) + (= x 515) + (= x 516) + (= x 517) + (= x 518) + (= x 519) + (= x 520) + (= x 521) + (= x 522) + (= x 523) + (= x 524) + (= x 525) + (= x 526) + (= x 527) + (= x 528) + (= x 529) + (= x 530) + (= x 531) + (= x 532) + (= x 533) + (= x 534) + (= x 535) + (= x 536) + (= x 537) + (= x 538) + (= x 539) + (= x 540) + (= x 541) + (= x 542) + (= x 543) + (= x 544) + (= x 545) + (= x 546) + (= x 547) + (= x 548) + (= x 549) + (= x 550) + (= x 551) + (= x 552) + (= x 553) + (= x 554) + (= x 555) + (= x 556) + (= x 557) + (= x 558) + (= x 559) + (= x 560) + (= x 561) + (= x 562) + (= x 563) + (= x 564) + (= x 565) + (= x 566) + (= x 567) + (= x 568) + (= x 569) + (= x 570) + (= x 571) + (= x 572) + (= x 573) + (= x 574) + (= x 575) + (= x 576) + (= x 577) + (= x 578) + (= x 579) + (= x 580) + (= x 581) + (= x 582) + (= x 583) + (= x 584) + (= x 585) + (= x 586) + (= x 587) + (= x 588) + (= x 589) + (= x 590) + (= x 591) + (= x 592) + (= x 593) + (= x 594) + (= x 595) + (= x 596) + (= x 597) + (= x 598) + (= x 599) + (= x 600) + (= x 601) + (= x 602) + (= x 603) + (= x 604) + (= x 605) + (= x 606) + (= x 607) + (= x 608) + (= x 609) + (= x 610) + (= x 611) + (= x 612) + (= x 613) + (= x 614) + (= x 615) + (= x 616) + (= x 617) + (= x 618) + (= x 619) + (= x 620) + (= x 621) + (= x 622) + (= x 623) + (= x 624) + (= x 625) + (= x 626) + (= x 627) + (= x 628) + (= x 629) + (= x 630) + (= x 631) + (= x 632) + (= x 633) + (= x 634) + (= x 635) + (= x 636) + (= x 637) + (= x 638) + (= x 639) + (= x 640) + (= x 641) + (= x 642) + (= x 643) + (= x 644) + (= x 645) + (= x 646) + (= x 647) + (= x 648) + (= x 649) + (= x 650) + (= x 651) + (= x 652) + (= x 653) + (= x 654) + (= x 655) + (= x 656) + (= x 657) + (= x 658) + (= x 659) + (= x 660) + (= x 661) + (= x 662) + (= x 663) + (= x 664) + (= x 665) + (= x 666) + (= x 667) + (= x 668) + (= x 669) + (= x 670) + (= x 671) + (= x 672) + (= x 673) + (= x 674) + (= x 675) + (= x 676) + (= x 677) + (= x 678) + (= x 679) + (= x 680) + (= x 681) + (= x 682) + (= x 683) + (= x 684) + (= x 685) + (= x 686) + (= x 687) + (= x 688) + (= x 689) + (= x 690) + (= x 691) + (= x 692) + (= x 693) + (= x 694) + (= x 695) + (= x 696) + (= x 697) + (= x 698) + (= x 699) + (= x 700) + (= x 701) + (= x 702) + (= x 703) + (= x 704) + (= x 705) + (= x 706) + (= x 707) + (= x 708) + (= x 709) + (= x 710) + (= x 711) + (= x 712) + (= x 713) + (= x 714) + (= x 715) + (= x 716) + (= x 717) + (= x 718) + (= x 719) + (= x 720) + (= x 721) + (= x 722) + (= x 723) + (= x 724) + (= x 725) + (= x 726) + (= x 727) + (= x 728) + (= x 729) + (= x 730) + (= x 731) + (= x 732) + (= x 733) + (= x 734) + (= x 735) + (= x 736) + (= x 737) + (= x 738) + (= x 739) + (= x 740) + (= x 741) + (= x 742) + (= x 743) + (= x 744) + (= x 745) + (= x 746) + (= x 747) + (= x 748) + (= x 749) + (= x 750) + (= x 751) + (= x 752) + (= x 753) + (= x 754) + (= x 755) + (= x 756) + (= x 757) + (= x 758) + (= x 759) + (= x 760) + (= x 761) + (= x 762) + (= x 763) + (= x 764) + (= x 765) + (= x 766) + (= x 767) + (= x 768) + (= x 769) + (= x 770) + (= x 771) + (= x 772) + (= x 773) + (= x 774) + (= x 775) + (= x 776) + (= x 777) + (= x 778) + (= x 779) + (= x 780) + (= x 781) + (= x 782) + (= x 783) + (= x 784) + (= x 785) + (= x 786) + (= x 787) + (= x 788) + (= x 789) + (= x 790) + (= x 791) + (= x 792) + (= x 793) + (= x 794) + (= x 795) + (= x 796) + (= x 797) + (= x 798) + (= x 799) + (= x 800) + (= x 801) + (= x 802) + (= x 803) + (= x 804) + (= x 805) + (= x 806) + (= x 807) + (= x 808) + (= x 809) + (= x 810) + (= x 811) + (= x 812) + (= x 813) + (= x 814) + (= x 815) + (= x 816) + (= x 817) + (= x 818) + (= x 819) + (= x 820) + (= x 821) + (= x 822) + (= x 823) + (= x 824) + (= x 825) + (= x 826) + (= x 827) + (= x 828) + (= x 829) + (= x 830) + (= x 831) + (= x 832) + (= x 833) + (= x 834) + (= x 835) + (= x 836) + (= x 837) + (= x 838) + (= x 839) + (= x 840) + (= x 841) + (= x 842) + (= x 843) + (= x 844) + (= x 845) + (= x 846) + (= x 847) + (= x 848) + (= x 849) + (= x 850) + (= x 851) + (= x 852) + (= x 853) + (= x 854) + (= x 855) + (= x 856) + (= x 857) + (= x 858) + (= x 859) + (= x 860) + (= x 861) + (= x 862) + (= x 863) + (= x 864) + (= x 865) + (= x 866) + (= x 867) + (= x 868) + (= x 869) + (= x 870) + (= x 871) + (= x 872) + (= x 873) + (= x 874) + (= x 875) + (= x 876) + (= x 877) + (= x 878) + (= x 879) + (= x 880) + (= x 881) + (= x 882) + (= x 883) + (= x 884) + (= x 885) + (= x 886) + (= x 887) + (= x 888) + (= x 889) + (= x 890) + (= x 891) + (= x 892) + (= x 893) + (= x 894) + (= x 895) + (= x 896) + (= x 897) + (= x 898) + (= x 899) + (= x 900) + (= x 901) + (= x 902) + (= x 903) + (= x 904) + (= x 905) + (= x 906) + (= x 907) + (= x 908) + (= x 909) + (= x 910) + (= x 911) + (= x 912) + (= x 913) + (= x 914) + (= x 915) + (= x 916) + (= x 917) + (= x 918) + (= x 919) + (= x 920) + (= x 921) + (= x 922) + (= x 923) + (= x 924) + (= x 925) + (= x 926) + (= x 927) + (= x 928) + (= x 929) + (= x 930) + (= x 931) + (= x 932) + (= x 933) + (= x 934) + (= x 935) + (= x 936) + (= x 937) + (= x 938) + (= x 939) + (= x 940) + (= x 941) + (= x 942) + (= x 943) + (= x 944) + (= x 945) + (= x 946) + (= x 947) + (= x 948) + (= x 949) + (= x 950) + (= x 951) + (= x 952) + (= x 953) + (= x 954) + (= x 955) + (= x 956) + (= x 957) + (= x 958) + (= x 959) + (= x 960) + (= x 961) + (= x 962) + (= x 963) + (= x 964) + (= x 965) + (= x 966) + (= x 967) + (= x 968) + (= x 969) + (= x 970) + (= x 971) + (= x 972) + (= x 973) + (= x 974) + (= x 975) + (= x 976) + (= x 977) + (= x 978) + (= x 979) + (= x 980) + (= x 981) + (= x 982) + (= x 983) + (= x 984) + (= x 985) + (= x 986) + (= x 987) + (= x 988) + (= x 989) + (= x 990) + (= x 991) + (= x 992) + (= x 993) + (= x 994) + (= x 995) + (= x 996) + (= x 997) + (= x 998) + (= x 999) + (= x 1000) + (= x 1001) + (= x 1002) + (= x 1003) + (= x 1004) + (= x 1005) + (= x 1006) + (= x 1007) + (= x 1008) + (= x 1009) + (= x 1010) + (= x 1011) + (= x 1012) + (= x 1013) + (= x 1014) + (= x 1015) + (= x 1016) + (= x 1017) + (= x 1018) + (= x 1019) + (= x 1020) + (= x 1021) + (= x 1022) + (= x 1023) + (= x 1024) + )) + (itp x)) +) + +(rule (=> + (and + (itp x) + (= x1 (+ x 1)) + ) + (itp x1) + ) +) + + +(rule (=> (and (itp x) + (not (> x 0) + )) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/samples_shrink_big_numbers_2048.smt2 b/bench_horn/samples_shrink_big_numbers_2048.smt2 new file mode 100644 index 000000000..e0d6bf071 --- /dev/null +++ b/bench_horn/samples_shrink_big_numbers_2048.smt2 @@ -0,0 +1,285 @@ +(declare-rel itp (Int)) +(declare-var x Int) +(declare-var x1 Int) + +(declare-rel fail ()) + +(rule (=> (and + (or + (= x 1) (= x 2) (= x 3) (= x 4) (= x 5) (= x 6) (= x 7) (= x 8) + (= x 9) (= x 10) (= x 11) (= x 12) (= x 13) (= x 14) (= x 15) (= x 16) + (= x 17) (= x 18) (= x 19) (= x 20) (= x 21) (= x 22) (= x 23) (= x 24) + (= x 25) (= x 26) (= x 27) (= x 28) (= x 29) (= x 30) (= x 31) (= x 32) + (= x 33) (= x 34) (= x 35) (= x 36) (= x 37) (= x 38) (= x 39) (= x 40) + (= x 41) (= x 42) (= x 43) (= x 44) (= x 45) (= x 46) (= x 47) (= x 48) + (= x 49) (= x 50) (= x 51) (= x 52) (= x 53) (= x 54) (= x 55) (= x 56) + (= x 57) (= x 58) (= x 59) (= x 60) (= x 61) (= x 62) (= x 63) (= x 64) + (= x 65) (= x 66) (= x 67) (= x 68) (= x 69) (= x 70) (= x 71) (= x 72) + (= x 73) (= x 74) (= x 75) (= x 76) (= x 77) (= x 78) (= x 79) (= x 80) + (= x 81) (= x 82) (= x 83) (= x 84) (= x 85) (= x 86) (= x 87) (= x 88) + (= x 89) (= x 90) (= x 91) (= x 92) (= x 93) (= x 94) (= x 95) (= x 96) + (= x 97) (= x 98) (= x 99) (= x 100) (= x 101) (= x 102) (= x 103) (= x 104) + (= x 105) (= x 106) (= x 107) (= x 108) (= x 109) (= x 110) (= x 111) (= x 112) + (= x 113) (= x 114) (= x 115) (= x 116) (= x 117) (= x 118) (= x 119) (= x 120) + (= x 121) (= x 122) (= x 123) (= x 124) (= x 125) (= x 126) (= x 127) (= x 128) + (= x 129) (= x 130) (= x 131) (= x 132) (= x 133) (= x 134) (= x 135) (= x 136) + (= x 137) (= x 138) (= x 139) (= x 140) (= x 141) (= x 142) (= x 143) (= x 144) + (= x 145) (= x 146) (= x 147) (= x 148) (= x 149) (= x 150) (= x 151) (= x 152) + (= x 153) (= x 154) (= x 155) (= x 156) (= x 157) (= x 158) (= x 159) (= x 160) + (= x 161) (= x 162) (= x 163) (= x 164) (= x 165) (= x 166) (= x 167) (= x 168) + (= x 169) (= x 170) (= x 171) (= x 172) (= x 173) (= x 174) (= x 175) (= x 176) + (= x 177) (= x 178) (= x 179) (= x 180) (= x 181) (= x 182) (= x 183) (= x 184) + (= x 185) (= x 186) (= x 187) (= x 188) (= x 189) (= x 190) (= x 191) (= x 192) + (= x 193) (= x 194) (= x 195) (= x 196) (= x 197) (= x 198) (= x 199) (= x 200) + (= x 201) (= x 202) (= x 203) (= x 204) (= x 205) (= x 206) (= x 207) (= x 208) + (= x 209) (= x 210) (= x 211) (= x 212) (= x 213) (= x 214) (= x 215) (= x 216) + (= x 217) (= x 218) (= x 219) (= x 220) (= x 221) (= x 222) (= x 223) (= x 224) + (= x 225) (= x 226) (= x 227) (= x 228) (= x 229) (= x 230) (= x 231) (= x 232) + (= x 233) (= x 234) (= x 235) (= x 236) (= x 237) (= x 238) (= x 239) (= x 240) + (= x 241) (= x 242) (= x 243) (= x 244) (= x 245) (= x 246) (= x 247) (= x 248) + (= x 249) (= x 250) (= x 251) (= x 252) (= x 253) (= x 254) (= x 255) (= x 256) + (= x 257) (= x 258) (= x 259) (= x 260) (= x 261) (= x 262) (= x 263) (= x 264) + (= x 265) (= x 266) (= x 267) (= x 268) (= x 269) (= x 270) (= x 271) (= x 272) + (= x 273) (= x 274) (= x 275) (= x 276) (= x 277) (= x 278) (= x 279) (= x 280) + (= x 281) (= x 282) (= x 283) (= x 284) (= x 285) (= x 286) (= x 287) (= x 288) + (= x 289) (= x 290) (= x 291) (= x 292) (= x 293) (= x 294) (= x 295) (= x 296) + (= x 297) (= x 298) (= x 299) (= x 300) (= x 301) (= x 302) (= x 303) (= x 304) + (= x 305) (= x 306) (= x 307) (= x 308) (= x 309) (= x 310) (= x 311) (= x 312) + (= x 313) (= x 314) (= x 315) (= x 316) (= x 317) (= x 318) (= x 319) (= x 320) + (= x 321) (= x 322) (= x 323) (= x 324) (= x 325) (= x 326) (= x 327) (= x 328) + (= x 329) (= x 330) (= x 331) (= x 332) (= x 333) (= x 334) (= x 335) (= x 336) + (= x 337) (= x 338) (= x 339) (= x 340) (= x 341) (= x 342) (= x 343) (= x 344) + (= x 345) (= x 346) (= x 347) (= x 348) (= x 349) (= x 350) (= x 351) (= x 352) + (= x 353) (= x 354) (= x 355) (= x 356) (= x 357) (= x 358) (= x 359) (= x 360) + (= x 361) (= x 362) (= x 363) (= x 364) (= x 365) (= x 366) (= x 367) (= x 368) + (= x 369) (= x 370) (= x 371) (= x 372) (= x 373) (= x 374) (= x 375) (= x 376) + (= x 377) (= x 378) (= x 379) (= x 380) (= x 381) (= x 382) (= x 383) (= x 384) + (= x 385) (= x 386) (= x 387) (= x 388) (= x 389) (= x 390) (= x 391) (= x 392) + (= x 393) (= x 394) (= x 395) (= x 396) (= x 397) (= x 398) (= x 399) (= x 400) + (= x 401) (= x 402) (= x 403) (= x 404) (= x 405) (= x 406) (= x 407) (= x 408) + (= x 409) (= x 410) (= x 411) (= x 412) (= x 413) (= x 414) (= x 415) (= x 416) + (= x 417) (= x 418) (= x 419) (= x 420) (= x 421) (= x 422) (= x 423) (= x 424) + (= x 425) (= x 426) (= x 427) (= x 428) (= x 429) (= x 430) (= x 431) (= x 432) + (= x 433) (= x 434) (= x 435) (= x 436) (= x 437) (= x 438) (= x 439) (= x 440) + (= x 441) (= x 442) (= x 443) (= x 444) (= x 445) (= x 446) (= x 447) (= x 448) + (= x 449) (= x 450) (= x 451) (= x 452) (= x 453) (= x 454) (= x 455) (= x 456) + (= x 457) (= x 458) (= x 459) (= x 460) (= x 461) (= x 462) (= x 463) (= x 464) + (= x 465) (= x 466) (= x 467) (= x 468) (= x 469) (= x 470) (= x 471) (= x 472) + (= x 473) (= x 474) (= x 475) (= x 476) (= x 477) (= x 478) (= x 479) (= x 480) + (= x 481) (= x 482) (= x 483) (= x 484) (= x 485) (= x 486) (= x 487) (= x 488) + (= x 489) (= x 490) (= x 491) (= x 492) (= x 493) (= x 494) (= x 495) (= x 496) + (= x 497) (= x 498) (= x 499) (= x 500) (= x 501) (= x 502) (= x 503) (= x 504) + (= x 505) (= x 506) (= x 507) (= x 508) (= x 509) (= x 510) (= x 511) (= x 512) + (= x 513) (= x 514) (= x 515) (= x 516) (= x 517) (= x 518) (= x 519) (= x 520) + (= x 521) (= x 522) (= x 523) (= x 524) (= x 525) (= x 526) (= x 527) (= x 528) + (= x 529) (= x 530) (= x 531) (= x 532) (= x 533) (= x 534) (= x 535) (= x 536) + (= x 537) (= x 538) (= x 539) (= x 540) (= x 541) (= x 542) (= x 543) (= x 544) + (= x 545) (= x 546) (= x 547) (= x 548) (= x 549) (= x 550) (= x 551) (= x 552) + (= x 553) (= x 554) (= x 555) (= x 556) (= x 557) (= x 558) (= x 559) (= x 560) + (= x 561) (= x 562) (= x 563) (= x 564) (= x 565) (= x 566) (= x 567) (= x 568) + (= x 569) (= x 570) (= x 571) (= x 572) (= x 573) (= x 574) (= x 575) (= x 576) + (= x 577) (= x 578) (= x 579) (= x 580) (= x 581) (= x 582) (= x 583) (= x 584) + (= x 585) (= x 586) (= x 587) (= x 588) (= x 589) (= x 590) (= x 591) (= x 592) + (= x 593) (= x 594) (= x 595) (= x 596) (= x 597) (= x 598) (= x 599) (= x 600) + (= x 601) (= x 602) (= x 603) (= x 604) (= x 605) (= x 606) (= x 607) (= x 608) + (= x 609) (= x 610) (= x 611) (= x 612) (= x 613) (= x 614) (= x 615) (= x 616) + (= x 617) (= x 618) (= x 619) (= x 620) (= x 621) (= x 622) (= x 623) (= x 624) + (= x 625) (= x 626) (= x 627) (= x 628) (= x 629) (= x 630) (= x 631) (= x 632) + (= x 633) (= x 634) (= x 635) (= x 636) (= x 637) (= x 638) (= x 639) (= x 640) + (= x 641) (= x 642) (= x 643) (= x 644) (= x 645) (= x 646) (= x 647) (= x 648) + (= x 649) (= x 650) (= x 651) (= x 652) (= x 653) (= x 654) (= x 655) (= x 656) + (= x 657) (= x 658) (= x 659) (= x 660) (= x 661) (= x 662) (= x 663) (= x 664) + (= x 665) (= x 666) (= x 667) (= x 668) (= x 669) (= x 670) (= x 671) (= x 672) + (= x 673) (= x 674) (= x 675) (= x 676) (= x 677) (= x 678) (= x 679) (= x 680) + (= x 681) (= x 682) (= x 683) (= x 684) (= x 685) (= x 686) (= x 687) (= x 688) + (= x 689) (= x 690) (= x 691) (= x 692) (= x 693) (= x 694) (= x 695) (= x 696) + (= x 697) (= x 698) (= x 699) (= x 700) (= x 701) (= x 702) (= x 703) (= x 704) + (= x 705) (= x 706) (= x 707) (= x 708) (= x 709) (= x 710) (= x 711) (= x 712) + (= x 713) (= x 714) (= x 715) (= x 716) (= x 717) (= x 718) (= x 719) (= x 720) + (= x 721) (= x 722) (= x 723) (= x 724) (= x 725) (= x 726) (= x 727) (= x 728) + (= x 729) (= x 730) (= x 731) (= x 732) (= x 733) (= x 734) (= x 735) (= x 736) + (= x 737) (= x 738) (= x 739) (= x 740) (= x 741) (= x 742) (= x 743) (= x 744) + (= x 745) (= x 746) (= x 747) (= x 748) (= x 749) (= x 750) (= x 751) (= x 752) + (= x 753) (= x 754) (= x 755) (= x 756) (= x 757) (= x 758) (= x 759) (= x 760) + (= x 761) (= x 762) (= x 763) (= x 764) (= x 765) (= x 766) (= x 767) (= x 768) + (= x 769) (= x 770) (= x 771) (= x 772) (= x 773) (= x 774) (= x 775) (= x 776) + (= x 777) (= x 778) (= x 779) (= x 780) (= x 781) (= x 782) (= x 783) (= x 784) + (= x 785) (= x 786) (= x 787) (= x 788) (= x 789) (= x 790) (= x 791) (= x 792) + (= x 793) (= x 794) (= x 795) (= x 796) (= x 797) (= x 798) (= x 799) (= x 800) + (= x 801) (= x 802) (= x 803) (= x 804) (= x 805) (= x 806) (= x 807) (= x 808) + (= x 809) (= x 810) (= x 811) (= x 812) (= x 813) (= x 814) (= x 815) (= x 816) + (= x 817) (= x 818) (= x 819) (= x 820) (= x 821) (= x 822) (= x 823) (= x 824) + (= x 825) (= x 826) (= x 827) (= x 828) (= x 829) (= x 830) (= x 831) (= x 832) + (= x 833) (= x 834) (= x 835) (= x 836) (= x 837) (= x 838) (= x 839) (= x 840) + (= x 841) (= x 842) (= x 843) (= x 844) (= x 845) (= x 846) (= x 847) (= x 848) + (= x 849) (= x 850) (= x 851) (= x 852) (= x 853) (= x 854) (= x 855) (= x 856) + (= x 857) (= x 858) (= x 859) (= x 860) (= x 861) (= x 862) (= x 863) (= x 864) + (= x 865) (= x 866) (= x 867) (= x 868) (= x 869) (= x 870) (= x 871) (= x 872) + (= x 873) (= x 874) (= x 875) (= x 876) (= x 877) (= x 878) (= x 879) (= x 880) + (= x 881) (= x 882) (= x 883) (= x 884) (= x 885) (= x 886) (= x 887) (= x 888) + (= x 889) (= x 890) (= x 891) (= x 892) (= x 893) (= x 894) (= x 895) (= x 896) + (= x 897) (= x 898) (= x 899) (= x 900) (= x 901) (= x 902) (= x 903) (= x 904) + (= x 905) (= x 906) (= x 907) (= x 908) (= x 909) (= x 910) (= x 911) (= x 912) + (= x 913) (= x 914) (= x 915) (= x 916) (= x 917) (= x 918) (= x 919) (= x 920) + (= x 921) (= x 922) (= x 923) (= x 924) (= x 925) (= x 926) (= x 927) (= x 928) + (= x 929) (= x 930) (= x 931) (= x 932) (= x 933) (= x 934) (= x 935) (= x 936) + (= x 937) (= x 938) (= x 939) (= x 940) (= x 941) (= x 942) (= x 943) (= x 944) + (= x 945) (= x 946) (= x 947) (= x 948) (= x 949) (= x 950) (= x 951) (= x 952) + (= x 953) (= x 954) (= x 955) (= x 956) (= x 957) (= x 958) (= x 959) (= x 960) + (= x 961) (= x 962) (= x 963) (= x 964) (= x 965) (= x 966) (= x 967) (= x 968) + (= x 969) (= x 970) (= x 971) (= x 972) (= x 973) (= x 974) (= x 975) (= x 976) + (= x 977) (= x 978) (= x 979) (= x 980) (= x 981) (= x 982) (= x 983) (= x 984) + (= x 985) (= x 986) (= x 987) (= x 988) (= x 989) (= x 990) (= x 991) (= x 992) + (= x 993) (= x 994) (= x 995) (= x 996) (= x 997) (= x 998) (= x 999) (= x 1000) + (= x 1001) (= x 1002) (= x 1003) (= x 1004) (= x 1005) (= x 1006) (= x 1007) (= x 1008) + (= x 1009) (= x 1010) (= x 1011) (= x 1012) (= x 1013) (= x 1014) (= x 1015) (= x 1016) + (= x 1017) (= x 1018) (= x 1019) (= x 1020) (= x 1021) (= x 1022) (= x 1023) (= x 1024) + (= x 1025) (= x 1026) (= x 1027) (= x 1028) (= x 1029) (= x 1030) (= x 1031) (= x 1032) + (= x 1033) (= x 1034) (= x 1035) (= x 1036) (= x 1037) (= x 1038) (= x 1039) (= x 1040) + (= x 1041) (= x 1042) (= x 1043) (= x 1044) (= x 1045) (= x 1046) (= x 1047) (= x 1048) + (= x 1049) (= x 1050) (= x 1051) (= x 1052) (= x 1053) (= x 1054) (= x 1055) (= x 1056) + (= x 1057) (= x 1058) (= x 1059) (= x 1060) (= x 1061) (= x 1062) (= x 1063) (= x 1064) + (= x 1065) (= x 1066) (= x 1067) (= x 1068) (= x 1069) (= x 1070) (= x 1071) (= x 1072) + (= x 1073) (= x 1074) (= x 1075) (= x 1076) (= x 1077) (= x 1078) (= x 1079) (= x 1080) + (= x 1081) (= x 1082) (= x 1083) (= x 1084) (= x 1085) (= x 1086) (= x 1087) (= x 1088) + (= x 1089) (= x 1090) (= x 1091) (= x 1092) (= x 1093) (= x 1094) (= x 1095) (= x 1096) + (= x 1097) (= x 1098) (= x 1099) (= x 1100) (= x 1101) (= x 1102) (= x 1103) (= x 1104) + (= x 1105) (= x 1106) (= x 1107) (= x 1108) (= x 1109) (= x 1110) (= x 1111) (= x 1112) + (= x 1113) (= x 1114) (= x 1115) (= x 1116) (= x 1117) (= x 1118) (= x 1119) (= x 1120) + (= x 1121) (= x 1122) (= x 1123) (= x 1124) (= x 1125) (= x 1126) (= x 1127) (= x 1128) + (= x 1129) (= x 1130) (= x 1131) (= x 1132) (= x 1133) (= x 1134) (= x 1135) (= x 1136) + (= x 1137) (= x 1138) (= x 1139) (= x 1140) (= x 1141) (= x 1142) (= x 1143) (= x 1144) + (= x 1145) (= x 1146) (= x 1147) (= x 1148) (= x 1149) (= x 1150) (= x 1151) (= x 1152) + (= x 1153) (= x 1154) (= x 1155) (= x 1156) (= x 1157) (= x 1158) (= x 1159) (= x 1160) + (= x 1161) (= x 1162) (= x 1163) (= x 1164) (= x 1165) (= x 1166) (= x 1167) (= x 1168) + (= x 1169) (= x 1170) (= x 1171) (= x 1172) (= x 1173) (= x 1174) (= x 1175) (= x 1176) + (= x 1177) (= x 1178) (= x 1179) (= x 1180) (= x 1181) (= x 1182) (= x 1183) (= x 1184) + (= x 1185) (= x 1186) (= x 1187) (= x 1188) (= x 1189) (= x 1190) (= x 1191) (= x 1192) + (= x 1193) (= x 1194) (= x 1195) (= x 1196) (= x 1197) (= x 1198) (= x 1199) (= x 1200) + (= x 1201) (= x 1202) (= x 1203) (= x 1204) (= x 1205) (= x 1206) (= x 1207) (= x 1208) + (= x 1209) (= x 1210) (= x 1211) (= x 1212) (= x 1213) (= x 1214) (= x 1215) (= x 1216) + (= x 1217) (= x 1218) (= x 1219) (= x 1220) (= x 1221) (= x 1222) (= x 1223) (= x 1224) + (= x 1225) (= x 1226) (= x 1227) (= x 1228) (= x 1229) (= x 1230) (= x 1231) (= x 1232) + (= x 1233) (= x 1234) (= x 1235) (= x 1236) (= x 1237) (= x 1238) (= x 1239) (= x 1240) + (= x 1241) (= x 1242) (= x 1243) (= x 1244) (= x 1245) (= x 1246) (= x 1247) (= x 1248) + (= x 1249) (= x 1250) (= x 1251) (= x 1252) (= x 1253) (= x 1254) (= x 1255) (= x 1256) + (= x 1257) (= x 1258) (= x 1259) (= x 1260) (= x 1261) (= x 1262) (= x 1263) (= x 1264) + (= x 1265) (= x 1266) (= x 1267) (= x 1268) (= x 1269) (= x 1270) (= x 1271) (= x 1272) + (= x 1273) (= x 1274) (= x 1275) (= x 1276) (= x 1277) (= x 1278) (= x 1279) (= x 1280) + (= x 1281) (= x 1282) (= x 1283) (= x 1284) (= x 1285) (= x 1286) (= x 1287) (= x 1288) + (= x 1289) (= x 1290) (= x 1291) (= x 1292) (= x 1293) (= x 1294) (= x 1295) (= x 1296) + (= x 1297) (= x 1298) (= x 1299) (= x 1300) (= x 1301) (= x 1302) (= x 1303) (= x 1304) + (= x 1305) (= x 1306) (= x 1307) (= x 1308) (= x 1309) (= x 1310) (= x 1311) (= x 1312) + (= x 1313) (= x 1314) (= x 1315) (= x 1316) (= x 1317) (= x 1318) (= x 1319) (= x 1320) + (= x 1321) (= x 1322) (= x 1323) (= x 1324) (= x 1325) (= x 1326) (= x 1327) (= x 1328) + (= x 1329) (= x 1330) (= x 1331) (= x 1332) (= x 1333) (= x 1334) (= x 1335) (= x 1336) + (= x 1337) (= x 1338) (= x 1339) (= x 1340) (= x 1341) (= x 1342) (= x 1343) (= x 1344) + (= x 1345) (= x 1346) (= x 1347) (= x 1348) (= x 1349) (= x 1350) (= x 1351) (= x 1352) + (= x 1353) (= x 1354) (= x 1355) (= x 1356) (= x 1357) (= x 1358) (= x 1359) (= x 1360) + (= x 1361) (= x 1362) (= x 1363) (= x 1364) (= x 1365) (= x 1366) (= x 1367) (= x 1368) + (= x 1369) (= x 1370) (= x 1371) (= x 1372) (= x 1373) (= x 1374) (= x 1375) (= x 1376) + (= x 1377) (= x 1378) (= x 1379) (= x 1380) (= x 1381) (= x 1382) (= x 1383) (= x 1384) + (= x 1385) (= x 1386) (= x 1387) (= x 1388) (= x 1389) (= x 1390) (= x 1391) (= x 1392) + (= x 1393) (= x 1394) (= x 1395) (= x 1396) (= x 1397) (= x 1398) (= x 1399) (= x 1400) + (= x 1401) (= x 1402) (= x 1403) (= x 1404) (= x 1405) (= x 1406) (= x 1407) (= x 1408) + (= x 1409) (= x 1410) (= x 1411) (= x 1412) (= x 1413) (= x 1414) (= x 1415) (= x 1416) + (= x 1417) (= x 1418) (= x 1419) (= x 1420) (= x 1421) (= x 1422) (= x 1423) (= x 1424) + (= x 1425) (= x 1426) (= x 1427) (= x 1428) (= x 1429) (= x 1430) (= x 1431) (= x 1432) + (= x 1433) (= x 1434) (= x 1435) (= x 1436) (= x 1437) (= x 1438) (= x 1439) (= x 1440) + (= x 1441) (= x 1442) (= x 1443) (= x 1444) (= x 1445) (= x 1446) (= x 1447) (= x 1448) + (= x 1449) (= x 1450) (= x 1451) (= x 1452) (= x 1453) (= x 1454) (= x 1455) (= x 1456) + (= x 1457) (= x 1458) (= x 1459) (= x 1460) (= x 1461) (= x 1462) (= x 1463) (= x 1464) + (= x 1465) (= x 1466) (= x 1467) (= x 1468) (= x 1469) (= x 1470) (= x 1471) (= x 1472) + (= x 1473) (= x 1474) (= x 1475) (= x 1476) (= x 1477) (= x 1478) (= x 1479) (= x 1480) + (= x 1481) (= x 1482) (= x 1483) (= x 1484) (= x 1485) (= x 1486) (= x 1487) (= x 1488) + (= x 1489) (= x 1490) (= x 1491) (= x 1492) (= x 1493) (= x 1494) (= x 1495) (= x 1496) + (= x 1497) (= x 1498) (= x 1499) (= x 1500) (= x 1501) (= x 1502) (= x 1503) (= x 1504) + (= x 1505) (= x 1506) (= x 1507) (= x 1508) (= x 1509) (= x 1510) (= x 1511) (= x 1512) + (= x 1513) (= x 1514) (= x 1515) (= x 1516) (= x 1517) (= x 1518) (= x 1519) (= x 1520) + (= x 1521) (= x 1522) (= x 1523) (= x 1524) (= x 1525) (= x 1526) (= x 1527) (= x 1528) + (= x 1529) (= x 1530) (= x 1531) (= x 1532) (= x 1533) (= x 1534) (= x 1535) (= x 1536) + (= x 1537) (= x 1538) (= x 1539) (= x 1540) (= x 1541) (= x 1542) (= x 1543) (= x 1544) + (= x 1545) (= x 1546) (= x 1547) (= x 1548) (= x 1549) (= x 1550) (= x 1551) (= x 1552) + (= x 1553) (= x 1554) (= x 1555) (= x 1556) (= x 1557) (= x 1558) (= x 1559) (= x 1560) + (= x 1561) (= x 1562) (= x 1563) (= x 1564) (= x 1565) (= x 1566) (= x 1567) (= x 1568) + (= x 1569) (= x 1570) (= x 1571) (= x 1572) (= x 1573) (= x 1574) (= x 1575) (= x 1576) + (= x 1577) (= x 1578) (= x 1579) (= x 1580) (= x 1581) (= x 1582) (= x 1583) (= x 1584) + (= x 1585) (= x 1586) (= x 1587) (= x 1588) (= x 1589) (= x 1590) (= x 1591) (= x 1592) + (= x 1593) (= x 1594) (= x 1595) (= x 1596) (= x 1597) (= x 1598) (= x 1599) (= x 1600) + (= x 1601) (= x 1602) (= x 1603) (= x 1604) (= x 1605) (= x 1606) (= x 1607) (= x 1608) + (= x 1609) (= x 1610) (= x 1611) (= x 1612) (= x 1613) (= x 1614) (= x 1615) (= x 1616) + (= x 1617) (= x 1618) (= x 1619) (= x 1620) (= x 1621) (= x 1622) (= x 1623) (= x 1624) + (= x 1625) (= x 1626) (= x 1627) (= x 1628) (= x 1629) (= x 1630) (= x 1631) (= x 1632) + (= x 1633) (= x 1634) (= x 1635) (= x 1636) (= x 1637) (= x 1638) (= x 1639) (= x 1640) + (= x 1641) (= x 1642) (= x 1643) (= x 1644) (= x 1645) (= x 1646) (= x 1647) (= x 1648) + (= x 1649) (= x 1650) (= x 1651) (= x 1652) (= x 1653) (= x 1654) (= x 1655) (= x 1656) + (= x 1657) (= x 1658) (= x 1659) (= x 1660) (= x 1661) (= x 1662) (= x 1663) (= x 1664) + (= x 1665) (= x 1666) (= x 1667) (= x 1668) (= x 1669) (= x 1670) (= x 1671) (= x 1672) + (= x 1673) (= x 1674) (= x 1675) (= x 1676) (= x 1677) (= x 1678) (= x 1679) (= x 1680) + (= x 1681) (= x 1682) (= x 1683) (= x 1684) (= x 1685) (= x 1686) (= x 1687) (= x 1688) + (= x 1689) (= x 1690) (= x 1691) (= x 1692) (= x 1693) (= x 1694) (= x 1695) (= x 1696) + (= x 1697) (= x 1698) (= x 1699) (= x 1700) (= x 1701) (= x 1702) (= x 1703) (= x 1704) + (= x 1705) (= x 1706) (= x 1707) (= x 1708) (= x 1709) (= x 1710) (= x 1711) (= x 1712) + (= x 1713) (= x 1714) (= x 1715) (= x 1716) (= x 1717) (= x 1718) (= x 1719) (= x 1720) + (= x 1721) (= x 1722) (= x 1723) (= x 1724) (= x 1725) (= x 1726) (= x 1727) (= x 1728) + (= x 1729) (= x 1730) (= x 1731) (= x 1732) (= x 1733) (= x 1734) (= x 1735) (= x 1736) + (= x 1737) (= x 1738) (= x 1739) (= x 1740) (= x 1741) (= x 1742) (= x 1743) (= x 1744) + (= x 1745) (= x 1746) (= x 1747) (= x 1748) (= x 1749) (= x 1750) (= x 1751) (= x 1752) + (= x 1753) (= x 1754) (= x 1755) (= x 1756) (= x 1757) (= x 1758) (= x 1759) (= x 1760) + (= x 1761) (= x 1762) (= x 1763) (= x 1764) (= x 1765) (= x 1766) (= x 1767) (= x 1768) + (= x 1769) (= x 1770) (= x 1771) (= x 1772) (= x 1773) (= x 1774) (= x 1775) (= x 1776) + (= x 1777) (= x 1778) (= x 1779) (= x 1780) (= x 1781) (= x 1782) (= x 1783) (= x 1784) + (= x 1785) (= x 1786) (= x 1787) (= x 1788) (= x 1789) (= x 1790) (= x 1791) (= x 1792) + (= x 1793) (= x 1794) (= x 1795) (= x 1796) (= x 1797) (= x 1798) (= x 1799) (= x 1800) + (= x 1801) (= x 1802) (= x 1803) (= x 1804) (= x 1805) (= x 1806) (= x 1807) (= x 1808) + (= x 1809) (= x 1810) (= x 1811) (= x 1812) (= x 1813) (= x 1814) (= x 1815) (= x 1816) + (= x 1817) (= x 1818) (= x 1819) (= x 1820) (= x 1821) (= x 1822) (= x 1823) (= x 1824) + (= x 1825) (= x 1826) (= x 1827) (= x 1828) (= x 1829) (= x 1830) (= x 1831) (= x 1832) + (= x 1833) (= x 1834) (= x 1835) (= x 1836) (= x 1837) (= x 1838) (= x 1839) (= x 1840) + (= x 1841) (= x 1842) (= x 1843) (= x 1844) (= x 1845) (= x 1846) (= x 1847) (= x 1848) + (= x 1849) (= x 1850) (= x 1851) (= x 1852) (= x 1853) (= x 1854) (= x 1855) (= x 1856) + (= x 1857) (= x 1858) (= x 1859) (= x 1860) (= x 1861) (= x 1862) (= x 1863) (= x 1864) + (= x 1865) (= x 1866) (= x 1867) (= x 1868) (= x 1869) (= x 1870) (= x 1871) (= x 1872) + (= x 1873) (= x 1874) (= x 1875) (= x 1876) (= x 1877) (= x 1878) (= x 1879) (= x 1880) + (= x 1881) (= x 1882) (= x 1883) (= x 1884) (= x 1885) (= x 1886) (= x 1887) (= x 1888) + (= x 1889) (= x 1890) (= x 1891) (= x 1892) (= x 1893) (= x 1894) (= x 1895) (= x 1896) + (= x 1897) (= x 1898) (= x 1899) (= x 1900) (= x 1901) (= x 1902) (= x 1903) (= x 1904) + (= x 1905) (= x 1906) (= x 1907) (= x 1908) (= x 1909) (= x 1910) (= x 1911) (= x 1912) + (= x 1913) (= x 1914) (= x 1915) (= x 1916) (= x 1917) (= x 1918) (= x 1919) (= x 1920) + (= x 1921) (= x 1922) (= x 1923) (= x 1924) (= x 1925) (= x 1926) (= x 1927) (= x 1928) + (= x 1929) (= x 1930) (= x 1931) (= x 1932) (= x 1933) (= x 1934) (= x 1935) (= x 1936) + (= x 1937) (= x 1938) (= x 1939) (= x 1940) (= x 1941) (= x 1942) (= x 1943) (= x 1944) + (= x 1945) (= x 1946) (= x 1947) (= x 1948) (= x 1949) (= x 1950) (= x 1951) (= x 1952) + (= x 1953) (= x 1954) (= x 1955) (= x 1956) (= x 1957) (= x 1958) (= x 1959) (= x 1960) + (= x 1961) (= x 1962) (= x 1963) (= x 1964) (= x 1965) (= x 1966) (= x 1967) (= x 1968) + (= x 1969) (= x 1970) (= x 1971) (= x 1972) (= x 1973) (= x 1974) (= x 1975) (= x 1976) + (= x 1977) (= x 1978) (= x 1979) (= x 1980) (= x 1981) (= x 1982) (= x 1983) (= x 1984) + (= x 1985) (= x 1986) (= x 1987) (= x 1988) (= x 1989) (= x 1990) (= x 1991) (= x 1992) + (= x 1993) (= x 1994) (= x 1995) (= x 1996) (= x 1997) (= x 1998) (= x 1999) (= x 2000) + (= x 2001) (= x 2002) (= x 2003) (= x 2004) (= x 2005) (= x 2006) (= x 2007) (= x 2008) + (= x 2009) (= x 2010) (= x 2011) (= x 2012) (= x 2013) (= x 2014) (= x 2015) (= x 2016) + (= x 2017) (= x 2018) (= x 2019) (= x 2020) (= x 2021) (= x 2022) (= x 2023) (= x 2024) + (= x 2025) (= x 2026) (= x 2027) (= x 2028) (= x 2029) (= x 2030) (= x 2031) (= x 2032) + (= x 2033) (= x 2034) (= x 2035) (= x 2036) (= x 2037) (= x 2038) (= x 2039) (= x 2040) + (= x 2041) (= x 2042) (= x 2043) (= x 2044) (= x 2045) (= x 2046) (= x 2047) (= x 2048) + )) + (itp x)) +) + +(rule (=> + (and + (itp x) + (= x1 (+ x 1)) + ) + (itp x1) + ) +) + + +(rule (=> (and (itp x) + (not (> x 0) + )) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/samples_shrink_big_numbers_4096.smt2 b/bench_horn/samples_shrink_big_numbers_4096.smt2 new file mode 100644 index 000000000..9270434ff --- /dev/null +++ b/bench_horn/samples_shrink_big_numbers_4096.smt2 @@ -0,0 +1,541 @@ +(declare-rel itp (Int)) +(declare-var x Int) +(declare-var x1 Int) + +(declare-rel fail ()) + +(rule (=> (and + (or + (= x 1) (= x 2) (= x 3) (= x 4) (= x 5) (= x 6) (= x 7) (= x 8) + (= x 9) (= x 10) (= x 11) (= x 12) (= x 13) (= x 14) (= x 15) (= x 16) + (= x 17) (= x 18) (= x 19) (= x 20) (= x 21) (= x 22) (= x 23) (= x 24) + (= x 25) (= x 26) (= x 27) (= x 28) (= x 29) (= x 30) (= x 31) (= x 32) + (= x 33) (= x 34) (= x 35) (= x 36) (= x 37) (= x 38) (= x 39) (= x 40) + (= x 41) (= x 42) (= x 43) (= x 44) (= x 45) (= x 46) (= x 47) (= x 48) + (= x 49) (= x 50) (= x 51) (= x 52) (= x 53) (= x 54) (= x 55) (= x 56) + (= x 57) (= x 58) (= x 59) (= x 60) (= x 61) (= x 62) (= x 63) (= x 64) + (= x 65) (= x 66) (= x 67) (= x 68) (= x 69) (= x 70) (= x 71) (= x 72) + (= x 73) (= x 74) (= x 75) (= x 76) (= x 77) (= x 78) (= x 79) (= x 80) + (= x 81) (= x 82) (= x 83) (= x 84) (= x 85) (= x 86) (= x 87) (= x 88) + (= x 89) (= x 90) (= x 91) (= x 92) (= x 93) (= x 94) (= x 95) (= x 96) + (= x 97) (= x 98) (= x 99) (= x 100) (= x 101) (= x 102) (= x 103) (= x 104) + (= x 105) (= x 106) (= x 107) (= x 108) (= x 109) (= x 110) (= x 111) (= x 112) + (= x 113) (= x 114) (= x 115) (= x 116) (= x 117) (= x 118) (= x 119) (= x 120) + (= x 121) (= x 122) (= x 123) (= x 124) (= x 125) (= x 126) (= x 127) (= x 128) + (= x 129) (= x 130) (= x 131) (= x 132) (= x 133) (= x 134) (= x 135) (= x 136) + (= x 137) (= x 138) (= x 139) (= x 140) (= x 141) (= x 142) (= x 143) (= x 144) + (= x 145) (= x 146) (= x 147) (= x 148) (= x 149) (= x 150) (= x 151) (= x 152) + (= x 153) (= x 154) (= x 155) (= x 156) (= x 157) (= x 158) (= x 159) (= x 160) + (= x 161) (= x 162) (= x 163) (= x 164) (= x 165) (= x 166) (= x 167) (= x 168) + (= x 169) (= x 170) (= x 171) (= x 172) (= x 173) (= x 174) (= x 175) (= x 176) + (= x 177) (= x 178) (= x 179) (= x 180) (= x 181) (= x 182) (= x 183) (= x 184) + (= x 185) (= x 186) (= x 187) (= x 188) (= x 189) (= x 190) (= x 191) (= x 192) + (= x 193) (= x 194) (= x 195) (= x 196) (= x 197) (= x 198) (= x 199) (= x 200) + (= x 201) (= x 202) (= x 203) (= x 204) (= x 205) (= x 206) (= x 207) (= x 208) + (= x 209) (= x 210) (= x 211) (= x 212) (= x 213) (= x 214) (= x 215) (= x 216) + (= x 217) (= x 218) (= x 219) (= x 220) (= x 221) (= x 222) (= x 223) (= x 224) + (= x 225) (= x 226) (= x 227) (= x 228) (= x 229) (= x 230) (= x 231) (= x 232) + (= x 233) (= x 234) (= x 235) (= x 236) (= x 237) (= x 238) (= x 239) (= x 240) + (= x 241) (= x 242) (= x 243) (= x 244) (= x 245) (= x 246) (= x 247) (= x 248) + (= x 249) (= x 250) (= x 251) (= x 252) (= x 253) (= x 254) (= x 255) (= x 256) + (= x 257) (= x 258) (= x 259) (= x 260) (= x 261) (= x 262) (= x 263) (= x 264) + (= x 265) (= x 266) (= x 267) (= x 268) (= x 269) (= x 270) (= x 271) (= x 272) + (= x 273) (= x 274) (= x 275) (= x 276) (= x 277) (= x 278) (= x 279) (= x 280) + (= x 281) (= x 282) (= x 283) (= x 284) (= x 285) (= x 286) (= x 287) (= x 288) + (= x 289) (= x 290) (= x 291) (= x 292) (= x 293) (= x 294) (= x 295) (= x 296) + (= x 297) (= x 298) (= x 299) (= x 300) (= x 301) (= x 302) (= x 303) (= x 304) + (= x 305) (= x 306) (= x 307) (= x 308) (= x 309) (= x 310) (= x 311) (= x 312) + (= x 313) (= x 314) (= x 315) (= x 316) (= x 317) (= x 318) (= x 319) (= x 320) + (= x 321) (= x 322) (= x 323) (= x 324) (= x 325) (= x 326) (= x 327) (= x 328) + (= x 329) (= x 330) (= x 331) (= x 332) (= x 333) (= x 334) (= x 335) (= x 336) + (= x 337) (= x 338) (= x 339) (= x 340) (= x 341) (= x 342) (= x 343) (= x 344) + (= x 345) (= x 346) (= x 347) (= x 348) (= x 349) (= x 350) (= x 351) (= x 352) + (= x 353) (= x 354) (= x 355) (= x 356) (= x 357) (= x 358) (= x 359) (= x 360) + (= x 361) (= x 362) (= x 363) (= x 364) (= x 365) (= x 366) (= x 367) (= x 368) + (= x 369) (= x 370) (= x 371) (= x 372) (= x 373) (= x 374) (= x 375) (= x 376) + (= x 377) (= x 378) (= x 379) (= x 380) (= x 381) (= x 382) (= x 383) (= x 384) + (= x 385) (= x 386) (= x 387) (= x 388) (= x 389) (= x 390) (= x 391) (= x 392) + (= x 393) (= x 394) (= x 395) (= x 396) (= x 397) (= x 398) (= x 399) (= x 400) + (= x 401) (= x 402) (= x 403) (= x 404) (= x 405) (= x 406) (= x 407) (= x 408) + (= x 409) (= x 410) (= x 411) (= x 412) (= x 413) (= x 414) (= x 415) (= x 416) + (= x 417) (= x 418) (= x 419) (= x 420) (= x 421) (= x 422) (= x 423) (= x 424) + (= x 425) (= x 426) (= x 427) (= x 428) (= x 429) (= x 430) (= x 431) (= x 432) + (= x 433) (= x 434) (= x 435) (= x 436) (= x 437) (= x 438) (= x 439) (= x 440) + (= x 441) (= x 442) (= x 443) (= x 444) (= x 445) (= x 446) (= x 447) (= x 448) + (= x 449) (= x 450) (= x 451) (= x 452) (= x 453) (= x 454) (= x 455) (= x 456) + (= x 457) (= x 458) (= x 459) (= x 460) (= x 461) (= x 462) (= x 463) (= x 464) + (= x 465) (= x 466) (= x 467) (= x 468) (= x 469) (= x 470) (= x 471) (= x 472) + (= x 473) (= x 474) (= x 475) (= x 476) (= x 477) (= x 478) (= x 479) (= x 480) + (= x 481) (= x 482) (= x 483) (= x 484) (= x 485) (= x 486) (= x 487) (= x 488) + (= x 489) (= x 490) (= x 491) (= x 492) (= x 493) (= x 494) (= x 495) (= x 496) + (= x 497) (= x 498) (= x 499) (= x 500) (= x 501) (= x 502) (= x 503) (= x 504) + (= x 505) (= x 506) (= x 507) (= x 508) (= x 509) (= x 510) (= x 511) (= x 512) + (= x 513) (= x 514) (= x 515) (= x 516) (= x 517) (= x 518) (= x 519) (= x 520) + (= x 521) (= x 522) (= x 523) (= x 524) (= x 525) (= x 526) (= x 527) (= x 528) + (= x 529) (= x 530) (= x 531) (= x 532) (= x 533) (= x 534) (= x 535) (= x 536) + (= x 537) (= x 538) (= x 539) (= x 540) (= x 541) (= x 542) (= x 543) (= x 544) + (= x 545) (= x 546) (= x 547) (= x 548) (= x 549) (= x 550) (= x 551) (= x 552) + (= x 553) (= x 554) (= x 555) (= x 556) (= x 557) (= x 558) (= x 559) (= x 560) + (= x 561) (= x 562) (= x 563) (= x 564) (= x 565) (= x 566) (= x 567) (= x 568) + (= x 569) (= x 570) (= x 571) (= x 572) (= x 573) (= x 574) (= x 575) (= x 576) + (= x 577) (= x 578) (= x 579) (= x 580) (= x 581) (= x 582) (= x 583) (= x 584) + (= x 585) (= x 586) (= x 587) (= x 588) (= x 589) (= x 590) (= x 591) (= x 592) + (= x 593) (= x 594) (= x 595) (= x 596) (= x 597) (= x 598) (= x 599) (= x 600) + (= x 601) (= x 602) (= x 603) (= x 604) (= x 605) (= x 606) (= x 607) (= x 608) + (= x 609) (= x 610) (= x 611) (= x 612) (= x 613) (= x 614) (= x 615) (= x 616) + (= x 617) (= x 618) (= x 619) (= x 620) (= x 621) (= x 622) (= x 623) (= x 624) + (= x 625) (= x 626) (= x 627) (= x 628) (= x 629) (= x 630) (= x 631) (= x 632) + (= x 633) (= x 634) (= x 635) (= x 636) (= x 637) (= x 638) (= x 639) (= x 640) + (= x 641) (= x 642) (= x 643) (= x 644) (= x 645) (= x 646) (= x 647) (= x 648) + (= x 649) (= x 650) (= x 651) (= x 652) (= x 653) (= x 654) (= x 655) (= x 656) + (= x 657) (= x 658) (= x 659) (= x 660) (= x 661) (= x 662) (= x 663) (= x 664) + (= x 665) (= x 666) (= x 667) (= x 668) (= x 669) (= x 670) (= x 671) (= x 672) + (= x 673) (= x 674) (= x 675) (= x 676) (= x 677) (= x 678) (= x 679) (= x 680) + (= x 681) (= x 682) (= x 683) (= x 684) (= x 685) (= x 686) (= x 687) (= x 688) + (= x 689) (= x 690) (= x 691) (= x 692) (= x 693) (= x 694) (= x 695) (= x 696) + (= x 697) (= x 698) (= x 699) (= x 700) (= x 701) (= x 702) (= x 703) (= x 704) + (= x 705) (= x 706) (= x 707) (= x 708) (= x 709) (= x 710) (= x 711) (= x 712) + (= x 713) (= x 714) (= x 715) (= x 716) (= x 717) (= x 718) (= x 719) (= x 720) + (= x 721) (= x 722) (= x 723) (= x 724) (= x 725) (= x 726) (= x 727) (= x 728) + (= x 729) (= x 730) (= x 731) (= x 732) (= x 733) (= x 734) (= x 735) (= x 736) + (= x 737) (= x 738) (= x 739) (= x 740) (= x 741) (= x 742) (= x 743) (= x 744) + (= x 745) (= x 746) (= x 747) (= x 748) (= x 749) (= x 750) (= x 751) (= x 752) + (= x 753) (= x 754) (= x 755) (= x 756) (= x 757) (= x 758) (= x 759) (= x 760) + (= x 761) (= x 762) (= x 763) (= x 764) (= x 765) (= x 766) (= x 767) (= x 768) + (= x 769) (= x 770) (= x 771) (= x 772) (= x 773) (= x 774) (= x 775) (= x 776) + (= x 777) (= x 778) (= x 779) (= x 780) (= x 781) (= x 782) (= x 783) (= x 784) + (= x 785) (= x 786) (= x 787) (= x 788) (= x 789) (= x 790) (= x 791) (= x 792) + (= x 793) (= x 794) (= x 795) (= x 796) (= x 797) (= x 798) (= x 799) (= x 800) + (= x 801) (= x 802) (= x 803) (= x 804) (= x 805) (= x 806) (= x 807) (= x 808) + (= x 809) (= x 810) (= x 811) (= x 812) (= x 813) (= x 814) (= x 815) (= x 816) + (= x 817) (= x 818) (= x 819) (= x 820) (= x 821) (= x 822) (= x 823) (= x 824) + (= x 825) (= x 826) (= x 827) (= x 828) (= x 829) (= x 830) (= x 831) (= x 832) + (= x 833) (= x 834) (= x 835) (= x 836) (= x 837) (= x 838) (= x 839) (= x 840) + (= x 841) (= x 842) (= x 843) (= x 844) (= x 845) (= x 846) (= x 847) (= x 848) + (= x 849) (= x 850) (= x 851) (= x 852) (= x 853) (= x 854) (= x 855) (= x 856) + (= x 857) (= x 858) (= x 859) (= x 860) (= x 861) (= x 862) (= x 863) (= x 864) + (= x 865) (= x 866) (= x 867) (= x 868) (= x 869) (= x 870) (= x 871) (= x 872) + (= x 873) (= x 874) (= x 875) (= x 876) (= x 877) (= x 878) (= x 879) (= x 880) + (= x 881) (= x 882) (= x 883) (= x 884) (= x 885) (= x 886) (= x 887) (= x 888) + (= x 889) (= x 890) (= x 891) (= x 892) (= x 893) (= x 894) (= x 895) (= x 896) + (= x 897) (= x 898) (= x 899) (= x 900) (= x 901) (= x 902) (= x 903) (= x 904) + (= x 905) (= x 906) (= x 907) (= x 908) (= x 909) (= x 910) (= x 911) (= x 912) + (= x 913) (= x 914) (= x 915) (= x 916) (= x 917) (= x 918) (= x 919) (= x 920) + (= x 921) (= x 922) (= x 923) (= x 924) (= x 925) (= x 926) (= x 927) (= x 928) + (= x 929) (= x 930) (= x 931) (= x 932) (= x 933) (= x 934) (= x 935) (= x 936) + (= x 937) (= x 938) (= x 939) (= x 940) (= x 941) (= x 942) (= x 943) (= x 944) + (= x 945) (= x 946) (= x 947) (= x 948) (= x 949) (= x 950) (= x 951) (= x 952) + (= x 953) (= x 954) (= x 955) (= x 956) (= x 957) (= x 958) (= x 959) (= x 960) + (= x 961) (= x 962) (= x 963) (= x 964) (= x 965) (= x 966) (= x 967) (= x 968) + (= x 969) (= x 970) (= x 971) (= x 972) (= x 973) (= x 974) (= x 975) (= x 976) + (= x 977) (= x 978) (= x 979) (= x 980) (= x 981) (= x 982) (= x 983) (= x 984) + (= x 985) (= x 986) (= x 987) (= x 988) (= x 989) (= x 990) (= x 991) (= x 992) + (= x 993) (= x 994) (= x 995) (= x 996) (= x 997) (= x 998) (= x 999) (= x 1000) + (= x 1001) (= x 1002) (= x 1003) (= x 1004) (= x 1005) (= x 1006) (= x 1007) (= x 1008) + (= x 1009) (= x 1010) (= x 1011) (= x 1012) (= x 1013) (= x 1014) (= x 1015) (= x 1016) + (= x 1017) (= x 1018) (= x 1019) (= x 1020) (= x 1021) (= x 1022) (= x 1023) (= x 1024) + (= x 1025) (= x 1026) (= x 1027) (= x 1028) (= x 1029) (= x 1030) (= x 1031) (= x 1032) + (= x 1033) (= x 1034) (= x 1035) (= x 1036) (= x 1037) (= x 1038) (= x 1039) (= x 1040) + (= x 1041) (= x 1042) (= x 1043) (= x 1044) (= x 1045) (= x 1046) (= x 1047) (= x 1048) + (= x 1049) (= x 1050) (= x 1051) (= x 1052) (= x 1053) (= x 1054) (= x 1055) (= x 1056) + (= x 1057) (= x 1058) (= x 1059) (= x 1060) (= x 1061) (= x 1062) (= x 1063) (= x 1064) + (= x 1065) (= x 1066) (= x 1067) (= x 1068) (= x 1069) (= x 1070) (= x 1071) (= x 1072) + (= x 1073) (= x 1074) (= x 1075) (= x 1076) (= x 1077) (= x 1078) (= x 1079) (= x 1080) + (= x 1081) (= x 1082) (= x 1083) (= x 1084) (= x 1085) (= x 1086) (= x 1087) (= x 1088) + (= x 1089) (= x 1090) (= x 1091) (= x 1092) (= x 1093) (= x 1094) (= x 1095) (= x 1096) + (= x 1097) (= x 1098) (= x 1099) (= x 1100) (= x 1101) (= x 1102) (= x 1103) (= x 1104) + (= x 1105) (= x 1106) (= x 1107) (= x 1108) (= x 1109) (= x 1110) (= x 1111) (= x 1112) + (= x 1113) (= x 1114) (= x 1115) (= x 1116) (= x 1117) (= x 1118) (= x 1119) (= x 1120) + (= x 1121) (= x 1122) (= x 1123) (= x 1124) (= x 1125) (= x 1126) (= x 1127) (= x 1128) + (= x 1129) (= x 1130) (= x 1131) (= x 1132) (= x 1133) (= x 1134) (= x 1135) (= x 1136) + (= x 1137) (= x 1138) (= x 1139) (= x 1140) (= x 1141) (= x 1142) (= x 1143) (= x 1144) + (= x 1145) (= x 1146) (= x 1147) (= x 1148) (= x 1149) (= x 1150) (= x 1151) (= x 1152) + (= x 1153) (= x 1154) (= x 1155) (= x 1156) (= x 1157) (= x 1158) (= x 1159) (= x 1160) + (= x 1161) (= x 1162) (= x 1163) (= x 1164) (= x 1165) (= x 1166) (= x 1167) (= x 1168) + (= x 1169) (= x 1170) (= x 1171) (= x 1172) (= x 1173) (= x 1174) (= x 1175) (= x 1176) + (= x 1177) (= x 1178) (= x 1179) (= x 1180) (= x 1181) (= x 1182) (= x 1183) (= x 1184) + (= x 1185) (= x 1186) (= x 1187) (= x 1188) (= x 1189) (= x 1190) (= x 1191) (= x 1192) + (= x 1193) (= x 1194) (= x 1195) (= x 1196) (= x 1197) (= x 1198) (= x 1199) (= x 1200) + (= x 1201) (= x 1202) (= x 1203) (= x 1204) (= x 1205) (= x 1206) (= x 1207) (= x 1208) + (= x 1209) (= x 1210) (= x 1211) (= x 1212) (= x 1213) (= x 1214) (= x 1215) (= x 1216) + (= x 1217) (= x 1218) (= x 1219) (= x 1220) (= x 1221) (= x 1222) (= x 1223) (= x 1224) + (= x 1225) (= x 1226) (= x 1227) (= x 1228) (= x 1229) (= x 1230) (= x 1231) (= x 1232) + (= x 1233) (= x 1234) (= x 1235) (= x 1236) (= x 1237) (= x 1238) (= x 1239) (= x 1240) + (= x 1241) (= x 1242) (= x 1243) (= x 1244) (= x 1245) (= x 1246) (= x 1247) (= x 1248) + (= x 1249) (= x 1250) (= x 1251) (= x 1252) (= x 1253) (= x 1254) (= x 1255) (= x 1256) + (= x 1257) (= x 1258) (= x 1259) (= x 1260) (= x 1261) (= x 1262) (= x 1263) (= x 1264) + (= x 1265) (= x 1266) (= x 1267) (= x 1268) (= x 1269) (= x 1270) (= x 1271) (= x 1272) + (= x 1273) (= x 1274) (= x 1275) (= x 1276) (= x 1277) (= x 1278) (= x 1279) (= x 1280) + (= x 1281) (= x 1282) (= x 1283) (= x 1284) (= x 1285) (= x 1286) (= x 1287) (= x 1288) + (= x 1289) (= x 1290) (= x 1291) (= x 1292) (= x 1293) (= x 1294) (= x 1295) (= x 1296) + (= x 1297) (= x 1298) (= x 1299) (= x 1300) (= x 1301) (= x 1302) (= x 1303) (= x 1304) + (= x 1305) (= x 1306) (= x 1307) (= x 1308) (= x 1309) (= x 1310) (= x 1311) (= x 1312) + (= x 1313) (= x 1314) (= x 1315) (= x 1316) (= x 1317) (= x 1318) (= x 1319) (= x 1320) + (= x 1321) (= x 1322) (= x 1323) (= x 1324) (= x 1325) (= x 1326) (= x 1327) (= x 1328) + (= x 1329) (= x 1330) (= x 1331) (= x 1332) (= x 1333) (= x 1334) (= x 1335) (= x 1336) + (= x 1337) (= x 1338) (= x 1339) (= x 1340) (= x 1341) (= x 1342) (= x 1343) (= x 1344) + (= x 1345) (= x 1346) (= x 1347) (= x 1348) (= x 1349) (= x 1350) (= x 1351) (= x 1352) + (= x 1353) (= x 1354) (= x 1355) (= x 1356) (= x 1357) (= x 1358) (= x 1359) (= x 1360) + (= x 1361) (= x 1362) (= x 1363) (= x 1364) (= x 1365) (= x 1366) (= x 1367) (= x 1368) + (= x 1369) (= x 1370) (= x 1371) (= x 1372) (= x 1373) (= x 1374) (= x 1375) (= x 1376) + (= x 1377) (= x 1378) (= x 1379) (= x 1380) (= x 1381) (= x 1382) (= x 1383) (= x 1384) + (= x 1385) (= x 1386) (= x 1387) (= x 1388) (= x 1389) (= x 1390) (= x 1391) (= x 1392) + (= x 1393) (= x 1394) (= x 1395) (= x 1396) (= x 1397) (= x 1398) (= x 1399) (= x 1400) + (= x 1401) (= x 1402) (= x 1403) (= x 1404) (= x 1405) (= x 1406) (= x 1407) (= x 1408) + (= x 1409) (= x 1410) (= x 1411) (= x 1412) (= x 1413) (= x 1414) (= x 1415) (= x 1416) + (= x 1417) (= x 1418) (= x 1419) (= x 1420) (= x 1421) (= x 1422) (= x 1423) (= x 1424) + (= x 1425) (= x 1426) (= x 1427) (= x 1428) (= x 1429) (= x 1430) (= x 1431) (= x 1432) + (= x 1433) (= x 1434) (= x 1435) (= x 1436) (= x 1437) (= x 1438) (= x 1439) (= x 1440) + (= x 1441) (= x 1442) (= x 1443) (= x 1444) (= x 1445) (= x 1446) (= x 1447) (= x 1448) + (= x 1449) (= x 1450) (= x 1451) (= x 1452) (= x 1453) (= x 1454) (= x 1455) (= x 1456) + (= x 1457) (= x 1458) (= x 1459) (= x 1460) (= x 1461) (= x 1462) (= x 1463) (= x 1464) + (= x 1465) (= x 1466) (= x 1467) (= x 1468) (= x 1469) (= x 1470) (= x 1471) (= x 1472) + (= x 1473) (= x 1474) (= x 1475) (= x 1476) (= x 1477) (= x 1478) (= x 1479) (= x 1480) + (= x 1481) (= x 1482) (= x 1483) (= x 1484) (= x 1485) (= x 1486) (= x 1487) (= x 1488) + (= x 1489) (= x 1490) (= x 1491) (= x 1492) (= x 1493) (= x 1494) (= x 1495) (= x 1496) + (= x 1497) (= x 1498) (= x 1499) (= x 1500) (= x 1501) (= x 1502) (= x 1503) (= x 1504) + (= x 1505) (= x 1506) (= x 1507) (= x 1508) (= x 1509) (= x 1510) (= x 1511) (= x 1512) + (= x 1513) (= x 1514) (= x 1515) (= x 1516) (= x 1517) (= x 1518) (= x 1519) (= x 1520) + (= x 1521) (= x 1522) (= x 1523) (= x 1524) (= x 1525) (= x 1526) (= x 1527) (= x 1528) + (= x 1529) (= x 1530) (= x 1531) (= x 1532) (= x 1533) (= x 1534) (= x 1535) (= x 1536) + (= x 1537) (= x 1538) (= x 1539) (= x 1540) (= x 1541) (= x 1542) (= x 1543) (= x 1544) + (= x 1545) (= x 1546) (= x 1547) (= x 1548) (= x 1549) (= x 1550) (= x 1551) (= x 1552) + (= x 1553) (= x 1554) (= x 1555) (= x 1556) (= x 1557) (= x 1558) (= x 1559) (= x 1560) + (= x 1561) (= x 1562) (= x 1563) (= x 1564) (= x 1565) (= x 1566) (= x 1567) (= x 1568) + (= x 1569) (= x 1570) (= x 1571) (= x 1572) (= x 1573) (= x 1574) (= x 1575) (= x 1576) + (= x 1577) (= x 1578) (= x 1579) (= x 1580) (= x 1581) (= x 1582) (= x 1583) (= x 1584) + (= x 1585) (= x 1586) (= x 1587) (= x 1588) (= x 1589) (= x 1590) (= x 1591) (= x 1592) + (= x 1593) (= x 1594) (= x 1595) (= x 1596) (= x 1597) (= x 1598) (= x 1599) (= x 1600) + (= x 1601) (= x 1602) (= x 1603) (= x 1604) (= x 1605) (= x 1606) (= x 1607) (= x 1608) + (= x 1609) (= x 1610) (= x 1611) (= x 1612) (= x 1613) (= x 1614) (= x 1615) (= x 1616) + (= x 1617) (= x 1618) (= x 1619) (= x 1620) (= x 1621) (= x 1622) (= x 1623) (= x 1624) + (= x 1625) (= x 1626) (= x 1627) (= x 1628) (= x 1629) (= x 1630) (= x 1631) (= x 1632) + (= x 1633) (= x 1634) (= x 1635) (= x 1636) (= x 1637) (= x 1638) (= x 1639) (= x 1640) + (= x 1641) (= x 1642) (= x 1643) (= x 1644) (= x 1645) (= x 1646) (= x 1647) (= x 1648) + (= x 1649) (= x 1650) (= x 1651) (= x 1652) (= x 1653) (= x 1654) (= x 1655) (= x 1656) + (= x 1657) (= x 1658) (= x 1659) (= x 1660) (= x 1661) (= x 1662) (= x 1663) (= x 1664) + (= x 1665) (= x 1666) (= x 1667) (= x 1668) (= x 1669) (= x 1670) (= x 1671) (= x 1672) + (= x 1673) (= x 1674) (= x 1675) (= x 1676) (= x 1677) (= x 1678) (= x 1679) (= x 1680) + (= x 1681) (= x 1682) (= x 1683) (= x 1684) (= x 1685) (= x 1686) (= x 1687) (= x 1688) + (= x 1689) (= x 1690) (= x 1691) (= x 1692) (= x 1693) (= x 1694) (= x 1695) (= x 1696) + (= x 1697) (= x 1698) (= x 1699) (= x 1700) (= x 1701) (= x 1702) (= x 1703) (= x 1704) + (= x 1705) (= x 1706) (= x 1707) (= x 1708) (= x 1709) (= x 1710) (= x 1711) (= x 1712) + (= x 1713) (= x 1714) (= x 1715) (= x 1716) (= x 1717) (= x 1718) (= x 1719) (= x 1720) + (= x 1721) (= x 1722) (= x 1723) (= x 1724) (= x 1725) (= x 1726) (= x 1727) (= x 1728) + (= x 1729) (= x 1730) (= x 1731) (= x 1732) (= x 1733) (= x 1734) (= x 1735) (= x 1736) + (= x 1737) (= x 1738) (= x 1739) (= x 1740) (= x 1741) (= x 1742) (= x 1743) (= x 1744) + (= x 1745) (= x 1746) (= x 1747) (= x 1748) (= x 1749) (= x 1750) (= x 1751) (= x 1752) + (= x 1753) (= x 1754) (= x 1755) (= x 1756) (= x 1757) (= x 1758) (= x 1759) (= x 1760) + (= x 1761) (= x 1762) (= x 1763) (= x 1764) (= x 1765) (= x 1766) (= x 1767) (= x 1768) + (= x 1769) (= x 1770) (= x 1771) (= x 1772) (= x 1773) (= x 1774) (= x 1775) (= x 1776) + (= x 1777) (= x 1778) (= x 1779) (= x 1780) (= x 1781) (= x 1782) (= x 1783) (= x 1784) + (= x 1785) (= x 1786) (= x 1787) (= x 1788) (= x 1789) (= x 1790) (= x 1791) (= x 1792) + (= x 1793) (= x 1794) (= x 1795) (= x 1796) (= x 1797) (= x 1798) (= x 1799) (= x 1800) + (= x 1801) (= x 1802) (= x 1803) (= x 1804) (= x 1805) (= x 1806) (= x 1807) (= x 1808) + (= x 1809) (= x 1810) (= x 1811) (= x 1812) (= x 1813) (= x 1814) (= x 1815) (= x 1816) + (= x 1817) (= x 1818) (= x 1819) (= x 1820) (= x 1821) (= x 1822) (= x 1823) (= x 1824) + (= x 1825) (= x 1826) (= x 1827) (= x 1828) (= x 1829) (= x 1830) (= x 1831) (= x 1832) + (= x 1833) (= x 1834) (= x 1835) (= x 1836) (= x 1837) (= x 1838) (= x 1839) (= x 1840) + (= x 1841) (= x 1842) (= x 1843) (= x 1844) (= x 1845) (= x 1846) (= x 1847) (= x 1848) + (= x 1849) (= x 1850) (= x 1851) (= x 1852) (= x 1853) (= x 1854) (= x 1855) (= x 1856) + (= x 1857) (= x 1858) (= x 1859) (= x 1860) (= x 1861) (= x 1862) (= x 1863) (= x 1864) + (= x 1865) (= x 1866) (= x 1867) (= x 1868) (= x 1869) (= x 1870) (= x 1871) (= x 1872) + (= x 1873) (= x 1874) (= x 1875) (= x 1876) (= x 1877) (= x 1878) (= x 1879) (= x 1880) + (= x 1881) (= x 1882) (= x 1883) (= x 1884) (= x 1885) (= x 1886) (= x 1887) (= x 1888) + (= x 1889) (= x 1890) (= x 1891) (= x 1892) (= x 1893) (= x 1894) (= x 1895) (= x 1896) + (= x 1897) (= x 1898) (= x 1899) (= x 1900) (= x 1901) (= x 1902) (= x 1903) (= x 1904) + (= x 1905) (= x 1906) (= x 1907) (= x 1908) (= x 1909) (= x 1910) (= x 1911) (= x 1912) + (= x 1913) (= x 1914) (= x 1915) (= x 1916) (= x 1917) (= x 1918) (= x 1919) (= x 1920) + (= x 1921) (= x 1922) (= x 1923) (= x 1924) (= x 1925) (= x 1926) (= x 1927) (= x 1928) + (= x 1929) (= x 1930) (= x 1931) (= x 1932) (= x 1933) (= x 1934) (= x 1935) (= x 1936) + (= x 1937) (= x 1938) (= x 1939) (= x 1940) (= x 1941) (= x 1942) (= x 1943) (= x 1944) + (= x 1945) (= x 1946) (= x 1947) (= x 1948) (= x 1949) (= x 1950) (= x 1951) (= x 1952) + (= x 1953) (= x 1954) (= x 1955) (= x 1956) (= x 1957) (= x 1958) (= x 1959) (= x 1960) + (= x 1961) (= x 1962) (= x 1963) (= x 1964) (= x 1965) (= x 1966) (= x 1967) (= x 1968) + (= x 1969) (= x 1970) (= x 1971) (= x 1972) (= x 1973) (= x 1974) (= x 1975) (= x 1976) + (= x 1977) (= x 1978) (= x 1979) (= x 1980) (= x 1981) (= x 1982) (= x 1983) (= x 1984) + (= x 1985) (= x 1986) (= x 1987) (= x 1988) (= x 1989) (= x 1990) (= x 1991) (= x 1992) + (= x 1993) (= x 1994) (= x 1995) (= x 1996) (= x 1997) (= x 1998) (= x 1999) (= x 2000) + (= x 2001) (= x 2002) (= x 2003) (= x 2004) (= x 2005) (= x 2006) (= x 2007) (= x 2008) + (= x 2009) (= x 2010) (= x 2011) (= x 2012) (= x 2013) (= x 2014) (= x 2015) (= x 2016) + (= x 2017) (= x 2018) (= x 2019) (= x 2020) (= x 2021) (= x 2022) (= x 2023) (= x 2024) + (= x 2025) (= x 2026) (= x 2027) (= x 2028) (= x 2029) (= x 2030) (= x 2031) (= x 2032) + (= x 2033) (= x 2034) (= x 2035) (= x 2036) (= x 2037) (= x 2038) (= x 2039) (= x 2040) + (= x 2041) (= x 2042) (= x 2043) (= x 2044) (= x 2045) (= x 2046) (= x 2047) (= x 2048) + (= x 2049) (= x 2050) (= x 2051) (= x 2052) (= x 2053) (= x 2054) (= x 2055) (= x 2056) + (= x 2057) (= x 2058) (= x 2059) (= x 2060) (= x 2061) (= x 2062) (= x 2063) (= x 2064) + (= x 2065) (= x 2066) (= x 2067) (= x 2068) (= x 2069) (= x 2070) (= x 2071) (= x 2072) + (= x 2073) (= x 2074) (= x 2075) (= x 2076) (= x 2077) (= x 2078) (= x 2079) (= x 2080) + (= x 2081) (= x 2082) (= x 2083) (= x 2084) (= x 2085) (= x 2086) (= x 2087) (= x 2088) + (= x 2089) (= x 2090) (= x 2091) (= x 2092) (= x 2093) (= x 2094) (= x 2095) (= x 2096) + (= x 2097) (= x 2098) (= x 2099) (= x 2100) (= x 2101) (= x 2102) (= x 2103) (= x 2104) + (= x 2105) (= x 2106) (= x 2107) (= x 2108) (= x 2109) (= x 2110) (= x 2111) (= x 2112) + (= x 2113) (= x 2114) (= x 2115) (= x 2116) (= x 2117) (= x 2118) (= x 2119) (= x 2120) + (= x 2121) (= x 2122) (= x 2123) (= x 2124) (= x 2125) (= x 2126) (= x 2127) (= x 2128) + (= x 2129) (= x 2130) (= x 2131) (= x 2132) (= x 2133) (= x 2134) (= x 2135) (= x 2136) + (= x 2137) (= x 2138) (= x 2139) (= x 2140) (= x 2141) (= x 2142) (= x 2143) (= x 2144) + (= x 2145) (= x 2146) (= x 2147) (= x 2148) (= x 2149) (= x 2150) (= x 2151) (= x 2152) + (= x 2153) (= x 2154) (= x 2155) (= x 2156) (= x 2157) (= x 2158) (= x 2159) (= x 2160) + (= x 2161) (= x 2162) (= x 2163) (= x 2164) (= x 2165) (= x 2166) (= x 2167) (= x 2168) + (= x 2169) (= x 2170) (= x 2171) (= x 2172) (= x 2173) (= x 2174) (= x 2175) (= x 2176) + (= x 2177) (= x 2178) (= x 2179) (= x 2180) (= x 2181) (= x 2182) (= x 2183) (= x 2184) + (= x 2185) (= x 2186) (= x 2187) (= x 2188) (= x 2189) (= x 2190) (= x 2191) (= x 2192) + (= x 2193) (= x 2194) (= x 2195) (= x 2196) (= x 2197) (= x 2198) (= x 2199) (= x 2200) + (= x 2201) (= x 2202) (= x 2203) (= x 2204) (= x 2205) (= x 2206) (= x 2207) (= x 2208) + (= x 2209) (= x 2210) (= x 2211) (= x 2212) (= x 2213) (= x 2214) (= x 2215) (= x 2216) + (= x 2217) (= x 2218) (= x 2219) (= x 2220) (= x 2221) (= x 2222) (= x 2223) (= x 2224) + (= x 2225) (= x 2226) (= x 2227) (= x 2228) (= x 2229) (= x 2230) (= x 2231) (= x 2232) + (= x 2233) (= x 2234) (= x 2235) (= x 2236) (= x 2237) (= x 2238) (= x 2239) (= x 2240) + (= x 2241) (= x 2242) (= x 2243) (= x 2244) (= x 2245) (= x 2246) (= x 2247) (= x 2248) + (= x 2249) (= x 2250) (= x 2251) (= x 2252) (= x 2253) (= x 2254) (= x 2255) (= x 2256) + (= x 2257) (= x 2258) (= x 2259) (= x 2260) (= x 2261) (= x 2262) (= x 2263) (= x 2264) + (= x 2265) (= x 2266) (= x 2267) (= x 2268) (= x 2269) (= x 2270) (= x 2271) (= x 2272) + (= x 2273) (= x 2274) (= x 2275) (= x 2276) (= x 2277) (= x 2278) (= x 2279) (= x 2280) + (= x 2281) (= x 2282) (= x 2283) (= x 2284) (= x 2285) (= x 2286) (= x 2287) (= x 2288) + (= x 2289) (= x 2290) (= x 2291) (= x 2292) (= x 2293) (= x 2294) (= x 2295) (= x 2296) + (= x 2297) (= x 2298) (= x 2299) (= x 2300) (= x 2301) (= x 2302) (= x 2303) (= x 2304) + (= x 2305) (= x 2306) (= x 2307) (= x 2308) (= x 2309) (= x 2310) (= x 2311) (= x 2312) + (= x 2313) (= x 2314) (= x 2315) (= x 2316) (= x 2317) (= x 2318) (= x 2319) (= x 2320) + (= x 2321) (= x 2322) (= x 2323) (= x 2324) (= x 2325) (= x 2326) (= x 2327) (= x 2328) + (= x 2329) (= x 2330) (= x 2331) (= x 2332) (= x 2333) (= x 2334) (= x 2335) (= x 2336) + (= x 2337) (= x 2338) (= x 2339) (= x 2340) (= x 2341) (= x 2342) (= x 2343) (= x 2344) + (= x 2345) (= x 2346) (= x 2347) (= x 2348) (= x 2349) (= x 2350) (= x 2351) (= x 2352) + (= x 2353) (= x 2354) (= x 2355) (= x 2356) (= x 2357) (= x 2358) (= x 2359) (= x 2360) + (= x 2361) (= x 2362) (= x 2363) (= x 2364) (= x 2365) (= x 2366) (= x 2367) (= x 2368) + (= x 2369) (= x 2370) (= x 2371) (= x 2372) (= x 2373) (= x 2374) (= x 2375) (= x 2376) + (= x 2377) (= x 2378) (= x 2379) (= x 2380) (= x 2381) (= x 2382) (= x 2383) (= x 2384) + (= x 2385) (= x 2386) (= x 2387) (= x 2388) (= x 2389) (= x 2390) (= x 2391) (= x 2392) + (= x 2393) (= x 2394) (= x 2395) (= x 2396) (= x 2397) (= x 2398) (= x 2399) (= x 2400) + (= x 2401) (= x 2402) (= x 2403) (= x 2404) (= x 2405) (= x 2406) (= x 2407) (= x 2408) + (= x 2409) (= x 2410) (= x 2411) (= x 2412) (= x 2413) (= x 2414) (= x 2415) (= x 2416) + (= x 2417) (= x 2418) (= x 2419) (= x 2420) (= x 2421) (= x 2422) (= x 2423) (= x 2424) + (= x 2425) (= x 2426) (= x 2427) (= x 2428) (= x 2429) (= x 2430) (= x 2431) (= x 2432) + (= x 2433) (= x 2434) (= x 2435) (= x 2436) (= x 2437) (= x 2438) (= x 2439) (= x 2440) + (= x 2441) (= x 2442) (= x 2443) (= x 2444) (= x 2445) (= x 2446) (= x 2447) (= x 2448) + (= x 2449) (= x 2450) (= x 2451) (= x 2452) (= x 2453) (= x 2454) (= x 2455) (= x 2456) + (= x 2457) (= x 2458) (= x 2459) (= x 2460) (= x 2461) (= x 2462) (= x 2463) (= x 2464) + (= x 2465) (= x 2466) (= x 2467) (= x 2468) (= x 2469) (= x 2470) (= x 2471) (= x 2472) + (= x 2473) (= x 2474) (= x 2475) (= x 2476) (= x 2477) (= x 2478) (= x 2479) (= x 2480) + (= x 2481) (= x 2482) (= x 2483) (= x 2484) (= x 2485) (= x 2486) (= x 2487) (= x 2488) + (= x 2489) (= x 2490) (= x 2491) (= x 2492) (= x 2493) (= x 2494) (= x 2495) (= x 2496) + (= x 2497) (= x 2498) (= x 2499) (= x 2500) (= x 2501) (= x 2502) (= x 2503) (= x 2504) + (= x 2505) (= x 2506) (= x 2507) (= x 2508) (= x 2509) (= x 2510) (= x 2511) (= x 2512) + (= x 2513) (= x 2514) (= x 2515) (= x 2516) (= x 2517) (= x 2518) (= x 2519) (= x 2520) + (= x 2521) (= x 2522) (= x 2523) (= x 2524) (= x 2525) (= x 2526) (= x 2527) (= x 2528) + (= x 2529) (= x 2530) (= x 2531) (= x 2532) (= x 2533) (= x 2534) (= x 2535) (= x 2536) + (= x 2537) (= x 2538) (= x 2539) (= x 2540) (= x 2541) (= x 2542) (= x 2543) (= x 2544) + (= x 2545) (= x 2546) (= x 2547) (= x 2548) (= x 2549) (= x 2550) (= x 2551) (= x 2552) + (= x 2553) (= x 2554) (= x 2555) (= x 2556) (= x 2557) (= x 2558) (= x 2559) (= x 2560) + (= x 2561) (= x 2562) (= x 2563) (= x 2564) (= x 2565) (= x 2566) (= x 2567) (= x 2568) + (= x 2569) (= x 2570) (= x 2571) (= x 2572) (= x 2573) (= x 2574) (= x 2575) (= x 2576) + (= x 2577) (= x 2578) (= x 2579) (= x 2580) (= x 2581) (= x 2582) (= x 2583) (= x 2584) + (= x 2585) (= x 2586) (= x 2587) (= x 2588) (= x 2589) (= x 2590) (= x 2591) (= x 2592) + (= x 2593) (= x 2594) (= x 2595) (= x 2596) (= x 2597) (= x 2598) (= x 2599) (= x 2600) + (= x 2601) (= x 2602) (= x 2603) (= x 2604) (= x 2605) (= x 2606) (= x 2607) (= x 2608) + (= x 2609) (= x 2610) (= x 2611) (= x 2612) (= x 2613) (= x 2614) (= x 2615) (= x 2616) + (= x 2617) (= x 2618) (= x 2619) (= x 2620) (= x 2621) (= x 2622) (= x 2623) (= x 2624) + (= x 2625) (= x 2626) (= x 2627) (= x 2628) (= x 2629) (= x 2630) (= x 2631) (= x 2632) + (= x 2633) (= x 2634) (= x 2635) (= x 2636) (= x 2637) (= x 2638) (= x 2639) (= x 2640) + (= x 2641) (= x 2642) (= x 2643) (= x 2644) (= x 2645) (= x 2646) (= x 2647) (= x 2648) + (= x 2649) (= x 2650) (= x 2651) (= x 2652) (= x 2653) (= x 2654) (= x 2655) (= x 2656) + (= x 2657) (= x 2658) (= x 2659) (= x 2660) (= x 2661) (= x 2662) (= x 2663) (= x 2664) + (= x 2665) (= x 2666) (= x 2667) (= x 2668) (= x 2669) (= x 2670) (= x 2671) (= x 2672) + (= x 2673) (= x 2674) (= x 2675) (= x 2676) (= x 2677) (= x 2678) (= x 2679) (= x 2680) + (= x 2681) (= x 2682) (= x 2683) (= x 2684) (= x 2685) (= x 2686) (= x 2687) (= x 2688) + (= x 2689) (= x 2690) (= x 2691) (= x 2692) (= x 2693) (= x 2694) (= x 2695) (= x 2696) + (= x 2697) (= x 2698) (= x 2699) (= x 2700) (= x 2701) (= x 2702) (= x 2703) (= x 2704) + (= x 2705) (= x 2706) (= x 2707) (= x 2708) (= x 2709) (= x 2710) (= x 2711) (= x 2712) + (= x 2713) (= x 2714) (= x 2715) (= x 2716) (= x 2717) (= x 2718) (= x 2719) (= x 2720) + (= x 2721) (= x 2722) (= x 2723) (= x 2724) (= x 2725) (= x 2726) (= x 2727) (= x 2728) + (= x 2729) (= x 2730) (= x 2731) (= x 2732) (= x 2733) (= x 2734) (= x 2735) (= x 2736) + (= x 2737) (= x 2738) (= x 2739) (= x 2740) (= x 2741) (= x 2742) (= x 2743) (= x 2744) + (= x 2745) (= x 2746) (= x 2747) (= x 2748) (= x 2749) (= x 2750) (= x 2751) (= x 2752) + (= x 2753) (= x 2754) (= x 2755) (= x 2756) (= x 2757) (= x 2758) (= x 2759) (= x 2760) + (= x 2761) (= x 2762) (= x 2763) (= x 2764) (= x 2765) (= x 2766) (= x 2767) (= x 2768) + (= x 2769) (= x 2770) (= x 2771) (= x 2772) (= x 2773) (= x 2774) (= x 2775) (= x 2776) + (= x 2777) (= x 2778) (= x 2779) (= x 2780) (= x 2781) (= x 2782) (= x 2783) (= x 2784) + (= x 2785) (= x 2786) (= x 2787) (= x 2788) (= x 2789) (= x 2790) (= x 2791) (= x 2792) + (= x 2793) (= x 2794) (= x 2795) (= x 2796) (= x 2797) (= x 2798) (= x 2799) (= x 2800) + (= x 2801) (= x 2802) (= x 2803) (= x 2804) (= x 2805) (= x 2806) (= x 2807) (= x 2808) + (= x 2809) (= x 2810) (= x 2811) (= x 2812) (= x 2813) (= x 2814) (= x 2815) (= x 2816) + (= x 2817) (= x 2818) (= x 2819) (= x 2820) (= x 2821) (= x 2822) (= x 2823) (= x 2824) + (= x 2825) (= x 2826) (= x 2827) (= x 2828) (= x 2829) (= x 2830) (= x 2831) (= x 2832) + (= x 2833) (= x 2834) (= x 2835) (= x 2836) (= x 2837) (= x 2838) (= x 2839) (= x 2840) + (= x 2841) (= x 2842) (= x 2843) (= x 2844) (= x 2845) (= x 2846) (= x 2847) (= x 2848) + (= x 2849) (= x 2850) (= x 2851) (= x 2852) (= x 2853) (= x 2854) (= x 2855) (= x 2856) + (= x 2857) (= x 2858) (= x 2859) (= x 2860) (= x 2861) (= x 2862) (= x 2863) (= x 2864) + (= x 2865) (= x 2866) (= x 2867) (= x 2868) (= x 2869) (= x 2870) (= x 2871) (= x 2872) + (= x 2873) (= x 2874) (= x 2875) (= x 2876) (= x 2877) (= x 2878) (= x 2879) (= x 2880) + (= x 2881) (= x 2882) (= x 2883) (= x 2884) (= x 2885) (= x 2886) (= x 2887) (= x 2888) + (= x 2889) (= x 2890) (= x 2891) (= x 2892) (= x 2893) (= x 2894) (= x 2895) (= x 2896) + (= x 2897) (= x 2898) (= x 2899) (= x 2900) (= x 2901) (= x 2902) (= x 2903) (= x 2904) + (= x 2905) (= x 2906) (= x 2907) (= x 2908) (= x 2909) (= x 2910) (= x 2911) (= x 2912) + (= x 2913) (= x 2914) (= x 2915) (= x 2916) (= x 2917) (= x 2918) (= x 2919) (= x 2920) + (= x 2921) (= x 2922) (= x 2923) (= x 2924) (= x 2925) (= x 2926) (= x 2927) (= x 2928) + (= x 2929) (= x 2930) (= x 2931) (= x 2932) (= x 2933) (= x 2934) (= x 2935) (= x 2936) + (= x 2937) (= x 2938) (= x 2939) (= x 2940) (= x 2941) (= x 2942) (= x 2943) (= x 2944) + (= x 2945) (= x 2946) (= x 2947) (= x 2948) (= x 2949) (= x 2950) (= x 2951) (= x 2952) + (= x 2953) (= x 2954) (= x 2955) (= x 2956) (= x 2957) (= x 2958) (= x 2959) (= x 2960) + (= x 2961) (= x 2962) (= x 2963) (= x 2964) (= x 2965) (= x 2966) (= x 2967) (= x 2968) + (= x 2969) (= x 2970) (= x 2971) (= x 2972) (= x 2973) (= x 2974) (= x 2975) (= x 2976) + (= x 2977) (= x 2978) (= x 2979) (= x 2980) (= x 2981) (= x 2982) (= x 2983) (= x 2984) + (= x 2985) (= x 2986) (= x 2987) (= x 2988) (= x 2989) (= x 2990) (= x 2991) (= x 2992) + (= x 2993) (= x 2994) (= x 2995) (= x 2996) (= x 2997) (= x 2998) (= x 2999) (= x 3000) + (= x 3001) (= x 3002) (= x 3003) (= x 3004) (= x 3005) (= x 3006) (= x 3007) (= x 3008) + (= x 3009) (= x 3010) (= x 3011) (= x 3012) (= x 3013) (= x 3014) (= x 3015) (= x 3016) + (= x 3017) (= x 3018) (= x 3019) (= x 3020) (= x 3021) (= x 3022) (= x 3023) (= x 3024) + (= x 3025) (= x 3026) (= x 3027) (= x 3028) (= x 3029) (= x 3030) (= x 3031) (= x 3032) + (= x 3033) (= x 3034) (= x 3035) (= x 3036) (= x 3037) (= x 3038) (= x 3039) (= x 3040) + (= x 3041) (= x 3042) (= x 3043) (= x 3044) (= x 3045) (= x 3046) (= x 3047) (= x 3048) + (= x 3049) (= x 3050) (= x 3051) (= x 3052) (= x 3053) (= x 3054) (= x 3055) (= x 3056) + (= x 3057) (= x 3058) (= x 3059) (= x 3060) (= x 3061) (= x 3062) (= x 3063) (= x 3064) + (= x 3065) (= x 3066) (= x 3067) (= x 3068) (= x 3069) (= x 3070) (= x 3071) (= x 3072) + (= x 3073) (= x 3074) (= x 3075) (= x 3076) (= x 3077) (= x 3078) (= x 3079) (= x 3080) + (= x 3081) (= x 3082) (= x 3083) (= x 3084) (= x 3085) (= x 3086) (= x 3087) (= x 3088) + (= x 3089) (= x 3090) (= x 3091) (= x 3092) (= x 3093) (= x 3094) (= x 3095) (= x 3096) + (= x 3097) (= x 3098) (= x 3099) (= x 3100) (= x 3101) (= x 3102) (= x 3103) (= x 3104) + (= x 3105) (= x 3106) (= x 3107) (= x 3108) (= x 3109) (= x 3110) (= x 3111) (= x 3112) + (= x 3113) (= x 3114) (= x 3115) (= x 3116) (= x 3117) (= x 3118) (= x 3119) (= x 3120) + (= x 3121) (= x 3122) (= x 3123) (= x 3124) (= x 3125) (= x 3126) (= x 3127) (= x 3128) + (= x 3129) (= x 3130) (= x 3131) (= x 3132) (= x 3133) (= x 3134) (= x 3135) (= x 3136) + (= x 3137) (= x 3138) (= x 3139) (= x 3140) (= x 3141) (= x 3142) (= x 3143) (= x 3144) + (= x 3145) (= x 3146) (= x 3147) (= x 3148) (= x 3149) (= x 3150) (= x 3151) (= x 3152) + (= x 3153) (= x 3154) (= x 3155) (= x 3156) (= x 3157) (= x 3158) (= x 3159) (= x 3160) + (= x 3161) (= x 3162) (= x 3163) (= x 3164) (= x 3165) (= x 3166) (= x 3167) (= x 3168) + (= x 3169) (= x 3170) (= x 3171) (= x 3172) (= x 3173) (= x 3174) (= x 3175) (= x 3176) + (= x 3177) (= x 3178) (= x 3179) (= x 3180) (= x 3181) (= x 3182) (= x 3183) (= x 3184) + (= x 3185) (= x 3186) (= x 3187) (= x 3188) (= x 3189) (= x 3190) (= x 3191) (= x 3192) + (= x 3193) (= x 3194) (= x 3195) (= x 3196) (= x 3197) (= x 3198) (= x 3199) (= x 3200) + (= x 3201) (= x 3202) (= x 3203) (= x 3204) (= x 3205) (= x 3206) (= x 3207) (= x 3208) + (= x 3209) (= x 3210) (= x 3211) (= x 3212) (= x 3213) (= x 3214) (= x 3215) (= x 3216) + (= x 3217) (= x 3218) (= x 3219) (= x 3220) (= x 3221) (= x 3222) (= x 3223) (= x 3224) + (= x 3225) (= x 3226) (= x 3227) (= x 3228) (= x 3229) (= x 3230) (= x 3231) (= x 3232) + (= x 3233) (= x 3234) (= x 3235) (= x 3236) (= x 3237) (= x 3238) (= x 3239) (= x 3240) + (= x 3241) (= x 3242) (= x 3243) (= x 3244) (= x 3245) (= x 3246) (= x 3247) (= x 3248) + (= x 3249) (= x 3250) (= x 3251) (= x 3252) (= x 3253) (= x 3254) (= x 3255) (= x 3256) + (= x 3257) (= x 3258) (= x 3259) (= x 3260) (= x 3261) (= x 3262) (= x 3263) (= x 3264) + (= x 3265) (= x 3266) (= x 3267) (= x 3268) (= x 3269) (= x 3270) (= x 3271) (= x 3272) + (= x 3273) (= x 3274) (= x 3275) (= x 3276) (= x 3277) (= x 3278) (= x 3279) (= x 3280) + (= x 3281) (= x 3282) (= x 3283) (= x 3284) (= x 3285) (= x 3286) (= x 3287) (= x 3288) + (= x 3289) (= x 3290) (= x 3291) (= x 3292) (= x 3293) (= x 3294) (= x 3295) (= x 3296) + (= x 3297) (= x 3298) (= x 3299) (= x 3300) (= x 3301) (= x 3302) (= x 3303) (= x 3304) + (= x 3305) (= x 3306) (= x 3307) (= x 3308) (= x 3309) (= x 3310) (= x 3311) (= x 3312) + (= x 3313) (= x 3314) (= x 3315) (= x 3316) (= x 3317) (= x 3318) (= x 3319) (= x 3320) + (= x 3321) (= x 3322) (= x 3323) (= x 3324) (= x 3325) (= x 3326) (= x 3327) (= x 3328) + (= x 3329) (= x 3330) (= x 3331) (= x 3332) (= x 3333) (= x 3334) (= x 3335) (= x 3336) + (= x 3337) (= x 3338) (= x 3339) (= x 3340) (= x 3341) (= x 3342) (= x 3343) (= x 3344) + (= x 3345) (= x 3346) (= x 3347) (= x 3348) (= x 3349) (= x 3350) (= x 3351) (= x 3352) + (= x 3353) (= x 3354) (= x 3355) (= x 3356) (= x 3357) (= x 3358) (= x 3359) (= x 3360) + (= x 3361) (= x 3362) (= x 3363) (= x 3364) (= x 3365) (= x 3366) (= x 3367) (= x 3368) + (= x 3369) (= x 3370) (= x 3371) (= x 3372) (= x 3373) (= x 3374) (= x 3375) (= x 3376) + (= x 3377) (= x 3378) (= x 3379) (= x 3380) (= x 3381) (= x 3382) (= x 3383) (= x 3384) + (= x 3385) (= x 3386) (= x 3387) (= x 3388) (= x 3389) (= x 3390) (= x 3391) (= x 3392) + (= x 3393) (= x 3394) (= x 3395) (= x 3396) (= x 3397) (= x 3398) (= x 3399) (= x 3400) + (= x 3401) (= x 3402) (= x 3403) (= x 3404) (= x 3405) (= x 3406) (= x 3407) (= x 3408) + (= x 3409) (= x 3410) (= x 3411) (= x 3412) (= x 3413) (= x 3414) (= x 3415) (= x 3416) + (= x 3417) (= x 3418) (= x 3419) (= x 3420) (= x 3421) (= x 3422) (= x 3423) (= x 3424) + (= x 3425) (= x 3426) (= x 3427) (= x 3428) (= x 3429) (= x 3430) (= x 3431) (= x 3432) + (= x 3433) (= x 3434) (= x 3435) (= x 3436) (= x 3437) (= x 3438) (= x 3439) (= x 3440) + (= x 3441) (= x 3442) (= x 3443) (= x 3444) (= x 3445) (= x 3446) (= x 3447) (= x 3448) + (= x 3449) (= x 3450) (= x 3451) (= x 3452) (= x 3453) (= x 3454) (= x 3455) (= x 3456) + (= x 3457) (= x 3458) (= x 3459) (= x 3460) (= x 3461) (= x 3462) (= x 3463) (= x 3464) + (= x 3465) (= x 3466) (= x 3467) (= x 3468) (= x 3469) (= x 3470) (= x 3471) (= x 3472) + (= x 3473) (= x 3474) (= x 3475) (= x 3476) (= x 3477) (= x 3478) (= x 3479) (= x 3480) + (= x 3481) (= x 3482) (= x 3483) (= x 3484) (= x 3485) (= x 3486) (= x 3487) (= x 3488) + (= x 3489) (= x 3490) (= x 3491) (= x 3492) (= x 3493) (= x 3494) (= x 3495) (= x 3496) + (= x 3497) (= x 3498) (= x 3499) (= x 3500) (= x 3501) (= x 3502) (= x 3503) (= x 3504) + (= x 3505) (= x 3506) (= x 3507) (= x 3508) (= x 3509) (= x 3510) (= x 3511) (= x 3512) + (= x 3513) (= x 3514) (= x 3515) (= x 3516) (= x 3517) (= x 3518) (= x 3519) (= x 3520) + (= x 3521) (= x 3522) (= x 3523) (= x 3524) (= x 3525) (= x 3526) (= x 3527) (= x 3528) + (= x 3529) (= x 3530) (= x 3531) (= x 3532) (= x 3533) (= x 3534) (= x 3535) (= x 3536) + (= x 3537) (= x 3538) (= x 3539) (= x 3540) (= x 3541) (= x 3542) (= x 3543) (= x 3544) + (= x 3545) (= x 3546) (= x 3547) (= x 3548) (= x 3549) (= x 3550) (= x 3551) (= x 3552) + (= x 3553) (= x 3554) (= x 3555) (= x 3556) (= x 3557) (= x 3558) (= x 3559) (= x 3560) + (= x 3561) (= x 3562) (= x 3563) (= x 3564) (= x 3565) (= x 3566) (= x 3567) (= x 3568) + (= x 3569) (= x 3570) (= x 3571) (= x 3572) (= x 3573) (= x 3574) (= x 3575) (= x 3576) + (= x 3577) (= x 3578) (= x 3579) (= x 3580) (= x 3581) (= x 3582) (= x 3583) (= x 3584) + (= x 3585) (= x 3586) (= x 3587) (= x 3588) (= x 3589) (= x 3590) (= x 3591) (= x 3592) + (= x 3593) (= x 3594) (= x 3595) (= x 3596) (= x 3597) (= x 3598) (= x 3599) (= x 3600) + (= x 3601) (= x 3602) (= x 3603) (= x 3604) (= x 3605) (= x 3606) (= x 3607) (= x 3608) + (= x 3609) (= x 3610) (= x 3611) (= x 3612) (= x 3613) (= x 3614) (= x 3615) (= x 3616) + (= x 3617) (= x 3618) (= x 3619) (= x 3620) (= x 3621) (= x 3622) (= x 3623) (= x 3624) + (= x 3625) (= x 3626) (= x 3627) (= x 3628) (= x 3629) (= x 3630) (= x 3631) (= x 3632) + (= x 3633) (= x 3634) (= x 3635) (= x 3636) (= x 3637) (= x 3638) (= x 3639) (= x 3640) + (= x 3641) (= x 3642) (= x 3643) (= x 3644) (= x 3645) (= x 3646) (= x 3647) (= x 3648) + (= x 3649) (= x 3650) (= x 3651) (= x 3652) (= x 3653) (= x 3654) (= x 3655) (= x 3656) + (= x 3657) (= x 3658) (= x 3659) (= x 3660) (= x 3661) (= x 3662) (= x 3663) (= x 3664) + (= x 3665) (= x 3666) (= x 3667) (= x 3668) (= x 3669) (= x 3670) (= x 3671) (= x 3672) + (= x 3673) (= x 3674) (= x 3675) (= x 3676) (= x 3677) (= x 3678) (= x 3679) (= x 3680) + (= x 3681) (= x 3682) (= x 3683) (= x 3684) (= x 3685) (= x 3686) (= x 3687) (= x 3688) + (= x 3689) (= x 3690) (= x 3691) (= x 3692) (= x 3693) (= x 3694) (= x 3695) (= x 3696) + (= x 3697) (= x 3698) (= x 3699) (= x 3700) (= x 3701) (= x 3702) (= x 3703) (= x 3704) + (= x 3705) (= x 3706) (= x 3707) (= x 3708) (= x 3709) (= x 3710) (= x 3711) (= x 3712) + (= x 3713) (= x 3714) (= x 3715) (= x 3716) (= x 3717) (= x 3718) (= x 3719) (= x 3720) + (= x 3721) (= x 3722) (= x 3723) (= x 3724) (= x 3725) (= x 3726) (= x 3727) (= x 3728) + (= x 3729) (= x 3730) (= x 3731) (= x 3732) (= x 3733) (= x 3734) (= x 3735) (= x 3736) + (= x 3737) (= x 3738) (= x 3739) (= x 3740) (= x 3741) (= x 3742) (= x 3743) (= x 3744) + (= x 3745) (= x 3746) (= x 3747) (= x 3748) (= x 3749) (= x 3750) (= x 3751) (= x 3752) + (= x 3753) (= x 3754) (= x 3755) (= x 3756) (= x 3757) (= x 3758) (= x 3759) (= x 3760) + (= x 3761) (= x 3762) (= x 3763) (= x 3764) (= x 3765) (= x 3766) (= x 3767) (= x 3768) + (= x 3769) (= x 3770) (= x 3771) (= x 3772) (= x 3773) (= x 3774) (= x 3775) (= x 3776) + (= x 3777) (= x 3778) (= x 3779) (= x 3780) (= x 3781) (= x 3782) (= x 3783) (= x 3784) + (= x 3785) (= x 3786) (= x 3787) (= x 3788) (= x 3789) (= x 3790) (= x 3791) (= x 3792) + (= x 3793) (= x 3794) (= x 3795) (= x 3796) (= x 3797) (= x 3798) (= x 3799) (= x 3800) + (= x 3801) (= x 3802) (= x 3803) (= x 3804) (= x 3805) (= x 3806) (= x 3807) (= x 3808) + (= x 3809) (= x 3810) (= x 3811) (= x 3812) (= x 3813) (= x 3814) (= x 3815) (= x 3816) + (= x 3817) (= x 3818) (= x 3819) (= x 3820) (= x 3821) (= x 3822) (= x 3823) (= x 3824) + (= x 3825) (= x 3826) (= x 3827) (= x 3828) (= x 3829) (= x 3830) (= x 3831) (= x 3832) + (= x 3833) (= x 3834) (= x 3835) (= x 3836) (= x 3837) (= x 3838) (= x 3839) (= x 3840) + (= x 3841) (= x 3842) (= x 3843) (= x 3844) (= x 3845) (= x 3846) (= x 3847) (= x 3848) + (= x 3849) (= x 3850) (= x 3851) (= x 3852) (= x 3853) (= x 3854) (= x 3855) (= x 3856) + (= x 3857) (= x 3858) (= x 3859) (= x 3860) (= x 3861) (= x 3862) (= x 3863) (= x 3864) + (= x 3865) (= x 3866) (= x 3867) (= x 3868) (= x 3869) (= x 3870) (= x 3871) (= x 3872) + (= x 3873) (= x 3874) (= x 3875) (= x 3876) (= x 3877) (= x 3878) (= x 3879) (= x 3880) + (= x 3881) (= x 3882) (= x 3883) (= x 3884) (= x 3885) (= x 3886) (= x 3887) (= x 3888) + (= x 3889) (= x 3890) (= x 3891) (= x 3892) (= x 3893) (= x 3894) (= x 3895) (= x 3896) + (= x 3897) (= x 3898) (= x 3899) (= x 3900) (= x 3901) (= x 3902) (= x 3903) (= x 3904) + (= x 3905) (= x 3906) (= x 3907) (= x 3908) (= x 3909) (= x 3910) (= x 3911) (= x 3912) + (= x 3913) (= x 3914) (= x 3915) (= x 3916) (= x 3917) (= x 3918) (= x 3919) (= x 3920) + (= x 3921) (= x 3922) (= x 3923) (= x 3924) (= x 3925) (= x 3926) (= x 3927) (= x 3928) + (= x 3929) (= x 3930) (= x 3931) (= x 3932) (= x 3933) (= x 3934) (= x 3935) (= x 3936) + (= x 3937) (= x 3938) (= x 3939) (= x 3940) (= x 3941) (= x 3942) (= x 3943) (= x 3944) + (= x 3945) (= x 3946) (= x 3947) (= x 3948) (= x 3949) (= x 3950) (= x 3951) (= x 3952) + (= x 3953) (= x 3954) (= x 3955) (= x 3956) (= x 3957) (= x 3958) (= x 3959) (= x 3960) + (= x 3961) (= x 3962) (= x 3963) (= x 3964) (= x 3965) (= x 3966) (= x 3967) (= x 3968) + (= x 3969) (= x 3970) (= x 3971) (= x 3972) (= x 3973) (= x 3974) (= x 3975) (= x 3976) + (= x 3977) (= x 3978) (= x 3979) (= x 3980) (= x 3981) (= x 3982) (= x 3983) (= x 3984) + (= x 3985) (= x 3986) (= x 3987) (= x 3988) (= x 3989) (= x 3990) (= x 3991) (= x 3992) + (= x 3993) (= x 3994) (= x 3995) (= x 3996) (= x 3997) (= x 3998) (= x 3999) (= x 4000) + (= x 4001) (= x 4002) (= x 4003) (= x 4004) (= x 4005) (= x 4006) (= x 4007) (= x 4008) + (= x 4009) (= x 4010) (= x 4011) (= x 4012) (= x 4013) (= x 4014) (= x 4015) (= x 4016) + (= x 4017) (= x 4018) (= x 4019) (= x 4020) (= x 4021) (= x 4022) (= x 4023) (= x 4024) + (= x 4025) (= x 4026) (= x 4027) (= x 4028) (= x 4029) (= x 4030) (= x 4031) (= x 4032) + (= x 4033) (= x 4034) (= x 4035) (= x 4036) (= x 4037) (= x 4038) (= x 4039) (= x 4040) + (= x 4041) (= x 4042) (= x 4043) (= x 4044) (= x 4045) (= x 4046) (= x 4047) (= x 4048) + (= x 4049) (= x 4050) (= x 4051) (= x 4052) (= x 4053) (= x 4054) (= x 4055) (= x 4056) + (= x 4057) (= x 4058) (= x 4059) (= x 4060) (= x 4061) (= x 4062) (= x 4063) (= x 4064) + (= x 4065) (= x 4066) (= x 4067) (= x 4068) (= x 4069) (= x 4070) (= x 4071) (= x 4072) + (= x 4073) (= x 4074) (= x 4075) (= x 4076) (= x 4077) (= x 4078) (= x 4079) (= x 4080) + (= x 4081) (= x 4082) (= x 4083) (= x 4084) (= x 4085) (= x 4086) (= x 4087) (= x 4088) + (= x 4089) (= x 4090) (= x 4091) (= x 4092) (= x 4093) (= x 4094) (= x 4095) (= x 4096) + )) + (itp x)) +) + +(rule (=> + (and + (itp x) + (= x1 (+ x (+ 4 (- x 1)))) + ) + (itp x1) + ) +) + + +(rule (=> (and (itp x) + (not (> x 0) + )) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/samples_shrink_big_numbers_8192.smt2 b/bench_horn/samples_shrink_big_numbers_8192.smt2 new file mode 100644 index 000000000..71a51d865 --- /dev/null +++ b/bench_horn/samples_shrink_big_numbers_8192.smt2 @@ -0,0 +1,1053 @@ +(declare-rel itp (Int)) +(declare-var x Int) +(declare-var x1 Int) + +(declare-rel fail ()) + +(rule (=> (and + (or + (= x 1) (= x 2) (= x 3) (= x 4) (= x 5) (= x 6) (= x 7) (= x 8) + (= x 9) (= x 10) (= x 11) (= x 12) (= x 13) (= x 14) (= x 15) (= x 16) + (= x 17) (= x 18) (= x 19) (= x 20) (= x 21) (= x 22) (= x 23) (= x 24) + (= x 25) (= x 26) (= x 27) (= x 28) (= x 29) (= x 30) (= x 31) (= x 32) + (= x 33) (= x 34) (= x 35) (= x 36) (= x 37) (= x 38) (= x 39) (= x 40) + (= x 41) (= x 42) (= x 43) (= x 44) (= x 45) (= x 46) (= x 47) (= x 48) + (= x 49) (= x 50) (= x 51) (= x 52) (= x 53) (= x 54) (= x 55) (= x 56) + (= x 57) (= x 58) (= x 59) (= x 60) (= x 61) (= x 62) (= x 63) (= x 64) + (= x 65) (= x 66) (= x 67) (= x 68) (= x 69) (= x 70) (= x 71) (= x 72) + (= x 73) (= x 74) (= x 75) (= x 76) (= x 77) (= x 78) (= x 79) (= x 80) + (= x 81) (= x 82) (= x 83) (= x 84) (= x 85) (= x 86) (= x 87) (= x 88) + (= x 89) (= x 90) (= x 91) (= x 92) (= x 93) (= x 94) (= x 95) (= x 96) + (= x 97) (= x 98) (= x 99) (= x 100) (= x 101) (= x 102) (= x 103) (= x 104) + (= x 105) (= x 106) (= x 107) (= x 108) (= x 109) (= x 110) (= x 111) (= x 112) + (= x 113) (= x 114) (= x 115) (= x 116) (= x 117) (= x 118) (= x 119) (= x 120) + (= x 121) (= x 122) (= x 123) (= x 124) (= x 125) (= x 126) (= x 127) (= x 128) + (= x 129) (= x 130) (= x 131) (= x 132) (= x 133) (= x 134) (= x 135) (= x 136) + (= x 137) (= x 138) (= x 139) (= x 140) (= x 141) (= x 142) (= x 143) (= x 144) + (= x 145) (= x 146) (= x 147) (= x 148) (= x 149) (= x 150) (= x 151) (= x 152) + (= x 153) (= x 154) (= x 155) (= x 156) (= x 157) (= x 158) (= x 159) (= x 160) + (= x 161) (= x 162) (= x 163) (= x 164) (= x 165) (= x 166) (= x 167) (= x 168) + (= x 169) (= x 170) (= x 171) (= x 172) (= x 173) (= x 174) (= x 175) (= x 176) + (= x 177) (= x 178) (= x 179) (= x 180) (= x 181) (= x 182) (= x 183) (= x 184) + (= x 185) (= x 186) (= x 187) (= x 188) (= x 189) (= x 190) (= x 191) (= x 192) + (= x 193) (= x 194) (= x 195) (= x 196) (= x 197) (= x 198) (= x 199) (= x 200) + (= x 201) (= x 202) (= x 203) (= x 204) (= x 205) (= x 206) (= x 207) (= x 208) + (= x 209) (= x 210) (= x 211) (= x 212) (= x 213) (= x 214) (= x 215) (= x 216) + (= x 217) (= x 218) (= x 219) (= x 220) (= x 221) (= x 222) (= x 223) (= x 224) + (= x 225) (= x 226) (= x 227) (= x 228) (= x 229) (= x 230) (= x 231) (= x 232) + (= x 233) (= x 234) (= x 235) (= x 236) (= x 237) (= x 238) (= x 239) (= x 240) + (= x 241) (= x 242) (= x 243) (= x 244) (= x 245) (= x 246) (= x 247) (= x 248) + (= x 249) (= x 250) (= x 251) (= x 252) (= x 253) (= x 254) (= x 255) (= x 256) + (= x 257) (= x 258) (= x 259) (= x 260) (= x 261) (= x 262) (= x 263) (= x 264) + (= x 265) (= x 266) (= x 267) (= x 268) (= x 269) (= x 270) (= x 271) (= x 272) + (= x 273) (= x 274) (= x 275) (= x 276) (= x 277) (= x 278) (= x 279) (= x 280) + (= x 281) (= x 282) (= x 283) (= x 284) (= x 285) (= x 286) (= x 287) (= x 288) + (= x 289) (= x 290) (= x 291) (= x 292) (= x 293) (= x 294) (= x 295) (= x 296) + (= x 297) (= x 298) (= x 299) (= x 300) (= x 301) (= x 302) (= x 303) (= x 304) + (= x 305) (= x 306) (= x 307) (= x 308) (= x 309) (= x 310) (= x 311) (= x 312) + (= x 313) (= x 314) (= x 315) (= x 316) (= x 317) (= x 318) (= x 319) (= x 320) + (= x 321) (= x 322) (= x 323) (= x 324) (= x 325) (= x 326) (= x 327) (= x 328) + (= x 329) (= x 330) (= x 331) (= x 332) (= x 333) (= x 334) (= x 335) (= x 336) + (= x 337) (= x 338) (= x 339) (= x 340) (= x 341) (= x 342) (= x 343) (= x 344) + (= x 345) (= x 346) (= x 347) (= x 348) (= x 349) (= x 350) (= x 351) (= x 352) + (= x 353) (= x 354) (= x 355) (= x 356) (= x 357) (= x 358) (= x 359) (= x 360) + (= x 361) (= x 362) (= x 363) (= x 364) (= x 365) (= x 366) (= x 367) (= x 368) + (= x 369) (= x 370) (= x 371) (= x 372) (= x 373) (= x 374) (= x 375) (= x 376) + (= x 377) (= x 378) (= x 379) (= x 380) (= x 381) (= x 382) (= x 383) (= x 384) + (= x 385) (= x 386) (= x 387) (= x 388) (= x 389) (= x 390) (= x 391) (= x 392) + (= x 393) (= x 394) (= x 395) (= x 396) (= x 397) (= x 398) (= x 399) (= x 400) + (= x 401) (= x 402) (= x 403) (= x 404) (= x 405) (= x 406) (= x 407) (= x 408) + (= x 409) (= x 410) (= x 411) (= x 412) (= x 413) (= x 414) (= x 415) (= x 416) + (= x 417) (= x 418) (= x 419) (= x 420) (= x 421) (= x 422) (= x 423) (= x 424) + (= x 425) (= x 426) (= x 427) (= x 428) (= x 429) (= x 430) (= x 431) (= x 432) + (= x 433) (= x 434) (= x 435) (= x 436) (= x 437) (= x 438) (= x 439) (= x 440) + (= x 441) (= x 442) (= x 443) (= x 444) (= x 445) (= x 446) (= x 447) (= x 448) + (= x 449) (= x 450) (= x 451) (= x 452) (= x 453) (= x 454) (= x 455) (= x 456) + (= x 457) (= x 458) (= x 459) (= x 460) (= x 461) (= x 462) (= x 463) (= x 464) + (= x 465) (= x 466) (= x 467) (= x 468) (= x 469) (= x 470) (= x 471) (= x 472) + (= x 473) (= x 474) (= x 475) (= x 476) (= x 477) (= x 478) (= x 479) (= x 480) + (= x 481) (= x 482) (= x 483) (= x 484) (= x 485) (= x 486) (= x 487) (= x 488) + (= x 489) (= x 490) (= x 491) (= x 492) (= x 493) (= x 494) (= x 495) (= x 496) + (= x 497) (= x 498) (= x 499) (= x 500) (= x 501) (= x 502) (= x 503) (= x 504) + (= x 505) (= x 506) (= x 507) (= x 508) (= x 509) (= x 510) (= x 511) (= x 512) + (= x 513) (= x 514) (= x 515) (= x 516) (= x 517) (= x 518) (= x 519) (= x 520) + (= x 521) (= x 522) (= x 523) (= x 524) (= x 525) (= x 526) (= x 527) (= x 528) + (= x 529) (= x 530) (= x 531) (= x 532) (= x 533) (= x 534) (= x 535) (= x 536) + (= x 537) (= x 538) (= x 539) (= x 540) (= x 541) (= x 542) (= x 543) (= x 544) + (= x 545) (= x 546) (= x 547) (= x 548) (= x 549) (= x 550) (= x 551) (= x 552) + (= x 553) (= x 554) (= x 555) (= x 556) (= x 557) (= x 558) (= x 559) (= x 560) + (= x 561) (= x 562) (= x 563) (= x 564) (= x 565) (= x 566) (= x 567) (= x 568) + (= x 569) (= x 570) (= x 571) (= x 572) (= x 573) (= x 574) (= x 575) (= x 576) + (= x 577) (= x 578) (= x 579) (= x 580) (= x 581) (= x 582) (= x 583) (= x 584) + (= x 585) (= x 586) (= x 587) (= x 588) (= x 589) (= x 590) (= x 591) (= x 592) + (= x 593) (= x 594) (= x 595) (= x 596) (= x 597) (= x 598) (= x 599) (= x 600) + (= x 601) (= x 602) (= x 603) (= x 604) (= x 605) (= x 606) (= x 607) (= x 608) + (= x 609) (= x 610) (= x 611) (= x 612) (= x 613) (= x 614) (= x 615) (= x 616) + (= x 617) (= x 618) (= x 619) (= x 620) (= x 621) (= x 622) (= x 623) (= x 624) + (= x 625) (= x 626) (= x 627) (= x 628) (= x 629) (= x 630) (= x 631) (= x 632) + (= x 633) (= x 634) (= x 635) (= x 636) (= x 637) (= x 638) (= x 639) (= x 640) + (= x 641) (= x 642) (= x 643) (= x 644) (= x 645) (= x 646) (= x 647) (= x 648) + (= x 649) (= x 650) (= x 651) (= x 652) (= x 653) (= x 654) (= x 655) (= x 656) + (= x 657) (= x 658) (= x 659) (= x 660) (= x 661) (= x 662) (= x 663) (= x 664) + (= x 665) (= x 666) (= x 667) (= x 668) (= x 669) (= x 670) (= x 671) (= x 672) + (= x 673) (= x 674) (= x 675) (= x 676) (= x 677) (= x 678) (= x 679) (= x 680) + (= x 681) (= x 682) (= x 683) (= x 684) (= x 685) (= x 686) (= x 687) (= x 688) + (= x 689) (= x 690) (= x 691) (= x 692) (= x 693) (= x 694) (= x 695) (= x 696) + (= x 697) (= x 698) (= x 699) (= x 700) (= x 701) (= x 702) (= x 703) (= x 704) + (= x 705) (= x 706) (= x 707) (= x 708) (= x 709) (= x 710) (= x 711) (= x 712) + (= x 713) (= x 714) (= x 715) (= x 716) (= x 717) (= x 718) (= x 719) (= x 720) + (= x 721) (= x 722) (= x 723) (= x 724) (= x 725) (= x 726) (= x 727) (= x 728) + (= x 729) (= x 730) (= x 731) (= x 732) (= x 733) (= x 734) (= x 735) (= x 736) + (= x 737) (= x 738) (= x 739) (= x 740) (= x 741) (= x 742) (= x 743) (= x 744) + (= x 745) (= x 746) (= x 747) (= x 748) (= x 749) (= x 750) (= x 751) (= x 752) + (= x 753) (= x 754) (= x 755) (= x 756) (= x 757) (= x 758) (= x 759) (= x 760) + (= x 761) (= x 762) (= x 763) (= x 764) (= x 765) (= x 766) (= x 767) (= x 768) + (= x 769) (= x 770) (= x 771) (= x 772) (= x 773) (= x 774) (= x 775) (= x 776) + (= x 777) (= x 778) (= x 779) (= x 780) (= x 781) (= x 782) (= x 783) (= x 784) + (= x 785) (= x 786) (= x 787) (= x 788) (= x 789) (= x 790) (= x 791) (= x 792) + (= x 793) (= x 794) (= x 795) (= x 796) (= x 797) (= x 798) (= x 799) (= x 800) + (= x 801) (= x 802) (= x 803) (= x 804) (= x 805) (= x 806) (= x 807) (= x 808) + (= x 809) (= x 810) (= x 811) (= x 812) (= x 813) (= x 814) (= x 815) (= x 816) + (= x 817) (= x 818) (= x 819) (= x 820) (= x 821) (= x 822) (= x 823) (= x 824) + (= x 825) (= x 826) (= x 827) (= x 828) (= x 829) (= x 830) (= x 831) (= x 832) + (= x 833) (= x 834) (= x 835) (= x 836) (= x 837) (= x 838) (= x 839) (= x 840) + (= x 841) (= x 842) (= x 843) (= x 844) (= x 845) (= x 846) (= x 847) (= x 848) + (= x 849) (= x 850) (= x 851) (= x 852) (= x 853) (= x 854) (= x 855) (= x 856) + (= x 857) (= x 858) (= x 859) (= x 860) (= x 861) (= x 862) (= x 863) (= x 864) + (= x 865) (= x 866) (= x 867) (= x 868) (= x 869) (= x 870) (= x 871) (= x 872) + (= x 873) (= x 874) (= x 875) (= x 876) (= x 877) (= x 878) (= x 879) (= x 880) + (= x 881) (= x 882) (= x 883) (= x 884) (= x 885) (= x 886) (= x 887) (= x 888) + (= x 889) (= x 890) (= x 891) (= x 892) (= x 893) (= x 894) (= x 895) (= x 896) + (= x 897) (= x 898) (= x 899) (= x 900) (= x 901) (= x 902) (= x 903) (= x 904) + (= x 905) (= x 906) (= x 907) (= x 908) (= x 909) (= x 910) (= x 911) (= x 912) + (= x 913) (= x 914) (= x 915) (= x 916) (= x 917) (= x 918) (= x 919) (= x 920) + (= x 921) (= x 922) (= x 923) (= x 924) (= x 925) (= x 926) (= x 927) (= x 928) + (= x 929) (= x 930) (= x 931) (= x 932) (= x 933) (= x 934) (= x 935) (= x 936) + (= x 937) (= x 938) (= x 939) (= x 940) (= x 941) (= x 942) (= x 943) (= x 944) + (= x 945) (= x 946) (= x 947) (= x 948) (= x 949) (= x 950) (= x 951) (= x 952) + (= x 953) (= x 954) (= x 955) (= x 956) (= x 957) (= x 958) (= x 959) (= x 960) + (= x 961) (= x 962) (= x 963) (= x 964) (= x 965) (= x 966) (= x 967) (= x 968) + (= x 969) (= x 970) (= x 971) (= x 972) (= x 973) (= x 974) (= x 975) (= x 976) + (= x 977) (= x 978) (= x 979) (= x 980) (= x 981) (= x 982) (= x 983) (= x 984) + (= x 985) (= x 986) (= x 987) (= x 988) (= x 989) (= x 990) (= x 991) (= x 992) + (= x 993) (= x 994) (= x 995) (= x 996) (= x 997) (= x 998) (= x 999) (= x 1000) + (= x 1001) (= x 1002) (= x 1003) (= x 1004) (= x 1005) (= x 1006) (= x 1007) (= x 1008) + (= x 1009) (= x 1010) (= x 1011) (= x 1012) (= x 1013) (= x 1014) (= x 1015) (= x 1016) + (= x 1017) (= x 1018) (= x 1019) (= x 1020) (= x 1021) (= x 1022) (= x 1023) (= x 1024) + (= x 1025) (= x 1026) (= x 1027) (= x 1028) (= x 1029) (= x 1030) (= x 1031) (= x 1032) + (= x 1033) (= x 1034) (= x 1035) (= x 1036) (= x 1037) (= x 1038) (= x 1039) (= x 1040) + (= x 1041) (= x 1042) (= x 1043) (= x 1044) (= x 1045) (= x 1046) (= x 1047) (= x 1048) + (= x 1049) (= x 1050) (= x 1051) (= x 1052) (= x 1053) (= x 1054) (= x 1055) (= x 1056) + (= x 1057) (= x 1058) (= x 1059) (= x 1060) (= x 1061) (= x 1062) (= x 1063) (= x 1064) + (= x 1065) (= x 1066) (= x 1067) (= x 1068) (= x 1069) (= x 1070) (= x 1071) (= x 1072) + (= x 1073) (= x 1074) (= x 1075) (= x 1076) (= x 1077) (= x 1078) (= x 1079) (= x 1080) + (= x 1081) (= x 1082) (= x 1083) (= x 1084) (= x 1085) (= x 1086) (= x 1087) (= x 1088) + (= x 1089) (= x 1090) (= x 1091) (= x 1092) (= x 1093) (= x 1094) (= x 1095) (= x 1096) + (= x 1097) (= x 1098) (= x 1099) (= x 1100) (= x 1101) (= x 1102) (= x 1103) (= x 1104) + (= x 1105) (= x 1106) (= x 1107) (= x 1108) (= x 1109) (= x 1110) (= x 1111) (= x 1112) + (= x 1113) (= x 1114) (= x 1115) (= x 1116) (= x 1117) (= x 1118) (= x 1119) (= x 1120) + (= x 1121) (= x 1122) (= x 1123) (= x 1124) (= x 1125) (= x 1126) (= x 1127) (= x 1128) + (= x 1129) (= x 1130) (= x 1131) (= x 1132) (= x 1133) (= x 1134) (= x 1135) (= x 1136) + (= x 1137) (= x 1138) (= x 1139) (= x 1140) (= x 1141) (= x 1142) (= x 1143) (= x 1144) + (= x 1145) (= x 1146) (= x 1147) (= x 1148) (= x 1149) (= x 1150) (= x 1151) (= x 1152) + (= x 1153) (= x 1154) (= x 1155) (= x 1156) (= x 1157) (= x 1158) (= x 1159) (= x 1160) + (= x 1161) (= x 1162) (= x 1163) (= x 1164) (= x 1165) (= x 1166) (= x 1167) (= x 1168) + (= x 1169) (= x 1170) (= x 1171) (= x 1172) (= x 1173) (= x 1174) (= x 1175) (= x 1176) + (= x 1177) (= x 1178) (= x 1179) (= x 1180) (= x 1181) (= x 1182) (= x 1183) (= x 1184) + (= x 1185) (= x 1186) (= x 1187) (= x 1188) (= x 1189) (= x 1190) (= x 1191) (= x 1192) + (= x 1193) (= x 1194) (= x 1195) (= x 1196) (= x 1197) (= x 1198) (= x 1199) (= x 1200) + (= x 1201) (= x 1202) (= x 1203) (= x 1204) (= x 1205) (= x 1206) (= x 1207) (= x 1208) + (= x 1209) (= x 1210) (= x 1211) (= x 1212) (= x 1213) (= x 1214) (= x 1215) (= x 1216) + (= x 1217) (= x 1218) (= x 1219) (= x 1220) (= x 1221) (= x 1222) (= x 1223) (= x 1224) + (= x 1225) (= x 1226) (= x 1227) (= x 1228) (= x 1229) (= x 1230) (= x 1231) (= x 1232) + (= x 1233) (= x 1234) (= x 1235) (= x 1236) (= x 1237) (= x 1238) (= x 1239) (= x 1240) + (= x 1241) (= x 1242) (= x 1243) (= x 1244) (= x 1245) (= x 1246) (= x 1247) (= x 1248) + (= x 1249) (= x 1250) (= x 1251) (= x 1252) (= x 1253) (= x 1254) (= x 1255) (= x 1256) + (= x 1257) (= x 1258) (= x 1259) (= x 1260) (= x 1261) (= x 1262) (= x 1263) (= x 1264) + (= x 1265) (= x 1266) (= x 1267) (= x 1268) (= x 1269) (= x 1270) (= x 1271) (= x 1272) + (= x 1273) (= x 1274) (= x 1275) (= x 1276) (= x 1277) (= x 1278) (= x 1279) (= x 1280) + (= x 1281) (= x 1282) (= x 1283) (= x 1284) (= x 1285) (= x 1286) (= x 1287) (= x 1288) + (= x 1289) (= x 1290) (= x 1291) (= x 1292) (= x 1293) (= x 1294) (= x 1295) (= x 1296) + (= x 1297) (= x 1298) (= x 1299) (= x 1300) (= x 1301) (= x 1302) (= x 1303) (= x 1304) + (= x 1305) (= x 1306) (= x 1307) (= x 1308) (= x 1309) (= x 1310) (= x 1311) (= x 1312) + (= x 1313) (= x 1314) (= x 1315) (= x 1316) (= x 1317) (= x 1318) (= x 1319) (= x 1320) + (= x 1321) (= x 1322) (= x 1323) (= x 1324) (= x 1325) (= x 1326) (= x 1327) (= x 1328) + (= x 1329) (= x 1330) (= x 1331) (= x 1332) (= x 1333) (= x 1334) (= x 1335) (= x 1336) + (= x 1337) (= x 1338) (= x 1339) (= x 1340) (= x 1341) (= x 1342) (= x 1343) (= x 1344) + (= x 1345) (= x 1346) (= x 1347) (= x 1348) (= x 1349) (= x 1350) (= x 1351) (= x 1352) + (= x 1353) (= x 1354) (= x 1355) (= x 1356) (= x 1357) (= x 1358) (= x 1359) (= x 1360) + (= x 1361) (= x 1362) (= x 1363) (= x 1364) (= x 1365) (= x 1366) (= x 1367) (= x 1368) + (= x 1369) (= x 1370) (= x 1371) (= x 1372) (= x 1373) (= x 1374) (= x 1375) (= x 1376) + (= x 1377) (= x 1378) (= x 1379) (= x 1380) (= x 1381) (= x 1382) (= x 1383) (= x 1384) + (= x 1385) (= x 1386) (= x 1387) (= x 1388) (= x 1389) (= x 1390) (= x 1391) (= x 1392) + (= x 1393) (= x 1394) (= x 1395) (= x 1396) (= x 1397) (= x 1398) (= x 1399) (= x 1400) + (= x 1401) (= x 1402) (= x 1403) (= x 1404) (= x 1405) (= x 1406) (= x 1407) (= x 1408) + (= x 1409) (= x 1410) (= x 1411) (= x 1412) (= x 1413) (= x 1414) (= x 1415) (= x 1416) + (= x 1417) (= x 1418) (= x 1419) (= x 1420) (= x 1421) (= x 1422) (= x 1423) (= x 1424) + (= x 1425) (= x 1426) (= x 1427) (= x 1428) (= x 1429) (= x 1430) (= x 1431) (= x 1432) + (= x 1433) (= x 1434) (= x 1435) (= x 1436) (= x 1437) (= x 1438) (= x 1439) (= x 1440) + (= x 1441) (= x 1442) (= x 1443) (= x 1444) (= x 1445) (= x 1446) (= x 1447) (= x 1448) + (= x 1449) (= x 1450) (= x 1451) (= x 1452) (= x 1453) (= x 1454) (= x 1455) (= x 1456) + (= x 1457) (= x 1458) (= x 1459) (= x 1460) (= x 1461) (= x 1462) (= x 1463) (= x 1464) + (= x 1465) (= x 1466) (= x 1467) (= x 1468) (= x 1469) (= x 1470) (= x 1471) (= x 1472) + (= x 1473) (= x 1474) (= x 1475) (= x 1476) (= x 1477) (= x 1478) (= x 1479) (= x 1480) + (= x 1481) (= x 1482) (= x 1483) (= x 1484) (= x 1485) (= x 1486) (= x 1487) (= x 1488) + (= x 1489) (= x 1490) (= x 1491) (= x 1492) (= x 1493) (= x 1494) (= x 1495) (= x 1496) + (= x 1497) (= x 1498) (= x 1499) (= x 1500) (= x 1501) (= x 1502) (= x 1503) (= x 1504) + (= x 1505) (= x 1506) (= x 1507) (= x 1508) (= x 1509) (= x 1510) (= x 1511) (= x 1512) + (= x 1513) (= x 1514) (= x 1515) (= x 1516) (= x 1517) (= x 1518) (= x 1519) (= x 1520) + (= x 1521) (= x 1522) (= x 1523) (= x 1524) (= x 1525) (= x 1526) (= x 1527) (= x 1528) + (= x 1529) (= x 1530) (= x 1531) (= x 1532) (= x 1533) (= x 1534) (= x 1535) (= x 1536) + (= x 1537) (= x 1538) (= x 1539) (= x 1540) (= x 1541) (= x 1542) (= x 1543) (= x 1544) + (= x 1545) (= x 1546) (= x 1547) (= x 1548) (= x 1549) (= x 1550) (= x 1551) (= x 1552) + (= x 1553) (= x 1554) (= x 1555) (= x 1556) (= x 1557) (= x 1558) (= x 1559) (= x 1560) + (= x 1561) (= x 1562) (= x 1563) (= x 1564) (= x 1565) (= x 1566) (= x 1567) (= x 1568) + (= x 1569) (= x 1570) (= x 1571) (= x 1572) (= x 1573) (= x 1574) (= x 1575) (= x 1576) + (= x 1577) (= x 1578) (= x 1579) (= x 1580) (= x 1581) (= x 1582) (= x 1583) (= x 1584) + (= x 1585) (= x 1586) (= x 1587) (= x 1588) (= x 1589) (= x 1590) (= x 1591) (= x 1592) + (= x 1593) (= x 1594) (= x 1595) (= x 1596) (= x 1597) (= x 1598) (= x 1599) (= x 1600) + (= x 1601) (= x 1602) (= x 1603) (= x 1604) (= x 1605) (= x 1606) (= x 1607) (= x 1608) + (= x 1609) (= x 1610) (= x 1611) (= x 1612) (= x 1613) (= x 1614) (= x 1615) (= x 1616) + (= x 1617) (= x 1618) (= x 1619) (= x 1620) (= x 1621) (= x 1622) (= x 1623) (= x 1624) + (= x 1625) (= x 1626) (= x 1627) (= x 1628) (= x 1629) (= x 1630) (= x 1631) (= x 1632) + (= x 1633) (= x 1634) (= x 1635) (= x 1636) (= x 1637) (= x 1638) (= x 1639) (= x 1640) + (= x 1641) (= x 1642) (= x 1643) (= x 1644) (= x 1645) (= x 1646) (= x 1647) (= x 1648) + (= x 1649) (= x 1650) (= x 1651) (= x 1652) (= x 1653) (= x 1654) (= x 1655) (= x 1656) + (= x 1657) (= x 1658) (= x 1659) (= x 1660) (= x 1661) (= x 1662) (= x 1663) (= x 1664) + (= x 1665) (= x 1666) (= x 1667) (= x 1668) (= x 1669) (= x 1670) (= x 1671) (= x 1672) + (= x 1673) (= x 1674) (= x 1675) (= x 1676) (= x 1677) (= x 1678) (= x 1679) (= x 1680) + (= x 1681) (= x 1682) (= x 1683) (= x 1684) (= x 1685) (= x 1686) (= x 1687) (= x 1688) + (= x 1689) (= x 1690) (= x 1691) (= x 1692) (= x 1693) (= x 1694) (= x 1695) (= x 1696) + (= x 1697) (= x 1698) (= x 1699) (= x 1700) (= x 1701) (= x 1702) (= x 1703) (= x 1704) + (= x 1705) (= x 1706) (= x 1707) (= x 1708) (= x 1709) (= x 1710) (= x 1711) (= x 1712) + (= x 1713) (= x 1714) (= x 1715) (= x 1716) (= x 1717) (= x 1718) (= x 1719) (= x 1720) + (= x 1721) (= x 1722) (= x 1723) (= x 1724) (= x 1725) (= x 1726) (= x 1727) (= x 1728) + (= x 1729) (= x 1730) (= x 1731) (= x 1732) (= x 1733) (= x 1734) (= x 1735) (= x 1736) + (= x 1737) (= x 1738) (= x 1739) (= x 1740) (= x 1741) (= x 1742) (= x 1743) (= x 1744) + (= x 1745) (= x 1746) (= x 1747) (= x 1748) (= x 1749) (= x 1750) (= x 1751) (= x 1752) + (= x 1753) (= x 1754) (= x 1755) (= x 1756) (= x 1757) (= x 1758) (= x 1759) (= x 1760) + (= x 1761) (= x 1762) (= x 1763) (= x 1764) (= x 1765) (= x 1766) (= x 1767) (= x 1768) + (= x 1769) (= x 1770) (= x 1771) (= x 1772) (= x 1773) (= x 1774) (= x 1775) (= x 1776) + (= x 1777) (= x 1778) (= x 1779) (= x 1780) (= x 1781) (= x 1782) (= x 1783) (= x 1784) + (= x 1785) (= x 1786) (= x 1787) (= x 1788) (= x 1789) (= x 1790) (= x 1791) (= x 1792) + (= x 1793) (= x 1794) (= x 1795) (= x 1796) (= x 1797) (= x 1798) (= x 1799) (= x 1800) + (= x 1801) (= x 1802) (= x 1803) (= x 1804) (= x 1805) (= x 1806) (= x 1807) (= x 1808) + (= x 1809) (= x 1810) (= x 1811) (= x 1812) (= x 1813) (= x 1814) (= x 1815) (= x 1816) + (= x 1817) (= x 1818) (= x 1819) (= x 1820) (= x 1821) (= x 1822) (= x 1823) (= x 1824) + (= x 1825) (= x 1826) (= x 1827) (= x 1828) (= x 1829) (= x 1830) (= x 1831) (= x 1832) + (= x 1833) (= x 1834) (= x 1835) (= x 1836) (= x 1837) (= x 1838) (= x 1839) (= x 1840) + (= x 1841) (= x 1842) (= x 1843) (= x 1844) (= x 1845) (= x 1846) (= x 1847) (= x 1848) + (= x 1849) (= x 1850) (= x 1851) (= x 1852) (= x 1853) (= x 1854) (= x 1855) (= x 1856) + (= x 1857) (= x 1858) (= x 1859) (= x 1860) (= x 1861) (= x 1862) (= x 1863) (= x 1864) + (= x 1865) (= x 1866) (= x 1867) (= x 1868) (= x 1869) (= x 1870) (= x 1871) (= x 1872) + (= x 1873) (= x 1874) (= x 1875) (= x 1876) (= x 1877) (= x 1878) (= x 1879) (= x 1880) + (= x 1881) (= x 1882) (= x 1883) (= x 1884) (= x 1885) (= x 1886) (= x 1887) (= x 1888) + (= x 1889) (= x 1890) (= x 1891) (= x 1892) (= x 1893) (= x 1894) (= x 1895) (= x 1896) + (= x 1897) (= x 1898) (= x 1899) (= x 1900) (= x 1901) (= x 1902) (= x 1903) (= x 1904) + (= x 1905) (= x 1906) (= x 1907) (= x 1908) (= x 1909) (= x 1910) (= x 1911) (= x 1912) + (= x 1913) (= x 1914) (= x 1915) (= x 1916) (= x 1917) (= x 1918) (= x 1919) (= x 1920) + (= x 1921) (= x 1922) (= x 1923) (= x 1924) (= x 1925) (= x 1926) (= x 1927) (= x 1928) + (= x 1929) (= x 1930) (= x 1931) (= x 1932) (= x 1933) (= x 1934) (= x 1935) (= x 1936) + (= x 1937) (= x 1938) (= x 1939) (= x 1940) (= x 1941) (= x 1942) (= x 1943) (= x 1944) + (= x 1945) (= x 1946) (= x 1947) (= x 1948) (= x 1949) (= x 1950) (= x 1951) (= x 1952) + (= x 1953) (= x 1954) (= x 1955) (= x 1956) (= x 1957) (= x 1958) (= x 1959) (= x 1960) + (= x 1961) (= x 1962) (= x 1963) (= x 1964) (= x 1965) (= x 1966) (= x 1967) (= x 1968) + (= x 1969) (= x 1970) (= x 1971) (= x 1972) (= x 1973) (= x 1974) (= x 1975) (= x 1976) + (= x 1977) (= x 1978) (= x 1979) (= x 1980) (= x 1981) (= x 1982) (= x 1983) (= x 1984) + (= x 1985) (= x 1986) (= x 1987) (= x 1988) (= x 1989) (= x 1990) (= x 1991) (= x 1992) + (= x 1993) (= x 1994) (= x 1995) (= x 1996) (= x 1997) (= x 1998) (= x 1999) (= x 2000) + (= x 2001) (= x 2002) (= x 2003) (= x 2004) (= x 2005) (= x 2006) (= x 2007) (= x 2008) + (= x 2009) (= x 2010) (= x 2011) (= x 2012) (= x 2013) (= x 2014) (= x 2015) (= x 2016) + (= x 2017) (= x 2018) (= x 2019) (= x 2020) (= x 2021) (= x 2022) (= x 2023) (= x 2024) + (= x 2025) (= x 2026) (= x 2027) (= x 2028) (= x 2029) (= x 2030) (= x 2031) (= x 2032) + (= x 2033) (= x 2034) (= x 2035) (= x 2036) (= x 2037) (= x 2038) (= x 2039) (= x 2040) + (= x 2041) (= x 2042) (= x 2043) (= x 2044) (= x 2045) (= x 2046) (= x 2047) (= x 2048) + (= x 2049) (= x 2050) (= x 2051) (= x 2052) (= x 2053) (= x 2054) (= x 2055) (= x 2056) + (= x 2057) (= x 2058) (= x 2059) (= x 2060) (= x 2061) (= x 2062) (= x 2063) (= x 2064) + (= x 2065) (= x 2066) (= x 2067) (= x 2068) (= x 2069) (= x 2070) (= x 2071) (= x 2072) + (= x 2073) (= x 2074) (= x 2075) (= x 2076) (= x 2077) (= x 2078) (= x 2079) (= x 2080) + (= x 2081) (= x 2082) (= x 2083) (= x 2084) (= x 2085) (= x 2086) (= x 2087) (= x 2088) + (= x 2089) (= x 2090) (= x 2091) (= x 2092) (= x 2093) (= x 2094) (= x 2095) (= x 2096) + (= x 2097) (= x 2098) (= x 2099) (= x 2100) (= x 2101) (= x 2102) (= x 2103) (= x 2104) + (= x 2105) (= x 2106) (= x 2107) (= x 2108) (= x 2109) (= x 2110) (= x 2111) (= x 2112) + (= x 2113) (= x 2114) (= x 2115) (= x 2116) (= x 2117) (= x 2118) (= x 2119) (= x 2120) + (= x 2121) (= x 2122) (= x 2123) (= x 2124) (= x 2125) (= x 2126) (= x 2127) (= x 2128) + (= x 2129) (= x 2130) (= x 2131) (= x 2132) (= x 2133) (= x 2134) (= x 2135) (= x 2136) + (= x 2137) (= x 2138) (= x 2139) (= x 2140) (= x 2141) (= x 2142) (= x 2143) (= x 2144) + (= x 2145) (= x 2146) (= x 2147) (= x 2148) (= x 2149) (= x 2150) (= x 2151) (= x 2152) + (= x 2153) (= x 2154) (= x 2155) (= x 2156) (= x 2157) (= x 2158) (= x 2159) (= x 2160) + (= x 2161) (= x 2162) (= x 2163) (= x 2164) (= x 2165) (= x 2166) (= x 2167) (= x 2168) + (= x 2169) (= x 2170) (= x 2171) (= x 2172) (= x 2173) (= x 2174) (= x 2175) (= x 2176) + (= x 2177) (= x 2178) (= x 2179) (= x 2180) (= x 2181) (= x 2182) (= x 2183) (= x 2184) + (= x 2185) (= x 2186) (= x 2187) (= x 2188) (= x 2189) (= x 2190) (= x 2191) (= x 2192) + (= x 2193) (= x 2194) (= x 2195) (= x 2196) (= x 2197) (= x 2198) (= x 2199) (= x 2200) + (= x 2201) (= x 2202) (= x 2203) (= x 2204) (= x 2205) (= x 2206) (= x 2207) (= x 2208) + (= x 2209) (= x 2210) (= x 2211) (= x 2212) (= x 2213) (= x 2214) (= x 2215) (= x 2216) + (= x 2217) (= x 2218) (= x 2219) (= x 2220) (= x 2221) (= x 2222) (= x 2223) (= x 2224) + (= x 2225) (= x 2226) (= x 2227) (= x 2228) (= x 2229) (= x 2230) (= x 2231) (= x 2232) + (= x 2233) (= x 2234) (= x 2235) (= x 2236) (= x 2237) (= x 2238) (= x 2239) (= x 2240) + (= x 2241) (= x 2242) (= x 2243) (= x 2244) (= x 2245) (= x 2246) (= x 2247) (= x 2248) + (= x 2249) (= x 2250) (= x 2251) (= x 2252) (= x 2253) (= x 2254) (= x 2255) (= x 2256) + (= x 2257) (= x 2258) (= x 2259) (= x 2260) (= x 2261) (= x 2262) (= x 2263) (= x 2264) + (= x 2265) (= x 2266) (= x 2267) (= x 2268) (= x 2269) (= x 2270) (= x 2271) (= x 2272) + (= x 2273) (= x 2274) (= x 2275) (= x 2276) (= x 2277) (= x 2278) (= x 2279) (= x 2280) + (= x 2281) (= x 2282) (= x 2283) (= x 2284) (= x 2285) (= x 2286) (= x 2287) (= x 2288) + (= x 2289) (= x 2290) (= x 2291) (= x 2292) (= x 2293) (= x 2294) (= x 2295) (= x 2296) + (= x 2297) (= x 2298) (= x 2299) (= x 2300) (= x 2301) (= x 2302) (= x 2303) (= x 2304) + (= x 2305) (= x 2306) (= x 2307) (= x 2308) (= x 2309) (= x 2310) (= x 2311) (= x 2312) + (= x 2313) (= x 2314) (= x 2315) (= x 2316) (= x 2317) (= x 2318) (= x 2319) (= x 2320) + (= x 2321) (= x 2322) (= x 2323) (= x 2324) (= x 2325) (= x 2326) (= x 2327) (= x 2328) + (= x 2329) (= x 2330) (= x 2331) (= x 2332) (= x 2333) (= x 2334) (= x 2335) (= x 2336) + (= x 2337) (= x 2338) (= x 2339) (= x 2340) (= x 2341) (= x 2342) (= x 2343) (= x 2344) + (= x 2345) (= x 2346) (= x 2347) (= x 2348) (= x 2349) (= x 2350) (= x 2351) (= x 2352) + (= x 2353) (= x 2354) (= x 2355) (= x 2356) (= x 2357) (= x 2358) (= x 2359) (= x 2360) + (= x 2361) (= x 2362) (= x 2363) (= x 2364) (= x 2365) (= x 2366) (= x 2367) (= x 2368) + (= x 2369) (= x 2370) (= x 2371) (= x 2372) (= x 2373) (= x 2374) (= x 2375) (= x 2376) + (= x 2377) (= x 2378) (= x 2379) (= x 2380) (= x 2381) (= x 2382) (= x 2383) (= x 2384) + (= x 2385) (= x 2386) (= x 2387) (= x 2388) (= x 2389) (= x 2390) (= x 2391) (= x 2392) + (= x 2393) (= x 2394) (= x 2395) (= x 2396) (= x 2397) (= x 2398) (= x 2399) (= x 2400) + (= x 2401) (= x 2402) (= x 2403) (= x 2404) (= x 2405) (= x 2406) (= x 2407) (= x 2408) + (= x 2409) (= x 2410) (= x 2411) (= x 2412) (= x 2413) (= x 2414) (= x 2415) (= x 2416) + (= x 2417) (= x 2418) (= x 2419) (= x 2420) (= x 2421) (= x 2422) (= x 2423) (= x 2424) + (= x 2425) (= x 2426) (= x 2427) (= x 2428) (= x 2429) (= x 2430) (= x 2431) (= x 2432) + (= x 2433) (= x 2434) (= x 2435) (= x 2436) (= x 2437) (= x 2438) (= x 2439) (= x 2440) + (= x 2441) (= x 2442) (= x 2443) (= x 2444) (= x 2445) (= x 2446) (= x 2447) (= x 2448) + (= x 2449) (= x 2450) (= x 2451) (= x 2452) (= x 2453) (= x 2454) (= x 2455) (= x 2456) + (= x 2457) (= x 2458) (= x 2459) (= x 2460) (= x 2461) (= x 2462) (= x 2463) (= x 2464) + (= x 2465) (= x 2466) (= x 2467) (= x 2468) (= x 2469) (= x 2470) (= x 2471) (= x 2472) + (= x 2473) (= x 2474) (= x 2475) (= x 2476) (= x 2477) (= x 2478) (= x 2479) (= x 2480) + (= x 2481) (= x 2482) (= x 2483) (= x 2484) (= x 2485) (= x 2486) (= x 2487) (= x 2488) + (= x 2489) (= x 2490) (= x 2491) (= x 2492) (= x 2493) (= x 2494) (= x 2495) (= x 2496) + (= x 2497) (= x 2498) (= x 2499) (= x 2500) (= x 2501) (= x 2502) (= x 2503) (= x 2504) + (= x 2505) (= x 2506) (= x 2507) (= x 2508) (= x 2509) (= x 2510) (= x 2511) (= x 2512) + (= x 2513) (= x 2514) (= x 2515) (= x 2516) (= x 2517) (= x 2518) (= x 2519) (= x 2520) + (= x 2521) (= x 2522) (= x 2523) (= x 2524) (= x 2525) (= x 2526) (= x 2527) (= x 2528) + (= x 2529) (= x 2530) (= x 2531) (= x 2532) (= x 2533) (= x 2534) (= x 2535) (= x 2536) + (= x 2537) (= x 2538) (= x 2539) (= x 2540) (= x 2541) (= x 2542) (= x 2543) (= x 2544) + (= x 2545) (= x 2546) (= x 2547) (= x 2548) (= x 2549) (= x 2550) (= x 2551) (= x 2552) + (= x 2553) (= x 2554) (= x 2555) (= x 2556) (= x 2557) (= x 2558) (= x 2559) (= x 2560) + (= x 2561) (= x 2562) (= x 2563) (= x 2564) (= x 2565) (= x 2566) (= x 2567) (= x 2568) + (= x 2569) (= x 2570) (= x 2571) (= x 2572) (= x 2573) (= x 2574) (= x 2575) (= x 2576) + (= x 2577) (= x 2578) (= x 2579) (= x 2580) (= x 2581) (= x 2582) (= x 2583) (= x 2584) + (= x 2585) (= x 2586) (= x 2587) (= x 2588) (= x 2589) (= x 2590) (= x 2591) (= x 2592) + (= x 2593) (= x 2594) (= x 2595) (= x 2596) (= x 2597) (= x 2598) (= x 2599) (= x 2600) + (= x 2601) (= x 2602) (= x 2603) (= x 2604) (= x 2605) (= x 2606) (= x 2607) (= x 2608) + (= x 2609) (= x 2610) (= x 2611) (= x 2612) (= x 2613) (= x 2614) (= x 2615) (= x 2616) + (= x 2617) (= x 2618) (= x 2619) (= x 2620) (= x 2621) (= x 2622) (= x 2623) (= x 2624) + (= x 2625) (= x 2626) (= x 2627) (= x 2628) (= x 2629) (= x 2630) (= x 2631) (= x 2632) + (= x 2633) (= x 2634) (= x 2635) (= x 2636) (= x 2637) (= x 2638) (= x 2639) (= x 2640) + (= x 2641) (= x 2642) (= x 2643) (= x 2644) (= x 2645) (= x 2646) (= x 2647) (= x 2648) + (= x 2649) (= x 2650) (= x 2651) (= x 2652) (= x 2653) (= x 2654) (= x 2655) (= x 2656) + (= x 2657) (= x 2658) (= x 2659) (= x 2660) (= x 2661) (= x 2662) (= x 2663) (= x 2664) + (= x 2665) (= x 2666) (= x 2667) (= x 2668) (= x 2669) (= x 2670) (= x 2671) (= x 2672) + (= x 2673) (= x 2674) (= x 2675) (= x 2676) (= x 2677) (= x 2678) (= x 2679) (= x 2680) + (= x 2681) (= x 2682) (= x 2683) (= x 2684) (= x 2685) (= x 2686) (= x 2687) (= x 2688) + (= x 2689) (= x 2690) (= x 2691) (= x 2692) (= x 2693) (= x 2694) (= x 2695) (= x 2696) + (= x 2697) (= x 2698) (= x 2699) (= x 2700) (= x 2701) (= x 2702) (= x 2703) (= x 2704) + (= x 2705) (= x 2706) (= x 2707) (= x 2708) (= x 2709) (= x 2710) (= x 2711) (= x 2712) + (= x 2713) (= x 2714) (= x 2715) (= x 2716) (= x 2717) (= x 2718) (= x 2719) (= x 2720) + (= x 2721) (= x 2722) (= x 2723) (= x 2724) (= x 2725) (= x 2726) (= x 2727) (= x 2728) + (= x 2729) (= x 2730) (= x 2731) (= x 2732) (= x 2733) (= x 2734) (= x 2735) (= x 2736) + (= x 2737) (= x 2738) (= x 2739) (= x 2740) (= x 2741) (= x 2742) (= x 2743) (= x 2744) + (= x 2745) (= x 2746) (= x 2747) (= x 2748) (= x 2749) (= x 2750) (= x 2751) (= x 2752) + (= x 2753) (= x 2754) (= x 2755) (= x 2756) (= x 2757) (= x 2758) (= x 2759) (= x 2760) + (= x 2761) (= x 2762) (= x 2763) (= x 2764) (= x 2765) (= x 2766) (= x 2767) (= x 2768) + (= x 2769) (= x 2770) (= x 2771) (= x 2772) (= x 2773) (= x 2774) (= x 2775) (= x 2776) + (= x 2777) (= x 2778) (= x 2779) (= x 2780) (= x 2781) (= x 2782) (= x 2783) (= x 2784) + (= x 2785) (= x 2786) (= x 2787) (= x 2788) (= x 2789) (= x 2790) (= x 2791) (= x 2792) + (= x 2793) (= x 2794) (= x 2795) (= x 2796) (= x 2797) (= x 2798) (= x 2799) (= x 2800) + (= x 2801) (= x 2802) (= x 2803) (= x 2804) (= x 2805) (= x 2806) (= x 2807) (= x 2808) + (= x 2809) (= x 2810) (= x 2811) (= x 2812) (= x 2813) (= x 2814) (= x 2815) (= x 2816) + (= x 2817) (= x 2818) (= x 2819) (= x 2820) (= x 2821) (= x 2822) (= x 2823) (= x 2824) + (= x 2825) (= x 2826) (= x 2827) (= x 2828) (= x 2829) (= x 2830) (= x 2831) (= x 2832) + (= x 2833) (= x 2834) (= x 2835) (= x 2836) (= x 2837) (= x 2838) (= x 2839) (= x 2840) + (= x 2841) (= x 2842) (= x 2843) (= x 2844) (= x 2845) (= x 2846) (= x 2847) (= x 2848) + (= x 2849) (= x 2850) (= x 2851) (= x 2852) (= x 2853) (= x 2854) (= x 2855) (= x 2856) + (= x 2857) (= x 2858) (= x 2859) (= x 2860) (= x 2861) (= x 2862) (= x 2863) (= x 2864) + (= x 2865) (= x 2866) (= x 2867) (= x 2868) (= x 2869) (= x 2870) (= x 2871) (= x 2872) + (= x 2873) (= x 2874) (= x 2875) (= x 2876) (= x 2877) (= x 2878) (= x 2879) (= x 2880) + (= x 2881) (= x 2882) (= x 2883) (= x 2884) (= x 2885) (= x 2886) (= x 2887) (= x 2888) + (= x 2889) (= x 2890) (= x 2891) (= x 2892) (= x 2893) (= x 2894) (= x 2895) (= x 2896) + (= x 2897) (= x 2898) (= x 2899) (= x 2900) (= x 2901) (= x 2902) (= x 2903) (= x 2904) + (= x 2905) (= x 2906) (= x 2907) (= x 2908) (= x 2909) (= x 2910) (= x 2911) (= x 2912) + (= x 2913) (= x 2914) (= x 2915) (= x 2916) (= x 2917) (= x 2918) (= x 2919) (= x 2920) + (= x 2921) (= x 2922) (= x 2923) (= x 2924) (= x 2925) (= x 2926) (= x 2927) (= x 2928) + (= x 2929) (= x 2930) (= x 2931) (= x 2932) (= x 2933) (= x 2934) (= x 2935) (= x 2936) + (= x 2937) (= x 2938) (= x 2939) (= x 2940) (= x 2941) (= x 2942) (= x 2943) (= x 2944) + (= x 2945) (= x 2946) (= x 2947) (= x 2948) (= x 2949) (= x 2950) (= x 2951) (= x 2952) + (= x 2953) (= x 2954) (= x 2955) (= x 2956) (= x 2957) (= x 2958) (= x 2959) (= x 2960) + (= x 2961) (= x 2962) (= x 2963) (= x 2964) (= x 2965) (= x 2966) (= x 2967) (= x 2968) + (= x 2969) (= x 2970) (= x 2971) (= x 2972) (= x 2973) (= x 2974) (= x 2975) (= x 2976) + (= x 2977) (= x 2978) (= x 2979) (= x 2980) (= x 2981) (= x 2982) (= x 2983) (= x 2984) + (= x 2985) (= x 2986) (= x 2987) (= x 2988) (= x 2989) (= x 2990) (= x 2991) (= x 2992) + (= x 2993) (= x 2994) (= x 2995) (= x 2996) (= x 2997) (= x 2998) (= x 2999) (= x 3000) + (= x 3001) (= x 3002) (= x 3003) (= x 3004) (= x 3005) (= x 3006) (= x 3007) (= x 3008) + (= x 3009) (= x 3010) (= x 3011) (= x 3012) (= x 3013) (= x 3014) (= x 3015) (= x 3016) + (= x 3017) (= x 3018) (= x 3019) (= x 3020) (= x 3021) (= x 3022) (= x 3023) (= x 3024) + (= x 3025) (= x 3026) (= x 3027) (= x 3028) (= x 3029) (= x 3030) (= x 3031) (= x 3032) + (= x 3033) (= x 3034) (= x 3035) (= x 3036) (= x 3037) (= x 3038) (= x 3039) (= x 3040) + (= x 3041) (= x 3042) (= x 3043) (= x 3044) (= x 3045) (= x 3046) (= x 3047) (= x 3048) + (= x 3049) (= x 3050) (= x 3051) (= x 3052) (= x 3053) (= x 3054) (= x 3055) (= x 3056) + (= x 3057) (= x 3058) (= x 3059) (= x 3060) (= x 3061) (= x 3062) (= x 3063) (= x 3064) + (= x 3065) (= x 3066) (= x 3067) (= x 3068) (= x 3069) (= x 3070) (= x 3071) (= x 3072) + (= x 3073) (= x 3074) (= x 3075) (= x 3076) (= x 3077) (= x 3078) (= x 3079) (= x 3080) + (= x 3081) (= x 3082) (= x 3083) (= x 3084) (= x 3085) (= x 3086) (= x 3087) (= x 3088) + (= x 3089) (= x 3090) (= x 3091) (= x 3092) (= x 3093) (= x 3094) (= x 3095) (= x 3096) + (= x 3097) (= x 3098) (= x 3099) (= x 3100) (= x 3101) (= x 3102) (= x 3103) (= x 3104) + (= x 3105) (= x 3106) (= x 3107) (= x 3108) (= x 3109) (= x 3110) (= x 3111) (= x 3112) + (= x 3113) (= x 3114) (= x 3115) (= x 3116) (= x 3117) (= x 3118) (= x 3119) (= x 3120) + (= x 3121) (= x 3122) (= x 3123) (= x 3124) (= x 3125) (= x 3126) (= x 3127) (= x 3128) + (= x 3129) (= x 3130) (= x 3131) (= x 3132) (= x 3133) (= x 3134) (= x 3135) (= x 3136) + (= x 3137) (= x 3138) (= x 3139) (= x 3140) (= x 3141) (= x 3142) (= x 3143) (= x 3144) + (= x 3145) (= x 3146) (= x 3147) (= x 3148) (= x 3149) (= x 3150) (= x 3151) (= x 3152) + (= x 3153) (= x 3154) (= x 3155) (= x 3156) (= x 3157) (= x 3158) (= x 3159) (= x 3160) + (= x 3161) (= x 3162) (= x 3163) (= x 3164) (= x 3165) (= x 3166) (= x 3167) (= x 3168) + (= x 3169) (= x 3170) (= x 3171) (= x 3172) (= x 3173) (= x 3174) (= x 3175) (= x 3176) + (= x 3177) (= x 3178) (= x 3179) (= x 3180) (= x 3181) (= x 3182) (= x 3183) (= x 3184) + (= x 3185) (= x 3186) (= x 3187) (= x 3188) (= x 3189) (= x 3190) (= x 3191) (= x 3192) + (= x 3193) (= x 3194) (= x 3195) (= x 3196) (= x 3197) (= x 3198) (= x 3199) (= x 3200) + (= x 3201) (= x 3202) (= x 3203) (= x 3204) (= x 3205) (= x 3206) (= x 3207) (= x 3208) + (= x 3209) (= x 3210) (= x 3211) (= x 3212) (= x 3213) (= x 3214) (= x 3215) (= x 3216) + (= x 3217) (= x 3218) (= x 3219) (= x 3220) (= x 3221) (= x 3222) (= x 3223) (= x 3224) + (= x 3225) (= x 3226) (= x 3227) (= x 3228) (= x 3229) (= x 3230) (= x 3231) (= x 3232) + (= x 3233) (= x 3234) (= x 3235) (= x 3236) (= x 3237) (= x 3238) (= x 3239) (= x 3240) + (= x 3241) (= x 3242) (= x 3243) (= x 3244) (= x 3245) (= x 3246) (= x 3247) (= x 3248) + (= x 3249) (= x 3250) (= x 3251) (= x 3252) (= x 3253) (= x 3254) (= x 3255) (= x 3256) + (= x 3257) (= x 3258) (= x 3259) (= x 3260) (= x 3261) (= x 3262) (= x 3263) (= x 3264) + (= x 3265) (= x 3266) (= x 3267) (= x 3268) (= x 3269) (= x 3270) (= x 3271) (= x 3272) + (= x 3273) (= x 3274) (= x 3275) (= x 3276) (= x 3277) (= x 3278) (= x 3279) (= x 3280) + (= x 3281) (= x 3282) (= x 3283) (= x 3284) (= x 3285) (= x 3286) (= x 3287) (= x 3288) + (= x 3289) (= x 3290) (= x 3291) (= x 3292) (= x 3293) (= x 3294) (= x 3295) (= x 3296) + (= x 3297) (= x 3298) (= x 3299) (= x 3300) (= x 3301) (= x 3302) (= x 3303) (= x 3304) + (= x 3305) (= x 3306) (= x 3307) (= x 3308) (= x 3309) (= x 3310) (= x 3311) (= x 3312) + (= x 3313) (= x 3314) (= x 3315) (= x 3316) (= x 3317) (= x 3318) (= x 3319) (= x 3320) + (= x 3321) (= x 3322) (= x 3323) (= x 3324) (= x 3325) (= x 3326) (= x 3327) (= x 3328) + (= x 3329) (= x 3330) (= x 3331) (= x 3332) (= x 3333) (= x 3334) (= x 3335) (= x 3336) + (= x 3337) (= x 3338) (= x 3339) (= x 3340) (= x 3341) (= x 3342) (= x 3343) (= x 3344) + (= x 3345) (= x 3346) (= x 3347) (= x 3348) (= x 3349) (= x 3350) (= x 3351) (= x 3352) + (= x 3353) (= x 3354) (= x 3355) (= x 3356) (= x 3357) (= x 3358) (= x 3359) (= x 3360) + (= x 3361) (= x 3362) (= x 3363) (= x 3364) (= x 3365) (= x 3366) (= x 3367) (= x 3368) + (= x 3369) (= x 3370) (= x 3371) (= x 3372) (= x 3373) (= x 3374) (= x 3375) (= x 3376) + (= x 3377) (= x 3378) (= x 3379) (= x 3380) (= x 3381) (= x 3382) (= x 3383) (= x 3384) + (= x 3385) (= x 3386) (= x 3387) (= x 3388) (= x 3389) (= x 3390) (= x 3391) (= x 3392) + (= x 3393) (= x 3394) (= x 3395) (= x 3396) (= x 3397) (= x 3398) (= x 3399) (= x 3400) + (= x 3401) (= x 3402) (= x 3403) (= x 3404) (= x 3405) (= x 3406) (= x 3407) (= x 3408) + (= x 3409) (= x 3410) (= x 3411) (= x 3412) (= x 3413) (= x 3414) (= x 3415) (= x 3416) + (= x 3417) (= x 3418) (= x 3419) (= x 3420) (= x 3421) (= x 3422) (= x 3423) (= x 3424) + (= x 3425) (= x 3426) (= x 3427) (= x 3428) (= x 3429) (= x 3430) (= x 3431) (= x 3432) + (= x 3433) (= x 3434) (= x 3435) (= x 3436) (= x 3437) (= x 3438) (= x 3439) (= x 3440) + (= x 3441) (= x 3442) (= x 3443) (= x 3444) (= x 3445) (= x 3446) (= x 3447) (= x 3448) + (= x 3449) (= x 3450) (= x 3451) (= x 3452) (= x 3453) (= x 3454) (= x 3455) (= x 3456) + (= x 3457) (= x 3458) (= x 3459) (= x 3460) (= x 3461) (= x 3462) (= x 3463) (= x 3464) + (= x 3465) (= x 3466) (= x 3467) (= x 3468) (= x 3469) (= x 3470) (= x 3471) (= x 3472) + (= x 3473) (= x 3474) (= x 3475) (= x 3476) (= x 3477) (= x 3478) (= x 3479) (= x 3480) + (= x 3481) (= x 3482) (= x 3483) (= x 3484) (= x 3485) (= x 3486) (= x 3487) (= x 3488) + (= x 3489) (= x 3490) (= x 3491) (= x 3492) (= x 3493) (= x 3494) (= x 3495) (= x 3496) + (= x 3497) (= x 3498) (= x 3499) (= x 3500) (= x 3501) (= x 3502) (= x 3503) (= x 3504) + (= x 3505) (= x 3506) (= x 3507) (= x 3508) (= x 3509) (= x 3510) (= x 3511) (= x 3512) + (= x 3513) (= x 3514) (= x 3515) (= x 3516) (= x 3517) (= x 3518) (= x 3519) (= x 3520) + (= x 3521) (= x 3522) (= x 3523) (= x 3524) (= x 3525) (= x 3526) (= x 3527) (= x 3528) + (= x 3529) (= x 3530) (= x 3531) (= x 3532) (= x 3533) (= x 3534) (= x 3535) (= x 3536) + (= x 3537) (= x 3538) (= x 3539) (= x 3540) (= x 3541) (= x 3542) (= x 3543) (= x 3544) + (= x 3545) (= x 3546) (= x 3547) (= x 3548) (= x 3549) (= x 3550) (= x 3551) (= x 3552) + (= x 3553) (= x 3554) (= x 3555) (= x 3556) (= x 3557) (= x 3558) (= x 3559) (= x 3560) + (= x 3561) (= x 3562) (= x 3563) (= x 3564) (= x 3565) (= x 3566) (= x 3567) (= x 3568) + (= x 3569) (= x 3570) (= x 3571) (= x 3572) (= x 3573) (= x 3574) (= x 3575) (= x 3576) + (= x 3577) (= x 3578) (= x 3579) (= x 3580) (= x 3581) (= x 3582) (= x 3583) (= x 3584) + (= x 3585) (= x 3586) (= x 3587) (= x 3588) (= x 3589) (= x 3590) (= x 3591) (= x 3592) + (= x 3593) (= x 3594) (= x 3595) (= x 3596) (= x 3597) (= x 3598) (= x 3599) (= x 3600) + (= x 3601) (= x 3602) (= x 3603) (= x 3604) (= x 3605) (= x 3606) (= x 3607) (= x 3608) + (= x 3609) (= x 3610) (= x 3611) (= x 3612) (= x 3613) (= x 3614) (= x 3615) (= x 3616) + (= x 3617) (= x 3618) (= x 3619) (= x 3620) (= x 3621) (= x 3622) (= x 3623) (= x 3624) + (= x 3625) (= x 3626) (= x 3627) (= x 3628) (= x 3629) (= x 3630) (= x 3631) (= x 3632) + (= x 3633) (= x 3634) (= x 3635) (= x 3636) (= x 3637) (= x 3638) (= x 3639) (= x 3640) + (= x 3641) (= x 3642) (= x 3643) (= x 3644) (= x 3645) (= x 3646) (= x 3647) (= x 3648) + (= x 3649) (= x 3650) (= x 3651) (= x 3652) (= x 3653) (= x 3654) (= x 3655) (= x 3656) + (= x 3657) (= x 3658) (= x 3659) (= x 3660) (= x 3661) (= x 3662) (= x 3663) (= x 3664) + (= x 3665) (= x 3666) (= x 3667) (= x 3668) (= x 3669) (= x 3670) (= x 3671) (= x 3672) + (= x 3673) (= x 3674) (= x 3675) (= x 3676) (= x 3677) (= x 3678) (= x 3679) (= x 3680) + (= x 3681) (= x 3682) (= x 3683) (= x 3684) (= x 3685) (= x 3686) (= x 3687) (= x 3688) + (= x 3689) (= x 3690) (= x 3691) (= x 3692) (= x 3693) (= x 3694) (= x 3695) (= x 3696) + (= x 3697) (= x 3698) (= x 3699) (= x 3700) (= x 3701) (= x 3702) (= x 3703) (= x 3704) + (= x 3705) (= x 3706) (= x 3707) (= x 3708) (= x 3709) (= x 3710) (= x 3711) (= x 3712) + (= x 3713) (= x 3714) (= x 3715) (= x 3716) (= x 3717) (= x 3718) (= x 3719) (= x 3720) + (= x 3721) (= x 3722) (= x 3723) (= x 3724) (= x 3725) (= x 3726) (= x 3727) (= x 3728) + (= x 3729) (= x 3730) (= x 3731) (= x 3732) (= x 3733) (= x 3734) (= x 3735) (= x 3736) + (= x 3737) (= x 3738) (= x 3739) (= x 3740) (= x 3741) (= x 3742) (= x 3743) (= x 3744) + (= x 3745) (= x 3746) (= x 3747) (= x 3748) (= x 3749) (= x 3750) (= x 3751) (= x 3752) + (= x 3753) (= x 3754) (= x 3755) (= x 3756) (= x 3757) (= x 3758) (= x 3759) (= x 3760) + (= x 3761) (= x 3762) (= x 3763) (= x 3764) (= x 3765) (= x 3766) (= x 3767) (= x 3768) + (= x 3769) (= x 3770) (= x 3771) (= x 3772) (= x 3773) (= x 3774) (= x 3775) (= x 3776) + (= x 3777) (= x 3778) (= x 3779) (= x 3780) (= x 3781) (= x 3782) (= x 3783) (= x 3784) + (= x 3785) (= x 3786) (= x 3787) (= x 3788) (= x 3789) (= x 3790) (= x 3791) (= x 3792) + (= x 3793) (= x 3794) (= x 3795) (= x 3796) (= x 3797) (= x 3798) (= x 3799) (= x 3800) + (= x 3801) (= x 3802) (= x 3803) (= x 3804) (= x 3805) (= x 3806) (= x 3807) (= x 3808) + (= x 3809) (= x 3810) (= x 3811) (= x 3812) (= x 3813) (= x 3814) (= x 3815) (= x 3816) + (= x 3817) (= x 3818) (= x 3819) (= x 3820) (= x 3821) (= x 3822) (= x 3823) (= x 3824) + (= x 3825) (= x 3826) (= x 3827) (= x 3828) (= x 3829) (= x 3830) (= x 3831) (= x 3832) + (= x 3833) (= x 3834) (= x 3835) (= x 3836) (= x 3837) (= x 3838) (= x 3839) (= x 3840) + (= x 3841) (= x 3842) (= x 3843) (= x 3844) (= x 3845) (= x 3846) (= x 3847) (= x 3848) + (= x 3849) (= x 3850) (= x 3851) (= x 3852) (= x 3853) (= x 3854) (= x 3855) (= x 3856) + (= x 3857) (= x 3858) (= x 3859) (= x 3860) (= x 3861) (= x 3862) (= x 3863) (= x 3864) + (= x 3865) (= x 3866) (= x 3867) (= x 3868) (= x 3869) (= x 3870) (= x 3871) (= x 3872) + (= x 3873) (= x 3874) (= x 3875) (= x 3876) (= x 3877) (= x 3878) (= x 3879) (= x 3880) + (= x 3881) (= x 3882) (= x 3883) (= x 3884) (= x 3885) (= x 3886) (= x 3887) (= x 3888) + (= x 3889) (= x 3890) (= x 3891) (= x 3892) (= x 3893) (= x 3894) (= x 3895) (= x 3896) + (= x 3897) (= x 3898) (= x 3899) (= x 3900) (= x 3901) (= x 3902) (= x 3903) (= x 3904) + (= x 3905) (= x 3906) (= x 3907) (= x 3908) (= x 3909) (= x 3910) (= x 3911) (= x 3912) + (= x 3913) (= x 3914) (= x 3915) (= x 3916) (= x 3917) (= x 3918) (= x 3919) (= x 3920) + (= x 3921) (= x 3922) (= x 3923) (= x 3924) (= x 3925) (= x 3926) (= x 3927) (= x 3928) + (= x 3929) (= x 3930) (= x 3931) (= x 3932) (= x 3933) (= x 3934) (= x 3935) (= x 3936) + (= x 3937) (= x 3938) (= x 3939) (= x 3940) (= x 3941) (= x 3942) (= x 3943) (= x 3944) + (= x 3945) (= x 3946) (= x 3947) (= x 3948) (= x 3949) (= x 3950) (= x 3951) (= x 3952) + (= x 3953) (= x 3954) (= x 3955) (= x 3956) (= x 3957) (= x 3958) (= x 3959) (= x 3960) + (= x 3961) (= x 3962) (= x 3963) (= x 3964) (= x 3965) (= x 3966) (= x 3967) (= x 3968) + (= x 3969) (= x 3970) (= x 3971) (= x 3972) (= x 3973) (= x 3974) (= x 3975) (= x 3976) + (= x 3977) (= x 3978) (= x 3979) (= x 3980) (= x 3981) (= x 3982) (= x 3983) (= x 3984) + (= x 3985) (= x 3986) (= x 3987) (= x 3988) (= x 3989) (= x 3990) (= x 3991) (= x 3992) + (= x 3993) (= x 3994) (= x 3995) (= x 3996) (= x 3997) (= x 3998) (= x 3999) (= x 4000) + (= x 4001) (= x 4002) (= x 4003) (= x 4004) (= x 4005) (= x 4006) (= x 4007) (= x 4008) + (= x 4009) (= x 4010) (= x 4011) (= x 4012) (= x 4013) (= x 4014) (= x 4015) (= x 4016) + (= x 4017) (= x 4018) (= x 4019) (= x 4020) (= x 4021) (= x 4022) (= x 4023) (= x 4024) + (= x 4025) (= x 4026) (= x 4027) (= x 4028) (= x 4029) (= x 4030) (= x 4031) (= x 4032) + (= x 4033) (= x 4034) (= x 4035) (= x 4036) (= x 4037) (= x 4038) (= x 4039) (= x 4040) + (= x 4041) (= x 4042) (= x 4043) (= x 4044) (= x 4045) (= x 4046) (= x 4047) (= x 4048) + (= x 4049) (= x 4050) (= x 4051) (= x 4052) (= x 4053) (= x 4054) (= x 4055) (= x 4056) + (= x 4057) (= x 4058) (= x 4059) (= x 4060) (= x 4061) (= x 4062) (= x 4063) (= x 4064) + (= x 4065) (= x 4066) (= x 4067) (= x 4068) (= x 4069) (= x 4070) (= x 4071) (= x 4072) + (= x 4073) (= x 4074) (= x 4075) (= x 4076) (= x 4077) (= x 4078) (= x 4079) (= x 4080) + (= x 4081) (= x 4082) (= x 4083) (= x 4084) (= x 4085) (= x 4086) (= x 4087) (= x 4088) + (= x 4089) (= x 4090) (= x 4091) (= x 4092) (= x 4093) (= x 4094) (= x 4095) (= x 4096) + (= x 4097) (= x 4098) (= x 4099) (= x 4100) (= x 4101) (= x 4102) (= x 4103) (= x 4104) + (= x 4105) (= x 4106) (= x 4107) (= x 4108) (= x 4109) (= x 4110) (= x 4111) (= x 4112) + (= x 4113) (= x 4114) (= x 4115) (= x 4116) (= x 4117) (= x 4118) (= x 4119) (= x 4120) + (= x 4121) (= x 4122) (= x 4123) (= x 4124) (= x 4125) (= x 4126) (= x 4127) (= x 4128) + (= x 4129) (= x 4130) (= x 4131) (= x 4132) (= x 4133) (= x 4134) (= x 4135) (= x 4136) + (= x 4137) (= x 4138) (= x 4139) (= x 4140) (= x 4141) (= x 4142) (= x 4143) (= x 4144) + (= x 4145) (= x 4146) (= x 4147) (= x 4148) (= x 4149) (= x 4150) (= x 4151) (= x 4152) + (= x 4153) (= x 4154) (= x 4155) (= x 4156) (= x 4157) (= x 4158) (= x 4159) (= x 4160) + (= x 4161) (= x 4162) (= x 4163) (= x 4164) (= x 4165) (= x 4166) (= x 4167) (= x 4168) + (= x 4169) (= x 4170) (= x 4171) (= x 4172) (= x 4173) (= x 4174) (= x 4175) (= x 4176) + (= x 4177) (= x 4178) (= x 4179) (= x 4180) (= x 4181) (= x 4182) (= x 4183) (= x 4184) + (= x 4185) (= x 4186) (= x 4187) (= x 4188) (= x 4189) (= x 4190) (= x 4191) (= x 4192) + (= x 4193) (= x 4194) (= x 4195) (= x 4196) (= x 4197) (= x 4198) (= x 4199) (= x 4200) + (= x 4201) (= x 4202) (= x 4203) (= x 4204) (= x 4205) (= x 4206) (= x 4207) (= x 4208) + (= x 4209) (= x 4210) (= x 4211) (= x 4212) (= x 4213) (= x 4214) (= x 4215) (= x 4216) + (= x 4217) (= x 4218) (= x 4219) (= x 4220) (= x 4221) (= x 4222) (= x 4223) (= x 4224) + (= x 4225) (= x 4226) (= x 4227) (= x 4228) (= x 4229) (= x 4230) (= x 4231) (= x 4232) + (= x 4233) (= x 4234) (= x 4235) (= x 4236) (= x 4237) (= x 4238) (= x 4239) (= x 4240) + (= x 4241) (= x 4242) (= x 4243) (= x 4244) (= x 4245) (= x 4246) (= x 4247) (= x 4248) + (= x 4249) (= x 4250) (= x 4251) (= x 4252) (= x 4253) (= x 4254) (= x 4255) (= x 4256) + (= x 4257) (= x 4258) (= x 4259) (= x 4260) (= x 4261) (= x 4262) (= x 4263) (= x 4264) + (= x 4265) (= x 4266) (= x 4267) (= x 4268) (= x 4269) (= x 4270) (= x 4271) (= x 4272) + (= x 4273) (= x 4274) (= x 4275) (= x 4276) (= x 4277) (= x 4278) (= x 4279) (= x 4280) + (= x 4281) (= x 4282) (= x 4283) (= x 4284) (= x 4285) (= x 4286) (= x 4287) (= x 4288) + (= x 4289) (= x 4290) (= x 4291) (= x 4292) (= x 4293) (= x 4294) (= x 4295) (= x 4296) + (= x 4297) (= x 4298) (= x 4299) (= x 4300) (= x 4301) (= x 4302) (= x 4303) (= x 4304) + (= x 4305) (= x 4306) (= x 4307) (= x 4308) (= x 4309) (= x 4310) (= x 4311) (= x 4312) + (= x 4313) (= x 4314) (= x 4315) (= x 4316) (= x 4317) (= x 4318) (= x 4319) (= x 4320) + (= x 4321) (= x 4322) (= x 4323) (= x 4324) (= x 4325) (= x 4326) (= x 4327) (= x 4328) + (= x 4329) (= x 4330) (= x 4331) (= x 4332) (= x 4333) (= x 4334) (= x 4335) (= x 4336) + (= x 4337) (= x 4338) (= x 4339) (= x 4340) (= x 4341) (= x 4342) (= x 4343) (= x 4344) + (= x 4345) (= x 4346) (= x 4347) (= x 4348) (= x 4349) (= x 4350) (= x 4351) (= x 4352) + (= x 4353) (= x 4354) (= x 4355) (= x 4356) (= x 4357) (= x 4358) (= x 4359) (= x 4360) + (= x 4361) (= x 4362) (= x 4363) (= x 4364) (= x 4365) (= x 4366) (= x 4367) (= x 4368) + (= x 4369) (= x 4370) (= x 4371) (= x 4372) (= x 4373) (= x 4374) (= x 4375) (= x 4376) + (= x 4377) (= x 4378) (= x 4379) (= x 4380) (= x 4381) (= x 4382) (= x 4383) (= x 4384) + (= x 4385) (= x 4386) (= x 4387) (= x 4388) (= x 4389) (= x 4390) (= x 4391) (= x 4392) + (= x 4393) (= x 4394) (= x 4395) (= x 4396) (= x 4397) (= x 4398) (= x 4399) (= x 4400) + (= x 4401) (= x 4402) (= x 4403) (= x 4404) (= x 4405) (= x 4406) (= x 4407) (= x 4408) + (= x 4409) (= x 4410) (= x 4411) (= x 4412) (= x 4413) (= x 4414) (= x 4415) (= x 4416) + (= x 4417) (= x 4418) (= x 4419) (= x 4420) (= x 4421) (= x 4422) (= x 4423) (= x 4424) + (= x 4425) (= x 4426) (= x 4427) (= x 4428) (= x 4429) (= x 4430) (= x 4431) (= x 4432) + (= x 4433) (= x 4434) (= x 4435) (= x 4436) (= x 4437) (= x 4438) (= x 4439) (= x 4440) + (= x 4441) (= x 4442) (= x 4443) (= x 4444) (= x 4445) (= x 4446) (= x 4447) (= x 4448) + (= x 4449) (= x 4450) (= x 4451) (= x 4452) (= x 4453) (= x 4454) (= x 4455) (= x 4456) + (= x 4457) (= x 4458) (= x 4459) (= x 4460) (= x 4461) (= x 4462) (= x 4463) (= x 4464) + (= x 4465) (= x 4466) (= x 4467) (= x 4468) (= x 4469) (= x 4470) (= x 4471) (= x 4472) + (= x 4473) (= x 4474) (= x 4475) (= x 4476) (= x 4477) (= x 4478) (= x 4479) (= x 4480) + (= x 4481) (= x 4482) (= x 4483) (= x 4484) (= x 4485) (= x 4486) (= x 4487) (= x 4488) + (= x 4489) (= x 4490) (= x 4491) (= x 4492) (= x 4493) (= x 4494) (= x 4495) (= x 4496) + (= x 4497) (= x 4498) (= x 4499) (= x 4500) (= x 4501) (= x 4502) (= x 4503) (= x 4504) + (= x 4505) (= x 4506) (= x 4507) (= x 4508) (= x 4509) (= x 4510) (= x 4511) (= x 4512) + (= x 4513) (= x 4514) (= x 4515) (= x 4516) (= x 4517) (= x 4518) (= x 4519) (= x 4520) + (= x 4521) (= x 4522) (= x 4523) (= x 4524) (= x 4525) (= x 4526) (= x 4527) (= x 4528) + (= x 4529) (= x 4530) (= x 4531) (= x 4532) (= x 4533) (= x 4534) (= x 4535) (= x 4536) + (= x 4537) (= x 4538) (= x 4539) (= x 4540) (= x 4541) (= x 4542) (= x 4543) (= x 4544) + (= x 4545) (= x 4546) (= x 4547) (= x 4548) (= x 4549) (= x 4550) (= x 4551) (= x 4552) + (= x 4553) (= x 4554) (= x 4555) (= x 4556) (= x 4557) (= x 4558) (= x 4559) (= x 4560) + (= x 4561) (= x 4562) (= x 4563) (= x 4564) (= x 4565) (= x 4566) (= x 4567) (= x 4568) + (= x 4569) (= x 4570) (= x 4571) (= x 4572) (= x 4573) (= x 4574) (= x 4575) (= x 4576) + (= x 4577) (= x 4578) (= x 4579) (= x 4580) (= x 4581) (= x 4582) (= x 4583) (= x 4584) + (= x 4585) (= x 4586) (= x 4587) (= x 4588) (= x 4589) (= x 4590) (= x 4591) (= x 4592) + (= x 4593) (= x 4594) (= x 4595) (= x 4596) (= x 4597) (= x 4598) (= x 4599) (= x 4600) + (= x 4601) (= x 4602) (= x 4603) (= x 4604) (= x 4605) (= x 4606) (= x 4607) (= x 4608) + (= x 4609) (= x 4610) (= x 4611) (= x 4612) (= x 4613) (= x 4614) (= x 4615) (= x 4616) + (= x 4617) (= x 4618) (= x 4619) (= x 4620) (= x 4621) (= x 4622) (= x 4623) (= x 4624) + (= x 4625) (= x 4626) (= x 4627) (= x 4628) (= x 4629) (= x 4630) (= x 4631) (= x 4632) + (= x 4633) (= x 4634) (= x 4635) (= x 4636) (= x 4637) (= x 4638) (= x 4639) (= x 4640) + (= x 4641) (= x 4642) (= x 4643) (= x 4644) (= x 4645) (= x 4646) (= x 4647) (= x 4648) + (= x 4649) (= x 4650) (= x 4651) (= x 4652) (= x 4653) (= x 4654) (= x 4655) (= x 4656) + (= x 4657) (= x 4658) (= x 4659) (= x 4660) (= x 4661) (= x 4662) (= x 4663) (= x 4664) + (= x 4665) (= x 4666) (= x 4667) (= x 4668) (= x 4669) (= x 4670) (= x 4671) (= x 4672) + (= x 4673) (= x 4674) (= x 4675) (= x 4676) (= x 4677) (= x 4678) (= x 4679) (= x 4680) + (= x 4681) (= x 4682) (= x 4683) (= x 4684) (= x 4685) (= x 4686) (= x 4687) (= x 4688) + (= x 4689) (= x 4690) (= x 4691) (= x 4692) (= x 4693) (= x 4694) (= x 4695) (= x 4696) + (= x 4697) (= x 4698) (= x 4699) (= x 4700) (= x 4701) (= x 4702) (= x 4703) (= x 4704) + (= x 4705) (= x 4706) (= x 4707) (= x 4708) (= x 4709) (= x 4710) (= x 4711) (= x 4712) + (= x 4713) (= x 4714) (= x 4715) (= x 4716) (= x 4717) (= x 4718) (= x 4719) (= x 4720) + (= x 4721) (= x 4722) (= x 4723) (= x 4724) (= x 4725) (= x 4726) (= x 4727) (= x 4728) + (= x 4729) (= x 4730) (= x 4731) (= x 4732) (= x 4733) (= x 4734) (= x 4735) (= x 4736) + (= x 4737) (= x 4738) (= x 4739) (= x 4740) (= x 4741) (= x 4742) (= x 4743) (= x 4744) + (= x 4745) (= x 4746) (= x 4747) (= x 4748) (= x 4749) (= x 4750) (= x 4751) (= x 4752) + (= x 4753) (= x 4754) (= x 4755) (= x 4756) (= x 4757) (= x 4758) (= x 4759) (= x 4760) + (= x 4761) (= x 4762) (= x 4763) (= x 4764) (= x 4765) (= x 4766) (= x 4767) (= x 4768) + (= x 4769) (= x 4770) (= x 4771) (= x 4772) (= x 4773) (= x 4774) (= x 4775) (= x 4776) + (= x 4777) (= x 4778) (= x 4779) (= x 4780) (= x 4781) (= x 4782) (= x 4783) (= x 4784) + (= x 4785) (= x 4786) (= x 4787) (= x 4788) (= x 4789) (= x 4790) (= x 4791) (= x 4792) + (= x 4793) (= x 4794) (= x 4795) (= x 4796) (= x 4797) (= x 4798) (= x 4799) (= x 4800) + (= x 4801) (= x 4802) (= x 4803) (= x 4804) (= x 4805) (= x 4806) (= x 4807) (= x 4808) + (= x 4809) (= x 4810) (= x 4811) (= x 4812) (= x 4813) (= x 4814) (= x 4815) (= x 4816) + (= x 4817) (= x 4818) (= x 4819) (= x 4820) (= x 4821) (= x 4822) (= x 4823) (= x 4824) + (= x 4825) (= x 4826) (= x 4827) (= x 4828) (= x 4829) (= x 4830) (= x 4831) (= x 4832) + (= x 4833) (= x 4834) (= x 4835) (= x 4836) (= x 4837) (= x 4838) (= x 4839) (= x 4840) + (= x 4841) (= x 4842) (= x 4843) (= x 4844) (= x 4845) (= x 4846) (= x 4847) (= x 4848) + (= x 4849) (= x 4850) (= x 4851) (= x 4852) (= x 4853) (= x 4854) (= x 4855) (= x 4856) + (= x 4857) (= x 4858) (= x 4859) (= x 4860) (= x 4861) (= x 4862) (= x 4863) (= x 4864) + (= x 4865) (= x 4866) (= x 4867) (= x 4868) (= x 4869) (= x 4870) (= x 4871) (= x 4872) + (= x 4873) (= x 4874) (= x 4875) (= x 4876) (= x 4877) (= x 4878) (= x 4879) (= x 4880) + (= x 4881) (= x 4882) (= x 4883) (= x 4884) (= x 4885) (= x 4886) (= x 4887) (= x 4888) + (= x 4889) (= x 4890) (= x 4891) (= x 4892) (= x 4893) (= x 4894) (= x 4895) (= x 4896) + (= x 4897) (= x 4898) (= x 4899) (= x 4900) (= x 4901) (= x 4902) (= x 4903) (= x 4904) + (= x 4905) (= x 4906) (= x 4907) (= x 4908) (= x 4909) (= x 4910) (= x 4911) (= x 4912) + (= x 4913) (= x 4914) (= x 4915) (= x 4916) (= x 4917) (= x 4918) (= x 4919) (= x 4920) + (= x 4921) (= x 4922) (= x 4923) (= x 4924) (= x 4925) (= x 4926) (= x 4927) (= x 4928) + (= x 4929) (= x 4930) (= x 4931) (= x 4932) (= x 4933) (= x 4934) (= x 4935) (= x 4936) + (= x 4937) (= x 4938) (= x 4939) (= x 4940) (= x 4941) (= x 4942) (= x 4943) (= x 4944) + (= x 4945) (= x 4946) (= x 4947) (= x 4948) (= x 4949) (= x 4950) (= x 4951) (= x 4952) + (= x 4953) (= x 4954) (= x 4955) (= x 4956) (= x 4957) (= x 4958) (= x 4959) (= x 4960) + (= x 4961) (= x 4962) (= x 4963) (= x 4964) (= x 4965) (= x 4966) (= x 4967) (= x 4968) + (= x 4969) (= x 4970) (= x 4971) (= x 4972) (= x 4973) (= x 4974) (= x 4975) (= x 4976) + (= x 4977) (= x 4978) (= x 4979) (= x 4980) (= x 4981) (= x 4982) (= x 4983) (= x 4984) + (= x 4985) (= x 4986) (= x 4987) (= x 4988) (= x 4989) (= x 4990) (= x 4991) (= x 4992) + (= x 4993) (= x 4994) (= x 4995) (= x 4996) (= x 4997) (= x 4998) (= x 4999) (= x 5000) + (= x 5001) (= x 5002) (= x 5003) (= x 5004) (= x 5005) (= x 5006) (= x 5007) (= x 5008) + (= x 5009) (= x 5010) (= x 5011) (= x 5012) (= x 5013) (= x 5014) (= x 5015) (= x 5016) + (= x 5017) (= x 5018) (= x 5019) (= x 5020) (= x 5021) (= x 5022) (= x 5023) (= x 5024) + (= x 5025) (= x 5026) (= x 5027) (= x 5028) (= x 5029) (= x 5030) (= x 5031) (= x 5032) + (= x 5033) (= x 5034) (= x 5035) (= x 5036) (= x 5037) (= x 5038) (= x 5039) (= x 5040) + (= x 5041) (= x 5042) (= x 5043) (= x 5044) (= x 5045) (= x 5046) (= x 5047) (= x 5048) + (= x 5049) (= x 5050) (= x 5051) (= x 5052) (= x 5053) (= x 5054) (= x 5055) (= x 5056) + (= x 5057) (= x 5058) (= x 5059) (= x 5060) (= x 5061) (= x 5062) (= x 5063) (= x 5064) + (= x 5065) (= x 5066) (= x 5067) (= x 5068) (= x 5069) (= x 5070) (= x 5071) (= x 5072) + (= x 5073) (= x 5074) (= x 5075) (= x 5076) (= x 5077) (= x 5078) (= x 5079) (= x 5080) + (= x 5081) (= x 5082) (= x 5083) (= x 5084) (= x 5085) (= x 5086) (= x 5087) (= x 5088) + (= x 5089) (= x 5090) (= x 5091) (= x 5092) (= x 5093) (= x 5094) (= x 5095) (= x 5096) + (= x 5097) (= x 5098) (= x 5099) (= x 5100) (= x 5101) (= x 5102) (= x 5103) (= x 5104) + (= x 5105) (= x 5106) (= x 5107) (= x 5108) (= x 5109) (= x 5110) (= x 5111) (= x 5112) + (= x 5113) (= x 5114) (= x 5115) (= x 5116) (= x 5117) (= x 5118) (= x 5119) (= x 5120) + (= x 5121) (= x 5122) (= x 5123) (= x 5124) (= x 5125) (= x 5126) (= x 5127) (= x 5128) + (= x 5129) (= x 5130) (= x 5131) (= x 5132) (= x 5133) (= x 5134) (= x 5135) (= x 5136) + (= x 5137) (= x 5138) (= x 5139) (= x 5140) (= x 5141) (= x 5142) (= x 5143) (= x 5144) + (= x 5145) (= x 5146) (= x 5147) (= x 5148) (= x 5149) (= x 5150) (= x 5151) (= x 5152) + (= x 5153) (= x 5154) (= x 5155) (= x 5156) (= x 5157) (= x 5158) (= x 5159) (= x 5160) + (= x 5161) (= x 5162) (= x 5163) (= x 5164) (= x 5165) (= x 5166) (= x 5167) (= x 5168) + (= x 5169) (= x 5170) (= x 5171) (= x 5172) (= x 5173) (= x 5174) (= x 5175) (= x 5176) + (= x 5177) (= x 5178) (= x 5179) (= x 5180) (= x 5181) (= x 5182) (= x 5183) (= x 5184) + (= x 5185) (= x 5186) (= x 5187) (= x 5188) (= x 5189) (= x 5190) (= x 5191) (= x 5192) + (= x 5193) (= x 5194) (= x 5195) (= x 5196) (= x 5197) (= x 5198) (= x 5199) (= x 5200) + (= x 5201) (= x 5202) (= x 5203) (= x 5204) (= x 5205) (= x 5206) (= x 5207) (= x 5208) + (= x 5209) (= x 5210) (= x 5211) (= x 5212) (= x 5213) (= x 5214) (= x 5215) (= x 5216) + (= x 5217) (= x 5218) (= x 5219) (= x 5220) (= x 5221) (= x 5222) (= x 5223) (= x 5224) + (= x 5225) (= x 5226) (= x 5227) (= x 5228) (= x 5229) (= x 5230) (= x 5231) (= x 5232) + (= x 5233) (= x 5234) (= x 5235) (= x 5236) (= x 5237) (= x 5238) (= x 5239) (= x 5240) + (= x 5241) (= x 5242) (= x 5243) (= x 5244) (= x 5245) (= x 5246) (= x 5247) (= x 5248) + (= x 5249) (= x 5250) (= x 5251) (= x 5252) (= x 5253) (= x 5254) (= x 5255) (= x 5256) + (= x 5257) (= x 5258) (= x 5259) (= x 5260) (= x 5261) (= x 5262) (= x 5263) (= x 5264) + (= x 5265) (= x 5266) (= x 5267) (= x 5268) (= x 5269) (= x 5270) (= x 5271) (= x 5272) + (= x 5273) (= x 5274) (= x 5275) (= x 5276) (= x 5277) (= x 5278) (= x 5279) (= x 5280) + (= x 5281) (= x 5282) (= x 5283) (= x 5284) (= x 5285) (= x 5286) (= x 5287) (= x 5288) + (= x 5289) (= x 5290) (= x 5291) (= x 5292) (= x 5293) (= x 5294) (= x 5295) (= x 5296) + (= x 5297) (= x 5298) (= x 5299) (= x 5300) (= x 5301) (= x 5302) (= x 5303) (= x 5304) + (= x 5305) (= x 5306) (= x 5307) (= x 5308) (= x 5309) (= x 5310) (= x 5311) (= x 5312) + (= x 5313) (= x 5314) (= x 5315) (= x 5316) (= x 5317) (= x 5318) (= x 5319) (= x 5320) + (= x 5321) (= x 5322) (= x 5323) (= x 5324) (= x 5325) (= x 5326) (= x 5327) (= x 5328) + (= x 5329) (= x 5330) (= x 5331) (= x 5332) (= x 5333) (= x 5334) (= x 5335) (= x 5336) + (= x 5337) (= x 5338) (= x 5339) (= x 5340) (= x 5341) (= x 5342) (= x 5343) (= x 5344) + (= x 5345) (= x 5346) (= x 5347) (= x 5348) (= x 5349) (= x 5350) (= x 5351) (= x 5352) + (= x 5353) (= x 5354) (= x 5355) (= x 5356) (= x 5357) (= x 5358) (= x 5359) (= x 5360) + (= x 5361) (= x 5362) (= x 5363) (= x 5364) (= x 5365) (= x 5366) (= x 5367) (= x 5368) + (= x 5369) (= x 5370) (= x 5371) (= x 5372) (= x 5373) (= x 5374) (= x 5375) (= x 5376) + (= x 5377) (= x 5378) (= x 5379) (= x 5380) (= x 5381) (= x 5382) (= x 5383) (= x 5384) + (= x 5385) (= x 5386) (= x 5387) (= x 5388) (= x 5389) (= x 5390) (= x 5391) (= x 5392) + (= x 5393) (= x 5394) (= x 5395) (= x 5396) (= x 5397) (= x 5398) (= x 5399) (= x 5400) + (= x 5401) (= x 5402) (= x 5403) (= x 5404) (= x 5405) (= x 5406) (= x 5407) (= x 5408) + (= x 5409) (= x 5410) (= x 5411) (= x 5412) (= x 5413) (= x 5414) (= x 5415) (= x 5416) + (= x 5417) (= x 5418) (= x 5419) (= x 5420) (= x 5421) (= x 5422) (= x 5423) (= x 5424) + (= x 5425) (= x 5426) (= x 5427) (= x 5428) (= x 5429) (= x 5430) (= x 5431) (= x 5432) + (= x 5433) (= x 5434) (= x 5435) (= x 5436) (= x 5437) (= x 5438) (= x 5439) (= x 5440) + (= x 5441) (= x 5442) (= x 5443) (= x 5444) (= x 5445) (= x 5446) (= x 5447) (= x 5448) + (= x 5449) (= x 5450) (= x 5451) (= x 5452) (= x 5453) (= x 5454) (= x 5455) (= x 5456) + (= x 5457) (= x 5458) (= x 5459) (= x 5460) (= x 5461) (= x 5462) (= x 5463) (= x 5464) + (= x 5465) (= x 5466) (= x 5467) (= x 5468) (= x 5469) (= x 5470) (= x 5471) (= x 5472) + (= x 5473) (= x 5474) (= x 5475) (= x 5476) (= x 5477) (= x 5478) (= x 5479) (= x 5480) + (= x 5481) (= x 5482) (= x 5483) (= x 5484) (= x 5485) (= x 5486) (= x 5487) (= x 5488) + (= x 5489) (= x 5490) (= x 5491) (= x 5492) (= x 5493) (= x 5494) (= x 5495) (= x 5496) + (= x 5497) (= x 5498) (= x 5499) (= x 5500) (= x 5501) (= x 5502) (= x 5503) (= x 5504) + (= x 5505) (= x 5506) (= x 5507) (= x 5508) (= x 5509) (= x 5510) (= x 5511) (= x 5512) + (= x 5513) (= x 5514) (= x 5515) (= x 5516) (= x 5517) (= x 5518) (= x 5519) (= x 5520) + (= x 5521) (= x 5522) (= x 5523) (= x 5524) (= x 5525) (= x 5526) (= x 5527) (= x 5528) + (= x 5529) (= x 5530) (= x 5531) (= x 5532) (= x 5533) (= x 5534) (= x 5535) (= x 5536) + (= x 5537) (= x 5538) (= x 5539) (= x 5540) (= x 5541) (= x 5542) (= x 5543) (= x 5544) + (= x 5545) (= x 5546) (= x 5547) (= x 5548) (= x 5549) (= x 5550) (= x 5551) (= x 5552) + (= x 5553) (= x 5554) (= x 5555) (= x 5556) (= x 5557) (= x 5558) (= x 5559) (= x 5560) + (= x 5561) (= x 5562) (= x 5563) (= x 5564) (= x 5565) (= x 5566) (= x 5567) (= x 5568) + (= x 5569) (= x 5570) (= x 5571) (= x 5572) (= x 5573) (= x 5574) (= x 5575) (= x 5576) + (= x 5577) (= x 5578) (= x 5579) (= x 5580) (= x 5581) (= x 5582) (= x 5583) (= x 5584) + (= x 5585) (= x 5586) (= x 5587) (= x 5588) (= x 5589) (= x 5590) (= x 5591) (= x 5592) + (= x 5593) (= x 5594) (= x 5595) (= x 5596) (= x 5597) (= x 5598) (= x 5599) (= x 5600) + (= x 5601) (= x 5602) (= x 5603) (= x 5604) (= x 5605) (= x 5606) (= x 5607) (= x 5608) + (= x 5609) (= x 5610) (= x 5611) (= x 5612) (= x 5613) (= x 5614) (= x 5615) (= x 5616) + (= x 5617) (= x 5618) (= x 5619) (= x 5620) (= x 5621) (= x 5622) (= x 5623) (= x 5624) + (= x 5625) (= x 5626) (= x 5627) (= x 5628) (= x 5629) (= x 5630) (= x 5631) (= x 5632) + (= x 5633) (= x 5634) (= x 5635) (= x 5636) (= x 5637) (= x 5638) (= x 5639) (= x 5640) + (= x 5641) (= x 5642) (= x 5643) (= x 5644) (= x 5645) (= x 5646) (= x 5647) (= x 5648) + (= x 5649) (= x 5650) (= x 5651) (= x 5652) (= x 5653) (= x 5654) (= x 5655) (= x 5656) + (= x 5657) (= x 5658) (= x 5659) (= x 5660) (= x 5661) (= x 5662) (= x 5663) (= x 5664) + (= x 5665) (= x 5666) (= x 5667) (= x 5668) (= x 5669) (= x 5670) (= x 5671) (= x 5672) + (= x 5673) (= x 5674) (= x 5675) (= x 5676) (= x 5677) (= x 5678) (= x 5679) (= x 5680) + (= x 5681) (= x 5682) (= x 5683) (= x 5684) (= x 5685) (= x 5686) (= x 5687) (= x 5688) + (= x 5689) (= x 5690) (= x 5691) (= x 5692) (= x 5693) (= x 5694) (= x 5695) (= x 5696) + (= x 5697) (= x 5698) (= x 5699) (= x 5700) (= x 5701) (= x 5702) (= x 5703) (= x 5704) + (= x 5705) (= x 5706) (= x 5707) (= x 5708) (= x 5709) (= x 5710) (= x 5711) (= x 5712) + (= x 5713) (= x 5714) (= x 5715) (= x 5716) (= x 5717) (= x 5718) (= x 5719) (= x 5720) + (= x 5721) (= x 5722) (= x 5723) (= x 5724) (= x 5725) (= x 5726) (= x 5727) (= x 5728) + (= x 5729) (= x 5730) (= x 5731) (= x 5732) (= x 5733) (= x 5734) (= x 5735) (= x 5736) + (= x 5737) (= x 5738) (= x 5739) (= x 5740) (= x 5741) (= x 5742) (= x 5743) (= x 5744) + (= x 5745) (= x 5746) (= x 5747) (= x 5748) (= x 5749) (= x 5750) (= x 5751) (= x 5752) + (= x 5753) (= x 5754) (= x 5755) (= x 5756) (= x 5757) (= x 5758) (= x 5759) (= x 5760) + (= x 5761) (= x 5762) (= x 5763) (= x 5764) (= x 5765) (= x 5766) (= x 5767) (= x 5768) + (= x 5769) (= x 5770) (= x 5771) (= x 5772) (= x 5773) (= x 5774) (= x 5775) (= x 5776) + (= x 5777) (= x 5778) (= x 5779) (= x 5780) (= x 5781) (= x 5782) (= x 5783) (= x 5784) + (= x 5785) (= x 5786) (= x 5787) (= x 5788) (= x 5789) (= x 5790) (= x 5791) (= x 5792) + (= x 5793) (= x 5794) (= x 5795) (= x 5796) (= x 5797) (= x 5798) (= x 5799) (= x 5800) + (= x 5801) (= x 5802) (= x 5803) (= x 5804) (= x 5805) (= x 5806) (= x 5807) (= x 5808) + (= x 5809) (= x 5810) (= x 5811) (= x 5812) (= x 5813) (= x 5814) (= x 5815) (= x 5816) + (= x 5817) (= x 5818) (= x 5819) (= x 5820) (= x 5821) (= x 5822) (= x 5823) (= x 5824) + (= x 5825) (= x 5826) (= x 5827) (= x 5828) (= x 5829) (= x 5830) (= x 5831) (= x 5832) + (= x 5833) (= x 5834) (= x 5835) (= x 5836) (= x 5837) (= x 5838) (= x 5839) (= x 5840) + (= x 5841) (= x 5842) (= x 5843) (= x 5844) (= x 5845) (= x 5846) (= x 5847) (= x 5848) + (= x 5849) (= x 5850) (= x 5851) (= x 5852) (= x 5853) (= x 5854) (= x 5855) (= x 5856) + (= x 5857) (= x 5858) (= x 5859) (= x 5860) (= x 5861) (= x 5862) (= x 5863) (= x 5864) + (= x 5865) (= x 5866) (= x 5867) (= x 5868) (= x 5869) (= x 5870) (= x 5871) (= x 5872) + (= x 5873) (= x 5874) (= x 5875) (= x 5876) (= x 5877) (= x 5878) (= x 5879) (= x 5880) + (= x 5881) (= x 5882) (= x 5883) (= x 5884) (= x 5885) (= x 5886) (= x 5887) (= x 5888) + (= x 5889) (= x 5890) (= x 5891) (= x 5892) (= x 5893) (= x 5894) (= x 5895) (= x 5896) + (= x 5897) (= x 5898) (= x 5899) (= x 5900) (= x 5901) (= x 5902) (= x 5903) (= x 5904) + (= x 5905) (= x 5906) (= x 5907) (= x 5908) (= x 5909) (= x 5910) (= x 5911) (= x 5912) + (= x 5913) (= x 5914) (= x 5915) (= x 5916) (= x 5917) (= x 5918) (= x 5919) (= x 5920) + (= x 5921) (= x 5922) (= x 5923) (= x 5924) (= x 5925) (= x 5926) (= x 5927) (= x 5928) + (= x 5929) (= x 5930) (= x 5931) (= x 5932) (= x 5933) (= x 5934) (= x 5935) (= x 5936) + (= x 5937) (= x 5938) (= x 5939) (= x 5940) (= x 5941) (= x 5942) (= x 5943) (= x 5944) + (= x 5945) (= x 5946) (= x 5947) (= x 5948) (= x 5949) (= x 5950) (= x 5951) (= x 5952) + (= x 5953) (= x 5954) (= x 5955) (= x 5956) (= x 5957) (= x 5958) (= x 5959) (= x 5960) + (= x 5961) (= x 5962) (= x 5963) (= x 5964) (= x 5965) (= x 5966) (= x 5967) (= x 5968) + (= x 5969) (= x 5970) (= x 5971) (= x 5972) (= x 5973) (= x 5974) (= x 5975) (= x 5976) + (= x 5977) (= x 5978) (= x 5979) (= x 5980) (= x 5981) (= x 5982) (= x 5983) (= x 5984) + (= x 5985) (= x 5986) (= x 5987) (= x 5988) (= x 5989) (= x 5990) (= x 5991) (= x 5992) + (= x 5993) (= x 5994) (= x 5995) (= x 5996) (= x 5997) (= x 5998) (= x 5999) (= x 6000) + (= x 6001) (= x 6002) (= x 6003) (= x 6004) (= x 6005) (= x 6006) (= x 6007) (= x 6008) + (= x 6009) (= x 6010) (= x 6011) (= x 6012) (= x 6013) (= x 6014) (= x 6015) (= x 6016) + (= x 6017) (= x 6018) (= x 6019) (= x 6020) (= x 6021) (= x 6022) (= x 6023) (= x 6024) + (= x 6025) (= x 6026) (= x 6027) (= x 6028) (= x 6029) (= x 6030) (= x 6031) (= x 6032) + (= x 6033) (= x 6034) (= x 6035) (= x 6036) (= x 6037) (= x 6038) (= x 6039) (= x 6040) + (= x 6041) (= x 6042) (= x 6043) (= x 6044) (= x 6045) (= x 6046) (= x 6047) (= x 6048) + (= x 6049) (= x 6050) (= x 6051) (= x 6052) (= x 6053) (= x 6054) (= x 6055) (= x 6056) + (= x 6057) (= x 6058) (= x 6059) (= x 6060) (= x 6061) (= x 6062) (= x 6063) (= x 6064) + (= x 6065) (= x 6066) (= x 6067) (= x 6068) (= x 6069) (= x 6070) (= x 6071) (= x 6072) + (= x 6073) (= x 6074) (= x 6075) (= x 6076) (= x 6077) (= x 6078) (= x 6079) (= x 6080) + (= x 6081) (= x 6082) (= x 6083) (= x 6084) (= x 6085) (= x 6086) (= x 6087) (= x 6088) + (= x 6089) (= x 6090) (= x 6091) (= x 6092) (= x 6093) (= x 6094) (= x 6095) (= x 6096) + (= x 6097) (= x 6098) (= x 6099) (= x 6100) (= x 6101) (= x 6102) (= x 6103) (= x 6104) + (= x 6105) (= x 6106) (= x 6107) (= x 6108) (= x 6109) (= x 6110) (= x 6111) (= x 6112) + (= x 6113) (= x 6114) (= x 6115) (= x 6116) (= x 6117) (= x 6118) (= x 6119) (= x 6120) + (= x 6121) (= x 6122) (= x 6123) (= x 6124) (= x 6125) (= x 6126) (= x 6127) (= x 6128) + (= x 6129) (= x 6130) (= x 6131) (= x 6132) (= x 6133) (= x 6134) (= x 6135) (= x 6136) + (= x 6137) (= x 6138) (= x 6139) (= x 6140) (= x 6141) (= x 6142) (= x 6143) (= x 6144) + (= x 6145) (= x 6146) (= x 6147) (= x 6148) (= x 6149) (= x 6150) (= x 6151) (= x 6152) + (= x 6153) (= x 6154) (= x 6155) (= x 6156) (= x 6157) (= x 6158) (= x 6159) (= x 6160) + (= x 6161) (= x 6162) (= x 6163) (= x 6164) (= x 6165) (= x 6166) (= x 6167) (= x 6168) + (= x 6169) (= x 6170) (= x 6171) (= x 6172) (= x 6173) (= x 6174) (= x 6175) (= x 6176) + (= x 6177) (= x 6178) (= x 6179) (= x 6180) (= x 6181) (= x 6182) (= x 6183) (= x 6184) + (= x 6185) (= x 6186) (= x 6187) (= x 6188) (= x 6189) (= x 6190) (= x 6191) (= x 6192) + (= x 6193) (= x 6194) (= x 6195) (= x 6196) (= x 6197) (= x 6198) (= x 6199) (= x 6200) + (= x 6201) (= x 6202) (= x 6203) (= x 6204) (= x 6205) (= x 6206) (= x 6207) (= x 6208) + (= x 6209) (= x 6210) (= x 6211) (= x 6212) (= x 6213) (= x 6214) (= x 6215) (= x 6216) + (= x 6217) (= x 6218) (= x 6219) (= x 6220) (= x 6221) (= x 6222) (= x 6223) (= x 6224) + (= x 6225) (= x 6226) (= x 6227) (= x 6228) (= x 6229) (= x 6230) (= x 6231) (= x 6232) + (= x 6233) (= x 6234) (= x 6235) (= x 6236) (= x 6237) (= x 6238) (= x 6239) (= x 6240) + (= x 6241) (= x 6242) (= x 6243) (= x 6244) (= x 6245) (= x 6246) (= x 6247) (= x 6248) + (= x 6249) (= x 6250) (= x 6251) (= x 6252) (= x 6253) (= x 6254) (= x 6255) (= x 6256) + (= x 6257) (= x 6258) (= x 6259) (= x 6260) (= x 6261) (= x 6262) (= x 6263) (= x 6264) + (= x 6265) (= x 6266) (= x 6267) (= x 6268) (= x 6269) (= x 6270) (= x 6271) (= x 6272) + (= x 6273) (= x 6274) (= x 6275) (= x 6276) (= x 6277) (= x 6278) (= x 6279) (= x 6280) + (= x 6281) (= x 6282) (= x 6283) (= x 6284) (= x 6285) (= x 6286) (= x 6287) (= x 6288) + (= x 6289) (= x 6290) (= x 6291) (= x 6292) (= x 6293) (= x 6294) (= x 6295) (= x 6296) + (= x 6297) (= x 6298) (= x 6299) (= x 6300) (= x 6301) (= x 6302) (= x 6303) (= x 6304) + (= x 6305) (= x 6306) (= x 6307) (= x 6308) (= x 6309) (= x 6310) (= x 6311) (= x 6312) + (= x 6313) (= x 6314) (= x 6315) (= x 6316) (= x 6317) (= x 6318) (= x 6319) (= x 6320) + (= x 6321) (= x 6322) (= x 6323) (= x 6324) (= x 6325) (= x 6326) (= x 6327) (= x 6328) + (= x 6329) (= x 6330) (= x 6331) (= x 6332) (= x 6333) (= x 6334) (= x 6335) (= x 6336) + (= x 6337) (= x 6338) (= x 6339) (= x 6340) (= x 6341) (= x 6342) (= x 6343) (= x 6344) + (= x 6345) (= x 6346) (= x 6347) (= x 6348) (= x 6349) (= x 6350) (= x 6351) (= x 6352) + (= x 6353) (= x 6354) (= x 6355) (= x 6356) (= x 6357) (= x 6358) (= x 6359) (= x 6360) + (= x 6361) (= x 6362) (= x 6363) (= x 6364) (= x 6365) (= x 6366) (= x 6367) (= x 6368) + (= x 6369) (= x 6370) (= x 6371) (= x 6372) (= x 6373) (= x 6374) (= x 6375) (= x 6376) + (= x 6377) (= x 6378) (= x 6379) (= x 6380) (= x 6381) (= x 6382) (= x 6383) (= x 6384) + (= x 6385) (= x 6386) (= x 6387) (= x 6388) (= x 6389) (= x 6390) (= x 6391) (= x 6392) + (= x 6393) (= x 6394) (= x 6395) (= x 6396) (= x 6397) (= x 6398) (= x 6399) (= x 6400) + (= x 6401) (= x 6402) (= x 6403) (= x 6404) (= x 6405) (= x 6406) (= x 6407) (= x 6408) + (= x 6409) (= x 6410) (= x 6411) (= x 6412) (= x 6413) (= x 6414) (= x 6415) (= x 6416) + (= x 6417) (= x 6418) (= x 6419) (= x 6420) (= x 6421) (= x 6422) (= x 6423) (= x 6424) + (= x 6425) (= x 6426) (= x 6427) (= x 6428) (= x 6429) (= x 6430) (= x 6431) (= x 6432) + (= x 6433) (= x 6434) (= x 6435) (= x 6436) (= x 6437) (= x 6438) (= x 6439) (= x 6440) + (= x 6441) (= x 6442) (= x 6443) (= x 6444) (= x 6445) (= x 6446) (= x 6447) (= x 6448) + (= x 6449) (= x 6450) (= x 6451) (= x 6452) (= x 6453) (= x 6454) (= x 6455) (= x 6456) + (= x 6457) (= x 6458) (= x 6459) (= x 6460) (= x 6461) (= x 6462) (= x 6463) (= x 6464) + (= x 6465) (= x 6466) (= x 6467) (= x 6468) (= x 6469) (= x 6470) (= x 6471) (= x 6472) + (= x 6473) (= x 6474) (= x 6475) (= x 6476) (= x 6477) (= x 6478) (= x 6479) (= x 6480) + (= x 6481) (= x 6482) (= x 6483) (= x 6484) (= x 6485) (= x 6486) (= x 6487) (= x 6488) + (= x 6489) (= x 6490) (= x 6491) (= x 6492) (= x 6493) (= x 6494) (= x 6495) (= x 6496) + (= x 6497) (= x 6498) (= x 6499) (= x 6500) (= x 6501) (= x 6502) (= x 6503) (= x 6504) + (= x 6505) (= x 6506) (= x 6507) (= x 6508) (= x 6509) (= x 6510) (= x 6511) (= x 6512) + (= x 6513) (= x 6514) (= x 6515) (= x 6516) (= x 6517) (= x 6518) (= x 6519) (= x 6520) + (= x 6521) (= x 6522) (= x 6523) (= x 6524) (= x 6525) (= x 6526) (= x 6527) (= x 6528) + (= x 6529) (= x 6530) (= x 6531) (= x 6532) (= x 6533) (= x 6534) (= x 6535) (= x 6536) + (= x 6537) (= x 6538) (= x 6539) (= x 6540) (= x 6541) (= x 6542) (= x 6543) (= x 6544) + (= x 6545) (= x 6546) (= x 6547) (= x 6548) (= x 6549) (= x 6550) (= x 6551) (= x 6552) + (= x 6553) (= x 6554) (= x 6555) (= x 6556) (= x 6557) (= x 6558) (= x 6559) (= x 6560) + (= x 6561) (= x 6562) (= x 6563) (= x 6564) (= x 6565) (= x 6566) (= x 6567) (= x 6568) + (= x 6569) (= x 6570) (= x 6571) (= x 6572) (= x 6573) (= x 6574) (= x 6575) (= x 6576) + (= x 6577) (= x 6578) (= x 6579) (= x 6580) (= x 6581) (= x 6582) (= x 6583) (= x 6584) + (= x 6585) (= x 6586) (= x 6587) (= x 6588) (= x 6589) (= x 6590) (= x 6591) (= x 6592) + (= x 6593) (= x 6594) (= x 6595) (= x 6596) (= x 6597) (= x 6598) (= x 6599) (= x 6600) + (= x 6601) (= x 6602) (= x 6603) (= x 6604) (= x 6605) (= x 6606) (= x 6607) (= x 6608) + (= x 6609) (= x 6610) (= x 6611) (= x 6612) (= x 6613) (= x 6614) (= x 6615) (= x 6616) + (= x 6617) (= x 6618) (= x 6619) (= x 6620) (= x 6621) (= x 6622) (= x 6623) (= x 6624) + (= x 6625) (= x 6626) (= x 6627) (= x 6628) (= x 6629) (= x 6630) (= x 6631) (= x 6632) + (= x 6633) (= x 6634) (= x 6635) (= x 6636) (= x 6637) (= x 6638) (= x 6639) (= x 6640) + (= x 6641) (= x 6642) (= x 6643) (= x 6644) (= x 6645) (= x 6646) (= x 6647) (= x 6648) + (= x 6649) (= x 6650) (= x 6651) (= x 6652) (= x 6653) (= x 6654) (= x 6655) (= x 6656) + (= x 6657) (= x 6658) (= x 6659) (= x 6660) (= x 6661) (= x 6662) (= x 6663) (= x 6664) + (= x 6665) (= x 6666) (= x 6667) (= x 6668) (= x 6669) (= x 6670) (= x 6671) (= x 6672) + (= x 6673) (= x 6674) (= x 6675) (= x 6676) (= x 6677) (= x 6678) (= x 6679) (= x 6680) + (= x 6681) (= x 6682) (= x 6683) (= x 6684) (= x 6685) (= x 6686) (= x 6687) (= x 6688) + (= x 6689) (= x 6690) (= x 6691) (= x 6692) (= x 6693) (= x 6694) (= x 6695) (= x 6696) + (= x 6697) (= x 6698) (= x 6699) (= x 6700) (= x 6701) (= x 6702) (= x 6703) (= x 6704) + (= x 6705) (= x 6706) (= x 6707) (= x 6708) (= x 6709) (= x 6710) (= x 6711) (= x 6712) + (= x 6713) (= x 6714) (= x 6715) (= x 6716) (= x 6717) (= x 6718) (= x 6719) (= x 6720) + (= x 6721) (= x 6722) (= x 6723) (= x 6724) (= x 6725) (= x 6726) (= x 6727) (= x 6728) + (= x 6729) (= x 6730) (= x 6731) (= x 6732) (= x 6733) (= x 6734) (= x 6735) (= x 6736) + (= x 6737) (= x 6738) (= x 6739) (= x 6740) (= x 6741) (= x 6742) (= x 6743) (= x 6744) + (= x 6745) (= x 6746) (= x 6747) (= x 6748) (= x 6749) (= x 6750) (= x 6751) (= x 6752) + (= x 6753) (= x 6754) (= x 6755) (= x 6756) (= x 6757) (= x 6758) (= x 6759) (= x 6760) + (= x 6761) (= x 6762) (= x 6763) (= x 6764) (= x 6765) (= x 6766) (= x 6767) (= x 6768) + (= x 6769) (= x 6770) (= x 6771) (= x 6772) (= x 6773) (= x 6774) (= x 6775) (= x 6776) + (= x 6777) (= x 6778) (= x 6779) (= x 6780) (= x 6781) (= x 6782) (= x 6783) (= x 6784) + (= x 6785) (= x 6786) (= x 6787) (= x 6788) (= x 6789) (= x 6790) (= x 6791) (= x 6792) + (= x 6793) (= x 6794) (= x 6795) (= x 6796) (= x 6797) (= x 6798) (= x 6799) (= x 6800) + (= x 6801) (= x 6802) (= x 6803) (= x 6804) (= x 6805) (= x 6806) (= x 6807) (= x 6808) + (= x 6809) (= x 6810) (= x 6811) (= x 6812) (= x 6813) (= x 6814) (= x 6815) (= x 6816) + (= x 6817) (= x 6818) (= x 6819) (= x 6820) (= x 6821) (= x 6822) (= x 6823) (= x 6824) + (= x 6825) (= x 6826) (= x 6827) (= x 6828) (= x 6829) (= x 6830) (= x 6831) (= x 6832) + (= x 6833) (= x 6834) (= x 6835) (= x 6836) (= x 6837) (= x 6838) (= x 6839) (= x 6840) + (= x 6841) (= x 6842) (= x 6843) (= x 6844) (= x 6845) (= x 6846) (= x 6847) (= x 6848) + (= x 6849) (= x 6850) (= x 6851) (= x 6852) (= x 6853) (= x 6854) (= x 6855) (= x 6856) + (= x 6857) (= x 6858) (= x 6859) (= x 6860) (= x 6861) (= x 6862) (= x 6863) (= x 6864) + (= x 6865) (= x 6866) (= x 6867) (= x 6868) (= x 6869) (= x 6870) (= x 6871) (= x 6872) + (= x 6873) (= x 6874) (= x 6875) (= x 6876) (= x 6877) (= x 6878) (= x 6879) (= x 6880) + (= x 6881) (= x 6882) (= x 6883) (= x 6884) (= x 6885) (= x 6886) (= x 6887) (= x 6888) + (= x 6889) (= x 6890) (= x 6891) (= x 6892) (= x 6893) (= x 6894) (= x 6895) (= x 6896) + (= x 6897) (= x 6898) (= x 6899) (= x 6900) (= x 6901) (= x 6902) (= x 6903) (= x 6904) + (= x 6905) (= x 6906) (= x 6907) (= x 6908) (= x 6909) (= x 6910) (= x 6911) (= x 6912) + (= x 6913) (= x 6914) (= x 6915) (= x 6916) (= x 6917) (= x 6918) (= x 6919) (= x 6920) + (= x 6921) (= x 6922) (= x 6923) (= x 6924) (= x 6925) (= x 6926) (= x 6927) (= x 6928) + (= x 6929) (= x 6930) (= x 6931) (= x 6932) (= x 6933) (= x 6934) (= x 6935) (= x 6936) + (= x 6937) (= x 6938) (= x 6939) (= x 6940) (= x 6941) (= x 6942) (= x 6943) (= x 6944) + (= x 6945) (= x 6946) (= x 6947) (= x 6948) (= x 6949) (= x 6950) (= x 6951) (= x 6952) + (= x 6953) (= x 6954) (= x 6955) (= x 6956) (= x 6957) (= x 6958) (= x 6959) (= x 6960) + (= x 6961) (= x 6962) (= x 6963) (= x 6964) (= x 6965) (= x 6966) (= x 6967) (= x 6968) + (= x 6969) (= x 6970) (= x 6971) (= x 6972) (= x 6973) (= x 6974) (= x 6975) (= x 6976) + (= x 6977) (= x 6978) (= x 6979) (= x 6980) (= x 6981) (= x 6982) (= x 6983) (= x 6984) + (= x 6985) (= x 6986) (= x 6987) (= x 6988) (= x 6989) (= x 6990) (= x 6991) (= x 6992) + (= x 6993) (= x 6994) (= x 6995) (= x 6996) (= x 6997) (= x 6998) (= x 6999) (= x 7000) + (= x 7001) (= x 7002) (= x 7003) (= x 7004) (= x 7005) (= x 7006) (= x 7007) (= x 7008) + (= x 7009) (= x 7010) (= x 7011) (= x 7012) (= x 7013) (= x 7014) (= x 7015) (= x 7016) + (= x 7017) (= x 7018) (= x 7019) (= x 7020) (= x 7021) (= x 7022) (= x 7023) (= x 7024) + (= x 7025) (= x 7026) (= x 7027) (= x 7028) (= x 7029) (= x 7030) (= x 7031) (= x 7032) + (= x 7033) (= x 7034) (= x 7035) (= x 7036) (= x 7037) (= x 7038) (= x 7039) (= x 7040) + (= x 7041) (= x 7042) (= x 7043) (= x 7044) (= x 7045) (= x 7046) (= x 7047) (= x 7048) + (= x 7049) (= x 7050) (= x 7051) (= x 7052) (= x 7053) (= x 7054) (= x 7055) (= x 7056) + (= x 7057) (= x 7058) (= x 7059) (= x 7060) (= x 7061) (= x 7062) (= x 7063) (= x 7064) + (= x 7065) (= x 7066) (= x 7067) (= x 7068) (= x 7069) (= x 7070) (= x 7071) (= x 7072) + (= x 7073) (= x 7074) (= x 7075) (= x 7076) (= x 7077) (= x 7078) (= x 7079) (= x 7080) + (= x 7081) (= x 7082) (= x 7083) (= x 7084) (= x 7085) (= x 7086) (= x 7087) (= x 7088) + (= x 7089) (= x 7090) (= x 7091) (= x 7092) (= x 7093) (= x 7094) (= x 7095) (= x 7096) + (= x 7097) (= x 7098) (= x 7099) (= x 7100) (= x 7101) (= x 7102) (= x 7103) (= x 7104) + (= x 7105) (= x 7106) (= x 7107) (= x 7108) (= x 7109) (= x 7110) (= x 7111) (= x 7112) + (= x 7113) (= x 7114) (= x 7115) (= x 7116) (= x 7117) (= x 7118) (= x 7119) (= x 7120) + (= x 7121) (= x 7122) (= x 7123) (= x 7124) (= x 7125) (= x 7126) (= x 7127) (= x 7128) + (= x 7129) (= x 7130) (= x 7131) (= x 7132) (= x 7133) (= x 7134) (= x 7135) (= x 7136) + (= x 7137) (= x 7138) (= x 7139) (= x 7140) (= x 7141) (= x 7142) (= x 7143) (= x 7144) + (= x 7145) (= x 7146) (= x 7147) (= x 7148) (= x 7149) (= x 7150) (= x 7151) (= x 7152) + (= x 7153) (= x 7154) (= x 7155) (= x 7156) (= x 7157) (= x 7158) (= x 7159) (= x 7160) + (= x 7161) (= x 7162) (= x 7163) (= x 7164) (= x 7165) (= x 7166) (= x 7167) (= x 7168) + (= x 7169) (= x 7170) (= x 7171) (= x 7172) (= x 7173) (= x 7174) (= x 7175) (= x 7176) + (= x 7177) (= x 7178) (= x 7179) (= x 7180) (= x 7181) (= x 7182) (= x 7183) (= x 7184) + (= x 7185) (= x 7186) (= x 7187) (= x 7188) (= x 7189) (= x 7190) (= x 7191) (= x 7192) + (= x 7193) (= x 7194) (= x 7195) (= x 7196) (= x 7197) (= x 7198) (= x 7199) (= x 7200) + (= x 7201) (= x 7202) (= x 7203) (= x 7204) (= x 7205) (= x 7206) (= x 7207) (= x 7208) + (= x 7209) (= x 7210) (= x 7211) (= x 7212) (= x 7213) (= x 7214) (= x 7215) (= x 7216) + (= x 7217) (= x 7218) (= x 7219) (= x 7220) (= x 7221) (= x 7222) (= x 7223) (= x 7224) + (= x 7225) (= x 7226) (= x 7227) (= x 7228) (= x 7229) (= x 7230) (= x 7231) (= x 7232) + (= x 7233) (= x 7234) (= x 7235) (= x 7236) (= x 7237) (= x 7238) (= x 7239) (= x 7240) + (= x 7241) (= x 7242) (= x 7243) (= x 7244) (= x 7245) (= x 7246) (= x 7247) (= x 7248) + (= x 7249) (= x 7250) (= x 7251) (= x 7252) (= x 7253) (= x 7254) (= x 7255) (= x 7256) + (= x 7257) (= x 7258) (= x 7259) (= x 7260) (= x 7261) (= x 7262) (= x 7263) (= x 7264) + (= x 7265) (= x 7266) (= x 7267) (= x 7268) (= x 7269) (= x 7270) (= x 7271) (= x 7272) + (= x 7273) (= x 7274) (= x 7275) (= x 7276) (= x 7277) (= x 7278) (= x 7279) (= x 7280) + (= x 7281) (= x 7282) (= x 7283) (= x 7284) (= x 7285) (= x 7286) (= x 7287) (= x 7288) + (= x 7289) (= x 7290) (= x 7291) (= x 7292) (= x 7293) (= x 7294) (= x 7295) (= x 7296) + (= x 7297) (= x 7298) (= x 7299) (= x 7300) (= x 7301) (= x 7302) (= x 7303) (= x 7304) + (= x 7305) (= x 7306) (= x 7307) (= x 7308) (= x 7309) (= x 7310) (= x 7311) (= x 7312) + (= x 7313) (= x 7314) (= x 7315) (= x 7316) (= x 7317) (= x 7318) (= x 7319) (= x 7320) + (= x 7321) (= x 7322) (= x 7323) (= x 7324) (= x 7325) (= x 7326) (= x 7327) (= x 7328) + (= x 7329) (= x 7330) (= x 7331) (= x 7332) (= x 7333) (= x 7334) (= x 7335) (= x 7336) + (= x 7337) (= x 7338) (= x 7339) (= x 7340) (= x 7341) (= x 7342) (= x 7343) (= x 7344) + (= x 7345) (= x 7346) (= x 7347) (= x 7348) (= x 7349) (= x 7350) (= x 7351) (= x 7352) + (= x 7353) (= x 7354) (= x 7355) (= x 7356) (= x 7357) (= x 7358) (= x 7359) (= x 7360) + (= x 7361) (= x 7362) (= x 7363) (= x 7364) (= x 7365) (= x 7366) (= x 7367) (= x 7368) + (= x 7369) (= x 7370) (= x 7371) (= x 7372) (= x 7373) (= x 7374) (= x 7375) (= x 7376) + (= x 7377) (= x 7378) (= x 7379) (= x 7380) (= x 7381) (= x 7382) (= x 7383) (= x 7384) + (= x 7385) (= x 7386) (= x 7387) (= x 7388) (= x 7389) (= x 7390) (= x 7391) (= x 7392) + (= x 7393) (= x 7394) (= x 7395) (= x 7396) (= x 7397) (= x 7398) (= x 7399) (= x 7400) + (= x 7401) (= x 7402) (= x 7403) (= x 7404) (= x 7405) (= x 7406) (= x 7407) (= x 7408) + (= x 7409) (= x 7410) (= x 7411) (= x 7412) (= x 7413) (= x 7414) (= x 7415) (= x 7416) + (= x 7417) (= x 7418) (= x 7419) (= x 7420) (= x 7421) (= x 7422) (= x 7423) (= x 7424) + (= x 7425) (= x 7426) (= x 7427) (= x 7428) (= x 7429) (= x 7430) (= x 7431) (= x 7432) + (= x 7433) (= x 7434) (= x 7435) (= x 7436) (= x 7437) (= x 7438) (= x 7439) (= x 7440) + (= x 7441) (= x 7442) (= x 7443) (= x 7444) (= x 7445) (= x 7446) (= x 7447) (= x 7448) + (= x 7449) (= x 7450) (= x 7451) (= x 7452) (= x 7453) (= x 7454) (= x 7455) (= x 7456) + (= x 7457) (= x 7458) (= x 7459) (= x 7460) (= x 7461) (= x 7462) (= x 7463) (= x 7464) + (= x 7465) (= x 7466) (= x 7467) (= x 7468) (= x 7469) (= x 7470) (= x 7471) (= x 7472) + (= x 7473) (= x 7474) (= x 7475) (= x 7476) (= x 7477) (= x 7478) (= x 7479) (= x 7480) + (= x 7481) (= x 7482) (= x 7483) (= x 7484) (= x 7485) (= x 7486) (= x 7487) (= x 7488) + (= x 7489) (= x 7490) (= x 7491) (= x 7492) (= x 7493) (= x 7494) (= x 7495) (= x 7496) + (= x 7497) (= x 7498) (= x 7499) (= x 7500) (= x 7501) (= x 7502) (= x 7503) (= x 7504) + (= x 7505) (= x 7506) (= x 7507) (= x 7508) (= x 7509) (= x 7510) (= x 7511) (= x 7512) + (= x 7513) (= x 7514) (= x 7515) (= x 7516) (= x 7517) (= x 7518) (= x 7519) (= x 7520) + (= x 7521) (= x 7522) (= x 7523) (= x 7524) (= x 7525) (= x 7526) (= x 7527) (= x 7528) + (= x 7529) (= x 7530) (= x 7531) (= x 7532) (= x 7533) (= x 7534) (= x 7535) (= x 7536) + (= x 7537) (= x 7538) (= x 7539) (= x 7540) (= x 7541) (= x 7542) (= x 7543) (= x 7544) + (= x 7545) (= x 7546) (= x 7547) (= x 7548) (= x 7549) (= x 7550) (= x 7551) (= x 7552) + (= x 7553) (= x 7554) (= x 7555) (= x 7556) (= x 7557) (= x 7558) (= x 7559) (= x 7560) + (= x 7561) (= x 7562) (= x 7563) (= x 7564) (= x 7565) (= x 7566) (= x 7567) (= x 7568) + (= x 7569) (= x 7570) (= x 7571) (= x 7572) (= x 7573) (= x 7574) (= x 7575) (= x 7576) + (= x 7577) (= x 7578) (= x 7579) (= x 7580) (= x 7581) (= x 7582) (= x 7583) (= x 7584) + (= x 7585) (= x 7586) (= x 7587) (= x 7588) (= x 7589) (= x 7590) (= x 7591) (= x 7592) + (= x 7593) (= x 7594) (= x 7595) (= x 7596) (= x 7597) (= x 7598) (= x 7599) (= x 7600) + (= x 7601) (= x 7602) (= x 7603) (= x 7604) (= x 7605) (= x 7606) (= x 7607) (= x 7608) + (= x 7609) (= x 7610) (= x 7611) (= x 7612) (= x 7613) (= x 7614) (= x 7615) (= x 7616) + (= x 7617) (= x 7618) (= x 7619) (= x 7620) (= x 7621) (= x 7622) (= x 7623) (= x 7624) + (= x 7625) (= x 7626) (= x 7627) (= x 7628) (= x 7629) (= x 7630) (= x 7631) (= x 7632) + (= x 7633) (= x 7634) (= x 7635) (= x 7636) (= x 7637) (= x 7638) (= x 7639) (= x 7640) + (= x 7641) (= x 7642) (= x 7643) (= x 7644) (= x 7645) (= x 7646) (= x 7647) (= x 7648) + (= x 7649) (= x 7650) (= x 7651) (= x 7652) (= x 7653) (= x 7654) (= x 7655) (= x 7656) + (= x 7657) (= x 7658) (= x 7659) (= x 7660) (= x 7661) (= x 7662) (= x 7663) (= x 7664) + (= x 7665) (= x 7666) (= x 7667) (= x 7668) (= x 7669) (= x 7670) (= x 7671) (= x 7672) + (= x 7673) (= x 7674) (= x 7675) (= x 7676) (= x 7677) (= x 7678) (= x 7679) (= x 7680) + (= x 7681) (= x 7682) (= x 7683) (= x 7684) (= x 7685) (= x 7686) (= x 7687) (= x 7688) + (= x 7689) (= x 7690) (= x 7691) (= x 7692) (= x 7693) (= x 7694) (= x 7695) (= x 7696) + (= x 7697) (= x 7698) (= x 7699) (= x 7700) (= x 7701) (= x 7702) (= x 7703) (= x 7704) + (= x 7705) (= x 7706) (= x 7707) (= x 7708) (= x 7709) (= x 7710) (= x 7711) (= x 7712) + (= x 7713) (= x 7714) (= x 7715) (= x 7716) (= x 7717) (= x 7718) (= x 7719) (= x 7720) + (= x 7721) (= x 7722) (= x 7723) (= x 7724) (= x 7725) (= x 7726) (= x 7727) (= x 7728) + (= x 7729) (= x 7730) (= x 7731) (= x 7732) (= x 7733) (= x 7734) (= x 7735) (= x 7736) + (= x 7737) (= x 7738) (= x 7739) (= x 7740) (= x 7741) (= x 7742) (= x 7743) (= x 7744) + (= x 7745) (= x 7746) (= x 7747) (= x 7748) (= x 7749) (= x 7750) (= x 7751) (= x 7752) + (= x 7753) (= x 7754) (= x 7755) (= x 7756) (= x 7757) (= x 7758) (= x 7759) (= x 7760) + (= x 7761) (= x 7762) (= x 7763) (= x 7764) (= x 7765) (= x 7766) (= x 7767) (= x 7768) + (= x 7769) (= x 7770) (= x 7771) (= x 7772) (= x 7773) (= x 7774) (= x 7775) (= x 7776) + (= x 7777) (= x 7778) (= x 7779) (= x 7780) (= x 7781) (= x 7782) (= x 7783) (= x 7784) + (= x 7785) (= x 7786) (= x 7787) (= x 7788) (= x 7789) (= x 7790) (= x 7791) (= x 7792) + (= x 7793) (= x 7794) (= x 7795) (= x 7796) (= x 7797) (= x 7798) (= x 7799) (= x 7800) + (= x 7801) (= x 7802) (= x 7803) (= x 7804) (= x 7805) (= x 7806) (= x 7807) (= x 7808) + (= x 7809) (= x 7810) (= x 7811) (= x 7812) (= x 7813) (= x 7814) (= x 7815) (= x 7816) + (= x 7817) (= x 7818) (= x 7819) (= x 7820) (= x 7821) (= x 7822) (= x 7823) (= x 7824) + (= x 7825) (= x 7826) (= x 7827) (= x 7828) (= x 7829) (= x 7830) (= x 7831) (= x 7832) + (= x 7833) (= x 7834) (= x 7835) (= x 7836) (= x 7837) (= x 7838) (= x 7839) (= x 7840) + (= x 7841) (= x 7842) (= x 7843) (= x 7844) (= x 7845) (= x 7846) (= x 7847) (= x 7848) + (= x 7849) (= x 7850) (= x 7851) (= x 7852) (= x 7853) (= x 7854) (= x 7855) (= x 7856) + (= x 7857) (= x 7858) (= x 7859) (= x 7860) (= x 7861) (= x 7862) (= x 7863) (= x 7864) + (= x 7865) (= x 7866) (= x 7867) (= x 7868) (= x 7869) (= x 7870) (= x 7871) (= x 7872) + (= x 7873) (= x 7874) (= x 7875) (= x 7876) (= x 7877) (= x 7878) (= x 7879) (= x 7880) + (= x 7881) (= x 7882) (= x 7883) (= x 7884) (= x 7885) (= x 7886) (= x 7887) (= x 7888) + (= x 7889) (= x 7890) (= x 7891) (= x 7892) (= x 7893) (= x 7894) (= x 7895) (= x 7896) + (= x 7897) (= x 7898) (= x 7899) (= x 7900) (= x 7901) (= x 7902) (= x 7903) (= x 7904) + (= x 7905) (= x 7906) (= x 7907) (= x 7908) (= x 7909) (= x 7910) (= x 7911) (= x 7912) + (= x 7913) (= x 7914) (= x 7915) (= x 7916) (= x 7917) (= x 7918) (= x 7919) (= x 7920) + (= x 7921) (= x 7922) (= x 7923) (= x 7924) (= x 7925) (= x 7926) (= x 7927) (= x 7928) + (= x 7929) (= x 7930) (= x 7931) (= x 7932) (= x 7933) (= x 7934) (= x 7935) (= x 7936) + (= x 7937) (= x 7938) (= x 7939) (= x 7940) (= x 7941) (= x 7942) (= x 7943) (= x 7944) + (= x 7945) (= x 7946) (= x 7947) (= x 7948) (= x 7949) (= x 7950) (= x 7951) (= x 7952) + (= x 7953) (= x 7954) (= x 7955) (= x 7956) (= x 7957) (= x 7958) (= x 7959) (= x 7960) + (= x 7961) (= x 7962) (= x 7963) (= x 7964) (= x 7965) (= x 7966) (= x 7967) (= x 7968) + (= x 7969) (= x 7970) (= x 7971) (= x 7972) (= x 7973) (= x 7974) (= x 7975) (= x 7976) + (= x 7977) (= x 7978) (= x 7979) (= x 7980) (= x 7981) (= x 7982) (= x 7983) (= x 7984) + (= x 7985) (= x 7986) (= x 7987) (= x 7988) (= x 7989) (= x 7990) (= x 7991) (= x 7992) + (= x 7993) (= x 7994) (= x 7995) (= x 7996) (= x 7997) (= x 7998) (= x 7999) (= x 8000) + (= x 8001) (= x 8002) (= x 8003) (= x 8004) (= x 8005) (= x 8006) (= x 8007) (= x 8008) + (= x 8009) (= x 8010) (= x 8011) (= x 8012) (= x 8013) (= x 8014) (= x 8015) (= x 8016) + (= x 8017) (= x 8018) (= x 8019) (= x 8020) (= x 8021) (= x 8022) (= x 8023) (= x 8024) + (= x 8025) (= x 8026) (= x 8027) (= x 8028) (= x 8029) (= x 8030) (= x 8031) (= x 8032) + (= x 8033) (= x 8034) (= x 8035) (= x 8036) (= x 8037) (= x 8038) (= x 8039) (= x 8040) + (= x 8041) (= x 8042) (= x 8043) (= x 8044) (= x 8045) (= x 8046) (= x 8047) (= x 8048) + (= x 8049) (= x 8050) (= x 8051) (= x 8052) (= x 8053) (= x 8054) (= x 8055) (= x 8056) + (= x 8057) (= x 8058) (= x 8059) (= x 8060) (= x 8061) (= x 8062) (= x 8063) (= x 8064) + (= x 8065) (= x 8066) (= x 8067) (= x 8068) (= x 8069) (= x 8070) (= x 8071) (= x 8072) + (= x 8073) (= x 8074) (= x 8075) (= x 8076) (= x 8077) (= x 8078) (= x 8079) (= x 8080) + (= x 8081) (= x 8082) (= x 8083) (= x 8084) (= x 8085) (= x 8086) (= x 8087) (= x 8088) + (= x 8089) (= x 8090) (= x 8091) (= x 8092) (= x 8093) (= x 8094) (= x 8095) (= x 8096) + (= x 8097) (= x 8098) (= x 8099) (= x 8100) (= x 8101) (= x 8102) (= x 8103) (= x 8104) + (= x 8105) (= x 8106) (= x 8107) (= x 8108) (= x 8109) (= x 8110) (= x 8111) (= x 8112) + (= x 8113) (= x 8114) (= x 8115) (= x 8116) (= x 8117) (= x 8118) (= x 8119) (= x 8120) + (= x 8121) (= x 8122) (= x 8123) (= x 8124) (= x 8125) (= x 8126) (= x 8127) (= x 8128) + (= x 8129) (= x 8130) (= x 8131) (= x 8132) (= x 8133) (= x 8134) (= x 8135) (= x 8136) + (= x 8137) (= x 8138) (= x 8139) (= x 8140) (= x 8141) (= x 8142) (= x 8143) (= x 8144) + (= x 8145) (= x 8146) (= x 8147) (= x 8148) (= x 8149) (= x 8150) (= x 8151) (= x 8152) + (= x 8153) (= x 8154) (= x 8155) (= x 8156) (= x 8157) (= x 8158) (= x 8159) (= x 8160) + (= x 8161) (= x 8162) (= x 8163) (= x 8164) (= x 8165) (= x 8166) (= x 8167) (= x 8168) + (= x 8169) (= x 8170) (= x 8171) (= x 8172) (= x 8173) (= x 8174) (= x 8175) (= x 8176) + (= x 8177) (= x 8178) (= x 8179) (= x 8180) (= x 8181) (= x 8182) (= x 8183) (= x 8184) + (= x 8185) (= x 8186) (= x 8187) (= x 8188) (= x 8189) (= x 8190) (= x 8191) (= x 8192) + )) + (itp x)) +) + +(rule (=> + (and + (itp x) + (= x1 (+ x 1)) + ) + (itp x1) + ) +) + + +(rule (=> (and (itp x) + (not (> x 0) + )) fail)) + + +(query fail :print-certificate true) + diff --git a/include/ae/AeValSolver.hpp b/include/ae/AeValSolver.hpp index 19a0cb49f..b198b3f71 100644 --- a/include/ae/AeValSolver.hpp +++ b/include/ae/AeValSolver.hpp @@ -20,7 +20,7 @@ namespace ufo ExprSet v; // existentially quantified vars ExprVector stVars; - ExprVector tConjs; + ExprSet tConjs; ExprSet usedConjs; ExprMap defMap; ExprSet conflictVars; diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index d237f08c4..0a92b26a2 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -758,7 +758,110 @@ namespace ufo return true; } - inline static void getConj (Expr a, ExprVector &conjs) + inline static bool isNumericConst(Expr e) + { + return isOpX(e) || isOpX(e); + } + + template static int getVarIndex(Expr var, Range& vec) + { + int i = 0; + for (auto &e: vec) + { + if (var == e) return i; + i++; + } + return -1; + } + + static void getAddTerm (Expr a, ExprVector &terms); // declaration only + + inline static Expr arithmInverse(Expr e) + { + bool success = true; + if (isOpX(e)) + { + int coef = 1; + Expr var = NULL; + for (auto it = e->args_begin (), end = e->args_end (); it != end; ++it) + { + if (isNumericConst(*it)) + { + coef *= lexical_cast(*it); + } + else if (bind::isIntConst(*it) && var == NULL) + { + var = *it; + } + else + { + success = false; + } + } + if (success && coef != 0) return mk(mkTerm (mpz_class (-coef), e->getFactory()), e->right()); + + if (coef == 0) return mkTerm (mpz_class (0), e->getFactory()); + } + else if (isOpX(e)) + { + ExprVector terms; + for (auto it = e->args_begin (), end = e->args_end (); it != end; ++it) + { + getAddTerm(arithmInverse(*it), terms); + } + return mknary(terms); + } + else if (isOpX(e)) + { + ExprVector terms; + getAddTerm(arithmInverse(*e->args_begin ()), terms); + auto it = e->args_begin () + 1; + for (auto end = e->args_end (); it != end; ++it) + { + getAddTerm(*it, terms); + } + return mknary(terms); + } + else if (isOpX(e)) + { + return e->left(); + } + else if (isNumericConst(e)) + { + return mkTerm (mpz_class (-lexical_cast(e)), e->getFactory()); + } + return mk(mkTerm (mpz_class (-1), e->getFactory()), e); + } + + inline static void getAddTerm (Expr a, ExprVector &terms) // implementation (mutually recursive) + { + if (isOpX(a)) + { + for (auto it = a->args_begin (), end = a->args_end (); it != end; ++it) + { + getAddTerm(*it, terms); + } + } + else if (isOpX(a)) + { + auto it = a->args_begin (); + auto end = a->args_end (); + getAddTerm(*it, terms); +// outs () <<" [ " << *(*it) << "\n"; + ++it; + for (; it != end; ++it) + { +// outs () << *mk(*it) << " ] \n"; + getAddTerm(arithmInverse(*it), terms); + } + } + else + { + terms.push_back(a); + } + } + + inline static void getConj (Expr a, ExprSet &conjs) { if (isOpX(a)) return; if (isOpX(a)){ @@ -766,9 +869,53 @@ namespace ufo getConj(a->arg(i), conjs); } } else { - if(find(conjs.begin(), conjs.end(), a) == conjs.end()) - conjs.push_back(a); + conjs.insert(a); + } + } + + inline static void getDisj (Expr a, ExprSet &disjs) + { + if (isOpX(a)) return; + if (isOpX(a)){ + for (unsigned i = 0; i < a->arity(); i++){ + getDisj(a->arg(i), disjs); + } + } else { + disjs.insert(a); + } + } + + inline Expr convertToGEandGT(Expr term) + { + if (isOpX(term)) return mk(term->right(), term->left()); + + if (isOpX(term)) return mk(term->right(), term->left()); + + if (isOpX(term)) return mk( + mk(term->left(), term->right()), + mk(term->right(), term->left())); + + if (isOpX(term)) return mk( + mk(term->left(), term->right()), + mk(term->right(), term->left())); + + if (isOpX(term)) + { + return mk(convertToGEandGT(term->last())); } + + if (isOpX(term) || isOpX(term)) + { + ExprSet args; + for (int i = 0; i < term->arity(); i++){ + args.insert(convertToGEandGT(term->arg(i))); + } + + return isOpX(term) ? conjoin (args, term->getFactory()) : + disjoin (args, term->getFactory()); + + } + return term; } /** @@ -784,12 +931,12 @@ namespace ufo } inline static Expr simplifiedAnd (Expr a, Expr b){ - ExprVector conjs; + ExprSet conjs; getConj(a, conjs); getConj(b, conjs); return (conjs.size() == 0) ? mk(a->getFactory()) : - (conjs.size() == 1) ? conjs[0] : + (conjs.size() == 1) ? *conjs.begin() : mknary(conjs); } @@ -800,6 +947,416 @@ namespace ufo if (find(b.begin(), b.end(), var) != b.end()) c.insert(var); return c.size(); } + + inline static void productAnd (ExprSet& as, ExprSet& bs, ExprSet& ps) + { + for (auto &a : as) + { + for (auto &b : bs) + { + ps.insert(mk(a, b)); + } + } + } + + // ab \/ cde \/ f => + // (a \/ c \/ f) /\ (a \/ d \/ f) /\ (a \/ e \/ f) /\ + // (b \/ c \/ f) /\ (b \/ d \/ f) /\ (b \/ e \/ f) + inline static Expr rewriteOrAnd(Expr exp) + { + ExprSet disjs; + getDisj(exp, disjs); + if (disjs.size() == 1) return exp; + + vector dconjs; + for (auto &a : disjs) + { + ExprSet conjs; + getConj(a, conjs); + dconjs.push_back(conjs); + } + + ExprSet older; + productAnd(dconjs[0], dconjs[1], older); + + ExprSet newer = older; + for (int i = 2; i < disjs.size(); i++) + { + newer.clear(); + productAnd(dconjs[i], older, newer); + older = newer; + } + + return conjoin (newer, exp->getFactory()); + } + + // not very pretty method, but.. + inline static Expr reBuildCmp(Expr term, Expr lhs, Expr rhs) + { + if (isOpX(term)) + { + return mk(lhs, rhs); + } + if (isOpX(term)) + { + return mk(lhs, rhs); + } + if (isOpX(term)) + { + return mk(lhs, rhs); + } + if (isOpX(term)) + { + return mk(lhs, rhs); + } + if (isOpX(term)) + { + return mk(lhs, rhs); + } + assert(isOpX(term)); + return mk(lhs, rhs); + } + + inline static Expr reBuildNegCmp(Expr term, Expr lhs, Expr rhs) + { + if (isOpX(term)) + { + return mk(lhs, rhs); + } + if (isOpX(term)) + { + return mk(lhs, rhs); + } + if (isOpX(term)) + { + return mk(lhs, rhs); + } + if (isOpX(term)) + { + return mk(lhs, rhs); + } + if (isOpX(term)) + { + return mk(lhs, rhs); + } + assert(isOpX(term)); + return mk(lhs, rhs); + } + + // not very pretty method, but.. + inline static bool evaluateCmpConsts(Expr term, int a, int b) + { + if (isOpX(term)) + { + return (a == b); + } + if (isOpX(term)) + { + return (a != b); + } + if (isOpX(term)) + { + return (a <= b); + } + if (isOpX(term)) + { + return (a >= b); + } + if (isOpX(term)) + { + return (a < b); + } + assert(isOpX(term)); + return (a > b); + } + + inline static Expr mkNeg(Expr term) + { + if (isOpX(term)) + { + return term->arg(0); + } + else if (isOpX(term) || isOpX(term)) + { + ExprSet args; + for (int i = 0; i < term->arity(); i++){ + args.insert(mkNeg(term->arg(i))); + } + return isOpX(term) ? disjoin(args, term->getFactory()) : + conjoin (args, term->getFactory()); + } + else if (isOp(term)) + { + return reBuildNegCmp(term, term->arg(0), term->arg(1)); + } + return mk(term); + } + + inline static Expr unfoldITE(Expr term) + { + if (isOpX(term)) + { + Expr iteCond = unfoldITE (term->arg(0)); + Expr iteC1 = unfoldITE (term->arg(1)); + Expr iteC2 = unfoldITE (term->arg(2)); + + return mk( mk(iteCond, iteC1), + mk(mkNeg(iteCond), iteC2)); + } + else if (isOpX(term)) + { + return mk(unfoldITE(term->last())); + } + else if (isOpX(term) || isOpX(term)) + { + ExprSet args; + for (int i = 0; i < term->arity(); i++){ + args.insert(unfoldITE(term->arg(i))); + } + return isOpX(term) ? conjoin (args, term->getFactory()) : + disjoin (args, term->getFactory()); + } + else if (isOp(term)) + { + Expr lhs = term->arg(0); + Expr rhs = term->arg(1); + + if (isOpX(rhs)) + { + + Expr iteCond = unfoldITE (rhs->arg(0)); + Expr iteC1 = rhs->arg(1); + Expr iteC2 = rhs->arg(2); + + Expr newCmp1 = unfoldITE (reBuildCmp(term, lhs, iteC1)); + Expr newCmp2 = unfoldITE (reBuildCmp(term, lhs, iteC2)); + + Expr transformed = mk( mk(iteCond, newCmp1), + mk(mkNeg(iteCond), newCmp2)); + + // outs () << " [1b] ---> " << *term << "\n"; + // outs () << " [1e] ---> " << *transformed << "\n\n"; + return transformed; + + } + else if (isOpX(lhs)) + { + // GF: symmetric case to the one above + + Expr iteCond = unfoldITE (lhs->arg(0)); + Expr iteC1 = lhs->arg(1); + Expr iteC2 = lhs->arg(2); + + Expr newCmp1 = unfoldITE (reBuildCmp(term, iteC1, rhs)); + Expr newCmp2 = unfoldITE (reBuildCmp(term, iteC2, rhs)); + + Expr transformed = mk( mk(iteCond, newCmp1), + mk(mkNeg(iteCond), newCmp2)); + + // outs () << " [2b] ---> " << *term << "\n"; + // outs () << " [2e] ---> " << *transformed << "\n\n"; + return transformed; + } + else if (isOpX(rhs)) + { + bool found = false; + Expr iteArg; + ExprVector newArgs; + for (auto it = rhs->args_begin(), end = rhs->args_end(); it != end; ++it) + { + // make sure that only one ITE is found + + if (!found && isOpX(*it)) + { + found = true; + iteArg = *it; + } + else + { + newArgs.push_back(*it); + } + } + if (found) + { + Expr iteCond = unfoldITE (iteArg->arg(0)); + Expr iteC1 = iteArg->arg(1); + Expr iteC2 = iteArg->arg(2); + + newArgs.push_back(iteC1); + Expr e1 = unfoldITE (reBuildCmp(term, lhs, mknary(newArgs))); // GF: "unfoldITE" gives error... + + newArgs.pop_back(); + newArgs.push_back(iteC2); + Expr e2 = unfoldITE (reBuildCmp(term, lhs, mknary(newArgs))); + + Expr transformed = mk(mk(iteCond, e1), + mk(mkNeg(iteCond),e2)); + + // outs () << " [3b] ---> " << *term << "\n"; + // outs () << " [3e] ---> " << *transformed << "\n\n"; + + return transformed; + } + } + else if (isOpX(lhs)) + { + // symmetric to the above case + bool found = false; + Expr iteArg; + ExprVector newArgs; + for (auto it = lhs->args_begin(), end = lhs->args_end(); it != end; ++it) + { + if (!found && isOpX(*it)) + { + found = true; + iteArg = *it; + } + else + { + newArgs.push_back(*it); + } + } + + if (found) + { + Expr iteCond = unfoldITE (iteArg->arg(0)); + Expr iteC1 = iteArg->arg(1); + Expr iteC2 = iteArg->arg(2); + + newArgs.push_back(iteC1); + Expr e1 = unfoldITE (reBuildCmp(term, mknary(newArgs), rhs)); + + newArgs.pop_back(); + newArgs.push_back(iteC2); + Expr e2 = unfoldITE (reBuildCmp(term, mknary(newArgs), rhs)); + + Expr transformed = mk(mk(iteCond,e1), + mk(mkNeg(iteCond),e2)); + + // outs () << " [4b] ---> " << *term << "\n"; + // outs () << " [4e] ---> " << *transformed << "\n\n"; + + return transformed; + } + } + } + + return term; + } + + // very simple check if tautology (SMT-based check is expensive) + inline static bool isTautology(Expr term) + { + if (isOpX(term)) + if (term->arg(0) == term->arg(1)) return true; + + if (isOp(term)) + if (isNumericConst(term->arg(0)) && isNumericConst(term->arg(1))) + return evaluateCmpConsts(term, + lexical_cast(term->arg(0)), lexical_cast(term->arg(1))); + + ExprSet cnjs; + getConj(term, cnjs); + if (cnjs.size() < 2) return false; + + bool res = true; + for (auto &a : cnjs) res &= isTautology(a); + + return res; + } + + inline static Expr normalizeAtom(Expr term, ExprVector& intVars) + { + if (isOp(term)) + { + Expr lhs = term->left(); + Expr rhs = term->right(); + + ExprVector all; + ExprVector allrhs; + + getAddTerm(lhs, all); + getAddTerm(rhs, allrhs); + for (auto & a : allrhs) + { + all.push_back(arithmInverse(a)); + } + + ExprSet newlhs; + + for (auto &v : intVars) + { + int coef = 0; + for (auto it = all.begin(); it != all.end();) + { + if(v == *it) + { + coef++; + it = all.erase(it); + } + else if (isOpX(*it) && (*it)->left() == v) + { + coef--; + it = all.erase(it); + } + else if (isOpX(*it) && (*it)->right() == v) + { + coef += lexical_cast((*it)->left()); + it = all.erase(it); + } + else + { + ++it; + } + } + if (coef != 0) newlhs.insert(mk(mkTerm (mpz_class (coef), term->getFactory()), v)); + } + + bool success = true; + int intconst = 0; + + for (auto &e : all) + { + if (isNumericConst(e)) + { + intconst += lexical_cast(e); + } + else + { + success = false; + } + } + + if (success && newlhs.size() == 0) + { + return (evaluateCmpConsts(term, 0, -intconst)) ? mk(term->getFactory()) : + mk(term->getFactory()); + } + + if (success) + { + Expr pl = (newlhs.size() == 1) ? *newlhs.begin(): mknary(newlhs); + Expr c = mkTerm (mpz_class (-intconst), term->getFactory()); + return reBuildCmp(term, pl, c); + } + + } + return term; + } + + inline static Expr normalizeDisj(Expr exp, ExprVector& intVars) + { + ExprSet disjs; + ExprSet newDisjs; + getDisj(exp, disjs); + for (auto &d : disjs) + { + Expr norm = normalizeAtom(d, intVars); + if ( isOpX (norm)) return norm; + if (!isOpX(norm)) newDisjs.insert(norm); + } + return disjoin(newDisjs, exp->getFactory()); + } } #endif diff --git a/include/ae/SMTUtils.hpp b/include/ae/SMTUtils.hpp index f3ea498d2..cfc6b56a1 100644 --- a/include/ae/SMTUtils.hpp +++ b/include/ae/SMTUtils.hpp @@ -143,7 +143,7 @@ namespace ufo Expr removeRedundantConjuncts(Expr exp) { ExprSet newCnjs; - ExprVector conjs; + ExprSet conjs; getConj(exp, conjs); if (conjs.size() < 2) return exp; @@ -160,6 +160,30 @@ namespace ufo return conjoin(newCnjs, efac); } + /** + * Remove some redundant disjuncts from the formula + */ + Expr removeRedundantDisjuncts(Expr exp) + { + ExprSet newDisj; + ExprSet disjs; + getDisj(exp, disjs); + + if (disjs.size() < 2) return exp; + + for (auto & disj : disjs) // GF: todo: incremental solving + { + if (isFalse (disj)) continue; + + if (isEquiv (disjoin(newDisj, efac), mk(disjoin(newDisj, efac), disj))) continue; + + newDisj.insert(disj); + } + + return disjoin(newDisj, efac); + } + + /** * Model-based simplification of a formula with 1 (one only) variable */ @@ -220,7 +244,6 @@ namespace ufo fp.addRule(allVars, boolop::limp (mk (B, itpApp), errApp)); tribool res; - try { res = fp.query(errApp); } catch (z3::exception &e){ diff --git a/include/deep/CodeSampler.hpp b/include/deep/CodeSampler.hpp new file mode 100644 index 000000000..7597dd0da --- /dev/null +++ b/include/deep/CodeSampler.hpp @@ -0,0 +1,271 @@ +#ifndef CODESAMPLER__HPP__ +#define CODESAMPLER__HPP__ + +#define MAXVARNM 10 +//#define MAXTSIZE 100 + +#include "ae/ExprSimpl.hpp" + +using namespace std; +using namespace boost; + +namespace ufo +{ + class CodeSampler + { + public: + + ExprSet candidates; + + set intConsts; + + HornRuleExt& hr; + Expr invDecl; + ExprVector invVars; + + Expr zero; + + CodeSampler(HornRuleExt& r, Expr& d, ExprVector& v) : hr(r), invDecl(d), invVars(v) + { + // add some "universal" constants + intConsts.insert(0); + intConsts.insert(1); + intConsts.insert(-1); + + // aux Expr const + zero = mkTerm (mpz_class (0), invDecl->getFactory()); + }; + + void addSampleHlp(Expr tmpl, ExprVector& vars, ExprSet& actualVars) + { + for (auto &v : actualVars) + { + int index = getVarIndex(v, vars); + if (index >= 0) + { + tmpl = replaceAll(tmpl, v, invVars[index]); + } + else + { + return; // tmpl = replaceAll(tmpl, v, zero); + } + } + Expr tmpl2 = normalizeDisj(tmpl, invVars); + + if (!isOpX (tmpl2) && !isOpX (tmpl2)) + { + candidates.insert(tmpl2); + } + } + + void addSample(Expr term) + { + // if (treeSize(term) > MAXTSIZE) // don't consider too huge templates + // { + // return; + // } + + ExprSet actualVars; + ExprSet subsetInvVars; + + expr::filter (term, bind::IsConst(), std::inserter (actualVars, actualVars.begin ())); + + bool locals = false; + if (actualVars.size() == 0 || isTautology(term)) return; + + // split each term to two samples (for srcVars and dstVars) + addSampleHlp(term, hr.srcVars, actualVars); + addSampleHlp(term, hr.dstVars, actualVars); + + } + + void populateArityAndTemplates(Expr term) + { + if (isOpX(term)) + { + addSample(mkNeg(term->last())); // massage the negated formula a bit + populateArityAndTemplates(term->last()); + } + else if (isOpX(term)) + { + if (!containsOp(term)) + { + addSample(term); // add any disjunct as a sample; + } + else + { + if (term->arity() < 5) // skip in case of big formulas (otherwise the formula blows up exponentially) + { // constant is hardcoded.. we can try something larger + Expr term2 = rewriteOrAnd(term); + populateArityAndTemplates(term2); + } + } + } + else if (isOpX(term)) + { + for (int i = 0; i < term->arity(); i++) + { + populateArityAndTemplates(term->arg(i)); + } + } + else if (isOpX(term)) + { + Expr term2 = mk(mk(term->left()), term->right()); + populateArityAndTemplates(term2); + } + else if (isOpX(term) || isOpX(term)) + { + addSample(term); // get rid of ITEs first + } + else if (isOp(term)) + { + populateArityAndTemplates(convertToGEandGT(term)); + } + } + + void shrinkConstantsSet() + { + if (intConsts.size() < MAXVARNM) return; + + Expr maxPosE; + Expr minPosE; + Expr maxNegE; + Expr minNegE; + + int maxPos = 0; + int minPos = INT_MAX; + int maxNeg = INT_MIN; + int minNeg = 0; + + + bool hasPos = false; + bool hasNeg = false; + + for (auto curint: intConsts) + { + if (curint > 0) + { + hasPos = true; + maxPos = max (maxPos, curint); + minPos = min (minPos, curint); + } + else if (curint < 0) + { + hasNeg = true; + maxNeg = max (maxPos, curint); + minNeg = min (minPos, curint); + } + } + + intConsts.clear(); + + if (hasPos) + { + intConsts.insert(minPos); + intConsts.insert(maxPos); + } + + if (hasNeg) + { + intConsts.insert(minNeg); + intConsts.insert(maxNeg); + } + + // add again the "universal" constants + intConsts.insert(0); + intConsts.insert(1); + intConsts.insert(-1); + } + + // GF: here could be many possible heuristics; currently we use only constants + void shrinkTemplatesSet() + { + ExprSet newTmpls; + for (auto &tmpl : candidates) + { + ExprVector tmplConstsExpr; + expr::filter (tmpl, bind::IsHardIntConst(), std::inserter (tmplConstsExpr, tmplConstsExpr.begin ())); + + bool found = (tmplConstsExpr.size() == 0); + settmplConsts; + for (auto &c : tmplConstsExpr) tmplConsts.insert(lexical_cast (c)); + + if (!found) // if there are no constants in the template, keep it! + { + for (auto c1 : tmplConsts) + { + for (auto c2 : intConsts) + { + // GF: comparing the actual constant values: + if (c1 == 0 || c1 ==-1 || c1 == 1 || c1 == c2) + { + found = true; + break; + } + } + } + } + if (found) newTmpls.insert(tmpl); + } + candidates = newTmpls; + } + + // GF: todo: mine plus / minus numbers, check which signs of constants appear in the lhs / rhs of expressions + + void analyzeCode(bool samplecode, bool shrink) + { + if (false) // printing only + { + outs () << "\nAnalize CHC:\n"; + outs () << "src vars: "; + for (int i = 0; i < hr.srcVars.size(); i++) outs() << "[" << *invVars[i] << "] = " << *hr.srcVars[i] << ", "; + outs() <<"\n"; + outs () << "dst vars: "; + for (int i = 0; i < hr.dstVars.size(); i++) outs() << "[" << *invVars[i] << "] = " << *hr.dstVars[i] << ", "; + outs() <<"\n"; + } + + // get int constants (and shrink later) + // GF: todo: make sure all constants in the code are Ints (otherwise, z3 could be unpredictable) + ExprSet intConstsE; + expr::filter (hr.body, bind::IsHardIntConst(), std::inserter (intConstsE, intConstsE.begin ())); + + for (auto &a : intConstsE) + { + intConsts.insert(lexical_cast(a)); + } + + // get samplecode templates (and shrink later) + if (samplecode) + { + + // for the query: add a negation of the entire non-recursive part: + if (hr.isQuery) + { + Expr massaged = unfoldITE(mkNeg(hr.body)); + massaged = convertToGEandGT(massaged); + populateArityAndTemplates(massaged); + } + else + { + // for others: the entire non-recursive part + for (auto &cnj : hr.lin) + { + // GF: todo: make sure all constants in the code are Ints (otherwise, z3 could be unpredictable) + Expr massaged = unfoldITE(cnj); + massaged = convertToGEandGT(massaged); + populateArityAndTemplates(massaged); + } + } + } + + if (shrink) + { + shrinkConstantsSet(); + shrinkTemplatesSet(); + } + } + }; +} + +#endif \ No newline at end of file diff --git a/include/deep/Distribution.hpp b/include/deep/Distribution.hpp new file mode 100644 index 000000000..6b6b90a23 --- /dev/null +++ b/include/deep/Distribution.hpp @@ -0,0 +1,114 @@ +#ifndef DISTRIBUTION__HPP__ +#define DISTRIBUTION__HPP__ + +#define MAXDISTR 1000 + +using namespace std; +using namespace boost; + +namespace ufo +{ + typedef vector distribution; + typedef vector weights; + typedef map density; + + class Distr + { + public: + + distribution distr; + + Distr() {} + + void setupUniformDistr(int range) + { + for (int i = 1; i < range; i++) + { + int num = i * MAXDISTR / range; + distr.push_back(num); + } + distr.push_back(MAXDISTR); + } + + int guessFromDistr() + { + int rnd = 0; + int range = distr.size(); + int maxd = distr[range-1]; + + int i = std::rand() % maxd; + while (i >= distr[rnd]) rnd ++; + + return rnd; + } + }; + + inline static int chooseByWeight(weights& wg) + { + Distr d; + int w = 0; + for (int i = 0; i < wg.size(); i++) + { + w += wg[i]; + d.distr.push_back(w); + } + return d.guessFromDistr(); + } + + inline static int chooseByWeight(density& den) + { + Distr d; + int w = 0; + for (auto &a : den) // assume the smallest "a.first" comes first + { + w += a.second; + while (d.distr.size() < a.first) d.distr.push_back(0); + d.distr.push_back(w); + } + return d.guessFromDistr(); + } + + inline static int guessUniformly(int range) + { + assert(range > 0); + return std::rand() % range; + } + + inline static void initDistrs(vector& distrs, int sz1, int sz2, int defaultValue = 1000) + { + if (distrs.size() == 0) + { + for (int i = 0; i < sz1; i++) + { + distrs.push_back(weights()); + for (int j = 0; j < sz2; j++) + { + distrs.back().push_back(defaultValue); // should be something greater than zero + } + } + } + } + + inline static bool isDefault(weights& d, int defaultValue = 1000) + { + for (int i = 0; i < d.size(); i++) + { + if (d[i] != defaultValue) return false; + } + return true; + } + + inline static void printDistr(weights& distr, string msg) + { + if (msg != "" ) outs () << msg << ": "; + outs () << "["; + for (int j = 0; j < distr.size(); j++) + { + outs() << distr[j] << ", "; + } + outs () << "]\n"; + } +} + + +#endif \ No newline at end of file diff --git a/include/deep/Horn.hpp b/include/deep/Horn.hpp new file mode 100644 index 000000000..1851f2aeb --- /dev/null +++ b/include/deep/Horn.hpp @@ -0,0 +1,218 @@ +#ifndef HORN__HPP__ +#define HORN__HPP__ + +#include "ae/ExprSimpl.hpp" + +using namespace std; +using namespace boost; + +namespace ufo +{ + struct HornRuleExt + { + ExprVector srcVars; + ExprVector dstVars; + ExprVector locVars; + + ExprVector lin; + Expr body; // conjunction of lin + Expr head; + + Expr srcRelation; + Expr dstRelation; + + bool isFact; + bool isQuery; + bool isInductive; + + string suffix; + }; + + class CHCs + { + private: + + ExprFactory &m_efac; + EZ3 &m_z3; + + Expr failDecl; + + public: + + vector chcs; + ExprSet decls; + + CHCs(ExprFactory &efac, EZ3 &z3) : m_efac(efac), m_z3(z3) {}; + + void preprocess (Expr term, ExprSet& srcVars, ExprVector& relations, Expr &srcRelation, ExprVector& lin) + { + if (isOpX(term)) + { + for (auto it = term->args_begin(), end = term->args_end(); it != end; ++it) + { + preprocess(*it, srcVars, relations, srcRelation, lin); + } + } + else + { + if (isOpX(term)) + { + if (term->arity () > 0) + { + if (isOpX(term->arg(0))) + { + for (auto &rel: relations) + { + if (rel == term->arg(0)) + { + srcRelation = rel->arg(0); + expr::filter (term, bind::IsConst(), std::inserter (srcVars, srcVars.begin ())); + } + } + } + } + } + else + { + lin.push_back(term); + } + } + } + + void parse(string smt) + { + std::unique_ptr > m_fp; + m_fp.reset (new ZFixedPoint (m_z3)); + ZFixedPoint &fp = *m_fp; + fp.loadFPfromFile(smt); + + string suff(""); //suff("_new"); + + // a little hack here + + for (auto &a : fp.m_rels) + { + if (a->arity() == 2) + { + failDecl = a; + } + else + { + decls.insert(a); + } + } + + for (auto &r: fp.m_rules) + { + assert (isOpX(r)); + + chcs.push_back(HornRuleExt()); + HornRuleExt& hr = chcs.back(); + + hr.suffix = suff; + hr.srcRelation = mk(m_efac); + + Expr rule = r->last(); + + ExprVector args; + + for (int i = 0; i < r->arity() - 1; i++) + { + Expr var = r->arg(i); + Expr name = bind::name (r->arg(i)); + Expr new_name = mkTerm (lexical_cast (name.get()) + suff, m_efac); + Expr var_new = bind::fapp(bind::rename(var, new_name)); + args.push_back(var_new); + } + + ExprVector actual_vars; + expr::filter (rule, bind::IsVar(), std::inserter (actual_vars, actual_vars.begin ())); + + assert(actual_vars.size() == args.size()); + + for (int i = 0; i < actual_vars.size(); i++) + { + string a1 = lexical_cast(bind::name(actual_vars[i])); + int ind = args.size() - 1 - atoi(a1.substr(1).c_str()); + rule = replaceAll(rule, actual_vars[i], args[ind]); + } + + Expr body = rule->arg(0); + Expr head = rule->arg(1); + + hr.head = head->arg(0); + + hr.dstRelation = head->arg(0)->arg(0); + + ExprSet srcVars; + + preprocess(body, srcVars, fp.m_rels, hr.srcRelation, hr.lin); + + hr.isFact = isOpX(hr.srcRelation); + hr.isQuery = (hr.dstRelation == failDecl->arg(0)); + hr.isInductive = (hr.srcRelation == hr.dstRelation); + + hr.body = conjoin(hr.lin, m_efac); + + for (auto &a : srcVars) hr.srcVars.push_back(a); + + if (!hr.isQuery) + { + expr::filter (head, bind::IsConst(), std::inserter (hr.dstVars, hr.dstVars.begin ())); + } + + for(auto &a: args) + { + bool found = false; + for (auto &b : hr.dstVars) + { + if (a == b) found = true; + } + if (! found) + { + for (auto &b : hr.srcVars) + { + if (a == b) found = true; + } + } + if (!found) + { + hr.locVars.push_back(a); + } + } + } + } + + void print() + { + int num = 0; + for (auto &hr: chcs){ + outs () << "\n=========================\n"; + outs () << "RULE #" << num++ << "\n"; + outs() << "\n body [" << * hr.body << "] -> " << * hr.head << "\n"; + outs() << "\n" << * hr.srcRelation << " -> " << * hr.dstRelation << "\n"; + + outs() << "\n SRC VARS: "; + for(auto &a: hr.srcVars){ + outs() << *a << ", "; + } + outs() << "\n"; + outs() << " DST VARS: "; + for(auto a: hr.dstVars){ + outs() << *a << ", "; + } + outs() << "\n"; + outs() << " LOCAL VARS: "; + for(auto a: hr.locVars){ + outs() << *a << ", "; + } + + outs () << "\n"; + + } + } + }; +} + + +#endif \ No newline at end of file diff --git a/include/deep/LinCom.hpp b/include/deep/LinCom.hpp new file mode 100644 index 000000000..2a7caa892 --- /dev/null +++ b/include/deep/LinCom.hpp @@ -0,0 +1,1164 @@ +#ifndef LINCOM__HPP__ +#define LINCOM__HPP__ + +#define MAXARITY 2 +#define PRIORNOVISIT 0 +#define PRIORSTEP 5 + +#include "Distribution.hpp" +#include "ae/ExprSimpl.hpp" + +using namespace std; +using namespace boost; + +namespace ufo +{ + + typedef vector> lincoms; + + class LAterm + { + public: + + std::vector vcs; + + int arity; + int cmpop; + int intconst; + + LAterm(){} + + int getSize() + { + return 3 + 2 * arity; + } + + void normalizePlus() + { + int j; + map varsM; + + for (j = 0; j < vcs.size(); j += 2) + { + varsM[vcs[j]] = vcs[j+1]; + } + + // fill again + j = 0; + + for (map::iterator it=varsM.begin(); it!=varsM.end(); ++it) + { + vcs[j++] = it->first; + vcs[j++] = it->second; + } + } + }; + + inline bool operator== (LAterm& a, LAterm& b) + { + if (a.arity != b.arity) return false; + if (a.cmpop != b.cmpop) return false; + if (a.intconst != b.intconst) return false; + + for (int i = 0; i < a.vcs.size(); i++) + { + if (a.vcs[i] != b.vcs[i]) return false; + } + return true; + } + + class LAdisj + { + private: + lincoms id; + + public: + + int arity = 0; + vector dstate; // i.e., disjunctive-state + + LAdisj(){} + + LAterm& newDisj() + { + arity++; + dstate.push_back(LAterm()); + return dstate.back(); + } + + void addDisj(LAterm& s) + { + arity++; + dstate.push_back(s); + } + + void printLAdisj() + { + outs () << "Cur LAdisj (OR arity = " << arity << "): \n"; + for (int i = 0; i < arity; i++) + { + outs() << " disj #" << i << ":\n"; + LAterm& s = dstate[i]; + + outs() << " ** arity +: " << s.arity << "\n"; + outs() << " ** comparison op: " << s.cmpop << "\n"; + outs() << " ** const: " << s.intconst << "\n"; + + for (int j = 0; j < s.vcs.size(); ) + { + outs() << " ** var: " << s.vcs[j++] << "\n"; + outs() << " ** coef: " << s.vcs[j++] << "\n"; + } + } + outs() << "\n"; + } + + void normalizePlus() + { + for (int i = 0; i < dstate.size(); i++) + { + LAterm& s = dstate[i]; + s.normalizePlus(); + } + } + + lincoms& getId() + { + if (id.size() == 0) + { + for (int i = 0; i < dstate.size(); i++) + { + id.push_back(dstate[i].vcs); + } + } + + return id; + } + + void clear() + { + arity = 0; + dstate.clear(); + id.clear(); + } + + }; + + inline void clone(LAterm& s, LAterm& t) + { + t.intconst = s.intconst; + t.arity = s.arity; + t.cmpop = s.cmpop; + for (int i = 0; i < s.vcs.size(); i++) + { + t.vcs.push_back(s.vcs[i]); + } + } + + inline void clone(LAdisj& s, LAdisj& t) + { + for (int i = 0; i < s.arity; i++) + { + t.addDisj(s.dstate[i]); + } + } + + inline void dropDisj(LAdisj& s, LAdisj& t, int ind) + { + assert (s.arity > 1); + for (int i = 0; i < s.arity; i++) + { + if (i != ind) t.addDisj(s.dstate[i]); + } + } + + inline int getVarIndex(int var, vector& vec) + { + int i = 0; + for (int e: vec) + { + if (var == e) return i; + i++; + } + return -1; + } + + class LAfactory + { + private: + + ExprFactory &m_efac; + ExprVector vars; + + vector varInds; + vector intCoefs; + vector intConsts; + + ExprVector intCoefsE; // symmetric vectors with Expressions + ExprVector intConstsE; + ExprVector cmpOps; + + Expr auxVar1; + Expr auxVar2; + + int indexGT; + int indexGE; + + int status; // internal flag + + public: + + // set of fields related to guessing: + + int prVarsDistrRange; + vector varDistrs; + density orAritiesDensity; + density plusAritiesDensity; + density intConstDensity; + density cmpOpDensity; + vector varDensity; + map coefDensity; + vector>> varCombinations; + vector samples; + vector learntLemmas; // indeces to samples + ExprSet learntExprs; // lemmas from learntLemmas + map> ineqPriors; + map> visited; + bool densecode; + bool aggressivepruning; + + LAfactory(ExprFactory &_efac, bool _densecode=true, bool _aggressivepruning=true) : + m_efac(_efac), densecode(_densecode), aggressivepruning(_aggressivepruning) + {}; + + // should be run first; + void addVar(Expr var) + { + vars.push_back(var); + status = 1; + } + + void addConst(int c) + { + intConsts.push_back(c); + status = 2; + } + + void initialize() + { + assert (status == 2); + // fixed set of integers to be coefficients (could be manually extended in principle) + intCoefs.push_back(-2); + intCoefs.push_back(-1); + intCoefs.push_back(1); + intCoefs.push_back(2); + prVarsDistrRange = 2 * intConsts.size(); + + // auxiliary variables for inequations: + auxVar1 = bind::intVar(mkTerm("aux_deephorn_1", m_efac)); + auxVar2 = bind::intVar(mkTerm("aux_deephorn_2", m_efac)); + + for (int i = 0; i < vars.size(); i++) varInds.push_back(i); + + // two comparison operators (> and >=), so indexGT < indexGE + cmpOps.push_back(mk (auxVar1, auxVar2)); + indexGT = cmpOps.size() - 1; + + cmpOps.push_back(mk (auxVar1, auxVar2)); + indexGE = cmpOps.size() - 1; + + // finally, map values to expressions + for (auto a : intCoefs) intCoefsE.push_back(mkTerm (mpz_class (a), m_efac)); // assemble expressions + for (auto a : intConsts) intConstsE.push_back(mkTerm (mpz_class (a), m_efac)); // + } + + ExprVector& getVars() + { + return vars; + } + + int getVar(int ind) + { + return varInds[ind]; + } + + Expr getVarE(int ind) + { + return vars[ind]; + } + + int getIndexGT() + { + return indexGT; + } + + int getIndexGE() + { + return indexGE; + } + + int switchCmpOp(int ind) + { + // recall that there are two ops: >=, > + assert (cmpOps.size() == 2); + + return (ind == 0) ? 1 : 0; + } + + int getIntCoef(int i) + { + return intCoefs[i]; + } + + int getIntCoefsSize() + { + return intCoefs.size(); + } + + int getCmpOpsSize() + { + return cmpOps.size(); + } + + Expr getAtom(Expr templ, Expr var1, Expr var2) + { + Expr res = templ; + res = replaceAll(res, auxVar1, var1); + res = replaceAll(res, auxVar2, var2); + return res; + } + + Expr assembleLinComb(LAterm& s) + { + ExprVector apps; + + for (int i = 0; i < s.vcs.size(); i = i + 2) + { + Expr var = vars [ s.vcs[i] ]; + Expr coef = intCoefsE [ s.vcs[i + 1] ]; + apps.push_back(mk(coef, var)); + } + + if (s.arity == 1) return apps[0]; + + return mknary (apps); + } + + Expr toExpr (LAterm& s) + { + Expr templ = cmpOps [ s.cmpop ]; + Expr ic = intConstsE [ s.intconst ]; + Expr lc = assembleLinComb(s); + return getAtom(templ, lc, ic); // compile all ingredients + } + + Expr toExpr (LAdisj& curCandCode) + { + int ar = curCandCode.arity; + + ExprSet dsj; + for (int i = 0; i < ar; i++) + { + dsj.insert(toExpr (curCandCode.dstate[i])); + } + return disjoin(dsj, m_efac); + } + + bool exprToLAdisj(Expr ex, LAdisj& sample) + { + if (isOpX(ex)) + { + bool res = true; + for (auto it = ex->args_begin (), end = ex->args_end (); it != end; ++it) + res &= exprToLAdisj(*it, sample); + + return res; + } + else if (isOp(ex)) + { + LAterm s; + Expr lhs = ex->left(); + ExprVector all; + if (isOpX(lhs)) + { + for (auto it = lhs->args_begin (), end = lhs->args_end (); it != end; ++it) + { + all.push_back(*it); + } + } + else + { + all.push_back(lhs); + } + + s.arity = all.size(); // GF: to check + + Expr aux = reBuildCmp(ex, auxVar1, auxVar2); + + s.cmpop = getVarIndex(aux, cmpOps); + + s.intconst = getVarIndex(lexical_cast(ex->right()), intConsts); + + for (auto &e : all) + { + if (isOpX(e)) + { + s.vcs.push_back(getVarIndex(e->right(), vars)); + s.vcs.push_back(getVarIndex(lexical_cast(e->left()), intCoefs)); + } + } + bool res = addDisjFilter(s, sample); + if (!res) return false; + + bool alpos = true; + for(int v : s.vcs) alpos &= (v >= 0); + + return (alpos && s.vcs.size() == 2*(s.arity)); + } + return false; + } + + int equalCoefs(LAterm& s) + { + int pat = intCoefs[ s.vcs[1] ]; + for (int j = 3; j < s.vcs.size(); j = j+2) + if (pat != intCoefs[ s.vcs[j] ]) + return 0; + + return pat; + } + + void invertTerm(LAterm& s, LAterm& t) + { + clone(s, t); + for (int i = 1; i < s.vcs.size(); i = i+2) + { + int coef = intCoefs[ s.vcs[i] ]; + int invcoef = getVarIndex(-coef, intCoefs); + assert(invcoef != -1); + + t.vcs[i] = invcoef; + } + + int iconst = intConsts[ s.intconst ]; + int invconst = getVarIndex(-iconst, intConsts); + assert(invconst != -1); + + t.intconst = invconst; + t.cmpop = switchCmpOp(s.cmpop); + } + + void invertDisj(LAdisj& s, LAdisj& t, int ind) + { + for (int i = 0; i < s.arity; i++) + { + if (i != ind) + { + t.addDisj(s.dstate[i]); + } + else + { + invertTerm(s.dstate[i], t.newDisj()); + } + } + } + + bool mergeDisj(LAdisj& s1, LAdisj& s2, LAdisj& t) + { + for (int i = 0; i < s1.arity; i++) + { + t.addDisj(s1.dstate[i]); + } + for (int i = 0; i < s2.arity; i++) + { + for (int j = 0; j < s1.arity; j++) + { + if (equivLinCom(s2.dstate[i], s1.dstate[j])) + return false; + } + t.addDisj(s2.dstate[i]); + } + return true; + } + + bool equivLinCom(LAterm& a, LAterm& b) + { + // decide equivalence gradually: + + if (a.arity != b.arity) return false; + + // check equivalence of vars + for (int i = 0; i < a.vcs.size(); i = i + 2) + { + if (a.vcs[i] != b.vcs[i]) return false; + } + + if (a.vcs.size() == 2) return (a.vcs[1] == b.vcs[1]); + + // finally, coefficients + float c1 = (float)intCoefs[a.vcs[1]] / (float)intCoefs[b.vcs[1]]; + + if (c1 < 0) return false; + + for (int i = 3; i < a.vcs.size(); i = i + 2) + { + float c2 = (float)intCoefs[a.vcs[i]] / (float)intCoefs[b.vcs[i]]; + if (c2 < 0) return false; + + if (fabs(c1 - c2) > 0.0001 ) return false; // hardcode here + } + + return true; + } + + // very approximate result as for equivLinCom (used in the aggressive mode) + bool approxRedund(LAterm& a, LAterm& b) + { + // decide equivalence gradually: + + if (a.arity != b.arity) return false; + + // check equivalence of vars + for (int i = 0; i < a.vcs.size(); i = i + 2) + { + if (a.vcs[i] != b.vcs[i]) return false; + } + + for (int i = 1; i < a.vcs.size(); i = i + 2) + { + if (intCoefs[a.vcs[i]] >= 0 != intCoefs[b.vcs[i]] >= 0) return false; + } + + return true; + } + + // identifies some logical implications, e.g., x + 2y > 0 is stronger than x + 2y >= 10 + // false means "we don't know" + bool stronger(LAterm& s, LAterm& t) + { + if (s.vcs.size() != t.vcs.size()) return false; + + for (int i = 0; i < s.vcs.size(); i++) + { + if (s.vcs[i] != t.vcs[i]) return false; + } + + // Ax > b stronger than Ax >= b + if (s.intconst == t.intconst) + return (s.cmpop <= t.cmpop); // the smaller index the stronger formula + + // Ax > / >= b stronger than Ax > / >= c iff b > c + return (s.intconst > t.intconst); + } + + // symmetric to stronger + bool weaker(LAterm& s, LAterm& t) + { + if (s.vcs.size() != t.vcs.size()) return false; + + for (int i = 0; i < s.vcs.size(); i++) + { + if (s.vcs[i] != t.vcs[i]) return false; + } + + if (s.intconst == t.intconst) + return (s.cmpop >= t.cmpop); + + return (s.intconst < t.intconst); + } + + void getEquivalentFormulas(LAdisj& sample, vector& equivs) + { + equivs.push_back(sample); + lincoms& id = sample.getId(); + + for (int i = 0; i < sample.arity; i++) + { + LAterm& s = sample.dstate[i]; + Expr cmpop = cmpOps[ s.cmpop ]; + int intconst = intConsts [ s.intconst ]; + + // get the formulas equivalent to this one, and run the same procedure for them: + + // if (ax + ax > a) then we can replace a by b, c,... of the same sign + + int coef = equalCoefs(s); + + if (coef != 0 && coef == intconst) + { + for (int j = 0; j < intCoefs.size(); j++) + { + int thisConst = intCoefs[j]; + if (thisConst == coef) continue; + if ((thisConst<0) != (coef<0)) continue; + + int indProg = getVarIndex(thisConst, intConsts); // GF? + if (indProg == -1) continue; + + + LAdisj c; + clone(sample, c); + c.dstate[i].intconst = indProg; + for (int k = 0; k < c.dstate[i].vcs.size(); k ++) + { + if (k % 2 == 1) c.dstate[i].vcs[k] = j; + } + equivs.push_back(c); + } + } + + // if (ax + ax > 0) then we can replace a by b,c,... of the same sign + + else if (coef != 0 && 0 == intconst) + { + + for (int j = 0; j < intCoefs.size(); j++) + { + int thisConst = intCoefs[j]; + if (thisConst == coef) continue; + if ((thisConst<0) != (coef<0)) continue; + + LAdisj c; + clone(sample, c); + for (int k = 0; k < c.dstate[i].vcs.size(); k ++) + { + if (k % 2 == 1) c.dstate[i].vcs[k] = j; + } + equivs.push_back(c); + } + } + } + } + + bool addDisjFilter(LAterm& s, LAdisj& d) + { + int skip = false; + for (int j = 0; j < d.arity; j++) + { + LAterm& t = d.dstate[j]; + if (stronger(s, t)) + { + // disjunction of s and t is equal t, so s can be ignored + skip = true; + break; + } + else if (weaker(s, t)) + { + // disjunction of s and t is equal s, so swap these two guys: + t.cmpop = s.cmpop; + t.intconst = s.intconst; + + skip = true; + break; + } + else + { + LAterm u; + invertTerm(t, u); + if (stronger(u, s)) + { + // disjunction of s and t is equal to true, to the entire LAdisj& d is a tautology + return false; + } + } + } + if (!skip) + { + d.addDisj(s); + } + return true; + } + + Expr getFreshCandidate() + { + samples.push_back(LAdisj()); + LAdisj& curTerm = samples.back(); + if (!guessTerm(curTerm)) return NULL; + + curTerm.normalizePlus(); + return toExpr(curTerm); + } + + bool guessTerm (LAdisj& curTerm) + { + curTerm.clear(); + int ar = chooseByWeight(orAritiesDensity); + + vector> varcombs; + vector terms; + + // first, guess var combinations: + + for (int i = 0; i < ar; i++) + { + terms.push_back(LAterm()); + LAterm& la = terms.back(); + la.arity = chooseByWeight(plusAritiesDensity); + + vector>& varCombination = varCombinations[la.arity]; + int comb = chooseByWeight(varDensity[la.arity]); + varcombs.push_back(varCombination[comb]); + } + + // then, guess coefficients to complete the lin. combination + + for (int i = 0; i < ar; i++) + { + LAterm& la = terms[i]; + for (int v : varcombs[i]) + { + la.vcs.push_back( v ); + int coef = chooseByWeight(coefDensity[v]); + la.vcs.push_back( coef ); + } + + if (i != 0) + { + for (int j = 0; j < i; j++) + { + + if (!aggressivepruning && equivLinCom(la, curTerm.dstate[j])) + { + return false; + } + else if (aggressivepruning && approxRedund(la, curTerm.dstate[j])) + { + return false; + } + } + } + curTerm.addDisj(la); + + } + + // finally, guess operator and constant based on the information we learned from the previous samples: + + // WARNING: if aggressivepruning, we may skip checking some candidates + if (aggressivepruning && isSampleVisitedWeak(curTerm)) return false; + + if (!aggressivepruning && isSampleVisitedStrong(curTerm)) return false; + + lincoms& id = curTerm.getId(); + + for (int i = 0; i < ar; i++) // finally, guess operator and constant + { + LAterm& la = curTerm.dstate[i]; + guessNewInequality(id, i, la); + } + return true; + } + + void guessNewInequality (lincoms& id, int disj, LAterm& curLAterm) + { + vector& distrs = ineqPriors[id]; + initDistrs(distrs, id.size(), prVarsDistrRange); + + if (!aggressivepruning) + { + // re-initialize distribution (if empty) + reInitialize(id, disj); + } + + // printDistr(distrs[disj], (string)(isDefault(distrs[disj]) ? " Guessing new" : " Updating") + + // " inequality for " + lexical_cast(*assembleLinComb(curLAterm))); + + if (densecode && isDefault(distrs[disj])) // if it's the first time we look at this lin.combination, + { // we might want to guess a candidate based on the code + curLAterm.intconst = chooseByWeight(intConstDensity); + curLAterm.cmpop = chooseByWeight(cmpOpDensity); + } + else // otherwise, some info about this lin.combination + { // is already kmown from the previous checks + int ch = chooseByWeight(distrs[disj]); + double chd = (double)ch / 2; + curLAterm.intconst = chd; + curLAterm.cmpop = (ch % 2 == 0) ? getIndexGE() : getIndexGT(); + } + } + + bool isSampleVisitedStrong(LAdisj& tmpl) + { + // we should exhaust the search space of all the disjuncts + // before abandon the entire disjunction + + // currently, works for disjunctions with one disjunct + // (for others, may keep throwing the same candidates again and again) + lincoms& id = tmpl.getId(); + + if (visited[id].size() == tmpl.arity) + { + return true; + } + return false; + } + + bool isSampleVisitedWeak(LAdisj& tmpl) + { + // once the search space for one of the disjuncts is exhauseted + // we abandoned the entire disjunction + lincoms& id = tmpl.getId(); + + if (visited[id].size() > 0) + { + return true; + } + return false; + } + + bool isVisited(lincoms& id, int disj) + { + set& s = visited[id]; + + if (std::find(std::begin(s), std::end(s), disj) != std::end(s)) + return true; + + weights& d = ineqPriors[id][disj]; + + if (ineqPriors[id].size() == 0) + { + outs() << "WARNING: Priorities are not set up here\n"; + return false; + } + + for (int i = 0; i < d.size(); i++) + { + if (d[i] != PRIORNOVISIT) return false; + } + s.insert(disj); + return true; + } + + void reInitialize(lincoms& id, int disj, int def = 1000) + { + set& s = visited[id]; + + if (std::find(std::begin(s), std::end(s), disj) == std::end(s)) return; + + weights& d = ineqPriors[id][disj]; + + for (int i = 0; i < d.size(); i++) d[i] = def; + } + + void prioritiesGarbage(LAdisj& failed) + { + lincoms& id = failed.getId(); + vector& distrs = ineqPriors[id]; + + initDistrs(distrs, failed.arity, prVarsDistrRange); + + for (int i = 0; i < failed.arity; i++) + { + for (int j = prVarsDistrRange - 1; j >= 0; j--) + { + distrs[i][j] = PRIORNOVISIT; + } + + // printDistr(distrs[i]); + isVisited(id, i); + } + } + + void prioritiesFailed(LAdisj& failed) + { + lincoms& id = failed.getId(); + vector& distrs = ineqPriors[id]; + + initDistrs(distrs, failed.arity, prVarsDistrRange); + + for (int i = 0; i < failed.arity; i++) + { + // preps: + LAterm& s = failed.dstate[i]; + + if (getIndexGT() == s.cmpop) + { + int lim = s.intconst * 2 + 1; + for (int j = prVarsDistrRange - 1; j >= 0; j--) + { + if (j >= lim) + { + distrs[i][j] = PRIORNOVISIT; + } + else + { + distrs[i][j] = min ( distrs[i][j], (lim - j) * PRIORSTEP); + } + } + } + else if (getIndexGE() == s.cmpop) + { + int lim = s.intconst * 2 ; + for (int j = prVarsDistrRange - 1; j >= 0; j--) + { + if (j >= lim) + { + distrs[i][j] = PRIORNOVISIT; + } + else + { + distrs[i][j] = min ( distrs[i][j], (lim - j) * PRIORSTEP); + } + } + } + + // printDistr(distrs[i], " Negative Priorities for " + lexical_cast(*toExpr(s))); + isVisited(id, i); + } + } + + void prioritiesLearnt(LAdisj& learnt) + { + lincoms& id = learnt.getId(); + vector& distrs = ineqPriors[id]; + + initDistrs(distrs, learnt.arity, prVarsDistrRange); + + for (int i = 0; i < learnt.arity; i++) + { + LAterm& s = learnt.dstate[i]; + + if (getIndexGT() == s.cmpop) // ax + by > c => ax + by > d, \forall d < c + { + // block all constants which are less or equal than intconst + + int lim = s.intconst * 2 + 1; + for (int j = 0; j < prVarsDistrRange ; j++) + { + if (j < lim) + { + distrs[i][j] = PRIORNOVISIT; + } + else + { + distrs[i][j] = min ( distrs[i][j], (j - lim) * PRIORSTEP); + } + } + } + else if (getIndexGE() == s.cmpop) // ax + by >= c => ax + by >= d, \forall d < c + { + int lim = s.intconst * 2; + for (int j = 0; j < prVarsDistrRange ; j++) + { + if (j < lim) + { + distrs[i][j] = PRIORNOVISIT; + } + else + { + distrs[i][j] = min ( distrs[i][j], (j - lim) * PRIORSTEP); + } + } + } + + // printDistr(distrs[i], "Positive Priorities for " + lexical_cast(*toExpr(s))); + + isVisited(id, i); + } + } + + void assignPrioritiesForLearnt(LAdisj& learnt) + { + vector eqs; + getEquivalentFormulas(learnt, eqs); + for (auto &a : eqs) prioritiesLearnt (a); + + if (learnt.arity == 1) + { + LAdisj t; + invertDisj (learnt, t, 0); // this is guaranteed to fail + assignPrioritiesForFailed(t); + } + else + { + vector invTerms; + for (int i = 0; i < learnt.arity; i++) + { + invTerms.push_back(LAterm()); + invertTerm(learnt.dstate[i], invTerms.back()); + } + + for (int i = 0; i < learnt.arity; i++) + { + bool canblock = true; + for (int j = 0; j < learnt.arity; j++) + { + if (i == j) continue; + // search for invTerms[j] among learnt lemmas + bool found = false; + for (int k = 0; k < learntLemmas.size(); k++) + { + LAdisj& lcs = samples[ learntLemmas [k] ]; + if (lcs.arity > 1) continue; + if (stronger(lcs.dstate[0], invTerms[j])) + { + // outs() << "stronger formula: " << + // *toExpr(lcs.dstate[0]) << " ===> " << + // *toExpr(invTerms[j]) << "\n"; + found = true; + break; + } + } + if (!found) + { + canblock = false; + break; + } + } + if (canblock) + { + LAdisj lcs; + lcs.addDisj(invTerms[i]); + assignPrioritiesForFailed(lcs); + } + } + } + } + + void assignPrioritiesForFailed(LAdisj& failed) + { + vector eqs; + getEquivalentFormulas(failed, eqs); + for (auto &a : eqs) prioritiesFailed (a); + } + + void assignPrioritiesForGarbage(LAdisj& failed) + { + vector eqs; + getEquivalentFormulas(failed, eqs); + for (auto &a : eqs) prioritiesGarbage (a); + } + + void initDensities() + { + for (int i = 1; i < MAXARITY+1; i++) + { + orAritiesDensity[i] = 1; + } + + for (int i = 1; i < vars.size() + 1; i++) + { + plusAritiesDensity[i] = 1; + + for (int j = 0; j < intCoefs.size(); j++) + { + coefDensity[i-1][j] = 1; + } + } + + for (int i = 0; i < intConsts.size(); i++) + { + intConstDensity[i] = 1; + } + + for (int i = 0; i < cmpOps.size(); i++) + { + cmpOpDensity[i] = 1; + } + + // preparing var densities; + varCombinations.push_back(vector>()); // empty ones; not used + varDensity.push_back(density()); // + + for (int i = 1; i <= vars.size(); i++) + { + varCombinations.push_back(vector>()); + varDensity.push_back(density()); + + getCombinations(varInds, 0, i, varCombinations.back()); + + for (int j = 0; j < varCombinations.back().size(); j++) + { + varDensity.back()[j] = 1; + } + } + } + + void printCodeStatistics() + { + outs() << "Int consts:\n"; + for (auto &form: intConsts) outs() << " " << form ; + outs() << "\n"; + + for (auto &a : orAritiesDensity) + { + outs() << " OR arity density: " << a.first << " <[-]> " << a.second << "\n"; + } + + for (auto &a : plusAritiesDensity) + { + outs() << " Plus arity density: " << a.first << " <[-]> " << a.second << "\n"; + } + + for (auto &a : intConstDensity) + { + outs() << " IntConst density: " << intConsts[ a.first ] << " <[-]> " << a.second << "\n"; + } + + for (int i = 0; i < varDensity.size(); i++) + { + for (auto &b : varDensity[i]) + { + + outs() << " Var Combination density: "; + + for ( int j : varCombinations[i][b.first]) + { + outs() << *vars[j] << ", "; + } + + outs() << " <[-]> " << b.second << "\n"; + } + } + + for (int i = 0; i < vars.size(); i++) + { + for (int j = 0; j < getIntCoefsSize(); j++) + { + outs() << " Var Coefficient density: [" << getIntCoef(j) << " * " + << *vars[i] << "] <[-]> " << coefDensity[i][j] << "\n"; + } + } + } + + static inline void getCombinations(vector& data, int start, int rem, vector< set >& res) + { + if (start >= data.size()) return; + if (rem > data.size() - start) return; + + if (rem == 1) + { + for (int i = start; i < data.size(); i++) + { + set res0; + res0.insert(data[i]); + res.push_back(res0); + } + } + else + { + // if include data[start] + vector< set> res1; + getCombinations(data, start + 1, rem - 1, res1); + + for (int i = 0; i < res1.size(); i++) + { + res1[i].insert(data[start]); + res.push_back(res1[i]); + } + + // if skip data[start] + vector< set> res2; + getCombinations(data, start + 1, rem, res2); + + for (int i = 0; i < res2.size(); i++) + { + res.push_back(res2[i]); + } + } + } + }; + +} + + +#endif \ No newline at end of file diff --git a/include/deep/RndLearner.hpp b/include/deep/RndLearner.hpp new file mode 100644 index 000000000..62a0d3a07 --- /dev/null +++ b/include/deep/RndLearner.hpp @@ -0,0 +1,417 @@ +#ifndef RNDLEARNER__HPP__ +#define RNDLEARNER__HPP__ + +#include "Horn.hpp" +#include "CodeSampler.hpp" +#include "Distribution.hpp" +#include "LinCom.hpp" +#include "ae/SMTUtils.hpp" + +using namespace std; +using namespace boost; +namespace ufo +{ + + class RndLearner + { + private: + + ExprFactory &m_efac; + EZ3 &m_z3; + SMTUtils u; + ufo::ZSolver m_smt_solver; + ufo::ZSolver m_smt_safety_solver; + + CHCs& ruleManager; + vector decls; + vector lfs; + vector curCandidates; + map incomNum; + int invNumber; + int all; + + bool densecode; // catch various statistics about the code (mostly, frequences) and setup the prob.distribution based on them + bool shrink; // consider only a small subset of int constants and samples from the code + bool aggressivepruning; // aggressive pruning of the search space based on SAT/UNSAT (WARNING: may miss some invariants) + + public: + + RndLearner (ExprFactory &efac, EZ3 &z3, CHCs& r, bool b1, bool b2, bool b3) : + m_efac(efac), m_z3(z3), ruleManager(r), m_smt_solver (z3), m_smt_safety_solver(z3), u(efac), + invNumber(0), all(0), + densecode(b1), shrink(b2), aggressivepruning(b3) {} + + bool isTautology (Expr a) // adjusted for big disjunctions + { + if (isOpX(a)) return true; + + ExprSet disjs; + getDisj(a, disjs); + if (disjs.size() == 1) return false; + + map varComb; + for (auto &a : disjs) + { + ExprSet avars; + expr::filter (a, bind::IsConst(), std::inserter (avars, avars.begin ())); + varComb[avars].insert(mkNeg(a)); + } + + m_smt_solver.reset(); + + bool res = false; + for (auto &v : varComb ) + { + m_smt_solver.assertExpr(conjoin(v.second, m_efac)); + if (!m_smt_solver.solve ()) + { + res = true; break; + } + } + return res; + } + + bool checkCandidates() + { + map localNum = incomNum; // for local status + + for (auto &hr: ruleManager.chcs) + { + if (hr.isQuery) continue; + + m_smt_solver.reset(); + + // pushing body + m_smt_solver.assertExpr (hr.body); + + Expr cand1; + Expr cand2; + Expr invApp1; + Expr invApp2; + Expr lmApp; + + // pushing src relation + if (!isOpX(hr.srcRelation)) + { + int ind1 = getVarIndex(hr.srcRelation, decls); + LAfactory& lf1 = lfs[ind1]; + + if (localNum[ind1] > 0) + { + cand1 = curCandidates[ind1]; + invApp1 = cand1; + for (int i = 0; i < hr.srcVars.size(); i++) + { + invApp1 = replaceAll(invApp1, lf1.getVarE(i), hr.srcVars[i]); + } + m_smt_solver.assertExpr(invApp1); + } + + lmApp = conjoin(lf1.learntExprs, m_efac); + for (int i = 0; i < hr.srcVars.size(); i++) + { + lmApp = replaceAll(lmApp, lf1.getVarE(i), hr.srcVars[i]); + } + m_smt_solver.assertExpr(lmApp); + } + + // pushing dst relation + int ind2 = getVarIndex(hr.dstRelation, decls); + cand2 = curCandidates[ind2]; + invApp2 = cand2; + LAfactory& lf2 = lfs[ind2]; + + for (int i = 0; i < hr.dstVars.size(); i++) + { + invApp2 = replaceAll(invApp2, lf2.getVarE(i), hr.dstVars[i]); + } + + m_smt_solver.assertExpr(mk(invApp2)); + + all++; + boost::tribool res = m_smt_solver.solve (); + if (res) // SAT == candidate failed + { + outs () << " => bad candidate for " << *hr.dstRelation << "\n"; + lf2.assignPrioritiesForFailed(lf2.samples.back()); + return false; + } + else // UNSAT == candadate is OK for now; keep checking + { + localNum[ind2]--; + if (!res && localNum[ind2] == 0) // something inductive found + { + outs () << " => learnt lemma for " << *hr.dstRelation << "\n"; + lf2.assignPrioritiesForLearnt(lf2.samples.back()); + lf2.learntExprs.insert(curCandidates[ind2]); + lf2.learntLemmas.push_back(lf2.samples.size() - 1); + } + } + } + return true; + } + + bool checkSafety() + { + for (auto &hr: ruleManager.chcs) + { + if (!hr.isQuery) continue; + + int ind = getVarIndex(hr.srcRelation, decls); + Expr invApp = curCandidates[ind]; + LAfactory& lf = lfs[ind]; + + for (int i = 0; i < hr.srcVars.size(); i++) + { + invApp = replaceAll(invApp, lf.getVarE(i), hr.srcVars[i]); + } + + m_smt_safety_solver.assertExpr(invApp); + + all++; + boost::tribool res = m_smt_safety_solver.solve (); + if (!res) return true; + } + return false; + } + + void setupSafetySolver() + { + // setup the safety solver + for (auto &hr: ruleManager.chcs) + { + if (hr.isQuery) + { + m_smt_safety_solver.assertExpr (hr.body); + break; + } + } + } + + void initializeDecl(Expr invDecl) + { + assert (invDecl->arity() > 2); + assert(decls.size() == invNumber); + assert(lfs.size() == invNumber); + assert(curCandidates.size() == invNumber); + + decls.push_back(invDecl->arg(0)); + lfs.push_back(LAfactory(m_efac, densecode, aggressivepruning)); // indeces at decls, lfs, and curCandidates should be the same + curCandidates.push_back(NULL); + + LAfactory& lf = lfs.back(); + + // collect how many rules has invDecl on the right side + for (auto &hr : ruleManager.chcs) + { + if (hr.dstRelation == decls.back()) + incomNum[invNumber]++; + } + + invNumber++; + + for (int i = 1; i < invDecl->arity()-1; i++) + { + Expr new_name = mkTerm ("__v__" + to_string(i - 1), m_efac); + Expr var = bind::mkConst(new_name, invDecl->arg(i)); + lf.addVar(var); + } + + set progConsts; + + // analize each rule separately: + vector css; + + for (auto &hr : ruleManager.chcs) + { + if (hr.dstRelation != decls.back() && hr.srcRelation != decls.back()) continue; + + css.push_back(CodeSampler(hr, invDecl, lf.getVars())); + css.back().analyzeCode(densecode, shrink); + + // convert cs.intConsts to progConsts and add additive inverses (if applicable): + for (auto &a : css.back().intConsts) + { + progConsts.insert( a); + progConsts.insert(-a); + } + } + + // sort progConsts and push to vector: + while (progConsts.size() > 0) + { + int min = INT_MAX; + Expr eMin; + for (auto c : progConsts) + { + if (c < min) + { + min = c; + } + } + progConsts.erase(min); + lf.addConst(min); + } + + lf.initialize(); + lf.initDensities(); + + // normalize samples from rules and calculate various statistics + // (there could be repetitions, but it's fine) + + for (auto &cs : css) + { + int multip = PRIORSTEP; // will add +PRIORSTEP to every occurrence + + // or, alternatively multip can depend on the type of CHC: + // if (cs.hr.isFact) multip = 1; + // else if (cs.hr.isQuery) multip = 2 * PRIORSTEP; + // else multip = PRIORSTEP; + + for (auto &cand : cs.candidates) + { + LAdisj lcs; + if (lf.exprToLAdisj(cand, lcs)) + { + lcs.normalizePlus(); + + if (densecode) + { + // specify weights for OR arity + lf.orAritiesDensity[lcs.arity] += multip; + + for (int i = 0; i < lcs.arity; i++) + { + LAterm& lc = lcs.dstate[i]; + + // specify weights for PLUS arity + lf.plusAritiesDensity[lc.arity] += multip; + + // specify weights for const + lf.intConstDensity[lc.intconst] += multip; + + // specify weights for comparison operation + lf.cmpOpDensity[lc.cmpop] += multip; + + // specify weights for var combinations + set vars; + int vars_id = -1; + for (int j = 0; j < lc.vcs.size(); j = j+2) vars.insert(lc.vcs[j]); + for (int j = 0; j < lf.varCombinations[lc.arity].size(); j++) + { + if (lf.varCombinations[lc.arity][j] == vars) + { + vars_id = j; + break; + } + } + assert(vars_id >= 0); + lf.varDensity[lc.arity][vars_id] += multip; + + for (int j = 1; j < lc.vcs.size(); j = j+2) + { + lf.coefDensity[ lc.vcs [j-1] ] [lc.vcs [j] ] += multip; + } + } + } + } + else + { + // outs () << "rule out: " << *cand << "\n"; + // assert(u.isEquiv(cand, mk(m_efac))); + } + } + } + if (densecode) + { + outs() << "Statistics for " << *decls.back() << "\n"; + lf.printCodeStatistics(); + } + } + + void synthesize(int maxAttempts) + { + bool success = false; + int iter = 1; + + std::srand(std::time(0)); + + for (int i = 0; i < maxAttempts; i++) + { + // first, guess candidates for each inv.declaration + + bool skip = false; + for (int j = 0; j < invNumber; j++) + { + if (curCandidates[j] != NULL) continue; // if the current candidate is good enough + LAfactory& lf = lfs[j]; + Expr cand = lf.getFreshCandidate(); + if (cand == NULL) + { + skip = true; + break; + } + + if (isTautology(cand) || !u.isSat(cand)) // keep searching + { + lf.assignPrioritiesForGarbage(lf.samples.back()); + skip = true; + break; + } + curCandidates[j] = cand; + } + + if (skip) continue; + + outs() << "\n ---- new iteration " << iter++ << " ----\n"; + for (int j = 0; j < invNumber; j++) outs () << "candidate for " << *decls[j] << ": " << *curCandidates[j] << "\n"; + + // check all the candidates at once for all CHCs : + + if (checkCandidates()) + { + if (checkSafety()) // query is checked here + { + success = true; + break; + } + } + + for (int j = 0; j < invNumber; j++) curCandidates[j] = NULL; // preparing for the next iteration + } + + if (success) outs () << "\n -----> Success after " << --iter << " iterations\n"; + else outs () << "\nNo success after " << maxAttempts << " iterations\n"; + + outs () << " total number of SMT checks: " << all << "\n"; + } + }; + + + inline void learnInvariants(string smt, int maxAttempts, bool b1=true, bool b2=true, bool b3=true) + { + ExprFactory m_efac; + EZ3 z3(m_efac); + + CHCs ruleManager(m_efac, z3); + ruleManager.parse(smt); + RndLearner ds(m_efac, z3, ruleManager, b1, b2, b3); + + ds.setupSafetySolver(); + + if (ruleManager.decls.size() > 1) + { + outs() << "WARNING: learning multiple invariants is currently unstable\n" + << " it is suggested to disable \'aggressivepruning\'\n"; + } + + for (auto& dcl: ruleManager.decls) + { + ds.initializeDecl(dcl); + } + + ds.synthesize(maxAttempts); + }; +} + +#endif diff --git a/include/ufo/Expr.hpp b/include/ufo/Expr.hpp index 9e25c2f9a..8a6e13458 100644 --- a/include/ufo/Expr.hpp +++ b/include/ufo/Expr.hpp @@ -2828,6 +2828,24 @@ namespace expr return VisitAction::doKids (); } }; + + template + struct ContainsOp : public std::unary_function + { + bool found; + + ContainsOp () : found(false) {} + + VisitAction operator() (Expr exp) + { + if (found || isOpX(exp)) + { + found = true; + return VisitAction::skipKids (); + } + return VisitAction::doKids (); + } + }; struct SIZE : public std::unary_function { @@ -2985,6 +3003,13 @@ namespace expr return cv.found; } + /** Returns true if e1 contains applications of T */ + template inline bool containsOp (Expr e1) + { + ContainsOp co; + dagVisit (co, e1); + return co.found; + } namespace op { diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index 8c170a888..09bd27989 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -1 +1,3 @@ add_subdirectory(aeval) + +add_subdirectory(deep) diff --git a/tools/deep/CMakeLists.txt b/tools/deep/CMakeLists.txt new file mode 100644 index 000000000..e07d13eda --- /dev/null +++ b/tools/deep/CMakeLists.txt @@ -0,0 +1,4 @@ +add_executable (deephorn DeepHorn.cpp) +target_link_libraries (deephorn ${Z3_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${GMPXX_LIB} ${GMP_LIB}) +llvm_config (deephorn bitwriter) +install(TARGETS deephorn RUNTIME DESTINATION bin) diff --git a/tools/deep/DeepHorn.cpp b/tools/deep/DeepHorn.cpp new file mode 100644 index 000000000..ec99135d0 --- /dev/null +++ b/tools/deep/DeepHorn.cpp @@ -0,0 +1,28 @@ +#include "deep/RndLearner.hpp" + +using namespace ufo; +using namespace std; + +int main (int argc, char ** argv) +{ + if (argc == 1){ + outs() << "At least an input file should be given\n"; + return 0; + } + + int maxAttempts = 2000000; //default + if (argc > 2) maxAttempts = atoi(argv[1]); + + bool densecode = true; //default + if (argc > 3) densecode = atoi(argv[2]); + + bool shrink = true; //default + if (argc > 4) shrink = atoi(argv[3]); + + bool aggressivepruning = true; //default + if (argc > 5) aggressivepruning = atoi(argv[4]); + + learnInvariants(string(argv[argc-1]), maxAttempts, densecode, shrink, aggressivepruning); + + return 0; +} From e0c883d16f299b59e0431561e78990f20f1af98b Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Sat, 15 Apr 2017 17:32:42 -0700 Subject: [PATCH 002/236] accurate processing of the coefficients and constants --- bench_horn/samples_search_09.smt2 | 31 ++++++++ bench_horn/samples_search_10.smt2 | 31 ++++++++ include/ae/ExprSimpl.hpp | 43 ++++++++++++ include/deep/LinCom.hpp | 29 ++++---- include/deep/RndLearner.hpp | 113 ++++++++++++++++-------------- 5 files changed, 180 insertions(+), 67 deletions(-) create mode 100644 bench_horn/samples_search_09.smt2 create mode 100644 bench_horn/samples_search_10.smt2 diff --git a/bench_horn/samples_search_09.smt2 b/bench_horn/samples_search_09.smt2 new file mode 100644 index 000000000..cd4798196 --- /dev/null +++ b/bench_horn/samples_search_09.smt2 @@ -0,0 +1,31 @@ +(declare-rel inv (Int Int )) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-rel fail ()) + +(rule (=> (= x1 1) (inv x1 x3))) + +(rule (=> + (and + (inv x1 x3) + (= x2 (+ x1 x1)) + (= x4 x1) + ) + (inv x2 x4) + ) +) + + +(rule (=> (and (inv x1 x3) + (not + (or + (= x1 (- (* 3 x3) x3)) + (= x1 1) + ) + )) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/samples_search_10.smt2 b/bench_horn/samples_search_10.smt2 new file mode 100644 index 000000000..a018f8cd9 --- /dev/null +++ b/bench_horn/samples_search_10.smt2 @@ -0,0 +1,31 @@ +(declare-rel inv (Int Int )) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) + +(declare-rel fail ()) + +(rule (=> (and (= (+ x1 878) (- x3 602))) + (inv x1 x3))) + +(rule (=> + (and + (inv x1 x3) + (< x3 x1) + (> x4 x2) + ) + (inv x2 x4) + ) +) + + +(rule (=> (and (inv x1 x3) + (not (or + (< x1 0) + (> x3 0) + ))) fail)) + + +(query fail :print-certificate true) + diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index 0a92b26a2..3e4afc023 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -1357,6 +1357,49 @@ namespace ufo } return disjoin(newDisjs, exp->getFactory()); } + + inline static void getLinCombCoefs(Expr ex, set& intCoefs) + { + if (isOpX(ex)) + { + for (auto it = ex->args_begin (), end = ex->args_end (); it != end; ++it) + getLinCombCoefs(*it, intCoefs); + } + else if (isOp(ex)) // assuming the lin.combination is on the left side + { + Expr lhs = ex->left(); + if (isOpX(lhs)) + { + for (auto it = lhs->args_begin (), end = lhs->args_end (); it != end; ++it) + { + if (isOpX(*it)) // else, it is 1, and we will add it anyway; + { + intCoefs.insert(lexical_cast ((*it)->left())); + } + } + } + else + { + if (isOpX(lhs)) + { + intCoefs.insert(lexical_cast (lhs->left())); + } + } + } + } + + inline static void getLinCombConsts(Expr ex, set& intConsts) + { + if (isOpX(ex)) + { + for (auto it = ex->args_begin (), end = ex->args_end (); it != end; ++it) + getLinCombConsts(*it, intConsts); + } + else if (isOp(ex)) // assuming the lin.combination is on the left side + { + intConsts.insert(lexical_cast (ex->right())); + } + } } #endif diff --git a/include/deep/LinCom.hpp b/include/deep/LinCom.hpp index 2a7caa892..4bf550055 100644 --- a/include/deep/LinCom.hpp +++ b/include/deep/LinCom.hpp @@ -204,8 +204,6 @@ namespace ufo int indexGT; int indexGE; - int status; // internal flag - public: // set of fields related to guessing: @@ -231,27 +229,27 @@ namespace ufo m_efac(_efac), densecode(_densecode), aggressivepruning(_aggressivepruning) {}; - // should be run first; void addVar(Expr var) { vars.push_back(var); - status = 1; } void addConst(int c) { intConsts.push_back(c); - status = 2; } - void initialize() + void addIntCoef(int coef) + { + intCoefs.push_back(coef); + } + + void initialize() // should be called after addVar, addConst, and addIntCoef { - assert (status == 2); - // fixed set of integers to be coefficients (could be manually extended in principle) - intCoefs.push_back(-2); - intCoefs.push_back(-1); - intCoefs.push_back(1); - intCoefs.push_back(2); + assert (intCoefs.size() > 0); + assert (intConsts.size() > 0); + assert (vars.size() > 0); + prVarsDistrRange = 2 * intConsts.size(); // auxiliary variables for inequations: @@ -267,11 +265,16 @@ namespace ufo cmpOps.push_back(mk (auxVar1, auxVar2)); indexGE = cmpOps.size() - 1; - // finally, map values to expressions +// // finally, map values to expressions for (auto a : intCoefs) intCoefsE.push_back(mkTerm (mpz_class (a), m_efac)); // assemble expressions for (auto a : intConsts) intConstsE.push_back(mkTerm (mpz_class (a), m_efac)); // } + vector& getConsts() + { + return intConsts; + } + ExprVector& getVars() { return vars; diff --git a/include/deep/RndLearner.hpp b/include/deep/RndLearner.hpp index 62a0d3a07..40f6eacb5 100644 --- a/include/deep/RndLearner.hpp +++ b/include/deep/RndLearner.hpp @@ -218,10 +218,10 @@ namespace ufo } set progConsts; - - // analize each rule separately: + set intCoefs; vector css; + // analize each rule separately: for (auto &hr : ruleManager.chcs) { if (hr.dstRelation != decls.back() && hr.srcRelation != decls.back()) continue; @@ -229,6 +229,12 @@ namespace ufo css.push_back(CodeSampler(hr, invDecl, lf.getVars())); css.back().analyzeCode(densecode, shrink); + for (auto &cand : css.back().candidates) + { + getLinCombCoefs(cand, intCoefs); + getLinCombConsts(cand, css.back().intConsts); + } + // convert cs.intConsts to progConsts and add additive inverses (if applicable): for (auto &a : css.back().intConsts) { @@ -241,7 +247,6 @@ namespace ufo while (progConsts.size() > 0) { int min = INT_MAX; - Expr eMin; for (auto c : progConsts) { if (c < min) @@ -252,14 +257,31 @@ namespace ufo progConsts.erase(min); lf.addConst(min); } + + intCoefs.insert(1); // add 1 + for (auto &a : lf.getConsts()) if (a != 0) intCoefs.insert(a); + for (auto &a : intCoefs) intCoefs.insert(-a); // add the inverse + for (auto &a : intCoefs) lf.addIntCoef(a); lf.initialize(); lf.initDensities(); - // normalize samples from rules and calculate various statistics - // (there could be repetitions, but it's fine) - + // normalize samples obtained from CHCs and calculate various statistics: + vector lcss; for (auto &cs : css) + { + for (auto &cand : cs.candidates) + { + lcss.push_back(LAdisj()); + LAdisj& lcs = lcss.back(); + if (lf.exprToLAdisj(cand, lcs)) + { + lcs.normalizePlus(); + } + } + } + + if (densecode) { int multip = PRIORSTEP; // will add +PRIORSTEP to every occurrence @@ -267,63 +289,46 @@ namespace ufo // if (cs.hr.isFact) multip = 1; // else if (cs.hr.isQuery) multip = 2 * PRIORSTEP; // else multip = PRIORSTEP; - - for (auto &cand : cs.candidates) + for (auto &lcs : lcss) { - LAdisj lcs; - if (lf.exprToLAdisj(cand, lcs)) + // specify weights for OR arity + lf.orAritiesDensity[lcs.arity] += multip; + + for (int i = 0; i < lcs.arity; i++) { - lcs.normalizePlus(); + LAterm& lc = lcs.dstate[i]; + + // specify weights for PLUS arity + lf.plusAritiesDensity[lc.arity] += multip; + + // specify weights for const + lf.intConstDensity[lc.intconst] += multip; + + // specify weights for comparison operation + lf.cmpOpDensity[lc.cmpop] += multip; - if (densecode) + // specify weights for var combinations + set vars; + int vars_id = -1; + for (int j = 0; j < lc.vcs.size(); j = j+2) vars.insert(lc.vcs[j]); + for (int j = 0; j < lf.varCombinations[lc.arity].size(); j++) { - // specify weights for OR arity - lf.orAritiesDensity[lcs.arity] += multip; - - for (int i = 0; i < lcs.arity; i++) + if (lf.varCombinations[lc.arity][j] == vars) { - LAterm& lc = lcs.dstate[i]; - - // specify weights for PLUS arity - lf.plusAritiesDensity[lc.arity] += multip; - - // specify weights for const - lf.intConstDensity[lc.intconst] += multip; - - // specify weights for comparison operation - lf.cmpOpDensity[lc.cmpop] += multip; - - // specify weights for var combinations - set vars; - int vars_id = -1; - for (int j = 0; j < lc.vcs.size(); j = j+2) vars.insert(lc.vcs[j]); - for (int j = 0; j < lf.varCombinations[lc.arity].size(); j++) - { - if (lf.varCombinations[lc.arity][j] == vars) - { - vars_id = j; - break; - } - } - assert(vars_id >= 0); - lf.varDensity[lc.arity][vars_id] += multip; - - for (int j = 1; j < lc.vcs.size(); j = j+2) - { - lf.coefDensity[ lc.vcs [j-1] ] [lc.vcs [j] ] += multip; - } + vars_id = j; + break; } } - } - else - { - // outs () << "rule out: " << *cand << "\n"; - // assert(u.isEquiv(cand, mk(m_efac))); + assert(vars_id >= 0); + lf.varDensity[lc.arity][vars_id] += multip; + + for (int j = 1; j < lc.vcs.size(); j = j+2) + { + lf.coefDensity[ lc.vcs [j-1] ] [lc.vcs [j] ] += multip; + } } } - } - if (densecode) - { + outs() << "Statistics for " << *decls.back() << "\n"; lf.printCodeStatistics(); } From d008e9466cc433de91f4b85979190fdad8ed8da0 Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Sun, 16 Apr 2017 19:24:10 -0700 Subject: [PATCH 003/236] benchmarks (mostly adapted from ICE) --- bench_horn/cegar1.smt2 | 28 +++++++++++++++ bench_horn/cegar2.smt2 | 32 +++++++++++++++++ bench_horn/cggmp_iter_1.smt2 | 27 +++++++++++++++ bench_horn/cggmp_iter_2.smt2 | 27 +++++++++++++++ bench_horn/cggmp_iter_3.smt2 | 27 +++++++++++++++ bench_horn/countud.smt2 | 33 ++++++++++++++++++ bench_horn/dillig01.smt2 | 30 ++++++++++++++++ bench_horn/dillig03.smt2 | 30 ++++++++++++++++ bench_horn/dillig05.smt2 | 38 ++++++++++++++++++++ bench_horn/dillig07.smt2 | 34 ++++++++++++++++++ bench_horn/formula22.smt2 | 35 +++++++++++++++++++ bench_horn/formula25.smt2 | 37 ++++++++++++++++++++ bench_horn/formula27.smt2 | 40 ++++++++++++++++++++++ bench_horn/samples_search_11.smt2 | 37 ++++++++++++++++++++ bench_horn/samples_search_disj_ite_05.smt2 | 31 +++++++++++++++++ bench_horn/samples_search_disj_ite_06.smt2 | 31 +++++++++++++++++ 16 files changed, 517 insertions(+) create mode 100644 bench_horn/cegar1.smt2 create mode 100644 bench_horn/cegar2.smt2 create mode 100644 bench_horn/cggmp_iter_1.smt2 create mode 100644 bench_horn/cggmp_iter_2.smt2 create mode 100644 bench_horn/cggmp_iter_3.smt2 create mode 100644 bench_horn/countud.smt2 create mode 100644 bench_horn/dillig01.smt2 create mode 100644 bench_horn/dillig03.smt2 create mode 100644 bench_horn/dillig05.smt2 create mode 100644 bench_horn/dillig07.smt2 create mode 100644 bench_horn/formula22.smt2 create mode 100644 bench_horn/formula25.smt2 create mode 100644 bench_horn/formula27.smt2 create mode 100644 bench_horn/samples_search_11.smt2 create mode 100644 bench_horn/samples_search_disj_ite_05.smt2 create mode 100644 bench_horn/samples_search_disj_ite_06.smt2 diff --git a/bench_horn/cegar1.smt2 b/bench_horn/cegar1.smt2 new file mode 100644 index 000000000..c80dee7ca --- /dev/null +++ b/bench_horn/cegar1.smt2 @@ -0,0 +1,28 @@ +(declare-rel inv (Int Int)) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) + +(declare-rel fail ()) + +(rule (=> (and (>= x1 0) (<= x1 2) (>= x3 0) (<= x3 2)) (inv x1 x3))) + +(rule (=> + (and + (inv x1 x3) + (= x2 (+ x1 2)) + (= x4 (+ x3 2)) + ) + (inv x2 x4) + ) +) + + +(rule (=> (and (inv x1 x3) (= x1 4) (= x3 0)) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/cegar2.smt2 b/bench_horn/cegar2.smt2 new file mode 100644 index 000000000..79cefdb4f --- /dev/null +++ b/bench_horn/cegar2.smt2 @@ -0,0 +1,32 @@ +(declare-rel inv (Int Int)) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= x3 0)) (inv x1 x3))) + +(rule (=> + (and + (inv x1 x3) + (= x2 (+ x1 1)) + (or (= x4 x3) (= x4 x2)) + ) + (inv x2 x4) + ) +) + + +(rule (=> (and (inv x1 x3) + (not + (or (<= x1 0) + (and (<= 0 x3) (<= x3 x1))))) + fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/cggmp_iter_1.smt2 b/bench_horn/cggmp_iter_1.smt2 new file mode 100644 index 000000000..5698067e6 --- /dev/null +++ b/bench_horn/cggmp_iter_1.smt2 @@ -0,0 +1,27 @@ +(declare-rel inv (Int Int)) +(declare-var i1 Int) +(declare-var i2 Int) +(declare-var j1 Int) +(declare-var j2 Int) + +(declare-rel fail ()) + +(rule (=> (and (= i1 1) (= j1 2)) (inv i1 j1))) + +(rule (=> + (and + (inv i1 j1) + (>= j1 i1) + (= i2 (+ i1 2)) + (= j2 (- j1 1)) + ) + (inv i2 j2) + ) +) + + +(rule (=> (and (inv i1 j1) (< j1 i1) (not (= j1 1)) ) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/cggmp_iter_2.smt2 b/bench_horn/cggmp_iter_2.smt2 new file mode 100644 index 000000000..c140fa029 --- /dev/null +++ b/bench_horn/cggmp_iter_2.smt2 @@ -0,0 +1,27 @@ +(declare-rel inv (Int Int)) +(declare-var i1 Int) +(declare-var i2 Int) +(declare-var j1 Int) +(declare-var j2 Int) + +(declare-rel fail ()) + +(rule (=> (and (= i1 1) (= j1 4)) (inv i1 j1))) + +(rule (=> + (and + (inv i1 j1) + (>= j1 i1) + (= i2 (+ i1 2)) + (= j2 (- j1 1)) + ) + (inv i2 j2) + ) +) + + +(rule (=> (and (inv i1 j1) (< j1 i1) (not (= j1 2)) ) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/cggmp_iter_3.smt2 b/bench_horn/cggmp_iter_3.smt2 new file mode 100644 index 000000000..21f0a3708 --- /dev/null +++ b/bench_horn/cggmp_iter_3.smt2 @@ -0,0 +1,27 @@ +(declare-rel inv (Int Int)) +(declare-var i1 Int) +(declare-var i2 Int) +(declare-var j1 Int) +(declare-var j2 Int) + +(declare-rel fail ()) + +(rule (=> (and (= i1 1) (= j1 6)) (inv i1 j1))) + +(rule (=> + (and + (inv i1 j1) + (>= j1 i1) + (= i2 (+ i1 2)) + (= j2 (- j1 1)) + ) + (inv i2 j2) + ) +) + + +(rule (=> (and (inv i1 j1) (< j1 i1) (not (= j1 4)) ) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/countud.smt2 b/bench_horn/countud.smt2 new file mode 100644 index 000000000..e450330be --- /dev/null +++ b/bench_horn/countud.smt2 @@ -0,0 +1,33 @@ +(declare-rel itp (Int Int Int)) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) + +(declare-rel fail ()) + +(rule (=> (and (> x1 0) (= x1 x5) (= x3 0)) (itp x1 x3 x5) + ) +) + +(rule (=> + (and + (itp x1 x3 x5) + (= x2 (- x1 1)) + (= x4 (+ x3 1)) + (= x6 x5) + ) + (itp x2 x4 x6) + ) +) + + +(rule (=> (and (itp x1 x3 x5) (= x1 0) + (not (= x3 x5) + )) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/dillig01.smt2 b/bench_horn/dillig01.smt2 new file mode 100644 index 000000000..4281fa8a1 --- /dev/null +++ b/bench_horn/dillig01.smt2 @@ -0,0 +1,30 @@ +(declare-rel itp (Int Int)) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 1) (= x3 1)) (itp x1 x3) + ) +) + +(rule (=> + (and + (itp x1 x3) + (= x2 (+ x1 x3)) + (= x4 (+ x1 x3)) + ) + (itp x2 x4) + ) +) + + +(rule (=> (and (itp x1 x3) + (not (>= x3 1) + )) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/dillig03.smt2 b/bench_horn/dillig03.smt2 new file mode 100644 index 000000000..b1a712d4e --- /dev/null +++ b/bench_horn/dillig03.smt2 @@ -0,0 +1,30 @@ +(declare-rel itp (Int Int)) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 1) (= x3 1)) (itp x1 x3) + ) +) + +(rule (=> + (and + (itp x1 x3) + (or (= x2 x1) (= x2 (+ x1 1))) + (= x4 (+ x3 x2)) + ) + (itp x2 x4) + ) +) + + +(rule (=> (and (itp x1 x3) + (not (>= x3 1) + )) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/dillig05.smt2 b/bench_horn/dillig05.smt2 new file mode 100644 index 000000000..30fcd2a07 --- /dev/null +++ b/bench_horn/dillig05.smt2 @@ -0,0 +1,38 @@ +(declare-rel itp (Int Int Int Int)) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) +(declare-var x7 Int) +(declare-var x8 Int) +(declare-var tmp Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= x3 0) (= x5 0) (= x7 0)) (itp x1 x3 x5 x7) + ) +) + +(rule (=> + (and + (itp x1 x3 x5 x7) + (= x2 (+ x1 1)) + (= x4 (+ x3 1)) + (= x6 (+ x5 x2)) + (= tmp (+ x7 x4)) + (or (= x8 tmp) (= x8 (+ tmp 1))) + ) + (itp x2 x4 x6 x8) + ) +) + + +(rule (=> (and (itp x1 x3 x5 x7) + (not (> x7 (- x5 1)) + )) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/dillig07.smt2 b/bench_horn/dillig07.smt2 new file mode 100644 index 000000000..ab466b19e --- /dev/null +++ b/bench_horn/dillig07.smt2 @@ -0,0 +1,34 @@ +(declare-rel itp (Int Int Int)) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= x3 0) (>= x5 0)) (itp x1 x3 x5) + ) +) + +(rule (=> + (and + (itp x1 x3 x5) + (< x1 x5) + (= x2 (+ x1 1)) + (= x4 (+ x3 1)) + (= x6 x5) + ) + (itp x2 x4 x6) + ) +) + + +(rule (=> (and (itp x1 x3 x5) (= x1 x5) + (not (<= x3 x5) + )) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/formula22.smt2 b/bench_horn/formula22.smt2 new file mode 100644 index 000000000..057f74236 --- /dev/null +++ b/bench_horn/formula22.smt2 @@ -0,0 +1,35 @@ +(declare-rel itp (Int Int Int)) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) +(declare-var y1 Int) +(declare-var y3 Int) +(declare-var y5 Int) + +(declare-rel fail ()) + +(define-fun tmp ((x1 Int) (x2 Int) (x3 Int)) Bool + (and (<= x1 x2) (or (>= x2 0) (<= (- x2 x3) 2)))) + +(rule (=> (and (= x1 0) (= x3 0) (= x5 0)) (itp x1 x3 x5))) + +(rule (=> + (and + (itp x1 x3 x5) + (ite (tmp y1 y3 y5) + (and (= x2 y1) (= x4 y3) (= x6 y5)) + (and (= x2 x1) (= x4 x3) (= x6 x5))) + ) + (itp x2 x4 x6) + ) +) + + +(rule (=> (and (itp x1 x3 x5) (not (tmp x1 x3 x5))) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/formula25.smt2 b/bench_horn/formula25.smt2 new file mode 100644 index 000000000..5636ab1cb --- /dev/null +++ b/bench_horn/formula25.smt2 @@ -0,0 +1,37 @@ +(declare-rel itp (Int Int Int Int)) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) +(declare-var x7 Int) +(declare-var x8 Int) +(declare-var y1 Int) +(declare-var y3 Int) +(declare-var y5 Int) +(declare-var y7 Int) + +(declare-rel fail ()) + +(define-fun tmp ((x1 Int) (x2 Int) (x3 Int) (x4 Int)) Bool + (and (<= x1 0) (>= x1 (+ x4 1)) (= x2 x3) (or (>= x4 0) (<= x4 x3)))) + +(rule (=> (and (= x1 0) (= x3 0) (= x5 0) (= x7 -1)) (itp x1 x3 x5 x7))) + +(rule (=> + (and + (itp x1 x3 x5 x7) + (ite (tmp y1 y3 y5 y7) + (and (= x2 y1) (= x4 y3) (= x6 y5) (= x8 y7)) + (and (= x2 x1) (= x4 x3) (= x6 x5) (= x8 x7))) + ) + (itp x2 x4 x6 x8) + ) +) + + +(rule (=> (and (itp x1 x3 x5 x7) (not (tmp x1 x3 x5 x7))) fail)) + +(query fail :print-certificate true) + diff --git a/bench_horn/formula27.smt2 b/bench_horn/formula27.smt2 new file mode 100644 index 000000000..56b963b6d --- /dev/null +++ b/bench_horn/formula27.smt2 @@ -0,0 +1,40 @@ +(declare-rel itp (Int Int Int Int Int)) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) +(declare-var x7 Int) +(declare-var x8 Int) +(declare-var x9 Int) +(declare-var x0 Int) +(declare-var y1 Int) +(declare-var y3 Int) +(declare-var y5 Int) +(declare-var y7 Int) +(declare-var y9 Int) + +(declare-rel fail ()) + +(define-fun tmp ((x1 Int) (x2 Int) (x3 Int) (x4 Int) (x5 Int)) Bool + (and (<= 0 x1) (<= x1 (+ x4 1)) (= x2 x3) (or (<= x2 -1) (<= x4 (+ x2 2))) (= x5 0))) + +(rule (=> (and (= x1 0) (= x3 0) (= x5 0) (= x7 0) (= x9 0)) (itp x1 x3 x5 x7 x9))) + +(rule (=> + (and + (itp x1 x3 x5 x7 x9) + (ite (tmp y1 y3 y5 y7 y9) + (and (= x2 y1) (= x4 y3) (= x6 y5) (= x8 y7) (= x0 y9)) + (and (= x2 x1) (= x4 x3) (= x6 x5) (= x8 x7) (= x0 x9))) + ) + (itp x2 x4 x6 x8 x0) + ) +) + + +(rule (=> (and (itp x1 x3 x5 x7 x9) (not (tmp x1 x3 x5 x7 x9))) fail)) + +(query fail :print-certificate true) + diff --git a/bench_horn/samples_search_11.smt2 b/bench_horn/samples_search_11.smt2 new file mode 100644 index 000000000..da2b63f2d --- /dev/null +++ b/bench_horn/samples_search_11.smt2 @@ -0,0 +1,37 @@ +(declare-rel itp (Int Int Int)) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 1) (= x3 1) (= x5 1)) (itp x1 x3 x5) + ) +) + +(rule (=> + (and + (itp x1 x3 x5) + (= x2 (+ x1 1)) + (= x4 (+ x1 x1)) + (= x6 (+ x1 x1 x1)) + ) + (itp x2 x4 x6) + ) +) + + +(rule (=> (and (itp x1 x3 x5) + (not + (or + (> (- x5 x3) 500) + (< x1 1000) + ) + )) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/samples_search_disj_ite_05.smt2 b/bench_horn/samples_search_disj_ite_05.smt2 new file mode 100644 index 000000000..07cd0c577 --- /dev/null +++ b/bench_horn/samples_search_disj_ite_05.smt2 @@ -0,0 +1,31 @@ +(declare-rel inv (Int Int)) +(declare-var x Int) +(declare-var x2 Int) +(declare-var y Int) +(declare-var y2 Int) + +(declare-rel fail ()) + + +(rule (=> + (and (= x 0) (= y 50)) (inv x y) + ) +) + + +(rule (=> + (and + (inv x y) + (< x 100) + (= x2 (+ x 1)) + (ite (> x2 50) (= y2 (+ y 1)) (= y2 y)) + ) + (inv x2 y2) + ) +) + +(rule (=> (and (inv x y) (= x 100) (not (= y 100))) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/samples_search_disj_ite_06.smt2 b/bench_horn/samples_search_disj_ite_06.smt2 new file mode 100644 index 000000000..0858a9f3d --- /dev/null +++ b/bench_horn/samples_search_disj_ite_06.smt2 @@ -0,0 +1,31 @@ +(declare-rel inv (Int Int)) +(declare-var x Int) +(declare-var x2 Int) +(declare-var y Int) +(declare-var y2 Int) + +(declare-rel fail ()) + + +(rule (=> + (and (= x 0) (= y 50)) (inv x y) + ) +) + + +(rule (=> + (and + (inv x y) + (< x 100) + (= x2 (+ x 1)) + (ite (> x2 50) (= y2 (+ y 1)) (= y2 y)) + ) + (inv x2 y2) + ) +) + +(rule (=> (and (> x 50) (inv x y) (not (= y x))) fail)) + + +(query fail :print-certificate true) + From e3c41df45c51121c653e6e1bfb321174010a1af0 Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Tue, 18 Apr 2017 13:19:25 -0700 Subject: [PATCH 004/236] more precise settings to aggressivepruning, frequencies, and priorities --- bench_horn/bouncy_two_counters_merged.smt2 | 2 +- include/deep/CodeSampler.hpp | 4 +- include/deep/LinCom.hpp | 158 +++++++++++++-------- include/deep/RndLearner.hpp | 43 ++++-- 4 files changed, 127 insertions(+), 80 deletions(-) diff --git a/bench_horn/bouncy_two_counters_merged.smt2 b/bench_horn/bouncy_two_counters_merged.smt2 index cd4e849f3..7ae315876 100644 --- a/bench_horn/bouncy_two_counters_merged.smt2 +++ b/bench_horn/bouncy_two_counters_merged.smt2 @@ -8,7 +8,7 @@ (declare-var z2 Int) (declare-rel fail ()) - +(rule (=> (and (= x1 0) (= y1 0) (= z1 0)) (itp1 x1 y1 z1))) ; COUNTERs -> x and y (nondet choice) (rule (=> (and diff --git a/include/deep/CodeSampler.hpp b/include/deep/CodeSampler.hpp index 7597dd0da..aaa755a02 100644 --- a/include/deep/CodeSampler.hpp +++ b/include/deep/CodeSampler.hpp @@ -110,8 +110,8 @@ namespace ufo } else if (isOpX(term)) { - Expr term2 = mk(mk(term->left()), term->right()); - populateArityAndTemplates(term2); + Expr term2 = mk(mkNeg(term->left()), term->right()); + populateArityAndTemplates(convertToGEandGT(term2)); } else if (isOpX(term) || isOpX(term)) { diff --git a/include/deep/LinCom.hpp b/include/deep/LinCom.hpp index 4bf550055..af875dd89 100644 --- a/include/deep/LinCom.hpp +++ b/include/deep/LinCom.hpp @@ -1,9 +1,9 @@ #ifndef LINCOM__HPP__ #define LINCOM__HPP__ -#define MAXARITY 2 +#define DEFAULTARITY 2 #define PRIORNOVISIT 0 -#define PRIORSTEP 5 +#define PRIORSTEP 15 #include "Distribution.hpp" #include "ae/ExprSimpl.hpp" @@ -209,14 +209,13 @@ namespace ufo // set of fields related to guessing: int prVarsDistrRange; - vector varDistrs; density orAritiesDensity; - density plusAritiesDensity; - density intConstDensity; - density cmpOpDensity; - vector varDensity; - map coefDensity; - vector>> varCombinations; + map plusAritiesDensity; + map intConstDensity; + map cmpOpDensity; + map> varDensity; + map> coefDensity; + map>>> varCombinations; vector samples; vector learntLemmas; // indeces to samples ExprSet learntExprs; // lemmas from learntLemmas @@ -394,21 +393,39 @@ namespace ufo all.push_back(lhs); } - s.arity = all.size(); // GF: to check - Expr aux = reBuildCmp(ex, auxVar1, auxVar2); + s.arity = all.size(); s.cmpop = getVarIndex(aux, cmpOps); - s.intconst = getVarIndex(lexical_cast(ex->right()), intConsts); for (auto &e : all) { + Expr curVar; + int curCoef; + if (isOpX(e)) { - s.vcs.push_back(getVarIndex(e->right(), vars)); - s.vcs.push_back(getVarIndex(lexical_cast(e->left()), intCoefs)); + if (isNumericConst(e->left())) + { + curVar = e->right(); + curCoef = lexical_cast(e->left()); + } + else + { + curVar = e->left(); + curCoef = lexical_cast(e->right()); + } + } + else + { + curVar = e; + curCoef = 1; } + + s.vcs.push_back(getVarIndex(curVar, vars)); + s.vcs.push_back(getVarIndex(curCoef, intCoefs)); + } bool res = addDisjFilter(s, sample); if (!res) return false; @@ -685,34 +702,34 @@ namespace ufo bool guessTerm (LAdisj& curTerm) { curTerm.clear(); - int ar = chooseByWeight(orAritiesDensity); + int arity = chooseByWeight(orAritiesDensity); vector> varcombs; vector terms; // first, guess var combinations: - for (int i = 0; i < ar; i++) + for (int i = 0; i < arity; i++) { terms.push_back(LAterm()); LAterm& la = terms.back(); - la.arity = chooseByWeight(plusAritiesDensity); + la.arity = chooseByWeight(plusAritiesDensity[arity]); - vector>& varCombination = varCombinations[la.arity]; - int comb = chooseByWeight(varDensity[la.arity]); + vector>& varCombination = varCombinations[arity][la.arity]; + int comb = chooseByWeight(varDensity[arity][la.arity]); varcombs.push_back(varCombination[comb]); } // then, guess coefficients to complete the lin. combination - for (int i = 0; i < ar; i++) + for (int i = 0; i < arity; i++) { LAterm& la = terms[i]; for (int v : varcombs[i]) { la.vcs.push_back( v ); - int coef = chooseByWeight(coefDensity[v]); - la.vcs.push_back( coef ); + int coef = chooseByWeight(coefDensity[arity][v]); + la.vcs.push_back(coef); } if (i != 0) @@ -743,15 +760,24 @@ namespace ufo lincoms& id = curTerm.getId(); - for (int i = 0; i < ar; i++) // finally, guess operator and constant + for (int i = 0; i < arity; i++) // finally, guess operator and constant { LAterm& la = curTerm.dstate[i]; - guessNewInequality(id, i, la); + guessNewInequality(id, i, la, arity); + + if (aggressivepruning) + { + for (int k = 0; k < learntLemmas.size(); k++) + { + LAdisj& lcs = samples[ learntLemmas [k] ]; + if (lcs.arity == 1 && lcs.dstate[0] == la) return false; + } + } } return true; } - void guessNewInequality (lincoms& id, int disj, LAterm& curLAterm) + void guessNewInequality (lincoms& id, int disj, LAterm& curLAterm, int ar) { vector& distrs = ineqPriors[id]; initDistrs(distrs, id.size(), prVarsDistrRange); @@ -762,13 +788,10 @@ namespace ufo reInitialize(id, disj); } - // printDistr(distrs[disj], (string)(isDefault(distrs[disj]) ? " Guessing new" : " Updating") + - // " inequality for " + lexical_cast(*assembleLinComb(curLAterm))); - if (densecode && isDefault(distrs[disj])) // if it's the first time we look at this lin.combination, { // we might want to guess a candidate based on the code - curLAterm.intconst = chooseByWeight(intConstDensity); - curLAterm.cmpop = chooseByWeight(cmpOpDensity); + curLAterm.intconst = chooseByWeight(intConstDensity[ar]); + curLAterm.cmpop = chooseByWeight(cmpOpDensity[ar]); } else // otherwise, some info about this lin.combination { // is already kmown from the previous checks @@ -855,8 +878,6 @@ namespace ufo { distrs[i][j] = PRIORNOVISIT; } - - // printDistr(distrs[i]); isVisited(id, i); } } @@ -904,7 +925,6 @@ namespace ufo } } - // printDistr(distrs[i], " Negative Priorities for " + lexical_cast(*toExpr(s))); isVisited(id, i); } } @@ -953,8 +973,6 @@ namespace ufo } } - // printDistr(distrs[i], "Positive Priorities for " + lexical_cast(*toExpr(s))); - isVisited(id, i); } } @@ -965,6 +983,8 @@ namespace ufo getEquivalentFormulas(learnt, eqs); for (auto &a : eqs) prioritiesLearnt (a); + if (!aggressivepruning) return; + if (learnt.arity == 1) { LAdisj t; @@ -1031,52 +1051,54 @@ namespace ufo for (auto &a : eqs) prioritiesGarbage (a); } - void initDensities() + void initDensities(set& arities) { - for (int i = 1; i < MAXARITY+1; i++) - { - orAritiesDensity[i] = 1; - } + for (auto ar : arities) initDensities(ar); + } + + void initDensities(int ar) + { + orAritiesDensity[ar] = 1; for (int i = 1; i < vars.size() + 1; i++) { - plusAritiesDensity[i] = 1; + plusAritiesDensity[ar][i] = 1; for (int j = 0; j < intCoefs.size(); j++) { - coefDensity[i-1][j] = 1; + coefDensity[ar][i-1][j] = 1; } } for (int i = 0; i < intConsts.size(); i++) { - intConstDensity[i] = 1; + intConstDensity[ar][i] = 1; } for (int i = 0; i < cmpOps.size(); i++) { - cmpOpDensity[i] = 1; + cmpOpDensity[ar][i] = 1; } // preparing var densities; - varCombinations.push_back(vector>()); // empty ones; not used - varDensity.push_back(density()); // + varCombinations[ar].push_back(vector>()); // empty ones; not used + varDensity[ar].push_back(density()); // for (int i = 1; i <= vars.size(); i++) { - varCombinations.push_back(vector>()); - varDensity.push_back(density()); + varCombinations[ar].push_back(vector>()); + varDensity[ar].push_back(density()); - getCombinations(varInds, 0, i, varCombinations.back()); + getCombinations(varInds, 0, i, varCombinations[ar].back()); - for (int j = 0; j < varCombinations.back().size(); j++) + for (int j = 0; j < varCombinations[ar].back().size(); j++) { - varDensity.back()[j] = 1; + varDensity[ar].back()[j] = 1; } } } - void printCodeStatistics() + void printCodeStatistics(set& arities) { outs() << "Int consts:\n"; for (auto &form: intConsts) outs() << " " << form ; @@ -1084,32 +1106,44 @@ namespace ufo for (auto &a : orAritiesDensity) { - outs() << " OR arity density: " << a.first << " <[-]> " << a.second << "\n"; + outs() << "OR arity density: " << a.first << " <---> " << a.second << "\n"; + } + + for (auto ar : arities) printCodeStatistics(ar); + } + + void printCodeStatistics(int ar) + { + outs () << "(OR arity = " << ar << "):\n"; + + for (auto &a : plusAritiesDensity[ar]) + { + outs() << " Plus arity density: " << a.first << " <---> " << a.second << "\n"; } - for (auto &a : plusAritiesDensity) + for (auto &a : intConstDensity[ar]) { - outs() << " Plus arity density: " << a.first << " <[-]> " << a.second << "\n"; + outs() << " IntConst density: " << intConsts[ a.first ] << " <---> " << a.second << "\n"; } - for (auto &a : intConstDensity) + for (auto &a : cmpOpDensity[ar]) { - outs() << " IntConst density: " << intConsts[ a.first ] << " <[-]> " << a.second << "\n"; + outs() << " Operator density: " << (a.first == indexGT ? ">" : ">=") << " <---> " << a.second << "\n"; } - for (int i = 0; i < varDensity.size(); i++) + for (int i = 0; i < varDensity[ar].size(); i++) { - for (auto &b : varDensity[i]) + for (auto &b : varDensity[ar][i]) { outs() << " Var Combination density: "; - for ( int j : varCombinations[i][b.first]) + for ( int j : varCombinations[ar][i][b.first]) { outs() << *vars[j] << ", "; } - outs() << " <[-]> " << b.second << "\n"; + outs() << " <---> " << b.second << "\n"; } } @@ -1118,7 +1152,7 @@ namespace ufo for (int j = 0; j < getIntCoefsSize(); j++) { outs() << " Var Coefficient density: [" << getIntCoef(j) << " * " - << *vars[i] << "] <[-]> " << coefDensity[i][j] << "\n"; + << *vars[i] << "] <---> " << coefDensity[ar][i][j] << "\n"; } } } diff --git a/include/deep/RndLearner.hpp b/include/deep/RndLearner.hpp index 40f6eacb5..36deff4f5 100644 --- a/include/deep/RndLearner.hpp +++ b/include/deep/RndLearner.hpp @@ -132,8 +132,8 @@ namespace ufo boost::tribool res = m_smt_solver.solve (); if (res) // SAT == candidate failed { - outs () << " => bad candidate for " << *hr.dstRelation << "\n"; - lf2.assignPrioritiesForFailed(lf2.samples.back()); + outs () << " => bad candidate for " << *hr.dstRelation << "\n"; + if (aggressivepruning) lf2.assignPrioritiesForFailed(lf2.samples.back()); return false; } else // UNSAT == candadate is OK for now; keep checking @@ -141,7 +141,7 @@ namespace ufo localNum[ind2]--; if (!res && localNum[ind2] == 0) // something inductive found { - outs () << " => learnt lemma for " << *hr.dstRelation << "\n"; + outs () << " => learnt lemma for " << *hr.dstRelation << "\n"; lf2.assignPrioritiesForLearnt(lf2.samples.back()); lf2.learntExprs.insert(curCandidates[ind2]); lf2.learntLemmas.push_back(lf2.samples.size() - 1); @@ -220,6 +220,7 @@ namespace ufo set progConsts; set intCoefs; vector css; + set orArities; // analize each rule separately: for (auto &hr : ruleManager.chcs) @@ -264,7 +265,6 @@ namespace ufo for (auto &a : intCoefs) lf.addIntCoef(a); lf.initialize(); - lf.initDensities(); // normalize samples obtained from CHCs and calculate various statistics: vector lcss; @@ -277,10 +277,22 @@ namespace ufo if (lf.exprToLAdisj(cand, lcs)) { lcs.normalizePlus(); + orArities.insert(lcs.arity); + } + else + { + lcss.pop_back(); } } } + if (orArities.size() == 0) // default, if no samples were obtained from the code + { + for (int i = 1; i <= DEFAULTARITY; i++) orArities.insert(i); + } + + lf.initDensities(orArities); + if (densecode) { int multip = PRIORSTEP; // will add +PRIORSTEP to every occurrence @@ -291,46 +303,47 @@ namespace ufo // else multip = PRIORSTEP; for (auto &lcs : lcss) { + int ar = lcs.arity; // specify weights for OR arity - lf.orAritiesDensity[lcs.arity] += multip; + lf.orAritiesDensity[ar] += multip; - for (int i = 0; i < lcs.arity; i++) + for (int i = 0; i < ar; i++) { LAterm& lc = lcs.dstate[i]; // specify weights for PLUS arity - lf.plusAritiesDensity[lc.arity] += multip; + lf.plusAritiesDensity[ar][lc.arity] += multip; // specify weights for const - lf.intConstDensity[lc.intconst] += multip; + lf.intConstDensity[ar][lc.intconst] += multip; // specify weights for comparison operation - lf.cmpOpDensity[lc.cmpop] += multip; + lf.cmpOpDensity[ar][lc.cmpop] += multip; // specify weights for var combinations set vars; int vars_id = -1; for (int j = 0; j < lc.vcs.size(); j = j+2) vars.insert(lc.vcs[j]); - for (int j = 0; j < lf.varCombinations[lc.arity].size(); j++) + for (int j = 0; j < lf.varCombinations[ar][lc.arity].size(); j++) { - if (lf.varCombinations[lc.arity][j] == vars) + if (lf.varCombinations[ar][lc.arity][j] == vars) { vars_id = j; break; } } assert(vars_id >= 0); - lf.varDensity[lc.arity][vars_id] += multip; + lf.varDensity[ar][lc.arity][vars_id] += multip; for (int j = 1; j < lc.vcs.size(); j = j+2) { - lf.coefDensity[ lc.vcs [j-1] ] [lc.vcs [j] ] += multip; + lf.coefDensity[ ar ][ lc.vcs [j-1] ] [lc.vcs [j] ] += multip; } } } - outs() << "Statistics for " << *decls.back() << "\n"; - lf.printCodeStatistics(); + outs() << "\nStatistics for " << *decls.back() << ":\n"; + lf.printCodeStatistics(orArities); } } From 9e79357cc101173bcc22c116acfa585f30a5482d Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Wed, 19 Apr 2017 22:57:52 -0700 Subject: [PATCH 005/236] enlarging the range of the coefficients and constants --- bench_horn/exact_iters_1.smt2 | 26 +++++++++++ bench_horn/exact_iters_2.smt2 | 26 +++++++++++ bench_horn/exact_iters_3.smt2 | 26 +++++++++++ bench_horn/exact_iters_4.smt2 | 29 ++++++++++++ bench_horn/exact_iters_5.smt2 | 29 ++++++++++++ include/deep/CodeSampler.hpp | 87 ++++++++++++++++++++++++++++++----- include/deep/RndLearner.hpp | 35 ++++++++------ 7 files changed, 233 insertions(+), 25 deletions(-) create mode 100644 bench_horn/exact_iters_1.smt2 create mode 100644 bench_horn/exact_iters_2.smt2 create mode 100644 bench_horn/exact_iters_3.smt2 create mode 100644 bench_horn/exact_iters_4.smt2 create mode 100644 bench_horn/exact_iters_5.smt2 diff --git a/bench_horn/exact_iters_1.smt2 b/bench_horn/exact_iters_1.smt2 new file mode 100644 index 000000000..38d45b199 --- /dev/null +++ b/bench_horn/exact_iters_1.smt2 @@ -0,0 +1,26 @@ +(declare-rel inv (Int Int)) +(declare-var i1 Int) +(declare-var i2 Int) +(declare-var j1 Int) +(declare-var j2 Int) + +(declare-rel fail ()) + +(rule (=> (and (= i1 0) (= j1 10)) (inv i1 j1))) + +(rule (=> + (and + (inv i1 j1) + (= i2 (+ i1 2)) + (= j2 (- j1 1)) + ) + (inv i2 j2) + ) +) + + +(rule (=> (and (inv i1 j1) (= i1 4) (not (= j1 8)) ) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/exact_iters_2.smt2 b/bench_horn/exact_iters_2.smt2 new file mode 100644 index 000000000..ea60f2a33 --- /dev/null +++ b/bench_horn/exact_iters_2.smt2 @@ -0,0 +1,26 @@ +(declare-rel inv (Int Int)) +(declare-var i1 Int) +(declare-var i2 Int) +(declare-var j1 Int) +(declare-var j2 Int) + +(declare-rel fail ()) + +(rule (=> (and (= i1 0) (= j1 1000)) (inv i1 j1))) + +(rule (=> + (and + (inv i1 j1) + (= i2 (+ i1 2)) + (= j2 (- j1 1)) + ) + (inv i2 j2) + ) +) + + +(rule (=> (and (inv i1 j1) (= i1 400) (not (= j1 800)) ) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/exact_iters_3.smt2 b/bench_horn/exact_iters_3.smt2 new file mode 100644 index 000000000..9f59a9fee --- /dev/null +++ b/bench_horn/exact_iters_3.smt2 @@ -0,0 +1,26 @@ +(declare-rel inv (Int Int)) +(declare-var i1 Int) +(declare-var i2 Int) +(declare-var j1 Int) +(declare-var j2 Int) + +(declare-rel fail ()) + +(rule (=> (and (= i1 0) (= j1 10000)) (inv i1 j1))) + +(rule (=> + (and + (inv i1 j1) + (= i2 (+ i1 2)) + (= j2 (- j1 1)) + ) + (inv i2 j2) + ) +) + + +(rule (=> (and (inv i1 j1) (= i1 4000) (not (= j1 8000)) ) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/exact_iters_4.smt2 b/bench_horn/exact_iters_4.smt2 new file mode 100644 index 000000000..91b118fa5 --- /dev/null +++ b/bench_horn/exact_iters_4.smt2 @@ -0,0 +1,29 @@ +(declare-rel inv (Int Int Int)) +(declare-var i1 Int) +(declare-var i2 Int) +(declare-var j1 Int) +(declare-var j2 Int) +(declare-var k1 Int) +(declare-var k2 Int) + +(declare-rel fail ()) + +(rule (=> (and (= i1 0) (= j1 10) (= k1 0)) (inv i1 j1 k1))) + +(rule (=> + (and + (inv i1 j1 k1) + (= i2 (+ i1 1)) + (= j2 (- j1 3)) + (= k2 (+ k1 2)) + ) + (inv i2 j2 k2) + ) +) + + +(rule (=> (and (inv i1 j1 k1) (= (+ i1 k1) 6) (not (= j1 4)) ) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/exact_iters_5.smt2 b/bench_horn/exact_iters_5.smt2 new file mode 100644 index 000000000..bbd3af676 --- /dev/null +++ b/bench_horn/exact_iters_5.smt2 @@ -0,0 +1,29 @@ +(declare-rel inv (Int Int Int)) +(declare-var i1 Int) +(declare-var i2 Int) +(declare-var j1 Int) +(declare-var j2 Int) +(declare-var k1 Int) +(declare-var k2 Int) + +(declare-rel fail ()) + +(rule (=> (and (= i1 0) (= j1 1000) (= k1 0)) (inv i1 j1 k1))) + +(rule (=> + (and + (inv i1 j1 k1) + (= i2 (+ i1 1)) + (= j2 (- j1 3)) + (= k2 (+ k1 2)) + ) + (inv i2 j2 k2) + ) +) + + +(rule (=> (and (inv i1 j1 k1) (= (+ i1 k1) 600) (not (= j1 400)) ) fail)) + + +(query fail :print-certificate true) + diff --git a/include/deep/CodeSampler.hpp b/include/deep/CodeSampler.hpp index aaa755a02..596f59285 100644 --- a/include/deep/CodeSampler.hpp +++ b/include/deep/CodeSampler.hpp @@ -18,6 +18,7 @@ namespace ufo ExprSet candidates; set intConsts; + set intCoefs; HornRuleExt& hr; Expr invDecl; @@ -55,6 +56,63 @@ namespace ufo if (!isOpX (tmpl2) && !isOpX (tmpl2)) { candidates.insert(tmpl2); + + // get int constants from the normalized candidate + ExprSet intConstsE; + expr::filter (tmpl2, bind::IsHardIntConst(), std::inserter (intConstsE, intConstsE.begin ())); + + for (auto &a : intConstsE) + { + intConsts.insert(lexical_cast(a)); + } + + getLinCombCoefs(tmpl2, intCoefs); + } + } + + void processTransition(Expr tmpl, ExprVector& srcVars, ExprVector& dstVars, ExprSet& actualVars) + { + int found = false; + // very simple check if there are some srcVars and dstVars in the tmpl + + for (auto &v0 : srcVars) + { + for (auto &v1 : actualVars) + { + if (v0 == v1) + { + found = true; + break; + } + } + } + + if (! found) return; + + found = false; + for (auto &v0 : dstVars) + { + for (auto &v1 : actualVars) + { + if (v0 == v1) + { + found = true; + break; + } + } + } + + if (! found) return; + + ExprVector vars; + for (auto &v : actualVars) vars.push_back(v); + + ExprSet intCoefsE; + expr::filter (normalizeDisj(tmpl, vars), bind::IsHardIntConst(), std::inserter (intCoefsE, intCoefsE.begin ())); + + for (auto &a : intCoefsE) + { + intCoefs.insert(lexical_cast(a)); } } @@ -77,6 +135,7 @@ namespace ufo addSampleHlp(term, hr.srcVars, actualVars); addSampleHlp(term, hr.dstVars, actualVars); + processTransition(term, hr.srcVars, hr.dstVars, actualVars); } void populateArityAndTemplates(Expr term) @@ -225,20 +284,12 @@ namespace ufo outs() <<"\n"; } - // get int constants (and shrink later) - // GF: todo: make sure all constants in the code are Ints (otherwise, z3 could be unpredictable) - ExprSet intConstsE; - expr::filter (hr.body, bind::IsHardIntConst(), std::inserter (intConstsE, intConstsE.begin ())); - - for (auto &a : intConstsE) - { - intConsts.insert(lexical_cast(a)); - } + intCoefs.insert(1); + intConsts.insert(0); - // get samplecode templates (and shrink later) + // get samples and normalize if (samplecode) { - // for the query: add a negation of the entire non-recursive part: if (hr.isQuery) { @@ -258,6 +309,20 @@ namespace ufo } } } + else + { + // get int constants (and shrink later) + // GF: todo: make sure all constants in the code are Ints (otherwise, z3 could be unpredictable) + ExprSet allNums; + expr::filter (hr.body, bind::IsHardIntConst(), std::inserter (allNums, allNums.begin ())); + + for (auto &a : allNums) + { + int c = lexical_cast(a); + intConsts.insert(c); + if (c != 0) intCoefs.insert(c); + } + } if (shrink) { diff --git a/include/deep/RndLearner.hpp b/include/deep/RndLearner.hpp index 36deff4f5..e9f8249b5 100644 --- a/include/deep/RndLearner.hpp +++ b/include/deep/RndLearner.hpp @@ -217,10 +217,11 @@ namespace ufo lf.addVar(var); } - set progConsts; - set intCoefs; vector css; set orArities; + set progConstsTmp; + set progConsts; + set intCoefs; // analize each rule separately: for (auto &hr : ruleManager.chcs) @@ -230,17 +231,28 @@ namespace ufo css.push_back(CodeSampler(hr, invDecl, lf.getVars())); css.back().analyzeCode(densecode, shrink); - for (auto &cand : css.back().candidates) + // convert intConsts to progConsts and add additive inverses (if applicable): + for (auto &a : css.back().intConsts) { - getLinCombCoefs(cand, intCoefs); - getLinCombConsts(cand, css.back().intConsts); + progConstsTmp.insert( a); + progConstsTmp.insert(-a); } - // convert cs.intConsts to progConsts and add additive inverses (if applicable): - for (auto &a : css.back().intConsts) + // same for intCoefs + for (auto &a : css.back().intCoefs) { - progConsts.insert( a); - progConsts.insert(-a); + intCoefs.insert( a); + intCoefs.insert(-a); + } + } + + for (auto &a : intCoefs) lf.addIntCoef(a); + + for (auto &a : intCoefs) + { + for (auto &b : progConstsTmp) + { + progConsts.insert(a*b); } } @@ -259,11 +271,6 @@ namespace ufo lf.addConst(min); } - intCoefs.insert(1); // add 1 - for (auto &a : lf.getConsts()) if (a != 0) intCoefs.insert(a); - for (auto &a : intCoefs) intCoefs.insert(-a); // add the inverse - for (auto &a : intCoefs) lf.addIntCoef(a); - lf.initialize(); // normalize samples obtained from CHCs and calculate various statistics: From c03e0be91de2fb9b374e231f30835cc568d80172 Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Sat, 22 Apr 2017 06:22:27 +0800 Subject: [PATCH 006/236] distributivity rewriter of the code --- bench_horn/samples_search_12.smt2 | 38 ++++++++++++++++++++++++++ bench_horn/samples_search_13.smt2 | 38 ++++++++++++++++++++++++++ bench_horn/samples_search_14.smt2 | 38 ++++++++++++++++++++++++++ bench_horn/samples_search_15.smt2 | 38 ++++++++++++++++++++++++++ include/ae/ExprSimpl.hpp | 45 +++++++++++++++++++++++++++++++ include/deep/CodeSampler.hpp | 6 +++-- include/deep/RndLearner.hpp | 4 +-- 7 files changed, 203 insertions(+), 4 deletions(-) create mode 100644 bench_horn/samples_search_12.smt2 create mode 100644 bench_horn/samples_search_13.smt2 create mode 100644 bench_horn/samples_search_14.smt2 create mode 100644 bench_horn/samples_search_15.smt2 diff --git a/bench_horn/samples_search_12.smt2 b/bench_horn/samples_search_12.smt2 new file mode 100644 index 000000000..7ae62bead --- /dev/null +++ b/bench_horn/samples_search_12.smt2 @@ -0,0 +1,38 @@ +(declare-rel inv (Int Int Int Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) +(declare-var k Int) +(declare-var k1 Int) +(declare-var l Int) +(declare-var l1 Int) +(declare-var m Int) +(declare-var m1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x 1) (= i 1) (= j 1) (= k 1) (= l 1) (= m 1)) (inv x i j k l m))) + +(rule (=> + (and + (inv x i j k l m) + (= x1 (+ x i j k l m)) + (= i1 (+ x i j k l m)) + (= j1 (+ x i j k l m)) + (= k1 (+ x i j k l m)) + (= l1 (+ x i j k l m)) + (= m1 (+ x i j k l m)) + ) + (inv x1 i1 j1 k1 l1 m1) + ) +) + + +(rule (=> (and (inv x i j k l m) (not (>= x 1))) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/samples_search_13.smt2 b/bench_horn/samples_search_13.smt2 new file mode 100644 index 000000000..e4e67e52f --- /dev/null +++ b/bench_horn/samples_search_13.smt2 @@ -0,0 +1,38 @@ +(declare-rel inv (Int Int Int Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) +(declare-var k Int) +(declare-var k1 Int) +(declare-var l Int) +(declare-var l1 Int) +(declare-var m Int) +(declare-var m1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x 1) (= i 1) (= j 1) (= k 1) (= l 1) (= m 1)) (inv x i j k l m))) + +(rule (=> + (and + (inv x i j k l m) + (= x1 (+ x i j k l m)) + (= i1 (+ x i j k l m)) + (= j1 (+ x i j k l m)) + (= k1 (+ x i j k l m)) + (= l1 (+ x i j k l m)) + (= m1 (+ x i j k l m)) + ) + (inv x1 i1 j1 k1 l1 m1) + ) +) + + +(rule (=> (and (inv x i j k l m) (not (= (+ x i j) (+ k l m)))) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/samples_search_14.smt2 b/bench_horn/samples_search_14.smt2 new file mode 100644 index 000000000..8c7142ea2 --- /dev/null +++ b/bench_horn/samples_search_14.smt2 @@ -0,0 +1,38 @@ +(declare-rel inv (Int Int Int Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) +(declare-var k Int) +(declare-var k1 Int) +(declare-var l Int) +(declare-var l1 Int) +(declare-var m Int) +(declare-var m1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x 1) (= i 1) (= j 1) (= k 1) (= l 1) (= m 1)) (inv x i j k l m))) + +(rule (=> + (and + (inv x i j k l m) + (= x1 (+ x i j k l m)) + (= i1 (+ x i j k l m)) + (= j1 (+ x i j k l m)) + (= k1 (+ x i j k l m)) + (= l1 (+ x i j k l m)) + (= m1 (+ x i j k l m)) + ) + (inv x1 i1 j1 k1 l1 m1) + ) +) + + +(rule (=> (and (inv x i j k l m) (not (= (+ x i j k l) (* 5 m)))) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/samples_search_15.smt2 b/bench_horn/samples_search_15.smt2 new file mode 100644 index 000000000..e7ae39f34 --- /dev/null +++ b/bench_horn/samples_search_15.smt2 @@ -0,0 +1,38 @@ +(declare-rel inv (Int Int Int Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) +(declare-var k Int) +(declare-var k1 Int) +(declare-var l Int) +(declare-var l1 Int) +(declare-var m Int) +(declare-var m1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x 1) (= i 1) (= j 1) (= k 1) (= l 1) (= m 1)) (inv x i j k l m))) + +(rule (=> + (and + (inv x i j k l m) + (= x1 (+ x i j k l m)) + (= i1 (+ x i j k l m)) + (= j1 (+ x i j k l m)) + (= k1 (+ x i j k l m)) + (= l1 (+ x i j k l m)) + (= m1 (+ x i j k l m)) + ) + (inv x1 i1 j1 k1 l1 m1) + ) +) + + +(rule (=> (and (inv x i j k l m) (not (= (* 2 (+ x i)) (* 4 m)))) fail)) + + +(query fail :print-certificate true) + diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index 3e4afc023..d333b5bba 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -422,6 +422,13 @@ namespace ufo mknary(disjs); } + template static Expr mkplus(Range& terms, ExprFactory &efac){ + return + (terms.size() == 0) ? mkTerm (mpz_class (0), efac) : + (terms.size() == 1) ? *terms.begin() : + mknary(terms); + } + /** * Simplifier Wrapper */ @@ -861,6 +868,44 @@ namespace ufo } } + struct AddMultDistr + { + AddMultDistr () {}; + + Expr operator() (Expr exp) + { + if (isOpX(exp)) + { + Expr lhs = exp->left(); + Expr rhs = exp->right(); + + ExprVector alllhs; + getAddTerm(lhs, alllhs); + + ExprVector allrhs; + getAddTerm(rhs, allrhs); + + ExprVector unf; + for (auto &a : alllhs) + { + for (auto &b : allrhs) + { + unf.push_back(mk(a, b)); + } + } + return mkplus(unf, exp->getFactory()); + } + + return exp; + } + }; + + inline static Expr rewriteMultAdd (Expr exp) + { + RW mu(new AddMultDistr()); + return dagVisit (mu, exp); + } + inline static void getConj (Expr a, ExprSet &conjs) { if (isOpX(a)) return; diff --git a/include/deep/CodeSampler.hpp b/include/deep/CodeSampler.hpp index 596f59285..e1eceb8d7 100644 --- a/include/deep/CodeSampler.hpp +++ b/include/deep/CodeSampler.hpp @@ -128,9 +128,11 @@ namespace ufo expr::filter (term, bind::IsConst(), std::inserter (actualVars, actualVars.begin ())); + term = rewriteMultAdd(term); + bool locals = false; if (actualVars.size() == 0 || isTautology(term)) return; - + // split each term to two samples (for srcVars and dstVars) addSampleHlp(term, hr.srcVars, actualVars); addSampleHlp(term, hr.dstVars, actualVars); @@ -333,4 +335,4 @@ namespace ufo }; } -#endif \ No newline at end of file +#endif diff --git a/include/deep/RndLearner.hpp b/include/deep/RndLearner.hpp index e9f8249b5..e560da5fd 100644 --- a/include/deep/RndLearner.hpp +++ b/include/deep/RndLearner.hpp @@ -246,8 +246,8 @@ namespace ufo } } - for (auto &a : intCoefs) lf.addIntCoef(a); - + for (auto &a : intCoefs) if (a != 0) lf.addIntCoef(a); + for (auto &a : intCoefs) { for (auto &b : progConstsTmp) From 5baa6f9b07e38065ab0f14c5deab226db430f343 Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Wed, 26 Apr 2017 01:52:54 +0200 Subject: [PATCH 007/236] limited support for nonlinear multiplication --- bench_horn/nonlin_factorial.smt2 | 26 ++++++++++++ bench_horn/nonlin_minus.smt2 | 27 +++++++++++++ bench_horn/nonlin_mult.smt2 | 27 +++++++++++++ bench_horn/nonlin_power.smt2 | 24 +++++++++++ include/ae/ExprSimpl.hpp | 69 +++++++++++++++++++++++++++++++- include/deep/CodeSampler.hpp | 16 +++++++- include/deep/LinCom.hpp | 13 ++++-- include/deep/RndLearner.hpp | 9 ++++- 8 files changed, 205 insertions(+), 6 deletions(-) create mode 100644 bench_horn/nonlin_factorial.smt2 create mode 100644 bench_horn/nonlin_minus.smt2 create mode 100644 bench_horn/nonlin_mult.smt2 create mode 100644 bench_horn/nonlin_power.smt2 diff --git a/bench_horn/nonlin_factorial.smt2 b/bench_horn/nonlin_factorial.smt2 new file mode 100644 index 000000000..8def559cb --- /dev/null +++ b/bench_horn/nonlin_factorial.smt2 @@ -0,0 +1,26 @@ +(declare-rel inv (Int Int)) +(declare-var a Int) +(declare-var a2 Int) +(declare-var b Int) +(declare-var b2 Int) + +(declare-rel fail ()) + +(rule (=> (and (= a 1) (= b 1)) (inv a b))) + +(rule (=> + (and + (inv a b) + (= a2 (+ a 1)) + (= b2 (* b a)) + ) + (inv a2 b2) + ) +) + + +(rule (=> (and (inv a b) (not (> b 0))) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/nonlin_minus.smt2 b/bench_horn/nonlin_minus.smt2 new file mode 100644 index 000000000..8baa51ceb --- /dev/null +++ b/bench_horn/nonlin_minus.smt2 @@ -0,0 +1,27 @@ +(declare-rel inv (Int Int Int)) +(declare-var a Int) +(declare-var a2 Int) +(declare-var n Int) +(declare-var n2 Int) +(declare-var b Int) + +(declare-rel fail ()) + +(rule (=> (and (> a 0) (> b 0) (= n (* a b))) (inv a b n))) + +(rule (=> + (and + (inv a b n) + (= n2 (- n b)) + (= a2 (- a 1)) + ) + (inv a2 b n2) + ) +) + + +(rule (=> (and (inv a b n) (= n 0) (not (= a 0))) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/nonlin_mult.smt2 b/bench_horn/nonlin_mult.smt2 new file mode 100644 index 000000000..74ecabba9 --- /dev/null +++ b/bench_horn/nonlin_mult.smt2 @@ -0,0 +1,27 @@ +(declare-rel inv (Int Int Int)) +(declare-var a Int) +(declare-var c1 Int) +(declare-var c2 Int) +(declare-var d1 Int) +(declare-var d2 Int) + +(declare-rel fail ()) + +(rule (=> (and (> a 0) (= c1 0) (= d1 0)) (inv a c1 d1))) + +(rule (=> + (and + (inv a c1 d1) + (= d2 (+ d1 1)) + (= c2 (+ c1 a)) + ) + (inv a c2 d2) + ) +) + + +(rule (=> (and (inv a c1 d1) (not (= c1 (* a d1)))) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/nonlin_power.smt2 b/bench_horn/nonlin_power.smt2 new file mode 100644 index 000000000..ced1ad7ff --- /dev/null +++ b/bench_horn/nonlin_power.smt2 @@ -0,0 +1,24 @@ +(declare-rel inv (Int Int)) +(declare-var a Int) +(declare-var b Int) +(declare-var b2 Int) + +(declare-rel fail ()) + +(rule (=> (and (> a 0) (= b 1)) (inv a b))) + +(rule (=> + (and + (inv a b) + (= b2 (* b a)) + ) + (inv a b2) + ) +) + + +(rule (=> (and (inv a b) (not (> b 0))) fail)) + + +(query fail :print-certificate true) + diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index d333b5bba..353c80068 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -906,6 +906,60 @@ namespace ufo return dagVisit (mu, exp); } + struct FindNonlinAndRewrite + { + ExprVector& vars; + ExprVector& vars2; + ExprMap& extraVars; + + FindNonlinAndRewrite (ExprVector& _vars, ExprVector& _vars2, ExprMap& _extraVars) : + vars(_vars), vars2(_vars2), extraVars(_extraVars) {}; + + Expr operator() (Expr t) + { + if (isOpX(t)) + { + ExprVector varsForMult; + Expr multedConsts; + for (unsigned j = 0; j < t->arity(); j++) + { + Expr q = t->arg(j); + if (expr::op::bind::isIntConst(q)) + { + int ind = getVarIndex(q, vars); + if (ind == -1) return t; + varsForMult.push_back(vars2[ind]); + } + else + { + // GF: to ensure that it is indeed const + multedConsts = (multedConsts == NULL) ? q : mk(multedConsts, q); + } + } + if (varsForMult.size() > 1) + { + Expr multedVars = mknary(varsForMult); + if (extraVars[multedVars] == NULL) + { + Expr new_name = mkTerm ("__e__" + to_string(extraVars.size()), t->getFactory()); + Expr var = bind::mkConst(new_name, varsForMult[0]); + extraVars[multedVars] = var; + vars2.push_back(var); + } + return (multedConsts == NULL) ? extraVars[multedVars] : mk(multedConsts, extraVars[multedVars]); + } + } + return t; + } + }; + + inline static Expr findNonlinAndRewrite (Expr exp, ExprVector& vars, ExprVector& vars2, ExprMap& extraVars) + { + RW mu(new FindNonlinAndRewrite(vars, vars2, extraVars)); + return dagVisit (mu, exp); + } + + inline static void getConj (Expr a, ExprSet &conjs) { if (isOpX(a)) return; @@ -1349,6 +1403,11 @@ namespace ufo coef += lexical_cast((*it)->left()); it = all.erase(it); } + else if (isOpX(*it) && (*it)->left() == v) + { + coef += lexical_cast((*it)->right()); + it = all.erase(it); + } else { ++it; @@ -1366,6 +1425,15 @@ namespace ufo { intconst += lexical_cast(e); } + else if (isOpX(e)) + { + // GF: sometimes it fails (no idea why) + int thisTerm = 1; + for (auto it = e->args_begin (), end = e->args_end (); it != end; ++it) + thisTerm *= lexical_cast(*it); + + intconst += thisTerm; + } else { success = false; @@ -1384,7 +1452,6 @@ namespace ufo Expr c = mkTerm (mpz_class (-intconst), term->getFactory()); return reBuildCmp(term, pl, c); } - } return term; } diff --git a/include/deep/CodeSampler.hpp b/include/deep/CodeSampler.hpp index e1eceb8d7..f1630b41d 100644 --- a/include/deep/CodeSampler.hpp +++ b/include/deep/CodeSampler.hpp @@ -23,10 +23,12 @@ namespace ufo HornRuleExt& hr; Expr invDecl; ExprVector invVars; + ExprMap& extraVars; Expr zero; - CodeSampler(HornRuleExt& r, Expr& d, ExprVector& v) : hr(r), invDecl(d), invVars(v) + CodeSampler(HornRuleExt& r, Expr& d, ExprVector& v, ExprMap& e) : + hr(r), invDecl(d), invVars(v), extraVars(e) { // add some "universal" constants intConsts.insert(0); @@ -104,6 +106,13 @@ namespace ufo if (! found) return; + for (auto &v : actualVars) + { + int index1 = getVarIndex(v, srcVars); + int index2 = getVarIndex(v, dstVars); + if (index1 == -1 && index2 == -1) return; + } + ExprVector vars; for (auto &v : actualVars) vars.push_back(v); @@ -130,6 +139,11 @@ namespace ufo term = rewriteMultAdd(term); + term = findNonlinAndRewrite(term, hr.srcVars, invVars, extraVars); + term = findNonlinAndRewrite(term, hr.dstVars, invVars, extraVars); + + for (auto &a : extraVars) actualVars.insert(a.second); + bool locals = false; if (actualVars.size() == 0 || isTautology(term)) return; diff --git a/include/deep/LinCom.hpp b/include/deep/LinCom.hpp index af875dd89..b91aa28c9 100644 --- a/include/deep/LinCom.hpp +++ b/include/deep/LinCom.hpp @@ -206,6 +206,8 @@ namespace ufo public: + ExprMap nonlinVars; + // set of fields related to guessing: int prVarsDistrRange; @@ -346,12 +348,17 @@ namespace ufo return mknary (apps); } - Expr toExpr (LAterm& s) + Expr toExpr (LAterm& s, bool replaceNonlin=true) { Expr templ = cmpOps [ s.cmpop ]; Expr ic = intConstsE [ s.intconst ]; Expr lc = assembleLinComb(s); - return getAtom(templ, lc, ic); // compile all ingredients + Expr ineq = getAtom(templ, lc, ic); + + if (replaceNonlin) + for (auto &a : nonlinVars) ineq = replaceAll(ineq, a.second, a.first); + + return ineq; } Expr toExpr (LAdisj& curCandCode) @@ -1198,4 +1205,4 @@ namespace ufo } -#endif \ No newline at end of file +#endif diff --git a/include/deep/RndLearner.hpp b/include/deep/RndLearner.hpp index e560da5fd..bcb72adb4 100644 --- a/include/deep/RndLearner.hpp +++ b/include/deep/RndLearner.hpp @@ -228,7 +228,7 @@ namespace ufo { if (hr.dstRelation != decls.back() && hr.srcRelation != decls.back()) continue; - css.push_back(CodeSampler(hr, invDecl, lf.getVars())); + css.push_back(CodeSampler(hr, invDecl, lf.getVars(), lf.nonlinVars)); css.back().analyzeCode(densecode, shrink); // convert intConsts to progConsts and add additive inverses (if applicable): @@ -246,6 +246,13 @@ namespace ufo } } + outs() << "Multed vars: "; + for (auto &a : lf.nonlinVars) + { + outs() << *a.first << " = " << *a.second << "\n"; + lf.addVar(a.second); + } + for (auto &a : intCoefs) if (a != 0) lf.addIntCoef(a); for (auto &a : intCoefs) From fbac1b0071819d90d0318ef224b1b8302cc702fe Mon Sep 17 00:00:00 2001 From: Sam Kaufman Date: Tue, 25 Apr 2017 23:58:39 -0700 Subject: [PATCH 008/236] some benchmarks from loop-acceleration and loop-new --- .../const_false-unreach-call1.c.smt2 | 32 +++++++++++++++++ ..._true-unreach-call_true-termination.c.smt2 | 34 +++++++++++++++++++ .../diamond_false-unreach-call1.c.smt2 | 34 +++++++++++++++++++ ...alse-unreach-call1_true-termination.c.smt2 | 25 ++++++++++++++ ...alse-unreach-call2_true-termination.c.smt2 | 26 ++++++++++++++ 5 files changed, 151 insertions(+) create mode 100644 bench_horn/sam-contribs/const_false-unreach-call1.c.smt2 create mode 100644 bench_horn/sam-contribs/count_by_1_true-unreach-call_true-termination.c.smt2 create mode 100644 bench_horn/sam-contribs/diamond_false-unreach-call1.c.smt2 create mode 100644 bench_horn/sam-contribs/underapprox_false-unreach-call1_true-termination.c.smt2 create mode 100644 bench_horn/sam-contribs/underapprox_false-unreach-call2_true-termination.c.smt2 diff --git a/bench_horn/sam-contribs/const_false-unreach-call1.c.smt2 b/bench_horn/sam-contribs/const_false-unreach-call1.c.smt2 new file mode 100644 index 000000000..3eb4d730c --- /dev/null +++ b/bench_horn/sam-contribs/const_false-unreach-call1.c.smt2 @@ -0,0 +1,32 @@ +(declare-var x Int) +(declare-var x_ Int) +(declare-var y Int) +(declare-var y_ Int) +(declare-rel itp (Int Int)) +(declare-rel fail ()) + +(rule (=> + ; (and (= y 1) (= x 0)) + (and (= y 0) (= x 1)) + (itp y x))) + +(rule (=> + (and + (itp y_ x_) + (>= y_ 0) ; unsigned + (< y_ 1024) ; (not (<= 1024 (:var 1))) + (= y (+ 1 y_)) + (= x 0) + ) + (itp y x))) + +(rule (=> + (and + (itp y_ x_) + (>= y_ 0) ; unsigned + (>= y_ 1024) + (not (= x_ 1)) + ) + fail)) + +(query fail :print-certificate true) diff --git a/bench_horn/sam-contribs/count_by_1_true-unreach-call_true-termination.c.smt2 b/bench_horn/sam-contribs/count_by_1_true-unreach-call_true-termination.c.smt2 new file mode 100644 index 000000000..cc37961f2 --- /dev/null +++ b/bench_horn/sam-contribs/count_by_1_true-unreach-call_true-termination.c.smt2 @@ -0,0 +1,34 @@ +(declare-var i Int) +(declare-var i_ Int) +(declare-var LRG Int) +(declare-rel itp (Int Int)) +(declare-rel fail ()) + +(rule (=> + (= i 0) + (itp i LRG) +)) + +(rule (=> + (and + (itp i_ LRG) + (< i_ LRG) + (= i (+ 1 i_)) + ) + (itp i LRG) +)) + +(rule (=> + (and + (itp LRG LRG) + (> LRG 10000) ; assume LRG is actually large (not asserted in the .c) + ) fail)) + +(query fail :print-certificate true) + +; int main() { +; int i; +; for (i = 0; i < LARGE_INT; i++) ; +; __VERIFIER_assert(i == LARGE_INT); +; return 0; +; } diff --git a/bench_horn/sam-contribs/diamond_false-unreach-call1.c.smt2 b/bench_horn/sam-contribs/diamond_false-unreach-call1.c.smt2 new file mode 100644 index 000000000..84d9678eb --- /dev/null +++ b/bench_horn/sam-contribs/diamond_false-unreach-call1.c.smt2 @@ -0,0 +1,34 @@ +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-rel itp (Int Int Int)) +(declare-rel fail ()) + +(rule (=> + (and + (itp x0 x2 x1) + (or + (<= 99 (+ x2 x1)) + (not (>= (+ x2 x1) 0)) + ) + (not (= (mod (+ (mod x2 2) (mod x1 2)) 2) x0)) + ) fail)) + +(rule (=> + (and + (= x0 (ite (= x1 0) 1 2)) + (= x1 (mod x2 2)) + ) + (itp x1 x0 x0))) + +(rule (=> + (and + (itp x1 x0 x3) + (>= x2 0) + (not (<= 99 x2)) + (= x2 (+ x0 x3)) + ) + (itp x1 x0 x2))) + +(query fail :print-certificate true) diff --git a/bench_horn/sam-contribs/underapprox_false-unreach-call1_true-termination.c.smt2 b/bench_horn/sam-contribs/underapprox_false-unreach-call1_true-termination.c.smt2 new file mode 100644 index 000000000..a2c4dbecc --- /dev/null +++ b/bench_horn/sam-contribs/underapprox_false-unreach-call1_true-termination.c.smt2 @@ -0,0 +1,25 @@ +(declare-var x Int) +(declare-var x_ Int) +(declare-var y Int) +(declare-var y_ Int) +(declare-rel itp (Int Int)) +(declare-rel fail ()) + +(rule (=> (and (= x 1) (= y 2)) + (itp x y))) + +(rule (=> + (and + (itp x_ y_) + (>= x 0) ; unsigned + (>= y 0) ; unsigned + (< x_ 6) + (= x (+ 1 x_)) + (= y (* 2 y_)) + ) + (itp x y))) + +(rule (=> (and (itp x y) (= y 64)) + fail)) + +(query fail :print-certificate true) diff --git a/bench_horn/sam-contribs/underapprox_false-unreach-call2_true-termination.c.smt2 b/bench_horn/sam-contribs/underapprox_false-unreach-call2_true-termination.c.smt2 new file mode 100644 index 000000000..03727c3e9 --- /dev/null +++ b/bench_horn/sam-contribs/underapprox_false-unreach-call2_true-termination.c.smt2 @@ -0,0 +1,26 @@ +(declare-var x Int) +(declare-var x_ Int) +(declare-var y Int) +(declare-var y_ Int) +(declare-rel itp (Int Int)) +(declare-rel fail ()) + +; x == 1 && y == 2 after first body exec +(rule (=> (and (= x 1) (= y 2)) + (itp x y))) + +(rule (=> + (and + (itp x_ y_) + (>= x 0) ; unsigned + (>= y 0) ; unsigned + (< x_ 6) + (= x (+ 1 x_)) + (= y (* 2 y_)) + ) + (itp x y))) + +(rule (=> (and (itp x y) (= x 6)) + fail)) + +(query fail :print-certificate true) From 804639956468a96211e41c48d335340071d447f4 Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Wed, 26 Apr 2017 15:54:44 +0200 Subject: [PATCH 009/236] MOD, DIV are parseable, but not solvable --- bench_horn/nonlin_div.smt2 | 21 ++++++++++ bench_horn/nonlin_mod.smt2 | 21 ++++++++++ include/ae/ExprSimpl.hpp | 81 ++++++++++++++++++++++++++++++------ include/deep/CodeSampler.hpp | 19 +++++++-- 4 files changed, 126 insertions(+), 16 deletions(-) create mode 100644 bench_horn/nonlin_div.smt2 create mode 100644 bench_horn/nonlin_mod.smt2 diff --git a/bench_horn/nonlin_div.smt2 b/bench_horn/nonlin_div.smt2 new file mode 100644 index 000000000..202c9b6f7 --- /dev/null +++ b/bench_horn/nonlin_div.smt2 @@ -0,0 +1,21 @@ +(declare-rel inv (Int Int)) +(declare-var a Int) +(declare-var b Int) +(declare-var a1 Int) + +(declare-rel fail ()) + +(rule (=> (and (> b 0) (= b a)) (inv a b))) + +(rule (=> + (and + (inv a b) + (= a1 (+ a b)) + ) + (inv a1 b) + ) +) + +(rule (=> (and (inv a b) (not (= 0 (mod a b)))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/nonlin_mod.smt2 b/bench_horn/nonlin_mod.smt2 new file mode 100644 index 000000000..202c9b6f7 --- /dev/null +++ b/bench_horn/nonlin_mod.smt2 @@ -0,0 +1,21 @@ +(declare-rel inv (Int Int)) +(declare-var a Int) +(declare-var b Int) +(declare-var a1 Int) + +(declare-rel fail ()) + +(rule (=> (and (> b 0) (= b a)) (inv a b))) + +(rule (=> + (and + (inv a b) + (= a1 (+ a b)) + ) + (inv a1 b) + ) +) + +(rule (=> (and (inv a b) (not (= 0 (mod a b)))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index 353c80068..7a000a580 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -906,6 +906,8 @@ namespace ufo return dagVisit (mu, exp); } + inline static Expr reBuildBin(Expr term, Expr lhs, Expr rhs); + struct FindNonlinAndRewrite { ExprVector& vars; @@ -944,11 +946,23 @@ namespace ufo Expr new_name = mkTerm ("__e__" + to_string(extraVars.size()), t->getFactory()); Expr var = bind::mkConst(new_name, varsForMult[0]); extraVars[multedVars] = var; - vars2.push_back(var); } return (multedConsts == NULL) ? extraVars[multedVars] : mk(multedConsts, extraVars[multedVars]); } } + else if (isOpX(t) || isOpX(t) || isOpX
(t)) + { + int indl = getVarIndex(t->left(), vars); + int indr = getVarIndex(t->right(), vars); + Expr key = reBuildBin(t, vars2[indl], vars2[indr]); + if (extraVars[key] == NULL) + { + Expr new_name = mkTerm ("__e__" + to_string(extraVars.size()), t->getFactory()); + Expr var = bind::mkConst(new_name, t->left()); + extraVars[key] = var; + } + return extraVars[key]; + } return t; } }; @@ -1116,6 +1130,26 @@ namespace ufo return mk(lhs, rhs); } + // not very pretty method, but.. + inline static Expr reBuildBin(Expr term, Expr lhs, Expr rhs) + { + if (isOpX
(term)) + { + return mk
(lhs, rhs); + } + if (isOpX(term)) + { + return mk(lhs, rhs); + } + if (isOpX(term)) + { + return mk(lhs, rhs); + } + + assert(0); + return term; + } + inline static Expr reBuildNegCmp(Expr term, Expr lhs, Expr rhs) { if (isOpX(term)) @@ -1388,25 +1422,46 @@ namespace ufo int coef = 0; for (auto it = all.begin(); it != all.end();) { - if(v == *it) + string s1 = lexical_cast(v); + string s2 = lexical_cast(*it); + + if(s1 == s2) { coef++; it = all.erase(it); } - else if (isOpX(*it) && (*it)->left() == v) + else if (isOpX(*it)) { - coef--; - it = all.erase(it); - } - else if (isOpX(*it) && (*it)->right() == v) - { - coef += lexical_cast((*it)->left()); - it = all.erase(it); + string s3 = lexical_cast((*it)->left()); + if (s1 == s3) + { + coef--; + it = all.erase(it); + } + else + { + ++it; + } } - else if (isOpX(*it) && (*it)->left() == v) + else if (isOpX(*it)) { - coef += lexical_cast((*it)->right()); - it = all.erase(it); + string s3 = lexical_cast((*it)->left()); + string s4 = lexical_cast((*it)->right()); + + if (s1 == s3) + { + coef += lexical_cast((*it)->right()); + it = all.erase(it); + } + else if (s1 == s4) + { + coef += lexical_cast((*it)->left()); + it = all.erase(it); + } + else + { + ++it; + } } else { diff --git a/include/deep/CodeSampler.hpp b/include/deep/CodeSampler.hpp index f1630b41d..0730e99bc 100644 --- a/include/deep/CodeSampler.hpp +++ b/include/deep/CodeSampler.hpp @@ -41,6 +41,7 @@ namespace ufo void addSampleHlp(Expr tmpl, ExprVector& vars, ExprSet& actualVars) { + ExprVector invVarsCstm = invVars; for (auto &v : actualVars) { int index = getVarIndex(v, vars); @@ -50,11 +51,23 @@ namespace ufo } else { - return; // tmpl = replaceAll(tmpl, v, zero); + int notfound = true; + for (auto &a : extraVars) + { + if (a.second == v) + { + invVarsCstm.push_back(v); + notfound = false; + break; + } + } + if (notfound) + { + return; // tmpl = replaceAll(tmpl, v, zero); + } } } - Expr tmpl2 = normalizeDisj(tmpl, invVars); - + Expr tmpl2 = normalizeDisj(tmpl, invVarsCstm); if (!isOpX (tmpl2) && !isOpX (tmpl2)) { candidates.insert(tmpl2); From f90b0afc5e54ad27a3b3c89ea24157cbb050f58f Mon Sep 17 00:00:00 2001 From: Sam Kaufman Date: Wed, 26 Apr 2017 12:11:33 -0700 Subject: [PATCH 010/236] added loop-new/count_by_1_variant_true-unreach-call_true-termination --- ...nt_true-unreach-call_true-termination.smt2 | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 bench_horn/sam-contribs/count_by_1_variant_true-unreach-call_true-termination.smt2 diff --git a/bench_horn/sam-contribs/count_by_1_variant_true-unreach-call_true-termination.smt2 b/bench_horn/sam-contribs/count_by_1_variant_true-unreach-call_true-termination.smt2 new file mode 100644 index 000000000..a132dafb6 --- /dev/null +++ b/bench_horn/sam-contribs/count_by_1_variant_true-unreach-call_true-termination.smt2 @@ -0,0 +1,33 @@ +(declare-var i Int) +(declare-var i_ Int) +(declare-var LRG Int) +(declare-rel itp (Int Int)) +(declare-rel fail ()) + +(rule (=> + (and + (= i 0) + (not (= i LRG)) + ) + (itp i LRG) +)) + +(rule (=> + (and + (itp i_ LRG) + (= i (+ 1 i_)) + (not (= i LRG)) + ) + (itp i LRG) +)) + +(rule (=> + (and + (> i LRG) + (itp i LRG) + (> LRG 10000) ; assume LARGE_INT is actually large + ) + fail +)) + +(query fail :print-certificate true) From bd5c4cf6f9f21872178e51b554e213bc5e6dd6d2 Mon Sep 17 00:00:00 2001 From: Sam Kaufman Date: Wed, 26 Apr 2017 17:49:13 -0700 Subject: [PATCH 011/236] two more benchmarks from loop-new --- ..._2_true-unreach-call_true-termination.smt2 | 29 +++++++++++++++ ..._k_true-unreach-call_true-termination.smt2 | 35 +++++++++++++++++++ 2 files changed, 64 insertions(+) create mode 100644 bench_horn/sam-contribs/count_by_2_true-unreach-call_true-termination.smt2 create mode 100644 bench_horn/sam-contribs/count_by_k_true-unreach-call_true-termination.smt2 diff --git a/bench_horn/sam-contribs/count_by_2_true-unreach-call_true-termination.smt2 b/bench_horn/sam-contribs/count_by_2_true-unreach-call_true-termination.smt2 new file mode 100644 index 000000000..9ca28d8f4 --- /dev/null +++ b/bench_horn/sam-contribs/count_by_2_true-unreach-call_true-termination.smt2 @@ -0,0 +1,29 @@ +(declare-var i Int) +(declare-var i_ Int) +(declare-var LRG Int) +(declare-rel itp (Int Int)) +(declare-rel fail ()) + +(rule (=> + (= i 0) + (itp i LRG) +)) + +(rule (=> + (and + (itp i_ LRG) + (< i_ LRG) + (= i (+ i_ 2)) + ) + (itp i LRG) +)) + +(rule (=> + (and + (itp i LRG) + (>= i LRG) ; stop condition (redun.) + (not (= i LRG)) ; assert negation + (= LRG 256) ; LARGE_INT is large and a power of 2 + ) fail)) + +(query fail :print-certificate true) diff --git a/bench_horn/sam-contribs/count_by_k_true-unreach-call_true-termination.smt2 b/bench_horn/sam-contribs/count_by_k_true-unreach-call_true-termination.smt2 new file mode 100644 index 000000000..a0624ca2f --- /dev/null +++ b/bench_horn/sam-contribs/count_by_k_true-unreach-call_true-termination.smt2 @@ -0,0 +1,35 @@ +(declare-var i Int) +(declare-var i_ Int) +(declare-var k Int) +(declare-var LRG Int) +(declare-rel itp (Int Int Int)) +(declare-rel fail ()) + +(rule (=> + (and + (and (<= 0 k) (<= k 10)) + (= i 0) + ) + (itp i k LRG) +)) + +(rule (=> + (and + (itp i_ k LRG) + (< i_ (* LRG k)) + (= i (+ i_ k)) + ) + (itp i k LRG) +)) + +(rule (=> + (and + (itp i k LRG) + (not (< i (* LRG k))) ; stop cond. (redun.) + (not (= i (* LRG k))) ; assert negation + (= LRG 256) ; LARGE_INT is large and a power of 2 + ) + fail +)) + +(query fail :print-certificate true) From ed281e18a12098e1438bdea9f70ed7ced37d1960 Mon Sep 17 00:00:00 2001 From: Sam Kaufman Date: Fri, 28 Apr 2017 15:31:31 -0700 Subject: [PATCH 012/236] script to benchmark ICE/MCMC on win32 --- tools/deep/benchmark-others.py | 152 +++++++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 tools/deep/benchmark-others.py diff --git a/tools/deep/benchmark-others.py b/tools/deep/benchmark-others.py new file mode 100644 index 000000000..a7a09c73d --- /dev/null +++ b/tools/deep/benchmark-others.py @@ -0,0 +1,152 @@ +#!/usr/bin/env python +from __future__ import print_function +import os +import re +import sys +import json +import argparse +import subprocess + + +TOTAL_TIME_RE = re.compile(r'\s*[tT]otal [tT]ime:?\s+([\.0-9]*)\s*') + + +# TODO: Should actually check for explicit success, not just total time report +class NoSuccessException(Exception): + pass + + +# TODO: Note that /printAssignment and /trace option is for interactive runs and might cause a significant slowdown. +def run_ice(example_path): + """Returns ICE Boogie.exe on `example_path`. Returns runtime on success.""" + assert os.path.isfile(example_path) + root = os.getenv("ICE_ROOT") + assert root is not None + cmd = os.path.join(root, "Boogie", "Binaries-Full", "Boogie.exe") + assert os.path.isfile(cmd) + output = subprocess.check_output([cmd, "/nologo", "/noinfer", + "/contractInfer", "/ice", + "/printAssignment", example_path]) + for line in output.splitlines()[-10:]: + m = TOTAL_TIME_RE.match(line) + if m: + return float(m.group(1)) + raise NoSuccessException("couldn't find 'Total time'") + + +def ice_benchmarks(): + root = os.getenv("ICE_ROOT") + assert root is not None + bench_root = os.path.join(root, "benchmarks") + assert os.path.isdir(bench_root) + for root, dirs, files in os.walk(bench_root): + for f in files: + if os.path.splitext(f)[1].lower() == ".bpl": + yield os.path.join(root, f) + + +def run_mcmc(example_dirpath): + root = os.getenv("MCMC_ROOT") + assert root is not None + cmd = os.path.join(root, "Release", "numerical.exe") + assert os.path.isfile(cmd) + output = subprocess.check_output([cmd], cwd=example_dirpath) + for line in output.splitlines()[-10:]: + m = TOTAL_TIME_RE.match(line) + if m: + return float(m.group(1)) + raise NoSuccessException("couldn't find 'Total time'") + + +def mcmc_benchmarks(): + # Gather all directories with .xml in 'em + root = os.getenv("MCMC_ROOT") + assert root is not None + bench_root = os.path.join(root, "benchmarks", "numerical") + assert os.path.isdir(bench_root) + for root, dirs, files in os.walk(bench_root): + for f in files: + if os.path.splitext(f)[1].lower() == ".xml": + yield root + break + + +def name_only(path): + return os.path.splitext(os.path.split(path)[1])[0].lower() + + +def bench_intersection(a, b): + a_set = set(name_only(path) for path in a) + b_set = set(name_only(path) for path in b) + i = a_set.intersection(b_set) + return [x for x in a if name_only(x) in i], [x for x in b if name_only(x) in i] + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("BENCHNAMES", nargs='*') + parser.add_argument('--mcmc', action='store', type=int, default=5, + help="run the MCMC solver N iterations") + parser.add_argument('--ice', action='store', type=int, default=5, + help="run the ICE (Boogie.exe) solver N iterations") + parser.add_argument("-o", "--outfile", type=str, + help="path to file to save times") + args = parser.parse_args() + + if args.outfile and os.path.exists(args.outfile): + print("'%s' already exists" % args.outfile, file=sys.stderr) + return 1 + + try: + times, others = {}, [] + + # Construct name-only set of benchmarks to run + if args.BENCHNAMES: + lc_benchnames = set(l.lower() for l in args.BENCHNAMES) + else: + orig_sets = [] + if args.mcmc: + orig_sets.append(set(name_only(b) for b in mcmc_benchmarks())) + if args.ice: + orig_sets.append(set(name_only(b) for b in ice_benchmarks())) + lc_benchnames = orig_sets[0] + for s in orig_sets[1:]: + lc_benchnames.intersection_update(s) + print("Running benchmarks:", ', '.join(lc_benchnames)) + + if args.mcmc: + b = list(mcmc_benchmarks()) + if len(b) == 0: + raise Exception("No benchmarks for MCMC found") + b = [x for x in b if name_only(x) in lc_benchnames] + others.append(("MCMC", run_mcmc, args.mcmc, b)) + if args.ice: + b = list(ice_benchmarks()) + if len(b) == 0: + raise Exception("No benchmarks for ICE found") + b = [x for x in b if name_only(x) in lc_benchnames] + others.append(("ICE", run_ice, args.ice, b)) + for n, fn, cnt, benches in others: + times[n] = {b: [fn(b) for _ in range(cnt)] for b in benches} + except KeyboardInterrupt: + pass + + # Save the times + if args.outfile: + with open(args.outfile, 'w') as f: + cleaned = {k: {name_only(i): j for i, j in v.items()} for k, v in times.items()} + json.dump({'times': cleaned}, f) + + # Print the times + for k, v in times.iteritems(): + print(k, ":") + for benchpath, t in v.iteritems(): + t = list(t) + if len(t): + print(" ", name_only(benchpath), ": ", t) + + +if __name__ == '__main__': + ret = main() + if ret: + sys.exit(ret) From d32dab18cf47ce2acab9f3d85cbb545f6556d077 Mon Sep 17 00:00:00 2001 From: Sam Kaufman Date: Sat, 29 Apr 2017 19:12:33 -0700 Subject: [PATCH 013/236] added --resume and --verbose to benchmark-others.py --- tools/deep/benchmark-others.py | 50 +++++++++++++++++++++++----------- 1 file changed, 34 insertions(+), 16 deletions(-) diff --git a/tools/deep/benchmark-others.py b/tools/deep/benchmark-others.py index a7a09c73d..c7fa563f7 100644 --- a/tools/deep/benchmark-others.py +++ b/tools/deep/benchmark-others.py @@ -6,6 +6,7 @@ import json import argparse import subprocess +from collections import defaultdict TOTAL_TIME_RE = re.compile(r'\s*[tT]otal [tT]ime:?\s+([\.0-9]*)\s*') @@ -16,12 +17,17 @@ class NoSuccessException(Exception): pass +def getenv_or_raise(v): + r = os.getenv(v) + if r is None: + raise Exception("environment variable %s not set" % v) + return r + # TODO: Note that /printAssignment and /trace option is for interactive runs and might cause a significant slowdown. def run_ice(example_path): """Returns ICE Boogie.exe on `example_path`. Returns runtime on success.""" assert os.path.isfile(example_path) - root = os.getenv("ICE_ROOT") - assert root is not None + root = getenv_or_raise("ICE_ROOT") cmd = os.path.join(root, "Boogie", "Binaries-Full", "Boogie.exe") assert os.path.isfile(cmd) output = subprocess.check_output([cmd, "/nologo", "/noinfer", @@ -35,8 +41,7 @@ def run_ice(example_path): def ice_benchmarks(): - root = os.getenv("ICE_ROOT") - assert root is not None + root = getenv_or_raise("ICE_ROOT") bench_root = os.path.join(root, "benchmarks") assert os.path.isdir(bench_root) for root, dirs, files in os.walk(bench_root): @@ -46,8 +51,7 @@ def ice_benchmarks(): def run_mcmc(example_dirpath): - root = os.getenv("MCMC_ROOT") - assert root is not None + root = getenv_or_raise("MCMC_ROOT") cmd = os.path.join(root, "Release", "numerical.exe") assert os.path.isfile(cmd) output = subprocess.check_output([cmd], cwd=example_dirpath) @@ -60,8 +64,7 @@ def run_mcmc(example_dirpath): def mcmc_benchmarks(): # Gather all directories with .xml in 'em - root = os.getenv("MCMC_ROOT") - assert root is not None + root = getenv_or_raise("MCMC_ROOT") bench_root = os.path.join(root, "benchmarks", "numerical") assert os.path.isdir(bench_root) for root, dirs, files in os.walk(bench_root): @@ -79,7 +82,8 @@ def bench_intersection(a, b): a_set = set(name_only(path) for path in a) b_set = set(name_only(path) for path in b) i = a_set.intersection(b_set) - return [x for x in a if name_only(x) in i], [x for x in b if name_only(x) in i] + return ([x for x in a if name_only(x) in i], + [x for x in b if name_only(x) in i]) def main(): @@ -91,15 +95,24 @@ def main(): help="run the ICE (Boogie.exe) solver N iterations") parser.add_argument("-o", "--outfile", type=str, help="path to file to save times") + parser.add_argument('-r', "--resume", action='store_true', + help="merge results with outfile if it exists") + parser.add_argument('-v', "--verbose", action='store_true', + help="be noisier about what's going on") args = parser.parse_args() - if args.outfile and os.path.exists(args.outfile): + if not args.resume and args.outfile and os.path.exists(args.outfile): print("'%s' already exists" % args.outfile, file=sys.stderr) return 1 - try: - times, others = {}, [] + times, others = {}, [] + if args.resume and os.path.exists(args.outfile): + with open(args.outfile, 'r') as f: + times = json.load(f)['times'] + times = defaultdict(lambda: defaultdict(list), {k: defaultdict(list, {a: b for a, b in v.iteritems()}) + for k, v in times.iteritems()}) + try: # Construct name-only set of benchmarks to run if args.BENCHNAMES: lc_benchnames = set(l.lower() for l in args.BENCHNAMES) @@ -112,7 +125,8 @@ def main(): lc_benchnames = orig_sets[0] for s in orig_sets[1:]: lc_benchnames.intersection_update(s) - print("Running benchmarks:", ', '.join(lc_benchnames)) + if args.verbose: + print("Running benchmarks:", ', '.join(lc_benchnames)) if args.mcmc: b = list(mcmc_benchmarks()) @@ -127,15 +141,19 @@ def main(): b = [x for x in b if name_only(x) in lc_benchnames] others.append(("ICE", run_ice, args.ice, b)) for n, fn, cnt, benches in others: - times[n] = {b: [fn(b) for _ in range(cnt)] for b in benches} + for b in benches: + t_list = times[n][name_only(b)] + while len(t_list) < cnt: + if args.verbose: + print("Running %s on %s" % (n, name_only(b))) + t_list.append(fn(b)) except KeyboardInterrupt: pass # Save the times if args.outfile: with open(args.outfile, 'w') as f: - cleaned = {k: {name_only(i): j for i, j in v.items()} for k, v in times.items()} - json.dump({'times': cleaned}, f) + json.dump({'times': times}, f) # Print the times for k, v in times.iteritems(): From 51773c2be2bcdaa972ac6f2e34bba80d4da6d7d6 Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Mon, 1 May 2017 22:06:35 +0800 Subject: [PATCH 014/236] refactored the priorities assignment --- include/deep/LinCom.hpp | 73 ++++++++++------------------------------- 1 file changed, 18 insertions(+), 55 deletions(-) diff --git a/include/deep/LinCom.hpp b/include/deep/LinCom.hpp index b91aa28c9..b29902f50 100644 --- a/include/deep/LinCom.hpp +++ b/include/deep/LinCom.hpp @@ -881,10 +881,8 @@ namespace ufo for (int i = 0; i < failed.arity; i++) { - for (int j = prVarsDistrRange - 1; j >= 0; j--) - { - distrs[i][j] = PRIORNOVISIT; - } + LAterm& s = failed.dstate[i]; + distrs[i][s.intconst * 2] = PRIORNOVISIT; isVisited(id, i); } } @@ -898,37 +896,20 @@ namespace ufo for (int i = 0; i < failed.arity; i++) { - // preps: LAterm& s = failed.dstate[i]; - if (getIndexGT() == s.cmpop) + int lim = s.intconst * 2 + (getIndexGT() == s.cmpop ? 1 : 0); + for (int j = 0; j < prVarsDistrRange ; j++) { - int lim = s.intconst * 2 + 1; - for (int j = prVarsDistrRange - 1; j >= 0; j--) + if (j >= lim) { - if (j >= lim) - { - distrs[i][j] = PRIORNOVISIT; - } - else - { - distrs[i][j] = min ( distrs[i][j], (lim - j) * PRIORSTEP); - } + // block all constants which are greater or equal than intconst + distrs[i][j] = PRIORNOVISIT; } - } - else if (getIndexGE() == s.cmpop) - { - int lim = s.intconst * 2 ; - for (int j = prVarsDistrRange - 1; j >= 0; j--) + else { - if (j >= lim) - { - distrs[i][j] = PRIORNOVISIT; - } - else - { - distrs[i][j] = min ( distrs[i][j], (lim - j) * PRIORSTEP); - } + // the farther constant from s.intconst the higher priority to visit it later + distrs[i][j] = min ( distrs[i][j], (lim - j) * PRIORSTEP ); } } @@ -947,36 +928,18 @@ namespace ufo { LAterm& s = learnt.dstate[i]; - if (getIndexGT() == s.cmpop) // ax + by > c => ax + by > d, \forall d < c + int lim = s.intconst * 2 + (getIndexGT() == s.cmpop ? 1 : 0); + for (int j = 0; j < prVarsDistrRange ; j++) { - // block all constants which are less or equal than intconst - - int lim = s.intconst * 2 + 1; - for (int j = 0; j < prVarsDistrRange ; j++) + if (j < lim) { - if (j < lim) - { - distrs[i][j] = PRIORNOVISIT; - } - else - { - distrs[i][j] = min ( distrs[i][j], (j - lim) * PRIORSTEP); - } + // block all constants which are less or equal than intconst + distrs[i][j] = PRIORNOVISIT; } - } - else if (getIndexGE() == s.cmpop) // ax + by >= c => ax + by >= d, \forall d < c - { - int lim = s.intconst * 2; - for (int j = 0; j < prVarsDistrRange ; j++) + else { - if (j < lim) - { - distrs[i][j] = PRIORNOVISIT; - } - else - { - distrs[i][j] = min ( distrs[i][j], (j - lim) * PRIORSTEP); - } + // the farther constant from intconst the higher priority to visit it later + distrs[i][j] = min ( distrs[i][j], (j - lim) * PRIORSTEP ); } } From b5006f4e6096cea2f2372148ee1cb87ae9f25018 Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Wed, 3 May 2017 16:11:14 -0700 Subject: [PATCH 015/236] added more benchmarks over non-linear arithmetic --- bench_horn/nonlin_div.smt2 | 15 +++++---- .../{nonlin_mult.smt2 => nonlin_mult_1.smt2} | 0 bench_horn/nonlin_mult_2.smt2 | 31 +++++++++++++++++++ bench_horn/nonlin_mult_3.smt2 | 31 +++++++++++++++++++ bench_horn/nonlin_mult_4.smt2 | 31 +++++++++++++++++++ 5 files changed, 102 insertions(+), 6 deletions(-) rename bench_horn/{nonlin_mult.smt2 => nonlin_mult_1.smt2} (100%) create mode 100644 bench_horn/nonlin_mult_2.smt2 create mode 100644 bench_horn/nonlin_mult_3.smt2 create mode 100644 bench_horn/nonlin_mult_4.smt2 diff --git a/bench_horn/nonlin_div.smt2 b/bench_horn/nonlin_div.smt2 index 202c9b6f7..a4f8352e3 100644 --- a/bench_horn/nonlin_div.smt2 +++ b/bench_horn/nonlin_div.smt2 @@ -1,21 +1,24 @@ -(declare-rel inv (Int Int)) +(declare-rel inv (Int Int Int)) (declare-var a Int) -(declare-var b Int) (declare-var a1 Int) +(declare-var b Int) +(declare-var c Int) +(declare-var c1 Int) (declare-rel fail ()) -(rule (=> (and (> b 0) (= b a)) (inv a b))) +(rule (=> (and (> b 0) (= b a) (= c 1)) (inv a b c))) (rule (=> (and - (inv a b) + (inv a b c) (= a1 (+ a b)) + (= c1 (+ 1 c)) ) - (inv a1 b) + (inv a1 b c1) ) ) -(rule (=> (and (inv a b) (not (= 0 (mod a b)))) fail)) +(rule (=> (and (inv a b c) (not (= c (/ a b)))) fail)) (query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/nonlin_mult.smt2 b/bench_horn/nonlin_mult_1.smt2 similarity index 100% rename from bench_horn/nonlin_mult.smt2 rename to bench_horn/nonlin_mult_1.smt2 diff --git a/bench_horn/nonlin_mult_2.smt2 b/bench_horn/nonlin_mult_2.smt2 new file mode 100644 index 000000000..700732f01 --- /dev/null +++ b/bench_horn/nonlin_mult_2.smt2 @@ -0,0 +1,31 @@ +(declare-rel inv (Int Int Int Int Int)) +(declare-var a Int) +(declare-var b Int) +(declare-var c1 Int) +(declare-var c2 Int) +(declare-var d1 Int) +(declare-var d2 Int) +(declare-var e1 Int) +(declare-var e2 Int) + +(declare-rel fail ()) + +(rule (=> (and (> a 0) (>= b a) (= c1 0) (= e1 0) (= d1 0)) (inv a b c1 d1 e1))) + +(rule (=> + (and + (inv a b c1 d1 e1) + (= c2 (+ c1 1)) + (= d2 (+ d1 a)) + (= e2 (+ e1 b)) + ) + (inv a b c2 d2 e2) + ) +) + + +(rule (=> (and (inv a b c1 d1 e1) (not (>= e1 (* a c1)))) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/nonlin_mult_3.smt2 b/bench_horn/nonlin_mult_3.smt2 new file mode 100644 index 000000000..d74de2885 --- /dev/null +++ b/bench_horn/nonlin_mult_3.smt2 @@ -0,0 +1,31 @@ +(declare-rel inv (Int Int Int Int Int)) +(declare-var a Int) +(declare-var b Int) +(declare-var c1 Int) +(declare-var c2 Int) +(declare-var d1 Int) +(declare-var d2 Int) +(declare-var e1 Int) +(declare-var e2 Int) + +(declare-rel fail ()) + +(rule (=> (and (> a 0) (>= b a) (= c1 0) (= e1 0) (= d1 0)) (inv a b c1 d1 e1))) + +(rule (=> + (and + (inv a b c1 d1 e1) + (= c2 (+ c1 1)) + (= d2 (+ d1 a)) + (= e2 (+ e1 b)) + ) + (inv a b c2 d2 e2) + ) +) + + +(rule (=> (and (inv a b c1 d1 e1) (not (<= d1 (* b c1)))) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/nonlin_mult_4.smt2 b/bench_horn/nonlin_mult_4.smt2 new file mode 100644 index 000000000..288ea9b24 --- /dev/null +++ b/bench_horn/nonlin_mult_4.smt2 @@ -0,0 +1,31 @@ +(declare-rel inv (Int Int Int Int Int)) +(declare-var a Int) +(declare-var b Int) +(declare-var c1 Int) +(declare-var c2 Int) +(declare-var d1 Int) +(declare-var d2 Int) +(declare-var e1 Int) +(declare-var e2 Int) + +(declare-rel fail ()) + +(rule (=> (and (> a 0) (>= b a) (= c1 0) (= e1 0) (= d1 0)) (inv a b c1 d1 e1))) + +(rule (=> + (and + (inv a b c1 d1 e1) + (= c2 (+ c1 1)) + (= d2 (+ d1 a)) + (= e2 (+ e1 b)) + ) + (inv a b c2 d2 e2) + ) +) + + +(rule (=> (and (inv a b c1 d1 e1) (not (>= (* b c1) (* a c1)))) fail)) + + +(query fail :print-certificate true) + From 731b6e2fa6f64e4b0cb4f5bc14c584a4f4131554 Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Sat, 13 May 2017 15:26:51 +0200 Subject: [PATCH 016/236] fixed the learning of several invariants in the row --- bench_horn/samples_multiple_inv_03.smt2 | 35 ++++++++++++++++++ bench_horn/samples_multiple_inv_04.smt2 | 47 +++++++++++++++++++++++++ include/deep/RndLearner.hpp | 27 ++++++++------ 3 files changed, 98 insertions(+), 11 deletions(-) create mode 100644 bench_horn/samples_multiple_inv_03.smt2 create mode 100644 bench_horn/samples_multiple_inv_04.smt2 diff --git a/bench_horn/samples_multiple_inv_03.smt2 b/bench_horn/samples_multiple_inv_03.smt2 new file mode 100644 index 000000000..ca715ebc6 --- /dev/null +++ b/bench_horn/samples_multiple_inv_03.smt2 @@ -0,0 +1,35 @@ +(declare-rel WRAP (Int)) +(declare-rel NEST (Int)) +(declare-rel WEEE (Int)) +(declare-var m Int) +(declare-var m1 Int) + +(declare-rel fail ()) + +(rule (=> + (= m 0) (WRAP m) + ) +) + + +(rule (=> (WRAP m) (NEST m))) + +(rule (=> (NEST m) (WEEE m))) + +(rule (=> + (and + (WEEE m) + (= m1 (+ m 1)) + ) + (WEEE m1) + ) +) + +(rule (=> (WEEE m) (NEST m))) + +(rule (=> (NEST m) (WRAP m))) + +(rule (=> (and (WRAP m) (not (>= m 0))) fail)) + +(query fail :print-certificate true) + diff --git a/bench_horn/samples_multiple_inv_04.smt2 b/bench_horn/samples_multiple_inv_04.smt2 new file mode 100644 index 000000000..3a202b17a --- /dev/null +++ b/bench_horn/samples_multiple_inv_04.smt2 @@ -0,0 +1,47 @@ +(declare-rel FUN (Int)) +(declare-rel SAD (Int)) +(declare-rel WEE (Int)) +(declare-var m Int) +(declare-var m1 Int) + +(declare-rel fail ()) + +(rule (=> + (> m 50) (FUN m) + ) +) + +(rule (=> + (and + (FUN m) + (= m1 (+ m 1)) + ) + (FUN m1) + ) +) + +(rule (=> (FUN m) (SAD m))) + +(rule (=> + (and + (SAD m) + (= m1 (+ m 2)) + ) + (SAD m1) + ) +) + +(rule (=> (SAD m) (WEE m))) + +(rule (=> + (and + (WEE m) + (= m1 (+ m 3)) + ) + (WEE m1) + ) +) + +(rule (=> (and (WEE m) (not (>= m 30))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/include/deep/RndLearner.hpp b/include/deep/RndLearner.hpp index bcb72adb4..09617e31c 100644 --- a/include/deep/RndLearner.hpp +++ b/include/deep/RndLearner.hpp @@ -74,6 +74,8 @@ namespace ufo bool checkCandidates() { map localNum = incomNum; // for local status + map candsFailed; // -||- + int candsTried = invNumber; // -||- for (auto &hr: ruleManager.chcs) { @@ -81,30 +83,32 @@ namespace ufo m_smt_solver.reset(); + int ind1; // to be identified later + int ind2 = getVarIndex(hr.dstRelation, decls); + + if (candsFailed[ind2]) continue; // exit if cand2 is already a failure + // pushing body m_smt_solver.assertExpr (hr.body); Expr cand1; Expr cand2; - Expr invApp1; - Expr invApp2; Expr lmApp; // pushing src relation if (!isOpX(hr.srcRelation)) { - int ind1 = getVarIndex(hr.srcRelation, decls); + ind1 = getVarIndex(hr.srcRelation, decls); LAfactory& lf1 = lfs[ind1]; if (localNum[ind1] > 0) { cand1 = curCandidates[ind1]; - invApp1 = cand1; for (int i = 0; i < hr.srcVars.size(); i++) { - invApp1 = replaceAll(invApp1, lf1.getVarE(i), hr.srcVars[i]); + cand1 = replaceAll(cand1, lf1.getVarE(i), hr.srcVars[i]); } - m_smt_solver.assertExpr(invApp1); + m_smt_solver.assertExpr(cand1); } lmApp = conjoin(lf1.learntExprs, m_efac); @@ -116,17 +120,15 @@ namespace ufo } // pushing dst relation - int ind2 = getVarIndex(hr.dstRelation, decls); cand2 = curCandidates[ind2]; - invApp2 = cand2; LAfactory& lf2 = lfs[ind2]; for (int i = 0; i < hr.dstVars.size(); i++) { - invApp2 = replaceAll(invApp2, lf2.getVarE(i), hr.dstVars[i]); + cand2 = replaceAll(cand2, lf2.getVarE(i), hr.dstVars[i]); } - m_smt_solver.assertExpr(mk(invApp2)); + m_smt_solver.assertExpr(mk(cand2)); all++; boost::tribool res = m_smt_solver.solve (); @@ -134,7 +136,9 @@ namespace ufo { outs () << " => bad candidate for " << *hr.dstRelation << "\n"; if (aggressivepruning) lf2.assignPrioritiesForFailed(lf2.samples.back()); - return false; + candsTried--; + candsFailed[ind2] = true; + if (candsTried == 0) return false; } else // UNSAT == candadate is OK for now; keep checking { @@ -145,6 +149,7 @@ namespace ufo lf2.assignPrioritiesForLearnt(lf2.samples.back()); lf2.learntExprs.insert(curCandidates[ind2]); lf2.learntLemmas.push_back(lf2.samples.size() - 1); + candsTried--; } } } From 4623ba0f9be27d6d6f4ab4a27dbc91db10d99168 Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Thu, 18 May 2017 22:18:58 -0700 Subject: [PATCH 017/236] propagating equalities in query implications --- bench_horn/abdu_01.smt2 | 29 ++++++++++ bench_horn/abdu_02.smt2 | 45 +++++++++++++++ bench_horn/abdu_03.smt2 | 27 +++++++++ bench_horn/nonlin_mult_5.smt2 | 31 +++++++++++ include/ae/ExprSimpl.hpp | 101 ++++++++++++++++++++++++++++++++++ include/deep/CodeSampler.hpp | 3 +- 6 files changed, 235 insertions(+), 1 deletion(-) create mode 100644 bench_horn/abdu_01.smt2 create mode 100644 bench_horn/abdu_02.smt2 create mode 100644 bench_horn/abdu_03.smt2 create mode 100644 bench_horn/nonlin_mult_5.smt2 diff --git a/bench_horn/abdu_01.smt2 b/bench_horn/abdu_01.smt2 new file mode 100644 index 000000000..9c1d62904 --- /dev/null +++ b/bench_horn/abdu_01.smt2 @@ -0,0 +1,29 @@ +(declare-rel inv (Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) +(declare-var len Int) + +(declare-rel fail ()) + +(rule (=> + (and (= x 0) (= y 0) (>= len 0)) (inv x y len) + ) +) + +(rule (=> + (and + (inv x y len) + (< x len) + (= x1 (+ x 1)) + (= y1 (+ y 2)) + ) + (inv x1 y1 len) + ) +) + +(rule (=> (and (inv x y len) (not (= y (* 2 x)))) fail)) + +(query fail :print-certificate true) + diff --git a/bench_horn/abdu_02.smt2 b/bench_horn/abdu_02.smt2 new file mode 100644 index 000000000..3ab976101 --- /dev/null +++ b/bench_horn/abdu_02.smt2 @@ -0,0 +1,45 @@ +(declare-rel inv (Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) +(declare-var len Int) + +(declare-rel fail ()) + +(rule (=> + (and (= x 0) (= y 0) (>= len 0)) (inv x y len) + ) +) + +(rule (=> + (and + (inv x y len) + (< x len) + (= x1 (+ x 1)) + (= y1 (+ y 2)) + ) + (inv x1 y1 len) + ) +) + +(rule (=> (and (inv x y len) (= x len) (not (= y (* 2 len)))) fail)) + +(query fail :print-certificate true) + + +; +; +; x = len => y = 2 * len +; +; => propagate equality => +; +; x = len => (y = 2 * len /\ x = 2 * len) +; +; => equivalent to => +; +; x = len /\ ! (y = 2 * len /\ x = 2 * len) => ... +; +; x = len /\ (! y = 2 * len \/ ! x = 2 * len) => ... +; +; diff --git a/bench_horn/abdu_03.smt2 b/bench_horn/abdu_03.smt2 new file mode 100644 index 000000000..f1bd74cc3 --- /dev/null +++ b/bench_horn/abdu_03.smt2 @@ -0,0 +1,27 @@ +(declare-rel inv (Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) +(declare-var len Int) + +(declare-rel fail ()) + +(rule (=> (and (= x 0) (= y 0) (>= len 0)) (inv x y len))) + +(rule (=> + (and + (inv x y len) + (< x len) + (= x1 (+ x 1)) + (= y1 (+ y 2)) + ) + (inv x1 y1 len) + ) +) + + +(rule (=> (and (inv x y len) (= x len) (not (= (+ x y) (* 3 len)))) fail)) + + +(query fail :print-certificate true) diff --git a/bench_horn/nonlin_mult_5.smt2 b/bench_horn/nonlin_mult_5.smt2 new file mode 100644 index 000000000..4d26b111c --- /dev/null +++ b/bench_horn/nonlin_mult_5.smt2 @@ -0,0 +1,31 @@ +(declare-rel inv (Int Int Int Int)) +(declare-var a Int) +(declare-var b Int) +(declare-var c1 Int) +(declare-var c2 Int) +(declare-var d1 Int) +(declare-var d2 Int) + +(declare-rel fail ()) + +(rule (=> + (and (> a 0) (> b 0) (= c1 0) (= d1 0)) (inv a b c1 d1) + ) +) + +(rule (=> + (and + (inv a b c1 d1) + (= c2 (+ c1 1)) + (= d2 (+ d1 b)) + ) + (inv a b c2 d2) + ) +) + + +(rule (=> (and (inv a b c1 d1) (= c1 a) (not (= d1 (* a b)))) fail)) + + +(query fail :print-certificate true) + diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index 7a000a580..22a7800e0 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -1567,6 +1567,107 @@ namespace ufo intConsts.insert(lexical_cast (ex->right())); } } + + inline static bool isSymmetric (Expr exp) + { + return isOpX(exp); + } + + template static void computeTransitiveClosure(ExprSet& r, ExprSet& tr) + { + for (auto &a : r) + { + if (isOpX(a)) + { + for (auto &b : tr) + { + if (isOpX(b)) + { + if (a->left() == b->right()) tr.insert(mk(b->left(), a->right())); + if (b->left() == a->right()) tr.insert(mk(a->left(), b->right())); + + if (isSymmetric(a)) + { + if (a->left() == b->left()) tr.insert(mk(a->right(), b->right())); + if (a->right() == b->right()) tr.insert(mk(a->left(), b->left())); + } + } + } + } + tr.insert(a); + } + } + + struct TransClAdder + { + TransClAdder () {}; + + Expr operator() (Expr exp) + { + if (isOpX(exp)) + { + ExprSet cnjs; + ExprSet trCnjs; + getConj(exp, cnjs); + computeTransitiveClosure(cnjs, trCnjs); + computeTransitiveClosure(cnjs, trCnjs); + computeTransitiveClosure(cnjs, trCnjs); + computeTransitiveClosure(cnjs, trCnjs); + computeTransitiveClosure(cnjs, trCnjs); + return conjoin(trCnjs, exp->getFactory()); + } + + return exp; + } + }; + + inline static Expr enhanceWithMoreClauses (Expr exp) + { + RW tr(new TransClAdder()); + return dagVisit (tr, exp); + } + + inline static Expr propagateEqualities (Expr exp) + { + ExprSet cnjs; + ExprSet newCnjs; + ExprSet eqs; + ExprSet trEqs; + + getConj(exp, cnjs); + + for (auto &a : cnjs) if (isOpX(a)) eqs.insert(a); + if (eqs.size() == 0) return exp; + + computeTransitiveClosure(eqs, trEqs); + + for (auto &a : cnjs) + { + if (isOpX(a)) + { + newCnjs.insert(a); + } + else + { + Expr neg = mkNeg(a); + for (auto &b : trEqs) + { + Expr repl1 = replaceAll(neg, b->left(), b->right()); + Expr repl2 = replaceAll(neg, b->right(), b->left()); + bool eq1 = (repl1 == neg); + bool eq2 = (repl2 == neg); + bool eq3 = (repl2 == repl1); + + if (eq1 && eq2 && eq3) newCnjs.insert(a); + else if (eq1) newCnjs.insert (mk (mk(neg, repl2))); + else if (eq2) newCnjs.insert (mk (mk(neg, repl1))); + else newCnjs.insert(mk (mk(neg, mk(repl1, repl2)))); + } + } + } + + return conjoin(newCnjs, exp->getFactory()); + } } #endif diff --git a/include/deep/CodeSampler.hpp b/include/deep/CodeSampler.hpp index 0730e99bc..86acd0ee7 100644 --- a/include/deep/CodeSampler.hpp +++ b/include/deep/CodeSampler.hpp @@ -322,7 +322,8 @@ namespace ufo // for the query: add a negation of the entire non-recursive part: if (hr.isQuery) { - Expr massaged = unfoldITE(mkNeg(hr.body)); + Expr massaged = propagateEqualities(hr.body); + massaged = unfoldITE(mkNeg(massaged)); massaged = convertToGEandGT(massaged); populateArityAndTemplates(massaged); } From ffef311be003406483c3e6060eac9bdb9805c5e8 Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Sat, 20 May 2017 09:27:59 -0700 Subject: [PATCH 018/236] merged safe benchmarks from sam-contribs to the main bench; removed unsafe --- ..._true-unreach-call_true-termination.c.smt2 | 0 ...nt_true-unreach-call_true-termination.smt2 | 4 +-- ..._2_true-unreach-call_true-termination.smt2 | 3 +- ..._k_true-unreach-call_true-termination.smt2 | 4 +-- .../const_false-unreach-call1.c.smt2 | 32 ----------------- .../diamond_false-unreach-call1.c.smt2 | 34 ------------------- ...alse-unreach-call1_true-termination.c.smt2 | 25 -------------- ...alse-unreach-call2_true-termination.c.smt2 | 26 -------------- 8 files changed, 6 insertions(+), 122 deletions(-) rename bench_horn/{sam-contribs => }/count_by_1_true-unreach-call_true-termination.c.smt2 (100%) rename bench_horn/{sam-contribs => }/count_by_1_variant_true-unreach-call_true-termination.smt2 (90%) rename bench_horn/{sam-contribs => }/count_by_2_true-unreach-call_true-termination.smt2 (87%) rename bench_horn/{sam-contribs => }/count_by_k_true-unreach-call_true-termination.smt2 (94%) delete mode 100644 bench_horn/sam-contribs/const_false-unreach-call1.c.smt2 delete mode 100644 bench_horn/sam-contribs/diamond_false-unreach-call1.c.smt2 delete mode 100644 bench_horn/sam-contribs/underapprox_false-unreach-call1_true-termination.c.smt2 delete mode 100644 bench_horn/sam-contribs/underapprox_false-unreach-call2_true-termination.c.smt2 diff --git a/bench_horn/sam-contribs/count_by_1_true-unreach-call_true-termination.c.smt2 b/bench_horn/count_by_1_true-unreach-call_true-termination.c.smt2 similarity index 100% rename from bench_horn/sam-contribs/count_by_1_true-unreach-call_true-termination.c.smt2 rename to bench_horn/count_by_1_true-unreach-call_true-termination.c.smt2 diff --git a/bench_horn/sam-contribs/count_by_1_variant_true-unreach-call_true-termination.smt2 b/bench_horn/count_by_1_variant_true-unreach-call_true-termination.smt2 similarity index 90% rename from bench_horn/sam-contribs/count_by_1_variant_true-unreach-call_true-termination.smt2 rename to bench_horn/count_by_1_variant_true-unreach-call_true-termination.smt2 index a132dafb6..9e583db39 100644 --- a/bench_horn/sam-contribs/count_by_1_variant_true-unreach-call_true-termination.smt2 +++ b/bench_horn/count_by_1_variant_true-unreach-call_true-termination.smt2 @@ -7,7 +7,7 @@ (rule (=> (and (= i 0) - (not (= i LRG)) + (< i LRG) ) (itp i LRG) )) @@ -16,7 +16,7 @@ (and (itp i_ LRG) (= i (+ 1 i_)) - (not (= i LRG)) + (< i LRG) ) (itp i LRG) )) diff --git a/bench_horn/sam-contribs/count_by_2_true-unreach-call_true-termination.smt2 b/bench_horn/count_by_2_true-unreach-call_true-termination.smt2 similarity index 87% rename from bench_horn/sam-contribs/count_by_2_true-unreach-call_true-termination.smt2 rename to bench_horn/count_by_2_true-unreach-call_true-termination.smt2 index 9ca28d8f4..32b2f16fc 100644 --- a/bench_horn/sam-contribs/count_by_2_true-unreach-call_true-termination.smt2 +++ b/bench_horn/count_by_2_true-unreach-call_true-termination.smt2 @@ -5,7 +5,9 @@ (declare-rel fail ()) (rule (=> +(and (= i 0) + (= LRG 256)) ; LARGE_INT is large and a power of 2 (itp i LRG) )) @@ -23,7 +25,6 @@ (itp i LRG) (>= i LRG) ; stop condition (redun.) (not (= i LRG)) ; assert negation - (= LRG 256) ; LARGE_INT is large and a power of 2 ) fail)) (query fail :print-certificate true) diff --git a/bench_horn/sam-contribs/count_by_k_true-unreach-call_true-termination.smt2 b/bench_horn/count_by_k_true-unreach-call_true-termination.smt2 similarity index 94% rename from bench_horn/sam-contribs/count_by_k_true-unreach-call_true-termination.smt2 rename to bench_horn/count_by_k_true-unreach-call_true-termination.smt2 index a0624ca2f..4010001ec 100644 --- a/bench_horn/sam-contribs/count_by_k_true-unreach-call_true-termination.smt2 +++ b/bench_horn/count_by_k_true-unreach-call_true-termination.smt2 @@ -7,7 +7,8 @@ (rule (=> (and - (and (<= 0 k) (<= k 10)) + (and (<= 0 k) (<= k 10) ) + (= LRG 256) ; LARGE_INT is large and a power of 2 (= i 0) ) (itp i k LRG) @@ -27,7 +28,6 @@ (itp i k LRG) (not (< i (* LRG k))) ; stop cond. (redun.) (not (= i (* LRG k))) ; assert negation - (= LRG 256) ; LARGE_INT is large and a power of 2 ) fail )) diff --git a/bench_horn/sam-contribs/const_false-unreach-call1.c.smt2 b/bench_horn/sam-contribs/const_false-unreach-call1.c.smt2 deleted file mode 100644 index 3eb4d730c..000000000 --- a/bench_horn/sam-contribs/const_false-unreach-call1.c.smt2 +++ /dev/null @@ -1,32 +0,0 @@ -(declare-var x Int) -(declare-var x_ Int) -(declare-var y Int) -(declare-var y_ Int) -(declare-rel itp (Int Int)) -(declare-rel fail ()) - -(rule (=> - ; (and (= y 1) (= x 0)) - (and (= y 0) (= x 1)) - (itp y x))) - -(rule (=> - (and - (itp y_ x_) - (>= y_ 0) ; unsigned - (< y_ 1024) ; (not (<= 1024 (:var 1))) - (= y (+ 1 y_)) - (= x 0) - ) - (itp y x))) - -(rule (=> - (and - (itp y_ x_) - (>= y_ 0) ; unsigned - (>= y_ 1024) - (not (= x_ 1)) - ) - fail)) - -(query fail :print-certificate true) diff --git a/bench_horn/sam-contribs/diamond_false-unreach-call1.c.smt2 b/bench_horn/sam-contribs/diamond_false-unreach-call1.c.smt2 deleted file mode 100644 index 84d9678eb..000000000 --- a/bench_horn/sam-contribs/diamond_false-unreach-call1.c.smt2 +++ /dev/null @@ -1,34 +0,0 @@ -(declare-var x0 Int) -(declare-var x1 Int) -(declare-var x2 Int) -(declare-var x3 Int) -(declare-rel itp (Int Int Int)) -(declare-rel fail ()) - -(rule (=> - (and - (itp x0 x2 x1) - (or - (<= 99 (+ x2 x1)) - (not (>= (+ x2 x1) 0)) - ) - (not (= (mod (+ (mod x2 2) (mod x1 2)) 2) x0)) - ) fail)) - -(rule (=> - (and - (= x0 (ite (= x1 0) 1 2)) - (= x1 (mod x2 2)) - ) - (itp x1 x0 x0))) - -(rule (=> - (and - (itp x1 x0 x3) - (>= x2 0) - (not (<= 99 x2)) - (= x2 (+ x0 x3)) - ) - (itp x1 x0 x2))) - -(query fail :print-certificate true) diff --git a/bench_horn/sam-contribs/underapprox_false-unreach-call1_true-termination.c.smt2 b/bench_horn/sam-contribs/underapprox_false-unreach-call1_true-termination.c.smt2 deleted file mode 100644 index a2c4dbecc..000000000 --- a/bench_horn/sam-contribs/underapprox_false-unreach-call1_true-termination.c.smt2 +++ /dev/null @@ -1,25 +0,0 @@ -(declare-var x Int) -(declare-var x_ Int) -(declare-var y Int) -(declare-var y_ Int) -(declare-rel itp (Int Int)) -(declare-rel fail ()) - -(rule (=> (and (= x 1) (= y 2)) - (itp x y))) - -(rule (=> - (and - (itp x_ y_) - (>= x 0) ; unsigned - (>= y 0) ; unsigned - (< x_ 6) - (= x (+ 1 x_)) - (= y (* 2 y_)) - ) - (itp x y))) - -(rule (=> (and (itp x y) (= y 64)) - fail)) - -(query fail :print-certificate true) diff --git a/bench_horn/sam-contribs/underapprox_false-unreach-call2_true-termination.c.smt2 b/bench_horn/sam-contribs/underapprox_false-unreach-call2_true-termination.c.smt2 deleted file mode 100644 index 03727c3e9..000000000 --- a/bench_horn/sam-contribs/underapprox_false-unreach-call2_true-termination.c.smt2 +++ /dev/null @@ -1,26 +0,0 @@ -(declare-var x Int) -(declare-var x_ Int) -(declare-var y Int) -(declare-var y_ Int) -(declare-rel itp (Int Int)) -(declare-rel fail ()) - -; x == 1 && y == 2 after first body exec -(rule (=> (and (= x 1) (= y 2)) - (itp x y))) - -(rule (=> - (and - (itp x_ y_) - (>= x 0) ; unsigned - (>= y 0) ; unsigned - (< x_ 6) - (= x (+ 1 x_)) - (= y (* 2 y_)) - ) - (itp x y))) - -(rule (=> (and (itp x y) (= x 6)) - fail)) - -(query fail :print-certificate true) From 704700b5ef6b5ea1aba30db31cde636f63b0fb78 Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Sun, 21 May 2017 07:45:04 -0700 Subject: [PATCH 019/236] fixed statistics mining for multiple invariants --- bench_horn/dillig12.smt2 | 57 ++++++++++++++++++++++++++++++++++++ include/deep/CodeSampler.hpp | 28 ++++++++++++++---- 2 files changed, 80 insertions(+), 5 deletions(-) create mode 100644 bench_horn/dillig12.smt2 diff --git a/bench_horn/dillig12.smt2 b/bench_horn/dillig12.smt2 new file mode 100644 index 000000000..40f3efaec --- /dev/null +++ b/bench_horn/dillig12.smt2 @@ -0,0 +1,57 @@ +(declare-rel FUN (Int Int Int Int Int)) +(declare-rel SAD (Int Int)) +(declare-var m Int) +(declare-var m1 Int) +(declare-var n Int) +(declare-var n1 Int) +(declare-var s Int) +(declare-var s1 Int) +(declare-var t Int) +(declare-var t1 Int) +(declare-var t2 Int) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) +(declare-var flag Int) + +(declare-rel fail ()) + +(rule (=> (and (= m 0) (= n 0) (= s 0) (= t 0)) (FUN m n s t flag))) + +(rule (=> + (and + (FUN m n s t flag) + (= m1 (+ m 1)) + (= n1 (+ n 1)) + (= s1 (+ s m1)) + (= t1 (+ t n1)) + (= t2 (ite (= flag 1) (+ t1 m1) t1)) + ) + (FUN m1 n1 s1 t2 flag) + ) +) + +(rule (=> + (and + (FUN m n s t flag) + (= x (ite (= flag 1) (+ t (* -2 s) 2) 1)) + (= y 0) + ) + (SAD x y) +)) + +(rule (=> + (and + (SAD x y) + (<= y x) + (or (= y1 (+ y 1)) (= y1 (+ y 2))) + ) + (SAD x y1) + ) +) + +(rule (=> (and (SAD x y) (>= y x) (>= y 5)) fail)) + +(query fail :print-certificate true) + diff --git a/include/deep/CodeSampler.hpp b/include/deep/CodeSampler.hpp index 86acd0ee7..ea8150960 100644 --- a/include/deep/CodeSampler.hpp +++ b/include/deep/CodeSampler.hpp @@ -152,8 +152,15 @@ namespace ufo term = rewriteMultAdd(term); - term = findNonlinAndRewrite(term, hr.srcVars, invVars, extraVars); - term = findNonlinAndRewrite(term, hr.dstVars, invVars, extraVars); + if (hr.srcRelation == invDecl->first()) + { + term = findNonlinAndRewrite(term, hr.srcVars, invVars, extraVars); + } + + if (hr.dstRelation == invDecl->first()) + { + term = findNonlinAndRewrite(term, hr.dstVars, invVars, extraVars); + } for (auto &a : extraVars) actualVars.insert(a.second); @@ -161,10 +168,21 @@ namespace ufo if (actualVars.size() == 0 || isTautology(term)) return; // split each term to two samples (for srcVars and dstVars) - addSampleHlp(term, hr.srcVars, actualVars); - addSampleHlp(term, hr.dstVars, actualVars); + + if (hr.srcRelation == invDecl->first()) + { + addSampleHlp(term, hr.srcVars, actualVars); + } - processTransition(term, hr.srcVars, hr.dstVars, actualVars); + if (hr.dstRelation == invDecl->first()) + { + addSampleHlp(term, hr.dstVars, actualVars); + } + + if (hr.dstRelation == hr.srcRelation) + { + processTransition(term, hr.srcVars, hr.dstVars, actualVars); + } } void populateArityAndTemplates(Expr term) From be6b108736e52ad703c17b134d8c9f45ebcac59f Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Sun, 21 May 2017 15:16:15 -0700 Subject: [PATCH 020/236] fixed non-terminating ite-handling when the guard has negation --- bench_horn/trex3.smt2 | 40 ++++++++++++++++++++++++++++++++++++++++ include/ae/ExprSimpl.hpp | 2 +- 2 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 bench_horn/trex3.smt2 diff --git a/bench_horn/trex3.smt2 b/bench_horn/trex3.smt2 new file mode 100644 index 000000000..a47e37c2d --- /dev/null +++ b/bench_horn/trex3.smt2 @@ -0,0 +1,40 @@ +(declare-rel FUN (Int Int Int Int Int Int Int Int)) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) +(declare-var d1 Int) +(declare-var d2 Int) +(declare-var d3 Int) +(declare-var c1 Int) +(declare-var c2 Int) +(declare-var c3 Int) +(declare-var c4 Int) + +(declare-rel fail ()) + +(rule (=> (and (>= x1 0) (>= x2 0) (>= x3 0) + ( = d1 1) ( = d2 1) ( = d3 1)) (FUN x1 x2 x3 d1 d2 d3 c1 c2))) + +(rule (=> + (and + (FUN x1 x2 x3 d1 d2 d3 c1 c2) + (> x1 0) + (> x2 0) + (> x3 0) + (= x4 (ite (= c1 1) (- x1 d1) x1)) + (= x5 (ite (and (not (= c1 1)) (= c2 1)) (- x2 d2) x2)) + (= x6 (ite (and (not (= c1 1)) (not (= c2 1))) (- x3 d3) x3)) + ) + (FUN x4 x5 x6 d1 d2 d3 c3 c4) + ) +) + +(rule (=> (and (FUN x1 x2 x3 d1 d2 d3 c1 c2) + (not (and (> x1 0) (> x2 0) (> x3 0))) + (not (or (= x1 0) (= x2 0) (= x3 0)))) fail)) + +(query fail :print-certificate true) + diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index 22a7800e0..d002c87c8 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -1238,7 +1238,7 @@ namespace ufo } else if (isOpX(term)) { - return mk(unfoldITE(term->last())); + return mkNeg(unfoldITE(term->last())); } else if (isOpX(term) || isOpX(term)) { From 1f758adc70c7664eae8bebaddbda0508a6d465f2 Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Mon, 22 May 2017 07:59:06 -0700 Subject: [PATCH 021/236] added more benchmarks --- bench_horn/bouncy_one_counter.smt2 | 42 ++++++++++++++++++ bench_horn/bouncy_symmetry.smt2 | 40 +++++++++++++++++ bench_horn/bouncy_three_counters_merged.smt2 | 31 +++++++++++++ bench_horn/bouncy_two_counters_equality.smt2 | 43 +++++++++++++++++++ .../bouncy_two_counters_inequality.smt2 | 43 +++++++++++++++++++ bench_horn/dillig15.smt2 | 28 ++++++++++++ bench_horn/dillig17.smt2 | 34 +++++++++++++++ bench_horn/dillig19.smt2 | 29 +++++++++++++ bench_horn/dillig24.smt2 | 37 ++++++++++++++++ bench_horn/dillig25.smt2 | 41 ++++++++++++++++++ bench_horn/dillig28.smt2 | 39 +++++++++++++++++ bench_horn/dtuc.smt2 | 42 ++++++++++++++++++ bench_horn/ex14.smt2 | 28 ++++++++++++ bench_horn/ex7.smt2 | 29 +++++++++++++ bench_horn/fig3.smt2 | 29 +++++++++++++ bench_horn/fig9.smt2 | 26 +++++++++++ bench_horn/gcd_1.smt2 | 27 ++++++++++++ bench_horn/gcd_2.smt2 | 27 ++++++++++++ bench_horn/gcd_3.smt2 | 27 ++++++++++++ ...{nonlin_minus.smt2 => nonlin_minus_1.smt2} | 0 bench_horn/nonlin_minus_2.smt2 | 29 +++++++++++++ .../{nonlin_mod.smt2 => nonlin_mod_1.smt2} | 0 bench_horn/nonlin_mod_2.smt2 | 22 ++++++++++ bench_horn/nonlin_square.smt2 | 26 +++++++++++ bench_horn/trex1.smt2 | 25 +++++++++++ bench_horn/w1.smt2 | 25 +++++++++++ bench_horn/w2.smt2 | 26 +++++++++++ 27 files changed, 795 insertions(+) create mode 100644 bench_horn/bouncy_one_counter.smt2 create mode 100644 bench_horn/bouncy_symmetry.smt2 create mode 100644 bench_horn/bouncy_three_counters_merged.smt2 create mode 100644 bench_horn/bouncy_two_counters_equality.smt2 create mode 100644 bench_horn/bouncy_two_counters_inequality.smt2 create mode 100644 bench_horn/dillig15.smt2 create mode 100644 bench_horn/dillig17.smt2 create mode 100644 bench_horn/dillig19.smt2 create mode 100644 bench_horn/dillig24.smt2 create mode 100644 bench_horn/dillig25.smt2 create mode 100644 bench_horn/dillig28.smt2 create mode 100644 bench_horn/dtuc.smt2 create mode 100644 bench_horn/ex14.smt2 create mode 100644 bench_horn/ex7.smt2 create mode 100644 bench_horn/fig3.smt2 create mode 100644 bench_horn/fig9.smt2 create mode 100644 bench_horn/gcd_1.smt2 create mode 100644 bench_horn/gcd_2.smt2 create mode 100644 bench_horn/gcd_3.smt2 rename bench_horn/{nonlin_minus.smt2 => nonlin_minus_1.smt2} (100%) create mode 100644 bench_horn/nonlin_minus_2.smt2 rename bench_horn/{nonlin_mod.smt2 => nonlin_mod_1.smt2} (100%) create mode 100644 bench_horn/nonlin_mod_2.smt2 create mode 100644 bench_horn/nonlin_square.smt2 create mode 100644 bench_horn/trex1.smt2 create mode 100644 bench_horn/w1.smt2 create mode 100644 bench_horn/w2.smt2 diff --git a/bench_horn/bouncy_one_counter.smt2 b/bench_horn/bouncy_one_counter.smt2 new file mode 100644 index 000000000..d004a6c43 --- /dev/null +++ b/bench_horn/bouncy_one_counter.smt2 @@ -0,0 +1,42 @@ +(declare-rel itp1 (Int Int Int)) +(declare-rel itp2 (Int Int Int)) + +(declare-var x1 Int) +(declare-var y1 Int) +(declare-var z1 Int) +(declare-var x2 Int) +(declare-var y2 Int) +(declare-var z2 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= y1 0) (= z1 0)) (itp1 x1 y1 z1))) + +(rule (=> + (and + (itp1 x1 y1 z1) + (= x2 (+ x1 1)) + (= y2 (+ y1 1)) + (= z2 (- z1 2)) + ) + (itp1 x2 y2 z2) + ) +) + +(rule (=> (itp1 x1 y1 z1) (itp2 x1 y1 z1))) + +(rule (=> + (and + (itp2 x1 y1 z1) + (= x2 (- x1 1)) + (= y2 (- y1 3)) + (= z2 (+ z1 2)) + ) + (itp2 x2 y2 z2) + ) +) + +(rule (=> (and (itp2 x1 y1 z1) (not (=> (<= x1 0) (and (>= z1 0) (<= y1 0))))) fail)) + +(query fail :print-certificate true) + diff --git a/bench_horn/bouncy_symmetry.smt2 b/bench_horn/bouncy_symmetry.smt2 new file mode 100644 index 000000000..0e7ad3782 --- /dev/null +++ b/bench_horn/bouncy_symmetry.smt2 @@ -0,0 +1,40 @@ +(declare-rel itp1 (Int Int)) +(declare-rel itp2 (Int Int)) + +(declare-var x1 Int) +(declare-var y1 Int) +(declare-var x2 Int) +(declare-var y2 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= y1 0)) (itp1 x1 y1))) + +(rule (=> + (and + (itp1 x1 y1) + (= x2 (+ x1 1)) + (= y2 (+ y1 1)) + ) + (itp1 x2 y2) + ) +) + +(rule (=> (itp1 x1 y1) (itp2 x1 y1))) + +(rule (=> + (and + (itp2 x1 y1) + (= x2 (- x1 1)) + (= y2 (- y1 1)) + ) + (itp2 x2 y2) + ) +) + + +(rule (=> (and (itp2 x1 y1 ) (not (=> (<= x1 0) (<= y1 0)))) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/bouncy_three_counters_merged.smt2 b/bench_horn/bouncy_three_counters_merged.smt2 new file mode 100644 index 000000000..57faa6a69 --- /dev/null +++ b/bench_horn/bouncy_three_counters_merged.smt2 @@ -0,0 +1,31 @@ +(declare-rel itp1 (Int Int Int Int)) + +(declare-var count1 Int) +(declare-var count2 Int) +(declare-var count3 Int) +(declare-var count4 Int) +(declare-var count5 Int) +(declare-var count6 Int) +(declare-var z1 Int) +(declare-var z2 Int) + +(declare-rel fail ()) + +(rule (=> (and (= count1 count3) (= count1 count5) (= count3 0) (= z1 count1)) (itp1 count1 count3 count5 z1))) + +(rule (=> + (and + (itp1 count1 count3 count5 z1) + (or + (and (= count2 (+ count1 1)) (= count4 count3) (= count6 count5) (= z2 (+ z1 1))) + (and (= count4 (+ count3 1)) (= count2 count1) (= count6 count5) (= z2 (- z1 1))) + (and (= count5 (+ count5 1)) (= count2 count1) (= count4 count3) (= z2 (+ z1 1))) + ) + ) + (itp1 count2 count4 count6 z2) + ) +) + +(rule (=> (and (itp1 count1 count3 count5 z1) (= count1 count3) (= count1 count5) (not (= z1 count1))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/bouncy_two_counters_equality.smt2 b/bench_horn/bouncy_two_counters_equality.smt2 new file mode 100644 index 000000000..3eaaf304e --- /dev/null +++ b/bench_horn/bouncy_two_counters_equality.smt2 @@ -0,0 +1,43 @@ +(declare-rel itp1 (Int Int Int)) +(declare-rel itp2 (Int Int Int)) +(declare-rel itp3 (Int)) +(declare-rel itp4 (Int)) + +(declare-var x1 Int) +(declare-var y1 Int) +(declare-var z1 Int) +(declare-var x2 Int) +(declare-var y2 Int) +(declare-var z2 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= y1 0) (= z1 0)) (itp1 x1 y1 z1))) + +(rule (=> + (and + (itp1 x1 y1 z1) + (= x2 (+ x1 1)) + (= z2 (+ z1 1)) + (= y2 y1) + ) + (itp1 x2 y2 z2) + ) +) + +(rule (=> (itp1 x1 y1 z1) (itp2 x1 y1 z1))) + +(rule (=> + (and + (itp2 x1 y1 z1) + (= y2 (+ y1 1)) + (= z2 (- z1 1)) + (= x2 x1) + ) + (itp2 x2 y2 z2) + ) +) + +(rule (=> (and (itp2 x1 y1 z1) (= x1 y1) (not (= z1 0))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/bouncy_two_counters_inequality.smt2 b/bench_horn/bouncy_two_counters_inequality.smt2 new file mode 100644 index 000000000..a3c93022e --- /dev/null +++ b/bench_horn/bouncy_two_counters_inequality.smt2 @@ -0,0 +1,43 @@ +(declare-rel itp1 (Int Int Int)) +(declare-rel itp2 (Int Int Int)) +(declare-rel itp3 (Int)) +(declare-rel itp4 (Int)) + +(declare-var x1 Int) +(declare-var y1 Int) +(declare-var z1 Int) +(declare-var x2 Int) +(declare-var y2 Int) +(declare-var z2 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= y1 0) (= z1 0)) (itp1 x1 y1 z1))) + +(rule (=> + (and + (itp1 x1 y1 z1) + (= x2 (+ x1 1)) + (= z2 (+ z1 1)) + (= y2 y1) + ) + (itp1 x2 y2 z2) + ) +) + +(rule (=> (itp1 x1 y1 z1) (itp2 x1 y1 z1))) + +(rule (=> + (and + (itp2 x1 y1 z1) + (= y2 (+ y1 1)) + (= z2 (- z1 1)) + (= x2 x1) + ) + (itp2 x2 y2 z2) + ) +) + +(rule (=> (and (itp2 x1 y1 z1) (< x1 y1) (not (< z1 0))) fail)) + +(query fail :print-certificate true) diff --git a/bench_horn/dillig15.smt2 b/bench_horn/dillig15.smt2 new file mode 100644 index 000000000..0b79192b5 --- /dev/null +++ b/bench_horn/dillig15.smt2 @@ -0,0 +1,28 @@ +(declare-rel itp (Int Int Int)) +(declare-var j Int) +(declare-var k Int) +(declare-var n Int) +(declare-var j1 Int) +(declare-var k1 Int) +(declare-var n1 Int) + +(declare-rel fail ()) + +(rule (=> (and (>= n 1) (>= k n) (= j 0)) (itp j k n))) + +(rule (=> + (and + (itp j k n) + (<= j (- n 1)) + (= j1 (+ j 1)) + (= k1 (- k 1)) + ) + (itp j1 k1 n) + ) +) + + +(rule (=> (and (itp j k n) (>= j n) (<= k -1)) fail)) + +(query fail :print-certificate true) + diff --git a/bench_horn/dillig17.smt2 b/bench_horn/dillig17.smt2 new file mode 100644 index 000000000..224f0df82 --- /dev/null +++ b/bench_horn/dillig17.smt2 @@ -0,0 +1,34 @@ +(declare-rel WRAP (Int Int Int Int)) +(declare-rel NEST (Int Int Int Int)) +(declare-var i Int) +(declare-var j Int) +(declare-var k Int) +(declare-var n Int) +(declare-var i1 Int) +(declare-var j1 Int) +(declare-var k1 Int) +(declare-var n1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= k 1) (= i 1) (= j 0)) (WRAP i j k n))) + +(rule (=> (and (WRAP i j k n) (<= i (- n 1)) (= j1 0)) (NEST i j1 k n))) + +(rule (=> + (and + (NEST i j k n) + (<= j (- i 1)) + (= k1 (+ k (- i j))) + (= j1 (+ j 1)) + ) + (NEST i j1 k1 n) + ) +) + +(rule (=> (and (NEST i j k n) (>= j i) (= i1 (+ i 1))) (WRAP i1 j k n))) + +(rule (=> (and (WRAP i j k n) (> i (- n 1)) (>= i n) (<= k (- n 1))) fail)) + +(query fail :print-certificate true) + diff --git a/bench_horn/dillig19.smt2 b/bench_horn/dillig19.smt2 new file mode 100644 index 000000000..092a5563c --- /dev/null +++ b/bench_horn/dillig19.smt2 @@ -0,0 +1,29 @@ +(declare-rel itp (Int Int Int Int)) +(declare-var x Int) +(declare-var y Int) +(declare-var m Int) +(declare-var n Int) +(declare-var x1 Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x 0) (= y m) (>= n 0) (>= m 0) (< m (- n 1))) (itp x y m n))) + +(rule (=> + (and + (itp x y m n) + (<= x (- n 1)) + (= x1 (+ x 1)) + (= y1 (ite (>= x1(+ m 1)) (+ y 1) y)) + (or (>= x1 (+ m 1)) (<= x1 m)) + ) + (itp x1 y m n) + ) +) + + +(rule (=> (and (itp x y m n) (> x (- n 1)) (>= y (+ n 1))) fail)) + +(query fail :print-certificate true) + diff --git a/bench_horn/dillig24.smt2 b/bench_horn/dillig24.smt2 new file mode 100644 index 000000000..a77002c3d --- /dev/null +++ b/bench_horn/dillig24.smt2 @@ -0,0 +1,37 @@ +(declare-rel WRAP (Int Int Int Int)) +(declare-rel NEST (Int Int Int Int)) +(declare-rel WEEE (Int Int Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) +(declare-var k Int) +(declare-var k1 Int) +(declare-var n Int) + +(declare-rel fail ()) + +(rule (=> (= i 0) (WRAP i j k n))) + +(rule (=> (and (WRAP i j k n) (< i n) (= j i)) (NEST i j k n))) + +(rule (=> (and (NEST i j k n) (= k j) (< j n)) (WEEE i j k n))) + +(rule (=> + (and + (WEEE i j k n) + (< k n) + (= k1 (+ k 1)) + ) + (WEEE i j k1 n) + ) +) + +(rule (=> (and (WEEE i j k n) (= j1 (+ j 1)) (= k n)) (NEST i j1 k n))) + +(rule (=> (and (NEST i j k n) (= i1 (+ i 1)) (= j n)) (WRAP i1 j k n))) + +(rule (=> (and (WEEE i j k n) (<= k (- i 1))) fail)) + +(query fail :print-certificate true) + diff --git a/bench_horn/dillig25.smt2 b/bench_horn/dillig25.smt2 new file mode 100644 index 000000000..b7d00241f --- /dev/null +++ b/bench_horn/dillig25.smt2 @@ -0,0 +1,41 @@ +(declare-rel WRAP (Int Int Int Int)) +(declare-rel NEST (Int Int Int Int)) +(declare-var i Int) +(declare-var j Int) +(declare-var i1 Int) +(declare-var j1 Int) +(declare-var x Int) +(declare-var y Int) +(declare-var x1 Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x 0) (= y 0) (= i 0) (= j 0)) (WRAP x y i j))) + +(rule (=> (WRAP x y i j) (NEST x y i j))) + +(rule (=> + (and + (NEST x y i j) + (= i1 (ite (= x y) (+ i 1) i)) + (= j1 (ite (= x y) j (+ j 1))) + ) + (NEST x y i1 j1) + ) +) + +(rule (=> + (and + (NEST x y i j) + (= y1 (+ y 1)) + (= x1 (ite (>= i j) (+ x 1) x)) + ) + (WRAP x1 y1 i j) + ) +) + +(rule (=> (and (WRAP x y i j) (<= i (- j 1))) fail)) + +(query fail :print-certificate true) + diff --git a/bench_horn/dillig28.smt2 b/bench_horn/dillig28.smt2 new file mode 100644 index 000000000..56f359b18 --- /dev/null +++ b/bench_horn/dillig28.smt2 @@ -0,0 +1,39 @@ +(declare-rel FUN (Int Int Int)) +(declare-rel SAD (Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) +(declare-var n Int) + +(declare-rel fail ()) + +(rule (=> (and (= x 0) (= y 0) (= n 0)) (FUN x y n))) + +(rule (=> + (and + (FUN x y n) + (= x1 (+ x 1)) + (= y1 (+ y 1)) + ) + (FUN x1 y1 n) + ) +) + +(rule (=> (FUN x y n) (SAD x y n))) + +(rule (=> + (and + (SAD x y n) + (or (<= x (- n 1)) (>= x (+ n 1))) + (= x1 (- x 1)) + (= y1 (- y 1)) + ) + (SAD x1 y1 n) + ) +) + +(rule (=> (and (SAD x y n) (= x n) (not (= y n))) fail)) + +(query fail :print-certificate true) + diff --git a/bench_horn/dtuc.smt2 b/bench_horn/dtuc.smt2 new file mode 100644 index 000000000..2ba9d647e --- /dev/null +++ b/bench_horn/dtuc.smt2 @@ -0,0 +1,42 @@ +(declare-rel FUN (Int Int Int Int)) +(declare-rel SAD (Int Int Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) +(declare-var k Int) +(declare-var k1 Int) +(declare-var n Int) + +(declare-rel fail ()) + +(rule (=> (and (= i 0) (= k 0)) (FUN i j k n))) + +(rule (=> + (and + (FUN i j k n) + (< i n) + (= i1 (+ i 1)) + (= k1 (+ k 1)) + ) + (FUN i1 j k1 n) + ) +) + +(rule (=> (and (FUN i j k n) (= i n) (= j1 n)) (SAD i j1 k n))) + +(rule (=> + (and + (SAD i j k n) + (> j 0) + (= k1 (- k 1)) + (= j1 (- j 1)) + ) + (SAD i j1 k1 n) + ) +) + +(rule (=> (and (SAD i j k n) (> j 0) (not (> k 0))) fail)) + +(query fail :print-certificate true) + diff --git a/bench_horn/ex14.smt2 b/bench_horn/ex14.smt2 new file mode 100644 index 000000000..c4860076f --- /dev/null +++ b/bench_horn/ex14.smt2 @@ -0,0 +1,28 @@ +(declare-rel itp (Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) +(declare-var n Int) + +(declare-rel fail ()) + +(rule (=> (and (= x 1)) (itp x y n))) + +(rule (=> + (and + (itp x y n) + (<= x n) + (= y1 (- n x)) + (= x1 (+ x 1)) + ) + (itp x1 y1 n) + ) +) + + +(rule (=> (and (itp x y n) (<= x n) (= y1 (- n x)) (or (< y1 0) (>= y1 n))) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/ex7.smt2 b/bench_horn/ex7.smt2 new file mode 100644 index 000000000..e277b47fb --- /dev/null +++ b/bench_horn/ex7.smt2 @@ -0,0 +1,29 @@ +(declare-rel itp (Int Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var len Int) + +(declare-rel fail ()) + +(rule (=> (and (>= x 0) (>= y 0) (< y x) (= len x) (= i 0)) (itp x y i len))) + +(rule (=> + (and + (itp x y i len) + (< i y) + (= i1 (+ i 1)) + ) + (itp x1 y i1 len) + ) +) + + +(rule (=> (and (itp x y i len) (< i y) (or (< i 0) (>= i len))) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/fig3.smt2 b/bench_horn/fig3.smt2 new file mode 100644 index 000000000..e86df1e10 --- /dev/null +++ b/bench_horn/fig3.smt2 @@ -0,0 +1,29 @@ +(declare-rel FUN (Int Int Int Int)) +(declare-var x Int) +(declare-var y Int) +(declare-var lock Int) +(declare-var input Int) +(declare-var x2 Int) +(declare-var y2 Int) +(declare-var lock2 Int) +(declare-var input2 Int) + +(declare-rel fail ()) + +(rule (=> (and (= lock (ite (= input 1) 0 1)) (= x y) (= y2 (ite (= input 1) (+ y 1) y))) + (FUN x y2 lock input))) + +(rule (=> + (and + (FUN x y lock input) + (not (= x y)) + (= lock2 (ite (= input2 1) 0 1)) (= x2 y) (= y2 (ite (= input2 1) (+ y 1) y)) + ) + (FUN x2 y2 lock2 input2) + ) +) + +(rule (=> (and (FUN x y lock input) (= x y) (not (= lock 1))) fail)) + +(query fail :print-certificate true) + diff --git a/bench_horn/fig9.smt2 b/bench_horn/fig9.smt2 new file mode 100644 index 000000000..cc74c64b6 --- /dev/null +++ b/bench_horn/fig9.smt2 @@ -0,0 +1,26 @@ +(declare-rel itp (Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x 0) (= y 0)) (itp x y))) + +(rule (=> + (and + (itp x y) + (>= y 0) + (= y1 (+ y x)) + ) + (itp x y1) + ) +) + + +(rule (=> (and (itp x y) (< y 0)) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/gcd_1.smt2 b/bench_horn/gcd_1.smt2 new file mode 100644 index 000000000..909dc35b1 --- /dev/null +++ b/bench_horn/gcd_1.smt2 @@ -0,0 +1,27 @@ +(declare-rel inv (Int Int Int Int)) +(declare-var A Int) +(declare-var B Int) +(declare-var a Int) +(declare-var b Int) +(declare-var a1 Int) +(declare-var b1 Int) + +(declare-rel fail ()) + +(rule (=> (and (> A 0) (> B 0) (= a A) (= b B)) (inv A B a b))) + +(rule (=> + (and + (inv A B a b) + (not (= a b)) + (= a1 (ite (> a b) (- a b) a)) + (= b1 (ite (not (> a b)) (- b a) b)) + ) + (inv A B a1 b1) + ) +) + +(rule (=> (and (inv A B a b) (= a b) (not (>= a 1))) fail)) + +(query fail :print-certificate true) + diff --git a/bench_horn/gcd_2.smt2 b/bench_horn/gcd_2.smt2 new file mode 100644 index 000000000..3c6d87ad5 --- /dev/null +++ b/bench_horn/gcd_2.smt2 @@ -0,0 +1,27 @@ +(declare-rel inv (Int Int Int Int)) +(declare-var A Int) +(declare-var B Int) +(declare-var a Int) +(declare-var b Int) +(declare-var a1 Int) +(declare-var b1 Int) + +(declare-rel fail ()) + +(rule (=> (and (> A 0) (> B 0) (= a A) (= b B)) (inv A B a b))) + +(rule (=> + (and + (inv A B a b) + (not (= a b)) + (= a1 (ite (> a b) (- a b) a)) + (= b1 (ite (not (> a b)) (- b a) b)) + ) + (inv A B a1 b1) + ) +) + +(rule (=> (and (inv A B a b) (= a b) (not (<= a A))) fail)) + +(query fail :print-certificate true) + diff --git a/bench_horn/gcd_3.smt2 b/bench_horn/gcd_3.smt2 new file mode 100644 index 000000000..d5631187b --- /dev/null +++ b/bench_horn/gcd_3.smt2 @@ -0,0 +1,27 @@ +(declare-rel inv (Int Int Int Int)) +(declare-var A Int) +(declare-var B Int) +(declare-var a Int) +(declare-var b Int) +(declare-var a1 Int) +(declare-var b1 Int) + +(declare-rel fail ()) + +(rule (=> (and (> A 0) (> B 0) (= a A) (= b B)) (inv A B a b))) + +(rule (=> + (and + (inv A B a b) + (not (= a b)) + (= a1 (ite (> a b) (- a b) a)) + (= b1 (ite (not (> a b)) (- b a) b)) + ) + (inv A B a1 b1) + ) +) + +(rule (=> (and (inv A B a b) (= a b) (not (and (<= 1 a) (<= a A)))) fail)) + +(query fail :print-certificate true) + diff --git a/bench_horn/nonlin_minus.smt2 b/bench_horn/nonlin_minus_1.smt2 similarity index 100% rename from bench_horn/nonlin_minus.smt2 rename to bench_horn/nonlin_minus_1.smt2 diff --git a/bench_horn/nonlin_minus_2.smt2 b/bench_horn/nonlin_minus_2.smt2 new file mode 100644 index 000000000..b0bf72c27 --- /dev/null +++ b/bench_horn/nonlin_minus_2.smt2 @@ -0,0 +1,29 @@ +(declare-rel inv (Int Int Int Int)) +(declare-var a Int) +(declare-var b Int) +(declare-var c Int) +(declare-var d Int) +(declare-var c1 Int) +(declare-var d1 Int) + +(declare-rel fail ()) + +(rule (=> (and (> a 0) (> b 0) (= c 0) (= d a)) (inv a b c d))) + +(rule (=> + (and + (inv a b c d) + (>= d b) + (= c1 (+ c 1)) + (= d1 (- d b)) + ) + (inv a b c1 d1) + ) +) + + +(rule (=> (and (inv a b c d) (< c b) (not (= a (+ (* b c) d)))) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/nonlin_mod.smt2 b/bench_horn/nonlin_mod_1.smt2 similarity index 100% rename from bench_horn/nonlin_mod.smt2 rename to bench_horn/nonlin_mod_1.smt2 diff --git a/bench_horn/nonlin_mod_2.smt2 b/bench_horn/nonlin_mod_2.smt2 new file mode 100644 index 000000000..781708666 --- /dev/null +++ b/bench_horn/nonlin_mod_2.smt2 @@ -0,0 +1,22 @@ +(declare-rel inv (Int Int)) +(declare-var a Int) +(declare-var b Int) +(declare-var a1 Int) + +(declare-rel fail ()) + +(rule (=> (and (> b 0) (> a 0) (= (mod a b) 0)) (inv a b))) + +(rule (=> + (and + (inv a b) + (> a b) + (= a1 (- a b)) + ) + (inv a b) + ) +) + +(rule (=> (and (inv a b) (not (= (mod a b) 0))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/nonlin_square.smt2 b/bench_horn/nonlin_square.smt2 new file mode 100644 index 000000000..69720dd00 --- /dev/null +++ b/bench_horn/nonlin_square.smt2 @@ -0,0 +1,26 @@ +(declare-rel inv (Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var n Int) +(declare-var n1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x 0) (= n 0)) (inv x n))) + +(rule (=> + (and + (inv x n) + (= n1 (+ n 1)) + (= x1 (+ x (* 2 n1) -1)) + ) + (inv x1 n1) + ) +) + + +(rule (=> (and (inv x n) (not (= x (* n n)))) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/trex1.smt2 b/bench_horn/trex1.smt2 new file mode 100644 index 000000000..a692b5757 --- /dev/null +++ b/bench_horn/trex1.smt2 @@ -0,0 +1,25 @@ +(declare-rel FUN (Int Int Int Int)) +(declare-var x Int) +(declare-var y Int) +(declare-var k Int) +(declare-var z Int) +(declare-var z1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x 1) (= y 1) (= k 1) (= z 1)) (FUN x y k z))) + +(rule (=> + (and + (FUN x y k z) + (< z k) + (= z1 (* 2 z)) + ) + (FUN x y k z1) + ) +) + +(rule (=> (and (FUN x y k z) (>= z k) (not (>= z 1))) fail)) + +(query fail :print-certificate true) + diff --git a/bench_horn/w1.smt2 b/bench_horn/w1.smt2 new file mode 100644 index 000000000..ffa0ced53 --- /dev/null +++ b/bench_horn/w1.smt2 @@ -0,0 +1,25 @@ +(declare-rel itp (Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var n Int) + +(declare-rel fail ()) + +(rule (=> (and (>= n 0) (= x 0)) (itp x n))) + +(rule (=> + (and + (itp x n) + (< x n) + (= x1 (+ x 1)) + ) + (itp x1 n) + ) +) + + +(rule (=> (and (itp x n) (>= x n) (not (= x n))) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/w2.smt2 b/bench_horn/w2.smt2 new file mode 100644 index 000000000..bf2059662 --- /dev/null +++ b/bench_horn/w2.smt2 @@ -0,0 +1,26 @@ +(declare-rel itp (Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var n Int) +(declare-var m Int) + +(declare-rel fail ()) + +(rule (=> (and (>= n 0) (= x 0)) (itp x m n))) + +(rule (=> + (and + (itp x m n) + (< x1 n) + (= x1 (ite (= m 1) (+ x 1) x)) + ) + (itp x1 m n) + ) +) + + +(rule (=> (and (itp x m n) (>= x n) (not (= x n))) fail)) + + +(query fail :print-certificate true) + From a629b5a02c22b23051c83cdfbce303af00ccd4cc Mon Sep 17 00:00:00 2001 From: Sam Kaufman Date: Wed, 3 May 2017 10:56:28 -0700 Subject: [PATCH 022/236] z3 benchmarking, mcmcify, other benchmark opts --- tools/deep/benchmark-others.py | 116 +++++++++++--- tools/deep/mcmcify.py | 284 +++++++++++++++++++++++++++++++++ tools/deep/smtlibparser.py | 95 +++++++++++ 3 files changed, 470 insertions(+), 25 deletions(-) create mode 100755 tools/deep/mcmcify.py create mode 100644 tools/deep/smtlibparser.py diff --git a/tools/deep/benchmark-others.py b/tools/deep/benchmark-others.py index c7fa563f7..2a8b553b3 100644 --- a/tools/deep/benchmark-others.py +++ b/tools/deep/benchmark-others.py @@ -4,11 +4,13 @@ import re import sys import json +import time import argparse -import subprocess +import subprocess32 from collections import defaultdict +TEN_MINS = 10*60 # in seconds TOTAL_TIME_RE = re.compile(r'\s*[tT]otal [tT]ime:?\s+([\.0-9]*)\s*') @@ -23,16 +25,18 @@ def getenv_or_raise(v): raise Exception("environment variable %s not set" % v) return r + # TODO: Note that /printAssignment and /trace option is for interactive runs and might cause a significant slowdown. -def run_ice(example_path): +def run_ice(example_path, verbose=False, timeout=None): """Returns ICE Boogie.exe on `example_path`. Returns runtime on success.""" assert os.path.isfile(example_path) root = getenv_or_raise("ICE_ROOT") cmd = os.path.join(root, "Boogie", "Binaries-Full", "Boogie.exe") assert os.path.isfile(cmd) - output = subprocess.check_output([cmd, "/nologo", "/noinfer", - "/contractInfer", "/ice", - "/printAssignment", example_path]) + output = subprocess32.check_output([cmd, "/nologo", "/noinfer", + "/contractInfer", "/ice", + "/printAssignment", example_path], + timeout=timeout) for line in output.splitlines()[-10:]: m = TOTAL_TIME_RE.match(line) if m: @@ -42,7 +46,9 @@ def run_ice(example_path): def ice_benchmarks(): root = getenv_or_raise("ICE_ROOT") - bench_root = os.path.join(root, "benchmarks") + bench_root = os.getenv("ICE_BENCH") + if not bench_root: + bench_root = os.path.join(root, "benchmarks") assert os.path.isdir(bench_root) for root, dirs, files in os.walk(bench_root): for f in files: @@ -50,12 +56,15 @@ def ice_benchmarks(): yield os.path.join(root, f) -def run_mcmc(example_dirpath): +def run_mcmc(example_dirpath, verbose=False, timeout=None): root = getenv_or_raise("MCMC_ROOT") cmd = os.path.join(root, "Release", "numerical.exe") assert os.path.isfile(cmd) - output = subprocess.check_output([cmd], cwd=example_dirpath) + output = subprocess32.check_output([cmd], cwd=example_dirpath, + timeout=timeout) for line in output.splitlines()[-10:]: + if verbose: + print(" ---", line) m = TOTAL_TIME_RE.match(line) if m: return float(m.group(1)) @@ -65,7 +74,9 @@ def run_mcmc(example_dirpath): def mcmc_benchmarks(): # Gather all directories with .xml in 'em root = getenv_or_raise("MCMC_ROOT") - bench_root = os.path.join(root, "benchmarks", "numerical") + bench_root = os.getenv("MCMC_BENCH") + if not bench_root: + bench_root = os.path.join(root, "benchmarks", "numerical") assert os.path.isdir(bench_root) for root, dirs, files in os.walk(bench_root): for f in files: @@ -74,6 +85,40 @@ def mcmc_benchmarks(): break +def run_z3(example_path, verbose=False, timeout=None): + root = getenv_or_raise("Z3_ROOT") + cmd = os.path.join(root, "bin", "z3.exe") + assert os.path.isfile(cmd) + opts = [] + if timeout is not None: + opts.append("-T:" + str(int(timeout*1000))) + start = time.time() + output = subprocess32.check_output([cmd] + opts + ['--', example_path], + timeout=(timeout + 5)) + end = time.time() + found_result = False + for line in output.splitlines()[-20:]: + if verbose: + print(" ---", line) + if 'unsat' in line or 'sat' in line: + found_result = True + if not found_result: + raise NoSuccessException("couldn't find 'sat' or 'unsat'") + return end-start + + +def z3_benchmarks(): + root = getenv_or_raise("Z3_ROOT") + bench_root = os.getenv("Z3_BENCH") + if not bench_root: + bench_root = os.path.join(root, "benchmarks") + assert os.path.isdir(bench_root) + for root, dirs, files in os.walk(bench_root): + for f in files: + if os.path.splitext(f)[1].lower() == ".smt2": + yield os.path.join(root, f) + + def name_only(path): return os.path.splitext(os.path.split(path)[1])[0].lower() @@ -93,10 +138,14 @@ def main(): help="run the MCMC solver N iterations") parser.add_argument('--ice', action='store', type=int, default=5, help="run the ICE (Boogie.exe) solver N iterations") + parser.add_argument('--z3', action='store', type=int, default=5, + help="run the Z3 solver N iterations") parser.add_argument("-o", "--outfile", type=str, help="path to file to save times") parser.add_argument('-r', "--resume", action='store_true', help="merge results with outfile if it exists") + parser.add_argument('-e', "--exclude", type=str, nargs='+', + help="benchmarks to exclude; overrides BENCHNAMES") parser.add_argument('-v', "--verbose", action='store_true', help="be noisier about what's going on") args = parser.parse_args() @@ -122,6 +171,8 @@ def main(): orig_sets.append(set(name_only(b) for b in mcmc_benchmarks())) if args.ice: orig_sets.append(set(name_only(b) for b in ice_benchmarks())) + if args.z3: + orig_sets.append(set(name_only(b) for b in z3_benchmarks())) lc_benchnames = orig_sets[0] for s in orig_sets[1:]: lc_benchnames.intersection_update(s) @@ -140,28 +191,43 @@ def main(): raise Exception("No benchmarks for ICE found") b = [x for x in b if name_only(x) in lc_benchnames] others.append(("ICE", run_ice, args.ice, b)) + if args.z3: + b = list(z3_benchmarks()) + if len(b) == 0: + raise Exception("No benchmarks for Z3 found") + b = [x for x in b if name_only(x) in lc_benchnames] + others.append(("Z3", run_z3, args.z3, b)) for n, fn, cnt, benches in others: for b in benches: + if name_only(b) in args.exclude: + continue t_list = times[n][name_only(b)] - while len(t_list) < cnt: + try: + while len(t_list) < cnt: + if args.verbose: + print("Running %s on %s" % (n, name_only(b))) + t_list.append(fn(b, verbose=args.verbose, timeout=TEN_MINS)) + except subprocess32.TimeoutExpired: if args.verbose: - print("Running %s on %s" % (n, name_only(b))) - t_list.append(fn(b)) + print("Timeout expired") except KeyboardInterrupt: pass - - # Save the times - if args.outfile: - with open(args.outfile, 'w') as f: - json.dump({'times': times}, f) - - # Print the times - for k, v in times.iteritems(): - print(k, ":") - for benchpath, t in v.iteritems(): - t = list(t) - if len(t): - print(" ", name_only(benchpath), ": ", t) + finally: + # Delete benchmarks with no results + times = {a: {x: y for x, y in b.items() if len(y)} for a, b in times.items()} + + # Save the times + if args.outfile: + with open(args.outfile, 'w') as f: + json.dump({'times': times}, f) + + # Print the times + for k, v in times.iteritems(): + print(k, ":") + for benchpath, t in v.iteritems(): + t = list(t) + if len(t): + print(" ", name_only(benchpath), ": ", t) if __name__ == '__main__': diff --git a/tools/deep/mcmcify.py b/tools/deep/mcmcify.py new file mode 100755 index 000000000..45c37fe74 --- /dev/null +++ b/tools/deep/mcmcify.py @@ -0,0 +1,284 @@ +#!/usr/bin/env python +from __future__ import print_function +import os +import sys +import argparse +import smtlibparser +from xml.dom import minidom +try: + import xml.etree.cElementTree as ET +except ImportError: + import xml.etree.ElementTree as ET + + +TOK_MAP = { + '=': 'EQ', + 'not': 'NOT', + 'and': 'AND', + 'or': 'OR', + '>=': 'GE', + '>': 'GT', + '<=': 'LE', + '<': 'LT', + '+': 'PLUS', + '-': 'MINUS' +} + + +def dissolve(x): + assert len(x) == 1 + return x[0] + + +def negate(rule): + assert rule[0] != '=>' + if rule[0] == 'not': + return normalize(rule[1]) + else: + return normalize(["not", rule]) + + +def listmap(root, fn): + if not isinstance(root, list): + return root + return fn([listmap(x, fn) for x in root]) + + +def normalize(rule): + """Returns `rule` as a disjunction of conjunctions. + + Simply wraps, or if a negation, applies de Morgan's. If + already a positive disjunction, return `rule`. + + Note that this can result in a disjunction with one clause, + e.g. `(or (= 1 a))`. + """ + assert not deephas(rule, '=>') + while 1: + new_rule = listmap(rule, _inner_norm) + if new_rule[0] != 'or': + new_rule = ["or", new_rule] + if new_rule == rule: + return new_rule + rule = new_rule + + +def _inner_norm(rule): + if rule[0] == 'not' and rule[1][0] == 'not': + return rule[1][1] + elif rule[0] in ['or', 'and'] and rule[1][0] == rule[0]: + return [rule[0]] + rule[1][1:] + elif rule[0] == 'not' and rule[1][0] in ('and', 'or'): # de Morgan's + new_op = 'and' + if rule[1][0] == 'and': + new_op = 'or' + return [new_op] + [["not"] + [x] for x in rule[1][1:]] + else: + return rule + + +def deephas(objs, name): + if objs == name: + return True + try: + if not isinstance(objs, basestring): + for x in objs: + if deephas(x, name): + return True + except TypeError: + pass + return False + + +def _yank_rule(rules, match_fn): + tgt, remaining = None, [] + for rule in rules: + assert rule[0] == '=>' + if match_fn(rule): + # TODO: assert invariant has noly variables as terms + assert tgt is None, "already set to %s" % str(tgt) + tgt = rule + else: + remaining.append(rule) + assert tgt + return tgt, remaining + + +def get_good(rules, inv_name): + def match_good(rule): + return not deephas(rule[1], inv_name) and rule[2][0] == inv_name + good, remaining = _yank_rule(rules, match_good) + return good[1], good[2][1:], remaining + + +def get_bad(rules, inv_name): + def match_bad(rule): + return deephas(rule[1], inv_name) and not deephas(rule[2], inv_name) + bad, remaining = _yank_rule(rules, match_bad) + return bad[1], remaining + + +def get_implication(rules, inv_name): + def match_impl(rule): + return deephas(rule[1], inv_name) and deephas(rule[2], inv_name) + r, remaining = _yank_rule(rules, match_impl) + assert r[0] == '=>' + return (r[1], r[2]), remaining + + +def pop_rel(expr, name): + """Removes mention of relation named `name`, returning (expr, args). + + Raises Exception if relation is mentioned more than once in `expr`. + """ + if isinstance(expr, basestring) or isinstance(expr, int): + return (expr, None) + + # Recur first + new_expr, subargs = [expr[0]], None + for e in expr[1:]: + s, a = pop_rel(e, name) + if a: + assert subargs is None, "multiple mentions in expr" + subargs = a + new_expr.append(s) + + # Propogate + if new_expr[0] == name: + return (None, new_expr[1:]) + elif len(new_expr) == 2 and new_expr[1] is None: + return (None, subargs) + else: + return ([e for e in new_expr if e is not None], subargs) + + +def expr_to_xml(parent, expr): + if isinstance(expr, list): + e = ET.SubElement(parent, TOK_MAP[expr[0]]) + for sube in expr[1:]: + expr_to_xml(e, sube) + return e + + try: + int(expr) + except ValueError: + pass + else: + e = ET.SubElement(parent, "INT") + e.text = str(expr) + return e + + e = ET.SubElement(parent, "VAR") + e.text = expr + return e + + +def names_to_vardecls(parent, names, rootname='VARDECLS'): + top_var_root = ET.SubElement(parent, rootname) + for var_name in names: + vr = ET.SubElement(top_var_root, "VAR") + vr.text = var_name + + +def translate(chctask, xmlfo, configfo): + assert len(chctask.rels) == 2 + assert not deephas(chctask.rels, 'forall') + + # TODO: Need to lift integers out of relations + + # Guess invariant name + # TODO: Should be only one rel with any params + inv_name = None + for c in ['itp', 'inv']: + if deephas(chctask.rels, c): + inv_name = c + assert inv_name + + # Parse, break apart, negate, and sanitize. + translated = [dissolve(r) for r in chctask.rules] + good, good_args, translated = get_good(translated, inv_name) + (impl_src, impl_dest), translated = get_implication(translated, inv_name) + impl_src, impl_src_args = pop_rel(impl_src, inv_name) + impl_dest, impl_dest_args = pop_rel(impl_dest, inv_name) + bad, translated = get_bad(translated, inv_name) + bad, bad_args = pop_rel(bad, inv_name) + assert len(translated) == 0, "extra rules were present" + + # Start building the first.xml file for MCMC. Do the header. + outtree = ET.ElementTree(ET.Element("VC")) + top_fun_root = ET.SubElement(outtree.getroot(), "FUNDECLS") + for (rel_name, args) in chctask.rels.items(): + if rel_name == 'fail': + continue + vr = ET.SubElement(top_fun_root, "FUNDECL") + ar_r = ET.SubElement(vr, "ARITY") + ar_r.text = str(len(args)) + name_r = ET.SubElement(vr, "NAME") + name_r.text = rel_name + names_to_vardecls(outtree.getroot(), chctask.vars) + + # Convert rules to ASSERTs + good_assert = ET.SubElement(outtree.getroot(), "ASSERT", type="good 0") + names_to_vardecls(good_assert, good_args) + expr_to_xml(good_assert, negate(good)) + + inv_assert = ET.SubElement(outtree.getroot(), "ASSERT", type="0 0") + names_to_vardecls(inv_assert, impl_src_args, rootname='BEFORE') + names_to_vardecls(inv_assert, impl_dest_args, rootname='AFTER') + expr_to_xml(inv_assert, negate(impl_src)) + assert impl_dest is None + + bad_assert = ET.SubElement(outtree.getroot(), "ASSERT", type="bad 0") + names_to_vardecls(bad_assert, bad_args) + expr_to_xml(bad_assert, negate(bad)) + + def prettify_xml(elem): + """Return a pretty-printed XML string for the Element. + """ + rough_string = ET.tostring(elem, 'utf-8') + reparsed = minidom.parseString(rough_string) + return reparsed.toprettyxml(indent=" ") + print(prettify_xml(outtree.getroot()), file=xmlfo) + + # Build config + # TODO: Re-read paper; figure out what these hyperparams mean: + # http://theory.stanford.edu/~aiken/publications/papers/cav14.pdf + all_ints = set(int(x.text) for x in outtree.iter('INT')) + all_ints = all_ints.union(set(-x for x in all_ints)) + print("DISJUNCTS", file=configfo) + print("10", file=configfo) + print("CONJUNCTS", file=configfo) + print("10", file=configfo) + print("COEFFICIENT BAG", file=configfo) + print("3", file=configfo) + print("-1 0 1", file=configfo) + print("IMMEDIATE BAG", file=configfo) + print(str(len(all_ints)), file=configfo) + print(" ".join(str(x) for x in sorted(all_ints)), file=configfo) + print("NOP PERCENT", file=configfo) + print("90", file=configfo) + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("SMTPATH") + parser.add_argument("XMLOUT") + parser.add_argument("CONFIGOUT") + args = parser.parse_args() + + for p in [args.XMLOUT, args.CONFIGOUT]: + if os.path.exists(p): + print("'%s' already exists" % p, file=sys.stderr) + return 1 + + try: + with open(args.SMTPATH, 'r') as smtfo, open(args.XMLOUT, 'w') as xmlfo, open(args.CONFIGOUT, 'w') as configfo: + translate(smtlibparser.parse(smtfo), xmlfo, configfo) + finally: + for p in [args.XMLOUT, args.CONFIGOUT]: + if os.stat(p).st_size == 0: + os.remove(p) + + +if __name__ == '__main__': + main() diff --git a/tools/deep/smtlibparser.py b/tools/deep/smtlibparser.py new file mode 100644 index 000000000..fd5c3359d --- /dev/null +++ b/tools/deep/smtlibparser.py @@ -0,0 +1,95 @@ +from pyparsing import Word, Group, Regex, Optional, OneOrMore, Forward, \ + ParseFatalException, Suppress, ZeroOrMore, dblQuotedString, removeQuotes, \ + hexnums, printables, alphanums, restOfLine +from base64 import b64decode +from collections import namedtuple, OrderedDict + + +def _verify_len(s, l, t): + t = t[0] + if t.len is not None: + t1l = len(t[1]) + if t1l != t.len: + raise ParseFatalException( + s, l, "invalid data of length %d, expected %s" % (t1l, t.len)) + return t[1] + + +def _comb_b64d(t): + return b64decode("".join(t)) + + +# define punctuation literals +LPAR, RPAR, LBRK, RBRK, LBRC, RBRC, VBAR = map(Suppress, "()[]{}|") + +decimal = Regex(r'0|[1-9]\d*').setParseAction(lambda t: int(t[0])) +hexadecimal = ("#" + OneOrMore(Word(hexnums)) + "#")\ + .setParseAction(lambda t: int("".join(t[1:-1]), 16)) +bytes = Word(printables) +raw = Group(decimal("len") + Suppress(":") + bytes).setParseAction(_verify_len) +token = Word(alphanums + "-./_:*+=") + +base64_ = Group(Optional(decimal | hexadecimal, default=None)("len") + + VBAR + + OneOrMore(Word(alphanums + "+/=")).setParseAction(_comb_b64d) + + VBAR).setParseAction(_verify_len) + +qString = Group(Optional(decimal, default=None)("len") + + dblQuotedString.setParseAction(removeQuotes)) +qString = qString.setParseAction(_verify_len) +simpleString = base64_ | raw | decimal | token | hexadecimal | qString + +# extended definitions +decimal = Regex(r'-?0|[1-9]\d*').setParseAction(lambda t: int(t[0])) +real = Regex(r"[+-]?\d+\.\d*([eE][+-]?\d+)?") +real = real.setParseAction(lambda tokens: float(tokens[0])) +token = Word(alphanums + "-./_:*+=!<>") + +simpleString = real | base64_ | raw | decimal | token | hexadecimal | qString + +display = LBRK + simpleString + RBRK +string_ = Optional(display) + simpleString + +sexp = Forward() +sexpList = Group(LPAR + ZeroOrMore(sexp) + RPAR) +sexp << (string_ | sexpList) +smtFile = OneOrMore(sexp).ignore(';' + restOfLine) + + +class ParseException(Exception): + """An error parsing or interpreting the Horn-style SMT-LIB.""" + + +CHCTask = namedtuple('CHCTask', 'vars rels rules') + + +CMD_STOPLIST = ['set-option', 'query'] + + +def parse(fo, sorts=['Int', 'Bool']): + sexprs = smtFile.parseFile(fo, parseAll=True).asList() + v, r, rules = OrderedDict(), OrderedDict(), [] + for cmd in sexprs: + assert len(cmd) + if cmd[0] in CMD_STOPLIST: + pass + elif cmd[0] == 'declare-var': + if cmd[1] in v: + raise ParseException("re-declaration of var '%s'" % cmd[1]) + if cmd[2] not in sorts: + raise ParseException("var '%s' had unknown sort '%s'" % (cmd[1], cmd[2])) + v[cmd[1]] = cmd[2] + elif cmd[0] == 'declare-rel': + if cmd[1] in r: + raise ParseException("re-declaration of rel '%s'" % cmd[1]) + for s in cmd[2]: + if s not in sorts: + raise ParseException("rel '%s' had unknown sort '%s'" % (cmd[1], s)) + r[cmd[1]] = cmd[2] + elif cmd[0] == 'rule': + rules.append(cmd[1:]) + elif cmd[0] == 'set-logic': + assert cmd[1].lower() == 'horn' + else: + raise ParseException("unrecogized '%s'" % cmd[0]) + return CHCTask(v, r, rules) From 1b251e6fb5ca8cfbf643760c3d33aaa447b48b3f Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Thu, 25 May 2017 10:23:09 -0700 Subject: [PATCH 023/236] support for constants on the rhs of div / mod --- bench_horn/const_div_1.smt2 | 23 +++++++++++++++++++++++ bench_horn/const_div_2.smt2 | 23 +++++++++++++++++++++++ bench_horn/const_div_mod.smt2 | 24 ++++++++++++++++++++++++ bench_horn/const_mod_1.smt2 | 20 ++++++++++++++++++++ bench_horn/const_mod_2.smt2 | 20 ++++++++++++++++++++ bench_horn/nonlin_mod_2.smt2 | 2 +- include/ae/ExprSimpl.hpp | 28 +++++----------------------- 7 files changed, 116 insertions(+), 24 deletions(-) create mode 100644 bench_horn/const_div_1.smt2 create mode 100644 bench_horn/const_div_2.smt2 create mode 100644 bench_horn/const_div_mod.smt2 create mode 100644 bench_horn/const_mod_1.smt2 create mode 100644 bench_horn/const_mod_2.smt2 diff --git a/bench_horn/const_div_1.smt2 b/bench_horn/const_div_1.smt2 new file mode 100644 index 000000000..efdd299dc --- /dev/null +++ b/bench_horn/const_div_1.smt2 @@ -0,0 +1,23 @@ +(declare-rel inv (Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= i 2) (= j 1)) (inv i j))) + +(rule (=> + (and + (inv i j) + (= i1 (+ i 2)) + (= j1 (+ j 1)) + ) + (inv i1 j1) + ) +) + +(rule (=> (and (inv i j) (not (= (div i 2) j))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/const_div_2.smt2 b/bench_horn/const_div_2.smt2 new file mode 100644 index 000000000..80cefbfaf --- /dev/null +++ b/bench_horn/const_div_2.smt2 @@ -0,0 +1,23 @@ +(declare-rel inv (Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= i 7610) (= j 1)) (inv i j))) + +(rule (=> + (and + (inv i j) + (= i1 (+ i 7610)) + (= j1 (+ j 1)) + ) + (inv i1 j1) + ) +) + +(rule (=> (and (inv i j) (not (= (div i 7610) j))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/const_div_mod.smt2 b/bench_horn/const_div_mod.smt2 new file mode 100644 index 000000000..ccfed600e --- /dev/null +++ b/bench_horn/const_div_mod.smt2 @@ -0,0 +1,24 @@ +(declare-rel inv (Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) + +(declare-rel fail ()) + +(rule (=> (= i j) (inv i j))) + +(rule (=> + (and + (inv i j) + (> i 0) + (= (mod i 2) 0) + (= i1 (div i 2)) + ) + (inv i1 j) + ) +) + +(rule (=> (and (inv i j) (= i 0) (not (= (mod j 2) 0))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/const_mod_1.smt2 b/bench_horn/const_mod_1.smt2 new file mode 100644 index 000000000..933be88bb --- /dev/null +++ b/bench_horn/const_mod_1.smt2 @@ -0,0 +1,20 @@ +(declare-rel inv (Int)) +(declare-var i Int) +(declare-var i1 Int) + +(declare-rel fail ()) + +(rule (=> (= i 0) (inv i))) + +(rule (=> + (and + (inv i) + (= i1 (+ i 2)) + ) + (inv i1) + ) +) + +(rule (=> (and (inv i) (not (= (mod i 2) 0))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/const_mod_2.smt2 b/bench_horn/const_mod_2.smt2 new file mode 100644 index 000000000..59aef267e --- /dev/null +++ b/bench_horn/const_mod_2.smt2 @@ -0,0 +1,20 @@ +(declare-rel inv (Int)) +(declare-var i Int) +(declare-var i1 Int) + +(declare-rel fail ()) + +(rule (=> (= i 0) (inv i))) + +(rule (=> + (and + (inv i) + (= i1 (+ i 23468)) + ) + (inv i1) + ) +) + +(rule (=> (and (inv i) (not (= (mod i 23468) 0))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/nonlin_mod_2.smt2 b/bench_horn/nonlin_mod_2.smt2 index 781708666..78ff7913c 100644 --- a/bench_horn/nonlin_mod_2.smt2 +++ b/bench_horn/nonlin_mod_2.smt2 @@ -13,7 +13,7 @@ (> a b) (= a1 (- a b)) ) - (inv a b) + (inv a1 b) ) ) diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index d002c87c8..06009f783 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -906,8 +906,6 @@ namespace ufo return dagVisit (mu, exp); } - inline static Expr reBuildBin(Expr term, Expr lhs, Expr rhs); - struct FindNonlinAndRewrite { ExprVector& vars; @@ -954,7 +952,11 @@ namespace ufo { int indl = getVarIndex(t->left(), vars); int indr = getVarIndex(t->right(), vars); - Expr key = reBuildBin(t, vars2[indl], vars2[indr]); + + Expr key = t; + if (indl >= 0) key = replaceAll(key, t->left(), vars2[indl]); + if (indr >= 0) key = replaceAll(key, t->right(), vars2[indr]); + if (extraVars[key] == NULL) { Expr new_name = mkTerm ("__e__" + to_string(extraVars.size()), t->getFactory()); @@ -1130,26 +1132,6 @@ namespace ufo return mk(lhs, rhs); } - // not very pretty method, but.. - inline static Expr reBuildBin(Expr term, Expr lhs, Expr rhs) - { - if (isOpX
(term)) - { - return mk
(lhs, rhs); - } - if (isOpX(term)) - { - return mk(lhs, rhs); - } - if (isOpX(term)) - { - return mk(lhs, rhs); - } - - assert(0); - return term; - } - inline static Expr reBuildNegCmp(Expr term, Expr lhs, Expr rhs) { if (isOpX(term)) From a7d08d8e2e1481e343ac5d897805f9175f4c0d6d Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Fri, 26 May 2017 19:18:12 -0700 Subject: [PATCH 024/236] optimizing the prioritization --- include/deep/RndLearner.hpp | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/include/deep/RndLearner.hpp b/include/deep/RndLearner.hpp index 09617e31c..932098f4c 100644 --- a/include/deep/RndLearner.hpp +++ b/include/deep/RndLearner.hpp @@ -389,12 +389,20 @@ namespace ufo break; } - if (isTautology(cand) || !u.isSat(cand)) // keep searching + if (isTautology(cand)) // keep searching { - lf.assignPrioritiesForGarbage(lf.samples.back()); + lf.assignPrioritiesForLearnt(lf.samples.back()); skip = true; break; } + + if (lf.nonlinVars.size() > 0 && !u.isSat(cand)) // keep searching + { + lf.assignPrioritiesForFailed(lf.samples.back()); + skip = true; + break; + } + curCandidates[j] = cand; } From 3d2368b7e6387e17320bb4151b7e3151c70aa6b2 Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Sat, 3 Jun 2017 21:22:50 -0700 Subject: [PATCH 025/236] added more hard benchmarks --- bench_horn/const_mod_3.smt2 | 23 ++++++++++++ ...-unreach-call_true-termination_bound.smt2} | 4 +-- ...unreach-call_true-termination_unbound.smt2 | 36 +++++++++++++++++++ bench_horn/half_true_modif.smt2 | 28 +++++++++++++++ bench_horn/half_true_orig.smt2 | 25 +++++++++++++ bench_horn/nonlin_gauss_sum.smt2 | 25 +++++++++++++ bench_horn/nonlin_mod_mult.smt2 | 29 +++++++++++++++ bench_horn/nonlin_mult_6.smt2 | 30 ++++++++++++++++ 8 files changed, 198 insertions(+), 2 deletions(-) create mode 100644 bench_horn/const_mod_3.smt2 rename bench_horn/{count_by_k_true-unreach-call_true-termination.smt2 => count_by_k_true-unreach-call_true-termination_bound.smt2} (84%) create mode 100644 bench_horn/count_by_k_true-unreach-call_true-termination_unbound.smt2 create mode 100644 bench_horn/half_true_modif.smt2 create mode 100644 bench_horn/half_true_orig.smt2 create mode 100644 bench_horn/nonlin_gauss_sum.smt2 create mode 100644 bench_horn/nonlin_mod_mult.smt2 create mode 100644 bench_horn/nonlin_mult_6.smt2 diff --git a/bench_horn/const_mod_3.smt2 b/bench_horn/const_mod_3.smt2 new file mode 100644 index 000000000..ac3b175db --- /dev/null +++ b/bench_horn/const_mod_3.smt2 @@ -0,0 +1,23 @@ +(declare-rel inv (Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= i 0) (= j 0)) (inv i j))) + +(rule (=> + (and + (inv i j) + (= i1 (+ i 1)) + (= j1 (ite (= j 0) 1 0)) + ) + (inv i1 j1) + ) +) + +(rule (=> (and (inv i j) (not (ite (= j 1) (= (mod i 2) 1) (= (mod i 2) 0)))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/count_by_k_true-unreach-call_true-termination.smt2 b/bench_horn/count_by_k_true-unreach-call_true-termination_bound.smt2 similarity index 84% rename from bench_horn/count_by_k_true-unreach-call_true-termination.smt2 rename to bench_horn/count_by_k_true-unreach-call_true-termination_bound.smt2 index 4010001ec..c8eafd198 100644 --- a/bench_horn/count_by_k_true-unreach-call_true-termination.smt2 +++ b/bench_horn/count_by_k_true-unreach-call_true-termination_bound.smt2 @@ -7,8 +7,8 @@ (rule (=> (and - (and (<= 0 k) (<= k 10) ) - (= LRG 256) ; LARGE_INT is large and a power of 2 + (<= 0 k) + (>= LRG 0) (= i 0) ) (itp i k LRG) diff --git a/bench_horn/count_by_k_true-unreach-call_true-termination_unbound.smt2 b/bench_horn/count_by_k_true-unreach-call_true-termination_unbound.smt2 new file mode 100644 index 000000000..36c066e65 --- /dev/null +++ b/bench_horn/count_by_k_true-unreach-call_true-termination_unbound.smt2 @@ -0,0 +1,36 @@ +(declare-var i Int) +(declare-var i_ Int) +(declare-var k Int) +(declare-var LRG Int) +(declare-rel itp (Int Int Int)) +(declare-rel fail ()) + +(rule (=> + (and + (<= 0 k) + (<= k 10) + (>= LRG 0) + (= i 0) + ) + (itp i k LRG) +)) + +(rule (=> + (and + (itp i_ k LRG) + (< i_ (* LRG k)) + (= i (+ i_ k)) + ) + (itp i k LRG) +)) + +(rule (=> + (and + (itp i k LRG) + (not (< i (* LRG k))) ; stop cond. (redun.) + (not (= i (* LRG k))) ; assert negation + ) + fail +)) + +(query fail :print-certificate true) diff --git a/bench_horn/half_true_modif.smt2 b/bench_horn/half_true_modif.smt2 new file mode 100644 index 000000000..b5e96a52d --- /dev/null +++ b/bench_horn/half_true_modif.smt2 @@ -0,0 +1,28 @@ +(declare-rel inv (Int Int Int Int)) +(declare-var i Int) +(declare-var k Int) +(declare-var n Int) +(declare-var i1 Int) +(declare-var n1 Int) +(declare-var j Int) +(declare-var j1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= i 0) (= j 0) (= n 0) (>= k 0)) (inv i k n j))) + +(rule (=> + (and + (inv i k n j) + (< i (* 2 k)) + (= n1 (ite (= j 0) (+ n 1) n)) + (= i1 (+ i 1)) + (= j1 (ite (= j 0) 1 0)) + ) + (inv i1 k n1 j1) + ) +) + +(rule (=> (and (inv i k n j) (>= i (* 2 k)) (not (= n k))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/half_true_orig.smt2 b/bench_horn/half_true_orig.smt2 new file mode 100644 index 000000000..d01cd3a29 --- /dev/null +++ b/bench_horn/half_true_orig.smt2 @@ -0,0 +1,25 @@ +(declare-rel inv (Int Int Int)) +(declare-var i Int) +(declare-var k Int) +(declare-var n Int) +(declare-var i1 Int) +(declare-var n1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= i 0) (= n 0) (>= k 0)) (inv i k n))) + +(rule (=> + (and + (inv i k n) + (< i (* 2 k)) + (= n1 (ite (= (mod i 2) 0) (+ n 1) n)) + (= i1 (+ i 1)) + ) + (inv i1 k n1) + ) +) + +(rule (=> (and (inv i k n) (>= i (* 2 k)) (not (= n k))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/nonlin_gauss_sum.smt2 b/bench_horn/nonlin_gauss_sum.smt2 new file mode 100644 index 000000000..72977704e --- /dev/null +++ b/bench_horn/nonlin_gauss_sum.smt2 @@ -0,0 +1,25 @@ +(declare-rel inv (Int Int Int)) +(declare-var i Int) +(declare-var n Int) +(declare-var sum Int) +(declare-var i1 Int) +(declare-var sum1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= sum 0) (= i 1) (<= 1 n) (<= n 1000)) (inv i n sum))) + +(rule (=> + (and + (inv i n sum) + (< i n) + (= sum1 (+ sum i)) + (= i1 (+ i 1)) + ) + (inv i1 n sum1) + ) +) + +(rule (=> (and (inv i n sum) (= i n) (not (= (+ (* 2 sum) (* 2 n)) (* n (+ n 1))))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/nonlin_mod_mult.smt2 b/bench_horn/nonlin_mod_mult.smt2 new file mode 100644 index 000000000..8f1e763f1 --- /dev/null +++ b/bench_horn/nonlin_mod_mult.smt2 @@ -0,0 +1,29 @@ +(declare-rel inv (Int Int Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) +(declare-var k Int) +(declare-var l Int) +(declare-var l1 Int) +(declare-var m Int) + +(declare-rel fail ()) + +(rule (=> (and (= i 0) (> j 0) (> k 0) (= l 0)) (inv i j k l))) + +(rule (=> + (and + (inv i j k l) + (= i1 (+ i 1)) + (= m (mod j k)) + (= j1 (+ j m)) + (= l1 (+ l m)) + ) + (inv i1 j1 k l1) + ) +) + +(rule (=> (and (inv i j k l) (not (<= l (* k i)))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/nonlin_mult_6.smt2 b/bench_horn/nonlin_mult_6.smt2 new file mode 100644 index 000000000..2fb436cfe --- /dev/null +++ b/bench_horn/nonlin_mult_6.smt2 @@ -0,0 +1,30 @@ +(declare-rel inv (Int Int Int)) +(declare-var a Int) +(declare-var b Int) +(declare-var b1 Int) +(declare-var i Int) +(declare-var i1 Int) + +(declare-rel fail ()) + +(rule (=> + (and (< a 0) (= b a) (= i -1)) (inv a b i) + ) +) + +(rule (=> + (and + (inv a b i) + (= b1 (* a b)) + (= i1 (- i)) + ) + (inv a b1 i1) + ) +) + + +(rule (=> (and (inv a b i) (not (> (* b i) 0))) fail)) + + +(query fail :print-certificate true) + From f96ab623f593f6aa0e48f3244285293e691bfd8b Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Sat, 29 Jul 2017 10:14:24 -0700 Subject: [PATCH 026/236] fixed lemma learning for multiple invariants / multiple queries --- bench_horn/niagara.smt2 | 57 ++++++++++++++++++++++++++ include/deep/RndLearner.hpp | 81 +++++++++++++++++++------------------ 2 files changed, 99 insertions(+), 39 deletions(-) create mode 100644 bench_horn/niagara.smt2 diff --git a/bench_horn/niagara.smt2 b/bench_horn/niagara.smt2 new file mode 100644 index 000000000..a41c62c2f --- /dev/null +++ b/bench_horn/niagara.smt2 @@ -0,0 +1,57 @@ +(declare-rel itp1 (Int Int)) +(declare-rel itp2 (Int Int)) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x4 Int) +(declare-var y1 Int) +(declare-var y2 Int) + +(declare-rel fail ()) + + +(rule (=> (and (= x1 0) (= y1 0)) (itp1 x1 y1))) + +(rule (=> + (and + (itp1 x1 y1) + (< y1 10) + (= x2 (+ x1 1)) + (= y2 (+ y1 x2)) + ) + (itp1 x2 y2) + ) +) + +(rule (=> (and (itp1 x1 y1) + (= y1 10) + (= x2 (+ x1 1)) + (= y2 (+ y1 x2))) + (itp2 x2 y2))) + + +(rule (=> (and (itp1 x1 y1) + (= y1 10) + (= x2 (+ x1 2)) + (= y2 (+ y1 x2))) + (itp2 x2 y2))) + + +(rule (=> (and (itp1 x1 y1) (< y1 10) (> x1 y1)) fail)) + +(rule (=> + (and + (itp2 x1 y1) + (> y1 10) + (= x2 (+ x1 1)) + (= y2 (+ y1 x2)) + + ) + (itp2 x2 y2) + ) +) + +(rule (=> (and (itp2 x1 y1) (> x1 y1)) fail)) + + +(query fail :print-certificate true) + diff --git a/include/deep/RndLearner.hpp b/include/deep/RndLearner.hpp index 932098f4c..02d454818 100644 --- a/include/deep/RndLearner.hpp +++ b/include/deep/RndLearner.hpp @@ -20,7 +20,8 @@ namespace ufo EZ3 &m_z3; SMTUtils u; ufo::ZSolver m_smt_solver; - ufo::ZSolver m_smt_safety_solver; + vector> m_smt_safety_solvers; + map safety_progress; CHCs& ruleManager; vector decls; @@ -37,7 +38,7 @@ namespace ufo public: RndLearner (ExprFactory &efac, EZ3 &z3, CHCs& r, bool b1, bool b2, bool b3) : - m_efac(efac), m_z3(z3), ruleManager(r), m_smt_solver (z3), m_smt_safety_solver(z3), u(efac), + m_efac(efac), m_z3(z3), ruleManager(r), m_smt_solver (z3), u(efac), invNumber(0), all(0), densecode(b1), shrink(b2), aggressivepruning(b3) {} @@ -73,10 +74,6 @@ namespace ufo bool checkCandidates() { - map localNum = incomNum; // for local status - map candsFailed; // -||- - int candsTried = invNumber; // -||- - for (auto &hr: ruleManager.chcs) { if (hr.isQuery) continue; @@ -86,8 +83,6 @@ namespace ufo int ind1; // to be identified later int ind2 = getVarIndex(hr.dstRelation, decls); - if (candsFailed[ind2]) continue; // exit if cand2 is already a failure - // pushing body m_smt_solver.assertExpr (hr.body); @@ -101,15 +96,12 @@ namespace ufo ind1 = getVarIndex(hr.srcRelation, decls); LAfactory& lf1 = lfs[ind1]; - if (localNum[ind1] > 0) + cand1 = curCandidates[ind1]; + for (int i = 0; i < hr.srcVars.size(); i++) { - cand1 = curCandidates[ind1]; - for (int i = 0; i < hr.srcVars.size(); i++) - { - cand1 = replaceAll(cand1, lf1.getVarE(i), hr.srcVars[i]); - } - m_smt_solver.assertExpr(cand1); + cand1 = replaceAll(cand1, lf1.getVarE(i), hr.srcVars[i]); } + m_smt_solver.assertExpr(cand1); lmApp = conjoin(lf1.learntExprs, m_efac); for (int i = 0; i < hr.srcVars.size(); i++) @@ -134,50 +126,60 @@ namespace ufo boost::tribool res = m_smt_solver.solve (); if (res) // SAT == candidate failed { - outs () << " => bad candidate for " << *hr.dstRelation << "\n"; + curCandidates[ind2] = mk(m_efac); + return checkCandidates(); + } + } + + bool res = false; + for (int ind2 = 0; ind2 < curCandidates.size(); ind2++) + { + Expr cand2 = curCandidates[ind2]; + LAfactory& lf2 = lfs[ind2]; + if (isOpX(cand2)) + { + outs () << " => bad candidate for " << *decls[ind2] << "\n"; if (aggressivepruning) lf2.assignPrioritiesForFailed(lf2.samples.back()); - candsTried--; - candsFailed[ind2] = true; - if (candsTried == 0) return false; } - else // UNSAT == candadate is OK for now; keep checking + else { - localNum[ind2]--; - if (!res && localNum[ind2] == 0) // something inductive found - { - outs () << " => learnt lemma for " << *hr.dstRelation << "\n"; - lf2.assignPrioritiesForLearnt(lf2.samples.back()); - lf2.learntExprs.insert(curCandidates[ind2]); - lf2.learntLemmas.push_back(lf2.samples.size() - 1); - candsTried--; - } + outs () << " => learnt lemma for " << *decls[ind2] << "\n"; + lf2.assignPrioritiesForLearnt(lf2.samples.back()); + lf2.learntExprs.insert(cand2); + lf2.learntLemmas.push_back(lf2.samples.size() - 1); + res = true; } } - return true; + return res; } bool checkSafety() { + int num = 0; for (auto &hr: ruleManager.chcs) { if (!hr.isQuery) continue; - + num++; + int ind = getVarIndex(hr.srcRelation, decls); Expr invApp = curCandidates[ind]; + if (safety_progress[num-1] == true) continue; + LAfactory& lf = lfs[ind]; for (int i = 0; i < hr.srcVars.size(); i++) { invApp = replaceAll(invApp, lf.getVarE(i), hr.srcVars[i]); } - - m_smt_safety_solver.assertExpr(invApp); - + + m_smt_safety_solvers[num-1].assertExpr(invApp); + safety_progress[num-1] = !m_smt_safety_solvers[num-1].solve (); + all++; - boost::tribool res = m_smt_safety_solver.solve (); - if (!res) return true; } - return false; + + for (auto a : safety_progress) if (a.second == false) return false; + return true; } void setupSafetySolver() @@ -187,8 +189,9 @@ namespace ufo { if (hr.isQuery) { - m_smt_safety_solver.assertExpr (hr.body); - break; + m_smt_safety_solvers.push_back(ufo::ZSolver(m_z3)); + m_smt_safety_solvers.back().assertExpr (hr.body); + safety_progress[safety_progress.size()] = false; } } } From c520600907a9a5a3b561260fdfa1693dca95f6ca Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Mon, 31 Jul 2017 17:49:20 -0700 Subject: [PATCH 027/236] enhancing invariant grammars based on learned lemmas --- include/deep/CodeSampler.hpp | 14 ++--- include/deep/RndLearner.hpp | 111 +++++++++++++++++++++++++++-------- 2 files changed, 95 insertions(+), 30 deletions(-) diff --git a/include/deep/CodeSampler.hpp b/include/deep/CodeSampler.hpp index ea8150960..b782e9a0b 100644 --- a/include/deep/CodeSampler.hpp +++ b/include/deep/CodeSampler.hpp @@ -21,14 +21,14 @@ namespace ufo set intCoefs; HornRuleExt& hr; - Expr invDecl; + Expr invRel; ExprVector invVars; ExprMap& extraVars; Expr zero; CodeSampler(HornRuleExt& r, Expr& d, ExprVector& v, ExprMap& e) : - hr(r), invDecl(d), invVars(v), extraVars(e) + hr(r), invRel(d), invVars(v), extraVars(e) { // add some "universal" constants intConsts.insert(0); @@ -36,7 +36,7 @@ namespace ufo intConsts.insert(-1); // aux Expr const - zero = mkTerm (mpz_class (0), invDecl->getFactory()); + zero = mkTerm (mpz_class (0), invRel->getFactory()); }; void addSampleHlp(Expr tmpl, ExprVector& vars, ExprSet& actualVars) @@ -152,12 +152,12 @@ namespace ufo term = rewriteMultAdd(term); - if (hr.srcRelation == invDecl->first()) + if (hr.srcRelation == invRel) { term = findNonlinAndRewrite(term, hr.srcVars, invVars, extraVars); } - if (hr.dstRelation == invDecl->first()) + if (hr.dstRelation == invRel) { term = findNonlinAndRewrite(term, hr.dstVars, invVars, extraVars); } @@ -169,12 +169,12 @@ namespace ufo // split each term to two samples (for srcVars and dstVars) - if (hr.srcRelation == invDecl->first()) + if (hr.srcRelation == invRel) { addSampleHlp(term, hr.srcVars, actualVars); } - if (hr.dstRelation == invDecl->first()) + if (hr.dstRelation == invRel) { addSampleHlp(term, hr.dstVars, actualVars); } diff --git a/include/deep/RndLearner.hpp b/include/deep/RndLearner.hpp index 02d454818..7fcaab5b3 100644 --- a/include/deep/RndLearner.hpp +++ b/include/deep/RndLearner.hpp @@ -25,9 +25,8 @@ namespace ufo CHCs& ruleManager; vector decls; - vector lfs; + vector> lfs; vector curCandidates; - map incomNum; int invNumber; int all; @@ -94,7 +93,7 @@ namespace ufo if (!isOpX(hr.srcRelation)) { ind1 = getVarIndex(hr.srcRelation, decls); - LAfactory& lf1 = lfs[ind1]; + LAfactory& lf1 = lfs[ind1].back(); cand1 = curCandidates[ind1]; for (int i = 0; i < hr.srcVars.size(); i++) @@ -113,7 +112,7 @@ namespace ufo // pushing dst relation cand2 = curCandidates[ind2]; - LAfactory& lf2 = lfs[ind2]; + LAfactory& lf2 = lfs[ind2].back(); for (int i = 0; i < hr.dstVars.size(); i++) { @@ -132,10 +131,10 @@ namespace ufo } bool res = false; - for (int ind2 = 0; ind2 < curCandidates.size(); ind2++) + for (int ind2 = 0; ind2 < invNumber; ind2++) { Expr cand2 = curCandidates[ind2]; - LAfactory& lf2 = lfs[ind2]; + LAfactory& lf2 = lfs[ind2].back(); if (isOpX(cand2)) { outs () << " => bad candidate for " << *decls[ind2] << "\n"; @@ -165,7 +164,7 @@ namespace ufo Expr invApp = curCandidates[ind]; if (safety_progress[num-1] == true) continue; - LAfactory& lf = lfs[ind]; + LAfactory& lf = lfs[ind].back(); for (int i = 0; i < hr.srcVars.size(); i++) { @@ -196,6 +195,69 @@ namespace ufo } } + void updateRels() + { + // this should not affect the learning process for a CHC system with one (declare-rel ...) + + set rels2update; + + for (int ind = 0; ind < invNumber; ind++) + { + Expr cand = curCandidates[ind]; + LAfactory& lf = lfs[ind].back(); + if (!isOpX(cand)) + { + for (auto &hr : ruleManager.chcs) + { + if ( hr.srcRelation == decls[ind] && + hr.dstRelation != decls[ind] && + !hr.isQuery) + { + Expr lemma2add = curCandidates[ind]; + for (int i = 0; i < hr.srcVars.size(); i++) + { + lemma2add = replaceAll(lemma2add, lf.getVarE(i), hr.srcVars[i]); + } + + if (u.isImplies(hr.body, lemma2add)) continue; + + hr.lin.push_back(lemma2add); + hr.body = mk(hr.body, lemma2add); + + rels2update.insert(getVarIndex(hr.dstRelation, decls)); + } + } + } + } + + for(auto ind : rels2update) + { + vector& lf = lfs[ind]; + lf.push_back(LAfactory (m_efac, densecode, aggressivepruning)); + LAfactory& lf_before = lf[lf.size()-2]; + LAfactory& lf_after = lf.back(); + + for (auto a : lf_before.getVars()) + { + lf_after.addVar(a); + } + + doCodeSampling(decls[ind], lf_after); + + for (auto a : lf_before.learntExprs) + { + lf_after.learntExprs.insert(a); + lf_after.samples.push_back(LAdisj()); + LAdisj& lcs = lf_after.samples.back(); + if (lf_after.exprToLAdisj(a, lcs)) + { + lf_after.assignPrioritiesForLearnt(lcs); + lf_after.learntLemmas.push_back (lf_after.samples.size() - 1); + } + } + } + } + void initializeDecl(Expr invDecl) { assert (invDecl->arity() > 2); @@ -204,17 +266,11 @@ namespace ufo assert(curCandidates.size() == invNumber); decls.push_back(invDecl->arg(0)); - lfs.push_back(LAfactory(m_efac, densecode, aggressivepruning)); // indeces at decls, lfs, and curCandidates should be the same curCandidates.push_back(NULL); - LAfactory& lf = lfs.back(); - - // collect how many rules has invDecl on the right side - for (auto &hr : ruleManager.chcs) - { - if (hr.dstRelation == decls.back()) - incomNum[invNumber]++; - } + lfs.push_back(vector ()); + lfs.back().push_back(LAfactory (m_efac, densecode, aggressivepruning)); + LAfactory& lf = lfs.back().back(); invNumber++; @@ -225,6 +281,11 @@ namespace ufo lf.addVar(var); } + doCodeSampling (decls.back(), lf); + } + + void doCodeSampling(Expr invRel, LAfactory& lf) + { vector css; set orArities; set progConstsTmp; @@ -234,9 +295,9 @@ namespace ufo // analize each rule separately: for (auto &hr : ruleManager.chcs) { - if (hr.dstRelation != decls.back() && hr.srcRelation != decls.back()) continue; + if (hr.dstRelation != invRel && hr.srcRelation != invRel) continue; - css.push_back(CodeSampler(hr, invDecl, lf.getVars(), lf.nonlinVars)); + css.push_back(CodeSampler(hr, invRel, lf.getVars(), lf.nonlinVars)); css.back().analyzeCode(densecode, shrink); // convert intConsts to progConsts and add additive inverses (if applicable): @@ -364,7 +425,7 @@ namespace ufo } } - outs() << "\nStatistics for " << *decls.back() << ":\n"; + outs() << "\nStatistics for " << *invRel << ":\n"; lf.printCodeStatistics(orArities); } } @@ -384,7 +445,7 @@ namespace ufo for (int j = 0; j < invNumber; j++) { if (curCandidates[j] != NULL) continue; // if the current candidate is good enough - LAfactory& lf = lfs[j]; + LAfactory& lf = lfs[j].back(); Expr cand = lf.getFreshCandidate(); if (cand == NULL) { @@ -423,8 +484,12 @@ namespace ufo success = true; break; } + else + { + updateRels(); + } } - + for (int j = 0; j < invNumber; j++) curCandidates[j] = NULL; // preparing for the next iteration } @@ -452,12 +517,12 @@ namespace ufo outs() << "WARNING: learning multiple invariants is currently unstable\n" << " it is suggested to disable \'aggressivepruning\'\n"; } - + for (auto& dcl: ruleManager.decls) { ds.initializeDecl(dcl); } - + ds.synthesize(maxAttempts); }; } From 54bfc4f97a9ecb6a44efe6bb12dbbacd4bcec48f Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Tue, 1 Aug 2017 11:03:07 -0700 Subject: [PATCH 028/236] small refactoring --- include/deep/LinCom.hpp | 2 ++ include/deep/RndLearner.hpp | 38 ++++++++++++++++++++----------------- 2 files changed, 23 insertions(+), 17 deletions(-) diff --git a/include/deep/LinCom.hpp b/include/deep/LinCom.hpp index b29902f50..4f29f2c4e 100644 --- a/include/deep/LinCom.hpp +++ b/include/deep/LinCom.hpp @@ -1009,6 +1009,8 @@ namespace ufo void assignPrioritiesForFailed(LAdisj& failed) { + if (!aggressivepruning) return; + vector eqs; getEquivalentFormulas(failed, eqs); for (auto &a : eqs) prioritiesFailed (a); diff --git a/include/deep/RndLearner.hpp b/include/deep/RndLearner.hpp index 7fcaab5b3..cdc6c5a63 100644 --- a/include/deep/RndLearner.hpp +++ b/include/deep/RndLearner.hpp @@ -131,25 +131,29 @@ namespace ufo } bool res = false; - for (int ind2 = 0; ind2 < invNumber; ind2++) + for (auto &cand : curCandidates) res = !isOpX(cand); + return res; + } + + void assignPriorities() + { + for (int i = 0; i < invNumber; i++) { - Expr cand2 = curCandidates[ind2]; - LAfactory& lf2 = lfs[ind2].back(); - if (isOpX(cand2)) + Expr cand = curCandidates[i]; + LAfactory& lf = lfs[i].back(); + if (isOpX(cand)) { - outs () << " => bad candidate for " << *decls[ind2] << "\n"; - if (aggressivepruning) lf2.assignPrioritiesForFailed(lf2.samples.back()); + outs () << " => bad candidate for " << *decls[i] << "\n"; + lf.assignPrioritiesForFailed(lf.samples.back()); } else { - outs () << " => learnt lemma for " << *decls[ind2] << "\n"; - lf2.assignPrioritiesForLearnt(lf2.samples.back()); - lf2.learntExprs.insert(cand2); - lf2.learntLemmas.push_back(lf2.samples.size() - 1); - res = true; + outs () << " => learnt lemma for " << *decls[i] << "\n"; + lf.assignPrioritiesForLearnt(lf.samples.back()); + lf.learntExprs.insert(cand); + lf.learntLemmas.push_back(lf.samples.size() - 1); } } - return res; } bool checkSafety() @@ -219,6 +223,7 @@ namespace ufo lemma2add = replaceAll(lemma2add, lf.getVarE(i), hr.srcVars[i]); } + all++; if (u.isImplies(hr.body, lemma2add)) continue; hr.lin.push_back(lemma2add); @@ -484,13 +489,12 @@ namespace ufo success = true; break; } - else - { - updateRels(); - } } - for (int j = 0; j < invNumber; j++) curCandidates[j] = NULL; // preparing for the next iteration + assignPriorities(); + updateRels(); + + for (auto &cand : curCandidates) cand = NULL; // preparing for the next iteration } if (success) outs () << "\n -----> Success after " << --iter << " iterations\n"; From 9fd1ec2f27e6288c3310136fb35b333b7554b962 Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Fri, 4 Aug 2017 13:18:20 -0700 Subject: [PATCH 029/236] naive bounded explorer; and benchmarks for which it has to find a counterexample, and freqhorn has to diverge --- .../samples_multiple_inv_01_cex.smt2 | 29 + .../samples_multiple_inv_02_cex.smt2 | 36 + .../samples_multiple_inv_03_cex.smt2 | 31 + .../samples_multiple_inv_04_cex.smt2 | 47 + bench_horn_cex/samples_only_01_cex.smt2 | 27 + bench_horn_cex/samples_only_02_cex.smt2 | 45 + bench_horn_cex/samples_only_03_cex.smt2 | 37 + bench_horn_cex/samples_only_04_cex.smt2 | 28 + bench_horn_cex/samples_only_05_cex.smt2 | 27 + bench_horn_cex/samples_only_06_cex.smt2 | 26 + bench_horn_cex/samples_only_07_cex.smt2 | 26 + bench_horn_cex/samples_only_08_cex.smt2 | 26 + bench_horn_cex/samples_search_01_cex.smt2 | 23 + bench_horn_cex/samples_search_02_cex.smt2 | 33 + bench_horn_cex/samples_search_03_cex.smt2 | 30 + bench_horn_cex/samples_search_04_cex.smt2 | 26 + bench_horn_cex/samples_search_05_cex.smt2 | 26 + bench_horn_cex/samples_search_06_cex.smt2 | 27 + bench_horn_cex/samples_search_07_cex.smt2 | 32 + bench_horn_cex/samples_search_08_cex.smt2 | 24 + bench_horn_cex/samples_search_09_cex.smt2 | 25 + bench_horn_cex/samples_search_10_cex.smt2 | 28 + bench_horn_cex/samples_search_11_cex.smt2 | 32 + bench_horn_cex/samples_search_12_cex.smt2 | 35 + bench_horn_cex/samples_search_13_cex.smt2 | 36 + bench_horn_cex/samples_search_14_cex.smt2 | 35 + bench_horn_cex/samples_search_15_cex.smt2 | 35 + .../samples_search_disj_ite_01_cex.smt2 | 32 + .../samples_search_disj_ite_02_cex.smt2 | 27 + .../samples_search_disj_ite_03_cex.smt2 | 25 + .../samples_search_disj_ite_04_cex.smt2 | 35 + .../samples_search_disj_ite_05_cex.smt2 | 25 + .../samples_search_disj_ite_06_cex.smt2 | 23 + .../samples_shrink_big_numbers_1024_cex.smt2 | 1052 +++++++++++++++++ .../samples_shrink_big_numbers_2048_cex.smt2 | 281 +++++ .../samples_shrink_big_numbers_4096_cex.smt2 | 540 +++++++++ .../samples_shrink_big_numbers_8192_cex.smt2 | 1049 ++++++++++++++++ include/deep/BndExpl.hpp | 160 +++ include/deep/Horn.hpp | 38 +- tools/CMakeLists.txt | 2 + tools/bnd/BoundedExplorer.cpp | 22 + tools/bnd/CMakeLists.txt | 4 + 42 files changed, 4127 insertions(+), 20 deletions(-) create mode 100644 bench_horn_cex/samples_multiple_inv_01_cex.smt2 create mode 100644 bench_horn_cex/samples_multiple_inv_02_cex.smt2 create mode 100644 bench_horn_cex/samples_multiple_inv_03_cex.smt2 create mode 100644 bench_horn_cex/samples_multiple_inv_04_cex.smt2 create mode 100644 bench_horn_cex/samples_only_01_cex.smt2 create mode 100644 bench_horn_cex/samples_only_02_cex.smt2 create mode 100644 bench_horn_cex/samples_only_03_cex.smt2 create mode 100644 bench_horn_cex/samples_only_04_cex.smt2 create mode 100644 bench_horn_cex/samples_only_05_cex.smt2 create mode 100644 bench_horn_cex/samples_only_06_cex.smt2 create mode 100644 bench_horn_cex/samples_only_07_cex.smt2 create mode 100644 bench_horn_cex/samples_only_08_cex.smt2 create mode 100644 bench_horn_cex/samples_search_01_cex.smt2 create mode 100644 bench_horn_cex/samples_search_02_cex.smt2 create mode 100644 bench_horn_cex/samples_search_03_cex.smt2 create mode 100644 bench_horn_cex/samples_search_04_cex.smt2 create mode 100644 bench_horn_cex/samples_search_05_cex.smt2 create mode 100644 bench_horn_cex/samples_search_06_cex.smt2 create mode 100644 bench_horn_cex/samples_search_07_cex.smt2 create mode 100644 bench_horn_cex/samples_search_08_cex.smt2 create mode 100644 bench_horn_cex/samples_search_09_cex.smt2 create mode 100644 bench_horn_cex/samples_search_10_cex.smt2 create mode 100644 bench_horn_cex/samples_search_11_cex.smt2 create mode 100644 bench_horn_cex/samples_search_12_cex.smt2 create mode 100644 bench_horn_cex/samples_search_13_cex.smt2 create mode 100644 bench_horn_cex/samples_search_14_cex.smt2 create mode 100644 bench_horn_cex/samples_search_15_cex.smt2 create mode 100644 bench_horn_cex/samples_search_disj_ite_01_cex.smt2 create mode 100644 bench_horn_cex/samples_search_disj_ite_02_cex.smt2 create mode 100644 bench_horn_cex/samples_search_disj_ite_03_cex.smt2 create mode 100644 bench_horn_cex/samples_search_disj_ite_04_cex.smt2 create mode 100644 bench_horn_cex/samples_search_disj_ite_05_cex.smt2 create mode 100644 bench_horn_cex/samples_search_disj_ite_06_cex.smt2 create mode 100644 bench_horn_cex/samples_shrink_big_numbers_1024_cex.smt2 create mode 100644 bench_horn_cex/samples_shrink_big_numbers_2048_cex.smt2 create mode 100644 bench_horn_cex/samples_shrink_big_numbers_4096_cex.smt2 create mode 100644 bench_horn_cex/samples_shrink_big_numbers_8192_cex.smt2 create mode 100644 include/deep/BndExpl.hpp create mode 100644 tools/bnd/BoundedExplorer.cpp create mode 100644 tools/bnd/CMakeLists.txt diff --git a/bench_horn_cex/samples_multiple_inv_01_cex.smt2 b/bench_horn_cex/samples_multiple_inv_01_cex.smt2 new file mode 100644 index 000000000..09d2c7259 --- /dev/null +++ b/bench_horn_cex/samples_multiple_inv_01_cex.smt2 @@ -0,0 +1,29 @@ +(declare-rel WRAP (Int)) +(declare-rel NEST (Int)) +(declare-var m Int) +(declare-var m1 Int) + +(declare-rel fail ()) + +(rule (=> + (= m 0) (WRAP m) + ) +) + +(rule (=> (WRAP m) (NEST m))) + +(rule (=> + (and + (NEST m) + (= m1 (+ m 1)) + ) + (NEST m1) + ) +) + +(rule (=> (NEST m) (WRAP m))) + +(rule (=> (and (WRAP m) (not (< m 15))) fail)) + +(query fail :print-certificate true) + diff --git a/bench_horn_cex/samples_multiple_inv_02_cex.smt2 b/bench_horn_cex/samples_multiple_inv_02_cex.smt2 new file mode 100644 index 000000000..d17afd95d --- /dev/null +++ b/bench_horn_cex/samples_multiple_inv_02_cex.smt2 @@ -0,0 +1,36 @@ +(declare-rel FUN (Int)) +(declare-rel SAD (Int)) +(declare-var m Int) +(declare-var m1 Int) + +(declare-rel fail ()) + +(rule (=> + (> m 5) (FUN m) + ) +) + +(rule (=> + (and + (FUN m) + (= m1 (+ m 1)) + ) + (FUN m1) + ) +) + +(rule (=> (FUN m) (SAD m))) + +(rule (=> + (and + (SAD m) + (= m1 (+ m 2)) + ) + (SAD m1) + ) +) + +(rule (=> (and (SAD m) (not (>= m 30))) fail)) + +(query fail :print-certificate true) + diff --git a/bench_horn_cex/samples_multiple_inv_03_cex.smt2 b/bench_horn_cex/samples_multiple_inv_03_cex.smt2 new file mode 100644 index 000000000..2bf068c8e --- /dev/null +++ b/bench_horn_cex/samples_multiple_inv_03_cex.smt2 @@ -0,0 +1,31 @@ +(declare-rel WRAP (Int)) +(declare-rel NEST (Int)) +(declare-rel WEEE (Int)) +(declare-var m Int) +(declare-var m1 Int) + +(declare-rel fail ()) + +(rule (=> (= m 0) (WRAP m))) + +(rule (=> (WRAP m) (NEST m))) + +(rule (=> (NEST m) (WEEE m))) + +(rule (=> + (and + (WEEE m) + (= m1 (+ m 1)) + ) + (WEEE m1) + ) +) + +(rule (=> (WEEE m) (NEST m))) + +(rule (=> (and (NEST m) (= m1 (- m 1))) (WRAP m1))) + +(rule (=> (and (WRAP m) (not (>= m 0))) fail)) + +(query fail :print-certificate true) + diff --git a/bench_horn_cex/samples_multiple_inv_04_cex.smt2 b/bench_horn_cex/samples_multiple_inv_04_cex.smt2 new file mode 100644 index 000000000..5dbe50df2 --- /dev/null +++ b/bench_horn_cex/samples_multiple_inv_04_cex.smt2 @@ -0,0 +1,47 @@ +(declare-rel FUN (Int)) +(declare-rel SAD (Int)) +(declare-rel WEE (Int)) +(declare-var m Int) +(declare-var m1 Int) + +(declare-rel fail ()) + +(rule (=> + (> m 50) (FUN m) + ) +) + +(rule (=> + (and + (FUN m) + (= m1 (+ m 1)) + ) + (FUN m1) + ) +) + +(rule (=> (FUN m) (SAD m))) + +(rule (=> + (and + (SAD m) + (= m1 (- m 2)) + ) + (SAD m1) + ) +) + +(rule (=> (SAD m) (WEE m))) + +(rule (=> + (and + (WEE m) + (= m1 (+ m 3)) + ) + (WEE m1) + ) +) + +(rule (=> (and (WEE m) (not (>= m 30))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn_cex/samples_only_01_cex.smt2 b/bench_horn_cex/samples_only_01_cex.smt2 new file mode 100644 index 000000000..e8edec22c --- /dev/null +++ b/bench_horn_cex/samples_only_01_cex.smt2 @@ -0,0 +1,27 @@ +(declare-rel itp (Int Int)) +(declare-var m Int) +(declare-var m1 Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var b Int) + +(declare-rel fail ()) + +(rule (=> (and (= m 0) (= i 0)) (itp m i))) + +(rule (=> + (and + (itp m i) + (= i1 (+ i 55)) + (= m1 (+ m b)) + ) + (itp m1 i1) + ) +) + + +(rule (=> (and (itp m i) (not (>= (+ m i) 0))) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn_cex/samples_only_02_cex.smt2 b/bench_horn_cex/samples_only_02_cex.smt2 new file mode 100644 index 000000000..23d52e69a --- /dev/null +++ b/bench_horn_cex/samples_only_02_cex.smt2 @@ -0,0 +1,45 @@ +(declare-rel itp (Int Int Int Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) +(declare-var x7 Int) +(declare-var x8 Int) +(declare-var x9 Int) + +(declare-rel fail ()) + +(rule (=> + (and (= x1 2) (= x2 2) (= x3 2) (= x4 2) (= x5 2)) (itp x1 x2 x3 x4 x5) + ) +) + +(rule (=> + (and + (itp x1 x3 x5 x7 x9) + (= x2 (+ x1 1)) + (= x4 (+ x3 1)) + (= x8 (+ x7 1)) + (= x0 (+ x9 1)) + ) + (itp x2 x4 x6 x8 x0) + ) +) + + +(rule (=> (and (itp x1 x3 x5 x7 x9) + (not + (and + (> x1 0) + (> x3 0) + (> x5 0) + (> x7 0) + (> x9 0) + ) + )) fail)) + + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn_cex/samples_only_03_cex.smt2 b/bench_horn_cex/samples_only_03_cex.smt2 new file mode 100644 index 000000000..ffbcadfa0 --- /dev/null +++ b/bench_horn_cex/samples_only_03_cex.smt2 @@ -0,0 +1,37 @@ +(declare-rel itp (Int Int )) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) +(declare-var x7 Int) +(declare-var x8 Int) +(declare-var x9 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= x3 0)) (itp x1 x3))) + +(rule (=> + (and + (itp x1 x3 ) + (= x2 (+ x1 1)) + (= x4 (- x3 1)) + ) + (itp x2 x4) + ) +) + + +(rule (=> (and (itp x1 x3) + (not + (and + (<= x1 100) + (>= x3 -100) + ) + )) fail)) + + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn_cex/samples_only_04_cex.smt2 b/bench_horn_cex/samples_only_04_cex.smt2 new file mode 100644 index 000000000..d47941b14 --- /dev/null +++ b/bench_horn_cex/samples_only_04_cex.smt2 @@ -0,0 +1,28 @@ +(declare-rel itp (Int Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= x3 0) (= x5 0)) (itp x1 x3 x5))) + +(rule (=> + (and + (itp x1 x3 x5) + (or (and (= x2 (+ x1 1)) (= x4 (- x3 1))) + (and (= x2 (- x1 1)) (= x4 (+ x3 1)))) + (= x6 (+ x5 x2 x4)) + ) + (itp x2 x4 x6) + ) +) + +(rule (=> (and (itp x1 x3 x5) + (not (< x5 0))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn_cex/samples_only_05_cex.smt2 b/bench_horn_cex/samples_only_05_cex.smt2 new file mode 100644 index 000000000..5dec14bb5 --- /dev/null +++ b/bench_horn_cex/samples_only_05_cex.smt2 @@ -0,0 +1,27 @@ +(declare-rel itp (Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (>= x3 x1)) (itp x1 x3))) + +(rule (=> + (and + (itp x1 x3) + (= x2 (+ x1 1)) + (= x4 (+ x3 1)) + ) + (itp x2 x4) + ) +) + +(rule (=> (and (itp x1 x3) (> x1 1000) + (not + (> x3 1001) + )) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn_cex/samples_only_06_cex.smt2 b/bench_horn_cex/samples_only_06_cex.smt2 new file mode 100644 index 000000000..5f2ae3496 --- /dev/null +++ b/bench_horn_cex/samples_only_06_cex.smt2 @@ -0,0 +1,26 @@ +(declare-rel inv (Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) +(declare-var i Int) +(declare-var i1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x 1) (= y 0) (= i 0)) (inv x y i))) + +(rule (=> + (and + (inv x y i) + (= i1 (+ i 1)) + (= x1 (+ x i1)) + (= y1 (- y i1)) + ) + (inv x1 y1 i1) + ) +) + +(rule (=> (and (inv x y i) (= 0 (- x (+ y (- 8 i 7)))) (not (= x (- y)))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn_cex/samples_only_07_cex.smt2 b/bench_horn_cex/samples_only_07_cex.smt2 new file mode 100644 index 000000000..db7e98455 --- /dev/null +++ b/bench_horn_cex/samples_only_07_cex.smt2 @@ -0,0 +1,26 @@ +(declare-rel itp (Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) + +(declare-rel fail ()) + +(rule (=> (= x3 0) (itp x3))) + +(rule (=> + (and + (itp x3) + (= x4 (ite (= x3 10) 0 (+ x3 1))) + ) + (itp x4) + ) +) + +(rule (=> (and (itp x3) + (not + (<= x3 8) + )) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn_cex/samples_only_08_cex.smt2 b/bench_horn_cex/samples_only_08_cex.smt2 new file mode 100644 index 000000000..374652621 --- /dev/null +++ b/bench_horn_cex/samples_only_08_cex.smt2 @@ -0,0 +1,26 @@ +(declare-rel inv (Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 -1) (= x3 100)) (inv x1 x3))) + +(rule (=> + (and + (inv x1 x3) + (= x2 (+ x1 1)) + (ite (ite (> x2 0) (> x3 0) (= x3 5)) + (= x4 x2) (= x4 (- x3))) + ) + (inv x2 x4) + ) +) + +(rule (=> (and (inv x1 x3) (not (> x3 0) )) fail)) + +(query fail :print-certificate true) + diff --git a/bench_horn_cex/samples_search_01_cex.smt2 b/bench_horn_cex/samples_search_01_cex.smt2 new file mode 100644 index 000000000..7474c37ba --- /dev/null +++ b/bench_horn_cex/samples_search_01_cex.smt2 @@ -0,0 +1,23 @@ +(declare-rel inv (Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var i Int) +(declare-var i1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x 32) (= i 25)) (inv x i))) + +(rule (=> + (and + (inv x i) + (= i1 (+ i 112)) + (= x1 (+ x i1)) + ) + (inv x1 i1) + ) +) + +(rule (=> (and (inv x i) (not (< x 14590))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn_cex/samples_search_02_cex.smt2 b/bench_horn_cex/samples_search_02_cex.smt2 new file mode 100644 index 000000000..bf1758483 --- /dev/null +++ b/bench_horn_cex/samples_search_02_cex.smt2 @@ -0,0 +1,33 @@ +(declare-rel itp (Int Int Int Int )) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) +(declare-var x7 Int) +(declare-var x8 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= x3 0) (= x5 0) (= x7 0)) (itp x1 x3 x5 x7))) + +(rule (=> + (and + (itp x1 x3 x5 x7) + (= x2 (+ x1 1)) + (= x4 (+ x3 x2)) + (= x6 (+ x5 x4)) + (= x8 (+ x7 x6)) + ) + (itp x2 x4 x6 x8) + ) +) + + +(rule (=> (and (itp x1 x3 x5 x7) + (not + (< x7 10000) + )) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn_cex/samples_search_03_cex.smt2 b/bench_horn_cex/samples_search_03_cex.smt2 new file mode 100644 index 000000000..ed752f1ad --- /dev/null +++ b/bench_horn_cex/samples_search_03_cex.smt2 @@ -0,0 +1,30 @@ +(declare-rel itp (Int Int Int )) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= x3 0) (= x5 0)) (itp x1 x3 x5))) + +(rule (=> + (and + (itp x1 x3 x5) + (and (= x2 (+ x1 1)) + (= x4 (+ x3 1))) + (or (= x6 (+ x5 x2)) + (= x6 (- x5 x4))) + ) + (itp x2 x4 x6) + ) +) + +(rule (=> (and (itp x1 x3 x5) + (not + (>= x5 0) + )) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn_cex/samples_search_04_cex.smt2 b/bench_horn_cex/samples_search_04_cex.smt2 new file mode 100644 index 000000000..5e548686e --- /dev/null +++ b/bench_horn_cex/samples_search_04_cex.smt2 @@ -0,0 +1,26 @@ +(declare-rel itp (Int Int)) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 -100) (= x3 0)) (itp x1 x3))) + +(rule (=> + (and + (itp x1 x3) + (= x2 (+ x1 1)) + (= x4 (+ x3 1)) + ) + (itp x2 x4) + ) +) + +(rule (=> (and (itp x1 x3) (> x1 0) + (not + (= x3 0) + )) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn_cex/samples_search_05_cex.smt2 b/bench_horn_cex/samples_search_05_cex.smt2 new file mode 100644 index 000000000..08cd9e3dc --- /dev/null +++ b/bench_horn_cex/samples_search_05_cex.smt2 @@ -0,0 +1,26 @@ +(declare-rel itp (Int Int)) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (> x3 x1)) (itp x1 x3))) + +(rule (=> + (and + (itp x1 x3) + (= x2 (+ x1 1)) + (= x4 (+ x3 2)) + ) + (itp x2 x4) + ) +) + +(rule (=> (and (itp x1 x3) (> x1 1000) + (not + (> x3 2003) + )) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn_cex/samples_search_06_cex.smt2 b/bench_horn_cex/samples_search_06_cex.smt2 new file mode 100644 index 000000000..5d46c99b2 --- /dev/null +++ b/bench_horn_cex/samples_search_06_cex.smt2 @@ -0,0 +1,27 @@ +(declare-rel inv (Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) +(declare-var i Int) +(declare-var i1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x 0) (= y 0) (= i 0)) (inv x y i))) + +(rule (=> + (and + (inv x y i) + (= i1 (+ i 1)) + (= x1 (+ x i1)) + (= y1 (- y i1)) + ) + (inv x1 y1 i1) + ) +) + +(rule (=> (and (inv x y i) (not (> x y))) fail)) + +(query fail :print-certificate true) + diff --git a/bench_horn_cex/samples_search_07_cex.smt2 b/bench_horn_cex/samples_search_07_cex.smt2 new file mode 100644 index 000000000..4c90cfeb3 --- /dev/null +++ b/bench_horn_cex/samples_search_07_cex.smt2 @@ -0,0 +1,32 @@ +(declare-rel inv (Int Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) +(declare-var nondet1 Int) +(declare-var nondet2 Int) +(declare-var nondet3 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x 0) (= y 0) (= i 0) (= j 0)) (inv x y i j))) + +(rule (=> + (and + (inv x y i j) + (= i1 (+ i nondet1)) + (= j1 (+ j nondet2)) + (= x1 (+ x nondet1)) + (= y1 (+ y nondet3)) + ) + (inv x1 y1 i1 j1) + ) +) + +(rule (=> (and (inv x y i j) (>= i j) (not (>= x y))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn_cex/samples_search_08_cex.smt2 b/bench_horn_cex/samples_search_08_cex.smt2 new file mode 100644 index 000000000..2299f4997 --- /dev/null +++ b/bench_horn_cex/samples_search_08_cex.smt2 @@ -0,0 +1,24 @@ +(declare-rel inv (Int Int)) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 -100) (= x3 (* 2 x1))) (inv x1 x3))) + +(rule (=> + (and + (inv x1 x3) + (= x2 (+ x1 1)) + (= x4 (+ x2 -2)) + ) + (inv x2 x4) + ) +) + +(rule (=> (and (inv x1 x3) (not (=> (> x1 0) (> x3 0) ))) fail)) + +(query fail :print-certificate true) + diff --git a/bench_horn_cex/samples_search_09_cex.smt2 b/bench_horn_cex/samples_search_09_cex.smt2 new file mode 100644 index 000000000..8d59dfa5c --- /dev/null +++ b/bench_horn_cex/samples_search_09_cex.smt2 @@ -0,0 +1,25 @@ +(declare-rel inv (Int Int )) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-rel fail ()) + +(rule (=> (= x1 1) (inv x1 x3))) + +(rule (=> + (and + (inv x1 x3) + (= x2 (+ x1 x1)) + (= x4 x1) + ) + (inv x2 x4) + ) +) + +(rule (=> (and (inv x1 x3) + (not + (= x1 (- (* 3 x3) x3)) + )) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn_cex/samples_search_10_cex.smt2 b/bench_horn_cex/samples_search_10_cex.smt2 new file mode 100644 index 000000000..d50d591a7 --- /dev/null +++ b/bench_horn_cex/samples_search_10_cex.smt2 @@ -0,0 +1,28 @@ +(declare-rel inv (Int Int )) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) + +(declare-rel fail ()) + +(rule (=> (and (= (- x1 878) (+ x3 602))) + (inv x1 x3))) + +(rule (=> + (and + (inv x1 x3) + (< x3 x1) + (> x4 x2) + ) + (inv x2 x4) + ) +) + +(rule (=> (and (inv x1 x3) + (not (or + (< x1 0) + (> x3 0) + ))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn_cex/samples_search_11_cex.smt2 b/bench_horn_cex/samples_search_11_cex.smt2 new file mode 100644 index 000000000..8a5a2b178 --- /dev/null +++ b/bench_horn_cex/samples_search_11_cex.smt2 @@ -0,0 +1,32 @@ +(declare-rel itp (Int Int Int)) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 1) (= x3 1) (= x5 1)) (itp x1 x3 x5))) + +(rule (=> + (and + (itp x1 x3 x5) + (= x2 (+ x1 1)) + (= x4 (+ x1 x1)) + (= x6 (+ x1 x1 x1)) + ) + (itp x2 x4 x6) + ) +) + +(rule (=> (and (itp x1 x3 x5) + (not + (or + (< (- x5 x3) 500) + (< x1 1000) + ) + )) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn_cex/samples_search_12_cex.smt2 b/bench_horn_cex/samples_search_12_cex.smt2 new file mode 100644 index 000000000..6ecc7d1f3 --- /dev/null +++ b/bench_horn_cex/samples_search_12_cex.smt2 @@ -0,0 +1,35 @@ +(declare-rel inv (Int Int Int Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) +(declare-var k Int) +(declare-var k1 Int) +(declare-var l Int) +(declare-var l1 Int) +(declare-var m Int) +(declare-var m1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x 1) (= i 1) (= j 1) (= k 1) (= l 1) (= m 1)) (inv x i j k l m))) + +(rule (=> + (and + (inv x i j k l m) + (= x1 (+ x i j k l m)) + (= i1 (+ x i j k l m)) + (= j1 (+ x i j k l m)) + (= k1 (+ x i j k l m)) + (= l1 (+ x i j k l m)) + (= m1 (+ x i j k l m)) + ) + (inv x1 i1 j1 k1 l1 m1) + ) +) + +(rule (=> (and (inv x i j k l m) (not (< x 10000))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn_cex/samples_search_13_cex.smt2 b/bench_horn_cex/samples_search_13_cex.smt2 new file mode 100644 index 000000000..9c0788733 --- /dev/null +++ b/bench_horn_cex/samples_search_13_cex.smt2 @@ -0,0 +1,36 @@ +(declare-rel inv (Int Int Int Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) +(declare-var k Int) +(declare-var k1 Int) +(declare-var l Int) +(declare-var l1 Int) +(declare-var m Int) +(declare-var m1 Int) +(declare-var nondet Int) + +(declare-rel fail ()) + +(rule (=> (and (= x 1) (= i 1) (= j 1) (= k 1) (= l 1) (= m 1)) (inv x i j k l m))) + +(rule (=> + (and + (inv x i j k l m) + (= x1 (+ x i j k l m)) + (= i1 (+ x i j k l m)) + (= j1 (+ x i j k l m)) + (= k1 (+ x i nondet k l m)) + (= l1 (+ x i j k l m)) + (= m1 (+ x i j k l m)) + ) + (inv x1 i1 j1 k1 l1 m1) + ) +) + +(rule (=> (and (inv x i j k l m) (not (= (+ x i j) (+ k l m)))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn_cex/samples_search_14_cex.smt2 b/bench_horn_cex/samples_search_14_cex.smt2 new file mode 100644 index 000000000..1169ea834 --- /dev/null +++ b/bench_horn_cex/samples_search_14_cex.smt2 @@ -0,0 +1,35 @@ +(declare-rel inv (Int Int Int Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) +(declare-var k Int) +(declare-var k1 Int) +(declare-var l Int) +(declare-var l1 Int) +(declare-var m Int) +(declare-var m1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x 1) (= i 1) (= j 1) (= k 0) (= l 1) (= m 1)) (inv x i j k l m))) + +(rule (=> + (and + (inv x i j k l m) + (= x1 (+ x i j k l m)) + (= i1 (+ x i j k l m)) + (= j1 (+ x i j k l m)) + (= k1 (+ x i j k l m)) + (= l1 (+ x i j k l m)) + (= m1 (+ x i j k l m)) + ) + (inv x1 i1 j1 k1 l1 m1) + ) +) + +(rule (=> (and (inv x i j k l m) (not (= (+ x i j k l) (* 5 m)))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn_cex/samples_search_15_cex.smt2 b/bench_horn_cex/samples_search_15_cex.smt2 new file mode 100644 index 000000000..d6513762f --- /dev/null +++ b/bench_horn_cex/samples_search_15_cex.smt2 @@ -0,0 +1,35 @@ +(declare-rel inv (Int Int Int Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) +(declare-var k Int) +(declare-var k1 Int) +(declare-var l Int) +(declare-var l1 Int) +(declare-var m Int) +(declare-var m1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x 1) (= i 1) (= j 1) (= k 1) (= l 1) (= m 1)) (inv x i j k l m))) + +(rule (=> + (and + (inv x i j k l m) + (= x1 (+ x i j k l m)) + (= i1 (+ x i j k l m)) + (= j1 (+ x i j k l m)) + (= k1 (+ x i j k l m)) + (= l1 (+ x i j k l m)) + (= m1 (+ x i j k l m)) + ) + (inv x1 i1 j1 k1 l1 m1) + ) +) + +(rule (=> (and (inv x i j k l m) (not (> (* 2 (+ x i)) (* 4 m)))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn_cex/samples_search_disj_ite_01_cex.smt2 b/bench_horn_cex/samples_search_disj_ite_01_cex.smt2 new file mode 100644 index 000000000..6175e0bfe --- /dev/null +++ b/bench_horn_cex/samples_search_disj_ite_01_cex.smt2 @@ -0,0 +1,32 @@ +(declare-rel itp (Int Int)) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) + +(declare-rel fail ()) + +(rule (=> + (and (= x1 0) (= x3 100)) (itp x1 x3) + ) +) + +(rule (=> + (and + (itp x1 x3) + (= x2 (+ x1 1)) + (= x4 (+ (ite (> x2 0) 1 0) + (ite (> x3 10) -1 x3))) + + ) + (itp x2 x4) + ) +) + +(rule (=> (and (itp x1 x3) (> x1 10) + (not + (= x3 x1) + )) fail)) + +(query fail :print-certificate true) + diff --git a/bench_horn_cex/samples_search_disj_ite_02_cex.smt2 b/bench_horn_cex/samples_search_disj_ite_02_cex.smt2 new file mode 100644 index 000000000..1d7105167 --- /dev/null +++ b/bench_horn_cex/samples_search_disj_ite_02_cex.smt2 @@ -0,0 +1,27 @@ +(declare-rel itp (Int Int)) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 -10) (= x3 -100)) (itp x1 x3))) + +(rule (=> + (and + (itp x1 x3) + (= x2 (+ x1 1)) + (= (ite (> x2 0) x4 (+ 1 x4)) + (ite (> x3 10) 0 (+ x3 1))) + ) + (itp x2 x4) + ) +) + +(rule (=> (and (itp x1 x3) (> x1 10) + (not + (= x3 x1) + )) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn_cex/samples_search_disj_ite_03_cex.smt2 b/bench_horn_cex/samples_search_disj_ite_03_cex.smt2 new file mode 100644 index 000000000..0f257f5a9 --- /dev/null +++ b/bench_horn_cex/samples_search_disj_ite_03_cex.smt2 @@ -0,0 +1,25 @@ +(declare-rel itp (Int Int)) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 -100) (= x3 100)) (itp x1 x3))) + +(rule (=> + (and + (itp x1 x3) + (= x2 (+ x1 1)) + (= x4 (ite (= x3 10) 0 (+ x3 1))) + ) + (itp x2 x4) + ) +) + +(rule (=> (and (itp x1 x3) (> x1 10) + (not (< x3 x1) +)) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn_cex/samples_search_disj_ite_04_cex.smt2 b/bench_horn_cex/samples_search_disj_ite_04_cex.smt2 new file mode 100644 index 000000000..3841804b9 --- /dev/null +++ b/bench_horn_cex/samples_search_disj_ite_04_cex.smt2 @@ -0,0 +1,35 @@ +(declare-rel itp (Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) +(declare-var x7 Int) +(declare-var x8 Int) +(declare-var x9 Int) + +(declare-rel fail ()) + +(rule (=> + (and (= x1 0) (= x3 100)) (itp x1 x3) + ) +) + +(rule (=> + (and + (itp x1 x3) + (= x2 (+ x1 1)) + (= (+ 10 (ite (> x3 10) -1 x3)) x4) + ) + (itp x2 x4) + ) +) + +(rule (=> (and (itp x1 x3) (> x1 10) + (not + (< x3 x1) + )) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn_cex/samples_search_disj_ite_05_cex.smt2 b/bench_horn_cex/samples_search_disj_ite_05_cex.smt2 new file mode 100644 index 000000000..18e9a195c --- /dev/null +++ b/bench_horn_cex/samples_search_disj_ite_05_cex.smt2 @@ -0,0 +1,25 @@ +(declare-rel inv (Int Int)) +(declare-var x Int) +(declare-var x2 Int) +(declare-var y Int) +(declare-var y2 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x 0) (= y 50)) (inv x y))) + +(rule (=> + (and + (inv x y) + (< x 100) + (= x2 (+ x 1)) + (ite (> x2 50) (= y2 (+ y 1)) (= y2 y)) + ) + (inv x2 y2) + ) +) + +(rule (=> (and (inv x y) (= x 100) (not (> y 100))) fail)) + +(query fail :print-certificate true) + diff --git a/bench_horn_cex/samples_search_disj_ite_06_cex.smt2 b/bench_horn_cex/samples_search_disj_ite_06_cex.smt2 new file mode 100644 index 000000000..8c6c8a66e --- /dev/null +++ b/bench_horn_cex/samples_search_disj_ite_06_cex.smt2 @@ -0,0 +1,23 @@ +(declare-rel inv (Int Int)) +(declare-var x Int) +(declare-var x2 Int) +(declare-var y Int) +(declare-var y2 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x 0) (= y 500)) (inv x y))) + +(rule (=> + (and + (inv x y) + (= x2 (+ x 1)) + (ite (> x2 500) (= y2 (+ y 1)) (= y2 y)) + ) + (inv x2 y2) + ) +) + +(rule (=> (and (> x 500) (inv x y) (not (> y x))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn_cex/samples_shrink_big_numbers_1024_cex.smt2 b/bench_horn_cex/samples_shrink_big_numbers_1024_cex.smt2 new file mode 100644 index 000000000..c77c5f8fa --- /dev/null +++ b/bench_horn_cex/samples_shrink_big_numbers_1024_cex.smt2 @@ -0,0 +1,1052 @@ +(declare-rel itp (Int)) +(declare-var x Int) +(declare-var x1 Int) + +(declare-rel fail ()) + +(rule (=> (and + (or + (= x 1) + (= x 2) + (= x 3) + (= x 4) + (= x 5) + (= x 6) + (= x 7) + (= x 8) + (= x 9) + (= x 10) + (= x 11) + (= x 12) + (= x 13) + (= x 14) + (= x 15) + (= x 16) + (= x 17) + (= x 18) + (= x 19) + (= x 20) + (= x 21) + (= x 22) + (= x 23) + (= x 24) + (= x 25) + (= x 26) + (= x 27) + (= x 28) + (= x 29) + (= x 30) + (= x 31) + (= x 32) + (= x 33) + (= x 34) + (= x 35) + (= x 36) + (= x 37) + (= x 38) + (= x 39) + (= x 40) + (= x 41) + (= x 42) + (= x 43) + (= x 44) + (= x 45) + (= x 46) + (= x 47) + (= x 48) + (= x 49) + (= x 50) + (= x 51) + (= x 52) + (= x 53) + (= x 54) + (= x 55) + (= x 56) + (= x 57) + (= x 58) + (= x 59) + (= x 60) + (= x 61) + (= x 62) + (= x 63) + (= x 64) + (= x 65) + (= x 66) + (= x 67) + (= x 68) + (= x 69) + (= x 70) + (= x 71) + (= x 72) + (= x 73) + (= x 74) + (= x 75) + (= x 76) + (= x 77) + (= x 78) + (= x 79) + (= x 80) + (= x 81) + (= x 82) + (= x 83) + (= x 84) + (= x 85) + (= x 86) + (= x 87) + (= x 88) + (= x 89) + (= x 90) + (= x 91) + (= x 92) + (= x 93) + (= x 94) + (= x 95) + (= x 96) + (= x 97) + (= x 98) + (= x 99) + (= x 100) + (= x 101) + (= x 102) + (= x 103) + (= x 104) + (= x 105) + (= x 106) + (= x 107) + (= x 108) + (= x 109) + (= x 110) + (= x 111) + (= x 112) + (= x 113) + (= x 114) + (= x 115) + (= x 116) + (= x 117) + (= x 118) + (= x 119) + (= x 120) + (= x 121) + (= x 122) + (= x 123) + (= x 124) + (= x 125) + (= x 126) + (= x 127) + (= x 128) + (= x 129) + (= x 130) + (= x 131) + (= x 132) + (= x 133) + (= x 134) + (= x 135) + (= x 136) + (= x 137) + (= x 138) + (= x 139) + (= x 140) + (= x 141) + (= x 142) + (= x 143) + (= x 144) + (= x 145) + (= x 146) + (= x 147) + (= x 148) + (= x 149) + (= x 150) + (= x 151) + (= x 152) + (= x 153) + (= x 154) + (= x 155) + (= x 156) + (= x 157) + (= x 158) + (= x 159) + (= x 160) + (= x 161) + (= x 162) + (= x 163) + (= x 164) + (= x 165) + (= x 166) + (= x 167) + (= x 168) + (= x 169) + (= x 170) + (= x 171) + (= x 172) + (= x 173) + (= x 174) + (= x 175) + (= x 176) + (= x 177) + (= x 178) + (= x 179) + (= x 180) + (= x 181) + (= x 182) + (= x 183) + (= x 184) + (= x 185) + (= x 186) + (= x 187) + (= x 188) + (= x 189) + (= x 190) + (= x 191) + (= x 192) + (= x 193) + (= x 194) + (= x 195) + (= x 196) + (= x 197) + (= x 198) + (= x 199) + (= x 200) + (= x 201) + (= x 202) + (= x 203) + (= x 204) + (= x 205) + (= x 206) + (= x 207) + (= x 208) + (= x 209) + (= x 210) + (= x 211) + (= x 212) + (= x 213) + (= x 214) + (= x 215) + (= x 216) + (= x 217) + (= x 218) + (= x 219) + (= x 220) + (= x 221) + (= x 222) + (= x 223) + (= x 224) + (= x 225) + (= x 226) + (= x 227) + (= x 228) + (= x 229) + (= x 230) + (= x 231) + (= x 232) + (= x 233) + (= x 234) + (= x 235) + (= x 236) + (= x 237) + (= x 238) + (= x 239) + (= x 240) + (= x 241) + (= x 242) + (= x 243) + (= x 244) + (= x 245) + (= x 246) + (= x 247) + (= x 248) + (= x 249) + (= x 250) + (= x 251) + (= x 252) + (= x 253) + (= x 254) + (= x 255) + (= x 256) + (= x 257) + (= x 258) + (= x 259) + (= x 260) + (= x 261) + (= x 262) + (= x 263) + (= x 264) + (= x 265) + (= x 266) + (= x 267) + (= x 268) + (= x 269) + (= x 270) + (= x 271) + (= x 272) + (= x 273) + (= x 274) + (= x 275) + (= x 276) + (= x 277) + (= x 278) + (= x 279) + (= x 280) + (= x 281) + (= x 282) + (= x 283) + (= x 284) + (= x 285) + (= x 286) + (= x 287) + (= x 288) + (= x 289) + (= x 290) + (= x 291) + (= x 292) + (= x 293) + (= x 294) + (= x 295) + (= x 296) + (= x 297) + (= x 298) + (= x 299) + (= x 300) + (= x 301) + (= x 302) + (= x 303) + (= x 304) + (= x 305) + (= x 306) + (= x 307) + (= x 308) + (= x 309) + (= x 310) + (= x 311) + (= x 312) + (= x 313) + (= x 314) + (= x 315) + (= x 316) + (= x 317) + (= x 318) + (= x 319) + (= x 320) + (= x 321) + (= x 322) + (= x 323) + (= x 324) + (= x 325) + (= x 326) + (= x 327) + (= x 328) + (= x 329) + (= x 330) + (= x 331) + (= x 332) + (= x 333) + (= x 334) + (= x 335) + (= x 336) + (= x 337) + (= x 338) + (= x 339) + (= x 340) + (= x 341) + (= x 342) + (= x 343) + (= x 344) + (= x 345) + (= x 346) + (= x 347) + (= x 348) + (= x 349) + (= x 350) + (= x 351) + (= x 352) + (= x 353) + (= x 354) + (= x 355) + (= x 356) + (= x 357) + (= x 358) + (= x 359) + (= x 360) + (= x 361) + (= x 362) + (= x 363) + (= x 364) + (= x 365) + (= x 366) + (= x 367) + (= x 368) + (= x 369) + (= x 370) + (= x 371) + (= x 372) + (= x 373) + (= x 374) + (= x 375) + (= x 376) + (= x 377) + (= x 378) + (= x 379) + (= x 380) + (= x 381) + (= x 382) + (= x 383) + (= x 384) + (= x 385) + (= x 386) + (= x 387) + (= x 388) + (= x 389) + (= x 390) + (= x 391) + (= x 392) + (= x 393) + (= x 394) + (= x 395) + (= x 396) + (= x 397) + (= x 398) + (= x 399) + (= x 400) + (= x 401) + (= x 402) + (= x 403) + (= x 404) + (= x 405) + (= x 406) + (= x 407) + (= x 408) + (= x 409) + (= x 410) + (= x 411) + (= x 412) + (= x 413) + (= x 414) + (= x 415) + (= x 416) + (= x 417) + (= x 418) + (= x 419) + (= x 420) + (= x 421) + (= x 422) + (= x 423) + (= x 424) + (= x 425) + (= x 426) + (= x 427) + (= x 428) + (= x 429) + (= x 430) + (= x 431) + (= x 432) + (= x 433) + (= x 434) + (= x 435) + (= x 436) + (= x 437) + (= x 438) + (= x 439) + (= x 440) + (= x 441) + (= x 442) + (= x 443) + (= x 444) + (= x 445) + (= x 446) + (= x 447) + (= x 448) + (= x 449) + (= x 450) + (= x 451) + (= x 452) + (= x 453) + (= x 454) + (= x 455) + (= x 456) + (= x 457) + (= x 458) + (= x 459) + (= x 460) + (= x 461) + (= x 462) + (= x 463) + (= x 464) + (= x 465) + (= x 466) + (= x 467) + (= x 468) + (= x 469) + (= x 470) + (= x 471) + (= x 472) + (= x 473) + (= x 474) + (= x 475) + (= x 476) + (= x 477) + (= x 478) + (= x 479) + (= x 480) + (= x 481) + (= x 482) + (= x 483) + (= x 484) + (= x 485) + (= x 486) + (= x 487) + (= x 488) + (= x 489) + (= x 490) + (= x 491) + (= x 492) + (= x 493) + (= x 494) + (= x 495) + (= x 496) + (= x 497) + (= x 498) + (= x 499) + (= x 500) + (= x 501) + (= x 502) + (= x 503) + (= x 504) + (= x 505) + (= x 506) + (= x 507) + (= x 508) + (= x 509) + (= x 510) + (= x 511) + (= x 512) + (= x 513) + (= x 514) + (= x 515) + (= x 516) + (= x 517) + (= x 518) + (= x 519) + (= x 520) + (= x 521) + (= x 522) + (= x 523) + (= x 524) + (= x 525) + (= x 526) + (= x 527) + (= x 528) + (= x 529) + (= x 530) + (= x 531) + (= x 532) + (= x 533) + (= x 534) + (= x 535) + (= x 536) + (= x 537) + (= x 538) + (= x 539) + (= x 540) + (= x 541) + (= x 542) + (= x 543) + (= x 544) + (= x 545) + (= x 546) + (= x 547) + (= x 548) + (= x 549) + (= x 550) + (= x 551) + (= x 552) + (= x 553) + (= x 554) + (= x 555) + (= x 556) + (= x 557) + (= x 558) + (= x 559) + (= x 560) + (= x 561) + (= x 562) + (= x 563) + (= x 564) + (= x 565) + (= x 566) + (= x 567) + (= x 568) + (= x 569) + (= x 570) + (= x 571) + (= x 572) + (= x 573) + (= x 574) + (= x 575) + (= x 576) + (= x 577) + (= x 578) + (= x 579) + (= x 580) + (= x 581) + (= x 582) + (= x 583) + (= x 584) + (= x 585) + (= x 586) + (= x 587) + (= x 588) + (= x 589) + (= x 590) + (= x 591) + (= x 592) + (= x 593) + (= x 594) + (= x 595) + (= x 596) + (= x 597) + (= x 598) + (= x 599) + (= x 600) + (= x 601) + (= x 602) + (= x 603) + (= x 604) + (= x 605) + (= x 606) + (= x 607) + (= x 608) + (= x 609) + (= x 610) + (= x 611) + (= x 612) + (= x 613) + (= x 614) + (= x 615) + (= x 616) + (= x 617) + (= x 618) + (= x 619) + (= x 620) + (= x 621) + (= x 622) + (= x 623) + (= x 624) + (= x 625) + (= x 626) + (= x 627) + (= x 628) + (= x 629) + (= x 630) + (= x 631) + (= x 632) + (= x 633) + (= x 634) + (= x 635) + (= x 636) + (= x 637) + (= x 638) + (= x 639) + (= x 640) + (= x 641) + (= x 642) + (= x 643) + (= x 644) + (= x 645) + (= x 646) + (= x 647) + (= x 648) + (= x 649) + (= x 650) + (= x 651) + (= x 652) + (= x 653) + (= x 654) + (= x 655) + (= x 656) + (= x 657) + (= x 658) + (= x 659) + (= x 660) + (= x 661) + (= x 662) + (= x 663) + (= x 664) + (= x 665) + (= x 666) + (= x 667) + (= x 668) + (= x 669) + (= x 670) + (= x 671) + (= x 672) + (= x 673) + (= x 674) + (= x 675) + (= x 676) + (= x 677) + (= x 678) + (= x 679) + (= x 680) + (= x 681) + (= x 682) + (= x 683) + (= x 684) + (= x 685) + (= x 686) + (= x 687) + (= x 688) + (= x 689) + (= x 690) + (= x 691) + (= x 692) + (= x 693) + (= x 694) + (= x 695) + (= x 696) + (= x 697) + (= x 698) + (= x 699) + (= x 700) + (= x 701) + (= x 702) + (= x 703) + (= x 704) + (= x 705) + (= x 706) + (= x 707) + (= x 708) + (= x 709) + (= x 710) + (= x 711) + (= x 712) + (= x 713) + (= x 714) + (= x 715) + (= x 716) + (= x 717) + (= x 718) + (= x 719) + (= x 720) + (= x 721) + (= x 722) + (= x 723) + (= x 724) + (= x 725) + (= x 726) + (= x 727) + (= x 728) + (= x 729) + (= x 730) + (= x 731) + (= x 732) + (= x 733) + (= x 734) + (= x 735) + (= x 736) + (= x 737) + (= x 738) + (= x 739) + (= x 740) + (= x 741) + (= x 742) + (= x 743) + (= x 744) + (= x 745) + (= x 746) + (= x 747) + (= x 748) + (= x 749) + (= x 750) + (= x 751) + (= x 752) + (= x 753) + (= x 754) + (= x 755) + (= x 756) + (= x 757) + (= x 758) + (= x 759) + (= x 760) + (= x 761) + (= x 762) + (= x 763) + (= x 764) + (= x 765) + (= x 766) + (= x 767) + (= x 768) + (= x 769) + (= x 770) + (= x 771) + (= x 772) + (= x 773) + (= x 774) + (= x 775) + (= x 776) + (= x 777) + (= x 778) + (= x 779) + (= x 780) + (= x 781) + (= x 782) + (= x 783) + (= x 784) + (= x 785) + (= x 786) + (= x 787) + (= x 788) + (= x 789) + (= x 790) + (= x 791) + (= x 792) + (= x 793) + (= x 794) + (= x 795) + (= x 796) + (= x 797) + (= x 798) + (= x 799) + (= x 800) + (= x 801) + (= x 802) + (= x 803) + (= x 804) + (= x 805) + (= x 806) + (= x 807) + (= x 808) + (= x 809) + (= x 810) + (= x 811) + (= x 812) + (= x 813) + (= x 814) + (= x 815) + (= x 816) + (= x 817) + (= x 818) + (= x 819) + (= x 820) + (= x 821) + (= x 822) + (= x 823) + (= x 824) + (= x 825) + (= x 826) + (= x 827) + (= x 828) + (= x 829) + (= x 830) + (= x 831) + (= x 832) + (= x 833) + (= x 834) + (= x 835) + (= x 836) + (= x 837) + (= x 838) + (= x 839) + (= x 840) + (= x 841) + (= x 842) + (= x 843) + (= x 844) + (= x 845) + (= x 846) + (= x 847) + (= x 848) + (= x 849) + (= x 850) + (= x 851) + (= x 852) + (= x 853) + (= x 854) + (= x 855) + (= x 856) + (= x 857) + (= x 858) + (= x 859) + (= x 860) + (= x 861) + (= x 862) + (= x 863) + (= x 864) + (= x 865) + (= x 866) + (= x 867) + (= x 868) + (= x 869) + (= x 870) + (= x 871) + (= x 872) + (= x 873) + (= x 874) + (= x 875) + (= x 876) + (= x 877) + (= x 878) + (= x 879) + (= x 880) + (= x 881) + (= x 882) + (= x 883) + (= x 884) + (= x 885) + (= x 886) + (= x 887) + (= x 888) + (= x 889) + (= x 890) + (= x 891) + (= x 892) + (= x 893) + (= x 894) + (= x 895) + (= x 896) + (= x 897) + (= x 898) + (= x 899) + (= x 900) + (= x 901) + (= x 902) + (= x 903) + (= x 904) + (= x 905) + (= x 906) + (= x 907) + (= x 908) + (= x 909) + (= x 910) + (= x 911) + (= x 912) + (= x 913) + (= x 914) + (= x 915) + (= x 916) + (= x 917) + (= x 918) + (= x 919) + (= x 920) + (= x 921) + (= x 922) + (= x 923) + (= x 924) + (= x 925) + (= x 926) + (= x 927) + (= x 928) + (= x 929) + (= x 930) + (= x 931) + (= x 932) + (= x 933) + (= x 934) + (= x 935) + (= x 936) + (= x 937) + (= x 938) + (= x 939) + (= x 940) + (= x 941) + (= x 942) + (= x 943) + (= x 944) + (= x 945) + (= x 946) + (= x 947) + (= x 948) + (= x 949) + (= x 950) + (= x 951) + (= x 952) + (= x 953) + (= x 954) + (= x 955) + (= x 956) + (= x 957) + (= x 958) + (= x 959) + (= x 960) + (= x 961) + (= x 962) + (= x 963) + (= x 964) + (= x 965) + (= x 966) + (= x 967) + (= x 968) + (= x 969) + (= x 970) + (= x 971) + (= x 972) + (= x 973) + (= x 974) + (= x 975) + (= x 976) + (= x 977) + (= x 978) + (= x 979) + (= x 980) + (= x 981) + (= x 982) + (= x 983) + (= x 984) + (= x 985) + (= x 986) + (= x 987) + (= x 988) + (= x 989) + (= x 990) + (= x 991) + (= x 992) + (= x 993) + (= x 994) + (= x 995) + (= x 996) + (= x 997) + (= x 998) + (= x 999) + (= x 1000) + (= x 1001) + (= x 1002) + (= x 1003) + (= x 1004) + (= x 1005) + (= x 1006) + (= x 1007) + (= x 1008) + (= x 1009) + (= x 1010) + (= x 1011) + (= x 1012) + (= x 1013) + (= x 1014) + (= x 1015) + (= x 1016) + (= x 1017) + (= x 1018) + (= x 1019) + (= x 1020) + (= x 1021) + (= x 1022) + (= x 1023) + (= x 1024) + )) + (itp x)) +) + +(rule (=> + (and + (itp x) + (= x1 (+ x 1)) + ) + (itp x1) +)) + + +(rule (=> (and (itp x) + (not (> x 1) + )) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn_cex/samples_shrink_big_numbers_2048_cex.smt2 b/bench_horn_cex/samples_shrink_big_numbers_2048_cex.smt2 new file mode 100644 index 000000000..7c417dc21 --- /dev/null +++ b/bench_horn_cex/samples_shrink_big_numbers_2048_cex.smt2 @@ -0,0 +1,281 @@ +(declare-rel itp (Int)) +(declare-var x Int) +(declare-var x1 Int) + +(declare-rel fail ()) + +(rule (=> (and + (or + (= x 1) (= x 2) (= x 3) (= x 4) (= x 5) (= x 6) (= x 7) (= x 8) + (= x 9) (= x 10) (= x 11) (= x 12) (= x 13) (= x 14) (= x 15) (= x 16) + (= x 17) (= x 18) (= x 19) (= x 20) (= x 21) (= x 22) (= x 23) (= x 24) + (= x 25) (= x 26) (= x 27) (= x 28) (= x 29) (= x 30) (= x 31) (= x 32) + (= x 33) (= x 34) (= x 35) (= x 36) (= x 37) (= x 38) (= x 39) (= x 40) + (= x 41) (= x 42) (= x 43) (= x 44) (= x 45) (= x 46) (= x 47) (= x 48) + (= x 49) (= x 50) (= x 51) (= x 52) (= x 53) (= x 54) (= x 55) (= x 56) + (= x 57) (= x 58) (= x 59) (= x 60) (= x 61) (= x 62) (= x 63) (= x 64) + (= x 65) (= x 66) (= x 67) (= x 68) (= x 69) (= x 70) (= x 71) (= x 72) + (= x 73) (= x 74) (= x 75) (= x 76) (= x 77) (= x 78) (= x 79) (= x 80) + (= x 81) (= x 82) (= x 83) (= x 84) (= x 85) (= x 86) (= x 87) (= x 88) + (= x 89) (= x 90) (= x 91) (= x 92) (= x 93) (= x 94) (= x 95) (= x 96) + (= x 97) (= x 98) (= x 99) (= x 100) (= x 101) (= x 102) (= x 103) (= x 104) + (= x 105) (= x 106) (= x 107) (= x 108) (= x 109) (= x 110) (= x 111) (= x 112) + (= x 113) (= x 114) (= x 115) (= x 116) (= x 117) (= x 118) (= x 119) (= x 120) + (= x 121) (= x 122) (= x 123) (= x 124) (= x 125) (= x 126) (= x 127) (= x 128) + (= x 129) (= x 130) (= x 131) (= x 132) (= x 133) (= x 134) (= x 135) (= x 136) + (= x 137) (= x 138) (= x 139) (= x 140) (= x 141) (= x 142) (= x 143) (= x 144) + (= x 145) (= x 146) (= x 147) (= x 148) (= x 149) (= x 150) (= x 151) (= x 152) + (= x 153) (= x 154) (= x 155) (= x 156) (= x 157) (= x 158) (= x 159) (= x 160) + (= x 161) (= x 162) (= x 163) (= x 164) (= x 165) (= x 166) (= x 167) (= x 168) + (= x 169) (= x 170) (= x 171) (= x 172) (= x 173) (= x 174) (= x 175) (= x 176) + (= x 177) (= x 178) (= x 179) (= x 180) (= x 181) (= x 182) (= x 183) (= x 184) + (= x 185) (= x 186) (= x 187) (= x 188) (= x 189) (= x 190) (= x 191) (= x 192) + (= x 193) (= x 194) (= x 195) (= x 196) (= x 197) (= x 198) (= x 199) (= x 200) + (= x 201) (= x 202) (= x 203) (= x 204) (= x 205) (= x 206) (= x 207) (= x 208) + (= x 209) (= x 210) (= x 211) (= x 212) (= x 213) (= x 214) (= x 215) (= x 216) + (= x 217) (= x 218) (= x 219) (= x 220) (= x 221) (= x 222) (= x 223) (= x 224) + (= x 225) (= x 226) (= x 227) (= x 228) (= x 229) (= x 230) (= x 231) (= x 232) + (= x 233) (= x 234) (= x 235) (= x 236) (= x 237) (= x 238) (= x 239) (= x 240) + (= x 241) (= x 242) (= x 243) (= x 244) (= x 245) (= x 246) (= x 247) (= x 248) + (= x 249) (= x 250) (= x 251) (= x 252) (= x 253) (= x 254) (= x 255) (= x 256) + (= x 257) (= x 258) (= x 259) (= x 260) (= x 261) (= x 262) (= x 263) (= x 264) + (= x 265) (= x 266) (= x 267) (= x 268) (= x 269) (= x 270) (= x 271) (= x 272) + (= x 273) (= x 274) (= x 275) (= x 276) (= x 277) (= x 278) (= x 279) (= x 280) + (= x 281) (= x 282) (= x 283) (= x 284) (= x 285) (= x 286) (= x 287) (= x 288) + (= x 289) (= x 290) (= x 291) (= x 292) (= x 293) (= x 294) (= x 295) (= x 296) + (= x 297) (= x 298) (= x 299) (= x 300) (= x 301) (= x 302) (= x 303) (= x 304) + (= x 305) (= x 306) (= x 307) (= x 308) (= x 309) (= x 310) (= x 311) (= x 312) + (= x 313) (= x 314) (= x 315) (= x 316) (= x 317) (= x 318) (= x 319) (= x 320) + (= x 321) (= x 322) (= x 323) (= x 324) (= x 325) (= x 326) (= x 327) (= x 328) + (= x 329) (= x 330) (= x 331) (= x 332) (= x 333) (= x 334) (= x 335) (= x 336) + (= x 337) (= x 338) (= x 339) (= x 340) (= x 341) (= x 342) (= x 343) (= x 344) + (= x 345) (= x 346) (= x 347) (= x 348) (= x 349) (= x 350) (= x 351) (= x 352) + (= x 353) (= x 354) (= x 355) (= x 356) (= x 357) (= x 358) (= x 359) (= x 360) + (= x 361) (= x 362) (= x 363) (= x 364) (= x 365) (= x 366) (= x 367) (= x 368) + (= x 369) (= x 370) (= x 371) (= x 372) (= x 373) (= x 374) (= x 375) (= x 376) + (= x 377) (= x 378) (= x 379) (= x 380) (= x 381) (= x 382) (= x 383) (= x 384) + (= x 385) (= x 386) (= x 387) (= x 388) (= x 389) (= x 390) (= x 391) (= x 392) + (= x 393) (= x 394) (= x 395) (= x 396) (= x 397) (= x 398) (= x 399) (= x 400) + (= x 401) (= x 402) (= x 403) (= x 404) (= x 405) (= x 406) (= x 407) (= x 408) + (= x 409) (= x 410) (= x 411) (= x 412) (= x 413) (= x 414) (= x 415) (= x 416) + (= x 417) (= x 418) (= x 419) (= x 420) (= x 421) (= x 422) (= x 423) (= x 424) + (= x 425) (= x 426) (= x 427) (= x 428) (= x 429) (= x 430) (= x 431) (= x 432) + (= x 433) (= x 434) (= x 435) (= x 436) (= x 437) (= x 438) (= x 439) (= x 440) + (= x 441) (= x 442) (= x 443) (= x 444) (= x 445) (= x 446) (= x 447) (= x 448) + (= x 449) (= x 450) (= x 451) (= x 452) (= x 453) (= x 454) (= x 455) (= x 456) + (= x 457) (= x 458) (= x 459) (= x 460) (= x 461) (= x 462) (= x 463) (= x 464) + (= x 465) (= x 466) (= x 467) (= x 468) (= x 469) (= x 470) (= x 471) (= x 472) + (= x 473) (= x 474) (= x 475) (= x 476) (= x 477) (= x 478) (= x 479) (= x 480) + (= x 481) (= x 482) (= x 483) (= x 484) (= x 485) (= x 486) (= x 487) (= x 488) + (= x 489) (= x 490) (= x 491) (= x 492) (= x 493) (= x 494) (= x 495) (= x 496) + (= x 497) (= x 498) (= x 499) (= x 500) (= x 501) (= x 502) (= x 503) (= x 504) + (= x 505) (= x 506) (= x 507) (= x 508) (= x 509) (= x 510) (= x 511) (= x 512) + (= x 513) (= x 514) (= x 515) (= x 516) (= x 517) (= x 518) (= x 519) (= x 520) + (= x 521) (= x 522) (= x 523) (= x 524) (= x 525) (= x 526) (= x 527) (= x 528) + (= x 529) (= x 530) (= x 531) (= x 532) (= x 533) (= x 534) (= x 535) (= x 536) + (= x 537) (= x 538) (= x 539) (= x 540) (= x 541) (= x 542) (= x 543) (= x 544) + (= x 545) (= x 546) (= x 547) (= x 548) (= x 549) (= x 550) (= x 551) (= x 552) + (= x 553) (= x 554) (= x 555) (= x 556) (= x 557) (= x 558) (= x 559) (= x 560) + (= x 561) (= x 562) (= x 563) (= x 564) (= x 565) (= x 566) (= x 567) (= x 568) + (= x 569) (= x 570) (= x 571) (= x 572) (= x 573) (= x 574) (= x 575) (= x 576) + (= x 577) (= x 578) (= x 579) (= x 580) (= x 581) (= x 582) (= x 583) (= x 584) + (= x 585) (= x 586) (= x 587) (= x 588) (= x 589) (= x 590) (= x 591) (= x 592) + (= x 593) (= x 594) (= x 595) (= x 596) (= x 597) (= x 598) (= x 599) (= x 600) + (= x 601) (= x 602) (= x 603) (= x 604) (= x 605) (= x 606) (= x 607) (= x 608) + (= x 609) (= x 610) (= x 611) (= x 612) (= x 613) (= x 614) (= x 615) (= x 616) + (= x 617) (= x 618) (= x 619) (= x 620) (= x 621) (= x 622) (= x 623) (= x 624) + (= x 625) (= x 626) (= x 627) (= x 628) (= x 629) (= x 630) (= x 631) (= x 632) + (= x 633) (= x 634) (= x 635) (= x 636) (= x 637) (= x 638) (= x 639) (= x 640) + (= x 641) (= x 642) (= x 643) (= x 644) (= x 645) (= x 646) (= x 647) (= x 648) + (= x 649) (= x 650) (= x 651) (= x 652) (= x 653) (= x 654) (= x 655) (= x 656) + (= x 657) (= x 658) (= x 659) (= x 660) (= x 661) (= x 662) (= x 663) (= x 664) + (= x 665) (= x 666) (= x 667) (= x 668) (= x 669) (= x 670) (= x 671) (= x 672) + (= x 673) (= x 674) (= x 675) (= x 676) (= x 677) (= x 678) (= x 679) (= x 680) + (= x 681) (= x 682) (= x 683) (= x 684) (= x 685) (= x 686) (= x 687) (= x 688) + (= x 689) (= x 690) (= x 691) (= x 692) (= x 693) (= x 694) (= x 695) (= x 696) + (= x 697) (= x 698) (= x 699) (= x 700) (= x 701) (= x 702) (= x 703) (= x 704) + (= x 705) (= x 706) (= x 707) (= x 708) (= x 709) (= x 710) (= x 711) (= x 712) + (= x 713) (= x 714) (= x 715) (= x 716) (= x 717) (= x 718) (= x 719) (= x 720) + (= x 721) (= x 722) (= x 723) (= x 724) (= x 725) (= x 726) (= x 727) (= x 728) + (= x 729) (= x 730) (= x 731) (= x 732) (= x 733) (= x 734) (= x 735) (= x 736) + (= x 737) (= x 738) (= x 739) (= x 740) (= x 741) (= x 742) (= x 743) (= x 744) + (= x 745) (= x 746) (= x 747) (= x 748) (= x 749) (= x 750) (= x 751) (= x 752) + (= x 753) (= x 754) (= x 755) (= x 756) (= x 757) (= x 758) (= x 759) (= x 760) + (= x 761) (= x 762) (= x 763) (= x 764) (= x 765) (= x 766) (= x 767) (= x 768) + (= x 769) (= x 770) (= x 771) (= x 772) (= x 773) (= x 774) (= x 775) (= x 776) + (= x 777) (= x 778) (= x 779) (= x 780) (= x 781) (= x 782) (= x 783) (= x 784) + (= x 785) (= x 786) (= x 787) (= x 788) (= x 789) (= x 790) (= x 791) (= x 792) + (= x 793) (= x 794) (= x 795) (= x 796) (= x 797) (= x 798) (= x 799) (= x 800) + (= x 801) (= x 802) (= x 803) (= x 804) (= x 805) (= x 806) (= x 807) (= x 808) + (= x 809) (= x 810) (= x 811) (= x 812) (= x 813) (= x 814) (= x 815) (= x 816) + (= x 817) (= x 818) (= x 819) (= x 820) (= x 821) (= x 822) (= x 823) (= x 824) + (= x 825) (= x 826) (= x 827) (= x 828) (= x 829) (= x 830) (= x 831) (= x 832) + (= x 833) (= x 834) (= x 835) (= x 836) (= x 837) (= x 838) (= x 839) (= x 840) + (= x 841) (= x 842) (= x 843) (= x 844) (= x 845) (= x 846) (= x 847) (= x 848) + (= x 849) (= x 850) (= x 851) (= x 852) (= x 853) (= x 854) (= x 855) (= x 856) + (= x 857) (= x 858) (= x 859) (= x 860) (= x 861) (= x 862) (= x 863) (= x 864) + (= x 865) (= x 866) (= x 867) (= x 868) (= x 869) (= x 870) (= x 871) (= x 872) + (= x 873) (= x 874) (= x 875) (= x 876) (= x 877) (= x 878) (= x 879) (= x 880) + (= x 881) (= x 882) (= x 883) (= x 884) (= x 885) (= x 886) (= x 887) (= x 888) + (= x 889) (= x 890) (= x 891) (= x 892) (= x 893) (= x 894) (= x 895) (= x 896) + (= x 897) (= x 898) (= x 899) (= x 900) (= x 901) (= x 902) (= x 903) (= x 904) + (= x 905) (= x 906) (= x 907) (= x 908) (= x 909) (= x 910) (= x 911) (= x 912) + (= x 913) (= x 914) (= x 915) (= x 916) (= x 917) (= x 918) (= x 919) (= x 920) + (= x 921) (= x 922) (= x 923) (= x 924) (= x 925) (= x 926) (= x 927) (= x 928) + (= x 929) (= x 930) (= x 931) (= x 932) (= x 933) (= x 934) (= x 935) (= x 936) + (= x 937) (= x 938) (= x 939) (= x 940) (= x 941) (= x 942) (= x 943) (= x 944) + (= x 945) (= x 946) (= x 947) (= x 948) (= x 949) (= x 950) (= x 951) (= x 952) + (= x 953) (= x 954) (= x 955) (= x 956) (= x 957) (= x 958) (= x 959) (= x 960) + (= x 961) (= x 962) (= x 963) (= x 964) (= x 965) (= x 966) (= x 967) (= x 968) + (= x 969) (= x 970) (= x 971) (= x 972) (= x 973) (= x 974) (= x 975) (= x 976) + (= x 977) (= x 978) (= x 979) (= x 980) (= x 981) (= x 982) (= x 983) (= x 984) + (= x 985) (= x 986) (= x 987) (= x 988) (= x 989) (= x 990) (= x 991) (= x 992) + (= x 993) (= x 994) (= x 995) (= x 996) (= x 997) (= x 998) (= x 999) (= x 1000) + (= x 1001) (= x 1002) (= x 1003) (= x 1004) (= x 1005) (= x 1006) (= x 1007) (= x 1008) + (= x 1009) (= x 1010) (= x 1011) (= x 1012) (= x 1013) (= x 1014) (= x 1015) (= x 1016) + (= x 1017) (= x 1018) (= x 1019) (= x 1020) (= x 1021) (= x 1022) (= x 1023) (= x 1024) + (= x 1025) (= x 1026) (= x 1027) (= x 1028) (= x 1029) (= x 1030) (= x 1031) (= x 1032) + (= x 1033) (= x 1034) (= x 1035) (= x 1036) (= x 1037) (= x 1038) (= x 1039) (= x 1040) + (= x 1041) (= x 1042) (= x 1043) (= x 1044) (= x 1045) (= x 1046) (= x 1047) (= x 1048) + (= x 1049) (= x 1050) (= x 1051) (= x 1052) (= x 1053) (= x 1054) (= x 1055) (= x 1056) + (= x 1057) (= x 1058) (= x 1059) (= x 1060) (= x 1061) (= x 1062) (= x 1063) (= x 1064) + (= x 1065) (= x 1066) (= x 1067) (= x 1068) (= x 1069) (= x 1070) (= x 1071) (= x 1072) + (= x 1073) (= x 1074) (= x 1075) (= x 1076) (= x 1077) (= x 1078) (= x 1079) (= x 1080) + (= x 1081) (= x 1082) (= x 1083) (= x 1084) (= x 1085) (= x 1086) (= x 1087) (= x 1088) + (= x 1089) (= x 1090) (= x 1091) (= x 1092) (= x 1093) (= x 1094) (= x 1095) (= x 1096) + (= x 1097) (= x 1098) (= x 1099) (= x 1100) (= x 1101) (= x 1102) (= x 1103) (= x 1104) + (= x 1105) (= x 1106) (= x 1107) (= x 1108) (= x 1109) (= x 1110) (= x 1111) (= x 1112) + (= x 1113) (= x 1114) (= x 1115) (= x 1116) (= x 1117) (= x 1118) (= x 1119) (= x 1120) + (= x 1121) (= x 1122) (= x 1123) (= x 1124) (= x 1125) (= x 1126) (= x 1127) (= x 1128) + (= x 1129) (= x 1130) (= x 1131) (= x 1132) (= x 1133) (= x 1134) (= x 1135) (= x 1136) + (= x 1137) (= x 1138) (= x 1139) (= x 1140) (= x 1141) (= x 1142) (= x 1143) (= x 1144) + (= x 1145) (= x 1146) (= x 1147) (= x 1148) (= x 1149) (= x 1150) (= x 1151) (= x 1152) + (= x 1153) (= x 1154) (= x 1155) (= x 1156) (= x 1157) (= x 1158) (= x 1159) (= x 1160) + (= x 1161) (= x 1162) (= x 1163) (= x 1164) (= x 1165) (= x 1166) (= x 1167) (= x 1168) + (= x 1169) (= x 1170) (= x 1171) (= x 1172) (= x 1173) (= x 1174) (= x 1175) (= x 1176) + (= x 1177) (= x 1178) (= x 1179) (= x 1180) (= x 1181) (= x 1182) (= x 1183) (= x 1184) + (= x 1185) (= x 1186) (= x 1187) (= x 1188) (= x 1189) (= x 1190) (= x 1191) (= x 1192) + (= x 1193) (= x 1194) (= x 1195) (= x 1196) (= x 1197) (= x 1198) (= x 1199) (= x 1200) + (= x 1201) (= x 1202) (= x 1203) (= x 1204) (= x 1205) (= x 1206) (= x 1207) (= x 1208) + (= x 1209) (= x 1210) (= x 1211) (= x 1212) (= x 1213) (= x 1214) (= x 1215) (= x 1216) + (= x 1217) (= x 1218) (= x 1219) (= x 1220) (= x 1221) (= x 1222) (= x 1223) (= x 1224) + (= x 1225) (= x 1226) (= x 1227) (= x 1228) (= x 1229) (= x 1230) (= x 1231) (= x 1232) + (= x 1233) (= x 1234) (= x 1235) (= x 1236) (= x 1237) (= x 1238) (= x 1239) (= x 1240) + (= x 1241) (= x 1242) (= x 1243) (= x 1244) (= x 1245) (= x 1246) (= x 1247) (= x 1248) + (= x 1249) (= x 1250) (= x 1251) (= x 1252) (= x 1253) (= x 1254) (= x 1255) (= x 1256) + (= x 1257) (= x 1258) (= x 1259) (= x 1260) (= x 1261) (= x 1262) (= x 1263) (= x 1264) + (= x 1265) (= x 1266) (= x 1267) (= x 1268) (= x 1269) (= x 1270) (= x 1271) (= x 1272) + (= x 1273) (= x 1274) (= x 1275) (= x 1276) (= x 1277) (= x 1278) (= x 1279) (= x 1280) + (= x 1281) (= x 1282) (= x 1283) (= x 1284) (= x 1285) (= x 1286) (= x 1287) (= x 1288) + (= x 1289) (= x 1290) (= x 1291) (= x 1292) (= x 1293) (= x 1294) (= x 1295) (= x 1296) + (= x 1297) (= x 1298) (= x 1299) (= x 1300) (= x 1301) (= x 1302) (= x 1303) (= x 1304) + (= x 1305) (= x 1306) (= x 1307) (= x 1308) (= x 1309) (= x 1310) (= x 1311) (= x 1312) + (= x 1313) (= x 1314) (= x 1315) (= x 1316) (= x 1317) (= x 1318) (= x 1319) (= x 1320) + (= x 1321) (= x 1322) (= x 1323) (= x 1324) (= x 1325) (= x 1326) (= x 1327) (= x 1328) + (= x 1329) (= x 1330) (= x 1331) (= x 1332) (= x 1333) (= x 1334) (= x 1335) (= x 1336) + (= x 1337) (= x 1338) (= x 1339) (= x 1340) (= x 1341) (= x 1342) (= x 1343) (= x 1344) + (= x 1345) (= x 1346) (= x 1347) (= x 1348) (= x 1349) (= x 1350) (= x 1351) (= x 1352) + (= x 1353) (= x 1354) (= x 1355) (= x 1356) (= x 1357) (= x 1358) (= x 1359) (= x 1360) + (= x 1361) (= x 1362) (= x 1363) (= x 1364) (= x 1365) (= x 1366) (= x 1367) (= x 1368) + (= x 1369) (= x 1370) (= x 1371) (= x 1372) (= x 1373) (= x 1374) (= x 1375) (= x 1376) + (= x 1377) (= x 1378) (= x 1379) (= x 1380) (= x 1381) (= x 1382) (= x 1383) (= x 1384) + (= x 1385) (= x 1386) (= x 1387) (= x 1388) (= x 1389) (= x 1390) (= x 1391) (= x 1392) + (= x 1393) (= x 1394) (= x 1395) (= x 1396) (= x 1397) (= x 1398) (= x 1399) (= x 1400) + (= x 1401) (= x 1402) (= x 1403) (= x 1404) (= x 1405) (= x 1406) (= x 1407) (= x 1408) + (= x 1409) (= x 1410) (= x 1411) (= x 1412) (= x 1413) (= x 1414) (= x 1415) (= x 1416) + (= x 1417) (= x 1418) (= x 1419) (= x 1420) (= x 1421) (= x 1422) (= x 1423) (= x 1424) + (= x 1425) (= x 1426) (= x 1427) (= x 1428) (= x 1429) (= x 1430) (= x 1431) (= x 1432) + (= x 1433) (= x 1434) (= x 1435) (= x 1436) (= x 1437) (= x 1438) (= x 1439) (= x 1440) + (= x 1441) (= x 1442) (= x 1443) (= x 1444) (= x 1445) (= x 1446) (= x 1447) (= x 1448) + (= x 1449) (= x 1450) (= x 1451) (= x 1452) (= x 1453) (= x 1454) (= x 1455) (= x 1456) + (= x 1457) (= x 1458) (= x 1459) (= x 1460) (= x 1461) (= x 1462) (= x 1463) (= x 1464) + (= x 1465) (= x 1466) (= x 1467) (= x 1468) (= x 1469) (= x 1470) (= x 1471) (= x 1472) + (= x 1473) (= x 1474) (= x 1475) (= x 1476) (= x 1477) (= x 1478) (= x 1479) (= x 1480) + (= x 1481) (= x 1482) (= x 1483) (= x 1484) (= x 1485) (= x 1486) (= x 1487) (= x 1488) + (= x 1489) (= x 1490) (= x 1491) (= x 1492) (= x 1493) (= x 1494) (= x 1495) (= x 1496) + (= x 1497) (= x 1498) (= x 1499) (= x 1500) (= x 1501) (= x 1502) (= x 1503) (= x 1504) + (= x 1505) (= x 1506) (= x 1507) (= x 1508) (= x 1509) (= x 1510) (= x 1511) (= x 1512) + (= x 1513) (= x 1514) (= x 1515) (= x 1516) (= x 1517) (= x 1518) (= x 1519) (= x 1520) + (= x 1521) (= x 1522) (= x 1523) (= x 1524) (= x 1525) (= x 1526) (= x 1527) (= x 1528) + (= x 1529) (= x 1530) (= x 1531) (= x 1532) (= x 1533) (= x 1534) (= x 1535) (= x 1536) + (= x 1537) (= x 1538) (= x 1539) (= x 1540) (= x 1541) (= x 1542) (= x 1543) (= x 1544) + (= x 1545) (= x 1546) (= x 1547) (= x 1548) (= x 1549) (= x 1550) (= x 1551) (= x 1552) + (= x 1553) (= x 1554) (= x 1555) (= x 1556) (= x 1557) (= x 1558) (= x 1559) (= x 1560) + (= x 1561) (= x 1562) (= x 1563) (= x 1564) (= x 1565) (= x 1566) (= x 1567) (= x 1568) + (= x 1569) (= x 1570) (= x 1571) (= x 1572) (= x 1573) (= x 1574) (= x 1575) (= x 1576) + (= x 1577) (= x 1578) (= x 1579) (= x 1580) (= x 1581) (= x 1582) (= x 1583) (= x 1584) + (= x 1585) (= x 1586) (= x 1587) (= x 1588) (= x 1589) (= x 1590) (= x 1591) (= x 1592) + (= x 1593) (= x 1594) (= x 1595) (= x 1596) (= x 1597) (= x 1598) (= x 1599) (= x 1600) + (= x 1601) (= x 1602) (= x 1603) (= x 1604) (= x 1605) (= x 1606) (= x 1607) (= x 1608) + (= x 1609) (= x 1610) (= x 1611) (= x 1612) (= x 1613) (= x 1614) (= x 1615) (= x 1616) + (= x 1617) (= x 1618) (= x 1619) (= x 1620) (= x 1621) (= x 1622) (= x 1623) (= x 1624) + (= x 1625) (= x 1626) (= x 1627) (= x 1628) (= x 1629) (= x 1630) (= x 1631) (= x 1632) + (= x 1633) (= x 1634) (= x 1635) (= x 1636) (= x 1637) (= x 1638) (= x 1639) (= x 1640) + (= x 1641) (= x 1642) (= x 1643) (= x 1644) (= x 1645) (= x 1646) (= x 1647) (= x 1648) + (= x 1649) (= x 1650) (= x 1651) (= x 1652) (= x 1653) (= x 1654) (= x 1655) (= x 1656) + (= x 1657) (= x 1658) (= x 1659) (= x 1660) (= x 1661) (= x 1662) (= x 1663) (= x 1664) + (= x 1665) (= x 1666) (= x 1667) (= x 1668) (= x 1669) (= x 1670) (= x 1671) (= x 1672) + (= x 1673) (= x 1674) (= x 1675) (= x 1676) (= x 1677) (= x 1678) (= x 1679) (= x 1680) + (= x 1681) (= x 1682) (= x 1683) (= x 1684) (= x 1685) (= x 1686) (= x 1687) (= x 1688) + (= x 1689) (= x 1690) (= x 1691) (= x 1692) (= x 1693) (= x 1694) (= x 1695) (= x 1696) + (= x 1697) (= x 1698) (= x 1699) (= x 1700) (= x 1701) (= x 1702) (= x 1703) (= x 1704) + (= x 1705) (= x 1706) (= x 1707) (= x 1708) (= x 1709) (= x 1710) (= x 1711) (= x 1712) + (= x 1713) (= x 1714) (= x 1715) (= x 1716) (= x 1717) (= x 1718) (= x 1719) (= x 1720) + (= x 1721) (= x 1722) (= x 1723) (= x 1724) (= x 1725) (= x 1726) (= x 1727) (= x 1728) + (= x 1729) (= x 1730) (= x 1731) (= x 1732) (= x 1733) (= x 1734) (= x 1735) (= x 1736) + (= x 1737) (= x 1738) (= x 1739) (= x 1740) (= x 1741) (= x 1742) (= x 1743) (= x 1744) + (= x 1745) (= x 1746) (= x 1747) (= x 1748) (= x 1749) (= x 1750) (= x 1751) (= x 1752) + (= x 1753) (= x 1754) (= x 1755) (= x 1756) (= x 1757) (= x 1758) (= x 1759) (= x 1760) + (= x 1761) (= x 1762) (= x 1763) (= x 1764) (= x 1765) (= x 1766) (= x 1767) (= x 1768) + (= x 1769) (= x 1770) (= x 1771) (= x 1772) (= x 1773) (= x 1774) (= x 1775) (= x 1776) + (= x 1777) (= x 1778) (= x 1779) (= x 1780) (= x 1781) (= x 1782) (= x 1783) (= x 1784) + (= x 1785) (= x 1786) (= x 1787) (= x 1788) (= x 1789) (= x 1790) (= x 1791) (= x 1792) + (= x 1793) (= x 1794) (= x 1795) (= x 1796) (= x 1797) (= x 1798) (= x 1799) (= x 1800) + (= x 1801) (= x 1802) (= x 1803) (= x 1804) (= x 1805) (= x 1806) (= x 1807) (= x 1808) + (= x 1809) (= x 1810) (= x 1811) (= x 1812) (= x 1813) (= x 1814) (= x 1815) (= x 1816) + (= x 1817) (= x 1818) (= x 1819) (= x 1820) (= x 1821) (= x 1822) (= x 1823) (= x 1824) + (= x 1825) (= x 1826) (= x 1827) (= x 1828) (= x 1829) (= x 1830) (= x 1831) (= x 1832) + (= x 1833) (= x 1834) (= x 1835) (= x 1836) (= x 1837) (= x 1838) (= x 1839) (= x 1840) + (= x 1841) (= x 1842) (= x 1843) (= x 1844) (= x 1845) (= x 1846) (= x 1847) (= x 1848) + (= x 1849) (= x 1850) (= x 1851) (= x 1852) (= x 1853) (= x 1854) (= x 1855) (= x 1856) + (= x 1857) (= x 1858) (= x 1859) (= x 1860) (= x 1861) (= x 1862) (= x 1863) (= x 1864) + (= x 1865) (= x 1866) (= x 1867) (= x 1868) (= x 1869) (= x 1870) (= x 1871) (= x 1872) + (= x 1873) (= x 1874) (= x 1875) (= x 1876) (= x 1877) (= x 1878) (= x 1879) (= x 1880) + (= x 1881) (= x 1882) (= x 1883) (= x 1884) (= x 1885) (= x 1886) (= x 1887) (= x 1888) + (= x 1889) (= x 1890) (= x 1891) (= x 1892) (= x 1893) (= x 1894) (= x 1895) (= x 1896) + (= x 1897) (= x 1898) (= x 1899) (= x 1900) (= x 1901) (= x 1902) (= x 1903) (= x 1904) + (= x 1905) (= x 1906) (= x 1907) (= x 1908) (= x 1909) (= x 1910) (= x 1911) (= x 1912) + (= x 1913) (= x 1914) (= x 1915) (= x 1916) (= x 1917) (= x 1918) (= x 1919) (= x 1920) + (= x 1921) (= x 1922) (= x 1923) (= x 1924) (= x 1925) (= x 1926) (= x 1927) (= x 1928) + (= x 1929) (= x 1930) (= x 1931) (= x 1932) (= x 1933) (= x 1934) (= x 1935) (= x 1936) + (= x 1937) (= x 1938) (= x 1939) (= x 1940) (= x 1941) (= x 1942) (= x 1943) (= x 1944) + (= x 1945) (= x 1946) (= x 1947) (= x 1948) (= x 1949) (= x 1950) (= x 1951) (= x 1952) + (= x 1953) (= x 1954) (= x 1955) (= x 1956) (= x 1957) (= x 1958) (= x 1959) (= x 1960) + (= x 1961) (= x 1962) (= x 1963) (= x 1964) (= x 1965) (= x 1966) (= x 1967) (= x 1968) + (= x 1969) (= x 1970) (= x 1971) (= x 1972) (= x 1973) (= x 1974) (= x 1975) (= x 1976) + (= x 1977) (= x 1978) (= x 1979) (= x 1980) (= x 1981) (= x 1982) (= x 1983) (= x 1984) + (= x 1985) (= x 1986) (= x 1987) (= x 1988) (= x 1989) (= x 1990) (= x 1991) (= x 1992) + (= x 1993) (= x 1994) (= x 1995) (= x 1996) (= x 1997) (= x 1998) (= x 1999) (= x 2000) + (= x 2001) (= x 2002) (= x 2003) (= x 2004) (= x 2005) (= x 2006) (= x 2007) (= x 2008) + (= x 2009) (= x 2010) (= x 2011) (= x 2012) (= x 2013) (= x 2014) (= x 2015) (= x 2016) + (= x 2017) (= x 2018) (= x 2019) (= x 2020) (= x 2021) (= x 2022) (= x 2023) (= x 2024) + (= x 2025) (= x 2026) (= x 2027) (= x 2028) (= x 2029) (= x 2030) (= x 2031) (= x 2032) + (= x 2033) (= x 2034) (= x 2035) (= x 2036) (= x 2037) (= x 2038) (= x 2039) (= x 2040) + (= x 2041) (= x 2042) (= x 2043) (= x 2044) (= x 2045) (= x 2046) (= x 2047) (= x 2048) + )) + (itp x)) +) + +(rule (=> + (and + (itp x) + (= x1 (+ x 1)) + ) + (itp x1) +)) + +(rule (=> (and (itp x) + (not (< x 2050) + )) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn_cex/samples_shrink_big_numbers_4096_cex.smt2 b/bench_horn_cex/samples_shrink_big_numbers_4096_cex.smt2 new file mode 100644 index 000000000..85f2ab1fc --- /dev/null +++ b/bench_horn_cex/samples_shrink_big_numbers_4096_cex.smt2 @@ -0,0 +1,540 @@ +(declare-rel itp (Int)) +(declare-var x Int) +(declare-var x1 Int) + +(declare-rel fail ()) + +(rule (=> (and + (or + (= x 1) (= x 2) (= x 3) (= x 4) (= x 5) (= x 6) (= x 7) (= x 8) + (= x 9) (= x 10) (= x 11) (= x 12) (= x 13) (= x 14) (= x 15) (= x 16) + (= x 17) (= x 18) (= x 19) (= x 20) (= x 21) (= x 22) (= x 23) (= x 24) + (= x 25) (= x 26) (= x 27) (= x 28) (= x 29) (= x 30) (= x 31) (= x 32) + (= x 33) (= x 34) (= x 35) (= x 36) (= x 37) (= x 38) (= x 39) (= x 40) + (= x 41) (= x 42) (= x 43) (= x 44) (= x 45) (= x 46) (= x 47) (= x 48) + (= x 49) (= x 50) (= x 51) (= x 52) (= x 53) (= x 54) (= x 55) (= x 56) + (= x 57) (= x 58) (= x 59) (= x 60) (= x 61) (= x 62) (= x 63) (= x 64) + (= x 65) (= x 66) (= x 67) (= x 68) (= x 69) (= x 70) (= x 71) (= x 72) + (= x 73) (= x 74) (= x 75) (= x 76) (= x 77) (= x 78) (= x 79) (= x 80) + (= x 81) (= x 82) (= x 83) (= x 84) (= x 85) (= x 86) (= x 87) (= x 88) + (= x 89) (= x 90) (= x 91) (= x 92) (= x 93) (= x 94) (= x 95) (= x 96) + (= x 97) (= x 98) (= x 99) (= x 100) (= x 101) (= x 102) (= x 103) (= x 104) + (= x 105) (= x 106) (= x 107) (= x 108) (= x 109) (= x 110) (= x 111) (= x 112) + (= x 113) (= x 114) (= x 115) (= x 116) (= x 117) (= x 118) (= x 119) (= x 120) + (= x 121) (= x 122) (= x 123) (= x 124) (= x 125) (= x 126) (= x 127) (= x 128) + (= x 129) (= x 130) (= x 131) (= x 132) (= x 133) (= x 134) (= x 135) (= x 136) + (= x 137) (= x 138) (= x 139) (= x 140) (= x 141) (= x 142) (= x 143) (= x 144) + (= x 145) (= x 146) (= x 147) (= x 148) (= x 149) (= x 150) (= x 151) (= x 152) + (= x 153) (= x 154) (= x 155) (= x 156) (= x 157) (= x 158) (= x 159) (= x 160) + (= x 161) (= x 162) (= x 163) (= x 164) (= x 165) (= x 166) (= x 167) (= x 168) + (= x 169) (= x 170) (= x 171) (= x 172) (= x 173) (= x 174) (= x 175) (= x 176) + (= x 177) (= x 178) (= x 179) (= x 180) (= x 181) (= x 182) (= x 183) (= x 184) + (= x 185) (= x 186) (= x 187) (= x 188) (= x 189) (= x 190) (= x 191) (= x 192) + (= x 193) (= x 194) (= x 195) (= x 196) (= x 197) (= x 198) (= x 199) (= x 200) + (= x 201) (= x 202) (= x 203) (= x 204) (= x 205) (= x 206) (= x 207) (= x 208) + (= x 209) (= x 210) (= x 211) (= x 212) (= x 213) (= x 214) (= x 215) (= x 216) + (= x 217) (= x 218) (= x 219) (= x 220) (= x 221) (= x 222) (= x 223) (= x 224) + (= x 225) (= x 226) (= x 227) (= x 228) (= x 229) (= x 230) (= x 231) (= x 232) + (= x 233) (= x 234) (= x 235) (= x 236) (= x 237) (= x 238) (= x 239) (= x 240) + (= x 241) (= x 242) (= x 243) (= x 244) (= x 245) (= x 246) (= x 247) (= x 248) + (= x 249) (= x 250) (= x 251) (= x 252) (= x 253) (= x 254) (= x 255) (= x 256) + (= x 257) (= x 258) (= x 259) (= x 260) (= x 261) (= x 262) (= x 263) (= x 264) + (= x 265) (= x 266) (= x 267) (= x 268) (= x 269) (= x 270) (= x 271) (= x 272) + (= x 273) (= x 274) (= x 275) (= x 276) (= x 277) (= x 278) (= x 279) (= x 280) + (= x 281) (= x 282) (= x 283) (= x 284) (= x 285) (= x 286) (= x 287) (= x 288) + (= x 289) (= x 290) (= x 291) (= x 292) (= x 293) (= x 294) (= x 295) (= x 296) + (= x 297) (= x 298) (= x 299) (= x 300) (= x 301) (= x 302) (= x 303) (= x 304) + (= x 305) (= x 306) (= x 307) (= x 308) (= x 309) (= x 310) (= x 311) (= x 312) + (= x 313) (= x 314) (= x 315) (= x 316) (= x 317) (= x 318) (= x 319) (= x 320) + (= x 321) (= x 322) (= x 323) (= x 324) (= x 325) (= x 326) (= x 327) (= x 328) + (= x 329) (= x 330) (= x 331) (= x 332) (= x 333) (= x 334) (= x 335) (= x 336) + (= x 337) (= x 338) (= x 339) (= x 340) (= x 341) (= x 342) (= x 343) (= x 344) + (= x 345) (= x 346) (= x 347) (= x 348) (= x 349) (= x 350) (= x 351) (= x 352) + (= x 353) (= x 354) (= x 355) (= x 356) (= x 357) (= x 358) (= x 359) (= x 360) + (= x 361) (= x 362) (= x 363) (= x 364) (= x 365) (= x 366) (= x 367) (= x 368) + (= x 369) (= x 370) (= x 371) (= x 372) (= x 373) (= x 374) (= x 375) (= x 376) + (= x 377) (= x 378) (= x 379) (= x 380) (= x 381) (= x 382) (= x 383) (= x 384) + (= x 385) (= x 386) (= x 387) (= x 388) (= x 389) (= x 390) (= x 391) (= x 392) + (= x 393) (= x 394) (= x 395) (= x 396) (= x 397) (= x 398) (= x 399) (= x 400) + (= x 401) (= x 402) (= x 403) (= x 404) (= x 405) (= x 406) (= x 407) (= x 408) + (= x 409) (= x 410) (= x 411) (= x 412) (= x 413) (= x 414) (= x 415) (= x 416) + (= x 417) (= x 418) (= x 419) (= x 420) (= x 421) (= x 422) (= x 423) (= x 424) + (= x 425) (= x 426) (= x 427) (= x 428) (= x 429) (= x 430) (= x 431) (= x 432) + (= x 433) (= x 434) (= x 435) (= x 436) (= x 437) (= x 438) (= x 439) (= x 440) + (= x 441) (= x 442) (= x 443) (= x 444) (= x 445) (= x 446) (= x 447) (= x 448) + (= x 449) (= x 450) (= x 451) (= x 452) (= x 453) (= x 454) (= x 455) (= x 456) + (= x 457) (= x 458) (= x 459) (= x 460) (= x 461) (= x 462) (= x 463) (= x 464) + (= x 465) (= x 466) (= x 467) (= x 468) (= x 469) (= x 470) (= x 471) (= x 472) + (= x 473) (= x 474) (= x 475) (= x 476) (= x 477) (= x 478) (= x 479) (= x 480) + (= x 481) (= x 482) (= x 483) (= x 484) (= x 485) (= x 486) (= x 487) (= x 488) + (= x 489) (= x 490) (= x 491) (= x 492) (= x 493) (= x 494) (= x 495) (= x 496) + (= x 497) (= x 498) (= x 499) (= x 500) (= x 501) (= x 502) (= x 503) (= x 504) + (= x 505) (= x 506) (= x 507) (= x 508) (= x 509) (= x 510) (= x 511) (= x 512) + (= x 513) (= x 514) (= x 515) (= x 516) (= x 517) (= x 518) (= x 519) (= x 520) + (= x 521) (= x 522) (= x 523) (= x 524) (= x 525) (= x 526) (= x 527) (= x 528) + (= x 529) (= x 530) (= x 531) (= x 532) (= x 533) (= x 534) (= x 535) (= x 536) + (= x 537) (= x 538) (= x 539) (= x 540) (= x 541) (= x 542) (= x 543) (= x 544) + (= x 545) (= x 546) (= x 547) (= x 548) (= x 549) (= x 550) (= x 551) (= x 552) + (= x 553) (= x 554) (= x 555) (= x 556) (= x 557) (= x 558) (= x 559) (= x 560) + (= x 561) (= x 562) (= x 563) (= x 564) (= x 565) (= x 566) (= x 567) (= x 568) + (= x 569) (= x 570) (= x 571) (= x 572) (= x 573) (= x 574) (= x 575) (= x 576) + (= x 577) (= x 578) (= x 579) (= x 580) (= x 581) (= x 582) (= x 583) (= x 584) + (= x 585) (= x 586) (= x 587) (= x 588) (= x 589) (= x 590) (= x 591) (= x 592) + (= x 593) (= x 594) (= x 595) (= x 596) (= x 597) (= x 598) (= x 599) (= x 600) + (= x 601) (= x 602) (= x 603) (= x 604) (= x 605) (= x 606) (= x 607) (= x 608) + (= x 609) (= x 610) (= x 611) (= x 612) (= x 613) (= x 614) (= x 615) (= x 616) + (= x 617) (= x 618) (= x 619) (= x 620) (= x 621) (= x 622) (= x 623) (= x 624) + (= x 625) (= x 626) (= x 627) (= x 628) (= x 629) (= x 630) (= x 631) (= x 632) + (= x 633) (= x 634) (= x 635) (= x 636) (= x 637) (= x 638) (= x 639) (= x 640) + (= x 641) (= x 642) (= x 643) (= x 644) (= x 645) (= x 646) (= x 647) (= x 648) + (= x 649) (= x 650) (= x 651) (= x 652) (= x 653) (= x 654) (= x 655) (= x 656) + (= x 657) (= x 658) (= x 659) (= x 660) (= x 661) (= x 662) (= x 663) (= x 664) + (= x 665) (= x 666) (= x 667) (= x 668) (= x 669) (= x 670) (= x 671) (= x 672) + (= x 673) (= x 674) (= x 675) (= x 676) (= x 677) (= x 678) (= x 679) (= x 680) + (= x 681) (= x 682) (= x 683) (= x 684) (= x 685) (= x 686) (= x 687) (= x 688) + (= x 689) (= x 690) (= x 691) (= x 692) (= x 693) (= x 694) (= x 695) (= x 696) + (= x 697) (= x 698) (= x 699) (= x 700) (= x 701) (= x 702) (= x 703) (= x 704) + (= x 705) (= x 706) (= x 707) (= x 708) (= x 709) (= x 710) (= x 711) (= x 712) + (= x 713) (= x 714) (= x 715) (= x 716) (= x 717) (= x 718) (= x 719) (= x 720) + (= x 721) (= x 722) (= x 723) (= x 724) (= x 725) (= x 726) (= x 727) (= x 728) + (= x 729) (= x 730) (= x 731) (= x 732) (= x 733) (= x 734) (= x 735) (= x 736) + (= x 737) (= x 738) (= x 739) (= x 740) (= x 741) (= x 742) (= x 743) (= x 744) + (= x 745) (= x 746) (= x 747) (= x 748) (= x 749) (= x 750) (= x 751) (= x 752) + (= x 753) (= x 754) (= x 755) (= x 756) (= x 757) (= x 758) (= x 759) (= x 760) + (= x 761) (= x 762) (= x 763) (= x 764) (= x 765) (= x 766) (= x 767) (= x 768) + (= x 769) (= x 770) (= x 771) (= x 772) (= x 773) (= x 774) (= x 775) (= x 776) + (= x 777) (= x 778) (= x 779) (= x 780) (= x 781) (= x 782) (= x 783) (= x 784) + (= x 785) (= x 786) (= x 787) (= x 788) (= x 789) (= x 790) (= x 791) (= x 792) + (= x 793) (= x 794) (= x 795) (= x 796) (= x 797) (= x 798) (= x 799) (= x 800) + (= x 801) (= x 802) (= x 803) (= x 804) (= x 805) (= x 806) (= x 807) (= x 808) + (= x 809) (= x 810) (= x 811) (= x 812) (= x 813) (= x 814) (= x 815) (= x 816) + (= x 817) (= x 818) (= x 819) (= x 820) (= x 821) (= x 822) (= x 823) (= x 824) + (= x 825) (= x 826) (= x 827) (= x 828) (= x 829) (= x 830) (= x 831) (= x 832) + (= x 833) (= x 834) (= x 835) (= x 836) (= x 837) (= x 838) (= x 839) (= x 840) + (= x 841) (= x 842) (= x 843) (= x 844) (= x 845) (= x 846) (= x 847) (= x 848) + (= x 849) (= x 850) (= x 851) (= x 852) (= x 853) (= x 854) (= x 855) (= x 856) + (= x 857) (= x 858) (= x 859) (= x 860) (= x 861) (= x 862) (= x 863) (= x 864) + (= x 865) (= x 866) (= x 867) (= x 868) (= x 869) (= x 870) (= x 871) (= x 872) + (= x 873) (= x 874) (= x 875) (= x 876) (= x 877) (= x 878) (= x 879) (= x 880) + (= x 881) (= x 882) (= x 883) (= x 884) (= x 885) (= x 886) (= x 887) (= x 888) + (= x 889) (= x 890) (= x 891) (= x 892) (= x 893) (= x 894) (= x 895) (= x 896) + (= x 897) (= x 898) (= x 899) (= x 900) (= x 901) (= x 902) (= x 903) (= x 904) + (= x 905) (= x 906) (= x 907) (= x 908) (= x 909) (= x 910) (= x 911) (= x 912) + (= x 913) (= x 914) (= x 915) (= x 916) (= x 917) (= x 918) (= x 919) (= x 920) + (= x 921) (= x 922) (= x 923) (= x 924) (= x 925) (= x 926) (= x 927) (= x 928) + (= x 929) (= x 930) (= x 931) (= x 932) (= x 933) (= x 934) (= x 935) (= x 936) + (= x 937) (= x 938) (= x 939) (= x 940) (= x 941) (= x 942) (= x 943) (= x 944) + (= x 945) (= x 946) (= x 947) (= x 948) (= x 949) (= x 950) (= x 951) (= x 952) + (= x 953) (= x 954) (= x 955) (= x 956) (= x 957) (= x 958) (= x 959) (= x 960) + (= x 961) (= x 962) (= x 963) (= x 964) (= x 965) (= x 966) (= x 967) (= x 968) + (= x 969) (= x 970) (= x 971) (= x 972) (= x 973) (= x 974) (= x 975) (= x 976) + (= x 977) (= x 978) (= x 979) (= x 980) (= x 981) (= x 982) (= x 983) (= x 984) + (= x 985) (= x 986) (= x 987) (= x 988) (= x 989) (= x 990) (= x 991) (= x 992) + (= x 993) (= x 994) (= x 995) (= x 996) (= x 997) (= x 998) (= x 999) (= x 1000) + (= x 1001) (= x 1002) (= x 1003) (= x 1004) (= x 1005) (= x 1006) (= x 1007) (= x 1008) + (= x 1009) (= x 1010) (= x 1011) (= x 1012) (= x 1013) (= x 1014) (= x 1015) (= x 1016) + (= x 1017) (= x 1018) (= x 1019) (= x 1020) (= x 1021) (= x 1022) (= x 1023) (= x 1024) + (= x 1025) (= x 1026) (= x 1027) (= x 1028) (= x 1029) (= x 1030) (= x 1031) (= x 1032) + (= x 1033) (= x 1034) (= x 1035) (= x 1036) (= x 1037) (= x 1038) (= x 1039) (= x 1040) + (= x 1041) (= x 1042) (= x 1043) (= x 1044) (= x 1045) (= x 1046) (= x 1047) (= x 1048) + (= x 1049) (= x 1050) (= x 1051) (= x 1052) (= x 1053) (= x 1054) (= x 1055) (= x 1056) + (= x 1057) (= x 1058) (= x 1059) (= x 1060) (= x 1061) (= x 1062) (= x 1063) (= x 1064) + (= x 1065) (= x 1066) (= x 1067) (= x 1068) (= x 1069) (= x 1070) (= x 1071) (= x 1072) + (= x 1073) (= x 1074) (= x 1075) (= x 1076) (= x 1077) (= x 1078) (= x 1079) (= x 1080) + (= x 1081) (= x 1082) (= x 1083) (= x 1084) (= x 1085) (= x 1086) (= x 1087) (= x 1088) + (= x 1089) (= x 1090) (= x 1091) (= x 1092) (= x 1093) (= x 1094) (= x 1095) (= x 1096) + (= x 1097) (= x 1098) (= x 1099) (= x 1100) (= x 1101) (= x 1102) (= x 1103) (= x 1104) + (= x 1105) (= x 1106) (= x 1107) (= x 1108) (= x 1109) (= x 1110) (= x 1111) (= x 1112) + (= x 1113) (= x 1114) (= x 1115) (= x 1116) (= x 1117) (= x 1118) (= x 1119) (= x 1120) + (= x 1121) (= x 1122) (= x 1123) (= x 1124) (= x 1125) (= x 1126) (= x 1127) (= x 1128) + (= x 1129) (= x 1130) (= x 1131) (= x 1132) (= x 1133) (= x 1134) (= x 1135) (= x 1136) + (= x 1137) (= x 1138) (= x 1139) (= x 1140) (= x 1141) (= x 1142) (= x 1143) (= x 1144) + (= x 1145) (= x 1146) (= x 1147) (= x 1148) (= x 1149) (= x 1150) (= x 1151) (= x 1152) + (= x 1153) (= x 1154) (= x 1155) (= x 1156) (= x 1157) (= x 1158) (= x 1159) (= x 1160) + (= x 1161) (= x 1162) (= x 1163) (= x 1164) (= x 1165) (= x 1166) (= x 1167) (= x 1168) + (= x 1169) (= x 1170) (= x 1171) (= x 1172) (= x 1173) (= x 1174) (= x 1175) (= x 1176) + (= x 1177) (= x 1178) (= x 1179) (= x 1180) (= x 1181) (= x 1182) (= x 1183) (= x 1184) + (= x 1185) (= x 1186) (= x 1187) (= x 1188) (= x 1189) (= x 1190) (= x 1191) (= x 1192) + (= x 1193) (= x 1194) (= x 1195) (= x 1196) (= x 1197) (= x 1198) (= x 1199) (= x 1200) + (= x 1201) (= x 1202) (= x 1203) (= x 1204) (= x 1205) (= x 1206) (= x 1207) (= x 1208) + (= x 1209) (= x 1210) (= x 1211) (= x 1212) (= x 1213) (= x 1214) (= x 1215) (= x 1216) + (= x 1217) (= x 1218) (= x 1219) (= x 1220) (= x 1221) (= x 1222) (= x 1223) (= x 1224) + (= x 1225) (= x 1226) (= x 1227) (= x 1228) (= x 1229) (= x 1230) (= x 1231) (= x 1232) + (= x 1233) (= x 1234) (= x 1235) (= x 1236) (= x 1237) (= x 1238) (= x 1239) (= x 1240) + (= x 1241) (= x 1242) (= x 1243) (= x 1244) (= x 1245) (= x 1246) (= x 1247) (= x 1248) + (= x 1249) (= x 1250) (= x 1251) (= x 1252) (= x 1253) (= x 1254) (= x 1255) (= x 1256) + (= x 1257) (= x 1258) (= x 1259) (= x 1260) (= x 1261) (= x 1262) (= x 1263) (= x 1264) + (= x 1265) (= x 1266) (= x 1267) (= x 1268) (= x 1269) (= x 1270) (= x 1271) (= x 1272) + (= x 1273) (= x 1274) (= x 1275) (= x 1276) (= x 1277) (= x 1278) (= x 1279) (= x 1280) + (= x 1281) (= x 1282) (= x 1283) (= x 1284) (= x 1285) (= x 1286) (= x 1287) (= x 1288) + (= x 1289) (= x 1290) (= x 1291) (= x 1292) (= x 1293) (= x 1294) (= x 1295) (= x 1296) + (= x 1297) (= x 1298) (= x 1299) (= x 1300) (= x 1301) (= x 1302) (= x 1303) (= x 1304) + (= x 1305) (= x 1306) (= x 1307) (= x 1308) (= x 1309) (= x 1310) (= x 1311) (= x 1312) + (= x 1313) (= x 1314) (= x 1315) (= x 1316) (= x 1317) (= x 1318) (= x 1319) (= x 1320) + (= x 1321) (= x 1322) (= x 1323) (= x 1324) (= x 1325) (= x 1326) (= x 1327) (= x 1328) + (= x 1329) (= x 1330) (= x 1331) (= x 1332) (= x 1333) (= x 1334) (= x 1335) (= x 1336) + (= x 1337) (= x 1338) (= x 1339) (= x 1340) (= x 1341) (= x 1342) (= x 1343) (= x 1344) + (= x 1345) (= x 1346) (= x 1347) (= x 1348) (= x 1349) (= x 1350) (= x 1351) (= x 1352) + (= x 1353) (= x 1354) (= x 1355) (= x 1356) (= x 1357) (= x 1358) (= x 1359) (= x 1360) + (= x 1361) (= x 1362) (= x 1363) (= x 1364) (= x 1365) (= x 1366) (= x 1367) (= x 1368) + (= x 1369) (= x 1370) (= x 1371) (= x 1372) (= x 1373) (= x 1374) (= x 1375) (= x 1376) + (= x 1377) (= x 1378) (= x 1379) (= x 1380) (= x 1381) (= x 1382) (= x 1383) (= x 1384) + (= x 1385) (= x 1386) (= x 1387) (= x 1388) (= x 1389) (= x 1390) (= x 1391) (= x 1392) + (= x 1393) (= x 1394) (= x 1395) (= x 1396) (= x 1397) (= x 1398) (= x 1399) (= x 1400) + (= x 1401) (= x 1402) (= x 1403) (= x 1404) (= x 1405) (= x 1406) (= x 1407) (= x 1408) + (= x 1409) (= x 1410) (= x 1411) (= x 1412) (= x 1413) (= x 1414) (= x 1415) (= x 1416) + (= x 1417) (= x 1418) (= x 1419) (= x 1420) (= x 1421) (= x 1422) (= x 1423) (= x 1424) + (= x 1425) (= x 1426) (= x 1427) (= x 1428) (= x 1429) (= x 1430) (= x 1431) (= x 1432) + (= x 1433) (= x 1434) (= x 1435) (= x 1436) (= x 1437) (= x 1438) (= x 1439) (= x 1440) + (= x 1441) (= x 1442) (= x 1443) (= x 1444) (= x 1445) (= x 1446) (= x 1447) (= x 1448) + (= x 1449) (= x 1450) (= x 1451) (= x 1452) (= x 1453) (= x 1454) (= x 1455) (= x 1456) + (= x 1457) (= x 1458) (= x 1459) (= x 1460) (= x 1461) (= x 1462) (= x 1463) (= x 1464) + (= x 1465) (= x 1466) (= x 1467) (= x 1468) (= x 1469) (= x 1470) (= x 1471) (= x 1472) + (= x 1473) (= x 1474) (= x 1475) (= x 1476) (= x 1477) (= x 1478) (= x 1479) (= x 1480) + (= x 1481) (= x 1482) (= x 1483) (= x 1484) (= x 1485) (= x 1486) (= x 1487) (= x 1488) + (= x 1489) (= x 1490) (= x 1491) (= x 1492) (= x 1493) (= x 1494) (= x 1495) (= x 1496) + (= x 1497) (= x 1498) (= x 1499) (= x 1500) (= x 1501) (= x 1502) (= x 1503) (= x 1504) + (= x 1505) (= x 1506) (= x 1507) (= x 1508) (= x 1509) (= x 1510) (= x 1511) (= x 1512) + (= x 1513) (= x 1514) (= x 1515) (= x 1516) (= x 1517) (= x 1518) (= x 1519) (= x 1520) + (= x 1521) (= x 1522) (= x 1523) (= x 1524) (= x 1525) (= x 1526) (= x 1527) (= x 1528) + (= x 1529) (= x 1530) (= x 1531) (= x 1532) (= x 1533) (= x 1534) (= x 1535) (= x 1536) + (= x 1537) (= x 1538) (= x 1539) (= x 1540) (= x 1541) (= x 1542) (= x 1543) (= x 1544) + (= x 1545) (= x 1546) (= x 1547) (= x 1548) (= x 1549) (= x 1550) (= x 1551) (= x 1552) + (= x 1553) (= x 1554) (= x 1555) (= x 1556) (= x 1557) (= x 1558) (= x 1559) (= x 1560) + (= x 1561) (= x 1562) (= x 1563) (= x 1564) (= x 1565) (= x 1566) (= x 1567) (= x 1568) + (= x 1569) (= x 1570) (= x 1571) (= x 1572) (= x 1573) (= x 1574) (= x 1575) (= x 1576) + (= x 1577) (= x 1578) (= x 1579) (= x 1580) (= x 1581) (= x 1582) (= x 1583) (= x 1584) + (= x 1585) (= x 1586) (= x 1587) (= x 1588) (= x 1589) (= x 1590) (= x 1591) (= x 1592) + (= x 1593) (= x 1594) (= x 1595) (= x 1596) (= x 1597) (= x 1598) (= x 1599) (= x 1600) + (= x 1601) (= x 1602) (= x 1603) (= x 1604) (= x 1605) (= x 1606) (= x 1607) (= x 1608) + (= x 1609) (= x 1610) (= x 1611) (= x 1612) (= x 1613) (= x 1614) (= x 1615) (= x 1616) + (= x 1617) (= x 1618) (= x 1619) (= x 1620) (= x 1621) (= x 1622) (= x 1623) (= x 1624) + (= x 1625) (= x 1626) (= x 1627) (= x 1628) (= x 1629) (= x 1630) (= x 1631) (= x 1632) + (= x 1633) (= x 1634) (= x 1635) (= x 1636) (= x 1637) (= x 1638) (= x 1639) (= x 1640) + (= x 1641) (= x 1642) (= x 1643) (= x 1644) (= x 1645) (= x 1646) (= x 1647) (= x 1648) + (= x 1649) (= x 1650) (= x 1651) (= x 1652) (= x 1653) (= x 1654) (= x 1655) (= x 1656) + (= x 1657) (= x 1658) (= x 1659) (= x 1660) (= x 1661) (= x 1662) (= x 1663) (= x 1664) + (= x 1665) (= x 1666) (= x 1667) (= x 1668) (= x 1669) (= x 1670) (= x 1671) (= x 1672) + (= x 1673) (= x 1674) (= x 1675) (= x 1676) (= x 1677) (= x 1678) (= x 1679) (= x 1680) + (= x 1681) (= x 1682) (= x 1683) (= x 1684) (= x 1685) (= x 1686) (= x 1687) (= x 1688) + (= x 1689) (= x 1690) (= x 1691) (= x 1692) (= x 1693) (= x 1694) (= x 1695) (= x 1696) + (= x 1697) (= x 1698) (= x 1699) (= x 1700) (= x 1701) (= x 1702) (= x 1703) (= x 1704) + (= x 1705) (= x 1706) (= x 1707) (= x 1708) (= x 1709) (= x 1710) (= x 1711) (= x 1712) + (= x 1713) (= x 1714) (= x 1715) (= x 1716) (= x 1717) (= x 1718) (= x 1719) (= x 1720) + (= x 1721) (= x 1722) (= x 1723) (= x 1724) (= x 1725) (= x 1726) (= x 1727) (= x 1728) + (= x 1729) (= x 1730) (= x 1731) (= x 1732) (= x 1733) (= x 1734) (= x 1735) (= x 1736) + (= x 1737) (= x 1738) (= x 1739) (= x 1740) (= x 1741) (= x 1742) (= x 1743) (= x 1744) + (= x 1745) (= x 1746) (= x 1747) (= x 1748) (= x 1749) (= x 1750) (= x 1751) (= x 1752) + (= x 1753) (= x 1754) (= x 1755) (= x 1756) (= x 1757) (= x 1758) (= x 1759) (= x 1760) + (= x 1761) (= x 1762) (= x 1763) (= x 1764) (= x 1765) (= x 1766) (= x 1767) (= x 1768) + (= x 1769) (= x 1770) (= x 1771) (= x 1772) (= x 1773) (= x 1774) (= x 1775) (= x 1776) + (= x 1777) (= x 1778) (= x 1779) (= x 1780) (= x 1781) (= x 1782) (= x 1783) (= x 1784) + (= x 1785) (= x 1786) (= x 1787) (= x 1788) (= x 1789) (= x 1790) (= x 1791) (= x 1792) + (= x 1793) (= x 1794) (= x 1795) (= x 1796) (= x 1797) (= x 1798) (= x 1799) (= x 1800) + (= x 1801) (= x 1802) (= x 1803) (= x 1804) (= x 1805) (= x 1806) (= x 1807) (= x 1808) + (= x 1809) (= x 1810) (= x 1811) (= x 1812) (= x 1813) (= x 1814) (= x 1815) (= x 1816) + (= x 1817) (= x 1818) (= x 1819) (= x 1820) (= x 1821) (= x 1822) (= x 1823) (= x 1824) + (= x 1825) (= x 1826) (= x 1827) (= x 1828) (= x 1829) (= x 1830) (= x 1831) (= x 1832) + (= x 1833) (= x 1834) (= x 1835) (= x 1836) (= x 1837) (= x 1838) (= x 1839) (= x 1840) + (= x 1841) (= x 1842) (= x 1843) (= x 1844) (= x 1845) (= x 1846) (= x 1847) (= x 1848) + (= x 1849) (= x 1850) (= x 1851) (= x 1852) (= x 1853) (= x 1854) (= x 1855) (= x 1856) + (= x 1857) (= x 1858) (= x 1859) (= x 1860) (= x 1861) (= x 1862) (= x 1863) (= x 1864) + (= x 1865) (= x 1866) (= x 1867) (= x 1868) (= x 1869) (= x 1870) (= x 1871) (= x 1872) + (= x 1873) (= x 1874) (= x 1875) (= x 1876) (= x 1877) (= x 1878) (= x 1879) (= x 1880) + (= x 1881) (= x 1882) (= x 1883) (= x 1884) (= x 1885) (= x 1886) (= x 1887) (= x 1888) + (= x 1889) (= x 1890) (= x 1891) (= x 1892) (= x 1893) (= x 1894) (= x 1895) (= x 1896) + (= x 1897) (= x 1898) (= x 1899) (= x 1900) (= x 1901) (= x 1902) (= x 1903) (= x 1904) + (= x 1905) (= x 1906) (= x 1907) (= x 1908) (= x 1909) (= x 1910) (= x 1911) (= x 1912) + (= x 1913) (= x 1914) (= x 1915) (= x 1916) (= x 1917) (= x 1918) (= x 1919) (= x 1920) + (= x 1921) (= x 1922) (= x 1923) (= x 1924) (= x 1925) (= x 1926) (= x 1927) (= x 1928) + (= x 1929) (= x 1930) (= x 1931) (= x 1932) (= x 1933) (= x 1934) (= x 1935) (= x 1936) + (= x 1937) (= x 1938) (= x 1939) (= x 1940) (= x 1941) (= x 1942) (= x 1943) (= x 1944) + (= x 1945) (= x 1946) (= x 1947) (= x 1948) (= x 1949) (= x 1950) (= x 1951) (= x 1952) + (= x 1953) (= x 1954) (= x 1955) (= x 1956) (= x 1957) (= x 1958) (= x 1959) (= x 1960) + (= x 1961) (= x 1962) (= x 1963) (= x 1964) (= x 1965) (= x 1966) (= x 1967) (= x 1968) + (= x 1969) (= x 1970) (= x 1971) (= x 1972) (= x 1973) (= x 1974) (= x 1975) (= x 1976) + (= x 1977) (= x 1978) (= x 1979) (= x 1980) (= x 1981) (= x 1982) (= x 1983) (= x 1984) + (= x 1985) (= x 1986) (= x 1987) (= x 1988) (= x 1989) (= x 1990) (= x 1991) (= x 1992) + (= x 1993) (= x 1994) (= x 1995) (= x 1996) (= x 1997) (= x 1998) (= x 1999) (= x 2000) + (= x 2001) (= x 2002) (= x 2003) (= x 2004) (= x 2005) (= x 2006) (= x 2007) (= x 2008) + (= x 2009) (= x 2010) (= x 2011) (= x 2012) (= x 2013) (= x 2014) (= x 2015) (= x 2016) + (= x 2017) (= x 2018) (= x 2019) (= x 2020) (= x 2021) (= x 2022) (= x 2023) (= x 2024) + (= x 2025) (= x 2026) (= x 2027) (= x 2028) (= x 2029) (= x 2030) (= x 2031) (= x 2032) + (= x 2033) (= x 2034) (= x 2035) (= x 2036) (= x 2037) (= x 2038) (= x 2039) (= x 2040) + (= x 2041) (= x 2042) (= x 2043) (= x 2044) (= x 2045) (= x 2046) (= x 2047) (= x 2048) + (= x 2049) (= x 2050) (= x 2051) (= x 2052) (= x 2053) (= x 2054) (= x 2055) (= x 2056) + (= x 2057) (= x 2058) (= x 2059) (= x 2060) (= x 2061) (= x 2062) (= x 2063) (= x 2064) + (= x 2065) (= x 2066) (= x 2067) (= x 2068) (= x 2069) (= x 2070) (= x 2071) (= x 2072) + (= x 2073) (= x 2074) (= x 2075) (= x 2076) (= x 2077) (= x 2078) (= x 2079) (= x 2080) + (= x 2081) (= x 2082) (= x 2083) (= x 2084) (= x 2085) (= x 2086) (= x 2087) (= x 2088) + (= x 2089) (= x 2090) (= x 2091) (= x 2092) (= x 2093) (= x 2094) (= x 2095) (= x 2096) + (= x 2097) (= x 2098) (= x 2099) (= x 2100) (= x 2101) (= x 2102) (= x 2103) (= x 2104) + (= x 2105) (= x 2106) (= x 2107) (= x 2108) (= x 2109) (= x 2110) (= x 2111) (= x 2112) + (= x 2113) (= x 2114) (= x 2115) (= x 2116) (= x 2117) (= x 2118) (= x 2119) (= x 2120) + (= x 2121) (= x 2122) (= x 2123) (= x 2124) (= x 2125) (= x 2126) (= x 2127) (= x 2128) + (= x 2129) (= x 2130) (= x 2131) (= x 2132) (= x 2133) (= x 2134) (= x 2135) (= x 2136) + (= x 2137) (= x 2138) (= x 2139) (= x 2140) (= x 2141) (= x 2142) (= x 2143) (= x 2144) + (= x 2145) (= x 2146) (= x 2147) (= x 2148) (= x 2149) (= x 2150) (= x 2151) (= x 2152) + (= x 2153) (= x 2154) (= x 2155) (= x 2156) (= x 2157) (= x 2158) (= x 2159) (= x 2160) + (= x 2161) (= x 2162) (= x 2163) (= x 2164) (= x 2165) (= x 2166) (= x 2167) (= x 2168) + (= x 2169) (= x 2170) (= x 2171) (= x 2172) (= x 2173) (= x 2174) (= x 2175) (= x 2176) + (= x 2177) (= x 2178) (= x 2179) (= x 2180) (= x 2181) (= x 2182) (= x 2183) (= x 2184) + (= x 2185) (= x 2186) (= x 2187) (= x 2188) (= x 2189) (= x 2190) (= x 2191) (= x 2192) + (= x 2193) (= x 2194) (= x 2195) (= x 2196) (= x 2197) (= x 2198) (= x 2199) (= x 2200) + (= x 2201) (= x 2202) (= x 2203) (= x 2204) (= x 2205) (= x 2206) (= x 2207) (= x 2208) + (= x 2209) (= x 2210) (= x 2211) (= x 2212) (= x 2213) (= x 2214) (= x 2215) (= x 2216) + (= x 2217) (= x 2218) (= x 2219) (= x 2220) (= x 2221) (= x 2222) (= x 2223) (= x 2224) + (= x 2225) (= x 2226) (= x 2227) (= x 2228) (= x 2229) (= x 2230) (= x 2231) (= x 2232) + (= x 2233) (= x 2234) (= x 2235) (= x 2236) (= x 2237) (= x 2238) (= x 2239) (= x 2240) + (= x 2241) (= x 2242) (= x 2243) (= x 2244) (= x 2245) (= x 2246) (= x 2247) (= x 2248) + (= x 2249) (= x 2250) (= x 2251) (= x 2252) (= x 2253) (= x 2254) (= x 2255) (= x 2256) + (= x 2257) (= x 2258) (= x 2259) (= x 2260) (= x 2261) (= x 2262) (= x 2263) (= x 2264) + (= x 2265) (= x 2266) (= x 2267) (= x 2268) (= x 2269) (= x 2270) (= x 2271) (= x 2272) + (= x 2273) (= x 2274) (= x 2275) (= x 2276) (= x 2277) (= x 2278) (= x 2279) (= x 2280) + (= x 2281) (= x 2282) (= x 2283) (= x 2284) (= x 2285) (= x 2286) (= x 2287) (= x 2288) + (= x 2289) (= x 2290) (= x 2291) (= x 2292) (= x 2293) (= x 2294) (= x 2295) (= x 2296) + (= x 2297) (= x 2298) (= x 2299) (= x 2300) (= x 2301) (= x 2302) (= x 2303) (= x 2304) + (= x 2305) (= x 2306) (= x 2307) (= x 2308) (= x 2309) (= x 2310) (= x 2311) (= x 2312) + (= x 2313) (= x 2314) (= x 2315) (= x 2316) (= x 2317) (= x 2318) (= x 2319) (= x 2320) + (= x 2321) (= x 2322) (= x 2323) (= x 2324) (= x 2325) (= x 2326) (= x 2327) (= x 2328) + (= x 2329) (= x 2330) (= x 2331) (= x 2332) (= x 2333) (= x 2334) (= x 2335) (= x 2336) + (= x 2337) (= x 2338) (= x 2339) (= x 2340) (= x 2341) (= x 2342) (= x 2343) (= x 2344) + (= x 2345) (= x 2346) (= x 2347) (= x 2348) (= x 2349) (= x 2350) (= x 2351) (= x 2352) + (= x 2353) (= x 2354) (= x 2355) (= x 2356) (= x 2357) (= x 2358) (= x 2359) (= x 2360) + (= x 2361) (= x 2362) (= x 2363) (= x 2364) (= x 2365) (= x 2366) (= x 2367) (= x 2368) + (= x 2369) (= x 2370) (= x 2371) (= x 2372) (= x 2373) (= x 2374) (= x 2375) (= x 2376) + (= x 2377) (= x 2378) (= x 2379) (= x 2380) (= x 2381) (= x 2382) (= x 2383) (= x 2384) + (= x 2385) (= x 2386) (= x 2387) (= x 2388) (= x 2389) (= x 2390) (= x 2391) (= x 2392) + (= x 2393) (= x 2394) (= x 2395) (= x 2396) (= x 2397) (= x 2398) (= x 2399) (= x 2400) + (= x 2401) (= x 2402) (= x 2403) (= x 2404) (= x 2405) (= x 2406) (= x 2407) (= x 2408) + (= x 2409) (= x 2410) (= x 2411) (= x 2412) (= x 2413) (= x 2414) (= x 2415) (= x 2416) + (= x 2417) (= x 2418) (= x 2419) (= x 2420) (= x 2421) (= x 2422) (= x 2423) (= x 2424) + (= x 2425) (= x 2426) (= x 2427) (= x 2428) (= x 2429) (= x 2430) (= x 2431) (= x 2432) + (= x 2433) (= x 2434) (= x 2435) (= x 2436) (= x 2437) (= x 2438) (= x 2439) (= x 2440) + (= x 2441) (= x 2442) (= x 2443) (= x 2444) (= x 2445) (= x 2446) (= x 2447) (= x 2448) + (= x 2449) (= x 2450) (= x 2451) (= x 2452) (= x 2453) (= x 2454) (= x 2455) (= x 2456) + (= x 2457) (= x 2458) (= x 2459) (= x 2460) (= x 2461) (= x 2462) (= x 2463) (= x 2464) + (= x 2465) (= x 2466) (= x 2467) (= x 2468) (= x 2469) (= x 2470) (= x 2471) (= x 2472) + (= x 2473) (= x 2474) (= x 2475) (= x 2476) (= x 2477) (= x 2478) (= x 2479) (= x 2480) + (= x 2481) (= x 2482) (= x 2483) (= x 2484) (= x 2485) (= x 2486) (= x 2487) (= x 2488) + (= x 2489) (= x 2490) (= x 2491) (= x 2492) (= x 2493) (= x 2494) (= x 2495) (= x 2496) + (= x 2497) (= x 2498) (= x 2499) (= x 2500) (= x 2501) (= x 2502) (= x 2503) (= x 2504) + (= x 2505) (= x 2506) (= x 2507) (= x 2508) (= x 2509) (= x 2510) (= x 2511) (= x 2512) + (= x 2513) (= x 2514) (= x 2515) (= x 2516) (= x 2517) (= x 2518) (= x 2519) (= x 2520) + (= x 2521) (= x 2522) (= x 2523) (= x 2524) (= x 2525) (= x 2526) (= x 2527) (= x 2528) + (= x 2529) (= x 2530) (= x 2531) (= x 2532) (= x 2533) (= x 2534) (= x 2535) (= x 2536) + (= x 2537) (= x 2538) (= x 2539) (= x 2540) (= x 2541) (= x 2542) (= x 2543) (= x 2544) + (= x 2545) (= x 2546) (= x 2547) (= x 2548) (= x 2549) (= x 2550) (= x 2551) (= x 2552) + (= x 2553) (= x 2554) (= x 2555) (= x 2556) (= x 2557) (= x 2558) (= x 2559) (= x 2560) + (= x 2561) (= x 2562) (= x 2563) (= x 2564) (= x 2565) (= x 2566) (= x 2567) (= x 2568) + (= x 2569) (= x 2570) (= x 2571) (= x 2572) (= x 2573) (= x 2574) (= x 2575) (= x 2576) + (= x 2577) (= x 2578) (= x 2579) (= x 2580) (= x 2581) (= x 2582) (= x 2583) (= x 2584) + (= x 2585) (= x 2586) (= x 2587) (= x 2588) (= x 2589) (= x 2590) (= x 2591) (= x 2592) + (= x 2593) (= x 2594) (= x 2595) (= x 2596) (= x 2597) (= x 2598) (= x 2599) (= x 2600) + (= x 2601) (= x 2602) (= x 2603) (= x 2604) (= x 2605) (= x 2606) (= x 2607) (= x 2608) + (= x 2609) (= x 2610) (= x 2611) (= x 2612) (= x 2613) (= x 2614) (= x 2615) (= x 2616) + (= x 2617) (= x 2618) (= x 2619) (= x 2620) (= x 2621) (= x 2622) (= x 2623) (= x 2624) + (= x 2625) (= x 2626) (= x 2627) (= x 2628) (= x 2629) (= x 2630) (= x 2631) (= x 2632) + (= x 2633) (= x 2634) (= x 2635) (= x 2636) (= x 2637) (= x 2638) (= x 2639) (= x 2640) + (= x 2641) (= x 2642) (= x 2643) (= x 2644) (= x 2645) (= x 2646) (= x 2647) (= x 2648) + (= x 2649) (= x 2650) (= x 2651) (= x 2652) (= x 2653) (= x 2654) (= x 2655) (= x 2656) + (= x 2657) (= x 2658) (= x 2659) (= x 2660) (= x 2661) (= x 2662) (= x 2663) (= x 2664) + (= x 2665) (= x 2666) (= x 2667) (= x 2668) (= x 2669) (= x 2670) (= x 2671) (= x 2672) + (= x 2673) (= x 2674) (= x 2675) (= x 2676) (= x 2677) (= x 2678) (= x 2679) (= x 2680) + (= x 2681) (= x 2682) (= x 2683) (= x 2684) (= x 2685) (= x 2686) (= x 2687) (= x 2688) + (= x 2689) (= x 2690) (= x 2691) (= x 2692) (= x 2693) (= x 2694) (= x 2695) (= x 2696) + (= x 2697) (= x 2698) (= x 2699) (= x 2700) (= x 2701) (= x 2702) (= x 2703) (= x 2704) + (= x 2705) (= x 2706) (= x 2707) (= x 2708) (= x 2709) (= x 2710) (= x 2711) (= x 2712) + (= x 2713) (= x 2714) (= x 2715) (= x 2716) (= x 2717) (= x 2718) (= x 2719) (= x 2720) + (= x 2721) (= x 2722) (= x 2723) (= x 2724) (= x 2725) (= x 2726) (= x 2727) (= x 2728) + (= x 2729) (= x 2730) (= x 2731) (= x 2732) (= x 2733) (= x 2734) (= x 2735) (= x 2736) + (= x 2737) (= x 2738) (= x 2739) (= x 2740) (= x 2741) (= x 2742) (= x 2743) (= x 2744) + (= x 2745) (= x 2746) (= x 2747) (= x 2748) (= x 2749) (= x 2750) (= x 2751) (= x 2752) + (= x 2753) (= x 2754) (= x 2755) (= x 2756) (= x 2757) (= x 2758) (= x 2759) (= x 2760) + (= x 2761) (= x 2762) (= x 2763) (= x 2764) (= x 2765) (= x 2766) (= x 2767) (= x 2768) + (= x 2769) (= x 2770) (= x 2771) (= x 2772) (= x 2773) (= x 2774) (= x 2775) (= x 2776) + (= x 2777) (= x 2778) (= x 2779) (= x 2780) (= x 2781) (= x 2782) (= x 2783) (= x 2784) + (= x 2785) (= x 2786) (= x 2787) (= x 2788) (= x 2789) (= x 2790) (= x 2791) (= x 2792) + (= x 2793) (= x 2794) (= x 2795) (= x 2796) (= x 2797) (= x 2798) (= x 2799) (= x 2800) + (= x 2801) (= x 2802) (= x 2803) (= x 2804) (= x 2805) (= x 2806) (= x 2807) (= x 2808) + (= x 2809) (= x 2810) (= x 2811) (= x 2812) (= x 2813) (= x 2814) (= x 2815) (= x 2816) + (= x 2817) (= x 2818) (= x 2819) (= x 2820) (= x 2821) (= x 2822) (= x 2823) (= x 2824) + (= x 2825) (= x 2826) (= x 2827) (= x 2828) (= x 2829) (= x 2830) (= x 2831) (= x 2832) + (= x 2833) (= x 2834) (= x 2835) (= x 2836) (= x 2837) (= x 2838) (= x 2839) (= x 2840) + (= x 2841) (= x 2842) (= x 2843) (= x 2844) (= x 2845) (= x 2846) (= x 2847) (= x 2848) + (= x 2849) (= x 2850) (= x 2851) (= x 2852) (= x 2853) (= x 2854) (= x 2855) (= x 2856) + (= x 2857) (= x 2858) (= x 2859) (= x 2860) (= x 2861) (= x 2862) (= x 2863) (= x 2864) + (= x 2865) (= x 2866) (= x 2867) (= x 2868) (= x 2869) (= x 2870) (= x 2871) (= x 2872) + (= x 2873) (= x 2874) (= x 2875) (= x 2876) (= x 2877) (= x 2878) (= x 2879) (= x 2880) + (= x 2881) (= x 2882) (= x 2883) (= x 2884) (= x 2885) (= x 2886) (= x 2887) (= x 2888) + (= x 2889) (= x 2890) (= x 2891) (= x 2892) (= x 2893) (= x 2894) (= x 2895) (= x 2896) + (= x 2897) (= x 2898) (= x 2899) (= x 2900) (= x 2901) (= x 2902) (= x 2903) (= x 2904) + (= x 2905) (= x 2906) (= x 2907) (= x 2908) (= x 2909) (= x 2910) (= x 2911) (= x 2912) + (= x 2913) (= x 2914) (= x 2915) (= x 2916) (= x 2917) (= x 2918) (= x 2919) (= x 2920) + (= x 2921) (= x 2922) (= x 2923) (= x 2924) (= x 2925) (= x 2926) (= x 2927) (= x 2928) + (= x 2929) (= x 2930) (= x 2931) (= x 2932) (= x 2933) (= x 2934) (= x 2935) (= x 2936) + (= x 2937) (= x 2938) (= x 2939) (= x 2940) (= x 2941) (= x 2942) (= x 2943) (= x 2944) + (= x 2945) (= x 2946) (= x 2947) (= x 2948) (= x 2949) (= x 2950) (= x 2951) (= x 2952) + (= x 2953) (= x 2954) (= x 2955) (= x 2956) (= x 2957) (= x 2958) (= x 2959) (= x 2960) + (= x 2961) (= x 2962) (= x 2963) (= x 2964) (= x 2965) (= x 2966) (= x 2967) (= x 2968) + (= x 2969) (= x 2970) (= x 2971) (= x 2972) (= x 2973) (= x 2974) (= x 2975) (= x 2976) + (= x 2977) (= x 2978) (= x 2979) (= x 2980) (= x 2981) (= x 2982) (= x 2983) (= x 2984) + (= x 2985) (= x 2986) (= x 2987) (= x 2988) (= x 2989) (= x 2990) (= x 2991) (= x 2992) + (= x 2993) (= x 2994) (= x 2995) (= x 2996) (= x 2997) (= x 2998) (= x 2999) (= x 3000) + (= x 3001) (= x 3002) (= x 3003) (= x 3004) (= x 3005) (= x 3006) (= x 3007) (= x 3008) + (= x 3009) (= x 3010) (= x 3011) (= x 3012) (= x 3013) (= x 3014) (= x 3015) (= x 3016) + (= x 3017) (= x 3018) (= x 3019) (= x 3020) (= x 3021) (= x 3022) (= x 3023) (= x 3024) + (= x 3025) (= x 3026) (= x 3027) (= x 3028) (= x 3029) (= x 3030) (= x 3031) (= x 3032) + (= x 3033) (= x 3034) (= x 3035) (= x 3036) (= x 3037) (= x 3038) (= x 3039) (= x 3040) + (= x 3041) (= x 3042) (= x 3043) (= x 3044) (= x 3045) (= x 3046) (= x 3047) (= x 3048) + (= x 3049) (= x 3050) (= x 3051) (= x 3052) (= x 3053) (= x 3054) (= x 3055) (= x 3056) + (= x 3057) (= x 3058) (= x 3059) (= x 3060) (= x 3061) (= x 3062) (= x 3063) (= x 3064) + (= x 3065) (= x 3066) (= x 3067) (= x 3068) (= x 3069) (= x 3070) (= x 3071) (= x 3072) + (= x 3073) (= x 3074) (= x 3075) (= x 3076) (= x 3077) (= x 3078) (= x 3079) (= x 3080) + (= x 3081) (= x 3082) (= x 3083) (= x 3084) (= x 3085) (= x 3086) (= x 3087) (= x 3088) + (= x 3089) (= x 3090) (= x 3091) (= x 3092) (= x 3093) (= x 3094) (= x 3095) (= x 3096) + (= x 3097) (= x 3098) (= x 3099) (= x 3100) (= x 3101) (= x 3102) (= x 3103) (= x 3104) + (= x 3105) (= x 3106) (= x 3107) (= x 3108) (= x 3109) (= x 3110) (= x 3111) (= x 3112) + (= x 3113) (= x 3114) (= x 3115) (= x 3116) (= x 3117) (= x 3118) (= x 3119) (= x 3120) + (= x 3121) (= x 3122) (= x 3123) (= x 3124) (= x 3125) (= x 3126) (= x 3127) (= x 3128) + (= x 3129) (= x 3130) (= x 3131) (= x 3132) (= x 3133) (= x 3134) (= x 3135) (= x 3136) + (= x 3137) (= x 3138) (= x 3139) (= x 3140) (= x 3141) (= x 3142) (= x 3143) (= x 3144) + (= x 3145) (= x 3146) (= x 3147) (= x 3148) (= x 3149) (= x 3150) (= x 3151) (= x 3152) + (= x 3153) (= x 3154) (= x 3155) (= x 3156) (= x 3157) (= x 3158) (= x 3159) (= x 3160) + (= x 3161) (= x 3162) (= x 3163) (= x 3164) (= x 3165) (= x 3166) (= x 3167) (= x 3168) + (= x 3169) (= x 3170) (= x 3171) (= x 3172) (= x 3173) (= x 3174) (= x 3175) (= x 3176) + (= x 3177) (= x 3178) (= x 3179) (= x 3180) (= x 3181) (= x 3182) (= x 3183) (= x 3184) + (= x 3185) (= x 3186) (= x 3187) (= x 3188) (= x 3189) (= x 3190) (= x 3191) (= x 3192) + (= x 3193) (= x 3194) (= x 3195) (= x 3196) (= x 3197) (= x 3198) (= x 3199) (= x 3200) + (= x 3201) (= x 3202) (= x 3203) (= x 3204) (= x 3205) (= x 3206) (= x 3207) (= x 3208) + (= x 3209) (= x 3210) (= x 3211) (= x 3212) (= x 3213) (= x 3214) (= x 3215) (= x 3216) + (= x 3217) (= x 3218) (= x 3219) (= x 3220) (= x 3221) (= x 3222) (= x 3223) (= x 3224) + (= x 3225) (= x 3226) (= x 3227) (= x 3228) (= x 3229) (= x 3230) (= x 3231) (= x 3232) + (= x 3233) (= x 3234) (= x 3235) (= x 3236) (= x 3237) (= x 3238) (= x 3239) (= x 3240) + (= x 3241) (= x 3242) (= x 3243) (= x 3244) (= x 3245) (= x 3246) (= x 3247) (= x 3248) + (= x 3249) (= x 3250) (= x 3251) (= x 3252) (= x 3253) (= x 3254) (= x 3255) (= x 3256) + (= x 3257) (= x 3258) (= x 3259) (= x 3260) (= x 3261) (= x 3262) (= x 3263) (= x 3264) + (= x 3265) (= x 3266) (= x 3267) (= x 3268) (= x 3269) (= x 3270) (= x 3271) (= x 3272) + (= x 3273) (= x 3274) (= x 3275) (= x 3276) (= x 3277) (= x 3278) (= x 3279) (= x 3280) + (= x 3281) (= x 3282) (= x 3283) (= x 3284) (= x 3285) (= x 3286) (= x 3287) (= x 3288) + (= x 3289) (= x 3290) (= x 3291) (= x 3292) (= x 3293) (= x 3294) (= x 3295) (= x 3296) + (= x 3297) (= x 3298) (= x 3299) (= x 3300) (= x 3301) (= x 3302) (= x 3303) (= x 3304) + (= x 3305) (= x 3306) (= x 3307) (= x 3308) (= x 3309) (= x 3310) (= x 3311) (= x 3312) + (= x 3313) (= x 3314) (= x 3315) (= x 3316) (= x 3317) (= x 3318) (= x 3319) (= x 3320) + (= x 3321) (= x 3322) (= x 3323) (= x 3324) (= x 3325) (= x 3326) (= x 3327) (= x 3328) + (= x 3329) (= x 3330) (= x 3331) (= x 3332) (= x 3333) (= x 3334) (= x 3335) (= x 3336) + (= x 3337) (= x 3338) (= x 3339) (= x 3340) (= x 3341) (= x 3342) (= x 3343) (= x 3344) + (= x 3345) (= x 3346) (= x 3347) (= x 3348) (= x 3349) (= x 3350) (= x 3351) (= x 3352) + (= x 3353) (= x 3354) (= x 3355) (= x 3356) (= x 3357) (= x 3358) (= x 3359) (= x 3360) + (= x 3361) (= x 3362) (= x 3363) (= x 3364) (= x 3365) (= x 3366) (= x 3367) (= x 3368) + (= x 3369) (= x 3370) (= x 3371) (= x 3372) (= x 3373) (= x 3374) (= x 3375) (= x 3376) + (= x 3377) (= x 3378) (= x 3379) (= x 3380) (= x 3381) (= x 3382) (= x 3383) (= x 3384) + (= x 3385) (= x 3386) (= x 3387) (= x 3388) (= x 3389) (= x 3390) (= x 3391) (= x 3392) + (= x 3393) (= x 3394) (= x 3395) (= x 3396) (= x 3397) (= x 3398) (= x 3399) (= x 3400) + (= x 3401) (= x 3402) (= x 3403) (= x 3404) (= x 3405) (= x 3406) (= x 3407) (= x 3408) + (= x 3409) (= x 3410) (= x 3411) (= x 3412) (= x 3413) (= x 3414) (= x 3415) (= x 3416) + (= x 3417) (= x 3418) (= x 3419) (= x 3420) (= x 3421) (= x 3422) (= x 3423) (= x 3424) + (= x 3425) (= x 3426) (= x 3427) (= x 3428) (= x 3429) (= x 3430) (= x 3431) (= x 3432) + (= x 3433) (= x 3434) (= x 3435) (= x 3436) (= x 3437) (= x 3438) (= x 3439) (= x 3440) + (= x 3441) (= x 3442) (= x 3443) (= x 3444) (= x 3445) (= x 3446) (= x 3447) (= x 3448) + (= x 3449) (= x 3450) (= x 3451) (= x 3452) (= x 3453) (= x 3454) (= x 3455) (= x 3456) + (= x 3457) (= x 3458) (= x 3459) (= x 3460) (= x 3461) (= x 3462) (= x 3463) (= x 3464) + (= x 3465) (= x 3466) (= x 3467) (= x 3468) (= x 3469) (= x 3470) (= x 3471) (= x 3472) + (= x 3473) (= x 3474) (= x 3475) (= x 3476) (= x 3477) (= x 3478) (= x 3479) (= x 3480) + (= x 3481) (= x 3482) (= x 3483) (= x 3484) (= x 3485) (= x 3486) (= x 3487) (= x 3488) + (= x 3489) (= x 3490) (= x 3491) (= x 3492) (= x 3493) (= x 3494) (= x 3495) (= x 3496) + (= x 3497) (= x 3498) (= x 3499) (= x 3500) (= x 3501) (= x 3502) (= x 3503) (= x 3504) + (= x 3505) (= x 3506) (= x 3507) (= x 3508) (= x 3509) (= x 3510) (= x 3511) (= x 3512) + (= x 3513) (= x 3514) (= x 3515) (= x 3516) (= x 3517) (= x 3518) (= x 3519) (= x 3520) + (= x 3521) (= x 3522) (= x 3523) (= x 3524) (= x 3525) (= x 3526) (= x 3527) (= x 3528) + (= x 3529) (= x 3530) (= x 3531) (= x 3532) (= x 3533) (= x 3534) (= x 3535) (= x 3536) + (= x 3537) (= x 3538) (= x 3539) (= x 3540) (= x 3541) (= x 3542) (= x 3543) (= x 3544) + (= x 3545) (= x 3546) (= x 3547) (= x 3548) (= x 3549) (= x 3550) (= x 3551) (= x 3552) + (= x 3553) (= x 3554) (= x 3555) (= x 3556) (= x 3557) (= x 3558) (= x 3559) (= x 3560) + (= x 3561) (= x 3562) (= x 3563) (= x 3564) (= x 3565) (= x 3566) (= x 3567) (= x 3568) + (= x 3569) (= x 3570) (= x 3571) (= x 3572) (= x 3573) (= x 3574) (= x 3575) (= x 3576) + (= x 3577) (= x 3578) (= x 3579) (= x 3580) (= x 3581) (= x 3582) (= x 3583) (= x 3584) + (= x 3585) (= x 3586) (= x 3587) (= x 3588) (= x 3589) (= x 3590) (= x 3591) (= x 3592) + (= x 3593) (= x 3594) (= x 3595) (= x 3596) (= x 3597) (= x 3598) (= x 3599) (= x 3600) + (= x 3601) (= x 3602) (= x 3603) (= x 3604) (= x 3605) (= x 3606) (= x 3607) (= x 3608) + (= x 3609) (= x 3610) (= x 3611) (= x 3612) (= x 3613) (= x 3614) (= x 3615) (= x 3616) + (= x 3617) (= x 3618) (= x 3619) (= x 3620) (= x 3621) (= x 3622) (= x 3623) (= x 3624) + (= x 3625) (= x 3626) (= x 3627) (= x 3628) (= x 3629) (= x 3630) (= x 3631) (= x 3632) + (= x 3633) (= x 3634) (= x 3635) (= x 3636) (= x 3637) (= x 3638) (= x 3639) (= x 3640) + (= x 3641) (= x 3642) (= x 3643) (= x 3644) (= x 3645) (= x 3646) (= x 3647) (= x 3648) + (= x 3649) (= x 3650) (= x 3651) (= x 3652) (= x 3653) (= x 3654) (= x 3655) (= x 3656) + (= x 3657) (= x 3658) (= x 3659) (= x 3660) (= x 3661) (= x 3662) (= x 3663) (= x 3664) + (= x 3665) (= x 3666) (= x 3667) (= x 3668) (= x 3669) (= x 3670) (= x 3671) (= x 3672) + (= x 3673) (= x 3674) (= x 3675) (= x 3676) (= x 3677) (= x 3678) (= x 3679) (= x 3680) + (= x 3681) (= x 3682) (= x 3683) (= x 3684) (= x 3685) (= x 3686) (= x 3687) (= x 3688) + (= x 3689) (= x 3690) (= x 3691) (= x 3692) (= x 3693) (= x 3694) (= x 3695) (= x 3696) + (= x 3697) (= x 3698) (= x 3699) (= x 3700) (= x 3701) (= x 3702) (= x 3703) (= x 3704) + (= x 3705) (= x 3706) (= x 3707) (= x 3708) (= x 3709) (= x 3710) (= x 3711) (= x 3712) + (= x 3713) (= x 3714) (= x 3715) (= x 3716) (= x 3717) (= x 3718) (= x 3719) (= x 3720) + (= x 3721) (= x 3722) (= x 3723) (= x 3724) (= x 3725) (= x 3726) (= x 3727) (= x 3728) + (= x 3729) (= x 3730) (= x 3731) (= x 3732) (= x 3733) (= x 3734) (= x 3735) (= x 3736) + (= x 3737) (= x 3738) (= x 3739) (= x 3740) (= x 3741) (= x 3742) (= x 3743) (= x 3744) + (= x 3745) (= x 3746) (= x 3747) (= x 3748) (= x 3749) (= x 3750) (= x 3751) (= x 3752) + (= x 3753) (= x 3754) (= x 3755) (= x 3756) (= x 3757) (= x 3758) (= x 3759) (= x 3760) + (= x 3761) (= x 3762) (= x 3763) (= x 3764) (= x 3765) (= x 3766) (= x 3767) (= x 3768) + (= x 3769) (= x 3770) (= x 3771) (= x 3772) (= x 3773) (= x 3774) (= x 3775) (= x 3776) + (= x 3777) (= x 3778) (= x 3779) (= x 3780) (= x 3781) (= x 3782) (= x 3783) (= x 3784) + (= x 3785) (= x 3786) (= x 3787) (= x 3788) (= x 3789) (= x 3790) (= x 3791) (= x 3792) + (= x 3793) (= x 3794) (= x 3795) (= x 3796) (= x 3797) (= x 3798) (= x 3799) (= x 3800) + (= x 3801) (= x 3802) (= x 3803) (= x 3804) (= x 3805) (= x 3806) (= x 3807) (= x 3808) + (= x 3809) (= x 3810) (= x 3811) (= x 3812) (= x 3813) (= x 3814) (= x 3815) (= x 3816) + (= x 3817) (= x 3818) (= x 3819) (= x 3820) (= x 3821) (= x 3822) (= x 3823) (= x 3824) + (= x 3825) (= x 3826) (= x 3827) (= x 3828) (= x 3829) (= x 3830) (= x 3831) (= x 3832) + (= x 3833) (= x 3834) (= x 3835) (= x 3836) (= x 3837) (= x 3838) (= x 3839) (= x 3840) + (= x 3841) (= x 3842) (= x 3843) (= x 3844) (= x 3845) (= x 3846) (= x 3847) (= x 3848) + (= x 3849) (= x 3850) (= x 3851) (= x 3852) (= x 3853) (= x 3854) (= x 3855) (= x 3856) + (= x 3857) (= x 3858) (= x 3859) (= x 3860) (= x 3861) (= x 3862) (= x 3863) (= x 3864) + (= x 3865) (= x 3866) (= x 3867) (= x 3868) (= x 3869) (= x 3870) (= x 3871) (= x 3872) + (= x 3873) (= x 3874) (= x 3875) (= x 3876) (= x 3877) (= x 3878) (= x 3879) (= x 3880) + (= x 3881) (= x 3882) (= x 3883) (= x 3884) (= x 3885) (= x 3886) (= x 3887) (= x 3888) + (= x 3889) (= x 3890) (= x 3891) (= x 3892) (= x 3893) (= x 3894) (= x 3895) (= x 3896) + (= x 3897) (= x 3898) (= x 3899) (= x 3900) (= x 3901) (= x 3902) (= x 3903) (= x 3904) + (= x 3905) (= x 3906) (= x 3907) (= x 3908) (= x 3909) (= x 3910) (= x 3911) (= x 3912) + (= x 3913) (= x 3914) (= x 3915) (= x 3916) (= x 3917) (= x 3918) (= x 3919) (= x 3920) + (= x 3921) (= x 3922) (= x 3923) (= x 3924) (= x 3925) (= x 3926) (= x 3927) (= x 3928) + (= x 3929) (= x 3930) (= x 3931) (= x 3932) (= x 3933) (= x 3934) (= x 3935) (= x 3936) + (= x 3937) (= x 3938) (= x 3939) (= x 3940) (= x 3941) (= x 3942) (= x 3943) (= x 3944) + (= x 3945) (= x 3946) (= x 3947) (= x 3948) (= x 3949) (= x 3950) (= x 3951) (= x 3952) + (= x 3953) (= x 3954) (= x 3955) (= x 3956) (= x 3957) (= x 3958) (= x 3959) (= x 3960) + (= x 3961) (= x 3962) (= x 3963) (= x 3964) (= x 3965) (= x 3966) (= x 3967) (= x 3968) + (= x 3969) (= x 3970) (= x 3971) (= x 3972) (= x 3973) (= x 3974) (= x 3975) (= x 3976) + (= x 3977) (= x 3978) (= x 3979) (= x 3980) (= x 3981) (= x 3982) (= x 3983) (= x 3984) + (= x 3985) (= x 3986) (= x 3987) (= x 3988) (= x 3989) (= x 3990) (= x 3991) (= x 3992) + (= x 3993) (= x 3994) (= x 3995) (= x 3996) (= x 3997) (= x 3998) (= x 3999) (= x 4000) + (= x 4001) (= x 4002) (= x 4003) (= x 4004) (= x 4005) (= x 4006) (= x 4007) (= x 4008) + (= x 4009) (= x 4010) (= x 4011) (= x 4012) (= x 4013) (= x 4014) (= x 4015) (= x 4016) + (= x 4017) (= x 4018) (= x 4019) (= x 4020) (= x 4021) (= x 4022) (= x 4023) (= x 4024) + (= x 4025) (= x 4026) (= x 4027) (= x 4028) (= x 4029) (= x 4030) (= x 4031) (= x 4032) + (= x 4033) (= x 4034) (= x 4035) (= x 4036) (= x 4037) (= x 4038) (= x 4039) (= x 4040) + (= x 4041) (= x 4042) (= x 4043) (= x 4044) (= x 4045) (= x 4046) (= x 4047) (= x 4048) + (= x 4049) (= x 4050) (= x 4051) (= x 4052) (= x 4053) (= x 4054) (= x 4055) (= x 4056) + (= x 4057) (= x 4058) (= x 4059) (= x 4060) (= x 4061) (= x 4062) (= x 4063) (= x 4064) + (= x 4065) (= x 4066) (= x 4067) (= x 4068) (= x 4069) (= x 4070) (= x 4071) (= x 4072) + (= x 4073) (= x 4074) (= x 4075) (= x 4076) (= x 4077) (= x 4078) (= x 4079) (= x 4080) + (= x 4081) (= x 4082) (= x 4083) (= x 4084) (= x 4085) (= x 4086) (= x 4087) (= x 4088) + (= x 4089) (= x 4090) (= x 4091) (= x 4092) (= x 4093) (= x 4094) (= x 4095) (= x 4096) + )) + (itp x)) +) + +(rule (=> + (and + (itp x) + (= x1 (+ x (+ 4 (- x 1)))) + ) + (itp x1) +)) + + +(rule (=> (and (itp x) + (= x 2639) +) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn_cex/samples_shrink_big_numbers_8192_cex.smt2 b/bench_horn_cex/samples_shrink_big_numbers_8192_cex.smt2 new file mode 100644 index 000000000..425238e13 --- /dev/null +++ b/bench_horn_cex/samples_shrink_big_numbers_8192_cex.smt2 @@ -0,0 +1,1049 @@ +(declare-rel itp (Int)) +(declare-var x Int) +(declare-var x1 Int) + +(declare-rel fail ()) + +(rule (=> (and + (or + (= x 1) (= x 2) (= x 3) (= x 4) (= x 5) (= x 6) (= x 7) (= x 8) + (= x 9) (= x 10) (= x 11) (= x 12) (= x 13) (= x 14) (= x 15) (= x 16) + (= x 17) (= x 18) (= x 19) (= x 20) (= x 21) (= x 22) (= x 23) (= x 24) + (= x 25) (= x 26) (= x 27) (= x 28) (= x 29) (= x 30) (= x 31) (= x 32) + (= x 33) (= x 34) (= x 35) (= x 36) (= x 37) (= x 38) (= x 39) (= x 40) + (= x 41) (= x 42) (= x 43) (= x 44) (= x 45) (= x 46) (= x 47) (= x 48) + (= x 49) (= x 50) (= x 51) (= x 52) (= x 53) (= x 54) (= x 55) (= x 56) + (= x 57) (= x 58) (= x 59) (= x 60) (= x 61) (= x 62) (= x 63) (= x 64) + (= x 65) (= x 66) (= x 67) (= x 68) (= x 69) (= x 70) (= x 71) (= x 72) + (= x 73) (= x 74) (= x 75) (= x 76) (= x 77) (= x 78) (= x 79) (= x 80) + (= x 81) (= x 82) (= x 83) (= x 84) (= x 85) (= x 86) (= x 87) (= x 88) + (= x 89) (= x 90) (= x 91) (= x 92) (= x 93) (= x 94) (= x 95) (= x 96) + (= x 97) (= x 98) (= x 99) (= x 100) (= x 101) (= x 102) (= x 103) (= x 104) + (= x 105) (= x 106) (= x 107) (= x 108) (= x 109) (= x 110) (= x 111) (= x 112) + (= x 113) (= x 114) (= x 115) (= x 116) (= x 117) (= x 118) (= x 119) (= x 120) + (= x 121) (= x 122) (= x 123) (= x 124) (= x 125) (= x 126) (= x 127) (= x 128) + (= x 129) (= x 130) (= x 131) (= x 132) (= x 133) (= x 134) (= x 135) (= x 136) + (= x 137) (= x 138) (= x 139) (= x 140) (= x 141) (= x 142) (= x 143) (= x 144) + (= x 145) (= x 146) (= x 147) (= x 148) (= x 149) (= x 150) (= x 151) (= x 152) + (= x 153) (= x 154) (= x 155) (= x 156) (= x 157) (= x 158) (= x 159) (= x 160) + (= x 161) (= x 162) (= x 163) (= x 164) (= x 165) (= x 166) (= x 167) (= x 168) + (= x 169) (= x 170) (= x 171) (= x 172) (= x 173) (= x 174) (= x 175) (= x 176) + (= x 177) (= x 178) (= x 179) (= x 180) (= x 181) (= x 182) (= x 183) (= x 184) + (= x 185) (= x 186) (= x 187) (= x 188) (= x 189) (= x 190) (= x 191) (= x 192) + (= x 193) (= x 194) (= x 195) (= x 196) (= x 197) (= x 198) (= x 199) (= x 200) + (= x 201) (= x 202) (= x 203) (= x 204) (= x 205) (= x 206) (= x 207) (= x 208) + (= x 209) (= x 210) (= x 211) (= x 212) (= x 213) (= x 214) (= x 215) (= x 216) + (= x 217) (= x 218) (= x 219) (= x 220) (= x 221) (= x 222) (= x 223) (= x 224) + (= x 225) (= x 226) (= x 227) (= x 228) (= x 229) (= x 230) (= x 231) (= x 232) + (= x 233) (= x 234) (= x 235) (= x 236) (= x 237) (= x 238) (= x 239) (= x 240) + (= x 241) (= x 242) (= x 243) (= x 244) (= x 245) (= x 246) (= x 247) (= x 248) + (= x 249) (= x 250) (= x 251) (= x 252) (= x 253) (= x 254) (= x 255) (= x 256) + (= x 257) (= x 258) (= x 259) (= x 260) (= x 261) (= x 262) (= x 263) (= x 264) + (= x 265) (= x 266) (= x 267) (= x 268) (= x 269) (= x 270) (= x 271) (= x 272) + (= x 273) (= x 274) (= x 275) (= x 276) (= x 277) (= x 278) (= x 279) (= x 280) + (= x 281) (= x 282) (= x 283) (= x 284) (= x 285) (= x 286) (= x 287) (= x 288) + (= x 289) (= x 290) (= x 291) (= x 292) (= x 293) (= x 294) (= x 295) (= x 296) + (= x 297) (= x 298) (= x 299) (= x 300) (= x 301) (= x 302) (= x 303) (= x 304) + (= x 305) (= x 306) (= x 307) (= x 308) (= x 309) (= x 310) (= x 311) (= x 312) + (= x 313) (= x 314) (= x 315) (= x 316) (= x 317) (= x 318) (= x 319) (= x 320) + (= x 321) (= x 322) (= x 323) (= x 324) (= x 325) (= x 326) (= x 327) (= x 328) + (= x 329) (= x 330) (= x 331) (= x 332) (= x 333) (= x 334) (= x 335) (= x 336) + (= x 337) (= x 338) (= x 339) (= x 340) (= x 341) (= x 342) (= x 343) (= x 344) + (= x 345) (= x 346) (= x 347) (= x 348) (= x 349) (= x 350) (= x 351) (= x 352) + (= x 353) (= x 354) (= x 355) (= x 356) (= x 357) (= x 358) (= x 359) (= x 360) + (= x 361) (= x 362) (= x 363) (= x 364) (= x 365) (= x 366) (= x 367) (= x 368) + (= x 369) (= x 370) (= x 371) (= x 372) (= x 373) (= x 374) (= x 375) (= x 376) + (= x 377) (= x 378) (= x 379) (= x 380) (= x 381) (= x 382) (= x 383) (= x 384) + (= x 385) (= x 386) (= x 387) (= x 388) (= x 389) (= x 390) (= x 391) (= x 392) + (= x 393) (= x 394) (= x 395) (= x 396) (= x 397) (= x 398) (= x 399) (= x 400) + (= x 401) (= x 402) (= x 403) (= x 404) (= x 405) (= x 406) (= x 407) (= x 408) + (= x 409) (= x 410) (= x 411) (= x 412) (= x 413) (= x 414) (= x 415) (= x 416) + (= x 417) (= x 418) (= x 419) (= x 420) (= x 421) (= x 422) (= x 423) (= x 424) + (= x 425) (= x 426) (= x 427) (= x 428) (= x 429) (= x 430) (= x 431) (= x 432) + (= x 433) (= x 434) (= x 435) (= x 436) (= x 437) (= x 438) (= x 439) (= x 440) + (= x 441) (= x 442) (= x 443) (= x 444) (= x 445) (= x 446) (= x 447) (= x 448) + (= x 449) (= x 450) (= x 451) (= x 452) (= x 453) (= x 454) (= x 455) (= x 456) + (= x 457) (= x 458) (= x 459) (= x 460) (= x 461) (= x 462) (= x 463) (= x 464) + (= x 465) (= x 466) (= x 467) (= x 468) (= x 469) (= x 470) (= x 471) (= x 472) + (= x 473) (= x 474) (= x 475) (= x 476) (= x 477) (= x 478) (= x 479) (= x 480) + (= x 481) (= x 482) (= x 483) (= x 484) (= x 485) (= x 486) (= x 487) (= x 488) + (= x 489) (= x 490) (= x 491) (= x 492) (= x 493) (= x 494) (= x 495) (= x 496) + (= x 497) (= x 498) (= x 499) (= x 500) (= x 501) (= x 502) (= x 503) (= x 504) + (= x 505) (= x 506) (= x 507) (= x 508) (= x 509) (= x 510) (= x 511) (= x 512) + (= x 513) (= x 514) (= x 515) (= x 516) (= x 517) (= x 518) (= x 519) (= x 520) + (= x 521) (= x 522) (= x 523) (= x 524) (= x 525) (= x 526) (= x 527) (= x 528) + (= x 529) (= x 530) (= x 531) (= x 532) (= x 533) (= x 534) (= x 535) (= x 536) + (= x 537) (= x 538) (= x 539) (= x 540) (= x 541) (= x 542) (= x 543) (= x 544) + (= x 545) (= x 546) (= x 547) (= x 548) (= x 549) (= x 550) (= x 551) (= x 552) + (= x 553) (= x 554) (= x 555) (= x 556) (= x 557) (= x 558) (= x 559) (= x 560) + (= x 561) (= x 562) (= x 563) (= x 564) (= x 565) (= x 566) (= x 567) (= x 568) + (= x 569) (= x 570) (= x 571) (= x 572) (= x 573) (= x 574) (= x 575) (= x 576) + (= x 577) (= x 578) (= x 579) (= x 580) (= x 581) (= x 582) (= x 583) (= x 584) + (= x 585) (= x 586) (= x 587) (= x 588) (= x 589) (= x 590) (= x 591) (= x 592) + (= x 593) (= x 594) (= x 595) (= x 596) (= x 597) (= x 598) (= x 599) (= x 600) + (= x 601) (= x 602) (= x 603) (= x 604) (= x 605) (= x 606) (= x 607) (= x 608) + (= x 609) (= x 610) (= x 611) (= x 612) (= x 613) (= x 614) (= x 615) (= x 616) + (= x 617) (= x 618) (= x 619) (= x 620) (= x 621) (= x 622) (= x 623) (= x 624) + (= x 625) (= x 626) (= x 627) (= x 628) (= x 629) (= x 630) (= x 631) (= x 632) + (= x 633) (= x 634) (= x 635) (= x 636) (= x 637) (= x 638) (= x 639) (= x 640) + (= x 641) (= x 642) (= x 643) (= x 644) (= x 645) (= x 646) (= x 647) (= x 648) + (= x 649) (= x 650) (= x 651) (= x 652) (= x 653) (= x 654) (= x 655) (= x 656) + (= x 657) (= x 658) (= x 659) (= x 660) (= x 661) (= x 662) (= x 663) (= x 664) + (= x 665) (= x 666) (= x 667) (= x 668) (= x 669) (= x 670) (= x 671) (= x 672) + (= x 673) (= x 674) (= x 675) (= x 676) (= x 677) (= x 678) (= x 679) (= x 680) + (= x 681) (= x 682) (= x 683) (= x 684) (= x 685) (= x 686) (= x 687) (= x 688) + (= x 689) (= x 690) (= x 691) (= x 692) (= x 693) (= x 694) (= x 695) (= x 696) + (= x 697) (= x 698) (= x 699) (= x 700) (= x 701) (= x 702) (= x 703) (= x 704) + (= x 705) (= x 706) (= x 707) (= x 708) (= x 709) (= x 710) (= x 711) (= x 712) + (= x 713) (= x 714) (= x 715) (= x 716) (= x 717) (= x 718) (= x 719) (= x 720) + (= x 721) (= x 722) (= x 723) (= x 724) (= x 725) (= x 726) (= x 727) (= x 728) + (= x 729) (= x 730) (= x 731) (= x 732) (= x 733) (= x 734) (= x 735) (= x 736) + (= x 737) (= x 738) (= x 739) (= x 740) (= x 741) (= x 742) (= x 743) (= x 744) + (= x 745) (= x 746) (= x 747) (= x 748) (= x 749) (= x 750) (= x 751) (= x 752) + (= x 753) (= x 754) (= x 755) (= x 756) (= x 757) (= x 758) (= x 759) (= x 760) + (= x 761) (= x 762) (= x 763) (= x 764) (= x 765) (= x 766) (= x 767) (= x 768) + (= x 769) (= x 770) (= x 771) (= x 772) (= x 773) (= x 774) (= x 775) (= x 776) + (= x 777) (= x 778) (= x 779) (= x 780) (= x 781) (= x 782) (= x 783) (= x 784) + (= x 785) (= x 786) (= x 787) (= x 788) (= x 789) (= x 790) (= x 791) (= x 792) + (= x 793) (= x 794) (= x 795) (= x 796) (= x 797) (= x 798) (= x 799) (= x 800) + (= x 801) (= x 802) (= x 803) (= x 804) (= x 805) (= x 806) (= x 807) (= x 808) + (= x 809) (= x 810) (= x 811) (= x 812) (= x 813) (= x 814) (= x 815) (= x 816) + (= x 817) (= x 818) (= x 819) (= x 820) (= x 821) (= x 822) (= x 823) (= x 824) + (= x 825) (= x 826) (= x 827) (= x 828) (= x 829) (= x 830) (= x 831) (= x 832) + (= x 833) (= x 834) (= x 835) (= x 836) (= x 837) (= x 838) (= x 839) (= x 840) + (= x 841) (= x 842) (= x 843) (= x 844) (= x 845) (= x 846) (= x 847) (= x 848) + (= x 849) (= x 850) (= x 851) (= x 852) (= x 853) (= x 854) (= x 855) (= x 856) + (= x 857) (= x 858) (= x 859) (= x 860) (= x 861) (= x 862) (= x 863) (= x 864) + (= x 865) (= x 866) (= x 867) (= x 868) (= x 869) (= x 870) (= x 871) (= x 872) + (= x 873) (= x 874) (= x 875) (= x 876) (= x 877) (= x 878) (= x 879) (= x 880) + (= x 881) (= x 882) (= x 883) (= x 884) (= x 885) (= x 886) (= x 887) (= x 888) + (= x 889) (= x 890) (= x 891) (= x 892) (= x 893) (= x 894) (= x 895) (= x 896) + (= x 897) (= x 898) (= x 899) (= x 900) (= x 901) (= x 902) (= x 903) (= x 904) + (= x 905) (= x 906) (= x 907) (= x 908) (= x 909) (= x 910) (= x 911) (= x 912) + (= x 913) (= x 914) (= x 915) (= x 916) (= x 917) (= x 918) (= x 919) (= x 920) + (= x 921) (= x 922) (= x 923) (= x 924) (= x 925) (= x 926) (= x 927) (= x 928) + (= x 929) (= x 930) (= x 931) (= x 932) (= x 933) (= x 934) (= x 935) (= x 936) + (= x 937) (= x 938) (= x 939) (= x 940) (= x 941) (= x 942) (= x 943) (= x 944) + (= x 945) (= x 946) (= x 947) (= x 948) (= x 949) (= x 950) (= x 951) (= x 952) + (= x 953) (= x 954) (= x 955) (= x 956) (= x 957) (= x 958) (= x 959) (= x 960) + (= x 961) (= x 962) (= x 963) (= x 964) (= x 965) (= x 966) (= x 967) (= x 968) + (= x 969) (= x 970) (= x 971) (= x 972) (= x 973) (= x 974) (= x 975) (= x 976) + (= x 977) (= x 978) (= x 979) (= x 980) (= x 981) (= x 982) (= x 983) (= x 984) + (= x 985) (= x 986) (= x 987) (= x 988) (= x 989) (= x 990) (= x 991) (= x 992) + (= x 993) (= x 994) (= x 995) (= x 996) (= x 997) (= x 998) (= x 999) (= x 1000) + (= x 1001) (= x 1002) (= x 1003) (= x 1004) (= x 1005) (= x 1006) (= x 1007) (= x 1008) + (= x 1009) (= x 1010) (= x 1011) (= x 1012) (= x 1013) (= x 1014) (= x 1015) (= x 1016) + (= x 1017) (= x 1018) (= x 1019) (= x 1020) (= x 1021) (= x 1022) (= x 1023) (= x 1024) + (= x 1025) (= x 1026) (= x 1027) (= x 1028) (= x 1029) (= x 1030) (= x 1031) (= x 1032) + (= x 1033) (= x 1034) (= x 1035) (= x 1036) (= x 1037) (= x 1038) (= x 1039) (= x 1040) + (= x 1041) (= x 1042) (= x 1043) (= x 1044) (= x 1045) (= x 1046) (= x 1047) (= x 1048) + (= x 1049) (= x 1050) (= x 1051) (= x 1052) (= x 1053) (= x 1054) (= x 1055) (= x 1056) + (= x 1057) (= x 1058) (= x 1059) (= x 1060) (= x 1061) (= x 1062) (= x 1063) (= x 1064) + (= x 1065) (= x 1066) (= x 1067) (= x 1068) (= x 1069) (= x 1070) (= x 1071) (= x 1072) + (= x 1073) (= x 1074) (= x 1075) (= x 1076) (= x 1077) (= x 1078) (= x 1079) (= x 1080) + (= x 1081) (= x 1082) (= x 1083) (= x 1084) (= x 1085) (= x 1086) (= x 1087) (= x 1088) + (= x 1089) (= x 1090) (= x 1091) (= x 1092) (= x 1093) (= x 1094) (= x 1095) (= x 1096) + (= x 1097) (= x 1098) (= x 1099) (= x 1100) (= x 1101) (= x 1102) (= x 1103) (= x 1104) + (= x 1105) (= x 1106) (= x 1107) (= x 1108) (= x 1109) (= x 1110) (= x 1111) (= x 1112) + (= x 1113) (= x 1114) (= x 1115) (= x 1116) (= x 1117) (= x 1118) (= x 1119) (= x 1120) + (= x 1121) (= x 1122) (= x 1123) (= x 1124) (= x 1125) (= x 1126) (= x 1127) (= x 1128) + (= x 1129) (= x 1130) (= x 1131) (= x 1132) (= x 1133) (= x 1134) (= x 1135) (= x 1136) + (= x 1137) (= x 1138) (= x 1139) (= x 1140) (= x 1141) (= x 1142) (= x 1143) (= x 1144) + (= x 1145) (= x 1146) (= x 1147) (= x 1148) (= x 1149) (= x 1150) (= x 1151) (= x 1152) + (= x 1153) (= x 1154) (= x 1155) (= x 1156) (= x 1157) (= x 1158) (= x 1159) (= x 1160) + (= x 1161) (= x 1162) (= x 1163) (= x 1164) (= x 1165) (= x 1166) (= x 1167) (= x 1168) + (= x 1169) (= x 1170) (= x 1171) (= x 1172) (= x 1173) (= x 1174) (= x 1175) (= x 1176) + (= x 1177) (= x 1178) (= x 1179) (= x 1180) (= x 1181) (= x 1182) (= x 1183) (= x 1184) + (= x 1185) (= x 1186) (= x 1187) (= x 1188) (= x 1189) (= x 1190) (= x 1191) (= x 1192) + (= x 1193) (= x 1194) (= x 1195) (= x 1196) (= x 1197) (= x 1198) (= x 1199) (= x 1200) + (= x 1201) (= x 1202) (= x 1203) (= x 1204) (= x 1205) (= x 1206) (= x 1207) (= x 1208) + (= x 1209) (= x 1210) (= x 1211) (= x 1212) (= x 1213) (= x 1214) (= x 1215) (= x 1216) + (= x 1217) (= x 1218) (= x 1219) (= x 1220) (= x 1221) (= x 1222) (= x 1223) (= x 1224) + (= x 1225) (= x 1226) (= x 1227) (= x 1228) (= x 1229) (= x 1230) (= x 1231) (= x 1232) + (= x 1233) (= x 1234) (= x 1235) (= x 1236) (= x 1237) (= x 1238) (= x 1239) (= x 1240) + (= x 1241) (= x 1242) (= x 1243) (= x 1244) (= x 1245) (= x 1246) (= x 1247) (= x 1248) + (= x 1249) (= x 1250) (= x 1251) (= x 1252) (= x 1253) (= x 1254) (= x 1255) (= x 1256) + (= x 1257) (= x 1258) (= x 1259) (= x 1260) (= x 1261) (= x 1262) (= x 1263) (= x 1264) + (= x 1265) (= x 1266) (= x 1267) (= x 1268) (= x 1269) (= x 1270) (= x 1271) (= x 1272) + (= x 1273) (= x 1274) (= x 1275) (= x 1276) (= x 1277) (= x 1278) (= x 1279) (= x 1280) + (= x 1281) (= x 1282) (= x 1283) (= x 1284) (= x 1285) (= x 1286) (= x 1287) (= x 1288) + (= x 1289) (= x 1290) (= x 1291) (= x 1292) (= x 1293) (= x 1294) (= x 1295) (= x 1296) + (= x 1297) (= x 1298) (= x 1299) (= x 1300) (= x 1301) (= x 1302) (= x 1303) (= x 1304) + (= x 1305) (= x 1306) (= x 1307) (= x 1308) (= x 1309) (= x 1310) (= x 1311) (= x 1312) + (= x 1313) (= x 1314) (= x 1315) (= x 1316) (= x 1317) (= x 1318) (= x 1319) (= x 1320) + (= x 1321) (= x 1322) (= x 1323) (= x 1324) (= x 1325) (= x 1326) (= x 1327) (= x 1328) + (= x 1329) (= x 1330) (= x 1331) (= x 1332) (= x 1333) (= x 1334) (= x 1335) (= x 1336) + (= x 1337) (= x 1338) (= x 1339) (= x 1340) (= x 1341) (= x 1342) (= x 1343) (= x 1344) + (= x 1345) (= x 1346) (= x 1347) (= x 1348) (= x 1349) (= x 1350) (= x 1351) (= x 1352) + (= x 1353) (= x 1354) (= x 1355) (= x 1356) (= x 1357) (= x 1358) (= x 1359) (= x 1360) + (= x 1361) (= x 1362) (= x 1363) (= x 1364) (= x 1365) (= x 1366) (= x 1367) (= x 1368) + (= x 1369) (= x 1370) (= x 1371) (= x 1372) (= x 1373) (= x 1374) (= x 1375) (= x 1376) + (= x 1377) (= x 1378) (= x 1379) (= x 1380) (= x 1381) (= x 1382) (= x 1383) (= x 1384) + (= x 1385) (= x 1386) (= x 1387) (= x 1388) (= x 1389) (= x 1390) (= x 1391) (= x 1392) + (= x 1393) (= x 1394) (= x 1395) (= x 1396) (= x 1397) (= x 1398) (= x 1399) (= x 1400) + (= x 1401) (= x 1402) (= x 1403) (= x 1404) (= x 1405) (= x 1406) (= x 1407) (= x 1408) + (= x 1409) (= x 1410) (= x 1411) (= x 1412) (= x 1413) (= x 1414) (= x 1415) (= x 1416) + (= x 1417) (= x 1418) (= x 1419) (= x 1420) (= x 1421) (= x 1422) (= x 1423) (= x 1424) + (= x 1425) (= x 1426) (= x 1427) (= x 1428) (= x 1429) (= x 1430) (= x 1431) (= x 1432) + (= x 1433) (= x 1434) (= x 1435) (= x 1436) (= x 1437) (= x 1438) (= x 1439) (= x 1440) + (= x 1441) (= x 1442) (= x 1443) (= x 1444) (= x 1445) (= x 1446) (= x 1447) (= x 1448) + (= x 1449) (= x 1450) (= x 1451) (= x 1452) (= x 1453) (= x 1454) (= x 1455) (= x 1456) + (= x 1457) (= x 1458) (= x 1459) (= x 1460) (= x 1461) (= x 1462) (= x 1463) (= x 1464) + (= x 1465) (= x 1466) (= x 1467) (= x 1468) (= x 1469) (= x 1470) (= x 1471) (= x 1472) + (= x 1473) (= x 1474) (= x 1475) (= x 1476) (= x 1477) (= x 1478) (= x 1479) (= x 1480) + (= x 1481) (= x 1482) (= x 1483) (= x 1484) (= x 1485) (= x 1486) (= x 1487) (= x 1488) + (= x 1489) (= x 1490) (= x 1491) (= x 1492) (= x 1493) (= x 1494) (= x 1495) (= x 1496) + (= x 1497) (= x 1498) (= x 1499) (= x 1500) (= x 1501) (= x 1502) (= x 1503) (= x 1504) + (= x 1505) (= x 1506) (= x 1507) (= x 1508) (= x 1509) (= x 1510) (= x 1511) (= x 1512) + (= x 1513) (= x 1514) (= x 1515) (= x 1516) (= x 1517) (= x 1518) (= x 1519) (= x 1520) + (= x 1521) (= x 1522) (= x 1523) (= x 1524) (= x 1525) (= x 1526) (= x 1527) (= x 1528) + (= x 1529) (= x 1530) (= x 1531) (= x 1532) (= x 1533) (= x 1534) (= x 1535) (= x 1536) + (= x 1537) (= x 1538) (= x 1539) (= x 1540) (= x 1541) (= x 1542) (= x 1543) (= x 1544) + (= x 1545) (= x 1546) (= x 1547) (= x 1548) (= x 1549) (= x 1550) (= x 1551) (= x 1552) + (= x 1553) (= x 1554) (= x 1555) (= x 1556) (= x 1557) (= x 1558) (= x 1559) (= x 1560) + (= x 1561) (= x 1562) (= x 1563) (= x 1564) (= x 1565) (= x 1566) (= x 1567) (= x 1568) + (= x 1569) (= x 1570) (= x 1571) (= x 1572) (= x 1573) (= x 1574) (= x 1575) (= x 1576) + (= x 1577) (= x 1578) (= x 1579) (= x 1580) (= x 1581) (= x 1582) (= x 1583) (= x 1584) + (= x 1585) (= x 1586) (= x 1587) (= x 1588) (= x 1589) (= x 1590) (= x 1591) (= x 1592) + (= x 1593) (= x 1594) (= x 1595) (= x 1596) (= x 1597) (= x 1598) (= x 1599) (= x 1600) + (= x 1601) (= x 1602) (= x 1603) (= x 1604) (= x 1605) (= x 1606) (= x 1607) (= x 1608) + (= x 1609) (= x 1610) (= x 1611) (= x 1612) (= x 1613) (= x 1614) (= x 1615) (= x 1616) + (= x 1617) (= x 1618) (= x 1619) (= x 1620) (= x 1621) (= x 1622) (= x 1623) (= x 1624) + (= x 1625) (= x 1626) (= x 1627) (= x 1628) (= x 1629) (= x 1630) (= x 1631) (= x 1632) + (= x 1633) (= x 1634) (= x 1635) (= x 1636) (= x 1637) (= x 1638) (= x 1639) (= x 1640) + (= x 1641) (= x 1642) (= x 1643) (= x 1644) (= x 1645) (= x 1646) (= x 1647) (= x 1648) + (= x 1649) (= x 1650) (= x 1651) (= x 1652) (= x 1653) (= x 1654) (= x 1655) (= x 1656) + (= x 1657) (= x 1658) (= x 1659) (= x 1660) (= x 1661) (= x 1662) (= x 1663) (= x 1664) + (= x 1665) (= x 1666) (= x 1667) (= x 1668) (= x 1669) (= x 1670) (= x 1671) (= x 1672) + (= x 1673) (= x 1674) (= x 1675) (= x 1676) (= x 1677) (= x 1678) (= x 1679) (= x 1680) + (= x 1681) (= x 1682) (= x 1683) (= x 1684) (= x 1685) (= x 1686) (= x 1687) (= x 1688) + (= x 1689) (= x 1690) (= x 1691) (= x 1692) (= x 1693) (= x 1694) (= x 1695) (= x 1696) + (= x 1697) (= x 1698) (= x 1699) (= x 1700) (= x 1701) (= x 1702) (= x 1703) (= x 1704) + (= x 1705) (= x 1706) (= x 1707) (= x 1708) (= x 1709) (= x 1710) (= x 1711) (= x 1712) + (= x 1713) (= x 1714) (= x 1715) (= x 1716) (= x 1717) (= x 1718) (= x 1719) (= x 1720) + (= x 1721) (= x 1722) (= x 1723) (= x 1724) (= x 1725) (= x 1726) (= x 1727) (= x 1728) + (= x 1729) (= x 1730) (= x 1731) (= x 1732) (= x 1733) (= x 1734) (= x 1735) (= x 1736) + (= x 1737) (= x 1738) (= x 1739) (= x 1740) (= x 1741) (= x 1742) (= x 1743) (= x 1744) + (= x 1745) (= x 1746) (= x 1747) (= x 1748) (= x 1749) (= x 1750) (= x 1751) (= x 1752) + (= x 1753) (= x 1754) (= x 1755) (= x 1756) (= x 1757) (= x 1758) (= x 1759) (= x 1760) + (= x 1761) (= x 1762) (= x 1763) (= x 1764) (= x 1765) (= x 1766) (= x 1767) (= x 1768) + (= x 1769) (= x 1770) (= x 1771) (= x 1772) (= x 1773) (= x 1774) (= x 1775) (= x 1776) + (= x 1777) (= x 1778) (= x 1779) (= x 1780) (= x 1781) (= x 1782) (= x 1783) (= x 1784) + (= x 1785) (= x 1786) (= x 1787) (= x 1788) (= x 1789) (= x 1790) (= x 1791) (= x 1792) + (= x 1793) (= x 1794) (= x 1795) (= x 1796) (= x 1797) (= x 1798) (= x 1799) (= x 1800) + (= x 1801) (= x 1802) (= x 1803) (= x 1804) (= x 1805) (= x 1806) (= x 1807) (= x 1808) + (= x 1809) (= x 1810) (= x 1811) (= x 1812) (= x 1813) (= x 1814) (= x 1815) (= x 1816) + (= x 1817) (= x 1818) (= x 1819) (= x 1820) (= x 1821) (= x 1822) (= x 1823) (= x 1824) + (= x 1825) (= x 1826) (= x 1827) (= x 1828) (= x 1829) (= x 1830) (= x 1831) (= x 1832) + (= x 1833) (= x 1834) (= x 1835) (= x 1836) (= x 1837) (= x 1838) (= x 1839) (= x 1840) + (= x 1841) (= x 1842) (= x 1843) (= x 1844) (= x 1845) (= x 1846) (= x 1847) (= x 1848) + (= x 1849) (= x 1850) (= x 1851) (= x 1852) (= x 1853) (= x 1854) (= x 1855) (= x 1856) + (= x 1857) (= x 1858) (= x 1859) (= x 1860) (= x 1861) (= x 1862) (= x 1863) (= x 1864) + (= x 1865) (= x 1866) (= x 1867) (= x 1868) (= x 1869) (= x 1870) (= x 1871) (= x 1872) + (= x 1873) (= x 1874) (= x 1875) (= x 1876) (= x 1877) (= x 1878) (= x 1879) (= x 1880) + (= x 1881) (= x 1882) (= x 1883) (= x 1884) (= x 1885) (= x 1886) (= x 1887) (= x 1888) + (= x 1889) (= x 1890) (= x 1891) (= x 1892) (= x 1893) (= x 1894) (= x 1895) (= x 1896) + (= x 1897) (= x 1898) (= x 1899) (= x 1900) (= x 1901) (= x 1902) (= x 1903) (= x 1904) + (= x 1905) (= x 1906) (= x 1907) (= x 1908) (= x 1909) (= x 1910) (= x 1911) (= x 1912) + (= x 1913) (= x 1914) (= x 1915) (= x 1916) (= x 1917) (= x 1918) (= x 1919) (= x 1920) + (= x 1921) (= x 1922) (= x 1923) (= x 1924) (= x 1925) (= x 1926) (= x 1927) (= x 1928) + (= x 1929) (= x 1930) (= x 1931) (= x 1932) (= x 1933) (= x 1934) (= x 1935) (= x 1936) + (= x 1937) (= x 1938) (= x 1939) (= x 1940) (= x 1941) (= x 1942) (= x 1943) (= x 1944) + (= x 1945) (= x 1946) (= x 1947) (= x 1948) (= x 1949) (= x 1950) (= x 1951) (= x 1952) + (= x 1953) (= x 1954) (= x 1955) (= x 1956) (= x 1957) (= x 1958) (= x 1959) (= x 1960) + (= x 1961) (= x 1962) (= x 1963) (= x 1964) (= x 1965) (= x 1966) (= x 1967) (= x 1968) + (= x 1969) (= x 1970) (= x 1971) (= x 1972) (= x 1973) (= x 1974) (= x 1975) (= x 1976) + (= x 1977) (= x 1978) (= x 1979) (= x 1980) (= x 1981) (= x 1982) (= x 1983) (= x 1984) + (= x 1985) (= x 1986) (= x 1987) (= x 1988) (= x 1989) (= x 1990) (= x 1991) (= x 1992) + (= x 1993) (= x 1994) (= x 1995) (= x 1996) (= x 1997) (= x 1998) (= x 1999) (= x 2000) + (= x 2001) (= x 2002) (= x 2003) (= x 2004) (= x 2005) (= x 2006) (= x 2007) (= x 2008) + (= x 2009) (= x 2010) (= x 2011) (= x 2012) (= x 2013) (= x 2014) (= x 2015) (= x 2016) + (= x 2017) (= x 2018) (= x 2019) (= x 2020) (= x 2021) (= x 2022) (= x 2023) (= x 2024) + (= x 2025) (= x 2026) (= x 2027) (= x 2028) (= x 2029) (= x 2030) (= x 2031) (= x 2032) + (= x 2033) (= x 2034) (= x 2035) (= x 2036) (= x 2037) (= x 2038) (= x 2039) (= x 2040) + (= x 2041) (= x 2042) (= x 2043) (= x 2044) (= x 2045) (= x 2046) (= x 2047) (= x 2048) + (= x 2049) (= x 2050) (= x 2051) (= x 2052) (= x 2053) (= x 2054) (= x 2055) (= x 2056) + (= x 2057) (= x 2058) (= x 2059) (= x 2060) (= x 2061) (= x 2062) (= x 2063) (= x 2064) + (= x 2065) (= x 2066) (= x 2067) (= x 2068) (= x 2069) (= x 2070) (= x 2071) (= x 2072) + (= x 2073) (= x 2074) (= x 2075) (= x 2076) (= x 2077) (= x 2078) (= x 2079) (= x 2080) + (= x 2081) (= x 2082) (= x 2083) (= x 2084) (= x 2085) (= x 2086) (= x 2087) (= x 2088) + (= x 2089) (= x 2090) (= x 2091) (= x 2092) (= x 2093) (= x 2094) (= x 2095) (= x 2096) + (= x 2097) (= x 2098) (= x 2099) (= x 2100) (= x 2101) (= x 2102) (= x 2103) (= x 2104) + (= x 2105) (= x 2106) (= x 2107) (= x 2108) (= x 2109) (= x 2110) (= x 2111) (= x 2112) + (= x 2113) (= x 2114) (= x 2115) (= x 2116) (= x 2117) (= x 2118) (= x 2119) (= x 2120) + (= x 2121) (= x 2122) (= x 2123) (= x 2124) (= x 2125) (= x 2126) (= x 2127) (= x 2128) + (= x 2129) (= x 2130) (= x 2131) (= x 2132) (= x 2133) (= x 2134) (= x 2135) (= x 2136) + (= x 2137) (= x 2138) (= x 2139) (= x 2140) (= x 2141) (= x 2142) (= x 2143) (= x 2144) + (= x 2145) (= x 2146) (= x 2147) (= x 2148) (= x 2149) (= x 2150) (= x 2151) (= x 2152) + (= x 2153) (= x 2154) (= x 2155) (= x 2156) (= x 2157) (= x 2158) (= x 2159) (= x 2160) + (= x 2161) (= x 2162) (= x 2163) (= x 2164) (= x 2165) (= x 2166) (= x 2167) (= x 2168) + (= x 2169) (= x 2170) (= x 2171) (= x 2172) (= x 2173) (= x 2174) (= x 2175) (= x 2176) + (= x 2177) (= x 2178) (= x 2179) (= x 2180) (= x 2181) (= x 2182) (= x 2183) (= x 2184) + (= x 2185) (= x 2186) (= x 2187) (= x 2188) (= x 2189) (= x 2190) (= x 2191) (= x 2192) + (= x 2193) (= x 2194) (= x 2195) (= x 2196) (= x 2197) (= x 2198) (= x 2199) (= x 2200) + (= x 2201) (= x 2202) (= x 2203) (= x 2204) (= x 2205) (= x 2206) (= x 2207) (= x 2208) + (= x 2209) (= x 2210) (= x 2211) (= x 2212) (= x 2213) (= x 2214) (= x 2215) (= x 2216) + (= x 2217) (= x 2218) (= x 2219) (= x 2220) (= x 2221) (= x 2222) (= x 2223) (= x 2224) + (= x 2225) (= x 2226) (= x 2227) (= x 2228) (= x 2229) (= x 2230) (= x 2231) (= x 2232) + (= x 2233) (= x 2234) (= x 2235) (= x 2236) (= x 2237) (= x 2238) (= x 2239) (= x 2240) + (= x 2241) (= x 2242) (= x 2243) (= x 2244) (= x 2245) (= x 2246) (= x 2247) (= x 2248) + (= x 2249) (= x 2250) (= x 2251) (= x 2252) (= x 2253) (= x 2254) (= x 2255) (= x 2256) + (= x 2257) (= x 2258) (= x 2259) (= x 2260) (= x 2261) (= x 2262) (= x 2263) (= x 2264) + (= x 2265) (= x 2266) (= x 2267) (= x 2268) (= x 2269) (= x 2270) (= x 2271) (= x 2272) + (= x 2273) (= x 2274) (= x 2275) (= x 2276) (= x 2277) (= x 2278) (= x 2279) (= x 2280) + (= x 2281) (= x 2282) (= x 2283) (= x 2284) (= x 2285) (= x 2286) (= x 2287) (= x 2288) + (= x 2289) (= x 2290) (= x 2291) (= x 2292) (= x 2293) (= x 2294) (= x 2295) (= x 2296) + (= x 2297) (= x 2298) (= x 2299) (= x 2300) (= x 2301) (= x 2302) (= x 2303) (= x 2304) + (= x 2305) (= x 2306) (= x 2307) (= x 2308) (= x 2309) (= x 2310) (= x 2311) (= x 2312) + (= x 2313) (= x 2314) (= x 2315) (= x 2316) (= x 2317) (= x 2318) (= x 2319) (= x 2320) + (= x 2321) (= x 2322) (= x 2323) (= x 2324) (= x 2325) (= x 2326) (= x 2327) (= x 2328) + (= x 2329) (= x 2330) (= x 2331) (= x 2332) (= x 2333) (= x 2334) (= x 2335) (= x 2336) + (= x 2337) (= x 2338) (= x 2339) (= x 2340) (= x 2341) (= x 2342) (= x 2343) (= x 2344) + (= x 2345) (= x 2346) (= x 2347) (= x 2348) (= x 2349) (= x 2350) (= x 2351) (= x 2352) + (= x 2353) (= x 2354) (= x 2355) (= x 2356) (= x 2357) (= x 2358) (= x 2359) (= x 2360) + (= x 2361) (= x 2362) (= x 2363) (= x 2364) (= x 2365) (= x 2366) (= x 2367) (= x 2368) + (= x 2369) (= x 2370) (= x 2371) (= x 2372) (= x 2373) (= x 2374) (= x 2375) (= x 2376) + (= x 2377) (= x 2378) (= x 2379) (= x 2380) (= x 2381) (= x 2382) (= x 2383) (= x 2384) + (= x 2385) (= x 2386) (= x 2387) (= x 2388) (= x 2389) (= x 2390) (= x 2391) (= x 2392) + (= x 2393) (= x 2394) (= x 2395) (= x 2396) (= x 2397) (= x 2398) (= x 2399) (= x 2400) + (= x 2401) (= x 2402) (= x 2403) (= x 2404) (= x 2405) (= x 2406) (= x 2407) (= x 2408) + (= x 2409) (= x 2410) (= x 2411) (= x 2412) (= x 2413) (= x 2414) (= x 2415) (= x 2416) + (= x 2417) (= x 2418) (= x 2419) (= x 2420) (= x 2421) (= x 2422) (= x 2423) (= x 2424) + (= x 2425) (= x 2426) (= x 2427) (= x 2428) (= x 2429) (= x 2430) (= x 2431) (= x 2432) + (= x 2433) (= x 2434) (= x 2435) (= x 2436) (= x 2437) (= x 2438) (= x 2439) (= x 2440) + (= x 2441) (= x 2442) (= x 2443) (= x 2444) (= x 2445) (= x 2446) (= x 2447) (= x 2448) + (= x 2449) (= x 2450) (= x 2451) (= x 2452) (= x 2453) (= x 2454) (= x 2455) (= x 2456) + (= x 2457) (= x 2458) (= x 2459) (= x 2460) (= x 2461) (= x 2462) (= x 2463) (= x 2464) + (= x 2465) (= x 2466) (= x 2467) (= x 2468) (= x 2469) (= x 2470) (= x 2471) (= x 2472) + (= x 2473) (= x 2474) (= x 2475) (= x 2476) (= x 2477) (= x 2478) (= x 2479) (= x 2480) + (= x 2481) (= x 2482) (= x 2483) (= x 2484) (= x 2485) (= x 2486) (= x 2487) (= x 2488) + (= x 2489) (= x 2490) (= x 2491) (= x 2492) (= x 2493) (= x 2494) (= x 2495) (= x 2496) + (= x 2497) (= x 2498) (= x 2499) (= x 2500) (= x 2501) (= x 2502) (= x 2503) (= x 2504) + (= x 2505) (= x 2506) (= x 2507) (= x 2508) (= x 2509) (= x 2510) (= x 2511) (= x 2512) + (= x 2513) (= x 2514) (= x 2515) (= x 2516) (= x 2517) (= x 2518) (= x 2519) (= x 2520) + (= x 2521) (= x 2522) (= x 2523) (= x 2524) (= x 2525) (= x 2526) (= x 2527) (= x 2528) + (= x 2529) (= x 2530) (= x 2531) (= x 2532) (= x 2533) (= x 2534) (= x 2535) (= x 2536) + (= x 2537) (= x 2538) (= x 2539) (= x 2540) (= x 2541) (= x 2542) (= x 2543) (= x 2544) + (= x 2545) (= x 2546) (= x 2547) (= x 2548) (= x 2549) (= x 2550) (= x 2551) (= x 2552) + (= x 2553) (= x 2554) (= x 2555) (= x 2556) (= x 2557) (= x 2558) (= x 2559) (= x 2560) + (= x 2561) (= x 2562) (= x 2563) (= x 2564) (= x 2565) (= x 2566) (= x 2567) (= x 2568) + (= x 2569) (= x 2570) (= x 2571) (= x 2572) (= x 2573) (= x 2574) (= x 2575) (= x 2576) + (= x 2577) (= x 2578) (= x 2579) (= x 2580) (= x 2581) (= x 2582) (= x 2583) (= x 2584) + (= x 2585) (= x 2586) (= x 2587) (= x 2588) (= x 2589) (= x 2590) (= x 2591) (= x 2592) + (= x 2593) (= x 2594) (= x 2595) (= x 2596) (= x 2597) (= x 2598) (= x 2599) (= x 2600) + (= x 2601) (= x 2602) (= x 2603) (= x 2604) (= x 2605) (= x 2606) (= x 2607) (= x 2608) + (= x 2609) (= x 2610) (= x 2611) (= x 2612) (= x 2613) (= x 2614) (= x 2615) (= x 2616) + (= x 2617) (= x 2618) (= x 2619) (= x 2620) (= x 2621) (= x 2622) (= x 2623) (= x 2624) + (= x 2625) (= x 2626) (= x 2627) (= x 2628) (= x 2629) (= x 2630) (= x 2631) (= x 2632) + (= x 2633) (= x 2634) (= x 2635) (= x 2636) (= x 2637) (= x 2638) (= x 2639) (= x 2640) + (= x 2641) (= x 2642) (= x 2643) (= x 2644) (= x 2645) (= x 2646) (= x 2647) (= x 2648) + (= x 2649) (= x 2650) (= x 2651) (= x 2652) (= x 2653) (= x 2654) (= x 2655) (= x 2656) + (= x 2657) (= x 2658) (= x 2659) (= x 2660) (= x 2661) (= x 2662) (= x 2663) (= x 2664) + (= x 2665) (= x 2666) (= x 2667) (= x 2668) (= x 2669) (= x 2670) (= x 2671) (= x 2672) + (= x 2673) (= x 2674) (= x 2675) (= x 2676) (= x 2677) (= x 2678) (= x 2679) (= x 2680) + (= x 2681) (= x 2682) (= x 2683) (= x 2684) (= x 2685) (= x 2686) (= x 2687) (= x 2688) + (= x 2689) (= x 2690) (= x 2691) (= x 2692) (= x 2693) (= x 2694) (= x 2695) (= x 2696) + (= x 2697) (= x 2698) (= x 2699) (= x 2700) (= x 2701) (= x 2702) (= x 2703) (= x 2704) + (= x 2705) (= x 2706) (= x 2707) (= x 2708) (= x 2709) (= x 2710) (= x 2711) (= x 2712) + (= x 2713) (= x 2714) (= x 2715) (= x 2716) (= x 2717) (= x 2718) (= x 2719) (= x 2720) + (= x 2721) (= x 2722) (= x 2723) (= x 2724) (= x 2725) (= x 2726) (= x 2727) (= x 2728) + (= x 2729) (= x 2730) (= x 2731) (= x 2732) (= x 2733) (= x 2734) (= x 2735) (= x 2736) + (= x 2737) (= x 2738) (= x 2739) (= x 2740) (= x 2741) (= x 2742) (= x 2743) (= x 2744) + (= x 2745) (= x 2746) (= x 2747) (= x 2748) (= x 2749) (= x 2750) (= x 2751) (= x 2752) + (= x 2753) (= x 2754) (= x 2755) (= x 2756) (= x 2757) (= x 2758) (= x 2759) (= x 2760) + (= x 2761) (= x 2762) (= x 2763) (= x 2764) (= x 2765) (= x 2766) (= x 2767) (= x 2768) + (= x 2769) (= x 2770) (= x 2771) (= x 2772) (= x 2773) (= x 2774) (= x 2775) (= x 2776) + (= x 2777) (= x 2778) (= x 2779) (= x 2780) (= x 2781) (= x 2782) (= x 2783) (= x 2784) + (= x 2785) (= x 2786) (= x 2787) (= x 2788) (= x 2789) (= x 2790) (= x 2791) (= x 2792) + (= x 2793) (= x 2794) (= x 2795) (= x 2796) (= x 2797) (= x 2798) (= x 2799) (= x 2800) + (= x 2801) (= x 2802) (= x 2803) (= x 2804) (= x 2805) (= x 2806) (= x 2807) (= x 2808) + (= x 2809) (= x 2810) (= x 2811) (= x 2812) (= x 2813) (= x 2814) (= x 2815) (= x 2816) + (= x 2817) (= x 2818) (= x 2819) (= x 2820) (= x 2821) (= x 2822) (= x 2823) (= x 2824) + (= x 2825) (= x 2826) (= x 2827) (= x 2828) (= x 2829) (= x 2830) (= x 2831) (= x 2832) + (= x 2833) (= x 2834) (= x 2835) (= x 2836) (= x 2837) (= x 2838) (= x 2839) (= x 2840) + (= x 2841) (= x 2842) (= x 2843) (= x 2844) (= x 2845) (= x 2846) (= x 2847) (= x 2848) + (= x 2849) (= x 2850) (= x 2851) (= x 2852) (= x 2853) (= x 2854) (= x 2855) (= x 2856) + (= x 2857) (= x 2858) (= x 2859) (= x 2860) (= x 2861) (= x 2862) (= x 2863) (= x 2864) + (= x 2865) (= x 2866) (= x 2867) (= x 2868) (= x 2869) (= x 2870) (= x 2871) (= x 2872) + (= x 2873) (= x 2874) (= x 2875) (= x 2876) (= x 2877) (= x 2878) (= x 2879) (= x 2880) + (= x 2881) (= x 2882) (= x 2883) (= x 2884) (= x 2885) (= x 2886) (= x 2887) (= x 2888) + (= x 2889) (= x 2890) (= x 2891) (= x 2892) (= x 2893) (= x 2894) (= x 2895) (= x 2896) + (= x 2897) (= x 2898) (= x 2899) (= x 2900) (= x 2901) (= x 2902) (= x 2903) (= x 2904) + (= x 2905) (= x 2906) (= x 2907) (= x 2908) (= x 2909) (= x 2910) (= x 2911) (= x 2912) + (= x 2913) (= x 2914) (= x 2915) (= x 2916) (= x 2917) (= x 2918) (= x 2919) (= x 2920) + (= x 2921) (= x 2922) (= x 2923) (= x 2924) (= x 2925) (= x 2926) (= x 2927) (= x 2928) + (= x 2929) (= x 2930) (= x 2931) (= x 2932) (= x 2933) (= x 2934) (= x 2935) (= x 2936) + (= x 2937) (= x 2938) (= x 2939) (= x 2940) (= x 2941) (= x 2942) (= x 2943) (= x 2944) + (= x 2945) (= x 2946) (= x 2947) (= x 2948) (= x 2949) (= x 2950) (= x 2951) (= x 2952) + (= x 2953) (= x 2954) (= x 2955) (= x 2956) (= x 2957) (= x 2958) (= x 2959) (= x 2960) + (= x 2961) (= x 2962) (= x 2963) (= x 2964) (= x 2965) (= x 2966) (= x 2967) (= x 2968) + (= x 2969) (= x 2970) (= x 2971) (= x 2972) (= x 2973) (= x 2974) (= x 2975) (= x 2976) + (= x 2977) (= x 2978) (= x 2979) (= x 2980) (= x 2981) (= x 2982) (= x 2983) (= x 2984) + (= x 2985) (= x 2986) (= x 2987) (= x 2988) (= x 2989) (= x 2990) (= x 2991) (= x 2992) + (= x 2993) (= x 2994) (= x 2995) (= x 2996) (= x 2997) (= x 2998) (= x 2999) (= x 3000) + (= x 3001) (= x 3002) (= x 3003) (= x 3004) (= x 3005) (= x 3006) (= x 3007) (= x 3008) + (= x 3009) (= x 3010) (= x 3011) (= x 3012) (= x 3013) (= x 3014) (= x 3015) (= x 3016) + (= x 3017) (= x 3018) (= x 3019) (= x 3020) (= x 3021) (= x 3022) (= x 3023) (= x 3024) + (= x 3025) (= x 3026) (= x 3027) (= x 3028) (= x 3029) (= x 3030) (= x 3031) (= x 3032) + (= x 3033) (= x 3034) (= x 3035) (= x 3036) (= x 3037) (= x 3038) (= x 3039) (= x 3040) + (= x 3041) (= x 3042) (= x 3043) (= x 3044) (= x 3045) (= x 3046) (= x 3047) (= x 3048) + (= x 3049) (= x 3050) (= x 3051) (= x 3052) (= x 3053) (= x 3054) (= x 3055) (= x 3056) + (= x 3057) (= x 3058) (= x 3059) (= x 3060) (= x 3061) (= x 3062) (= x 3063) (= x 3064) + (= x 3065) (= x 3066) (= x 3067) (= x 3068) (= x 3069) (= x 3070) (= x 3071) (= x 3072) + (= x 3073) (= x 3074) (= x 3075) (= x 3076) (= x 3077) (= x 3078) (= x 3079) (= x 3080) + (= x 3081) (= x 3082) (= x 3083) (= x 3084) (= x 3085) (= x 3086) (= x 3087) (= x 3088) + (= x 3089) (= x 3090) (= x 3091) (= x 3092) (= x 3093) (= x 3094) (= x 3095) (= x 3096) + (= x 3097) (= x 3098) (= x 3099) (= x 3100) (= x 3101) (= x 3102) (= x 3103) (= x 3104) + (= x 3105) (= x 3106) (= x 3107) (= x 3108) (= x 3109) (= x 3110) (= x 3111) (= x 3112) + (= x 3113) (= x 3114) (= x 3115) (= x 3116) (= x 3117) (= x 3118) (= x 3119) (= x 3120) + (= x 3121) (= x 3122) (= x 3123) (= x 3124) (= x 3125) (= x 3126) (= x 3127) (= x 3128) + (= x 3129) (= x 3130) (= x 3131) (= x 3132) (= x 3133) (= x 3134) (= x 3135) (= x 3136) + (= x 3137) (= x 3138) (= x 3139) (= x 3140) (= x 3141) (= x 3142) (= x 3143) (= x 3144) + (= x 3145) (= x 3146) (= x 3147) (= x 3148) (= x 3149) (= x 3150) (= x 3151) (= x 3152) + (= x 3153) (= x 3154) (= x 3155) (= x 3156) (= x 3157) (= x 3158) (= x 3159) (= x 3160) + (= x 3161) (= x 3162) (= x 3163) (= x 3164) (= x 3165) (= x 3166) (= x 3167) (= x 3168) + (= x 3169) (= x 3170) (= x 3171) (= x 3172) (= x 3173) (= x 3174) (= x 3175) (= x 3176) + (= x 3177) (= x 3178) (= x 3179) (= x 3180) (= x 3181) (= x 3182) (= x 3183) (= x 3184) + (= x 3185) (= x 3186) (= x 3187) (= x 3188) (= x 3189) (= x 3190) (= x 3191) (= x 3192) + (= x 3193) (= x 3194) (= x 3195) (= x 3196) (= x 3197) (= x 3198) (= x 3199) (= x 3200) + (= x 3201) (= x 3202) (= x 3203) (= x 3204) (= x 3205) (= x 3206) (= x 3207) (= x 3208) + (= x 3209) (= x 3210) (= x 3211) (= x 3212) (= x 3213) (= x 3214) (= x 3215) (= x 3216) + (= x 3217) (= x 3218) (= x 3219) (= x 3220) (= x 3221) (= x 3222) (= x 3223) (= x 3224) + (= x 3225) (= x 3226) (= x 3227) (= x 3228) (= x 3229) (= x 3230) (= x 3231) (= x 3232) + (= x 3233) (= x 3234) (= x 3235) (= x 3236) (= x 3237) (= x 3238) (= x 3239) (= x 3240) + (= x 3241) (= x 3242) (= x 3243) (= x 3244) (= x 3245) (= x 3246) (= x 3247) (= x 3248) + (= x 3249) (= x 3250) (= x 3251) (= x 3252) (= x 3253) (= x 3254) (= x 3255) (= x 3256) + (= x 3257) (= x 3258) (= x 3259) (= x 3260) (= x 3261) (= x 3262) (= x 3263) (= x 3264) + (= x 3265) (= x 3266) (= x 3267) (= x 3268) (= x 3269) (= x 3270) (= x 3271) (= x 3272) + (= x 3273) (= x 3274) (= x 3275) (= x 3276) (= x 3277) (= x 3278) (= x 3279) (= x 3280) + (= x 3281) (= x 3282) (= x 3283) (= x 3284) (= x 3285) (= x 3286) (= x 3287) (= x 3288) + (= x 3289) (= x 3290) (= x 3291) (= x 3292) (= x 3293) (= x 3294) (= x 3295) (= x 3296) + (= x 3297) (= x 3298) (= x 3299) (= x 3300) (= x 3301) (= x 3302) (= x 3303) (= x 3304) + (= x 3305) (= x 3306) (= x 3307) (= x 3308) (= x 3309) (= x 3310) (= x 3311) (= x 3312) + (= x 3313) (= x 3314) (= x 3315) (= x 3316) (= x 3317) (= x 3318) (= x 3319) (= x 3320) + (= x 3321) (= x 3322) (= x 3323) (= x 3324) (= x 3325) (= x 3326) (= x 3327) (= x 3328) + (= x 3329) (= x 3330) (= x 3331) (= x 3332) (= x 3333) (= x 3334) (= x 3335) (= x 3336) + (= x 3337) (= x 3338) (= x 3339) (= x 3340) (= x 3341) (= x 3342) (= x 3343) (= x 3344) + (= x 3345) (= x 3346) (= x 3347) (= x 3348) (= x 3349) (= x 3350) (= x 3351) (= x 3352) + (= x 3353) (= x 3354) (= x 3355) (= x 3356) (= x 3357) (= x 3358) (= x 3359) (= x 3360) + (= x 3361) (= x 3362) (= x 3363) (= x 3364) (= x 3365) (= x 3366) (= x 3367) (= x 3368) + (= x 3369) (= x 3370) (= x 3371) (= x 3372) (= x 3373) (= x 3374) (= x 3375) (= x 3376) + (= x 3377) (= x 3378) (= x 3379) (= x 3380) (= x 3381) (= x 3382) (= x 3383) (= x 3384) + (= x 3385) (= x 3386) (= x 3387) (= x 3388) (= x 3389) (= x 3390) (= x 3391) (= x 3392) + (= x 3393) (= x 3394) (= x 3395) (= x 3396) (= x 3397) (= x 3398) (= x 3399) (= x 3400) + (= x 3401) (= x 3402) (= x 3403) (= x 3404) (= x 3405) (= x 3406) (= x 3407) (= x 3408) + (= x 3409) (= x 3410) (= x 3411) (= x 3412) (= x 3413) (= x 3414) (= x 3415) (= x 3416) + (= x 3417) (= x 3418) (= x 3419) (= x 3420) (= x 3421) (= x 3422) (= x 3423) (= x 3424) + (= x 3425) (= x 3426) (= x 3427) (= x 3428) (= x 3429) (= x 3430) (= x 3431) (= x 3432) + (= x 3433) (= x 3434) (= x 3435) (= x 3436) (= x 3437) (= x 3438) (= x 3439) (= x 3440) + (= x 3441) (= x 3442) (= x 3443) (= x 3444) (= x 3445) (= x 3446) (= x 3447) (= x 3448) + (= x 3449) (= x 3450) (= x 3451) (= x 3452) (= x 3453) (= x 3454) (= x 3455) (= x 3456) + (= x 3457) (= x 3458) (= x 3459) (= x 3460) (= x 3461) (= x 3462) (= x 3463) (= x 3464) + (= x 3465) (= x 3466) (= x 3467) (= x 3468) (= x 3469) (= x 3470) (= x 3471) (= x 3472) + (= x 3473) (= x 3474) (= x 3475) (= x 3476) (= x 3477) (= x 3478) (= x 3479) (= x 3480) + (= x 3481) (= x 3482) (= x 3483) (= x 3484) (= x 3485) (= x 3486) (= x 3487) (= x 3488) + (= x 3489) (= x 3490) (= x 3491) (= x 3492) (= x 3493) (= x 3494) (= x 3495) (= x 3496) + (= x 3497) (= x 3498) (= x 3499) (= x 3500) (= x 3501) (= x 3502) (= x 3503) (= x 3504) + (= x 3505) (= x 3506) (= x 3507) (= x 3508) (= x 3509) (= x 3510) (= x 3511) (= x 3512) + (= x 3513) (= x 3514) (= x 3515) (= x 3516) (= x 3517) (= x 3518) (= x 3519) (= x 3520) + (= x 3521) (= x 3522) (= x 3523) (= x 3524) (= x 3525) (= x 3526) (= x 3527) (= x 3528) + (= x 3529) (= x 3530) (= x 3531) (= x 3532) (= x 3533) (= x 3534) (= x 3535) (= x 3536) + (= x 3537) (= x 3538) (= x 3539) (= x 3540) (= x 3541) (= x 3542) (= x 3543) (= x 3544) + (= x 3545) (= x 3546) (= x 3547) (= x 3548) (= x 3549) (= x 3550) (= x 3551) (= x 3552) + (= x 3553) (= x 3554) (= x 3555) (= x 3556) (= x 3557) (= x 3558) (= x 3559) (= x 3560) + (= x 3561) (= x 3562) (= x 3563) (= x 3564) (= x 3565) (= x 3566) (= x 3567) (= x 3568) + (= x 3569) (= x 3570) (= x 3571) (= x 3572) (= x 3573) (= x 3574) (= x 3575) (= x 3576) + (= x 3577) (= x 3578) (= x 3579) (= x 3580) (= x 3581) (= x 3582) (= x 3583) (= x 3584) + (= x 3585) (= x 3586) (= x 3587) (= x 3588) (= x 3589) (= x 3590) (= x 3591) (= x 3592) + (= x 3593) (= x 3594) (= x 3595) (= x 3596) (= x 3597) (= x 3598) (= x 3599) (= x 3600) + (= x 3601) (= x 3602) (= x 3603) (= x 3604) (= x 3605) (= x 3606) (= x 3607) (= x 3608) + (= x 3609) (= x 3610) (= x 3611) (= x 3612) (= x 3613) (= x 3614) (= x 3615) (= x 3616) + (= x 3617) (= x 3618) (= x 3619) (= x 3620) (= x 3621) (= x 3622) (= x 3623) (= x 3624) + (= x 3625) (= x 3626) (= x 3627) (= x 3628) (= x 3629) (= x 3630) (= x 3631) (= x 3632) + (= x 3633) (= x 3634) (= x 3635) (= x 3636) (= x 3637) (= x 3638) (= x 3639) (= x 3640) + (= x 3641) (= x 3642) (= x 3643) (= x 3644) (= x 3645) (= x 3646) (= x 3647) (= x 3648) + (= x 3649) (= x 3650) (= x 3651) (= x 3652) (= x 3653) (= x 3654) (= x 3655) (= x 3656) + (= x 3657) (= x 3658) (= x 3659) (= x 3660) (= x 3661) (= x 3662) (= x 3663) (= x 3664) + (= x 3665) (= x 3666) (= x 3667) (= x 3668) (= x 3669) (= x 3670) (= x 3671) (= x 3672) + (= x 3673) (= x 3674) (= x 3675) (= x 3676) (= x 3677) (= x 3678) (= x 3679) (= x 3680) + (= x 3681) (= x 3682) (= x 3683) (= x 3684) (= x 3685) (= x 3686) (= x 3687) (= x 3688) + (= x 3689) (= x 3690) (= x 3691) (= x 3692) (= x 3693) (= x 3694) (= x 3695) (= x 3696) + (= x 3697) (= x 3698) (= x 3699) (= x 3700) (= x 3701) (= x 3702) (= x 3703) (= x 3704) + (= x 3705) (= x 3706) (= x 3707) (= x 3708) (= x 3709) (= x 3710) (= x 3711) (= x 3712) + (= x 3713) (= x 3714) (= x 3715) (= x 3716) (= x 3717) (= x 3718) (= x 3719) (= x 3720) + (= x 3721) (= x 3722) (= x 3723) (= x 3724) (= x 3725) (= x 3726) (= x 3727) (= x 3728) + (= x 3729) (= x 3730) (= x 3731) (= x 3732) (= x 3733) (= x 3734) (= x 3735) (= x 3736) + (= x 3737) (= x 3738) (= x 3739) (= x 3740) (= x 3741) (= x 3742) (= x 3743) (= x 3744) + (= x 3745) (= x 3746) (= x 3747) (= x 3748) (= x 3749) (= x 3750) (= x 3751) (= x 3752) + (= x 3753) (= x 3754) (= x 3755) (= x 3756) (= x 3757) (= x 3758) (= x 3759) (= x 3760) + (= x 3761) (= x 3762) (= x 3763) (= x 3764) (= x 3765) (= x 3766) (= x 3767) (= x 3768) + (= x 3769) (= x 3770) (= x 3771) (= x 3772) (= x 3773) (= x 3774) (= x 3775) (= x 3776) + (= x 3777) (= x 3778) (= x 3779) (= x 3780) (= x 3781) (= x 3782) (= x 3783) (= x 3784) + (= x 3785) (= x 3786) (= x 3787) (= x 3788) (= x 3789) (= x 3790) (= x 3791) (= x 3792) + (= x 3793) (= x 3794) (= x 3795) (= x 3796) (= x 3797) (= x 3798) (= x 3799) (= x 3800) + (= x 3801) (= x 3802) (= x 3803) (= x 3804) (= x 3805) (= x 3806) (= x 3807) (= x 3808) + (= x 3809) (= x 3810) (= x 3811) (= x 3812) (= x 3813) (= x 3814) (= x 3815) (= x 3816) + (= x 3817) (= x 3818) (= x 3819) (= x 3820) (= x 3821) (= x 3822) (= x 3823) (= x 3824) + (= x 3825) (= x 3826) (= x 3827) (= x 3828) (= x 3829) (= x 3830) (= x 3831) (= x 3832) + (= x 3833) (= x 3834) (= x 3835) (= x 3836) (= x 3837) (= x 3838) (= x 3839) (= x 3840) + (= x 3841) (= x 3842) (= x 3843) (= x 3844) (= x 3845) (= x 3846) (= x 3847) (= x 3848) + (= x 3849) (= x 3850) (= x 3851) (= x 3852) (= x 3853) (= x 3854) (= x 3855) (= x 3856) + (= x 3857) (= x 3858) (= x 3859) (= x 3860) (= x 3861) (= x 3862) (= x 3863) (= x 3864) + (= x 3865) (= x 3866) (= x 3867) (= x 3868) (= x 3869) (= x 3870) (= x 3871) (= x 3872) + (= x 3873) (= x 3874) (= x 3875) (= x 3876) (= x 3877) (= x 3878) (= x 3879) (= x 3880) + (= x 3881) (= x 3882) (= x 3883) (= x 3884) (= x 3885) (= x 3886) (= x 3887) (= x 3888) + (= x 3889) (= x 3890) (= x 3891) (= x 3892) (= x 3893) (= x 3894) (= x 3895) (= x 3896) + (= x 3897) (= x 3898) (= x 3899) (= x 3900) (= x 3901) (= x 3902) (= x 3903) (= x 3904) + (= x 3905) (= x 3906) (= x 3907) (= x 3908) (= x 3909) (= x 3910) (= x 3911) (= x 3912) + (= x 3913) (= x 3914) (= x 3915) (= x 3916) (= x 3917) (= x 3918) (= x 3919) (= x 3920) + (= x 3921) (= x 3922) (= x 3923) (= x 3924) (= x 3925) (= x 3926) (= x 3927) (= x 3928) + (= x 3929) (= x 3930) (= x 3931) (= x 3932) (= x 3933) (= x 3934) (= x 3935) (= x 3936) + (= x 3937) (= x 3938) (= x 3939) (= x 3940) (= x 3941) (= x 3942) (= x 3943) (= x 3944) + (= x 3945) (= x 3946) (= x 3947) (= x 3948) (= x 3949) (= x 3950) (= x 3951) (= x 3952) + (= x 3953) (= x 3954) (= x 3955) (= x 3956) (= x 3957) (= x 3958) (= x 3959) (= x 3960) + (= x 3961) (= x 3962) (= x 3963) (= x 3964) (= x 3965) (= x 3966) (= x 3967) (= x 3968) + (= x 3969) (= x 3970) (= x 3971) (= x 3972) (= x 3973) (= x 3974) (= x 3975) (= x 3976) + (= x 3977) (= x 3978) (= x 3979) (= x 3980) (= x 3981) (= x 3982) (= x 3983) (= x 3984) + (= x 3985) (= x 3986) (= x 3987) (= x 3988) (= x 3989) (= x 3990) (= x 3991) (= x 3992) + (= x 3993) (= x 3994) (= x 3995) (= x 3996) (= x 3997) (= x 3998) (= x 3999) (= x 4000) + (= x 4001) (= x 4002) (= x 4003) (= x 4004) (= x 4005) (= x 4006) (= x 4007) (= x 4008) + (= x 4009) (= x 4010) (= x 4011) (= x 4012) (= x 4013) (= x 4014) (= x 4015) (= x 4016) + (= x 4017) (= x 4018) (= x 4019) (= x 4020) (= x 4021) (= x 4022) (= x 4023) (= x 4024) + (= x 4025) (= x 4026) (= x 4027) (= x 4028) (= x 4029) (= x 4030) (= x 4031) (= x 4032) + (= x 4033) (= x 4034) (= x 4035) (= x 4036) (= x 4037) (= x 4038) (= x 4039) (= x 4040) + (= x 4041) (= x 4042) (= x 4043) (= x 4044) (= x 4045) (= x 4046) (= x 4047) (= x 4048) + (= x 4049) (= x 4050) (= x 4051) (= x 4052) (= x 4053) (= x 4054) (= x 4055) (= x 4056) + (= x 4057) (= x 4058) (= x 4059) (= x 4060) (= x 4061) (= x 4062) (= x 4063) (= x 4064) + (= x 4065) (= x 4066) (= x 4067) (= x 4068) (= x 4069) (= x 4070) (= x 4071) (= x 4072) + (= x 4073) (= x 4074) (= x 4075) (= x 4076) (= x 4077) (= x 4078) (= x 4079) (= x 4080) + (= x 4081) (= x 4082) (= x 4083) (= x 4084) (= x 4085) (= x 4086) (= x 4087) (= x 4088) + (= x 4089) (= x 4090) (= x 4091) (= x 4092) (= x 4093) (= x 4094) (= x 4095) (= x 4096) + (= x 4097) (= x 4098) (= x 4099) (= x 4100) (= x 4101) (= x 4102) (= x 4103) (= x 4104) + (= x 4105) (= x 4106) (= x 4107) (= x 4108) (= x 4109) (= x 4110) (= x 4111) (= x 4112) + (= x 4113) (= x 4114) (= x 4115) (= x 4116) (= x 4117) (= x 4118) (= x 4119) (= x 4120) + (= x 4121) (= x 4122) (= x 4123) (= x 4124) (= x 4125) (= x 4126) (= x 4127) (= x 4128) + (= x 4129) (= x 4130) (= x 4131) (= x 4132) (= x 4133) (= x 4134) (= x 4135) (= x 4136) + (= x 4137) (= x 4138) (= x 4139) (= x 4140) (= x 4141) (= x 4142) (= x 4143) (= x 4144) + (= x 4145) (= x 4146) (= x 4147) (= x 4148) (= x 4149) (= x 4150) (= x 4151) (= x 4152) + (= x 4153) (= x 4154) (= x 4155) (= x 4156) (= x 4157) (= x 4158) (= x 4159) (= x 4160) + (= x 4161) (= x 4162) (= x 4163) (= x 4164) (= x 4165) (= x 4166) (= x 4167) (= x 4168) + (= x 4169) (= x 4170) (= x 4171) (= x 4172) (= x 4173) (= x 4174) (= x 4175) (= x 4176) + (= x 4177) (= x 4178) (= x 4179) (= x 4180) (= x 4181) (= x 4182) (= x 4183) (= x 4184) + (= x 4185) (= x 4186) (= x 4187) (= x 4188) (= x 4189) (= x 4190) (= x 4191) (= x 4192) + (= x 4193) (= x 4194) (= x 4195) (= x 4196) (= x 4197) (= x 4198) (= x 4199) (= x 4200) + (= x 4201) (= x 4202) (= x 4203) (= x 4204) (= x 4205) (= x 4206) (= x 4207) (= x 4208) + (= x 4209) (= x 4210) (= x 4211) (= x 4212) (= x 4213) (= x 4214) (= x 4215) (= x 4216) + (= x 4217) (= x 4218) (= x 4219) (= x 4220) (= x 4221) (= x 4222) (= x 4223) (= x 4224) + (= x 4225) (= x 4226) (= x 4227) (= x 4228) (= x 4229) (= x 4230) (= x 4231) (= x 4232) + (= x 4233) (= x 4234) (= x 4235) (= x 4236) (= x 4237) (= x 4238) (= x 4239) (= x 4240) + (= x 4241) (= x 4242) (= x 4243) (= x 4244) (= x 4245) (= x 4246) (= x 4247) (= x 4248) + (= x 4249) (= x 4250) (= x 4251) (= x 4252) (= x 4253) (= x 4254) (= x 4255) (= x 4256) + (= x 4257) (= x 4258) (= x 4259) (= x 4260) (= x 4261) (= x 4262) (= x 4263) (= x 4264) + (= x 4265) (= x 4266) (= x 4267) (= x 4268) (= x 4269) (= x 4270) (= x 4271) (= x 4272) + (= x 4273) (= x 4274) (= x 4275) (= x 4276) (= x 4277) (= x 4278) (= x 4279) (= x 4280) + (= x 4281) (= x 4282) (= x 4283) (= x 4284) (= x 4285) (= x 4286) (= x 4287) (= x 4288) + (= x 4289) (= x 4290) (= x 4291) (= x 4292) (= x 4293) (= x 4294) (= x 4295) (= x 4296) + (= x 4297) (= x 4298) (= x 4299) (= x 4300) (= x 4301) (= x 4302) (= x 4303) (= x 4304) + (= x 4305) (= x 4306) (= x 4307) (= x 4308) (= x 4309) (= x 4310) (= x 4311) (= x 4312) + (= x 4313) (= x 4314) (= x 4315) (= x 4316) (= x 4317) (= x 4318) (= x 4319) (= x 4320) + (= x 4321) (= x 4322) (= x 4323) (= x 4324) (= x 4325) (= x 4326) (= x 4327) (= x 4328) + (= x 4329) (= x 4330) (= x 4331) (= x 4332) (= x 4333) (= x 4334) (= x 4335) (= x 4336) + (= x 4337) (= x 4338) (= x 4339) (= x 4340) (= x 4341) (= x 4342) (= x 4343) (= x 4344) + (= x 4345) (= x 4346) (= x 4347) (= x 4348) (= x 4349) (= x 4350) (= x 4351) (= x 4352) + (= x 4353) (= x 4354) (= x 4355) (= x 4356) (= x 4357) (= x 4358) (= x 4359) (= x 4360) + (= x 4361) (= x 4362) (= x 4363) (= x 4364) (= x 4365) (= x 4366) (= x 4367) (= x 4368) + (= x 4369) (= x 4370) (= x 4371) (= x 4372) (= x 4373) (= x 4374) (= x 4375) (= x 4376) + (= x 4377) (= x 4378) (= x 4379) (= x 4380) (= x 4381) (= x 4382) (= x 4383) (= x 4384) + (= x 4385) (= x 4386) (= x 4387) (= x 4388) (= x 4389) (= x 4390) (= x 4391) (= x 4392) + (= x 4393) (= x 4394) (= x 4395) (= x 4396) (= x 4397) (= x 4398) (= x 4399) (= x 4400) + (= x 4401) (= x 4402) (= x 4403) (= x 4404) (= x 4405) (= x 4406) (= x 4407) (= x 4408) + (= x 4409) (= x 4410) (= x 4411) (= x 4412) (= x 4413) (= x 4414) (= x 4415) (= x 4416) + (= x 4417) (= x 4418) (= x 4419) (= x 4420) (= x 4421) (= x 4422) (= x 4423) (= x 4424) + (= x 4425) (= x 4426) (= x 4427) (= x 4428) (= x 4429) (= x 4430) (= x 4431) (= x 4432) + (= x 4433) (= x 4434) (= x 4435) (= x 4436) (= x 4437) (= x 4438) (= x 4439) (= x 4440) + (= x 4441) (= x 4442) (= x 4443) (= x 4444) (= x 4445) (= x 4446) (= x 4447) (= x 4448) + (= x 4449) (= x 4450) (= x 4451) (= x 4452) (= x 4453) (= x 4454) (= x 4455) (= x 4456) + (= x 4457) (= x 4458) (= x 4459) (= x 4460) (= x 4461) (= x 4462) (= x 4463) (= x 4464) + (= x 4465) (= x 4466) (= x 4467) (= x 4468) (= x 4469) (= x 4470) (= x 4471) (= x 4472) + (= x 4473) (= x 4474) (= x 4475) (= x 4476) (= x 4477) (= x 4478) (= x 4479) (= x 4480) + (= x 4481) (= x 4482) (= x 4483) (= x 4484) (= x 4485) (= x 4486) (= x 4487) (= x 4488) + (= x 4489) (= x 4490) (= x 4491) (= x 4492) (= x 4493) (= x 4494) (= x 4495) (= x 4496) + (= x 4497) (= x 4498) (= x 4499) (= x 4500) (= x 4501) (= x 4502) (= x 4503) (= x 4504) + (= x 4505) (= x 4506) (= x 4507) (= x 4508) (= x 4509) (= x 4510) (= x 4511) (= x 4512) + (= x 4513) (= x 4514) (= x 4515) (= x 4516) (= x 4517) (= x 4518) (= x 4519) (= x 4520) + (= x 4521) (= x 4522) (= x 4523) (= x 4524) (= x 4525) (= x 4526) (= x 4527) (= x 4528) + (= x 4529) (= x 4530) (= x 4531) (= x 4532) (= x 4533) (= x 4534) (= x 4535) (= x 4536) + (= x 4537) (= x 4538) (= x 4539) (= x 4540) (= x 4541) (= x 4542) (= x 4543) (= x 4544) + (= x 4545) (= x 4546) (= x 4547) (= x 4548) (= x 4549) (= x 4550) (= x 4551) (= x 4552) + (= x 4553) (= x 4554) (= x 4555) (= x 4556) (= x 4557) (= x 4558) (= x 4559) (= x 4560) + (= x 4561) (= x 4562) (= x 4563) (= x 4564) (= x 4565) (= x 4566) (= x 4567) (= x 4568) + (= x 4569) (= x 4570) (= x 4571) (= x 4572) (= x 4573) (= x 4574) (= x 4575) (= x 4576) + (= x 4577) (= x 4578) (= x 4579) (= x 4580) (= x 4581) (= x 4582) (= x 4583) (= x 4584) + (= x 4585) (= x 4586) (= x 4587) (= x 4588) (= x 4589) (= x 4590) (= x 4591) (= x 4592) + (= x 4593) (= x 4594) (= x 4595) (= x 4596) (= x 4597) (= x 4598) (= x 4599) (= x 4600) + (= x 4601) (= x 4602) (= x 4603) (= x 4604) (= x 4605) (= x 4606) (= x 4607) (= x 4608) + (= x 4609) (= x 4610) (= x 4611) (= x 4612) (= x 4613) (= x 4614) (= x 4615) (= x 4616) + (= x 4617) (= x 4618) (= x 4619) (= x 4620) (= x 4621) (= x 4622) (= x 4623) (= x 4624) + (= x 4625) (= x 4626) (= x 4627) (= x 4628) (= x 4629) (= x 4630) (= x 4631) (= x 4632) + (= x 4633) (= x 4634) (= x 4635) (= x 4636) (= x 4637) (= x 4638) (= x 4639) (= x 4640) + (= x 4641) (= x 4642) (= x 4643) (= x 4644) (= x 4645) (= x 4646) (= x 4647) (= x 4648) + (= x 4649) (= x 4650) (= x 4651) (= x 4652) (= x 4653) (= x 4654) (= x 4655) (= x 4656) + (= x 4657) (= x 4658) (= x 4659) (= x 4660) (= x 4661) (= x 4662) (= x 4663) (= x 4664) + (= x 4665) (= x 4666) (= x 4667) (= x 4668) (= x 4669) (= x 4670) (= x 4671) (= x 4672) + (= x 4673) (= x 4674) (= x 4675) (= x 4676) (= x 4677) (= x 4678) (= x 4679) (= x 4680) + (= x 4681) (= x 4682) (= x 4683) (= x 4684) (= x 4685) (= x 4686) (= x 4687) (= x 4688) + (= x 4689) (= x 4690) (= x 4691) (= x 4692) (= x 4693) (= x 4694) (= x 4695) (= x 4696) + (= x 4697) (= x 4698) (= x 4699) (= x 4700) (= x 4701) (= x 4702) (= x 4703) (= x 4704) + (= x 4705) (= x 4706) (= x 4707) (= x 4708) (= x 4709) (= x 4710) (= x 4711) (= x 4712) + (= x 4713) (= x 4714) (= x 4715) (= x 4716) (= x 4717) (= x 4718) (= x 4719) (= x 4720) + (= x 4721) (= x 4722) (= x 4723) (= x 4724) (= x 4725) (= x 4726) (= x 4727) (= x 4728) + (= x 4729) (= x 4730) (= x 4731) (= x 4732) (= x 4733) (= x 4734) (= x 4735) (= x 4736) + (= x 4737) (= x 4738) (= x 4739) (= x 4740) (= x 4741) (= x 4742) (= x 4743) (= x 4744) + (= x 4745) (= x 4746) (= x 4747) (= x 4748) (= x 4749) (= x 4750) (= x 4751) (= x 4752) + (= x 4753) (= x 4754) (= x 4755) (= x 4756) (= x 4757) (= x 4758) (= x 4759) (= x 4760) + (= x 4761) (= x 4762) (= x 4763) (= x 4764) (= x 4765) (= x 4766) (= x 4767) (= x 4768) + (= x 4769) (= x 4770) (= x 4771) (= x 4772) (= x 4773) (= x 4774) (= x 4775) (= x 4776) + (= x 4777) (= x 4778) (= x 4779) (= x 4780) (= x 4781) (= x 4782) (= x 4783) (= x 4784) + (= x 4785) (= x 4786) (= x 4787) (= x 4788) (= x 4789) (= x 4790) (= x 4791) (= x 4792) + (= x 4793) (= x 4794) (= x 4795) (= x 4796) (= x 4797) (= x 4798) (= x 4799) (= x 4800) + (= x 4801) (= x 4802) (= x 4803) (= x 4804) (= x 4805) (= x 4806) (= x 4807) (= x 4808) + (= x 4809) (= x 4810) (= x 4811) (= x 4812) (= x 4813) (= x 4814) (= x 4815) (= x 4816) + (= x 4817) (= x 4818) (= x 4819) (= x 4820) (= x 4821) (= x 4822) (= x 4823) (= x 4824) + (= x 4825) (= x 4826) (= x 4827) (= x 4828) (= x 4829) (= x 4830) (= x 4831) (= x 4832) + (= x 4833) (= x 4834) (= x 4835) (= x 4836) (= x 4837) (= x 4838) (= x 4839) (= x 4840) + (= x 4841) (= x 4842) (= x 4843) (= x 4844) (= x 4845) (= x 4846) (= x 4847) (= x 4848) + (= x 4849) (= x 4850) (= x 4851) (= x 4852) (= x 4853) (= x 4854) (= x 4855) (= x 4856) + (= x 4857) (= x 4858) (= x 4859) (= x 4860) (= x 4861) (= x 4862) (= x 4863) (= x 4864) + (= x 4865) (= x 4866) (= x 4867) (= x 4868) (= x 4869) (= x 4870) (= x 4871) (= x 4872) + (= x 4873) (= x 4874) (= x 4875) (= x 4876) (= x 4877) (= x 4878) (= x 4879) (= x 4880) + (= x 4881) (= x 4882) (= x 4883) (= x 4884) (= x 4885) (= x 4886) (= x 4887) (= x 4888) + (= x 4889) (= x 4890) (= x 4891) (= x 4892) (= x 4893) (= x 4894) (= x 4895) (= x 4896) + (= x 4897) (= x 4898) (= x 4899) (= x 4900) (= x 4901) (= x 4902) (= x 4903) (= x 4904) + (= x 4905) (= x 4906) (= x 4907) (= x 4908) (= x 4909) (= x 4910) (= x 4911) (= x 4912) + (= x 4913) (= x 4914) (= x 4915) (= x 4916) (= x 4917) (= x 4918) (= x 4919) (= x 4920) + (= x 4921) (= x 4922) (= x 4923) (= x 4924) (= x 4925) (= x 4926) (= x 4927) (= x 4928) + (= x 4929) (= x 4930) (= x 4931) (= x 4932) (= x 4933) (= x 4934) (= x 4935) (= x 4936) + (= x 4937) (= x 4938) (= x 4939) (= x 4940) (= x 4941) (= x 4942) (= x 4943) (= x 4944) + (= x 4945) (= x 4946) (= x 4947) (= x 4948) (= x 4949) (= x 4950) (= x 4951) (= x 4952) + (= x 4953) (= x 4954) (= x 4955) (= x 4956) (= x 4957) (= x 4958) (= x 4959) (= x 4960) + (= x 4961) (= x 4962) (= x 4963) (= x 4964) (= x 4965) (= x 4966) (= x 4967) (= x 4968) + (= x 4969) (= x 4970) (= x 4971) (= x 4972) (= x 4973) (= x 4974) (= x 4975) (= x 4976) + (= x 4977) (= x 4978) (= x 4979) (= x 4980) (= x 4981) (= x 4982) (= x 4983) (= x 4984) + (= x 4985) (= x 4986) (= x 4987) (= x 4988) (= x 4989) (= x 4990) (= x 4991) (= x 4992) + (= x 4993) (= x 4994) (= x 4995) (= x 4996) (= x 4997) (= x 4998) (= x 4999) (= x 5000) + (= x 5001) (= x 5002) (= x 5003) (= x 5004) (= x 5005) (= x 5006) (= x 5007) (= x 5008) + (= x 5009) (= x 5010) (= x 5011) (= x 5012) (= x 5013) (= x 5014) (= x 5015) (= x 5016) + (= x 5017) (= x 5018) (= x 5019) (= x 5020) (= x 5021) (= x 5022) (= x 5023) (= x 5024) + (= x 5025) (= x 5026) (= x 5027) (= x 5028) (= x 5029) (= x 5030) (= x 5031) (= x 5032) + (= x 5033) (= x 5034) (= x 5035) (= x 5036) (= x 5037) (= x 5038) (= x 5039) (= x 5040) + (= x 5041) (= x 5042) (= x 5043) (= x 5044) (= x 5045) (= x 5046) (= x 5047) (= x 5048) + (= x 5049) (= x 5050) (= x 5051) (= x 5052) (= x 5053) (= x 5054) (= x 5055) (= x 5056) + (= x 5057) (= x 5058) (= x 5059) (= x 5060) (= x 5061) (= x 5062) (= x 5063) (= x 5064) + (= x 5065) (= x 5066) (= x 5067) (= x 5068) (= x 5069) (= x 5070) (= x 5071) (= x 5072) + (= x 5073) (= x 5074) (= x 5075) (= x 5076) (= x 5077) (= x 5078) (= x 5079) (= x 5080) + (= x 5081) (= x 5082) (= x 5083) (= x 5084) (= x 5085) (= x 5086) (= x 5087) (= x 5088) + (= x 5089) (= x 5090) (= x 5091) (= x 5092) (= x 5093) (= x 5094) (= x 5095) (= x 5096) + (= x 5097) (= x 5098) (= x 5099) (= x 5100) (= x 5101) (= x 5102) (= x 5103) (= x 5104) + (= x 5105) (= x 5106) (= x 5107) (= x 5108) (= x 5109) (= x 5110) (= x 5111) (= x 5112) + (= x 5113) (= x 5114) (= x 5115) (= x 5116) (= x 5117) (= x 5118) (= x 5119) (= x 5120) + (= x 5121) (= x 5122) (= x 5123) (= x 5124) (= x 5125) (= x 5126) (= x 5127) (= x 5128) + (= x 5129) (= x 5130) (= x 5131) (= x 5132) (= x 5133) (= x 5134) (= x 5135) (= x 5136) + (= x 5137) (= x 5138) (= x 5139) (= x 5140) (= x 5141) (= x 5142) (= x 5143) (= x 5144) + (= x 5145) (= x 5146) (= x 5147) (= x 5148) (= x 5149) (= x 5150) (= x 5151) (= x 5152) + (= x 5153) (= x 5154) (= x 5155) (= x 5156) (= x 5157) (= x 5158) (= x 5159) (= x 5160) + (= x 5161) (= x 5162) (= x 5163) (= x 5164) (= x 5165) (= x 5166) (= x 5167) (= x 5168) + (= x 5169) (= x 5170) (= x 5171) (= x 5172) (= x 5173) (= x 5174) (= x 5175) (= x 5176) + (= x 5177) (= x 5178) (= x 5179) (= x 5180) (= x 5181) (= x 5182) (= x 5183) (= x 5184) + (= x 5185) (= x 5186) (= x 5187) (= x 5188) (= x 5189) (= x 5190) (= x 5191) (= x 5192) + (= x 5193) (= x 5194) (= x 5195) (= x 5196) (= x 5197) (= x 5198) (= x 5199) (= x 5200) + (= x 5201) (= x 5202) (= x 5203) (= x 5204) (= x 5205) (= x 5206) (= x 5207) (= x 5208) + (= x 5209) (= x 5210) (= x 5211) (= x 5212) (= x 5213) (= x 5214) (= x 5215) (= x 5216) + (= x 5217) (= x 5218) (= x 5219) (= x 5220) (= x 5221) (= x 5222) (= x 5223) (= x 5224) + (= x 5225) (= x 5226) (= x 5227) (= x 5228) (= x 5229) (= x 5230) (= x 5231) (= x 5232) + (= x 5233) (= x 5234) (= x 5235) (= x 5236) (= x 5237) (= x 5238) (= x 5239) (= x 5240) + (= x 5241) (= x 5242) (= x 5243) (= x 5244) (= x 5245) (= x 5246) (= x 5247) (= x 5248) + (= x 5249) (= x 5250) (= x 5251) (= x 5252) (= x 5253) (= x 5254) (= x 5255) (= x 5256) + (= x 5257) (= x 5258) (= x 5259) (= x 5260) (= x 5261) (= x 5262) (= x 5263) (= x 5264) + (= x 5265) (= x 5266) (= x 5267) (= x 5268) (= x 5269) (= x 5270) (= x 5271) (= x 5272) + (= x 5273) (= x 5274) (= x 5275) (= x 5276) (= x 5277) (= x 5278) (= x 5279) (= x 5280) + (= x 5281) (= x 5282) (= x 5283) (= x 5284) (= x 5285) (= x 5286) (= x 5287) (= x 5288) + (= x 5289) (= x 5290) (= x 5291) (= x 5292) (= x 5293) (= x 5294) (= x 5295) (= x 5296) + (= x 5297) (= x 5298) (= x 5299) (= x 5300) (= x 5301) (= x 5302) (= x 5303) (= x 5304) + (= x 5305) (= x 5306) (= x 5307) (= x 5308) (= x 5309) (= x 5310) (= x 5311) (= x 5312) + (= x 5313) (= x 5314) (= x 5315) (= x 5316) (= x 5317) (= x 5318) (= x 5319) (= x 5320) + (= x 5321) (= x 5322) (= x 5323) (= x 5324) (= x 5325) (= x 5326) (= x 5327) (= x 5328) + (= x 5329) (= x 5330) (= x 5331) (= x 5332) (= x 5333) (= x 5334) (= x 5335) (= x 5336) + (= x 5337) (= x 5338) (= x 5339) (= x 5340) (= x 5341) (= x 5342) (= x 5343) (= x 5344) + (= x 5345) (= x 5346) (= x 5347) (= x 5348) (= x 5349) (= x 5350) (= x 5351) (= x 5352) + (= x 5353) (= x 5354) (= x 5355) (= x 5356) (= x 5357) (= x 5358) (= x 5359) (= x 5360) + (= x 5361) (= x 5362) (= x 5363) (= x 5364) (= x 5365) (= x 5366) (= x 5367) (= x 5368) + (= x 5369) (= x 5370) (= x 5371) (= x 5372) (= x 5373) (= x 5374) (= x 5375) (= x 5376) + (= x 5377) (= x 5378) (= x 5379) (= x 5380) (= x 5381) (= x 5382) (= x 5383) (= x 5384) + (= x 5385) (= x 5386) (= x 5387) (= x 5388) (= x 5389) (= x 5390) (= x 5391) (= x 5392) + (= x 5393) (= x 5394) (= x 5395) (= x 5396) (= x 5397) (= x 5398) (= x 5399) (= x 5400) + (= x 5401) (= x 5402) (= x 5403) (= x 5404) (= x 5405) (= x 5406) (= x 5407) (= x 5408) + (= x 5409) (= x 5410) (= x 5411) (= x 5412) (= x 5413) (= x 5414) (= x 5415) (= x 5416) + (= x 5417) (= x 5418) (= x 5419) (= x 5420) (= x 5421) (= x 5422) (= x 5423) (= x 5424) + (= x 5425) (= x 5426) (= x 5427) (= x 5428) (= x 5429) (= x 5430) (= x 5431) (= x 5432) + (= x 5433) (= x 5434) (= x 5435) (= x 5436) (= x 5437) (= x 5438) (= x 5439) (= x 5440) + (= x 5441) (= x 5442) (= x 5443) (= x 5444) (= x 5445) (= x 5446) (= x 5447) (= x 5448) + (= x 5449) (= x 5450) (= x 5451) (= x 5452) (= x 5453) (= x 5454) (= x 5455) (= x 5456) + (= x 5457) (= x 5458) (= x 5459) (= x 5460) (= x 5461) (= x 5462) (= x 5463) (= x 5464) + (= x 5465) (= x 5466) (= x 5467) (= x 5468) (= x 5469) (= x 5470) (= x 5471) (= x 5472) + (= x 5473) (= x 5474) (= x 5475) (= x 5476) (= x 5477) (= x 5478) (= x 5479) (= x 5480) + (= x 5481) (= x 5482) (= x 5483) (= x 5484) (= x 5485) (= x 5486) (= x 5487) (= x 5488) + (= x 5489) (= x 5490) (= x 5491) (= x 5492) (= x 5493) (= x 5494) (= x 5495) (= x 5496) + (= x 5497) (= x 5498) (= x 5499) (= x 5500) (= x 5501) (= x 5502) (= x 5503) (= x 5504) + (= x 5505) (= x 5506) (= x 5507) (= x 5508) (= x 5509) (= x 5510) (= x 5511) (= x 5512) + (= x 5513) (= x 5514) (= x 5515) (= x 5516) (= x 5517) (= x 5518) (= x 5519) (= x 5520) + (= x 5521) (= x 5522) (= x 5523) (= x 5524) (= x 5525) (= x 5526) (= x 5527) (= x 5528) + (= x 5529) (= x 5530) (= x 5531) (= x 5532) (= x 5533) (= x 5534) (= x 5535) (= x 5536) + (= x 5537) (= x 5538) (= x 5539) (= x 5540) (= x 5541) (= x 5542) (= x 5543) (= x 5544) + (= x 5545) (= x 5546) (= x 5547) (= x 5548) (= x 5549) (= x 5550) (= x 5551) (= x 5552) + (= x 5553) (= x 5554) (= x 5555) (= x 5556) (= x 5557) (= x 5558) (= x 5559) (= x 5560) + (= x 5561) (= x 5562) (= x 5563) (= x 5564) (= x 5565) (= x 5566) (= x 5567) (= x 5568) + (= x 5569) (= x 5570) (= x 5571) (= x 5572) (= x 5573) (= x 5574) (= x 5575) (= x 5576) + (= x 5577) (= x 5578) (= x 5579) (= x 5580) (= x 5581) (= x 5582) (= x 5583) (= x 5584) + (= x 5585) (= x 5586) (= x 5587) (= x 5588) (= x 5589) (= x 5590) (= x 5591) (= x 5592) + (= x 5593) (= x 5594) (= x 5595) (= x 5596) (= x 5597) (= x 5598) (= x 5599) (= x 5600) + (= x 5601) (= x 5602) (= x 5603) (= x 5604) (= x 5605) (= x 5606) (= x 5607) (= x 5608) + (= x 5609) (= x 5610) (= x 5611) (= x 5612) (= x 5613) (= x 5614) (= x 5615) (= x 5616) + (= x 5617) (= x 5618) (= x 5619) (= x 5620) (= x 5621) (= x 5622) (= x 5623) (= x 5624) + (= x 5625) (= x 5626) (= x 5627) (= x 5628) (= x 5629) (= x 5630) (= x 5631) (= x 5632) + (= x 5633) (= x 5634) (= x 5635) (= x 5636) (= x 5637) (= x 5638) (= x 5639) (= x 5640) + (= x 5641) (= x 5642) (= x 5643) (= x 5644) (= x 5645) (= x 5646) (= x 5647) (= x 5648) + (= x 5649) (= x 5650) (= x 5651) (= x 5652) (= x 5653) (= x 5654) (= x 5655) (= x 5656) + (= x 5657) (= x 5658) (= x 5659) (= x 5660) (= x 5661) (= x 5662) (= x 5663) (= x 5664) + (= x 5665) (= x 5666) (= x 5667) (= x 5668) (= x 5669) (= x 5670) (= x 5671) (= x 5672) + (= x 5673) (= x 5674) (= x 5675) (= x 5676) (= x 5677) (= x 5678) (= x 5679) (= x 5680) + (= x 5681) (= x 5682) (= x 5683) (= x 5684) (= x 5685) (= x 5686) (= x 5687) (= x 5688) + (= x 5689) (= x 5690) (= x 5691) (= x 5692) (= x 5693) (= x 5694) (= x 5695) (= x 5696) + (= x 5697) (= x 5698) (= x 5699) (= x 5700) (= x 5701) (= x 5702) (= x 5703) (= x 5704) + (= x 5705) (= x 5706) (= x 5707) (= x 5708) (= x 5709) (= x 5710) (= x 5711) (= x 5712) + (= x 5713) (= x 5714) (= x 5715) (= x 5716) (= x 5717) (= x 5718) (= x 5719) (= x 5720) + (= x 5721) (= x 5722) (= x 5723) (= x 5724) (= x 5725) (= x 5726) (= x 5727) (= x 5728) + (= x 5729) (= x 5730) (= x 5731) (= x 5732) (= x 5733) (= x 5734) (= x 5735) (= x 5736) + (= x 5737) (= x 5738) (= x 5739) (= x 5740) (= x 5741) (= x 5742) (= x 5743) (= x 5744) + (= x 5745) (= x 5746) (= x 5747) (= x 5748) (= x 5749) (= x 5750) (= x 5751) (= x 5752) + (= x 5753) (= x 5754) (= x 5755) (= x 5756) (= x 5757) (= x 5758) (= x 5759) (= x 5760) + (= x 5761) (= x 5762) (= x 5763) (= x 5764) (= x 5765) (= x 5766) (= x 5767) (= x 5768) + (= x 5769) (= x 5770) (= x 5771) (= x 5772) (= x 5773) (= x 5774) (= x 5775) (= x 5776) + (= x 5777) (= x 5778) (= x 5779) (= x 5780) (= x 5781) (= x 5782) (= x 5783) (= x 5784) + (= x 5785) (= x 5786) (= x 5787) (= x 5788) (= x 5789) (= x 5790) (= x 5791) (= x 5792) + (= x 5793) (= x 5794) (= x 5795) (= x 5796) (= x 5797) (= x 5798) (= x 5799) (= x 5800) + (= x 5801) (= x 5802) (= x 5803) (= x 5804) (= x 5805) (= x 5806) (= x 5807) (= x 5808) + (= x 5809) (= x 5810) (= x 5811) (= x 5812) (= x 5813) (= x 5814) (= x 5815) (= x 5816) + (= x 5817) (= x 5818) (= x 5819) (= x 5820) (= x 5821) (= x 5822) (= x 5823) (= x 5824) + (= x 5825) (= x 5826) (= x 5827) (= x 5828) (= x 5829) (= x 5830) (= x 5831) (= x 5832) + (= x 5833) (= x 5834) (= x 5835) (= x 5836) (= x 5837) (= x 5838) (= x 5839) (= x 5840) + (= x 5841) (= x 5842) (= x 5843) (= x 5844) (= x 5845) (= x 5846) (= x 5847) (= x 5848) + (= x 5849) (= x 5850) (= x 5851) (= x 5852) (= x 5853) (= x 5854) (= x 5855) (= x 5856) + (= x 5857) (= x 5858) (= x 5859) (= x 5860) (= x 5861) (= x 5862) (= x 5863) (= x 5864) + (= x 5865) (= x 5866) (= x 5867) (= x 5868) (= x 5869) (= x 5870) (= x 5871) (= x 5872) + (= x 5873) (= x 5874) (= x 5875) (= x 5876) (= x 5877) (= x 5878) (= x 5879) (= x 5880) + (= x 5881) (= x 5882) (= x 5883) (= x 5884) (= x 5885) (= x 5886) (= x 5887) (= x 5888) + (= x 5889) (= x 5890) (= x 5891) (= x 5892) (= x 5893) (= x 5894) (= x 5895) (= x 5896) + (= x 5897) (= x 5898) (= x 5899) (= x 5900) (= x 5901) (= x 5902) (= x 5903) (= x 5904) + (= x 5905) (= x 5906) (= x 5907) (= x 5908) (= x 5909) (= x 5910) (= x 5911) (= x 5912) + (= x 5913) (= x 5914) (= x 5915) (= x 5916) (= x 5917) (= x 5918) (= x 5919) (= x 5920) + (= x 5921) (= x 5922) (= x 5923) (= x 5924) (= x 5925) (= x 5926) (= x 5927) (= x 5928) + (= x 5929) (= x 5930) (= x 5931) (= x 5932) (= x 5933) (= x 5934) (= x 5935) (= x 5936) + (= x 5937) (= x 5938) (= x 5939) (= x 5940) (= x 5941) (= x 5942) (= x 5943) (= x 5944) + (= x 5945) (= x 5946) (= x 5947) (= x 5948) (= x 5949) (= x 5950) (= x 5951) (= x 5952) + (= x 5953) (= x 5954) (= x 5955) (= x 5956) (= x 5957) (= x 5958) (= x 5959) (= x 5960) + (= x 5961) (= x 5962) (= x 5963) (= x 5964) (= x 5965) (= x 5966) (= x 5967) (= x 5968) + (= x 5969) (= x 5970) (= x 5971) (= x 5972) (= x 5973) (= x 5974) (= x 5975) (= x 5976) + (= x 5977) (= x 5978) (= x 5979) (= x 5980) (= x 5981) (= x 5982) (= x 5983) (= x 5984) + (= x 5985) (= x 5986) (= x 5987) (= x 5988) (= x 5989) (= x 5990) (= x 5991) (= x 5992) + (= x 5993) (= x 5994) (= x 5995) (= x 5996) (= x 5997) (= x 5998) (= x 5999) (= x 6000) + (= x 6001) (= x 6002) (= x 6003) (= x 6004) (= x 6005) (= x 6006) (= x 6007) (= x 6008) + (= x 6009) (= x 6010) (= x 6011) (= x 6012) (= x 6013) (= x 6014) (= x 6015) (= x 6016) + (= x 6017) (= x 6018) (= x 6019) (= x 6020) (= x 6021) (= x 6022) (= x 6023) (= x 6024) + (= x 6025) (= x 6026) (= x 6027) (= x 6028) (= x 6029) (= x 6030) (= x 6031) (= x 6032) + (= x 6033) (= x 6034) (= x 6035) (= x 6036) (= x 6037) (= x 6038) (= x 6039) (= x 6040) + (= x 6041) (= x 6042) (= x 6043) (= x 6044) (= x 6045) (= x 6046) (= x 6047) (= x 6048) + (= x 6049) (= x 6050) (= x 6051) (= x 6052) (= x 6053) (= x 6054) (= x 6055) (= x 6056) + (= x 6057) (= x 6058) (= x 6059) (= x 6060) (= x 6061) (= x 6062) (= x 6063) (= x 6064) + (= x 6065) (= x 6066) (= x 6067) (= x 6068) (= x 6069) (= x 6070) (= x 6071) (= x 6072) + (= x 6073) (= x 6074) (= x 6075) (= x 6076) (= x 6077) (= x 6078) (= x 6079) (= x 6080) + (= x 6081) (= x 6082) (= x 6083) (= x 6084) (= x 6085) (= x 6086) (= x 6087) (= x 6088) + (= x 6089) (= x 6090) (= x 6091) (= x 6092) (= x 6093) (= x 6094) (= x 6095) (= x 6096) + (= x 6097) (= x 6098) (= x 6099) (= x 6100) (= x 6101) (= x 6102) (= x 6103) (= x 6104) + (= x 6105) (= x 6106) (= x 6107) (= x 6108) (= x 6109) (= x 6110) (= x 6111) (= x 6112) + (= x 6113) (= x 6114) (= x 6115) (= x 6116) (= x 6117) (= x 6118) (= x 6119) (= x 6120) + (= x 6121) (= x 6122) (= x 6123) (= x 6124) (= x 6125) (= x 6126) (= x 6127) (= x 6128) + (= x 6129) (= x 6130) (= x 6131) (= x 6132) (= x 6133) (= x 6134) (= x 6135) (= x 6136) + (= x 6137) (= x 6138) (= x 6139) (= x 6140) (= x 6141) (= x 6142) (= x 6143) (= x 6144) + (= x 6145) (= x 6146) (= x 6147) (= x 6148) (= x 6149) (= x 6150) (= x 6151) (= x 6152) + (= x 6153) (= x 6154) (= x 6155) (= x 6156) (= x 6157) (= x 6158) (= x 6159) (= x 6160) + (= x 6161) (= x 6162) (= x 6163) (= x 6164) (= x 6165) (= x 6166) (= x 6167) (= x 6168) + (= x 6169) (= x 6170) (= x 6171) (= x 6172) (= x 6173) (= x 6174) (= x 6175) (= x 6176) + (= x 6177) (= x 6178) (= x 6179) (= x 6180) (= x 6181) (= x 6182) (= x 6183) (= x 6184) + (= x 6185) (= x 6186) (= x 6187) (= x 6188) (= x 6189) (= x 6190) (= x 6191) (= x 6192) + (= x 6193) (= x 6194) (= x 6195) (= x 6196) (= x 6197) (= x 6198) (= x 6199) (= x 6200) + (= x 6201) (= x 6202) (= x 6203) (= x 6204) (= x 6205) (= x 6206) (= x 6207) (= x 6208) + (= x 6209) (= x 6210) (= x 6211) (= x 6212) (= x 6213) (= x 6214) (= x 6215) (= x 6216) + (= x 6217) (= x 6218) (= x 6219) (= x 6220) (= x 6221) (= x 6222) (= x 6223) (= x 6224) + (= x 6225) (= x 6226) (= x 6227) (= x 6228) (= x 6229) (= x 6230) (= x 6231) (= x 6232) + (= x 6233) (= x 6234) (= x 6235) (= x 6236) (= x 6237) (= x 6238) (= x 6239) (= x 6240) + (= x 6241) (= x 6242) (= x 6243) (= x 6244) (= x 6245) (= x 6246) (= x 6247) (= x 6248) + (= x 6249) (= x 6250) (= x 6251) (= x 6252) (= x 6253) (= x 6254) (= x 6255) (= x 6256) + (= x 6257) (= x 6258) (= x 6259) (= x 6260) (= x 6261) (= x 6262) (= x 6263) (= x 6264) + (= x 6265) (= x 6266) (= x 6267) (= x 6268) (= x 6269) (= x 6270) (= x 6271) (= x 6272) + (= x 6273) (= x 6274) (= x 6275) (= x 6276) (= x 6277) (= x 6278) (= x 6279) (= x 6280) + (= x 6281) (= x 6282) (= x 6283) (= x 6284) (= x 6285) (= x 6286) (= x 6287) (= x 6288) + (= x 6289) (= x 6290) (= x 6291) (= x 6292) (= x 6293) (= x 6294) (= x 6295) (= x 6296) + (= x 6297) (= x 6298) (= x 6299) (= x 6300) (= x 6301) (= x 6302) (= x 6303) (= x 6304) + (= x 6305) (= x 6306) (= x 6307) (= x 6308) (= x 6309) (= x 6310) (= x 6311) (= x 6312) + (= x 6313) (= x 6314) (= x 6315) (= x 6316) (= x 6317) (= x 6318) (= x 6319) (= x 6320) + (= x 6321) (= x 6322) (= x 6323) (= x 6324) (= x 6325) (= x 6326) (= x 6327) (= x 6328) + (= x 6329) (= x 6330) (= x 6331) (= x 6332) (= x 6333) (= x 6334) (= x 6335) (= x 6336) + (= x 6337) (= x 6338) (= x 6339) (= x 6340) (= x 6341) (= x 6342) (= x 6343) (= x 6344) + (= x 6345) (= x 6346) (= x 6347) (= x 6348) (= x 6349) (= x 6350) (= x 6351) (= x 6352) + (= x 6353) (= x 6354) (= x 6355) (= x 6356) (= x 6357) (= x 6358) (= x 6359) (= x 6360) + (= x 6361) (= x 6362) (= x 6363) (= x 6364) (= x 6365) (= x 6366) (= x 6367) (= x 6368) + (= x 6369) (= x 6370) (= x 6371) (= x 6372) (= x 6373) (= x 6374) (= x 6375) (= x 6376) + (= x 6377) (= x 6378) (= x 6379) (= x 6380) (= x 6381) (= x 6382) (= x 6383) (= x 6384) + (= x 6385) (= x 6386) (= x 6387) (= x 6388) (= x 6389) (= x 6390) (= x 6391) (= x 6392) + (= x 6393) (= x 6394) (= x 6395) (= x 6396) (= x 6397) (= x 6398) (= x 6399) (= x 6400) + (= x 6401) (= x 6402) (= x 6403) (= x 6404) (= x 6405) (= x 6406) (= x 6407) (= x 6408) + (= x 6409) (= x 6410) (= x 6411) (= x 6412) (= x 6413) (= x 6414) (= x 6415) (= x 6416) + (= x 6417) (= x 6418) (= x 6419) (= x 6420) (= x 6421) (= x 6422) (= x 6423) (= x 6424) + (= x 6425) (= x 6426) (= x 6427) (= x 6428) (= x 6429) (= x 6430) (= x 6431) (= x 6432) + (= x 6433) (= x 6434) (= x 6435) (= x 6436) (= x 6437) (= x 6438) (= x 6439) (= x 6440) + (= x 6441) (= x 6442) (= x 6443) (= x 6444) (= x 6445) (= x 6446) (= x 6447) (= x 6448) + (= x 6449) (= x 6450) (= x 6451) (= x 6452) (= x 6453) (= x 6454) (= x 6455) (= x 6456) + (= x 6457) (= x 6458) (= x 6459) (= x 6460) (= x 6461) (= x 6462) (= x 6463) (= x 6464) + (= x 6465) (= x 6466) (= x 6467) (= x 6468) (= x 6469) (= x 6470) (= x 6471) (= x 6472) + (= x 6473) (= x 6474) (= x 6475) (= x 6476) (= x 6477) (= x 6478) (= x 6479) (= x 6480) + (= x 6481) (= x 6482) (= x 6483) (= x 6484) (= x 6485) (= x 6486) (= x 6487) (= x 6488) + (= x 6489) (= x 6490) (= x 6491) (= x 6492) (= x 6493) (= x 6494) (= x 6495) (= x 6496) + (= x 6497) (= x 6498) (= x 6499) (= x 6500) (= x 6501) (= x 6502) (= x 6503) (= x 6504) + (= x 6505) (= x 6506) (= x 6507) (= x 6508) (= x 6509) (= x 6510) (= x 6511) (= x 6512) + (= x 6513) (= x 6514) (= x 6515) (= x 6516) (= x 6517) (= x 6518) (= x 6519) (= x 6520) + (= x 6521) (= x 6522) (= x 6523) (= x 6524) (= x 6525) (= x 6526) (= x 6527) (= x 6528) + (= x 6529) (= x 6530) (= x 6531) (= x 6532) (= x 6533) (= x 6534) (= x 6535) (= x 6536) + (= x 6537) (= x 6538) (= x 6539) (= x 6540) (= x 6541) (= x 6542) (= x 6543) (= x 6544) + (= x 6545) (= x 6546) (= x 6547) (= x 6548) (= x 6549) (= x 6550) (= x 6551) (= x 6552) + (= x 6553) (= x 6554) (= x 6555) (= x 6556) (= x 6557) (= x 6558) (= x 6559) (= x 6560) + (= x 6561) (= x 6562) (= x 6563) (= x 6564) (= x 6565) (= x 6566) (= x 6567) (= x 6568) + (= x 6569) (= x 6570) (= x 6571) (= x 6572) (= x 6573) (= x 6574) (= x 6575) (= x 6576) + (= x 6577) (= x 6578) (= x 6579) (= x 6580) (= x 6581) (= x 6582) (= x 6583) (= x 6584) + (= x 6585) (= x 6586) (= x 6587) (= x 6588) (= x 6589) (= x 6590) (= x 6591) (= x 6592) + (= x 6593) (= x 6594) (= x 6595) (= x 6596) (= x 6597) (= x 6598) (= x 6599) (= x 6600) + (= x 6601) (= x 6602) (= x 6603) (= x 6604) (= x 6605) (= x 6606) (= x 6607) (= x 6608) + (= x 6609) (= x 6610) (= x 6611) (= x 6612) (= x 6613) (= x 6614) (= x 6615) (= x 6616) + (= x 6617) (= x 6618) (= x 6619) (= x 6620) (= x 6621) (= x 6622) (= x 6623) (= x 6624) + (= x 6625) (= x 6626) (= x 6627) (= x 6628) (= x 6629) (= x 6630) (= x 6631) (= x 6632) + (= x 6633) (= x 6634) (= x 6635) (= x 6636) (= x 6637) (= x 6638) (= x 6639) (= x 6640) + (= x 6641) (= x 6642) (= x 6643) (= x 6644) (= x 6645) (= x 6646) (= x 6647) (= x 6648) + (= x 6649) (= x 6650) (= x 6651) (= x 6652) (= x 6653) (= x 6654) (= x 6655) (= x 6656) + (= x 6657) (= x 6658) (= x 6659) (= x 6660) (= x 6661) (= x 6662) (= x 6663) (= x 6664) + (= x 6665) (= x 6666) (= x 6667) (= x 6668) (= x 6669) (= x 6670) (= x 6671) (= x 6672) + (= x 6673) (= x 6674) (= x 6675) (= x 6676) (= x 6677) (= x 6678) (= x 6679) (= x 6680) + (= x 6681) (= x 6682) (= x 6683) (= x 6684) (= x 6685) (= x 6686) (= x 6687) (= x 6688) + (= x 6689) (= x 6690) (= x 6691) (= x 6692) (= x 6693) (= x 6694) (= x 6695) (= x 6696) + (= x 6697) (= x 6698) (= x 6699) (= x 6700) (= x 6701) (= x 6702) (= x 6703) (= x 6704) + (= x 6705) (= x 6706) (= x 6707) (= x 6708) (= x 6709) (= x 6710) (= x 6711) (= x 6712) + (= x 6713) (= x 6714) (= x 6715) (= x 6716) (= x 6717) (= x 6718) (= x 6719) (= x 6720) + (= x 6721) (= x 6722) (= x 6723) (= x 6724) (= x 6725) (= x 6726) (= x 6727) (= x 6728) + (= x 6729) (= x 6730) (= x 6731) (= x 6732) (= x 6733) (= x 6734) (= x 6735) (= x 6736) + (= x 6737) (= x 6738) (= x 6739) (= x 6740) (= x 6741) (= x 6742) (= x 6743) (= x 6744) + (= x 6745) (= x 6746) (= x 6747) (= x 6748) (= x 6749) (= x 6750) (= x 6751) (= x 6752) + (= x 6753) (= x 6754) (= x 6755) (= x 6756) (= x 6757) (= x 6758) (= x 6759) (= x 6760) + (= x 6761) (= x 6762) (= x 6763) (= x 6764) (= x 6765) (= x 6766) (= x 6767) (= x 6768) + (= x 6769) (= x 6770) (= x 6771) (= x 6772) (= x 6773) (= x 6774) (= x 6775) (= x 6776) + (= x 6777) (= x 6778) (= x 6779) (= x 6780) (= x 6781) (= x 6782) (= x 6783) (= x 6784) + (= x 6785) (= x 6786) (= x 6787) (= x 6788) (= x 6789) (= x 6790) (= x 6791) (= x 6792) + (= x 6793) (= x 6794) (= x 6795) (= x 6796) (= x 6797) (= x 6798) (= x 6799) (= x 6800) + (= x 6801) (= x 6802) (= x 6803) (= x 6804) (= x 6805) (= x 6806) (= x 6807) (= x 6808) + (= x 6809) (= x 6810) (= x 6811) (= x 6812) (= x 6813) (= x 6814) (= x 6815) (= x 6816) + (= x 6817) (= x 6818) (= x 6819) (= x 6820) (= x 6821) (= x 6822) (= x 6823) (= x 6824) + (= x 6825) (= x 6826) (= x 6827) (= x 6828) (= x 6829) (= x 6830) (= x 6831) (= x 6832) + (= x 6833) (= x 6834) (= x 6835) (= x 6836) (= x 6837) (= x 6838) (= x 6839) (= x 6840) + (= x 6841) (= x 6842) (= x 6843) (= x 6844) (= x 6845) (= x 6846) (= x 6847) (= x 6848) + (= x 6849) (= x 6850) (= x 6851) (= x 6852) (= x 6853) (= x 6854) (= x 6855) (= x 6856) + (= x 6857) (= x 6858) (= x 6859) (= x 6860) (= x 6861) (= x 6862) (= x 6863) (= x 6864) + (= x 6865) (= x 6866) (= x 6867) (= x 6868) (= x 6869) (= x 6870) (= x 6871) (= x 6872) + (= x 6873) (= x 6874) (= x 6875) (= x 6876) (= x 6877) (= x 6878) (= x 6879) (= x 6880) + (= x 6881) (= x 6882) (= x 6883) (= x 6884) (= x 6885) (= x 6886) (= x 6887) (= x 6888) + (= x 6889) (= x 6890) (= x 6891) (= x 6892) (= x 6893) (= x 6894) (= x 6895) (= x 6896) + (= x 6897) (= x 6898) (= x 6899) (= x 6900) (= x 6901) (= x 6902) (= x 6903) (= x 6904) + (= x 6905) (= x 6906) (= x 6907) (= x 6908) (= x 6909) (= x 6910) (= x 6911) (= x 6912) + (= x 6913) (= x 6914) (= x 6915) (= x 6916) (= x 6917) (= x 6918) (= x 6919) (= x 6920) + (= x 6921) (= x 6922) (= x 6923) (= x 6924) (= x 6925) (= x 6926) (= x 6927) (= x 6928) + (= x 6929) (= x 6930) (= x 6931) (= x 6932) (= x 6933) (= x 6934) (= x 6935) (= x 6936) + (= x 6937) (= x 6938) (= x 6939) (= x 6940) (= x 6941) (= x 6942) (= x 6943) (= x 6944) + (= x 6945) (= x 6946) (= x 6947) (= x 6948) (= x 6949) (= x 6950) (= x 6951) (= x 6952) + (= x 6953) (= x 6954) (= x 6955) (= x 6956) (= x 6957) (= x 6958) (= x 6959) (= x 6960) + (= x 6961) (= x 6962) (= x 6963) (= x 6964) (= x 6965) (= x 6966) (= x 6967) (= x 6968) + (= x 6969) (= x 6970) (= x 6971) (= x 6972) (= x 6973) (= x 6974) (= x 6975) (= x 6976) + (= x 6977) (= x 6978) (= x 6979) (= x 6980) (= x 6981) (= x 6982) (= x 6983) (= x 6984) + (= x 6985) (= x 6986) (= x 6987) (= x 6988) (= x 6989) (= x 6990) (= x 6991) (= x 6992) + (= x 6993) (= x 6994) (= x 6995) (= x 6996) (= x 6997) (= x 6998) (= x 6999) (= x 7000) + (= x 7001) (= x 7002) (= x 7003) (= x 7004) (= x 7005) (= x 7006) (= x 7007) (= x 7008) + (= x 7009) (= x 7010) (= x 7011) (= x 7012) (= x 7013) (= x 7014) (= x 7015) (= x 7016) + (= x 7017) (= x 7018) (= x 7019) (= x 7020) (= x 7021) (= x 7022) (= x 7023) (= x 7024) + (= x 7025) (= x 7026) (= x 7027) (= x 7028) (= x 7029) (= x 7030) (= x 7031) (= x 7032) + (= x 7033) (= x 7034) (= x 7035) (= x 7036) (= x 7037) (= x 7038) (= x 7039) (= x 7040) + (= x 7041) (= x 7042) (= x 7043) (= x 7044) (= x 7045) (= x 7046) (= x 7047) (= x 7048) + (= x 7049) (= x 7050) (= x 7051) (= x 7052) (= x 7053) (= x 7054) (= x 7055) (= x 7056) + (= x 7057) (= x 7058) (= x 7059) (= x 7060) (= x 7061) (= x 7062) (= x 7063) (= x 7064) + (= x 7065) (= x 7066) (= x 7067) (= x 7068) (= x 7069) (= x 7070) (= x 7071) (= x 7072) + (= x 7073) (= x 7074) (= x 7075) (= x 7076) (= x 7077) (= x 7078) (= x 7079) (= x 7080) + (= x 7081) (= x 7082) (= x 7083) (= x 7084) (= x 7085) (= x 7086) (= x 7087) (= x 7088) + (= x 7089) (= x 7090) (= x 7091) (= x 7092) (= x 7093) (= x 7094) (= x 7095) (= x 7096) + (= x 7097) (= x 7098) (= x 7099) (= x 7100) (= x 7101) (= x 7102) (= x 7103) (= x 7104) + (= x 7105) (= x 7106) (= x 7107) (= x 7108) (= x 7109) (= x 7110) (= x 7111) (= x 7112) + (= x 7113) (= x 7114) (= x 7115) (= x 7116) (= x 7117) (= x 7118) (= x 7119) (= x 7120) + (= x 7121) (= x 7122) (= x 7123) (= x 7124) (= x 7125) (= x 7126) (= x 7127) (= x 7128) + (= x 7129) (= x 7130) (= x 7131) (= x 7132) (= x 7133) (= x 7134) (= x 7135) (= x 7136) + (= x 7137) (= x 7138) (= x 7139) (= x 7140) (= x 7141) (= x 7142) (= x 7143) (= x 7144) + (= x 7145) (= x 7146) (= x 7147) (= x 7148) (= x 7149) (= x 7150) (= x 7151) (= x 7152) + (= x 7153) (= x 7154) (= x 7155) (= x 7156) (= x 7157) (= x 7158) (= x 7159) (= x 7160) + (= x 7161) (= x 7162) (= x 7163) (= x 7164) (= x 7165) (= x 7166) (= x 7167) (= x 7168) + (= x 7169) (= x 7170) (= x 7171) (= x 7172) (= x 7173) (= x 7174) (= x 7175) (= x 7176) + (= x 7177) (= x 7178) (= x 7179) (= x 7180) (= x 7181) (= x 7182) (= x 7183) (= x 7184) + (= x 7185) (= x 7186) (= x 7187) (= x 7188) (= x 7189) (= x 7190) (= x 7191) (= x 7192) + (= x 7193) (= x 7194) (= x 7195) (= x 7196) (= x 7197) (= x 7198) (= x 7199) (= x 7200) + (= x 7201) (= x 7202) (= x 7203) (= x 7204) (= x 7205) (= x 7206) (= x 7207) (= x 7208) + (= x 7209) (= x 7210) (= x 7211) (= x 7212) (= x 7213) (= x 7214) (= x 7215) (= x 7216) + (= x 7217) (= x 7218) (= x 7219) (= x 7220) (= x 7221) (= x 7222) (= x 7223) (= x 7224) + (= x 7225) (= x 7226) (= x 7227) (= x 7228) (= x 7229) (= x 7230) (= x 7231) (= x 7232) + (= x 7233) (= x 7234) (= x 7235) (= x 7236) (= x 7237) (= x 7238) (= x 7239) (= x 7240) + (= x 7241) (= x 7242) (= x 7243) (= x 7244) (= x 7245) (= x 7246) (= x 7247) (= x 7248) + (= x 7249) (= x 7250) (= x 7251) (= x 7252) (= x 7253) (= x 7254) (= x 7255) (= x 7256) + (= x 7257) (= x 7258) (= x 7259) (= x 7260) (= x 7261) (= x 7262) (= x 7263) (= x 7264) + (= x 7265) (= x 7266) (= x 7267) (= x 7268) (= x 7269) (= x 7270) (= x 7271) (= x 7272) + (= x 7273) (= x 7274) (= x 7275) (= x 7276) (= x 7277) (= x 7278) (= x 7279) (= x 7280) + (= x 7281) (= x 7282) (= x 7283) (= x 7284) (= x 7285) (= x 7286) (= x 7287) (= x 7288) + (= x 7289) (= x 7290) (= x 7291) (= x 7292) (= x 7293) (= x 7294) (= x 7295) (= x 7296) + (= x 7297) (= x 7298) (= x 7299) (= x 7300) (= x 7301) (= x 7302) (= x 7303) (= x 7304) + (= x 7305) (= x 7306) (= x 7307) (= x 7308) (= x 7309) (= x 7310) (= x 7311) (= x 7312) + (= x 7313) (= x 7314) (= x 7315) (= x 7316) (= x 7317) (= x 7318) (= x 7319) (= x 7320) + (= x 7321) (= x 7322) (= x 7323) (= x 7324) (= x 7325) (= x 7326) (= x 7327) (= x 7328) + (= x 7329) (= x 7330) (= x 7331) (= x 7332) (= x 7333) (= x 7334) (= x 7335) (= x 7336) + (= x 7337) (= x 7338) (= x 7339) (= x 7340) (= x 7341) (= x 7342) (= x 7343) (= x 7344) + (= x 7345) (= x 7346) (= x 7347) (= x 7348) (= x 7349) (= x 7350) (= x 7351) (= x 7352) + (= x 7353) (= x 7354) (= x 7355) (= x 7356) (= x 7357) (= x 7358) (= x 7359) (= x 7360) + (= x 7361) (= x 7362) (= x 7363) (= x 7364) (= x 7365) (= x 7366) (= x 7367) (= x 7368) + (= x 7369) (= x 7370) (= x 7371) (= x 7372) (= x 7373) (= x 7374) (= x 7375) (= x 7376) + (= x 7377) (= x 7378) (= x 7379) (= x 7380) (= x 7381) (= x 7382) (= x 7383) (= x 7384) + (= x 7385) (= x 7386) (= x 7387) (= x 7388) (= x 7389) (= x 7390) (= x 7391) (= x 7392) + (= x 7393) (= x 7394) (= x 7395) (= x 7396) (= x 7397) (= x 7398) (= x 7399) (= x 7400) + (= x 7401) (= x 7402) (= x 7403) (= x 7404) (= x 7405) (= x 7406) (= x 7407) (= x 7408) + (= x 7409) (= x 7410) (= x 7411) (= x 7412) (= x 7413) (= x 7414) (= x 7415) (= x 7416) + (= x 7417) (= x 7418) (= x 7419) (= x 7420) (= x 7421) (= x 7422) (= x 7423) (= x 7424) + (= x 7425) (= x 7426) (= x 7427) (= x 7428) (= x 7429) (= x 7430) (= x 7431) (= x 7432) + (= x 7433) (= x 7434) (= x 7435) (= x 7436) (= x 7437) (= x 7438) (= x 7439) (= x 7440) + (= x 7441) (= x 7442) (= x 7443) (= x 7444) (= x 7445) (= x 7446) (= x 7447) (= x 7448) + (= x 7449) (= x 7450) (= x 7451) (= x 7452) (= x 7453) (= x 7454) (= x 7455) (= x 7456) + (= x 7457) (= x 7458) (= x 7459) (= x 7460) (= x 7461) (= x 7462) (= x 7463) (= x 7464) + (= x 7465) (= x 7466) (= x 7467) (= x 7468) (= x 7469) (= x 7470) (= x 7471) (= x 7472) + (= x 7473) (= x 7474) (= x 7475) (= x 7476) (= x 7477) (= x 7478) (= x 7479) (= x 7480) + (= x 7481) (= x 7482) (= x 7483) (= x 7484) (= x 7485) (= x 7486) (= x 7487) (= x 7488) + (= x 7489) (= x 7490) (= x 7491) (= x 7492) (= x 7493) (= x 7494) (= x 7495) (= x 7496) + (= x 7497) (= x 7498) (= x 7499) (= x 7500) (= x 7501) (= x 7502) (= x 7503) (= x 7504) + (= x 7505) (= x 7506) (= x 7507) (= x 7508) (= x 7509) (= x 7510) (= x 7511) (= x 7512) + (= x 7513) (= x 7514) (= x 7515) (= x 7516) (= x 7517) (= x 7518) (= x 7519) (= x 7520) + (= x 7521) (= x 7522) (= x 7523) (= x 7524) (= x 7525) (= x 7526) (= x 7527) (= x 7528) + (= x 7529) (= x 7530) (= x 7531) (= x 7532) (= x 7533) (= x 7534) (= x 7535) (= x 7536) + (= x 7537) (= x 7538) (= x 7539) (= x 7540) (= x 7541) (= x 7542) (= x 7543) (= x 7544) + (= x 7545) (= x 7546) (= x 7547) (= x 7548) (= x 7549) (= x 7550) (= x 7551) (= x 7552) + (= x 7553) (= x 7554) (= x 7555) (= x 7556) (= x 7557) (= x 7558) (= x 7559) (= x 7560) + (= x 7561) (= x 7562) (= x 7563) (= x 7564) (= x 7565) (= x 7566) (= x 7567) (= x 7568) + (= x 7569) (= x 7570) (= x 7571) (= x 7572) (= x 7573) (= x 7574) (= x 7575) (= x 7576) + (= x 7577) (= x 7578) (= x 7579) (= x 7580) (= x 7581) (= x 7582) (= x 7583) (= x 7584) + (= x 7585) (= x 7586) (= x 7587) (= x 7588) (= x 7589) (= x 7590) (= x 7591) (= x 7592) + (= x 7593) (= x 7594) (= x 7595) (= x 7596) (= x 7597) (= x 7598) (= x 7599) (= x 7600) + (= x 7601) (= x 7602) (= x 7603) (= x 7604) (= x 7605) (= x 7606) (= x 7607) (= x 7608) + (= x 7609) (= x 7610) (= x 7611) (= x 7612) (= x 7613) (= x 7614) (= x 7615) (= x 7616) + (= x 7617) (= x 7618) (= x 7619) (= x 7620) (= x 7621) (= x 7622) (= x 7623) (= x 7624) + (= x 7625) (= x 7626) (= x 7627) (= x 7628) (= x 7629) (= x 7630) (= x 7631) (= x 7632) + (= x 7633) (= x 7634) (= x 7635) (= x 7636) (= x 7637) (= x 7638) (= x 7639) (= x 7640) + (= x 7641) (= x 7642) (= x 7643) (= x 7644) (= x 7645) (= x 7646) (= x 7647) (= x 7648) + (= x 7649) (= x 7650) (= x 7651) (= x 7652) (= x 7653) (= x 7654) (= x 7655) (= x 7656) + (= x 7657) (= x 7658) (= x 7659) (= x 7660) (= x 7661) (= x 7662) (= x 7663) (= x 7664) + (= x 7665) (= x 7666) (= x 7667) (= x 7668) (= x 7669) (= x 7670) (= x 7671) (= x 7672) + (= x 7673) (= x 7674) (= x 7675) (= x 7676) (= x 7677) (= x 7678) (= x 7679) (= x 7680) + (= x 7681) (= x 7682) (= x 7683) (= x 7684) (= x 7685) (= x 7686) (= x 7687) (= x 7688) + (= x 7689) (= x 7690) (= x 7691) (= x 7692) (= x 7693) (= x 7694) (= x 7695) (= x 7696) + (= x 7697) (= x 7698) (= x 7699) (= x 7700) (= x 7701) (= x 7702) (= x 7703) (= x 7704) + (= x 7705) (= x 7706) (= x 7707) (= x 7708) (= x 7709) (= x 7710) (= x 7711) (= x 7712) + (= x 7713) (= x 7714) (= x 7715) (= x 7716) (= x 7717) (= x 7718) (= x 7719) (= x 7720) + (= x 7721) (= x 7722) (= x 7723) (= x 7724) (= x 7725) (= x 7726) (= x 7727) (= x 7728) + (= x 7729) (= x 7730) (= x 7731) (= x 7732) (= x 7733) (= x 7734) (= x 7735) (= x 7736) + (= x 7737) (= x 7738) (= x 7739) (= x 7740) (= x 7741) (= x 7742) (= x 7743) (= x 7744) + (= x 7745) (= x 7746) (= x 7747) (= x 7748) (= x 7749) (= x 7750) (= x 7751) (= x 7752) + (= x 7753) (= x 7754) (= x 7755) (= x 7756) (= x 7757) (= x 7758) (= x 7759) (= x 7760) + (= x 7761) (= x 7762) (= x 7763) (= x 7764) (= x 7765) (= x 7766) (= x 7767) (= x 7768) + (= x 7769) (= x 7770) (= x 7771) (= x 7772) (= x 7773) (= x 7774) (= x 7775) (= x 7776) + (= x 7777) (= x 7778) (= x 7779) (= x 7780) (= x 7781) (= x 7782) (= x 7783) (= x 7784) + (= x 7785) (= x 7786) (= x 7787) (= x 7788) (= x 7789) (= x 7790) (= x 7791) (= x 7792) + (= x 7793) (= x 7794) (= x 7795) (= x 7796) (= x 7797) (= x 7798) (= x 7799) (= x 7800) + (= x 7801) (= x 7802) (= x 7803) (= x 7804) (= x 7805) (= x 7806) (= x 7807) (= x 7808) + (= x 7809) (= x 7810) (= x 7811) (= x 7812) (= x 7813) (= x 7814) (= x 7815) (= x 7816) + (= x 7817) (= x 7818) (= x 7819) (= x 7820) (= x 7821) (= x 7822) (= x 7823) (= x 7824) + (= x 7825) (= x 7826) (= x 7827) (= x 7828) (= x 7829) (= x 7830) (= x 7831) (= x 7832) + (= x 7833) (= x 7834) (= x 7835) (= x 7836) (= x 7837) (= x 7838) (= x 7839) (= x 7840) + (= x 7841) (= x 7842) (= x 7843) (= x 7844) (= x 7845) (= x 7846) (= x 7847) (= x 7848) + (= x 7849) (= x 7850) (= x 7851) (= x 7852) (= x 7853) (= x 7854) (= x 7855) (= x 7856) + (= x 7857) (= x 7858) (= x 7859) (= x 7860) (= x 7861) (= x 7862) (= x 7863) (= x 7864) + (= x 7865) (= x 7866) (= x 7867) (= x 7868) (= x 7869) (= x 7870) (= x 7871) (= x 7872) + (= x 7873) (= x 7874) (= x 7875) (= x 7876) (= x 7877) (= x 7878) (= x 7879) (= x 7880) + (= x 7881) (= x 7882) (= x 7883) (= x 7884) (= x 7885) (= x 7886) (= x 7887) (= x 7888) + (= x 7889) (= x 7890) (= x 7891) (= x 7892) (= x 7893) (= x 7894) (= x 7895) (= x 7896) + (= x 7897) (= x 7898) (= x 7899) (= x 7900) (= x 7901) (= x 7902) (= x 7903) (= x 7904) + (= x 7905) (= x 7906) (= x 7907) (= x 7908) (= x 7909) (= x 7910) (= x 7911) (= x 7912) + (= x 7913) (= x 7914) (= x 7915) (= x 7916) (= x 7917) (= x 7918) (= x 7919) (= x 7920) + (= x 7921) (= x 7922) (= x 7923) (= x 7924) (= x 7925) (= x 7926) (= x 7927) (= x 7928) + (= x 7929) (= x 7930) (= x 7931) (= x 7932) (= x 7933) (= x 7934) (= x 7935) (= x 7936) + (= x 7937) (= x 7938) (= x 7939) (= x 7940) (= x 7941) (= x 7942) (= x 7943) (= x 7944) + (= x 7945) (= x 7946) (= x 7947) (= x 7948) (= x 7949) (= x 7950) (= x 7951) (= x 7952) + (= x 7953) (= x 7954) (= x 7955) (= x 7956) (= x 7957) (= x 7958) (= x 7959) (= x 7960) + (= x 7961) (= x 7962) (= x 7963) (= x 7964) (= x 7965) (= x 7966) (= x 7967) (= x 7968) + (= x 7969) (= x 7970) (= x 7971) (= x 7972) (= x 7973) (= x 7974) (= x 7975) (= x 7976) + (= x 7977) (= x 7978) (= x 7979) (= x 7980) (= x 7981) (= x 7982) (= x 7983) (= x 7984) + (= x 7985) (= x 7986) (= x 7987) (= x 7988) (= x 7989) (= x 7990) (= x 7991) (= x 7992) + (= x 7993) (= x 7994) (= x 7995) (= x 7996) (= x 7997) (= x 7998) (= x 7999) (= x 8000) + (= x 8001) (= x 8002) (= x 8003) (= x 8004) (= x 8005) (= x 8006) (= x 8007) (= x 8008) + (= x 8009) (= x 8010) (= x 8011) (= x 8012) (= x 8013) (= x 8014) (= x 8015) (= x 8016) + (= x 8017) (= x 8018) (= x 8019) (= x 8020) (= x 8021) (= x 8022) (= x 8023) (= x 8024) + (= x 8025) (= x 8026) (= x 8027) (= x 8028) (= x 8029) (= x 8030) (= x 8031) (= x 8032) + (= x 8033) (= x 8034) (= x 8035) (= x 8036) (= x 8037) (= x 8038) (= x 8039) (= x 8040) + (= x 8041) (= x 8042) (= x 8043) (= x 8044) (= x 8045) (= x 8046) (= x 8047) (= x 8048) + (= x 8049) (= x 8050) (= x 8051) (= x 8052) (= x 8053) (= x 8054) (= x 8055) (= x 8056) + (= x 8057) (= x 8058) (= x 8059) (= x 8060) (= x 8061) (= x 8062) (= x 8063) (= x 8064) + (= x 8065) (= x 8066) (= x 8067) (= x 8068) (= x 8069) (= x 8070) (= x 8071) (= x 8072) + (= x 8073) (= x 8074) (= x 8075) (= x 8076) (= x 8077) (= x 8078) (= x 8079) (= x 8080) + (= x 8081) (= x 8082) (= x 8083) (= x 8084) (= x 8085) (= x 8086) (= x 8087) (= x 8088) + (= x 8089) (= x 8090) (= x 8091) (= x 8092) (= x 8093) (= x 8094) (= x 8095) (= x 8096) + (= x 8097) (= x 8098) (= x 8099) (= x 8100) (= x 8101) (= x 8102) (= x 8103) (= x 8104) + (= x 8105) (= x 8106) (= x 8107) (= x 8108) (= x 8109) (= x 8110) (= x 8111) (= x 8112) + (= x 8113) (= x 8114) (= x 8115) (= x 8116) (= x 8117) (= x 8118) (= x 8119) (= x 8120) + (= x 8121) (= x 8122) (= x 8123) (= x 8124) (= x 8125) (= x 8126) (= x 8127) (= x 8128) + (= x 8129) (= x 8130) (= x 8131) (= x 8132) (= x 8133) (= x 8134) (= x 8135) (= x 8136) + (= x 8137) (= x 8138) (= x 8139) (= x 8140) (= x 8141) (= x 8142) (= x 8143) (= x 8144) + (= x 8145) (= x 8146) (= x 8147) (= x 8148) (= x 8149) (= x 8150) (= x 8151) (= x 8152) + (= x 8153) (= x 8154) (= x 8155) (= x 8156) (= x 8157) (= x 8158) (= x 8159) (= x 8160) + (= x 8161) (= x 8162) (= x 8163) (= x 8164) (= x 8165) (= x 8166) (= x 8167) (= x 8168) + (= x 8169) (= x 8170) (= x 8171) (= x 8172) (= x 8173) (= x 8174) (= x 8175) (= x 8176) + (= x 8177) (= x 8178) (= x 8179) (= x 8180) (= x 8181) (= x 8182) (= x 8183) (= x 8184) + (= x 8185) (= x 8186) (= x 8187) (= x 8188) (= x 8189) (= x 8190) (= x 8191) (= x 8192) + )) + (itp x)) +) + +(rule (=> + (and + (itp x) + (= x1 (- x 1)) + ) + (itp x1) +)) + +(rule (=> (and (itp x) + (not (> x 0) + )) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/include/deep/BndExpl.hpp b/include/deep/BndExpl.hpp new file mode 100644 index 000000000..847d8e1c9 --- /dev/null +++ b/include/deep/BndExpl.hpp @@ -0,0 +1,160 @@ +#ifndef BNDEXPL__HPP__ +#define BNDEXPL__HPP__ + +#include "Horn.hpp" +#include "Distribution.hpp" +#include "ae/SMTUtils.hpp" + +using namespace std; +using namespace boost; +namespace ufo +{ + class BndExpl + { + private: + + ExprFactory &m_efac; + SMTUtils u; + CHCs& ruleManager; + + public: + + BndExpl (ExprFactory &efac, EZ3 &z3, CHCs& r) : + m_efac(efac), ruleManager(r), u(efac) {} + + void guessRandomTrace(vector& trace) + { + std::srand(std::time(0)); + Expr curRel = mk(m_efac); + + while (curRel != ruleManager.failDecl) + { + int range = ruleManager.outgs[curRel].size(); + int chosen = guessUniformly(range); + int chcId = ruleManager.outgs[curRel][chosen]; + curRel = ruleManager.chcs[chcId].dstRelation; + trace.push_back(chcId); + } + } + + void getAllTraces (Expr src, Expr dst, int len, vector trace, vector>& traces) + { + if (len == 1) + { + for (auto a : ruleManager.outgs[src]) + { + if (ruleManager.chcs[a].dstRelation == dst) + { + vector newtrace = trace; + newtrace.push_back(a); + traces.push_back(newtrace); + } + } + } + else + { + for (auto a : ruleManager.outgs[src]) + { + vector newtrace = trace; + newtrace.push_back(a); + getAllTraces(ruleManager.chcs[a].dstRelation, dst, len-1, newtrace, traces); + } + } + } + + Expr toExpr(vector& trace) + { + ExprVector ssa; + + ExprVector bindVars1; + ExprVector bindVars2; + int bindVar_index = 0; + int locVar_index = 0; + + for (auto &step : trace) + { + bindVars2.clear(); + HornRuleExt& hr = ruleManager.chcs[step]; + Expr body = hr.body; + for (int i = 0; i < hr.srcVars.size(); i++) + { + body = replaceAll(body, hr.srcVars[i], bindVars1[i]); + } + + for (int i = 0; i < hr.dstVars.size(); i++) + { + bool kept = false; + for (int j = 0; j < hr.srcVars.size(); j++) + { + if (hr.dstVars[i] == hr.srcVars[j]) + { + bindVars2.push_back(bindVars1[i]); + kept = true; + } + } + if (!kept) + { + Expr new_name = mkTerm ("__bnd_var_" + to_string(bindVar_index++), m_efac); + bindVars2.push_back(bind::intConst(new_name)); + } + + body = replaceAll(body, hr.dstVars[i], bindVars2[i]); + } + + for (int i = 0; i < hr.locVars.size(); i++) + { + Expr new_name = mkTerm ("__loc_var_" + to_string(locVar_index++), m_efac); + Expr var = bind::intConst(new_name); + + body = replaceAll(body, hr.locVars[i], var); + } + + bindVars1 = bindVars2; + + ssa.push_back(body); + } + + return conjoin(ssa, m_efac); + } + + void doit(int cur_bnd, int bnd) + { + bool unsat = true; + int num_traces = 0; + + outs () << "Exploring traces (up to bound): 1"; // GF: trace of length 1 is always empty + while (unsat && cur_bnd <= bnd) + { + outs () << ", " << cur_bnd; + vector> traces; + vector empttrace; + + getAllTraces(mk(m_efac), ruleManager.failDecl, cur_bnd++, vector(), traces); + + for (auto &a : traces) + { +// for (auto &b : a) outs() << " -> " << * ruleManager.chcs[b].dstRelation; outs() << "\n"; + num_traces++; + unsat = !u.isSat(toExpr(a)); + if (!unsat) break; + } + } + + outs () << "\nTotal number of traces explored: " << num_traces <<"\n\n" + << (unsat ? "UNSAT for all traces up to " : "SAT for a trace with ") + << (cur_bnd - 1) << " steps\n"; + } + }; + + inline void unrollAndCheck(string smt, int bnd1, int bnd2) + { + ExprFactory m_efac; + EZ3 z3(m_efac); + CHCs ruleManager(m_efac, z3); + ruleManager.parse(smt); + BndExpl ds(m_efac, z3, ruleManager); + ds.doit(bnd1, bnd2); + }; +} + +#endif diff --git a/include/deep/Horn.hpp b/include/deep/Horn.hpp index 1851f2aeb..46bccbf97 100644 --- a/include/deep/Horn.hpp +++ b/include/deep/Horn.hpp @@ -13,37 +13,37 @@ namespace ufo ExprVector srcVars; ExprVector dstVars; ExprVector locVars; - + ExprVector lin; Expr body; // conjunction of lin Expr head; - + Expr srcRelation; Expr dstRelation; - + bool isFact; bool isQuery; bool isInductive; - + string suffix; }; - + class CHCs { private: - + ExprFactory &m_efac; EZ3 &m_z3; - - Expr failDecl; - + public: - + + Expr failDecl; vector chcs; ExprSet decls; - + map> outgs; + CHCs(ExprFactory &efac, EZ3 &z3) : m_efac(efac), m_z3(z3) {}; - + void preprocess (Expr term, ExprSet& srcVars, ExprVector& relations, Expr &srcRelation, ExprVector& lin) { if (isOpX(term)) @@ -78,7 +78,7 @@ namespace ufo } } } - + void parse(string smt) { std::unique_ptr > m_fp; @@ -94,7 +94,7 @@ namespace ufo { if (a->arity() == 2) { - failDecl = a; + failDecl = a->arg(0); } else { @@ -141,18 +141,16 @@ namespace ufo Expr head = rule->arg(1); hr.head = head->arg(0); - hr.dstRelation = head->arg(0)->arg(0); ExprSet srcVars; - preprocess(body, srcVars, fp.m_rels, hr.srcRelation, hr.lin); hr.isFact = isOpX(hr.srcRelation); - hr.isQuery = (hr.dstRelation == failDecl->arg(0)); + hr.isQuery = (hr.dstRelation == failDecl); hr.isInductive = (hr.srcRelation == hr.dstRelation); - hr.body = conjoin(hr.lin, m_efac); + outgs[hr.srcRelation].push_back(chcs.size()-1); for (auto &a : srcVars) hr.srcVars.push_back(a); @@ -182,7 +180,7 @@ namespace ufo } } } - + void print() { int num = 0; @@ -215,4 +213,4 @@ namespace ufo } -#endif \ No newline at end of file +#endif diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index 09bd27989..62a37b653 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -1,3 +1,5 @@ add_subdirectory(aeval) +add_subdirectory(bnd) + add_subdirectory(deep) diff --git a/tools/bnd/BoundedExplorer.cpp b/tools/bnd/BoundedExplorer.cpp new file mode 100644 index 000000000..f27b781f9 --- /dev/null +++ b/tools/bnd/BoundedExplorer.cpp @@ -0,0 +1,22 @@ +#include "deep/BndExpl.hpp" + +using namespace ufo; +using namespace std; + +int main (int argc, char ** argv) +{ + if (argc == 1){ + outs() << "At least an input file should be given\n"; + return 0; + } + + int lower = 2; //default + int upper = 10000; //default + + if (argc > 2) lower = max(2, atoi(argv[1])); + if (argc > 3) upper = atoi(argv[2]); + + unrollAndCheck(string(argv[argc-1]), lower, upper); + + return 0; +} diff --git a/tools/bnd/CMakeLists.txt b/tools/bnd/CMakeLists.txt new file mode 100644 index 000000000..584373460 --- /dev/null +++ b/tools/bnd/CMakeLists.txt @@ -0,0 +1,4 @@ +add_executable (expl BoundedExplorer.cpp) +target_link_libraries (expl ${Z3_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${GMPXX_LIB} ${GMP_LIB}) +llvm_config (expl bitwriter) +install(TARGETS expl RUNTIME DESTINATION bin) From 6c6480b52dc51e464b9147f05961f761b6451fd5 Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Sun, 6 Aug 2017 14:00:53 -0700 Subject: [PATCH 030/236] reconsidered preprocessing: no `shrink` option, and formula simplifications --- include/ae/ExprSimpl.hpp | 336 ++++++++++++++++++++++++++--------- include/deep/CodeSampler.hpp | 116 +----------- include/deep/RndLearner.hpp | 12 +- tools/deep/DeepHorn.cpp | 7 +- 4 files changed, 268 insertions(+), 203 deletions(-) diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index 06009f783..0f244554a 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -8,6 +8,28 @@ using namespace std; using namespace boost; namespace ufo { + + template static Expr conjoin(Range& conjs, ExprFactory &efac){ + return + (conjs.size() == 0) ? mk(efac) : + (conjs.size() == 1) ? *conjs.begin() : + mknary(conjs); + } + + template static Expr disjoin(Range& disjs, ExprFactory &efac){ + return + (disjs.size() == 0) ? mk(efac) : + (disjs.size() == 1) ? *disjs.begin() : + mknary(disjs); + } + + template static Expr mkplus(Range& terms, ExprFactory &efac){ + return + (terms.size() == 0) ? mkTerm (mpz_class (0), efac) : + (terms.size() == 1) ? *terms.begin() : + mknary(terms); + } + /** * Represent Expr as multiplication */ @@ -61,7 +83,7 @@ namespace ufo /** * Self explanatory */ - inline static bool IsConstOrItsAdditiveInverse(Expr e, Expr var){ + inline static bool isConstOrItsAdditiveInverse(Expr e, Expr var){ if (e == var) { return true; } @@ -78,12 +100,35 @@ namespace ufo * Self explanatory */ inline static Expr additiveInverse(Expr e){ - if (isOpX(e)){ + + if (isOpX(e)){ + return e->left(); + } + else if (isOpX(e)){ + string val = lexical_cast(e); + int delim = val.find("/"); + int val1 = stoi(val.substr(0, delim)); + int val2 = stoi(val.substr(delim + 1)); + if (delim < 0) { + return mkTerm (mpq_class (-val1), e->getFactory()); + } else { + string inv_val = to_string(-val1) + "/" + to_string(val2); + return mkTerm (mpq_class (inv_val), e->getFactory()); + } + } + else if (isOpX(e)){ + int val = lexical_cast(e); + return mkTerm (mpz_class (-val), e->getFactory()); + } + else if (isOpX(e)){ if (lexical_cast(e->left()) == "-1"){ return e->right(); + } else if (e->arity() == 2) { + Expr c = additiveInverse(e->left()); + return mk(c, e->right()); } } - return mk(mkTerm (mpz_class (-1), e->getFactory()), e); + return mk(mkTerm (mpq_class (-1), e->getFactory()), e); } /** @@ -121,20 +166,14 @@ namespace ufo */ template static Expr rewriteHelperN(Expr e){ assert(e->arity() == 2); - Expr minus_one = mkTerm (mpz_class (-1), e->getFactory()); - Expr l = multZero(e->left(), minus_one); - Expr r = multZero(exprDistributor(e->right()), minus_one); - if (!isOpX(r)) - r = mk(minus_one, mk(minus_one,r)); // a bit of hack - - if (isOpX(l) && isOpX(r)){ - if (lexical_cast(l->left()) == "-1" && - lexical_cast(r->left()) == "-1" ){ - return mk(l->right(), r->right()); - } + if (!isOpX(e->left()) && + !(isOpX(e->left()))) + { + if (lexical_cast(e->left()->left()) == "-1") return e; } - return e; + + return mk(additiveInverse(e->left()), additiveInverse(exprDistributor(e->right()))); } /** @@ -143,25 +182,36 @@ namespace ufo template static Expr rewriteHelperM(Expr e, Expr var){ Expr l = e->left(); Expr r = e->right(); - Expr lhs; // expression, containing var; assume, var contains only in one clause - ExprSet rhs; // the rest of e + ExprVector lhs; // expressions containing var + ExprVector rhs; // the rest of e // first, parse l; if (isOpX(l)){ for (unsigned i = 0; i < l->arity (); i++){ Expr a = l->arg(i); - if (IsConstOrItsAdditiveInverse(a, var)){ - lhs = a; - continue; + if (isConstOrItsAdditiveInverse(a, var)){ + lhs.push_back(a); + } else { + rhs.push_back(additiveInverse(a)); } - rhs.insert(additiveInverse(a)); + } + } else if (isOpX(l)){ + if (isConstOrItsAdditiveInverse(l->left(), var)){ + lhs.push_back(l->left()); + } else { + rhs.push_back(additiveInverse(l->left())); + } + if (isConstOrItsAdditiveInverse(l->right(), var)){ + lhs.push_back(additiveInverse(l->right())); + } else { + rhs.push_back(l); } } else { - if (IsConstOrItsAdditiveInverse(l, var)){ - lhs = l; + if (isConstOrItsAdditiveInverse(l, var)){ + lhs.push_back(l); } else if (lexical_cast(l) != "0"){ - rhs.insert(additiveInverse(l)); + rhs.push_back(additiveInverse(l)); } } @@ -170,34 +220,51 @@ namespace ufo if (isOpX(r)){ for (unsigned i = 0; i < r->arity (); i++){ Expr a = r->arg(i); - if (IsConstOrItsAdditiveInverse(a, var)){ - lhs = additiveInverse(a); - continue; + if (isConstOrItsAdditiveInverse(a, var)){ + lhs.push_back(additiveInverse(a)); + } else { + rhs.push_back(a); } - rhs.insert(a); + } + } else if (isOpX(r)){ + if (isConstOrItsAdditiveInverse(r->left(), var)){ + lhs.push_back(additiveInverse(r->left())); + } else { + rhs.push_back(r->left()); + } + if (isConstOrItsAdditiveInverse(r->right(), var)){ + lhs.push_back(r->right()); + } else { + rhs.push_back(r->right()); } } else { - if (IsConstOrItsAdditiveInverse(r, var)){ - lhs = additiveInverse(r); + if (isConstOrItsAdditiveInverse(r, var)){ + lhs.push_back(additiveInverse(r)); } else if (lexical_cast(r) != "0"){ - rhs.insert(r); + rhs.push_back(r); } } // third, combine results; - if (lhs != 0){ - Expr rhsPlus; - if (rhs.size() > 1){ - rhsPlus = exprDistributor(mknary(rhs)); - } else if (rhs.size() == 1) { - rhsPlus = *rhs.begin(); - } else if (rhs.size() == 0) { - rhsPlus = mkTerm (mpz_class (0), e->getFactory()); - } - return mk(lhs,rhsPlus); + int coef = 0; + for (auto &a : lhs) + { + if (a == var) coef++; + if (a == additiveInverse(var)) coef--; } - return e; + + r = mkplus(rhs, e->getFactory()); + + if (coef == 0){ + l = mkTerm (mpz_class (0), e->getFactory()); + } else if (coef == 1){ + l = var; + } else { + l = mk(mkTerm (mpz_class (coef), e->getFactory()), var); + } + + return mk(l,r); } /** @@ -314,6 +381,8 @@ namespace ufo return rewriteHelperN(e); } else if (isOpX(e)){ return rewriteHelperN(e); + } else if (isOpX(e)){ + return rewriteHelperN(e); } return e; } @@ -329,6 +398,10 @@ namespace ufo return mk(e->arg(0), e->arg(1)); } else if (isOpX(e)){ return mk(e->arg(0), e->arg(1)); + } else if (isOpX(e)){ + return mk(e->arg(0), e->arg(1)); + } else if (isOpX(e)){ + return mk(e->arg(0), e->arg(1)); } } return a; @@ -354,6 +427,8 @@ namespace ufo return rewriteHelperM(e, var); } else if (isOpX(e)){ return rewriteHelperM(e, var); + } else if (isOpX(e)){ + return rewriteHelperM(e, var); } return e; } @@ -408,27 +483,6 @@ namespace ufo return false; } - template static Expr conjoin(Range& conjs, ExprFactory &efac){ - return - (conjs.size() == 0) ? mk(efac) : - (conjs.size() == 1) ? *conjs.begin() : - mknary(conjs); - } - - template static Expr disjoin(Range& disjs, ExprFactory &efac){ - return - (disjs.size() == 0) ? mk(efac) : - (disjs.size() == 1) ? *disjs.begin() : - mknary(disjs); - } - - template static Expr mkplus(Range& terms, ExprFactory &efac){ - return - (terms.size() == 0) ? mkTerm (mpz_class (0), efac) : - (terms.size() == 1) ? *terms.begin() : - mknary(terms); - } - /** * Simplifier Wrapper */ @@ -475,17 +529,19 @@ namespace ufo }; inline static Expr simplifiedPlus (Expr exp, Expr to_skip){ - ExprVector args; - Expr ret; + bool f = false; for (ENode::args_iterator it = exp->args_begin(), end = exp->args_end(); it != end; ++it){ - Expr a = *it; - if (a != to_skip) { - args.push_back (a); - } + if (*it == to_skip) f = true; + else args.push_back (*it); + } + + if (f == false) + { + args.push_back(additiveInverse(to_skip)); } if (args.size() == 1) { @@ -494,7 +550,7 @@ namespace ufo else if (args.size() == 2){ if (isOpX(args[0]) && !isOpX(args[1])) - ret = mk(args[1], args[0]->left()); + ret = mk(args[1], args[0]->left()); else if (!isOpX(args[0]) && isOpX(args[1])) ret = mk(args[0], args[1]->left()); @@ -503,13 +559,11 @@ namespace ufo } else { ret = mknary(args); } - return ret; } // return a - b inline static Expr simplifiedMinus (Expr a, Expr b){ - Expr ret = mk(a, b); if (a == b) { @@ -517,13 +571,12 @@ namespace ufo } else if (isOpX(a)){ - Expr res = simplifiedPlus(a, b); - if (res->arity() == a->arity() - 1) ret = res; + return simplifiedPlus(a, b); } else if (isOpX(b)){ Expr res = simplifiedPlus(b, a); - if (res->arity() == b->arity() - 1) ret = mk(res); + return mk(res); } else if (isOpX(a)){ @@ -1054,26 +1107,29 @@ namespace ufo (conjs.size() == 1) ? *conjs.begin() : mknary(conjs); } - - + inline int intersectSize(ExprVector& a, ExprVector& b){ ExprSet c; for (auto &var: a) if (find(b.begin(), b.end(), var) != b.end()) c.insert(var); return c.size(); } - + + inline static Expr simplifyArithmDisjunctions(Expr term); + inline static void productAnd (ExprSet& as, ExprSet& bs, ExprSet& ps) { for (auto &a : as) { for (auto &b : bs) { - ps.insert(mk(a, b)); + Expr orredExpr = simplifyArithmDisjunctions(mk(a, b)); + if (!isOpX(orredExpr)) + ps.insert(orredExpr); } } } - + // ab \/ cde \/ f => // (a \/ c \/ f) /\ (a \/ d \/ f) /\ (a \/ e \/ f) /\ // (b \/ c \/ f) /\ (b \/ d \/ f) /\ (b \/ e \/ f) @@ -1101,7 +1157,6 @@ namespace ufo productAnd(dconjs[i], older, newer); older = newer; } - return conjoin (newer, exp->getFactory()); } @@ -1379,7 +1434,124 @@ namespace ufo return res; } - + + inline static bool isLinearCombination(Expr term) + { + // an approximation of.. + if (isNumericConst(term)) { + return false; + } + else if (bind::isIntConst(term)) { + return true; + } + else if (isOpX(term)) { + bool res = false; + for (auto it = term->args_begin(), end = term->args_end(); it != end; ++it){ + res = res || isLinearCombination(*it); + } + return res; + } + else if (isOpX(term) || isOpX(term) || isOpX(term)) { + bool res = true; + for (auto it = term->args_begin(), end = term->args_end(); it != end; ++it){ + res = res && isLinearCombination(*it); + } + return res; + } + return false; + } + + inline static Expr simplifyArithmDisjunctions(Expr term) + { + // a simple simplifier; to be enhanced + + ExprSet dsjs; + getDisj(term, dsjs); + if (dsjs.size() < 2) return term; + + ExprSet vars; + + // search for a var, const*var or whatever exists in any disjunct + for (auto & d : dsjs) { + if (isOpX(d)) return d; + + if (!isOp(d)) continue; + + Expr lhs = d->arg(0); + Expr rhs = d->arg(1); + if (isLinearCombination(lhs)) vars.insert(lhs); + if (isLinearCombination(rhs)) vars.insert(rhs); + } + + if (vars.size() == 0) return term; + + for (auto &var : vars) { + + int cur_min_gt = INT_MAX; // maintain several vars + int cur_min_ge = INT_MAX; // to avoid introducing new constants + int cur_max_lt = INT_MIN; + int cur_max_le = INT_MIN; + + for (auto it = dsjs.begin(); it != dsjs.end(); ) { + auto d = *it; + + if (!isOp(d)) { ++it; continue; } + + Expr rewritten = ineqMover(d, var); + + if (isNumericConst(rewritten->arg(0)) && + isNumericConst(rewritten->arg(1))) { + + if (evaluateCmpConsts(rewritten, lexical_cast(rewritten->arg(0)), + lexical_cast(rewritten->arg(1)))){ + return mk(d->getFactory()); + } else { + dsjs.erase(it++); + continue; + } + } + + if (rewritten->arg(0) != var) { + rewritten = ineqReverter(rewritten); + if (rewritten->arg(0) != var) { ++it; continue; } + } + + if (!isNumericConst(rewritten->arg(1))) { ++it; continue; } + + int c = lexical_cast(rewritten->arg(1)); + + if (isOpX(rewritten)) { cur_max_le = max(cur_max_le, c); } + if (isOpX(rewritten)) { cur_min_ge = min(cur_min_ge, c); } + if (isOpX(rewritten)) { cur_max_lt = max(cur_max_lt, c); } + if (isOpX(rewritten)) { cur_min_gt = min(cur_min_gt, c); } + + if (max(cur_max_le+1, cur_max_lt) > min(cur_min_ge-1,cur_min_gt)) + return mk(term->getFactory()); + + dsjs.erase(it++); + } + + if (cur_min_ge != INT_MAX) { + Expr minExpr = mk(var, mkTerm (mpz_class (cur_min_ge), term->getFactory())); + dsjs.insert(minExpr); + } + if (cur_min_gt != INT_MAX) { + Expr minExpr = mk(var, mkTerm (mpz_class (cur_min_gt), term->getFactory())); + dsjs.insert(minExpr); + } + if (cur_max_le != INT_MIN) { + Expr maxExpr = mk(var, mkTerm (mpz_class (cur_max_le), term->getFactory())); + dsjs.insert(maxExpr); + } + if (cur_max_lt != INT_MIN) { + Expr maxExpr = mk(var, mkTerm (mpz_class (cur_max_lt), term->getFactory())); + dsjs.insert(maxExpr); + } + } + + return disjoin(dsjs, term->getFactory()); + } + inline static Expr normalizeAtom(Expr term, ExprVector& intVars) { if (isOp(term)) diff --git a/include/deep/CodeSampler.hpp b/include/deep/CodeSampler.hpp index b782e9a0b..3fc85050c 100644 --- a/include/deep/CodeSampler.hpp +++ b/include/deep/CodeSampler.hpp @@ -2,7 +2,6 @@ #define CODESAMPLER__HPP__ #define MAXVARNM 10 -//#define MAXTSIZE 100 #include "ae/ExprSimpl.hpp" @@ -140,10 +139,6 @@ namespace ufo void addSample(Expr term) { - // if (treeSize(term) > MAXTSIZE) // don't consider too huge templates - // { - // return; - // } ExprSet actualVars; ExprSet subsetInvVars; @@ -194,17 +189,15 @@ namespace ufo } else if (isOpX(term)) { - if (!containsOp(term)) + if (containsOp(term)) { - addSample(term); // add any disjunct as a sample; + Expr term2 = convertToGEandGT(rewriteOrAnd(term)); + populateArityAndTemplates(term2); } else { - if (term->arity() < 5) // skip in case of big formulas (otherwise the formula blows up exponentially) - { // constant is hardcoded.. we can try something larger - Expr term2 = rewriteOrAnd(term); - populateArityAndTemplates(term2); - } + Expr term2 = convertToGEandGT(simplifyArithmDisjunctions(term)); + addSample(term2); // add any disjunct as a sample; } } else if (isOpX(term)) @@ -229,96 +222,7 @@ namespace ufo } } - void shrinkConstantsSet() - { - if (intConsts.size() < MAXVARNM) return; - - Expr maxPosE; - Expr minPosE; - Expr maxNegE; - Expr minNegE; - - int maxPos = 0; - int minPos = INT_MAX; - int maxNeg = INT_MIN; - int minNeg = 0; - - - bool hasPos = false; - bool hasNeg = false; - - for (auto curint: intConsts) - { - if (curint > 0) - { - hasPos = true; - maxPos = max (maxPos, curint); - minPos = min (minPos, curint); - } - else if (curint < 0) - { - hasNeg = true; - maxNeg = max (maxPos, curint); - minNeg = min (minPos, curint); - } - } - - intConsts.clear(); - - if (hasPos) - { - intConsts.insert(minPos); - intConsts.insert(maxPos); - } - - if (hasNeg) - { - intConsts.insert(minNeg); - intConsts.insert(maxNeg); - } - - // add again the "universal" constants - intConsts.insert(0); - intConsts.insert(1); - intConsts.insert(-1); - } - - // GF: here could be many possible heuristics; currently we use only constants - void shrinkTemplatesSet() - { - ExprSet newTmpls; - for (auto &tmpl : candidates) - { - ExprVector tmplConstsExpr; - expr::filter (tmpl, bind::IsHardIntConst(), std::inserter (tmplConstsExpr, tmplConstsExpr.begin ())); - - bool found = (tmplConstsExpr.size() == 0); - settmplConsts; - for (auto &c : tmplConstsExpr) tmplConsts.insert(lexical_cast (c)); - - if (!found) // if there are no constants in the template, keep it! - { - for (auto c1 : tmplConsts) - { - for (auto c2 : intConsts) - { - // GF: comparing the actual constant values: - if (c1 == 0 || c1 ==-1 || c1 == 1 || c1 == c2) - { - found = true; - break; - } - } - } - } - if (found) newTmpls.insert(tmpl); - } - candidates = newTmpls; - } - - // GF: todo: mine plus / minus numbers, check which signs of constants appear in the lhs / rhs of expressions - - void analyzeCode(bool samplecode, bool shrink) + void analyzeCode(bool samplecode) { if (false) // printing only { @@ -359,7 +263,7 @@ namespace ufo } else { - // get int constants (and shrink later) + // get int constants // GF: todo: make sure all constants in the code are Ints (otherwise, z3 could be unpredictable) ExprSet allNums; expr::filter (hr.body, bind::IsHardIntConst(), std::inserter (allNums, allNums.begin ())); @@ -371,12 +275,6 @@ namespace ufo if (c != 0) intCoefs.insert(c); } } - - if (shrink) - { - shrinkConstantsSet(); - shrinkTemplatesSet(); - } } }; } diff --git a/include/deep/RndLearner.hpp b/include/deep/RndLearner.hpp index cdc6c5a63..6029931e7 100644 --- a/include/deep/RndLearner.hpp +++ b/include/deep/RndLearner.hpp @@ -31,15 +31,14 @@ namespace ufo int all; bool densecode; // catch various statistics about the code (mostly, frequences) and setup the prob.distribution based on them - bool shrink; // consider only a small subset of int constants and samples from the code bool aggressivepruning; // aggressive pruning of the search space based on SAT/UNSAT (WARNING: may miss some invariants) public: - RndLearner (ExprFactory &efac, EZ3 &z3, CHCs& r, bool b1, bool b2, bool b3) : + RndLearner (ExprFactory &efac, EZ3 &z3, CHCs& r, bool b1, bool b2) : m_efac(efac), m_z3(z3), ruleManager(r), m_smt_solver (z3), u(efac), invNumber(0), all(0), - densecode(b1), shrink(b2), aggressivepruning(b3) {} + densecode(b1), aggressivepruning(b2) {} bool isTautology (Expr a) // adjusted for big disjunctions { @@ -84,7 +83,6 @@ namespace ufo // pushing body m_smt_solver.assertExpr (hr.body); - Expr cand1; Expr cand2; Expr lmApp; @@ -303,7 +301,7 @@ namespace ufo if (hr.dstRelation != invRel && hr.srcRelation != invRel) continue; css.push_back(CodeSampler(hr, invRel, lf.getVars(), lf.nonlinVars)); - css.back().analyzeCode(densecode, shrink); + css.back().analyzeCode(densecode); // convert intConsts to progConsts and add additive inverses (if applicable): for (auto &a : css.back().intConsts) @@ -505,14 +503,14 @@ namespace ufo }; - inline void learnInvariants(string smt, int maxAttempts, bool b1=true, bool b2=true, bool b3=true) + inline void learnInvariants(string smt, int maxAttempts, bool b1=true, bool b2=true) { ExprFactory m_efac; EZ3 z3(m_efac); CHCs ruleManager(m_efac, z3); ruleManager.parse(smt); - RndLearner ds(m_efac, z3, ruleManager, b1, b2, b3); + RndLearner ds(m_efac, z3, ruleManager, b1, b2); ds.setupSafetySolver(); diff --git a/tools/deep/DeepHorn.cpp b/tools/deep/DeepHorn.cpp index ec99135d0..738fdb02c 100644 --- a/tools/deep/DeepHorn.cpp +++ b/tools/deep/DeepHorn.cpp @@ -15,14 +15,11 @@ int main (int argc, char ** argv) bool densecode = true; //default if (argc > 3) densecode = atoi(argv[2]); - - bool shrink = true; //default - if (argc > 4) shrink = atoi(argv[3]); bool aggressivepruning = true; //default - if (argc > 5) aggressivepruning = atoi(argv[4]); + if (argc > 4) aggressivepruning = atoi(argv[3]); - learnInvariants(string(argv[argc-1]), maxAttempts, densecode, shrink, aggressivepruning); + learnInvariants(string(argv[argc-1]), maxAttempts, densecode, aggressivepruning); return 0; } From f19ab3a7ca1860fb3fc43cc6e78b86d9b076fc69 Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Wed, 9 Aug 2017 09:09:38 -0700 Subject: [PATCH 031/236] reconsidered epsilon frequencies: now probabilistic --- include/deep/LinCom.hpp | 153 +++++++++++++++++++++++++++++++++--- include/deep/RndLearner.hpp | 65 +++++++-------- 2 files changed, 177 insertions(+), 41 deletions(-) diff --git a/include/deep/LinCom.hpp b/include/deep/LinCom.hpp index 4f29f2c4e..f3342e8b2 100644 --- a/include/deep/LinCom.hpp +++ b/include/deep/LinCom.hpp @@ -3,7 +3,9 @@ #define DEFAULTARITY 2 #define PRIORNOVISIT 0 -#define PRIORSTEP 15 +#define PRIORSTEP 30 +#define FREQCOEF 15 +#define EPSILONFRACTION 5 #include "Distribution.hpp" #include "ae/ExprSimpl.hpp" @@ -1030,26 +1032,26 @@ namespace ufo void initDensities(int ar) { - orAritiesDensity[ar] = 1; + orAritiesDensity[ar] = 0; for (int i = 1; i < vars.size() + 1; i++) { - plusAritiesDensity[ar][i] = 1; + plusAritiesDensity[ar][i] = 0; for (int j = 0; j < intCoefs.size(); j++) { - coefDensity[ar][i-1][j] = 1; + coefDensity[ar][i-1][j] = 0; } } for (int i = 0; i < intConsts.size(); i++) { - intConstDensity[ar][i] = 1; + intConstDensity[ar][i] = 0; } for (int i = 0; i < cmpOps.size(); i++) { - cmpOpDensity[ar][i] = 1; + cmpOpDensity[ar][i] = 0; } // preparing var densities; @@ -1065,11 +1067,143 @@ namespace ufo for (int j = 0; j < varCombinations[ar].back().size(); j++) { - varDensity[ar].back()[j] = 1; + varDensity[ar].back()[j] = 0; } } } - + + int getEpsilon(int min_freq, int num_zeros) + { + if (num_zeros == 0) return 1; + + // somewhat naive function; could be made dependent on other parameters, + // not only on the minimum frequency and number of zero-frequencies... + return 1 + + ((min_freq == INT_MAX) ? 0 : + guessUniformly(min_freq) / num_zeros / EPSILONFRACTION); + } + + void stabilizeDensities(set& arities) + { + int min_freq, eps = INT_MAX; + int num_zeros = 0; + + for (auto & ar : orAritiesDensity) + { + if (ar.second == 0) num_zeros++; + else + { + ar.second *= FREQCOEF; + min_freq = min(min_freq, ar.second); + } + } + + eps = getEpsilon(min_freq, num_zeros); + for (auto & ar : orAritiesDensity) + { + if (ar.second == 0) ar.second = eps; + } + + for (auto & ar : arities) + { + min_freq = INT_MAX; + num_zeros = 0; + for (auto & pl : plusAritiesDensity[ar]) + { + if (pl.second == 0) num_zeros++; + else + { + pl.second *= FREQCOEF; + min_freq = min(min_freq, pl.second); + } + } + + eps = getEpsilon(min_freq, num_zeros); + for (auto & pl : plusAritiesDensity[ar]) + { + if (pl.second == 0) pl.second = eps; + } + + for (int i = 0; i < vars.size(); i++) + { + min_freq = INT_MAX; + num_zeros = 0; + for (auto & c : coefDensity[ar][i]) + { + if (c.second == 0) num_zeros++; + else + { + c.second *= FREQCOEF; + min_freq = min(min_freq, c.second); + } + } + + eps = getEpsilon(min_freq, num_zeros); + for (auto & c : coefDensity[ar][i]) + { + if (c.second == 0) c.second = eps; + } + } + + min_freq = INT_MAX; + num_zeros = 0; + for (auto & c : intConstDensity[ar]) + { + if (c.second == 0) num_zeros++; + else + { + c.second *= FREQCOEF; + min_freq = min(min_freq, c.second); + } + } + + eps = getEpsilon(min_freq, num_zeros); + for (auto & c : intConstDensity[ar]) + { + if (c.second == 0) c.second = eps; + } + + min_freq = INT_MAX; + num_zeros = 0; + for (auto & c : cmpOpDensity[ar]) + { + if (c.second == 0) num_zeros++; + else + { + c.second *= FREQCOEF; + min_freq = min(min_freq, c.second); + } + } + + eps = getEpsilon(min_freq, num_zeros); + for (auto & c : cmpOpDensity[ar]) + { + if (c.second == 0) c.second = eps; + } + + for (int i = 0; i < varDensity[ar].size(); i++) + { + min_freq = INT_MAX; + num_zeros = 0; + for (auto &b : varDensity[ar][i]) + { + if (b.second == 0) num_zeros++; + else + { + b.second *= FREQCOEF; + min_freq = min(min_freq, b.second); + } + } + + eps = getEpsilon(min_freq, num_zeros); + for (auto &b : varDensity[ar][i]) + { + if (b.second == 0) b.second = eps; + } + } + } + } + void printCodeStatistics(set& arities) { outs() << "Int consts:\n"; @@ -1107,10 +1241,9 @@ namespace ufo { for (auto &b : varDensity[ar][i]) { - outs() << " Var Combination density: "; - for ( int j : varCombinations[ar][i][b.first]) + for (int j : varCombinations[ar][i][b.first]) { outs() << *vars[j] << ", "; } diff --git a/include/deep/RndLearner.hpp b/include/deep/RndLearner.hpp index 6029931e7..dfd8c96ee 100644 --- a/include/deep/RndLearner.hpp +++ b/include/deep/RndLearner.hpp @@ -284,10 +284,10 @@ namespace ufo lf.addVar(var); } - doCodeSampling (decls.back(), lf); + doCodeSampling (decls.back(), lf, true); } - void doCodeSampling(Expr invRel, LAfactory& lf) + void doCodeSampling(Expr invRel, LAfactory& lf, bool print=false) { vector css; set orArities; @@ -318,11 +318,14 @@ namespace ufo } } - outs() << "Multed vars: "; - for (auto &a : lf.nonlinVars) + if (print && lf.nonlinVars.size() > 0) { - outs() << *a.first << " = " << *a.second << "\n"; - lf.addVar(a.second); + outs() << "Multed vars: "; + for (auto &a : lf.nonlinVars) + { + outs() << *a.first << " = " << *a.second << "\n"; + lf.addVar(a.second); + } } for (auto &a : intCoefs) if (a != 0) lf.addIntCoef(a); @@ -381,32 +384,26 @@ namespace ufo if (densecode) { - int multip = PRIORSTEP; // will add +PRIORSTEP to every occurrence - - // or, alternatively multip can depend on the type of CHC: - // if (cs.hr.isFact) multip = 1; - // else if (cs.hr.isQuery) multip = 2 * PRIORSTEP; - // else multip = PRIORSTEP; + // collect number of occurrences.... + for (auto &lcs : lcss) { int ar = lcs.arity; - // specify weights for OR arity - lf.orAritiesDensity[ar] += multip; + + // of arities of application of OR + lf.orAritiesDensity[ar] ++; - for (int i = 0; i < ar; i++) + for (auto & lc : lcs.dstate) { - LAterm& lc = lcs.dstate[i]; - - // specify weights for PLUS arity - lf.plusAritiesDensity[ar][lc.arity] += multip; + // of arities of application of PLUS + lf.plusAritiesDensity[ar][lc.arity] ++; - // specify weights for const - lf.intConstDensity[ar][lc.intconst] += multip; + // of constants + lf.intConstDensity[ar][lc.intconst] ++; - // specify weights for comparison operation - lf.cmpOpDensity[ar][lc.cmpop] += multip; + // of comparison operations + lf.cmpOpDensity[ar][lc.cmpop] ++; - // specify weights for var combinations set vars; int vars_id = -1; for (int j = 0; j < lc.vcs.size(); j = j+2) vars.insert(lc.vcs[j]); @@ -419,17 +416,24 @@ namespace ufo } } assert(vars_id >= 0); - lf.varDensity[ar][lc.arity][vars_id] += multip; - + + // of variable combinations + lf.varDensity[ar][lc.arity][vars_id] ++; + + // of variable coefficients for (int j = 1; j < lc.vcs.size(); j = j+2) { - lf.coefDensity[ ar ][ lc.vcs [j-1] ] [lc.vcs [j] ] += multip; + lf.coefDensity[ ar ][ lc.vcs [j-1] ] [lc.vcs [j] ] ++; } } } - outs() << "\nStatistics for " << *invRel << ":\n"; - lf.printCodeStatistics(orArities); + lf.stabilizeDensities(orArities); + if (print) + { + outs() << "\nStatistics for " << *invRel << ":\n"; + lf.printCodeStatistics(orArities); + } } } @@ -438,8 +442,6 @@ namespace ufo bool success = false; int iter = 1; - std::srand(std::time(0)); - for (int i = 0; i < maxAttempts; i++) { // first, guess candidates for each inv.declaration @@ -513,6 +515,7 @@ namespace ufo RndLearner ds(m_efac, z3, ruleManager, b1, b2); ds.setupSafetySolver(); + std::srand(std::time(0)); if (ruleManager.decls.size() > 1) { From bb87c20520b5031055a7e56dd85691431bcfc740 Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Thu, 10 Aug 2017 18:43:06 -0700 Subject: [PATCH 032/236] bigger space for the probabilities & priorities tuning; and a user-friendly interface --- include/deep/CodeSampler.hpp | 47 ++++++++---------------- include/deep/LinCom.hpp | 29 ++++++++------- include/deep/RndLearner.hpp | 70 +++++++++++++++++++++++++++++------- tools/deep/DeepHorn.cpp | 59 +++++++++++++++++++++++------- 4 files changed, 133 insertions(+), 72 deletions(-) diff --git a/include/deep/CodeSampler.hpp b/include/deep/CodeSampler.hpp index 3fc85050c..cd6910f59 100644 --- a/include/deep/CodeSampler.hpp +++ b/include/deep/CodeSampler.hpp @@ -1,8 +1,6 @@ #ifndef CODESAMPLER__HPP__ #define CODESAMPLER__HPP__ -#define MAXVARNM 10 - #include "ae/ExprSimpl.hpp" using namespace std; @@ -222,7 +220,7 @@ namespace ufo } } - void analyzeCode(bool samplecode) + void analyzeCode() { if (false) // printing only { @@ -237,42 +235,25 @@ namespace ufo intCoefs.insert(1); intConsts.insert(0); - + // get samples and normalize - if (samplecode) + // for the query: add a negation of the entire non-recursive part: + if (hr.isQuery) { - // for the query: add a negation of the entire non-recursive part: - if (hr.isQuery) - { - Expr massaged = propagateEqualities(hr.body); - massaged = unfoldITE(mkNeg(massaged)); - massaged = convertToGEandGT(massaged); - populateArityAndTemplates(massaged); - } - else - { - // for others: the entire non-recursive part - for (auto &cnj : hr.lin) - { - // GF: todo: make sure all constants in the code are Ints (otherwise, z3 could be unpredictable) - Expr massaged = unfoldITE(cnj); - massaged = convertToGEandGT(massaged); - populateArityAndTemplates(massaged); - } - } + Expr massaged = propagateEqualities(hr.body); + massaged = unfoldITE(mkNeg(massaged)); + massaged = convertToGEandGT(massaged); + populateArityAndTemplates(massaged); } else { - // get int constants - // GF: todo: make sure all constants in the code are Ints (otherwise, z3 could be unpredictable) - ExprSet allNums; - expr::filter (hr.body, bind::IsHardIntConst(), std::inserter (allNums, allNums.begin ())); - - for (auto &a : allNums) + // for others: the entire non-recursive part + for (auto &cnj : hr.lin) { - int c = lexical_cast(a); - intConsts.insert(c); - if (c != 0) intCoefs.insert(c); + // GF: todo: make sure all constants in the code are Ints (otherwise, z3 could be unpredictable) + Expr massaged = unfoldITE(cnj); + massaged = convertToGEandGT(massaged); + populateArityAndTemplates(massaged); } } } diff --git a/include/deep/LinCom.hpp b/include/deep/LinCom.hpp index f3342e8b2..1db382000 100644 --- a/include/deep/LinCom.hpp +++ b/include/deep/LinCom.hpp @@ -225,11 +225,10 @@ namespace ufo ExprSet learntExprs; // lemmas from learntLemmas map> ineqPriors; map> visited; - bool densecode; bool aggressivepruning; LAfactory(ExprFactory &_efac, bool _densecode=true, bool _aggressivepruning=true) : - m_efac(_efac), densecode(_densecode), aggressivepruning(_aggressivepruning) + m_efac(_efac), aggressivepruning(_aggressivepruning) {}; void addVar(Expr var) @@ -797,7 +796,7 @@ namespace ufo reInitialize(id, disj); } - if (densecode && isDefault(distrs[disj])) // if it's the first time we look at this lin.combination, + if (isDefault(distrs[disj])) // if it's the first time we look at this lin.combination, { // we might want to guess a candidate based on the code curLAterm.intconst = chooseByWeight(intConstDensity[ar]); curLAterm.cmpop = chooseByWeight(cmpOpDensity[ar]); @@ -951,12 +950,12 @@ namespace ufo void assignPrioritiesForLearnt(LAdisj& learnt) { + if (!aggressivepruning) return; + vector eqs; getEquivalentFormulas(learnt, eqs); for (auto &a : eqs) prioritiesLearnt (a); - - if (!aggressivepruning) return; - + if (learnt.arity == 1) { LAdisj t; @@ -1083,10 +1082,10 @@ namespace ufo guessUniformly(min_freq) / num_zeros / EPSILONFRACTION); } - void stabilizeDensities(set& arities) + void stabilizeDensities(set& arities, bool addEpsilon) { - int min_freq, eps = INT_MAX; - int num_zeros = 0; + int min_freq = INT_MAX; + int num_zeros, eps = 0; for (auto & ar : orAritiesDensity) { @@ -1098,7 +1097,7 @@ namespace ufo } } - eps = getEpsilon(min_freq, num_zeros); + if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); for (auto & ar : orAritiesDensity) { if (ar.second == 0) ar.second = eps; @@ -1118,7 +1117,7 @@ namespace ufo } } - eps = getEpsilon(min_freq, num_zeros); + if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); for (auto & pl : plusAritiesDensity[ar]) { if (pl.second == 0) pl.second = eps; @@ -1138,7 +1137,7 @@ namespace ufo } } - eps = getEpsilon(min_freq, num_zeros); + if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); for (auto & c : coefDensity[ar][i]) { if (c.second == 0) c.second = eps; @@ -1157,7 +1156,7 @@ namespace ufo } } - eps = getEpsilon(min_freq, num_zeros); + if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); for (auto & c : intConstDensity[ar]) { if (c.second == 0) c.second = eps; @@ -1175,7 +1174,7 @@ namespace ufo } } - eps = getEpsilon(min_freq, num_zeros); + if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); for (auto & c : cmpOpDensity[ar]) { if (c.second == 0) c.second = eps; @@ -1195,7 +1194,7 @@ namespace ufo } } - eps = getEpsilon(min_freq, num_zeros); + if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); for (auto &b : varDensity[ar][i]) { if (b.second == 0) b.second = eps; diff --git a/include/deep/RndLearner.hpp b/include/deep/RndLearner.hpp index dfd8c96ee..9a26ccf0d 100644 --- a/include/deep/RndLearner.hpp +++ b/include/deep/RndLearner.hpp @@ -31,14 +31,15 @@ namespace ufo int all; bool densecode; // catch various statistics about the code (mostly, frequences) and setup the prob.distribution based on them + bool addepsilon; // add some small probability to features that never happen in the code bool aggressivepruning; // aggressive pruning of the search space based on SAT/UNSAT (WARNING: may miss some invariants) public: - RndLearner (ExprFactory &efac, EZ3 &z3, CHCs& r, bool b1, bool b2) : + RndLearner (ExprFactory &efac, EZ3 &z3, CHCs& r, bool b1, bool b2, bool b3) : m_efac(efac), m_z3(z3), ruleManager(r), m_smt_solver (z3), u(efac), invNumber(0), all(0), - densecode(b1), aggressivepruning(b2) {} + densecode(b1), addepsilon(b2), aggressivepruning(b3) {} bool isTautology (Expr a) // adjusted for big disjunctions { @@ -236,7 +237,7 @@ namespace ufo for(auto ind : rels2update) { vector& lf = lfs[ind]; - lf.push_back(LAfactory (m_efac, densecode, aggressivepruning)); + lf.push_back(LAfactory (m_efac, aggressivepruning)); LAfactory& lf_before = lf[lf.size()-2]; LAfactory& lf_after = lf.back(); @@ -272,7 +273,7 @@ namespace ufo curCandidates.push_back(NULL); lfs.push_back(vector ()); - lfs.back().push_back(LAfactory (m_efac, densecode, aggressivepruning)); + lfs.back().push_back(LAfactory (m_efac, aggressivepruning)); LAfactory& lf = lfs.back().back(); invNumber++; @@ -301,7 +302,7 @@ namespace ufo if (hr.dstRelation != invRel && hr.srcRelation != invRel) continue; css.push_back(CodeSampler(hr, invRel, lf.getVars(), lf.nonlinVars)); - css.back().analyzeCode(densecode); + css.back().analyzeCode(); // convert intConsts to progConsts and add additive inverses (if applicable): for (auto &a : css.back().intConsts) @@ -427,14 +428,59 @@ namespace ufo } } } - - lf.stabilizeDensities(orArities); - if (print) + } + else + { + // same thing as in above; but instead of precise frequencies, we gather a rough presence + for (auto &lcs : lcss) { - outs() << "\nStatistics for " << *invRel << ":\n"; - lf.printCodeStatistics(orArities); + int ar = lcs.arity; + + // of arities of application of OR + lf.orAritiesDensity[ar] = 1; + + for (auto & lc : lcs.dstate) + { + // of arities of application of PLUS + lf.plusAritiesDensity[ar][lc.arity] = 1; + + // of constants + lf.intConstDensity[ar][lc.intconst] = 1; + + // of comparison operations + lf.cmpOpDensity[ar][lc.cmpop] = 1; + + set vars; + int vars_id = -1; + for (int j = 0; j < lc.vcs.size(); j = j+2) vars.insert(lc.vcs[j]); + for (int j = 0; j < lf.varCombinations[ar][lc.arity].size(); j++) + { + if (lf.varCombinations[ar][lc.arity][j] == vars) + { + vars_id = j; + break; + } + } + assert(vars_id >= 0); + + // of variable combinations + lf.varDensity[ar][lc.arity][vars_id] = 1; + + // of variable coefficients + for (int j = 1; j < lc.vcs.size(); j = j+2) + { + lf.coefDensity[ ar ][ lc.vcs [j-1] ] [lc.vcs [j] ] = 1; + } + } } } + + lf.stabilizeDensities(orArities, addepsilon); + if (print) + { + outs() << "\nStatistics for " << *invRel << ":\n"; + lf.printCodeStatistics(orArities); + } } void synthesize(int maxAttempts) @@ -505,14 +551,14 @@ namespace ufo }; - inline void learnInvariants(string smt, int maxAttempts, bool b1=true, bool b2=true) + inline void learnInvariants(string smt, int maxAttempts, bool b1=true, bool b2=true, bool b3=true) { ExprFactory m_efac; EZ3 z3(m_efac); CHCs ruleManager(m_efac, z3); ruleManager.parse(smt); - RndLearner ds(m_efac, z3, ruleManager, b1, b2); + RndLearner ds(m_efac, z3, ruleManager, b1, b2, b3); ds.setupSafetySolver(); std::srand(std::time(0)); diff --git a/tools/deep/DeepHorn.cpp b/tools/deep/DeepHorn.cpp index 738fdb02c..cf610db4f 100644 --- a/tools/deep/DeepHorn.cpp +++ b/tools/deep/DeepHorn.cpp @@ -3,23 +3,58 @@ using namespace ufo; using namespace std; +bool getBoolOption(const char * opt, bool defValue, int argc, char ** argv) +{ + for (int i = 1; i < argc; i++) + { + if (strcmp(argv[i], opt) == 0) return true; + } + return defValue; +} + +int getIntValue(const char * opt, int defValue, int argc, char ** argv) +{ + for (int i = 1; i < argc-1; i++) + { + if (strcmp(argv[i], opt) == 0) + { + return atoi(argv[i+1]); + } + } + return defValue; +} + int main (int argc, char ** argv) { - if (argc == 1){ - outs() << "At least an input file should be given\n"; + const char *OPT_HELP = "--help"; + const char *OPT_MAX_ATTEMPTS = "--attempts"; + const char *OPT_GET_FREQS = "--freqs"; + const char *OPT_ADD_EPSILON = "--eps"; + const char *OPT_AGG_PRUNING = "--aggp"; + + if (getBoolOption(OPT_HELP, false, argc, argv) || argc == 1){ + outs () << + "* * * FreqHorn v.0.1 - Copyright (C) 2017 * * *\n" << + " Grigory Fedyukovich & Sam Kaufman \n\n" << + "Usage: Purpose:\n" << + " deephorn [--help] show help\n" << + " deephorn [options] discover invariants for a system of constrained Horn clauses\n" << + " (`file.smt2` in a datalog format extending SMT-LIB2)\n" << + "Options:\n" << + " " << OPT_MAX_ATTEMPTS << " maximal number of candidates to sample and check\n" << + " " << OPT_ADD_EPSILON << " add small probabilities to features that never happen in the code\n" << + " " << OPT_AGG_PRUNING << " prioritize and prune the search space aggressively\n" << + " " << OPT_GET_FREQS << " calculate frequency distributions and sample from them\n" << + " (if not specified, sample from uniform distributions)\n"; + return 0; } - - int maxAttempts = 2000000; //default - if (argc > 2) maxAttempts = atoi(argv[1]); - bool densecode = true; //default - if (argc > 3) densecode = atoi(argv[2]); - - bool aggressivepruning = true; //default - if (argc > 4) aggressivepruning = atoi(argv[3]); + int maxAttempts = getIntValue(OPT_MAX_ATTEMPTS, 2000000, argc, argv); + bool densecode = getBoolOption(OPT_GET_FREQS, false, argc, argv); + bool addepsilon = getBoolOption(OPT_ADD_EPSILON, false, argc, argv); + bool aggressivepruning = getBoolOption(OPT_AGG_PRUNING, false, argc, argv); - learnInvariants(string(argv[argc-1]), maxAttempts, densecode, aggressivepruning); - + learnInvariants(string(argv[argc-1]), maxAttempts, densecode, addepsilon, aggressivepruning); return 0; } From d317c25040be42e9b570aa2e8774042a8b6e4d4c Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Sun, 13 Aug 2017 21:41:54 -0700 Subject: [PATCH 033/236] engine to generate an inductive validity core --- include/ae/SMTUtils.hpp | 19 ++-- include/deep/LinCom.hpp | 2 +- include/deep/RndLearner.hpp | 169 +++++++++++++++++++++++++++++++++--- tools/CMakeLists.txt | 2 + tools/deep/DeepHorn.cpp | 33 +++++-- tools/ivc/CMakeLists.txt | 4 + tools/ivc/Ivc.cpp | 32 +++++++ 7 files changed, 233 insertions(+), 28 deletions(-) create mode 100644 tools/ivc/CMakeLists.txt create mode 100644 tools/ivc/Ivc.cpp diff --git a/include/ae/SMTUtils.hpp b/include/ae/SMTUtils.hpp index cfc6b56a1..3fd23a6c0 100644 --- a/include/ae/SMTUtils.hpp +++ b/include/ae/SMTUtils.hpp @@ -142,19 +142,24 @@ namespace ufo */ Expr removeRedundantConjuncts(Expr exp) { - ExprSet newCnjs; ExprSet conjs; getConj(exp, conjs); - + if (conjs.size() < 2) return exp; - - for (auto & cnj : conjs) // GF: todo: incremental solving + ExprSet newCnjs = conjs; + + for (auto & cnj : conjs) { - if (isTrue (cnj)) continue; + if (isTrue (cnj)) + { + newCnjs.erase(cnj); + continue; + } - if (isEquiv (conjoin(newCnjs, efac), mk(conjoin(newCnjs, efac), cnj))) continue; + ExprSet newCnjsTry = newCnjs; + newCnjsTry.erase(cnj); - newCnjs.insert(cnj); + if (isImplies (conjoin(newCnjsTry, efac), cnj)) newCnjs.erase(cnj); } return conjoin(newCnjs, efac); diff --git a/include/deep/LinCom.hpp b/include/deep/LinCom.hpp index 1db382000..ca91c3bde 100644 --- a/include/deep/LinCom.hpp +++ b/include/deep/LinCom.hpp @@ -227,7 +227,7 @@ namespace ufo map> visited; bool aggressivepruning; - LAfactory(ExprFactory &_efac, bool _densecode=true, bool _aggressivepruning=true) : + LAfactory(ExprFactory &_efac, bool _aggressivepruning) : m_efac(_efac), aggressivepruning(_aggressivepruning) {}; diff --git a/include/deep/RndLearner.hpp b/include/deep/RndLearner.hpp index 9a26ccf0d..494d3146f 100644 --- a/include/deep/RndLearner.hpp +++ b/include/deep/RndLearner.hpp @@ -6,6 +6,8 @@ #include "Distribution.hpp" #include "LinCom.hpp" #include "ae/SMTUtils.hpp" +#include +#include using namespace std; using namespace boost; @@ -135,6 +137,16 @@ namespace ufo } void assignPriorities() + { + for (int i = 0; i < invNumber; i++) + { + LAfactory& lf = lfs[i].back(); + if (isOpX(curCandidates[i])) lf.assignPrioritiesForFailed(lf.samples.back()); + else lf.assignPrioritiesForLearnt(lf.samples.back()); + } + } + + void reportCheckingResults() { for (int i = 0; i < invNumber; i++) { @@ -143,18 +155,39 @@ namespace ufo if (isOpX(cand)) { outs () << " => bad candidate for " << *decls[i] << "\n"; - lf.assignPrioritiesForFailed(lf.samples.back()); } else { outs () << " => learnt lemma for " << *decls[i] << "\n"; - lf.assignPrioritiesForLearnt(lf.samples.back()); lf.learntExprs.insert(cand); lf.learntLemmas.push_back(lf.samples.size() - 1); } } } + void resetLearntLemmas() + { + for (auto & lf : lfs) + { + lf.back().learntExprs.clear(); + lf.back().learntLemmas.clear(); + } + } + + void resetSafetySolver() + { + int num = 0; + for (auto &hr: ruleManager.chcs) + { + if (!hr.isQuery) continue; + + m_smt_safety_solvers[num].reset(); + m_smt_safety_solvers[num].assertExpr (hr.body); + safety_progress[num] = false; + num++; + } + } + bool checkSafety() { int num = 0; @@ -198,6 +231,20 @@ namespace ufo } } + void serializeInvariants(vector& invs, const char * outfile) + { + + ofstream invfile; + invfile.open (string(outfile)); + m_smt_solver.reset(); + + for (auto & i : invs) m_smt_solver.assertExpr(conjoin(i, m_efac)); + + m_smt_solver.toSmtLib (invfile); + invfile.flush (); + outs () << "\nInvariant serialized to " << outfile << "\n"; + } + void updateRels() { // this should not affect the learning process for a CHC system with one (declare-rel ...) @@ -246,7 +293,7 @@ namespace ufo lf_after.addVar(a); } - doCodeSampling(decls[ind], lf_after); + doCodeSampling(decls[ind]); for (auto a : lf_before.learntExprs) { @@ -284,11 +331,9 @@ namespace ufo Expr var = bind::mkConst(new_name, invDecl->arg(i)); lf.addVar(var); } - - doCodeSampling (decls.back(), lf, true); } - void doCodeSampling(Expr invRel, LAfactory& lf, bool print=false) + void doCodeSampling(Expr invRel, bool print=false) { vector css; set orArities; @@ -296,6 +341,9 @@ namespace ufo set progConsts; set intCoefs; + int ind = getVarIndex(invRel, decls); + LAfactory& lf = lfs[ind].back(); + // analize each rule separately: for (auto &hr : ruleManager.chcs) { @@ -483,7 +531,7 @@ namespace ufo } } - void synthesize(int maxAttempts) + void synthesize(int maxAttempts, char * outfile) { bool success = false; int iter = 1; @@ -533,10 +581,13 @@ namespace ufo if (checkSafety()) // query is checked here { success = true; - break; } } + reportCheckingResults(); + + if (success) break; + assignPriorities(); updateRels(); @@ -547,15 +598,43 @@ namespace ufo else outs () << "\nNo success after " << maxAttempts << " iterations\n"; outs () << " total number of SMT checks: " << all << "\n"; + + if (success && outfile != NULL) + { + vector invs; + for (auto & lf : lfs) invs.push_back(lf.back().learntExprs); + serializeInvariants(invs, outfile); + } + } + + void checkAllLemmas(vector& lms, vector& curMinLms, int& numTries, int invInd) + { + numTries++; + resetSafetySolver(); + resetLearntLemmas(); + for (int i = 0; i < invNumber; i++) curCandidates[i] = conjoin(lms[i], m_efac); + + if (checkCandidates() && checkSafety()) + { + if (lms[invInd].size() < curMinLms[invInd].size()) curMinLms[invInd] = lms[invInd]; + + for (auto & a : lms[invInd]) + { + vector lmsTry = lms; + lmsTry[invInd].erase(a); + + checkAllLemmas(lmsTry, curMinLms, numTries, invInd); + } + } } }; - inline void learnInvariants(string smt, int maxAttempts, bool b1=true, bool b2=true, bool b3=true) + inline void learnInvariants(string smt, char * outfile, int maxAttempts, bool b1=true, bool b2=true, bool b3=true) { ExprFactory m_efac; EZ3 z3(m_efac); - + CHCs ruleManager(m_efac, z3); ruleManager.parse(smt); RndLearner ds(m_efac, z3, ruleManager, b1, b2, b3); @@ -572,10 +651,78 @@ namespace ufo for (auto& dcl: ruleManager.decls) { ds.initializeDecl(dcl); + ds.doCodeSampling (dcl->arg(0), true); } - ds.synthesize(maxAttempts); + ds.synthesize(maxAttempts, outfile); }; + + + inline void getInductiveValidityCore (const char * chcfile, const char * invfile) + { + ExprFactory m_efac; + EZ3 z3(m_efac); + + CHCs ruleManager(m_efac, z3); + ruleManager.parse(string(chcfile)); + RndLearner ds(m_efac, z3, ruleManager, false, false, false); + ds.setupSafetySolver(); + + vector invNames; + for (auto& dcl: ruleManager.decls) + { + ds.initializeDecl(dcl); + invNames.push_back(lexical_cast(dcl->arg(0))); + } + + Expr invTmp = z3_from_smtlib_file (z3, invfile); + + vector invs; + if (ruleManager.decls.size() == 1) invs.push_back(invTmp); + else + { + // each assert in invfile corresponds to an invariant + // after deserialization, all asserts are conjoined; so we need to split them now + for (int i = 0; i < ruleManager.decls.size(); i++) + { + invs.push_back(invTmp->arg(i)); + } + } + + vector lms; + vector> sizeHistories; + + for (auto & inv : invs) + { + vector sizeHistory; + sizeHistory.push_back(isOpX(inv) ? inv->arity() : (isOpX(inv) ? 0 : 1)); + + SMTUtils u(m_efac); + inv = u.removeRedundantConjuncts(inv); // rough simplification first + + sizeHistory.push_back(isOpX(inv) ? inv->arity() : (isOpX(inv) ? 0 : 1)); + sizeHistories.push_back(sizeHistory); + + ExprSet lm; + getConj(inv, lm); + lms.push_back(lm); + } + + vector lmsMin = lms; + + for (int i = 0; i < invs.size(); i++) + { + outs () << "Size reduction for " << invNames[i] << ": "; + for (auto a : sizeHistories[i]) outs () << a << " -> "; + int numTries = 0; + ds.checkAllLemmas(lms, lmsMin, numTries, i); // accurate simplification then + assert (numTries > 1); + + outs () << lmsMin[i].size() << "\n"; + } + + ds.serializeInvariants(lmsMin, invfile); + } } #endif diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index 62a37b653..2ec03d459 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -3,3 +3,5 @@ add_subdirectory(aeval) add_subdirectory(bnd) add_subdirectory(deep) + +add_subdirectory(ivc) diff --git a/tools/deep/DeepHorn.cpp b/tools/deep/DeepHorn.cpp index cf610db4f..e6b15f3ed 100644 --- a/tools/deep/DeepHorn.cpp +++ b/tools/deep/DeepHorn.cpp @@ -3,7 +3,7 @@ using namespace ufo; using namespace std; -bool getBoolOption(const char * opt, bool defValue, int argc, char ** argv) +bool getBoolValue(const char * opt, bool defValue, int argc, char ** argv) { for (int i = 1; i < argc; i++) { @@ -12,6 +12,18 @@ bool getBoolOption(const char * opt, bool defValue, int argc, char ** argv) return defValue; } +char * getStrValue(const char * opt, char * defValue, int argc, char ** argv) +{ + for (int i = 1; i < argc-1; i++) + { + if (strcmp(argv[i], opt) == 0) + { + return argv[i+1]; + } + } + return defValue; +} + int getIntValue(const char * opt, int defValue, int argc, char ** argv) { for (int i = 1; i < argc-1; i++) @@ -28,11 +40,12 @@ int main (int argc, char ** argv) { const char *OPT_HELP = "--help"; const char *OPT_MAX_ATTEMPTS = "--attempts"; + const char *OPT_OUT_FILE = "--out"; const char *OPT_GET_FREQS = "--freqs"; const char *OPT_ADD_EPSILON = "--eps"; const char *OPT_AGG_PRUNING = "--aggp"; - if (getBoolOption(OPT_HELP, false, argc, argv) || argc == 1){ + if (getBoolValue(OPT_HELP, false, argc, argv) || argc == 1){ outs () << "* * * FreqHorn v.0.1 - Copyright (C) 2017 * * *\n" << " Grigory Fedyukovich & Sam Kaufman \n\n" << @@ -41,7 +54,8 @@ int main (int argc, char ** argv) " deephorn [options] discover invariants for a system of constrained Horn clauses\n" << " (`file.smt2` in a datalog format extending SMT-LIB2)\n" << "Options:\n" << - " " << OPT_MAX_ATTEMPTS << " maximal number of candidates to sample and check\n" << + " " << OPT_MAX_ATTEMPTS << " maximal number of candidates to sample and check\n" << + " " << OPT_OUT_FILE << " serialize invariants to `file.smt2`\n" << " " << OPT_ADD_EPSILON << " add small probabilities to features that never happen in the code\n" << " " << OPT_AGG_PRUNING << " prioritize and prune the search space aggressively\n" << " " << OPT_GET_FREQS << " calculate frequency distributions and sample from them\n" << @@ -49,12 +63,13 @@ int main (int argc, char ** argv) return 0; } - + int maxAttempts = getIntValue(OPT_MAX_ATTEMPTS, 2000000, argc, argv); - bool densecode = getBoolOption(OPT_GET_FREQS, false, argc, argv); - bool addepsilon = getBoolOption(OPT_ADD_EPSILON, false, argc, argv); - bool aggressivepruning = getBoolOption(OPT_AGG_PRUNING, false, argc, argv); - - learnInvariants(string(argv[argc-1]), maxAttempts, densecode, addepsilon, aggressivepruning); + bool densecode = getBoolValue(OPT_GET_FREQS, false, argc, argv); + bool addepsilon = getBoolValue(OPT_ADD_EPSILON, false, argc, argv); + bool aggressivepruning = getBoolValue(OPT_AGG_PRUNING, false, argc, argv); + char * outfile = getStrValue(OPT_OUT_FILE, NULL, argc, argv); + + learnInvariants(string(argv[argc-1]), outfile, maxAttempts, densecode, addepsilon, aggressivepruning); return 0; } diff --git a/tools/ivc/CMakeLists.txt b/tools/ivc/CMakeLists.txt new file mode 100644 index 000000000..cffc00614 --- /dev/null +++ b/tools/ivc/CMakeLists.txt @@ -0,0 +1,4 @@ +add_executable (ivc Ivc.cpp) +target_link_libraries (ivc ${Z3_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${GMPXX_LIB} ${GMP_LIB}) +llvm_config (ivc bitwriter) +install(TARGETS ivc RUNTIME DESTINATION bin) diff --git a/tools/ivc/Ivc.cpp b/tools/ivc/Ivc.cpp new file mode 100644 index 000000000..08d30c932 --- /dev/null +++ b/tools/ivc/Ivc.cpp @@ -0,0 +1,32 @@ +#include "deep/RndLearner.hpp" + +using namespace ufo; +using namespace std; + +bool getBoolValue(const char * opt, bool defValue, int argc, char ** argv) +{ + for (int i = 1; i < argc; i++) + { + if (strcmp(argv[i], opt) == 0) return true; + } + return defValue; +} + +int main (int argc, char ** argv) +{ + if (getBoolValue("--help", false, argc, argv) || argc < 3){ + outs () << + "* * * FreqHorn-IVC v.0.1 - Copyright (C) 2017 * * *\n" << + " Grigory Fedyukovich & Sam Kaufman \n\n" << + "Usage: Purpose:\n" << + " ivc [--help] show help\n" << + " ivc get an inductive validity core:\n" << + " `chc.smt2` - system of CHCs;\n" << + " `inv.smt2` - asserts for invariants in lexicographical order\n" << + " (will be rewritten)\n"; + return 0; + } + + getInductiveValidityCore(argv[1], argv[2]); + return 0; +} From b19a8bd8ed28391832bc94c96431bcc70cf738df Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Mon, 14 Aug 2017 11:14:31 -0700 Subject: [PATCH 034/236] refreshed the description online --- README.md | 50 +++++++++++++++++++++++++++++++++++++------------- 1 file changed, 37 insertions(+), 13 deletions(-) diff --git a/README.md b/README.md index 2e88b4ccc..fbb2f503a 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,37 @@ -#About# - -Skolemizer for AE-formulas in LIA/LRA based on the SeaHorn verification framework and the Z3 SMT solver. This is the main computational engine used in the Incremental Model Checking (LPAR'15, CAV'16) and in the Program Synthesis from Assume-Guarantee contracts (preprint). - -#Installation# - -* `cd aeval ; mkdir build ; cd build` -* `cmake ../` -* `make` to build dependencies (Z3 and LLVM) -* `make` to build AE-VAL - -The binary of AE-VAL can be found in `build/tools/aeval/` - +FreqHorn +======== + +Satisfiability solver for constrained Horn clauses (CHC) based on the Expression library of SeaHorn and the Z3 SMT solver. It combines probabilistic and syntax-guided methods to sample candidate invariants and checks their inductiveness / safety. Find more details at FMCAD'17. + +Installation +============ + +Compiles with gcc-5 (on Linux) and clang-700 (on Mac). Assumes preinstalled Gmp and Boost (libboost-system1.55-dev) packages. + +* `cd aeval ; mkdir build ; cd build` +* `cmake ../` +* `make` to build dependencies (Z3 and LLVM) +* `make deephorn` to build FreqHorn + +The binary of FreqHorn can be found at `build/tools/deep/`. +Run `./tools/deep/deephorn --help` for the usage info. + +Inductive Validity Cores +======================== + +Solutions discovered by FreqHorn can be further minimized using the FreqHorn-IVC utility: + +* `make ivc` to build FreqHorn-IVC + +The binary of FreqHorn-IVC can be found at `build/tools/ivc/`. + +Benchmarks +========== + +Collection of the SMT-LIB2 translations of the satisfiable CHC system can be found at `bench_horn`. FreqHorn is expected to eventually discover solutions for the systems. On the other hand, there are several unsatisfiable CHC systems at `bench_horn_cex`, for which FreqHorn is expected to diverge. + +Parallel Solver +=============== + +MPI-based version of FreqHorn can be found at the rnd-parallel-master-slave branch. + From f019198503824e77166c93eb3a39e45495f6bdb6 Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Wed, 30 Aug 2017 11:33:59 +1000 Subject: [PATCH 035/236] the order and the duplicates in srcVars and dstVars is taken into account --- include/deep/Horn.hpp | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/include/deep/Horn.hpp b/include/deep/Horn.hpp index 46bccbf97..fefaffe6d 100644 --- a/include/deep/Horn.hpp +++ b/include/deep/Horn.hpp @@ -44,7 +44,7 @@ namespace ufo CHCs(ExprFactory &efac, EZ3 &z3) : m_efac(efac), m_z3(z3) {}; - void preprocess (Expr term, ExprSet& srcVars, ExprVector& relations, Expr &srcRelation, ExprVector& lin) + void preprocess (Expr term, ExprVector& srcVars, ExprVector& relations, Expr &srcRelation, ExprVector& lin) { if (isOpX(term)) { @@ -66,7 +66,8 @@ namespace ufo if (rel == term->arg(0)) { srcRelation = rel->arg(0); - expr::filter (term, bind::IsConst(), std::inserter (srcVars, srcVars.begin ())); + for (auto it = term->args_begin()+1, end = term->args_end(); it != end; ++it) + srcVars.push_back(*it); } } } @@ -143,21 +144,19 @@ namespace ufo hr.head = head->arg(0); hr.dstRelation = head->arg(0)->arg(0); - ExprSet srcVars; - preprocess(body, srcVars, fp.m_rels, hr.srcRelation, hr.lin); - + preprocess(body, hr.srcVars, fp.m_rels, hr.srcRelation, hr.lin); + hr.isFact = isOpX(hr.srcRelation); hr.isQuery = (hr.dstRelation == failDecl); hr.isInductive = (hr.srcRelation == hr.dstRelation); hr.body = conjoin(hr.lin, m_efac); outgs[hr.srcRelation].push_back(chcs.size()-1); - for (auto &a : srcVars) hr.srcVars.push_back(a); - if (!hr.isQuery) { - expr::filter (head, bind::IsConst(), std::inserter (hr.dstVars, hr.dstVars.begin ())); - } + for (auto it = head->args_begin()+1, end = head->args_end(); it != end; ++it) + hr.dstVars.push_back(*it); + } for(auto &a: args) { From 04e0fb914d9251e3f1735814624e6f85a11ea1a4 Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Fri, 1 Sep 2017 21:53:58 +1000 Subject: [PATCH 036/236] k-inductive reasoning for programs with one loop --- include/deep/BndExpl.hpp | 108 ++++++++++++++++++++++++++++++++++---- include/deep/Horn.hpp | 4 +- tools/CMakeLists.txt | 2 + tools/kind/CMakeLists.txt | 4 ++ tools/kind/KInduction.cpp | 20 +++++++ 5 files changed, 126 insertions(+), 12 deletions(-) create mode 100644 tools/kind/CMakeLists.txt create mode 100644 tools/kind/KInduction.cpp diff --git a/include/deep/BndExpl.hpp b/include/deep/BndExpl.hpp index 847d8e1c9..d7c664dd3 100644 --- a/include/deep/BndExpl.hpp +++ b/include/deep/BndExpl.hpp @@ -19,8 +19,8 @@ namespace ufo public: - BndExpl (ExprFactory &efac, EZ3 &z3, CHCs& r) : - m_efac(efac), ruleManager(r), u(efac) {} + BndExpl (CHCs& r) : + m_efac(r.m_efac), ruleManager(r), u(m_efac) {} void guessRandomTrace(vector& trace) { @@ -66,7 +66,7 @@ namespace ufo { ExprVector ssa; - ExprVector bindVars1; + ExprVector bindVars1 = ruleManager.chcs[trace[0]].srcVars; ExprVector bindVars2; int bindVar_index = 0; int locVar_index = 0; @@ -76,6 +76,7 @@ namespace ufo bindVars2.clear(); HornRuleExt& hr = ruleManager.chcs[step]; Expr body = hr.body; + for (int i = 0; i < hr.srcVars.size(); i++) { body = replaceAll(body, hr.srcVars[i], bindVars1[i]); @@ -117,15 +118,15 @@ namespace ufo return conjoin(ssa, m_efac); } - void doit(int cur_bnd, int bnd) + bool exploreTraces(int cur_bnd, int bnd, bool print = false) { bool unsat = true; int num_traces = 0; - outs () << "Exploring traces (up to bound): 1"; // GF: trace of length 1 is always empty + if (print) outs () << "Exploring traces (up to bound): 1"; // GF: trace of length 1 is always empty while (unsat && cur_bnd <= bnd) { - outs () << ", " << cur_bnd; + if (print) outs () << ", " << cur_bnd; vector> traces; vector empttrace; @@ -140,9 +141,61 @@ namespace ufo } } - outs () << "\nTotal number of traces explored: " << num_traces <<"\n\n" + if (print) + outs () << "\nTotal number of traces explored: " << num_traces << "\n\n" << (unsat ? "UNSAT for all traces up to " : "SAT for a trace with ") << (cur_bnd - 1) << " steps\n"; + return unsat; + } + + bool kIndIter(int bnd1, int bnd2) + { + assert (bnd1 <= bnd2); + assert (bnd2 > 1); + bool init = exploreTraces(bnd1, bnd2); + if (!init) + { + outs() << "Base check failed at step " << bnd2 << "\n"; + exit(0); + } + + int tr_ind; + int pr_ind; + int k_ind = ruleManager.chcs.size(); // == 3 + + for (int i = 0; i < k_ind; i++) + { + auto & r = ruleManager.chcs[i]; + if (r.isInductive) tr_ind = i; + if (r.isQuery) pr_ind = i; + } + + ruleManager.chcs.push_back(HornRuleExt()); // trick for now: a new artificial CHC + HornRuleExt& hr = ruleManager.chcs[k_ind]; + HornRuleExt& tr = ruleManager.chcs[tr_ind]; + HornRuleExt& pr = ruleManager.chcs[pr_ind]; + + hr.srcVars = tr.srcVars; + hr.dstVars = tr.dstVars; + hr.locVars = tr.locVars; + + hr.body = mk(tr.body, mkNeg(pr.body)); + + for (int i = 0; i < hr.srcVars.size(); i++) + { + hr.body = replaceAll(hr.body, pr.srcVars[i], hr.srcVars[i]); + } + + vector gen_trace; + for (int i = 1; i < bnd2; i++) gen_trace.push_back(k_ind); + gen_trace.push_back(pr_ind); + Expr q = toExpr(gen_trace); + bool res = !u.isSat(q); + + // prepare for the next iteration + ruleManager.chcs.erase (ruleManager.chcs.begin() + k_ind); + + return res; } }; @@ -152,8 +205,45 @@ namespace ufo EZ3 z3(m_efac); CHCs ruleManager(m_efac, z3); ruleManager.parse(smt); - BndExpl ds(m_efac, z3, ruleManager); - ds.doit(bnd1, bnd2); + BndExpl ds(ruleManager); + ds.exploreTraces(bnd1, bnd2); + }; + + inline bool kInduction(CHCs& ruleManager, int bnd) + { + if (ruleManager.chcs.size() != 3) + { + outs () << "currently not supported\n"; + return false; + } + + BndExpl ds(ruleManager); + + bool success = false; + int i; + for (i = 2; i < bnd; i++) + { + if (ds.kIndIter(i, i)) + { + success = true; + break; + } + } + + outs () << "\n" << + (success ? "K-induction succeeded " : "Unknown result ") << + "after " << (i-1) << " iterations\n"; + + return success; + }; + + inline void kInduction(string smt, int bnd) + { + ExprFactory m_efac; + EZ3 z3(m_efac); + CHCs ruleManager(m_efac, z3); + ruleManager.parse(smt); + kInduction(ruleManager, bnd); }; } diff --git a/include/deep/Horn.hpp b/include/deep/Horn.hpp index fefaffe6d..221c11ca5 100644 --- a/include/deep/Horn.hpp +++ b/include/deep/Horn.hpp @@ -30,13 +30,11 @@ namespace ufo class CHCs { - private: + public: ExprFactory &m_efac; EZ3 &m_z3; - public: - Expr failDecl; vector chcs; ExprSet decls; diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index 2ec03d459..42a3664f4 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -5,3 +5,5 @@ add_subdirectory(bnd) add_subdirectory(deep) add_subdirectory(ivc) + +add_subdirectory(kind) diff --git a/tools/kind/CMakeLists.txt b/tools/kind/CMakeLists.txt new file mode 100644 index 000000000..ff89ed18b --- /dev/null +++ b/tools/kind/CMakeLists.txt @@ -0,0 +1,4 @@ +add_executable (kind KInduction.cpp) +target_link_libraries (kind ${Z3_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${GMPXX_LIB} ${GMP_LIB}) +llvm_config (kind bitwriter) +install(TARGETS kind RUNTIME DESTINATION bin) diff --git a/tools/kind/KInduction.cpp b/tools/kind/KInduction.cpp new file mode 100644 index 000000000..59f3eb861 --- /dev/null +++ b/tools/kind/KInduction.cpp @@ -0,0 +1,20 @@ +#include "deep/BndExpl.hpp" + +using namespace ufo; +using namespace std; + +int main (int argc, char ** argv) +{ + if (argc == 1){ + outs() << "At least an input file should be given\n"; + return 0; + } + + int upper = 1000; //default + + if (argc > 2) upper = min(upper, atoi(argv[1])); + + kInduction(string(argv[argc-1]), upper); + + return 0; +} From 020b8a8029d3b3943bd5aeeb98083dc13eb152df Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Thu, 7 Sep 2017 14:44:14 -0700 Subject: [PATCH 037/236] combined randomized sampling with k-induction --- include/deep/BndExpl.hpp | 32 +++++++- include/deep/RndLearner.hpp | 146 +++++++++++++++++++++++++++++------- tools/deep/DeepHorn.cpp | 8 +- 3 files changed, 152 insertions(+), 34 deletions(-) diff --git a/include/deep/BndExpl.hpp b/include/deep/BndExpl.hpp index d7c664dd3..4cdf10299 100644 --- a/include/deep/BndExpl.hpp +++ b/include/deep/BndExpl.hpp @@ -16,12 +16,22 @@ namespace ufo ExprFactory &m_efac; SMTUtils u; CHCs& ruleManager; + Expr extraLemmas; + + int tr_ind; // helper vars + int pr_ind; + int k_ind; + + Expr inv; // 1-inductive proof public: BndExpl (CHCs& r) : m_efac(r.m_efac), ruleManager(r), u(m_efac) {} + BndExpl (CHCs& r, Expr lms) : + m_efac(r.m_efac), ruleManager(r), u(m_efac), extraLemmas(lms) {} + void guessRandomTrace(vector& trace) { std::srand(std::time(0)); @@ -159,9 +169,7 @@ namespace ufo exit(0); } - int tr_ind; - int pr_ind; - int k_ind = ruleManager.chcs.size(); // == 3 + k_ind = ruleManager.chcs.size(); // == 3 for (int i = 0; i < k_ind; i++) { @@ -181,6 +189,8 @@ namespace ufo hr.body = mk(tr.body, mkNeg(pr.body)); + if (extraLemmas != NULL) hr.body = mk(extraLemmas, hr.body); + for (int i = 0; i < hr.srcVars.size(); i++) { hr.body = replaceAll(hr.body, pr.srcVars[i], hr.srcVars[i]); @@ -192,11 +202,25 @@ namespace ufo Expr q = toExpr(gen_trace); bool res = !u.isSat(q); + if (bnd2 == 2) inv = mkNeg(pr.body); + // prepare for the next iteration ruleManager.chcs.erase (ruleManager.chcs.begin() + k_ind); return res; } + + Expr getInv(ExprVector& vars) + { + assert(inv != NULL); + + for (int i = 0; i < ruleManager.chcs[pr_ind].srcVars.size(); i++) + { + inv = replaceAll(inv, ruleManager.chcs[pr_ind].srcVars[i], vars[i]); + } + + return inv; + } }; inline void unrollAndCheck(string smt, int bnd1, int bnd2) @@ -206,7 +230,7 @@ namespace ufo CHCs ruleManager(m_efac, z3); ruleManager.parse(smt); BndExpl ds(ruleManager); - ds.exploreTraces(bnd1, bnd2); + ds.exploreTraces(bnd1, bnd2, true); }; inline bool kInduction(CHCs& ruleManager, int bnd) diff --git a/include/deep/RndLearner.hpp b/include/deep/RndLearner.hpp index 494d3146f..315840af5 100644 --- a/include/deep/RndLearner.hpp +++ b/include/deep/RndLearner.hpp @@ -5,6 +5,7 @@ #include "CodeSampler.hpp" #include "Distribution.hpp" #include "LinCom.hpp" +#include "BndExpl.hpp" #include "ae/SMTUtils.hpp" #include #include @@ -30,18 +31,24 @@ namespace ufo vector> lfs; vector curCandidates; int invNumber; - int all; + int numOfSMTChecks; + + bool kind_succeeded; // interaction with k-induction + bool oneInductiveProof; bool densecode; // catch various statistics about the code (mostly, frequences) and setup the prob.distribution based on them bool addepsilon; // add some small probability to features that never happen in the code bool aggressivepruning; // aggressive pruning of the search space based on SAT/UNSAT (WARNING: may miss some invariants) - + bool kinduction; + + bool printLog; public: - RndLearner (ExprFactory &efac, EZ3 &z3, CHCs& r, bool b1, bool b2, bool b3) : + RndLearner (ExprFactory &efac, EZ3 &z3, CHCs& r, bool k, bool b1, bool b2, bool b3) : m_efac(efac), m_z3(z3), ruleManager(r), m_smt_solver (z3), u(efac), - invNumber(0), all(0), - densecode(b1), addepsilon(b2), aggressivepruning(b3) {} + invNumber(0), numOfSMTChecks(0), oneInductiveProof(true), kind_succeeded (!k), + densecode(b1), addepsilon(b2), aggressivepruning(b3), + printLog(true) {} bool isTautology (Expr a) // adjusted for big disjunctions { @@ -62,7 +69,7 @@ namespace ufo m_smt_solver.reset(); bool res = false; - for (auto &v : varComb ) + for (auto &v : varComb) { m_smt_solver.assertExpr(conjoin(v.second, m_efac)); if (!m_smt_solver.solve ()) @@ -95,14 +102,15 @@ namespace ufo { ind1 = getVarIndex(hr.srcRelation, decls); LAfactory& lf1 = lfs[ind1].back(); - + cand1 = curCandidates[ind1]; + for (int i = 0; i < hr.srcVars.size(); i++) { cand1 = replaceAll(cand1, lf1.getVarE(i), hr.srcVars[i]); } m_smt_solver.assertExpr(cand1); - + lmApp = conjoin(lf1.learntExprs, m_efac); for (int i = 0; i < hr.srcVars.size(); i++) { @@ -122,7 +130,7 @@ namespace ufo m_smt_solver.assertExpr(mk(cand2)); - all++; + numOfSMTChecks++; boost::tribool res = m_smt_solver.solve (); if (res) // SAT == candidate failed { @@ -146,7 +154,7 @@ namespace ufo } } - void reportCheckingResults() + void reportCheckingResults(bool doRedundancyOptim = true) { for (int i = 0; i < invNumber; i++) { @@ -154,13 +162,25 @@ namespace ufo LAfactory& lf = lfs[i].back(); if (isOpX(cand)) { - outs () << " => bad candidate for " << *decls[i] << "\n"; + if (printLog) outs () << " => bad candidate for " << *decls[i] << "\n"; } else { - outs () << " => learnt lemma for " << *decls[i] << "\n"; - lf.learntExprs.insert(cand); - lf.learntLemmas.push_back(lf.samples.size() - 1); + if (printLog) outs () << " => learned lemma for " << *decls[i] << "\n"; + + if (doRedundancyOptim) + { + Expr allLemmas = conjoin(lf.learntExprs, m_efac); + if (u.isImplies(allLemmas, cand)) + { + curCandidates[i] = mk(m_efac); + } + else + { + lf.learntLemmas.push_back(lf.samples.size() - 1); + lf.learntExprs.insert(cand); + } + } } } } @@ -174,6 +194,58 @@ namespace ufo } } + bool checkWithKInduction() + { + if (ruleManager.chcs.size() != 3) return false; // current limitation + if (lfs.size() != 1) return false; // current limitation + if (kind_succeeded) return false; + + Expr cand = curCandidates[0]; + if (isOpX(cand)) return false; + + LAfactory& lf = lfs[0].back(); + Expr allLemmas = conjoin(lf.learntExprs, m_efac); + + // get lemmas to be included to inductive rule + for (int i = 0; i < ruleManager.chcs.size(); i++) + { + auto & hr = ruleManager.chcs[i]; + if (!hr.isInductive) continue; + + for (int i = 0; i < hr.srcVars.size(); i++) + { + allLemmas = replaceAll(allLemmas, lf.getVarE(i), hr.srcVars[i]); + } + } + + BndExpl bnd(ruleManager, allLemmas); + + int i; + for (i = 2; i < 5; i++) // 2 - a reasanoble lowerbound, 5 - a hardcoded upperbound + { + kind_succeeded = bnd.kIndIter(i, i); + numOfSMTChecks += i; + if (kind_succeeded) break; + } + + if (kind_succeeded) + { + outs () << "\n" << "K-induction succeeded after " << (i-1) << " iterations\n"; + oneInductiveProof = (i == 2); + if (oneInductiveProof) // can complete the invariant only when the proof is 1-inductive + { + curCandidates[0] = bnd.getInv(lf.getVars()); + bool addedRemainingLemma = checkCandidates() && checkSafety(); + if (addedRemainingLemma) lf.learntExprs.insert(curCandidates[0]); // for serialization only + + if (printLog) outs () << "remaining lemma(s): " << *curCandidates[0] << + "\nsanity check: " << addedRemainingLemma << "\n"; + } + } + + return kind_succeeded; + } + void resetSafetySolver() { int num = 0; @@ -210,7 +282,7 @@ namespace ufo m_smt_safety_solvers[num-1].assertExpr(invApp); safety_progress[num-1] = !m_smt_safety_solvers[num-1].solve (); - all++; + numOfSMTChecks++; } for (auto a : safety_progress) if (a.second == false) return false; @@ -233,6 +305,11 @@ namespace ufo void serializeInvariants(vector& invs, const char * outfile) { + if (!oneInductiveProof) + { + outs() << "\nCurrently unable to serialize k-inductive invariants\n"; + return; + } ofstream invfile; invfile.open (string(outfile)); @@ -269,7 +346,7 @@ namespace ufo lemma2add = replaceAll(lemma2add, lf.getVarE(i), hr.srcVars[i]); } - all++; + numOfSMTChecks++; if (u.isImplies(hr.body, lemma2add)) continue; hr.lin.push_back(lemma2add); @@ -333,7 +410,7 @@ namespace ufo } } - void doCodeSampling(Expr invRel, bool print=false) + void doCodeSampling(Expr invRel) { vector css; set orArities; @@ -367,7 +444,7 @@ namespace ufo } } - if (print && lf.nonlinVars.size() > 0) + if (printLog && lf.nonlinVars.size() > 0) { outs() << "Multed vars: "; for (auto &a : lf.nonlinVars) @@ -524,7 +601,7 @@ namespace ufo } lf.stabilizeDensities(orArities, addepsilon); - if (print) + if (printLog) { outs() << "\nStatistics for " << *invRel << ":\n"; lf.printCodeStatistics(orArities); @@ -570,10 +647,16 @@ namespace ufo } if (skip) continue; - - outs() << "\n ---- new iteration " << iter++ << " ----\n"; - for (int j = 0; j < invNumber; j++) outs () << "candidate for " << *decls[j] << ": " << *curCandidates[j] << "\n"; - + + iter++; + + if (printLog) + { + outs() << "\n ---- new iteration " << iter << " ----\n"; + for (int j = 0; j < invNumber; j++) + outs () << "candidate for " << *decls[j] << ": " << *curCandidates[j] << "\n"; + } + // check all the candidates at once for all CHCs : if (checkCandidates()) @@ -585,7 +668,9 @@ namespace ufo } reportCheckingResults(); + if (success) break; + success = checkWithKInduction(); if (success) break; assignPriorities(); @@ -597,7 +682,11 @@ namespace ufo if (success) outs () << "\n -----> Success after " << --iter << " iterations\n"; else outs () << "\nNo success after " << maxAttempts << " iterations\n"; - outs () << " total number of SMT checks: " << all << "\n"; + for (int j = 0; j < invNumber; j++) + outs () << " number of sampled lemmas for " << *decls[j] << ": " + << lfs[j].back().learntExprs.size() << "\n"; + + outs () << " number of SMT checks: " << numOfSMTChecks << "\n"; if (success && outfile != NULL) { @@ -630,14 +719,15 @@ namespace ufo }; - inline void learnInvariants(string smt, char * outfile, int maxAttempts, bool b1=true, bool b2=true, bool b3=true) + inline void learnInvariants(string smt, char * outfile, int maxAttempts, + bool kind=false, bool b1=true, bool b2=true, bool b3=true) { ExprFactory m_efac; EZ3 z3(m_efac); CHCs ruleManager(m_efac, z3); ruleManager.parse(smt); - RndLearner ds(m_efac, z3, ruleManager, b1, b2, b3); + RndLearner ds(m_efac, z3, ruleManager, kind, b1, b2, b3); ds.setupSafetySolver(); std::srand(std::time(0)); @@ -651,7 +741,7 @@ namespace ufo for (auto& dcl: ruleManager.decls) { ds.initializeDecl(dcl); - ds.doCodeSampling (dcl->arg(0), true); + ds.doCodeSampling (dcl->arg(0)); } ds.synthesize(maxAttempts, outfile); @@ -665,7 +755,7 @@ namespace ufo CHCs ruleManager(m_efac, z3); ruleManager.parse(string(chcfile)); - RndLearner ds(m_efac, z3, ruleManager, false, false, false); + RndLearner ds(m_efac, z3, ruleManager, false, false, false, false); ds.setupSafetySolver(); vector invNames; diff --git a/tools/deep/DeepHorn.cpp b/tools/deep/DeepHorn.cpp index e6b15f3ed..426212067 100644 --- a/tools/deep/DeepHorn.cpp +++ b/tools/deep/DeepHorn.cpp @@ -40,6 +40,7 @@ int main (int argc, char ** argv) { const char *OPT_HELP = "--help"; const char *OPT_MAX_ATTEMPTS = "--attempts"; + const char *OPT_K_IND = "--kind"; const char *OPT_OUT_FILE = "--out"; const char *OPT_GET_FREQS = "--freqs"; const char *OPT_ADD_EPSILON = "--eps"; @@ -59,17 +60,20 @@ int main (int argc, char ** argv) " " << OPT_ADD_EPSILON << " add small probabilities to features that never happen in the code\n" << " " << OPT_AGG_PRUNING << " prioritize and prune the search space aggressively\n" << " " << OPT_GET_FREQS << " calculate frequency distributions and sample from them\n" << - " (if not specified, sample from uniform distributions)\n"; + " (if not specified, sample from uniform distributions)\n" << + " " << OPT_K_IND << " run k-induction after each learned lemma\n" << + " (for pure k-induction, run 'kind ')\n"; return 0; } int maxAttempts = getIntValue(OPT_MAX_ATTEMPTS, 2000000, argc, argv); + bool kinduction = getBoolValue(OPT_K_IND, false, argc, argv); bool densecode = getBoolValue(OPT_GET_FREQS, false, argc, argv); bool addepsilon = getBoolValue(OPT_ADD_EPSILON, false, argc, argv); bool aggressivepruning = getBoolValue(OPT_AGG_PRUNING, false, argc, argv); char * outfile = getStrValue(OPT_OUT_FILE, NULL, argc, argv); - learnInvariants(string(argv[argc-1]), outfile, maxAttempts, densecode, addepsilon, aggressivepruning); + learnInvariants(string(argv[argc-1]), outfile, maxAttempts, kinduction, densecode, addepsilon, aggressivepruning); return 0; } From ac5faba408f90397bc2d50baac16a48b4a08c93c Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Sun, 10 Sep 2017 09:14:00 -0700 Subject: [PATCH 038/236] various tricks at the preprocessing, tiny fixes, and new test cases --- bench_horn/dillig20-1.smt2 | 35 +++++ bench_horn/dillig20-2.smt2 | 35 +++++ bench_horn/dillig20-3.smt2 | 35 +++++ bench_horn/nonterm_01.smt2 | 22 +++ ...e-unreach-call_true-termination_cex.c.smt2 | 2 +- bench_horn_cex/samples_triv_01_cex.smt2 | 22 +++ bench_horn_cex/samples_triv_02_cex.smt2 | 22 +++ bench_horn_cex/samples_triv_03_cex.smt2 | 22 +++ bench_horn_cex/samples_triv_04_cex.smt2 | 22 +++ bench_horn_cex/samples_triv_05_cex.smt2 | 22 +++ bench_horn_cex/samples_triv_06_cex.smt2 | 15 ++ include/ae/AeValSolver.hpp | 14 +- include/ae/ExprSimpl.hpp | 4 +- include/deep/CodeSampler.hpp | 33 +++- include/deep/Horn.hpp | 148 +++++++++++++----- include/deep/LinCom.hpp | 30 +++- include/deep/RndLearner.hpp | 38 ++--- include/ufo/Smt/Z3n.hpp | 4 +- 18 files changed, 442 insertions(+), 83 deletions(-) create mode 100644 bench_horn/dillig20-1.smt2 create mode 100644 bench_horn/dillig20-2.smt2 create mode 100644 bench_horn/dillig20-3.smt2 create mode 100644 bench_horn/nonterm_01.smt2 rename bench_horn/count_by_1_true-unreach-call_true-termination.c.smt2 => bench_horn_cex/count_by_1_true-unreach-call_true-termination_cex.c.smt2 (85%) create mode 100644 bench_horn_cex/samples_triv_01_cex.smt2 create mode 100644 bench_horn_cex/samples_triv_02_cex.smt2 create mode 100644 bench_horn_cex/samples_triv_03_cex.smt2 create mode 100644 bench_horn_cex/samples_triv_04_cex.smt2 create mode 100644 bench_horn_cex/samples_triv_05_cex.smt2 create mode 100644 bench_horn_cex/samples_triv_06_cex.smt2 diff --git a/bench_horn/dillig20-1.smt2 b/bench_horn/dillig20-1.smt2 new file mode 100644 index 000000000..2bab9cba0 --- /dev/null +++ b/bench_horn/dillig20-1.smt2 @@ -0,0 +1,35 @@ +(declare-rel itp (Int Int Int Int Int Int Int)) +(declare-var x Int) +(declare-var y Int) +(declare-var m Int) +(declare-var j Int) +(declare-var k Int) +(declare-var i Int) +(declare-var n Int) +(declare-var x1 Int) +(declare-var y1 Int) +(declare-var m1 Int) +(declare-var j1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= (+ x y) k) (= m 0) (= j 0)) (itp x y m j k i n))) + +(rule (=> + (and + (itp x y m j k i n) + (< j n) + (= x1 (ite (= i j) (+ x 1) (- x 1))) + (= y1 (ite (= i j) (- y 1) (+ y 1))) + (or (= m1 j) (= m1 m)) + (= j1 (+ j 1)) + ) + (itp x1 y1 m1 j1 k i n) + ) +) + + +(rule (=> (and (itp x y m j k i n) (= j n) (not (= k (+ x y)))) fail)) + +(query fail :print-certificate true) + diff --git a/bench_horn/dillig20-2.smt2 b/bench_horn/dillig20-2.smt2 new file mode 100644 index 000000000..ec4aae008 --- /dev/null +++ b/bench_horn/dillig20-2.smt2 @@ -0,0 +1,35 @@ +(declare-rel itp (Int Int Int Int Int Int Int)) +(declare-var x Int) +(declare-var y Int) +(declare-var m Int) +(declare-var j Int) +(declare-var k Int) +(declare-var i Int) +(declare-var n Int) +(declare-var x1 Int) +(declare-var y1 Int) +(declare-var m1 Int) +(declare-var j1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= (+ x y) k) (= m 0) (= j 0)) (itp x y m j k i n))) + +(rule (=> + (and + (itp x y m j k i n) + (< j n) + (= x1 (ite (= i j) (+ x 1) (- x 1))) + (= y1 (ite (= i j) (- y 1) (+ y 1))) + (or (= m1 j) (= m1 m)) + (= j1 (+ j 1)) + ) + (itp x1 y1 m1 j1 k i n) + ) +) + + +(rule (=> (and (itp x y m j k i n) (= j n) (> n 0) (not (<= 0 m))) fail)) + +(query fail :print-certificate true) + diff --git a/bench_horn/dillig20-3.smt2 b/bench_horn/dillig20-3.smt2 new file mode 100644 index 000000000..9081c9fe7 --- /dev/null +++ b/bench_horn/dillig20-3.smt2 @@ -0,0 +1,35 @@ +(declare-rel itp (Int Int Int Int Int Int Int)) +(declare-var x Int) +(declare-var y Int) +(declare-var m Int) +(declare-var j Int) +(declare-var k Int) +(declare-var i Int) +(declare-var n Int) +(declare-var x1 Int) +(declare-var y1 Int) +(declare-var m1 Int) +(declare-var j1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= (+ x y) k) (= m 0) (= j 0)) (itp x y m j k i n))) + +(rule (=> + (and + (itp x y m j k i n) + (< j n) + (= x1 (ite (= i j) (+ x 1) (- x 1))) + (= y1 (ite (= i j) (- y 1) (+ y 1))) + (or (= m1 j) (= m1 m)) + (= j1 (+ j 1)) + ) + (itp x1 y1 m1 j1 k i n) + ) +) + + +(rule (=> (and (itp x y m j k i n) (= j n) (> n 0) (not (< m n))) fail)) + +(query fail :print-certificate true) + diff --git a/bench_horn/nonterm_01.smt2 b/bench_horn/nonterm_01.smt2 new file mode 100644 index 000000000..bc9a14d89 --- /dev/null +++ b/bench_horn/nonterm_01.smt2 @@ -0,0 +1,22 @@ +(declare-rel inv (Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (inv 0 0)) + +(rule (=> + (and + (inv x y) + (= x1 (+ x y)) + ) + (inv x1 y) + ) +) + +(rule (=> (and (inv x 0) (> x 25) (not (= x y))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/count_by_1_true-unreach-call_true-termination.c.smt2 b/bench_horn_cex/count_by_1_true-unreach-call_true-termination_cex.c.smt2 similarity index 85% rename from bench_horn/count_by_1_true-unreach-call_true-termination.c.smt2 rename to bench_horn_cex/count_by_1_true-unreach-call_true-termination_cex.c.smt2 index cc37961f2..4d893fdda 100644 --- a/bench_horn/count_by_1_true-unreach-call_true-termination.c.smt2 +++ b/bench_horn_cex/count_by_1_true-unreach-call_true-termination_cex.c.smt2 @@ -21,7 +21,7 @@ (rule (=> (and (itp LRG LRG) - (> LRG 10000) ; assume LRG is actually large (not asserted in the .c) + (> LRG 1000) ; assume LRG is actually large (not asserted in the .c) ) fail)) (query fail :print-certificate true) diff --git a/bench_horn_cex/samples_triv_01_cex.smt2 b/bench_horn_cex/samples_triv_01_cex.smt2 new file mode 100644 index 000000000..e9d026162 --- /dev/null +++ b/bench_horn_cex/samples_triv_01_cex.smt2 @@ -0,0 +1,22 @@ +(declare-rel inv (Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (=> (< x 2452) (inv x x))) + +(rule (=> + (and + (inv x y) + (= x1 (+ x 1)) + ) + (inv x1 y1) + ) +) + +(rule (=> (and (inv y y) (not (< y 2452))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn_cex/samples_triv_02_cex.smt2 b/bench_horn_cex/samples_triv_02_cex.smt2 new file mode 100644 index 000000000..adba138c8 --- /dev/null +++ b/bench_horn_cex/samples_triv_02_cex.smt2 @@ -0,0 +1,22 @@ +(declare-rel inv (Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (inv x y)) + +(rule (=> + (and + (inv x y) + (= x1 (+ x y)) + ) + (inv x1 x1) + ) +) + +(rule (=> (and (inv x y) (not (= x y))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn_cex/samples_triv_03_cex.smt2 b/bench_horn_cex/samples_triv_03_cex.smt2 new file mode 100644 index 000000000..33f5ee475 --- /dev/null +++ b/bench_horn_cex/samples_triv_03_cex.smt2 @@ -0,0 +1,22 @@ +(declare-rel inv (Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (inv 0 y)) + +(rule (=> + (and + (inv x y) + (= x1 (+ x 1)) + ) + (inv x1 y) + ) +) + +(rule (=> (and (inv x 0) (> x 25) (not (= x y))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn_cex/samples_triv_04_cex.smt2 b/bench_horn_cex/samples_triv_04_cex.smt2 new file mode 100644 index 000000000..46fe88afc --- /dev/null +++ b/bench_horn_cex/samples_triv_04_cex.smt2 @@ -0,0 +1,22 @@ +(declare-rel inv (Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (inv 0 1)) + +(rule (=> + (and + (inv x y) + (= x1 (+ x 1)) + ) + (inv x1 y) + ) +) + +(rule (=> (and (inv x y) (not (= 0 y))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn_cex/samples_triv_05_cex.smt2 b/bench_horn_cex/samples_triv_05_cex.smt2 new file mode 100644 index 000000000..f713fcfdf --- /dev/null +++ b/bench_horn_cex/samples_triv_05_cex.smt2 @@ -0,0 +1,22 @@ +(declare-rel inv (Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (inv x 0)) + +(rule (=> + (and + (inv x y) + (= x1 (+ x 1)) + ) + (inv x1 1) + ) +) + +(rule (=> (and (inv x y) (not (= 0 y))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn_cex/samples_triv_06_cex.smt2 b/bench_horn_cex/samples_triv_06_cex.smt2 new file mode 100644 index 000000000..24f6ce149 --- /dev/null +++ b/bench_horn_cex/samples_triv_06_cex.smt2 @@ -0,0 +1,15 @@ +(declare-rel inv (Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (inv 0 1)) + +(rule (=> (inv 0 y) (inv y 0))) + +(rule (=> (and (inv x y) (not (= 1 y))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/include/ae/AeValSolver.hpp b/include/ae/AeValSolver.hpp index b198b3f71..82f3dc3eb 100644 --- a/include/ae/AeValSolver.hpp +++ b/include/ae/AeValSolver.hpp @@ -69,14 +69,14 @@ namespace ufo smt.reset(); smt.assertExpr (s); if (!smt.solve ()) { - outs() << "\nE.v.: -; Iter.: 0; Result: valid\n\n"; + if (debug) outs() << "\nE.v.: -; Iter.: 0; Result: valid\n\n"; return false; } if (v.size () == 0) { smt.assertExpr (boolop::lneg (t)); boost::tribool res = smt.solve (); - outs() << "\nE.v.: 0; Iter.: 0; Result: " << (res? "invalid" : "valid") << "\n\n"; + if (debug) outs() << "\nE.v.: 0; Iter.: 0; Result: " << (res? "invalid" : "valid") << "\n\n"; return res; } @@ -87,11 +87,13 @@ namespace ufo while (smt.solve ()) { - outs() << "."; - outs().flush (); + if (debug) { + outs() << "."; + outs().flush (); + } ZSolver::Model m = smt.getModel(); - if (debug && false) + if (debug) { outs() << "\nmodel " << partitioning_size << ":\n"; for (auto &exp: stVars) @@ -112,7 +114,7 @@ namespace ufo smt.assertExpr (t); } - outs() << "\nE.v.: " << v.size() << "; Iter.: " << partitioning_size + if (debug) outs() << "\nE.v.: " << v.size() << "; Iter.: " << partitioning_size << "; Result: " << (res? "invalid" : "valid") << "\n\n"; return res; diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index 0f244554a..0c2801981 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -995,7 +995,7 @@ namespace ufo if (extraVars[multedVars] == NULL) { Expr new_name = mkTerm ("__e__" + to_string(extraVars.size()), t->getFactory()); - Expr var = bind::mkConst(new_name, varsForMult[0]); + Expr var = bind::intConst(new_name); extraVars[multedVars] = var; } return (multedConsts == NULL) ? extraVars[multedVars] : mk(multedConsts, extraVars[multedVars]); @@ -1013,7 +1013,7 @@ namespace ufo if (extraVars[key] == NULL) { Expr new_name = mkTerm ("__e__" + to_string(extraVars.size()), t->getFactory()); - Expr var = bind::mkConst(new_name, t->left()); + Expr var = bind::intConst(new_name); extraVars[key] = var; } return extraVars[key]; diff --git a/include/deep/CodeSampler.hpp b/include/deep/CodeSampler.hpp index cd6910f59..3e69d6332 100644 --- a/include/deep/CodeSampler.hpp +++ b/include/deep/CodeSampler.hpp @@ -1,6 +1,7 @@ #ifndef CODESAMPLER__HPP__ #define CODESAMPLER__HPP__ +#include "ae/AeValSolver.hpp" #include "ae/ExprSimpl.hpp" using namespace std; @@ -137,7 +138,6 @@ namespace ufo void addSample(Expr term) { - ExprSet actualVars; ExprSet subsetInvVars; @@ -224,23 +224,38 @@ namespace ufo { if (false) // printing only { - outs () << "\nAnalize CHC:\n"; - outs () << "src vars: "; + outs() << "\nAnalize CHC:\n"; + outs() << "src vars: "; for (int i = 0; i < hr.srcVars.size(); i++) outs() << "[" << *invVars[i] << "] = " << *hr.srcVars[i] << ", "; - outs() <<"\n"; - outs () << "dst vars: "; + outs() << "\n"; + outs() << "dst vars: "; for (int i = 0; i < hr.dstVars.size(); i++) outs() << "[" << *invVars[i] << "] = " << *hr.dstVars[i] << ", "; - outs() <<"\n"; + outs() << "\n"; + outs() << "body: " << *hr.body << "\n\n"; } intCoefs.insert(1); intConsts.insert(0); + Expr body = hr.body; + + // black magic to get rid of irrelevant variables + ExprSet quantified; + for (auto &v : hr.locVars) quantified.insert(v); + if (hr.srcRelation != invRel) for (auto &v : hr.srcVars) quantified.insert(v); + if (hr.dstRelation != invRel) for (auto &v : hr.dstVars) quantified.insert(v); + + if (quantified.size() > 0) + { + AeValSolver ae(mk(hr.body->getFactory()), hr.body, quantified); + if (ae.solve()) body = ae.getValidSubset(); + } + // get samples and normalize // for the query: add a negation of the entire non-recursive part: if (hr.isQuery) { - Expr massaged = propagateEqualities(hr.body); + Expr massaged = propagateEqualities(body); massaged = unfoldITE(mkNeg(massaged)); massaged = convertToGEandGT(massaged); populateArityAndTemplates(massaged); @@ -248,7 +263,9 @@ namespace ufo else { // for others: the entire non-recursive part - for (auto &cnj : hr.lin) + ExprSet lin; + getConj(body, lin); + for (auto &cnj : lin) { // GF: todo: make sure all constants in the code are Ints (otherwise, z3 could be unpredictable) Expr massaged = unfoldITE(cnj); diff --git a/include/deep/Horn.hpp b/include/deep/Horn.hpp index 221c11ca5..9de96fc6a 100644 --- a/include/deep/Horn.hpp +++ b/include/deep/Horn.hpp @@ -8,14 +8,30 @@ using namespace boost; namespace ufo { + inline bool rewriteHelperConsts(Expr& body, Expr v1, Expr v2) + { + if (isOpX(v1)) + { + body = mk(body, mk(v1, v2)); + return true; + } + //else.. TODO: simplifications like "1 + 2" and support for other sorts like Reals and Bools + return false; + } + + inline void rewriteHelperDupls(Expr& body, Expr _v1, Expr _v2, Expr v1, Expr v2) + { + if (_v1 == _v2) body = mk(body, mk(v1, v2)); + //else.. TODO: mine more complex relationships, like "_v1 + 1 = _v2" + } + struct HornRuleExt { ExprVector srcVars; ExprVector dstVars; ExprVector locVars; - ExprVector lin; - Expr body; // conjunction of lin + Expr body; Expr head; Expr srcRelation; @@ -26,6 +42,45 @@ namespace ufo bool isInductive; string suffix; + + void assignVarsAndRewrite (ExprVector& _srcVars, ExprVector& invVarsSrc, + ExprVector& _dstVars, ExprVector& invVarsDst) + { + for (int i = 0; i < _srcVars.size(); i++) + { + srcVars.push_back(invVarsSrc[i]); + + // find constants + if (rewriteHelperConsts(body, _srcVars[i], srcVars[i])) continue; + + body = replaceAll(body, _srcVars[i], srcVars[i]); + for (int j = 0; j < i; j++) // find duplicates among srcVars + { + rewriteHelperDupls(body, _srcVars[i], _srcVars[j], srcVars[i], srcVars[j]); + } + } + + for (int i = 0; i < _dstVars.size(); i++) + { + // primed copy of var: + Expr new_name = mkTerm (lexical_cast(invVarsDst[i]) + "__", body->getFactory()); + Expr var = bind::intConst(new_name); + dstVars.push_back(var); + + // find constants + if (rewriteHelperConsts(body, _dstVars[i], dstVars[i])) continue; + + body = replaceAll(body, _dstVars[i], dstVars[i]); + for (int j = 0; j < i; j++) // find duplicates among dstVars + { + rewriteHelperDupls(body, _dstVars[i], _dstVars[j], dstVars[i], dstVars[j]); + } + for (int j = 0; j < _srcVars.size(); j++) // find duplicates between srcVars and dstVars + { + rewriteHelperDupls(body, _dstVars[i], _srcVars[j], dstVars[i], srcVars[j]); + } + } + } }; class CHCs @@ -38,6 +93,7 @@ namespace ufo Expr failDecl; vector chcs; ExprSet decls; + map invVars; map> outgs; CHCs(ExprFactory &efac, EZ3 &z3) : m_efac(efac), m_z3(z3) {}; @@ -55,7 +111,7 @@ namespace ufo { if (isOpX(term)) { - if (term->arity () > 0) + if (term->arity() > 0) { if (isOpX(term->arg(0))) { @@ -95,68 +151,84 @@ namespace ufo { failDecl = a->arg(0); } - else + else if (invVars[a->arg(0)].size() == 0) { decls.insert(a); + for (int i = 1; i < a->arity()-1; i++) + { + Expr new_name = mkTerm ("__v__" + to_string(i - 1), m_efac); + Expr var = bind::intConst(new_name); + invVars[a->arg(0)].push_back(var); + } } } for (auto &r: fp.m_rules) { - assert (isOpX(r)); - chcs.push_back(HornRuleExt()); HornRuleExt& hr = chcs.back(); - + hr.suffix = suff; hr.srcRelation = mk(m_efac); - - Expr rule = r->last(); - + Expr rule = r; ExprVector args; - - for (int i = 0; i < r->arity() - 1; i++) - { - Expr var = r->arg(i); - Expr name = bind::name (r->arg(i)); - Expr new_name = mkTerm (lexical_cast (name.get()) + suff, m_efac); - Expr var_new = bind::fapp(bind::rename(var, new_name)); - args.push_back(var_new); - } - - ExprVector actual_vars; - expr::filter (rule, bind::IsVar(), std::inserter (actual_vars, actual_vars.begin ())); - - assert(actual_vars.size() == args.size()); - - for (int i = 0; i < actual_vars.size(); i++) + + if (isOpX(r)) { - string a1 = lexical_cast(bind::name(actual_vars[i])); - int ind = args.size() - 1 - atoi(a1.substr(1).c_str()); - rule = replaceAll(rule, actual_vars[i], args[ind]); + rule = r->last(); + + for (int i = 0; i < r->arity() - 1; i++) + { + Expr var = r->arg(i); + Expr name = bind::name (r->arg(i)); + Expr new_name = mkTerm (lexical_cast (name.get()) + suff, m_efac); + Expr var_new = bind::fapp(bind::rename(var, new_name)); + args.push_back(var_new); + } + + ExprVector actual_vars; + expr::filter (rule, bind::IsVar(), std::inserter (actual_vars, actual_vars.begin ())); + + assert(actual_vars.size() == args.size()); + + for (int i = 0; i < actual_vars.size(); i++) + { + string a1 = lexical_cast(bind::name(actual_vars[i])); + int ind = args.size() - 1 - atoi(a1.substr(1).c_str()); + rule = replaceAll(rule, actual_vars[i], args[ind]); + } } - + + if (!isOpX(rule)) rule = mk(mk(m_efac), rule); + Expr body = rule->arg(0); Expr head = rule->arg(1); - + hr.head = head->arg(0); hr.dstRelation = head->arg(0)->arg(0); - preprocess(body, hr.srcVars, fp.m_rels, hr.srcRelation, hr.lin); + ExprVector origSrcVars; + ExprVector lin; + preprocess(body, origSrcVars, fp.m_rels, hr.srcRelation, lin); hr.isFact = isOpX(hr.srcRelation); hr.isQuery = (hr.dstRelation == failDecl); hr.isInductive = (hr.srcRelation == hr.dstRelation); - hr.body = conjoin(hr.lin, m_efac); + hr.body = conjoin(lin, m_efac); outgs[hr.srcRelation].push_back(chcs.size()-1); - + + ExprVector origDstVars; + if (!hr.isQuery) { for (auto it = head->args_begin()+1, end = head->args_end(); it != end; ++it) - hr.dstVars.push_back(*it); - } - - for(auto &a: args) + origDstVars.push_back(*it); + } + + hr.assignVarsAndRewrite (origSrcVars, invVars[hr.srcRelation], + origDstVars, invVars[hr.dstRelation]); + + for (auto &a: args) { bool found = false; for (auto &b : hr.dstVars) diff --git a/include/deep/LinCom.hpp b/include/deep/LinCom.hpp index ca91c3bde..6a077074e 100644 --- a/include/deep/LinCom.hpp +++ b/include/deep/LinCom.hpp @@ -205,7 +205,9 @@ namespace ufo int indexGT; int indexGE; - + + ExprSet nonlinVarsSet; + public: ExprMap nonlinVars; @@ -270,6 +272,8 @@ namespace ufo // // finally, map values to expressions for (auto a : intCoefs) intCoefsE.push_back(mkTerm (mpz_class (a), m_efac)); // assemble expressions for (auto a : intConsts) intConstsE.push_back(mkTerm (mpz_class (a), m_efac)); // + + for (auto &a : nonlinVars) nonlinVarsSet.insert(a.second); } vector& getConsts() @@ -356,8 +360,13 @@ namespace ufo Expr lc = assembleLinComb(s); Expr ineq = getAtom(templ, lc, ic); - if (replaceNonlin) - for (auto &a : nonlinVars) ineq = replaceAll(ineq, a.second, a.first); + if (replaceNonlin && nonlinVarsSet.size() > 0) + { + while (!emptyIntersect(ineq, nonlinVarsSet)) // replace cascadically + { + for (auto &a : nonlinVars) ineq = replaceAll(ineq, a.second, a.first); + } + } return ineq; } @@ -1085,7 +1094,8 @@ namespace ufo void stabilizeDensities(set& arities, bool addEpsilon) { int min_freq = INT_MAX; - int num_zeros, eps = 0; + int num_zeros = 0; + int eps = 0; for (auto & ar : orAritiesDensity) { @@ -1098,6 +1108,8 @@ namespace ufo } if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); + else if (num_zeros == orAritiesDensity.size()) eps = 1; + for (auto & ar : orAritiesDensity) { if (ar.second == 0) ar.second = eps; @@ -1118,6 +1130,8 @@ namespace ufo } if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); + else if (num_zeros == plusAritiesDensity[ar].size()) eps = 1; + for (auto & pl : plusAritiesDensity[ar]) { if (pl.second == 0) pl.second = eps; @@ -1138,6 +1152,8 @@ namespace ufo } if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); + else if (num_zeros == coefDensity[ar][i].size()) eps = 1; + for (auto & c : coefDensity[ar][i]) { if (c.second == 0) c.second = eps; @@ -1157,6 +1173,8 @@ namespace ufo } if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); + else if (num_zeros == intConstDensity[ar].size()) eps = 1; + for (auto & c : intConstDensity[ar]) { if (c.second == 0) c.second = eps; @@ -1175,6 +1193,8 @@ namespace ufo } if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); + else if (num_zeros == cmpOpDensity[ar].size()) eps = 1; + for (auto & c : cmpOpDensity[ar]) { if (c.second == 0) c.second = eps; @@ -1195,6 +1215,8 @@ namespace ufo } if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); + else if (num_zeros == varDensity[ar][i].size()) eps = 1; + for (auto &b : varDensity[ar][i]) { if (b.second == 0) b.second = eps; diff --git a/include/deep/RndLearner.hpp b/include/deep/RndLearner.hpp index 315840af5..9bff20889 100644 --- a/include/deep/RndLearner.hpp +++ b/include/deep/RndLearner.hpp @@ -14,18 +14,17 @@ using namespace std; using namespace boost; namespace ufo { - class RndLearner { private: - + ExprFactory &m_efac; EZ3 &m_z3; SMTUtils u; ufo::ZSolver m_smt_solver; vector> m_smt_safety_solvers; map safety_progress; - + CHCs& ruleManager; vector decls; vector> lfs; @@ -42,13 +41,14 @@ namespace ufo bool kinduction; bool printLog; - public: + + public: RndLearner (ExprFactory &efac, EZ3 &z3, CHCs& r, bool k, bool b1, bool b2, bool b3) : m_efac(efac), m_z3(z3), ruleManager(r), m_smt_solver (z3), u(efac), invNumber(0), numOfSMTChecks(0), oneInductiveProof(true), kind_succeeded (!k), densecode(b1), addepsilon(b2), aggressivepruning(b3), - printLog(true) {} + printLog(false){} bool isTautology (Expr a) // adjusted for big disjunctions { @@ -349,7 +349,6 @@ namespace ufo numOfSMTChecks++; if (u.isImplies(hr.body, lemma2add)) continue; - hr.lin.push_back(lemma2add); hr.body = mk(hr.body, lemma2add); rels2update.insert(getVarIndex(hr.dstRelation, decls)); @@ -365,10 +364,8 @@ namespace ufo LAfactory& lf_before = lf[lf.size()-2]; LAfactory& lf_after = lf.back(); - for (auto a : lf_before.getVars()) - { - lf_after.addVar(a); - } + for (auto & var : ruleManager.invVars[decls[ind]]) lf_after.addVar(var); + lf_after.nonlinVars = lf_before.nonlinVars; doCodeSampling(decls[ind]); @@ -402,12 +399,7 @@ namespace ufo invNumber++; - for (int i = 1; i < invDecl->arity()-1; i++) - { - Expr new_name = mkTerm ("__v__" + to_string(i - 1), m_efac); - Expr var = bind::mkConst(new_name, invDecl->arg(i)); - lf.addVar(var); - } + for (auto & var : ruleManager.invVars[decls.back()]) lf.addVar(var); } void doCodeSampling(Expr invRel) @@ -444,12 +436,12 @@ namespace ufo } } - if (printLog && lf.nonlinVars.size() > 0) + if (lf.nonlinVars.size() > 0) { - outs() << "Multed vars: "; + if (printLog) outs() << "Multed vars: "; for (auto &a : lf.nonlinVars) { - outs() << *a.first << " = " << *a.second << "\n"; + if (printLog) outs() << *a.first << " = " << *a.second << "\n"; lf.addVar(a.second); } } @@ -645,10 +637,8 @@ namespace ufo curCandidates[j] = cand; } - - if (skip) continue; - iter++; + if (skip) continue; if (printLog) { @@ -657,8 +647,10 @@ namespace ufo outs () << "candidate for " << *decls[j] << ": " << *curCandidates[j] << "\n"; } + iter++; + // check all the candidates at once for all CHCs : - + if (checkCandidates()) { if (checkSafety()) // query is checked here diff --git a/include/ufo/Smt/Z3n.hpp b/include/ufo/Smt/Z3n.hpp index bce7102d9..73efa07f1 100644 --- a/include/ufo/Smt/Z3n.hpp +++ b/include/ufo/Smt/Z3n.hpp @@ -1020,7 +1020,9 @@ namespace ufo for (unsigned i = 0; i < rules.size (); ++i){ Expr rule = z3.toExpr (rules [i]); m_rules.push_back(rule); - + + if (!isOpX(rule)) continue; + Expr head = rule->arg(rule->arity() - 1)->arg(1); if (isOpX(head)){ if (head->arity () > 0){ From 642d4d7faec194c6b78da8fb50ee34d2bfd1ec28 Mon Sep 17 00:00:00 2001 From: Sam Kaufman Date: Sun, 10 Sep 2017 15:55:59 -0700 Subject: [PATCH 039/236] Corrected build commands in README --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index fbb2f503a..4579769d3 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ Compiles with gcc-5 (on Linux) and clang-700 (on Mac). Assumes preinstalled Gmp * `cd aeval ; mkdir build ; cd build` * `cmake ../` * `make` to build dependencies (Z3 and LLVM) -* `make deephorn` to build FreqHorn +* `make` (again) to build FreqHorn The binary of FreqHorn can be found at `build/tools/deep/`. Run `./tools/deep/deephorn --help` for the usage info. From 540ef17f06868a79b07b0019b78701bcacfc8faf Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Sat, 16 Sep 2017 16:47:23 -0700 Subject: [PATCH 040/236] added benchmarks mostly from Anthony DeRossi --- bench_horn/abdu_04.smt2 | 29 ++++++++++++++++++ bench_horn/css2003_true-unreach-call.smt2 | 33 +++++++++++++++++++++ bench_horn/dillig02.smt2 | 34 +++++++++++++++++++++ bench_horn/dillig04.smt2 | 24 +++++++++++++++ bench_horn/dillig08.smt2 | 29 ++++++++++++++++++ bench_horn/dillig10.smt2 | 30 +++++++++++++++++++ bench_horn/dillig13.smt2 | 26 ++++++++++++++++ bench_horn/dillig14.smt2 | 27 +++++++++++++++++ bench_horn/dillig16.smt2 | 28 ++++++++++++++++++ bench_horn/dillig18.smt2 | 25 ++++++++++++++++ bench_horn/dillig21.smt2 | 36 +++++++++++++++++++++++ bench_horn/dillig22.smt2 | 29 ++++++++++++++++++ bench_horn/dillig37.smt2 | 25 ++++++++++++++++ bench_horn/dillig41.smt2 | 25 ++++++++++++++++ bench_horn/dillig42.smt2 | 31 +++++++++++++++++++ bench_horn/dillig43.smt2 | 24 +++++++++++++++ bench_horn/dillig44.smt2 | 25 ++++++++++++++++ bench_horn/dillig46.smt2 | 33 +++++++++++++++++++++ bench_horn/hhk2008_true-unreach-call.smt2 | 28 ++++++++++++++++++ bench_horn/n_c11.smt2 | 26 ++++++++++++++++ bench_horn/phases_true-unreach-call1.smt2 | 30 +++++++++++++++++++ bench_horn/samples_search_16.smt2 | 32 ++++++++++++++++++++ bench_horn/samples_search_17.smt2 | 32 ++++++++++++++++++++ bench_horn/samples_search_18.smt2 | 30 +++++++++++++++++++ bench_horn/samples_search_19.smt2 | 33 +++++++++++++++++++++ bench_horn/samples_search_20.smt2 | 33 +++++++++++++++++++++ 26 files changed, 757 insertions(+) create mode 100644 bench_horn/abdu_04.smt2 create mode 100644 bench_horn/css2003_true-unreach-call.smt2 create mode 100644 bench_horn/dillig02.smt2 create mode 100644 bench_horn/dillig04.smt2 create mode 100644 bench_horn/dillig08.smt2 create mode 100644 bench_horn/dillig10.smt2 create mode 100644 bench_horn/dillig13.smt2 create mode 100644 bench_horn/dillig14.smt2 create mode 100644 bench_horn/dillig16.smt2 create mode 100644 bench_horn/dillig18.smt2 create mode 100644 bench_horn/dillig21.smt2 create mode 100644 bench_horn/dillig22.smt2 create mode 100644 bench_horn/dillig37.smt2 create mode 100644 bench_horn/dillig41.smt2 create mode 100644 bench_horn/dillig42.smt2 create mode 100644 bench_horn/dillig43.smt2 create mode 100644 bench_horn/dillig44.smt2 create mode 100644 bench_horn/dillig46.smt2 create mode 100644 bench_horn/hhk2008_true-unreach-call.smt2 create mode 100644 bench_horn/n_c11.smt2 create mode 100644 bench_horn/phases_true-unreach-call1.smt2 create mode 100644 bench_horn/samples_search_16.smt2 create mode 100644 bench_horn/samples_search_17.smt2 create mode 100644 bench_horn/samples_search_18.smt2 create mode 100644 bench_horn/samples_search_19.smt2 create mode 100644 bench_horn/samples_search_20.smt2 diff --git a/bench_horn/abdu_04.smt2 b/bench_horn/abdu_04.smt2 new file mode 100644 index 000000000..5485664c2 --- /dev/null +++ b/bench_horn/abdu_04.smt2 @@ -0,0 +1,29 @@ +(declare-rel inv (Int Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var a Int) +(declare-var a1 Int) +(declare-var b Int) +(declare-var b1 Int) +(declare-var len Int) + +(declare-rel fail ()) + +(rule (=> (and (= x 0) (= a 0) (= b 0) (>= len 0)) (inv x a b len))) + +(rule (=> + (and + (inv x a b len) + (= x1 (+ x 1)) + (or + (and (= a1 (+ a 1)) (= b1 (+ b 2))) + (and (= a1 (+ a 2)) (= b1 (+ b 1))) + ) + ) + (inv x1 a1 b1 len) + ) +) + +(rule (=> (and (inv x a b len) (not (= (+ a b) (* 3 x)))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/css2003_true-unreach-call.smt2 b/bench_horn/css2003_true-unreach-call.smt2 new file mode 100644 index 000000000..6d3ad40d5 --- /dev/null +++ b/bench_horn/css2003_true-unreach-call.smt2 @@ -0,0 +1,33 @@ +(declare-rel inv (Int Int Int Int Int)) +(declare-var i0 Int) +(declare-var i1 Int) +(declare-var j0 Int) +(declare-var j1 Int) +(declare-var k0 Int) +(declare-var k1 Int) +(declare-var LRG1 Int) ; 1000 +(declare-var LRG2 Int) ; 268435455 + +(declare-rel fail ()) + +(rule (=> (and (= i1 1) (= j1 1) (<= 0 k1) (<= k1 1) + (< LRG1 LRG2) + (= LRG1 1000)) + (inv i1 j1 k1 LRG1 LRG2))) + +(rule (=> + (and + (inv i0 j0 k0 LRG1 LRG2) + (< i0 LRG2) + (= i1 (+ i0 1)) + (= j1 (+ j0 k0)) + (= k1 (- k0 1)) + ) + (inv i1 j1 k1 LRG1 LRG2) + ) +) + +(rule (=> (and (inv i0 j0 k0 LRG1 LRG2) (< i0 LRG2) + (not (and (<= 1 (+ i0 k0)) (<= (+ i0 k0) 2) (>= i0 1)))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/dillig02.smt2 b/bench_horn/dillig02.smt2 new file mode 100644 index 000000000..ace56c2d5 --- /dev/null +++ b/bench_horn/dillig02.smt2 @@ -0,0 +1,34 @@ +(declare-rel inv (Int Int Int Int Int Int)) +(declare-var i0 Int) +(declare-var i1 Int) +(declare-var j0 Int) +(declare-var j1 Int) +(declare-var z0 Int) +(declare-var z1 Int) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var y0 Int) +(declare-var y1 Int) +(declare-var w0 Int) +(declare-var w1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= i1 1) (= j1 0) (= z1 (- i1 j1)) (= x1 0) (= y1 0) (= w1 0)) + (inv i1 j1 z1 x1 y1 w1))) + +(rule (=> + (and + (inv i0 j0 z0 x0 y0 w0) + (= z1 (+ z0 x0 y0 w0)) + (= y1 (+ y0 1)) + (= x1 (ite (= (mod z1 2) 1) (+ x0 1) x0)) + (= w1 (+ w0 2)) + ) + (inv i0 j0 z1 x1 y1 w1) + ) +) + +(rule (=> (and (inv i1 j1 z1 x1 y1 w1) (not (= x1 y1))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/dillig04.smt2 b/bench_horn/dillig04.smt2 new file mode 100644 index 000000000..dbd19ceb5 --- /dev/null +++ b/bench_horn/dillig04.smt2 @@ -0,0 +1,24 @@ +(declare-rel inv (Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var y0 Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (=> (= x1 -50) (inv x1 y1))) + +(rule (=> + (and + (inv x0 y0) + (< x0 0) + (= x1 (+ x0 y0)) + (= y1 (+ y0 1)) + ) + (inv x1 y1) + ) +) + +(rule (=> (and (inv x1 y1) (not (< x1 0)) (not (> y1 0))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/dillig08.smt2 b/bench_horn/dillig08.smt2 new file mode 100644 index 000000000..fd62b79f1 --- /dev/null +++ b/bench_horn/dillig08.smt2 @@ -0,0 +1,29 @@ +(declare-rel inv (Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var y0 Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= y1 0)) (inv x1 y1))) + +(rule (=> + (and + (inv x0 y0) + (or + (and (= x1 (+ x0 1)) (= y1 (+ y0 100))) + (and (= x1 x0) (= y1 y0)) + (and + (= x1 (ite (>= x0 4) (+ x0 1) x0)) + (= y1 (ite (>= x0 4) (+ y0 1) (ite (< x0 0) (- y0 1) y0))) + ) + ) + ) + (inv x1 y1) + ) +) + +(rule (=> (and (inv x1 y1) (not (< x1 4)) (not (> y1 2))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/dillig10.smt2 b/bench_horn/dillig10.smt2 new file mode 100644 index 000000000..60e6d47e7 --- /dev/null +++ b/bench_horn/dillig10.smt2 @@ -0,0 +1,30 @@ +(declare-rel inv (Int Int Int Int)) +(declare-var z0 Int) +(declare-var z1 Int) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var y0 Int) +(declare-var y1 Int) +(declare-var w0 Int) +(declare-var w1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= z1 0) (= x1 0) (= y1 0) (= w1 1)) + (inv z1 x1 y1 w1))) + +(rule (=> + (and + (inv z0 x0 y0 w0) + (= x1 (ite (= w0 1) (+ x0 1) x0)) + (= w1 (ite (= w0 1) 0 w0)) + (= y1 (ite (= z0 0) (+ y0 1) y0)) + (= z1 (ite (= z0 0) 1 z0)) + ) + (inv z1 x1 y1 w1) + ) +) + +(rule (=> (and (inv z1 x1 y1 w1) (not (= x1 y1))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/dillig13.smt2 b/bench_horn/dillig13.smt2 new file mode 100644 index 000000000..13a01d384 --- /dev/null +++ b/bench_horn/dillig13.smt2 @@ -0,0 +1,26 @@ +(declare-rel inv (Int Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var y0 Int) +(declare-var y1 Int) +(declare-var flag Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 2) (= y1 0)) (inv x1 y1 flag))) + +(rule (=> + (and + (inv x0 y0 flag) + (or + (and (= flag 0) (= x1 (+ x0 4)) (= y1 y0)) + (and (not (= flag 0)) (= x1 (+ x0 2)) (= y1 (+ y0 1))) + ) + ) + (inv x1 y1 flag) + ) +) + +(rule (=> (and (inv x1 y1 flag) (not (= y1 0)) (not (= x1 (+ 2 (* 2 y1))))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/dillig14.smt2 b/bench_horn/dillig14.smt2 new file mode 100644 index 000000000..8f8e7b17b --- /dev/null +++ b/bench_horn/dillig14.smt2 @@ -0,0 +1,27 @@ +(declare-rel inv (Int Int Int)) +(declare-var z0 Int) +(declare-var z1 Int) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var y0 Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (=> (and (> z1 0) (= x1 0) (= y1 1)) + (inv x1 y1 z1))) + +(rule (=> + (and + (inv x0 y0 z0) + (<= y0 z0) + (= y1 (+ y0 1)) + (or (= x1 (+ x0 1)) (= x1 (- x0 1))) + ) + (inv x1 y1 z0) + ) +) + +(rule (=> (and (inv x1 y1 z1) (> y1 z1) (not (and (>= x1 (- z1)) (<= x1 z1)))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/dillig16.smt2 b/bench_horn/dillig16.smt2 new file mode 100644 index 000000000..798787912 --- /dev/null +++ b/bench_horn/dillig16.smt2 @@ -0,0 +1,28 @@ +(declare-rel inv (Int Int Int Int)) +(declare-var z0 Int) +(declare-var z1 Int) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var y0 Int) +(declare-var y1 Int) +(declare-var w0 Int) +(declare-var w1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= z1 x1) (= y1 w1)) (inv x1 y1 z1 w1))) + +(rule (=> + (and + (inv x0 y0 z0 w0) + (not (= x0 0)) + (= x1 (- x0 1)) + (= y1 (- y0 1)) + ) + (inv x1 y1 z0 w0) + ) +) + +(rule (=> (and (inv x1 y1 z1 w1) (= x1 0) (= z1 w1) (not (= y1 0))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/dillig18.smt2 b/bench_horn/dillig18.smt2 new file mode 100644 index 000000000..50f149d04 --- /dev/null +++ b/bench_horn/dillig18.smt2 @@ -0,0 +1,25 @@ +(declare-rel inv (Int Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var y0 Int) +(declare-var y1 Int) +(declare-var flag Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= y1 0)) (inv x1 y1 flag))) + +(rule (=> + (and + (inv x0 y0 flag) + (< x0 100) + (= y1 (ite (= flag 1) (+ y0 1) y0)) + (= x1 (+ x0 1)) + ) + (inv x1 y1 flag) + ) +) + +(rule (=> (and (inv x1 y1 flag) (>= x1 100) (= flag 1) (not (= y1 100))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/dillig21.smt2 b/bench_horn/dillig21.smt2 new file mode 100644 index 000000000..7d9d1aa61 --- /dev/null +++ b/bench_horn/dillig21.smt2 @@ -0,0 +1,36 @@ +(declare-rel inv (Int Int Int Int Int)) +(declare-var c1 Int) +(declare-var c2 Int) +(declare-var k0 Int) +(declare-var k1 Int) +(declare-var i0 Int) +(declare-var i1 Int) +(declare-var n0 Int) +(declare-var n1 Int) +(declare-var x1 Int) +(declare-var v0 Int) +(declare-var v1 Int) +(declare-var w0 Int) +(declare-var w1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= c1 4000) (= c2 2000) (= k1 0) (= i1 0) (> n1 0) (< n1 10)) + (inv c1 c2 k1 i1 n1))) + +(rule (=> + (and + (inv c1 c2 k0 i0 n0) + (< i0 n0) + (= i1 (+ i0 1)) + (= w1 (mod w0 2)) + (= v1 (ite (= w1 0) 0 1)) + (= k1 (ite (= v1 0) (+ k0 c1) (+ k0 c2))) + ) + (inv c1 c2 k1 i1 n0) + ) +) + +(rule (=> (and (inv c1 c2 k1 i1 n1) (>= i1 n1) (not (> k1 n1))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/dillig22.smt2 b/bench_horn/dillig22.smt2 new file mode 100644 index 000000000..6261ea708 --- /dev/null +++ b/bench_horn/dillig22.smt2 @@ -0,0 +1,29 @@ +(declare-rel inv (Int Int Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var y0 Int) +(declare-var y1 Int) +(declare-var z0 Int) +(declare-var z1 Int) +(declare-var k0 Int) +(declare-var k1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= y1 0) (= z1 0) (= k1 0)) (inv x1 y1 z1 k1))) + +(rule (=> + (and + (inv x0 y0 z0 k0) + (= x1 (ite (= (mod k0 3) 0) (+ x0 1) x0)) + (= y1 (+ y0 1)) + (= z1 (+ z0 1)) + (= k1 (+ x1 y1 z1)) + ) + (inv x1 y1 z1 k1) + ) +) + +(rule (=> (and (inv x1 y1 z1 k1) (not (and (= x1 y1) (= y1 z1)))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/dillig37.smt2 b/bench_horn/dillig37.smt2 new file mode 100644 index 000000000..d24fa56ee --- /dev/null +++ b/bench_horn/dillig37.smt2 @@ -0,0 +1,25 @@ +(declare-rel inv (Int Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var y0 Int) +(declare-var y1 Int) +(declare-var n Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= y1 0) (>= n 0)) (inv x1 y1 n))) + +(rule (=> + (and + (inv x0 y0 n) + (< x0 n) + (or (= y1 x0) (= y1 y0)) + (= x1 (+ x0 1)) + ) + (inv x1 y1 n) + ) +) + +(rule (=> (and (inv x1 y1 n) (>= x1 n) (not (and (<= 0 y1) (<= y1 n)))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/dillig41.smt2 b/bench_horn/dillig41.smt2 new file mode 100644 index 000000000..f32352ef4 --- /dev/null +++ b/bench_horn/dillig41.smt2 @@ -0,0 +1,25 @@ +(declare-rel inv (Int Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var y0 Int) +(declare-var y1 Int) +(declare-var n Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= y1 0) (>= n 0)) (inv x1 y1 n))) + +(rule (=> + (and + (inv x0 y0 n) + (< x0 n) + (= x1 (+ x0 1)) + (= y1 (+ y0 x1)) + ) + (inv x1 y1 n) + ) +) + +(rule (=> (and (inv x1 y1 n) (>= x1 n) (not (> (+ 1 x1 y1) (* 2 n)))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/dillig42.smt2 b/bench_horn/dillig42.smt2 new file mode 100644 index 000000000..5f6e9b7f1 --- /dev/null +++ b/bench_horn/dillig42.smt2 @@ -0,0 +1,31 @@ +(declare-rel inv (Int Int Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var y0 Int) +(declare-var y1 Int) +(declare-var y2 Int) +(declare-var n0 Int) +(declare-var n1 Int) +(declare-var flag Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 1) (= y1 1) (= n0 (ite (= flag 1) 0 1))) (inv x1 y1 n0 flag))) + +(rule (=> + (and + (inv x0 y0 n0 flag) + (= n1 (ite (= flag 1) (+ x0 y0) (+ x0 y0 1))) + (= x1 (ite (= flag 1) (+ x0 1) x0)) + (= y1 (ite (= flag 1) y0 (+ y0 1))) + (= x2 (ite (= (mod n1 2) 1) x1 (+ x1 1))) + (= y2 (ite (= (mod n1 2) 1) (+ y1 1) y1)) + ) + (inv x2 y2 n1 flag) + ) +) + +(rule (=> (and (inv x1 y1 n0 flag) (= n1 (ite (= flag 1) (+ n0 1) n0)) (not (= (mod n1 2) 1))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/dillig43.smt2 b/bench_horn/dillig43.smt2 new file mode 100644 index 000000000..4972edd06 --- /dev/null +++ b/bench_horn/dillig43.smt2 @@ -0,0 +1,24 @@ +(declare-rel inv (Int Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var y0 Int) +(declare-var y1 Int) +(declare-var n Int) + +(declare-rel fail ()) + +(rule (=> (and (= n y1) (not (= x1 y1))) (inv x1 y1 n))) + +(rule (=> + (and + (inv x0 y0 n) + (> x0 0) + (= y1 (+ y0 x0)) + ) + (inv x0 y1 n) + ) +) + +(rule (=> (and (inv x1 y1 n) (not (>= y1 n))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/dillig44.smt2 b/bench_horn/dillig44.smt2 new file mode 100644 index 000000000..7af0a8f86 --- /dev/null +++ b/bench_horn/dillig44.smt2 @@ -0,0 +1,25 @@ +(declare-rel inv (Int Int Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var y0 Int) +(declare-var y1 Int) +(declare-var n Int) +(declare-var flag Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= y1 0) (= n (ite (= flag 1) 1 2))) (inv x1 y1 n flag))) + +(rule (=> + (and + (inv x0 y0 n flag) + (= x1 (+ x0 1)) + (= y1 (+ y0 n)) + ) + (inv x1 y1 n flag) + ) +) + +(rule (=> (and (inv x1 y1 n flag) (= flag 1) (not (= x1 y1))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/dillig46.smt2 b/bench_horn/dillig46.smt2 new file mode 100644 index 000000000..f62049bd3 --- /dev/null +++ b/bench_horn/dillig46.smt2 @@ -0,0 +1,33 @@ +(declare-rel inv (Int Int Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var y0 Int) +(declare-var y1 Int) +(declare-var z0 Int) +(declare-var z1 Int) +(declare-var w0 Int) +(declare-var w1 Int) +(declare-var tmp0 Int) +(declare-var tmp1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= y1 0) (= z1 0) (= w1 1)) (inv x1 y1 z1 w1))) + +(rule (=> + (and + (inv x0 y0 z0 w0) + (= tmp0 (mod w0 2)) + (= tmp1 (mod z0 2)) + (= x1 (ite (= tmp0 1) (+ x0 1) x0)) + (= w1 (ite (= tmp0 1) (+ w0 1) w0)) + (= y1 (ite (= tmp1 0) (+ y0 1) y0)) + (= z1 (ite (= tmp1 0) (+ z0 1) z0)) + ) + (inv x1 y1 z1 w1) + ) +) + +(rule (=> (and (inv x0 y0 z0 w0) (not (<= x0 1))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/hhk2008_true-unreach-call.smt2 b/bench_horn/hhk2008_true-unreach-call.smt2 new file mode 100644 index 000000000..4c30a44b6 --- /dev/null +++ b/bench_horn/hhk2008_true-unreach-call.smt2 @@ -0,0 +1,28 @@ +(declare-rel inv (Int Int Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var y0 Int) +(declare-var y1 Int) +(declare-var res0 Int) +(declare-var res1 Int) +(declare-var cnt0 Int) +(declare-var cnt1 Int) + +(declare-rel fail ()) + +(rule (=> (and (<= x1 10000) (<= 0 y1) (<= y1 10000) (= res1 x1) (= cnt1 y1)) (inv x1 y1 res1 cnt1))) + +(rule (=> + (and + (inv x0 y0 res0 cnt0) + (> cnt0 0) + (= cnt1 (- cnt0 1)) + (= res1 (+ res0 1)) + ) + (inv x0 y0 res1 cnt1) + ) +) + +(rule (=> (and (inv x1 y1 res1 cnt1) (<= cnt1 0) (not (= res1 (+ x1 y1)))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/n_c11.smt2 b/bench_horn/n_c11.smt2 new file mode 100644 index 000000000..2b2469223 --- /dev/null +++ b/bench_horn/n_c11.smt2 @@ -0,0 +1,26 @@ +(declare-rel inv (Int)) +(declare-var len0 Int) +(declare-var len1 Int) +(declare-var len2 Int) + +(declare-rel fail ()) + +(rule (=> (= len0 0) (inv len0))) + +(rule (=> + (and + (inv len0) + (= len1 (ite (= len0 4) 0 len0)) + (= len2 (+ len1 1)) + ) + (inv len2) + ) +) + + +(rule (=> (and (inv len0) + (not (and (>= len0 0) (<= len0 5)))) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn/phases_true-unreach-call1.smt2 b/bench_horn/phases_true-unreach-call1.smt2 new file mode 100644 index 000000000..7e934d22a --- /dev/null +++ b/bench_horn/phases_true-unreach-call1.smt2 @@ -0,0 +1,30 @@ +(declare-rel inv (Int Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var LRG1 Int) ; 65520 +(declare-var LRG2 Int) ; 268435455 +(declare-var tmp1 Int) +(declare-var tmp2 Int) + +(declare-rel fail ()) + +(rule (=> (and + (= x0 0) (< 0 LRG1) (< LRG1 LRG2) + (= LRG1 (* 2 tmp1)) + (= LRG2 (+ (* 2 tmp2) 1))) + (inv x0 LRG1 LRG2))) + +(rule (=> + (and + (inv x0 LRG1 LRG2) + (< x0 LRG2) + (= x1 (ite (< x0 LRG1) (+ x0 1) (+ x0 2))) + ) + (inv x1 LRG1 LRG2) + ) +) + +(rule (=> (and (inv x0 LRG1 LRG2) (>= x0 LRG2) + (not (= (mod x0 2) 0))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/samples_search_16.smt2 b/bench_horn/samples_search_16.smt2 new file mode 100644 index 000000000..3fd7a7f0a --- /dev/null +++ b/bench_horn/samples_search_16.smt2 @@ -0,0 +1,32 @@ +(declare-rel itp (Int Int Int)) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var y Int) + +(declare-rel fail ()) + +(rule (=> (and + + (= x1 0) (> y 0) (< y 5) (= x3 (* 3 y)) +; (= x1 0) (>= x3 3) (<= x3 12) + +) (itp x1 x3 y ))) + +(rule (=> + (and + (itp x1 x3 y ) + (< x1 200) + (= x2 (+ x1 1)) + (= x4 (+ x3 1)) + ) + (itp x2 x4 y) + ) +) + +(rule (=> (and (itp x1 x3 y) + (not (and (>= x3 3) (<= x3 212)) +)) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/samples_search_17.smt2 b/bench_horn/samples_search_17.smt2 new file mode 100644 index 000000000..4b9667797 --- /dev/null +++ b/bench_horn/samples_search_17.smt2 @@ -0,0 +1,32 @@ +(declare-rel itp (Int Int Int)) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var y Int) + +(declare-rel fail ()) + +(rule (=> (and + + (= x1 0) (> y 0) (< y 5) (= x3 (* 3 y)) +; (= x1 0) (>= x3 3) (<= x3 12) + +) (itp x1 x3 y ))) + +(rule (=> + (and + (itp x1 x3 y ) + (< x1 1000) + (= x2 (+ x1 1)) + (= x4 (+ x3 1)) + ) + (itp x2 x4 y) + ) +) + +(rule (=> (and (itp x1 x3 y) + (not (and (>= x3 3) (<= x3 1012)) +)) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/samples_search_18.smt2 b/bench_horn/samples_search_18.smt2 new file mode 100644 index 000000000..d36a4a40b --- /dev/null +++ b/bench_horn/samples_search_18.smt2 @@ -0,0 +1,30 @@ +(declare-rel inv (Int Int Int Int)) +(declare-var z0 Int) +(declare-var z1 Int) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var y0 Int) +(declare-var y1 Int) +(declare-var w0 Int) +(declare-var w1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= z1 0) (= x1 0) (= y1 0) (= w1 1)) + (inv z1 x1 y1 w1))) + +(rule (=> + (and + (inv z0 x0 y0 w0) + (= x1 (ite (= w0 1) (+ x0 1) x0)) + (= w1 (ite (= w0 1) 0 1)) + (= y1 (ite (= z0 0) (+ y0 1) y0)) + (= z1 (ite (= z0 0) 1 0)) + ) + (inv z1 x1 y1 w1) + ) +) + +(rule (=> (and (inv z1 x1 y1 w1) (not (= x1 y1))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/samples_search_19.smt2 b/bench_horn/samples_search_19.smt2 new file mode 100644 index 000000000..85c0c65c8 --- /dev/null +++ b/bench_horn/samples_search_19.smt2 @@ -0,0 +1,33 @@ +(declare-rel inv (Int Int Int Int Int)) +(declare-var k0 Int) +(declare-var k1 Int) +(declare-var i0 Int) +(declare-var i1 Int) +(declare-var j0 Int) +(declare-var j1 Int) +(declare-var n0 Int) +(declare-var n1 Int) +(declare-var b0 Int) +(declare-var b1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= k1 100) (= i1 j1) (= n1 0) (= i1 0) (or (= b1 0) (= b1 1))) + (inv k1 i1 j1 n1 b1))) + +(rule (=> + (and + (inv k0 i0 j0 n0 b0) + (< n0 (* 2 k0)) + (= i1 (ite (= b0 0) (+ i0 1) i0)) + (= j1 (ite (= b0 0) j0 (+ j0 1))) + (= b1 (ite (= b0 0) 1 0)) + (= n1 (+ n0 1)) + ) + (inv k0 i1 j1 n1 b1) + ) +) + +(rule (=> (and (inv k1 i1 j1 n1 b1) (>= n1 (* 2 k1)) (not (= 0 (mod n1 2)))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/samples_search_20.smt2 b/bench_horn/samples_search_20.smt2 new file mode 100644 index 000000000..e89431de3 --- /dev/null +++ b/bench_horn/samples_search_20.smt2 @@ -0,0 +1,33 @@ +(declare-rel inv (Int Int Int Int Int)) +(declare-var k0 Int) +(declare-var k1 Int) +(declare-var i0 Int) +(declare-var i1 Int) +(declare-var j0 Int) +(declare-var j1 Int) +(declare-var n0 Int) +(declare-var n1 Int) +(declare-var b0 Int) +(declare-var b1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= k1 100) (= i1 j1) (= n1 0) (= i1 0) (or (= b1 0) (= b1 1))) + (inv k1 i1 j1 n1 b1))) + +(rule (=> + (and + (inv k0 i0 j0 n0 b0) + (< n0 (* 2 k0)) + (= i1 (ite (= b0 0) (+ i0 1) i0)) + (= j1 (ite (= b0 0) j0 (+ j0 1))) + (= b1 (ite (= b0 0) 1 0)) + (= n1 (+ n0 1)) + ) + (inv k0 i1 j1 n1 b1) + ) +) + +(rule (=> (and (inv k1 i1 j1 n1 b1) (>= n1 (* 2 k1)) (not (= (+ i1 j1) n1))) fail)) + +(query fail :print-certificate true) \ No newline at end of file From 5041af37a07ed02819ec969c7e663f903bdce6c4 Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Thu, 21 Sep 2017 13:08:03 -0700 Subject: [PATCH 041/236] checking invariance of itp-based bounded proofs currently works for programs with one loop --- include/deep/BndExpl.hpp | 30 ++++++++++++- include/deep/RndLearner.hpp | 84 +++++++++++++++++++++++++++++++------ tools/deep/DeepHorn.cpp | 8 +++- 3 files changed, 106 insertions(+), 16 deletions(-) diff --git a/include/deep/BndExpl.hpp b/include/deep/BndExpl.hpp index 4cdf10299..8c3de7519 100644 --- a/include/deep/BndExpl.hpp +++ b/include/deep/BndExpl.hpp @@ -18,6 +18,8 @@ namespace ufo CHCs& ruleManager; Expr extraLemmas; + ExprVector bindVars1; + int tr_ind; // helper vars int pr_ind; int k_ind; @@ -76,7 +78,7 @@ namespace ufo { ExprVector ssa; - ExprVector bindVars1 = ruleManager.chcs[trace[0]].srcVars; + bindVars1 = ruleManager.chcs[trace[0]].srcVars; ExprVector bindVars2; int bindVar_index = 0; int locVar_index = 0; @@ -221,6 +223,32 @@ namespace ufo return inv; } + + Expr getBoundedItp(int bnd, Expr prop, ExprVector& vars) + { + vector> traces; + + getAllTraces(mk(m_efac), ruleManager.failDecl, bnd, vector(), traces); + + for (auto &a : traces) + { + a.erase (a.end()-1); // encode all but the last step + Expr q = toExpr(a); + for (int i = 0; i < bindVars1.size(); i++) prop = replaceAll(prop, vars[i], bindVars1[i]); + + Expr itp = getItp(q, prop); + if (itp != NULL) + { + for (int i = 0; i < bindVars1.size(); i++) itp = replaceAll(itp, bindVars1[i], vars[i]); + return itp; + } + else + { + return NULL; + } + } + return NULL; + } }; inline void unrollAndCheck(string smt, int bnd1, int bnd2) diff --git a/include/deep/RndLearner.hpp b/include/deep/RndLearner.hpp index 9bff20889..6f3ac5ea6 100644 --- a/include/deep/RndLearner.hpp +++ b/include/deep/RndLearner.hpp @@ -32,6 +32,9 @@ namespace ufo int invNumber; int numOfSMTChecks; + ExprSet itpCandidates; // itp-based bounded candidates + + bool itp_succeeded; bool kind_succeeded; // interaction with k-induction bool oneInductiveProof; @@ -44,9 +47,9 @@ namespace ufo public: - RndLearner (ExprFactory &efac, EZ3 &z3, CHCs& r, bool k, bool b1, bool b2, bool b3) : + RndLearner (ExprFactory &efac, EZ3 &z3, CHCs& r, bool k, bool i, bool b1, bool b2, bool b3) : m_efac(efac), m_z3(z3), ruleManager(r), m_smt_solver (z3), u(efac), - invNumber(0), numOfSMTChecks(0), oneInductiveProof(true), kind_succeeded (!k), + invNumber(0), numOfSMTChecks(0), oneInductiveProof(true), kind_succeeded (!k), itp_succeeded(!i), densecode(b1), addepsilon(b2), aggressivepruning(b3), printLog(false){} @@ -246,6 +249,56 @@ namespace ufo return kind_succeeded; } + void checkBoundedProofsBootstrap (int bnd) + { + assert (bnd >= 2); + + BndExpl be(ruleManager); + + HornRuleExt* pr; + for (auto & a : ruleManager.chcs) if (a.isQuery) pr = &a; + + for (int i = 2; i <= bnd; i++) + { + Expr invTmp = be.getBoundedItp(i, pr->body, pr->srcVars); + ExprSet cnjs; + getConj(invTmp, cnjs); + + for (auto & a : cnjs) itpCandidates.insert(a); + } + } + + bool checkBoundedProofs () + { + if (itp_succeeded) return false; + assert(invNumber == 1); + + for (auto it = itpCandidates.begin(), end = itpCandidates.end(); it != end; ) + { + curCandidates[0] = *it; // current limitation + + if (printLog) outs () << "itp candidate for " << *decls[0] << ": " << **it << "\n"; + + if (checkCandidates()) + { + reportCheckingResults(); + itpCandidates.erase(it++); + + if (checkSafety()) + { + outs () << "safety proven with itp\n"; + itp_succeeded = true; + return true; + } + } + else + { + ++it; + } + } + return false; + } + void resetSafetySolver() { int num = 0; @@ -651,18 +704,18 @@ namespace ufo // check all the candidates at once for all CHCs : - if (checkCandidates()) - { - if (checkSafety()) // query is checked here - { - success = true; - } - } + int isInductive = checkCandidates(); + if (isInductive) success = checkSafety(); // query is checked here reportCheckingResults(); if (success) break; - success = checkWithKInduction(); + if (isInductive) + { + success = checkWithKInduction(); + success = checkBoundedProofs(); + } + if (success) break; assignPriorities(); @@ -712,14 +765,14 @@ namespace ufo inline void learnInvariants(string smt, char * outfile, int maxAttempts, - bool kind=false, bool b1=true, bool b2=true, bool b3=true) + bool kind=false, bool itp=false, bool b1=true, bool b2=true, bool b3=true) { ExprFactory m_efac; EZ3 z3(m_efac); CHCs ruleManager(m_efac, z3); ruleManager.parse(smt); - RndLearner ds(m_efac, z3, ruleManager, kind, b1, b2, b3); + RndLearner ds(m_efac, z3, ruleManager, kind, itp, b1, b2, b3); ds.setupSafetySolver(); std::srand(std::time(0)); @@ -729,6 +782,11 @@ namespace ufo outs() << "WARNING: learning multiple invariants is currently unstable\n" << " it is suggested to disable \'aggressivepruning\'\n"; } + else if (itp) + { + // current limitation: ruleManager.decls.size() == 0 + ds.checkBoundedProofsBootstrap(3); + } for (auto& dcl: ruleManager.decls) { @@ -747,7 +805,7 @@ namespace ufo CHCs ruleManager(m_efac, z3); ruleManager.parse(string(chcfile)); - RndLearner ds(m_efac, z3, ruleManager, false, false, false, false); + RndLearner ds(m_efac, z3, ruleManager, false, false, false, false, false); ds.setupSafetySolver(); vector invNames; diff --git a/tools/deep/DeepHorn.cpp b/tools/deep/DeepHorn.cpp index 426212067..42588567b 100644 --- a/tools/deep/DeepHorn.cpp +++ b/tools/deep/DeepHorn.cpp @@ -41,6 +41,7 @@ int main (int argc, char ** argv) const char *OPT_HELP = "--help"; const char *OPT_MAX_ATTEMPTS = "--attempts"; const char *OPT_K_IND = "--kind"; + const char *OPT_ITP = "--itp"; const char *OPT_OUT_FILE = "--out"; const char *OPT_GET_FREQS = "--freqs"; const char *OPT_ADD_EPSILON = "--eps"; @@ -62,18 +63,21 @@ int main (int argc, char ** argv) " " << OPT_GET_FREQS << " calculate frequency distributions and sample from them\n" << " (if not specified, sample from uniform distributions)\n" << " " << OPT_K_IND << " run k-induction after each learned lemma\n" << - " (for pure k-induction, run 'kind ')\n"; + " (for pure k-induction, run 'kind ')\n" << + " " << OPT_ITP << " try invariance of itp-based bounded proofs\n"; return 0; } int maxAttempts = getIntValue(OPT_MAX_ATTEMPTS, 2000000, argc, argv); bool kinduction = getBoolValue(OPT_K_IND, false, argc, argv); + bool itp = getBoolValue(OPT_ITP, false, argc, argv); bool densecode = getBoolValue(OPT_GET_FREQS, false, argc, argv); bool addepsilon = getBoolValue(OPT_ADD_EPSILON, false, argc, argv); bool aggressivepruning = getBoolValue(OPT_AGG_PRUNING, false, argc, argv); char * outfile = getStrValue(OPT_OUT_FILE, NULL, argc, argv); - learnInvariants(string(argv[argc-1]), outfile, maxAttempts, kinduction, densecode, addepsilon, aggressivepruning); + learnInvariants(string(argv[argc-1]), outfile, maxAttempts, + kinduction, itp, densecode, addepsilon, aggressivepruning); return 0; } From a6e767680eac0a88198dee8b834100b6a0d60764 Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Fri, 29 Sep 2017 15:23:17 -0700 Subject: [PATCH 042/236] fixed stabilization of zero-frequencies (i.e., when epsilon disabled) --- include/deep/LinCom.hpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/include/deep/LinCom.hpp b/include/deep/LinCom.hpp index 6a077074e..63e506a63 100644 --- a/include/deep/LinCom.hpp +++ b/include/deep/LinCom.hpp @@ -1109,6 +1109,7 @@ namespace ufo if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); else if (num_zeros == orAritiesDensity.size()) eps = 1; + else eps = 0; for (auto & ar : orAritiesDensity) { @@ -1131,6 +1132,7 @@ namespace ufo if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); else if (num_zeros == plusAritiesDensity[ar].size()) eps = 1; + else eps = 0; for (auto & pl : plusAritiesDensity[ar]) { @@ -1153,6 +1155,7 @@ namespace ufo if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); else if (num_zeros == coefDensity[ar][i].size()) eps = 1; + else eps = 0; for (auto & c : coefDensity[ar][i]) { @@ -1174,6 +1177,7 @@ namespace ufo if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); else if (num_zeros == intConstDensity[ar].size()) eps = 1; + else eps = 0; for (auto & c : intConstDensity[ar]) { @@ -1194,6 +1198,7 @@ namespace ufo if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); else if (num_zeros == cmpOpDensity[ar].size()) eps = 1; + else eps = 0; for (auto & c : cmpOpDensity[ar]) { @@ -1216,6 +1221,7 @@ namespace ufo if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); else if (num_zeros == varDensity[ar][i].size()) eps = 1; + else eps = 0; for (auto &b : varDensity[ar][i]) { From 8e84207e706fef5ade036b5287bb9617a8d127c7 Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Sun, 8 Oct 2017 08:44:43 +0100 Subject: [PATCH 043/236] reconsidered the process of extracting subexpressions from code (e.g., now we ignore terms with mixed vars in disjunctions) --- bench_horn/bhmr2007_true-unreach-call.smt2 | 30 +++++++ bench_horn/dillig22-1.smt2 | 29 +++++++ bench_horn/dillig22-2.smt2 | 29 +++++++ bench_horn/dillig22-3.smt2 | 31 ++++++++ bench_horn/dillig22-4.smt2 | 28 +++++++ bench_horn/dillig22-5.smt2 | 28 +++++++ bench_horn/gj2007_true-unreach-call.smt2 | 25 ++++++ bench_horn/samples_only_09.smt2 | 27 +++++++ bench_horn/samples_only_10.smt2 | 25 ++++++ bench_horn/samples_only_11.smt2 | 26 ++++++ bench_horn/samples_search_21.smt2 | 29 +++++++ bench_horn/samples_search_22.smt2 | 29 +++++++ include/ae/AeValSolver.hpp | 7 +- include/deep/CodeSampler.hpp | 93 +++++++++++----------- 14 files changed, 388 insertions(+), 48 deletions(-) create mode 100644 bench_horn/bhmr2007_true-unreach-call.smt2 create mode 100644 bench_horn/dillig22-1.smt2 create mode 100644 bench_horn/dillig22-2.smt2 create mode 100644 bench_horn/dillig22-3.smt2 create mode 100644 bench_horn/dillig22-4.smt2 create mode 100644 bench_horn/dillig22-5.smt2 create mode 100644 bench_horn/gj2007_true-unreach-call.smt2 create mode 100644 bench_horn/samples_only_09.smt2 create mode 100644 bench_horn/samples_only_10.smt2 create mode 100644 bench_horn/samples_only_11.smt2 create mode 100644 bench_horn/samples_search_21.smt2 create mode 100644 bench_horn/samples_search_22.smt2 diff --git a/bench_horn/bhmr2007_true-unreach-call.smt2 b/bench_horn/bhmr2007_true-unreach-call.smt2 new file mode 100644 index 000000000..69d12a513 --- /dev/null +++ b/bench_horn/bhmr2007_true-unreach-call.smt2 @@ -0,0 +1,30 @@ +(declare-rel inv (Int Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var a Int) +(declare-var a1 Int) +(declare-var b Int) +(declare-var b1 Int) +(declare-var len Int) + +(declare-rel fail ()) + +(rule (=> (and (= x 0) (= a 0) (= b 0) (>= len 0)) (inv x a b len))) + +(rule (=> + (and + (inv x a b len) + (< x len) + (= x1 (+ x 1)) + (or + (and (= a1 (+ a 1)) (= b1 (+ b 2))) + (and (= a1 (+ a 2)) (= b1 (+ b 1))) + ) + ) + (inv x1 a1 b1 len) + ) +) + +(rule (=> (and (inv x a b len) (>= x len) (not (= (+ a b) (* 3 len)))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/dillig22-1.smt2 b/bench_horn/dillig22-1.smt2 new file mode 100644 index 000000000..c95cb0820 --- /dev/null +++ b/bench_horn/dillig22-1.smt2 @@ -0,0 +1,29 @@ +(declare-rel inv (Int Int Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var y0 Int) +(declare-var y1 Int) +(declare-var z0 Int) +(declare-var z1 Int) +(declare-var k0 Int) +(declare-var k1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= y1 0) (= z1 0) (= k1 0)) (inv x1 y1 z1 k1))) + +(rule (=> + (and + (inv x0 y0 z0 k0) + (= x1 (ite (= (mod k0 3) 0) (+ x0 1) x0)) + (= y1 (+ y0 1)) + (= z1 (+ z0 1)) + (= k1 (+ x1 y1 z1)) + ) + (inv x1 y1 z1 k1) + ) +) + +(rule (=> (and (inv x1 y1 z1 k1) (not (= y1 z1))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/dillig22-2.smt2 b/bench_horn/dillig22-2.smt2 new file mode 100644 index 000000000..6892e13af --- /dev/null +++ b/bench_horn/dillig22-2.smt2 @@ -0,0 +1,29 @@ +(declare-rel inv (Int Int Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var y0 Int) +(declare-var y1 Int) +(declare-var z0 Int) +(declare-var z1 Int) +(declare-var k0 Int) +(declare-var k1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= y1 0) (= z1 0) (= k1 0)) (inv x1 y1 z1 k1))) + +(rule (=> + (and + (inv x0 y0 z0 k0) + (= x1 (ite (= (mod k0 3) 0) (+ x0 1) x0)) + (= y1 (+ y0 1)) + (= z1 (+ z0 1)) + (= k1 (+ x1 y1 z1)) + ) + (inv x1 y1 z1 k1) + ) +) + +(rule (=> (and (inv x1 y1 z1 k1) (not (= x1 y1))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/dillig22-3.smt2 b/bench_horn/dillig22-3.smt2 new file mode 100644 index 000000000..9868dadad --- /dev/null +++ b/bench_horn/dillig22-3.smt2 @@ -0,0 +1,31 @@ +(declare-rel inv (Int Int Int Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var y0 Int) +(declare-var y1 Int) +(declare-var z0 Int) +(declare-var z1 Int) +(declare-var k0 Int) +(declare-var k1 Int) +(declare-var t0 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= y1 0) (= z1 0) (= k1 0)) (inv x1 y1 z1 k1 t0))) + +(rule (=> + (and + (inv x0 y0 z0 k0 t0) + (< y0 t0) + (= x1 (ite (= (mod k0 3) 0) (+ x0 1) x0)) + (= y1 (+ y0 1)) + (= z1 (+ z0 1)) + (= k1 (+ x1 y1 z1)) + ) + (inv x1 y1 z1 k1 t0) + ) +) + +(rule (=> (and (inv x1 y1 z1 k1 t0) (= y1 t0) (not (= t0 x1))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/dillig22-4.smt2 b/bench_horn/dillig22-4.smt2 new file mode 100644 index 000000000..68ddfdebb --- /dev/null +++ b/bench_horn/dillig22-4.smt2 @@ -0,0 +1,28 @@ +(declare-rel inv (Int Int Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var y0 Int) +(declare-var y1 Int) +(declare-var k0 Int) +(declare-var k1 Int) +(declare-var t0 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= y1 0) (= k1 0)) (inv x1 y1 k1 t0))) + +(rule (=> + (and + (inv x0 y0 k0 t0) + (< y0 t0) + (= x1 (ite (= (mod k0 2) 0) (+ x0 1) x0)) + (= y1 (+ y0 1)) + (= k1 (+ x1 y1)) + ) + (inv x1 y1 k1 t0) + ) +) + +(rule (=> (and (inv x1 y1 k1 t0) (= y1 t0) (not (= t0 x1))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/dillig22-5.smt2 b/bench_horn/dillig22-5.smt2 new file mode 100644 index 000000000..eae7081f1 --- /dev/null +++ b/bench_horn/dillig22-5.smt2 @@ -0,0 +1,28 @@ +(declare-rel inv (Int Int Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var y0 Int) +(declare-var y1 Int) +(declare-var k0 Int) +(declare-var k1 Int) +(declare-var N Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= y1 0) (= k1 0) (>= N 0)) (inv x1 y1 k1 N))) + +(rule (=> + (and + (inv x0 y0 k0 N) + (< y0 N) + (= x1 (ite (= (mod k0 2) 0) (+ x0 1) x0)) + (= y1 (+ y0 1)) + (= k1 (+ x1 y1)) + ) + (inv x1 y1 k1 N) + ) +) + +(rule (=> (and (inv x1 y1 k1 N) (>= y1 N) (not (= N x1))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/gj2007_true-unreach-call.smt2 b/bench_horn/gj2007_true-unreach-call.smt2 new file mode 100644 index 000000000..c4f2e0f3d --- /dev/null +++ b/bench_horn/gj2007_true-unreach-call.smt2 @@ -0,0 +1,25 @@ +(declare-rel inv (Int Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var y0 Int) +(declare-var y1 Int) +(declare-var LRG Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= y1 LRG) (> LRG 0)) (inv x1 y1 LRG))) + +(rule (=> + (and + (inv x0 y0 LRG) + (< x0 (* 2 LRG)) + (= x1 (+ x0 1)) + (= y1 (ite (< x0 LRG) y0 (+ y0 1))) + ) + (inv x1 y1 LRG) + ) +) + +(rule (=> (and (inv x1 y1 LRG) (>= x1 (* 2 LRG)) (not (= y1 (* 2 LRG)))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/samples_only_09.smt2 b/bench_horn/samples_only_09.smt2 new file mode 100644 index 000000000..5ed4e8dc2 --- /dev/null +++ b/bench_horn/samples_only_09.smt2 @@ -0,0 +1,27 @@ +(declare-rel itp (Int Int)) +(declare-var m Int) +(declare-var m1 Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var b Int) + +(declare-rel fail ()) + + +(rule (=> (and (= m 2) (= i 1)) (itp m i))) + +(rule (=> + (and + (itp m i) + (> m i) + (= m1 (+ m 1)) + (= i1 (+ i 1)) + ) + (itp m1 i1) + ) +) + + +(rule (=> (and (itp m i) (> i 80) (not (> m 81))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/samples_only_10.smt2 b/bench_horn/samples_only_10.smt2 new file mode 100644 index 000000000..43ad4acd2 --- /dev/null +++ b/bench_horn/samples_only_10.smt2 @@ -0,0 +1,25 @@ +(declare-rel itp (Int)) +(declare-var m Int) +(declare-var m1 Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var b Int) + +(declare-rel fail ()) + +(rule (=> (and (= i 0)) (itp i))) + +(rule (=> + (and + (itp i) + (= i1 (- i)) + ) + (itp i1) + ) +) + + +(rule (=> (and (itp i) (not (= i 0))) fail)) + + +(query fail :print-certificate true) diff --git a/bench_horn/samples_only_11.smt2 b/bench_horn/samples_only_11.smt2 new file mode 100644 index 000000000..dd228f202 --- /dev/null +++ b/bench_horn/samples_only_11.smt2 @@ -0,0 +1,26 @@ +(declare-rel itp (Int Int)) +(declare-var m Int) +(declare-var m1 Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var b Int) + +(declare-rel fail ()) + +(rule (=> (and (= m 0) (= i 0)) (itp m i))) + +(rule (=> + (and + (itp m i) + (= i1 (- i)) + (= m1 (+ m 1)) + ) + (itp m1 i1) + ) +) + + +(rule (=> (and (itp m i) (= m 1000) (not (>= i 0))) fail)) + + +(query fail :print-certificate true) diff --git a/bench_horn/samples_search_21.smt2 b/bench_horn/samples_search_21.smt2 new file mode 100644 index 000000000..a1fd349a5 --- /dev/null +++ b/bench_horn/samples_search_21.smt2 @@ -0,0 +1,29 @@ +(declare-rel itp (Int Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) +(declare-var x9 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= x3 0) (= x5 (* 10 x9)) (> x9 0) (< x9 10)) (itp x1 x3 x5))) + +(rule (=> + (and + (itp x1 x3 x5) + (or (and (= x2 (+ x1 1)) (= x4 (- x3 1))) + (and (= x2 (- x1 1)) (= x4 (+ x3 1)))) + (= x6 (+ x5 x2 x4)) + ) + (itp x2 x4 x6) + ) +) + + +(rule (=> (and (itp x1 x3 x5) (= x5 78)) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/samples_search_22.smt2 b/bench_horn/samples_search_22.smt2 new file mode 100644 index 000000000..e17a59080 --- /dev/null +++ b/bench_horn/samples_search_22.smt2 @@ -0,0 +1,29 @@ +(declare-rel itp (Int Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) +(declare-var x9 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= x3 0) (= x5 (* 2 x9))) (itp x1 x3 x5))) + +(rule (=> + (and + (itp x1 x3 x5) + (or (and (= x2 (+ x1 1)) (= x4 (+ x3 1))) + (and (= x2 (- x1 1)) (= x4 (- x3 1)))) + (= x6 (+ x5 x2 x4)) + ) + (itp x2 x4 x6) + ) +) + + +(rule (=> (and (itp x1 x3 x5) (= x5 77)) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/include/ae/AeValSolver.hpp b/include/ae/AeValSolver.hpp index 82f3dc3eb..2118e7800 100644 --- a/include/ae/AeValSolver.hpp +++ b/include/ae/AeValSolver.hpp @@ -257,9 +257,12 @@ namespace ufo Expr getValidSubset() { if (partitioning_size == 0){ - outs() << "WARNING: Trivial valid subset (equal to False) due to 0 iterations\n"; + if (debug) outs() << "WARNING: Trivial valid subset (equal to False) due to 0 iterations\n"; + return NULL; } - return mk(s, disjoin(projections, efac)); + Expr prs = disjoin(projections, efac); + if (isOpX(s)) return prs; + return mk(s, prs); } /** diff --git a/include/deep/CodeSampler.hpp b/include/deep/CodeSampler.hpp index 3e69d6332..4b6d5d66f 100644 --- a/include/deep/CodeSampler.hpp +++ b/include/deep/CodeSampler.hpp @@ -24,21 +24,44 @@ namespace ufo ExprMap& extraVars; Expr zero; + ExprFactory &m_efac; CodeSampler(HornRuleExt& r, Expr& d, ExprVector& v, ExprMap& e) : - hr(r), invRel(d), invVars(v), extraVars(e) + hr(r), invRel(d), invVars(v), extraVars(e), m_efac(d->getFactory()) { // add some "universal" constants intConsts.insert(0); intConsts.insert(1); intConsts.insert(-1); - + // aux Expr const - zero = mkTerm (mpz_class (0), invRel->getFactory()); + zero = mkTerm (mpz_class (0), m_efac); }; void addSampleHlp(Expr tmpl, ExprVector& vars, ExprSet& actualVars) { + ExprSet dsjs; + ExprSet newDsjs; + getDisj(tmpl, dsjs); + for (auto & dsj : dsjs) + { + ExprSet vrs; + expr::filter (dsj, bind::IsConst(), std::inserter (vrs, vrs.begin ())); + bool found = true; + + for (auto & a : vrs) + { + if (std::find(std::begin(vars), std::end (vars), a) + == std::end(vars)) {found = false; break; } + } + if (found) newDsjs.insert(dsj); + } + + if (newDsjs.size() == 0) return; + + tmpl = disjoin (newDsjs, m_efac); + tmpl = findNonlinAndRewrite(tmpl, vars, invVars, extraVars); + ExprVector invVarsCstm = invVars; for (auto &v : actualVars) { @@ -47,44 +70,30 @@ namespace ufo { tmpl = replaceAll(tmpl, v, invVars[index]); } - else - { - int notfound = true; - for (auto &a : extraVars) - { - if (a.second == v) - { - invVarsCstm.push_back(v); - notfound = false; - break; - } - } - if (notfound) - { - return; // tmpl = replaceAll(tmpl, v, zero); - } - } } - Expr tmpl2 = normalizeDisj(tmpl, invVarsCstm); - if (!isOpX (tmpl2) && !isOpX (tmpl2)) + + for (auto &a : extraVars) invVarsCstm.push_back(a.second); + + tmpl = normalizeDisj(tmpl, invVarsCstm); + + if (!isOpX (tmpl) && !isOpX (tmpl)) { - candidates.insert(tmpl2); + candidates.insert(tmpl); // get int constants from the normalized candidate ExprSet intConstsE; - expr::filter (tmpl2, bind::IsHardIntConst(), std::inserter (intConstsE, intConstsE.begin ())); + expr::filter (tmpl, bind::IsHardIntConst(), std::inserter (intConstsE, intConstsE.begin ())); - for (auto &a : intConstsE) - { - intConsts.insert(lexical_cast(a)); - } - - getLinCombCoefs(tmpl2, intCoefs); + for (auto &a : intConstsE) intConsts.insert(lexical_cast(a)); + getLinCombCoefs(tmpl, intCoefs); } } void processTransition(Expr tmpl, ExprVector& srcVars, ExprVector& dstVars, ExprSet& actualVars) { + if (containsOp(tmpl) || containsOp
(tmpl) || + containsOp(tmpl) || containsOp(tmpl)) return; // GF: to optimize + int found = false; // very simple check if there are some srcVars and dstVars in the tmpl @@ -144,18 +153,6 @@ namespace ufo expr::filter (term, bind::IsConst(), std::inserter (actualVars, actualVars.begin ())); term = rewriteMultAdd(term); - - if (hr.srcRelation == invRel) - { - term = findNonlinAndRewrite(term, hr.srcVars, invVars, extraVars); - } - - if (hr.dstRelation == invRel) - { - term = findNonlinAndRewrite(term, hr.dstVars, invVars, extraVars); - } - - for (auto &a : extraVars) actualVars.insert(a.second); bool locals = false; if (actualVars.size() == 0 || isTautology(term)) return; @@ -171,7 +168,7 @@ namespace ufo { addSampleHlp(term, hr.dstVars, actualVars); } - + if (hr.dstRelation == hr.srcRelation) { processTransition(term, hr.srcVars, hr.dstVars, actualVars); @@ -208,7 +205,7 @@ namespace ufo else if (isOpX(term)) { Expr term2 = mk(mkNeg(term->left()), term->right()); - populateArityAndTemplates(convertToGEandGT(term2)); + populateArityAndTemplates(term2); } else if (isOpX(term) || isOpX(term)) { @@ -247,8 +244,12 @@ namespace ufo if (quantified.size() > 0) { - AeValSolver ae(mk(hr.body->getFactory()), hr.body, quantified); - if (ae.solve()) body = ae.getValidSubset(); + AeValSolver ae(mk(m_efac), hr.body, quantified); + if (ae.solve()) + { + Expr bodyTmp = ae.getValidSubset(); + if (bodyTmp != NULL) body = bodyTmp; + } } // get samples and normalize From 6024069f92344f1df4a79e4ce41bf593b56022e7 Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Tue, 17 Oct 2017 20:44:40 -0400 Subject: [PATCH 044/236] fixed stabilization of epsilon-frequencies when freqs is disabled --- include/deep/LinCom.hpp | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/include/deep/LinCom.hpp b/include/deep/LinCom.hpp index 63e506a63..73c0112a5 100644 --- a/include/deep/LinCom.hpp +++ b/include/deep/LinCom.hpp @@ -1091,8 +1091,9 @@ namespace ufo guessUniformly(min_freq) / num_zeros / EPSILONFRACTION); } - void stabilizeDensities(set& arities, bool addEpsilon) + void stabilizeDensities(set& arities, bool addEpsilon, bool freqs=true) { + int freqCoef = freqs ? FREQCOEF : 1; int min_freq = INT_MAX; int num_zeros = 0; int eps = 0; @@ -1102,14 +1103,14 @@ namespace ufo if (ar.second == 0) num_zeros++; else { - ar.second *= FREQCOEF; + ar.second *= freqCoef; min_freq = min(min_freq, ar.second); } } if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); else if (num_zeros == orAritiesDensity.size()) eps = 1; - else eps = 0; + else eps = 0; for (auto & ar : orAritiesDensity) { @@ -1125,7 +1126,7 @@ namespace ufo if (pl.second == 0) num_zeros++; else { - pl.second *= FREQCOEF; + pl.second *= freqCoef; min_freq = min(min_freq, pl.second); } } @@ -1148,7 +1149,7 @@ namespace ufo if (c.second == 0) num_zeros++; else { - c.second *= FREQCOEF; + c.second *= freqCoef; min_freq = min(min_freq, c.second); } } @@ -1170,7 +1171,7 @@ namespace ufo if (c.second == 0) num_zeros++; else { - c.second *= FREQCOEF; + c.second *= freqCoef; min_freq = min(min_freq, c.second); } } @@ -1191,7 +1192,7 @@ namespace ufo if (c.second == 0) num_zeros++; else { - c.second *= FREQCOEF; + c.second *= freqCoef; min_freq = min(min_freq, c.second); } } @@ -1214,7 +1215,7 @@ namespace ufo if (b.second == 0) num_zeros++; else { - b.second *= FREQCOEF; + b.second *= freqCoef; min_freq = min(min_freq, b.second); } } From ad16bac5e901d5cf93b3601190fba22cd18adc2d Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Mon, 23 Oct 2017 15:54:03 -0400 Subject: [PATCH 045/236] revised algorithm of FreqHorn: 1) bootstrapping stage (get seeds, check them all-at-once) 2) sampling stage (get mutants, check them in batches) 3) extract inductive subsets after each check 4) give failed candidates a second chance --- README.md | 9 +- include/ae/ExprSimpl.hpp | 46 ++++- include/ae/SMTUtils.hpp | 2 +- include/deep/BndExpl.hpp | 67 +++++-- include/deep/LinCom.hpp | 27 ++- include/deep/RndLearner.hpp | 78 ++++---- include/deep/RndLearnerV2.hpp | 327 ++++++++++++++++++++++++++++++++++ tools/deep/CMakeLists.txt | 8 +- tools/deep/DeepHorn.cpp | 48 +++-- 9 files changed, 534 insertions(+), 78 deletions(-) create mode 100644 include/deep/RndLearnerV2.hpp diff --git a/README.md b/README.md index 4579769d3..e470da53a 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,11 @@ FreqHorn Satisfiability solver for constrained Horn clauses (CHC) based on the Expression library of SeaHorn and the Z3 SMT solver. It combines probabilistic and syntax-guided methods to sample candidate invariants and checks their inductiveness / safety. Find more details at FMCAD'17. +News +======== + +A more efficient release (FreqHorn-2) is now available. It features a two-stage process: 1) deterministic bootstrapping with itp-based proofs of bounded safety, 2) nondeterministic sampling with the inductive subset extraction and on-demand exploiting of counterexamples-to-induction. Check the usage message for more info. + Installation ============ @@ -14,9 +19,9 @@ Compiles with gcc-5 (on Linux) and clang-700 (on Mac). Assumes preinstalled Gmp * `make` (again) to build FreqHorn The binary of FreqHorn can be found at `build/tools/deep/`. -Run `./tools/deep/deephorn --help` for the usage info. +Run `./tools/deep/freqhorn --help` for the usage info. -Inductive Validity Cores +MinimizIng Generated Invariants ======================== Solutions discovered by FreqHorn can be further minimized using the FreqHorn-IVC utility: diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index 0c2801981..fcbf04e74 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -977,7 +977,7 @@ namespace ufo for (unsigned j = 0; j < t->arity(); j++) { Expr q = t->arg(j); - if (expr::op::bind::isIntConst(q)) + if (bind::isIntConst(q)) { int ind = getVarIndex(q, vars); if (ind == -1) return t; @@ -1021,14 +1021,52 @@ namespace ufo return t; } }; - + inline static Expr findNonlinAndRewrite (Expr exp, ExprVector& vars, ExprVector& vars2, ExprMap& extraVars) { RW mu(new FindNonlinAndRewrite(vars, vars2, extraVars)); return dagVisit (mu, exp); } - - + + struct FindNonlin : public std::unary_function + { + bool found; + + FindNonlin () : found (false) {} + + VisitAction operator() (Expr exp) + { + if (found) + { + found = true; + return VisitAction::skipKids (); + } + else if (isOpX(exp) || isOpX(exp) || isOpX
(exp) || isOpX(exp)) + { + int v = 0; + for (unsigned j = 0; j < exp->arity(); j++) + { + Expr q = exp->arg(j); + if (bind::isIntConst(q)) v++; // GF: a simple counter, to extend + } + + if (v > 1) + { + found = true; + return VisitAction::skipKids (); + } + } + return VisitAction::doKids (); + } + }; + + inline bool findNonlin (Expr e1) + { + FindNonlin fn; + dagVisit (fn, e1); + return fn.found; + } + inline static void getConj (Expr a, ExprSet &conjs) { if (isOpX(a)) return; diff --git a/include/ae/SMTUtils.hpp b/include/ae/SMTUtils.hpp index 3fd23a6c0..3e9b758e0 100644 --- a/include/ae/SMTUtils.hpp +++ b/include/ae/SMTUtils.hpp @@ -258,7 +258,7 @@ namespace ufo exit(55); } - if (res) return mk (efac); + if (res) return NULL; return fp.getCoverDelta(itpApp); } diff --git a/include/deep/BndExpl.hpp b/include/deep/BndExpl.hpp index 8c3de7519..3fecf0e4b 100644 --- a/include/deep/BndExpl.hpp +++ b/include/deep/BndExpl.hpp @@ -74,20 +74,25 @@ namespace ufo } } + vector bindVars; + Expr toExpr(vector& trace) { ExprVector ssa; - bindVars1 = ruleManager.chcs[trace[0]].srcVars; ExprVector bindVars2; + bindVars.clear(); + ExprVector bindVars1 = ruleManager.chcs[trace[0]].srcVars; int bindVar_index = 0; int locVar_index = 0; - for (auto &step : trace) + for (int s = 0; s < trace.size(); s++) { + auto &step = trace[s]; bindVars2.clear(); HornRuleExt& hr = ruleManager.chcs[step]; Expr body = hr.body; + if (!hr.isFact && extraLemmas != NULL) body = mk(extraLemmas, body); for (int i = 0; i < hr.srcVars.size(); i++) { @@ -122,9 +127,9 @@ namespace ufo body = replaceAll(body, hr.locVars[i], var); } - bindVars1 = bindVars2; - ssa.push_back(body); + bindVars.push_back(bindVars2); + bindVars1 = bindVars2; } return conjoin(ssa, m_efac); @@ -224,30 +229,60 @@ namespace ufo return inv; } - Expr getBoundedItp(int bnd, Expr prop, ExprVector& vars) + Expr getBoundedItp(int k) { - vector> traces; + assert(k >= 0); + + int fc_ind; + for (int i = 0; i < ruleManager.chcs.size(); i++) + { + auto & r = ruleManager.chcs[i]; + if (r.isInductive) tr_ind = i; + if (r.isQuery) pr_ind = i; + if (r.isFact) fc_ind = i; + } - getAllTraces(mk(m_efac), ruleManager.failDecl, bnd, vector(), traces); + HornRuleExt& fc = ruleManager.chcs[fc_ind]; + HornRuleExt& tr = ruleManager.chcs[tr_ind]; + HornRuleExt& pr = ruleManager.chcs[pr_ind]; - for (auto &a : traces) + Expr prop = pr.body; + Expr init = fc.body; + for (int i = 0; i < tr.srcVars.size(); i++) { - a.erase (a.end()-1); // encode all but the last step - Expr q = toExpr(a); - for (int i = 0; i < bindVars1.size(); i++) prop = replaceAll(prop, vars[i], bindVars1[i]); + init = replaceAll(init, tr.dstVars[i], tr.srcVars[i]); + } + + Expr itp; - Expr itp = getItp(q, prop); + if (k == 0) + { + itp = getItp(init, prop); + } + else + { + vector trace; + for (int i = 0; i < k; i++) trace.push_back(tr_ind); + + Expr unr = toExpr(trace); + for (int i = 0; i < pr.srcVars.size(); i++) + { + prop = replaceAll(prop, pr.srcVars[i], bindVars.back()[i]); + } + itp = getItp(unr, prop); if (itp != NULL) { - for (int i = 0; i < bindVars1.size(); i++) itp = replaceAll(itp, bindVars1[i], vars[i]); - return itp; + for (int i = 0; i < pr.srcVars.size(); i++) + { + itp = replaceAll(itp, bindVars.back()[i], pr.srcVars[i]); + } } else { - return NULL; + itp = getItp(init, mk(unr, prop)); } } - return NULL; + return itp; } }; diff --git a/include/deep/LinCom.hpp b/include/deep/LinCom.hpp index 73c0112a5..5ba463315 100644 --- a/include/deep/LinCom.hpp +++ b/include/deep/LinCom.hpp @@ -393,7 +393,7 @@ namespace ufo return res; } - else if (isOp(ex)) + else if (isOpX(ex) || isOpX(ex)) { LAterm s; Expr lhs = ex->left(); @@ -409,12 +409,14 @@ namespace ufo { all.push_back(lhs); } - + Expr aux = reBuildCmp(ex, auxVar1, auxVar2); s.arity = all.size(); s.cmpop = getVarIndex(aux, cmpOps); s.intconst = getVarIndex(lexical_cast(ex->right()), intConsts); + + if (s.intconst == -1 || s.cmpop == -1) return false; for (auto &e : all) { @@ -440,8 +442,13 @@ namespace ufo curCoef = 1; } - s.vcs.push_back(getVarIndex(curVar, vars)); - s.vcs.push_back(getVarIndex(curCoef, intCoefs)); + int varind = getVarIndex(curVar, vars); + int coefind = getVarIndex(curCoef, intCoefs); + + if (varind == -1 || coefind == -1) return false; + + s.vcs.push_back(varind); + s.vcs.push_back(coefind); } bool res = addDisjFilter(s, sample); @@ -452,6 +459,10 @@ namespace ufo return (alpos && s.vcs.size() == 2*(s.arity)); } + else if (isOpX(ex)) + { + return false; + } return false; } @@ -892,7 +903,7 @@ namespace ufo for (int i = 0; i < failed.arity; i++) { LAterm& s = failed.dstate[i]; - distrs[i][s.intconst * 2] = PRIORNOVISIT; + distrs[i][s.intconst * 2 + (getIndexGT() == s.cmpop ? 1 : 0)] = PRIORNOVISIT; isVisited(id, i); } } @@ -926,7 +937,7 @@ namespace ufo isVisited(id, i); } } - + void prioritiesLearnt(LAdisj& learnt) { lincoms& id = learnt.getId(); @@ -1028,6 +1039,8 @@ namespace ufo void assignPrioritiesForGarbage(LAdisj& failed) { + if (!aggressivepruning) return; + vector eqs; getEquivalentFormulas(failed, eqs); for (auto &a : eqs) prioritiesGarbage (a); @@ -1110,7 +1123,7 @@ namespace ufo if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); else if (num_zeros == orAritiesDensity.size()) eps = 1; - else eps = 0; + else eps = 0; for (auto & ar : orAritiesDensity) { diff --git a/include/deep/RndLearner.hpp b/include/deep/RndLearner.hpp index 6f3ac5ea6..5568e45de 100644 --- a/include/deep/RndLearner.hpp +++ b/include/deep/RndLearner.hpp @@ -16,7 +16,7 @@ namespace ufo { class RndLearner { - private: + protected: ExprFactory &m_efac; EZ3 &m_z3; @@ -32,8 +32,6 @@ namespace ufo int invNumber; int numOfSMTChecks; - ExprSet itpCandidates; // itp-based bounded candidates - bool itp_succeeded; bool kind_succeeded; // interaction with k-induction bool oneInductiveProof; @@ -52,7 +50,7 @@ namespace ufo invNumber(0), numOfSMTChecks(0), oneInductiveProof(true), kind_succeeded (!k), itp_succeeded(!i), densecode(b1), addepsilon(b2), aggressivepruning(b3), printLog(false){} - + bool isTautology (Expr a) // adjusted for big disjunctions { if (isOpX(a)) return true; @@ -82,7 +80,7 @@ namespace ufo } return res; } - + bool checkCandidates() { for (auto &hr: ruleManager.chcs) @@ -146,7 +144,7 @@ namespace ufo for (auto &cand : curCandidates) res = !isOpX(cand); return res; } - + void assignPriorities() { for (int i = 0; i < invNumber; i++) @@ -187,7 +185,7 @@ namespace ufo } } } - + void resetLearntLemmas() { for (auto & lf : lfs) @@ -249,26 +247,36 @@ namespace ufo return kind_succeeded; } - void checkBoundedProofsBootstrap (int bnd) + void bootstrapBoundedProofs (int bnd, ExprSet& cands) { - assert (bnd >= 2); + for (auto &hr: ruleManager.chcs) + if (findNonlin(hr.body)) + { + outs () << "Nonlinear arithmetic detected.\nInterpolation is skipped\n"; + return; + } BndExpl be(ruleManager); - - HornRuleExt* pr; - for (auto & a : ruleManager.chcs) if (a.isQuery) pr = &a; - - for (int i = 2; i <= bnd; i++) + Expr cand; + int k = 0; + while (k < bnd) { - Expr invTmp = be.getBoundedItp(i, pr->body, pr->srcVars); + cand = be.getBoundedItp(k); + k++; + if (cand == NULL) + { + outs () << "Counterexample is found.\nThe system does not have a solution.\n"; + exit(0); + } + ExprSet cnjs; - getConj(invTmp, cnjs); + getConj(cand, cnjs); - for (auto & a : cnjs) itpCandidates.insert(a); + for (auto & a : cnjs) cands.insert(a); } } - bool checkBoundedProofs () + bool checkBoundedProofs (ExprSet& itpCandidates) { if (itp_succeeded) return false; assert(invNumber == 1); @@ -286,7 +294,6 @@ namespace ufo if (checkSafety()) { - outs () << "safety proven with itp\n"; itp_succeeded = true; return true; } @@ -341,7 +348,7 @@ namespace ufo for (auto a : safety_progress) if (a.second == false) return false; return true; } - + void setupSafetySolver() { // setup the safety solver @@ -420,7 +427,8 @@ namespace ufo for (auto & var : ruleManager.invVars[decls[ind]]) lf_after.addVar(var); lf_after.nonlinVars = lf_before.nonlinVars; - doCodeSampling(decls[ind]); + ExprSet stub; + doCodeSampling(decls[ind], stub); for (auto a : lf_before.learntExprs) { @@ -455,7 +463,7 @@ namespace ufo for (auto & var : ruleManager.invVars[decls.back()]) lf.addVar(var); } - void doCodeSampling(Expr invRel) + void doCodeSampling(Expr invRel, ExprSet& cands) { vector css; set orArities; @@ -537,6 +545,7 @@ namespace ufo if (lf.exprToLAdisj(cand, lcs)) { lcs.normalizePlus(); + cands.insert(lf.toExpr(lcs)); orArities.insert(lcs.arity); } else @@ -652,8 +661,8 @@ namespace ufo lf.printCodeStatistics(orArities); } } - - void synthesize(int maxAttempts, char * outfile) + + void synthesize(int maxAttempts, char * outfile, ExprSet& itpCands) { bool success = false; int iter = 1; @@ -713,7 +722,7 @@ namespace ufo if (isInductive) { success = checkWithKInduction(); - success = checkBoundedProofs(); + success = checkBoundedProofs(itpCands); } if (success) break; @@ -762,10 +771,9 @@ namespace ufo } } }; - - + inline void learnInvariants(string smt, char * outfile, int maxAttempts, - bool kind=false, bool itp=false, bool b1=true, bool b2=true, bool b3=true) + bool kind=false, int itp=0, bool b1=true, bool b2=true, bool b3=true) { ExprFactory m_efac; EZ3 z3(m_efac); @@ -776,25 +784,29 @@ namespace ufo ds.setupSafetySolver(); std::srand(std::time(0)); + ExprSet itpCands; if (ruleManager.decls.size() > 1) { - outs() << "WARNING: learning multiple invariants is currently unstable\n" + outs () << "WARNING: learning multiple invariants is currently unstable\n" << " it is suggested to disable \'aggressivepruning\'\n"; } - else if (itp) + else if (itp > 0) { + outs () << "WARNING: For more efficient itp-based bootstrapping,\n" + << " it is recommended to run --v2\n"; // current limitation: ruleManager.decls.size() == 0 - ds.checkBoundedProofsBootstrap(3); + ds.bootstrapBoundedProofs(itp, itpCands); } + ExprSet stub; for (auto& dcl: ruleManager.decls) { ds.initializeDecl(dcl); - ds.doCodeSampling (dcl->arg(0)); + ds.doCodeSampling (dcl->arg(0), stub); } - ds.synthesize(maxAttempts, outfile); + ds.synthesize(maxAttempts, outfile, itpCands); }; diff --git a/include/deep/RndLearnerV2.hpp b/include/deep/RndLearnerV2.hpp new file mode 100644 index 000000000..fbea8cc3f --- /dev/null +++ b/include/deep/RndLearnerV2.hpp @@ -0,0 +1,327 @@ +#ifndef RNDLEARNERV2__HPP__ +#define RNDLEARNERV2__HPP__ + +#include "Horn.hpp" +#include "CodeSampler.hpp" +#include "Distribution.hpp" +#include "LinCom.hpp" +#include "BndExpl.hpp" +#include "RndLearner.hpp" +#include "ae/SMTUtils.hpp" +#include +#include + +using namespace std; +using namespace boost; +namespace ufo +{ + class RndLearnerV2 : public RndLearner + { + private: + + map modelsOfFailures; + + public: + + RndLearnerV2 (ExprFactory &efac, EZ3 &z3, CHCs& r, bool aggp) : + RndLearner (efac, z3, r, false, false, true, true, aggp){} + + Expr getModel(ExprVector& vars) + { + ExprVector eqs; + ZSolver::Model m = m_smt_solver.getModel(); + for (auto & v : vars) if (v != m.eval(v)) + { + eqs.push_back(mk(v, m.eval(v))); + } + else + { + eqs.push_back(mk(v, mkTerm (mpz_class (guessUniformly (1000)-500), m_efac))); + } + return conjoin (eqs, m_efac); + } + + ExprSet& getLearntLemmas(int num) + { + return lfs[num].back().learntExprs; + } + + int redundancyCheck (ExprVector& lemmas) + { + int num = 0; + LAfactory& lf = lfs[0].back(); + Expr allLemmas = conjoin(lf.learntExprs, m_efac); + for (auto & l : lemmas) + { + LAdisj lcs; + if (lf.exprToLAdisj(l, lcs)) lf.assignPrioritiesForLearnt(lcs); + + numOfSMTChecks++; + if (!u.isImplies(allLemmas, l)) + { + lf.learntExprs.insert(l); + num++; + } + } + return num; + } + + bool checkSafetyAndReset() + { + // works if number of queries == 1 so far + m_smt_solver.reset(); + + for (auto &hr: ruleManager.chcs) + { + if (!hr.isQuery) continue; + + m_smt_solver.assertExpr (hr.body); + + int ind = getVarIndex(hr.srcRelation, decls); + LAfactory& lf = lfs[ind].back(); + + Expr lmApp = conjoin(lf.learntExprs, m_efac); + for (int i = 0; i < hr.srcVars.size(); i++) + { + lmApp = replaceAll(lmApp, lf.getVarE(i), hr.srcVars[i]); + } + m_smt_solver.assertExpr(lmApp); + + numOfSMTChecks++; + return !m_smt_solver.solve (); + } + return true; + } + + void getIS(HornRuleExt* hr, ExprVector& candSet) + { + if (candSet.size() == 0) return; + LAfactory& lf = lfs[0].back(); + + Expr cands = conjoin (candSet, m_efac); + + for (int i = candSet.size() - 1; i >= 0; i--) + { + Expr candPrime = candSet[i]; + + for (int j = 0; j < hr->srcVars.size(); j++) + { + candPrime = replaceAll(candPrime, hr->srcVars[j], hr->dstVars[j]); + } + + m_smt_solver.reset(); + m_smt_solver.assertExpr (hr->body); + m_smt_solver.assertExpr (cands); + for (auto & a : lf.learntExprs) m_smt_solver.assertExpr (a); + + m_smt_solver.assertExpr (mk(candPrime)); + + numOfSMTChecks++; + if (m_smt_solver.solve ()) + { + modelsOfFailures[getModel(hr->srcVars)].insert(candSet[i]); + + // GF: to debug (esp. nonlin opers): + LAdisj lcs; + if (lf.exprToLAdisj(candSet[i], lcs)) lf.assignPrioritiesForGarbage(lcs); + + candSet.erase(candSet.begin() + i); + + getIS(hr, candSet); + return; + } + } + return; + } + + bool initCheckCand(HornRuleExt* fc, Expr cand) + { + Expr candPrime = cand; + + for (int j = 0; j < fc->dstVars.size(); j++) + candPrime = replaceAll(candPrime, lfs[0].back().getVarE(j), fc->dstVars[j]); + + m_smt_solver.reset(); + m_smt_solver.assertExpr (fc->body); + m_smt_solver.assertExpr (mk(candPrime)); + + numOfSMTChecks++; + return (!m_smt_solver.solve ()); + } + + bool houdini (ExprSet& cands, bool skipInit=false, bool print=false) + { + LAfactory& lf = lfs[0].back(); + ExprVector exprs; + for (auto & a : cands) exprs.push_back(a); + + HornRuleExt* tr; + HornRuleExt* fc; + for (auto & a : ruleManager.chcs) if (a.isInductive) tr = &a; else if (a.isFact) fc = &a; + + // initiation: remove crap first + if (!skipInit) + { + for (int i = exprs.size() - 1; i >= 0; i--) + { + if (!initCheckCand(fc, exprs[i])) + { + LAdisj lcs; + if (lf.exprToLAdisj(exprs[i], lcs)) lf.assignPrioritiesForFailed(lcs); + exprs.erase(exprs.begin()+i); + } + } + } + + // consecution + getIS(tr, exprs); + + // safety: + int num = exprs.size(); + int newLemmaAdded = redundancyCheck(exprs); + + if (newLemmaAdded == 0) return false; + + if (checkSafetyAndReset()) return true; + + return false; + } + + bool synthesize(int maxAttempts, int batchSz, int scndChSz) + { + assert(lfs.size() == 1); // current limitation + + HornRuleExt* tr; + HornRuleExt* fct; + for (auto & a : ruleManager.chcs) if (a.isInductive) tr = &a; else if (a.isFact) fct = &a; + LAfactory& lf = lfs[0].back(); + + ExprVector candsBatch; + + bool success = false; + int iter = 1; + int triggerSecondChance = 0; + int numFailInit = 0; + + for (int i = 0; i < maxAttempts; i++) + { + candsBatch.clear(); + + while (candsBatch.size() < batchSz) + { + Expr cand = lf.getFreshCandidate(); + if (cand == NULL) continue; + + if (isTautology(cand)) // keep searching + { + lf.assignPrioritiesForLearnt(lf.samples.back()); + continue; + } + + if (lf.nonlinVars.size() > 0 && !u.isSat(cand)) // keep searching + { + lf.assignPrioritiesForFailed(lf.samples.back()); + continue; + } + + iter++; + + if (!initCheckCand(fct, cand)) + { + numFailInit++; + lf.assignPrioritiesForFailed(lf.samples.back()); + continue; + } + + candsBatch.push_back(cand); + } + + getIS(tr, candsBatch); // houdini + + if (candsBatch.size() == 0) continue; + + success = checkSafetyAndReset(); + if (success) break; + + // second chance candidates + triggerSecondChance += redundancyCheck(candsBatch); + if (triggerSecondChance < scndChSz) continue; + + triggerSecondChance = 0; + + ExprSet secondChanceCands; + for (auto it = modelsOfFailures.begin(); it != modelsOfFailures.end(); ) + { + m_smt_solver.reset(); + m_smt_solver.assertExpr (it->first); + for (auto & a : lfs[0].back().learntExprs) m_smt_solver.assertExpr (a); + + numOfSMTChecks++; + if (!m_smt_solver.solve ()) // CE violated + { + for (auto & e : it->second) secondChanceCands.insert(e); + modelsOfFailures.erase(it++); + } + else ++it; + } + + if (secondChanceCands.size() > 0) success = houdini(secondChanceCands, true, true); + if (success) break; + } + + return success; + } + }; + + inline void learnInvariants2(string smt, char * outfile, int maxAttempts, int itp, int batch, int retry, bool aggp) + { + ExprFactory m_efac; + EZ3 z3(m_efac); + + CHCs ruleManager(m_efac, z3); + ruleManager.parse(smt); + RndLearnerV2 ds(m_efac, z3, ruleManager, aggp); + + ds.setupSafetySolver(); + std::srand(std::time(0)); + + if (ruleManager.decls.size() > 1) + { + outs() << "WARNING: learning multiple invariants is currently unsupported in --v2.\n" + << " Run --v1\n"; + return; + } + + for (auto& dcl: ruleManager.decls) ds.initializeDecl(dcl); + + ExprSet cands; + + if (itp > 0) ds.bootstrapBoundedProofs(itp, cands); + + for (auto& dcl: ruleManager.decls) ds.doCodeSampling (dcl->arg(0), cands); + + bool success = ds.houdini(cands); + outs () << "Number of bootstrapped lemmas: " << ds.getLearntLemmas(0).size() << "\n"; + if (success) + { + outs () << "Success after the bootstrapping\n"; + } + else + { + success = ds.synthesize(maxAttempts, batch, retry); + if (success) outs () << "Total number of learned lemmas: " << ds.getLearntLemmas(0).size() << "\n"; + + if (success) outs () << "\nSuccess after the sampling\n"; + else outs () << "\nNo success after " << maxAttempts << " iterations\n"; + } + + if (success && outfile != NULL) + { + vector invs; + invs.push_back(ds.getLearntLemmas(0)); + ds.serializeInvariants(invs, outfile); + } + } +} + +#endif diff --git a/tools/deep/CMakeLists.txt b/tools/deep/CMakeLists.txt index e07d13eda..e4fc4e0ff 100644 --- a/tools/deep/CMakeLists.txt +++ b/tools/deep/CMakeLists.txt @@ -1,4 +1,4 @@ -add_executable (deephorn DeepHorn.cpp) -target_link_libraries (deephorn ${Z3_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${GMPXX_LIB} ${GMP_LIB}) -llvm_config (deephorn bitwriter) -install(TARGETS deephorn RUNTIME DESTINATION bin) +add_executable (freqhorn DeepHorn.cpp) +target_link_libraries (freqhorn ${Z3_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${GMPXX_LIB} ${GMP_LIB}) +llvm_config (freqhorn bitwriter) +install(TARGETS freqhorn RUNTIME DESTINATION bin) diff --git a/tools/deep/DeepHorn.cpp b/tools/deep/DeepHorn.cpp index 42588567b..a33d2f912 100644 --- a/tools/deep/DeepHorn.cpp +++ b/tools/deep/DeepHorn.cpp @@ -1,4 +1,4 @@ -#include "deep/RndLearner.hpp" +#include "deep/RndLearnerV2.hpp" using namespace ufo; using namespace std; @@ -39,9 +39,13 @@ int getIntValue(const char * opt, int defValue, int argc, char ** argv) int main (int argc, char ** argv) { const char *OPT_HELP = "--help"; + const char *OPT_V1 = "--v1"; + const char *OPT_V2 = "--v2"; const char *OPT_MAX_ATTEMPTS = "--attempts"; const char *OPT_K_IND = "--kind"; const char *OPT_ITP = "--itp"; + const char *OPT_BATCH = "--batch"; + const char *OPT_RETRY = "--retry"; const char *OPT_OUT_FILE = "--out"; const char *OPT_GET_FREQS = "--freqs"; const char *OPT_ADD_EPSILON = "--eps"; @@ -49,35 +53,57 @@ int main (int argc, char ** argv) if (getBoolValue(OPT_HELP, false, argc, argv) || argc == 1){ outs () << - "* * * FreqHorn v.0.1 - Copyright (C) 2017 * * *\n" << - " Grigory Fedyukovich & Sam Kaufman \n\n" << + "* * * FreqHorn v.0.2 - Copyright (C) 2017 * * *\n" << + " Grigory Fedyukovich & Sam Kaufman \n\n" << "Usage: Purpose:\n" << - " deephorn [--help] show help\n" << - " deephorn [options] discover invariants for a system of constrained Horn clauses\n" << + " freqhorn [--help] show help\n" << + " freqhorn [options] discover invariants for a system of constrained Horn clauses\n" << " (`file.smt2` in a datalog format extending SMT-LIB2)\n" << "Options:\n" << + " " << OPT_V1 << " original version (just one-by-one sampling)\n" + " " << OPT_V2 << " (default) revised version (all-at once bootstrapping and sampling)\n\n" " " << OPT_MAX_ATTEMPTS << " maximal number of candidates to sample and check\n" << - " " << OPT_OUT_FILE << " serialize invariants to `file.smt2`\n" << + " " << OPT_OUT_FILE << " serialize invariants to `file.smt2`\n\n" << + "V1 options only:\n" << " " << OPT_ADD_EPSILON << " add small probabilities to features that never happen in the code\n" << " " << OPT_AGG_PRUNING << " prioritize and prune the search space aggressively\n" << " " << OPT_GET_FREQS << " calculate frequency distributions and sample from them\n" << " (if not specified, sample from uniform distributions)\n" << - " " << OPT_K_IND << " run k-induction after each learned lemma\n" << - " (for pure k-induction, run 'kind ')\n" << - " " << OPT_ITP << " try invariance of itp-based bounded proofs\n"; + " " << OPT_K_IND << " run k-induction after each learned lemma\n\n" << + "V2 options only:\n" << + " " << OPT_AGG_PRUNING << " prioritize and prune the search space aggressively\n" << + " " << OPT_ITP << " bound for itp-based proofs\n" << + " " << OPT_BATCH << " threshold for how many candidates to check at once\n" << + " " << OPT_RETRY << " threshold for how many lemmas to wait before giving failures a second chance\n"; + + return 0; + } + bool vers1 = getBoolValue(OPT_V1, false, argc, argv); + bool vers2 = getBoolValue(OPT_V2, false, argc, argv); + if (vers1 && vers2) + { + outs() << "Only one version of the algorithm can be chosen\n"; return 0; } + if (!vers1 && !vers2) vers2 = true; // default + int maxAttempts = getIntValue(OPT_MAX_ATTEMPTS, 2000000, argc, argv); bool kinduction = getBoolValue(OPT_K_IND, false, argc, argv); - bool itp = getBoolValue(OPT_ITP, false, argc, argv); bool densecode = getBoolValue(OPT_GET_FREQS, false, argc, argv); bool addepsilon = getBoolValue(OPT_ADD_EPSILON, false, argc, argv); bool aggressivepruning = getBoolValue(OPT_AGG_PRUNING, false, argc, argv); + int itp = getIntValue(OPT_ITP, 0, argc, argv); + int batch = getIntValue(OPT_BATCH, 3, argc, argv); + int retry = getIntValue(OPT_RETRY, 3, argc, argv); char * outfile = getStrValue(OPT_OUT_FILE, NULL, argc, argv); - learnInvariants(string(argv[argc-1]), outfile, maxAttempts, + if (vers2) // run a revised algorithm + learnInvariants2(string(argv[argc-1]), outfile, maxAttempts, + itp, batch, retry, aggressivepruning); + else // run an old algorithm + learnInvariants(string(argv[argc-1]), outfile, maxAttempts, kinduction, itp, densecode, addepsilon, aggressivepruning); return 0; } From 181bb5a1cf815f2228512938b8ccdfe5eaafe71e Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Tue, 24 Oct 2017 14:28:01 -0400 Subject: [PATCH 046/236] reclassified benchmarks --- ...if_true-unreach-call_true-termination.smt2 | 2 ++ ...e-unreach-call_true-termination_bound.smt2 | 35 ------------------- bench_horn/dillig22-6.smt2 | 29 +++++++++++++++ ...k_true-unreach-call_true-termination.smt2} | 0 ...ch_disj_ite_01.smt2 => s_disj_ite_01.smt2} | 0 ...ch_disj_ite_02.smt2 => s_disj_ite_02.smt2} | 0 ...ch_disj_ite_03.smt2 => s_disj_ite_03.smt2} | 0 ...ch_disj_ite_04.smt2 => s_disj_ite_04.smt2} | 0 ...ch_disj_ite_05.smt2 => s_disj_ite_05.smt2} | 0 ...ch_disj_ite_06.smt2 => s_disj_ite_06.smt2} | 0 ...mples_search_01.smt2 => s_mutants_01.smt2} | 0 ...mples_search_02.smt2 => s_mutants_02.smt2} | 0 ...mples_search_03.smt2 => s_mutants_03.smt2} | 0 ...mples_search_04.smt2 => s_mutants_04.smt2} | 0 ...mples_search_05.smt2 => s_mutants_05.smt2} | 0 ...mples_search_06.smt2 => s_mutants_06.smt2} | 0 ...mples_search_07.smt2 => s_mutants_07.smt2} | 0 ...mples_search_08.smt2 => s_mutants_08.smt2} | 0 ...mples_search_09.smt2 => s_mutants_09.smt2} | 0 ...mples_search_10.smt2 => s_mutants_10.smt2} | 0 ...mples_search_11.smt2 => s_mutants_11.smt2} | 0 ...mples_search_12.smt2 => s_mutants_12.smt2} | 0 ...mples_search_13.smt2 => s_mutants_13.smt2} | 0 ...mples_search_14.smt2 => s_mutants_14.smt2} | 0 ...mples_search_15.smt2 => s_mutants_15.smt2} | 0 ...mples_search_16.smt2 => s_mutants_16.smt2} | 0 ...mples_search_17.smt2 => s_mutants_17.smt2} | 0 ...mples_search_18.smt2 => s_mutants_18.smt2} | 0 ...mples_search_19.smt2 => s_mutants_19.smt2} | 0 ...mples_search_20.smt2 => s_mutants_20.smt2} | 0 ...mples_search_21.smt2 => s_mutants_21.smt2} | 0 ...mples_search_22.smt2 => s_mutants_22.smt2} | 0 ...samples_only_04.smt2 => s_mutants_23.smt2} | 0 .../{samples_only_01.smt2 => s_seeds_01.smt2} | 0 .../{samples_only_02.smt2 => s_seeds_02.smt2} | 0 .../{samples_only_03.smt2 => s_seeds_03.smt2} | 0 .../{samples_only_11.smt2 => s_seeds_04.smt2} | 0 .../{samples_only_05.smt2 => s_seeds_05.smt2} | 0 .../{samples_only_06.smt2 => s_seeds_06.smt2} | 0 .../{samples_only_07.smt2 => s_seeds_07.smt2} | 0 .../{samples_only_08.smt2 => s_seeds_08.smt2} | 0 .../{samples_only_09.smt2 => s_seeds_09.smt2} | 0 .../{samples_only_10.smt2 => s_seeds_10.smt2} | 0 bench_horn/s_triv_01.smt2 | 22 ++++++++++++ bench_horn/s_triv_02.smt2 | 22 ++++++++++++ bench_horn/s_triv_03.smt2 | 22 ++++++++++++ bench_horn/s_triv_04.smt2 | 22 ++++++++++++ bench_horn/s_triv_05.smt2 | 22 ++++++++++++ bench_horn/s_triv_06.smt2 | 22 ++++++++++++ bench_horn/s_triv_07.smt2 | 22 ++++++++++++ bench_horn/s_triv_08.smt2 | 17 +++++++++ ...ink_big_numbers_1024.smt2 => sn_1024.smt2} | 0 ...ink_big_numbers_2048.smt2 => sn_2048.smt2} | 0 ...ink_big_numbers_4096.smt2 => sn_4096.smt2} | 0 ...ink_big_numbers_8192.smt2 => sn_8192.smt2} | 0 .../bouncy_one_counter.smt2 | 0 .../bouncy_symmetry.smt2 | 0 .../bouncy_two_counters_equality.smt2 | 0 .../bouncy_two_counters_inequality.smt2 | 0 .../dillig12.smt2 | 0 .../dillig17.smt2 | 0 .../dillig24.smt2 | 0 .../dillig25.smt2 | 0 .../dillig28.smt2 | 0 {bench_horn => bench_horn_multiple}/dtuc.smt2 | 0 .../niagara.smt2 | 0 .../samples_multiple_inv_01.smt2 | 0 .../samples_multiple_inv_02.smt2 | 0 .../samples_multiple_inv_03.smt2 | 0 .../samples_multiple_inv_04.smt2 | 0 70 files changed, 202 insertions(+), 35 deletions(-) create mode 100644 bench_horn/count_by_2_modif_true-unreach-call_true-termination.smt2 delete mode 100644 bench_horn/count_by_k_true-unreach-call_true-termination_bound.smt2 create mode 100755 bench_horn/dillig22-6.smt2 rename bench_horn/{count_by_k_true-unreach-call_true-termination_unbound.smt2 => nonlin_count_by_k_true-unreach-call_true-termination.smt2} (100%) rename bench_horn/{samples_search_disj_ite_01.smt2 => s_disj_ite_01.smt2} (100%) rename bench_horn/{samples_search_disj_ite_02.smt2 => s_disj_ite_02.smt2} (100%) rename bench_horn/{samples_search_disj_ite_03.smt2 => s_disj_ite_03.smt2} (100%) rename bench_horn/{samples_search_disj_ite_04.smt2 => s_disj_ite_04.smt2} (100%) rename bench_horn/{samples_search_disj_ite_05.smt2 => s_disj_ite_05.smt2} (100%) rename bench_horn/{samples_search_disj_ite_06.smt2 => s_disj_ite_06.smt2} (100%) rename bench_horn/{samples_search_01.smt2 => s_mutants_01.smt2} (100%) rename bench_horn/{samples_search_02.smt2 => s_mutants_02.smt2} (100%) rename bench_horn/{samples_search_03.smt2 => s_mutants_03.smt2} (100%) rename bench_horn/{samples_search_04.smt2 => s_mutants_04.smt2} (100%) rename bench_horn/{samples_search_05.smt2 => s_mutants_05.smt2} (100%) rename bench_horn/{samples_search_06.smt2 => s_mutants_06.smt2} (100%) rename bench_horn/{samples_search_07.smt2 => s_mutants_07.smt2} (100%) rename bench_horn/{samples_search_08.smt2 => s_mutants_08.smt2} (100%) rename bench_horn/{samples_search_09.smt2 => s_mutants_09.smt2} (100%) rename bench_horn/{samples_search_10.smt2 => s_mutants_10.smt2} (100%) rename bench_horn/{samples_search_11.smt2 => s_mutants_11.smt2} (100%) rename bench_horn/{samples_search_12.smt2 => s_mutants_12.smt2} (100%) rename bench_horn/{samples_search_13.smt2 => s_mutants_13.smt2} (100%) rename bench_horn/{samples_search_14.smt2 => s_mutants_14.smt2} (100%) rename bench_horn/{samples_search_15.smt2 => s_mutants_15.smt2} (100%) rename bench_horn/{samples_search_16.smt2 => s_mutants_16.smt2} (100%) rename bench_horn/{samples_search_17.smt2 => s_mutants_17.smt2} (100%) rename bench_horn/{samples_search_18.smt2 => s_mutants_18.smt2} (100%) rename bench_horn/{samples_search_19.smt2 => s_mutants_19.smt2} (100%) rename bench_horn/{samples_search_20.smt2 => s_mutants_20.smt2} (100%) rename bench_horn/{samples_search_21.smt2 => s_mutants_21.smt2} (100%) rename bench_horn/{samples_search_22.smt2 => s_mutants_22.smt2} (100%) rename bench_horn/{samples_only_04.smt2 => s_mutants_23.smt2} (100%) rename bench_horn/{samples_only_01.smt2 => s_seeds_01.smt2} (100%) rename bench_horn/{samples_only_02.smt2 => s_seeds_02.smt2} (100%) rename bench_horn/{samples_only_03.smt2 => s_seeds_03.smt2} (100%) rename bench_horn/{samples_only_11.smt2 => s_seeds_04.smt2} (100%) rename bench_horn/{samples_only_05.smt2 => s_seeds_05.smt2} (100%) rename bench_horn/{samples_only_06.smt2 => s_seeds_06.smt2} (100%) rename bench_horn/{samples_only_07.smt2 => s_seeds_07.smt2} (100%) rename bench_horn/{samples_only_08.smt2 => s_seeds_08.smt2} (100%) rename bench_horn/{samples_only_09.smt2 => s_seeds_09.smt2} (100%) rename bench_horn/{samples_only_10.smt2 => s_seeds_10.smt2} (100%) create mode 100755 bench_horn/s_triv_01.smt2 create mode 100755 bench_horn/s_triv_02.smt2 create mode 100755 bench_horn/s_triv_03.smt2 create mode 100755 bench_horn/s_triv_04.smt2 create mode 100755 bench_horn/s_triv_05.smt2 create mode 100755 bench_horn/s_triv_06.smt2 create mode 100755 bench_horn/s_triv_07.smt2 create mode 100755 bench_horn/s_triv_08.smt2 rename bench_horn/{samples_shrink_big_numbers_1024.smt2 => sn_1024.smt2} (100%) rename bench_horn/{samples_shrink_big_numbers_2048.smt2 => sn_2048.smt2} (100%) rename bench_horn/{samples_shrink_big_numbers_4096.smt2 => sn_4096.smt2} (100%) rename bench_horn/{samples_shrink_big_numbers_8192.smt2 => sn_8192.smt2} (100%) rename {bench_horn => bench_horn_multiple}/bouncy_one_counter.smt2 (100%) rename {bench_horn => bench_horn_multiple}/bouncy_symmetry.smt2 (100%) rename {bench_horn => bench_horn_multiple}/bouncy_two_counters_equality.smt2 (100%) rename {bench_horn => bench_horn_multiple}/bouncy_two_counters_inequality.smt2 (100%) rename {bench_horn => bench_horn_multiple}/dillig12.smt2 (100%) rename {bench_horn => bench_horn_multiple}/dillig17.smt2 (100%) rename {bench_horn => bench_horn_multiple}/dillig24.smt2 (100%) rename {bench_horn => bench_horn_multiple}/dillig25.smt2 (100%) rename {bench_horn => bench_horn_multiple}/dillig28.smt2 (100%) rename {bench_horn => bench_horn_multiple}/dtuc.smt2 (100%) rename {bench_horn => bench_horn_multiple}/niagara.smt2 (100%) rename {bench_horn => bench_horn_multiple}/samples_multiple_inv_01.smt2 (100%) rename {bench_horn => bench_horn_multiple}/samples_multiple_inv_02.smt2 (100%) rename {bench_horn => bench_horn_multiple}/samples_multiple_inv_03.smt2 (100%) rename {bench_horn => bench_horn_multiple}/samples_multiple_inv_04.smt2 (100%) diff --git a/bench_horn/count_by_2_modif_true-unreach-call_true-termination.smt2 b/bench_horn/count_by_2_modif_true-unreach-call_true-termination.smt2 new file mode 100644 index 000000000..7e4f296c3 --- /dev/null +++ b/bench_horn/count_by_2_modif_true-unreach-call_true-termination.smt2 @@ -0,0 +1,2 @@ + +(check-sat) diff --git a/bench_horn/count_by_k_true-unreach-call_true-termination_bound.smt2 b/bench_horn/count_by_k_true-unreach-call_true-termination_bound.smt2 deleted file mode 100644 index c8eafd198..000000000 --- a/bench_horn/count_by_k_true-unreach-call_true-termination_bound.smt2 +++ /dev/null @@ -1,35 +0,0 @@ -(declare-var i Int) -(declare-var i_ Int) -(declare-var k Int) -(declare-var LRG Int) -(declare-rel itp (Int Int Int)) -(declare-rel fail ()) - -(rule (=> - (and - (<= 0 k) - (>= LRG 0) - (= i 0) - ) - (itp i k LRG) -)) - -(rule (=> - (and - (itp i_ k LRG) - (< i_ (* LRG k)) - (= i (+ i_ k)) - ) - (itp i k LRG) -)) - -(rule (=> - (and - (itp i k LRG) - (not (< i (* LRG k))) ; stop cond. (redun.) - (not (= i (* LRG k))) ; assert negation - ) - fail -)) - -(query fail :print-certificate true) diff --git a/bench_horn/dillig22-6.smt2 b/bench_horn/dillig22-6.smt2 new file mode 100755 index 000000000..e4eb27415 --- /dev/null +++ b/bench_horn/dillig22-6.smt2 @@ -0,0 +1,29 @@ +(declare-rel inv (Int Int Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var y0 Int) +(declare-var y1 Int) +(declare-var k0 Int) +(declare-var k1 Int) +(declare-var N Int) +(declare-var nondet Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= y1 0) (= k1 0)) (inv x1 y1 k1 N))) + +(rule (=> + (and + (inv x0 y0 k0 N) + (< y0 N) + (= x1 (ite (= (mod k0 2) 0) (+ x0 nondet) x0)) + (= y1 (+ y0 nondet)) + (= k1 (+ x1 y1)) + ) + (inv x1 y1 k1 N) + ) +) + +(rule (=> (and (inv x1 y1 k1 N) (>= y1 N) (not (>= k1 (* 2 N)))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/count_by_k_true-unreach-call_true-termination_unbound.smt2 b/bench_horn/nonlin_count_by_k_true-unreach-call_true-termination.smt2 similarity index 100% rename from bench_horn/count_by_k_true-unreach-call_true-termination_unbound.smt2 rename to bench_horn/nonlin_count_by_k_true-unreach-call_true-termination.smt2 diff --git a/bench_horn/samples_search_disj_ite_01.smt2 b/bench_horn/s_disj_ite_01.smt2 similarity index 100% rename from bench_horn/samples_search_disj_ite_01.smt2 rename to bench_horn/s_disj_ite_01.smt2 diff --git a/bench_horn/samples_search_disj_ite_02.smt2 b/bench_horn/s_disj_ite_02.smt2 similarity index 100% rename from bench_horn/samples_search_disj_ite_02.smt2 rename to bench_horn/s_disj_ite_02.smt2 diff --git a/bench_horn/samples_search_disj_ite_03.smt2 b/bench_horn/s_disj_ite_03.smt2 similarity index 100% rename from bench_horn/samples_search_disj_ite_03.smt2 rename to bench_horn/s_disj_ite_03.smt2 diff --git a/bench_horn/samples_search_disj_ite_04.smt2 b/bench_horn/s_disj_ite_04.smt2 similarity index 100% rename from bench_horn/samples_search_disj_ite_04.smt2 rename to bench_horn/s_disj_ite_04.smt2 diff --git a/bench_horn/samples_search_disj_ite_05.smt2 b/bench_horn/s_disj_ite_05.smt2 similarity index 100% rename from bench_horn/samples_search_disj_ite_05.smt2 rename to bench_horn/s_disj_ite_05.smt2 diff --git a/bench_horn/samples_search_disj_ite_06.smt2 b/bench_horn/s_disj_ite_06.smt2 similarity index 100% rename from bench_horn/samples_search_disj_ite_06.smt2 rename to bench_horn/s_disj_ite_06.smt2 diff --git a/bench_horn/samples_search_01.smt2 b/bench_horn/s_mutants_01.smt2 similarity index 100% rename from bench_horn/samples_search_01.smt2 rename to bench_horn/s_mutants_01.smt2 diff --git a/bench_horn/samples_search_02.smt2 b/bench_horn/s_mutants_02.smt2 similarity index 100% rename from bench_horn/samples_search_02.smt2 rename to bench_horn/s_mutants_02.smt2 diff --git a/bench_horn/samples_search_03.smt2 b/bench_horn/s_mutants_03.smt2 similarity index 100% rename from bench_horn/samples_search_03.smt2 rename to bench_horn/s_mutants_03.smt2 diff --git a/bench_horn/samples_search_04.smt2 b/bench_horn/s_mutants_04.smt2 similarity index 100% rename from bench_horn/samples_search_04.smt2 rename to bench_horn/s_mutants_04.smt2 diff --git a/bench_horn/samples_search_05.smt2 b/bench_horn/s_mutants_05.smt2 similarity index 100% rename from bench_horn/samples_search_05.smt2 rename to bench_horn/s_mutants_05.smt2 diff --git a/bench_horn/samples_search_06.smt2 b/bench_horn/s_mutants_06.smt2 similarity index 100% rename from bench_horn/samples_search_06.smt2 rename to bench_horn/s_mutants_06.smt2 diff --git a/bench_horn/samples_search_07.smt2 b/bench_horn/s_mutants_07.smt2 similarity index 100% rename from bench_horn/samples_search_07.smt2 rename to bench_horn/s_mutants_07.smt2 diff --git a/bench_horn/samples_search_08.smt2 b/bench_horn/s_mutants_08.smt2 similarity index 100% rename from bench_horn/samples_search_08.smt2 rename to bench_horn/s_mutants_08.smt2 diff --git a/bench_horn/samples_search_09.smt2 b/bench_horn/s_mutants_09.smt2 similarity index 100% rename from bench_horn/samples_search_09.smt2 rename to bench_horn/s_mutants_09.smt2 diff --git a/bench_horn/samples_search_10.smt2 b/bench_horn/s_mutants_10.smt2 similarity index 100% rename from bench_horn/samples_search_10.smt2 rename to bench_horn/s_mutants_10.smt2 diff --git a/bench_horn/samples_search_11.smt2 b/bench_horn/s_mutants_11.smt2 similarity index 100% rename from bench_horn/samples_search_11.smt2 rename to bench_horn/s_mutants_11.smt2 diff --git a/bench_horn/samples_search_12.smt2 b/bench_horn/s_mutants_12.smt2 similarity index 100% rename from bench_horn/samples_search_12.smt2 rename to bench_horn/s_mutants_12.smt2 diff --git a/bench_horn/samples_search_13.smt2 b/bench_horn/s_mutants_13.smt2 similarity index 100% rename from bench_horn/samples_search_13.smt2 rename to bench_horn/s_mutants_13.smt2 diff --git a/bench_horn/samples_search_14.smt2 b/bench_horn/s_mutants_14.smt2 similarity index 100% rename from bench_horn/samples_search_14.smt2 rename to bench_horn/s_mutants_14.smt2 diff --git a/bench_horn/samples_search_15.smt2 b/bench_horn/s_mutants_15.smt2 similarity index 100% rename from bench_horn/samples_search_15.smt2 rename to bench_horn/s_mutants_15.smt2 diff --git a/bench_horn/samples_search_16.smt2 b/bench_horn/s_mutants_16.smt2 similarity index 100% rename from bench_horn/samples_search_16.smt2 rename to bench_horn/s_mutants_16.smt2 diff --git a/bench_horn/samples_search_17.smt2 b/bench_horn/s_mutants_17.smt2 similarity index 100% rename from bench_horn/samples_search_17.smt2 rename to bench_horn/s_mutants_17.smt2 diff --git a/bench_horn/samples_search_18.smt2 b/bench_horn/s_mutants_18.smt2 similarity index 100% rename from bench_horn/samples_search_18.smt2 rename to bench_horn/s_mutants_18.smt2 diff --git a/bench_horn/samples_search_19.smt2 b/bench_horn/s_mutants_19.smt2 similarity index 100% rename from bench_horn/samples_search_19.smt2 rename to bench_horn/s_mutants_19.smt2 diff --git a/bench_horn/samples_search_20.smt2 b/bench_horn/s_mutants_20.smt2 similarity index 100% rename from bench_horn/samples_search_20.smt2 rename to bench_horn/s_mutants_20.smt2 diff --git a/bench_horn/samples_search_21.smt2 b/bench_horn/s_mutants_21.smt2 similarity index 100% rename from bench_horn/samples_search_21.smt2 rename to bench_horn/s_mutants_21.smt2 diff --git a/bench_horn/samples_search_22.smt2 b/bench_horn/s_mutants_22.smt2 similarity index 100% rename from bench_horn/samples_search_22.smt2 rename to bench_horn/s_mutants_22.smt2 diff --git a/bench_horn/samples_only_04.smt2 b/bench_horn/s_mutants_23.smt2 similarity index 100% rename from bench_horn/samples_only_04.smt2 rename to bench_horn/s_mutants_23.smt2 diff --git a/bench_horn/samples_only_01.smt2 b/bench_horn/s_seeds_01.smt2 similarity index 100% rename from bench_horn/samples_only_01.smt2 rename to bench_horn/s_seeds_01.smt2 diff --git a/bench_horn/samples_only_02.smt2 b/bench_horn/s_seeds_02.smt2 similarity index 100% rename from bench_horn/samples_only_02.smt2 rename to bench_horn/s_seeds_02.smt2 diff --git a/bench_horn/samples_only_03.smt2 b/bench_horn/s_seeds_03.smt2 similarity index 100% rename from bench_horn/samples_only_03.smt2 rename to bench_horn/s_seeds_03.smt2 diff --git a/bench_horn/samples_only_11.smt2 b/bench_horn/s_seeds_04.smt2 similarity index 100% rename from bench_horn/samples_only_11.smt2 rename to bench_horn/s_seeds_04.smt2 diff --git a/bench_horn/samples_only_05.smt2 b/bench_horn/s_seeds_05.smt2 similarity index 100% rename from bench_horn/samples_only_05.smt2 rename to bench_horn/s_seeds_05.smt2 diff --git a/bench_horn/samples_only_06.smt2 b/bench_horn/s_seeds_06.smt2 similarity index 100% rename from bench_horn/samples_only_06.smt2 rename to bench_horn/s_seeds_06.smt2 diff --git a/bench_horn/samples_only_07.smt2 b/bench_horn/s_seeds_07.smt2 similarity index 100% rename from bench_horn/samples_only_07.smt2 rename to bench_horn/s_seeds_07.smt2 diff --git a/bench_horn/samples_only_08.smt2 b/bench_horn/s_seeds_08.smt2 similarity index 100% rename from bench_horn/samples_only_08.smt2 rename to bench_horn/s_seeds_08.smt2 diff --git a/bench_horn/samples_only_09.smt2 b/bench_horn/s_seeds_09.smt2 similarity index 100% rename from bench_horn/samples_only_09.smt2 rename to bench_horn/s_seeds_09.smt2 diff --git a/bench_horn/samples_only_10.smt2 b/bench_horn/s_seeds_10.smt2 similarity index 100% rename from bench_horn/samples_only_10.smt2 rename to bench_horn/s_seeds_10.smt2 diff --git a/bench_horn/s_triv_01.smt2 b/bench_horn/s_triv_01.smt2 new file mode 100755 index 000000000..5c996abc9 --- /dev/null +++ b/bench_horn/s_triv_01.smt2 @@ -0,0 +1,22 @@ +(declare-rel inv (Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (=> (< x 2452) (inv x x))) + +(rule (=> + (and + (inv x y) + (= x1 (+ x 1)) + ) + (inv x1 y) + ) +) + +(rule (=> (and (inv y y) (not (< y 2452))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/s_triv_02.smt2 b/bench_horn/s_triv_02.smt2 new file mode 100755 index 000000000..4952f8328 --- /dev/null +++ b/bench_horn/s_triv_02.smt2 @@ -0,0 +1,22 @@ +(declare-rel inv (Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (inv x x)) + +(rule (=> + (and + (inv x y) + (= x1 (+ x y)) + ) + (inv x1 x1) + ) +) + +(rule (=> (and (inv x y) (not (= x y))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/s_triv_03.smt2 b/bench_horn/s_triv_03.smt2 new file mode 100755 index 000000000..4cb4f22fb --- /dev/null +++ b/bench_horn/s_triv_03.smt2 @@ -0,0 +1,22 @@ +(declare-rel inv (Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (=> (< x 2452) (inv x x))) + +(rule (=> + (and + (inv x y) + (= x1 (+ x y)) + ) + (inv x1 x1) + ) +) + +(rule (=> (and (inv x y) (not (= x y))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/s_triv_04.smt2 b/bench_horn/s_triv_04.smt2 new file mode 100755 index 000000000..408970d6b --- /dev/null +++ b/bench_horn/s_triv_04.smt2 @@ -0,0 +1,22 @@ +(declare-rel inv (Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (=> (< x 2452) (inv x x))) + +(rule (=> + (and + (inv x x) + (= x1 (+ x 1)) + ) + (inv x1 x1) + ) +) + +(rule (=> (and (inv x y) (not (= x y))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/s_triv_05.smt2 b/bench_horn/s_triv_05.smt2 new file mode 100755 index 000000000..781687375 --- /dev/null +++ b/bench_horn/s_triv_05.smt2 @@ -0,0 +1,22 @@ +(declare-rel inv (Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (inv x 0)) + +(rule (=> + (and + (inv x y) + (= x1 (+ x 1)) + ) + (inv x1 y) + ) +) + +(rule (=> (and (inv x y) (not (= 0 y))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/s_triv_06.smt2 b/bench_horn/s_triv_06.smt2 new file mode 100755 index 000000000..0d0e3375d --- /dev/null +++ b/bench_horn/s_triv_06.smt2 @@ -0,0 +1,22 @@ +(declare-rel inv (Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (inv 0 0)) + +(rule (=> + (and + (inv x y) + (= x1 (+ x 1)) + ) + (inv x1 y) + ) +) + +(rule (=> (and (inv x y) (not (= 0 y))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/s_triv_07.smt2 b/bench_horn/s_triv_07.smt2 new file mode 100755 index 000000000..04ffa1d24 --- /dev/null +++ b/bench_horn/s_triv_07.smt2 @@ -0,0 +1,22 @@ +(declare-rel inv (Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (inv 0 1)) + +(rule (=> + (and + (inv x y) + (= x1 (+ x 1)) + ) + (inv x1 0) + ) +) + +(rule (=> (and (inv 1 y) (not (= 0 y))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/s_triv_08.smt2 b/bench_horn/s_triv_08.smt2 new file mode 100755 index 000000000..b1211b66f --- /dev/null +++ b/bench_horn/s_triv_08.smt2 @@ -0,0 +1,17 @@ +(declare-rel inv (Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (inv 0 0)) + +(rule (=> (inv 1 y) (inv x 1) + ) +) + +(rule (=> (and (inv x y) (not (= x y))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/samples_shrink_big_numbers_1024.smt2 b/bench_horn/sn_1024.smt2 similarity index 100% rename from bench_horn/samples_shrink_big_numbers_1024.smt2 rename to bench_horn/sn_1024.smt2 diff --git a/bench_horn/samples_shrink_big_numbers_2048.smt2 b/bench_horn/sn_2048.smt2 similarity index 100% rename from bench_horn/samples_shrink_big_numbers_2048.smt2 rename to bench_horn/sn_2048.smt2 diff --git a/bench_horn/samples_shrink_big_numbers_4096.smt2 b/bench_horn/sn_4096.smt2 similarity index 100% rename from bench_horn/samples_shrink_big_numbers_4096.smt2 rename to bench_horn/sn_4096.smt2 diff --git a/bench_horn/samples_shrink_big_numbers_8192.smt2 b/bench_horn/sn_8192.smt2 similarity index 100% rename from bench_horn/samples_shrink_big_numbers_8192.smt2 rename to bench_horn/sn_8192.smt2 diff --git a/bench_horn/bouncy_one_counter.smt2 b/bench_horn_multiple/bouncy_one_counter.smt2 similarity index 100% rename from bench_horn/bouncy_one_counter.smt2 rename to bench_horn_multiple/bouncy_one_counter.smt2 diff --git a/bench_horn/bouncy_symmetry.smt2 b/bench_horn_multiple/bouncy_symmetry.smt2 similarity index 100% rename from bench_horn/bouncy_symmetry.smt2 rename to bench_horn_multiple/bouncy_symmetry.smt2 diff --git a/bench_horn/bouncy_two_counters_equality.smt2 b/bench_horn_multiple/bouncy_two_counters_equality.smt2 similarity index 100% rename from bench_horn/bouncy_two_counters_equality.smt2 rename to bench_horn_multiple/bouncy_two_counters_equality.smt2 diff --git a/bench_horn/bouncy_two_counters_inequality.smt2 b/bench_horn_multiple/bouncy_two_counters_inequality.smt2 similarity index 100% rename from bench_horn/bouncy_two_counters_inequality.smt2 rename to bench_horn_multiple/bouncy_two_counters_inequality.smt2 diff --git a/bench_horn/dillig12.smt2 b/bench_horn_multiple/dillig12.smt2 similarity index 100% rename from bench_horn/dillig12.smt2 rename to bench_horn_multiple/dillig12.smt2 diff --git a/bench_horn/dillig17.smt2 b/bench_horn_multiple/dillig17.smt2 similarity index 100% rename from bench_horn/dillig17.smt2 rename to bench_horn_multiple/dillig17.smt2 diff --git a/bench_horn/dillig24.smt2 b/bench_horn_multiple/dillig24.smt2 similarity index 100% rename from bench_horn/dillig24.smt2 rename to bench_horn_multiple/dillig24.smt2 diff --git a/bench_horn/dillig25.smt2 b/bench_horn_multiple/dillig25.smt2 similarity index 100% rename from bench_horn/dillig25.smt2 rename to bench_horn_multiple/dillig25.smt2 diff --git a/bench_horn/dillig28.smt2 b/bench_horn_multiple/dillig28.smt2 similarity index 100% rename from bench_horn/dillig28.smt2 rename to bench_horn_multiple/dillig28.smt2 diff --git a/bench_horn/dtuc.smt2 b/bench_horn_multiple/dtuc.smt2 similarity index 100% rename from bench_horn/dtuc.smt2 rename to bench_horn_multiple/dtuc.smt2 diff --git a/bench_horn/niagara.smt2 b/bench_horn_multiple/niagara.smt2 similarity index 100% rename from bench_horn/niagara.smt2 rename to bench_horn_multiple/niagara.smt2 diff --git a/bench_horn/samples_multiple_inv_01.smt2 b/bench_horn_multiple/samples_multiple_inv_01.smt2 similarity index 100% rename from bench_horn/samples_multiple_inv_01.smt2 rename to bench_horn_multiple/samples_multiple_inv_01.smt2 diff --git a/bench_horn/samples_multiple_inv_02.smt2 b/bench_horn_multiple/samples_multiple_inv_02.smt2 similarity index 100% rename from bench_horn/samples_multiple_inv_02.smt2 rename to bench_horn_multiple/samples_multiple_inv_02.smt2 diff --git a/bench_horn/samples_multiple_inv_03.smt2 b/bench_horn_multiple/samples_multiple_inv_03.smt2 similarity index 100% rename from bench_horn/samples_multiple_inv_03.smt2 rename to bench_horn_multiple/samples_multiple_inv_03.smt2 diff --git a/bench_horn/samples_multiple_inv_04.smt2 b/bench_horn_multiple/samples_multiple_inv_04.smt2 similarity index 100% rename from bench_horn/samples_multiple_inv_04.smt2 rename to bench_horn_multiple/samples_multiple_inv_04.smt2 From 074f1a329b1a3c9828161c458c34049e51a7446c Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Fri, 27 Oct 2017 16:05:52 -0400 Subject: [PATCH 047/236] various tiny fixes and optimizations --- ...if_true-unreach-call_true-termination.smt2 | 34 +- include/ae/ExprSimpl.hpp | 402 +++++++++++------- include/deep/CodeSampler.hpp | 162 +++---- include/deep/Horn.hpp | 4 +- include/deep/LinCom.hpp | 29 +- include/deep/RndLearner.hpp | 116 ++--- include/deep/RndLearnerV2.hpp | 108 ++--- tools/deep/DeepHorn.cpp | 6 +- 8 files changed, 488 insertions(+), 373 deletions(-) diff --git a/bench_horn/count_by_2_modif_true-unreach-call_true-termination.smt2 b/bench_horn/count_by_2_modif_true-unreach-call_true-termination.smt2 index 7e4f296c3..34f7178d8 100644 --- a/bench_horn/count_by_2_modif_true-unreach-call_true-termination.smt2 +++ b/bench_horn/count_by_2_modif_true-unreach-call_true-termination.smt2 @@ -1,2 +1,34 @@ +(declare-var i Int) +(declare-var i_ Int) +(declare-var c Int) +(declare-var c_ Int) +(declare-var LRG Int) +(declare-rel itp (Int Int Int)) +(declare-rel fail ()) -(check-sat) +(rule (=> +(and + (= i 0) + (= c 0) + (= LRG 256)) ; LARGE_INT is large and a power of 2 + (itp i c LRG) +)) + +(rule (=> + (and + (itp i_ c_ LRG) + (< i_ LRG) + (= i (+ i_ 2)) + (= c (+ c_ 1)) + ) + (itp i c LRG) +)) + +(rule (=> + (and + (itp i c LRG) + (>= i LRG) ; stop condition (redun.) + (not (= i LRG)) ; assert negation + ) fail)) + +(query fail :print-certificate true) diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index fcbf04e74..152e4bbe4 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -8,7 +8,6 @@ using namespace std; using namespace boost; namespace ufo { - template static Expr conjoin(Range& conjs, ExprFactory &efac){ return (conjs.size() == 0) ? mk(efac) : @@ -30,6 +29,62 @@ namespace ufo mknary(terms); } + template static Expr mkmult(Range& terms, ExprFactory &efac){ + return + (terms.size() == 0) ? mkTerm (mpz_class (1), efac) : + (terms.size() == 1) ? *terms.begin() : + mknary(terms); + } + + template static bool emptyIntersect(Range1& av, Range2& bv){ + for (auto &var1: av){ + for (auto &var2: bv) if (var1 == var2) return false; + } + return true; + } + + template static bool emptyIntersect(Expr a, Range& bv){ + ExprVector av; + filter (a, bind::IsConst (), inserter(av, av.begin())); + return emptyIntersect(av, bv); + } + + inline static bool emptyIntersect(Expr a, Expr b){ + ExprVector bv; + filter (b, bind::IsConst (), inserter(bv, bv.begin())); + return emptyIntersect(a, bv); + } + + inline static void getConj (Expr a, ExprSet &conjs) + { + if (isOpX(a)) return; + if (isOpX(a)){ + conjs.clear(); + return; + } else if (isOpX(a)){ + for (unsigned i = 0; i < a->arity(); i++){ + getConj(a->arg(i), conjs); + } + } else { + conjs.insert(a); + } + } + + inline static void getDisj (Expr a, ExprSet &disjs) + { + if (isOpX(a)) return; + if (isOpX(a)){ + disjs.clear(); + return; + } else if (isOpX(a)){ + for (unsigned i = 0; i < a->arity(); i++){ + getDisj(a->arg(i), disjs); + } + } else { + disjs.insert(a); + } + } + /** * Represent Expr as multiplication */ @@ -697,68 +752,26 @@ namespace ufo mk(exp->left()), exp->right())); } - + if (isOpX(exp)){ - for (auto it = exp->args_begin(), end = exp->args_end(); it != end; ++it){ - - if (isOpX(*it)) return mk(efac); - - if (isOpX(*it) && (*it)->left() == (*it)->right()) return mk(efac); - + ExprSet dsjs; + getDisj(exp, dsjs); + for (auto & a : dsjs){ + if (isOpX(a) && a->left() == a->right()) return mk(efac); } + return disjoin (dsjs, exp->getFactory()); } - + if (isOpX(exp)){ - for (auto it = exp->args_begin(), end = exp->args_end(); it != end; ++it){ - - if (isOpX(*it)) return mk(efac); - - } - } - - return exp; - } - }; - - struct PlusMinusChanger - { - ExprFactory &efac; - - // bool changed; - - PlusMinusChanger (ExprFactory& _efac): - efac(_efac) - { - // changed = false; - }; - - Expr operator() (Expr exp) - { - - if (isOpX(exp)/* && !changed*/){ - //changed = true; - ExprSet expClauses; - bool changed = false; - expClauses.insert(mkTerm (mpz_class (1), exp->getFactory())); - for (ENode::args_iterator it = exp->args_begin(), end = exp->args_end(); - it != end; ++it){ - if (changed){ - expClauses.insert(additiveInverse(*it)); - } else { - expClauses.insert(*it); - } - - changed = !changed; - } - Expr res = mknary(expClauses); - - return res; + ExprSet cnjs; + getConj(exp, cnjs); + return conjoin (cnjs, exp->getFactory()); } - + return exp; } }; - + inline static Expr simplifyArithm (Expr exp) { RW rw(new SimplifyArithmExpr(exp->getFactory())); @@ -771,12 +784,6 @@ namespace ufo return dagVisit (rw, exp); } - inline static Expr randomChangePlusMinus (Expr exp) - { - RW rw(new PlusMinusChanger(exp->getFactory())); - return dagVisit (rw, exp); - } - inline static ExprSet minusSets(ExprSet& v1, ExprSet& v2){ ExprSet v3; bool res; @@ -789,35 +796,7 @@ namespace ufo } return v3; } - - inline static bool emptyIntersect(Expr a, Expr b){ - ExprVector av; - ExprVector bv; - - filter (a, bind::IsConst (), inserter(av, av.begin())); - filter (b, bind::IsConst (), inserter(bv, bv.begin())); - - for (auto &var1: av){ - for (auto &var2: bv){ - if (var1 == var2){ - return false; - } - } - } - return true; - } - - inline static bool emptyIntersect(Expr a, ExprSet& bv){ - ExprVector av; - - filter (a, bind::IsConst (), inserter(av, av.begin())); - - for (auto &var1: av){ - for (auto &var2: bv) if (var1 == var2) return false; - } - return true; - } - + inline static bool isNumericConst(Expr e) { return isOpX(e) || isOpX(e); @@ -1066,30 +1045,6 @@ namespace ufo dagVisit (fn, e1); return fn.found; } - - inline static void getConj (Expr a, ExprSet &conjs) - { - if (isOpX(a)) return; - if (isOpX(a)){ - for (unsigned i = 0; i < a->arity(); i++){ - getConj(a->arg(i), conjs); - } - } else { - conjs.insert(a); - } - } - - inline static void getDisj (Expr a, ExprSet &disjs) - { - if (isOpX(a)) return; - if (isOpX(a)){ - for (unsigned i = 0; i < a->arity(); i++){ - getDisj(a->arg(i), disjs); - } - } else { - disjs.insert(a); - } - } inline Expr convertToGEandGT(Expr term) { @@ -1124,18 +1079,6 @@ namespace ufo return term; } - /** - * To rem - */ - inline bool containsOnlyOf(Expr a, Expr b) - { - ExprVector av; - filter (a, bind::IsConst (), back_inserter (av)); - if (av.size() == 1) if (av[0] == b) return true; - - return false; - } - inline static Expr simplifiedAnd (Expr a, Expr b){ ExprSet conjs; getConj(a, conjs); @@ -1197,7 +1140,7 @@ namespace ufo } return conjoin (newer, exp->getFactory()); } - + // not very pretty method, but.. inline static Expr reBuildCmp(Expr term, Expr lhs, Expr rhs) { @@ -1299,7 +1242,7 @@ namespace ufo } return mk(term); } - + inline static Expr unfoldITE(Expr term) { if (isOpX(term)) @@ -1452,24 +1395,75 @@ namespace ufo return term; } + struct MoveInsideITEr + { + MoveInsideITEr () {}; + + Expr operator() (Expr exp) + { + if (isOpX(exp)) + { + Expr ite = exp->arg(0); + if (isOpX(ite)) + { + return mk(ite->arg(0), + mk(ite->arg(1), exp->arg(1)), + mk(ite->arg(2), exp->arg(1))); + } + } + if (isOpX(exp)) + { + ExprVector args; + Expr ite; + for (auto it = exp->args_begin(), end = exp->args_end(); it != end; ++it) + { + if (isOpX(*it)) + { + if (ite != NULL) return exp; + ite = *it; + } + else + { + args.push_back(*it); + } + } + + if (ite == NULL) return exp; + + Expr multiplier = mkmult (args, exp->getFactory()); + return mk(ite->arg(0), + mk(multiplier, ite->arg(1)), + mk(multiplier, ite->arg(2))); + } + + return exp; + } + }; + + inline static Expr moveInsideITE (Expr exp) + { + RW a(new MoveInsideITEr()); + return dagVisit (a, exp); + } + // very simple check if tautology (SMT-based check is expensive) inline static bool isTautology(Expr term) { if (isOpX(term)) if (term->arg(0) == term->arg(1)) return true; - + if (isOp(term)) if (isNumericConst(term->arg(0)) && isNumericConst(term->arg(1))) return evaluateCmpConsts(term, lexical_cast(term->arg(0)), lexical_cast(term->arg(1))); - + ExprSet cnjs; getConj(term, cnjs); if (cnjs.size() < 2) return false; - + bool res = true; for (auto &a : cnjs) res &= isTautology(a); - + return res; } @@ -1724,28 +1718,28 @@ namespace ufo for (auto it = ex->args_begin (), end = ex->args_end (); it != end; ++it) getLinCombCoefs(*it, intCoefs); } - else if (isOp(ex)) // assuming the lin.combination is on the left side + else if (isOp(ex)) // assuming the lin.combination is on the left side + { + Expr lhs = ex->left(); + if (isOpX(lhs)) { - Expr lhs = ex->left(); - if (isOpX(lhs)) + for (auto it = lhs->args_begin (), end = lhs->args_end (); it != end; ++it) { - for (auto it = lhs->args_begin (), end = lhs->args_end (); it != end; ++it) + if (isOpX(*it)) // else, it is 1, and we will add it anyway; { - if (isOpX(*it)) // else, it is 1, and we will add it anyway; - { - intCoefs.insert(lexical_cast ((*it)->left())); - } + intCoefs.insert(lexical_cast ((*it)->left())); } } - else + } + else + { + if (isOpX(lhs)) { - if (isOpX(lhs)) - { - intCoefs.insert(lexical_cast (lhs->left())); - } + intCoefs.insert(lexical_cast (lhs->left())); } } } + } inline static void getLinCombConsts(Expr ex, set& intConsts) { @@ -1759,12 +1753,120 @@ namespace ufo intConsts.insert(lexical_cast (ex->right())); } } - + inline static bool isSymmetric (Expr exp) { return isOpX(exp); } - + + struct TransitionOverapprox + { + ExprVector& srcVars; + ExprVector& dstVars; + + TransitionOverapprox (ExprVector& _srcVars, ExprVector& _dstVars): + srcVars(_srcVars), dstVars(_dstVars) {}; + + Expr operator() (Expr exp) + { + if (isOp(exp) && !containsOp(exp)) + { + ExprVector av; + filter (exp, bind::IsConst (), inserter(av, av.begin())); + if (!emptyIntersect(av, srcVars) && !emptyIntersect(av, dstVars)) + return mk(exp->getFactory()); + } + + return exp; + } + }; + + struct CondRetriever : public std::unary_function + { + ExprSet& conds; + + CondRetriever (ExprSet& _conds) : conds(_conds) {}; + + VisitAction operator() (Expr exp) + { + if (isOpX(exp)) + { + conds.insert(exp->arg(0)); + return VisitAction::skipKids (); + } + return VisitAction::doKids (); + } + }; + + struct DeltaRetriever : public std::unary_function + { + ExprVector& srcVars; + ExprVector& dstVars; + ExprSet& deltas; + + DeltaRetriever (ExprVector& _srcVars, ExprVector& _dstVars, ExprSet& _deltas): + srcVars(_srcVars), dstVars(_dstVars), deltas(_deltas) {}; + + VisitAction operator() (Expr exp) + { + if (isOpX(exp)) + { + ExprVector av; + filter (exp, bind::IsConst (), inserter(av, av.begin())); + if (av.size() != 2) return VisitAction::skipKids ();; + for (int i = 0; i < srcVars.size(); i++) + { + if ((av[0] == srcVars[i] && av[1] == dstVars[i]) || + (av[1] == srcVars[i] && av[0] == dstVars[i])) + { + set coefs; + try + { + exp = normalizeAtom(exp, av); + getLinCombCoefs(exp, coefs); + } + catch (const boost::bad_lexical_cast& e) { continue; } + + bool success = true; + for (auto i : coefs) success = success && (i == -1 || i == 1); + if (success) + { + Expr cExpr = exp->right(); + int c = abs(lexical_cast(cExpr)); + if (c > 1) + { + Expr cand = mk(mk(srcVars[i], + mkTerm (mpz_class (c), exp->getFactory())), + mkTerm (mpz_class (0), exp->getFactory())); + deltas.insert(cand); + } + } + } + } + return VisitAction::skipKids (); + } + return VisitAction::doKids (); + } + }; + + inline void retrieveDeltas (Expr exp, ExprVector& srcVars, ExprVector& dstVars, ExprSet& deltas) + { + DeltaRetriever dr (srcVars, dstVars, deltas); + dagVisit (dr, exp); + } + + inline void retrieveConds (Expr exp, ExprSet& conds) + { + CondRetriever dr (conds); + dagVisit (dr, exp); + } + + inline static Expr overapproxTransitions (Expr exp, ExprVector& srcVars, ExprVector& dstVars) + { + RW rw(new TransitionOverapprox(srcVars, dstVars)); + return dagVisit (rw, exp); + } + template static void computeTransitiveClosure(ExprSet& r, ExprSet& tr) { for (auto &a : r) @@ -1789,11 +1891,11 @@ namespace ufo tr.insert(a); } } - + struct TransClAdder { TransClAdder () {}; - + Expr operator() (Expr exp) { if (isOpX(exp)) @@ -1808,7 +1910,7 @@ namespace ufo computeTransitiveClosure(cnjs, trCnjs); return conjoin(trCnjs, exp->getFactory()); } - + return exp; } }; diff --git a/include/deep/CodeSampler.hpp b/include/deep/CodeSampler.hpp index 4b6d5d66f..ea3adc13f 100644 --- a/include/deep/CodeSampler.hpp +++ b/include/deep/CodeSampler.hpp @@ -12,32 +12,22 @@ namespace ufo class CodeSampler { public: - + ExprSet candidates; - + set intConsts; set intCoefs; - + HornRuleExt& hr; Expr invRel; ExprVector invVars; ExprMap& extraVars; - - Expr zero; + ExprFactory &m_efac; - + CodeSampler(HornRuleExt& r, Expr& d, ExprVector& v, ExprMap& e) : - hr(r), invRel(d), invVars(v), extraVars(e), m_efac(d->getFactory()) - { - // add some "universal" constants - intConsts.insert(0); - intConsts.insert(1); - intConsts.insert(-1); - - // aux Expr const - zero = mkTerm (mpz_class (0), m_efac); - }; - + hr(r), invRel(d), invVars(v), extraVars(e), m_efac(d->getFactory()) {}; + void addSampleHlp(Expr tmpl, ExprVector& vars, ExprSet& actualVars) { ExprSet dsjs; @@ -74,77 +64,24 @@ namespace ufo for (auto &a : extraVars) invVarsCstm.push_back(a.second); - tmpl = normalizeDisj(tmpl, invVarsCstm); - - if (!isOpX (tmpl) && !isOpX (tmpl)) + try { - candidates.insert(tmpl); - - // get int constants from the normalized candidate - ExprSet intConstsE; - expr::filter (tmpl, bind::IsHardIntConst(), std::inserter (intConstsE, intConstsE.begin ())); - - for (auto &a : intConstsE) intConsts.insert(lexical_cast(a)); - getLinCombCoefs(tmpl, intCoefs); - } - } - - void processTransition(Expr tmpl, ExprVector& srcVars, ExprVector& dstVars, ExprSet& actualVars) - { - if (containsOp(tmpl) || containsOp
(tmpl) || - containsOp(tmpl) || containsOp(tmpl)) return; // GF: to optimize + tmpl = normalizeDisj(tmpl, invVarsCstm); - int found = false; - // very simple check if there are some srcVars and dstVars in the tmpl - - for (auto &v0 : srcVars) - { - for (auto &v1 : actualVars) + if (!isOpX (tmpl) && !isOpX (tmpl)) { - if (v0 == v1) - { - found = true; - break; - } - } - } - - if (! found) return; - - found = false; - for (auto &v0 : dstVars) - { - for (auto &v1 : actualVars) - { - if (v0 == v1) - { - found = true; - break; - } - } - } - - if (! found) return; - - for (auto &v : actualVars) - { - int index1 = getVarIndex(v, srcVars); - int index2 = getVarIndex(v, dstVars); - if (index1 == -1 && index2 == -1) return; - } - - ExprVector vars; - for (auto &v : actualVars) vars.push_back(v); + candidates.insert(tmpl); - ExprSet intCoefsE; - expr::filter (normalizeDisj(tmpl, vars), bind::IsHardIntConst(), std::inserter (intCoefsE, intCoefsE.begin ())); - - for (auto &a : intCoefsE) - { - intCoefs.insert(lexical_cast(a)); - } + // get int constants from the normalized candidate + ExprSet intConstsE; + expr::filter (tmpl, bind::IsHardIntConst(), std::inserter (intConstsE, intConstsE.begin ())); + + for (auto &a : intConstsE) intConsts.insert(lexical_cast(a)); + getLinCombCoefs(tmpl, intCoefs); + } + } catch (const boost::bad_lexical_cast& e) { /*TBD*/ } } - + void addSample(Expr term) { ExprSet actualVars; @@ -168,11 +105,6 @@ namespace ufo { addSampleHlp(term, hr.dstVars, actualVars); } - - if (hr.dstRelation == hr.srcRelation) - { - processTransition(term, hr.srcVars, hr.dstVars, actualVars); - } } void populateArityAndTemplates(Expr term) @@ -216,7 +148,20 @@ namespace ufo populateArityAndTemplates(convertToGEandGT(term)); } } - + + void coreProcess(Expr e) + { + e = moveInsideITE(e); + e = unfoldITE(e); + e = convertToGEandGT(e); + populateArityAndTemplates(e); + } + + void analyzeExtras(ExprSet& extra) + { + for (auto &cnj : extra) coreProcess(cnj); + } + void analyzeCode() { if (false) // printing only @@ -228,11 +173,11 @@ namespace ufo outs() << "dst vars: "; for (int i = 0; i < hr.dstVars.size(); i++) outs() << "[" << *invVars[i] << "] = " << *hr.dstVars[i] << ", "; outs() << "\n"; + outs() << "local vars: "; + for (auto & a : hr.locVars) outs() << *a << ", "; + outs() << "\n"; outs() << "body: " << *hr.body << "\n\n"; } - - intCoefs.insert(1); - intConsts.insert(0); Expr body = hr.body; @@ -253,26 +198,37 @@ namespace ufo } // get samples and normalize + ExprSet conds; + retrieveConds(body, conds); + for (auto & a : conds) populateArityAndTemplates(a); + // for the query: add a negation of the entire non-recursive part: if (hr.isQuery) { Expr massaged = propagateEqualities(body); - massaged = unfoldITE(mkNeg(massaged)); - massaged = convertToGEandGT(massaged); - populateArityAndTemplates(massaged); + coreProcess(mkNeg(massaged)); + } + else if (hr.isFact) + { + coreProcess(body); } else { - // for others: the entire non-recursive part - ExprSet lin; - getConj(body, lin); - for (auto &cnj : lin) + // hr.isInductive + Expr e = unfoldITE(body); + + ExprSet deltas; // some magic here for enhancing the grammar + retrieveDeltas(e, hr.srcVars, hr.dstVars, deltas); + for (auto & a : deltas) { - // GF: todo: make sure all constants in the code are Ints (otherwise, z3 could be unpredictable) - Expr massaged = unfoldITE(cnj); - massaged = convertToGEandGT(massaged); - populateArityAndTemplates(massaged); + populateArityAndTemplates(a); } + + e = overapproxTransitions(e, hr.srcVars, hr.dstVars); + + e = simplifyBool(e); + e = convertToGEandGT(e); + populateArityAndTemplates(e); } } }; diff --git a/include/deep/Horn.hpp b/include/deep/Horn.hpp index 9de96fc6a..88b098629 100644 --- a/include/deep/Horn.hpp +++ b/include/deep/Horn.hpp @@ -231,13 +231,13 @@ namespace ufo for (auto &a: args) { bool found = false; - for (auto &b : hr.dstVars) + for (auto &b : origDstVars) { if (a == b) found = true; } if (! found) { - for (auto &b : hr.srcVars) + for (auto &b : origSrcVars) { if (a == b) found = true; } diff --git a/include/deep/LinCom.hpp b/include/deep/LinCom.hpp index 5ba463315..4613e1a3e 100644 --- a/include/deep/LinCom.hpp +++ b/include/deep/LinCom.hpp @@ -221,7 +221,7 @@ namespace ufo map cmpOpDensity; map> varDensity; map> coefDensity; - map>>> varCombinations; + vector>> varCombinations; vector samples; vector learntLemmas; // indeces to samples ExprSet learntExprs; // lemmas from learntLemmas @@ -743,7 +743,7 @@ namespace ufo LAterm& la = terms.back(); la.arity = chooseByWeight(plusAritiesDensity[arity]); - vector>& varCombination = varCombinations[arity][la.arity]; + vector>& varCombination = varCombinations[la.arity]; int comb = chooseByWeight(varDensity[arity][la.arity]); varcombs.push_back(varCombination[comb]); } @@ -1048,6 +1048,14 @@ namespace ufo void initDensities(set& arities) { + // preparing var combinations; + varCombinations.push_back(vector>()); // empty ones; not used + for (int i = 1; i <= vars.size(); i++) + { + varCombinations.push_back(vector>()); + getCombinations(varInds, 0, i, varCombinations.back()); + } + for (auto ar : arities) initDensities(ar); } @@ -1074,19 +1082,15 @@ namespace ufo { cmpOpDensity[ar][i] = 0; } - + // preparing var densities; - varCombinations[ar].push_back(vector>()); // empty ones; not used - varDensity[ar].push_back(density()); // - + varDensity[ar].push_back(density()); + for (int i = 1; i <= vars.size(); i++) { - varCombinations[ar].push_back(vector>()); varDensity[ar].push_back(density()); - - getCombinations(varInds, 0, i, varCombinations[ar].back()); - - for (int j = 0; j < varCombinations[ar].back().size(); j++) + + for (int j = 0; j < varCombinations[i].size(); j++) { varDensity[ar].back()[j] = 0; } @@ -1284,7 +1288,7 @@ namespace ufo { outs() << " Var Combination density: "; - for (int j : varCombinations[ar][i][b.first]) + for (int j : varCombinations[i][b.first]) { outs() << *vars[j] << ", "; } @@ -1340,7 +1344,6 @@ namespace ufo } } }; - } diff --git a/include/deep/RndLearner.hpp b/include/deep/RndLearner.hpp index 5568e45de..a4b281bd0 100644 --- a/include/deep/RndLearner.hpp +++ b/include/deep/RndLearner.hpp @@ -28,26 +28,25 @@ namespace ufo CHCs& ruleManager; vector decls; vector> lfs; + vector lcss; vector curCandidates; int invNumber; int numOfSMTChecks; - bool itp_succeeded; bool kind_succeeded; // interaction with k-induction bool oneInductiveProof; bool densecode; // catch various statistics about the code (mostly, frequences) and setup the prob.distribution based on them bool addepsilon; // add some small probability to features that never happen in the code bool aggressivepruning; // aggressive pruning of the search space based on SAT/UNSAT (WARNING: may miss some invariants) - bool kinduction; bool printLog; public: - - RndLearner (ExprFactory &efac, EZ3 &z3, CHCs& r, bool k, bool i, bool b1, bool b2, bool b3) : + + RndLearner (ExprFactory &efac, EZ3 &z3, CHCs& r, bool k, bool b1, bool b2, bool b3) : m_efac(efac), m_z3(z3), ruleManager(r), m_smt_solver (z3), u(efac), - invNumber(0), numOfSMTChecks(0), oneInductiveProof(true), kind_succeeded (!k), itp_succeeded(!i), + invNumber(0), numOfSMTChecks(0), oneInductiveProof(true), kind_succeeded (!k), densecode(b1), addepsilon(b2), aggressivepruning(b3), printLog(false){} @@ -278,7 +277,6 @@ namespace ufo bool checkBoundedProofs (ExprSet& itpCandidates) { - if (itp_succeeded) return false; assert(invNumber == 1); for (auto it = itpCandidates.begin(), end = itpCandidates.end(); it != end; ) @@ -294,7 +292,6 @@ namespace ufo if (checkSafety()) { - itp_succeeded = true; return true; } } @@ -429,6 +426,7 @@ namespace ufo ExprSet stub; doCodeSampling(decls[ind], stub); + calculateStatistics(decls[ind]); for (auto a : lf_before.learntExprs) { @@ -466,7 +464,6 @@ namespace ufo void doCodeSampling(Expr invRel, ExprSet& cands) { vector css; - set orArities; set progConstsTmp; set progConsts; set intCoefs; @@ -478,25 +475,23 @@ namespace ufo for (auto &hr : ruleManager.chcs) { if (hr.dstRelation != invRel && hr.srcRelation != invRel) continue; - + css.push_back(CodeSampler(hr, invRel, lf.getVars(), lf.nonlinVars)); css.back().analyzeCode(); - + + if (hr.isInductive) css.back().analyzeExtras(cands); + // convert intConsts to progConsts and add additive inverses (if applicable): for (auto &a : css.back().intConsts) { progConstsTmp.insert( a); progConstsTmp.insert(-a); } - + // same for intCoefs - for (auto &a : css.back().intCoefs) - { - intCoefs.insert( a); - intCoefs.insert(-a); - } + for (auto &a : css.back().intCoefs) intCoefs.insert(a); } - + if (lf.nonlinVars.size() > 0) { if (printLog) outs() << "Multed vars: "; @@ -504,9 +499,12 @@ namespace ufo { if (printLog) outs() << *a.first << " = " << *a.second << "\n"; lf.addVar(a.second); + Expr b = a.first->right(); + if (isNumericConst(b)) intCoefs.insert(lexical_cast(b)); } } - + + for (auto &a : intCoefs) intCoefs.insert(-a); for (auto &a : intCoefs) if (a != 0) lf.addIntCoef(a); for (auto &a : intCoefs) @@ -516,7 +514,7 @@ namespace ufo progConsts.insert(a*b); } } - + // sort progConsts and push to vector: while (progConsts.size() > 0) { @@ -531,37 +529,53 @@ namespace ufo progConsts.erase(min); lf.addConst(min); } - + lf.initialize(); - // normalize samples obtained from CHCs and calculate various statistics: - vector lcss; + ExprSet allCands; for (auto &cs : css) { for (auto &cand : cs.candidates) { - lcss.push_back(LAdisj()); - LAdisj& lcs = lcss.back(); - if (lf.exprToLAdisj(cand, lcs)) - { - lcs.normalizePlus(); - cands.insert(lf.toExpr(lcs)); - orArities.insert(lcs.arity); - } - else - { - lcss.pop_back(); - } + allCands.insert(cand); } } - + + // normalize samples obtained from CHCs + for (auto & cand : allCands) + { + lcss.push_back(LAdisj()); + LAdisj& lcs = lcss.back(); + if (lf.exprToLAdisj(cand, lcs)) + { + lcs.normalizePlus(); + cands.insert(lf.toExpr(lcs)); // do it here because cand may contain artif. vars + } + else + { + lcss.pop_back(); + } + } + } + + void calculateStatistics(Expr invRel) + { + int ind = getVarIndex(invRel, decls); + LAfactory& lf = lfs[ind].back(); + + set orArities; + + for (auto &lcs : lcss) + { + orArities.insert(lcs.arity); + } + if (orArities.size() == 0) // default, if no samples were obtained from the code { for (int i = 1; i <= DEFAULTARITY; i++) orArities.insert(i); } lf.initDensities(orArities); - if (densecode) { // collect number of occurrences.... @@ -572,24 +586,24 @@ namespace ufo // of arities of application of OR lf.orAritiesDensity[ar] ++; - + for (auto & lc : lcs.dstate) { // of arities of application of PLUS lf.plusAritiesDensity[ar][lc.arity] ++; - + // of constants lf.intConstDensity[ar][lc.intconst] ++; - + // of comparison operations lf.cmpOpDensity[ar][lc.cmpop] ++; - + set vars; int vars_id = -1; for (int j = 0; j < lc.vcs.size(); j = j+2) vars.insert(lc.vcs[j]); - for (int j = 0; j < lf.varCombinations[ar][lc.arity].size(); j++) + for (int j = 0; j < lf.varCombinations[lc.arity].size(); j++) { - if (lf.varCombinations[ar][lc.arity][j] == vars) + if (lf.varCombinations[lc.arity][j] == vars) { vars_id = j; break; @@ -632,9 +646,9 @@ namespace ufo set vars; int vars_id = -1; for (int j = 0; j < lc.vcs.size(); j = j+2) vars.insert(lc.vcs[j]); - for (int j = 0; j < lf.varCombinations[ar][lc.arity].size(); j++) + for (int j = 0; j < lf.varCombinations[lc.arity].size(); j++) { - if (lf.varCombinations[ar][lc.arity][j] == vars) + if (lf.varCombinations[lc.arity][j] == vars) { vars_id = j; break; @@ -654,7 +668,8 @@ namespace ufo } } - lf.stabilizeDensities(orArities, addepsilon); + lf.stabilizeDensities(orArities, addepsilon, densecode); + if (printLog) { outs() << "\nStatistics for " << *invRel << ":\n"; @@ -666,11 +681,11 @@ namespace ufo { bool success = false; int iter = 1; - + for (int i = 0; i < maxAttempts; i++) { // first, guess candidates for each inv.declaration - + bool skip = false; for (int j = 0; j < invNumber; j++) { @@ -780,7 +795,7 @@ namespace ufo CHCs ruleManager(m_efac, z3); ruleManager.parse(smt); - RndLearner ds(m_efac, z3, ruleManager, kind, itp, b1, b2, b3); + RndLearner ds(m_efac, z3, ruleManager, kind, b1, b2, b3); ds.setupSafetySolver(); std::srand(std::time(0)); @@ -803,7 +818,8 @@ namespace ufo for (auto& dcl: ruleManager.decls) { ds.initializeDecl(dcl); - ds.doCodeSampling (dcl->arg(0), stub); + ds.doCodeSampling(dcl->arg(0), stub); + ds.calculateStatistics(dcl->arg(0)); } ds.synthesize(maxAttempts, outfile, itpCands); @@ -817,7 +833,7 @@ namespace ufo CHCs ruleManager(m_efac, z3); ruleManager.parse(string(chcfile)); - RndLearner ds(m_efac, z3, ruleManager, false, false, false, false, false); + RndLearner ds(m_efac, z3, ruleManager, false, false, false, false); ds.setupSafetySolver(); vector invNames; diff --git a/include/deep/RndLearnerV2.hpp b/include/deep/RndLearnerV2.hpp index fbea8cc3f..9ac2b8f85 100644 --- a/include/deep/RndLearnerV2.hpp +++ b/include/deep/RndLearnerV2.hpp @@ -21,10 +21,14 @@ namespace ufo map modelsOfFailures; + vector tr; + vector fc; + vector qr; + public: - RndLearnerV2 (ExprFactory &efac, EZ3 &z3, CHCs& r, bool aggp) : - RndLearner (efac, z3, r, false, false, true, true, aggp){} + RndLearnerV2 (ExprFactory &efac, EZ3 &z3, CHCs& r, bool freqs, bool aggp) : + RndLearner (efac, z3, r, /*k-induction*/ false, freqs, /*epsilon*/ true, aggp){} Expr getModel(ExprVector& vars) { @@ -46,6 +50,14 @@ namespace ufo return lfs[num].back().learntExprs; } + void categorizeCHCs() + { + for (auto & a : ruleManager.chcs) + if (a.isInductive) tr.push_back(&a); + else if (a.isFact) fc.push_back(&a); + else if (a.isQuery) qr.push_back(&a); + } + int redundancyCheck (ExprVector& lemmas) { int num = 0; @@ -66,31 +78,23 @@ namespace ufo return num; } - bool checkSafetyAndReset() + bool checkSafetyAndReset(HornRuleExt* qu) { - // works if number of queries == 1 so far m_smt_solver.reset(); + m_smt_solver.assertExpr (qu->body); - for (auto &hr: ruleManager.chcs) - { - if (!hr.isQuery) continue; - - m_smt_solver.assertExpr (hr.body); + int ind = getVarIndex(qu->srcRelation, decls); + LAfactory& lf = lfs[ind].back(); - int ind = getVarIndex(hr.srcRelation, decls); - LAfactory& lf = lfs[ind].back(); - - Expr lmApp = conjoin(lf.learntExprs, m_efac); - for (int i = 0; i < hr.srcVars.size(); i++) - { - lmApp = replaceAll(lmApp, lf.getVarE(i), hr.srcVars[i]); - } - m_smt_solver.assertExpr(lmApp); - - numOfSMTChecks++; - return !m_smt_solver.solve (); + Expr lmApp = conjoin(lf.learntExprs, m_efac); + for (int i = 0; i < qu->srcVars.size(); i++) + { + lmApp = replaceAll(lmApp, lf.getVarE(i), qu->srcVars[i]); } - return true; + m_smt_solver.assertExpr(lmApp); + + numOfSMTChecks++; + return !m_smt_solver.solve (); } void getIS(HornRuleExt* hr, ExprVector& candSet) @@ -155,26 +159,23 @@ namespace ufo ExprVector exprs; for (auto & a : cands) exprs.push_back(a); - HornRuleExt* tr; - HornRuleExt* fc; - for (auto & a : ruleManager.chcs) if (a.isInductive) tr = &a; else if (a.isFact) fc = &a; - // initiation: remove crap first if (!skipInit) { - for (int i = exprs.size() - 1; i >= 0; i--) - { - if (!initCheckCand(fc, exprs[i])) + for (auto a : fc) + for (int i = exprs.size() - 1; i >= 0; i--) { - LAdisj lcs; - if (lf.exprToLAdisj(exprs[i], lcs)) lf.assignPrioritiesForFailed(lcs); - exprs.erase(exprs.begin()+i); + if (!initCheckCand(a, exprs[i])) + { + LAdisj lcs; + if (lf.exprToLAdisj(exprs[i], lcs)) lf.assignPrioritiesForFailed(lcs); + exprs.erase(exprs.begin()+i); + } } - } } // consecution - getIS(tr, exprs); + for (auto a : tr) getIS(a, exprs); // safety: int num = exprs.size(); @@ -182,18 +183,15 @@ namespace ufo if (newLemmaAdded == 0) return false; - if (checkSafetyAndReset()) return true; + for (auto a : qr) if (!checkSafetyAndReset(a)) return false; - return false; + return true; } bool synthesize(int maxAttempts, int batchSz, int scndChSz) { assert(lfs.size() == 1); // current limitation - HornRuleExt* tr; - HornRuleExt* fct; - for (auto & a : ruleManager.chcs) if (a.isInductive) tr = &a; else if (a.isFact) fct = &a; LAfactory& lf = lfs[0].back(); ExprVector candsBatch; @@ -226,21 +224,26 @@ namespace ufo iter++; - if (!initCheckCand(fct, cand)) - { - numFailInit++; - lf.assignPrioritiesForFailed(lf.samples.back()); - continue; - } + bool toskip = false; + for (auto a : fc) + if (!initCheckCand(a, cand)) + { + numFailInit++; + lf.assignPrioritiesForFailed(lf.samples.back()); + toskip = true; + break; + } + if (toskip) continue; candsBatch.push_back(cand); } - getIS(tr, candsBatch); // houdini + for (auto a : tr) getIS(a, candsBatch); // houdini if (candsBatch.size() == 0) continue; - success = checkSafetyAndReset(); + success = true; + for (auto a : qr) success = success && checkSafetyAndReset(a); if (success) break; // second chance candidates @@ -273,22 +276,23 @@ namespace ufo } }; - inline void learnInvariants2(string smt, char * outfile, int maxAttempts, int itp, int batch, int retry, bool aggp) + inline void learnInvariants2(string smt, char * outfile, int maxAttempts, + int itp, int batch, int retry, bool freqs, bool aggp) { ExprFactory m_efac; EZ3 z3(m_efac); CHCs ruleManager(m_efac, z3); ruleManager.parse(smt); - RndLearnerV2 ds(m_efac, z3, ruleManager, aggp); + RndLearnerV2 ds(m_efac, z3, ruleManager, freqs, aggp); + ds.categorizeCHCs(); - ds.setupSafetySolver(); std::srand(std::time(0)); if (ruleManager.decls.size() > 1) { outs() << "WARNING: learning multiple invariants is currently unsupported in --v2.\n" - << " Run --v1\n"; + << " Run --v1\n"; return; } @@ -308,6 +312,8 @@ namespace ufo } else { + for (auto& dcl: ruleManager.decls) ds.calculateStatistics(dcl->arg(0)); + success = ds.synthesize(maxAttempts, batch, retry); if (success) outs () << "Total number of learned lemmas: " << ds.getLearntLemmas(0).size() << "\n"; diff --git a/tools/deep/DeepHorn.cpp b/tools/deep/DeepHorn.cpp index a33d2f912..002ecf7cb 100644 --- a/tools/deep/DeepHorn.cpp +++ b/tools/deep/DeepHorn.cpp @@ -63,11 +63,11 @@ int main (int argc, char ** argv) " " << OPT_V1 << " original version (just one-by-one sampling)\n" " " << OPT_V2 << " (default) revised version (all-at once bootstrapping and sampling)\n\n" " " << OPT_MAX_ATTEMPTS << " maximal number of candidates to sample and check\n" << - " " << OPT_OUT_FILE << " serialize invariants to `file.smt2`\n\n" << + " " << OPT_OUT_FILE << " serialize invariants to `file.smt2`\n" << + " " << OPT_GET_FREQS << " calculate frequency distributions and sample from them\n\n" << "V1 options only:\n" << " " << OPT_ADD_EPSILON << " add small probabilities to features that never happen in the code\n" << " " << OPT_AGG_PRUNING << " prioritize and prune the search space aggressively\n" << - " " << OPT_GET_FREQS << " calculate frequency distributions and sample from them\n" << " (if not specified, sample from uniform distributions)\n" << " " << OPT_K_IND << " run k-induction after each learned lemma\n\n" << "V2 options only:\n" << @@ -101,7 +101,7 @@ int main (int argc, char ** argv) if (vers2) // run a revised algorithm learnInvariants2(string(argv[argc-1]), outfile, maxAttempts, - itp, batch, retry, aggressivepruning); + itp, batch, retry, densecode, aggressivepruning); else // run an old algorithm learnInvariants(string(argv[argc-1]), outfile, maxAttempts, kinduction, itp, densecode, addepsilon, aggressivepruning); From 0e6087f9f452680ded8980965613a4e5e7c9ab61 Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Fri, 3 Nov 2017 17:14:11 -0400 Subject: [PATCH 048/236] made the sampler design more modular and prepared for possible future extensions (e.g., arrays) --- bench_horn/dillig42-1.smt2 | 31 + bench_horn/dillig44-1.smt2 | 25 + bench_horn/s_triv_09.smt2 | 23 + bench_horn/s_triv_10.smt2 | 12 + bench_horn/s_triv_11.smt2 | 23 + bench_horn/s_triv_12.smt2 | 29 + bench_horn/s_triv_13.smt2 | 22 + bench_horn/s_triv_14.smt2 | 23 + bench_horn/s_triv_15.smt2 | 22 + bench_horn/s_triv_16.smt2 | 32 + bench_horn/s_triv_17.smt2 | 37 + bench_horn_cex/samples_triv_07_cex.smt2 | 23 + bench_horn_cex/samples_triv_08_cex.smt2 | 28 + bench_horn_cex/samples_triv_09_cex.smt2 | 22 + include/ae/ExprSimpl.hpp | 64 ++ include/deep/BndExpl.hpp | 16 +- include/deep/Distribution.hpp | 50 +- include/deep/Horn.hpp | 41 +- include/deep/RndLearner.hpp | 313 +++----- include/deep/RndLearnerV2.hpp | 152 ++-- include/sampl/BoolCom.hpp | 439 +++++++++++ include/{deep => sampl}/LinCom.hpp | 733 +++++++++--------- include/sampl/Sampl.hpp | 254 ++++++ .../CodeSampler.hpp => sampl/SeedMiner.hpp} | 85 +- tools/CMakeLists.txt | 2 - 25 files changed, 1805 insertions(+), 696 deletions(-) create mode 100644 bench_horn/dillig42-1.smt2 create mode 100644 bench_horn/dillig44-1.smt2 create mode 100755 bench_horn/s_triv_09.smt2 create mode 100755 bench_horn/s_triv_10.smt2 create mode 100755 bench_horn/s_triv_11.smt2 create mode 100644 bench_horn/s_triv_12.smt2 create mode 100755 bench_horn/s_triv_13.smt2 create mode 100755 bench_horn/s_triv_14.smt2 create mode 100755 bench_horn/s_triv_15.smt2 create mode 100644 bench_horn/s_triv_16.smt2 create mode 100644 bench_horn/s_triv_17.smt2 create mode 100755 bench_horn_cex/samples_triv_07_cex.smt2 create mode 100755 bench_horn_cex/samples_triv_08_cex.smt2 create mode 100755 bench_horn_cex/samples_triv_09_cex.smt2 mode change 100644 => 100755 include/deep/Horn.hpp create mode 100644 include/sampl/BoolCom.hpp rename include/{deep => sampl}/LinCom.hpp (77%) create mode 100644 include/sampl/Sampl.hpp rename include/{deep/CodeSampler.hpp => sampl/SeedMiner.hpp} (70%) diff --git a/bench_horn/dillig42-1.smt2 b/bench_horn/dillig42-1.smt2 new file mode 100644 index 000000000..0fa7badbf --- /dev/null +++ b/bench_horn/dillig42-1.smt2 @@ -0,0 +1,31 @@ +(declare-rel inv (Int Int Int Bool)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var y0 Int) +(declare-var y1 Int) +(declare-var y2 Int) +(declare-var n0 Int) +(declare-var n1 Int) +(declare-var flag Bool) + +(declare-rel fail ()) + +(rule (=> (and (= x1 1) (= y1 1) (= n0 (ite flag 0 1))) (inv x1 y1 n0 flag))) + +(rule (=> + (and + (inv x0 y0 n0 flag) + (= n1 (ite flag (+ x0 y0) (+ x0 y0 1))) + (= x1 (ite flag (+ x0 1) x0)) + (= y1 (ite flag y0 (+ y0 1))) + (= x2 (ite (= (mod n1 2) 1) x1 (+ x1 1))) + (= y2 (ite (= (mod n1 2) 1) (+ y1 1) y1)) + ) + (inv x2 y2 n1 flag) + ) +) + +(rule (=> (and (inv x1 y1 n0 flag) (= n1 (ite flag (+ n0 1) n0)) (not (= (mod n1 2) 1))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/dillig44-1.smt2 b/bench_horn/dillig44-1.smt2 new file mode 100644 index 000000000..af6f495e3 --- /dev/null +++ b/bench_horn/dillig44-1.smt2 @@ -0,0 +1,25 @@ +(declare-rel inv (Int Int Int Bool)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var y0 Int) +(declare-var y1 Int) +(declare-var n Int) +(declare-var flag Bool) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= y1 0) (= n (ite flag 1 2))) (inv x1 y1 n flag))) + +(rule (=> + (and + (inv x0 y0 n flag) + (= x1 (+ x0 1)) + (= y1 (+ y0 n)) + ) + (inv x1 y1 n flag) + ) +) + +(rule (=> (and (inv x1 y1 n flag) flag (not (= x1 y1))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/s_triv_09.smt2 b/bench_horn/s_triv_09.smt2 new file mode 100755 index 000000000..2ec67ff7e --- /dev/null +++ b/bench_horn/s_triv_09.smt2 @@ -0,0 +1,23 @@ +(declare-rel inv (Bool Bool)) +(declare-var x Bool) +(declare-var x1 Bool) +(declare-var y Bool) +(declare-var y1 Bool) + +(declare-rel fail ()) + +(rule (=> (= y (not x)) (inv x y))) + +(rule (=> + (and + (inv x y) + (= x1 (not x)) + (= y1 (not y)) + ) + (inv x1 y1) + ) +) + +(rule (=> (and (inv true y) y) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/s_triv_10.smt2 b/bench_horn/s_triv_10.smt2 new file mode 100755 index 000000000..d12e2fa1d --- /dev/null +++ b/bench_horn/s_triv_10.smt2 @@ -0,0 +1,12 @@ +(declare-rel inv (Bool)) +(declare-var x Bool) + +(declare-rel fail ()) + +(rule (inv false)) + +(rule (=> (inv x) (inv x))) + +(rule (=> (and (inv x) x) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/s_triv_11.smt2 b/bench_horn/s_triv_11.smt2 new file mode 100755 index 000000000..2f1caf72f --- /dev/null +++ b/bench_horn/s_triv_11.smt2 @@ -0,0 +1,23 @@ +(declare-rel inv (Bool Bool)) +(declare-var x Bool) +(declare-var x1 Bool) +(declare-var y Bool) +(declare-var y1 Bool) + +(declare-rel fail ()) + +(rule (=> (= y (not x)) (inv x y))) + +(rule (=> + (and + (inv x y) + (= x1 (not y)) + (= y1 (not x)) + ) + (inv x1 y1) + ) +) + +(rule (=> (and (inv x y) x y) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/s_triv_12.smt2 b/bench_horn/s_triv_12.smt2 new file mode 100644 index 000000000..fb587bc5e --- /dev/null +++ b/bench_horn/s_triv_12.smt2 @@ -0,0 +1,29 @@ +(declare-rel inv (Bool Bool Bool Bool)) +(declare-var x Bool) +(declare-var x1 Bool) +(declare-var y Bool) +(declare-var y1 Bool) +(declare-var z Bool) +(declare-var z1 Bool) +(declare-var v Bool) +(declare-var v1 Bool) + +(declare-rel fail ()) + +(rule (=> (and (= x (not y)) (= z (not v))) (inv x y z v))) + +(rule (=> + (and + (inv x y z v) + (= x1 (not x)) + (= y1 (not y)) + (= z1 (not z)) + (= v1 (not v)) + ) + (inv x1 y1 z1 v1) + ) +) + +(rule (=> (and (inv x y z v) (= y z) (not (= x v))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/s_triv_13.smt2 b/bench_horn/s_triv_13.smt2 new file mode 100755 index 000000000..859a4f19f --- /dev/null +++ b/bench_horn/s_triv_13.smt2 @@ -0,0 +1,22 @@ +(declare-rel inv (Bool Int)) +(declare-var x Bool) +(declare-var x1 Bool) +(declare-var y Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (=> (and x (= x (= y 0))) (inv x y))) + +(rule (=> + (and + (inv x y) + (= y1 (+ y 1)) + ) + (inv x1 y1) + ) +) + +(rule (=> (and (inv x y) (not (>= y 0))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/s_triv_14.smt2 b/bench_horn/s_triv_14.smt2 new file mode 100755 index 000000000..9d4ec8fd1 --- /dev/null +++ b/bench_horn/s_triv_14.smt2 @@ -0,0 +1,23 @@ +(declare-rel inv (Bool Int)) +(declare-var x Bool) +(declare-var x1 Bool) +(declare-var y Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (=> (= y 0) (inv x y))) + +(rule (=> + (and + (inv x y) + (= x1 (= (mod y 2) 0)) + (= y1 (ite x1 (+ y 2) (- y 1))) + ) + (inv x1 y1) + ) +) + +(rule (=> (and (inv x y) (= y 13621)) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/s_triv_15.smt2 b/bench_horn/s_triv_15.smt2 new file mode 100755 index 000000000..b3c9cc550 --- /dev/null +++ b/bench_horn/s_triv_15.smt2 @@ -0,0 +1,22 @@ +(declare-rel inv (Bool Int)) +(declare-var x Bool) +(declare-var x1 Bool) +(declare-var y Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= y 0) (= x (>= y 0))) (inv x y))) + +(rule (=> + (and + (inv x y) + (= y1 (- y 1)) + ) + (inv x y1) + ) +) + +(rule (=> (and (inv x y) (not x)) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/s_triv_16.smt2 b/bench_horn/s_triv_16.smt2 new file mode 100644 index 000000000..235ec2f84 --- /dev/null +++ b/bench_horn/s_triv_16.smt2 @@ -0,0 +1,32 @@ +(declare-rel inv (Bool Bool Bool Bool Int)) +(declare-var x Bool) +(declare-var x1 Bool) +(declare-var y Bool) +(declare-var y1 Bool) +(declare-var z Bool) +(declare-var z1 Bool) +(declare-var v Bool) +(declare-var v1 Bool) +(declare-var a Int) +(declare-var a1 Int) + +(declare-rel fail ()) + +(rule (inv x y z v 0)) + +(rule (=> + (and + (inv x y z v a) + (=> (= (mod a 4) 0) x1) + (=> (= (mod a 4) 1) y1) + (=> (= (mod a 4) 2) z1) + (=> (= (mod a 4) 3) v1) + (= a1 (+ a 1)) + ) + (inv x1 y1 z1 v1 a1) + ) +) + +(rule (=> (and (inv x y z v a) (> a 0) (not (or x y z v))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn/s_triv_17.smt2 b/bench_horn/s_triv_17.smt2 new file mode 100644 index 000000000..313a57408 --- /dev/null +++ b/bench_horn/s_triv_17.smt2 @@ -0,0 +1,37 @@ +(declare-rel inv (Bool Bool Bool Bool Int Int Int Int)) +(declare-var x Bool) +(declare-var x1 Bool) +(declare-var y Bool) +(declare-var y1 Bool) +(declare-var z Bool) +(declare-var z1 Bool) +(declare-var v Bool) +(declare-var v1 Bool) +(declare-var a Int) +(declare-var a1 Int) +(declare-var b Int) +(declare-var b1 Int) +(declare-var c Int) +(declare-var c1 Int) +(declare-var d Int) +(declare-var d1 Int) + +(declare-rel fail ()) + +(rule (inv x y z v 0 0 0 0)) + +(rule (=> + (and + (inv x y z v a b c d) + (or (and x1 (= a1 (+ a 1)) (= b1 b) (= c1 c) (= d1 d)) + (and y1 (= a1 a) (= b1 (+ b 1)) (= c1 c) (= d1 d)) + (and z1 (= a1 a) (= b1 b) (= c1 (+ c 1)) (= d1 d)) + (and v1 (= a1 a) (= b1 b) (= c1 c) (= d1 (+ d 1)))) + ) + (inv x1 y1 z1 v1 a1 b1 c1 d1) + ) +) + +(rule (=> (and (inv x y z v a b c d) (> (+ a b c d) 0) (not (or x y z v))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn_cex/samples_triv_07_cex.smt2 b/bench_horn_cex/samples_triv_07_cex.smt2 new file mode 100755 index 000000000..89899cba5 --- /dev/null +++ b/bench_horn_cex/samples_triv_07_cex.smt2 @@ -0,0 +1,23 @@ +(declare-rel inv (Bool Bool)) +(declare-var x Bool) +(declare-var x1 Bool) +(declare-var y Bool) +(declare-var y1 Bool) + +(declare-rel fail ()) + +(rule (=> (and (or (not y) x) (or x y)) (inv x y))) + +(rule (=> + (and + (inv x y) + (= x1 (not y)) + (= y1 (not x)) + ) + (inv x1 y1) + ) +) + +(rule (=> (and (inv x y) x) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn_cex/samples_triv_08_cex.smt2 b/bench_horn_cex/samples_triv_08_cex.smt2 new file mode 100755 index 000000000..613f0c8ce --- /dev/null +++ b/bench_horn_cex/samples_triv_08_cex.smt2 @@ -0,0 +1,28 @@ +(declare-rel inv (Bool Bool Bool Bool)) +(declare-var x Bool) +(declare-var x1 Bool) +(declare-var y Bool) +(declare-var y1 Bool) +(declare-var z Bool) +(declare-var z1 Bool) +(declare-var v Bool) +(declare-var v1 Bool) + +(declare-rel fail ()) + +(rule (=> (and (= x (not y)) (= z (not v))) (inv x y z v))) + +(rule (=> + (and + (inv x y z v) + (= x1 (not x)) + (= y1 (not y)) + (= v1 (not v)) + ) + (inv x1 y1 z1 v1) + ) +) + +(rule (=> (and (inv x y z v) (= y z) (not (= x v))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn_cex/samples_triv_09_cex.smt2 b/bench_horn_cex/samples_triv_09_cex.smt2 new file mode 100755 index 000000000..1c9603014 --- /dev/null +++ b/bench_horn_cex/samples_triv_09_cex.smt2 @@ -0,0 +1,22 @@ +(declare-rel inv (Bool Int)) +(declare-var x Bool) +(declare-var x1 Bool) +(declare-var y Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (=> (and x (= x (= y 0))) (inv x y))) + +(rule (=> + (and + (inv x y) + (= y1 (+ y 1)) + ) + (inv x1 y1) + ) +) + +(rule (=> (and (inv x y) (not (> y 0))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index 152e4bbe4..c111d0ecc 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -1141,6 +1141,18 @@ namespace ufo return conjoin (newer, exp->getFactory()); } + inline static Expr cloneVar(Expr var, Expr new_name) // ... and give a new_name to the clone + { + if (bind::isIntConst(var)) + return bind::intConst(new_name); + else if (bind::isRealConst(var)) + return bind::realConst(new_name); + else if (bind::isBoolConst(var)) + return bind::boolConst(new_name); + + else return NULL; + } + // not very pretty method, but.. inline static Expr reBuildCmp(Expr term, Expr lhs, Expr rhs) { @@ -1446,6 +1458,30 @@ namespace ufo return dagVisit (a, exp); } + struct NegAndRewriter + { + NegAndRewriter () {}; + + Expr operator() (Expr exp) + { + if (isOpX(exp) && isOpX(exp->arg(0))) + { + ExprSet cnjs; + getConj(exp->arg(0), cnjs); + ExprSet neggedCnjs; + for (auto & c : cnjs) neggedCnjs.insert(mkNeg(c)); + return disjoin(neggedCnjs, exp->getFactory()); + } + return exp; + } + }; + + inline static Expr rewriteNegAnd (Expr exp) + { + RW a(new NegAndRewriter()); + return dagVisit (a, exp); + } + // very simple check if tautology (SMT-based check is expensive) inline static bool isTautology(Expr term) { @@ -1781,6 +1817,28 @@ namespace ufo } }; + struct BoolEqRewriter + { + BoolEqRewriter () {}; + + Expr operator() (Expr exp) + { + if (isOpX(exp)) + { + Expr lhs = exp->left(); + Expr rhs = exp->right(); + if (bind::isBoolConst(lhs) || bind::isBoolConst(rhs) || + isOpX(lhs) || isOpX(rhs)) + { + return mk(mk(mkNeg(lhs), rhs), + mk(lhs, mkNeg(rhs))); + } + return exp; + } + return exp; + } + }; + struct CondRetriever : public std::unary_function { ExprSet& conds; @@ -1849,6 +1907,12 @@ namespace ufo } }; + inline Expr rewriteBoolEq (Expr exp) + { + RW tr(new BoolEqRewriter()); + return dagVisit (tr, exp); + } + inline void retrieveDeltas (Expr exp, ExprVector& srcVars, ExprVector& dstVars, ExprSet& deltas) { DeltaRetriever dr (srcVars, dstVars, deltas); diff --git a/include/deep/BndExpl.hpp b/include/deep/BndExpl.hpp index 3fecf0e4b..9c1fcc153 100644 --- a/include/deep/BndExpl.hpp +++ b/include/deep/BndExpl.hpp @@ -113,7 +113,7 @@ namespace ufo if (!kept) { Expr new_name = mkTerm ("__bnd_var_" + to_string(bindVar_index++), m_efac); - bindVars2.push_back(bind::intConst(new_name)); + bindVars2.push_back(cloneVar(hr.dstVars[i],new_name)); } body = replaceAll(body, hr.dstVars[i], bindVars2[i]); @@ -122,7 +122,7 @@ namespace ufo for (int i = 0; i < hr.locVars.size(); i++) { Expr new_name = mkTerm ("__loc_var_" + to_string(locVar_index++), m_efac); - Expr var = bind::intConst(new_name); + Expr var = cloneVar(hr.locVars[i], new_name); body = replaceAll(body, hr.locVars[i], var); } @@ -217,17 +217,7 @@ namespace ufo return res; } - Expr getInv(ExprVector& vars) - { - assert(inv != NULL); - - for (int i = 0; i < ruleManager.chcs[pr_ind].srcVars.size(); i++) - { - inv = replaceAll(inv, ruleManager.chcs[pr_ind].srcVars[i], vars[i]); - } - - return inv; - } + Expr getInv() { return inv; } Expr getBoundedItp(int k) { diff --git a/include/deep/Distribution.hpp b/include/deep/Distribution.hpp index 6b6b90a23..944e7f102 100644 --- a/include/deep/Distribution.hpp +++ b/include/deep/Distribution.hpp @@ -97,7 +97,16 @@ namespace ufo } return true; } - + + inline static bool isEmpty(density& d) + { + for (int i = 0; i < d.size(); i++) + { + if (d[i] > 0) return false; + } + return true; + } + inline static void printDistr(weights& distr, string msg) { if (msg != "" ) outs () << msg << ": "; @@ -108,7 +117,44 @@ namespace ufo } outs () << "]\n"; } + + static inline void getCombinations(vector& data, int start, int rem, vector< set >& res) + { + if (start >= data.size()) return; + if (rem > data.size() - start) return; + + if (rem == 1) + { + for (int i = start; i < data.size(); i++) + { + set res0; + res0.insert(data[i]); + res.push_back(res0); + } + } + else + { + // if include data[start] + vector< set> res1; + getCombinations(data, start + 1, rem - 1, res1); + + for (int i = 0; i < res1.size(); i++) + { + res1[i].insert(data[start]); + res.push_back(res1[i]); + } + + // if skip data[start] + vector< set> res2; + getCombinations(data, start + 1, rem, res2); + + for (int i = 0; i < res2.size(); i++) + { + res.push_back(res2[i]); + } + } + } } -#endif \ No newline at end of file +#endif diff --git a/include/deep/Horn.hpp b/include/deep/Horn.hpp old mode 100644 new mode 100755 index 88b098629..f0f186acc --- a/include/deep/Horn.hpp +++ b/include/deep/Horn.hpp @@ -15,6 +15,16 @@ namespace ufo body = mk(body, mk(v1, v2)); return true; } + else if (isOpX(v1)) + { + body = mk(body, v2); + return true; + } + else if (isOpX(v1)) + { + body = mk(body, mk(v2)); + return true; + } //else.. TODO: simplifications like "1 + 2" and support for other sorts like Reals and Bools return false; } @@ -64,7 +74,7 @@ namespace ufo { // primed copy of var: Expr new_name = mkTerm (lexical_cast(invVarsDst[i]) + "__", body->getFactory()); - Expr var = bind::intConst(new_name); + Expr var = cloneVar(invVarsDst[i], new_name); dstVars.push_back(var); // find constants @@ -109,6 +119,10 @@ namespace ufo } else { + if (bind::isBoolConst(term)) + { + lin.push_back(term); + } if (isOpX(term)) { if (term->arity() > 0) @@ -157,7 +171,14 @@ namespace ufo for (int i = 1; i < a->arity()-1; i++) { Expr new_name = mkTerm ("__v__" + to_string(i - 1), m_efac); - Expr var = bind::intConst(new_name); + Expr var; + if (isOpX (a->arg(i))) + var = bind::intConst(new_name); + else if (isOpX (a->arg(i))) + var = bind::realConst(new_name); + else if (isOpX (a->arg(i))) + var = bind::boolConst(new_name); + invVars[a->arg(0)].push_back(var); } } @@ -207,9 +228,9 @@ namespace ufo hr.head = head->arg(0); hr.dstRelation = head->arg(0)->arg(0); - ExprVector origSrcVars; + ExprVector origSrcSymbs; ExprVector lin; - preprocess(body, origSrcVars, fp.m_rels, hr.srcRelation, lin); + preprocess(body, origSrcSymbs, fp.m_rels, hr.srcRelation, lin); hr.isFact = isOpX(hr.srcRelation); hr.isQuery = (hr.dstRelation == failDecl); @@ -217,27 +238,27 @@ namespace ufo hr.body = conjoin(lin, m_efac); outgs[hr.srcRelation].push_back(chcs.size()-1); - ExprVector origDstVars; + ExprVector origDstSymbs; if (!hr.isQuery) { for (auto it = head->args_begin()+1, end = head->args_end(); it != end; ++it) - origDstVars.push_back(*it); + origDstSymbs.push_back(*it); } - hr.assignVarsAndRewrite (origSrcVars, invVars[hr.srcRelation], - origDstVars, invVars[hr.dstRelation]); + hr.assignVarsAndRewrite (origSrcSymbs, invVars[hr.srcRelation], + origDstSymbs, invVars[hr.dstRelation]); for (auto &a: args) { bool found = false; - for (auto &b : origDstVars) + for (auto &b : origDstSymbs) { if (a == b) found = true; } if (! found) { - for (auto &b : origSrcVars) + for (auto &b : origSrcSymbs) { if (a == b) found = true; } diff --git a/include/deep/RndLearner.hpp b/include/deep/RndLearner.hpp index a4b281bd0..1b6901343 100644 --- a/include/deep/RndLearner.hpp +++ b/include/deep/RndLearner.hpp @@ -2,11 +2,11 @@ #define RNDLEARNER__HPP__ #include "Horn.hpp" -#include "CodeSampler.hpp" -#include "Distribution.hpp" -#include "LinCom.hpp" #include "BndExpl.hpp" #include "ae/SMTUtils.hpp" +#include "sampl/SeedMiner.hpp" +#include "sampl/Sampl.hpp" + #include #include @@ -27,9 +27,11 @@ namespace ufo CHCs& ruleManager; vector decls; - vector> lfs; - vector lcss; + vector> sfs; vector curCandidates; + + vector> invarVars; + int invNumber; int numOfSMTChecks; @@ -63,9 +65,12 @@ namespace ufo { ExprSet avars; expr::filter (a, bind::IsConst(), std::inserter (avars, avars.begin ())); + if (avars.size() == 0) continue; varComb[avars].insert(mkNeg(a)); } - + + if (varComb.size() == 0) return false; + m_smt_solver.reset(); bool res = false; @@ -101,31 +106,30 @@ namespace ufo if (!isOpX(hr.srcRelation)) { ind1 = getVarIndex(hr.srcRelation, decls); - LAfactory& lf1 = lfs[ind1].back(); + SamplFactory& sf1 = sfs[ind1].back(); cand1 = curCandidates[ind1]; - for (int i = 0; i < hr.srcVars.size(); i++) + for (auto & v : invarVars[ind1]) { - cand1 = replaceAll(cand1, lf1.getVarE(i), hr.srcVars[i]); + cand1 = replaceAll(cand1, v.second, hr.srcVars[v.first]); } m_smt_solver.assertExpr(cand1); - lmApp = conjoin(lf1.learntExprs, m_efac); - for (int i = 0; i < hr.srcVars.size(); i++) + lmApp = sf1.getAllLemmas(); + for (auto & v : invarVars[ind1]) { - lmApp = replaceAll(lmApp, lf1.getVarE(i), hr.srcVars[i]); + lmApp = replaceAll(lmApp, v.second, hr.srcVars[v.first]); } m_smt_solver.assertExpr(lmApp); } // pushing dst relation cand2 = curCandidates[ind2]; - LAfactory& lf2 = lfs[ind2].back(); - - for (int i = 0; i < hr.dstVars.size(); i++) + + for (auto & v : invarVars[ind2]) { - cand2 = replaceAll(cand2, lf2.getVarE(i), hr.dstVars[i]); + cand2 = replaceAll(cand2, v.second, hr.dstVars[v.first]); } m_smt_solver.assertExpr(mk(cand2)); @@ -148,9 +152,9 @@ namespace ufo { for (int i = 0; i < invNumber; i++) { - LAfactory& lf = lfs[i].back(); - if (isOpX(curCandidates[i])) lf.assignPrioritiesForFailed(lf.samples.back()); - else lf.assignPrioritiesForLearnt(lf.samples.back()); + SamplFactory& sf = sfs[i].back(); + if (isOpX(curCandidates[i])) sf.assignPrioritiesForFailed(); + else sf.assignPrioritiesForLearned(); } } @@ -159,7 +163,7 @@ namespace ufo for (int i = 0; i < invNumber; i++) { Expr cand = curCandidates[i]; - LAfactory& lf = lfs[i].back(); + SamplFactory& sf = sfs[i].back(); if (isOpX(cand)) { if (printLog) outs () << " => bad candidate for " << *decls[i] << "\n"; @@ -170,41 +174,36 @@ namespace ufo if (doRedundancyOptim) { - Expr allLemmas = conjoin(lf.learntExprs, m_efac); + Expr allLemmas = sf.getAllLemmas(); if (u.isImplies(allLemmas, cand)) { curCandidates[i] = mk(m_efac); } else { - lf.learntLemmas.push_back(lf.samples.size() - 1); - lf.learntExprs.insert(cand); + sf.learnedExprs.insert(cand); } } } } } - void resetLearntLemmas() + void resetlearnedLemmas() { - for (auto & lf : lfs) - { - lf.back().learntExprs.clear(); - lf.back().learntLemmas.clear(); - } + for (auto & sf : sfs) sf.back().learnedExprs.clear(); } bool checkWithKInduction() { if (ruleManager.chcs.size() != 3) return false; // current limitation - if (lfs.size() != 1) return false; // current limitation + if (sfs.size() != 1) return false; // current limitation if (kind_succeeded) return false; Expr cand = curCandidates[0]; if (isOpX(cand)) return false; - LAfactory& lf = lfs[0].back(); - Expr allLemmas = conjoin(lf.learntExprs, m_efac); + SamplFactory& sf = sfs[0].back(); + Expr allLemmas = sf.getAllLemmas(); // get lemmas to be included to inductive rule for (int i = 0; i < ruleManager.chcs.size(); i++) @@ -212,9 +211,9 @@ namespace ufo auto & hr = ruleManager.chcs[i]; if (!hr.isInductive) continue; - for (int i = 0; i < hr.srcVars.size(); i++) + for (auto & v : invarVars[0]) { - allLemmas = replaceAll(allLemmas, lf.getVarE(i), hr.srcVars[i]); + allLemmas = replaceAll(allLemmas, v.second, hr.srcVars[v.first]); } } @@ -234,9 +233,9 @@ namespace ufo oneInductiveProof = (i == 2); if (oneInductiveProof) // can complete the invariant only when the proof is 1-inductive { - curCandidates[0] = bnd.getInv(lf.getVars()); + curCandidates[0] = bnd.getInv(); bool addedRemainingLemma = checkCandidates() && checkSafety(); - if (addedRemainingLemma) lf.learntExprs.insert(curCandidates[0]); // for serialization only + if (addedRemainingLemma) sf.learnedExprs.insert(curCandidates[0]); // for serialization only if (printLog) outs () << "remaining lemma(s): " << *curCandidates[0] << "\nsanity check: " << addedRemainingLemma << "\n"; @@ -329,11 +328,9 @@ namespace ufo Expr invApp = curCandidates[ind]; if (safety_progress[num-1] == true) continue; - LAfactory& lf = lfs[ind].back(); - - for (int i = 0; i < hr.srcVars.size(); i++) + for (auto & v : invarVars[ind]) { - invApp = replaceAll(invApp, lf.getVarE(i), hr.srcVars[i]); + invApp = replaceAll(invApp, v.second, hr.srcVars[v.first]); } m_smt_safety_solvers[num-1].assertExpr(invApp); @@ -388,19 +385,20 @@ namespace ufo for (int ind = 0; ind < invNumber; ind++) { Expr cand = curCandidates[ind]; - LAfactory& lf = lfs[ind].back(); + SamplFactory& sf = sfs[ind].back(); if (!isOpX(cand)) { for (auto &hr : ruleManager.chcs) { - if ( hr.srcRelation == decls[ind] && + if (hr.srcRelation == decls[ind] && hr.dstRelation != decls[ind] && !hr.isQuery) { Expr lemma2add = curCandidates[ind]; - for (int i = 0; i < hr.srcVars.size(); i++) + + for (auto & v : invarVars[ind]) { - lemma2add = replaceAll(lemma2add, lf.getVarE(i), hr.srcVars[i]); + lemma2add = replaceAll(lemma2add, v.second, hr.srcVars[v.first]); } numOfSMTChecks++; @@ -416,28 +414,24 @@ namespace ufo for(auto ind : rels2update) { - vector& lf = lfs[ind]; - lf.push_back(LAfactory (m_efac, aggressivepruning)); - LAfactory& lf_before = lf[lf.size()-2]; - LAfactory& lf_after = lf.back(); + vector& sf = sfs[ind]; + sf.push_back(SamplFactory (m_efac, aggressivepruning)); + + SamplFactory& sf_before = sf[sf.size()-2]; + SamplFactory& sf_after = sf.back(); - for (auto & var : ruleManager.invVars[decls[ind]]) lf_after.addVar(var); - lf_after.nonlinVars = lf_before.nonlinVars; + for (auto & var : invarVars[ind]) sf_after.addVar(var.second); + sf_after.lf.nonlinVars = sf_before.lf.nonlinVars; ExprSet stub; - doCodeSampling(decls[ind], stub); - calculateStatistics(decls[ind]); + doSeedMining(decls[ind], stub); - for (auto a : lf_before.learntExprs) + sf_after.calculateStatistics(densecode, addepsilon); + for (auto a : sf_before.learnedExprs) { - lf_after.learntExprs.insert(a); - lf_after.samples.push_back(LAdisj()); - LAdisj& lcs = lf_after.samples.back(); - if (lf_after.exprToLAdisj(a, lcs)) - { - lf_after.assignPrioritiesForLearnt(lcs); - lf_after.learntLemmas.push_back (lf_after.samples.size() - 1); - } + sf_after.learnedExprs.insert(a); + sf_after.exprToSampl(a); + sf_after.assignPrioritiesForLearned(); } } } @@ -446,37 +440,46 @@ namespace ufo { assert (invDecl->arity() > 2); assert(decls.size() == invNumber); - assert(lfs.size() == invNumber); + assert(sfs.size() == invNumber); assert(curCandidates.size() == invNumber); decls.push_back(invDecl->arg(0)); + invarVars.push_back(map()); + curCandidates.push_back(NULL); - - lfs.push_back(vector ()); - lfs.back().push_back(LAfactory (m_efac, aggressivepruning)); - LAfactory& lf = lfs.back().back(); - + + sfs.push_back(vector ()); + sfs.back().push_back(SamplFactory (m_efac, aggressivepruning)); + SamplFactory& sf = sfs.back().back(); + + for (int i = 0; i < ruleManager.invVars[decls.back()].size(); i++) + { + Expr var = ruleManager.invVars[decls.back()][i]; + if (sf.addVar(var)) invarVars[invNumber][i] = var; + } + invNumber++; - - for (auto & var : ruleManager.invVars[decls.back()]) lf.addVar(var); } - void doCodeSampling(Expr invRel, ExprSet& cands) + void doSeedMining(Expr invRel, ExprSet& cands) { - vector css; + vector css; set progConstsTmp; set progConsts; set intCoefs; int ind = getVarIndex(invRel, decls); - LAfactory& lf = lfs[ind].back(); + SamplFactory& sf = sfs[ind].back(); + + // init boolean combinations quickly + sf.bf.initialize(); // analize each rule separately: for (auto &hr : ruleManager.chcs) { if (hr.dstRelation != invRel && hr.srcRelation != invRel) continue; - css.push_back(CodeSampler(hr, invRel, lf.getVars(), lf.nonlinVars)); + css.push_back(SeedMiner(hr, invRel, invarVars[ind], sf.lf.nonlinVars)); css.back().analyzeCode(); if (hr.isInductive) css.back().analyzeExtras(cands); @@ -492,20 +495,22 @@ namespace ufo for (auto &a : css.back().intCoefs) intCoefs.insert(a); } - if (lf.nonlinVars.size() > 0) + cands.clear(); + + if (sf.lf.nonlinVars.size() > 0) { if (printLog) outs() << "Multed vars: "; - for (auto &a : lf.nonlinVars) + for (auto &a : sf.lf.nonlinVars) { if (printLog) outs() << *a.first << " = " << *a.second << "\n"; - lf.addVar(a.second); + sf.lf.addVar(a.second); Expr b = a.first->right(); if (isNumericConst(b)) intCoefs.insert(lexical_cast(b)); } } for (auto &a : intCoefs) intCoefs.insert(-a); - for (auto &a : intCoefs) if (a != 0) lf.addIntCoef(a); + for (auto &a : intCoefs) if (a != 0) sf.lf.addIntCoef(a); for (auto &a : intCoefs) { @@ -527,10 +532,10 @@ namespace ufo } } progConsts.erase(min); - lf.addConst(min); + sf.lf.addConst(min); } - lf.initialize(); + sf.lf.initialize(); ExprSet allCands; for (auto &cs : css) @@ -544,137 +549,26 @@ namespace ufo // normalize samples obtained from CHCs for (auto & cand : allCands) { - lcss.push_back(LAdisj()); - LAdisj& lcs = lcss.back(); - if (lf.exprToLAdisj(cand, lcs)) + Sampl& s = sf.exprToSampl(cand); + if (s.arity() > 0) { - lcs.normalizePlus(); - cands.insert(lf.toExpr(lcs)); // do it here because cand may contain artif. vars - } - else - { - lcss.pop_back(); + cands.insert(sf.sampleToExpr(s)); } } } - void calculateStatistics(Expr invRel) + void calculateStatistics() { - int ind = getVarIndex(invRel, decls); - LAfactory& lf = lfs[ind].back(); - - set orArities; - - for (auto &lcs : lcss) - { - orArities.insert(lcs.arity); - } - - if (orArities.size() == 0) // default, if no samples were obtained from the code - { - for (int i = 1; i <= DEFAULTARITY; i++) orArities.insert(i); - } - - lf.initDensities(orArities); - if (densecode) + for (int i = 0; i < invNumber; i++) { - // collect number of occurrences.... + sfs[i].back().calculateStatistics(densecode, addepsilon); - for (auto &lcs : lcss) - { - int ar = lcs.arity; - - // of arities of application of OR - lf.orAritiesDensity[ar] ++; - - for (auto & lc : lcs.dstate) - { - // of arities of application of PLUS - lf.plusAritiesDensity[ar][lc.arity] ++; - - // of constants - lf.intConstDensity[ar][lc.intconst] ++; - - // of comparison operations - lf.cmpOpDensity[ar][lc.cmpop] ++; - - set vars; - int vars_id = -1; - for (int j = 0; j < lc.vcs.size(); j = j+2) vars.insert(lc.vcs[j]); - for (int j = 0; j < lf.varCombinations[lc.arity].size(); j++) - { - if (lf.varCombinations[lc.arity][j] == vars) - { - vars_id = j; - break; - } - } - assert(vars_id >= 0); - - // of variable combinations - lf.varDensity[ar][lc.arity][vars_id] ++; - - // of variable coefficients - for (int j = 1; j < lc.vcs.size(); j = j+2) - { - lf.coefDensity[ ar ][ lc.vcs [j-1] ] [lc.vcs [j] ] ++; - } - } - } - } - else - { - // same thing as in above; but instead of precise frequencies, we gather a rough presence - for (auto &lcs : lcss) + if (printLog) { - int ar = lcs.arity; - - // of arities of application of OR - lf.orAritiesDensity[ar] = 1; - - for (auto & lc : lcs.dstate) - { - // of arities of application of PLUS - lf.plusAritiesDensity[ar][lc.arity] = 1; - - // of constants - lf.intConstDensity[ar][lc.intconst] = 1; - - // of comparison operations - lf.cmpOpDensity[ar][lc.cmpop] = 1; - - set vars; - int vars_id = -1; - for (int j = 0; j < lc.vcs.size(); j = j+2) vars.insert(lc.vcs[j]); - for (int j = 0; j < lf.varCombinations[lc.arity].size(); j++) - { - if (lf.varCombinations[lc.arity][j] == vars) - { - vars_id = j; - break; - } - } - assert(vars_id >= 0); - - // of variable combinations - lf.varDensity[ar][lc.arity][vars_id] = 1; - - // of variable coefficients - for (int j = 1; j < lc.vcs.size(); j = j+2) - { - lf.coefDensity[ ar ][ lc.vcs [j-1] ] [lc.vcs [j] ] = 1; - } - } + outs() << "\nStatistics for " << *decls[i] << "\n"; + sfs[i].back().printStatistics(); } } - - lf.stabilizeDensities(orArities, addepsilon, densecode); - - if (printLog) - { - outs() << "\nStatistics for " << *invRel << ":\n"; - lf.printCodeStatistics(orArities); - } } void synthesize(int maxAttempts, char * outfile, ExprSet& itpCands) @@ -690,8 +584,8 @@ namespace ufo for (int j = 0; j < invNumber; j++) { if (curCandidates[j] != NULL) continue; // if the current candidate is good enough - LAfactory& lf = lfs[j].back(); - Expr cand = lf.getFreshCandidate(); + SamplFactory& sf = sfs[j].back(); + Expr cand = sf.getFreshCandidate(); if (cand == NULL) { skip = true; @@ -700,14 +594,14 @@ namespace ufo if (isTautology(cand)) // keep searching { - lf.assignPrioritiesForLearnt(lf.samples.back()); + sf.assignPrioritiesForLearned(); skip = true; break; } - if (lf.nonlinVars.size() > 0 && !u.isSat(cand)) // keep searching + if (sf.lf.nonlinVars.size() > 0 && !u.isSat(cand)) // keep searching { - lf.assignPrioritiesForFailed(lf.samples.back()); + sf.assignPrioritiesForFailed(); skip = true; break; } @@ -753,14 +647,14 @@ namespace ufo for (int j = 0; j < invNumber; j++) outs () << " number of sampled lemmas for " << *decls[j] << ": " - << lfs[j].back().learntExprs.size() << "\n"; + << sfs[j].back().learnedExprs.size() << "\n"; outs () << " number of SMT checks: " << numOfSMTChecks << "\n"; if (success && outfile != NULL) { vector invs; - for (auto & lf : lfs) invs.push_back(lf.back().learntExprs); + for (auto & sf : sfs) invs.push_back(sf.back().learnedExprs); serializeInvariants(invs, outfile); } } @@ -769,7 +663,7 @@ namespace ufo { numTries++; resetSafetySolver(); - resetLearntLemmas(); + resetlearnedLemmas(); for (int i = 0; i < invNumber; i++) curCandidates[i] = conjoin(lms[i], m_efac); if (checkCandidates() && checkSafety()) @@ -818,10 +712,11 @@ namespace ufo for (auto& dcl: ruleManager.decls) { ds.initializeDecl(dcl); - ds.doCodeSampling(dcl->arg(0), stub); - ds.calculateStatistics(dcl->arg(0)); + ds.doSeedMining(dcl->arg(0), stub); } + ds.calculateStatistics(); + ds.synthesize(maxAttempts, outfile, itpCands); }; diff --git a/include/deep/RndLearnerV2.hpp b/include/deep/RndLearnerV2.hpp index 9ac2b8f85..db5fa0b5e 100644 --- a/include/deep/RndLearnerV2.hpp +++ b/include/deep/RndLearnerV2.hpp @@ -1,15 +1,7 @@ #ifndef RNDLEARNERV2__HPP__ #define RNDLEARNERV2__HPP__ -#include "Horn.hpp" -#include "CodeSampler.hpp" -#include "Distribution.hpp" -#include "LinCom.hpp" -#include "BndExpl.hpp" #include "RndLearner.hpp" -#include "ae/SMTUtils.hpp" -#include -#include using namespace std; using namespace boost; @@ -25,6 +17,10 @@ namespace ufo vector fc; vector qr; + ExprSet deferredLearned; + ExprSet deferredFailed; + ExprSet deferredBlocked; + public: RndLearnerV2 (ExprFactory &efac, EZ3 &z3, CHCs& r, bool freqs, bool aggp) : @@ -45,9 +41,9 @@ namespace ufo return conjoin (eqs, m_efac); } - ExprSet& getLearntLemmas(int num) + ExprSet& getlearnedLemmas(int num) { - return lfs[num].back().learntExprs; + return sfs[num].back().learnedExprs; } void categorizeCHCs() @@ -58,20 +54,25 @@ namespace ufo else if (a.isQuery) qr.push_back(&a); } - int redundancyCheck (ExprVector& lemmas) + int redundancyCheck (ExprVector& lemmas, bool deferPriorities) { int num = 0; - LAfactory& lf = lfs[0].back(); - Expr allLemmas = conjoin(lf.learntExprs, m_efac); + SamplFactory& sf = sfs[0].back(); for (auto & l : lemmas) { - LAdisj lcs; - if (lf.exprToLAdisj(l, lcs)) lf.assignPrioritiesForLearnt(lcs); - + if (deferPriorities) + { + deferredLearned.insert(l); + } + else + { + Sampl& s = sf.exprToSampl(l); + if (!s.empty()) sf.assignPrioritiesForLearned(); + } numOfSMTChecks++; - if (!u.isImplies(allLemmas, l)) + if (!u.isImplies(sf.getAllLemmas(), l)) { - lf.learntExprs.insert(l); + sf.learnedExprs.insert(l); num++; } } @@ -84,12 +85,12 @@ namespace ufo m_smt_solver.assertExpr (qu->body); int ind = getVarIndex(qu->srcRelation, decls); - LAfactory& lf = lfs[ind].back(); + SamplFactory& sf = sfs[ind].back(); - Expr lmApp = conjoin(lf.learntExprs, m_efac); + Expr lmApp = sf.getAllLemmas(); for (int i = 0; i < qu->srcVars.size(); i++) { - lmApp = replaceAll(lmApp, lf.getVarE(i), qu->srcVars[i]); + lmApp = replaceAll(lmApp, invarVars[ind][i], qu->srcVars[i]); } m_smt_solver.assertExpr(lmApp); @@ -97,10 +98,10 @@ namespace ufo return !m_smt_solver.solve (); } - void getIS(HornRuleExt* hr, ExprVector& candSet) + void getIS(HornRuleExt* hr, ExprVector& candSet, bool deferPriorities) { if (candSet.size() == 0) return; - LAfactory& lf = lfs[0].back(); + SamplFactory& sf = sfs[0].back(); Expr cands = conjoin (candSet, m_efac); @@ -116,8 +117,7 @@ namespace ufo m_smt_solver.reset(); m_smt_solver.assertExpr (hr->body); m_smt_solver.assertExpr (cands); - for (auto & a : lf.learntExprs) m_smt_solver.assertExpr (a); - + m_smt_solver.assertExpr (sf.getAllLemmas()); m_smt_solver.assertExpr (mk(candPrime)); numOfSMTChecks++; @@ -125,13 +125,20 @@ namespace ufo { modelsOfFailures[getModel(hr->srcVars)].insert(candSet[i]); - // GF: to debug (esp. nonlin opers): - LAdisj lcs; - if (lf.exprToLAdisj(candSet[i], lcs)) lf.assignPrioritiesForGarbage(lcs); + if (deferPriorities) + { + deferredBlocked.insert(candSet[i]); + } + else + { + // GF: to debug (esp. nonlin opers) + Sampl& s = sf.exprToSampl(candSet[i]); + sf.assignPrioritiesForBlocked(); + } candSet.erase(candSet.begin() + i); - getIS(hr, candSet); + getIS(hr, candSet, deferPriorities); return; } } @@ -143,7 +150,9 @@ namespace ufo Expr candPrime = cand; for (int j = 0; j < fc->dstVars.size(); j++) - candPrime = replaceAll(candPrime, lfs[0].back().getVarE(j), fc->dstVars[j]); + { + candPrime = replaceAll(candPrime, invarVars[0][j], fc->dstVars[j]); + } m_smt_solver.reset(); m_smt_solver.assertExpr (fc->body); @@ -153,9 +162,9 @@ namespace ufo return (!m_smt_solver.solve ()); } - bool houdini (ExprSet& cands, bool skipInit=false, bool print=false) + bool houdini (ExprSet& cands, bool deferPriorities, bool skipInit) { - LAfactory& lf = lfs[0].back(); + SamplFactory& sf = sfs[0].back(); ExprVector exprs; for (auto & a : cands) exprs.push_back(a); @@ -163,23 +172,32 @@ namespace ufo if (!skipInit) { for (auto a : fc) + { for (int i = exprs.size() - 1; i >= 0; i--) { if (!initCheckCand(a, exprs[i])) { - LAdisj lcs; - if (lf.exprToLAdisj(exprs[i], lcs)) lf.assignPrioritiesForFailed(lcs); + if (deferPriorities) + { + deferredFailed.insert(exprs[i]); + } + else + { + Sampl& s = sf.exprToSampl(exprs[i]); + if (!s.empty()) sf.assignPrioritiesForFailed(); + } exprs.erase(exprs.begin()+i); } } + } } // consecution - for (auto a : tr) getIS(a, exprs); + for (auto a : tr) getIS(a, exprs, deferPriorities); // safety: int num = exprs.size(); - int newLemmaAdded = redundancyCheck(exprs); + int newLemmaAdded = redundancyCheck(exprs, deferPriorities); if (newLemmaAdded == 0) return false; @@ -188,11 +206,32 @@ namespace ufo return true; } + void prioritiesDeferred() + { + SamplFactory& sf = sfs[0].back(); + + for (auto & a : deferredLearned) + { + Sampl& s = sf.exprToSampl(a); + sf.assignPrioritiesForLearned(); + } + for (auto & a : deferredFailed) + { + Sampl& s = sf.exprToSampl(a); + sf.assignPrioritiesForFailed(); + } + for (auto & a : deferredBlocked) + { + Sampl& s = sf.exprToSampl(a); + sf.assignPrioritiesForBlocked(); + } + } + bool synthesize(int maxAttempts, int batchSz, int scndChSz) { - assert(lfs.size() == 1); // current limitation + assert(sfs.size() == 1); // current limitation - LAfactory& lf = lfs[0].back(); + SamplFactory& sf = sfs[0].back(); ExprVector candsBatch; @@ -205,20 +244,22 @@ namespace ufo { candsBatch.clear(); + if (printLog) outs() << "\n ---- new iteration " << iter << " ----\n"; + while (candsBatch.size() < batchSz) { - Expr cand = lf.getFreshCandidate(); + Expr cand = sf.getFreshCandidate(); if (cand == NULL) continue; if (isTautology(cand)) // keep searching { - lf.assignPrioritiesForLearnt(lf.samples.back()); + sf.assignPrioritiesForLearned(); continue; } - if (lf.nonlinVars.size() > 0 && !u.isSat(cand)) // keep searching + if (sf.lf.nonlinVars.size() > 0 && !u.isSat(cand)) // keep searching { - lf.assignPrioritiesForFailed(lf.samples.back()); + sf.assignPrioritiesForFailed(); continue; } @@ -226,19 +267,23 @@ namespace ufo bool toskip = false; for (auto a : fc) + { if (!initCheckCand(a, cand)) { numFailInit++; - lf.assignPrioritiesForFailed(lf.samples.back()); + sf.assignPrioritiesForFailed(); toskip = true; break; } + } if (toskip) continue; + if (printLog) outs () << " candidate for " << *decls[0] << ": " << *cand << "\n"; + candsBatch.push_back(cand); } - for (auto a : tr) getIS(a, candsBatch); // houdini + for (auto a : tr) getIS(a, candsBatch, false); // houdini if (candsBatch.size() == 0) continue; @@ -247,7 +292,7 @@ namespace ufo if (success) break; // second chance candidates - triggerSecondChance += redundancyCheck(candsBatch); + triggerSecondChance += redundancyCheck(candsBatch, false); if (triggerSecondChance < scndChSz) continue; triggerSecondChance = 0; @@ -257,7 +302,7 @@ namespace ufo { m_smt_solver.reset(); m_smt_solver.assertExpr (it->first); - for (auto & a : lfs[0].back().learntExprs) m_smt_solver.assertExpr (a); + m_smt_solver.assertExpr (sf.getAllLemmas()); numOfSMTChecks++; if (!m_smt_solver.solve ()) // CE violated @@ -268,7 +313,7 @@ namespace ufo else ++it; } - if (secondChanceCands.size() > 0) success = houdini(secondChanceCands, true, true); + if (secondChanceCands.size() > 0) success = houdini(secondChanceCands, false, true); if (success) break; } @@ -302,20 +347,21 @@ namespace ufo if (itp > 0) ds.bootstrapBoundedProofs(itp, cands); - for (auto& dcl: ruleManager.decls) ds.doCodeSampling (dcl->arg(0), cands); + for (auto& dcl: ruleManager.decls) ds.doSeedMining (dcl->arg(0), cands); - bool success = ds.houdini(cands); - outs () << "Number of bootstrapped lemmas: " << ds.getLearntLemmas(0).size() << "\n"; + bool success = ds.houdini(cands, true, false); + outs () << "Number of bootstrapped lemmas: " << ds.getlearnedLemmas(0).size() << "\n"; if (success) { outs () << "Success after the bootstrapping\n"; } else { - for (auto& dcl: ruleManager.decls) ds.calculateStatistics(dcl->arg(0)); + ds.calculateStatistics(); + ds.prioritiesDeferred(); success = ds.synthesize(maxAttempts, batch, retry); - if (success) outs () << "Total number of learned lemmas: " << ds.getLearntLemmas(0).size() << "\n"; + if (success) outs () << "Total number of learned lemmas: " << ds.getlearnedLemmas(0).size() << "\n"; if (success) outs () << "\nSuccess after the sampling\n"; else outs () << "\nNo success after " << maxAttempts << " iterations\n"; @@ -324,7 +370,7 @@ namespace ufo if (success && outfile != NULL) { vector invs; - invs.push_back(ds.getLearntLemmas(0)); + invs.push_back(ds.getlearnedLemmas(0)); ds.serializeInvariants(invs, outfile); } } diff --git a/include/sampl/BoolCom.hpp b/include/sampl/BoolCom.hpp new file mode 100644 index 000000000..e55a5c215 --- /dev/null +++ b/include/sampl/BoolCom.hpp @@ -0,0 +1,439 @@ +#ifndef BOOLCOM__HPP__ +#define BOOLCOM__HPP__ + +#include "deep/Distribution.hpp" +#include "ae/ExprSimpl.hpp" + +using namespace std; +using namespace boost; + +namespace ufo +{ + + // adapted and restricted LinCom.hpp for Booleans (to be extended) + + typedef vector boolcoms; + + struct Bterm + { + bool neg; + int var; + }; + + inline bool operator== (const Bterm& a, const Bterm& b) + { + if (a.neg != b.neg) return false; + if (a.var != b.var) return false; + + return true; + } + + inline bool operator< (const Bterm& a, const Bterm& b) + { + return (a.var < b.var); + } + + class Bdisj + { + public: + + int arity = 0; + vector dstate; // i.e., disjunctive-state + + Bdisj(){} + + bool empty() + { + return arity == 0; + } + + void addDisj(Bterm& s) + { + arity++; + dstate.push_back(s); + } + + void normalizeOr() + { + std::sort(dstate.begin(), dstate.end()); + } + }; + + class Bfactory + { + private: + + ExprFactory &m_efac; + ExprVector vars; + vector samples; + vector varInds; + + public: + + // set of fields related to guessing: + + density orAritiesDensity; + map> negDensity; + map varDensity; + vector>> varCombinations; + + Bfactory(ExprFactory &_efac) : m_efac(_efac) {}; + + void addVar(Expr var) + { + vars.push_back(var); + } + + void initialize() + { + for (int i = 0; i < vars.size(); i++) + { + varInds.push_back(i); + } + } + + ExprVector& getVars() + { + return vars; + } + + int getVar(int ind) + { + return varInds[ind]; + } + + Expr toExpr (Bterm& s) + { + Expr var = vars [s.var]; + if (s.neg) return mk(var); + else return var; + } + + Expr toExpr (Bdisj& curCandCode) + { + int ar = curCandCode.arity; + + ExprSet dsj; + for (int i = 0; i < ar; i++) + { + dsj.insert(toExpr (curCandCode.dstate[i])); + } + return disjoin(dsj, m_efac); + } + + void exprToBdisj(Expr ex, Bdisj& sample) + { + if (isOpX(ex)) + { + for (auto it = ex->args_begin (), end = ex->args_end (); it != end; ++it) + exprToBdisj(*it, sample); + } + else if (isOpX(ex)) + { + Bterm s; + s.neg = true; + s.var = getVarIndex(ex->arg(0), vars); + addDisjFilter(s, sample); + } + else if (bind::isBoolConst(ex)) + { + Bterm s; + s.neg = false; + s.var = getVarIndex(ex, vars); + addDisjFilter(s, sample); + } + } + + bool addDisjFilter(Bterm& s, Bdisj& d) + { + int skip = false; + for (int j = 0; j < d.arity; j++) + { + Bterm& t = d.dstate[j]; + if (t.var == s.var) + { + skip = true; + break; + } + } + if (!skip) + { + d.addDisj(s); + } + return true; + } + + bool guessTerm (Bdisj& curTerm) + { + int arity = chooseByWeight(orAritiesDensity); + + vector terms; + + // guess a combination of variables: + vector>& varCombination = varCombinations[arity]; + + int c = chooseByWeight(varDensity[arity]); + set& comb = varCombination[c]; + if (isEmpty(negDensity[arity][c])) return false; + + int n = chooseByWeight(negDensity[arity][c]); + for (int i : comb) + { + terms.push_back(Bterm()); + Bterm& b = terms.back(); + b.var = i; + if (n > 0) + { + b.neg = n & 1; + n = n >> 1; + } + else + { + b.neg = 0; + } + + curTerm.addDisj(b); + } + return true; + } + + void initDensities() + { + // preparing var combinations; + varCombinations.push_back(vector>()); // empty ones; not used + for (int ar = 1; ar <= vars.size(); ar++) + { + varCombinations.push_back(vector>()); + getCombinations(varInds, 0, ar, varCombinations.back()); + + orAritiesDensity[ar] = 0; + int all = pow(2, ar); + + for (int i = 0; i < varCombinations.back().size(); i++) + { + for (int j = 0; j < all; j++) + { + negDensity[ar][i][j] = 0; + } + } + + for (int j = 0; j < varCombinations[ar].size(); j++) + { + varDensity[ar][j] = 0; + } + } + } + + int getEpsilon(int min_freq, int num_zeros) + { + if (num_zeros == 0) return 1; + + // somewhat naive function; could be made dependent on other parameters, + // not only on the minimum frequency and number of zero-frequencies... + return 1 + + ((min_freq == INT_MAX) ? 0 : + guessUniformly(min_freq) / num_zeros / 10); + } + + void stabilizeDensities(bool addEpsilon, bool freqs) + { + int freqCoef = freqs ? 15 : 1; + int min_freq = INT_MAX; + int num_zeros = 0; + int eps = 0; + + for (auto & o : orAritiesDensity) + { + if (o.second == 0) num_zeros++; + else + { + o.second *= freqCoef; + min_freq = min(min_freq, o.second); + } + } + + if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); + else if (num_zeros == orAritiesDensity.size()) eps = 1; + else eps = 0; + + for (auto & o : orAritiesDensity) + { + if (o.second == 0) o.second = eps; + } + + for (auto & o : orAritiesDensity) + { + min_freq = INT_MAX; + num_zeros = 0; + for (auto &b : varDensity[o.first]) + { + if (b.second == 0) num_zeros++; + else + { + b.second *= freqCoef; + min_freq = min(min_freq, b.second); + } + } + + if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); + else if (num_zeros == varDensity[o.first].size()) eps = 1; + else eps = 0; + + for (auto &b : varDensity[o.first]) + { + if (b.second == 0) b.second = eps; + } + + int all = pow(2, o.first); + + for (int k = 0; k < varCombinations[o.first].size(); k++) + { + min_freq = INT_MAX; + num_zeros = 0; + + for (int j = 0; j < all; j++) + { + if (negDensity[o.first][k][j] == 0) num_zeros++; + else + { + negDensity[o.first][k][j] *= freqCoef; + min_freq = min(min_freq, negDensity[o.first][k][j]); + } + } + + if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); + else if (num_zeros == all) eps = 1; + else eps = 0; + + for (int j = 0; j < all; j++) + { + if (negDensity[o.first][k][j] == 0) negDensity[o.first][k][j] = eps; + } + } + } + } + + void calculateStatistics(Bdisj& bcs, bool freqs) + { + int ar = bcs.arity; + if (freqs) + { + orAritiesDensity[ar] ++; + set varComb; + int negSet = 0; + + for (int i = 0; i < bcs.dstate.size(); i++) + { + auto & b = bcs.dstate[i]; + varComb.insert(b.var); + if (b.neg) negSet |= 1 << i; + } + + for (int j = 0; j < varCombinations[ar].size(); j++) + { + if (varCombinations[ar][j] == varComb) + { + varDensity[ar][j]++; + negDensity[ar][j][negSet] ++; + + break; + } + } + } + else + { + orAritiesDensity[ar] = 1; + set varComb; + + int negSet = 0; + + for (int i = 0; i < bcs.dstate.size(); i++) + { + auto & b = bcs.dstate[i]; + varComb.insert(b.var); + if (b.neg) negSet |= 1 << i; + } + + for (int j = 0; j < varCombinations[ar].size(); j++) + { + if (varCombinations[ar][j] == varComb) + { + varDensity[ar][j] = 1; + negDensity[ar][j][negSet] = 1; + + break; + } + } + } + } + + void assignPrioritiesForBlocked(Bdisj& bcs) + { + int ar = bcs.arity; + set varComb; + int negSet = 0; + + for (int i = 0; i < bcs.dstate.size(); i++) + { + auto & b = bcs.dstate[i]; + varComb.insert(b.var); + if (b.neg) negSet |= 1 << i; + } + + for (int j = 0; j < varCombinations[ar].size(); j++) + { + if (varCombinations[ar][j] == varComb) + { + negDensity[ar][j][negSet] = 0; + break; + } + } + } + + void printCodeStatistics() + { + for (auto & a : orAritiesDensity) + { + int ar = a.first; + outs() << "Bool-Or arity density: " << ar << " |--> " << a.second << "\n"; + + for (auto &b : varDensity[ar]) + { + outs() << " Var Combination density: "; + + for (int j : varCombinations[ar][b.first]) + { + outs() << *vars[j] << ", "; + } + + outs() << "\b\b |--> " << b.second << "\n"; + + for (auto & n : negDensity[ar][b.first]) + { + outs() << " Var Negation density: "; + int c = n.first; + for (int j : varCombinations[ar][b.first]) + { + int i; + if (c > 0) + { + i = c & 1; + c = c >> 1; + } + else + { + i = 0; + } + outs() << (i ? "! " : " ") << *vars[j] << " || "; + } + + outs() << "\b\b\b |--> " << n.second << "\n"; + } + } + } + } + }; +} + + +#endif diff --git a/include/deep/LinCom.hpp b/include/sampl/LinCom.hpp similarity index 77% rename from include/deep/LinCom.hpp rename to include/sampl/LinCom.hpp index 4613e1a3e..00d47c0ec 100644 --- a/include/deep/LinCom.hpp +++ b/include/sampl/LinCom.hpp @@ -1,13 +1,12 @@ #ifndef LINCOM__HPP__ #define LINCOM__HPP__ -#define DEFAULTARITY 2 #define PRIORNOVISIT 0 #define PRIORSTEP 30 #define FREQCOEF 15 #define EPSILONFRACTION 5 -#include "Distribution.hpp" +#include "deep/Distribution.hpp" #include "ae/ExprSimpl.hpp" using namespace std; @@ -17,24 +16,24 @@ namespace ufo { typedef vector> lincoms; - + class LAterm { public: - + std::vector vcs; - + int arity; int cmpop; int intconst; - + LAterm(){} - + int getSize() { return 3 + 2 * arity; } - + void normalizePlus() { int j; @@ -55,45 +54,50 @@ namespace ufo } } }; - + inline bool operator== (LAterm& a, LAterm& b) { if (a.arity != b.arity) return false; if (a.cmpop != b.cmpop) return false; if (a.intconst != b.intconst) return false; - + for (int i = 0; i < a.vcs.size(); i++) { if (a.vcs[i] != b.vcs[i]) return false; } return true; } - + class LAdisj { private: lincoms id; - + public: - + int arity = 0; vector dstate; // i.e., disjunctive-state - + LAdisj(){} - + + bool empty() + { + return arity == 0; + } + LAterm& newDisj() { arity++; dstate.push_back(LAterm()); return dstate.back(); } - + void addDisj(LAterm& s) { arity++; dstate.push_back(s); } - + void printLAdisj() { outs () << "Cur LAdisj (OR arity = " << arity << "): \n"; @@ -101,11 +105,11 @@ namespace ufo { outs() << " disj #" << i << ":\n"; LAterm& s = dstate[i]; - + outs() << " ** arity +: " << s.arity << "\n"; outs() << " ** comparison op: " << s.cmpop << "\n"; outs() << " ** const: " << s.intconst << "\n"; - + for (int j = 0; j < s.vcs.size(); ) { outs() << " ** var: " << s.vcs[j++] << "\n"; @@ -114,7 +118,7 @@ namespace ufo } outs() << "\n"; } - + void normalizePlus() { for (int i = 0; i < dstate.size(); i++) @@ -123,7 +127,7 @@ namespace ufo s.normalizePlus(); } } - + lincoms& getId() { if (id.size() == 0) @@ -133,19 +137,18 @@ namespace ufo id.push_back(dstate[i].vcs); } } - + return id; } - + void clear() { arity = 0; dstate.clear(); id.clear(); } - }; - + inline void clone(LAterm& s, LAterm& t) { t.intconst = s.intconst; @@ -156,7 +159,7 @@ namespace ufo t.vcs.push_back(s.vcs[i]); } } - + inline void clone(LAdisj& s, LAdisj& t) { for (int i = 0; i < s.arity; i++) @@ -164,7 +167,7 @@ namespace ufo t.addDisj(s.dstate[i]); } } - + inline void dropDisj(LAdisj& s, LAdisj& t, int ind) { assert (s.arity > 1); @@ -173,7 +176,7 @@ namespace ufo if (i != ind) t.addDisj(s.dstate[i]); } } - + inline int getVarIndex(int var, vector& vec) { int i = 0; @@ -188,147 +191,139 @@ namespace ufo class LAfactory { private: - + ExprFactory &m_efac; ExprVector vars; - + vector varInds; vector intCoefs; vector intConsts; - + ExprVector intCoefsE; // symmetric vectors with Expressions ExprVector intConstsE; ExprVector cmpOps; - + Expr auxVar1; Expr auxVar2; - + int indexGT; int indexGE; ExprSet nonlinVarsSet; public: - + ExprMap nonlinVars; - + // set of fields related to guessing: - + int prVarsDistrRange; - density orAritiesDensity; + set orArities; map plusAritiesDensity; map intConstDensity; map cmpOpDensity; map> varDensity; map> coefDensity; vector>> varCombinations; - vector samples; - vector learntLemmas; // indeces to samples - ExprSet learntExprs; // lemmas from learntLemmas + map> ineqPriors; map> visited; bool aggressivepruning; - + LAfactory(ExprFactory &_efac, bool _aggressivepruning) : - m_efac(_efac), aggressivepruning(_aggressivepruning) - {}; - + m_efac(_efac), aggressivepruning(_aggressivepruning){}; + void addVar(Expr var) { vars.push_back(var); } - + void addConst(int c) { intConsts.push_back(c); } - + void addIntCoef(int coef) { intCoefs.push_back(coef); } - + void initialize() // should be called after addVar, addConst, and addIntCoef { - assert (intCoefs.size() > 0); - assert (intConsts.size() > 0); - assert (vars.size() > 0); - +// assert (intCoefs.size() > 0); +// assert (intConsts.size() > 0); +// assert (vars.size() > 0); + prVarsDistrRange = 2 * intConsts.size(); - + // auxiliary variables for inequations: auxVar1 = bind::intVar(mkTerm("aux_deephorn_1", m_efac)); auxVar2 = bind::intVar(mkTerm("aux_deephorn_2", m_efac)); - + for (int i = 0; i < vars.size(); i++) varInds.push_back(i); - + // two comparison operators (> and >=), so indexGT < indexGE cmpOps.push_back(mk (auxVar1, auxVar2)); indexGT = cmpOps.size() - 1; - + cmpOps.push_back(mk (auxVar1, auxVar2)); indexGE = cmpOps.size() - 1; - + // // finally, map values to expressions for (auto a : intCoefs) intCoefsE.push_back(mkTerm (mpz_class (a), m_efac)); // assemble expressions for (auto a : intConsts) intConstsE.push_back(mkTerm (mpz_class (a), m_efac)); // for (auto &a : nonlinVars) nonlinVarsSet.insert(a.second); } - + vector& getConsts() { return intConsts; } - + ExprVector& getVars() { return vars; } - + int getVar(int ind) { return varInds[ind]; } - - Expr getVarE(int ind) - { - return vars[ind]; - } - + int getIndexGT() { return indexGT; } - + int getIndexGE() { return indexGE; } - + int switchCmpOp(int ind) { // recall that there are two ops: >=, > assert (cmpOps.size() == 2); - + return (ind == 0) ? 1 : 0; } - + int getIntCoef(int i) { return intCoefs[i]; } - + int getIntCoefsSize() { return intCoefs.size(); } - + int getCmpOpsSize() { return cmpOps.size(); } - + Expr getAtom(Expr templ, Expr var1, Expr var2) { Expr res = templ; @@ -336,30 +331,30 @@ namespace ufo res = replaceAll(res, auxVar2, var2); return res; } - + Expr assembleLinComb(LAterm& s) { ExprVector apps; - + for (int i = 0; i < s.vcs.size(); i = i + 2) { Expr var = vars [ s.vcs[i] ]; Expr coef = intCoefsE [ s.vcs[i + 1] ]; apps.push_back(mk(coef, var)); } - + if (s.arity == 1) return apps[0]; - + return mknary (apps); } - + Expr toExpr (LAterm& s, bool replaceNonlin=true) { Expr templ = cmpOps [ s.cmpop ]; Expr ic = intConstsE [ s.intconst ]; Expr lc = assembleLinComb(s); Expr ineq = getAtom(templ, lc, ic); - + if (replaceNonlin && nonlinVarsSet.size() > 0) { while (!emptyIntersect(ineq, nonlinVarsSet)) // replace cascadically @@ -367,14 +362,14 @@ namespace ufo for (auto &a : nonlinVars) ineq = replaceAll(ineq, a.second, a.first); } } - + return ineq; } - + Expr toExpr (LAdisj& curCandCode) { int ar = curCandCode.arity; - + ExprSet dsj; for (int i = 0; i < ar; i++) { @@ -382,16 +377,13 @@ namespace ufo } return disjoin(dsj, m_efac); } - - bool exprToLAdisj(Expr ex, LAdisj& sample) + + void exprToLAdisj(Expr ex, LAdisj& sample) { if (isOpX(ex)) { - bool res = true; for (auto it = ex->args_begin (), end = ex->args_end (); it != end; ++it) - res &= exprToLAdisj(*it, sample); - - return res; + exprToLAdisj(*it, sample); } else if (isOpX(ex) || isOpX(ex)) { @@ -416,13 +408,13 @@ namespace ufo s.cmpop = getVarIndex(aux, cmpOps); s.intconst = getVarIndex(lexical_cast(ex->right()), intConsts); - if (s.intconst == -1 || s.cmpop == -1) return false; - + if (s.intconst == -1 || s.cmpop == -1) return; + for (auto &e : all) { Expr curVar; int curCoef; - + if (isOpX(e)) { if (isNumericConst(e->left())) @@ -441,41 +433,35 @@ namespace ufo curVar = e; curCoef = 1; } - + int varind = getVarIndex(curVar, vars); int coefind = getVarIndex(curCoef, intCoefs); - if (varind == -1 || coefind == -1) return false; + if (varind == -1 || coefind == -1) return; s.vcs.push_back(varind); s.vcs.push_back(coefind); - + } - bool res = addDisjFilter(s, sample); - if (!res) return false; - - bool alpos = true; - for(int v : s.vcs) alpos &= (v >= 0); - - return (alpos && s.vcs.size() == 2*(s.arity)); - } - else if (isOpX(ex)) - { - return false; + + for(int v : s.vcs) if (v < 0) return; + + if (s.vcs.size() != 2*(s.arity)) return; + + addDisjFilter(s, sample); } - return false; } - + int equalCoefs(LAterm& s) { int pat = intCoefs[ s.vcs[1] ]; for (int j = 3; j < s.vcs.size(); j = j+2) if (pat != intCoefs[ s.vcs[j] ]) return 0; - + return pat; } - + void invertTerm(LAterm& s, LAterm& t) { clone(s, t); @@ -484,18 +470,18 @@ namespace ufo int coef = intCoefs[ s.vcs[i] ]; int invcoef = getVarIndex(-coef, intCoefs); assert(invcoef != -1); - + t.vcs[i] = invcoef; } - + int iconst = intConsts[ s.intconst ]; int invconst = getVarIndex(-iconst, intConsts); assert(invconst != -1); - + t.intconst = invconst; t.cmpop = switchCmpOp(s.cmpop); } - + void invertDisj(LAdisj& s, LAdisj& t, int ind) { for (int i = 0; i < s.arity; i++) @@ -510,7 +496,7 @@ namespace ufo } } } - + bool mergeDisj(LAdisj& s1, LAdisj& s2, LAdisj& t) { for (int i = 0; i < s1.arity; i++) @@ -528,110 +514,110 @@ namespace ufo } return true; } - + bool equivLinCom(LAterm& a, LAterm& b) { // decide equivalence gradually: - + if (a.arity != b.arity) return false; - + // check equivalence of vars for (int i = 0; i < a.vcs.size(); i = i + 2) { if (a.vcs[i] != b.vcs[i]) return false; } - + if (a.vcs.size() == 2) return (a.vcs[1] == b.vcs[1]); - + // finally, coefficients float c1 = (float)intCoefs[a.vcs[1]] / (float)intCoefs[b.vcs[1]]; - + if (c1 < 0) return false; - + for (int i = 3; i < a.vcs.size(); i = i + 2) { float c2 = (float)intCoefs[a.vcs[i]] / (float)intCoefs[b.vcs[i]]; if (c2 < 0) return false; - + if (fabs(c1 - c2) > 0.0001 ) return false; // hardcode here } - + return true; } - + // very approximate result as for equivLinCom (used in the aggressive mode) bool approxRedund(LAterm& a, LAterm& b) { // decide equivalence gradually: - + if (a.arity != b.arity) return false; - + // check equivalence of vars for (int i = 0; i < a.vcs.size(); i = i + 2) { if (a.vcs[i] != b.vcs[i]) return false; } - + for (int i = 1; i < a.vcs.size(); i = i + 2) { if (intCoefs[a.vcs[i]] >= 0 != intCoefs[b.vcs[i]] >= 0) return false; } - + return true; } - + // identifies some logical implications, e.g., x + 2y > 0 is stronger than x + 2y >= 10 // false means "we don't know" bool stronger(LAterm& s, LAterm& t) { if (s.vcs.size() != t.vcs.size()) return false; - + for (int i = 0; i < s.vcs.size(); i++) { if (s.vcs[i] != t.vcs[i]) return false; } - + // Ax > b stronger than Ax >= b if (s.intconst == t.intconst) return (s.cmpop <= t.cmpop); // the smaller index the stronger formula - + // Ax > / >= b stronger than Ax > / >= c iff b > c return (s.intconst > t.intconst); } - + // symmetric to stronger bool weaker(LAterm& s, LAterm& t) { if (s.vcs.size() != t.vcs.size()) return false; - + for (int i = 0; i < s.vcs.size(); i++) { if (s.vcs[i] != t.vcs[i]) return false; } - + if (s.intconst == t.intconst) return (s.cmpop >= t.cmpop); - + return (s.intconst < t.intconst); } - + void getEquivalentFormulas(LAdisj& sample, vector& equivs) { equivs.push_back(sample); lincoms& id = sample.getId(); - + for (int i = 0; i < sample.arity; i++) { LAterm& s = sample.dstate[i]; Expr cmpop = cmpOps[ s.cmpop ]; int intconst = intConsts [ s.intconst ]; - + // get the formulas equivalent to this one, and run the same procedure for them: - + // if (ax + ax > a) then we can replace a by b, c,... of the same sign - + int coef = equalCoefs(s); - + if (coef != 0 && coef == intconst) { for (int j = 0; j < intCoefs.size(); j++) @@ -639,10 +625,9 @@ namespace ufo int thisConst = intCoefs[j]; if (thisConst == coef) continue; if ((thisConst<0) != (coef<0)) continue; - + int indProg = getVarIndex(thisConst, intConsts); // GF? if (indProg == -1) continue; - LAdisj c; clone(sample, c); @@ -654,18 +639,18 @@ namespace ufo equivs.push_back(c); } } - + // if (ax + ax > 0) then we can replace a by b,c,... of the same sign - + else if (coef != 0 && 0 == intconst) { - + for (int j = 0; j < intCoefs.size(); j++) { int thisConst = intCoefs[j]; if (thisConst == coef) continue; if ((thisConst<0) != (coef<0)) continue; - + LAdisj c; clone(sample, c); for (int k = 0; k < c.dstate[i].vcs.size(); k ++) @@ -677,7 +662,7 @@ namespace ufo } } } - + bool addDisjFilter(LAterm& s, LAdisj& d) { int skip = false; @@ -695,7 +680,7 @@ namespace ufo // disjunction of s and t is equal s, so swap these two guys: t.cmpop = s.cmpop; t.intconst = s.intconst; - + skip = true; break; } @@ -716,40 +701,29 @@ namespace ufo } return true; } - - Expr getFreshCandidate() - { - samples.push_back(LAdisj()); - LAdisj& curTerm = samples.back(); - if (!guessTerm(curTerm)) return NULL; - - curTerm.normalizePlus(); - return toExpr(curTerm); - } - - bool guessTerm (LAdisj& curTerm) + + bool guessTerm (LAdisj& curTerm, int arity) { - curTerm.clear(); - int arity = chooseByWeight(orAritiesDensity); - + if (isEmpty(plusAritiesDensity[arity])) return false; + vector> varcombs; vector terms; - + // first, guess var combinations: - + for (int i = 0; i < arity; i++) { terms.push_back(LAterm()); LAterm& la = terms.back(); la.arity = chooseByWeight(plusAritiesDensity[arity]); - + vector>& varCombination = varCombinations[la.arity]; int comb = chooseByWeight(varDensity[arity][la.arity]); varcombs.push_back(varCombination[comb]); } - + // then, guess coefficients to complete the lin. combination - + for (int i = 0; i < arity; i++) { LAterm& la = terms[i]; @@ -759,12 +733,12 @@ namespace ufo int coef = chooseByWeight(coefDensity[arity][v]); la.vcs.push_back(coef); } - + if (i != 0) { for (int j = 0; j < i; j++) { - + if (!aggressivepruning && equivLinCom(la, curTerm.dstate[j])) { return false; @@ -776,46 +750,47 @@ namespace ufo } } curTerm.addDisj(la); - + } - + // finally, guess operator and constant based on the information we learned from the previous samples: - + // WARNING: if aggressivepruning, we may skip checking some candidates if (aggressivepruning && isSampleVisitedWeak(curTerm)) return false; - + if (!aggressivepruning && isSampleVisitedStrong(curTerm)) return false; - + lincoms& id = curTerm.getId(); - + for (int i = 0; i < arity; i++) // finally, guess operator and constant { LAterm& la = curTerm.dstate[i]; guessNewInequality(id, i, la, arity); - - if (aggressivepruning) + + // GF: currently disabled: + /* if (aggressivepruning) { - for (int k = 0; k < learntLemmas.size(); k++) + for (int k = 0; k < learnedLemmas.size(); k++) { - LAdisj& lcs = samples[ learntLemmas [k] ]; + LAdisj& lcs = samples[ learnedLemmas [k] ]; if (lcs.arity == 1 && lcs.dstate[0] == la) return false; } - } + } */ } return true; } - + void guessNewInequality (lincoms& id, int disj, LAterm& curLAterm, int ar) { vector& distrs = ineqPriors[id]; initDistrs(distrs, id.size(), prVarsDistrRange); - + if (!aggressivepruning) { // re-initialize distribution (if empty) reInitialize(id, disj); } - + if (isDefault(distrs[disj])) // if it's the first time we look at this lin.combination, { // we might want to guess a candidate based on the code curLAterm.intconst = chooseByWeight(intConstDensity[ar]); @@ -829,51 +804,51 @@ namespace ufo curLAterm.cmpop = (ch % 2 == 0) ? getIndexGE() : getIndexGT(); } } - + bool isSampleVisitedStrong(LAdisj& tmpl) { // we should exhaust the search space of all the disjuncts // before abandon the entire disjunction - + // currently, works for disjunctions with one disjunct // (for others, may keep throwing the same candidates again and again) lincoms& id = tmpl.getId(); - + if (visited[id].size() == tmpl.arity) { return true; } return false; } - + bool isSampleVisitedWeak(LAdisj& tmpl) { // once the search space for one of the disjuncts is exhauseted // we abandoned the entire disjunction lincoms& id = tmpl.getId(); - + if (visited[id].size() > 0) { return true; } return false; } - + bool isVisited(lincoms& id, int disj) { set& s = visited[id]; - + if (std::find(std::begin(s), std::end(s), disj) != std::end(s)) return true; - + weights& d = ineqPriors[id][disj]; - + if (ineqPriors[id].size() == 0) { outs() << "WARNING: Priorities are not set up here\n"; return false; } - + for (int i = 0; i < d.size(); i++) { if (d[i] != PRIORNOVISIT) return false; @@ -881,25 +856,25 @@ namespace ufo s.insert(disj); return true; } - + void reInitialize(lincoms& id, int disj, int def = 1000) { set& s = visited[id]; - + if (std::find(std::begin(s), std::end(s), disj) == std::end(s)) return; - + weights& d = ineqPriors[id][disj]; - + for (int i = 0; i < d.size(); i++) d[i] = def; } - - void prioritiesGarbage(LAdisj& failed) + + void prioritiesBlocked(LAdisj& failed) { lincoms& id = failed.getId(); vector& distrs = ineqPriors[id]; - + initDistrs(distrs, failed.arity, prVarsDistrRange); - + for (int i = 0; i < failed.arity; i++) { LAterm& s = failed.dstate[i]; @@ -907,18 +882,18 @@ namespace ufo isVisited(id, i); } } - + void prioritiesFailed(LAdisj& failed) { lincoms& id = failed.getId(); vector& distrs = ineqPriors[id]; - + initDistrs(distrs, failed.arity, prVarsDistrRange); - + for (int i = 0; i < failed.arity; i++) { LAterm& s = failed.dstate[i]; - + int lim = s.intconst * 2 + (getIndexGT() == s.cmpop ? 1 : 0); for (int j = 0; j < prVarsDistrRange ; j++) { @@ -933,22 +908,22 @@ namespace ufo distrs[i][j] = min ( distrs[i][j], (lim - j) * PRIORSTEP ); } } - + isVisited(id, i); } } - void prioritiesLearnt(LAdisj& learnt) + void prioritiesLearned(LAdisj& learned) { - lincoms& id = learnt.getId(); + lincoms& id = learned.getId(); vector& distrs = ineqPriors[id]; - - initDistrs(distrs, learnt.arity, prVarsDistrRange); - - for (int i = 0; i < learnt.arity; i++) + + initDistrs(distrs, learned.arity, prVarsDistrRange); + + for (int i = 0; i < learned.arity; i++) { - LAterm& s = learnt.dstate[i]; - + LAterm& s = learned.dstate[i]; + int lim = s.intconst * 2 + (getIndexGT() == s.cmpop ? 1 : 0); for (int j = 0; j < prVarsDistrRange ; j++) { @@ -963,45 +938,48 @@ namespace ufo distrs[i][j] = min ( distrs[i][j], (j - lim) * PRIORSTEP ); } } - + isVisited(id, i); } } - - void assignPrioritiesForLearnt(LAdisj& learnt) + + void assignPrioritiesForLearned(LAdisj& learned) { if (!aggressivepruning) return; vector eqs; - getEquivalentFormulas(learnt, eqs); - for (auto &a : eqs) prioritiesLearnt (a); + getEquivalentFormulas(learned, eqs); + for (auto &a : eqs) prioritiesLearned (a); - if (learnt.arity == 1) + if (learned.arity == 1) { LAdisj t; - invertDisj (learnt, t, 0); // this is guaranteed to fail + invertDisj (learned, t, 0); // this is guaranteed to fail assignPrioritiesForFailed(t); } + + // GF: currently disabled + /* else { vector invTerms; - for (int i = 0; i < learnt.arity; i++) + for (int i = 0; i < learned.arity; i++) { invTerms.push_back(LAterm()); - invertTerm(learnt.dstate[i], invTerms.back()); + invertTerm(learned.dstate[i], invTerms.back()); } - - for (int i = 0; i < learnt.arity; i++) + + for (int i = 0; i < learned.arity; i++) { bool canblock = true; - for (int j = 0; j < learnt.arity; j++) + for (int j = 0; j < learned.arity; j++) { if (i == j) continue; - // search for invTerms[j] among learnt lemmas + // search for invTerms[j] among learned lemmas bool found = false; - for (int k = 0; k < learntLemmas.size(); k++) + for (int k = 0; k < learnedLemmas.size(); k++) { - LAdisj& lcs = samples[ learntLemmas [k] ]; + LAdisj& lcs = samples[ learnedLemmas [k] ]; if (lcs.arity > 1) continue; if (stronger(lcs.dstate[0], invTerms[j])) { @@ -1025,9 +1003,9 @@ namespace ufo assignPrioritiesForFailed(lcs); } } - } + } */ } - + void assignPrioritiesForFailed(LAdisj& failed) { if (!aggressivepruning) return; @@ -1036,16 +1014,16 @@ namespace ufo getEquivalentFormulas(failed, eqs); for (auto &a : eqs) prioritiesFailed (a); } - - void assignPrioritiesForGarbage(LAdisj& failed) + + void assignPrioritiesForBlocked(LAdisj& failed) { if (!aggressivepruning) return; vector eqs; getEquivalentFormulas(failed, eqs); - for (auto &a : eqs) prioritiesGarbage (a); + for (auto &a : eqs) prioritiesBlocked (a); } - + void initDensities(set& arities) { // preparing var combinations; @@ -1058,26 +1036,24 @@ namespace ufo for (auto ar : arities) initDensities(ar); } - + void initDensities(int ar) { - orAritiesDensity[ar] = 0; - for (int i = 1; i < vars.size() + 1; i++) { plusAritiesDensity[ar][i] = 0; - + for (int j = 0; j < intCoefs.size(); j++) { coefDensity[ar][i-1][j] = 0; } } - + for (int i = 0; i < intConsts.size(); i++) { intConstDensity[ar][i] = 0; } - + for (int i = 0; i < cmpOps.size(); i++) { cmpOpDensity[ar][i] = 0; @@ -1108,238 +1084,243 @@ namespace ufo guessUniformly(min_freq) / num_zeros / EPSILONFRACTION); } - void stabilizeDensities(set& arities, bool addEpsilon, bool freqs=true) + void stabilizeDensities(int ar, bool addEpsilon, bool freqs) { int freqCoef = freqs ? FREQCOEF : 1; int min_freq = INT_MAX; int num_zeros = 0; int eps = 0; - for (auto & ar : orAritiesDensity) + for (auto & pl : plusAritiesDensity[ar]) { - if (ar.second == 0) num_zeros++; + if (pl.second == 0) num_zeros++; else { - ar.second *= freqCoef; - min_freq = min(min_freq, ar.second); + pl.second *= freqCoef; + min_freq = min(min_freq, pl.second); } } if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); - else if (num_zeros == orAritiesDensity.size()) eps = 1; - else eps = 0; + else if (num_zeros == plusAritiesDensity[ar].size()) eps = 1; + else eps = 0; - for (auto & ar : orAritiesDensity) + for (auto & pl : plusAritiesDensity[ar]) { - if (ar.second == 0) ar.second = eps; + if (pl.second == 0) pl.second = eps; } - for (auto & ar : arities) + for (int i = 0; i < vars.size(); i++) { min_freq = INT_MAX; num_zeros = 0; - for (auto & pl : plusAritiesDensity[ar]) + for (auto & c : coefDensity[ar][i]) { - if (pl.second == 0) num_zeros++; + if (c.second == 0) num_zeros++; else { - pl.second *= freqCoef; - min_freq = min(min_freq, pl.second); + c.second *= freqCoef; + min_freq = min(min_freq, c.second); } } if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); - else if (num_zeros == plusAritiesDensity[ar].size()) eps = 1; + else if (num_zeros == coefDensity[ar][i].size()) eps = 1; else eps = 0; - for (auto & pl : plusAritiesDensity[ar]) + for (auto & c : coefDensity[ar][i]) { - if (pl.second == 0) pl.second = eps; + if (c.second == 0) c.second = eps; } + } - for (int i = 0; i < vars.size(); i++) + min_freq = INT_MAX; + num_zeros = 0; + for (auto & c : intConstDensity[ar]) + { + if (c.second == 0) num_zeros++; + else { - min_freq = INT_MAX; - num_zeros = 0; - for (auto & c : coefDensity[ar][i]) - { - if (c.second == 0) num_zeros++; - else - { - c.second *= freqCoef; - min_freq = min(min_freq, c.second); - } - } + c.second *= freqCoef; + min_freq = min(min_freq, c.second); + } + } - if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); - else if (num_zeros == coefDensity[ar][i].size()) eps = 1; - else eps = 0; + if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); + else if (num_zeros == intConstDensity[ar].size()) eps = 1; + else eps = 0; - for (auto & c : coefDensity[ar][i]) - { - if (c.second == 0) c.second = eps; - } + for (auto & c : intConstDensity[ar]) + { + if (c.second == 0) c.second = eps; + } + + min_freq = INT_MAX; + num_zeros = 0; + for (auto & c : cmpOpDensity[ar]) + { + if (c.second == 0) num_zeros++; + else + { + c.second *= freqCoef; + min_freq = min(min_freq, c.second); } + } + if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); + else if (num_zeros == cmpOpDensity[ar].size()) eps = 1; + else eps = 0; + + for (auto & c : cmpOpDensity[ar]) + { + if (c.second == 0) c.second = eps; + } + + for (int i = 0; i < varDensity[ar].size(); i++) + { min_freq = INT_MAX; num_zeros = 0; - for (auto & c : intConstDensity[ar]) + for (auto &b : varDensity[ar][i]) { - if (c.second == 0) num_zeros++; + if (b.second == 0) num_zeros++; else { - c.second *= freqCoef; - min_freq = min(min_freq, c.second); + b.second *= freqCoef; + min_freq = min(min_freq, b.second); } } if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); - else if (num_zeros == intConstDensity[ar].size()) eps = 1; + else if (num_zeros == varDensity[ar][i].size()) eps = 1; else eps = 0; - for (auto & c : intConstDensity[ar]) + for (auto &b : varDensity[ar][i]) { - if (c.second == 0) c.second = eps; + if (b.second == 0) b.second = eps; } + } + } - min_freq = INT_MAX; - num_zeros = 0; - for (auto & c : cmpOpDensity[ar]) + void calculateStatistics(LAdisj& lcs, int ar, bool freqs, bool addepsilon) + { + if (freqs) + { + // collect number of occurrences.... + + for (auto & lc : lcs.dstate) { - if (c.second == 0) num_zeros++; - else + // of arities of application of PLUS + plusAritiesDensity[ar][lc.arity] ++; + + // of constants + intConstDensity[ar][lc.intconst] ++; + + // of comparison operations + cmpOpDensity[ar][lc.cmpop] ++; + + set vars; + int vars_id = -1; + for (int j = 0; j < lc.vcs.size(); j = j+2) vars.insert(lc.vcs[j]); + for (int j = 0; j < varCombinations[lc.arity].size(); j++) { - c.second *= freqCoef; - min_freq = min(min_freq, c.second); + if (varCombinations[lc.arity][j] == vars) + { + vars_id = j; + break; + } } - } + assert(vars_id >= 0); - if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); - else if (num_zeros == cmpOpDensity[ar].size()) eps = 1; - else eps = 0; + // of variable combinations + varDensity[ar][lc.arity][vars_id] ++; - for (auto & c : cmpOpDensity[ar]) - { - if (c.second == 0) c.second = eps; + // of variable coefficients + for (int j = 1; j < lc.vcs.size(); j = j+2) + { + coefDensity[ ar ][ lc.vcs [j-1] ] [lc.vcs [j] ] ++; + } } + } + else + { + // same thing as in above; but instead of precise frequencies, we gather a rough presence - for (int i = 0; i < varDensity[ar].size(); i++) + for (auto & lc : lcs.dstate) { - min_freq = INT_MAX; - num_zeros = 0; - for (auto &b : varDensity[ar][i]) + // of arities of application of PLUS + plusAritiesDensity[ar][lc.arity] = 1; + + // of constants + intConstDensity[ar][lc.intconst] = 1; + + // of comparison operations + cmpOpDensity[ar][lc.cmpop] = 1; + + set vars; + int vars_id = -1; + for (int j = 0; j < lc.vcs.size(); j = j+2) vars.insert(lc.vcs[j]); + for (int j = 0; j < varCombinations[lc.arity].size(); j++) { - if (b.second == 0) num_zeros++; - else + if (varCombinations[lc.arity][j] == vars) { - b.second *= freqCoef; - min_freq = min(min_freq, b.second); + vars_id = j; + break; } } + assert(vars_id >= 0); - if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); - else if (num_zeros == varDensity[ar][i].size()) eps = 1; - else eps = 0; + // of variable combinations + varDensity[ar][lc.arity][vars_id] = 1; - for (auto &b : varDensity[ar][i]) + // of variable coefficients + for (int j = 1; j < lc.vcs.size(); j = j+2) { - if (b.second == 0) b.second = eps; + coefDensity[ ar ][ lc.vcs [j-1] ] [lc.vcs [j] ] = 1; } } } } - void printCodeStatistics(set& arities) - { - outs() << "Int consts:\n"; - for (auto &form: intConsts) outs() << " " << form ; - outs() << "\n"; - - for (auto &a : orAritiesDensity) - { - outs() << "OR arity density: " << a.first << " <---> " << a.second << "\n"; - } - - for (auto ar : arities) printCodeStatistics(ar); - } - void printCodeStatistics(int ar) { outs () << "(OR arity = " << ar << "):\n"; - + for (auto &a : plusAritiesDensity[ar]) { - outs() << " Plus arity density: " << a.first << " <---> " << a.second << "\n"; + outs() << " Plus arity density: " << a.first << " |--> " << a.second << "\n"; } - + for (auto &a : intConstDensity[ar]) { - outs() << " IntConst density: " << intConsts[ a.first ] << " <---> " << a.second << "\n"; + outs() << " IntConst density: " << intConsts[ a.first ] << " |--> " << a.second << "\n"; } - + for (auto &a : cmpOpDensity[ar]) { - outs() << " Operator density: " << (a.first == indexGT ? ">" : ">=") << " <---> " << a.second << "\n"; + outs() << " Operator density: " << (a.first == indexGT ? ">" : ">=") << " |--> " << a.second << "\n"; } - + for (int i = 0; i < varDensity[ar].size(); i++) { for (auto &b : varDensity[ar][i]) { outs() << " Var Combination density: "; - + for (int j : varCombinations[i][b.first]) { outs() << *vars[j] << ", "; } - - outs() << " <---> " << b.second << "\n"; + + outs() << "\b\b |--> " << b.second << "\n"; } } - + for (int i = 0; i < vars.size(); i++) { for (int j = 0; j < getIntCoefsSize(); j++) { outs() << " Var Coefficient density: [" << getIntCoef(j) << " * " - << *vars[i] << "] <---> " << coefDensity[ar][i][j] << "\n"; - } - } - } - - static inline void getCombinations(vector& data, int start, int rem, vector< set >& res) - { - if (start >= data.size()) return; - if (rem > data.size() - start) return; - - if (rem == 1) - { - for (int i = start; i < data.size(); i++) - { - set res0; - res0.insert(data[i]); - res.push_back(res0); - } - } - else - { - // if include data[start] - vector< set> res1; - getCombinations(data, start + 1, rem - 1, res1); - - for (int i = 0; i < res1.size(); i++) - { - res1[i].insert(data[start]); - res.push_back(res1[i]); - } - - // if skip data[start] - vector< set> res2; - getCombinations(data, start + 1, rem, res2); - - for (int i = 0; i < res2.size(); i++) - { - res.push_back(res2[i]); + << *vars[i] << "] : " << coefDensity[ar][i][j] << "\n"; } } } diff --git a/include/sampl/Sampl.hpp b/include/sampl/Sampl.hpp new file mode 100644 index 000000000..62a12b3b9 --- /dev/null +++ b/include/sampl/Sampl.hpp @@ -0,0 +1,254 @@ +#ifndef SAMPL__HPP__ +#define SAMPL__HPP__ + +#include "deep/Distribution.hpp" +#include "ae/ExprSimpl.hpp" +#include "LinCom.hpp" +#include "BoolCom.hpp" + +using namespace std; +using namespace boost; + +namespace ufo +{ + // wrapper for LinCom.hpp, BoolCom.hpp, etc (in the future) + class Sampl + { + public: + + Bdisj b_part; + LAdisj l_part; + + int arity() + { + return l_part.arity + ((b_part.arity > 0) ? 1 : 0); + } + + bool empty() { return arity() == 0; } + + Sampl() {} + + }; + + class SamplFactory + { + private: + ExprFactory &m_efac; + + ExprVector vars; + vector samples; + + density hasBooleanComb; + density orAritiesDensity; + + public: + + LAfactory lf; + Bfactory bf; + + ExprSet learnedExprs; + + SamplFactory(ExprFactory &_efac, bool aggp) : + m_efac(_efac), lf(_efac, aggp), bf(_efac) {} + + Expr getAllLemmas() + { + return conjoin(learnedExprs, m_efac); + } + + bool addVar(Expr var) + { + bool added = false; + if (bind::isBoolConst(var)) + { + bf.addVar(var); + added = true; + } + else if (bind::isIntConst(var)) + { + lf.addVar(var); + added = true; + } + return added; + } + + Sampl& exprToSampl(Expr ex) + { + samples.push_back(Sampl()); + Bdisj& bcs = samples.back().b_part; + LAdisj& lcs = samples.back().l_part; + + bf.exprToBdisj(ex, bcs); + lf.exprToLAdisj(ex, lcs); + + if (!lcs.empty()) lcs.normalizePlus(); + if (!bcs.empty()) bcs.normalizeOr(); + + return samples.back(); + } + + Expr sampleToExpr(Sampl& s) + { + if (s.l_part.arity == 0 && s.b_part.arity == 0) + return NULL; + if (s.l_part.arity == 0) + return bf.toExpr(s.b_part); + if (s.b_part.arity == 0) + return lf.toExpr(s.l_part); + + return mk(bf.toExpr(s.b_part), lf.toExpr(s.l_part)); + } + + void calculateStatistics(bool freqs, bool addepsilon) + { + set orArities; + + for (auto &s : samples) + { + orArities.insert(s.arity()); + orAritiesDensity[s.arity()] ++; + } + + assert(orArities.size() > 0); + lf.initDensities(orArities); + bf.initDensities(); + + for (auto &s : samples) + { + LAdisj& l = s.l_part; + Bdisj& b = s.b_part; + if (!l.empty()) + { + lf.calculateStatistics(l, s.arity(), freqs, addepsilon); + } + if (!b.empty()) + { + bf.calculateStatistics(b, freqs); + hasBooleanComb[1]++; + } + else + { + // frequency of empty bool combinations + hasBooleanComb[0]++; + } + } + + // now, stabilization: + + if (!freqs) + { + for (auto & ar : orAritiesDensity) + { + ar.second = 1; + } + } + + bf.stabilizeDensities(addepsilon, freqs); + + for (auto & ar : orAritiesDensity) + { + lf.stabilizeDensities(ar.first, addepsilon, freqs); + } + } + + Expr getFreshCandidate() + { + int arity = chooseByWeight(orAritiesDensity); + int hasBool = chooseByWeight(hasBooleanComb); + int hasLin = arity - hasBool; + samples.push_back(Sampl()); + Sampl& curCand = samples.back(); + + Expr lExpr; + if (hasLin > 0) + { + if (!lf.guessTerm(curCand.l_part, hasLin)) return NULL; + curCand.l_part.normalizePlus(); + lExpr = lf.toExpr(curCand.l_part); + } + + Expr bExpr; + if (hasBool > 0) + { + if (!bf.guessTerm(curCand.b_part)) return NULL; + bExpr = bf.toExpr(curCand.b_part); + } + + if (hasBool > 0 && hasLin > 0) + { + return mk(bExpr, lExpr); + } + else if (hasBool > 0) + { + return bExpr; + } + else + { + return lExpr; + } + } + + void assignPrioritiesForLearned(Sampl& s) + { + if (s.b_part.empty()) + lf.assignPrioritiesForLearned(s.l_part); + + if (s.l_part.empty()) + bf.assignPrioritiesForBlocked(s.b_part); + } + + void assignPrioritiesForFailed(Sampl& s) + { + if (s.b_part.empty()) + lf.assignPrioritiesForFailed(s.l_part); + + if (s.l_part.empty()) + bf.assignPrioritiesForBlocked(s.b_part); + } + + void assignPrioritiesForBlocked(Sampl& s) + { + if (s.b_part.empty()) + lf.assignPrioritiesForBlocked(s.l_part); + + if (s.l_part.empty()) + bf.assignPrioritiesForBlocked(s.b_part); + } + + void assignPrioritiesForLearned() + { + assignPrioritiesForLearned(samples.back()); + } + + void assignPrioritiesForFailed() + { + assignPrioritiesForFailed(samples.back()); + } + + void assignPrioritiesForBlocked() + { + assignPrioritiesForBlocked(samples.back()); + } + + void printStatistics() + { + for (auto &a : orAritiesDensity) + { + outs() << "OR arity density: " << a.first << " |--> " << a.second << "\n"; + } + + bf.printCodeStatistics(); + + if (lf.getConsts().size() > 0) + { + outs() << "\nInt consts:\n"; + for (auto &form: lf.getConsts()) outs() << form << ", "; + outs() << "\b\b \n"; + + for (auto &ar : orAritiesDensity) lf.printCodeStatistics(ar.first); + } + } + }; +} + +#endif diff --git a/include/deep/CodeSampler.hpp b/include/sampl/SeedMiner.hpp similarity index 70% rename from include/deep/CodeSampler.hpp rename to include/sampl/SeedMiner.hpp index ea3adc13f..7b83304eb 100644 --- a/include/deep/CodeSampler.hpp +++ b/include/sampl/SeedMiner.hpp @@ -1,5 +1,5 @@ -#ifndef CODESAMPLER__HPP__ -#define CODESAMPLER__HPP__ +#ifndef SEEDMINER__HPP__ +#define SEEDMINER__HPP__ #include "ae/AeValSolver.hpp" #include "ae/ExprSimpl.hpp" @@ -9,7 +9,7 @@ using namespace boost; namespace ufo { - class CodeSampler + class SeedMiner { public: @@ -20,15 +20,15 @@ namespace ufo HornRuleExt& hr; Expr invRel; - ExprVector invVars; + map& invVars; ExprMap& extraVars; ExprFactory &m_efac; - CodeSampler(HornRuleExt& r, Expr& d, ExprVector& v, ExprMap& e) : + SeedMiner(HornRuleExt& r, Expr& d, map& v, ExprMap& e) : hr(r), invRel(d), invVars(v), extraVars(e), m_efac(d->getFactory()) {}; - void addSampleHlp(Expr tmpl, ExprVector& vars, ExprSet& actualVars) + void addSeedHlp(Expr tmpl, ExprVector& vars, ExprSet& actualVars) { ExprSet dsjs; ExprSet newDsjs; @@ -49,10 +49,12 @@ namespace ufo if (newDsjs.size() == 0) return; + ExprVector invVarsCstm; + for (auto & a : invVars) invVarsCstm.push_back(a.second); + tmpl = disjoin (newDsjs, m_efac); - tmpl = findNonlinAndRewrite(tmpl, vars, invVars, extraVars); + tmpl = findNonlinAndRewrite(tmpl, vars, invVarsCstm, extraVars); - ExprVector invVarsCstm = invVars; for (auto &v : actualVars) { int index = getVarIndex(v, vars); @@ -82,10 +84,9 @@ namespace ufo } catch (const boost::bad_lexical_cast& e) { /*TBD*/ } } - void addSample(Expr term) + void addSeed(Expr term) { ExprSet actualVars; - ExprSet subsetInvVars; expr::filter (term, bind::IsConst(), std::inserter (actualVars, actualVars.begin ())); @@ -94,67 +95,76 @@ namespace ufo bool locals = false; if (actualVars.size() == 0 || isTautology(term)) return; - // split each term to two samples (for srcVars and dstVars) + // split each term to two seeds (for srcVars and dstVars) if (hr.srcRelation == invRel) { - addSampleHlp(term, hr.srcVars, actualVars); + addSeedHlp(term, hr.srcVars, actualVars); } if (hr.dstRelation == invRel) { - addSampleHlp(term, hr.dstVars, actualVars); + addSeedHlp(term, hr.dstVars, actualVars); } } - void populateArityAndTemplates(Expr term) + void obtainSeeds(Expr term) { - if (isOpX(term)) + if (bind::isBoolConst(term)) + { + addSeed(term); + } + else if (isOpX(term)) { - addSample(mkNeg(term->last())); // massage the negated formula a bit - populateArityAndTemplates(term->last()); + Expr negged = term->last(); + if (bind::isBoolConst(negged)) + addSeed(term); + else + obtainSeeds(negged); } else if (isOpX(term)) { if (containsOp(term)) { Expr term2 = convertToGEandGT(rewriteOrAnd(term)); - populateArityAndTemplates(term2); + obtainSeeds(term2); } else { Expr term2 = convertToGEandGT(simplifyArithmDisjunctions(term)); - addSample(term2); // add any disjunct as a sample; + addSeed(term2); // add any disjunct as a seed; } } else if (isOpX(term)) { for (int i = 0; i < term->arity(); i++) { - populateArityAndTemplates(term->arg(i)); + obtainSeeds(term->arg(i)); } } else if (isOpX(term)) { Expr term2 = mk(mkNeg(term->left()), term->right()); - populateArityAndTemplates(term2); + obtainSeeds(term2); } else if (isOpX(term) || isOpX(term)) { - addSample(term); // get rid of ITEs first + addSeed(term); // get rid of ITEs first } else if (isOp(term)) { - populateArityAndTemplates(convertToGEandGT(term)); + obtainSeeds(convertToGEandGT(term)); } } void coreProcess(Expr e) { + e = rewriteBoolEq(e); e = moveInsideITE(e); e = unfoldITE(e); e = convertToGEandGT(e); - populateArityAndTemplates(e); + e = rewriteNegAnd(e); + obtainSeeds(e); } void analyzeExtras(ExprSet& extra) @@ -168,10 +178,10 @@ namespace ufo { outs() << "\nAnalize CHC:\n"; outs() << "src vars: "; - for (int i = 0; i < hr.srcVars.size(); i++) outs() << "[" << *invVars[i] << "] = " << *hr.srcVars[i] << ", "; + for (int i = 0; i < hr.srcVars.size(); i++) outs() << *hr.srcVars[i] << ", "; outs() << "\n"; outs() << "dst vars: "; - for (int i = 0; i < hr.dstVars.size(); i++) outs() << "[" << *invVars[i] << "] = " << *hr.dstVars[i] << ", "; + for (int i = 0; i < hr.dstVars.size(); i++) outs() << *hr.dstVars[i] << ", "; outs() << "\n"; outs() << "local vars: "; for (auto & a : hr.locVars) outs() << *a << ", "; @@ -187,20 +197,31 @@ namespace ufo if (hr.srcRelation != invRel) for (auto &v : hr.srcVars) quantified.insert(v); if (hr.dstRelation != invRel) for (auto &v : hr.dstVars) quantified.insert(v); + if (hr.srcRelation == invRel) + for (int i = 0; i < hr.srcVars.size(); i++) + if (invVars[i] == NULL) quantified.insert(hr.srcVars[i]); + + if (hr.dstRelation == invRel) + for (int i = 0; i < hr.dstVars.size(); i++) + if (invVars[i] == NULL) quantified.insert(hr.dstVars[i]); + if (quantified.size() > 0) { AeValSolver ae(mk(m_efac), hr.body, quantified); if (ae.solve()) { Expr bodyTmp = ae.getValidSubset(); - if (bodyTmp != NULL) body = bodyTmp; + if (bodyTmp != NULL) + { + body = bodyTmp; + } } } - // get samples and normalize + // get seeds and normalize ExprSet conds; retrieveConds(body, conds); - for (auto & a : conds) populateArityAndTemplates(a); + for (auto & a : conds) obtainSeeds(a); // for the query: add a negation of the entire non-recursive part: if (hr.isQuery) @@ -221,14 +242,16 @@ namespace ufo retrieveDeltas(e, hr.srcVars, hr.dstVars, deltas); for (auto & a : deltas) { - populateArityAndTemplates(a); + obtainSeeds(a); } e = overapproxTransitions(e, hr.srcVars, hr.dstVars); e = simplifyBool(e); + e = rewriteBoolEq(e); e = convertToGEandGT(e); - populateArityAndTemplates(e); + e = rewriteNegAnd(e); + obtainSeeds(e); } } }; diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index 42a3664f4..5ec1c3a5d 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -1,5 +1,3 @@ -add_subdirectory(aeval) - add_subdirectory(bnd) add_subdirectory(deep) From 2b606d7cbb1703c442bfaa4f5e880fda0dab4cbb Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Fri, 10 Nov 2017 13:04:22 -0500 Subject: [PATCH 049/236] updated links to the paper and slides --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e470da53a..f5aebcf33 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ FreqHorn ======== -Satisfiability solver for constrained Horn clauses (CHC) based on the Expression library of SeaHorn and the Z3 SMT solver. It combines probabilistic and syntax-guided methods to sample candidate invariants and checks their inductiveness / safety. Find more details at FMCAD'17. +Satisfiability solver for constrained Horn clauses (CHC) based on the Expression library of SeaHorn and the Z3 SMT solver. It combines probabilistic and syntax-guided methods to sample candidate invariants and checks their inductiveness / safety. Find more details at the FMCAD'17 paper and slides. News ======== From 0ffa6152b0d6d1c43a7498c0a5c16274fdb2d8db Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Wed, 15 Nov 2017 08:17:25 -0500 Subject: [PATCH 050/236] fixed large-number handling in Expr --- include/ufo/Expr.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/ufo/Expr.hpp b/include/ufo/Expr.hpp index 8a6e13458..f04cc472f 100644 --- a/include/ufo/Expr.hpp +++ b/include/ufo/Expr.hpp @@ -760,9 +760,9 @@ namespace expr static inline void print (std::ostream &OS, const mpz_class &v, int depth, bool brkt) { - /* print large numbers in hex */ + /* print large numbers in hex if (v >= 65535 || v <= -65535) - OS << std::hex << std::showbase; + OS << std::hex << std::showbase; */ OS << v; From a2f027a2fb5cb2c468589baf4b2dbdb6c1920a99 Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Sun, 26 Nov 2017 22:05:48 -0500 Subject: [PATCH 051/236] some tiny optimizations and code cleaning --- bench_horn/const_div_3.smt2 | 27 ++++++ bench_horn/const_div_4.smt2 | 27 ++++++ bench_horn/dillig22-6.smt2 | 0 bench_horn/menlo_park_term_orig.smt2 | 31 +++++++ bench_horn/menlo_park_term_simpl_1.smt2 | 31 +++++++ bench_horn/menlo_park_term_simpl_2.smt2 | 31 +++++++ bench_horn/s_mutants_24.smt2 | 30 ++++++ bench_horn/s_triv_01.smt2 | 0 bench_horn/s_triv_02.smt2 | 0 bench_horn/s_triv_03.smt2 | 0 bench_horn/s_triv_04.smt2 | 0 bench_horn/s_triv_05.smt2 | 0 bench_horn/s_triv_06.smt2 | 0 bench_horn/s_triv_07.smt2 | 0 bench_horn/s_triv_08.smt2 | 0 bench_horn/s_triv_09.smt2 | 0 bench_horn/s_triv_10.smt2 | 0 bench_horn/s_triv_11.smt2 | 0 bench_horn/s_triv_13.smt2 | 0 bench_horn/s_triv_14.smt2 | 0 bench_horn/s_triv_15.smt2 | 0 bench_horn_cex/menlo_park_cex_simpl_1.smt2 | 31 +++++++ include/ae/AeValSolver.hpp | 16 ++-- include/ae/ExprSimpl.hpp | 5 +- include/ae/SMTUtils.hpp | 101 +++++++++++++++++---- include/deep/Horn.hpp | 59 +++++------- include/deep/RndLearner.hpp | 6 +- include/deep/RndLearnerV2.hpp | 2 +- include/sampl/Sampl.hpp | 8 ++ include/sampl/SeedMiner.hpp | 24 +++-- 30 files changed, 353 insertions(+), 76 deletions(-) create mode 100644 bench_horn/const_div_3.smt2 create mode 100644 bench_horn/const_div_4.smt2 mode change 100755 => 100644 bench_horn/dillig22-6.smt2 create mode 100644 bench_horn/menlo_park_term_orig.smt2 create mode 100644 bench_horn/menlo_park_term_simpl_1.smt2 create mode 100644 bench_horn/menlo_park_term_simpl_2.smt2 create mode 100644 bench_horn/s_mutants_24.smt2 mode change 100755 => 100644 bench_horn/s_triv_01.smt2 mode change 100755 => 100644 bench_horn/s_triv_02.smt2 mode change 100755 => 100644 bench_horn/s_triv_03.smt2 mode change 100755 => 100644 bench_horn/s_triv_04.smt2 mode change 100755 => 100644 bench_horn/s_triv_05.smt2 mode change 100755 => 100644 bench_horn/s_triv_06.smt2 mode change 100755 => 100644 bench_horn/s_triv_07.smt2 mode change 100755 => 100644 bench_horn/s_triv_08.smt2 mode change 100755 => 100644 bench_horn/s_triv_09.smt2 mode change 100755 => 100644 bench_horn/s_triv_10.smt2 mode change 100755 => 100644 bench_horn/s_triv_11.smt2 mode change 100755 => 100644 bench_horn/s_triv_13.smt2 mode change 100755 => 100644 bench_horn/s_triv_14.smt2 mode change 100755 => 100644 bench_horn/s_triv_15.smt2 create mode 100644 bench_horn_cex/menlo_park_cex_simpl_1.smt2 diff --git a/bench_horn/const_div_3.smt2 b/bench_horn/const_div_3.smt2 new file mode 100644 index 000000000..a01c28895 --- /dev/null +++ b/bench_horn/const_div_3.smt2 @@ -0,0 +1,27 @@ +(declare-rel inv (Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) +(declare-var i Int) +(declare-var i1 Int) + +(declare-rel fail ()) + +(rule (inv x y 50)) + +(rule (=> + (and + (inv x y i) + (= (div x 50) y) + (= x1 (+ x 51)) + (= y1 (+ y 1)) + (= i1 (- i 1)) + ) + (inv x1 y1 i1) + ) +) + +(rule (=> (and (inv x y i) (= (div x 50) y) (< i 0)) fail)) + +(query fail :print-certificate true) diff --git a/bench_horn/const_div_4.smt2 b/bench_horn/const_div_4.smt2 new file mode 100644 index 000000000..ee84fc629 --- /dev/null +++ b/bench_horn/const_div_4.smt2 @@ -0,0 +1,27 @@ +(declare-rel inv (Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) +(declare-var i Int) +(declare-var i1 Int) + +(declare-rel fail ()) + +(rule (inv x y 100)) + +(rule (=> + (and + (inv x y i) + (= (div x 100) y) + (= x1 (+ x 101)) + (= y1 (+ y 1)) + (= i1 (- i 1)) + ) + (inv x1 y1 i1) + ) +) + +(rule (=> (and (inv x y i) (= (div x 100) y) (< i 0)) fail)) + +(query fail :print-certificate true) diff --git a/bench_horn/dillig22-6.smt2 b/bench_horn/dillig22-6.smt2 old mode 100755 new mode 100644 diff --git a/bench_horn/menlo_park_term_orig.smt2 b/bench_horn/menlo_park_term_orig.smt2 new file mode 100644 index 000000000..3f4e9bef5 --- /dev/null +++ b/bench_horn/menlo_park_term_orig.smt2 @@ -0,0 +1,31 @@ +(declare-rel inv (Int Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) +(declare-var z Int) +(declare-var z1 Int) + +(declare-var i Int) +(declare-var i1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= y 100) (= z 1) (> x 0) (>= i x)) (inv x y z i))) + +(rule (=> + (and + (inv x y z i) + (> x 0) + (= x1 (- x y)) + (= y1 (- y z)) + (= z1 (- z)) + (= i1 (- i 1)) + ) + (inv x1 y1 z1 i1) + ) +) + +(rule (=> (and (inv x y z i) (> x 0) (< i 0)) fail)) + +(query fail :print-certificate true) diff --git a/bench_horn/menlo_park_term_simpl_1.smt2 b/bench_horn/menlo_park_term_simpl_1.smt2 new file mode 100644 index 000000000..7cd5f08c4 --- /dev/null +++ b/bench_horn/menlo_park_term_simpl_1.smt2 @@ -0,0 +1,31 @@ +(declare-rel inv (Int Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) +(declare-var z Int) +(declare-var z1 Int) + +(declare-var i Int) +(declare-var i1 Int) + +(declare-rel fail ()) + +(rule (=> (and (> y 0) (= z 1) (> x 0) (>= i x)) (inv x y z i))) + +(rule (=> + (and + (inv x y z i) + (> x 0) + (= x1 (- x y)) + (= y1 y) + (= z1 (- z)) + (= i1 (- i 1)) + ) + (inv x1 y1 z1 i1) + ) +) + +(rule (=> (and (inv x y z i) (> x 0) (< i 0)) fail)) + +(query fail :print-certificate true) diff --git a/bench_horn/menlo_park_term_simpl_2.smt2 b/bench_horn/menlo_park_term_simpl_2.smt2 new file mode 100644 index 000000000..ebc8f8d30 --- /dev/null +++ b/bench_horn/menlo_park_term_simpl_2.smt2 @@ -0,0 +1,31 @@ +(declare-rel inv (Int Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) +(declare-var z Int) +(declare-var z1 Int) + +(declare-var i Int) +(declare-var i1 Int) + +(declare-rel fail ()) + +(rule (=> (and (> y 1) (= (mod y 2) 0) (= z 1) (> x 0) (>= i x)) (inv x y z i))) + +(rule (=> + (and + (inv x y z i) + (> x 0) + (= x1 (- x y)) + (= y1 (- y z)) + (= z1 (- z)) + (= i1 (- i 1)) + ) + (inv x1 y1 z1 i1) + ) +) + +(rule (=> (and (inv x y z i) (> x 0) (< i 0)) fail)) + +(query fail :print-certificate true) diff --git a/bench_horn/s_mutants_24.smt2 b/bench_horn/s_mutants_24.smt2 new file mode 100644 index 000000000..1f337ac74 --- /dev/null +++ b/bench_horn/s_mutants_24.smt2 @@ -0,0 +1,30 @@ +(declare-rel itp (Int Int Int Int)) +(declare-rel fail ()) +(declare-var i1 Int) +(declare-var i1p Int) +(declare-var i2 Int) +(declare-var i2p Int) +(declare-var N1 Int) +(declare-var N2 Int) + +(rule (=> (and (= N1 N2) (= i1 N1) (= i2 0)) (itp i1 i2 N1 N2))) + +(rule (=> + (and + (itp i1 i2 N1 N2) + (> i1 0) + (< i2 N1) + (= i1p (- i1 1)) + (= i2p (+ i2 1)) + ) + (itp i1p i2p N1 N2) + ) +) + +;(rule (=> (and (itp i1 i2 N1 N2) (= i1 0) (not (= i2 N1))) fail)) +;(rule (=> (and (itp i1 i2 N1 N2) (= i2 N1) (not (= i1 0))) fail)) + +(rule (=> (and (itp i1 i2 N1 N2) (not (= (= i2 N1) (= i1 0)))) fail)) + +(query fail :print-certificate true) + diff --git a/bench_horn/s_triv_01.smt2 b/bench_horn/s_triv_01.smt2 old mode 100755 new mode 100644 diff --git a/bench_horn/s_triv_02.smt2 b/bench_horn/s_triv_02.smt2 old mode 100755 new mode 100644 diff --git a/bench_horn/s_triv_03.smt2 b/bench_horn/s_triv_03.smt2 old mode 100755 new mode 100644 diff --git a/bench_horn/s_triv_04.smt2 b/bench_horn/s_triv_04.smt2 old mode 100755 new mode 100644 diff --git a/bench_horn/s_triv_05.smt2 b/bench_horn/s_triv_05.smt2 old mode 100755 new mode 100644 diff --git a/bench_horn/s_triv_06.smt2 b/bench_horn/s_triv_06.smt2 old mode 100755 new mode 100644 diff --git a/bench_horn/s_triv_07.smt2 b/bench_horn/s_triv_07.smt2 old mode 100755 new mode 100644 diff --git a/bench_horn/s_triv_08.smt2 b/bench_horn/s_triv_08.smt2 old mode 100755 new mode 100644 diff --git a/bench_horn/s_triv_09.smt2 b/bench_horn/s_triv_09.smt2 old mode 100755 new mode 100644 diff --git a/bench_horn/s_triv_10.smt2 b/bench_horn/s_triv_10.smt2 old mode 100755 new mode 100644 diff --git a/bench_horn/s_triv_11.smt2 b/bench_horn/s_triv_11.smt2 old mode 100755 new mode 100644 diff --git a/bench_horn/s_triv_13.smt2 b/bench_horn/s_triv_13.smt2 old mode 100755 new mode 100644 diff --git a/bench_horn/s_triv_14.smt2 b/bench_horn/s_triv_14.smt2 old mode 100755 new mode 100644 diff --git a/bench_horn/s_triv_15.smt2 b/bench_horn/s_triv_15.smt2 old mode 100755 new mode 100644 diff --git a/bench_horn_cex/menlo_park_cex_simpl_1.smt2 b/bench_horn_cex/menlo_park_cex_simpl_1.smt2 new file mode 100644 index 000000000..a431e35f8 --- /dev/null +++ b/bench_horn_cex/menlo_park_cex_simpl_1.smt2 @@ -0,0 +1,31 @@ +(declare-rel inv (Int Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) +(declare-var z Int) +(declare-var z1 Int) + +(declare-var i Int) +(declare-var i1 Int) + +(declare-rel fail ()) + +(rule (=> (and (> y 0) (= z 1) (> x 0) (>= i x)) (inv x y z i))) + +(rule (=> + (and + (inv x y z i) + (> x 0) + (= x1 (- x y)) + (= y1 (- y z)) + (= z1 (- z)) + (= i1 (- i 1)) + ) + (inv x1 y1 z1 i1) + ) +) + +(rule (=> (and (inv x y z i) (> x 0) (< i 0)) fail)) + +(query fail :print-certificate true) diff --git a/include/ae/AeValSolver.hpp b/include/ae/AeValSolver.hpp index 2118e7800..5cf2cabc1 100644 --- a/include/ae/AeValSolver.hpp +++ b/include/ae/AeValSolver.hpp @@ -235,7 +235,7 @@ namespace ufo } instantiations.push_back(conjoin(cnjs, efac)); - if (debug) outs() << "Sanity check [" < (s,mk (projections[i], instantiations[i])), t) << "\n"; + if (debug) outs() << "Sanity check [" < (s,mk (projections[i], instantiations[i])), t) << "\n"; } Expr sk = mk(efac); @@ -246,7 +246,7 @@ namespace ufo Expr skol = simplifiedAnd(skolSkope, sk); - if (true) outs() << "Sanity check: " << u.isImplies(mk(s, skol), t) << "\n"; + if (true) outs() << "Sanity check: " << u.implies(mk(s, skol), t) << "\n"; return skol; } @@ -430,11 +430,12 @@ namespace ufo if (isOp(exp)) { - - if (!bind::isBoolConst(var) && var != exp->left()) - exp = ineqReverter(ineqMover(exp, var)); // TODO: write a similar simplifier fo booleans - + if (!bind::isBoolConst(var) && var != exp->left()) + exp = ineqMover(exp, var); + + if (var != exp->left()) exp = ineqReverter(exp); + assert (var == exp->left()); if (isOpX(exp) || isOpX(exp) || isOpX(exp)){ @@ -447,6 +448,9 @@ namespace ufo else if (isOpX(exp)){ return getPlusConst (exp->right(), isInt, 1); } + else if (isOpX(exp)){ + return getPlusConst (exp->right(), isInt, 1); + } else assert(0); } else if (isOpX(exp)){ diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index c111d0ecc..058a02ff3 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -92,7 +92,7 @@ namespace ufo if (isOpX(e)){ return e; } else { - return mk(e, mkTerm (mpz_class (1), e->getFactory())); + return mk(mkTerm (mpz_class (1), e->getFactory()), e); } } @@ -155,7 +155,6 @@ namespace ufo * Self explanatory */ inline static Expr additiveInverse(Expr e){ - if (isOpX(e)){ return e->left(); } @@ -306,7 +305,7 @@ namespace ufo for (auto &a : lhs) { if (a == var) coef++; - if (a == additiveInverse(var)) coef--; + if (var == additiveInverse(a)) coef--; } r = mkplus(rhs, e->getFactory()); diff --git a/include/ae/SMTUtils.hpp b/include/ae/SMTUtils.hpp index 3e9b758e0..5d4345630 100644 --- a/include/ae/SMTUtils.hpp +++ b/include/ae/SMTUtils.hpp @@ -24,35 +24,61 @@ namespace ufo z3(efac), smt (z3) {} - + + Expr getModel(ExprVector& vars) + { + ExprVector eqs; + ZSolver::Model m = smt.getModel(); + for (auto & v : vars) if (v != m.eval(v)) + { + eqs.push_back(mk(v, m.eval(v))); + } + return conjoin (eqs, efac); + } + /** * SMT-check */ - bool isSat(Expr a) + bool isSat(Expr a, Expr b) { smt.reset(); smt.assertExpr (a); + smt.assertExpr (b); if (!smt.solve ()) { return false; } return true; } + /** + * SMT-check + */ + bool isSat(Expr a, bool reset=true) + { + if (reset) smt.reset(); + smt.assertExpr (a); + if (!smt.solve ()) { + return false; + } + return true; + } + /** * SMT-based formula equivalence check */ bool isEquiv(Expr a, Expr b) { - return !isSat(mk(a, mk(b))) && - !isSat(mk(b, mk(a))); + return implies (a, b) && implies (b, a); } /** * SMT-based implication check */ - bool isImplies (Expr a, Expr b) + bool implies (Expr a, Expr b) { - return ! isSat(mk(a, mk(b))); + if (isOpX(b)) return true; + if (isOpX(a)) return true; + return ! isSat(a, mk(b)); } /** @@ -60,7 +86,7 @@ namespace ufo */ bool isTrue(Expr a){ if (isOpX(a)) return true; - return isEquiv(a, mk(efac)); + return !isSat(mk(a)); } /** @@ -68,9 +94,25 @@ namespace ufo */ bool isFalse(Expr a){ if (isOpX(a)) return true; - return isEquiv(a, mk(efac)); + return !isSat(a); } - + + /** + * Check if v has only one sat assignment in phi + */ + bool hasOneModel(Expr v, Expr phi) { + if (isFalse(phi)) return false; + + ZSolver::Model m = smt.getModel(); + Expr val = m.eval(v); + if (v == val) return false; + + ExprSet assumptions; + assumptions.insert(mk(v, val)); + + return (!isSat(conjoin(assumptions, efac), false)); + } + /** * ITE-simplifier (prt 2) */ @@ -138,14 +180,11 @@ namespace ufo } /** - * Remove some redundant conjuncts from the formula + * Remove some redundant conjuncts from the set of formulas */ - Expr removeRedundantConjuncts(Expr exp) + void removeRedundantConjuncts(ExprSet& conjs) { - ExprSet conjs; - getConj(exp, conjs); - - if (conjs.size() < 2) return exp; + if (conjs.size() < 2) return; ExprSet newCnjs = conjs; for (auto & cnj : conjs) @@ -159,12 +198,26 @@ namespace ufo ExprSet newCnjsTry = newCnjs; newCnjsTry.erase(cnj); - if (isImplies (conjoin(newCnjsTry, efac), cnj)) newCnjs.erase(cnj); + if (implies (conjoin(newCnjsTry, efac), cnj)) newCnjs.erase(cnj); } - - return conjoin(newCnjs, efac); + conjs = newCnjs; } - + + /** + * Remove some redundant conjuncts from the formula + */ + Expr removeRedundantConjuncts(Expr exp) + { + ExprSet conjs; + getConj(exp, conjs); + if (conjs.size() < 2) return exp; + else + { + removeRedundantConjuncts(conjs); + return conjoin(conjs, efac); + } + } + /** * Remove some redundant disjuncts from the formula */ @@ -207,7 +260,15 @@ namespace ufo } return exp; } - + + void serialize_formula(Expr form) + { + smt.reset(); + smt.assertExpr(form); + + smt.toSmtLib (outs()); + outs().flush (); + } }; /** diff --git a/include/deep/Horn.hpp b/include/deep/Horn.hpp index f0f186acc..e57aff4b0 100755 --- a/include/deep/Horn.hpp +++ b/include/deep/Horn.hpp @@ -51,8 +51,6 @@ namespace ufo bool isQuery; bool isInductive; - string suffix; - void assignVarsAndRewrite (ExprVector& _srcVars, ExprVector& invVarsSrc, ExprVector& _dstVars, ExprVector& invVarsDst) { @@ -73,7 +71,7 @@ namespace ufo for (int i = 0; i < _dstVars.size(); i++) { // primed copy of var: - Expr new_name = mkTerm (lexical_cast(invVarsDst[i]) + "__", body->getFactory()); + Expr new_name = mkTerm (lexical_cast(invVarsDst[i]) + "'", body->getFactory()); Expr var = cloneVar(invVarsDst[i], new_name); dstVars.push_back(var); @@ -148,17 +146,13 @@ namespace ufo } } - void parse(string smt) + void parse(string smt, string varname = " $_") { std::unique_ptr > m_fp; m_fp.reset (new ZFixedPoint (m_z3)); ZFixedPoint &fp = *m_fp; fp.loadFPfromFile(smt); - - string suff(""); //suff("_new"); - - // a little hack here - + for (auto &a : fp.m_rels) { if (a->arity() == 2) @@ -170,7 +164,7 @@ namespace ufo decls.insert(a); for (int i = 1; i < a->arity()-1; i++) { - Expr new_name = mkTerm ("__v__" + to_string(i - 1), m_efac); + Expr new_name = mkTerm (varname + to_string(i - 1), m_efac); Expr var; if (isOpX (a->arg(i))) var = bind::intConst(new_name); @@ -183,13 +177,12 @@ namespace ufo } } } - + for (auto &r: fp.m_rules) { chcs.push_back(HornRuleExt()); HornRuleExt& hr = chcs.back(); - hr.suffix = suff; hr.srcRelation = mk(m_efac); Expr rule = r; ExprVector args; @@ -202,7 +195,7 @@ namespace ufo { Expr var = r->arg(i); Expr name = bind::name (r->arg(i)); - Expr new_name = mkTerm (lexical_cast (name.get()) + suff, m_efac); + Expr new_name = mkTerm (lexical_cast (name.get()), m_efac); Expr var_new = bind::fapp(bind::rename(var, new_name)); args.push_back(var_new); } @@ -273,30 +266,28 @@ namespace ufo void print() { - int num = 0; + outs() << "CHCs:\n"; for (auto &hr: chcs){ - outs () << "\n=========================\n"; - outs () << "RULE #" << num++ << "\n"; - outs() << "\n body [" << * hr.body << "] -> " << * hr.head << "\n"; - outs() << "\n" << * hr.srcRelation << " -> " << * hr.dstRelation << "\n"; - - outs() << "\n SRC VARS: "; - for(auto &a: hr.srcVars){ - outs() << *a << ", "; - } - outs() << "\n"; - outs() << " DST VARS: "; - for(auto a: hr.dstVars){ - outs() << *a << ", "; + if (hr.isFact) outs() << " INIT:\n"; + if (hr.isInductive) outs() << " TRANSITION RELATION:\n"; + if (hr.isQuery) outs() << " BAD:\n"; + + outs () << " " << * hr.srcRelation; + if (hr.srcVars.size() > 0) + { + outs () << " ("; + for(auto &a: hr.srcVars) outs() << *a << ", "; + outs () << "\b\b)"; } - outs() << "\n"; - outs() << " LOCAL VARS: "; - for(auto a: hr.locVars){ - outs() << *a << ", "; + outs () << " -> " << * hr.dstRelation; + + if (hr.dstVars.size() > 0) + { + outs () << " ("; + for(auto &a: hr.dstVars) outs() << *a << ", "; + outs () << "\b\b)"; } - - outs () << "\n"; - + outs() << "\n body: " << * hr.body << "\n"; } } }; diff --git a/include/deep/RndLearner.hpp b/include/deep/RndLearner.hpp index 1b6901343..08dfeed06 100644 --- a/include/deep/RndLearner.hpp +++ b/include/deep/RndLearner.hpp @@ -175,7 +175,7 @@ namespace ufo if (doRedundancyOptim) { Expr allLemmas = sf.getAllLemmas(); - if (u.isImplies(allLemmas, cand)) + if (u.implies(allLemmas, cand)) { curCandidates[i] = mk(m_efac); } @@ -402,7 +402,7 @@ namespace ufo } numOfSMTChecks++; - if (u.isImplies(hr.body, lemma2add)) continue; + if (u.implies(hr.body, lemma2add)) continue; hr.body = mk(hr.body, lemma2add); @@ -599,7 +599,7 @@ namespace ufo break; } - if (sf.lf.nonlinVars.size() > 0 && !u.isSat(cand)) // keep searching + if (sf.lf.nonlinVars.size() > 0 && u.isFalse(cand)) // keep searching { sf.assignPrioritiesForFailed(); skip = true; diff --git a/include/deep/RndLearnerV2.hpp b/include/deep/RndLearnerV2.hpp index db5fa0b5e..0391e0b73 100644 --- a/include/deep/RndLearnerV2.hpp +++ b/include/deep/RndLearnerV2.hpp @@ -70,7 +70,7 @@ namespace ufo if (!s.empty()) sf.assignPrioritiesForLearned(); } numOfSMTChecks++; - if (!u.isImplies(sf.getAllLemmas(), l)) + if (!u.implies(sf.getAllLemmas(), l)) { sf.learnedExprs.insert(l); num++; diff --git a/include/sampl/Sampl.hpp b/include/sampl/Sampl.hpp index 62a12b3b9..06d4fade7 100644 --- a/include/sampl/Sampl.hpp +++ b/include/sampl/Sampl.hpp @@ -101,14 +101,22 @@ namespace ufo void calculateStatistics(bool freqs, bool addepsilon) { + int maxArity = 0; set orArities; for (auto &s : samples) { + maxArity = max (maxArity, s.arity()); orArities.insert(s.arity()); orAritiesDensity[s.arity()] ++; } + for (int i = 0; i < maxArity; i++) + { + if (orAritiesDensity[i] == 0) + orArities.insert(i); + } + assert(orArities.size() > 0); lf.initDensities(orArities); bf.initDensities(); diff --git a/include/sampl/SeedMiner.hpp b/include/sampl/SeedMiner.hpp index 7b83304eb..8ed999873 100644 --- a/include/sampl/SeedMiner.hpp +++ b/include/sampl/SeedMiner.hpp @@ -87,9 +87,9 @@ namespace ufo void addSeed(Expr term) { ExprSet actualVars; - + expr::filter (term, bind::IsConst(), std::inserter (actualVars, actualVars.begin ())); - + term = rewriteMultAdd(term); bool locals = false; @@ -101,13 +101,13 @@ namespace ufo { addSeedHlp(term, hr.srcVars, actualVars); } - + if (hr.dstRelation == invRel) { addSeedHlp(term, hr.dstVars, actualVars); } } - + void obtainSeeds(Expr term) { if (bind::isBoolConst(term)) @@ -131,8 +131,17 @@ namespace ufo } else { - Expr term2 = convertToGEandGT(simplifyArithmDisjunctions(term)); - addSeed(term2); // add any disjunct as a seed; + Expr simplified = simplifyArithmDisjunctions(term); + if (isOpX(simplified)) + { + for (auto it = term->args_begin(), end = term->args_end(); it != end; ++it) + addSeed(*it); + } + else + { + Expr term2 = convertToGEandGT(simplified); + addSeed(term2); + } } } else if (isOpX(term)) @@ -237,16 +246,13 @@ namespace ufo { // hr.isInductive Expr e = unfoldITE(body); - ExprSet deltas; // some magic here for enhancing the grammar retrieveDeltas(e, hr.srcVars, hr.dstVars, deltas); for (auto & a : deltas) { obtainSeeds(a); } - e = overapproxTransitions(e, hr.srcVars, hr.dstVars); - e = simplifyBool(e); e = rewriteBoolEq(e); e = convertToGEandGT(e); From 208e8e2a8a6610979ed1f111910faacac087023d Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Wed, 27 Dec 2017 21:17:05 -0500 Subject: [PATCH 052/236] lightweight CHC-preprocessing and some useful operations with CHCs --- include/ae/ExprSimpl.hpp | 311 ++++++++++++++++++++++++++++++++++++-- include/deep/Horn.hpp | 263 ++++++++++++++++++++++++++++++-- include/sampl/BoolCom.hpp | 4 +- include/sampl/LinCom.hpp | 5 + 4 files changed, 563 insertions(+), 20 deletions(-) diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index 058a02ff3..ef659960d 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -55,11 +55,13 @@ namespace ufo return emptyIntersect(a, bv); } + // if at the end disjs is empty, then a == true inline static void getConj (Expr a, ExprSet &conjs) { if (isOpX(a)) return; if (isOpX(a)){ conjs.clear(); + conjs.insert(a); return; } else if (isOpX(a)){ for (unsigned i = 0; i < a->arity(); i++){ @@ -70,11 +72,13 @@ namespace ufo } } + // if at the end disjs is empty, then a == false inline static void getDisj (Expr a, ExprSet &disjs) { if (isOpX(a)) return; if (isOpX(a)){ disjs.clear(); + disjs.insert(a); return; } else if (isOpX(a)){ for (unsigned i = 0; i < a->arity(); i++){ @@ -182,6 +186,10 @@ namespace ufo return mk(c, e->right()); } } + else if (bind::isIntConst(e)) + return mk(mkTerm (mpz_class (-1), e->getFactory()), e); + + // otherwise could be buggy... return mk(mkTerm (mpq_class (-1), e->getFactory()), e); } @@ -729,6 +737,8 @@ namespace ufo } }; + inline static Expr simplifyBool (Expr exp); + struct SimplifyBoolExpr { ExprFactory &efac; @@ -738,7 +748,7 @@ namespace ufo Expr operator() (Expr exp) { // GF: to enhance - + if (isOpX(exp)) { if (isOpX(exp->right())) @@ -752,19 +762,57 @@ namespace ufo exp->right())); } - if (isOpX(exp)){ + if (isOpX(exp)) + { + if (isOpX(exp->right())) + return exp->left(); + + if (isOpX(exp->left())) + return exp->right(); + + if (isOpX(exp->right())) + return mk(exp->left()); + + if (isOpX(exp->left())) + return mk(exp->right()); + } + + if (isOpX(exp)) + { ExprSet dsjs; + ExprSet newDsjs; getDisj(exp, dsjs); for (auto & a : dsjs){ - if (isOpX(a) && a->left() == a->right()) return mk(efac); + if (isOpX(a)) + { + return mk(efac); + } + if (isOpX(a)) + { + continue; + } + newDsjs.insert(simplifyBool(a)); } - return disjoin (dsjs, exp->getFactory()); + return disjoin (newDsjs, efac); } - if (isOpX(exp)){ + if (isOpX(exp)) + { ExprSet cnjs; + ExprSet newCnjs; getConj(exp, cnjs); - return conjoin (cnjs, exp->getFactory()); + for (auto & a : cnjs){ + if (isOpX(a)) + { + return mk(efac); + } + if (isOpX(a)) + { + continue; + } + newCnjs.insert(simplifyBool(a)); + } + return conjoin (newCnjs, efac); } return exp; @@ -782,7 +830,131 @@ namespace ufo RW rw(new SimplifyBoolExpr(exp->getFactory())); return dagVisit (rw, exp); } - + + inline static void simplBoolReplCnjHlp(ExprVector& hardVars, ExprSet& cnjs, ExprVector& facts, ExprVector& repls) + { + bool toRestart; + ExprSet toInsert; + + for (auto it = cnjs.begin(); it != cnjs.end(); ) + { + if (isOpX(*it)) + { + it = cnjs.erase(it); + continue; + } + + Expr a = replaceAll(*it, facts, repls); + + if (isOpX(a)) + { + Expr lhs = simplifyBool(a->left()); + bool isTrue = isOpX(lhs); + bool isFalse = isOpX(lhs); + + if (isTrue) a = simplifyBool(a->right()); + else if (isFalse) continue; + } + + if (isOpX(a)) + { + // TODO: this could be symmetric + + Expr lhs = simplifyBool(a->left()); + bool isTrue = isOpX(lhs); + bool isFalse = isOpX(lhs); + + if (isTrue) a = simplifyBool(a->right()); + else if (isFalse) + { + a = simplifyBool(mk(a->right())); + } + } + + ExprSet splitted; + getConj(a, splitted); + toRestart = false; + + for (auto & c : splitted) + { + if (bind::isBoolConst(c)) + { + bool nothard = find(hardVars.begin(), hardVars.end(), c) == hardVars.end(); + if (nothard) + { + toRestart = true; + facts.push_back(c); + repls.push_back(mk(a->getFactory())); + facts.push_back(mk(c)); + repls.push_back(mk(a->getFactory())); + } + else + { + toInsert.insert(c); + } + } + else if (isOpX(c) && bind::isBoolConst(c->left())) + { + bool nothardLeft = find(hardVars.begin(), hardVars.end(), c->left()) == hardVars.end(); + if (nothardLeft) + { + toRestart = true; + facts.push_back(c); + repls.push_back(mk(a->getFactory())); + facts.push_back(c->left()); + repls.push_back(mk(a->getFactory())); + } + else + { + toInsert.insert(c); + } + } + else if (isOpX(c)) + { + if (bind::isIntConst(c->left()) && + find(hardVars.begin(), hardVars.end(), c->left()) == hardVars.end()) + { + toRestart = true; + facts.push_back(c->left()); + repls.push_back(c->right()); + } + else if (bind::isIntConst(c->right()) && + find(hardVars.begin(), hardVars.end(), c->right()) == hardVars.end()) + { + toRestart = true; + facts.push_back(c->right()); + repls.push_back(c->left()); + } + else + { + toInsert.insert(c); + } + } + else + { + toInsert.insert(c); + } + } + + it = cnjs.erase(it); + if (toRestart) break; + } + + cnjs.insert(toInsert.begin(), toInsert.end()); + if (toRestart) + { + simplBoolReplCnjHlp(hardVars, cnjs, facts, repls); + } + } + + // simplification based on boolean replacements + inline static void simplBoolReplCnj(ExprVector& hardVars, ExprSet& cnjs) + { + ExprVector facts; + ExprVector repls; + simplBoolReplCnjHlp(hardVars, cnjs, facts, repls); + } + inline static ExprSet minusSets(ExprSet& v1, ExprSet& v2){ ExprSet v3; bool res; @@ -885,14 +1057,16 @@ namespace ufo auto it = a->args_begin (); auto end = a->args_end (); getAddTerm(*it, terms); -// outs () <<" [ " << *(*it) << "\n"; ++it; for (; it != end; ++it) { -// outs () << *mk(*it) << " ] \n"; getAddTerm(arithmInverse(*it), terms); } } + else if (isOpX(a)) + { + getAddTerm(arithmInverse(a->left()), terms); + } else { terms.push_back(a); @@ -1794,6 +1968,93 @@ namespace ufo return isOpX(exp); } + // very naive version, to extend + inline ExprSet orifyCmpConstraintsSet(ExprSet& es, int bnd = 10) + { + assert (es.size() > 0); + if (es.size() == 1) + { + ExprSet newDsjs; + getDisj(*es.begin(), newDsjs); + return newDsjs; + } + + bool toDisj; + ExprFactory &efac = (*es.begin())->getFactory(); + Expr lhs; + int lowerBnd = INT_MIN; + int upperBnd = INT_MAX; + for (auto & a : es) + { + toDisj = false; + if (!isOp(a)) break; + if (isOpX(a)) + { + ExprSet newDsjs; + newDsjs.insert(a); + return newDsjs; + } + + if (lhs == NULL) lhs = a->left(); + else + if (0 != lexical_cast(lhs).compare(lexical_cast(a->left()))) break; + + if (!isOpX(a->right())) break; + + if (isOpX(a)) lowerBnd = max(lowerBnd, lexical_cast(a->right())); + else if (isOpX(a)) lowerBnd = max(lowerBnd, lexical_cast(a->right()) + 1); + else if (isOpX(a)) upperBnd = min(upperBnd, lexical_cast(a->right())); + else if (isOpX(a)) upperBnd = min(upperBnd, lexical_cast(a->right()) - 1); + + toDisj = true; + } + + ExprSet newDsjs; + if (toDisj) + { + for (int i = 0; i < min(bnd, upperBnd - lowerBnd); i++) + { + newDsjs.insert(mk(lhs, mkTerm (mpz_class (lowerBnd + i), efac))); + } + if (upperBnd - lowerBnd > bnd) + { + newDsjs.insert(mk + (mk(lhs, mkTerm (mpz_class (lowerBnd + bnd), efac)), + mk(lhs, mkTerm (mpz_class (upperBnd), efac)))); + } + } + else + { + newDsjs.insert(conjoin(es, efac)); + } + return newDsjs; + } + + inline void getNondets (Expr e, std::map& nondets) + { + ExprSet lin; + getConj(e, lin); + std::map constraints; + for (auto & a : lin) + { + if (isOpX(a) || isOpX(a) || isOpX(a) || isOpX(a) || isOpX(a) || isOpX(a)) + { + ExprVector av; + filter (a, bind::IsConst (), inserter(av, av.begin())); + if (av.size() == 0 || av.size() > 1) continue; + // current limitation: only nondeterminism w.r.t. one variable; to extend + + Expr a1 = (unfoldITE(a)); + a1 = simplifyBool(a1); + getConj(a1, constraints[*av.begin()]); + } + } + + for (auto & a : constraints){ + nondets[a.first] = orifyCmpConstraintsSet(a.second); + } + } + struct TransitionOverapprox { ExprVector& srcVars; @@ -1816,6 +2077,32 @@ namespace ufo } }; + // opposite to TransitionOverapprox + struct TransitionMiner : public std::unary_function + { + ExprVector& srcVars; + ExprVector& dstVars; + ExprSet& transitions; + + TransitionMiner (ExprVector& _srcVars, ExprVector& _dstVars, ExprSet& _transitions): + srcVars(_srcVars), dstVars(_dstVars), transitions(_transitions) {}; + + VisitAction operator() (Expr exp) + { + if (isOp(exp) && !containsOp(exp)) + { + ExprVector av; + filter (exp, bind::IsConst (), inserter(av, av.begin())); + if (!emptyIntersect(av, srcVars) && !emptyIntersect(av, dstVars)) + { + transitions.insert(exp); + } + return VisitAction::skipKids (); + } + return VisitAction::doKids (); + } + }; + struct BoolEqRewriter { BoolEqRewriter () {}; @@ -1924,6 +2211,12 @@ namespace ufo dagVisit (dr, exp); } + inline void retrieveTransitions (Expr exp, ExprVector& srcVars, ExprVector& dstVars, ExprSet& transitions) + { + TransitionMiner trm (srcVars, dstVars, transitions); + dagVisit (trm, exp); + } + inline static Expr overapproxTransitions (Expr exp, ExprVector& srcVars, ExprVector& dstVars) { RW rw(new TransitionOverapprox(srcVars, dstVars)); diff --git a/include/deep/Horn.hpp b/include/deep/Horn.hpp index e57aff4b0..5385dae9d 100755 --- a/include/deep/Horn.hpp +++ b/include/deep/Horn.hpp @@ -106,7 +106,7 @@ namespace ufo CHCs(ExprFactory &efac, EZ3 &z3) : m_efac(efac), m_z3(z3) {}; - void preprocess (Expr term, ExprVector& srcVars, ExprVector& relations, Expr &srcRelation, ExprVector& lin) + void preprocess (Expr term, ExprVector& srcVars, ExprVector& relations, Expr &srcRelation, ExprSet& lin) { if (isOpX(term)) { @@ -119,7 +119,7 @@ namespace ufo { if (bind::isBoolConst(term)) { - lin.push_back(term); + lin.insert(term); } if (isOpX(term)) { @@ -141,7 +141,7 @@ namespace ufo } else { - lin.push_back(term); + lin.insert(term); } } } @@ -202,15 +202,16 @@ namespace ufo ExprVector actual_vars; expr::filter (rule, bind::IsVar(), std::inserter (actual_vars, actual_vars.begin ())); - assert(actual_vars.size() == args.size()); + ExprVector repl_vars; for (int i = 0; i < actual_vars.size(); i++) { string a1 = lexical_cast(bind::name(actual_vars[i])); int ind = args.size() - 1 - atoi(a1.substr(1).c_str()); - rule = replaceAll(rule, actual_vars[i], args[ind]); + repl_vars.push_back(args[ind]); } + rule = replaceAll(rule, actual_vars, repl_vars); } if (!isOpX(rule)) rule = mk(mk(m_efac), rule); @@ -222,15 +223,14 @@ namespace ufo hr.dstRelation = head->arg(0)->arg(0); ExprVector origSrcSymbs; - ExprVector lin; - preprocess(body, origSrcSymbs, fp.m_rels, hr.srcRelation, lin); + ExprSet lin; + preprocess(body, origSrcSymbs, fp.m_rels, hr.srcRelation, lin); hr.isFact = isOpX(hr.srcRelation); hr.isQuery = (hr.dstRelation == failDecl); hr.isInductive = (hr.srcRelation == hr.dstRelation); - hr.body = conjoin(lin, m_efac); - outgs[hr.srcRelation].push_back(chcs.size()-1); + ExprVector allOrigSymbs = origSrcSymbs; ExprVector origDstSymbs; if (!hr.isQuery) @@ -239,6 +239,14 @@ namespace ufo origDstSymbs.push_back(*it); } + allOrigSymbs.insert(allOrigSymbs.end(), origDstSymbs.begin(), origDstSymbs.end()); + + Expr bodyPre = conjoin(lin, m_efac); + simplBoolReplCnj(allOrigSymbs, lin); + hr.body = conjoin(lin, m_efac); + + outgs[hr.srcRelation].push_back(chcs.size()-1); + hr.assignVarsAndRewrite (origSrcSymbs, invVars[hr.srcRelation], origDstSymbs, invVars[hr.dstRelation]); @@ -264,6 +272,243 @@ namespace ufo } } + void addRule (HornRuleExt* r) + { + chcs.push_back(*r); + Expr srcRel = r->srcRelation; + if (!isOpX(srcRel)) + { + if (invVars[srcRel].size() == 0) + { + addDecl(srcRel, r->srcVars); + } + } + outgs[srcRel].push_back(chcs.size()-1); + } + + void addDecl(Expr rel, ExprVector& args) + { + ExprVector types; + for (auto &var: args) { + types.push_back (bind::typeOf (var)); + } + types.push_back (mk (m_efac)); + + decls.insert(bind::fdecl (rel, types)); + for (auto & v : args) + { + invVars[rel].push_back(v); + } + } + + void addFailDecl(Expr decl) + { + failDecl = decl; + } + + Expr getPrecondition (Expr decl) + { + HornRuleExt* hr; + for (auto &a : chcs) if (a.srcRelation == decl->left() && a.dstRelation == decl->left()) hr = &a; + + ExprSet cnjs; + ExprSet newCnjs; + getConj(hr->body, cnjs); + for (auto &a : cnjs) + { + if (emptyIntersect(a, hr->dstVars) && emptyIntersect(a, hr->locVars)) newCnjs.insert(a); + } + return conjoin(newCnjs, m_efac); + } + + // Transformations + + void mergeIterations(Expr decl, int num) + { + HornRuleExt* hr; + for (auto &a : chcs) if (a.srcRelation == decl->left() && a.dstRelation == decl->left()) hr = &a; + Expr pre = getPrecondition(decl); + ExprSet newCnjs; + newCnjs.insert(mk(pre)); + for (int i = 0; i < hr->srcVars.size(); i++) + { + newCnjs.insert(mk(hr->dstVars[i], hr->srcVars[i])); + } + Expr body2 = conjoin(newCnjs, m_efac); + + // adaping the code from BndExpl.hpp + ExprVector ssa; + ExprVector bindVars1; + ExprVector bindVars2; + ExprVector newLocals; + int bindVar_index = 0; + int locVar_index = 0; + + for (int c = 0; c < num; c++) + { + Expr body = hr->body; + bindVars2.clear(); + if (c != 0) + { + body = replaceAll(mk(body, body2), hr->srcVars, bindVars1); + for (int i = 0; i < hr->locVars.size(); i++) + { + Expr new_name = mkTerm ("__loc_var_" + to_string(locVar_index++), m_efac); + Expr var = cloneVar(hr->locVars[i], new_name); + body = replaceAll(body, hr->locVars[i], var); + newLocals.push_back(var); + } + } + + if (c != num-1) + { + for (int i = 0; i < hr->dstVars.size(); i++) + { + Expr new_name = mkTerm ("__bnd_var_" + to_string(bindVar_index++), m_efac); + bindVars2.push_back(cloneVar(hr->dstVars[i], new_name)); + body = replaceAll(body, hr->dstVars[i], bindVars2[i]); + newLocals.push_back(bindVars2[i]); + } + } + ssa.push_back(body); + bindVars1 = bindVars2; + } + hr->body = conjoin(ssa, m_efac); + hr->locVars.insert(hr->locVars.end(), newLocals.begin(), newLocals.end()); + } + + void slice (Expr decl, ExprSet& vars) + { + HornRuleExt* hr; + for (auto &a : chcs) if (a.srcRelation == decl->left() && a.dstRelation == decl->left()) hr = &a; + ExprSet cnjs; + ExprSet newCnjs; + getConj(hr->body, cnjs); + map deps; + + for (auto &a : cnjs) + { + ExprSet cnj_vars; + ExprSet cnj_vars_cmpl; + expr::filter (a, bind::IsConst(), std::inserter (cnj_vars, cnj_vars.begin ())); + for (auto & a : cnj_vars) + { + int index = getVarIndex(a, hr->srcVars); + if (index >= 0) + { + cnj_vars_cmpl.insert(hr->dstVars[index]); + continue; + } + index = getVarIndex(a, hr->dstVars); + if (index >= 0) + { + cnj_vars_cmpl.insert(hr->srcVars[index]); + } + } + cnj_vars.insert(cnj_vars_cmpl.begin(), cnj_vars_cmpl.end()); + deps[a] = cnj_vars; + } + + while (vars.size() > 0) + { + for (auto vit = vars.begin(); vit != vars.end(); ) + { + for (auto cit = cnjs.begin(); cit != cnjs.end(); ) + { + ExprSet& d = deps[*cit]; + if (find(d.begin(), d.end(), *vit) != d.end()) + { + newCnjs.insert(*cit); + cit = cnjs.erase(cit); + vars.insert(d.begin(), d.end()); + } + else + { + ++cit; + } + } + vit = vars.erase (vit); + } + } + hr->body = conjoin(newCnjs, m_efac); + } + + bool checkWithSpacer() + { + bool success = false; + + // fixed-point object + ZFixedPoint fp (m_z3); + ZParams params (m_z3); + params.set (":engine", "spacer"); + params.set (":xform.slice", false); + params.set (":pdr.utvpi", false); + params.set (":use_heavy_mev", true); + params.set (":xform.inline-linear", false); + params.set (":xform.inline-eager", false); + params.set (":xform.inline-eager", false); + + fp.set (params); + + fp.registerRelation (bind::boolConstDecl(failDecl)); + + for (auto & dcl : decls) fp.registerRelation (dcl); + Expr errApp; + + for (auto & r : chcs) + { + ExprSet allVars; + allVars.insert(r.srcVars.begin(), r.srcVars.end()); + allVars.insert(r.dstVars.begin(), r.dstVars.end()); + allVars.insert(r.locVars.begin(), r.locVars.end()); + + if (!r.isQuery) + { + for (auto & dcl : decls) + { + if (dcl->left() == r.dstRelation) + { + r.head = bind::fapp (dcl, r.dstVars); + break; + } + } + } + else + { + r.head = bind::fapp(bind::boolConstDecl(failDecl)); + errApp = r.head; + } + + Expr pre; + if (!r.isFact) + { + for (auto & dcl : decls) + { + if (dcl->left() == r.srcRelation) + { + pre = bind::fapp (dcl, r.srcVars); + break; + } + } + } + else + { + pre = mk(m_efac); + } + + fp.addRule(allVars, boolop::limp (mk(pre, r.body), r.head)); + } + try { + success = !fp.query(errApp); + } catch (z3::exception &e){ + char str[3000]; + strncpy(str, e.msg(), 300); + outs() << "Z3 ex: " << str << "...\n"; + exit(55); + } + return success; + } + void print() { outs() << "CHCs:\n"; diff --git a/include/sampl/BoolCom.hpp b/include/sampl/BoolCom.hpp index e55a5c215..7936381ec 100644 --- a/include/sampl/BoolCom.hpp +++ b/include/sampl/BoolCom.hpp @@ -133,14 +133,14 @@ namespace ufo Bterm s; s.neg = true; s.var = getVarIndex(ex->arg(0), vars); - addDisjFilter(s, sample); + if (s.var >= 0) addDisjFilter(s, sample); } else if (bind::isBoolConst(ex)) { Bterm s; s.neg = false; s.var = getVarIndex(ex, vars); - addDisjFilter(s, sample); + if (s.var >= 0) addDisjFilter(s, sample); } } diff --git a/include/sampl/LinCom.hpp b/include/sampl/LinCom.hpp index 00d47c0ec..89e2e1ba9 100644 --- a/include/sampl/LinCom.hpp +++ b/include/sampl/LinCom.hpp @@ -428,6 +428,11 @@ namespace ufo curCoef = lexical_cast(e->right()); } } + else if (isOpX(e)) + { + curVar = e->left(); + curCoef = -1; + } else { curVar = e; From 9264c7ae25111ebd80958c76eea3cb6d90627bda Mon Sep 17 00:00:00 2001 From: fedyukovich Date: Sat, 9 Dec 2017 19:43:58 +0100 Subject: [PATCH 053/236] replacing variables in Exprs in batches --- include/ufo/Expr.hpp | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/include/ufo/Expr.hpp b/include/ufo/Expr.hpp index f04cc472f..e3fc6def3 100644 --- a/include/ufo/Expr.hpp +++ b/include/ufo/Expr.hpp @@ -2711,6 +2711,23 @@ namespace expr { return exp == s ? VisitAction::changeTo (t) : VisitAction::doKids (); } }; + struct RAVALL: public std::unary_function + { + ExprVector* s; + ExprVector* t; + unsigned int sz; + + RAVALL (ExprVector* _s, ExprVector* _t) : s(_s), t(_t), sz(_s->size()) { } + VisitAction operator() (Expr exp) const + { + // TODO: could be optimized further, + // e.g., when all elements of s and t have the same type... + for (unsigned int i = 0; i < sz; i++ ) + if (exp == s->at(i)) return VisitAction::changeTo (t->at(i)); + return VisitAction::doKids (); + } + }; + struct RAVSIMP: public std::unary_function { Expr s; @@ -2914,6 +2931,14 @@ namespace expr return dagVisit (rav, exp); } + // pairwise replacing + inline Expr replaceAll (Expr exp, ExprVector& s, ExprVector& t) + { + assert(s.size() == t.size()); + RAVALL rav(&s, &t); + return dagVisit (rav, exp); + } + /** Replace all occurrences of s by t while simplifying the result */ inline Expr replaceAllSimplify (Expr exp, Expr s, Expr t) { @@ -3001,7 +3026,7 @@ namespace expr CV cv(e2); dagVisit (cv, e1); return cv.found; - } + } /** Returns true if e1 contains applications of T */ template inline bool containsOp (Expr e1) From 31f69e848d958f06644b8bf6f9bf24b75db1b388 Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Wed, 10 Jan 2018 14:30:40 -0500 Subject: [PATCH 054/236] added a link to most recent paper --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f5aebcf33..d10cd6cdb 100644 --- a/README.md +++ b/README.md @@ -6,12 +6,12 @@ Satisfiability solver for constrained Horn clauses (CHC) based on the Expression News ======== -A more efficient release (FreqHorn-2) is now available. It features a two-stage process: 1) deterministic bootstrapping with itp-based proofs of bounded safety, 2) nondeterministic sampling with the inductive subset extraction and on-demand exploiting of counterexamples-to-induction. Check the usage message for more info. +A more efficient release (FreqHorn-2) is now available. It features a two-stage process: 1) deterministic bootstrapping with interpolation-based proofs of bounded safety, 2) nondeterministic sampling with the inductive subset extraction and on-demand exploiting of counterexamples-to-induction. Find more details at the TACAS'18 paper. Installation ============ -Compiles with gcc-5 (on Linux) and clang-700 (on Mac). Assumes preinstalled Gmp and Boost (libboost-system1.55-dev) packages. +Compiles with gcc-5 (on Linux) and clang-900 (on Mac). Assumes preinstalled Svn, Gmp, and Boost (libboost-system1.55-dev) packages. * `cd aeval ; mkdir build ; cd build` * `cmake ../` From b679f33562fc2c3dd83e54478b689d7cbd7739e4 Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Fri, 16 Feb 2018 16:55:36 -0500 Subject: [PATCH 055/236] few new benchmarks --- bench_horn/three_dots_moving_1.smt2 | 39 +++++++++++++++++++++ bench_horn/three_dots_moving_2.smt2 | 53 +++++++++++++++++++++++++++++ bench_horn/three_dots_moving_3.smt2 | 38 +++++++++++++++++++++ bench_horn/w2.smt2 | 2 +- bench_horn/yz_plus_minus_1.smt2 | 27 +++++++++++++++ bench_horn/yz_plus_minus_2.smt2 | 30 ++++++++++++++++ 6 files changed, 188 insertions(+), 1 deletion(-) create mode 100644 bench_horn/three_dots_moving_1.smt2 create mode 100644 bench_horn/three_dots_moving_2.smt2 create mode 100644 bench_horn/three_dots_moving_3.smt2 create mode 100644 bench_horn/yz_plus_minus_1.smt2 create mode 100644 bench_horn/yz_plus_minus_2.smt2 diff --git a/bench_horn/three_dots_moving_1.smt2 b/bench_horn/three_dots_moving_1.smt2 new file mode 100644 index 000000000..086ebedf9 --- /dev/null +++ b/bench_horn/three_dots_moving_1.smt2 @@ -0,0 +1,39 @@ +(declare-rel inv (Int Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) +(declare-var g Int) +(declare-var g1 Int) +(declare-var K Int) + +(declare-rel fail ()) + +(rule (=> (and + (>= g (- x K)) + (>= g (- K x)) + (>= g (- y K)) + (>= g (- K y)) + (>= g (- y x)) + (>= g (- x y))) + (inv x y K g))) + +(rule (=> + (and + (inv x y K g) + (= g1 (- g 1)) + (not (= y K)) + (= x1 (ite (> x K) (- x 1) (ite (< x K) (+ x 1) x))) + (= y1 (ite (> y x1) (- y 1) (ite (< y x1) (+ y 1) y))) + ) + (inv x1 y1 K g1) + ) +) + +(rule (=> + (and + (inv x y K g) + (not (= y K)) (not (> g 0))) + fail)) + +(query fail) diff --git a/bench_horn/three_dots_moving_2.smt2 b/bench_horn/three_dots_moving_2.smt2 new file mode 100644 index 000000000..bf075c65c --- /dev/null +++ b/bench_horn/three_dots_moving_2.smt2 @@ -0,0 +1,53 @@ +(declare-rel inv (Int Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) +(declare-var g Int) +(declare-var g1 Int) +(declare-var K Int) + +(declare-rel fail ()) + +(rule (=> (and (< x y) + (>= g (+ (- K x) (- y x))) + (>= g (- y x)) + (>= g (- y K))) + (inv x y K g))) + +(rule (=> + (and + (inv x y K g) + (= g1 (- g 1)) + (not (= y K)) + (or (and (= x y) + (= x1 (ite (> x K) (- x 1) (+ x 1))) + (= y1 x1)) + (and (not (= x y)) + (= x1 x) + (= y1 (- y 1)))) + ) + (inv x1 y1 K g1) + ) +) + +(rule (=> + (and + (inv x y K g) + (not (= y K)) (not (> g 0))) + fail)) + +(query fail) + + + +; x y K +;--------------------------------------> + + +; x K y +;--------------------------------------> + + +; K x y +;--------------------------------------> diff --git a/bench_horn/three_dots_moving_3.smt2 b/bench_horn/three_dots_moving_3.smt2 new file mode 100644 index 000000000..e06959355 --- /dev/null +++ b/bench_horn/three_dots_moving_3.smt2 @@ -0,0 +1,38 @@ +(declare-rel inv (Int Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) +(declare-var g Int) +(declare-var g1 Int) +(declare-var K Int) + +(declare-rel fail ()) + +(rule (=> (and + (>= g (- K x)) + (>= g (- x K)) + (>= g (- K y)) + (>= g (- y K))) + (inv x y K g))) + +(rule (=> + (and + (inv x y K g) + (= g1 (- g 1)) + (or (not (= x K)) (not (= y K))) + (= x1 (ite (> x K) (- x 1) (ite (< x K) (+ x 1) x))) + (= y1 (ite (> y K) (- y 1) (ite (< y K) (+ y 1) y))) + ) + (inv x1 y1 K g1) + ) +) + +(rule (=> + (and + (inv x y K g) + (or (not (= x K)) (not (= y K))) (not (> g 0))) + fail)) + +(query fail) + diff --git a/bench_horn/w2.smt2 b/bench_horn/w2.smt2 index bf2059662..9a9e69bc6 100644 --- a/bench_horn/w2.smt2 +++ b/bench_horn/w2.smt2 @@ -11,7 +11,7 @@ (rule (=> (and (itp x m n) - (< x1 n) + (< x n) (= x1 (ite (= m 1) (+ x 1) x)) ) (itp x1 m n) diff --git a/bench_horn/yz_plus_minus_1.smt2 b/bench_horn/yz_plus_minus_1.smt2 new file mode 100644 index 000000000..426b22807 --- /dev/null +++ b/bench_horn/yz_plus_minus_1.smt2 @@ -0,0 +1,27 @@ +(declare-rel inv (Int Int Int)) +(declare-var x Int) +(declare-var y Int) +(declare-var z Int) +(declare-var x1 Int) +(declare-var y1 Int) +(declare-var z1 Int) + +(declare-rel err ()) + +(rule (inv 0 0 0)) + +(rule (=> + (and + (inv x y z) + (< x 100) + (= x1 (+ x y)) + (= y1 (+ z 1)) + (= z1 (- y 1)) + ) + (inv x1 y1 z1) + ) +) + +(rule (=> (and (inv x y z) (not (>= x 0))) err)) + +(query err) diff --git a/bench_horn/yz_plus_minus_2.smt2 b/bench_horn/yz_plus_minus_2.smt2 new file mode 100644 index 000000000..ab162ca13 --- /dev/null +++ b/bench_horn/yz_plus_minus_2.smt2 @@ -0,0 +1,30 @@ +(declare-rel inv (Int Int Int Int)) +(declare-var x Int) +(declare-var y Int) +(declare-var z Int) +(declare-var w Int) +(declare-var x1 Int) +(declare-var y1 Int) +(declare-var z1 Int) +(declare-var w1 Int) + +(declare-rel err ()) + +(rule (inv 0 0 0 0)) + +(rule (=> + (and + (inv x y z w) + (< x 10000) + (= x1 (+ x w)) + (= y1 (+ z 1)) + (= z1 (- w 1)) + (= w1 (+ y 1)) + ) + (inv x1 y1 z1 w1) + ) +) + +(rule (=> (and (inv x y z w) (not (>= x 0))) err)) + +(query err) From 5366c61d0d50210b2e595cf72e5af0ce0dd259ce Mon Sep 17 00:00:00 2001 From: Sam Kaufman Date: Mon, 19 Feb 2018 15:27:22 -0500 Subject: [PATCH 056/236] Rebuilt Windows benchmarks --- .gitignore | 14 + tools/deep_bench/README.md | 10 + tools/deep_bench/linux/benchmark-freqhorn.py | 179 ++ tools/deep_bench/linux/packer/provision.sh | 20 + tools/deep_bench/linux/packer/worker.json | 46 + .../linux/run-freqhorn-benchmarks.sh | 63 + tools/deep_bench/linux/terraform/cluster.tf | 164 ++ tools/deep_bench/scripts/ec2-inv.py | 1701 +++++++++++++++++ .../scripts/mcmcify}/mcmcify.py | 9 +- .../scripts/mcmcify}/smtlibparser.py | 0 tools/deep_bench/scripts/merge-times.py | 77 + tools/deep_bench/windows/ansible/README.md | 2 + .../windows/ansible/group_vars/windows.yml | 13 + tools/deep_bench/windows/ansible/inventory | 9 + tools/deep_bench/windows/ansible/playbook.yml | 9 + .../windows/ansible/roles/base/tasks/main.yml | 38 + .../benchscripts/files}/benchmark-others.py | 176 +- .../ansible/roles/benchscripts/tasks/main.yml | 32 + .../roles/cygwin-sshd/handlers/main.yml | 6 + .../ansible/roles/cygwin-sshd/tasks/main.yml | 71 + .../windows/ansible/roles/ice/tasks/main.yml | 34 + .../windows/ansible/roles/mcmc/tasks/main.yml | 34 + .../ansible/roles/spacer/tasks/main.yml | 26 + tools/deep_bench/windows/files/.gitempty | 0 .../windows/run-other-benchmarks.sh | 31 + tools/deep_bench/windows/start-cluster.sh | 20 + .../deep_bench/windows/terraform/userdata.tpl | 9 + .../windows/terraform/win-cluster.tf | 211 ++ 28 files changed, 2940 insertions(+), 64 deletions(-) create mode 100644 tools/deep_bench/README.md create mode 100755 tools/deep_bench/linux/benchmark-freqhorn.py create mode 100755 tools/deep_bench/linux/packer/provision.sh create mode 100644 tools/deep_bench/linux/packer/worker.json create mode 100755 tools/deep_bench/linux/run-freqhorn-benchmarks.sh create mode 100644 tools/deep_bench/linux/terraform/cluster.tf create mode 100755 tools/deep_bench/scripts/ec2-inv.py rename tools/{deep => deep_bench/scripts/mcmcify}/mcmcify.py (97%) rename tools/{deep => deep_bench/scripts/mcmcify}/smtlibparser.py (100%) create mode 100755 tools/deep_bench/scripts/merge-times.py create mode 100644 tools/deep_bench/windows/ansible/README.md create mode 100644 tools/deep_bench/windows/ansible/group_vars/windows.yml create mode 100644 tools/deep_bench/windows/ansible/inventory create mode 100644 tools/deep_bench/windows/ansible/playbook.yml create mode 100644 tools/deep_bench/windows/ansible/roles/base/tasks/main.yml rename tools/{deep => deep_bench/windows/ansible/roles/benchscripts/files}/benchmark-others.py (56%) mode change 100644 => 100755 create mode 100644 tools/deep_bench/windows/ansible/roles/benchscripts/tasks/main.yml create mode 100644 tools/deep_bench/windows/ansible/roles/cygwin-sshd/handlers/main.yml create mode 100644 tools/deep_bench/windows/ansible/roles/cygwin-sshd/tasks/main.yml create mode 100644 tools/deep_bench/windows/ansible/roles/ice/tasks/main.yml create mode 100644 tools/deep_bench/windows/ansible/roles/mcmc/tasks/main.yml create mode 100644 tools/deep_bench/windows/ansible/roles/spacer/tasks/main.yml create mode 100644 tools/deep_bench/windows/files/.gitempty create mode 100755 tools/deep_bench/windows/run-other-benchmarks.sh create mode 100755 tools/deep_bench/windows/start-cluster.sh create mode 100644 tools/deep_bench/windows/terraform/userdata.tpl create mode 100644 tools/deep_bench/windows/terraform/win-cluster.tf diff --git a/.gitignore b/.gitignore index 454577180..f0b0b6bad 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,17 @@ /llvm-seahorn/ /seahorn-llvm/ /gtags.files + +.mypy_cache +.vscode +.tags +.tags1 +terraform.tfstate +terraform.tfstate.backup* +tools/deep_bench/windows/files/ice.zip +tools/deep_bench/windows/files/mcmc.zip +tools/deep_bench/**/.terraform +tools/deep_bench/**/playbook.retry +tools/deep_bench/**/playbook.retry +tools/deep_bench/windows/clusterjobs.log +tools/deep_bench/windows/out-*.tar.gz \ No newline at end of file diff --git a/tools/deep_bench/README.md b/tools/deep_bench/README.md new file mode 100644 index 000000000..53fbd3ee9 --- /dev/null +++ b/tools/deep_bench/README.md @@ -0,0 +1,10 @@ +# Running Benchmarks on an AWS Cluster + +- set the `AWS_REGION` environment variable (e.g. `us-west-1` or `us-east-1`) + +## Development + +If doing development, save money by: + +- setting `TF_VAR_instance_type` to `t2.small` +- setting `TF_VAR_cluster_size` to `1` \ No newline at end of file diff --git a/tools/deep_bench/linux/benchmark-freqhorn.py b/tools/deep_bench/linux/benchmark-freqhorn.py new file mode 100755 index 000000000..ded7bcbca --- /dev/null +++ b/tools/deep_bench/linux/benchmark-freqhorn.py @@ -0,0 +1,179 @@ +#!/usr/bin/env python +from __future__ import print_function +import os +import re +import sys +import math +import json +import argparse +import tempfile +import subprocess32 +import traceback +from itertools import product, izip + + +SUCCESS_ITERS_RE = re.compile(r'\s*\-+>\s+Success after (.*) iterations\s*') +ELAPSED_RE = re.compile(r'\s*elapsed: (.*)s\s*') +PROCS_TO_TRY = [1, 4] + + +class NoSuccessException(Exception): + pass + + +def name_only(path): + """Returns just the file name. + + >>> name_only("alpha/filename.txt") + "filename" + """ + return os.path.splitext(os.path.split(path)[1])[0].lower() + + +def run_deephorn(example_path, proc_cnt, aggprune, logs_dir_path, timeout=600): + aggprune_arg = "0" + if aggprune: + aggprune_arg = "1" + cmd = os.getenv("BENCH_MPIRUN", "/usr/bin/mpirun") + proc = subprocess32.Popen( + [cmd, "-mca", "btl", "^openib", "-n", str(proc_cnt), + "-output-filename", os.path.join(logs_dir_path, "log"), + "../../build/tools/deep/deephorn", "2000000", "1", "1", + aggprune_arg, example_path], + env={"TMPDIR": "/tmp", "PATH": os.getenv("PATH")}) + try: + retcode = proc.wait(timeout=timeout) + except subprocess32.TimeoutExpired: + # Make sure we clean up if FreqHorn hangs + proc.kill() + raise + if retcode != 0: + raise subprocess32.CalledProcessError(retcode, cmd) + + +def parse_log_dir_for_time(dirpath): + """Returns seconds if any log in `path` is successful. Raises otherwise.""" + iter_cnt, elapsed_time = None, float('Inf') + for filename in os.listdir(dirpath): + with open(os.path.join(dirpath, filename), 'r') as f: + for line in f.readlines()[-5:]: + elapsed_match = ELAPSED_RE.match(line) + iters_match = SUCCESS_ITERS_RE.match(line) + if elapsed_match: + elapsed_fnd = float(elapsed_match.group(1)) + elapsed_time = min(elapsed_time, elapsed_fnd) + if iters_match: + iters_fnd = int(iters_match.group(1)) + if iter_cnt is None or iters_fnd < iter_cnt: + iter_cnt = iters_fnd + if iter_cnt is not None and not math.isinf(elapsed_time): + return iter_cnt, elapsed_time + raise NoSuccessException("no success in " + dirpath) + + +def hyperps(): + return product(PROCS_TO_TRY, [True, False]) + + +def hyperp_names(): + for p, a in hyperps(): + aname = "agg_off" + if a: + aname = "agg_on" + yield str(p) + "," + aname + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("SMTPATHS", nargs='+') + parser.add_argument('--hist', action='store_true', + help="show histogram of times (only one smt)") + parser.add_argument("-i", "--iters", default=100, type=int, + help="the number of times to run deephorn per pcnt") + parser.add_argument("-o", "--outdir", type=str, + help="path to directory to save times and/or histograms") + parser.add_argument("--logdir", type=str, + help="path to directory to save logs") + parser.add_argument("--hyper", type=str) + parser.add_argument("-v", "--verbose", action="store_true") + args = parser.parse_args() + + if args.hist and len(args.SMTPATHS) > 1: + print("--hist only compatible with a single path", file=sys.stderr) + return 1 + + if args.logdir and os.path.exists(args.logdir): + print("logdir already exists", file=sys.stderr) + return 2 + + if args.outdir and not os.path.exists(args.outdir): + os.makedirs(args.outdir) + + times = {s: {k: [] for k in hyperp_names()} for s in args.SMTPATHS} + iter_cnts = {s: {k: [] for k in hyperp_names()} for s in args.SMTPATHS} + unsuccess_cnts = {s: {k: 0 for k in hyperp_names()} for s in args.SMTPATHS} + try: + if args.logdir: + tmp_dir = args.logdir + else: + tmp_dir = tempfile.mkdtemp() + for iter_ in xrange(args.iters): + for spath in args.SMTPATHS: + for (pcnt, aggprune), hypername in izip(hyperps(), hyperp_names()): + if args.hyper and args.hyper != hypername: + continue + log_path = os.path.join(tmp_dir, name_only(spath), hypername, str(iter_)) + if args.verbose: + print("logs:", spath, "=", log_path) + os.makedirs(log_path) + + try: + run_deephorn(spath, pcnt, aggprune, log_path) + except subprocess32.TimeoutExpired: + print("Timeout expired; marking as fail", file=sys.stderr) + unsuccess_cnts[spath][hypername] += 1 + continue + except subprocess32.CalledProcessError: + traceback.print_exc() + continue + + try: + i, t = parse_log_dir_for_time(log_path) + times[spath][hypername].append(t) + iter_cnts[spath][hypername].append(i) + except NoSuccessException: + unsuccess_cnts[spath][hypername] += 1 + + # Checkpoint the times after each benchmark + if args.outdir: + with open(os.path.join(args.outdir, "times.json"), 'w') as f: + json.dump({'times': times, + 'iterCnts': iter_cnts, + 'unsuccessCnts': unsuccess_cnts}, f) + except KeyboardInterrupt: + pass + + # Print the times + for smtpath in times.iterkeys(): + subtime, subiters = times[smtpath], iter_cnts[smtpath] + asterisk = ":" + total_unsuc = sum(unsuccess_cnts[smtpath].values()) + if total_unsuc: + asterisk = " [unsuccessful " + str(total_unsuc) + "]:" + print(smtpath + asterisk) + for pcnt, t in subtime.iteritems(): + print("\t" + str(pcnt) + " process(es) took: " + str(sorted(t))) + for pcnt, t in subiters.iteritems(): + print("\t" + str(pcnt) + " process(es) iterated: " + str(sorted(t))) + + # Draw histogram + if args.hist: + import matplotlib.pyplot as plt + plt.hist(times.values()[0].values()) + plt.show() + + +if __name__ == '__main__': + ret = main() + if ret: + sys.exit(ret) diff --git a/tools/deep_bench/linux/packer/provision.sh b/tools/deep_bench/linux/packer/provision.sh new file mode 100755 index 000000000..ad6fdb5e2 --- /dev/null +++ b/tools/deep_bench/linux/packer/provision.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +sudo apt-get update +sudo apt install -y cmake clang clang-c++ libboost-dev libboost-system-dev \ + libboost-mpi-dev openmpi-common openmpi-bin subversion htop \ + python-subprocess32 libgmp-dev libomp-dev awscli + +sudo update-alternatives --install /usr/bin/cc cc /usr/bin/clang 100 +sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang++ 100 + +# aeval will be copied from local +# git clone -b rnd-parallel https://github.com/grigoryfedyukovich/aeval.git /home/ubuntu/aeval +mkdir /home/ubuntu/out && +cd /home/ubuntu/aeval && +rm -rf build && +mkdir build && +cd build && +cmake .. && +make && +make diff --git a/tools/deep_bench/linux/packer/worker.json b/tools/deep_bench/linux/packer/worker.json new file mode 100644 index 000000000..af9945729 --- /dev/null +++ b/tools/deep_bench/linux/packer/worker.json @@ -0,0 +1,46 @@ +{ + "variables": { + "aws_access_key": "", + "aws_secret_key": "", + "aws_region": "", + "aws_vpc_id": "", + "aws_subnet_id": "" + }, + "builders": [{ + "type": "amazon-ebs", + "access_key": "{{user `aws_access_key`}}", + "secret_key": "{{user `aws_secret_key`}}", + "region": "{{user `aws_region`}}", + "source_ami": "ami-80861296", + "instance_type": "m4.xlarge", + "ssh_username": "ubuntu", + "ami_name": "freqhorn-benchmark-worker {{timestamp}}", + "vpc_id": "{{user `aws_vpc_id`}}", + "subnet_id": "{{user `aws_subnet_id`}}", + "spot_price": 0.80, + "launch_block_device_mappings": [{ + "device_name": "/dev/sda1", + "volume_size": 13, + "delete_on_termination": true + }], + "tags": { + "Project": "FreqHorn" + } + }], + "provisioners": [ + { + "type": "shell", + "inline": ["mkdir /home/ubuntu/aeval"] + }, + { + "type": "file", + "source": "../../../", + "destination": "/home/ubuntu/aeval" + }, + { + "type": "shell", + "script": "provision.sh", + "pause_before": "30s" + } + ] +} diff --git a/tools/deep_bench/linux/run-freqhorn-benchmarks.sh b/tools/deep_bench/linux/run-freqhorn-benchmarks.sh new file mode 100755 index 000000000..0252d7351 --- /dev/null +++ b/tools/deep_bench/linux/run-freqhorn-benchmarks.sh @@ -0,0 +1,63 @@ +#!/usr/bin/env bash + +set -x + +cd terraform || exit 1 +terraform apply || exit 1 +cd .. + +echo "" +echo " Wait for the cluster to be up and running (not initializing)." +echo " Then hit Enter to continue." +echo "" +read + +# Get IP addresses +cd terraform || exit 1 +terraform refresh || exit 1 +SFR_ID=`jq -r ".modules[0].resources.\"aws_spot_fleet_request.fleet_req\".primary.id" terraform.tfstate` +INSTANCE_IDS=`aws ec2 describe-spot-fleet-instances --spot-fleet-request-id $SFR_ID | jq -r ".ActiveInstances[]| +select(.InstanceHealth==\"healthy\")|.InstanceId" | awk '{$1=$1};1'` +HOSTS=`aws ec2 describe-instances --instance-ids $INSTANCE_IDS | jq -r '.Reservations[0].Instances[].PublicIpAddress' | sed -e 's/^/1\/ubuntu@/' | xargs echo -n | tr ' ' ','` +echo $HOSTS +cd .. + +# Disable StrictHostKeyChecking temporarily. (So hacky.) +touch ~/.ssh/config +cp ~/.ssh/config ~/.ssh/config.backup +(echo 'Host *'; echo StrictHostKeyChecking no) >> ~/.ssh/config + +# Update pass: git pull, make, etc. +# parallel --nonall --sshlogin $HOSTS \ +# "git config --global user.email \"emrysk@gmail.com\" && " \ +# "git config --global user.name \"Sam Kaufman\" && " \ +# "cd /home/ubuntu/aeval && " \ +# "git clean -fd && " \ +# "git stash && " \ +# "git pull && " \ +# "git checkout rnd-parallel-master-slave && " \ +# "cd build && " \ +# "make" + +# TODO: rsync & re-build (instead of prior update pass) + +# Run the jobs +find ../../bench_horn/*.smt2 -exec basename {} .smt2 \; | \ +BENCH_MPIRUN=/usr/bin/mpirun parallel \ + --resume-failed \ + --joblog ./clusterjobs.log \ + --return "out-{1}-{2}-i{3}.tar.gz" \ + --cleanup \ + -a - \ + --env BENCH_MPIRUN \ + --sshlogin $HOSTS \ + "rm -rf out && " \ + "mkdir out && " \ + "cd /home/ubuntu/aeval/tools/deep_bench && " \ + "./benchmark-freqhorn.py -v -i 1 --logdir /home/ubuntu/out/benchlogs -o /home/ubuntu/out/ --hyper {2} /home/ubuntu/aeval/bench_horn/{1}.smt2 &> /home/ubuntu/out/std.log ; " \ + "cd /home/ubuntu ; " \ + "tar -zcf out-{1}-{2}-i{3}.tar.gz out/ ;" \ + ::: 2,agg_on 2,agg_off 5,agg_on 5,agg_off ::: {0..9} + +# Remove the disabling of StrictHostKeyChecking +mv ~/.ssh/config.backup ~/.ssh/config diff --git a/tools/deep_bench/linux/terraform/cluster.tf b/tools/deep_bench/linux/terraform/cluster.tf new file mode 100644 index 000000000..77f8cf69c --- /dev/null +++ b/tools/deep_bench/linux/terraform/cluster.tf @@ -0,0 +1,164 @@ +variable "cluster_size" { + type = "int" + default = 20 +} + +provider "aws" {} + +# +# Simple VPC for instance +# +resource "aws_vpc" "main" { + cidr_block = "192.168.0.0/16" + + tags { + Name = "BenchmarkFreqHorn-VPC" + } +} + +resource "aws_subnet" "main" { + vpc_id = "${aws_vpc.main.id}" + availability_zone = "us-east-1e" + cidr_block = "192.168.1.0/24" + map_public_ip_on_launch = true + + tags { + Name = "BenchmarkFreqHorn-Subnet" + } +} + +resource "aws_internet_gateway" "igw" { + vpc_id = "${aws_vpc.main.id}" + + tags { + Name = "BenchmarkFreqHorn-InternetGateway" + } +} + +resource "aws_route" "igw_route" { + route_table_id = "${aws_vpc.main.main_route_table_id}" + destination_cidr_block = "0.0.0.0/0" + gateway_id = "${aws_internet_gateway.igw.id}" +} + +resource "aws_security_group" "secgrp" { + name = "BenchmarkFreqHorn-SecGrp" + description = "Allow inbound SSH" + vpc_id = "${aws_vpc.main.id}" + + ingress { + from_port = 22 + to_port = 22 + protocol = "tcp" + cidr_blocks = ["0.0.0.0/0"] + } + + egress { + from_port = 0 + to_port = 0 + protocol = "-1" + cidr_blocks = ["0.0.0.0/0"] + } +} + +# +# Spot Fleet IAM +# +resource "aws_iam_role" "iam_fleet_role" { + name = "BenchmarkFreqHorn-IAMSpotFleetRole" + + assume_role_policy = <=2.24.0) you can choose a profile +using the --boto-profile command line argument (e.g. ec2.py --boto-profile prod) or using +the AWS_PROFILE variable: + + AWS_PROFILE=prod ansible-playbook -i ec2.py myplaybook.yml + +For more details, see: http://docs.pythonboto.org/en/latest/boto_config_tut.html + +When run against a specific host, this script returns the following variables: + - ec2_ami_launch_index + - ec2_architecture + - ec2_association + - ec2_attachTime + - ec2_attachment + - ec2_attachmentId + - ec2_block_devices + - ec2_client_token + - ec2_deleteOnTermination + - ec2_description + - ec2_deviceIndex + - ec2_dns_name + - ec2_eventsSet + - ec2_group_name + - ec2_hypervisor + - ec2_id + - ec2_image_id + - ec2_instanceState + - ec2_instance_type + - ec2_ipOwnerId + - ec2_ip_address + - ec2_item + - ec2_kernel + - ec2_key_name + - ec2_launch_time + - ec2_monitored + - ec2_monitoring + - ec2_networkInterfaceId + - ec2_ownerId + - ec2_persistent + - ec2_placement + - ec2_platform + - ec2_previous_state + - ec2_private_dns_name + - ec2_private_ip_address + - ec2_publicIp + - ec2_public_dns_name + - ec2_ramdisk + - ec2_reason + - ec2_region + - ec2_requester_id + - ec2_root_device_name + - ec2_root_device_type + - ec2_security_group_ids + - ec2_security_group_names + - ec2_shutdown_state + - ec2_sourceDestCheck + - ec2_spot_instance_request_id + - ec2_state + - ec2_state_code + - ec2_state_reason + - ec2_status + - ec2_subnet_id + - ec2_tenancy + - ec2_virtualization_type + - ec2_vpc_id + +These variables are pulled out of a boto.ec2.instance object. There is a lack of +consistency with variable spellings (camelCase and underscores) since this +just loops through all variables the object exposes. It is preferred to use the +ones with underscores when multiple exist. + +In addition, if an instance has AWS tags associated with it, each tag is a new +variable named: + - ec2_tag_[Key] = [Value] + +Security groups are comma-separated in 'ec2_security_group_ids' and +'ec2_security_group_names'. + +When destination_format and destination_format_tags are specified +the destination_format can be built from the instance tags and attributes. +The behavior will first check the user defined tags, then proceed to +check instance attributes, and finally if neither are found 'nil' will +be used instead. + +'my_instance': { + 'region': 'us-east-1', # attribute + 'availability_zone': 'us-east-1a', # attribute + 'private_dns_name': '172.31.0.1', # attribute + 'ec2_tag_deployment': 'blue', # tag + 'ec2_tag_clusterid': 'ansible', # tag + 'ec2_tag_Name': 'webserver', # tag + ... +} + +Inside of the ec2.ini file the following settings are specified: +... +destination_format: {0}-{1}-{2}-{3} +destination_format_tags: Name,clusterid,deployment,private_dns_name +... + +These settings would produce a destination_format as the following: +'webserver-ansible-blue-172.31.0.1' +''' + +# (c) 2012, Peter Sankauskas +# +# This file is part of Ansible, +# +# Ansible is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# Ansible is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Ansible. If not, see . + +###################################################################### + +import sys +import os +import argparse +import re +from time import time +import boto +from boto import ec2 +from boto import rds +from boto import elasticache +from boto import route53 +from boto import sts +import six + +from ansible.module_utils import ec2 as ec2_utils + +HAS_BOTO3 = False +try: + import boto3 # noqa + HAS_BOTO3 = True +except ImportError: + pass + +from six.moves import configparser +from collections import defaultdict + +try: + import json +except ImportError: + import simplejson as json + +DEFAULTS = { + 'all_elasticache_clusters': 'False', + 'all_elasticache_nodes': 'False', + 'all_elasticache_replication_groups': 'False', + 'all_instances': 'False', + 'all_rds_instances': 'False', + 'aws_access_key_id': None, + 'aws_secret_access_key': None, + 'aws_security_token': None, + 'boto_profile': None, + 'cache_max_age': '300', + 'cache_path': '~/.ansible/tmp', + 'destination_variable': 'public_dns_name', + 'elasticache': 'True', + 'eucalyptus': 'False', + 'eucalyptus_host': None, + 'expand_csv_tags': 'False', + 'group_by_ami_id': 'True', + 'group_by_availability_zone': 'True', + 'group_by_aws_account': 'False', + 'group_by_elasticache_cluster': 'True', + 'group_by_elasticache_engine': 'True', + 'group_by_elasticache_parameter_group': 'True', + 'group_by_elasticache_replication_group': 'True', + 'group_by_instance_id': 'True', + 'group_by_instance_state': 'False', + 'group_by_instance_type': 'True', + 'group_by_key_pair': 'True', + 'group_by_platform': 'True', + 'group_by_rds_engine': 'True', + 'group_by_rds_parameter_group': 'True', + 'group_by_region': 'True', + 'group_by_route53_names': 'True', + 'group_by_security_group': 'True', + 'group_by_tag_keys': 'True', + 'group_by_tag_none': 'True', + 'group_by_vpc_id': 'True', + 'hostname_variable': None, + 'iam_role': None, + 'include_rds_clusters': 'False', + 'nested_groups': 'False', + 'pattern_exclude': None, + 'pattern_include': None, + 'rds': 'False', + 'regions': 'all', + 'regions_exclude': 'us-gov-west-1, cn-north-1', + 'replace_dash_in_groups': 'True', + 'route53': 'False', + 'route53_excluded_zones': '', + 'route53_hostnames': None, + 'stack_filters': 'False', + 'vpc_destination_variable': 'ip_address' +} + + +class Ec2Inventory(object): + + def _empty_inventory(self): + return {"_meta": {"hostvars": {}}} + + def __init__(self): + ''' Main execution path ''' + + # Inventory grouped by instance IDs, tags, security groups, regions, + # and availability zones + self.inventory = self._empty_inventory() + + self.aws_account_id = None + + # Index of hostname (address) to instance ID + self.index = {} + + # Boto profile to use (if any) + self.boto_profile = None + + # AWS credentials. + self.credentials = {} + + # Read settings and parse CLI arguments + self.parse_cli_args() + self.read_settings() + + # Make sure that profile_name is not passed at all if not set + # as pre 2.24 boto will fall over otherwise + if self.boto_profile: + if not hasattr(boto.ec2.EC2Connection, 'profile_name'): + self.fail_with_error("boto version must be >= 2.24 to use profile") + + # Cache + if self.args.refresh_cache: + self.do_api_calls_update_cache() + elif not self.is_cache_valid(): + self.do_api_calls_update_cache() + + # Data to print + if self.args.host: + data_to_print = self.get_host_info() + + elif self.args.list: + # Display list of instances for inventory + if self.inventory == self._empty_inventory(): + data_to_print = self.get_inventory_from_cache() + else: + data_to_print = self.json_format_dict(self.inventory, True) + + print(data_to_print) + + def is_cache_valid(self): + ''' Determines if the cache files have expired, or if it is still valid ''' + + if os.path.isfile(self.cache_path_cache): + mod_time = os.path.getmtime(self.cache_path_cache) + current_time = time() + if (mod_time + self.cache_max_age) > current_time: + if os.path.isfile(self.cache_path_index): + return True + + return False + + def read_settings(self): + ''' Reads the settings from the ec2.ini file ''' + + scriptbasename = __file__ + scriptbasename = os.path.basename(scriptbasename) + scriptbasename = scriptbasename.replace('.py', '') + + defaults = { + 'ec2': { + 'ini_fallback': os.path.join(os.path.dirname(__file__), 'ec2.ini'), + 'ini_path': os.path.join(os.path.dirname(__file__), '%s.ini' % scriptbasename) + } + } + + if six.PY3: + config = configparser.ConfigParser(DEFAULTS) + else: + config = configparser.SafeConfigParser(DEFAULTS) + ec2_ini_path = os.environ.get('EC2_INI_PATH', defaults['ec2']['ini_path']) + ec2_ini_path = os.path.expanduser(os.path.expandvars(ec2_ini_path)) + + if not os.path.isfile(ec2_ini_path): + ec2_ini_path = os.path.expanduser(defaults['ec2']['ini_fallback']) + + if os.path.isfile(ec2_ini_path): + config.read(ec2_ini_path) + + # Add empty sections if they don't exist + try: + config.add_section('ec2') + except configparser.DuplicateSectionError: + pass + + try: + config.add_section('credentials') + except configparser.DuplicateSectionError: + pass + + # is eucalyptus? + self.eucalyptus = config.getboolean('ec2', 'eucalyptus') + self.eucalyptus_host = config.get('ec2', 'eucalyptus_host') + + # Regions + self.regions = [] + configRegions = config.get('ec2', 'regions') + if (configRegions == 'all'): + if self.eucalyptus_host: + self.regions.append(boto.connect_euca(host=self.eucalyptus_host).region.name, **self.credentials) + else: + configRegions_exclude = config.get('ec2', 'regions_exclude') + + for regionInfo in ec2.regions(): + if regionInfo.name not in configRegions_exclude: + self.regions.append(regionInfo.name) + else: + self.regions = configRegions.split(",") + if 'auto' in self.regions: + env_region = os.environ.get('AWS_REGION') + if env_region is None: + env_region = os.environ.get('AWS_DEFAULT_REGION') + self.regions = [env_region] + + # Destination addresses + self.destination_variable = config.get('ec2', 'destination_variable') + self.vpc_destination_variable = config.get('ec2', 'vpc_destination_variable') + self.hostname_variable = config.get('ec2', 'hostname_variable') + + if config.has_option('ec2', 'destination_format') and \ + config.has_option('ec2', 'destination_format_tags'): + self.destination_format = config.get('ec2', 'destination_format') + self.destination_format_tags = config.get('ec2', 'destination_format_tags').split(',') + else: + self.destination_format = None + self.destination_format_tags = None + + # Route53 + self.route53_enabled = config.getboolean('ec2', 'route53') + self.route53_hostnames = config.get('ec2', 'route53_hostnames') + + self.route53_excluded_zones = [] + self.route53_excluded_zones = [a for a in config.get('ec2', 'route53_excluded_zones').split(',') if a] + + # Include RDS instances? + self.rds_enabled = config.getboolean('ec2', 'rds') + + # Include RDS cluster instances? + self.include_rds_clusters = config.getboolean('ec2', 'include_rds_clusters') + + # Include ElastiCache instances? + self.elasticache_enabled = config.getboolean('ec2', 'elasticache') + + # Return all EC2 instances? + self.all_instances = config.getboolean('ec2', 'all_instances') + + # Instance states to be gathered in inventory. Default is 'running'. + # Setting 'all_instances' to 'yes' overrides this option. + ec2_valid_instance_states = [ + 'pending', + 'running', + 'shutting-down', + 'terminated', + 'stopping', + 'stopped' + ] + self.ec2_instance_states = [] + if self.all_instances: + self.ec2_instance_states = ec2_valid_instance_states + elif config.has_option('ec2', 'instance_states'): + for instance_state in config.get('ec2', 'instance_states').split(','): + instance_state = instance_state.strip() + if instance_state not in ec2_valid_instance_states: + continue + self.ec2_instance_states.append(instance_state) + else: + self.ec2_instance_states = ['running'] + + # Return all RDS instances? (if RDS is enabled) + self.all_rds_instances = config.getboolean('ec2', 'all_rds_instances') + + # Return all ElastiCache replication groups? (if ElastiCache is enabled) + self.all_elasticache_replication_groups = config.getboolean('ec2', 'all_elasticache_replication_groups') + + # Return all ElastiCache clusters? (if ElastiCache is enabled) + self.all_elasticache_clusters = config.getboolean('ec2', 'all_elasticache_clusters') + + # Return all ElastiCache nodes? (if ElastiCache is enabled) + self.all_elasticache_nodes = config.getboolean('ec2', 'all_elasticache_nodes') + + # boto configuration profile (prefer CLI argument then environment variables then config file) + self.boto_profile = self.args.boto_profile or \ + os.environ.get('AWS_PROFILE') or \ + config.get('ec2', 'boto_profile') + + # AWS credentials (prefer environment variables) + if not (self.boto_profile or os.environ.get('AWS_ACCESS_KEY_ID') or + os.environ.get('AWS_PROFILE')): + + aws_access_key_id = config.get('credentials', 'aws_access_key_id') + aws_secret_access_key = config.get('credentials', 'aws_secret_access_key') + aws_security_token = config.get('credentials', 'aws_security_token') + + if aws_access_key_id: + self.credentials = { + 'aws_access_key_id': aws_access_key_id, + 'aws_secret_access_key': aws_secret_access_key + } + if aws_security_token: + self.credentials['security_token'] = aws_security_token + + # Cache related + cache_dir = os.path.expanduser(config.get('ec2', 'cache_path')) + if self.boto_profile: + cache_dir = os.path.join(cache_dir, 'profile_' + self.boto_profile) + if not os.path.exists(cache_dir): + os.makedirs(cache_dir) + + cache_name = 'ansible-ec2' + cache_id = self.boto_profile or os.environ.get('AWS_ACCESS_KEY_ID', self.credentials.get('aws_access_key_id')) + if cache_id: + cache_name = '%s-%s' % (cache_name, cache_id) + cache_name += '-' + str(abs(hash(__file__)))[1:7] + self.cache_path_cache = os.path.join(cache_dir, "%s.cache" % cache_name) + self.cache_path_index = os.path.join(cache_dir, "%s.index" % cache_name) + self.cache_max_age = config.getint('ec2', 'cache_max_age') + + self.expand_csv_tags = config.getboolean('ec2', 'expand_csv_tags') + + # Configure nested groups instead of flat namespace. + self.nested_groups = config.getboolean('ec2', 'nested_groups') + + # Replace dash or not in group names + self.replace_dash_in_groups = config.getboolean('ec2', 'replace_dash_in_groups') + + # IAM role to assume for connection + self.iam_role = config.get('ec2', 'iam_role') + + # Configure which groups should be created. + + group_by_options = [a for a in DEFAULTS if a.startswith('group_by')] + for option in group_by_options: + setattr(self, option, config.getboolean('ec2', option)) + + # Do we need to just include hosts that match a pattern? + self.pattern_include = config.get('ec2', 'pattern_include') + if self.pattern_include: + self.pattern_include = re.compile(self.pattern_include) + + # Do we need to exclude hosts that match a pattern? + self.pattern_exclude = config.get('ec2', 'pattern_exclude') + if self.pattern_exclude: + self.pattern_exclude = re.compile(self.pattern_exclude) + + # Do we want to stack multiple filters? + self.stack_filters = config.getboolean('ec2', 'stack_filters') + + # Instance filters (see boto and EC2 API docs). Ignore invalid filters. + self.ec2_instance_filters = [] + + if config.has_option('ec2', 'instance_filters'): + filters = config.get('ec2', 'instance_filters') + + if self.stack_filters and '&' in filters: + self.fail_with_error("AND filters along with stack_filter enabled is not supported.\n") + + filter_sets = [f for f in filters.split(',') if f] + + for filter_set in filter_sets: + filters = {} + filter_set = filter_set.strip() + for instance_filter in filter_set.split("&"): + instance_filter = instance_filter.strip() + if not instance_filter or '=' not in instance_filter: + continue + filter_key, filter_value = [x.strip() for x in instance_filter.split('=', 1)] + if not filter_key: + continue + filters[filter_key] = filter_value + self.ec2_instance_filters.append(filters.copy()) + + def parse_cli_args(self): + ''' Command line argument processing ''' + + parser = argparse.ArgumentParser(description='Produce an Ansible Inventory file based on EC2') + parser.add_argument('--list', action='store_true', default=True, + help='List instances (default: True)') + parser.add_argument('--host', action='store', + help='Get all the variables about a specific instance') + parser.add_argument('--refresh-cache', action='store_true', default=False, + help='Force refresh of cache by making API requests to EC2 (default: False - use cache files)') + parser.add_argument('--profile', '--boto-profile', action='store', dest='boto_profile', + help='Use boto profile for connections to EC2') + self.args = parser.parse_args() + + def do_api_calls_update_cache(self): + ''' Do API calls to each region, and save data in cache files ''' + + if self.route53_enabled: + self.get_route53_records() + + for region in self.regions: + self.get_instances_by_region(region) + if self.rds_enabled: + self.get_rds_instances_by_region(region) + if self.elasticache_enabled: + self.get_elasticache_clusters_by_region(region) + self.get_elasticache_replication_groups_by_region(region) + if self.include_rds_clusters: + self.include_rds_clusters_by_region(region) + + self.write_to_cache(self.inventory, self.cache_path_cache) + self.write_to_cache(self.index, self.cache_path_index) + + def connect(self, region): + ''' create connection to api server''' + if self.eucalyptus: + conn = boto.connect_euca(host=self.eucalyptus_host, **self.credentials) + conn.APIVersion = '2010-08-31' + else: + conn = self.connect_to_aws(ec2, region) + return conn + + def boto_fix_security_token_in_profile(self, connect_args): + ''' monkey patch for boto issue boto/boto#2100 ''' + profile = 'profile ' + self.boto_profile + if boto.config.has_option(profile, 'aws_security_token'): + connect_args['security_token'] = boto.config.get(profile, 'aws_security_token') + return connect_args + + def connect_to_aws(self, module, region): + connect_args = self.credentials + + # only pass the profile name if it's set (as it is not supported by older boto versions) + if self.boto_profile: + connect_args['profile_name'] = self.boto_profile + self.boto_fix_security_token_in_profile(connect_args) + + if self.iam_role: + sts_conn = sts.connect_to_region(region, **connect_args) + role = sts_conn.assume_role(self.iam_role, 'ansible_dynamic_inventory') + connect_args['aws_access_key_id'] = role.credentials.access_key + connect_args['aws_secret_access_key'] = role.credentials.secret_key + connect_args['security_token'] = role.credentials.session_token + + conn = module.connect_to_region(region, **connect_args) + # connect_to_region will fail "silently" by returning None if the region name is wrong or not supported + if conn is None: + self.fail_with_error("region name: %s likely not supported, or AWS is down. connection to region failed." % region) + return conn + + def get_instances_by_region(self, region): + ''' Makes an AWS EC2 API call to the list of instances in a particular + region ''' + + try: + conn = self.connect(region) + reservations = [] + if self.ec2_instance_filters: + if self.stack_filters: + filters_dict = {} + for filters in self.ec2_instance_filters: + filters_dict.update(filters) + reservations.extend(conn.get_all_instances(filters=filters_dict)) + else: + for filters in self.ec2_instance_filters: + reservations.extend(conn.get_all_instances(filters=filters)) + else: + reservations = conn.get_all_instances() + + # Pull the tags back in a second step + # AWS are on record as saying that the tags fetched in the first `get_all_instances` request are not + # reliable and may be missing, and the only way to guarantee they are there is by calling `get_all_tags` + instance_ids = [] + for reservation in reservations: + instance_ids.extend([instance.id for instance in reservation.instances]) + + max_filter_value = 199 + tags = [] + for i in range(0, len(instance_ids), max_filter_value): + tags.extend(conn.get_all_tags(filters={'resource-type': 'instance', 'resource-id': instance_ids[i:i + max_filter_value]})) + + tags_by_instance_id = defaultdict(dict) + for tag in tags: + tags_by_instance_id[tag.res_id][tag.name] = tag.value + + if (not self.aws_account_id) and reservations: + self.aws_account_id = reservations[0].owner_id + + for reservation in reservations: + for instance in reservation.instances: + instance.tags = tags_by_instance_id[instance.id] + self.add_instance(instance, region) + + except boto.exception.BotoServerError as e: + if e.error_code == 'AuthFailure': + error = self.get_auth_error_message() + else: + backend = 'Eucalyptus' if self.eucalyptus else 'AWS' + error = "Error connecting to %s backend.\n%s" % (backend, e.message) + self.fail_with_error(error, 'getting EC2 instances') + + def tags_match_filters(self, tags): + ''' return True if given tags match configured filters ''' + if not self.ec2_instance_filters: + return True + + for filters in self.ec2_instance_filters: + for filter_name, filter_value in filters.items(): + if filter_name[:4] != 'tag:': + continue + filter_name = filter_name[4:] + if filter_name not in tags: + if self.stack_filters: + return False + continue + if isinstance(filter_value, list): + if self.stack_filters and tags[filter_name] not in filter_value: + return False + if not self.stack_filters and tags[filter_name] in filter_value: + return True + if isinstance(filter_value, six.string_types): + if self.stack_filters and tags[filter_name] != filter_value: + return False + if not self.stack_filters and tags[filter_name] == filter_value: + return True + + return self.stack_filters + + def get_rds_instances_by_region(self, region): + ''' Makes an AWS API call to the list of RDS instances in a particular + region ''' + + if not HAS_BOTO3: + self.fail_with_error("Working with RDS instances requires boto3 - please install boto3 and try again", + "getting RDS instances") + + client = ec2_utils.boto3_inventory_conn('client', 'rds', region, **self.credentials) + db_instances = client.describe_db_instances() + + try: + conn = self.connect_to_aws(rds, region) + if conn: + marker = None + while True: + instances = conn.get_all_dbinstances(marker=marker) + marker = instances.marker + for index, instance in enumerate(instances): + # Add tags to instances. + instance.arn = db_instances['DBInstances'][index]['DBInstanceArn'] + tags = client.list_tags_for_resource(ResourceName=instance.arn)['TagList'] + instance.tags = {} + for tag in tags: + instance.tags[tag['Key']] = tag['Value'] + if self.tags_match_filters(instance.tags): + self.add_rds_instance(instance, region) + if not marker: + break + except boto.exception.BotoServerError as e: + error = e.reason + + if e.error_code == 'AuthFailure': + error = self.get_auth_error_message() + elif e.error_code == "OptInRequired": + error = "RDS hasn't been enabled for this account yet. " \ + "You must either log in to the RDS service through the AWS console to enable it, " \ + "or set 'rds = False' in ec2.ini" + elif not e.reason == "Forbidden": + error = "Looks like AWS RDS is down:\n%s" % e.message + self.fail_with_error(error, 'getting RDS instances') + + def include_rds_clusters_by_region(self, region): + if not HAS_BOTO3: + self.fail_with_error("Working with RDS clusters requires boto3 - please install boto3 and try again", + "getting RDS clusters") + + client = ec2_utils.boto3_inventory_conn('client', 'rds', region, **self.credentials) + + marker, clusters = '', [] + while marker is not None: + resp = client.describe_db_clusters(Marker=marker) + clusters.extend(resp["DBClusters"]) + marker = resp.get('Marker', None) + + account_id = boto.connect_iam().get_user().arn.split(':')[4] + c_dict = {} + for c in clusters: + # remove these datetime objects as there is no serialisation to json + # currently in place and we don't need the data yet + if 'EarliestRestorableTime' in c: + del c['EarliestRestorableTime'] + if 'LatestRestorableTime' in c: + del c['LatestRestorableTime'] + + if not self.ec2_instance_filters: + matches_filter = True + else: + matches_filter = False + + try: + # arn:aws:rds:::: + tags = client.list_tags_for_resource( + ResourceName='arn:aws:rds:' + region + ':' + account_id + ':cluster:' + c['DBClusterIdentifier']) + c['Tags'] = tags['TagList'] + + if self.ec2_instance_filters: + for filters in self.ec2_instance_filters: + for filter_key, filter_values in filters.items(): + # get AWS tag key e.g. tag:env will be 'env' + tag_name = filter_key.split(":", 1)[1] + # Filter values is a list (if you put multiple values for the same tag name) + matches_filter = any(d['Key'] == tag_name and d['Value'] in filter_values for d in c['Tags']) + + if matches_filter: + # it matches a filter, so stop looking for further matches + break + + if matches_filter: + break + + except Exception as e: + if e.message.find('DBInstanceNotFound') >= 0: + # AWS RDS bug (2016-01-06) means deletion does not fully complete and leave an 'empty' cluster. + # Ignore errors when trying to find tags for these + pass + + # ignore empty clusters caused by AWS bug + if len(c['DBClusterMembers']) == 0: + continue + elif matches_filter: + c_dict[c['DBClusterIdentifier']] = c + + self.inventory['db_clusters'] = c_dict + + def get_elasticache_clusters_by_region(self, region): + ''' Makes an AWS API call to the list of ElastiCache clusters (with + nodes' info) in a particular region.''' + + # ElastiCache boto module doesn't provide a get_all_instances method, + # that's why we need to call describe directly (it would be called by + # the shorthand method anyway...) + try: + conn = self.connect_to_aws(elasticache, region) + if conn: + # show_cache_node_info = True + # because we also want nodes' information + response = conn.describe_cache_clusters(None, None, None, True) + + except boto.exception.BotoServerError as e: + error = e.reason + + if e.error_code == 'AuthFailure': + error = self.get_auth_error_message() + elif e.error_code == "OptInRequired": + error = "ElastiCache hasn't been enabled for this account yet. " \ + "You must either log in to the ElastiCache service through the AWS console to enable it, " \ + "or set 'elasticache = False' in ec2.ini" + elif not e.reason == "Forbidden": + error = "Looks like AWS ElastiCache is down:\n%s" % e.message + self.fail_with_error(error, 'getting ElastiCache clusters') + + try: + # Boto also doesn't provide wrapper classes to CacheClusters or + # CacheNodes. Because of that we can't make use of the get_list + # method in the AWSQueryConnection. Let's do the work manually + clusters = response['DescribeCacheClustersResponse']['DescribeCacheClustersResult']['CacheClusters'] + + except KeyError as e: + error = "ElastiCache query to AWS failed (unexpected format)." + self.fail_with_error(error, 'getting ElastiCache clusters') + + for cluster in clusters: + self.add_elasticache_cluster(cluster, region) + + def get_elasticache_replication_groups_by_region(self, region): + ''' Makes an AWS API call to the list of ElastiCache replication groups + in a particular region.''' + + # ElastiCache boto module doesn't provide a get_all_instances method, + # that's why we need to call describe directly (it would be called by + # the shorthand method anyway...) + try: + conn = self.connect_to_aws(elasticache, region) + if conn: + response = conn.describe_replication_groups() + + except boto.exception.BotoServerError as e: + error = e.reason + + if e.error_code == 'AuthFailure': + error = self.get_auth_error_message() + if not e.reason == "Forbidden": + error = "Looks like AWS ElastiCache [Replication Groups] is down:\n%s" % e.message + self.fail_with_error(error, 'getting ElastiCache clusters') + + try: + # Boto also doesn't provide wrapper classes to ReplicationGroups + # Because of that we can't make use of the get_list method in the + # AWSQueryConnection. Let's do the work manually + replication_groups = response['DescribeReplicationGroupsResponse']['DescribeReplicationGroupsResult']['ReplicationGroups'] + + except KeyError as e: + error = "ElastiCache [Replication Groups] query to AWS failed (unexpected format)." + self.fail_with_error(error, 'getting ElastiCache clusters') + + for replication_group in replication_groups: + self.add_elasticache_replication_group(replication_group, region) + + def get_auth_error_message(self): + ''' create an informative error message if there is an issue authenticating''' + errors = ["Authentication error retrieving ec2 inventory."] + if None in [os.environ.get('AWS_ACCESS_KEY_ID'), os.environ.get('AWS_SECRET_ACCESS_KEY')]: + errors.append(' - No AWS_ACCESS_KEY_ID or AWS_SECRET_ACCESS_KEY environment vars found') + else: + errors.append(' - AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY environment vars found but may not be correct') + + boto_paths = ['/etc/boto.cfg', '~/.boto', '~/.aws/credentials'] + boto_config_found = [p for p in boto_paths if os.path.isfile(os.path.expanduser(p))] + if len(boto_config_found) > 0: + errors.append(" - Boto configs found at '%s', but the credentials contained may not be correct" % ', '.join(boto_config_found)) + else: + errors.append(" - No Boto config found at any expected location '%s'" % ', '.join(boto_paths)) + + return '\n'.join(errors) + + def fail_with_error(self, err_msg, err_operation=None): + '''log an error to std err for ansible-playbook to consume and exit''' + if err_operation: + err_msg = 'ERROR: "{err_msg}", while: {err_operation}'.format( + err_msg=err_msg, err_operation=err_operation) + sys.stderr.write(err_msg) + sys.exit(1) + + def get_instance(self, region, instance_id): + conn = self.connect(region) + + reservations = conn.get_all_instances([instance_id]) + for reservation in reservations: + for instance in reservation.instances: + return instance + + def add_instance(self, instance, region): + ''' Adds an instance to the inventory and index, as long as it is + addressable ''' + + # Only return instances with desired instance states + if instance.state not in self.ec2_instance_states: + return + + # Select the best destination address + # When destination_format and destination_format_tags are specified + # the following code will attempt to find the instance tags first, + # then the instance attributes next, and finally if neither are found + # assign nil for the desired destination format attribute. + if self.destination_format and self.destination_format_tags: + dest_vars = [] + inst_tags = getattr(instance, 'tags') + for tag in self.destination_format_tags: + if tag in inst_tags: + dest_vars.append(inst_tags[tag]) + elif hasattr(instance, tag): + dest_vars.append(getattr(instance, tag)) + else: + dest_vars.append('nil') + + dest = self.destination_format.format(*dest_vars) + elif instance.subnet_id: + dest = getattr(instance, self.vpc_destination_variable, None) + if dest is None: + dest = getattr(instance, 'tags').get(self.vpc_destination_variable, None) + else: + dest = getattr(instance, self.destination_variable, None) + if dest is None: + dest = getattr(instance, 'tags').get(self.destination_variable, None) + + if not dest: + # Skip instances we cannot address (e.g. private VPC subnet) + return + + # Set the inventory name + hostname = None + if self.hostname_variable: + if self.hostname_variable.startswith('tag_'): + hostname = instance.tags.get(self.hostname_variable[4:], None) + else: + hostname = getattr(instance, self.hostname_variable) + + # set the hostname from route53 + if self.route53_enabled and self.route53_hostnames: + route53_names = self.get_instance_route53_names(instance) + for name in route53_names: + if name.endswith(self.route53_hostnames): + hostname = name + + # If we can't get a nice hostname, use the destination address + if not hostname: + hostname = dest + # to_safe strips hostname characters like dots, so don't strip route53 hostnames + elif self.route53_enabled and self.route53_hostnames and hostname.endswith(self.route53_hostnames): + hostname = hostname.lower() + else: + hostname = self.to_safe(hostname).lower() + + # if we only want to include hosts that match a pattern, skip those that don't + if self.pattern_include and not self.pattern_include.match(hostname): + return + + # if we need to exclude hosts that match a pattern, skip those + if self.pattern_exclude and self.pattern_exclude.match(hostname): + return + + # Add to index + self.index[hostname] = [region, instance.id] + + # Inventory: Group by instance ID (always a group of 1) + if self.group_by_instance_id: + self.inventory[instance.id] = [hostname] + if self.nested_groups: + self.push_group(self.inventory, 'instances', instance.id) + + # Inventory: Group by region + if self.group_by_region: + self.push(self.inventory, region, hostname) + if self.nested_groups: + self.push_group(self.inventory, 'regions', region) + + # Inventory: Group by availability zone + if self.group_by_availability_zone: + self.push(self.inventory, instance.placement, hostname) + if self.nested_groups: + if self.group_by_region: + self.push_group(self.inventory, region, instance.placement) + self.push_group(self.inventory, 'zones', instance.placement) + + # Inventory: Group by Amazon Machine Image (AMI) ID + if self.group_by_ami_id: + ami_id = self.to_safe(instance.image_id) + self.push(self.inventory, ami_id, hostname) + if self.nested_groups: + self.push_group(self.inventory, 'images', ami_id) + + # Inventory: Group by instance type + if self.group_by_instance_type: + type_name = self.to_safe('type_' + instance.instance_type) + self.push(self.inventory, type_name, hostname) + if self.nested_groups: + self.push_group(self.inventory, 'types', type_name) + + # Inventory: Group by instance state + if self.group_by_instance_state: + state_name = self.to_safe('instance_state_' + instance.state) + self.push(self.inventory, state_name, hostname) + if self.nested_groups: + self.push_group(self.inventory, 'instance_states', state_name) + + # Inventory: Group by platform + if self.group_by_platform: + if instance.platform: + platform = self.to_safe('platform_' + instance.platform) + else: + platform = self.to_safe('platform_undefined') + self.push(self.inventory, platform, hostname) + if self.nested_groups: + self.push_group(self.inventory, 'platforms', platform) + + # Inventory: Group by key pair + if self.group_by_key_pair and instance.key_name: + key_name = self.to_safe('key_' + instance.key_name) + self.push(self.inventory, key_name, hostname) + if self.nested_groups: + self.push_group(self.inventory, 'keys', key_name) + + # Inventory: Group by VPC + if self.group_by_vpc_id and instance.vpc_id: + vpc_id_name = self.to_safe('vpc_id_' + instance.vpc_id) + self.push(self.inventory, vpc_id_name, hostname) + if self.nested_groups: + self.push_group(self.inventory, 'vpcs', vpc_id_name) + + # Inventory: Group by security group + if self.group_by_security_group: + try: + for group in instance.groups: + key = self.to_safe("security_group_" + group.name) + self.push(self.inventory, key, hostname) + if self.nested_groups: + self.push_group(self.inventory, 'security_groups', key) + except AttributeError: + self.fail_with_error('\n'.join(['Package boto seems a bit older.', + 'Please upgrade boto >= 2.3.0.'])) + + # Inventory: Group by AWS account ID + if self.group_by_aws_account: + self.push(self.inventory, self.aws_account_id, hostname) + if self.nested_groups: + self.push_group(self.inventory, 'accounts', self.aws_account_id) + + # Inventory: Group by tag keys + if self.group_by_tag_keys: + for k, v in instance.tags.items(): + if self.expand_csv_tags and v and ',' in v: + values = map(lambda x: x.strip(), v.split(',')) + else: + values = [v] + + for v in values: + if v: + key = self.to_safe("tag_" + k + "=" + v) + else: + key = self.to_safe("tag_" + k) + self.push(self.inventory, key, hostname) + if self.nested_groups: + self.push_group(self.inventory, 'tags', self.to_safe("tag_" + k)) + if v: + self.push_group(self.inventory, self.to_safe("tag_" + k), key) + + # Inventory: Group by Route53 domain names if enabled + if self.route53_enabled and self.group_by_route53_names: + route53_names = self.get_instance_route53_names(instance) + for name in route53_names: + self.push(self.inventory, name, hostname) + if self.nested_groups: + self.push_group(self.inventory, 'route53', name) + + # Global Tag: instances without tags + if self.group_by_tag_none and len(instance.tags) == 0: + self.push(self.inventory, 'tag_none', hostname) + if self.nested_groups: + self.push_group(self.inventory, 'tags', 'tag_none') + + # Global Tag: tag all EC2 instances + self.push(self.inventory, 'ec2', hostname) + + self.inventory["_meta"]["hostvars"][hostname] = self.get_host_info_dict_from_instance(instance) + self.inventory["_meta"]["hostvars"][hostname]['ansible_host'] = dest + + def add_rds_instance(self, instance, region): + ''' Adds an RDS instance to the inventory and index, as long as it is + addressable ''' + + # Only want available instances unless all_rds_instances is True + if not self.all_rds_instances and instance.status != 'available': + return + + # Select the best destination address + dest = instance.endpoint[0] + + if not dest: + # Skip instances we cannot address (e.g. private VPC subnet) + return + + # Set the inventory name + hostname = None + if self.hostname_variable: + if self.hostname_variable.startswith('tag_'): + hostname = instance.tags.get(self.hostname_variable[4:], None) + else: + hostname = getattr(instance, self.hostname_variable) + + # If we can't get a nice hostname, use the destination address + if not hostname: + hostname = dest + + hostname = self.to_safe(hostname).lower() + + # Add to index + self.index[hostname] = [region, instance.id] + + # Inventory: Group by instance ID (always a group of 1) + if self.group_by_instance_id: + self.inventory[instance.id] = [hostname] + if self.nested_groups: + self.push_group(self.inventory, 'instances', instance.id) + + # Inventory: Group by region + if self.group_by_region: + self.push(self.inventory, region, hostname) + if self.nested_groups: + self.push_group(self.inventory, 'regions', region) + + # Inventory: Group by availability zone + if self.group_by_availability_zone: + self.push(self.inventory, instance.availability_zone, hostname) + if self.nested_groups: + if self.group_by_region: + self.push_group(self.inventory, region, instance.availability_zone) + self.push_group(self.inventory, 'zones', instance.availability_zone) + + # Inventory: Group by instance type + if self.group_by_instance_type: + type_name = self.to_safe('type_' + instance.instance_class) + self.push(self.inventory, type_name, hostname) + if self.nested_groups: + self.push_group(self.inventory, 'types', type_name) + + # Inventory: Group by VPC + if self.group_by_vpc_id and instance.subnet_group and instance.subnet_group.vpc_id: + vpc_id_name = self.to_safe('vpc_id_' + instance.subnet_group.vpc_id) + self.push(self.inventory, vpc_id_name, hostname) + if self.nested_groups: + self.push_group(self.inventory, 'vpcs', vpc_id_name) + + # Inventory: Group by security group + if self.group_by_security_group: + try: + if instance.security_group: + key = self.to_safe("security_group_" + instance.security_group.name) + self.push(self.inventory, key, hostname) + if self.nested_groups: + self.push_group(self.inventory, 'security_groups', key) + + except AttributeError: + self.fail_with_error('\n'.join(['Package boto seems a bit older.', + 'Please upgrade boto >= 2.3.0.'])) + # Inventory: Group by tag keys + if self.group_by_tag_keys: + for k, v in instance.tags.items(): + if self.expand_csv_tags and v and ',' in v: + values = map(lambda x: x.strip(), v.split(',')) + else: + values = [v] + + for v in values: + if v: + key = self.to_safe("tag_" + k + "=" + v) + else: + key = self.to_safe("tag_" + k) + self.push(self.inventory, key, hostname) + if self.nested_groups: + self.push_group(self.inventory, 'tags', self.to_safe("tag_" + k)) + if v: + self.push_group(self.inventory, self.to_safe("tag_" + k), key) + + # Inventory: Group by engine + if self.group_by_rds_engine: + self.push(self.inventory, self.to_safe("rds_" + instance.engine), hostname) + if self.nested_groups: + self.push_group(self.inventory, 'rds_engines', self.to_safe("rds_" + instance.engine)) + + # Inventory: Group by parameter group + if self.group_by_rds_parameter_group: + self.push(self.inventory, self.to_safe("rds_parameter_group_" + instance.parameter_group.name), hostname) + if self.nested_groups: + self.push_group(self.inventory, 'rds_parameter_groups', self.to_safe("rds_parameter_group_" + instance.parameter_group.name)) + + # Global Tag: instances without tags + if self.group_by_tag_none and len(instance.tags) == 0: + self.push(self.inventory, 'tag_none', hostname) + if self.nested_groups: + self.push_group(self.inventory, 'tags', 'tag_none') + + # Global Tag: all RDS instances + self.push(self.inventory, 'rds', hostname) + + self.inventory["_meta"]["hostvars"][hostname] = self.get_host_info_dict_from_instance(instance) + self.inventory["_meta"]["hostvars"][hostname]['ansible_host'] = dest + + def add_elasticache_cluster(self, cluster, region): + ''' Adds an ElastiCache cluster to the inventory and index, as long as + it's nodes are addressable ''' + + # Only want available clusters unless all_elasticache_clusters is True + if not self.all_elasticache_clusters and cluster['CacheClusterStatus'] != 'available': + return + + # Select the best destination address + if 'ConfigurationEndpoint' in cluster and cluster['ConfigurationEndpoint']: + # Memcached cluster + dest = cluster['ConfigurationEndpoint']['Address'] + is_redis = False + else: + # Redis sigle node cluster + # Because all Redis clusters are single nodes, we'll merge the + # info from the cluster with info about the node + dest = cluster['CacheNodes'][0]['Endpoint']['Address'] + is_redis = True + + if not dest: + # Skip clusters we cannot address (e.g. private VPC subnet) + return + + # Add to index + self.index[dest] = [region, cluster['CacheClusterId']] + + # Inventory: Group by instance ID (always a group of 1) + if self.group_by_instance_id: + self.inventory[cluster['CacheClusterId']] = [dest] + if self.nested_groups: + self.push_group(self.inventory, 'instances', cluster['CacheClusterId']) + + # Inventory: Group by region + if self.group_by_region and not is_redis: + self.push(self.inventory, region, dest) + if self.nested_groups: + self.push_group(self.inventory, 'regions', region) + + # Inventory: Group by availability zone + if self.group_by_availability_zone and not is_redis: + self.push(self.inventory, cluster['PreferredAvailabilityZone'], dest) + if self.nested_groups: + if self.group_by_region: + self.push_group(self.inventory, region, cluster['PreferredAvailabilityZone']) + self.push_group(self.inventory, 'zones', cluster['PreferredAvailabilityZone']) + + # Inventory: Group by node type + if self.group_by_instance_type and not is_redis: + type_name = self.to_safe('type_' + cluster['CacheNodeType']) + self.push(self.inventory, type_name, dest) + if self.nested_groups: + self.push_group(self.inventory, 'types', type_name) + + # Inventory: Group by VPC (information not available in the current + # AWS API version for ElastiCache) + + # Inventory: Group by security group + if self.group_by_security_group and not is_redis: + + # Check for the existence of the 'SecurityGroups' key and also if + # this key has some value. When the cluster is not placed in a SG + # the query can return None here and cause an error. + if 'SecurityGroups' in cluster and cluster['SecurityGroups'] is not None: + for security_group in cluster['SecurityGroups']: + key = self.to_safe("security_group_" + security_group['SecurityGroupId']) + self.push(self.inventory, key, dest) + if self.nested_groups: + self.push_group(self.inventory, 'security_groups', key) + + # Inventory: Group by engine + if self.group_by_elasticache_engine and not is_redis: + self.push(self.inventory, self.to_safe("elasticache_" + cluster['Engine']), dest) + if self.nested_groups: + self.push_group(self.inventory, 'elasticache_engines', self.to_safe(cluster['Engine'])) + + # Inventory: Group by parameter group + if self.group_by_elasticache_parameter_group: + self.push(self.inventory, self.to_safe("elasticache_parameter_group_" + cluster['CacheParameterGroup']['CacheParameterGroupName']), dest) + if self.nested_groups: + self.push_group(self.inventory, 'elasticache_parameter_groups', self.to_safe(cluster['CacheParameterGroup']['CacheParameterGroupName'])) + + # Inventory: Group by replication group + if self.group_by_elasticache_replication_group and 'ReplicationGroupId' in cluster and cluster['ReplicationGroupId']: + self.push(self.inventory, self.to_safe("elasticache_replication_group_" + cluster['ReplicationGroupId']), dest) + if self.nested_groups: + self.push_group(self.inventory, 'elasticache_replication_groups', self.to_safe(cluster['ReplicationGroupId'])) + + # Global Tag: all ElastiCache clusters + self.push(self.inventory, 'elasticache_clusters', cluster['CacheClusterId']) + + host_info = self.get_host_info_dict_from_describe_dict(cluster) + + self.inventory["_meta"]["hostvars"][dest] = host_info + + # Add the nodes + for node in cluster['CacheNodes']: + self.add_elasticache_node(node, cluster, region) + + def add_elasticache_node(self, node, cluster, region): + ''' Adds an ElastiCache node to the inventory and index, as long as + it is addressable ''' + + # Only want available nodes unless all_elasticache_nodes is True + if not self.all_elasticache_nodes and node['CacheNodeStatus'] != 'available': + return + + # Select the best destination address + dest = node['Endpoint']['Address'] + + if not dest: + # Skip nodes we cannot address (e.g. private VPC subnet) + return + + node_id = self.to_safe(cluster['CacheClusterId'] + '_' + node['CacheNodeId']) + + # Add to index + self.index[dest] = [region, node_id] + + # Inventory: Group by node ID (always a group of 1) + if self.group_by_instance_id: + self.inventory[node_id] = [dest] + if self.nested_groups: + self.push_group(self.inventory, 'instances', node_id) + + # Inventory: Group by region + if self.group_by_region: + self.push(self.inventory, region, dest) + if self.nested_groups: + self.push_group(self.inventory, 'regions', region) + + # Inventory: Group by availability zone + if self.group_by_availability_zone: + self.push(self.inventory, cluster['PreferredAvailabilityZone'], dest) + if self.nested_groups: + if self.group_by_region: + self.push_group(self.inventory, region, cluster['PreferredAvailabilityZone']) + self.push_group(self.inventory, 'zones', cluster['PreferredAvailabilityZone']) + + # Inventory: Group by node type + if self.group_by_instance_type: + type_name = self.to_safe('type_' + cluster['CacheNodeType']) + self.push(self.inventory, type_name, dest) + if self.nested_groups: + self.push_group(self.inventory, 'types', type_name) + + # Inventory: Group by VPC (information not available in the current + # AWS API version for ElastiCache) + + # Inventory: Group by security group + if self.group_by_security_group: + + # Check for the existence of the 'SecurityGroups' key and also if + # this key has some value. When the cluster is not placed in a SG + # the query can return None here and cause an error. + if 'SecurityGroups' in cluster and cluster['SecurityGroups'] is not None: + for security_group in cluster['SecurityGroups']: + key = self.to_safe("security_group_" + security_group['SecurityGroupId']) + self.push(self.inventory, key, dest) + if self.nested_groups: + self.push_group(self.inventory, 'security_groups', key) + + # Inventory: Group by engine + if self.group_by_elasticache_engine: + self.push(self.inventory, self.to_safe("elasticache_" + cluster['Engine']), dest) + if self.nested_groups: + self.push_group(self.inventory, 'elasticache_engines', self.to_safe("elasticache_" + cluster['Engine'])) + + # Inventory: Group by parameter group (done at cluster level) + + # Inventory: Group by replication group (done at cluster level) + + # Inventory: Group by ElastiCache Cluster + if self.group_by_elasticache_cluster: + self.push(self.inventory, self.to_safe("elasticache_cluster_" + cluster['CacheClusterId']), dest) + + # Global Tag: all ElastiCache nodes + self.push(self.inventory, 'elasticache_nodes', dest) + + host_info = self.get_host_info_dict_from_describe_dict(node) + + if dest in self.inventory["_meta"]["hostvars"]: + self.inventory["_meta"]["hostvars"][dest].update(host_info) + else: + self.inventory["_meta"]["hostvars"][dest] = host_info + + def add_elasticache_replication_group(self, replication_group, region): + ''' Adds an ElastiCache replication group to the inventory and index ''' + + # Only want available clusters unless all_elasticache_replication_groups is True + if not self.all_elasticache_replication_groups and replication_group['Status'] != 'available': + return + + # Skip clusters we cannot address (e.g. private VPC subnet or clustered redis) + if replication_group['NodeGroups'][0]['PrimaryEndpoint'] is None or \ + replication_group['NodeGroups'][0]['PrimaryEndpoint']['Address'] is None: + return + + # Select the best destination address (PrimaryEndpoint) + dest = replication_group['NodeGroups'][0]['PrimaryEndpoint']['Address'] + + # Add to index + self.index[dest] = [region, replication_group['ReplicationGroupId']] + + # Inventory: Group by ID (always a group of 1) + if self.group_by_instance_id: + self.inventory[replication_group['ReplicationGroupId']] = [dest] + if self.nested_groups: + self.push_group(self.inventory, 'instances', replication_group['ReplicationGroupId']) + + # Inventory: Group by region + if self.group_by_region: + self.push(self.inventory, region, dest) + if self.nested_groups: + self.push_group(self.inventory, 'regions', region) + + # Inventory: Group by availability zone (doesn't apply to replication groups) + + # Inventory: Group by node type (doesn't apply to replication groups) + + # Inventory: Group by VPC (information not available in the current + # AWS API version for replication groups + + # Inventory: Group by security group (doesn't apply to replication groups) + # Check this value in cluster level + + # Inventory: Group by engine (replication groups are always Redis) + if self.group_by_elasticache_engine: + self.push(self.inventory, 'elasticache_redis', dest) + if self.nested_groups: + self.push_group(self.inventory, 'elasticache_engines', 'redis') + + # Global Tag: all ElastiCache clusters + self.push(self.inventory, 'elasticache_replication_groups', replication_group['ReplicationGroupId']) + + host_info = self.get_host_info_dict_from_describe_dict(replication_group) + + self.inventory["_meta"]["hostvars"][dest] = host_info + + def get_route53_records(self): + ''' Get and store the map of resource records to domain names that + point to them. ''' + + if self.boto_profile: + r53_conn = route53.Route53Connection(profile_name=self.boto_profile) + else: + r53_conn = route53.Route53Connection() + all_zones = r53_conn.get_zones() + + route53_zones = [zone for zone in all_zones if zone.name[:-1] not in self.route53_excluded_zones] + + self.route53_records = {} + + for zone in route53_zones: + rrsets = r53_conn.get_all_rrsets(zone.id) + + for record_set in rrsets: + record_name = record_set.name + + if record_name.endswith('.'): + record_name = record_name[:-1] + + for resource in record_set.resource_records: + self.route53_records.setdefault(resource, set()) + self.route53_records[resource].add(record_name) + + def get_instance_route53_names(self, instance): + ''' Check if an instance is referenced in the records we have from + Route53. If it is, return the list of domain names pointing to said + instance. If nothing points to it, return an empty list. ''' + + instance_attributes = ['public_dns_name', 'private_dns_name', + 'ip_address', 'private_ip_address'] + + name_list = set() + + for attrib in instance_attributes: + try: + value = getattr(instance, attrib) + except AttributeError: + continue + + if value in self.route53_records: + name_list.update(self.route53_records[value]) + + return list(name_list) + + def get_host_info_dict_from_instance(self, instance): + instance_vars = {} + for key in vars(instance): + value = getattr(instance, key) + key = self.to_safe('ec2_' + key) + + # Handle complex types + # state/previous_state changed to properties in boto in https://github.com/boto/boto/commit/a23c379837f698212252720d2af8dec0325c9518 + if key == 'ec2__state': + instance_vars['ec2_state'] = instance.state or '' + instance_vars['ec2_state_code'] = instance.state_code + elif key == 'ec2__previous_state': + instance_vars['ec2_previous_state'] = instance.previous_state or '' + instance_vars['ec2_previous_state_code'] = instance.previous_state_code + elif isinstance(value, (int, bool)): + instance_vars[key] = value + elif isinstance(value, six.string_types): + instance_vars[key] = value.strip() + elif value is None: + instance_vars[key] = '' + elif key == 'ec2_region': + instance_vars[key] = value.name + elif key == 'ec2__placement': + instance_vars['ec2_placement'] = value.zone + elif key == 'ec2_tags': + for k, v in value.items(): + if self.expand_csv_tags and ',' in v: + v = list(map(lambda x: x.strip(), v.split(','))) + key = self.to_safe('ec2_tag_' + k) + instance_vars[key] = v + elif key == 'ec2_groups': + group_ids = [] + group_names = [] + for group in value: + group_ids.append(group.id) + group_names.append(group.name) + instance_vars["ec2_security_group_ids"] = ','.join([str(i) for i in group_ids]) + instance_vars["ec2_security_group_names"] = ','.join([str(i) for i in group_names]) + elif key == 'ec2_block_device_mapping': + instance_vars["ec2_block_devices"] = {} + for k, v in value.items(): + instance_vars["ec2_block_devices"][os.path.basename(k)] = v.volume_id + else: + pass + # TODO Product codes if someone finds them useful + # print key + # print type(value) + # print value + + instance_vars[self.to_safe('ec2_account_id')] = self.aws_account_id + + return instance_vars + + def get_host_info_dict_from_describe_dict(self, describe_dict): + ''' Parses the dictionary returned by the API call into a flat list + of parameters. This method should be used only when 'describe' is + used directly because Boto doesn't provide specific classes. ''' + + # I really don't agree with prefixing everything with 'ec2' + # because EC2, RDS and ElastiCache are different services. + # I'm just following the pattern used until now to not break any + # compatibility. + + host_info = {} + for key in describe_dict: + value = describe_dict[key] + key = self.to_safe('ec2_' + self.uncammelize(key)) + + # Handle complex types + + # Target: Memcached Cache Clusters + if key == 'ec2_configuration_endpoint' and value: + host_info['ec2_configuration_endpoint_address'] = value['Address'] + host_info['ec2_configuration_endpoint_port'] = value['Port'] + + # Target: Cache Nodes and Redis Cache Clusters (single node) + if key == 'ec2_endpoint' and value: + host_info['ec2_endpoint_address'] = value['Address'] + host_info['ec2_endpoint_port'] = value['Port'] + + # Target: Redis Replication Groups + if key == 'ec2_node_groups' and value: + host_info['ec2_endpoint_address'] = value[0]['PrimaryEndpoint']['Address'] + host_info['ec2_endpoint_port'] = value[0]['PrimaryEndpoint']['Port'] + replica_count = 0 + for node in value[0]['NodeGroupMembers']: + if node['CurrentRole'] == 'primary': + host_info['ec2_primary_cluster_address'] = node['ReadEndpoint']['Address'] + host_info['ec2_primary_cluster_port'] = node['ReadEndpoint']['Port'] + host_info['ec2_primary_cluster_id'] = node['CacheClusterId'] + elif node['CurrentRole'] == 'replica': + host_info['ec2_replica_cluster_address_' + str(replica_count)] = node['ReadEndpoint']['Address'] + host_info['ec2_replica_cluster_port_' + str(replica_count)] = node['ReadEndpoint']['Port'] + host_info['ec2_replica_cluster_id_' + str(replica_count)] = node['CacheClusterId'] + replica_count += 1 + + # Target: Redis Replication Groups + if key == 'ec2_member_clusters' and value: + host_info['ec2_member_clusters'] = ','.join([str(i) for i in value]) + + # Target: All Cache Clusters + elif key == 'ec2_cache_parameter_group': + host_info["ec2_cache_node_ids_to_reboot"] = ','.join([str(i) for i in value['CacheNodeIdsToReboot']]) + host_info['ec2_cache_parameter_group_name'] = value['CacheParameterGroupName'] + host_info['ec2_cache_parameter_apply_status'] = value['ParameterApplyStatus'] + + # Target: Almost everything + elif key == 'ec2_security_groups': + + # Skip if SecurityGroups is None + # (it is possible to have the key defined but no value in it). + if value is not None: + sg_ids = [] + for sg in value: + sg_ids.append(sg['SecurityGroupId']) + host_info["ec2_security_group_ids"] = ','.join([str(i) for i in sg_ids]) + + # Target: Everything + # Preserve booleans and integers + elif isinstance(value, (int, bool)): + host_info[key] = value + + # Target: Everything + # Sanitize string values + elif isinstance(value, six.string_types): + host_info[key] = value.strip() + + # Target: Everything + # Replace None by an empty string + elif value is None: + host_info[key] = '' + + else: + # Remove non-processed complex types + pass + + return host_info + + def get_host_info(self): + ''' Get variables about a specific host ''' + + if len(self.index) == 0: + # Need to load index from cache + self.load_index_from_cache() + + if self.args.host not in self.index: + # try updating the cache + self.do_api_calls_update_cache() + if self.args.host not in self.index: + # host might not exist anymore + return self.json_format_dict({}, True) + + (region, instance_id) = self.index[self.args.host] + + instance = self.get_instance(region, instance_id) + return self.json_format_dict(self.get_host_info_dict_from_instance(instance), True) + + def push(self, my_dict, key, element): + ''' Push an element onto an array that may not have been defined in + the dict ''' + group_info = my_dict.setdefault(key, []) + if isinstance(group_info, dict): + host_list = group_info.setdefault('hosts', []) + host_list.append(element) + else: + group_info.append(element) + + def push_group(self, my_dict, key, element): + ''' Push a group as a child of another group. ''' + parent_group = my_dict.setdefault(key, {}) + if not isinstance(parent_group, dict): + parent_group = my_dict[key] = {'hosts': parent_group} + child_groups = parent_group.setdefault('children', []) + if element not in child_groups: + child_groups.append(element) + + def get_inventory_from_cache(self): + ''' Reads the inventory from the cache file and returns it as a JSON + object ''' + + with open(self.cache_path_cache, 'r') as f: + json_inventory = f.read() + return json_inventory + + def load_index_from_cache(self): + ''' Reads the index from the cache file sets self.index ''' + + with open(self.cache_path_index, 'rb') as f: + self.index = json.load(f) + + def write_to_cache(self, data, filename): + ''' Writes data in JSON format to a file ''' + + json_data = self.json_format_dict(data, True) + with open(filename, 'w') as f: + f.write(json_data) + + def uncammelize(self, key): + temp = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', key) + return re.sub('([a-z0-9])([A-Z])', r'\1_\2', temp).lower() + + def to_safe(self, word): + ''' Converts 'bad' characters in a string to underscores so they can be used as Ansible groups ''' + regex = r"[^A-Za-z0-9\_" + if not self.replace_dash_in_groups: + regex += r"\-" + return re.sub(regex + "]", "_", word) + + def json_format_dict(self, data, pretty=False): + ''' Converts a dict to a JSON object and dumps it as a formatted + string ''' + + if pretty: + return json.dumps(data, sort_keys=True, indent=2) + else: + return json.dumps(data) + + +if __name__ == '__main__': + # Run the script + Ec2Inventory() \ No newline at end of file diff --git a/tools/deep/mcmcify.py b/tools/deep_bench/scripts/mcmcify/mcmcify.py similarity index 97% rename from tools/deep/mcmcify.py rename to tools/deep_bench/scripts/mcmcify/mcmcify.py index 45c37fe74..260dc8dd9 100755 --- a/tools/deep/mcmcify.py +++ b/tools/deep_bench/scripts/mcmcify/mcmcify.py @@ -21,7 +21,9 @@ '<=': 'LE', '<': 'LT', '+': 'PLUS', - '-': 'MINUS' + '-': 'MINUS', + '*': 'MUL', + 'mod': 'MOD' } @@ -189,7 +191,7 @@ def translate(chctask, xmlfo, configfo): # Guess invariant name # TODO: Should be only one rel with any params inv_name = None - for c in ['itp', 'inv']: + for c in ['itp', 'inv', 'itp1']: if deephas(chctask.rels, c): inv_name = c assert inv_name @@ -241,10 +243,9 @@ def prettify_xml(elem): print(prettify_xml(outtree.getroot()), file=xmlfo) # Build config - # TODO: Re-read paper; figure out what these hyperparams mean: - # http://theory.stanford.edu/~aiken/publications/papers/cav14.pdf all_ints = set(int(x.text) for x in outtree.iter('INT')) all_ints = all_ints.union(set(-x for x in all_ints)) + all_ints = all_ints.union(set([-1, 0, 1])) print("DISJUNCTS", file=configfo) print("10", file=configfo) print("CONJUNCTS", file=configfo) diff --git a/tools/deep/smtlibparser.py b/tools/deep_bench/scripts/mcmcify/smtlibparser.py similarity index 100% rename from tools/deep/smtlibparser.py rename to tools/deep_bench/scripts/mcmcify/smtlibparser.py diff --git a/tools/deep_bench/scripts/merge-times.py b/tools/deep_bench/scripts/merge-times.py new file mode 100755 index 000000000..6cc36ec9a --- /dev/null +++ b/tools/deep_bench/scripts/merge-times.py @@ -0,0 +1,77 @@ +#!/usr/bin/env python +from __future__ import print_function +import os +import sys +import json +import argparse +import tarfile +from collections import defaultdict + + +def merge_dicts_of_lists(*args): + m = {} + for a in args: + for k, v in a.iteritems(): + assert isinstance(v, list) + m.setdefault(k, []).extend(v) + return m + + +def sum_dicts_of_ints(*args): + m = {} + for a in args: + for k, v in a.iteritems(): + assert isinstance(v, int) + m[k] = m.get(k, 0) + v + return m + + +def clever_load(path): + """Given a path, will either parse it as JSON or find times.json and parse. + """ + try: + with tarfile.open(path, 'r') as tar: + times_ti = None + for tarinfo in tar: + if os.path.split(tarinfo.name)[-1].lower() == 'times.json': + assert times_ti is None + assert tarinfo.isfile() + times_ti = tarinfo + return json.load(tar.extractfile(times_ti)) + except Exception: + import traceback + traceback.print_exc() + pass + + with open(path, 'r') as f: + return json.load(f) + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("PATHS", nargs='+') + args = parser.parse_args() + + merged = {'times': defaultdict(lambda: defaultdict(list)), + 'iterCnts': defaultdict(lambda: defaultdict(list)), + 'unsuccessCnts': defaultdict(lambda: defaultdict(lambda: 0))} + for path in args.PATHS: + obj = clever_load(path) + for category in ['iterCnts', 'times']: + for smttask in obj[category]: + for hyperstr, contents in obj[category][smttask].iteritems(): + merged[category][smttask][hyperstr].extend(contents) + for smttask in obj['unsuccessCnts']: + if isinstance(obj['unsuccessCnts'][smttask], int): + print("old-style unsuccessCnts; skipping", file=sys.stderr) + break + for hyperstr in obj['unsuccessCnts'][smttask]: + val = obj['unsuccessCnts'][smttask][hyperstr] + merged['unsuccessCnts'][smttask][hyperstr] += val + if len(merged['unsuccessCnts']) == 0: + del merged['unsuccessCnts'] + json.dump(merged, sys.stdout) + + +if __name__ == '__main__': + main() diff --git a/tools/deep_bench/windows/ansible/README.md b/tools/deep_bench/windows/ansible/README.md new file mode 100644 index 000000000..037fcc903 --- /dev/null +++ b/tools/deep_bench/windows/ansible/README.md @@ -0,0 +1,2 @@ +To use this Ansible playbook, make sure to fill +in `roles/ice/files` and `roles/mcmc/files` with the appropriate prebuilt binaries. You can get these from Sam. \ No newline at end of file diff --git a/tools/deep_bench/windows/ansible/group_vars/windows.yml b/tools/deep_bench/windows/ansible/group_vars/windows.yml new file mode 100644 index 000000000..e03a345ec --- /dev/null +++ b/tools/deep_bench/windows/ansible/group_vars/windows.yml @@ -0,0 +1,13 @@ +ansible_user: Administrator +ansible_password: windowsisfun400! +ansible_port: 5985 +ansible_connection: winrm +# The following is necessary for Python 2.7.9+ (or any older Python that has +# backported SSLContext, eg, Python 2.7.5 on RHEL7) when using default WinRM +# self-signed certificates: +ansible_winrm_server_cert_validation: ignore +ansible_become_method: runas +ansible_become_user: Administrator +ansible_become_password: windowsisfun400! + +cygwin_root: C:\tools\cygwin \ No newline at end of file diff --git a/tools/deep_bench/windows/ansible/inventory b/tools/deep_bench/windows/ansible/inventory new file mode 100644 index 000000000..6a8247aa8 --- /dev/null +++ b/tools/deep_bench/windows/ansible/inventory @@ -0,0 +1,9 @@ +[windows] + +[windows:children] +tag_Project_FreqHorn +localwin + +[localwin] + +[tag_Project_FreqHorn] diff --git a/tools/deep_bench/windows/ansible/playbook.yml b/tools/deep_bench/windows/ansible/playbook.yml new file mode 100644 index 000000000..465ff134f --- /dev/null +++ b/tools/deep_bench/windows/ansible/playbook.yml @@ -0,0 +1,9 @@ +--- +- hosts: all + roles: + - base + - cygwin-sshd + - ice + - mcmc + - spacer + - benchscripts \ No newline at end of file diff --git a/tools/deep_bench/windows/ansible/roles/base/tasks/main.yml b/tools/deep_bench/windows/ansible/roles/base/tasks/main.yml new file mode 100644 index 000000000..c0d5fc23a --- /dev/null +++ b/tools/deep_bench/windows/ansible/roles/base/tasks/main.yml @@ -0,0 +1,38 @@ +--- + +# - name: download the Cygwin installer +# win_get_url: +# url: https://cygwin.com/setup-x86.exe +# dest: C:\cygwin-setup-x86.exe +# force: no + +- name: install Cygwin and cyg-get (via Chocolatey) + win_chocolatey: + name: "{{ item }}" + state: present + with_items: + - cygwin + - cyg-get + +- name: install a bunch of Cygwin packages + win_shell: cyg-get.bat git rsync vim python2 python2-pip python2-devel openssh gcc-core + +# - name: run the Cygwin installer/update packages +# win_shell: C:\cygwin-setup-x86.exe --site http://mirrors.kernel.org/sourceware/cygwin/ --quiet-mode --root {{ cygwin_root }} --arch x86 --local-package-dir C:\cygwinx86\cygwin-packages --verbose --packages git,rsync,vim,python2,python2-pip,python2-devel,openssh,gcc-core + +- name: install Visual Studio Redistributables and Build Tools + win_chocolatey: + name: "{{ item }}" + state: present + with_items: + - vcredist-all + - visualstudio2017buildtools + - visualstudio2017-workload-vctools + retries: 1 + register: chocolatey_pkgs + until: chocolatey_pkgs|succeeded + delay: 2 + +- name: reboot the machine + win_reboot: + when: chocolatey_pkgs|changed \ No newline at end of file diff --git a/tools/deep/benchmark-others.py b/tools/deep_bench/windows/ansible/roles/benchscripts/files/benchmark-others.py old mode 100644 new mode 100755 similarity index 56% rename from tools/deep/benchmark-others.py rename to tools/deep_bench/windows/ansible/roles/benchscripts/files/benchmark-others.py index 2a8b553b3..8681d5a62 --- a/tools/deep/benchmark-others.py +++ b/tools/deep_bench/windows/ansible/roles/benchscripts/files/benchmark-others.py @@ -3,15 +3,18 @@ import os import re import sys +import glob import json import time import argparse import subprocess32 +import traceback from collections import defaultdict TEN_MINS = 10*60 # in seconds TOTAL_TIME_RE = re.compile(r'\s*[tT]otal [tT]ime:?\s+([\.0-9]*)\s*') +BOOGIE_RESULTS_RE = re.compile(r'\s*Boogie program verifier finished with [^0]\d* verified, 0 errors.*') # TODO: Should actually check for explicit success, not just total time report @@ -26,22 +29,63 @@ def getenv_or_raise(v): return r -# TODO: Note that /printAssignment and /trace option is for interactive runs and might cause a significant slowdown. -def run_ice(example_path, verbose=False, timeout=None): +def windows_path(orig): + assert orig[:2] == '/c' + return "C:" + orig[2:].replace("/", '\\') + + +def subproc_check_output(*args, **kwargs): + log_path = kwargs.pop('logfile', None) + if log_path: + fo = open(log_path, 'w') + else: + fo = open(os.devnull, 'w') + + output = '' + try: + output = subprocess32.check_output(*args, **kwargs) + except Exception as e: + if hasattr(e, 'output'): + output = e.output + raise + finally: + fo.write(output) + fo.close() + return output + + +def run_ice(example_path, logdir, verbose=False, timeout=None): """Returns ICE Boogie.exe on `example_path`. Returns runtime on success.""" assert os.path.isfile(example_path) root = getenv_or_raise("ICE_ROOT") - cmd = os.path.join(root, "Boogie", "Binaries-Full", "Boogie.exe") + cmd = os.path.join(root, "Boogie", "Binaries", "Boogie.exe") assert os.path.isfile(cmd) - output = subprocess32.check_output([cmd, "/nologo", "/noinfer", - "/contractInfer", "/ice", - "/printAssignment", example_path], - timeout=timeout) - for line in output.splitlines()[-10:]: - m = TOTAL_TIME_RE.match(line) - if m: - return float(m.group(1)) - raise NoSuccessException("couldn't find 'Total time'") + + for cachepath in glob.glob(example_path + ".*"): + os.remove(cachepath) + + output = subproc_check_output([cmd, "-nologo", "-noinfer", "-contractInfer", + "-mlHoudini:dt_penalty", + "-printAssignment", windows_path(example_path)], + timeout=timeout, + cwd=os.path.join(root, "Boogie", "Binaries"), + logfile=os.path.join(logdir, "ice.log")) + + success, t = False, 0 + for line in output.splitlines()[-40:]: + if verbose: + print(line) + tm = TOTAL_TIME_RE.match(line) + if tm: + t = float(tm.group(1)) + sm = BOOGIE_RESULTS_RE.match(line) + if sm: + success = True + if success: + if t == 0: + raise NoSuccessException("couldn't find time") + return t + raise NoSuccessException("couldn't find '0 errors'") def ice_benchmarks(): @@ -56,13 +100,14 @@ def ice_benchmarks(): yield os.path.join(root, f) -def run_mcmc(example_dirpath, verbose=False, timeout=None): +def run_mcmc(example_dirpath, logdir, verbose=False, timeout=None): root = getenv_or_raise("MCMC_ROOT") cmd = os.path.join(root, "Release", "numerical.exe") assert os.path.isfile(cmd) - output = subprocess32.check_output([cmd], cwd=example_dirpath, - timeout=timeout) - for line in output.splitlines()[-10:]: + output = subproc_check_output([cmd], cwd=example_dirpath, + timeout=timeout, + logfile=os.path.join(logdir, "mcmc.log")) + for line in output.splitlines()[-20:]: if verbose: print(" ---", line) m = TOTAL_TIME_RE.match(line) @@ -85,7 +130,7 @@ def mcmc_benchmarks(): break -def run_z3(example_path, verbose=False, timeout=None): +def run_z3(example_path, logdir, verbose=False, timeout=None): root = getenv_or_raise("Z3_ROOT") cmd = os.path.join(root, "bin", "z3.exe") assert os.path.isfile(cmd) @@ -93,14 +138,15 @@ def run_z3(example_path, verbose=False, timeout=None): if timeout is not None: opts.append("-T:" + str(int(timeout*1000))) start = time.time() - output = subprocess32.check_output([cmd] + opts + ['--', example_path], - timeout=(timeout + 5)) + output = subproc_check_output([cmd] + opts + ['--', example_path], + timeout=(timeout + 5), + logfile=os.path.join(logdir, "z3.log")) end = time.time() found_result = False for line in output.splitlines()[-20:]: if verbose: print(" ---", line) - if 'unsat' in line or 'sat' in line: + if 'unsat' in line or 'sat' in line: # TODO: This is bad found_result = True if not found_result: raise NoSuccessException("couldn't find 'sat' or 'unsat'") @@ -131,17 +177,46 @@ def bench_intersection(a, b): [x for x in b if name_only(x) in i]) +def benchmarks_from_args(args): + if args.BENCHNAMES: + lc_benchnames = set(l.lower() for l in args.BENCHNAMES) + else: + orig_sets = [] + if args.mcmc: + orig_sets.append(set(name_only(b) for b in mcmc_benchmarks())) + if args.ice: + orig_sets.append(set(name_only(b) for b in ice_benchmarks())) + if args.z3: + orig_sets.append(set(name_only(b) for b in z3_benchmarks())) + lc_benchnames = orig_sets[0] + for s in orig_sets[1:]: + lc_benchnames.intersection_update(s) + return lc_benchnames + + +def others_from_args(args, name, run_fn, lc_benchnames, bench_gen): + if not getattr(args, name.lower()): + return [] + b = list(bench_gen) + if len(b) == 0: + raise Exception("No benchmarks for %s found" % name.upper()) + b = [x for x in b if name_only(x) in lc_benchnames] + return [(name.upper(), run_fn, args.__dict__[name.lower()], b)] + + def main(): parser = argparse.ArgumentParser() parser.add_argument("BENCHNAMES", nargs='*') - parser.add_argument('--mcmc', action='store', type=int, default=5, + parser.add_argument('--mcmc', action='store', type=int, default=0, help="run the MCMC solver N iterations") - parser.add_argument('--ice', action='store', type=int, default=5, + parser.add_argument('--ice', action='store', type=int, default=0, help="run the ICE (Boogie.exe) solver N iterations") - parser.add_argument('--z3', action='store', type=int, default=5, + parser.add_argument('--z3', action='store', type=int, default=0, help="run the Z3 solver N iterations") parser.add_argument("-o", "--outfile", type=str, help="path to file to save times") + parser.add_argument("--logdir", type=str, + help="path to directory to save logs") parser.add_argument('-r', "--resume", action='store_true', help="merge results with outfile if it exists") parser.add_argument('-e', "--exclude", type=str, nargs='+', @@ -158,55 +233,36 @@ def main(): if args.resume and os.path.exists(args.outfile): with open(args.outfile, 'r') as f: times = json.load(f)['times'] - times = defaultdict(lambda: defaultdict(list), {k: defaultdict(list, {a: b for a, b in v.iteritems()}) - for k, v in times.iteritems()}) + times = defaultdict(lambda: defaultdict(list), + {k: defaultdict(list, {a: b for a, b in v.iteritems()}) + for k, v in times.iteritems()}) try: # Construct name-only set of benchmarks to run - if args.BENCHNAMES: - lc_benchnames = set(l.lower() for l in args.BENCHNAMES) - else: - orig_sets = [] - if args.mcmc: - orig_sets.append(set(name_only(b) for b in mcmc_benchmarks())) - if args.ice: - orig_sets.append(set(name_only(b) for b in ice_benchmarks())) - if args.z3: - orig_sets.append(set(name_only(b) for b in z3_benchmarks())) - lc_benchnames = orig_sets[0] - for s in orig_sets[1:]: - lc_benchnames.intersection_update(s) - if args.verbose: - print("Running benchmarks:", ', '.join(lc_benchnames)) + lc_benchnames = benchmarks_from_args(args) + if args.verbose: + print("Running benchmarks:", ', '.join(lc_benchnames)) + + others += others_from_args(args, "MCMC", run_mcmc, lc_benchnames, mcmc_benchmarks()) + others += others_from_args(args, "ICE", run_ice, lc_benchnames, ice_benchmarks()) + others += others_from_args(args, "Z3", run_z3, lc_benchnames, z3_benchmarks()) - if args.mcmc: - b = list(mcmc_benchmarks()) - if len(b) == 0: - raise Exception("No benchmarks for MCMC found") - b = [x for x in b if name_only(x) in lc_benchnames] - others.append(("MCMC", run_mcmc, args.mcmc, b)) - if args.ice: - b = list(ice_benchmarks()) - if len(b) == 0: - raise Exception("No benchmarks for ICE found") - b = [x for x in b if name_only(x) in lc_benchnames] - others.append(("ICE", run_ice, args.ice, b)) - if args.z3: - b = list(z3_benchmarks()) - if len(b) == 0: - raise Exception("No benchmarks for Z3 found") - b = [x for x in b if name_only(x) in lc_benchnames] - others.append(("Z3", run_z3, args.z3, b)) for n, fn, cnt, benches in others: for b in benches: - if name_only(b) in args.exclude: + if args.exclude and name_only(b) in args.exclude: continue t_list = times[n][name_only(b)] try: while len(t_list) < cnt: if args.verbose: print("Running %s on %s" % (n, name_only(b))) - t_list.append(fn(b, verbose=args.verbose, timeout=TEN_MINS)) + try: + fn_result = fn(b, args.logdir, verbose=args.verbose, timeout=TEN_MINS) + except subprocess32.CalledProcessError: + traceback.print_exc() + break + else: + t_list.append(fn_result) except subprocess32.TimeoutExpired: if args.verbose: print("Timeout expired") diff --git a/tools/deep_bench/windows/ansible/roles/benchscripts/tasks/main.yml b/tools/deep_bench/windows/ansible/roles/benchscripts/tasks/main.yml new file mode 100644 index 000000000..32829b670 --- /dev/null +++ b/tools/deep_bench/windows/ansible/roles/benchscripts/tasks/main.yml @@ -0,0 +1,32 @@ +--- +- name: copy benchmark-others.py to C:\ + win_copy: + src: files/benchmark-others.py + dest: C:\ + +- name: install packages to benchmark-others.py + win_shell: "{{ cygwin_root }}\\bin\\bash.exe --login -c \"{{ item }}\"" + with_items: + - pip2 install subprocess32 + +- name: delete MCMC benchmarks + win_file: + path: C:\bench_horn_mcmc + state: absent + +- name: copy MCMC benchmarks + win_copy: + src: ../../../../../../bench_horn_mcmc/ + dest: C:\bench_horn_mcmc + force: yes + +- name: delete ICE benchmarks + win_file: + path: C:\bench_horn_ice + state: absent + +- name: copy ICE benchmarks + win_copy: + src: ../../../../../../bench_horn_ice/ + dest: C:\bench_horn_ice + force: yes \ No newline at end of file diff --git a/tools/deep_bench/windows/ansible/roles/cygwin-sshd/handlers/main.yml b/tools/deep_bench/windows/ansible/roles/cygwin-sshd/handlers/main.yml new file mode 100644 index 000000000..bfd5ed148 --- /dev/null +++ b/tools/deep_bench/windows/ansible/roles/cygwin-sshd/handlers/main.yml @@ -0,0 +1,6 @@ +--- +- name: restart sshd + win_service: + name: sshd + state: restarted + start_mode: auto \ No newline at end of file diff --git a/tools/deep_bench/windows/ansible/roles/cygwin-sshd/tasks/main.yml b/tools/deep_bench/windows/ansible/roles/cygwin-sshd/tasks/main.yml new file mode 100644 index 000000000..b2643a492 --- /dev/null +++ b/tools/deep_bench/windows/ansible/roles/cygwin-sshd/tasks/main.yml @@ -0,0 +1,71 @@ +--- +- name: stop sshd before running ssh-host-config (if present) + win_service: name=sshd state=stopped + ignore_errors: yes + notify: restart sshd + +- name: run ssh-host-config + win_shell: C:\tools\cygwin\bin\bash.exe --login -c "ssh-host-config -y --user {{ ansible_user }} --pwd {{ ansible_password }}" + become: yes + retries: 1 + register: ssh_host_config + until: ssh_host_config|succeeded + delay: 2 + notify: restart sshd + +# use sed to get around winrm/UAC permissions issues +- name: update sshd_config for public key authentication + win_shell: "{{ cygwin_root }}\\bin\\bash --login -c \"sed -i -e '{{ item }}' /etc/sshd_config\"" + become: yes + notify: restart sshd + with_items: + - s/#PubkeyAuthentication yes/PubkeyAuthentication yes/i + - s/StrictModes yes/StrictModes no/i + - s/#PasswordAuthentication yes/PasswordAuthentication yes/i + +- name: create .ssh folder + win_file: + path: "{{ cygwin_root }}\\home\\{{ ansible_user }}\\.ssh" + state: directory + +- name: create .ssh/authorized_keys file + win_file: + path: "{{ cygwin_root }}\\home\\{{ ansible_user }}\\.ssh\\authorized_keys" + state: touch + +- name: set owner for .ssh + win_owner: + path: "{{ cygwin_root }}\\home\\{{ ansible_user }}\\.ssh" + user: "{{ ansible_user }}" + recurse: yes + +- name: set file perms on .ssh and authorized_keys + win_shell: "{{ cygwin_root }}\\bin\\bash --login -c \"chmod {{ item }}\"" + with_items: + - 700 ~/.ssh + - 600 ~/.ssh/authorized_keys + +- name: authorize investigators' public keys for SSH remote login + win_lineinfile: + dest: "{{ cygwin_root }}\\home\\{{ ansible_user }}\\.ssh\\authorized_keys" + line: "{{ item }}" + create: yes + with_items: + - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC5uk2exzbNv0xO3ZkUOfFrOvQ917GUc2snhK6isoFs3TBGOmltNOlYATbjtnF/hu+wxQvkRklgRcUiUywRVdeMc30Yj8mQaXsuZO7jg2kH+kdKUGQUhOssxSDamqEpiMtdUmKaJDyefFTTcd4ho4MlxxCoBcoDzR9B786Sjfw9IwXLUB3HSg4GAdzmJounYbjK+oIa6L3tkRwlLAYzRhhRVVNSRx37R+PhdAdQ7UZAkDK8zSfwe/xJntuEqDyexPP36rnzYt6Ucifl7tNdVgnjHATj6SPfMXXkTpSWxL2fWc9Ka6RP9nL29N/G3nr64XI+fahckfzS+WFJnefv2ga1 skaufman@Sams-MacBook-Pro.local + - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDNF6M5FlBSv+lCLOir6BBWgnMkTuwIsem2WmLjhNbAESlOaMgM9VN4MpFhpclJGiQOs3HxYmy8TD+usgMzIdW2tLLJKJHk/+z7MKNOn/UXPRLKq0FtXfVMYsfqviwK0+HrKZXvcBuyyy8pmBauO7sUp5xPMaL68N/u1jZZRm3NLSqX2BsX+JCVpDrSJJ/u6R2p9aX0bpRjMM6cbFRzFB0Gy+V7hje4vE2EYzEINPDKMa5qhsuPj9dV/11Y42g50sppniURn+8j5qcBfbGr/nTovQKeaT5K//lTkUYf7G4wEmGMzbfWwLEgbwLeGzeFFbSwQLx/l7CYOFItjly4Dk5j grigory@Grigorys-MacBook-Pro.local + +- name: open a port for SSH + win_firewall_rule: + name: SSH + localport: 22 + action: allow + direction: in + protocol: tcp + state: present + enabled: yes + +- name: start sshd + win_service: + name: sshd + state: started + start_mode: auto \ No newline at end of file diff --git a/tools/deep_bench/windows/ansible/roles/ice/tasks/main.yml b/tools/deep_bench/windows/ansible/roles/ice/tasks/main.yml new file mode 100644 index 000000000..7eefac2b1 --- /dev/null +++ b/tools/deep_bench/windows/ansible/roles/ice/tasks/main.yml @@ -0,0 +1,34 @@ +--- + +- name: check if ICE folder exists + win_stat: + path: C:\ICE + register: ICE_folder_info + +# - name: copy pre-built ICE ZIP +# win_copy: +# src: ../files/ICE.zip +# dest: c:\ICE.zip +# force: no +# when: not ICE_folder_info.stat.exists + +- name: download pre-built ICE ZIP + win_get_url: + url: https://s3.amazonaws.com/parsec-deploy/ice.zip + dest: c:\ICE.zip + force: yes + when: not ICE_folder_info.stat.exists + +- name: unzip ICE.zip + win_unzip: + src: c:\ICE.zip + dest: c:\ + creates: c:\ICE + when: not ICE_folder_info.stat.exists + +- name: Set ICE_ROOT env var + win_environment: + state: present + name: ICE_ROOT + value: c:\ICE + level: machine \ No newline at end of file diff --git a/tools/deep_bench/windows/ansible/roles/mcmc/tasks/main.yml b/tools/deep_bench/windows/ansible/roles/mcmc/tasks/main.yml new file mode 100644 index 000000000..ad1ffc7a2 --- /dev/null +++ b/tools/deep_bench/windows/ansible/roles/mcmc/tasks/main.yml @@ -0,0 +1,34 @@ +--- + +- name: check if MCMC folder exists + win_stat: + path: C:\MCMC + register: mcmc_folder_info + +# - name: copy pre-built MCMC ZIP +# win_copy: +# src: ../files/mcmc.zip +# dest: c:\MCMC.zip +# force: no +# when: not mcmc_folder_info.stat.exists + +- name: download pre-built MCMC ZIP + win_get_url: + url: https://s3.amazonaws.com/parsec-deploy/mcmc.zip + dest: c:\MCMC.zip + force: yes + when: not mcmc_folder_info.stat.exists + +- name: unzip MCMC.zip + win_unzip: + src: c:\MCMC.zip + dest: c:\ + creates: c:\MCMC + when: not mcmc_folder_info.stat.exists + +- name: Set MCMC_ROOT env var + win_environment: + state: present + name: MCMC_ROOT + value: c:\MCMC + level: machine diff --git a/tools/deep_bench/windows/ansible/roles/spacer/tasks/main.yml b/tools/deep_bench/windows/ansible/roles/spacer/tasks/main.yml new file mode 100644 index 000000000..05b41b48e --- /dev/null +++ b/tools/deep_bench/windows/ansible/roles/spacer/tasks/main.yml @@ -0,0 +1,26 @@ +--- + +- name: install a non-Cygwin Python 2 (with Chocolatey) + win_chocolatey: + name: python2 + state: present + +- name: see if spacer directory exists + win_stat: + path: C:\tools\cygwin\home\{{ ansible_user }}\spacer + register: spacer_folder_info + +- name: see if Spacer's z3.exe is built + win_stat: + path: C:\tools\cygwin\home\{{ ansible_user }}\spacer\build\z3.exe + register: spacer_bin_info + +- name: git pull spacer + win_command: C:\tools\cygwin\bin\bash.exe --login -c "git clone --branch spacer https://bitbucket.org/arieg/z3.git spacer" + when: not spacer_folder_info.stat.exists + +- name: build Spacer + win_shell: '"C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\Tools\VsDevCmd.bat" && cd C:\tools\cygwin\home\{{ ansible_user }}\spacer && python scripts\mk_make.py && cd build && nmake' + args: + executable: cmd.exe + when: not spacer_bin_info.stat.exists diff --git a/tools/deep_bench/windows/files/.gitempty b/tools/deep_bench/windows/files/.gitempty new file mode 100644 index 000000000..e69de29bb diff --git a/tools/deep_bench/windows/run-other-benchmarks.sh b/tools/deep_bench/windows/run-other-benchmarks.sh new file mode 100755 index 000000000..824a6dbfb --- /dev/null +++ b/tools/deep_bench/windows/run-other-benchmarks.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +set -e + +HOSTS=`../scripts/ec2-inv.py --list | jq -r .tag_Project_FreqHorn\[\] | sed -e 's/^/1\/Administrator@/' | xargs echo -n | tr '\n' ','` +# HOSTS=`../scripts/ec2-inv.py --list | jq -r .tag_Project_FreqHorn\[\] | sed -e 's/^/1\/ssh -o StrictHostKeyChecking=no Administrator@/' | xargs echo -n | tr '\n' ','` +echo $HOSTS + +# Disable StrictHostKeyChecking temporarily. (Hacky and brittle.) +touch ~/.ssh/config +cp ~/.ssh/config ~/.ssh/config.backup +(echo 'Host *'; echo StrictHostKeyChecking no) >> ~/.ssh/config + +find ../../../bench_horn/*.smt2 -exec basename {} .smt2 \; | parallel \ + --resume-failed \ + --joblog ./clusterjobs.log \ + --return "out-{1}-{2}-i{3}.tar.gz" \ + --cleanup \ + --verbose \ + -a - \ + --sshlogin "$HOSTS" \ + "cd ~ && " \ + "rm -rf out && " \ + "mkdir out && " \ + "MCMC_ROOT=/cygdrive/c/MCMC ICE_ROOT=/cygdrive/c/ICE MCMC_BENCH=/cygdrive/c/bench_horn_mcmc ICE_BENCH=/cygdrive/c/bench_horn_ice /cygdrive/c/benchmark-others.py --logdir out/ -o out/times.json --{2} 1 {1} &> out/std.log ; " \ + "cd ~ ; " \ + "tar -zcf out-{1}-{2}-i{3}.tar.gz out/ ;" \ + ::: mcmc ice z3 ::: {0..9} + +# Remove the disabling of StrictHostKeyChecking +mv ~/.ssh/config.backup ~/.ssh/config diff --git a/tools/deep_bench/windows/start-cluster.sh b/tools/deep_bench/windows/start-cluster.sh new file mode 100755 index 000000000..42ca5246b --- /dev/null +++ b/tools/deep_bench/windows/start-cluster.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +set -e + +export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES + +# Spin up cluster/wait for connection +if [[ $1 != "--provision" ]] +then + cd terraform + terraform apply + cd ../ansible + ansible -i ../../scripts/ec2-inv.py -i inventory windows -m wait_for_connection +else + cd ansible +fi + +# Provision machines +ansible-playbook -i ../../scripts/ec2-inv.py -i inventory playbook.yml +cd .. diff --git a/tools/deep_bench/windows/terraform/userdata.tpl b/tools/deep_bench/windows/terraform/userdata.tpl new file mode 100644 index 000000000..c948d5b30 --- /dev/null +++ b/tools/deep_bench/windows/terraform/userdata.tpl @@ -0,0 +1,9 @@ + + + netsh advfirewall firewall add rule name="WinRM in" protocol=TCP dir=in profile=any localport=5985 remoteip=any localip=any action=allow + # Set Administrator password + $admin = [adsi]("WinNT://./administrator, user") + $admin.PSBase.Invoke("SetPassword", "${win_admin_pwd}") + \ No newline at end of file diff --git a/tools/deep_bench/windows/terraform/win-cluster.tf b/tools/deep_bench/windows/terraform/win-cluster.tf new file mode 100644 index 000000000..3a8ff1307 --- /dev/null +++ b/tools/deep_bench/windows/terraform/win-cluster.tf @@ -0,0 +1,211 @@ +variable "cluster_size" { + default = "5" +} + +variable "win_admin_pwd" { + default = "windowsisfun400!" +} + +variable "instance_type" { + default = "m4.xlarge" +} + +provider "aws" {} + +data "http" "ip" { + url = "http://icanhazip.com" +} + +# +# Simple VPC for instance +# +resource "aws_vpc" "main" { + cidr_block = "192.168.0.0/16" + + tags { + Name = "BenchmarkFreqHorn-Windows-VPC" + } +} + +resource "aws_subnet" "main" { + vpc_id = "${aws_vpc.main.id}" + cidr_block = "192.168.1.0/24" + map_public_ip_on_launch = true + + tags { + Name = "BenchmarkFreqHorn-Windows-Subnet" + } +} + +resource "aws_internet_gateway" "igw" { + vpc_id = "${aws_vpc.main.id}" + + tags { + Name = "BenchmarkFreqHorn-Windows-InternetGateway" + } +} + +resource "aws_route" "igw_route" { + route_table_id = "${aws_vpc.main.main_route_table_id}" + destination_cidr_block = "0.0.0.0/0" + gateway_id = "${aws_internet_gateway.igw.id}" +} + +resource "aws_security_group" "secgrp" { + name = "BenchmarkFreqHorn-Windows-SecGrp" + description = "Allow inbound SSH" + vpc_id = "${aws_vpc.main.id}" + + # SSH from local IP + ingress { + from_port = 22 + to_port = 22 + protocol = "tcp" + + cidr_blocks = [ + "${chomp(data.http.ip.body)}/32", + ] + } + + # WinRM from local IP + ingress { + from_port = 5985 + to_port = 5986 + protocol = "tcp" + + cidr_blocks = [ + "${chomp(data.http.ip.body)}/32", + ] + } + + # RDP from local IP + ingress { + from_port = 3389 + to_port = 3389 + protocol = "tcp" + + cidr_blocks = [ + "${chomp(data.http.ip.body)}/32", + ] + } + + # All outbound is fine + egress { + from_port = 0 + to_port = 0 + protocol = "-1" + cidr_blocks = ["0.0.0.0/0"] + } +} + +# +# Spot Fleet IAM +# +resource "aws_iam_role" "iam_fleet_role" { + name = "BenchmarkFreqHorn-Windows-IAMSpotFleetRole" + + assume_role_policy = < Date: Tue, 20 Feb 2018 00:40:19 -0500 Subject: [PATCH 057/236] Consolidated bench ports from previous experiments --- bench_horn_ice/abdu_01.bpl | 188 + bench_horn_ice/abdu_02.bpl | 187 + bench_horn_ice/abdu_03.bpl | 188 + bench_horn_ice/bouncy_two_counters_merged.bpl | 198 + bench_horn_ice/cggmp_iter_1.bpl | 217 + bench_horn_ice/cggmp_iter_2.bpl | 217 + bench_horn_ice/cggmp_iter_3.bpl | 217 + bench_horn_ice/const_div_1.bpl | 177 + bench_horn_ice/const_div_2.bpl | 177 + bench_horn_ice/const_div_mod.bpl | 179 + ...ue-unreach-call_true-termination_bound.bpl | 183 + ...-unreach-call_true-termination_unbound.bpl | 184 + bench_horn_ice/exact_iters_1.bpl | 182 + bench_horn_ice/exact_iters_2.bpl | 182 + bench_horn_ice/exact_iters_3.bpl | 182 + bench_horn_ice/exact_iters_4.bpl | 187 + bench_horn_ice/exact_iters_5.bpl | 187 + bench_horn_ice/nonlin_div.bpl | 183 + bench_horn_ice/nonlin_factorial.bpl | 182 + bench_horn_ice/nonlin_gauss_sum.bpl | 185 + bench_horn_ice/nonlin_minus.bpl | 184 + bench_horn_ice/nonlin_minus_1.bpl | 184 + bench_horn_ice/nonlin_minus_2.bpl | 186 + bench_horn_ice/nonlin_mod.bpl | 180 + bench_horn_ice/nonlin_mod_1.bpl | 177 + bench_horn_ice/nonlin_mod_2.bpl | 182 + bench_horn_ice/nonlin_mod_mult.bpl | 193 + bench_horn_ice/nonlin_mult_1.bpl | 184 + bench_horn_ice/nonlin_mult_2.bpl | 191 + bench_horn_ice/nonlin_mult_3.bpl | 191 + bench_horn_ice/nonlin_mult_4.bpl | 191 + bench_horn_ice/nonlin_mult_5.bpl | 186 + bench_horn_ice/nonlin_mult_6.bpl | 180 + bench_horn_ice/nonlin_power.bpl | 179 + bench_horn_ice/nonlin_square.bpl | 178 + bench_horn_ice/recur_1.bpl | 187 + bench_horn_ice/samples_multiple_inv_01.bpl | 178 + bench_horn_ice/samples_multiple_inv_02.bpl | 181 + bench_horn_ice/samples_multiple_inv_03.bpl | 180 + bench_horn_ice/samples_multiple_inv_04.bpl | 184 + bench_horn_ice/samples_only_01.bpl | 187 + bench_horn_ice/samples_only_02.bpl | 225 + bench_horn_ice/samples_only_03.bpl | 191 + bench_horn_ice/samples_only_04.bpl | 197 + bench_horn_ice/samples_only_05.bpl | 190 + bench_horn_ice/samples_only_06.bpl | 191 + bench_horn_ice/samples_only_07.bpl | 181 + bench_horn_ice/samples_only_08.bpl | 192 + bench_horn_ice/samples_search_01.bpl | 187 + bench_horn_ice/samples_search_02.bpl | 195 + bench_horn_ice/samples_search_03.bpl | 196 + bench_horn_ice/samples_search_04.bpl | 189 + bench_horn_ice/samples_search_05.bpl | 189 + bench_horn_ice/samples_search_06.bpl | 191 + bench_horn_ice/samples_search_07.bpl | 199 + bench_horn_ice/samples_search_08.bpl | 189 + bench_horn_ice/samples_search_09.bpl | 188 + bench_horn_ice/samples_search_10.bpl | 179 + bench_horn_ice/samples_search_11.bpl | 191 + bench_horn_ice/samples_search_12.bpl | 206 + bench_horn_ice/samples_search_13.bpl | 206 + bench_horn_ice/samples_search_14.bpl | 206 + bench_horn_ice/samples_search_15.bpl | 205 + bench_horn_ice/samples_search_disj_ite_01.bpl | 204 + bench_horn_ice/samples_search_disj_ite_02.bpl | 203 + bench_horn_ice/samples_search_disj_ite_03.bpl | 196 + bench_horn_ice/samples_search_disj_ite_04.bpl | 196 + bench_horn_ice/samples_search_disj_ite_05.bpl | 200 + bench_horn_ice/samples_search_disj_ite_06.bpl | 200 + .../samples_shrink_big_numbers_1024.bpl | 3257 + .../samples_shrink_big_numbers_2048.bpl | 6329 ++ .../samples_shrink_big_numbers_4096.bpl | 12473 ++++ .../samples_shrink_big_numbers_8192.bpl | 24761 ++++++++ bench_horn_mcmc/abdu_01/config | 12 + bench_horn_mcmc/abdu_01/first.xml | 98 + bench_horn_mcmc/abdu_02/config | 12 + bench_horn_mcmc/abdu_02/first.xml | 104 + bench_horn_mcmc/abdu_03/config | 12 + bench_horn_mcmc/abdu_03/first.xml | 107 + .../bouncy_two_counters_merged/config | 12 + .../bouncy_two_counters_merged/first.xml | 132 + bench_horn_mcmc/cegar1/config | 12 + bench_horn_mcmc/cegar1/first.xml | 100 + bench_horn_mcmc/cegar2/config | 12 + bench_horn_mcmc/cegar2/first.xml | 95 + bench_horn_mcmc/cggmp_iter_1/config | 12 + bench_horn_mcmc/cggmp_iter_1/first.xml | 90 + bench_horn_mcmc/cggmp_iter_2/config | 12 + bench_horn_mcmc/cggmp_iter_2/first.xml | 90 + bench_horn_mcmc/cggmp_iter_3/config | 12 + bench_horn_mcmc/cggmp_iter_3/first.xml | 90 + bench_horn_mcmc/const_div_1/config | 12 + bench_horn_mcmc/const_div_1/first.xml | 81 + bench_horn_mcmc/const_div_2/config | 12 + bench_horn_mcmc/const_div_2/first.xml | 81 + bench_horn_mcmc/const_div_mod/config | 12 + bench_horn_mcmc/const_div_mod/first.xml | 87 + .../const_false-unreach-call1.c/config | 12 + .../const_false-unreach-call1.c/first.xml | 99 + .../config | 12 + .../first.xml | 70 + .../config | 12 + .../first.xml | 78 + .../config | 12 + .../first.xml | 80 + .../config | 12 + .../first.xml | 98 + .../config | 12 + .../first.xml | 104 + .../config | 12 + .../first.xml | 133 + bench_horn_mcmc/countud/config | 12 + bench_horn_mcmc/countud/first.xml | 102 + bench_horn_mcmc/dillig01/config | 12 + bench_horn_mcmc/dillig01/first.xml | 78 + bench_horn_mcmc/dillig03/config | 12 + bench_horn_mcmc/dillig03/first.xml | 86 + bench_horn_mcmc/dillig05/config | 12 + bench_horn_mcmc/dillig05/first.xml | 141 + bench_horn_mcmc/dillig07/config | 12 + bench_horn_mcmc/dillig07/first.xml | 108 + bench_horn_mcmc/exact_iters_1/config | 12 + bench_horn_mcmc/exact_iters_1/first.xml | 84 + bench_horn_mcmc/exact_iters_2/config | 12 + bench_horn_mcmc/exact_iters_2/first.xml | 84 + bench_horn_mcmc/exact_iters_3/config | 12 + bench_horn_mcmc/exact_iters_3/first.xml | 84 + bench_horn_mcmc/exact_iters_4/config | 12 + bench_horn_mcmc/exact_iters_4/first.xml | 108 + bench_horn_mcmc/exact_iters_5/config | 12 + bench_horn_mcmc/exact_iters_5/first.xml | 108 + bench_horn_mcmc/formula22/config | 12 + bench_horn_mcmc/formula22/first.xml | 158 + bench_horn_mcmc/formula25/config | 12 + bench_horn_mcmc/formula25/first.xml | 205 + bench_horn_mcmc/formula27/config | 12 + bench_horn_mcmc/formula27/first.xml | 233 + bench_horn_mcmc/nonlin_div/config | 12 + bench_horn_mcmc/nonlin_div/first.xml | 92 + bench_horn_mcmc/nonlin_factorial/config | 12 + bench_horn_mcmc/nonlin_factorial/first.xml | 78 + bench_horn_mcmc/nonlin_gauss_sum/config | 12 + bench_horn_mcmc/nonlin_gauss_sum/first.xml | 122 + bench_horn_mcmc/nonlin_minus/config | 12 + bench_horn_mcmc/nonlin_minus/first.xml | 98 + bench_horn_mcmc/nonlin_minus_1/config | 12 + bench_horn_mcmc/nonlin_minus_1/first.xml | 98 + bench_horn_mcmc/nonlin_minus_2/config | 12 + bench_horn_mcmc/nonlin_minus_2/first.xml | 118 + bench_horn_mcmc/nonlin_mod/config | 12 + bench_horn_mcmc/nonlin_mod/first.xml | 71 + bench_horn_mcmc/nonlin_mod_1/config | 12 + bench_horn_mcmc/nonlin_mod_1/first.xml | 71 + bench_horn_mcmc/nonlin_mod_2/config | 12 + bench_horn_mcmc/nonlin_mod_2/first.xml | 86 + bench_horn_mcmc/nonlin_mod_mult/config | 12 + bench_horn_mcmc/nonlin_mod_mult/first.xml | 123 + bench_horn_mcmc/nonlin_mult_1/config | 12 + bench_horn_mcmc/nonlin_mult_1/first.xml | 92 + bench_horn_mcmc/nonlin_mult_2/config | 12 + bench_horn_mcmc/nonlin_mult_2/first.xml | 124 + bench_horn_mcmc/nonlin_mult_3/config | 12 + bench_horn_mcmc/nonlin_mult_3/first.xml | 124 + bench_horn_mcmc/nonlin_mult_4/config | 12 + bench_horn_mcmc/nonlin_mult_4/first.xml | 127 + bench_horn_mcmc/nonlin_mult_5/config | 12 + bench_horn_mcmc/nonlin_mult_5/first.xml | 109 + bench_horn_mcmc/nonlin_mult_6/config | 12 + bench_horn_mcmc/nonlin_mult_6/first.xml | 91 + bench_horn_mcmc/nonlin_power/config | 12 + bench_horn_mcmc/nonlin_power/first.xml | 68 + bench_horn_mcmc/nonlin_square/config | 12 + bench_horn_mcmc/nonlin_square/first.xml | 85 + bench_horn_mcmc/recur_1/config | 12 + bench_horn_mcmc/recur_1/first.xml | 103 + bench_horn_mcmc/samples_only_01/config | 12 + bench_horn_mcmc/samples_only_01/first.xml | 82 + bench_horn_mcmc/samples_only_02/config | 12 + bench_horn_mcmc/samples_only_02/first.xml | 159 + bench_horn_mcmc/samples_only_03/config | 12 + bench_horn_mcmc/samples_only_03/first.xml | 90 + bench_horn_mcmc/samples_only_04/config | 12 + bench_horn_mcmc/samples_only_04/first.xml | 128 + bench_horn_mcmc/samples_only_05/config | 12 + bench_horn_mcmc/samples_only_05/first.xml | 90 + bench_horn_mcmc/samples_only_06/config | 12 + bench_horn_mcmc/samples_only_06/first.xml | 117 + bench_horn_mcmc/samples_only_07/config | 12 + bench_horn_mcmc/samples_only_07/first.xml | 87 + bench_horn_mcmc/samples_only_08/config | 12 + bench_horn_mcmc/samples_only_08/first.xml | 137 + bench_horn_mcmc/samples_search_01/config | 12 + bench_horn_mcmc/samples_search_01/first.xml | 78 + bench_horn_mcmc/samples_search_02/config | 12 + bench_horn_mcmc/samples_search_02/first.xml | 122 + bench_horn_mcmc/samples_search_03/config | 12 + bench_horn_mcmc/samples_search_03/first.xml | 94 + bench_horn_mcmc/samples_search_04/config | 12 + bench_horn_mcmc/samples_search_04/first.xml | 90 + bench_horn_mcmc/samples_search_05/config | 12 + bench_horn_mcmc/samples_search_05/first.xml | 90 + bench_horn_mcmc/samples_search_06/config | 12 + bench_horn_mcmc/samples_search_06/first.xml | 99 + bench_horn_mcmc/samples_search_07/config | 12 + bench_horn_mcmc/samples_search_07/first.xml | 128 + bench_horn_mcmc/samples_search_08/config | 12 + bench_horn_mcmc/samples_search_08/first.xml | 91 + bench_horn_mcmc/samples_search_09/config | 12 + bench_horn_mcmc/samples_search_09/first.xml | 82 + bench_horn_mcmc/samples_search_10/config | 12 + bench_horn_mcmc/samples_search_10/first.xml | 76 + bench_horn_mcmc/samples_search_11/config | 12 + bench_horn_mcmc/samples_search_11/first.xml | 107 + bench_horn_mcmc/samples_search_12/config | 12 + bench_horn_mcmc/samples_search_12/first.xml | 186 + bench_horn_mcmc/samples_search_13/config | 12 + bench_horn_mcmc/samples_search_13/first.xml | 194 + bench_horn_mcmc/samples_search_14/config | 12 + bench_horn_mcmc/samples_search_14/first.xml | 195 + bench_horn_mcmc/samples_search_15/config | 12 + bench_horn_mcmc/samples_search_15/first.xml | 195 + .../samples_search_disj_ite_01/config | 12 + .../samples_search_disj_ite_01/first.xml | 152 + .../samples_search_disj_ite_02/config | 12 + .../samples_search_disj_ite_02/first.xml | 155 + .../samples_search_disj_ite_03/config | 12 + .../samples_search_disj_ite_03/first.xml | 114 + .../samples_search_disj_ite_04/config | 12 + .../samples_search_disj_ite_04/first.xml | 117 + .../samples_search_disj_ite_05/config | 12 + .../samples_search_disj_ite_05/first.xml | 114 + .../samples_search_disj_ite_06/config | 12 + .../samples_search_disj_ite_06/first.xml | 114 + .../samples_shrink_big_numbers_1024/config | 12 + .../samples_shrink_big_numbers_1024/first.xml | 6197 ++ .../samples_shrink_big_numbers_2048/config | 12 + .../samples_shrink_big_numbers_2048/first.xml | 12341 ++++ .../samples_shrink_big_numbers_4096/config | 12 + .../samples_shrink_big_numbers_4096/first.xml | 24635 ++++++++ .../samples_shrink_big_numbers_8192/config | 12 + .../samples_shrink_big_numbers_8192/first.xml | 49205 ++++++++++++++++ 241 files changed, 162092 insertions(+) create mode 100644 bench_horn_ice/abdu_01.bpl create mode 100644 bench_horn_ice/abdu_02.bpl create mode 100644 bench_horn_ice/abdu_03.bpl create mode 100644 bench_horn_ice/bouncy_two_counters_merged.bpl create mode 100644 bench_horn_ice/cggmp_iter_1.bpl create mode 100644 bench_horn_ice/cggmp_iter_2.bpl create mode 100644 bench_horn_ice/cggmp_iter_3.bpl create mode 100644 bench_horn_ice/const_div_1.bpl create mode 100644 bench_horn_ice/const_div_2.bpl create mode 100644 bench_horn_ice/const_div_mod.bpl create mode 100644 bench_horn_ice/count_by_k_true-unreach-call_true-termination_bound.bpl create mode 100644 bench_horn_ice/count_by_k_true-unreach-call_true-termination_unbound.bpl create mode 100644 bench_horn_ice/exact_iters_1.bpl create mode 100644 bench_horn_ice/exact_iters_2.bpl create mode 100644 bench_horn_ice/exact_iters_3.bpl create mode 100644 bench_horn_ice/exact_iters_4.bpl create mode 100644 bench_horn_ice/exact_iters_5.bpl create mode 100644 bench_horn_ice/nonlin_div.bpl create mode 100644 bench_horn_ice/nonlin_factorial.bpl create mode 100644 bench_horn_ice/nonlin_gauss_sum.bpl create mode 100755 bench_horn_ice/nonlin_minus.bpl create mode 100644 bench_horn_ice/nonlin_minus_1.bpl create mode 100644 bench_horn_ice/nonlin_minus_2.bpl create mode 100755 bench_horn_ice/nonlin_mod.bpl create mode 100644 bench_horn_ice/nonlin_mod_1.bpl create mode 100644 bench_horn_ice/nonlin_mod_2.bpl create mode 100644 bench_horn_ice/nonlin_mod_mult.bpl create mode 100644 bench_horn_ice/nonlin_mult_1.bpl create mode 100644 bench_horn_ice/nonlin_mult_2.bpl create mode 100644 bench_horn_ice/nonlin_mult_3.bpl create mode 100644 bench_horn_ice/nonlin_mult_4.bpl create mode 100644 bench_horn_ice/nonlin_mult_5.bpl create mode 100644 bench_horn_ice/nonlin_mult_6.bpl create mode 100644 bench_horn_ice/nonlin_power.bpl create mode 100644 bench_horn_ice/nonlin_square.bpl create mode 100644 bench_horn_ice/recur_1.bpl create mode 100644 bench_horn_ice/samples_multiple_inv_01.bpl create mode 100644 bench_horn_ice/samples_multiple_inv_02.bpl create mode 100644 bench_horn_ice/samples_multiple_inv_03.bpl create mode 100644 bench_horn_ice/samples_multiple_inv_04.bpl create mode 100644 bench_horn_ice/samples_only_01.bpl create mode 100644 bench_horn_ice/samples_only_02.bpl create mode 100644 bench_horn_ice/samples_only_03.bpl create mode 100644 bench_horn_ice/samples_only_04.bpl create mode 100644 bench_horn_ice/samples_only_05.bpl create mode 100644 bench_horn_ice/samples_only_06.bpl create mode 100644 bench_horn_ice/samples_only_07.bpl create mode 100644 bench_horn_ice/samples_only_08.bpl create mode 100644 bench_horn_ice/samples_search_01.bpl create mode 100644 bench_horn_ice/samples_search_02.bpl create mode 100644 bench_horn_ice/samples_search_03.bpl create mode 100644 bench_horn_ice/samples_search_04.bpl create mode 100644 bench_horn_ice/samples_search_05.bpl create mode 100644 bench_horn_ice/samples_search_06.bpl create mode 100644 bench_horn_ice/samples_search_07.bpl create mode 100644 bench_horn_ice/samples_search_08.bpl create mode 100644 bench_horn_ice/samples_search_09.bpl create mode 100644 bench_horn_ice/samples_search_10.bpl create mode 100644 bench_horn_ice/samples_search_11.bpl create mode 100644 bench_horn_ice/samples_search_12.bpl create mode 100644 bench_horn_ice/samples_search_13.bpl create mode 100644 bench_horn_ice/samples_search_14.bpl create mode 100644 bench_horn_ice/samples_search_15.bpl create mode 100644 bench_horn_ice/samples_search_disj_ite_01.bpl create mode 100644 bench_horn_ice/samples_search_disj_ite_02.bpl create mode 100644 bench_horn_ice/samples_search_disj_ite_03.bpl create mode 100644 bench_horn_ice/samples_search_disj_ite_04.bpl create mode 100644 bench_horn_ice/samples_search_disj_ite_05.bpl create mode 100644 bench_horn_ice/samples_search_disj_ite_06.bpl create mode 100644 bench_horn_ice/samples_shrink_big_numbers_1024.bpl create mode 100644 bench_horn_ice/samples_shrink_big_numbers_2048.bpl create mode 100644 bench_horn_ice/samples_shrink_big_numbers_4096.bpl create mode 100644 bench_horn_ice/samples_shrink_big_numbers_8192.bpl create mode 100644 bench_horn_mcmc/abdu_01/config create mode 100644 bench_horn_mcmc/abdu_01/first.xml create mode 100644 bench_horn_mcmc/abdu_02/config create mode 100644 bench_horn_mcmc/abdu_02/first.xml create mode 100644 bench_horn_mcmc/abdu_03/config create mode 100644 bench_horn_mcmc/abdu_03/first.xml create mode 100644 bench_horn_mcmc/bouncy_two_counters_merged/config create mode 100644 bench_horn_mcmc/bouncy_two_counters_merged/first.xml create mode 100644 bench_horn_mcmc/cegar1/config create mode 100644 bench_horn_mcmc/cegar1/first.xml create mode 100644 bench_horn_mcmc/cegar2/config create mode 100644 bench_horn_mcmc/cegar2/first.xml create mode 100644 bench_horn_mcmc/cggmp_iter_1/config create mode 100644 bench_horn_mcmc/cggmp_iter_1/first.xml create mode 100644 bench_horn_mcmc/cggmp_iter_2/config create mode 100644 bench_horn_mcmc/cggmp_iter_2/first.xml create mode 100644 bench_horn_mcmc/cggmp_iter_3/config create mode 100644 bench_horn_mcmc/cggmp_iter_3/first.xml create mode 100644 bench_horn_mcmc/const_div_1/config create mode 100644 bench_horn_mcmc/const_div_1/first.xml create mode 100644 bench_horn_mcmc/const_div_2/config create mode 100644 bench_horn_mcmc/const_div_2/first.xml create mode 100644 bench_horn_mcmc/const_div_mod/config create mode 100644 bench_horn_mcmc/const_div_mod/first.xml create mode 100644 bench_horn_mcmc/const_false-unreach-call1.c/config create mode 100644 bench_horn_mcmc/const_false-unreach-call1.c/first.xml create mode 100644 bench_horn_mcmc/count_by_1_true-unreach-call_true-termination.c/config create mode 100644 bench_horn_mcmc/count_by_1_true-unreach-call_true-termination.c/first.xml create mode 100644 bench_horn_mcmc/count_by_1_variant_true-unreach-call_true-termination/config create mode 100644 bench_horn_mcmc/count_by_1_variant_true-unreach-call_true-termination/first.xml create mode 100644 bench_horn_mcmc/count_by_2_true-unreach-call_true-termination/config create mode 100644 bench_horn_mcmc/count_by_2_true-unreach-call_true-termination/first.xml create mode 100644 bench_horn_mcmc/count_by_k_true-unreach-call_true-termination_bound/config create mode 100644 bench_horn_mcmc/count_by_k_true-unreach-call_true-termination_bound/first.xml create mode 100644 bench_horn_mcmc/count_by_k_true-unreach-call_true-termination_unbound/config create mode 100644 bench_horn_mcmc/count_by_k_true-unreach-call_true-termination_unbound/first.xml create mode 100644 bench_horn_mcmc/count_by_nondet_true-unreach-call_true-termination/config create mode 100644 bench_horn_mcmc/count_by_nondet_true-unreach-call_true-termination/first.xml create mode 100644 bench_horn_mcmc/countud/config create mode 100644 bench_horn_mcmc/countud/first.xml create mode 100644 bench_horn_mcmc/dillig01/config create mode 100644 bench_horn_mcmc/dillig01/first.xml create mode 100644 bench_horn_mcmc/dillig03/config create mode 100644 bench_horn_mcmc/dillig03/first.xml create mode 100644 bench_horn_mcmc/dillig05/config create mode 100644 bench_horn_mcmc/dillig05/first.xml create mode 100644 bench_horn_mcmc/dillig07/config create mode 100644 bench_horn_mcmc/dillig07/first.xml create mode 100644 bench_horn_mcmc/exact_iters_1/config create mode 100644 bench_horn_mcmc/exact_iters_1/first.xml create mode 100644 bench_horn_mcmc/exact_iters_2/config create mode 100644 bench_horn_mcmc/exact_iters_2/first.xml create mode 100644 bench_horn_mcmc/exact_iters_3/config create mode 100644 bench_horn_mcmc/exact_iters_3/first.xml create mode 100644 bench_horn_mcmc/exact_iters_4/config create mode 100644 bench_horn_mcmc/exact_iters_4/first.xml create mode 100644 bench_horn_mcmc/exact_iters_5/config create mode 100644 bench_horn_mcmc/exact_iters_5/first.xml create mode 100644 bench_horn_mcmc/formula22/config create mode 100644 bench_horn_mcmc/formula22/first.xml create mode 100644 bench_horn_mcmc/formula25/config create mode 100644 bench_horn_mcmc/formula25/first.xml create mode 100644 bench_horn_mcmc/formula27/config create mode 100644 bench_horn_mcmc/formula27/first.xml create mode 100644 bench_horn_mcmc/nonlin_div/config create mode 100644 bench_horn_mcmc/nonlin_div/first.xml create mode 100644 bench_horn_mcmc/nonlin_factorial/config create mode 100644 bench_horn_mcmc/nonlin_factorial/first.xml create mode 100644 bench_horn_mcmc/nonlin_gauss_sum/config create mode 100644 bench_horn_mcmc/nonlin_gauss_sum/first.xml create mode 100755 bench_horn_mcmc/nonlin_minus/config create mode 100755 bench_horn_mcmc/nonlin_minus/first.xml create mode 100644 bench_horn_mcmc/nonlin_minus_1/config create mode 100644 bench_horn_mcmc/nonlin_minus_1/first.xml create mode 100644 bench_horn_mcmc/nonlin_minus_2/config create mode 100644 bench_horn_mcmc/nonlin_minus_2/first.xml create mode 100755 bench_horn_mcmc/nonlin_mod/config create mode 100755 bench_horn_mcmc/nonlin_mod/first.xml create mode 100644 bench_horn_mcmc/nonlin_mod_1/config create mode 100644 bench_horn_mcmc/nonlin_mod_1/first.xml create mode 100644 bench_horn_mcmc/nonlin_mod_2/config create mode 100644 bench_horn_mcmc/nonlin_mod_2/first.xml create mode 100644 bench_horn_mcmc/nonlin_mod_mult/config create mode 100644 bench_horn_mcmc/nonlin_mod_mult/first.xml create mode 100644 bench_horn_mcmc/nonlin_mult_1/config create mode 100644 bench_horn_mcmc/nonlin_mult_1/first.xml create mode 100644 bench_horn_mcmc/nonlin_mult_2/config create mode 100644 bench_horn_mcmc/nonlin_mult_2/first.xml create mode 100644 bench_horn_mcmc/nonlin_mult_3/config create mode 100644 bench_horn_mcmc/nonlin_mult_3/first.xml create mode 100644 bench_horn_mcmc/nonlin_mult_4/config create mode 100644 bench_horn_mcmc/nonlin_mult_4/first.xml create mode 100644 bench_horn_mcmc/nonlin_mult_5/config create mode 100644 bench_horn_mcmc/nonlin_mult_5/first.xml create mode 100644 bench_horn_mcmc/nonlin_mult_6/config create mode 100644 bench_horn_mcmc/nonlin_mult_6/first.xml create mode 100644 bench_horn_mcmc/nonlin_power/config create mode 100644 bench_horn_mcmc/nonlin_power/first.xml create mode 100644 bench_horn_mcmc/nonlin_square/config create mode 100644 bench_horn_mcmc/nonlin_square/first.xml create mode 100644 bench_horn_mcmc/recur_1/config create mode 100644 bench_horn_mcmc/recur_1/first.xml create mode 100644 bench_horn_mcmc/samples_only_01/config create mode 100644 bench_horn_mcmc/samples_only_01/first.xml create mode 100644 bench_horn_mcmc/samples_only_02/config create mode 100644 bench_horn_mcmc/samples_only_02/first.xml create mode 100644 bench_horn_mcmc/samples_only_03/config create mode 100644 bench_horn_mcmc/samples_only_03/first.xml create mode 100644 bench_horn_mcmc/samples_only_04/config create mode 100644 bench_horn_mcmc/samples_only_04/first.xml create mode 100644 bench_horn_mcmc/samples_only_05/config create mode 100644 bench_horn_mcmc/samples_only_05/first.xml create mode 100644 bench_horn_mcmc/samples_only_06/config create mode 100644 bench_horn_mcmc/samples_only_06/first.xml create mode 100644 bench_horn_mcmc/samples_only_07/config create mode 100644 bench_horn_mcmc/samples_only_07/first.xml create mode 100644 bench_horn_mcmc/samples_only_08/config create mode 100644 bench_horn_mcmc/samples_only_08/first.xml create mode 100644 bench_horn_mcmc/samples_search_01/config create mode 100644 bench_horn_mcmc/samples_search_01/first.xml create mode 100644 bench_horn_mcmc/samples_search_02/config create mode 100644 bench_horn_mcmc/samples_search_02/first.xml create mode 100644 bench_horn_mcmc/samples_search_03/config create mode 100644 bench_horn_mcmc/samples_search_03/first.xml create mode 100644 bench_horn_mcmc/samples_search_04/config create mode 100644 bench_horn_mcmc/samples_search_04/first.xml create mode 100644 bench_horn_mcmc/samples_search_05/config create mode 100644 bench_horn_mcmc/samples_search_05/first.xml create mode 100644 bench_horn_mcmc/samples_search_06/config create mode 100644 bench_horn_mcmc/samples_search_06/first.xml create mode 100644 bench_horn_mcmc/samples_search_07/config create mode 100644 bench_horn_mcmc/samples_search_07/first.xml create mode 100644 bench_horn_mcmc/samples_search_08/config create mode 100644 bench_horn_mcmc/samples_search_08/first.xml create mode 100644 bench_horn_mcmc/samples_search_09/config create mode 100644 bench_horn_mcmc/samples_search_09/first.xml create mode 100644 bench_horn_mcmc/samples_search_10/config create mode 100644 bench_horn_mcmc/samples_search_10/first.xml create mode 100644 bench_horn_mcmc/samples_search_11/config create mode 100644 bench_horn_mcmc/samples_search_11/first.xml create mode 100644 bench_horn_mcmc/samples_search_12/config create mode 100644 bench_horn_mcmc/samples_search_12/first.xml create mode 100644 bench_horn_mcmc/samples_search_13/config create mode 100644 bench_horn_mcmc/samples_search_13/first.xml create mode 100644 bench_horn_mcmc/samples_search_14/config create mode 100644 bench_horn_mcmc/samples_search_14/first.xml create mode 100644 bench_horn_mcmc/samples_search_15/config create mode 100644 bench_horn_mcmc/samples_search_15/first.xml create mode 100644 bench_horn_mcmc/samples_search_disj_ite_01/config create mode 100644 bench_horn_mcmc/samples_search_disj_ite_01/first.xml create mode 100644 bench_horn_mcmc/samples_search_disj_ite_02/config create mode 100644 bench_horn_mcmc/samples_search_disj_ite_02/first.xml create mode 100644 bench_horn_mcmc/samples_search_disj_ite_03/config create mode 100644 bench_horn_mcmc/samples_search_disj_ite_03/first.xml create mode 100644 bench_horn_mcmc/samples_search_disj_ite_04/config create mode 100644 bench_horn_mcmc/samples_search_disj_ite_04/first.xml create mode 100644 bench_horn_mcmc/samples_search_disj_ite_05/config create mode 100644 bench_horn_mcmc/samples_search_disj_ite_05/first.xml create mode 100644 bench_horn_mcmc/samples_search_disj_ite_06/config create mode 100644 bench_horn_mcmc/samples_search_disj_ite_06/first.xml create mode 100644 bench_horn_mcmc/samples_shrink_big_numbers_1024/config create mode 100644 bench_horn_mcmc/samples_shrink_big_numbers_1024/first.xml create mode 100644 bench_horn_mcmc/samples_shrink_big_numbers_2048/config create mode 100644 bench_horn_mcmc/samples_shrink_big_numbers_2048/first.xml create mode 100644 bench_horn_mcmc/samples_shrink_big_numbers_4096/config create mode 100644 bench_horn_mcmc/samples_shrink_big_numbers_4096/first.xml create mode 100644 bench_horn_mcmc/samples_shrink_big_numbers_8192/config create mode 100644 bench_horn_mcmc/samples_shrink_big_numbers_8192/first.xml diff --git a/bench_horn_ice/abdu_01.bpl b/bench_horn_ice/abdu_01.bpl new file mode 100644 index 000000000..0b4656e9d --- /dev/null +++ b/bench_horn_ice/abdu_01.bpl @@ -0,0 +1,188 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int, len:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $x: int; + var $x1: int; + var $y: int; + var $y1: int; + var $len: int; +$bb0: + $x := 0; + $y := 0; + assume $len >= 0; + goto $bb1; +$bb1: + assert b0($x, $y, $len); + //$b := $sge($p, $p1); + if ($x < $len) { + goto $bb2, $bb3; + } else { + goto $bb3; + } +$bb2: + $x1 := $add($x, 1); + $y1 := $add($y, 2); + $x := $x1; + $y := $y1; + goto $bb1; +$bb3: + assert $y == $mul(2, $x); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/abdu_02.bpl b/bench_horn_ice/abdu_02.bpl new file mode 100644 index 000000000..b890da5b1 --- /dev/null +++ b/bench_horn_ice/abdu_02.bpl @@ -0,0 +1,187 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int, len:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $x: int; + var $x1: int; + var $y: int; + var $y1: int; + var $len: int; +$bb0: + $x := 0; + $y := 0; + assume $len >= 0; + goto $bb1; +$bb1: + assert b0($x, $y, $len); + if ($x < $len) { + goto $bb2, $bb3; + } else { + goto $bb3; + } +$bb2: + $x1 := $add($x, 1); + $y1 := $add($y, 2); + $x := $x1; + $y := $y1; + goto $bb1; +$bb3: + assert ($x != $len) || ($y == $mul(2, $len)); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/abdu_03.bpl b/bench_horn_ice/abdu_03.bpl new file mode 100644 index 000000000..4109804a7 --- /dev/null +++ b/bench_horn_ice/abdu_03.bpl @@ -0,0 +1,188 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(x:int, y:int, len:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $x: int; + var $x1: int; + var $y: int; + var $y1: int; + var $len: int; +$bb0: + $x := 0; + $y := 0; + assume $len >= 0; + goto $bb1; +$bb1: + assert b0($x, $y, $len); + //$b := $sge($p, $p1); + if ($x < $len) { + goto $bb2; + } else { + goto $bb3; + } +$bb2: + $x1 := $add($x, 1); + $y1 := $add($y, 2); + $x := $x1; + $y := $y1; + goto $bb1; +$bb3: + assert $add($x, $y) == $mul(3, $len); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/bouncy_two_counters_merged.bpl b/bench_horn_ice/bouncy_two_counters_merged.bpl new file mode 100644 index 000000000..702d75bcb --- /dev/null +++ b/bench_horn_ice/bouncy_two_counters_merged.bpl @@ -0,0 +1,198 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int, k:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $x1: int; + var $y1: int; + var $z1: int; + var $x2: int; + var $y2: int; + var $z2: int; + var $cond1: bool; + var $cond2: bool; +$bb0: + $x1 := 0; + $y1 := 0; + $z1 := 0; + goto $bb1; +$bb1: + assert b0($x1, $y1, $z1); + //$b := $sge($p, $p1); + goto $bb1a, $bb1b; +$bb1a: + $x2 := $add($x1, 1); + $y2 := $y1; + $z2 := $add($z1, 1); + goto $bb1c; +$bb1b: + $x2 := $x1; + $y2 := $add($y1, 1); + $z2 := $sub($z1, 1); + goto $bb1c; +$bb1c: + $x1 := $x2; + $y1 := $y2; + $z1 := $z2; + goto $bb1, $bb3; +$bb3: + $cond1 := ($y1 == $x1); + $cond2 := ($z1 == 0); + assert (!$cond1) || $cond2; + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/cggmp_iter_1.bpl b/bench_horn_ice/cggmp_iter_1.bpl new file mode 100644 index 000000000..b30bbfb54 --- /dev/null +++ b/bench_horn_ice/cggmp_iter_1.bpl @@ -0,0 +1,217 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $p: int; + var $p1: int; + var $b: bool; + var $b2: bool; + var $p3: int; + var $p4: int; + var $p5: int; + var $p6: int; +$bb0: + assume {:sourceloc "cggmp2005_true-unreach-call.c", 9, 0} true; + // WARNING: ignoring llvm.debug call. + assume true; + assume {:sourceloc "cggmp2005_true-unreach-call.c", 10, 0} true; + // WARNING: ignoring llvm.debug call. + assume true; + assume {:sourceloc "cggmp2005_true-unreach-call.c", 11, 0} true; + $p := 2; + $p1 := 1; + goto $bb1; +$bb1: + assert b0($p1, $p); + + assume {:sourceloc "cggmp2005_true-unreach-call.c", 11, 0} true; + $b := $sge($p, $p1); + assume {:sourceloc "cggmp2005_true-unreach-call.c", 11, 0} true; + goto $bb4, $bb5; +$bb2: + assume {:sourceloc "cggmp2005_true-unreach-call.c", 12, 0} true; + $p5 := $add($p1, 2); + assume {:sourceloc "cggmp2005_true-unreach-call.c", 12, 0} true; + // WARNING: ignoring llvm.debug call. + assume true; + assume {:sourceloc "cggmp2005_true-unreach-call.c", 13, 0} true; + $p6 := $add(-1, $p); + assume {:sourceloc "cggmp2005_true-unreach-call.c", 13, 0} true; + // WARNING: ignoring llvm.debug call. + assume true; + assume {:sourceloc "cggmp2005_true-unreach-call.c", 14, 0} true; + $p := $p6; + $p1 := $p5; + goto $bb1; +$bb3: + assume {:sourceloc "cggmp2005_true-unreach-call.c", 15, 0} true; + $b2 := ($p == 1); + assume {:sourceloc "cggmp2005_true-unreach-call.c", 15, 0} true; + assert $b2; + assume {:sourceloc "cggmp2005_true-unreach-call.c", 16, 0} true; + return; +$bb4: + assume {:sourceloc "cggmp2005_true-unreach-call.c", 11, 0} true; + assume $b; + goto $bb2; +$bb5: + assume {:sourceloc "cggmp2005_true-unreach-call.c", 11, 0} true; + assume !($b); + goto $bb3; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/cggmp_iter_2.bpl b/bench_horn_ice/cggmp_iter_2.bpl new file mode 100644 index 000000000..6e88dbbce --- /dev/null +++ b/bench_horn_ice/cggmp_iter_2.bpl @@ -0,0 +1,217 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $p: int; + var $p1: int; + var $b: bool; + var $b2: bool; + var $p3: int; + var $p4: int; + var $p5: int; + var $p6: int; +$bb0: + assume {:sourceloc "cggmp2005_true-unreach-call.c", 9, 0} true; + // WARNING: ignoring llvm.debug call. + assume true; + assume {:sourceloc "cggmp2005_true-unreach-call.c", 10, 0} true; + // WARNING: ignoring llvm.debug call. + assume true; + assume {:sourceloc "cggmp2005_true-unreach-call.c", 11, 0} true; + $p := 4; + $p1 := 1; + goto $bb1; +$bb1: + assert b0($p1, $p); + + assume {:sourceloc "cggmp2005_true-unreach-call.c", 11, 0} true; + $b := $sge($p, $p1); + assume {:sourceloc "cggmp2005_true-unreach-call.c", 11, 0} true; + goto $bb4, $bb5; +$bb2: + assume {:sourceloc "cggmp2005_true-unreach-call.c", 12, 0} true; + $p5 := $add($p1, 2); + assume {:sourceloc "cggmp2005_true-unreach-call.c", 12, 0} true; + // WARNING: ignoring llvm.debug call. + assume true; + assume {:sourceloc "cggmp2005_true-unreach-call.c", 13, 0} true; + $p6 := $add(-1, $p); + assume {:sourceloc "cggmp2005_true-unreach-call.c", 13, 0} true; + // WARNING: ignoring llvm.debug call. + assume true; + assume {:sourceloc "cggmp2005_true-unreach-call.c", 14, 0} true; + $p := $p6; + $p1 := $p5; + goto $bb1; +$bb3: + assume {:sourceloc "cggmp2005_true-unreach-call.c", 15, 0} true; + $b2 := ($p == 2); + assume {:sourceloc "cggmp2005_true-unreach-call.c", 15, 0} true; + assert $b2; + assume {:sourceloc "cggmp2005_true-unreach-call.c", 16, 0} true; + return; +$bb4: + assume {:sourceloc "cggmp2005_true-unreach-call.c", 11, 0} true; + assume $b; + goto $bb2; +$bb5: + assume {:sourceloc "cggmp2005_true-unreach-call.c", 11, 0} true; + assume !($b); + goto $bb3; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/cggmp_iter_3.bpl b/bench_horn_ice/cggmp_iter_3.bpl new file mode 100644 index 000000000..574b26444 --- /dev/null +++ b/bench_horn_ice/cggmp_iter_3.bpl @@ -0,0 +1,217 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $p: int; + var $p1: int; + var $b: bool; + var $b2: bool; + var $p3: int; + var $p4: int; + var $p5: int; + var $p6: int; +$bb0: + assume {:sourceloc "cggmp2005_true-unreach-call.c", 9, 0} true; + // WARNING: ignoring llvm.debug call. + assume true; + assume {:sourceloc "cggmp2005_true-unreach-call.c", 10, 0} true; + // WARNING: ignoring llvm.debug call. + assume true; + assume {:sourceloc "cggmp2005_true-unreach-call.c", 11, 0} true; + $p := 6; + $p1 := 1; + goto $bb1; +$bb1: + assert b0($p1, $p); + + assume {:sourceloc "cggmp2005_true-unreach-call.c", 11, 0} true; + $b := $sge($p, $p1); + assume {:sourceloc "cggmp2005_true-unreach-call.c", 11, 0} true; + goto $bb4, $bb5; +$bb2: + assume {:sourceloc "cggmp2005_true-unreach-call.c", 12, 0} true; + $p5 := $add($p1, 2); + assume {:sourceloc "cggmp2005_true-unreach-call.c", 12, 0} true; + // WARNING: ignoring llvm.debug call. + assume true; + assume {:sourceloc "cggmp2005_true-unreach-call.c", 13, 0} true; + $p6 := $add(-1, $p); + assume {:sourceloc "cggmp2005_true-unreach-call.c", 13, 0} true; + // WARNING: ignoring llvm.debug call. + assume true; + assume {:sourceloc "cggmp2005_true-unreach-call.c", 14, 0} true; + $p := $p6; + $p1 := $p5; + goto $bb1; +$bb3: + assume {:sourceloc "cggmp2005_true-unreach-call.c", 15, 0} true; + $b2 := ($p == 4); + assume {:sourceloc "cggmp2005_true-unreach-call.c", 15, 0} true; + assert $b2; + assume {:sourceloc "cggmp2005_true-unreach-call.c", 16, 0} true; + return; +$bb4: + assume {:sourceloc "cggmp2005_true-unreach-call.c", 11, 0} true; + assume $b; + goto $bb2; +$bb5: + assume {:sourceloc "cggmp2005_true-unreach-call.c", 11, 0} true; + assume !($b); + goto $bb3; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/const_div_1.bpl b/bench_horn_ice/const_div_1.bpl new file mode 100644 index 000000000..7ea840695 --- /dev/null +++ b/bench_horn_ice/const_div_1.bpl @@ -0,0 +1,177 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $i: int; + var $j: int; +$bb0: + $i := 2; + $j := 1; + goto $bb1; +$bb1: + assert b0($i, $j); + goto $bb2, $bb3; +$bb2: + $i := $add($i, 2); + $j := $add($j, 1); + goto $bb1; +$bb3: + assert $j == $sdiv($i, 2); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/const_div_2.bpl b/bench_horn_ice/const_div_2.bpl new file mode 100644 index 000000000..deb7478cf --- /dev/null +++ b/bench_horn_ice/const_div_2.bpl @@ -0,0 +1,177 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $i: int; + var $j: int; +$bb0: + $i := 7610; + $j := 1; + goto $bb1; +$bb1: + assert b0($i, $j); + goto $bb2, $bb3; +$bb2: + $i := $add($i, 7610); + $j := $add($j, 1); + goto $bb1; +$bb3: + assert $j == $sdiv($i, 7610); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/const_div_mod.bpl b/bench_horn_ice/const_div_mod.bpl new file mode 100644 index 000000000..753d210a8 --- /dev/null +++ b/bench_horn_ice/const_div_mod.bpl @@ -0,0 +1,179 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $i: int; + var $j: int; +$bb0: + assume $i == $j; + goto $bb1; +$bb1: + assert b0($i, $j); + if (($i > 0) && ($mul($sdiv($i, 2), 2) == 0)) { + goto $bb2; + } else { + goto $bb3; + } +$bb2: + $i := $sdiv($i, 2); + goto $bb1; +$bb3: + assert ($i != 0) || ($mul($sdiv($j, 2), 2) == 0); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/count_by_k_true-unreach-call_true-termination_bound.bpl b/bench_horn_ice/count_by_k_true-unreach-call_true-termination_bound.bpl new file mode 100644 index 000000000..44cba053e --- /dev/null +++ b/bench_horn_ice/count_by_k_true-unreach-call_true-termination_bound.bpl @@ -0,0 +1,183 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, k:int, lrg:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $i: int; + var $k: int; + var $LRG: int; +$bb0: + $i := 0; + assume $LRG >= 0; + assume 0 <= $k; + goto $bb1; +$bb1: + assert b0($i, $k, $LRG); + //$b := $sge($p, $p1); + if ($i < $mul($LRG, $k)) { + goto $bb2; + } else { + goto $bb3; + } +$bb2: + $i := $add($i, $k); + goto $bb1; +$bb3: + assert $i > $mul($LRG, $k); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/count_by_k_true-unreach-call_true-termination_unbound.bpl b/bench_horn_ice/count_by_k_true-unreach-call_true-termination_unbound.bpl new file mode 100644 index 000000000..846c06edc --- /dev/null +++ b/bench_horn_ice/count_by_k_true-unreach-call_true-termination_unbound.bpl @@ -0,0 +1,184 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, k:int, lrg:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $i: int; + var $k: int; + var $LRG: int; +$bb0: + $i := 0; + assume $LRG >= 0; + assume 0 <= $k; + assume $k <= 10; + goto $bb1; +$bb1: + assert b0($i, $k, $LRG); + //$b := $sge($p, $p1); + if ($i < $mul($LRG, $k)) { + goto $bb2; + } else { + goto $bb3; + } +$bb2: + $i := $add($i, $k); + goto $bb1; +$bb3: + assert $i > $mul($LRG, $k); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/exact_iters_1.bpl b/bench_horn_ice/exact_iters_1.bpl new file mode 100644 index 000000000..511897da4 --- /dev/null +++ b/bench_horn_ice/exact_iters_1.bpl @@ -0,0 +1,182 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $i1: int; + var $i2: int; + var $j1: int; + var $j2: int; +$bb0: + $i1 := 0; + $j1 := 10; + goto $bb1; +$bb1: + assert b0($i1, $j1); + //$b := $sge($p, $p1); + goto $bb2, $bb3; +$bb2: + $i2 := $add($i1, 2); + $j2 := $sub($j1, 1); + $i1 := $i2; + $j1 := $j2; + goto $bb1; +$bb3: + assert ($i1 != 4) || ($j1 == 8); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/exact_iters_2.bpl b/bench_horn_ice/exact_iters_2.bpl new file mode 100644 index 000000000..28937d045 --- /dev/null +++ b/bench_horn_ice/exact_iters_2.bpl @@ -0,0 +1,182 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $i1: int; + var $i2: int; + var $j1: int; + var $j2: int; +$bb0: + $i1 := 0; + $j1 := 1000; + goto $bb1; +$bb1: + assert b0($i1, $j1); + //$b := $sge($p, $p1); + goto $bb2, $bb3; +$bb2: + $i2 := $add($i1, 2); + $j2 := $sub($j1, 1); + $i1 := $i2; + $j1 := $j2; + goto $bb1; +$bb3: + assert ($i1 != 400) || ($j1 == 800); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/exact_iters_3.bpl b/bench_horn_ice/exact_iters_3.bpl new file mode 100644 index 000000000..74a8a11e9 --- /dev/null +++ b/bench_horn_ice/exact_iters_3.bpl @@ -0,0 +1,182 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $i1: int; + var $i2: int; + var $j1: int; + var $j2: int; +$bb0: + $i1 := 0; + $j1 := 10000; + goto $bb1; +$bb1: + assert b0($i1, $j1); + //$b := $sge($p, $p1); + goto $bb2, $bb3; +$bb2: + $i2 := $add($i1, 2); + $j2 := $sub($j1, 1); + $i1 := $i2; + $j1 := $j2; + goto $bb1; +$bb3: + assert ($i1 != 4000) || ($j1 == 8000); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/exact_iters_4.bpl b/bench_horn_ice/exact_iters_4.bpl new file mode 100644 index 000000000..f6bc3b462 --- /dev/null +++ b/bench_horn_ice/exact_iters_4.bpl @@ -0,0 +1,187 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int, k:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $i1: int; + var $i2: int; + var $j1: int; + var $j2: int; + var $k1: int; + var $k2: int; +$bb0: + $i1 := 0; + $j1 := 10; + $k1 := 0; + goto $bb1; +$bb1: + assert b0($i1, $j1, $k1); + //$b := $sge($p, $p1); + goto $bb2, $bb3; +$bb2: + $i2 := $add($i1, 1); + $j2 := $sub($j1, 3); + $k2 := $add($k1, 2); + $i1 := $i2; + $j1 := $j2; + $k1 := $k2; + goto $bb1; +$bb3: + assert ($add($i1, $k1) != 6) || ($j1 == 4); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/exact_iters_5.bpl b/bench_horn_ice/exact_iters_5.bpl new file mode 100644 index 000000000..2fc079f7e --- /dev/null +++ b/bench_horn_ice/exact_iters_5.bpl @@ -0,0 +1,187 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int, k:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $i1: int; + var $i2: int; + var $j1: int; + var $j2: int; + var $k1: int; + var $k2: int; +$bb0: + $i1 := 0; + $j1 := 1000; + $k1 := 0; + goto $bb1; +$bb1: + assert b0($i1, $j1, $k1); + //$b := $sge($p, $p1); + goto $bb2, $bb3; +$bb2: + $i2 := $add($i1, 1); + $j2 := $sub($j1, 3); + $k2 := $add($k1, 2); + $i1 := $i2; + $j1 := $j2; + $k1 := $k2; + goto $bb1; +$bb3: + assert ($add($i1, $k1) != 600) || ($j1 == 400); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/nonlin_div.bpl b/bench_horn_ice/nonlin_div.bpl new file mode 100644 index 000000000..4fc9e8e34 --- /dev/null +++ b/bench_horn_ice/nonlin_div.bpl @@ -0,0 +1,183 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int, k:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $a: int; + var $b: int; + var $c: int; + var $a1: int; + var $c1: int; +$bb0: + $c := 1; + assume $b > 0; + assume $b == $a; + goto $bb1; +$bb1: + assert b0($a, $b, $c); + goto $bb2, $bb3; +$bb2: + $a1 := $add($a, $b); + $c1 := $add(1, $c); + $a := $a1; + $c := $c1; + goto $bb1; +$bb3: + assert $c == $sdiv($a, $b); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/nonlin_factorial.bpl b/bench_horn_ice/nonlin_factorial.bpl new file mode 100644 index 000000000..4cfa057f6 --- /dev/null +++ b/bench_horn_ice/nonlin_factorial.bpl @@ -0,0 +1,182 @@ +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $a: int; + var $p1: int; + var $b: bool; + var $b2: bool; + var $p5: int; + var $p6: int; +$bb0: + $a := 1; + $p1 := 1; + goto $bb1; +$bb1: + assert b0($p1, $a); + $b := $sge($a, $p1); + goto $bb2, $bb3; +$bb2: + $p5 := $mul($a, $p1); + $p6 := $add(1, $a); + $p1 := $p5; + $a := $p6; + goto $bb1; +$bb3: + $b2 := ($p1 > 0); + assert $b2; + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; diff --git a/bench_horn_ice/nonlin_gauss_sum.bpl b/bench_horn_ice/nonlin_gauss_sum.bpl new file mode 100644 index 000000000..37ce70e4b --- /dev/null +++ b/bench_horn_ice/nonlin_gauss_sum.bpl @@ -0,0 +1,185 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, n:int, sum:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + + +procedure main() + modifies alloc, $CurrAddr; +{ + var $i: int; + var $n: int; + var $sum: int; +$bb0: + $i := 1; + $sum := 0; + assume 1 <= $n; + assume $n <= 1000; + goto $bb1; +$bb1: + assert b0($i, $n, $sum); + if ($i < $n) { + goto $bb2; + } else { + goto $bb3; + } +$bb2: + $sum := $sum + $i; + $i := $i + 1; + goto $bb1; +$bb3: + assert (((2 * $n) + (2 * $sum)) == ($n * ($n + 1))); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/nonlin_minus.bpl b/bench_horn_ice/nonlin_minus.bpl new file mode 100755 index 000000000..ffbe00f16 --- /dev/null +++ b/bench_horn_ice/nonlin_minus.bpl @@ -0,0 +1,184 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int, n:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + + +procedure main() + modifies alloc, $CurrAddr; +{ + var $a: int; + var $b: int; + var $n: int; + var $n2: int; + var $a2: int; +$bb0: + assume $a > 0; + assume $b > 0; + $n := $mul($a, $b); + goto $bb1; +$bb1: + assert b0($a, $b, $n); + goto $bb2, $bb3; +$bb2: + $a2 := $sub($a, 1); + $n2 := $sub($n, $b); + $a := $a2; + $n := $n2; + goto $bb1; +$bb3: + assert ($n != 0) || ($a == 0); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/nonlin_minus_1.bpl b/bench_horn_ice/nonlin_minus_1.bpl new file mode 100644 index 000000000..d8ac14c56 --- /dev/null +++ b/bench_horn_ice/nonlin_minus_1.bpl @@ -0,0 +1,184 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(a:int, b:int, n:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + + +procedure main() + modifies alloc, $CurrAddr; +{ + var $a: int; + var $b: int; + var $n: int; + var $n2: int; + var $a2: int; +$bb0: + assume $a > 0; + assume $b > 0; + $n := $mul($a, $b); + goto $bb1; +$bb1: + assert b0($a, $b, $n); + goto $bb2, $bb3; +$bb2: + $a2 := $sub($a, 1); + $n2 := $sub($n, $b); + $a := $a2; + $n := $n2; + goto $bb1; +$bb3: + assert ($n != 0) || ($a == 0); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/nonlin_minus_2.bpl b/bench_horn_ice/nonlin_minus_2.bpl new file mode 100644 index 000000000..bda83731a --- /dev/null +++ b/bench_horn_ice/nonlin_minus_2.bpl @@ -0,0 +1,186 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(a:int, b:int, c:int, d:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + + +procedure main() + modifies alloc, $CurrAddr; +{ + var $a: int; + var $b: int; + var $c: int; + var $d: int; +$bb0: + assume $a > 0; + assume $b > 0; + $c := 0; + $d := $a; + goto $bb1; +$bb1: + assert b0($a, $b, $c, $d); + if ($d > $b) { + goto $bb2; + } else { + goto $bb3; + } +$bb2: + $c := $c + 1; + $d := $d - $b; + goto $bb1; +$bb3: + assert ($c >= $b) || ($a == ($d + ($b * $c))); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/nonlin_mod.bpl b/bench_horn_ice/nonlin_mod.bpl new file mode 100755 index 000000000..853bb4291 --- /dev/null +++ b/bench_horn_ice/nonlin_mod.bpl @@ -0,0 +1,180 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + + +procedure main() + modifies alloc, $CurrAddr; +{ + var $a: int; + var $b: int; + var $a1: int; + var $b1: int; +$bb0: + assume $b > 0; + assume $b == $a; + goto $bb1; +$bb1: + assert b0($a, $b); + goto $bb2, $bb3; +$bb2: + $a1 := $add($a, $b); + $a := $a1; + goto $bb1; +$bb3: + assert 0 == $sub($a, $mul($sdiv($a, $b), $b)); // mod + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/nonlin_mod_1.bpl b/bench_horn_ice/nonlin_mod_1.bpl new file mode 100644 index 000000000..47efe3790 --- /dev/null +++ b/bench_horn_ice/nonlin_mod_1.bpl @@ -0,0 +1,177 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + + +procedure main() + modifies alloc, $CurrAddr; +{ + var $a: int; + var $b: int; +$bb0: + assume $b > 0; + assume $b == $a; + goto $bb1; +$bb1: + assert b0($a, $b); + goto $bb2, $bb3; +$bb2: + $a := $add($a, $b); + goto $bb1; +$bb3: + assert 0 == $sub($a, $mul($sdiv($a, $b), $b)); // mod + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/nonlin_mod_2.bpl b/bench_horn_ice/nonlin_mod_2.bpl new file mode 100644 index 000000000..5da556785 --- /dev/null +++ b/bench_horn_ice/nonlin_mod_2.bpl @@ -0,0 +1,182 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + + +procedure main() + modifies alloc, $CurrAddr; +{ + var $a: int; + var $b: int; +$bb0: + assume $b > 0; + assume $a > 0; + assume $sub($a, $mul($sdiv($a, $b), $b)) == 0; // mod + goto $bb1; +$bb1: + assert b0($a, $b); + if ($a > $b) { + goto $bb2, $bb3; + } else { + goto $bb3; + } +$bb2: + $a := $sub($a, $b); + goto $bb1; +$bb3: + assert 0 == $sub($a, $mul($sdiv($a, $b), $b)); // mod + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/nonlin_mod_mult.bpl b/bench_horn_ice/nonlin_mod_mult.bpl new file mode 100644 index 000000000..889952b96 --- /dev/null +++ b/bench_horn_ice/nonlin_mod_mult.bpl @@ -0,0 +1,193 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int, k:int, l:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + + +procedure main() + modifies alloc, $CurrAddr; +{ + var $i: int; + var $j: int; + var $k: int; + var $l: int; + var $i1: int; + var $j1: int; + var $k1: int; + var $l1: int; + var $m: int; +$bb0: + assume $j > 0; + assume $k > 0; + $l := 0; + $i := 0; + goto $bb1; +$bb1: + assert b0($i, $j, $k, $l); + goto $bb2, $bb3; +$bb2: + $i1 := ($i + 1); + $m := $mul($sdiv($j, $k), $k); + $j1 := $j + $m; + $l1 := ($l + $m); + + $i := $i1; + $j := $j1; + $l1 := $l; + goto $bb1; +$bb3: + assert $l <= $mul($k, $i); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/nonlin_mult_1.bpl b/bench_horn_ice/nonlin_mult_1.bpl new file mode 100644 index 000000000..556819b2c --- /dev/null +++ b/bench_horn_ice/nonlin_mult_1.bpl @@ -0,0 +1,184 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int, n:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + + +procedure main() + modifies alloc, $CurrAddr; +{ + var $a: int; + var $c1: int; + var $d1: int; + var $c2: int; + var $d2: int; +$bb0: + assume $a > 0; + $c1 := 0; + $d1 := 0; + goto $bb1; +$bb1: + assert b0($a, $c1, $d1); + goto $bb2, $bb3; +$bb2: + $d2 := $add($d1, 1); + $c2 := $add($c1, $a); + $d1 := $d2; + $c1 := $c2; + goto $bb1; +$bb3: + assert ($c1 == $mul($a, $d1)); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/nonlin_mult_2.bpl b/bench_horn_ice/nonlin_mult_2.bpl new file mode 100644 index 000000000..025703a39 --- /dev/null +++ b/bench_horn_ice/nonlin_mult_2.bpl @@ -0,0 +1,191 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int, k:int, l:int, m:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + + +procedure main() + modifies alloc, $CurrAddr; +{ + var $a: int; + var $b: int; + var $c1: int; + var $c2: int; + var $d1: int; + var $d2: int; + var $e1: int; + var $e2: int; +$bb0: + assume $a > 0; + assume $b >= $a; + $c1 := 0; + $d1 := 0; + $e1 := 0; + goto $bb1; +$bb1: + assert b0($a, $b, $c1, $d1, $e2); + goto $bb2, $bb3; +$bb2: + $c2 := $add($c1, 1); + $d2 := $add($d1, $a); + $e2 := $add($e1, $b); + $c1 := $c2; + $d1 := $d2; + $e1 := $e2; + goto $bb1; +$bb3: + assert ($e1 >= $mul($a, $c1)); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/nonlin_mult_3.bpl b/bench_horn_ice/nonlin_mult_3.bpl new file mode 100644 index 000000000..9bde41241 --- /dev/null +++ b/bench_horn_ice/nonlin_mult_3.bpl @@ -0,0 +1,191 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int, k:int, l:int, m:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + + +procedure main() + modifies alloc, $CurrAddr; +{ + var $a: int; + var $b: int; + var $c1: int; + var $c2: int; + var $d1: int; + var $d2: int; + var $e1: int; + var $e2: int; +$bb0: + assume $a > 0; + assume $b >= $a; + $c1 := 0; + $d1 := 0; + $e1 := 0; + goto $bb1; +$bb1: + assert b0($a, $b, $c1, $d1, $e2); + goto $bb2, $bb3; +$bb2: + $c2 := $add($c1, 1); + $d2 := $add($d1, $a); + $e2 := $add($e1, $b); + $c1 := $c2; + $d1 := $d2; + $e1 := $e2; + goto $bb1; +$bb3: + assert ($d1 <= $mul($b, $c1)); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/nonlin_mult_4.bpl b/bench_horn_ice/nonlin_mult_4.bpl new file mode 100644 index 000000000..cb62bf428 --- /dev/null +++ b/bench_horn_ice/nonlin_mult_4.bpl @@ -0,0 +1,191 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int, k:int, l:int, m:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + + +procedure main() + modifies alloc, $CurrAddr; +{ + var $a: int; + var $b: int; + var $c1: int; + var $c2: int; + var $d1: int; + var $d2: int; + var $e1: int; + var $e2: int; +$bb0: + assume $a > 0; + assume $b >= $a; + $c1 := 0; + $d1 := 0; + $e1 := 0; + goto $bb1; +$bb1: + assert b0($a, $b, $c1, $d1, $e2); + goto $bb2, $bb3; +$bb2: + $c2 := $add($c1, 1); + $d2 := $add($d1, $a); + $e2 := $add($e1, $b); + $c1 := $c2; + $d1 := $d2; + $e1 := $e2; + goto $bb1; +$bb3: + assert ($mul($b, $c1) >= $mul($a, $c1)); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/nonlin_mult_5.bpl b/bench_horn_ice/nonlin_mult_5.bpl new file mode 100644 index 000000000..dbc561229 --- /dev/null +++ b/bench_horn_ice/nonlin_mult_5.bpl @@ -0,0 +1,186 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(a:int, b:int, c:int, d:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + + +procedure main() + modifies alloc, $CurrAddr; +{ + var $a: int; + var $b: int; + var $c1: int; + var $c2: int; + var $d1: int; + var $d2: int; +$bb0: + assume $a > 0; + assume $b > 0; + $c1 := 0; + $d1 := 0; + goto $bb1; +$bb1: + assert b0($a, $b, $c1, $d1); + goto $bb2, $bb3; +$bb2: + $c2 := $add($c1, 1); + $d2 := $add($d1, $b); + $c1 := $c2; + $d1 := $d2; + goto $bb1; +$bb3: + assert ($c1 != $a) || ($d1 == ($a * $b)); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/nonlin_mult_6.bpl b/bench_horn_ice/nonlin_mult_6.bpl new file mode 100644 index 000000000..05c072150 --- /dev/null +++ b/bench_horn_ice/nonlin_mult_6.bpl @@ -0,0 +1,180 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(a:int, b:int, i:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + + +procedure main() + modifies alloc, $CurrAddr; +{ + var $a: int; + var $b: int; + var $i: int; +$bb0: + assume $a < 0; + $b := $a; + $i := -1; + goto $bb1; +$bb1: + assert b0($a, $b, $i); + goto $bb2, $bb3; +$bb2: + $b := $a * $b; + $i := -1 * $i; + goto $bb1; +$bb3: + assert ($b * $i) > 0; + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/nonlin_power.bpl b/bench_horn_ice/nonlin_power.bpl new file mode 100644 index 000000000..a737ae622 --- /dev/null +++ b/bench_horn_ice/nonlin_power.bpl @@ -0,0 +1,179 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + + +procedure main() + modifies alloc, $CurrAddr; +{ + var $a: int; + var $b: int; + var $b1: int; +$bb0: + $b := 1; + assume $a > 0; + goto $bb1; +$bb1: + assert b0($a, $b); + goto $bb2, $bb3; +$bb2: + $b1 := $mul($a, $b); + $b := $b1; + goto $bb1; +$bb3: + assert ($b > 0); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/nonlin_square.bpl b/bench_horn_ice/nonlin_square.bpl new file mode 100644 index 000000000..9f379a9ef --- /dev/null +++ b/bench_horn_ice/nonlin_square.bpl @@ -0,0 +1,178 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(x:int, n:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + + +procedure main() + modifies alloc, $CurrAddr; +{ + var $x: int; + var $n: int; +$bb0: + $x := 0; + $n := 0; + goto $bb1; +$bb1: + assert b0($x, $n); + goto $bb2, $bb3; +$bb2: + $n := $n + 1; + $x := $x + ($n * 2) - 1; + goto $bb1; +$bb3: + assert $x == ($n * $n); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/recur_1.bpl b/bench_horn_ice/recur_1.bpl new file mode 100644 index 000000000..50b179063 --- /dev/null +++ b/bench_horn_ice/recur_1.bpl @@ -0,0 +1,187 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $a1: int; + var $a2: int; + var $b1: int; + var $b2: int; + var $m: int; +$bb0: + $a1 := 0; + $b1 := 0; + goto $bb1; +$bb1: + assert b0($a1, $b1); + //$b := $sge($p, $p1); + goto $bb2, $bb3; +$bb2: + $b2 := $add($b1, 1); + if ($m == 1) { + $a2 := $add($a1, 1); + } else { + $a2 := $a1; + } + $a1 := $a2; + $b1 := $b2; + goto $bb1; +$bb3: + assert ($a1 <= $b1); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/samples_multiple_inv_01.bpl b/bench_horn_ice/samples_multiple_inv_01.bpl new file mode 100644 index 000000000..b4eb8eec9 --- /dev/null +++ b/bench_horn_ice/samples_multiple_inv_01.bpl @@ -0,0 +1,178 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int): bool; +function {:existential true} c0(i:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $p: int; +$bb0: + $p := 0; + goto $bb1; +$bb1: + assert b0($p); + goto $cc0, $bb3; +$cc0: + assert c0($p); + goto $cc1, $bb1; +$cc1: + $p := $add($p, 1); + goto $cc0; +$bb3: + assert $p >= 0; + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/samples_multiple_inv_02.bpl b/bench_horn_ice/samples_multiple_inv_02.bpl new file mode 100644 index 000000000..3e9499b38 --- /dev/null +++ b/bench_horn_ice/samples_multiple_inv_02.bpl @@ -0,0 +1,181 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int): bool; +function {:existential true} c0(i:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $p: int; +$bb0: + assume $p > 50; + goto $bb1; +$bb1: + assert b0($p); + goto $bb1a, $bb3; +$bb1a: + $p := $add($p, 1); + goto $cc0; +$cc0: + assert c0($p); + goto $cc1, $bb1; +$cc1: + $p := $add($p, 2); + assert $p >= 30; + goto $cc0; +$bb3: + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/samples_multiple_inv_03.bpl b/bench_horn_ice/samples_multiple_inv_03.bpl new file mode 100644 index 000000000..2630055be --- /dev/null +++ b/bench_horn_ice/samples_multiple_inv_03.bpl @@ -0,0 +1,180 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int): bool; +function {:existential true} c0(i:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $p: int; +$bb0: + $p := 0; + goto $bb1; +$bb1: + assert b0($p); + goto $bb1a, $bb3; +$bb1a: + goto $cc0; +$cc0: + assert c0($p); + goto $cc1, $bb1; +$cc1: + $p := $add($p, 1); + goto $cc0; +$bb3: + assert $p >= 0; + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/samples_multiple_inv_04.bpl b/bench_horn_ice/samples_multiple_inv_04.bpl new file mode 100644 index 000000000..15c3159b4 --- /dev/null +++ b/bench_horn_ice/samples_multiple_inv_04.bpl @@ -0,0 +1,184 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int): bool; +function {:existential true} c0(i:int): bool; +function {:existential true} d0(i:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $p: int; +$bb0: + assume $p > 50; + goto $bb1; +$bb1: + assert b0($p); + goto $bb1a, $bb3; +$bb1a: + $p := $add($p, 1); + goto $cc0; +$cc0: + assert c0($p); + goto $cc1, $bb1; +$cc1: + $p := $add($p, 2); + goto $dd0; +$dd0: + assert d0($p); + goto $dd1, $cc0; +$dd1: + $p := $add($p, 3); + assert $p >= 30; + goto $dd0; +$bb3: + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; diff --git a/bench_horn_ice/samples_only_01.bpl b/bench_horn_ice/samples_only_01.bpl new file mode 100644 index 000000000..99c379dd9 --- /dev/null +++ b/bench_horn_ice/samples_only_01.bpl @@ -0,0 +1,187 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $p: int; + var $p1: int; + var $b: bool; + var $b2: bool; + var $p3: int; + var $p4: int; + var $p5: int; + var $p6: int; +$bb0: + $p := 0; + $p1 := 0; + goto $bb1; +$bb1: + assert b0($p1, $p); + //$b := $sge($p, $p1); + goto $bb2, $bb3; +$bb2: + $p6 := $add($p, 66); + $p5 := $add($p1, 55); + $p := $p6; + $p1 := $p5; + goto $bb1; +$bb3: + $b2 := (($p + $p1) >= 0); + assert $b2; + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/samples_only_02.bpl b/bench_horn_ice/samples_only_02.bpl new file mode 100644 index 000000000..418420c53 --- /dev/null +++ b/bench_horn_ice/samples_only_02.bpl @@ -0,0 +1,225 @@ +// ICE DTPENALTY crashes on this one + + +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(a:int, b:int, c:int, d:int, e:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $x1: int; + var $x2: int; + var $x3: int; + var $x4: int; + var $x5: int; + + var $t1: int; + var $t2: int; + var $t3: int; + var $t4: int; + var $t5: int; + + var $c1: bool; + var $c2: bool; + var $c3: bool; + var $c4: bool; + var $c5: bool; + + var $p: int; + var $p1: int; + var $b: bool; + var $b2: bool; + var $p3: int; + var $p4: int; + var $p5: int; + var $p6: int; +$bb0: + $x1 := 2; + $x2 := 2; + $x3 := 2; + $x4 := 2; + $x5 := 2; + goto $bb1; +$bb1: + assert b0($x1, $x2, $x3, $x4, $x5); + //$b := $sge($p, $p1); + goto $bb2, $bb3; +$bb2: + $t1 := $add($x1, 1); + $t2 := $add($x2, 1); + $t3 := $add($x3, 1); + $t4 := $add($x4, 1); + $t5 := $add($x5, 1); + $x1 := $t1; + $x2 := $t2; + $x3 := $t3; + $x4 := $t4; + $x5 := $t5; + goto $bb1; +$bb3: + $c1 := ($x1 > 0); + $c2 := ($x2 > 0); + $c3 := ($x3 > 0); + $c4 := ($x4 > 0); + $c5 := ($x5 > 0); + assert $c1; + assert $c2; + assert $c3; + assert $c4; + assert $c5; + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/samples_only_03.bpl b/bench_horn_ice/samples_only_03.bpl new file mode 100644 index 000000000..36511bfde --- /dev/null +++ b/bench_horn_ice/samples_only_03.bpl @@ -0,0 +1,191 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $p: int; + var $p1: int; + var $b: bool; + var $b2: bool; + var $c1: bool; + var $c2: bool; + var $p3: int; + var $p4: int; + var $p5: int; + var $p6: int; +$bb0: + $p := 0; + $p1 := 0; + goto $bb1; +$bb1: + assert b0($p1, $p); + //$b := $sge($p, $p1); + goto $bb2, $bb3; +$bb2: + $p6 := $add($p, 1); + $p5 := $add($p1, -1); + $p := $p6; + $p1 := $p5; + goto $bb1; +$bb3: + $c1 := ($p >= 0); + $c2 := ($p1 <= 0); + assert $c1; + assert $c2; + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/samples_only_04.bpl b/bench_horn_ice/samples_only_04.bpl new file mode 100644 index 000000000..f93201189 --- /dev/null +++ b/bench_horn_ice/samples_only_04.bpl @@ -0,0 +1,197 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int, k:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $x0: int; + var $x1: int; + var $x2: int; + var $x3: int; + var $x4: int; + var $x5: int; + var $x6: int; + var $x7: int; + var $x8: int; + var $x9: int; +$bb0: + $x1 := 0; + $x3 := 0; + $x5 := 0; + goto $bb1; +$bb1: + assert b0($x1, $x3, $x5); + //$b := $sge($p, $p1); + goto $bb1a, $bb1b; +$bb1a: + $x2 := $add($x1, 1); + $x4 := $sub($x3, 1); + goto $bb1c; +$bb1b: + $x2 := $sub($x1, 1); + $x4 := $add($x3, 1); + goto $bb1c; +$bb1c: + $x6 := $add($add($x2, $x4), $x5); + $x1 := $x2; + $x3 := $x4; + $x5 := $x6; + goto $bb1, $bb3; +$bb3: + assert ($x5 >= 0); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/samples_only_05.bpl b/bench_horn_ice/samples_only_05.bpl new file mode 100644 index 000000000..cc23799fb --- /dev/null +++ b/bench_horn_ice/samples_only_05.bpl @@ -0,0 +1,190 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $p: int; + var $p1: int; + var $b: bool; + var $b2: bool; + var $c1: bool; + var $c2: bool; + var $p3: int; + var $p4: int; + var $p5: int; + var $p6: int; +$bb0: + $p := 0; + assume $p1 >= $p; + goto $bb1; +$bb1: + assert b0($p1, $p); + //$b := $sge($p, $p1); + goto $bb2, $bb3; +$bb2: + $p6 := $add($p, 1); + $p5 := $add($p1, 1); + $p := $p6; + $p1 := $p5; + goto $bb1; +$bb3: + $c1 := ($p > 1000); + $c2 := ($p1 > 1000); + assert ($c2 || !($c1)); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/samples_only_06.bpl b/bench_horn_ice/samples_only_06.bpl new file mode 100644 index 000000000..7928046df --- /dev/null +++ b/bench_horn_ice/samples_only_06.bpl @@ -0,0 +1,191 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int, k:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $x: int; + var $x1: int; + var $y: int; + var $y1: int; + var $i: int; + var $i1: int; + var $cond1: bool; + var $cond2: bool; +$bb0: + $x := 0; + $y := 0; + $i := 0; + goto $bb1; +$bb1: + assert b0($x, $y, $i); + //$b := $sge($p, $p1); + goto $bb2, $bb3; +$bb2: + $i1 := $add($i, 1); + $x1 := $add($x, $i1); + $y1 := $sub($y, $i1); + $x := $x1; + $y := $y1; + $i := $i1; + goto $bb1; +$bb3: + $cond1 := (0 == $sub($x, $add($y, $sub($sub(8, $i), 7)))); + $cond2 := ($x == $mul(-1, $y)); + assert (!$cond1) || $cond2; + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/samples_only_07.bpl b/bench_horn_ice/samples_only_07.bpl new file mode 100644 index 000000000..9d6ebcbf5 --- /dev/null +++ b/bench_horn_ice/samples_only_07.bpl @@ -0,0 +1,181 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $x3: int; + var $x4: int; +$bb0: + $x3 := 0; + goto $bb1; +$bb1: + assert b0($x3); + //$b := $sge($p, $p1); + goto $bb2, $bb3; +$bb2: + if ($x3 == 10) { + $x4 := 0; + } else { + $x4 := $add($x3, 1); + } + $x3 := $x4; + goto $bb1; +$bb3: + assert ($x3 <= 10); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/samples_only_08.bpl b/bench_horn_ice/samples_only_08.bpl new file mode 100644 index 000000000..2bb61f358 --- /dev/null +++ b/bench_horn_ice/samples_only_08.bpl @@ -0,0 +1,192 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $x1: int; + var $x2: int; + var $x3: int; + var $x4: int; + var $cond1: bool; +$bb0: + $x1 := 0; + $x3 := 100; + goto $bb1; +$bb1: + assert b0($x1, $x3); + //$b := $sge($p, $p1); + goto $bb2, $bb3; +$bb2: + $x2 := $add($x1, 1); + if ($x2 > 0) { + $cond1 := ($x3 > 0); + } else { + $cond1 := ($x3 == 5); + } + if ($cond1) { + $x4 := $x2; + } else { + $x4 := $x3; + } + $x1 := $x2; + $x3 := $x4; + goto $bb1; +$bb3: + assert ($x3 > 0); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/samples_search_01.bpl b/bench_horn_ice/samples_search_01.bpl new file mode 100644 index 000000000..0ed49a037 --- /dev/null +++ b/bench_horn_ice/samples_search_01.bpl @@ -0,0 +1,187 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $p: int; + var $p1: int; + var $b: bool; + var $b2: bool; + var $p3: int; + var $p4: int; + var $p5: int; + var $p6: int; +$bb0: + $p := 32; + $p1 := 25; + goto $bb1; +$bb1: + assert b0($p1, $p); + //$b := $sge($p, $p1); + goto $bb2, $bb3; +$bb2: + $p5 := $add($p1, 112); + $p6 := $add($p, $p5); + $p := $p6; + $p1 := $p5; + goto $bb1; +$bb3: + $b2 := ($p >= 0); + assert $b2; + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/samples_search_02.bpl b/bench_horn_ice/samples_search_02.bpl new file mode 100644 index 000000000..37cb36e1d --- /dev/null +++ b/bench_horn_ice/samples_search_02.bpl @@ -0,0 +1,195 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int, k:int, l:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $p1: int; + var $p2: int; + var $p3: int; + var $p4: int; + var $i1: int; + var $i2: int; + var $i3: int; + var $i4: int; + var $b: bool; + var $b2: bool; +$bb0: + $p1 := 0; + $p2 := 0; + $p3 := 0; + $p4 := 0; + goto $bb1; +$bb1: + assert b0($p1, $p2, $p3, $p4); + //$b := $sge($p, $p1); + goto $bb2, $bb3; +$bb2: + $i1 := $add($p1, 1); + $i2 := $add($p2, $i1); + $i3 := $add($p3, $i2); + $i4 := $add($p4, $i3); + $p1 := $i1; + $p2 := $i2; + $p3 := $i3; + $p4 := $i4; + goto $bb1; +$bb3: + $b2 := ($p4 >= 0); + assert $b2; + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/samples_search_03.bpl b/bench_horn_ice/samples_search_03.bpl new file mode 100644 index 000000000..ac50c268c --- /dev/null +++ b/bench_horn_ice/samples_search_03.bpl @@ -0,0 +1,196 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int, k:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $p1: int; + var $p2: int; + var $p3: int; + var $i1: int; + var $i2: int; + var $i3: int; + var $b: bool; + var $b2: bool; +$bb0: + $p1 := 0; + $p2 := 0; + $p3 := 0; + goto $bb1; +$bb1: + assert b0($p1, $p2, $p3); + //$b := $sge($p, $p1); + goto $bb2, $bb3; +$bb2: + $i1 := $add($p1, 1); + $i2 := $add($p2, 1); + $p1 := $i1; + $p2 := $i2; + goto $bb4, $bb5; +$bb3: + $b2 := ($p3 >= 0); + assert $b2; + return; +$bb4: + $i3 := $add($p3, $p1); + $p3 := $i3; + goto $bb1; +$bb5: + $i3 := $add($p3, $p2); + $p3 := $i3; + goto $bb1; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/samples_search_04.bpl b/bench_horn_ice/samples_search_04.bpl new file mode 100644 index 000000000..c6c375179 --- /dev/null +++ b/bench_horn_ice/samples_search_04.bpl @@ -0,0 +1,189 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $p: int; + var $p1: int; + var $b: bool; + var $b2: bool; + var $b3: bool; + var $p3: int; + var $p4: int; + var $p5: int; + var $p6: int; +$bb0: + $p := 0; + $p1 := 0; + goto $bb1; +$bb1: + assert b0($p1, $p); + //$b := $sge($p, $p1); + goto $bb2, $bb3; +$bb2: + $p5 := $add($p1, 1); + $p6 := $add($p, 1); + $p := $p6; + $p1 := $p5; + goto $bb1; +$bb3: + $b2 := ($p > 0); + $b3 := ($p1 > 0); + assert (!$b2 || $b3); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/samples_search_05.bpl b/bench_horn_ice/samples_search_05.bpl new file mode 100644 index 000000000..c35539d2a --- /dev/null +++ b/bench_horn_ice/samples_search_05.bpl @@ -0,0 +1,189 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $p: int; + var $p1: int; + var $b: bool; + var $b2: bool; + var $b3: bool; + var $p3: int; + var $p4: int; + var $p5: int; + var $p6: int; +$bb0: + $p := 0; + assume $p1 > $p; + goto $bb1; +$bb1: + assert b0($p1, $p); + //$b := $sge($p, $p1); + goto $bb2, $bb3; +$bb2: + $p5 := $add($p1, 2); + $p6 := $add($p, 1); + $p := $p6; + $p1 := $p5; + goto $bb1; +$bb3: + $b2 := ($p > 1000); + $b3 := ($p1 > 2000); + assert (!$b2 || $b3); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/samples_search_06.bpl b/bench_horn_ice/samples_search_06.bpl new file mode 100644 index 000000000..eecab9c29 --- /dev/null +++ b/bench_horn_ice/samples_search_06.bpl @@ -0,0 +1,191 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int, k:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $p1: int; + var $p2: int; + var $p3: int; + var $p4: int; + var $i1: int; + var $i2: int; + var $i3: int; + var $b: bool; + var $b2: bool; +$bb0: + $p1 := 0; + $p2 := 0; + $p3 := 0; + goto $bb1; +$bb1: + assert b0($p1, $p2, $p3); + //$b := $sge($p, $p1); + goto $bb2, $bb3; +$bb2: + $i1 := $add($p1, 1); + $i2 := $add($p2, $i1); + $i3 := $sub($p3, $i1); + $p1 := $i1; // i1 + $p2 := $i2; // x1 + $p3 := $i3; // y1 + goto $bb1; +$bb3: + $b2 := ($p2 >= $p3); + assert $b2; + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/samples_search_07.bpl b/bench_horn_ice/samples_search_07.bpl new file mode 100644 index 000000000..1b9031ed3 --- /dev/null +++ b/bench_horn_ice/samples_search_07.bpl @@ -0,0 +1,199 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int, k:int, l:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $p1: int; + var $p2: int; + var $p3: int; + var $p4: int; + var $i1: int; + var $i2: int; + var $i3: int; + var $i4: int; + var $b: bool; + var $b2: bool; + var $b3: bool; + var $nondet1: int; + var $nondet2: int; +$bb0: + $p1 := 0; + $p2 := 0; + $p3 := 0; + $p4 := 0; + goto $bb1; +$bb1: + assert b0($p1, $p2, $p3, $p4); + //$b := $sge($p, $p1); + goto $bb2, $bb3; +$bb2: + $i1 := $add($p1, $nondet1); + $i2 := $add($p2, $nondet2); + $i3 := $add($p3, $nondet1); + $i4 := $add($p4, $nondet2); + $p1 := $i1; + $p2 := $i2; + $p3 := $i3; + $p4 := $i4; + goto $bb1; +$bb3: + $b2 := ($p1 >= $p2); + $b3 := ($p3 >= $p4); + assert (!$b2 || $b3); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/samples_search_08.bpl b/bench_horn_ice/samples_search_08.bpl new file mode 100644 index 000000000..2891c3881 --- /dev/null +++ b/bench_horn_ice/samples_search_08.bpl @@ -0,0 +1,189 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $p: int; + var $p1: int; + var $b: bool; + var $b2: bool; + var $b3: bool; + var $p3: int; + var $p4: int; + var $p5: int; + var $p6: int; +$bb0: + $p := -100; + $p1 := $mul($p, 2); + goto $bb1; +$bb1: + assert b0($p1, $p); + //$b := $sge($p, $p1); + goto $bb2, $bb3; +$bb2: + $p6 := $add($p, 1); + $p5 := $add($p6, 2); + $p := $p6; + $p1 := $p5; + goto $bb1; +$bb3: + $b2 := ($p > 0); + $b3 := ($p1 > 0); + assert (!$b2 || $b3); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/samples_search_09.bpl b/bench_horn_ice/samples_search_09.bpl new file mode 100644 index 000000000..cb88d4f1e --- /dev/null +++ b/bench_horn_ice/samples_search_09.bpl @@ -0,0 +1,188 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $p: int; + var $p1: int; + var $b: bool; + var $b2: bool; + var $b3: bool; + var $p3: int; + var $p4: int; + var $p5: int; + var $p6: int; +$bb0: + $p := 1; + goto $bb1; +$bb1: + assert b0($p1, $p); + //$b := $sge($p, $p1); + goto $bb2, $bb3; +$bb2: + $p6 := $add($p, $p); + $p5 := $p; + $p := $p6; + $p1 := $p5; + goto $bb1; +$bb3: + $b2 := ($p == ($mul($p1, 3) - $p1)); + $b3 := ($p == 1); + assert ($b2 || $b3); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/samples_search_10.bpl b/bench_horn_ice/samples_search_10.bpl new file mode 100644 index 000000000..c89851541 --- /dev/null +++ b/bench_horn_ice/samples_search_10.bpl @@ -0,0 +1,179 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $x1: int; + var $x2: int; + var $x3: int; + var $x4: int; +$bb0: + assume ($add($x1, 878) == $sub($x3, 602)); + goto $bb1; +$bb1: + assert b0($x1, $x3); + //$b := $sge($p, $p1); + goto $bb2, $bb3; +$bb2: + assume ($x3 < $x1); + assume ($x4 > $x2); + goto $bb1; +$bb3: + assert (($x1 < 0) || ($x3 > 0)); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/samples_search_11.bpl b/bench_horn_ice/samples_search_11.bpl new file mode 100644 index 000000000..ed4acfae0 --- /dev/null +++ b/bench_horn_ice/samples_search_11.bpl @@ -0,0 +1,191 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int, k:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $x1: int; + var $x2: int; + var $x3: int; + var $x4: int; + var $x5: int; + var $x6: int; + var $b2: bool; + var $b3: bool; +$bb0: + $x1 := 1; + $x3 := 1; + $x5 := 1; + goto $bb1; +$bb1: + assert b0($x1, $x3, $x5); + //$b := $sge($p, $p1); + goto $bb2, $bb3; +$bb2: + $x2 := $add($x1, 1); + $x4 := $add($x1, $x1); + $x6 := $add($add($x1, $x1), $x1); + $x1 := $x2; + $x3 := $x4; + $x5 := $x6; + goto $bb1; +$bb3: + $b2 := ($sub($x5, $x3) > 500); + $b3 := ($x1 < 1000); + assert ($b2 || $b3); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/samples_search_12.bpl b/bench_horn_ice/samples_search_12.bpl new file mode 100644 index 000000000..1c5bb7206 --- /dev/null +++ b/bench_horn_ice/samples_search_12.bpl @@ -0,0 +1,206 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(x:int, i:int, j:int, k:int, l:int, m:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $x: int; + var $x1: int; + var $i: int; + var $i1: int; + var $j: int; + var $j1: int; + var $k: int; + var $k1: int; + var $l: int; + var $l1: int; + var $m: int; + var $m1: int; + + var $b2: bool; + var $b3: bool; +$bb0: + $x := 1; + $i := 1; + $j := 1; + $k := 1; + $l := 1; + $m := 1; + goto $bb1; +$bb1: + assert b0($x, $i, $j, $k, $l, $m); + //$b := $sge($p, $p1); + goto $bb2, $bb3; +$bb2: + $x1 := $add($add($add($add($add($x, $i), $j), $k), $l), $m); + $i1 := $add($add($add($add($add($x, $i), $j), $k), $l), $m); + $j1 := $add($add($add($add($add($x, $i), $j), $k), $l), $m); + $k1 := $add($add($add($add($add($x, $i), $j), $k), $l), $m); + $l1 := $add($add($add($add($add($x, $i), $j), $k), $l), $m); + $m1 := $add($add($add($add($add($x, $i), $j), $k), $l), $m); + $x := $x1; + $i := $i1; + $j := $j1; + $k := $k1; + $l := $l1; + $m := $m1; + goto $bb1; +$bb3: + $b2 := ($x >= 1); + assert $b2; + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/samples_search_13.bpl b/bench_horn_ice/samples_search_13.bpl new file mode 100644 index 000000000..da1447156 --- /dev/null +++ b/bench_horn_ice/samples_search_13.bpl @@ -0,0 +1,206 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(x:int, i:int, j:int, k:int, l:int, m:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $x: int; + var $x1: int; + var $i: int; + var $i1: int; + var $j: int; + var $j1: int; + var $k: int; + var $k1: int; + var $l: int; + var $l1: int; + var $m: int; + var $m1: int; + + var $b2: bool; + var $b3: bool; +$bb0: + $x := 1; + $i := 1; + $j := 1; + $k := 1; + $l := 1; + $m := 1; + goto $bb1; +$bb1: + assert b0($x, $i, $j, $k, $l, $m); + //$b := $sge($p, $p1); + goto $bb2, $bb3; +$bb2: + $x1 := $add($add($add($add($add($x, $i), $j), $k), $l), $m); + $i1 := $add($add($add($add($add($x, $i), $j), $k), $l), $m); + $j1 := $add($add($add($add($add($x, $i), $j), $k), $l), $m); + $k1 := $add($add($add($add($add($x, $i), $j), $k), $l), $m); + $l1 := $add($add($add($add($add($x, $i), $j), $k), $l), $m); + $m1 := $add($add($add($add($add($x, $i), $j), $k), $l), $m); + $x := $x1; + $i := $i1; + $j := $j1; + $k := $k1; + $l := $l1; + $m := $m1; + goto $bb1; +$bb3: + $b2 := ($add($add($x, $i), $j) == $add($add($k, $l), $m)); + assert $b2; + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/samples_search_14.bpl b/bench_horn_ice/samples_search_14.bpl new file mode 100644 index 000000000..5a2cc71ac --- /dev/null +++ b/bench_horn_ice/samples_search_14.bpl @@ -0,0 +1,206 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(x:int, i:int, j:int, k:int, l:int, m:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $x: int; + var $x1: int; + var $i: int; + var $i1: int; + var $j: int; + var $j1: int; + var $k: int; + var $k1: int; + var $l: int; + var $l1: int; + var $m: int; + var $m1: int; + + var $b2: bool; + var $b3: bool; +$bb0: + $x := 1; + $i := 1; + $j := 1; + $k := 1; + $l := 1; + $m := 1; + goto $bb1; +$bb1: + assert b0($x, $i, $j, $k, $l, $m); + //$b := $sge($p, $p1); + goto $bb2, $bb3; +$bb2: + $x1 := $add($add($add($add($add($x, $i), $j), $k), $l), $m); + $i1 := $add($add($add($add($add($x, $i), $j), $k), $l), $m); + $j1 := $add($add($add($add($add($x, $i), $j), $k), $l), $m); + $k1 := $add($add($add($add($add($x, $i), $j), $k), $l), $m); + $l1 := $add($add($add($add($add($x, $i), $j), $k), $l), $m); + $m1 := $add($add($add($add($add($x, $i), $j), $k), $l), $m); + $x := $x1; + $i := $i1; + $j := $j1; + $k := $k1; + $l := $l1; + $m := $m1; + goto $bb1; +$bb3: + $b2 := ($add($add($add($add($x, $i), $j), $k), $l) == $mul($m, 5)); + assert $b2; + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/samples_search_15.bpl b/bench_horn_ice/samples_search_15.bpl new file mode 100644 index 000000000..2a98b0856 --- /dev/null +++ b/bench_horn_ice/samples_search_15.bpl @@ -0,0 +1,205 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(x:int, i:int, j:int, k:int, l:int, m:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $x: int; + var $x1: int; + var $i: int; + var $i1: int; + var $j: int; + var $j1: int; + var $k: int; + var $k1: int; + var $l: int; + var $l1: int; + var $m: int; + var $m1: int; + + var $b2: bool; + var $b3: bool; +$bb0: + $x := 1; + $i := 1; + $j := 1; + $k := 1; + $l := 1; + $m := 1; + goto $bb1; +$bb1: + assert b0($x, $i, $j, $k, $l, $m); + //$b := $sge($p, $p1); + goto $bb2, $bb3; +$bb2: + $x1 := $add($add($add($add($add($x, $i), $j), $k), $l), $m); + $i1 := $add($add($add($add($add($x, $i), $j), $k), $l), $m); + $j1 := $add($add($add($add($add($x, $i), $j), $k), $l), $m); + $k1 := $add($add($add($add($add($x, $i), $j), $k), $l), $m); + $l1 := $add($add($add($add($add($x, $i), $j), $k), $l), $m); + $m1 := $add($add($add($add($add($x, $i), $j), $k), $l), $m); + $x := $x1; + $i := $i1; + $j := $j1; + $k := $k1; + $l := $l1; + $m := $m1; + goto $bb1; +$bb3: + assert ($mul($add($x, $i), 2) == $mul($m, 4)); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/samples_search_disj_ite_01.bpl b/bench_horn_ice/samples_search_disj_ite_01.bpl new file mode 100644 index 000000000..0584d92a0 --- /dev/null +++ b/bench_horn_ice/samples_search_disj_ite_01.bpl @@ -0,0 +1,204 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $p: int; + var $p1: int; + var $b: bool; + var $b2: bool; + var $c1: bool; + var $c2: bool; + var $p3: int; + var $p4: int; + var $p5: int; + var $p6: int; + var $v1: int; + var $v2: int; +$bb0: + $p := 0; + $p1 := 100; + goto $bb1; +$bb1: + assert b0($p1, $p); + //$b := $sge($p, $p1); + goto $bb2, $bb3; +$bb2: + $p6 := $add(1, $p); + + if ($p6 > 0) { + $v1 := 1; + } else { + $v1 := 0; + } + if ($p1 > 10) { + $v2 := -1; + } else { + $v2 := $p1; + } + $p5 := $add($v1, $v2); + + $p := $p6; + $p1 := $p5; + goto $bb1; +$bb3: + $c1 := ($p > 10); + $c2 := ($p1 < $p); + assert ($c2 || !($c1)); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/samples_search_disj_ite_02.bpl b/bench_horn_ice/samples_search_disj_ite_02.bpl new file mode 100644 index 000000000..e3c42f288 --- /dev/null +++ b/bench_horn_ice/samples_search_disj_ite_02.bpl @@ -0,0 +1,203 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $p: int; + var $p1: int; + var $b: bool; + var $b2: bool; + var $c1: bool; + var $c2: bool; + var $p3: int; + var $p4: int; + var $p5: int; + var $p6: int; + var $v1: int; + var $v2: int; +$bb0: + $p := 0; + $p1 := 100; + goto $bb1; +$bb1: + assert b0($p1, $p); + //$b := $sge($p, $p1); + goto $bb2, $bb3; +$bb2: + $p6 := $add(1, $p); + + if ($p1 > 10) { + $v2 := 0; + } else { + $v2 := $add($p1, 1); + } + if ($p6 > 0) { + $p5 := $v2; + } else { + $p5 := $sub($v2, 1); + } + + $p := $p6; + $p1 := $p5; + goto $bb1; +$bb3: + $c1 := ($p > 10); + $c2 := ($p1 < $p); + assert ($c2 || !($c1)); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/samples_search_disj_ite_03.bpl b/bench_horn_ice/samples_search_disj_ite_03.bpl new file mode 100644 index 000000000..35fd133c7 --- /dev/null +++ b/bench_horn_ice/samples_search_disj_ite_03.bpl @@ -0,0 +1,196 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $p: int; + var $p1: int; + var $b: bool; + var $b2: bool; + var $c1: bool; + var $c2: bool; + var $p3: int; + var $p4: int; + var $p5: int; + var $p6: int; + var $v1: int; + var $v2: int; +$bb0: + $p := 0; + $p1 := 100; + goto $bb1; +$bb1: + assert b0($p1, $p); + //$b := $sge($p, $p1); + goto $bb2, $bb3; +$bb2: + $p6 := $add(1, $p); + if ($p1 > 10) { + $p5 := 0; + } else { + $p5 := $add($p1, 1); + } + $p := $p6; + $p1 := $p5; + goto $bb1; +$bb3: + $c1 := ($p > 10); + $c2 := ($p1 < $p); + assert ($c2 || !($c1)); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/samples_search_disj_ite_04.bpl b/bench_horn_ice/samples_search_disj_ite_04.bpl new file mode 100644 index 000000000..3afc27332 --- /dev/null +++ b/bench_horn_ice/samples_search_disj_ite_04.bpl @@ -0,0 +1,196 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $p: int; + var $p1: int; + var $b: bool; + var $b2: bool; + var $c1: bool; + var $c2: bool; + var $p3: int; + var $p4: int; + var $p5: int; + var $p6: int; + var $v1: int; + var $v2: int; +$bb0: + $p := 0; + $p1 := 100; + goto $bb1; +$bb1: + assert b0($p1, $p); + //$b := $sge($p, $p1); + goto $bb2, $bb3; +$bb2: + $p6 := $add(1, $p); + if ($p1 > 10) { + $p5 := -1; + } else { + $p5 := $p1; + } + $p := $p6; + $p1 := $add($p5, 1); + goto $bb1; +$bb3: + $c1 := ($p > 10); + $c2 := ($p1 < $p); + assert ($c2 || !($c1)); + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/samples_search_disj_ite_05.bpl b/bench_horn_ice/samples_search_disj_ite_05.bpl new file mode 100644 index 000000000..7ab865332 --- /dev/null +++ b/bench_horn_ice/samples_search_disj_ite_05.bpl @@ -0,0 +1,200 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $p: int; + var $p1: int; + var $b: bool; + var $b2: bool; + var $c1: bool; + var $c2: bool; + var $p3: int; + var $p4: int; + var $p5: int; + var $p6: int; + var $v: int; + var $v1: int; +$bb0: + $p := 0; + $p1 := 50; + goto $bb1; +$bb1: + assert b0($p1, $p); + $b := $slt($p, 100); + goto $bb4, $bb3; +$bb2: + $v := $add(1, $p); + if ($v > 50) { + $v1 := $add(1, $p1); + } else { + $v1 := $p1; + } + $p := $v; + $p1 := $v1; + goto $bb1; +$bb3: + assume (!$b); + $c1 := ($p > 10); + $c2 := ($p1 < $p); + assert ($c2 || !($c1)); + return; +$bb4: + assume $b; + goto $bb2; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/samples_search_disj_ite_06.bpl b/bench_horn_ice/samples_search_disj_ite_06.bpl new file mode 100644 index 000000000..b10a97b52 --- /dev/null +++ b/bench_horn_ice/samples_search_disj_ite_06.bpl @@ -0,0 +1,200 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int, j:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $p: int; + var $p1: int; + var $b: bool; + var $b2: bool; + var $c1: bool; + var $c2: bool; + var $p3: int; + var $p4: int; + var $p5: int; + var $p6: int; + var $v: int; + var $v1: int; +$bb0: + $p := 0; + $p1 := 50; + goto $bb1; +$bb1: + assert b0($p1, $p); + $b := $slt($p, 100); + goto $bb4, $bb3; +$bb2: + $v := $add(1, $p); + if ($v > 50) { + $v1 := $add(1, $p1); + } else { + $v1 := $p1; + } + $p := $v; + $p1 := $v1; + goto $bb1; +$bb3: + assume (!$b); + $c1 := ($p > 50); + $c2 := ($p1 == $p); + assert ($c2 || !($c1)); + return; +$bb4: + assume $b; + goto $bb2; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; + +// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/samples_shrink_big_numbers_1024.bpl b/bench_horn_ice/samples_shrink_big_numbers_1024.bpl new file mode 100644 index 000000000..22e00e612 --- /dev/null +++ b/bench_horn_ice/samples_shrink_big_numbers_1024.bpl @@ -0,0 +1,3257 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $p: int; + var $b: bool; + var $b2: bool; + var $c1: bool; + var $c2: bool; + var $p3: int; + var $p4: int; + var $p5: int; + var $p6: int; + var $v1: int; + var $v2: int; + +$bb0: + goto $aa1, $aa2, $aa3, $aa4, $aa5, $aa6, $aa7, $aa8, $aa9, $aa10, $aa11, $aa12, $aa13, $aa14, $aa15, $aa16, $aa17, $aa18, $aa19, $aa20, $aa21, $aa22, $aa23, $aa24, $aa25, $aa26, $aa27, $aa28, $aa29, $aa30, $aa31, $aa32, $aa33, $aa34, $aa35, $aa36, $aa37, $aa38, $aa39, $aa40, $aa41, $aa42, $aa43, $aa44, $aa45, $aa46, $aa47, $aa48, $aa49, $aa50, $aa51, $aa52, $aa53, $aa54, $aa55, $aa56, $aa57, $aa58, $aa59, $aa60, $aa61, $aa62, $aa63, $aa64, $aa65, $aa66, $aa67, $aa68, $aa69, $aa70, $aa71, $aa72, $aa73, $aa74, $aa75, $aa76, $aa77, $aa78, $aa79, $aa80, $aa81, $aa82, $aa83, $aa84, $aa85, $aa86, $aa87, $aa88, $aa89, $aa90, $aa91, $aa92, $aa93, $aa94, $aa95, $aa96, $aa97, $aa98, $aa99, $aa100, $aa101, $aa102, $aa103, $aa104, $aa105, $aa106, $aa107, $aa108, $aa109, $aa110, $aa111, $aa112, $aa113, $aa114, $aa115, $aa116, $aa117, $aa118, $aa119, $aa120, $aa121, $aa122, $aa123, $aa124, $aa125, $aa126, $aa127, $aa128, $aa129, $aa130, $aa131, $aa132, $aa133, $aa134, $aa135, $aa136, $aa137, $aa138, $aa139, $aa140, $aa141, $aa142, $aa143, $aa144, $aa145, $aa146, $aa147, $aa148, $aa149, $aa150, $aa151, $aa152, $aa153, $aa154, $aa155, $aa156, $aa157, $aa158, $aa159, $aa160, $aa161, $aa162, $aa163, $aa164, $aa165, $aa166, $aa167, $aa168, $aa169, $aa170, $aa171, $aa172, $aa173, $aa174, $aa175, $aa176, $aa177, $aa178, $aa179, $aa180, $aa181, $aa182, $aa183, $aa184, $aa185, $aa186, $aa187, $aa188, $aa189, $aa190, $aa191, $aa192, $aa193, $aa194, $aa195, $aa196, $aa197, $aa198, $aa199, $aa200, $aa201, $aa202, $aa203, $aa204, $aa205, $aa206, $aa207, $aa208, $aa209, $aa210, $aa211, $aa212, $aa213, $aa214, $aa215, $aa216, $aa217, $aa218, $aa219, $aa220, $aa221, $aa222, $aa223, $aa224, $aa225, $aa226, $aa227, $aa228, $aa229, $aa230, $aa231, $aa232, $aa233, $aa234, $aa235, $aa236, $aa237, $aa238, $aa239, $aa240, $aa241, $aa242, $aa243, $aa244, $aa245, $aa246, $aa247, $aa248, $aa249, $aa250, $aa251, $aa252, $aa253, $aa254, $aa255, $aa256, $aa257, $aa258, $aa259, $aa260, $aa261, $aa262, $aa263, $aa264, $aa265, $aa266, $aa267, $aa268, $aa269, $aa270, $aa271, $aa272, $aa273, $aa274, $aa275, $aa276, $aa277, $aa278, $aa279, $aa280, $aa281, $aa282, $aa283, $aa284, $aa285, $aa286, $aa287, $aa288, $aa289, $aa290, $aa291, $aa292, $aa293, $aa294, $aa295, $aa296, $aa297, $aa298, $aa299, $aa300, $aa301, $aa302, $aa303, $aa304, $aa305, $aa306, $aa307, $aa308, $aa309, $aa310, $aa311, $aa312, $aa313, $aa314, $aa315, $aa316, $aa317, $aa318, $aa319, $aa320, $aa321, $aa322, $aa323, $aa324, $aa325, $aa326, $aa327, $aa328, $aa329, $aa330, $aa331, $aa332, $aa333, $aa334, $aa335, $aa336, $aa337, $aa338, $aa339, $aa340, $aa341, $aa342, $aa343, $aa344, $aa345, $aa346, $aa347, $aa348, $aa349, $aa350, $aa351, $aa352, $aa353, $aa354, $aa355, $aa356, $aa357, $aa358, $aa359, $aa360, $aa361, $aa362, $aa363, $aa364, $aa365, $aa366, $aa367, $aa368, $aa369, $aa370, $aa371, $aa372, $aa373, $aa374, $aa375, $aa376, $aa377, $aa378, $aa379, $aa380, $aa381, $aa382, $aa383, $aa384, $aa385, $aa386, $aa387, $aa388, $aa389, $aa390, $aa391, $aa392, $aa393, $aa394, $aa395, $aa396, $aa397, $aa398, $aa399, $aa400, $aa401, $aa402, $aa403, $aa404, $aa405, $aa406, $aa407, $aa408, $aa409, $aa410, $aa411, $aa412, $aa413, $aa414, $aa415, $aa416, $aa417, $aa418, $aa419, $aa420, $aa421, $aa422, $aa423, $aa424, $aa425, $aa426, $aa427, $aa428, $aa429, $aa430, $aa431, $aa432, $aa433, $aa434, $aa435, $aa436, $aa437, $aa438, $aa439, $aa440, $aa441, $aa442, $aa443, $aa444, $aa445, $aa446, $aa447, $aa448, $aa449, $aa450, $aa451, $aa452, $aa453, $aa454, $aa455, $aa456, $aa457, $aa458, $aa459, $aa460, $aa461, $aa462, $aa463, $aa464, $aa465, $aa466, $aa467, $aa468, $aa469, $aa470, $aa471, $aa472, $aa473, $aa474, $aa475, $aa476, $aa477, $aa478, $aa479, $aa480, $aa481, $aa482, $aa483, $aa484, $aa485, $aa486, $aa487, $aa488, $aa489, $aa490, $aa491, $aa492, $aa493, $aa494, $aa495, $aa496, $aa497, $aa498, $aa499, $aa500, $aa501, $aa502, $aa503, $aa504, $aa505, $aa506, $aa507, $aa508, $aa509, $aa510, $aa511, $aa512, $aa513, $aa514, $aa515, $aa516, $aa517, $aa518, $aa519, $aa520, $aa521, $aa522, $aa523, $aa524, $aa525, $aa526, $aa527, $aa528, $aa529, $aa530, $aa531, $aa532, $aa533, $aa534, $aa535, $aa536, $aa537, $aa538, $aa539, $aa540, $aa541, $aa542, $aa543, $aa544, $aa545, $aa546, $aa547, $aa548, $aa549, $aa550, $aa551, $aa552, $aa553, $aa554, $aa555, $aa556, $aa557, $aa558, $aa559, $aa560, $aa561, $aa562, $aa563, $aa564, $aa565, $aa566, $aa567, $aa568, $aa569, $aa570, $aa571, $aa572, $aa573, $aa574, $aa575, $aa576, $aa577, $aa578, $aa579, $aa580, $aa581, $aa582, $aa583, $aa584, $aa585, $aa586, $aa587, $aa588, $aa589, $aa590, $aa591, $aa592, $aa593, $aa594, $aa595, $aa596, $aa597, $aa598, $aa599, $aa600, $aa601, $aa602, $aa603, $aa604, $aa605, $aa606, $aa607, $aa608, $aa609, $aa610, $aa611, $aa612, $aa613, $aa614, $aa615, $aa616, $aa617, $aa618, $aa619, $aa620, $aa621, $aa622, $aa623, $aa624, $aa625, $aa626, $aa627, $aa628, $aa629, $aa630, $aa631, $aa632, $aa633, $aa634, $aa635, $aa636, $aa637, $aa638, $aa639, $aa640, $aa641, $aa642, $aa643, $aa644, $aa645, $aa646, $aa647, $aa648, $aa649, $aa650, $aa651, $aa652, $aa653, $aa654, $aa655, $aa656, $aa657, $aa658, $aa659, $aa660, $aa661, $aa662, $aa663, $aa664, $aa665, $aa666, $aa667, $aa668, $aa669, $aa670, $aa671, $aa672, $aa673, $aa674, $aa675, $aa676, $aa677, $aa678, $aa679, $aa680, $aa681, $aa682, $aa683, $aa684, $aa685, $aa686, $aa687, $aa688, $aa689, $aa690, $aa691, $aa692, $aa693, $aa694, $aa695, $aa696, $aa697, $aa698, $aa699, $aa700, $aa701, $aa702, $aa703, $aa704, $aa705, $aa706, $aa707, $aa708, $aa709, $aa710, $aa711, $aa712, $aa713, $aa714, $aa715, $aa716, $aa717, $aa718, $aa719, $aa720, $aa721, $aa722, $aa723, $aa724, $aa725, $aa726, $aa727, $aa728, $aa729, $aa730, $aa731, $aa732, $aa733, $aa734, $aa735, $aa736, $aa737, $aa738, $aa739, $aa740, $aa741, $aa742, $aa743, $aa744, $aa745, $aa746, $aa747, $aa748, $aa749, $aa750, $aa751, $aa752, $aa753, $aa754, $aa755, $aa756, $aa757, $aa758, $aa759, $aa760, $aa761, $aa762, $aa763, $aa764, $aa765, $aa766, $aa767, $aa768, $aa769, $aa770, $aa771, $aa772, $aa773, $aa774, $aa775, $aa776, $aa777, $aa778, $aa779, $aa780, $aa781, $aa782, $aa783, $aa784, $aa785, $aa786, $aa787, $aa788, $aa789, $aa790, $aa791, $aa792, $aa793, $aa794, $aa795, $aa796, $aa797, $aa798, $aa799, $aa800, $aa801, $aa802, $aa803, $aa804, $aa805, $aa806, $aa807, $aa808, $aa809, $aa810, $aa811, $aa812, $aa813, $aa814, $aa815, $aa816, $aa817, $aa818, $aa819, $aa820, $aa821, $aa822, $aa823, $aa824, $aa825, $aa826, $aa827, $aa828, $aa829, $aa830, $aa831, $aa832, $aa833, $aa834, $aa835, $aa836, $aa837, $aa838, $aa839, $aa840, $aa841, $aa842, $aa843, $aa844, $aa845, $aa846, $aa847, $aa848, $aa849, $aa850, $aa851, $aa852, $aa853, $aa854, $aa855, $aa856, $aa857, $aa858, $aa859, $aa860, $aa861, $aa862, $aa863, $aa864, $aa865, $aa866, $aa867, $aa868, $aa869, $aa870, $aa871, $aa872, $aa873, $aa874, $aa875, $aa876, $aa877, $aa878, $aa879, $aa880, $aa881, $aa882, $aa883, $aa884, $aa885, $aa886, $aa887, $aa888, $aa889, $aa890, $aa891, $aa892, $aa893, $aa894, $aa895, $aa896, $aa897, $aa898, $aa899, $aa900, $aa901, $aa902, $aa903, $aa904, $aa905, $aa906, $aa907, $aa908, $aa909, $aa910, $aa911, $aa912, $aa913, $aa914, $aa915, $aa916, $aa917, $aa918, $aa919, $aa920, $aa921, $aa922, $aa923, $aa924, $aa925, $aa926, $aa927, $aa928, $aa929, $aa930, $aa931, $aa932, $aa933, $aa934, $aa935, $aa936, $aa937, $aa938, $aa939, $aa940, $aa941, $aa942, $aa943, $aa944, $aa945, $aa946, $aa947, $aa948, $aa949, $aa950, $aa951, $aa952, $aa953, $aa954, $aa955, $aa956, $aa957, $aa958, $aa959, $aa960, $aa961, $aa962, $aa963, $aa964, $aa965, $aa966, $aa967, $aa968, $aa969, $aa970, $aa971, $aa972, $aa973, $aa974, $aa975, $aa976, $aa977, $aa978, $aa979, $aa980, $aa981, $aa982, $aa983, $aa984, $aa985, $aa986, $aa987, $aa988, $aa989, $aa990, $aa991, $aa992, $aa993, $aa994, $aa995, $aa996, $aa997, $aa998, $aa999, $aa1000, $aa1001, $aa1002, $aa1003, $aa1004, $aa1005, $aa1006, $aa1007, $aa1008, $aa1009, $aa1010, $aa1011, $aa1012, $aa1013, $aa1014, $aa1015, $aa1016, $aa1017, $aa1018, $aa1019, $aa1020, $aa1021, $aa1022, $aa1023, $aa1024; +$aa1: + $p := 1; + goto $bb1; +$aa2: + $p := 2; + goto $bb1; +$aa3: + $p := 3; + goto $bb1; +$aa4: + $p := 4; + goto $bb1; +$aa5: + $p := 5; + goto $bb1; +$aa6: + $p := 6; + goto $bb1; +$aa7: + $p := 7; + goto $bb1; +$aa8: + $p := 8; + goto $bb1; +$aa9: + $p := 9; + goto $bb1; +$aa10: + $p := 10; + goto $bb1; +$aa11: + $p := 11; + goto $bb1; +$aa12: + $p := 12; + goto $bb1; +$aa13: + $p := 13; + goto $bb1; +$aa14: + $p := 14; + goto $bb1; +$aa15: + $p := 15; + goto $bb1; +$aa16: + $p := 16; + goto $bb1; +$aa17: + $p := 17; + goto $bb1; +$aa18: + $p := 18; + goto $bb1; +$aa19: + $p := 19; + goto $bb1; +$aa20: + $p := 20; + goto $bb1; +$aa21: + $p := 21; + goto $bb1; +$aa22: + $p := 22; + goto $bb1; +$aa23: + $p := 23; + goto $bb1; +$aa24: + $p := 24; + goto $bb1; +$aa25: + $p := 25; + goto $bb1; +$aa26: + $p := 26; + goto $bb1; +$aa27: + $p := 27; + goto $bb1; +$aa28: + $p := 28; + goto $bb1; +$aa29: + $p := 29; + goto $bb1; +$aa30: + $p := 30; + goto $bb1; +$aa31: + $p := 31; + goto $bb1; +$aa32: + $p := 32; + goto $bb1; +$aa33: + $p := 33; + goto $bb1; +$aa34: + $p := 34; + goto $bb1; +$aa35: + $p := 35; + goto $bb1; +$aa36: + $p := 36; + goto $bb1; +$aa37: + $p := 37; + goto $bb1; +$aa38: + $p := 38; + goto $bb1; +$aa39: + $p := 39; + goto $bb1; +$aa40: + $p := 40; + goto $bb1; +$aa41: + $p := 41; + goto $bb1; +$aa42: + $p := 42; + goto $bb1; +$aa43: + $p := 43; + goto $bb1; +$aa44: + $p := 44; + goto $bb1; +$aa45: + $p := 45; + goto $bb1; +$aa46: + $p := 46; + goto $bb1; +$aa47: + $p := 47; + goto $bb1; +$aa48: + $p := 48; + goto $bb1; +$aa49: + $p := 49; + goto $bb1; +$aa50: + $p := 50; + goto $bb1; +$aa51: + $p := 51; + goto $bb1; +$aa52: + $p := 52; + goto $bb1; +$aa53: + $p := 53; + goto $bb1; +$aa54: + $p := 54; + goto $bb1; +$aa55: + $p := 55; + goto $bb1; +$aa56: + $p := 56; + goto $bb1; +$aa57: + $p := 57; + goto $bb1; +$aa58: + $p := 58; + goto $bb1; +$aa59: + $p := 59; + goto $bb1; +$aa60: + $p := 60; + goto $bb1; +$aa61: + $p := 61; + goto $bb1; +$aa62: + $p := 62; + goto $bb1; +$aa63: + $p := 63; + goto $bb1; +$aa64: + $p := 64; + goto $bb1; +$aa65: + $p := 65; + goto $bb1; +$aa66: + $p := 66; + goto $bb1; +$aa67: + $p := 67; + goto $bb1; +$aa68: + $p := 68; + goto $bb1; +$aa69: + $p := 69; + goto $bb1; +$aa70: + $p := 70; + goto $bb1; +$aa71: + $p := 71; + goto $bb1; +$aa72: + $p := 72; + goto $bb1; +$aa73: + $p := 73; + goto $bb1; +$aa74: + $p := 74; + goto $bb1; +$aa75: + $p := 75; + goto $bb1; +$aa76: + $p := 76; + goto $bb1; +$aa77: + $p := 77; + goto $bb1; +$aa78: + $p := 78; + goto $bb1; +$aa79: + $p := 79; + goto $bb1; +$aa80: + $p := 80; + goto $bb1; +$aa81: + $p := 81; + goto $bb1; +$aa82: + $p := 82; + goto $bb1; +$aa83: + $p := 83; + goto $bb1; +$aa84: + $p := 84; + goto $bb1; +$aa85: + $p := 85; + goto $bb1; +$aa86: + $p := 86; + goto $bb1; +$aa87: + $p := 87; + goto $bb1; +$aa88: + $p := 88; + goto $bb1; +$aa89: + $p := 89; + goto $bb1; +$aa90: + $p := 90; + goto $bb1; +$aa91: + $p := 91; + goto $bb1; +$aa92: + $p := 92; + goto $bb1; +$aa93: + $p := 93; + goto $bb1; +$aa94: + $p := 94; + goto $bb1; +$aa95: + $p := 95; + goto $bb1; +$aa96: + $p := 96; + goto $bb1; +$aa97: + $p := 97; + goto $bb1; +$aa98: + $p := 98; + goto $bb1; +$aa99: + $p := 99; + goto $bb1; +$aa100: + $p := 100; + goto $bb1; +$aa101: + $p := 101; + goto $bb1; +$aa102: + $p := 102; + goto $bb1; +$aa103: + $p := 103; + goto $bb1; +$aa104: + $p := 104; + goto $bb1; +$aa105: + $p := 105; + goto $bb1; +$aa106: + $p := 106; + goto $bb1; +$aa107: + $p := 107; + goto $bb1; +$aa108: + $p := 108; + goto $bb1; +$aa109: + $p := 109; + goto $bb1; +$aa110: + $p := 110; + goto $bb1; +$aa111: + $p := 111; + goto $bb1; +$aa112: + $p := 112; + goto $bb1; +$aa113: + $p := 113; + goto $bb1; +$aa114: + $p := 114; + goto $bb1; +$aa115: + $p := 115; + goto $bb1; +$aa116: + $p := 116; + goto $bb1; +$aa117: + $p := 117; + goto $bb1; +$aa118: + $p := 118; + goto $bb1; +$aa119: + $p := 119; + goto $bb1; +$aa120: + $p := 120; + goto $bb1; +$aa121: + $p := 121; + goto $bb1; +$aa122: + $p := 122; + goto $bb1; +$aa123: + $p := 123; + goto $bb1; +$aa124: + $p := 124; + goto $bb1; +$aa125: + $p := 125; + goto $bb1; +$aa126: + $p := 126; + goto $bb1; +$aa127: + $p := 127; + goto $bb1; +$aa128: + $p := 128; + goto $bb1; +$aa129: + $p := 129; + goto $bb1; +$aa130: + $p := 130; + goto $bb1; +$aa131: + $p := 131; + goto $bb1; +$aa132: + $p := 132; + goto $bb1; +$aa133: + $p := 133; + goto $bb1; +$aa134: + $p := 134; + goto $bb1; +$aa135: + $p := 135; + goto $bb1; +$aa136: + $p := 136; + goto $bb1; +$aa137: + $p := 137; + goto $bb1; +$aa138: + $p := 138; + goto $bb1; +$aa139: + $p := 139; + goto $bb1; +$aa140: + $p := 140; + goto $bb1; +$aa141: + $p := 141; + goto $bb1; +$aa142: + $p := 142; + goto $bb1; +$aa143: + $p := 143; + goto $bb1; +$aa144: + $p := 144; + goto $bb1; +$aa145: + $p := 145; + goto $bb1; +$aa146: + $p := 146; + goto $bb1; +$aa147: + $p := 147; + goto $bb1; +$aa148: + $p := 148; + goto $bb1; +$aa149: + $p := 149; + goto $bb1; +$aa150: + $p := 150; + goto $bb1; +$aa151: + $p := 151; + goto $bb1; +$aa152: + $p := 152; + goto $bb1; +$aa153: + $p := 153; + goto $bb1; +$aa154: + $p := 154; + goto $bb1; +$aa155: + $p := 155; + goto $bb1; +$aa156: + $p := 156; + goto $bb1; +$aa157: + $p := 157; + goto $bb1; +$aa158: + $p := 158; + goto $bb1; +$aa159: + $p := 159; + goto $bb1; +$aa160: + $p := 160; + goto $bb1; +$aa161: + $p := 161; + goto $bb1; +$aa162: + $p := 162; + goto $bb1; +$aa163: + $p := 163; + goto $bb1; +$aa164: + $p := 164; + goto $bb1; +$aa165: + $p := 165; + goto $bb1; +$aa166: + $p := 166; + goto $bb1; +$aa167: + $p := 167; + goto $bb1; +$aa168: + $p := 168; + goto $bb1; +$aa169: + $p := 169; + goto $bb1; +$aa170: + $p := 170; + goto $bb1; +$aa171: + $p := 171; + goto $bb1; +$aa172: + $p := 172; + goto $bb1; +$aa173: + $p := 173; + goto $bb1; +$aa174: + $p := 174; + goto $bb1; +$aa175: + $p := 175; + goto $bb1; +$aa176: + $p := 176; + goto $bb1; +$aa177: + $p := 177; + goto $bb1; +$aa178: + $p := 178; + goto $bb1; +$aa179: + $p := 179; + goto $bb1; +$aa180: + $p := 180; + goto $bb1; +$aa181: + $p := 181; + goto $bb1; +$aa182: + $p := 182; + goto $bb1; +$aa183: + $p := 183; + goto $bb1; +$aa184: + $p := 184; + goto $bb1; +$aa185: + $p := 185; + goto $bb1; +$aa186: + $p := 186; + goto $bb1; +$aa187: + $p := 187; + goto $bb1; +$aa188: + $p := 188; + goto $bb1; +$aa189: + $p := 189; + goto $bb1; +$aa190: + $p := 190; + goto $bb1; +$aa191: + $p := 191; + goto $bb1; +$aa192: + $p := 192; + goto $bb1; +$aa193: + $p := 193; + goto $bb1; +$aa194: + $p := 194; + goto $bb1; +$aa195: + $p := 195; + goto $bb1; +$aa196: + $p := 196; + goto $bb1; +$aa197: + $p := 197; + goto $bb1; +$aa198: + $p := 198; + goto $bb1; +$aa199: + $p := 199; + goto $bb1; +$aa200: + $p := 200; + goto $bb1; +$aa201: + $p := 201; + goto $bb1; +$aa202: + $p := 202; + goto $bb1; +$aa203: + $p := 203; + goto $bb1; +$aa204: + $p := 204; + goto $bb1; +$aa205: + $p := 205; + goto $bb1; +$aa206: + $p := 206; + goto $bb1; +$aa207: + $p := 207; + goto $bb1; +$aa208: + $p := 208; + goto $bb1; +$aa209: + $p := 209; + goto $bb1; +$aa210: + $p := 210; + goto $bb1; +$aa211: + $p := 211; + goto $bb1; +$aa212: + $p := 212; + goto $bb1; +$aa213: + $p := 213; + goto $bb1; +$aa214: + $p := 214; + goto $bb1; +$aa215: + $p := 215; + goto $bb1; +$aa216: + $p := 216; + goto $bb1; +$aa217: + $p := 217; + goto $bb1; +$aa218: + $p := 218; + goto $bb1; +$aa219: + $p := 219; + goto $bb1; +$aa220: + $p := 220; + goto $bb1; +$aa221: + $p := 221; + goto $bb1; +$aa222: + $p := 222; + goto $bb1; +$aa223: + $p := 223; + goto $bb1; +$aa224: + $p := 224; + goto $bb1; +$aa225: + $p := 225; + goto $bb1; +$aa226: + $p := 226; + goto $bb1; +$aa227: + $p := 227; + goto $bb1; +$aa228: + $p := 228; + goto $bb1; +$aa229: + $p := 229; + goto $bb1; +$aa230: + $p := 230; + goto $bb1; +$aa231: + $p := 231; + goto $bb1; +$aa232: + $p := 232; + goto $bb1; +$aa233: + $p := 233; + goto $bb1; +$aa234: + $p := 234; + goto $bb1; +$aa235: + $p := 235; + goto $bb1; +$aa236: + $p := 236; + goto $bb1; +$aa237: + $p := 237; + goto $bb1; +$aa238: + $p := 238; + goto $bb1; +$aa239: + $p := 239; + goto $bb1; +$aa240: + $p := 240; + goto $bb1; +$aa241: + $p := 241; + goto $bb1; +$aa242: + $p := 242; + goto $bb1; +$aa243: + $p := 243; + goto $bb1; +$aa244: + $p := 244; + goto $bb1; +$aa245: + $p := 245; + goto $bb1; +$aa246: + $p := 246; + goto $bb1; +$aa247: + $p := 247; + goto $bb1; +$aa248: + $p := 248; + goto $bb1; +$aa249: + $p := 249; + goto $bb1; +$aa250: + $p := 250; + goto $bb1; +$aa251: + $p := 251; + goto $bb1; +$aa252: + $p := 252; + goto $bb1; +$aa253: + $p := 253; + goto $bb1; +$aa254: + $p := 254; + goto $bb1; +$aa255: + $p := 255; + goto $bb1; +$aa256: + $p := 256; + goto $bb1; +$aa257: + $p := 257; + goto $bb1; +$aa258: + $p := 258; + goto $bb1; +$aa259: + $p := 259; + goto $bb1; +$aa260: + $p := 260; + goto $bb1; +$aa261: + $p := 261; + goto $bb1; +$aa262: + $p := 262; + goto $bb1; +$aa263: + $p := 263; + goto $bb1; +$aa264: + $p := 264; + goto $bb1; +$aa265: + $p := 265; + goto $bb1; +$aa266: + $p := 266; + goto $bb1; +$aa267: + $p := 267; + goto $bb1; +$aa268: + $p := 268; + goto $bb1; +$aa269: + $p := 269; + goto $bb1; +$aa270: + $p := 270; + goto $bb1; +$aa271: + $p := 271; + goto $bb1; +$aa272: + $p := 272; + goto $bb1; +$aa273: + $p := 273; + goto $bb1; +$aa274: + $p := 274; + goto $bb1; +$aa275: + $p := 275; + goto $bb1; +$aa276: + $p := 276; + goto $bb1; +$aa277: + $p := 277; + goto $bb1; +$aa278: + $p := 278; + goto $bb1; +$aa279: + $p := 279; + goto $bb1; +$aa280: + $p := 280; + goto $bb1; +$aa281: + $p := 281; + goto $bb1; +$aa282: + $p := 282; + goto $bb1; +$aa283: + $p := 283; + goto $bb1; +$aa284: + $p := 284; + goto $bb1; +$aa285: + $p := 285; + goto $bb1; +$aa286: + $p := 286; + goto $bb1; +$aa287: + $p := 287; + goto $bb1; +$aa288: + $p := 288; + goto $bb1; +$aa289: + $p := 289; + goto $bb1; +$aa290: + $p := 290; + goto $bb1; +$aa291: + $p := 291; + goto $bb1; +$aa292: + $p := 292; + goto $bb1; +$aa293: + $p := 293; + goto $bb1; +$aa294: + $p := 294; + goto $bb1; +$aa295: + $p := 295; + goto $bb1; +$aa296: + $p := 296; + goto $bb1; +$aa297: + $p := 297; + goto $bb1; +$aa298: + $p := 298; + goto $bb1; +$aa299: + $p := 299; + goto $bb1; +$aa300: + $p := 300; + goto $bb1; +$aa301: + $p := 301; + goto $bb1; +$aa302: + $p := 302; + goto $bb1; +$aa303: + $p := 303; + goto $bb1; +$aa304: + $p := 304; + goto $bb1; +$aa305: + $p := 305; + goto $bb1; +$aa306: + $p := 306; + goto $bb1; +$aa307: + $p := 307; + goto $bb1; +$aa308: + $p := 308; + goto $bb1; +$aa309: + $p := 309; + goto $bb1; +$aa310: + $p := 310; + goto $bb1; +$aa311: + $p := 311; + goto $bb1; +$aa312: + $p := 312; + goto $bb1; +$aa313: + $p := 313; + goto $bb1; +$aa314: + $p := 314; + goto $bb1; +$aa315: + $p := 315; + goto $bb1; +$aa316: + $p := 316; + goto $bb1; +$aa317: + $p := 317; + goto $bb1; +$aa318: + $p := 318; + goto $bb1; +$aa319: + $p := 319; + goto $bb1; +$aa320: + $p := 320; + goto $bb1; +$aa321: + $p := 321; + goto $bb1; +$aa322: + $p := 322; + goto $bb1; +$aa323: + $p := 323; + goto $bb1; +$aa324: + $p := 324; + goto $bb1; +$aa325: + $p := 325; + goto $bb1; +$aa326: + $p := 326; + goto $bb1; +$aa327: + $p := 327; + goto $bb1; +$aa328: + $p := 328; + goto $bb1; +$aa329: + $p := 329; + goto $bb1; +$aa330: + $p := 330; + goto $bb1; +$aa331: + $p := 331; + goto $bb1; +$aa332: + $p := 332; + goto $bb1; +$aa333: + $p := 333; + goto $bb1; +$aa334: + $p := 334; + goto $bb1; +$aa335: + $p := 335; + goto $bb1; +$aa336: + $p := 336; + goto $bb1; +$aa337: + $p := 337; + goto $bb1; +$aa338: + $p := 338; + goto $bb1; +$aa339: + $p := 339; + goto $bb1; +$aa340: + $p := 340; + goto $bb1; +$aa341: + $p := 341; + goto $bb1; +$aa342: + $p := 342; + goto $bb1; +$aa343: + $p := 343; + goto $bb1; +$aa344: + $p := 344; + goto $bb1; +$aa345: + $p := 345; + goto $bb1; +$aa346: + $p := 346; + goto $bb1; +$aa347: + $p := 347; + goto $bb1; +$aa348: + $p := 348; + goto $bb1; +$aa349: + $p := 349; + goto $bb1; +$aa350: + $p := 350; + goto $bb1; +$aa351: + $p := 351; + goto $bb1; +$aa352: + $p := 352; + goto $bb1; +$aa353: + $p := 353; + goto $bb1; +$aa354: + $p := 354; + goto $bb1; +$aa355: + $p := 355; + goto $bb1; +$aa356: + $p := 356; + goto $bb1; +$aa357: + $p := 357; + goto $bb1; +$aa358: + $p := 358; + goto $bb1; +$aa359: + $p := 359; + goto $bb1; +$aa360: + $p := 360; + goto $bb1; +$aa361: + $p := 361; + goto $bb1; +$aa362: + $p := 362; + goto $bb1; +$aa363: + $p := 363; + goto $bb1; +$aa364: + $p := 364; + goto $bb1; +$aa365: + $p := 365; + goto $bb1; +$aa366: + $p := 366; + goto $bb1; +$aa367: + $p := 367; + goto $bb1; +$aa368: + $p := 368; + goto $bb1; +$aa369: + $p := 369; + goto $bb1; +$aa370: + $p := 370; + goto $bb1; +$aa371: + $p := 371; + goto $bb1; +$aa372: + $p := 372; + goto $bb1; +$aa373: + $p := 373; + goto $bb1; +$aa374: + $p := 374; + goto $bb1; +$aa375: + $p := 375; + goto $bb1; +$aa376: + $p := 376; + goto $bb1; +$aa377: + $p := 377; + goto $bb1; +$aa378: + $p := 378; + goto $bb1; +$aa379: + $p := 379; + goto $bb1; +$aa380: + $p := 380; + goto $bb1; +$aa381: + $p := 381; + goto $bb1; +$aa382: + $p := 382; + goto $bb1; +$aa383: + $p := 383; + goto $bb1; +$aa384: + $p := 384; + goto $bb1; +$aa385: + $p := 385; + goto $bb1; +$aa386: + $p := 386; + goto $bb1; +$aa387: + $p := 387; + goto $bb1; +$aa388: + $p := 388; + goto $bb1; +$aa389: + $p := 389; + goto $bb1; +$aa390: + $p := 390; + goto $bb1; +$aa391: + $p := 391; + goto $bb1; +$aa392: + $p := 392; + goto $bb1; +$aa393: + $p := 393; + goto $bb1; +$aa394: + $p := 394; + goto $bb1; +$aa395: + $p := 395; + goto $bb1; +$aa396: + $p := 396; + goto $bb1; +$aa397: + $p := 397; + goto $bb1; +$aa398: + $p := 398; + goto $bb1; +$aa399: + $p := 399; + goto $bb1; +$aa400: + $p := 400; + goto $bb1; +$aa401: + $p := 401; + goto $bb1; +$aa402: + $p := 402; + goto $bb1; +$aa403: + $p := 403; + goto $bb1; +$aa404: + $p := 404; + goto $bb1; +$aa405: + $p := 405; + goto $bb1; +$aa406: + $p := 406; + goto $bb1; +$aa407: + $p := 407; + goto $bb1; +$aa408: + $p := 408; + goto $bb1; +$aa409: + $p := 409; + goto $bb1; +$aa410: + $p := 410; + goto $bb1; +$aa411: + $p := 411; + goto $bb1; +$aa412: + $p := 412; + goto $bb1; +$aa413: + $p := 413; + goto $bb1; +$aa414: + $p := 414; + goto $bb1; +$aa415: + $p := 415; + goto $bb1; +$aa416: + $p := 416; + goto $bb1; +$aa417: + $p := 417; + goto $bb1; +$aa418: + $p := 418; + goto $bb1; +$aa419: + $p := 419; + goto $bb1; +$aa420: + $p := 420; + goto $bb1; +$aa421: + $p := 421; + goto $bb1; +$aa422: + $p := 422; + goto $bb1; +$aa423: + $p := 423; + goto $bb1; +$aa424: + $p := 424; + goto $bb1; +$aa425: + $p := 425; + goto $bb1; +$aa426: + $p := 426; + goto $bb1; +$aa427: + $p := 427; + goto $bb1; +$aa428: + $p := 428; + goto $bb1; +$aa429: + $p := 429; + goto $bb1; +$aa430: + $p := 430; + goto $bb1; +$aa431: + $p := 431; + goto $bb1; +$aa432: + $p := 432; + goto $bb1; +$aa433: + $p := 433; + goto $bb1; +$aa434: + $p := 434; + goto $bb1; +$aa435: + $p := 435; + goto $bb1; +$aa436: + $p := 436; + goto $bb1; +$aa437: + $p := 437; + goto $bb1; +$aa438: + $p := 438; + goto $bb1; +$aa439: + $p := 439; + goto $bb1; +$aa440: + $p := 440; + goto $bb1; +$aa441: + $p := 441; + goto $bb1; +$aa442: + $p := 442; + goto $bb1; +$aa443: + $p := 443; + goto $bb1; +$aa444: + $p := 444; + goto $bb1; +$aa445: + $p := 445; + goto $bb1; +$aa446: + $p := 446; + goto $bb1; +$aa447: + $p := 447; + goto $bb1; +$aa448: + $p := 448; + goto $bb1; +$aa449: + $p := 449; + goto $bb1; +$aa450: + $p := 450; + goto $bb1; +$aa451: + $p := 451; + goto $bb1; +$aa452: + $p := 452; + goto $bb1; +$aa453: + $p := 453; + goto $bb1; +$aa454: + $p := 454; + goto $bb1; +$aa455: + $p := 455; + goto $bb1; +$aa456: + $p := 456; + goto $bb1; +$aa457: + $p := 457; + goto $bb1; +$aa458: + $p := 458; + goto $bb1; +$aa459: + $p := 459; + goto $bb1; +$aa460: + $p := 460; + goto $bb1; +$aa461: + $p := 461; + goto $bb1; +$aa462: + $p := 462; + goto $bb1; +$aa463: + $p := 463; + goto $bb1; +$aa464: + $p := 464; + goto $bb1; +$aa465: + $p := 465; + goto $bb1; +$aa466: + $p := 466; + goto $bb1; +$aa467: + $p := 467; + goto $bb1; +$aa468: + $p := 468; + goto $bb1; +$aa469: + $p := 469; + goto $bb1; +$aa470: + $p := 470; + goto $bb1; +$aa471: + $p := 471; + goto $bb1; +$aa472: + $p := 472; + goto $bb1; +$aa473: + $p := 473; + goto $bb1; +$aa474: + $p := 474; + goto $bb1; +$aa475: + $p := 475; + goto $bb1; +$aa476: + $p := 476; + goto $bb1; +$aa477: + $p := 477; + goto $bb1; +$aa478: + $p := 478; + goto $bb1; +$aa479: + $p := 479; + goto $bb1; +$aa480: + $p := 480; + goto $bb1; +$aa481: + $p := 481; + goto $bb1; +$aa482: + $p := 482; + goto $bb1; +$aa483: + $p := 483; + goto $bb1; +$aa484: + $p := 484; + goto $bb1; +$aa485: + $p := 485; + goto $bb1; +$aa486: + $p := 486; + goto $bb1; +$aa487: + $p := 487; + goto $bb1; +$aa488: + $p := 488; + goto $bb1; +$aa489: + $p := 489; + goto $bb1; +$aa490: + $p := 490; + goto $bb1; +$aa491: + $p := 491; + goto $bb1; +$aa492: + $p := 492; + goto $bb1; +$aa493: + $p := 493; + goto $bb1; +$aa494: + $p := 494; + goto $bb1; +$aa495: + $p := 495; + goto $bb1; +$aa496: + $p := 496; + goto $bb1; +$aa497: + $p := 497; + goto $bb1; +$aa498: + $p := 498; + goto $bb1; +$aa499: + $p := 499; + goto $bb1; +$aa500: + $p := 500; + goto $bb1; +$aa501: + $p := 501; + goto $bb1; +$aa502: + $p := 502; + goto $bb1; +$aa503: + $p := 503; + goto $bb1; +$aa504: + $p := 504; + goto $bb1; +$aa505: + $p := 505; + goto $bb1; +$aa506: + $p := 506; + goto $bb1; +$aa507: + $p := 507; + goto $bb1; +$aa508: + $p := 508; + goto $bb1; +$aa509: + $p := 509; + goto $bb1; +$aa510: + $p := 510; + goto $bb1; +$aa511: + $p := 511; + goto $bb1; +$aa512: + $p := 512; + goto $bb1; +$aa513: + $p := 513; + goto $bb1; +$aa514: + $p := 514; + goto $bb1; +$aa515: + $p := 515; + goto $bb1; +$aa516: + $p := 516; + goto $bb1; +$aa517: + $p := 517; + goto $bb1; +$aa518: + $p := 518; + goto $bb1; +$aa519: + $p := 519; + goto $bb1; +$aa520: + $p := 520; + goto $bb1; +$aa521: + $p := 521; + goto $bb1; +$aa522: + $p := 522; + goto $bb1; +$aa523: + $p := 523; + goto $bb1; +$aa524: + $p := 524; + goto $bb1; +$aa525: + $p := 525; + goto $bb1; +$aa526: + $p := 526; + goto $bb1; +$aa527: + $p := 527; + goto $bb1; +$aa528: + $p := 528; + goto $bb1; +$aa529: + $p := 529; + goto $bb1; +$aa530: + $p := 530; + goto $bb1; +$aa531: + $p := 531; + goto $bb1; +$aa532: + $p := 532; + goto $bb1; +$aa533: + $p := 533; + goto $bb1; +$aa534: + $p := 534; + goto $bb1; +$aa535: + $p := 535; + goto $bb1; +$aa536: + $p := 536; + goto $bb1; +$aa537: + $p := 537; + goto $bb1; +$aa538: + $p := 538; + goto $bb1; +$aa539: + $p := 539; + goto $bb1; +$aa540: + $p := 540; + goto $bb1; +$aa541: + $p := 541; + goto $bb1; +$aa542: + $p := 542; + goto $bb1; +$aa543: + $p := 543; + goto $bb1; +$aa544: + $p := 544; + goto $bb1; +$aa545: + $p := 545; + goto $bb1; +$aa546: + $p := 546; + goto $bb1; +$aa547: + $p := 547; + goto $bb1; +$aa548: + $p := 548; + goto $bb1; +$aa549: + $p := 549; + goto $bb1; +$aa550: + $p := 550; + goto $bb1; +$aa551: + $p := 551; + goto $bb1; +$aa552: + $p := 552; + goto $bb1; +$aa553: + $p := 553; + goto $bb1; +$aa554: + $p := 554; + goto $bb1; +$aa555: + $p := 555; + goto $bb1; +$aa556: + $p := 556; + goto $bb1; +$aa557: + $p := 557; + goto $bb1; +$aa558: + $p := 558; + goto $bb1; +$aa559: + $p := 559; + goto $bb1; +$aa560: + $p := 560; + goto $bb1; +$aa561: + $p := 561; + goto $bb1; +$aa562: + $p := 562; + goto $bb1; +$aa563: + $p := 563; + goto $bb1; +$aa564: + $p := 564; + goto $bb1; +$aa565: + $p := 565; + goto $bb1; +$aa566: + $p := 566; + goto $bb1; +$aa567: + $p := 567; + goto $bb1; +$aa568: + $p := 568; + goto $bb1; +$aa569: + $p := 569; + goto $bb1; +$aa570: + $p := 570; + goto $bb1; +$aa571: + $p := 571; + goto $bb1; +$aa572: + $p := 572; + goto $bb1; +$aa573: + $p := 573; + goto $bb1; +$aa574: + $p := 574; + goto $bb1; +$aa575: + $p := 575; + goto $bb1; +$aa576: + $p := 576; + goto $bb1; +$aa577: + $p := 577; + goto $bb1; +$aa578: + $p := 578; + goto $bb1; +$aa579: + $p := 579; + goto $bb1; +$aa580: + $p := 580; + goto $bb1; +$aa581: + $p := 581; + goto $bb1; +$aa582: + $p := 582; + goto $bb1; +$aa583: + $p := 583; + goto $bb1; +$aa584: + $p := 584; + goto $bb1; +$aa585: + $p := 585; + goto $bb1; +$aa586: + $p := 586; + goto $bb1; +$aa587: + $p := 587; + goto $bb1; +$aa588: + $p := 588; + goto $bb1; +$aa589: + $p := 589; + goto $bb1; +$aa590: + $p := 590; + goto $bb1; +$aa591: + $p := 591; + goto $bb1; +$aa592: + $p := 592; + goto $bb1; +$aa593: + $p := 593; + goto $bb1; +$aa594: + $p := 594; + goto $bb1; +$aa595: + $p := 595; + goto $bb1; +$aa596: + $p := 596; + goto $bb1; +$aa597: + $p := 597; + goto $bb1; +$aa598: + $p := 598; + goto $bb1; +$aa599: + $p := 599; + goto $bb1; +$aa600: + $p := 600; + goto $bb1; +$aa601: + $p := 601; + goto $bb1; +$aa602: + $p := 602; + goto $bb1; +$aa603: + $p := 603; + goto $bb1; +$aa604: + $p := 604; + goto $bb1; +$aa605: + $p := 605; + goto $bb1; +$aa606: + $p := 606; + goto $bb1; +$aa607: + $p := 607; + goto $bb1; +$aa608: + $p := 608; + goto $bb1; +$aa609: + $p := 609; + goto $bb1; +$aa610: + $p := 610; + goto $bb1; +$aa611: + $p := 611; + goto $bb1; +$aa612: + $p := 612; + goto $bb1; +$aa613: + $p := 613; + goto $bb1; +$aa614: + $p := 614; + goto $bb1; +$aa615: + $p := 615; + goto $bb1; +$aa616: + $p := 616; + goto $bb1; +$aa617: + $p := 617; + goto $bb1; +$aa618: + $p := 618; + goto $bb1; +$aa619: + $p := 619; + goto $bb1; +$aa620: + $p := 620; + goto $bb1; +$aa621: + $p := 621; + goto $bb1; +$aa622: + $p := 622; + goto $bb1; +$aa623: + $p := 623; + goto $bb1; +$aa624: + $p := 624; + goto $bb1; +$aa625: + $p := 625; + goto $bb1; +$aa626: + $p := 626; + goto $bb1; +$aa627: + $p := 627; + goto $bb1; +$aa628: + $p := 628; + goto $bb1; +$aa629: + $p := 629; + goto $bb1; +$aa630: + $p := 630; + goto $bb1; +$aa631: + $p := 631; + goto $bb1; +$aa632: + $p := 632; + goto $bb1; +$aa633: + $p := 633; + goto $bb1; +$aa634: + $p := 634; + goto $bb1; +$aa635: + $p := 635; + goto $bb1; +$aa636: + $p := 636; + goto $bb1; +$aa637: + $p := 637; + goto $bb1; +$aa638: + $p := 638; + goto $bb1; +$aa639: + $p := 639; + goto $bb1; +$aa640: + $p := 640; + goto $bb1; +$aa641: + $p := 641; + goto $bb1; +$aa642: + $p := 642; + goto $bb1; +$aa643: + $p := 643; + goto $bb1; +$aa644: + $p := 644; + goto $bb1; +$aa645: + $p := 645; + goto $bb1; +$aa646: + $p := 646; + goto $bb1; +$aa647: + $p := 647; + goto $bb1; +$aa648: + $p := 648; + goto $bb1; +$aa649: + $p := 649; + goto $bb1; +$aa650: + $p := 650; + goto $bb1; +$aa651: + $p := 651; + goto $bb1; +$aa652: + $p := 652; + goto $bb1; +$aa653: + $p := 653; + goto $bb1; +$aa654: + $p := 654; + goto $bb1; +$aa655: + $p := 655; + goto $bb1; +$aa656: + $p := 656; + goto $bb1; +$aa657: + $p := 657; + goto $bb1; +$aa658: + $p := 658; + goto $bb1; +$aa659: + $p := 659; + goto $bb1; +$aa660: + $p := 660; + goto $bb1; +$aa661: + $p := 661; + goto $bb1; +$aa662: + $p := 662; + goto $bb1; +$aa663: + $p := 663; + goto $bb1; +$aa664: + $p := 664; + goto $bb1; +$aa665: + $p := 665; + goto $bb1; +$aa666: + $p := 666; + goto $bb1; +$aa667: + $p := 667; + goto $bb1; +$aa668: + $p := 668; + goto $bb1; +$aa669: + $p := 669; + goto $bb1; +$aa670: + $p := 670; + goto $bb1; +$aa671: + $p := 671; + goto $bb1; +$aa672: + $p := 672; + goto $bb1; +$aa673: + $p := 673; + goto $bb1; +$aa674: + $p := 674; + goto $bb1; +$aa675: + $p := 675; + goto $bb1; +$aa676: + $p := 676; + goto $bb1; +$aa677: + $p := 677; + goto $bb1; +$aa678: + $p := 678; + goto $bb1; +$aa679: + $p := 679; + goto $bb1; +$aa680: + $p := 680; + goto $bb1; +$aa681: + $p := 681; + goto $bb1; +$aa682: + $p := 682; + goto $bb1; +$aa683: + $p := 683; + goto $bb1; +$aa684: + $p := 684; + goto $bb1; +$aa685: + $p := 685; + goto $bb1; +$aa686: + $p := 686; + goto $bb1; +$aa687: + $p := 687; + goto $bb1; +$aa688: + $p := 688; + goto $bb1; +$aa689: + $p := 689; + goto $bb1; +$aa690: + $p := 690; + goto $bb1; +$aa691: + $p := 691; + goto $bb1; +$aa692: + $p := 692; + goto $bb1; +$aa693: + $p := 693; + goto $bb1; +$aa694: + $p := 694; + goto $bb1; +$aa695: + $p := 695; + goto $bb1; +$aa696: + $p := 696; + goto $bb1; +$aa697: + $p := 697; + goto $bb1; +$aa698: + $p := 698; + goto $bb1; +$aa699: + $p := 699; + goto $bb1; +$aa700: + $p := 700; + goto $bb1; +$aa701: + $p := 701; + goto $bb1; +$aa702: + $p := 702; + goto $bb1; +$aa703: + $p := 703; + goto $bb1; +$aa704: + $p := 704; + goto $bb1; +$aa705: + $p := 705; + goto $bb1; +$aa706: + $p := 706; + goto $bb1; +$aa707: + $p := 707; + goto $bb1; +$aa708: + $p := 708; + goto $bb1; +$aa709: + $p := 709; + goto $bb1; +$aa710: + $p := 710; + goto $bb1; +$aa711: + $p := 711; + goto $bb1; +$aa712: + $p := 712; + goto $bb1; +$aa713: + $p := 713; + goto $bb1; +$aa714: + $p := 714; + goto $bb1; +$aa715: + $p := 715; + goto $bb1; +$aa716: + $p := 716; + goto $bb1; +$aa717: + $p := 717; + goto $bb1; +$aa718: + $p := 718; + goto $bb1; +$aa719: + $p := 719; + goto $bb1; +$aa720: + $p := 720; + goto $bb1; +$aa721: + $p := 721; + goto $bb1; +$aa722: + $p := 722; + goto $bb1; +$aa723: + $p := 723; + goto $bb1; +$aa724: + $p := 724; + goto $bb1; +$aa725: + $p := 725; + goto $bb1; +$aa726: + $p := 726; + goto $bb1; +$aa727: + $p := 727; + goto $bb1; +$aa728: + $p := 728; + goto $bb1; +$aa729: + $p := 729; + goto $bb1; +$aa730: + $p := 730; + goto $bb1; +$aa731: + $p := 731; + goto $bb1; +$aa732: + $p := 732; + goto $bb1; +$aa733: + $p := 733; + goto $bb1; +$aa734: + $p := 734; + goto $bb1; +$aa735: + $p := 735; + goto $bb1; +$aa736: + $p := 736; + goto $bb1; +$aa737: + $p := 737; + goto $bb1; +$aa738: + $p := 738; + goto $bb1; +$aa739: + $p := 739; + goto $bb1; +$aa740: + $p := 740; + goto $bb1; +$aa741: + $p := 741; + goto $bb1; +$aa742: + $p := 742; + goto $bb1; +$aa743: + $p := 743; + goto $bb1; +$aa744: + $p := 744; + goto $bb1; +$aa745: + $p := 745; + goto $bb1; +$aa746: + $p := 746; + goto $bb1; +$aa747: + $p := 747; + goto $bb1; +$aa748: + $p := 748; + goto $bb1; +$aa749: + $p := 749; + goto $bb1; +$aa750: + $p := 750; + goto $bb1; +$aa751: + $p := 751; + goto $bb1; +$aa752: + $p := 752; + goto $bb1; +$aa753: + $p := 753; + goto $bb1; +$aa754: + $p := 754; + goto $bb1; +$aa755: + $p := 755; + goto $bb1; +$aa756: + $p := 756; + goto $bb1; +$aa757: + $p := 757; + goto $bb1; +$aa758: + $p := 758; + goto $bb1; +$aa759: + $p := 759; + goto $bb1; +$aa760: + $p := 760; + goto $bb1; +$aa761: + $p := 761; + goto $bb1; +$aa762: + $p := 762; + goto $bb1; +$aa763: + $p := 763; + goto $bb1; +$aa764: + $p := 764; + goto $bb1; +$aa765: + $p := 765; + goto $bb1; +$aa766: + $p := 766; + goto $bb1; +$aa767: + $p := 767; + goto $bb1; +$aa768: + $p := 768; + goto $bb1; +$aa769: + $p := 769; + goto $bb1; +$aa770: + $p := 770; + goto $bb1; +$aa771: + $p := 771; + goto $bb1; +$aa772: + $p := 772; + goto $bb1; +$aa773: + $p := 773; + goto $bb1; +$aa774: + $p := 774; + goto $bb1; +$aa775: + $p := 775; + goto $bb1; +$aa776: + $p := 776; + goto $bb1; +$aa777: + $p := 777; + goto $bb1; +$aa778: + $p := 778; + goto $bb1; +$aa779: + $p := 779; + goto $bb1; +$aa780: + $p := 780; + goto $bb1; +$aa781: + $p := 781; + goto $bb1; +$aa782: + $p := 782; + goto $bb1; +$aa783: + $p := 783; + goto $bb1; +$aa784: + $p := 784; + goto $bb1; +$aa785: + $p := 785; + goto $bb1; +$aa786: + $p := 786; + goto $bb1; +$aa787: + $p := 787; + goto $bb1; +$aa788: + $p := 788; + goto $bb1; +$aa789: + $p := 789; + goto $bb1; +$aa790: + $p := 790; + goto $bb1; +$aa791: + $p := 791; + goto $bb1; +$aa792: + $p := 792; + goto $bb1; +$aa793: + $p := 793; + goto $bb1; +$aa794: + $p := 794; + goto $bb1; +$aa795: + $p := 795; + goto $bb1; +$aa796: + $p := 796; + goto $bb1; +$aa797: + $p := 797; + goto $bb1; +$aa798: + $p := 798; + goto $bb1; +$aa799: + $p := 799; + goto $bb1; +$aa800: + $p := 800; + goto $bb1; +$aa801: + $p := 801; + goto $bb1; +$aa802: + $p := 802; + goto $bb1; +$aa803: + $p := 803; + goto $bb1; +$aa804: + $p := 804; + goto $bb1; +$aa805: + $p := 805; + goto $bb1; +$aa806: + $p := 806; + goto $bb1; +$aa807: + $p := 807; + goto $bb1; +$aa808: + $p := 808; + goto $bb1; +$aa809: + $p := 809; + goto $bb1; +$aa810: + $p := 810; + goto $bb1; +$aa811: + $p := 811; + goto $bb1; +$aa812: + $p := 812; + goto $bb1; +$aa813: + $p := 813; + goto $bb1; +$aa814: + $p := 814; + goto $bb1; +$aa815: + $p := 815; + goto $bb1; +$aa816: + $p := 816; + goto $bb1; +$aa817: + $p := 817; + goto $bb1; +$aa818: + $p := 818; + goto $bb1; +$aa819: + $p := 819; + goto $bb1; +$aa820: + $p := 820; + goto $bb1; +$aa821: + $p := 821; + goto $bb1; +$aa822: + $p := 822; + goto $bb1; +$aa823: + $p := 823; + goto $bb1; +$aa824: + $p := 824; + goto $bb1; +$aa825: + $p := 825; + goto $bb1; +$aa826: + $p := 826; + goto $bb1; +$aa827: + $p := 827; + goto $bb1; +$aa828: + $p := 828; + goto $bb1; +$aa829: + $p := 829; + goto $bb1; +$aa830: + $p := 830; + goto $bb1; +$aa831: + $p := 831; + goto $bb1; +$aa832: + $p := 832; + goto $bb1; +$aa833: + $p := 833; + goto $bb1; +$aa834: + $p := 834; + goto $bb1; +$aa835: + $p := 835; + goto $bb1; +$aa836: + $p := 836; + goto $bb1; +$aa837: + $p := 837; + goto $bb1; +$aa838: + $p := 838; + goto $bb1; +$aa839: + $p := 839; + goto $bb1; +$aa840: + $p := 840; + goto $bb1; +$aa841: + $p := 841; + goto $bb1; +$aa842: + $p := 842; + goto $bb1; +$aa843: + $p := 843; + goto $bb1; +$aa844: + $p := 844; + goto $bb1; +$aa845: + $p := 845; + goto $bb1; +$aa846: + $p := 846; + goto $bb1; +$aa847: + $p := 847; + goto $bb1; +$aa848: + $p := 848; + goto $bb1; +$aa849: + $p := 849; + goto $bb1; +$aa850: + $p := 850; + goto $bb1; +$aa851: + $p := 851; + goto $bb1; +$aa852: + $p := 852; + goto $bb1; +$aa853: + $p := 853; + goto $bb1; +$aa854: + $p := 854; + goto $bb1; +$aa855: + $p := 855; + goto $bb1; +$aa856: + $p := 856; + goto $bb1; +$aa857: + $p := 857; + goto $bb1; +$aa858: + $p := 858; + goto $bb1; +$aa859: + $p := 859; + goto $bb1; +$aa860: + $p := 860; + goto $bb1; +$aa861: + $p := 861; + goto $bb1; +$aa862: + $p := 862; + goto $bb1; +$aa863: + $p := 863; + goto $bb1; +$aa864: + $p := 864; + goto $bb1; +$aa865: + $p := 865; + goto $bb1; +$aa866: + $p := 866; + goto $bb1; +$aa867: + $p := 867; + goto $bb1; +$aa868: + $p := 868; + goto $bb1; +$aa869: + $p := 869; + goto $bb1; +$aa870: + $p := 870; + goto $bb1; +$aa871: + $p := 871; + goto $bb1; +$aa872: + $p := 872; + goto $bb1; +$aa873: + $p := 873; + goto $bb1; +$aa874: + $p := 874; + goto $bb1; +$aa875: + $p := 875; + goto $bb1; +$aa876: + $p := 876; + goto $bb1; +$aa877: + $p := 877; + goto $bb1; +$aa878: + $p := 878; + goto $bb1; +$aa879: + $p := 879; + goto $bb1; +$aa880: + $p := 880; + goto $bb1; +$aa881: + $p := 881; + goto $bb1; +$aa882: + $p := 882; + goto $bb1; +$aa883: + $p := 883; + goto $bb1; +$aa884: + $p := 884; + goto $bb1; +$aa885: + $p := 885; + goto $bb1; +$aa886: + $p := 886; + goto $bb1; +$aa887: + $p := 887; + goto $bb1; +$aa888: + $p := 888; + goto $bb1; +$aa889: + $p := 889; + goto $bb1; +$aa890: + $p := 890; + goto $bb1; +$aa891: + $p := 891; + goto $bb1; +$aa892: + $p := 892; + goto $bb1; +$aa893: + $p := 893; + goto $bb1; +$aa894: + $p := 894; + goto $bb1; +$aa895: + $p := 895; + goto $bb1; +$aa896: + $p := 896; + goto $bb1; +$aa897: + $p := 897; + goto $bb1; +$aa898: + $p := 898; + goto $bb1; +$aa899: + $p := 899; + goto $bb1; +$aa900: + $p := 900; + goto $bb1; +$aa901: + $p := 901; + goto $bb1; +$aa902: + $p := 902; + goto $bb1; +$aa903: + $p := 903; + goto $bb1; +$aa904: + $p := 904; + goto $bb1; +$aa905: + $p := 905; + goto $bb1; +$aa906: + $p := 906; + goto $bb1; +$aa907: + $p := 907; + goto $bb1; +$aa908: + $p := 908; + goto $bb1; +$aa909: + $p := 909; + goto $bb1; +$aa910: + $p := 910; + goto $bb1; +$aa911: + $p := 911; + goto $bb1; +$aa912: + $p := 912; + goto $bb1; +$aa913: + $p := 913; + goto $bb1; +$aa914: + $p := 914; + goto $bb1; +$aa915: + $p := 915; + goto $bb1; +$aa916: + $p := 916; + goto $bb1; +$aa917: + $p := 917; + goto $bb1; +$aa918: + $p := 918; + goto $bb1; +$aa919: + $p := 919; + goto $bb1; +$aa920: + $p := 920; + goto $bb1; +$aa921: + $p := 921; + goto $bb1; +$aa922: + $p := 922; + goto $bb1; +$aa923: + $p := 923; + goto $bb1; +$aa924: + $p := 924; + goto $bb1; +$aa925: + $p := 925; + goto $bb1; +$aa926: + $p := 926; + goto $bb1; +$aa927: + $p := 927; + goto $bb1; +$aa928: + $p := 928; + goto $bb1; +$aa929: + $p := 929; + goto $bb1; +$aa930: + $p := 930; + goto $bb1; +$aa931: + $p := 931; + goto $bb1; +$aa932: + $p := 932; + goto $bb1; +$aa933: + $p := 933; + goto $bb1; +$aa934: + $p := 934; + goto $bb1; +$aa935: + $p := 935; + goto $bb1; +$aa936: + $p := 936; + goto $bb1; +$aa937: + $p := 937; + goto $bb1; +$aa938: + $p := 938; + goto $bb1; +$aa939: + $p := 939; + goto $bb1; +$aa940: + $p := 940; + goto $bb1; +$aa941: + $p := 941; + goto $bb1; +$aa942: + $p := 942; + goto $bb1; +$aa943: + $p := 943; + goto $bb1; +$aa944: + $p := 944; + goto $bb1; +$aa945: + $p := 945; + goto $bb1; +$aa946: + $p := 946; + goto $bb1; +$aa947: + $p := 947; + goto $bb1; +$aa948: + $p := 948; + goto $bb1; +$aa949: + $p := 949; + goto $bb1; +$aa950: + $p := 950; + goto $bb1; +$aa951: + $p := 951; + goto $bb1; +$aa952: + $p := 952; + goto $bb1; +$aa953: + $p := 953; + goto $bb1; +$aa954: + $p := 954; + goto $bb1; +$aa955: + $p := 955; + goto $bb1; +$aa956: + $p := 956; + goto $bb1; +$aa957: + $p := 957; + goto $bb1; +$aa958: + $p := 958; + goto $bb1; +$aa959: + $p := 959; + goto $bb1; +$aa960: + $p := 960; + goto $bb1; +$aa961: + $p := 961; + goto $bb1; +$aa962: + $p := 962; + goto $bb1; +$aa963: + $p := 963; + goto $bb1; +$aa964: + $p := 964; + goto $bb1; +$aa965: + $p := 965; + goto $bb1; +$aa966: + $p := 966; + goto $bb1; +$aa967: + $p := 967; + goto $bb1; +$aa968: + $p := 968; + goto $bb1; +$aa969: + $p := 969; + goto $bb1; +$aa970: + $p := 970; + goto $bb1; +$aa971: + $p := 971; + goto $bb1; +$aa972: + $p := 972; + goto $bb1; +$aa973: + $p := 973; + goto $bb1; +$aa974: + $p := 974; + goto $bb1; +$aa975: + $p := 975; + goto $bb1; +$aa976: + $p := 976; + goto $bb1; +$aa977: + $p := 977; + goto $bb1; +$aa978: + $p := 978; + goto $bb1; +$aa979: + $p := 979; + goto $bb1; +$aa980: + $p := 980; + goto $bb1; +$aa981: + $p := 981; + goto $bb1; +$aa982: + $p := 982; + goto $bb1; +$aa983: + $p := 983; + goto $bb1; +$aa984: + $p := 984; + goto $bb1; +$aa985: + $p := 985; + goto $bb1; +$aa986: + $p := 986; + goto $bb1; +$aa987: + $p := 987; + goto $bb1; +$aa988: + $p := 988; + goto $bb1; +$aa989: + $p := 989; + goto $bb1; +$aa990: + $p := 990; + goto $bb1; +$aa991: + $p := 991; + goto $bb1; +$aa992: + $p := 992; + goto $bb1; +$aa993: + $p := 993; + goto $bb1; +$aa994: + $p := 994; + goto $bb1; +$aa995: + $p := 995; + goto $bb1; +$aa996: + $p := 996; + goto $bb1; +$aa997: + $p := 997; + goto $bb1; +$aa998: + $p := 998; + goto $bb1; +$aa999: + $p := 999; + goto $bb1; +$aa1000: + $p := 1000; + goto $bb1; +$aa1001: + $p := 1001; + goto $bb1; +$aa1002: + $p := 1002; + goto $bb1; +$aa1003: + $p := 1003; + goto $bb1; +$aa1004: + $p := 1004; + goto $bb1; +$aa1005: + $p := 1005; + goto $bb1; +$aa1006: + $p := 1006; + goto $bb1; +$aa1007: + $p := 1007; + goto $bb1; +$aa1008: + $p := 1008; + goto $bb1; +$aa1009: + $p := 1009; + goto $bb1; +$aa1010: + $p := 1010; + goto $bb1; +$aa1011: + $p := 1011; + goto $bb1; +$aa1012: + $p := 1012; + goto $bb1; +$aa1013: + $p := 1013; + goto $bb1; +$aa1014: + $p := 1014; + goto $bb1; +$aa1015: + $p := 1015; + goto $bb1; +$aa1016: + $p := 1016; + goto $bb1; +$aa1017: + $p := 1017; + goto $bb1; +$aa1018: + $p := 1018; + goto $bb1; +$aa1019: + $p := 1019; + goto $bb1; +$aa1020: + $p := 1020; + goto $bb1; +$aa1021: + $p := 1021; + goto $bb1; +$aa1022: + $p := 1022; + goto $bb1; +$aa1023: + $p := 1023; + goto $bb1; +$aa1024: + $p := 1024; + goto $bb1; +$bb1: + assert b0($p); + //$b := $sge($p, $p1); + goto $bb2, $bb3; +$bb2: + $p6 := $add(1, $p); + $p := $p6; + goto $bb1; +$bb3: + $c1 := ($p > 0); + assert $c1; + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; diff --git a/bench_horn_ice/samples_shrink_big_numbers_2048.bpl b/bench_horn_ice/samples_shrink_big_numbers_2048.bpl new file mode 100644 index 000000000..6cbd3571e --- /dev/null +++ b/bench_horn_ice/samples_shrink_big_numbers_2048.bpl @@ -0,0 +1,6329 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $p: int; + var $b: bool; + var $b2: bool; + var $c1: bool; + var $c2: bool; + var $p3: int; + var $p4: int; + var $p5: int; + var $p6: int; + var $v1: int; + var $v2: int; + +$bb0: + goto $aa1, $aa2, $aa3, $aa4, $aa5, $aa6, $aa7, $aa8, $aa9, $aa10, $aa11, $aa12, $aa13, $aa14, $aa15, $aa16, $aa17, $aa18, $aa19, $aa20, $aa21, $aa22, $aa23, $aa24, $aa25, $aa26, $aa27, $aa28, $aa29, $aa30, $aa31, $aa32, $aa33, $aa34, $aa35, $aa36, $aa37, $aa38, $aa39, $aa40, $aa41, $aa42, $aa43, $aa44, $aa45, $aa46, $aa47, $aa48, $aa49, $aa50, $aa51, $aa52, $aa53, $aa54, $aa55, $aa56, $aa57, $aa58, $aa59, $aa60, $aa61, $aa62, $aa63, $aa64, $aa65, $aa66, $aa67, $aa68, $aa69, $aa70, $aa71, $aa72, $aa73, $aa74, $aa75, $aa76, $aa77, $aa78, $aa79, $aa80, $aa81, $aa82, $aa83, $aa84, $aa85, $aa86, $aa87, $aa88, $aa89, $aa90, $aa91, $aa92, $aa93, $aa94, $aa95, $aa96, $aa97, $aa98, $aa99, $aa100, $aa101, $aa102, $aa103, $aa104, $aa105, $aa106, $aa107, $aa108, $aa109, $aa110, $aa111, $aa112, $aa113, $aa114, $aa115, $aa116, $aa117, $aa118, $aa119, $aa120, $aa121, $aa122, $aa123, $aa124, $aa125, $aa126, $aa127, $aa128, $aa129, $aa130, $aa131, $aa132, $aa133, $aa134, $aa135, $aa136, $aa137, $aa138, $aa139, $aa140, $aa141, $aa142, $aa143, $aa144, $aa145, $aa146, $aa147, $aa148, $aa149, $aa150, $aa151, $aa152, $aa153, $aa154, $aa155, $aa156, $aa157, $aa158, $aa159, $aa160, $aa161, $aa162, $aa163, $aa164, $aa165, $aa166, $aa167, $aa168, $aa169, $aa170, $aa171, $aa172, $aa173, $aa174, $aa175, $aa176, $aa177, $aa178, $aa179, $aa180, $aa181, $aa182, $aa183, $aa184, $aa185, $aa186, $aa187, $aa188, $aa189, $aa190, $aa191, $aa192, $aa193, $aa194, $aa195, $aa196, $aa197, $aa198, $aa199, $aa200, $aa201, $aa202, $aa203, $aa204, $aa205, $aa206, $aa207, $aa208, $aa209, $aa210, $aa211, $aa212, $aa213, $aa214, $aa215, $aa216, $aa217, $aa218, $aa219, $aa220, $aa221, $aa222, $aa223, $aa224, $aa225, $aa226, $aa227, $aa228, $aa229, $aa230, $aa231, $aa232, $aa233, $aa234, $aa235, $aa236, $aa237, $aa238, $aa239, $aa240, $aa241, $aa242, $aa243, $aa244, $aa245, $aa246, $aa247, $aa248, $aa249, $aa250, $aa251, $aa252, $aa253, $aa254, $aa255, $aa256, $aa257, $aa258, $aa259, $aa260, $aa261, $aa262, $aa263, $aa264, $aa265, $aa266, $aa267, $aa268, $aa269, $aa270, $aa271, $aa272, $aa273, $aa274, $aa275, $aa276, $aa277, $aa278, $aa279, $aa280, $aa281, $aa282, $aa283, $aa284, $aa285, $aa286, $aa287, $aa288, $aa289, $aa290, $aa291, $aa292, $aa293, $aa294, $aa295, $aa296, $aa297, $aa298, $aa299, $aa300, $aa301, $aa302, $aa303, $aa304, $aa305, $aa306, $aa307, $aa308, $aa309, $aa310, $aa311, $aa312, $aa313, $aa314, $aa315, $aa316, $aa317, $aa318, $aa319, $aa320, $aa321, $aa322, $aa323, $aa324, $aa325, $aa326, $aa327, $aa328, $aa329, $aa330, $aa331, $aa332, $aa333, $aa334, $aa335, $aa336, $aa337, $aa338, $aa339, $aa340, $aa341, $aa342, $aa343, $aa344, $aa345, $aa346, $aa347, $aa348, $aa349, $aa350, $aa351, $aa352, $aa353, $aa354, $aa355, $aa356, $aa357, $aa358, $aa359, $aa360, $aa361, $aa362, $aa363, $aa364, $aa365, $aa366, $aa367, $aa368, $aa369, $aa370, $aa371, $aa372, $aa373, $aa374, $aa375, $aa376, $aa377, $aa378, $aa379, $aa380, $aa381, $aa382, $aa383, $aa384, $aa385, $aa386, $aa387, $aa388, $aa389, $aa390, $aa391, $aa392, $aa393, $aa394, $aa395, $aa396, $aa397, $aa398, $aa399, $aa400, $aa401, $aa402, $aa403, $aa404, $aa405, $aa406, $aa407, $aa408, $aa409, $aa410, $aa411, $aa412, $aa413, $aa414, $aa415, $aa416, $aa417, $aa418, $aa419, $aa420, $aa421, $aa422, $aa423, $aa424, $aa425, $aa426, $aa427, $aa428, $aa429, $aa430, $aa431, $aa432, $aa433, $aa434, $aa435, $aa436, $aa437, $aa438, $aa439, $aa440, $aa441, $aa442, $aa443, $aa444, $aa445, $aa446, $aa447, $aa448, $aa449, $aa450, $aa451, $aa452, $aa453, $aa454, $aa455, $aa456, $aa457, $aa458, $aa459, $aa460, $aa461, $aa462, $aa463, $aa464, $aa465, $aa466, $aa467, $aa468, $aa469, $aa470, $aa471, $aa472, $aa473, $aa474, $aa475, $aa476, $aa477, $aa478, $aa479, $aa480, $aa481, $aa482, $aa483, $aa484, $aa485, $aa486, $aa487, $aa488, $aa489, $aa490, $aa491, $aa492, $aa493, $aa494, $aa495, $aa496, $aa497, $aa498, $aa499, $aa500, $aa501, $aa502, $aa503, $aa504, $aa505, $aa506, $aa507, $aa508, $aa509, $aa510, $aa511, $aa512, $aa513, $aa514, $aa515, $aa516, $aa517, $aa518, $aa519, $aa520, $aa521, $aa522, $aa523, $aa524, $aa525, $aa526, $aa527, $aa528, $aa529, $aa530, $aa531, $aa532, $aa533, $aa534, $aa535, $aa536, $aa537, $aa538, $aa539, $aa540, $aa541, $aa542, $aa543, $aa544, $aa545, $aa546, $aa547, $aa548, $aa549, $aa550, $aa551, $aa552, $aa553, $aa554, $aa555, $aa556, $aa557, $aa558, $aa559, $aa560, $aa561, $aa562, $aa563, $aa564, $aa565, $aa566, $aa567, $aa568, $aa569, $aa570, $aa571, $aa572, $aa573, $aa574, $aa575, $aa576, $aa577, $aa578, $aa579, $aa580, $aa581, $aa582, $aa583, $aa584, $aa585, $aa586, $aa587, $aa588, $aa589, $aa590, $aa591, $aa592, $aa593, $aa594, $aa595, $aa596, $aa597, $aa598, $aa599, $aa600, $aa601, $aa602, $aa603, $aa604, $aa605, $aa606, $aa607, $aa608, $aa609, $aa610, $aa611, $aa612, $aa613, $aa614, $aa615, $aa616, $aa617, $aa618, $aa619, $aa620, $aa621, $aa622, $aa623, $aa624, $aa625, $aa626, $aa627, $aa628, $aa629, $aa630, $aa631, $aa632, $aa633, $aa634, $aa635, $aa636, $aa637, $aa638, $aa639, $aa640, $aa641, $aa642, $aa643, $aa644, $aa645, $aa646, $aa647, $aa648, $aa649, $aa650, $aa651, $aa652, $aa653, $aa654, $aa655, $aa656, $aa657, $aa658, $aa659, $aa660, $aa661, $aa662, $aa663, $aa664, $aa665, $aa666, $aa667, $aa668, $aa669, $aa670, $aa671, $aa672, $aa673, $aa674, $aa675, $aa676, $aa677, $aa678, $aa679, $aa680, $aa681, $aa682, $aa683, $aa684, $aa685, $aa686, $aa687, $aa688, $aa689, $aa690, $aa691, $aa692, $aa693, $aa694, $aa695, $aa696, $aa697, $aa698, $aa699, $aa700, $aa701, $aa702, $aa703, $aa704, $aa705, $aa706, $aa707, $aa708, $aa709, $aa710, $aa711, $aa712, $aa713, $aa714, $aa715, $aa716, $aa717, $aa718, $aa719, $aa720, $aa721, $aa722, $aa723, $aa724, $aa725, $aa726, $aa727, $aa728, $aa729, $aa730, $aa731, $aa732, $aa733, $aa734, $aa735, $aa736, $aa737, $aa738, $aa739, $aa740, $aa741, $aa742, $aa743, $aa744, $aa745, $aa746, $aa747, $aa748, $aa749, $aa750, $aa751, $aa752, $aa753, $aa754, $aa755, $aa756, $aa757, $aa758, $aa759, $aa760, $aa761, $aa762, $aa763, $aa764, $aa765, $aa766, $aa767, $aa768, $aa769, $aa770, $aa771, $aa772, $aa773, $aa774, $aa775, $aa776, $aa777, $aa778, $aa779, $aa780, $aa781, $aa782, $aa783, $aa784, $aa785, $aa786, $aa787, $aa788, $aa789, $aa790, $aa791, $aa792, $aa793, $aa794, $aa795, $aa796, $aa797, $aa798, $aa799, $aa800, $aa801, $aa802, $aa803, $aa804, $aa805, $aa806, $aa807, $aa808, $aa809, $aa810, $aa811, $aa812, $aa813, $aa814, $aa815, $aa816, $aa817, $aa818, $aa819, $aa820, $aa821, $aa822, $aa823, $aa824, $aa825, $aa826, $aa827, $aa828, $aa829, $aa830, $aa831, $aa832, $aa833, $aa834, $aa835, $aa836, $aa837, $aa838, $aa839, $aa840, $aa841, $aa842, $aa843, $aa844, $aa845, $aa846, $aa847, $aa848, $aa849, $aa850, $aa851, $aa852, $aa853, $aa854, $aa855, $aa856, $aa857, $aa858, $aa859, $aa860, $aa861, $aa862, $aa863, $aa864, $aa865, $aa866, $aa867, $aa868, $aa869, $aa870, $aa871, $aa872, $aa873, $aa874, $aa875, $aa876, $aa877, $aa878, $aa879, $aa880, $aa881, $aa882, $aa883, $aa884, $aa885, $aa886, $aa887, $aa888, $aa889, $aa890, $aa891, $aa892, $aa893, $aa894, $aa895, $aa896, $aa897, $aa898, $aa899, $aa900, $aa901, $aa902, $aa903, $aa904, $aa905, $aa906, $aa907, $aa908, $aa909, $aa910, $aa911, $aa912, $aa913, $aa914, $aa915, $aa916, $aa917, $aa918, $aa919, $aa920, $aa921, $aa922, $aa923, $aa924, $aa925, $aa926, $aa927, $aa928, $aa929, $aa930, $aa931, $aa932, $aa933, $aa934, $aa935, $aa936, $aa937, $aa938, $aa939, $aa940, $aa941, $aa942, $aa943, $aa944, $aa945, $aa946, $aa947, $aa948, $aa949, $aa950, $aa951, $aa952, $aa953, $aa954, $aa955, $aa956, $aa957, $aa958, $aa959, $aa960, $aa961, $aa962, $aa963, $aa964, $aa965, $aa966, $aa967, $aa968, $aa969, $aa970, $aa971, $aa972, $aa973, $aa974, $aa975, $aa976, $aa977, $aa978, $aa979, $aa980, $aa981, $aa982, $aa983, $aa984, $aa985, $aa986, $aa987, $aa988, $aa989, $aa990, $aa991, $aa992, $aa993, $aa994, $aa995, $aa996, $aa997, $aa998, $aa999, $aa1000, $aa1001, $aa1002, $aa1003, $aa1004, $aa1005, $aa1006, $aa1007, $aa1008, $aa1009, $aa1010, $aa1011, $aa1012, $aa1013, $aa1014, $aa1015, $aa1016, $aa1017, $aa1018, $aa1019, $aa1020, $aa1021, $aa1022, $aa1023, $aa1024, $aa1025, $aa1026, $aa1027, $aa1028, $aa1029, $aa1030, $aa1031, $aa1032, $aa1033, $aa1034, $aa1035, $aa1036, $aa1037, $aa1038, $aa1039, $aa1040, $aa1041, $aa1042, $aa1043, $aa1044, $aa1045, $aa1046, $aa1047, $aa1048, $aa1049, $aa1050, $aa1051, $aa1052, $aa1053, $aa1054, $aa1055, $aa1056, $aa1057, $aa1058, $aa1059, $aa1060, $aa1061, $aa1062, $aa1063, $aa1064, $aa1065, $aa1066, $aa1067, $aa1068, $aa1069, $aa1070, $aa1071, $aa1072, $aa1073, $aa1074, $aa1075, $aa1076, $aa1077, $aa1078, $aa1079, $aa1080, $aa1081, $aa1082, $aa1083, $aa1084, $aa1085, $aa1086, $aa1087, $aa1088, $aa1089, $aa1090, $aa1091, $aa1092, $aa1093, $aa1094, $aa1095, $aa1096, $aa1097, $aa1098, $aa1099, $aa1100, $aa1101, $aa1102, $aa1103, $aa1104, $aa1105, $aa1106, $aa1107, $aa1108, $aa1109, $aa1110, $aa1111, $aa1112, $aa1113, $aa1114, $aa1115, $aa1116, $aa1117, $aa1118, $aa1119, $aa1120, $aa1121, $aa1122, $aa1123, $aa1124, $aa1125, $aa1126, $aa1127, $aa1128, $aa1129, $aa1130, $aa1131, $aa1132, $aa1133, $aa1134, $aa1135, $aa1136, $aa1137, $aa1138, $aa1139, $aa1140, $aa1141, $aa1142, $aa1143, $aa1144, $aa1145, $aa1146, $aa1147, $aa1148, $aa1149, $aa1150, $aa1151, $aa1152, $aa1153, $aa1154, $aa1155, $aa1156, $aa1157, $aa1158, $aa1159, $aa1160, $aa1161, $aa1162, $aa1163, $aa1164, $aa1165, $aa1166, $aa1167, $aa1168, $aa1169, $aa1170, $aa1171, $aa1172, $aa1173, $aa1174, $aa1175, $aa1176, $aa1177, $aa1178, $aa1179, $aa1180, $aa1181, $aa1182, $aa1183, $aa1184, $aa1185, $aa1186, $aa1187, $aa1188, $aa1189, $aa1190, $aa1191, $aa1192, $aa1193, $aa1194, $aa1195, $aa1196, $aa1197, $aa1198, $aa1199, $aa1200, $aa1201, $aa1202, $aa1203, $aa1204, $aa1205, $aa1206, $aa1207, $aa1208, $aa1209, $aa1210, $aa1211, $aa1212, $aa1213, $aa1214, $aa1215, $aa1216, $aa1217, $aa1218, $aa1219, $aa1220, $aa1221, $aa1222, $aa1223, $aa1224, $aa1225, $aa1226, $aa1227, $aa1228, $aa1229, $aa1230, $aa1231, $aa1232, $aa1233, $aa1234, $aa1235, $aa1236, $aa1237, $aa1238, $aa1239, $aa1240, $aa1241, $aa1242, $aa1243, $aa1244, $aa1245, $aa1246, $aa1247, $aa1248, $aa1249, $aa1250, $aa1251, $aa1252, $aa1253, $aa1254, $aa1255, $aa1256, $aa1257, $aa1258, $aa1259, $aa1260, $aa1261, $aa1262, $aa1263, $aa1264, $aa1265, $aa1266, $aa1267, $aa1268, $aa1269, $aa1270, $aa1271, $aa1272, $aa1273, $aa1274, $aa1275, $aa1276, $aa1277, $aa1278, $aa1279, $aa1280, $aa1281, $aa1282, $aa1283, $aa1284, $aa1285, $aa1286, $aa1287, $aa1288, $aa1289, $aa1290, $aa1291, $aa1292, $aa1293, $aa1294, $aa1295, $aa1296, $aa1297, $aa1298, $aa1299, $aa1300, $aa1301, $aa1302, $aa1303, $aa1304, $aa1305, $aa1306, $aa1307, $aa1308, $aa1309, $aa1310, $aa1311, $aa1312, $aa1313, $aa1314, $aa1315, $aa1316, $aa1317, $aa1318, $aa1319, $aa1320, $aa1321, $aa1322, $aa1323, $aa1324, $aa1325, $aa1326, $aa1327, $aa1328, $aa1329, $aa1330, $aa1331, $aa1332, $aa1333, $aa1334, $aa1335, $aa1336, $aa1337, $aa1338, $aa1339, $aa1340, $aa1341, $aa1342, $aa1343, $aa1344, $aa1345, $aa1346, $aa1347, $aa1348, $aa1349, $aa1350, $aa1351, $aa1352, $aa1353, $aa1354, $aa1355, $aa1356, $aa1357, $aa1358, $aa1359, $aa1360, $aa1361, $aa1362, $aa1363, $aa1364, $aa1365, $aa1366, $aa1367, $aa1368, $aa1369, $aa1370, $aa1371, $aa1372, $aa1373, $aa1374, $aa1375, $aa1376, $aa1377, $aa1378, $aa1379, $aa1380, $aa1381, $aa1382, $aa1383, $aa1384, $aa1385, $aa1386, $aa1387, $aa1388, $aa1389, $aa1390, $aa1391, $aa1392, $aa1393, $aa1394, $aa1395, $aa1396, $aa1397, $aa1398, $aa1399, $aa1400, $aa1401, $aa1402, $aa1403, $aa1404, $aa1405, $aa1406, $aa1407, $aa1408, $aa1409, $aa1410, $aa1411, $aa1412, $aa1413, $aa1414, $aa1415, $aa1416, $aa1417, $aa1418, $aa1419, $aa1420, $aa1421, $aa1422, $aa1423, $aa1424, $aa1425, $aa1426, $aa1427, $aa1428, $aa1429, $aa1430, $aa1431, $aa1432, $aa1433, $aa1434, $aa1435, $aa1436, $aa1437, $aa1438, $aa1439, $aa1440, $aa1441, $aa1442, $aa1443, $aa1444, $aa1445, $aa1446, $aa1447, $aa1448, $aa1449, $aa1450, $aa1451, $aa1452, $aa1453, $aa1454, $aa1455, $aa1456, $aa1457, $aa1458, $aa1459, $aa1460, $aa1461, $aa1462, $aa1463, $aa1464, $aa1465, $aa1466, $aa1467, $aa1468, $aa1469, $aa1470, $aa1471, $aa1472, $aa1473, $aa1474, $aa1475, $aa1476, $aa1477, $aa1478, $aa1479, $aa1480, $aa1481, $aa1482, $aa1483, $aa1484, $aa1485, $aa1486, $aa1487, $aa1488, $aa1489, $aa1490, $aa1491, $aa1492, $aa1493, $aa1494, $aa1495, $aa1496, $aa1497, $aa1498, $aa1499, $aa1500, $aa1501, $aa1502, $aa1503, $aa1504, $aa1505, $aa1506, $aa1507, $aa1508, $aa1509, $aa1510, $aa1511, $aa1512, $aa1513, $aa1514, $aa1515, $aa1516, $aa1517, $aa1518, $aa1519, $aa1520, $aa1521, $aa1522, $aa1523, $aa1524, $aa1525, $aa1526, $aa1527, $aa1528, $aa1529, $aa1530, $aa1531, $aa1532, $aa1533, $aa1534, $aa1535, $aa1536, $aa1537, $aa1538, $aa1539, $aa1540, $aa1541, $aa1542, $aa1543, $aa1544, $aa1545, $aa1546, $aa1547, $aa1548, $aa1549, $aa1550, $aa1551, $aa1552, $aa1553, $aa1554, $aa1555, $aa1556, $aa1557, $aa1558, $aa1559, $aa1560, $aa1561, $aa1562, $aa1563, $aa1564, $aa1565, $aa1566, $aa1567, $aa1568, $aa1569, $aa1570, $aa1571, $aa1572, $aa1573, $aa1574, $aa1575, $aa1576, $aa1577, $aa1578, $aa1579, $aa1580, $aa1581, $aa1582, $aa1583, $aa1584, $aa1585, $aa1586, $aa1587, $aa1588, $aa1589, $aa1590, $aa1591, $aa1592, $aa1593, $aa1594, $aa1595, $aa1596, $aa1597, $aa1598, $aa1599, $aa1600, $aa1601, $aa1602, $aa1603, $aa1604, $aa1605, $aa1606, $aa1607, $aa1608, $aa1609, $aa1610, $aa1611, $aa1612, $aa1613, $aa1614, $aa1615, $aa1616, $aa1617, $aa1618, $aa1619, $aa1620, $aa1621, $aa1622, $aa1623, $aa1624, $aa1625, $aa1626, $aa1627, $aa1628, $aa1629, $aa1630, $aa1631, $aa1632, $aa1633, $aa1634, $aa1635, $aa1636, $aa1637, $aa1638, $aa1639, $aa1640, $aa1641, $aa1642, $aa1643, $aa1644, $aa1645, $aa1646, $aa1647, $aa1648, $aa1649, $aa1650, $aa1651, $aa1652, $aa1653, $aa1654, $aa1655, $aa1656, $aa1657, $aa1658, $aa1659, $aa1660, $aa1661, $aa1662, $aa1663, $aa1664, $aa1665, $aa1666, $aa1667, $aa1668, $aa1669, $aa1670, $aa1671, $aa1672, $aa1673, $aa1674, $aa1675, $aa1676, $aa1677, $aa1678, $aa1679, $aa1680, $aa1681, $aa1682, $aa1683, $aa1684, $aa1685, $aa1686, $aa1687, $aa1688, $aa1689, $aa1690, $aa1691, $aa1692, $aa1693, $aa1694, $aa1695, $aa1696, $aa1697, $aa1698, $aa1699, $aa1700, $aa1701, $aa1702, $aa1703, $aa1704, $aa1705, $aa1706, $aa1707, $aa1708, $aa1709, $aa1710, $aa1711, $aa1712, $aa1713, $aa1714, $aa1715, $aa1716, $aa1717, $aa1718, $aa1719, $aa1720, $aa1721, $aa1722, $aa1723, $aa1724, $aa1725, $aa1726, $aa1727, $aa1728, $aa1729, $aa1730, $aa1731, $aa1732, $aa1733, $aa1734, $aa1735, $aa1736, $aa1737, $aa1738, $aa1739, $aa1740, $aa1741, $aa1742, $aa1743, $aa1744, $aa1745, $aa1746, $aa1747, $aa1748, $aa1749, $aa1750, $aa1751, $aa1752, $aa1753, $aa1754, $aa1755, $aa1756, $aa1757, $aa1758, $aa1759, $aa1760, $aa1761, $aa1762, $aa1763, $aa1764, $aa1765, $aa1766, $aa1767, $aa1768, $aa1769, $aa1770, $aa1771, $aa1772, $aa1773, $aa1774, $aa1775, $aa1776, $aa1777, $aa1778, $aa1779, $aa1780, $aa1781, $aa1782, $aa1783, $aa1784, $aa1785, $aa1786, $aa1787, $aa1788, $aa1789, $aa1790, $aa1791, $aa1792, $aa1793, $aa1794, $aa1795, $aa1796, $aa1797, $aa1798, $aa1799, $aa1800, $aa1801, $aa1802, $aa1803, $aa1804, $aa1805, $aa1806, $aa1807, $aa1808, $aa1809, $aa1810, $aa1811, $aa1812, $aa1813, $aa1814, $aa1815, $aa1816, $aa1817, $aa1818, $aa1819, $aa1820, $aa1821, $aa1822, $aa1823, $aa1824, $aa1825, $aa1826, $aa1827, $aa1828, $aa1829, $aa1830, $aa1831, $aa1832, $aa1833, $aa1834, $aa1835, $aa1836, $aa1837, $aa1838, $aa1839, $aa1840, $aa1841, $aa1842, $aa1843, $aa1844, $aa1845, $aa1846, $aa1847, $aa1848, $aa1849, $aa1850, $aa1851, $aa1852, $aa1853, $aa1854, $aa1855, $aa1856, $aa1857, $aa1858, $aa1859, $aa1860, $aa1861, $aa1862, $aa1863, $aa1864, $aa1865, $aa1866, $aa1867, $aa1868, $aa1869, $aa1870, $aa1871, $aa1872, $aa1873, $aa1874, $aa1875, $aa1876, $aa1877, $aa1878, $aa1879, $aa1880, $aa1881, $aa1882, $aa1883, $aa1884, $aa1885, $aa1886, $aa1887, $aa1888, $aa1889, $aa1890, $aa1891, $aa1892, $aa1893, $aa1894, $aa1895, $aa1896, $aa1897, $aa1898, $aa1899, $aa1900, $aa1901, $aa1902, $aa1903, $aa1904, $aa1905, $aa1906, $aa1907, $aa1908, $aa1909, $aa1910, $aa1911, $aa1912, $aa1913, $aa1914, $aa1915, $aa1916, $aa1917, $aa1918, $aa1919, $aa1920, $aa1921, $aa1922, $aa1923, $aa1924, $aa1925, $aa1926, $aa1927, $aa1928, $aa1929, $aa1930, $aa1931, $aa1932, $aa1933, $aa1934, $aa1935, $aa1936, $aa1937, $aa1938, $aa1939, $aa1940, $aa1941, $aa1942, $aa1943, $aa1944, $aa1945, $aa1946, $aa1947, $aa1948, $aa1949, $aa1950, $aa1951, $aa1952, $aa1953, $aa1954, $aa1955, $aa1956, $aa1957, $aa1958, $aa1959, $aa1960, $aa1961, $aa1962, $aa1963, $aa1964, $aa1965, $aa1966, $aa1967, $aa1968, $aa1969, $aa1970, $aa1971, $aa1972, $aa1973, $aa1974, $aa1975, $aa1976, $aa1977, $aa1978, $aa1979, $aa1980, $aa1981, $aa1982, $aa1983, $aa1984, $aa1985, $aa1986, $aa1987, $aa1988, $aa1989, $aa1990, $aa1991, $aa1992, $aa1993, $aa1994, $aa1995, $aa1996, $aa1997, $aa1998, $aa1999, $aa2000, $aa2001, $aa2002, $aa2003, $aa2004, $aa2005, $aa2006, $aa2007, $aa2008, $aa2009, $aa2010, $aa2011, $aa2012, $aa2013, $aa2014, $aa2015, $aa2016, $aa2017, $aa2018, $aa2019, $aa2020, $aa2021, $aa2022, $aa2023, $aa2024, $aa2025, $aa2026, $aa2027, $aa2028, $aa2029, $aa2030, $aa2031, $aa2032, $aa2033, $aa2034, $aa2035, $aa2036, $aa2037, $aa2038, $aa2039, $aa2040, $aa2041, $aa2042, $aa2043, $aa2044, $aa2045, $aa2046, $aa2047, $aa2048; +$aa1: + $p := 1; + goto $bb1; +$aa2: + $p := 2; + goto $bb1; +$aa3: + $p := 3; + goto $bb1; +$aa4: + $p := 4; + goto $bb1; +$aa5: + $p := 5; + goto $bb1; +$aa6: + $p := 6; + goto $bb1; +$aa7: + $p := 7; + goto $bb1; +$aa8: + $p := 8; + goto $bb1; +$aa9: + $p := 9; + goto $bb1; +$aa10: + $p := 10; + goto $bb1; +$aa11: + $p := 11; + goto $bb1; +$aa12: + $p := 12; + goto $bb1; +$aa13: + $p := 13; + goto $bb1; +$aa14: + $p := 14; + goto $bb1; +$aa15: + $p := 15; + goto $bb1; +$aa16: + $p := 16; + goto $bb1; +$aa17: + $p := 17; + goto $bb1; +$aa18: + $p := 18; + goto $bb1; +$aa19: + $p := 19; + goto $bb1; +$aa20: + $p := 20; + goto $bb1; +$aa21: + $p := 21; + goto $bb1; +$aa22: + $p := 22; + goto $bb1; +$aa23: + $p := 23; + goto $bb1; +$aa24: + $p := 24; + goto $bb1; +$aa25: + $p := 25; + goto $bb1; +$aa26: + $p := 26; + goto $bb1; +$aa27: + $p := 27; + goto $bb1; +$aa28: + $p := 28; + goto $bb1; +$aa29: + $p := 29; + goto $bb1; +$aa30: + $p := 30; + goto $bb1; +$aa31: + $p := 31; + goto $bb1; +$aa32: + $p := 32; + goto $bb1; +$aa33: + $p := 33; + goto $bb1; +$aa34: + $p := 34; + goto $bb1; +$aa35: + $p := 35; + goto $bb1; +$aa36: + $p := 36; + goto $bb1; +$aa37: + $p := 37; + goto $bb1; +$aa38: + $p := 38; + goto $bb1; +$aa39: + $p := 39; + goto $bb1; +$aa40: + $p := 40; + goto $bb1; +$aa41: + $p := 41; + goto $bb1; +$aa42: + $p := 42; + goto $bb1; +$aa43: + $p := 43; + goto $bb1; +$aa44: + $p := 44; + goto $bb1; +$aa45: + $p := 45; + goto $bb1; +$aa46: + $p := 46; + goto $bb1; +$aa47: + $p := 47; + goto $bb1; +$aa48: + $p := 48; + goto $bb1; +$aa49: + $p := 49; + goto $bb1; +$aa50: + $p := 50; + goto $bb1; +$aa51: + $p := 51; + goto $bb1; +$aa52: + $p := 52; + goto $bb1; +$aa53: + $p := 53; + goto $bb1; +$aa54: + $p := 54; + goto $bb1; +$aa55: + $p := 55; + goto $bb1; +$aa56: + $p := 56; + goto $bb1; +$aa57: + $p := 57; + goto $bb1; +$aa58: + $p := 58; + goto $bb1; +$aa59: + $p := 59; + goto $bb1; +$aa60: + $p := 60; + goto $bb1; +$aa61: + $p := 61; + goto $bb1; +$aa62: + $p := 62; + goto $bb1; +$aa63: + $p := 63; + goto $bb1; +$aa64: + $p := 64; + goto $bb1; +$aa65: + $p := 65; + goto $bb1; +$aa66: + $p := 66; + goto $bb1; +$aa67: + $p := 67; + goto $bb1; +$aa68: + $p := 68; + goto $bb1; +$aa69: + $p := 69; + goto $bb1; +$aa70: + $p := 70; + goto $bb1; +$aa71: + $p := 71; + goto $bb1; +$aa72: + $p := 72; + goto $bb1; +$aa73: + $p := 73; + goto $bb1; +$aa74: + $p := 74; + goto $bb1; +$aa75: + $p := 75; + goto $bb1; +$aa76: + $p := 76; + goto $bb1; +$aa77: + $p := 77; + goto $bb1; +$aa78: + $p := 78; + goto $bb1; +$aa79: + $p := 79; + goto $bb1; +$aa80: + $p := 80; + goto $bb1; +$aa81: + $p := 81; + goto $bb1; +$aa82: + $p := 82; + goto $bb1; +$aa83: + $p := 83; + goto $bb1; +$aa84: + $p := 84; + goto $bb1; +$aa85: + $p := 85; + goto $bb1; +$aa86: + $p := 86; + goto $bb1; +$aa87: + $p := 87; + goto $bb1; +$aa88: + $p := 88; + goto $bb1; +$aa89: + $p := 89; + goto $bb1; +$aa90: + $p := 90; + goto $bb1; +$aa91: + $p := 91; + goto $bb1; +$aa92: + $p := 92; + goto $bb1; +$aa93: + $p := 93; + goto $bb1; +$aa94: + $p := 94; + goto $bb1; +$aa95: + $p := 95; + goto $bb1; +$aa96: + $p := 96; + goto $bb1; +$aa97: + $p := 97; + goto $bb1; +$aa98: + $p := 98; + goto $bb1; +$aa99: + $p := 99; + goto $bb1; +$aa100: + $p := 100; + goto $bb1; +$aa101: + $p := 101; + goto $bb1; +$aa102: + $p := 102; + goto $bb1; +$aa103: + $p := 103; + goto $bb1; +$aa104: + $p := 104; + goto $bb1; +$aa105: + $p := 105; + goto $bb1; +$aa106: + $p := 106; + goto $bb1; +$aa107: + $p := 107; + goto $bb1; +$aa108: + $p := 108; + goto $bb1; +$aa109: + $p := 109; + goto $bb1; +$aa110: + $p := 110; + goto $bb1; +$aa111: + $p := 111; + goto $bb1; +$aa112: + $p := 112; + goto $bb1; +$aa113: + $p := 113; + goto $bb1; +$aa114: + $p := 114; + goto $bb1; +$aa115: + $p := 115; + goto $bb1; +$aa116: + $p := 116; + goto $bb1; +$aa117: + $p := 117; + goto $bb1; +$aa118: + $p := 118; + goto $bb1; +$aa119: + $p := 119; + goto $bb1; +$aa120: + $p := 120; + goto $bb1; +$aa121: + $p := 121; + goto $bb1; +$aa122: + $p := 122; + goto $bb1; +$aa123: + $p := 123; + goto $bb1; +$aa124: + $p := 124; + goto $bb1; +$aa125: + $p := 125; + goto $bb1; +$aa126: + $p := 126; + goto $bb1; +$aa127: + $p := 127; + goto $bb1; +$aa128: + $p := 128; + goto $bb1; +$aa129: + $p := 129; + goto $bb1; +$aa130: + $p := 130; + goto $bb1; +$aa131: + $p := 131; + goto $bb1; +$aa132: + $p := 132; + goto $bb1; +$aa133: + $p := 133; + goto $bb1; +$aa134: + $p := 134; + goto $bb1; +$aa135: + $p := 135; + goto $bb1; +$aa136: + $p := 136; + goto $bb1; +$aa137: + $p := 137; + goto $bb1; +$aa138: + $p := 138; + goto $bb1; +$aa139: + $p := 139; + goto $bb1; +$aa140: + $p := 140; + goto $bb1; +$aa141: + $p := 141; + goto $bb1; +$aa142: + $p := 142; + goto $bb1; +$aa143: + $p := 143; + goto $bb1; +$aa144: + $p := 144; + goto $bb1; +$aa145: + $p := 145; + goto $bb1; +$aa146: + $p := 146; + goto $bb1; +$aa147: + $p := 147; + goto $bb1; +$aa148: + $p := 148; + goto $bb1; +$aa149: + $p := 149; + goto $bb1; +$aa150: + $p := 150; + goto $bb1; +$aa151: + $p := 151; + goto $bb1; +$aa152: + $p := 152; + goto $bb1; +$aa153: + $p := 153; + goto $bb1; +$aa154: + $p := 154; + goto $bb1; +$aa155: + $p := 155; + goto $bb1; +$aa156: + $p := 156; + goto $bb1; +$aa157: + $p := 157; + goto $bb1; +$aa158: + $p := 158; + goto $bb1; +$aa159: + $p := 159; + goto $bb1; +$aa160: + $p := 160; + goto $bb1; +$aa161: + $p := 161; + goto $bb1; +$aa162: + $p := 162; + goto $bb1; +$aa163: + $p := 163; + goto $bb1; +$aa164: + $p := 164; + goto $bb1; +$aa165: + $p := 165; + goto $bb1; +$aa166: + $p := 166; + goto $bb1; +$aa167: + $p := 167; + goto $bb1; +$aa168: + $p := 168; + goto $bb1; +$aa169: + $p := 169; + goto $bb1; +$aa170: + $p := 170; + goto $bb1; +$aa171: + $p := 171; + goto $bb1; +$aa172: + $p := 172; + goto $bb1; +$aa173: + $p := 173; + goto $bb1; +$aa174: + $p := 174; + goto $bb1; +$aa175: + $p := 175; + goto $bb1; +$aa176: + $p := 176; + goto $bb1; +$aa177: + $p := 177; + goto $bb1; +$aa178: + $p := 178; + goto $bb1; +$aa179: + $p := 179; + goto $bb1; +$aa180: + $p := 180; + goto $bb1; +$aa181: + $p := 181; + goto $bb1; +$aa182: + $p := 182; + goto $bb1; +$aa183: + $p := 183; + goto $bb1; +$aa184: + $p := 184; + goto $bb1; +$aa185: + $p := 185; + goto $bb1; +$aa186: + $p := 186; + goto $bb1; +$aa187: + $p := 187; + goto $bb1; +$aa188: + $p := 188; + goto $bb1; +$aa189: + $p := 189; + goto $bb1; +$aa190: + $p := 190; + goto $bb1; +$aa191: + $p := 191; + goto $bb1; +$aa192: + $p := 192; + goto $bb1; +$aa193: + $p := 193; + goto $bb1; +$aa194: + $p := 194; + goto $bb1; +$aa195: + $p := 195; + goto $bb1; +$aa196: + $p := 196; + goto $bb1; +$aa197: + $p := 197; + goto $bb1; +$aa198: + $p := 198; + goto $bb1; +$aa199: + $p := 199; + goto $bb1; +$aa200: + $p := 200; + goto $bb1; +$aa201: + $p := 201; + goto $bb1; +$aa202: + $p := 202; + goto $bb1; +$aa203: + $p := 203; + goto $bb1; +$aa204: + $p := 204; + goto $bb1; +$aa205: + $p := 205; + goto $bb1; +$aa206: + $p := 206; + goto $bb1; +$aa207: + $p := 207; + goto $bb1; +$aa208: + $p := 208; + goto $bb1; +$aa209: + $p := 209; + goto $bb1; +$aa210: + $p := 210; + goto $bb1; +$aa211: + $p := 211; + goto $bb1; +$aa212: + $p := 212; + goto $bb1; +$aa213: + $p := 213; + goto $bb1; +$aa214: + $p := 214; + goto $bb1; +$aa215: + $p := 215; + goto $bb1; +$aa216: + $p := 216; + goto $bb1; +$aa217: + $p := 217; + goto $bb1; +$aa218: + $p := 218; + goto $bb1; +$aa219: + $p := 219; + goto $bb1; +$aa220: + $p := 220; + goto $bb1; +$aa221: + $p := 221; + goto $bb1; +$aa222: + $p := 222; + goto $bb1; +$aa223: + $p := 223; + goto $bb1; +$aa224: + $p := 224; + goto $bb1; +$aa225: + $p := 225; + goto $bb1; +$aa226: + $p := 226; + goto $bb1; +$aa227: + $p := 227; + goto $bb1; +$aa228: + $p := 228; + goto $bb1; +$aa229: + $p := 229; + goto $bb1; +$aa230: + $p := 230; + goto $bb1; +$aa231: + $p := 231; + goto $bb1; +$aa232: + $p := 232; + goto $bb1; +$aa233: + $p := 233; + goto $bb1; +$aa234: + $p := 234; + goto $bb1; +$aa235: + $p := 235; + goto $bb1; +$aa236: + $p := 236; + goto $bb1; +$aa237: + $p := 237; + goto $bb1; +$aa238: + $p := 238; + goto $bb1; +$aa239: + $p := 239; + goto $bb1; +$aa240: + $p := 240; + goto $bb1; +$aa241: + $p := 241; + goto $bb1; +$aa242: + $p := 242; + goto $bb1; +$aa243: + $p := 243; + goto $bb1; +$aa244: + $p := 244; + goto $bb1; +$aa245: + $p := 245; + goto $bb1; +$aa246: + $p := 246; + goto $bb1; +$aa247: + $p := 247; + goto $bb1; +$aa248: + $p := 248; + goto $bb1; +$aa249: + $p := 249; + goto $bb1; +$aa250: + $p := 250; + goto $bb1; +$aa251: + $p := 251; + goto $bb1; +$aa252: + $p := 252; + goto $bb1; +$aa253: + $p := 253; + goto $bb1; +$aa254: + $p := 254; + goto $bb1; +$aa255: + $p := 255; + goto $bb1; +$aa256: + $p := 256; + goto $bb1; +$aa257: + $p := 257; + goto $bb1; +$aa258: + $p := 258; + goto $bb1; +$aa259: + $p := 259; + goto $bb1; +$aa260: + $p := 260; + goto $bb1; +$aa261: + $p := 261; + goto $bb1; +$aa262: + $p := 262; + goto $bb1; +$aa263: + $p := 263; + goto $bb1; +$aa264: + $p := 264; + goto $bb1; +$aa265: + $p := 265; + goto $bb1; +$aa266: + $p := 266; + goto $bb1; +$aa267: + $p := 267; + goto $bb1; +$aa268: + $p := 268; + goto $bb1; +$aa269: + $p := 269; + goto $bb1; +$aa270: + $p := 270; + goto $bb1; +$aa271: + $p := 271; + goto $bb1; +$aa272: + $p := 272; + goto $bb1; +$aa273: + $p := 273; + goto $bb1; +$aa274: + $p := 274; + goto $bb1; +$aa275: + $p := 275; + goto $bb1; +$aa276: + $p := 276; + goto $bb1; +$aa277: + $p := 277; + goto $bb1; +$aa278: + $p := 278; + goto $bb1; +$aa279: + $p := 279; + goto $bb1; +$aa280: + $p := 280; + goto $bb1; +$aa281: + $p := 281; + goto $bb1; +$aa282: + $p := 282; + goto $bb1; +$aa283: + $p := 283; + goto $bb1; +$aa284: + $p := 284; + goto $bb1; +$aa285: + $p := 285; + goto $bb1; +$aa286: + $p := 286; + goto $bb1; +$aa287: + $p := 287; + goto $bb1; +$aa288: + $p := 288; + goto $bb1; +$aa289: + $p := 289; + goto $bb1; +$aa290: + $p := 290; + goto $bb1; +$aa291: + $p := 291; + goto $bb1; +$aa292: + $p := 292; + goto $bb1; +$aa293: + $p := 293; + goto $bb1; +$aa294: + $p := 294; + goto $bb1; +$aa295: + $p := 295; + goto $bb1; +$aa296: + $p := 296; + goto $bb1; +$aa297: + $p := 297; + goto $bb1; +$aa298: + $p := 298; + goto $bb1; +$aa299: + $p := 299; + goto $bb1; +$aa300: + $p := 300; + goto $bb1; +$aa301: + $p := 301; + goto $bb1; +$aa302: + $p := 302; + goto $bb1; +$aa303: + $p := 303; + goto $bb1; +$aa304: + $p := 304; + goto $bb1; +$aa305: + $p := 305; + goto $bb1; +$aa306: + $p := 306; + goto $bb1; +$aa307: + $p := 307; + goto $bb1; +$aa308: + $p := 308; + goto $bb1; +$aa309: + $p := 309; + goto $bb1; +$aa310: + $p := 310; + goto $bb1; +$aa311: + $p := 311; + goto $bb1; +$aa312: + $p := 312; + goto $bb1; +$aa313: + $p := 313; + goto $bb1; +$aa314: + $p := 314; + goto $bb1; +$aa315: + $p := 315; + goto $bb1; +$aa316: + $p := 316; + goto $bb1; +$aa317: + $p := 317; + goto $bb1; +$aa318: + $p := 318; + goto $bb1; +$aa319: + $p := 319; + goto $bb1; +$aa320: + $p := 320; + goto $bb1; +$aa321: + $p := 321; + goto $bb1; +$aa322: + $p := 322; + goto $bb1; +$aa323: + $p := 323; + goto $bb1; +$aa324: + $p := 324; + goto $bb1; +$aa325: + $p := 325; + goto $bb1; +$aa326: + $p := 326; + goto $bb1; +$aa327: + $p := 327; + goto $bb1; +$aa328: + $p := 328; + goto $bb1; +$aa329: + $p := 329; + goto $bb1; +$aa330: + $p := 330; + goto $bb1; +$aa331: + $p := 331; + goto $bb1; +$aa332: + $p := 332; + goto $bb1; +$aa333: + $p := 333; + goto $bb1; +$aa334: + $p := 334; + goto $bb1; +$aa335: + $p := 335; + goto $bb1; +$aa336: + $p := 336; + goto $bb1; +$aa337: + $p := 337; + goto $bb1; +$aa338: + $p := 338; + goto $bb1; +$aa339: + $p := 339; + goto $bb1; +$aa340: + $p := 340; + goto $bb1; +$aa341: + $p := 341; + goto $bb1; +$aa342: + $p := 342; + goto $bb1; +$aa343: + $p := 343; + goto $bb1; +$aa344: + $p := 344; + goto $bb1; +$aa345: + $p := 345; + goto $bb1; +$aa346: + $p := 346; + goto $bb1; +$aa347: + $p := 347; + goto $bb1; +$aa348: + $p := 348; + goto $bb1; +$aa349: + $p := 349; + goto $bb1; +$aa350: + $p := 350; + goto $bb1; +$aa351: + $p := 351; + goto $bb1; +$aa352: + $p := 352; + goto $bb1; +$aa353: + $p := 353; + goto $bb1; +$aa354: + $p := 354; + goto $bb1; +$aa355: + $p := 355; + goto $bb1; +$aa356: + $p := 356; + goto $bb1; +$aa357: + $p := 357; + goto $bb1; +$aa358: + $p := 358; + goto $bb1; +$aa359: + $p := 359; + goto $bb1; +$aa360: + $p := 360; + goto $bb1; +$aa361: + $p := 361; + goto $bb1; +$aa362: + $p := 362; + goto $bb1; +$aa363: + $p := 363; + goto $bb1; +$aa364: + $p := 364; + goto $bb1; +$aa365: + $p := 365; + goto $bb1; +$aa366: + $p := 366; + goto $bb1; +$aa367: + $p := 367; + goto $bb1; +$aa368: + $p := 368; + goto $bb1; +$aa369: + $p := 369; + goto $bb1; +$aa370: + $p := 370; + goto $bb1; +$aa371: + $p := 371; + goto $bb1; +$aa372: + $p := 372; + goto $bb1; +$aa373: + $p := 373; + goto $bb1; +$aa374: + $p := 374; + goto $bb1; +$aa375: + $p := 375; + goto $bb1; +$aa376: + $p := 376; + goto $bb1; +$aa377: + $p := 377; + goto $bb1; +$aa378: + $p := 378; + goto $bb1; +$aa379: + $p := 379; + goto $bb1; +$aa380: + $p := 380; + goto $bb1; +$aa381: + $p := 381; + goto $bb1; +$aa382: + $p := 382; + goto $bb1; +$aa383: + $p := 383; + goto $bb1; +$aa384: + $p := 384; + goto $bb1; +$aa385: + $p := 385; + goto $bb1; +$aa386: + $p := 386; + goto $bb1; +$aa387: + $p := 387; + goto $bb1; +$aa388: + $p := 388; + goto $bb1; +$aa389: + $p := 389; + goto $bb1; +$aa390: + $p := 390; + goto $bb1; +$aa391: + $p := 391; + goto $bb1; +$aa392: + $p := 392; + goto $bb1; +$aa393: + $p := 393; + goto $bb1; +$aa394: + $p := 394; + goto $bb1; +$aa395: + $p := 395; + goto $bb1; +$aa396: + $p := 396; + goto $bb1; +$aa397: + $p := 397; + goto $bb1; +$aa398: + $p := 398; + goto $bb1; +$aa399: + $p := 399; + goto $bb1; +$aa400: + $p := 400; + goto $bb1; +$aa401: + $p := 401; + goto $bb1; +$aa402: + $p := 402; + goto $bb1; +$aa403: + $p := 403; + goto $bb1; +$aa404: + $p := 404; + goto $bb1; +$aa405: + $p := 405; + goto $bb1; +$aa406: + $p := 406; + goto $bb1; +$aa407: + $p := 407; + goto $bb1; +$aa408: + $p := 408; + goto $bb1; +$aa409: + $p := 409; + goto $bb1; +$aa410: + $p := 410; + goto $bb1; +$aa411: + $p := 411; + goto $bb1; +$aa412: + $p := 412; + goto $bb1; +$aa413: + $p := 413; + goto $bb1; +$aa414: + $p := 414; + goto $bb1; +$aa415: + $p := 415; + goto $bb1; +$aa416: + $p := 416; + goto $bb1; +$aa417: + $p := 417; + goto $bb1; +$aa418: + $p := 418; + goto $bb1; +$aa419: + $p := 419; + goto $bb1; +$aa420: + $p := 420; + goto $bb1; +$aa421: + $p := 421; + goto $bb1; +$aa422: + $p := 422; + goto $bb1; +$aa423: + $p := 423; + goto $bb1; +$aa424: + $p := 424; + goto $bb1; +$aa425: + $p := 425; + goto $bb1; +$aa426: + $p := 426; + goto $bb1; +$aa427: + $p := 427; + goto $bb1; +$aa428: + $p := 428; + goto $bb1; +$aa429: + $p := 429; + goto $bb1; +$aa430: + $p := 430; + goto $bb1; +$aa431: + $p := 431; + goto $bb1; +$aa432: + $p := 432; + goto $bb1; +$aa433: + $p := 433; + goto $bb1; +$aa434: + $p := 434; + goto $bb1; +$aa435: + $p := 435; + goto $bb1; +$aa436: + $p := 436; + goto $bb1; +$aa437: + $p := 437; + goto $bb1; +$aa438: + $p := 438; + goto $bb1; +$aa439: + $p := 439; + goto $bb1; +$aa440: + $p := 440; + goto $bb1; +$aa441: + $p := 441; + goto $bb1; +$aa442: + $p := 442; + goto $bb1; +$aa443: + $p := 443; + goto $bb1; +$aa444: + $p := 444; + goto $bb1; +$aa445: + $p := 445; + goto $bb1; +$aa446: + $p := 446; + goto $bb1; +$aa447: + $p := 447; + goto $bb1; +$aa448: + $p := 448; + goto $bb1; +$aa449: + $p := 449; + goto $bb1; +$aa450: + $p := 450; + goto $bb1; +$aa451: + $p := 451; + goto $bb1; +$aa452: + $p := 452; + goto $bb1; +$aa453: + $p := 453; + goto $bb1; +$aa454: + $p := 454; + goto $bb1; +$aa455: + $p := 455; + goto $bb1; +$aa456: + $p := 456; + goto $bb1; +$aa457: + $p := 457; + goto $bb1; +$aa458: + $p := 458; + goto $bb1; +$aa459: + $p := 459; + goto $bb1; +$aa460: + $p := 460; + goto $bb1; +$aa461: + $p := 461; + goto $bb1; +$aa462: + $p := 462; + goto $bb1; +$aa463: + $p := 463; + goto $bb1; +$aa464: + $p := 464; + goto $bb1; +$aa465: + $p := 465; + goto $bb1; +$aa466: + $p := 466; + goto $bb1; +$aa467: + $p := 467; + goto $bb1; +$aa468: + $p := 468; + goto $bb1; +$aa469: + $p := 469; + goto $bb1; +$aa470: + $p := 470; + goto $bb1; +$aa471: + $p := 471; + goto $bb1; +$aa472: + $p := 472; + goto $bb1; +$aa473: + $p := 473; + goto $bb1; +$aa474: + $p := 474; + goto $bb1; +$aa475: + $p := 475; + goto $bb1; +$aa476: + $p := 476; + goto $bb1; +$aa477: + $p := 477; + goto $bb1; +$aa478: + $p := 478; + goto $bb1; +$aa479: + $p := 479; + goto $bb1; +$aa480: + $p := 480; + goto $bb1; +$aa481: + $p := 481; + goto $bb1; +$aa482: + $p := 482; + goto $bb1; +$aa483: + $p := 483; + goto $bb1; +$aa484: + $p := 484; + goto $bb1; +$aa485: + $p := 485; + goto $bb1; +$aa486: + $p := 486; + goto $bb1; +$aa487: + $p := 487; + goto $bb1; +$aa488: + $p := 488; + goto $bb1; +$aa489: + $p := 489; + goto $bb1; +$aa490: + $p := 490; + goto $bb1; +$aa491: + $p := 491; + goto $bb1; +$aa492: + $p := 492; + goto $bb1; +$aa493: + $p := 493; + goto $bb1; +$aa494: + $p := 494; + goto $bb1; +$aa495: + $p := 495; + goto $bb1; +$aa496: + $p := 496; + goto $bb1; +$aa497: + $p := 497; + goto $bb1; +$aa498: + $p := 498; + goto $bb1; +$aa499: + $p := 499; + goto $bb1; +$aa500: + $p := 500; + goto $bb1; +$aa501: + $p := 501; + goto $bb1; +$aa502: + $p := 502; + goto $bb1; +$aa503: + $p := 503; + goto $bb1; +$aa504: + $p := 504; + goto $bb1; +$aa505: + $p := 505; + goto $bb1; +$aa506: + $p := 506; + goto $bb1; +$aa507: + $p := 507; + goto $bb1; +$aa508: + $p := 508; + goto $bb1; +$aa509: + $p := 509; + goto $bb1; +$aa510: + $p := 510; + goto $bb1; +$aa511: + $p := 511; + goto $bb1; +$aa512: + $p := 512; + goto $bb1; +$aa513: + $p := 513; + goto $bb1; +$aa514: + $p := 514; + goto $bb1; +$aa515: + $p := 515; + goto $bb1; +$aa516: + $p := 516; + goto $bb1; +$aa517: + $p := 517; + goto $bb1; +$aa518: + $p := 518; + goto $bb1; +$aa519: + $p := 519; + goto $bb1; +$aa520: + $p := 520; + goto $bb1; +$aa521: + $p := 521; + goto $bb1; +$aa522: + $p := 522; + goto $bb1; +$aa523: + $p := 523; + goto $bb1; +$aa524: + $p := 524; + goto $bb1; +$aa525: + $p := 525; + goto $bb1; +$aa526: + $p := 526; + goto $bb1; +$aa527: + $p := 527; + goto $bb1; +$aa528: + $p := 528; + goto $bb1; +$aa529: + $p := 529; + goto $bb1; +$aa530: + $p := 530; + goto $bb1; +$aa531: + $p := 531; + goto $bb1; +$aa532: + $p := 532; + goto $bb1; +$aa533: + $p := 533; + goto $bb1; +$aa534: + $p := 534; + goto $bb1; +$aa535: + $p := 535; + goto $bb1; +$aa536: + $p := 536; + goto $bb1; +$aa537: + $p := 537; + goto $bb1; +$aa538: + $p := 538; + goto $bb1; +$aa539: + $p := 539; + goto $bb1; +$aa540: + $p := 540; + goto $bb1; +$aa541: + $p := 541; + goto $bb1; +$aa542: + $p := 542; + goto $bb1; +$aa543: + $p := 543; + goto $bb1; +$aa544: + $p := 544; + goto $bb1; +$aa545: + $p := 545; + goto $bb1; +$aa546: + $p := 546; + goto $bb1; +$aa547: + $p := 547; + goto $bb1; +$aa548: + $p := 548; + goto $bb1; +$aa549: + $p := 549; + goto $bb1; +$aa550: + $p := 550; + goto $bb1; +$aa551: + $p := 551; + goto $bb1; +$aa552: + $p := 552; + goto $bb1; +$aa553: + $p := 553; + goto $bb1; +$aa554: + $p := 554; + goto $bb1; +$aa555: + $p := 555; + goto $bb1; +$aa556: + $p := 556; + goto $bb1; +$aa557: + $p := 557; + goto $bb1; +$aa558: + $p := 558; + goto $bb1; +$aa559: + $p := 559; + goto $bb1; +$aa560: + $p := 560; + goto $bb1; +$aa561: + $p := 561; + goto $bb1; +$aa562: + $p := 562; + goto $bb1; +$aa563: + $p := 563; + goto $bb1; +$aa564: + $p := 564; + goto $bb1; +$aa565: + $p := 565; + goto $bb1; +$aa566: + $p := 566; + goto $bb1; +$aa567: + $p := 567; + goto $bb1; +$aa568: + $p := 568; + goto $bb1; +$aa569: + $p := 569; + goto $bb1; +$aa570: + $p := 570; + goto $bb1; +$aa571: + $p := 571; + goto $bb1; +$aa572: + $p := 572; + goto $bb1; +$aa573: + $p := 573; + goto $bb1; +$aa574: + $p := 574; + goto $bb1; +$aa575: + $p := 575; + goto $bb1; +$aa576: + $p := 576; + goto $bb1; +$aa577: + $p := 577; + goto $bb1; +$aa578: + $p := 578; + goto $bb1; +$aa579: + $p := 579; + goto $bb1; +$aa580: + $p := 580; + goto $bb1; +$aa581: + $p := 581; + goto $bb1; +$aa582: + $p := 582; + goto $bb1; +$aa583: + $p := 583; + goto $bb1; +$aa584: + $p := 584; + goto $bb1; +$aa585: + $p := 585; + goto $bb1; +$aa586: + $p := 586; + goto $bb1; +$aa587: + $p := 587; + goto $bb1; +$aa588: + $p := 588; + goto $bb1; +$aa589: + $p := 589; + goto $bb1; +$aa590: + $p := 590; + goto $bb1; +$aa591: + $p := 591; + goto $bb1; +$aa592: + $p := 592; + goto $bb1; +$aa593: + $p := 593; + goto $bb1; +$aa594: + $p := 594; + goto $bb1; +$aa595: + $p := 595; + goto $bb1; +$aa596: + $p := 596; + goto $bb1; +$aa597: + $p := 597; + goto $bb1; +$aa598: + $p := 598; + goto $bb1; +$aa599: + $p := 599; + goto $bb1; +$aa600: + $p := 600; + goto $bb1; +$aa601: + $p := 601; + goto $bb1; +$aa602: + $p := 602; + goto $bb1; +$aa603: + $p := 603; + goto $bb1; +$aa604: + $p := 604; + goto $bb1; +$aa605: + $p := 605; + goto $bb1; +$aa606: + $p := 606; + goto $bb1; +$aa607: + $p := 607; + goto $bb1; +$aa608: + $p := 608; + goto $bb1; +$aa609: + $p := 609; + goto $bb1; +$aa610: + $p := 610; + goto $bb1; +$aa611: + $p := 611; + goto $bb1; +$aa612: + $p := 612; + goto $bb1; +$aa613: + $p := 613; + goto $bb1; +$aa614: + $p := 614; + goto $bb1; +$aa615: + $p := 615; + goto $bb1; +$aa616: + $p := 616; + goto $bb1; +$aa617: + $p := 617; + goto $bb1; +$aa618: + $p := 618; + goto $bb1; +$aa619: + $p := 619; + goto $bb1; +$aa620: + $p := 620; + goto $bb1; +$aa621: + $p := 621; + goto $bb1; +$aa622: + $p := 622; + goto $bb1; +$aa623: + $p := 623; + goto $bb1; +$aa624: + $p := 624; + goto $bb1; +$aa625: + $p := 625; + goto $bb1; +$aa626: + $p := 626; + goto $bb1; +$aa627: + $p := 627; + goto $bb1; +$aa628: + $p := 628; + goto $bb1; +$aa629: + $p := 629; + goto $bb1; +$aa630: + $p := 630; + goto $bb1; +$aa631: + $p := 631; + goto $bb1; +$aa632: + $p := 632; + goto $bb1; +$aa633: + $p := 633; + goto $bb1; +$aa634: + $p := 634; + goto $bb1; +$aa635: + $p := 635; + goto $bb1; +$aa636: + $p := 636; + goto $bb1; +$aa637: + $p := 637; + goto $bb1; +$aa638: + $p := 638; + goto $bb1; +$aa639: + $p := 639; + goto $bb1; +$aa640: + $p := 640; + goto $bb1; +$aa641: + $p := 641; + goto $bb1; +$aa642: + $p := 642; + goto $bb1; +$aa643: + $p := 643; + goto $bb1; +$aa644: + $p := 644; + goto $bb1; +$aa645: + $p := 645; + goto $bb1; +$aa646: + $p := 646; + goto $bb1; +$aa647: + $p := 647; + goto $bb1; +$aa648: + $p := 648; + goto $bb1; +$aa649: + $p := 649; + goto $bb1; +$aa650: + $p := 650; + goto $bb1; +$aa651: + $p := 651; + goto $bb1; +$aa652: + $p := 652; + goto $bb1; +$aa653: + $p := 653; + goto $bb1; +$aa654: + $p := 654; + goto $bb1; +$aa655: + $p := 655; + goto $bb1; +$aa656: + $p := 656; + goto $bb1; +$aa657: + $p := 657; + goto $bb1; +$aa658: + $p := 658; + goto $bb1; +$aa659: + $p := 659; + goto $bb1; +$aa660: + $p := 660; + goto $bb1; +$aa661: + $p := 661; + goto $bb1; +$aa662: + $p := 662; + goto $bb1; +$aa663: + $p := 663; + goto $bb1; +$aa664: + $p := 664; + goto $bb1; +$aa665: + $p := 665; + goto $bb1; +$aa666: + $p := 666; + goto $bb1; +$aa667: + $p := 667; + goto $bb1; +$aa668: + $p := 668; + goto $bb1; +$aa669: + $p := 669; + goto $bb1; +$aa670: + $p := 670; + goto $bb1; +$aa671: + $p := 671; + goto $bb1; +$aa672: + $p := 672; + goto $bb1; +$aa673: + $p := 673; + goto $bb1; +$aa674: + $p := 674; + goto $bb1; +$aa675: + $p := 675; + goto $bb1; +$aa676: + $p := 676; + goto $bb1; +$aa677: + $p := 677; + goto $bb1; +$aa678: + $p := 678; + goto $bb1; +$aa679: + $p := 679; + goto $bb1; +$aa680: + $p := 680; + goto $bb1; +$aa681: + $p := 681; + goto $bb1; +$aa682: + $p := 682; + goto $bb1; +$aa683: + $p := 683; + goto $bb1; +$aa684: + $p := 684; + goto $bb1; +$aa685: + $p := 685; + goto $bb1; +$aa686: + $p := 686; + goto $bb1; +$aa687: + $p := 687; + goto $bb1; +$aa688: + $p := 688; + goto $bb1; +$aa689: + $p := 689; + goto $bb1; +$aa690: + $p := 690; + goto $bb1; +$aa691: + $p := 691; + goto $bb1; +$aa692: + $p := 692; + goto $bb1; +$aa693: + $p := 693; + goto $bb1; +$aa694: + $p := 694; + goto $bb1; +$aa695: + $p := 695; + goto $bb1; +$aa696: + $p := 696; + goto $bb1; +$aa697: + $p := 697; + goto $bb1; +$aa698: + $p := 698; + goto $bb1; +$aa699: + $p := 699; + goto $bb1; +$aa700: + $p := 700; + goto $bb1; +$aa701: + $p := 701; + goto $bb1; +$aa702: + $p := 702; + goto $bb1; +$aa703: + $p := 703; + goto $bb1; +$aa704: + $p := 704; + goto $bb1; +$aa705: + $p := 705; + goto $bb1; +$aa706: + $p := 706; + goto $bb1; +$aa707: + $p := 707; + goto $bb1; +$aa708: + $p := 708; + goto $bb1; +$aa709: + $p := 709; + goto $bb1; +$aa710: + $p := 710; + goto $bb1; +$aa711: + $p := 711; + goto $bb1; +$aa712: + $p := 712; + goto $bb1; +$aa713: + $p := 713; + goto $bb1; +$aa714: + $p := 714; + goto $bb1; +$aa715: + $p := 715; + goto $bb1; +$aa716: + $p := 716; + goto $bb1; +$aa717: + $p := 717; + goto $bb1; +$aa718: + $p := 718; + goto $bb1; +$aa719: + $p := 719; + goto $bb1; +$aa720: + $p := 720; + goto $bb1; +$aa721: + $p := 721; + goto $bb1; +$aa722: + $p := 722; + goto $bb1; +$aa723: + $p := 723; + goto $bb1; +$aa724: + $p := 724; + goto $bb1; +$aa725: + $p := 725; + goto $bb1; +$aa726: + $p := 726; + goto $bb1; +$aa727: + $p := 727; + goto $bb1; +$aa728: + $p := 728; + goto $bb1; +$aa729: + $p := 729; + goto $bb1; +$aa730: + $p := 730; + goto $bb1; +$aa731: + $p := 731; + goto $bb1; +$aa732: + $p := 732; + goto $bb1; +$aa733: + $p := 733; + goto $bb1; +$aa734: + $p := 734; + goto $bb1; +$aa735: + $p := 735; + goto $bb1; +$aa736: + $p := 736; + goto $bb1; +$aa737: + $p := 737; + goto $bb1; +$aa738: + $p := 738; + goto $bb1; +$aa739: + $p := 739; + goto $bb1; +$aa740: + $p := 740; + goto $bb1; +$aa741: + $p := 741; + goto $bb1; +$aa742: + $p := 742; + goto $bb1; +$aa743: + $p := 743; + goto $bb1; +$aa744: + $p := 744; + goto $bb1; +$aa745: + $p := 745; + goto $bb1; +$aa746: + $p := 746; + goto $bb1; +$aa747: + $p := 747; + goto $bb1; +$aa748: + $p := 748; + goto $bb1; +$aa749: + $p := 749; + goto $bb1; +$aa750: + $p := 750; + goto $bb1; +$aa751: + $p := 751; + goto $bb1; +$aa752: + $p := 752; + goto $bb1; +$aa753: + $p := 753; + goto $bb1; +$aa754: + $p := 754; + goto $bb1; +$aa755: + $p := 755; + goto $bb1; +$aa756: + $p := 756; + goto $bb1; +$aa757: + $p := 757; + goto $bb1; +$aa758: + $p := 758; + goto $bb1; +$aa759: + $p := 759; + goto $bb1; +$aa760: + $p := 760; + goto $bb1; +$aa761: + $p := 761; + goto $bb1; +$aa762: + $p := 762; + goto $bb1; +$aa763: + $p := 763; + goto $bb1; +$aa764: + $p := 764; + goto $bb1; +$aa765: + $p := 765; + goto $bb1; +$aa766: + $p := 766; + goto $bb1; +$aa767: + $p := 767; + goto $bb1; +$aa768: + $p := 768; + goto $bb1; +$aa769: + $p := 769; + goto $bb1; +$aa770: + $p := 770; + goto $bb1; +$aa771: + $p := 771; + goto $bb1; +$aa772: + $p := 772; + goto $bb1; +$aa773: + $p := 773; + goto $bb1; +$aa774: + $p := 774; + goto $bb1; +$aa775: + $p := 775; + goto $bb1; +$aa776: + $p := 776; + goto $bb1; +$aa777: + $p := 777; + goto $bb1; +$aa778: + $p := 778; + goto $bb1; +$aa779: + $p := 779; + goto $bb1; +$aa780: + $p := 780; + goto $bb1; +$aa781: + $p := 781; + goto $bb1; +$aa782: + $p := 782; + goto $bb1; +$aa783: + $p := 783; + goto $bb1; +$aa784: + $p := 784; + goto $bb1; +$aa785: + $p := 785; + goto $bb1; +$aa786: + $p := 786; + goto $bb1; +$aa787: + $p := 787; + goto $bb1; +$aa788: + $p := 788; + goto $bb1; +$aa789: + $p := 789; + goto $bb1; +$aa790: + $p := 790; + goto $bb1; +$aa791: + $p := 791; + goto $bb1; +$aa792: + $p := 792; + goto $bb1; +$aa793: + $p := 793; + goto $bb1; +$aa794: + $p := 794; + goto $bb1; +$aa795: + $p := 795; + goto $bb1; +$aa796: + $p := 796; + goto $bb1; +$aa797: + $p := 797; + goto $bb1; +$aa798: + $p := 798; + goto $bb1; +$aa799: + $p := 799; + goto $bb1; +$aa800: + $p := 800; + goto $bb1; +$aa801: + $p := 801; + goto $bb1; +$aa802: + $p := 802; + goto $bb1; +$aa803: + $p := 803; + goto $bb1; +$aa804: + $p := 804; + goto $bb1; +$aa805: + $p := 805; + goto $bb1; +$aa806: + $p := 806; + goto $bb1; +$aa807: + $p := 807; + goto $bb1; +$aa808: + $p := 808; + goto $bb1; +$aa809: + $p := 809; + goto $bb1; +$aa810: + $p := 810; + goto $bb1; +$aa811: + $p := 811; + goto $bb1; +$aa812: + $p := 812; + goto $bb1; +$aa813: + $p := 813; + goto $bb1; +$aa814: + $p := 814; + goto $bb1; +$aa815: + $p := 815; + goto $bb1; +$aa816: + $p := 816; + goto $bb1; +$aa817: + $p := 817; + goto $bb1; +$aa818: + $p := 818; + goto $bb1; +$aa819: + $p := 819; + goto $bb1; +$aa820: + $p := 820; + goto $bb1; +$aa821: + $p := 821; + goto $bb1; +$aa822: + $p := 822; + goto $bb1; +$aa823: + $p := 823; + goto $bb1; +$aa824: + $p := 824; + goto $bb1; +$aa825: + $p := 825; + goto $bb1; +$aa826: + $p := 826; + goto $bb1; +$aa827: + $p := 827; + goto $bb1; +$aa828: + $p := 828; + goto $bb1; +$aa829: + $p := 829; + goto $bb1; +$aa830: + $p := 830; + goto $bb1; +$aa831: + $p := 831; + goto $bb1; +$aa832: + $p := 832; + goto $bb1; +$aa833: + $p := 833; + goto $bb1; +$aa834: + $p := 834; + goto $bb1; +$aa835: + $p := 835; + goto $bb1; +$aa836: + $p := 836; + goto $bb1; +$aa837: + $p := 837; + goto $bb1; +$aa838: + $p := 838; + goto $bb1; +$aa839: + $p := 839; + goto $bb1; +$aa840: + $p := 840; + goto $bb1; +$aa841: + $p := 841; + goto $bb1; +$aa842: + $p := 842; + goto $bb1; +$aa843: + $p := 843; + goto $bb1; +$aa844: + $p := 844; + goto $bb1; +$aa845: + $p := 845; + goto $bb1; +$aa846: + $p := 846; + goto $bb1; +$aa847: + $p := 847; + goto $bb1; +$aa848: + $p := 848; + goto $bb1; +$aa849: + $p := 849; + goto $bb1; +$aa850: + $p := 850; + goto $bb1; +$aa851: + $p := 851; + goto $bb1; +$aa852: + $p := 852; + goto $bb1; +$aa853: + $p := 853; + goto $bb1; +$aa854: + $p := 854; + goto $bb1; +$aa855: + $p := 855; + goto $bb1; +$aa856: + $p := 856; + goto $bb1; +$aa857: + $p := 857; + goto $bb1; +$aa858: + $p := 858; + goto $bb1; +$aa859: + $p := 859; + goto $bb1; +$aa860: + $p := 860; + goto $bb1; +$aa861: + $p := 861; + goto $bb1; +$aa862: + $p := 862; + goto $bb1; +$aa863: + $p := 863; + goto $bb1; +$aa864: + $p := 864; + goto $bb1; +$aa865: + $p := 865; + goto $bb1; +$aa866: + $p := 866; + goto $bb1; +$aa867: + $p := 867; + goto $bb1; +$aa868: + $p := 868; + goto $bb1; +$aa869: + $p := 869; + goto $bb1; +$aa870: + $p := 870; + goto $bb1; +$aa871: + $p := 871; + goto $bb1; +$aa872: + $p := 872; + goto $bb1; +$aa873: + $p := 873; + goto $bb1; +$aa874: + $p := 874; + goto $bb1; +$aa875: + $p := 875; + goto $bb1; +$aa876: + $p := 876; + goto $bb1; +$aa877: + $p := 877; + goto $bb1; +$aa878: + $p := 878; + goto $bb1; +$aa879: + $p := 879; + goto $bb1; +$aa880: + $p := 880; + goto $bb1; +$aa881: + $p := 881; + goto $bb1; +$aa882: + $p := 882; + goto $bb1; +$aa883: + $p := 883; + goto $bb1; +$aa884: + $p := 884; + goto $bb1; +$aa885: + $p := 885; + goto $bb1; +$aa886: + $p := 886; + goto $bb1; +$aa887: + $p := 887; + goto $bb1; +$aa888: + $p := 888; + goto $bb1; +$aa889: + $p := 889; + goto $bb1; +$aa890: + $p := 890; + goto $bb1; +$aa891: + $p := 891; + goto $bb1; +$aa892: + $p := 892; + goto $bb1; +$aa893: + $p := 893; + goto $bb1; +$aa894: + $p := 894; + goto $bb1; +$aa895: + $p := 895; + goto $bb1; +$aa896: + $p := 896; + goto $bb1; +$aa897: + $p := 897; + goto $bb1; +$aa898: + $p := 898; + goto $bb1; +$aa899: + $p := 899; + goto $bb1; +$aa900: + $p := 900; + goto $bb1; +$aa901: + $p := 901; + goto $bb1; +$aa902: + $p := 902; + goto $bb1; +$aa903: + $p := 903; + goto $bb1; +$aa904: + $p := 904; + goto $bb1; +$aa905: + $p := 905; + goto $bb1; +$aa906: + $p := 906; + goto $bb1; +$aa907: + $p := 907; + goto $bb1; +$aa908: + $p := 908; + goto $bb1; +$aa909: + $p := 909; + goto $bb1; +$aa910: + $p := 910; + goto $bb1; +$aa911: + $p := 911; + goto $bb1; +$aa912: + $p := 912; + goto $bb1; +$aa913: + $p := 913; + goto $bb1; +$aa914: + $p := 914; + goto $bb1; +$aa915: + $p := 915; + goto $bb1; +$aa916: + $p := 916; + goto $bb1; +$aa917: + $p := 917; + goto $bb1; +$aa918: + $p := 918; + goto $bb1; +$aa919: + $p := 919; + goto $bb1; +$aa920: + $p := 920; + goto $bb1; +$aa921: + $p := 921; + goto $bb1; +$aa922: + $p := 922; + goto $bb1; +$aa923: + $p := 923; + goto $bb1; +$aa924: + $p := 924; + goto $bb1; +$aa925: + $p := 925; + goto $bb1; +$aa926: + $p := 926; + goto $bb1; +$aa927: + $p := 927; + goto $bb1; +$aa928: + $p := 928; + goto $bb1; +$aa929: + $p := 929; + goto $bb1; +$aa930: + $p := 930; + goto $bb1; +$aa931: + $p := 931; + goto $bb1; +$aa932: + $p := 932; + goto $bb1; +$aa933: + $p := 933; + goto $bb1; +$aa934: + $p := 934; + goto $bb1; +$aa935: + $p := 935; + goto $bb1; +$aa936: + $p := 936; + goto $bb1; +$aa937: + $p := 937; + goto $bb1; +$aa938: + $p := 938; + goto $bb1; +$aa939: + $p := 939; + goto $bb1; +$aa940: + $p := 940; + goto $bb1; +$aa941: + $p := 941; + goto $bb1; +$aa942: + $p := 942; + goto $bb1; +$aa943: + $p := 943; + goto $bb1; +$aa944: + $p := 944; + goto $bb1; +$aa945: + $p := 945; + goto $bb1; +$aa946: + $p := 946; + goto $bb1; +$aa947: + $p := 947; + goto $bb1; +$aa948: + $p := 948; + goto $bb1; +$aa949: + $p := 949; + goto $bb1; +$aa950: + $p := 950; + goto $bb1; +$aa951: + $p := 951; + goto $bb1; +$aa952: + $p := 952; + goto $bb1; +$aa953: + $p := 953; + goto $bb1; +$aa954: + $p := 954; + goto $bb1; +$aa955: + $p := 955; + goto $bb1; +$aa956: + $p := 956; + goto $bb1; +$aa957: + $p := 957; + goto $bb1; +$aa958: + $p := 958; + goto $bb1; +$aa959: + $p := 959; + goto $bb1; +$aa960: + $p := 960; + goto $bb1; +$aa961: + $p := 961; + goto $bb1; +$aa962: + $p := 962; + goto $bb1; +$aa963: + $p := 963; + goto $bb1; +$aa964: + $p := 964; + goto $bb1; +$aa965: + $p := 965; + goto $bb1; +$aa966: + $p := 966; + goto $bb1; +$aa967: + $p := 967; + goto $bb1; +$aa968: + $p := 968; + goto $bb1; +$aa969: + $p := 969; + goto $bb1; +$aa970: + $p := 970; + goto $bb1; +$aa971: + $p := 971; + goto $bb1; +$aa972: + $p := 972; + goto $bb1; +$aa973: + $p := 973; + goto $bb1; +$aa974: + $p := 974; + goto $bb1; +$aa975: + $p := 975; + goto $bb1; +$aa976: + $p := 976; + goto $bb1; +$aa977: + $p := 977; + goto $bb1; +$aa978: + $p := 978; + goto $bb1; +$aa979: + $p := 979; + goto $bb1; +$aa980: + $p := 980; + goto $bb1; +$aa981: + $p := 981; + goto $bb1; +$aa982: + $p := 982; + goto $bb1; +$aa983: + $p := 983; + goto $bb1; +$aa984: + $p := 984; + goto $bb1; +$aa985: + $p := 985; + goto $bb1; +$aa986: + $p := 986; + goto $bb1; +$aa987: + $p := 987; + goto $bb1; +$aa988: + $p := 988; + goto $bb1; +$aa989: + $p := 989; + goto $bb1; +$aa990: + $p := 990; + goto $bb1; +$aa991: + $p := 991; + goto $bb1; +$aa992: + $p := 992; + goto $bb1; +$aa993: + $p := 993; + goto $bb1; +$aa994: + $p := 994; + goto $bb1; +$aa995: + $p := 995; + goto $bb1; +$aa996: + $p := 996; + goto $bb1; +$aa997: + $p := 997; + goto $bb1; +$aa998: + $p := 998; + goto $bb1; +$aa999: + $p := 999; + goto $bb1; +$aa1000: + $p := 1000; + goto $bb1; +$aa1001: + $p := 1001; + goto $bb1; +$aa1002: + $p := 1002; + goto $bb1; +$aa1003: + $p := 1003; + goto $bb1; +$aa1004: + $p := 1004; + goto $bb1; +$aa1005: + $p := 1005; + goto $bb1; +$aa1006: + $p := 1006; + goto $bb1; +$aa1007: + $p := 1007; + goto $bb1; +$aa1008: + $p := 1008; + goto $bb1; +$aa1009: + $p := 1009; + goto $bb1; +$aa1010: + $p := 1010; + goto $bb1; +$aa1011: + $p := 1011; + goto $bb1; +$aa1012: + $p := 1012; + goto $bb1; +$aa1013: + $p := 1013; + goto $bb1; +$aa1014: + $p := 1014; + goto $bb1; +$aa1015: + $p := 1015; + goto $bb1; +$aa1016: + $p := 1016; + goto $bb1; +$aa1017: + $p := 1017; + goto $bb1; +$aa1018: + $p := 1018; + goto $bb1; +$aa1019: + $p := 1019; + goto $bb1; +$aa1020: + $p := 1020; + goto $bb1; +$aa1021: + $p := 1021; + goto $bb1; +$aa1022: + $p := 1022; + goto $bb1; +$aa1023: + $p := 1023; + goto $bb1; +$aa1024: + $p := 1024; + goto $bb1; +$aa1025: + $p := 1025; + goto $bb1; +$aa1026: + $p := 1026; + goto $bb1; +$aa1027: + $p := 1027; + goto $bb1; +$aa1028: + $p := 1028; + goto $bb1; +$aa1029: + $p := 1029; + goto $bb1; +$aa1030: + $p := 1030; + goto $bb1; +$aa1031: + $p := 1031; + goto $bb1; +$aa1032: + $p := 1032; + goto $bb1; +$aa1033: + $p := 1033; + goto $bb1; +$aa1034: + $p := 1034; + goto $bb1; +$aa1035: + $p := 1035; + goto $bb1; +$aa1036: + $p := 1036; + goto $bb1; +$aa1037: + $p := 1037; + goto $bb1; +$aa1038: + $p := 1038; + goto $bb1; +$aa1039: + $p := 1039; + goto $bb1; +$aa1040: + $p := 1040; + goto $bb1; +$aa1041: + $p := 1041; + goto $bb1; +$aa1042: + $p := 1042; + goto $bb1; +$aa1043: + $p := 1043; + goto $bb1; +$aa1044: + $p := 1044; + goto $bb1; +$aa1045: + $p := 1045; + goto $bb1; +$aa1046: + $p := 1046; + goto $bb1; +$aa1047: + $p := 1047; + goto $bb1; +$aa1048: + $p := 1048; + goto $bb1; +$aa1049: + $p := 1049; + goto $bb1; +$aa1050: + $p := 1050; + goto $bb1; +$aa1051: + $p := 1051; + goto $bb1; +$aa1052: + $p := 1052; + goto $bb1; +$aa1053: + $p := 1053; + goto $bb1; +$aa1054: + $p := 1054; + goto $bb1; +$aa1055: + $p := 1055; + goto $bb1; +$aa1056: + $p := 1056; + goto $bb1; +$aa1057: + $p := 1057; + goto $bb1; +$aa1058: + $p := 1058; + goto $bb1; +$aa1059: + $p := 1059; + goto $bb1; +$aa1060: + $p := 1060; + goto $bb1; +$aa1061: + $p := 1061; + goto $bb1; +$aa1062: + $p := 1062; + goto $bb1; +$aa1063: + $p := 1063; + goto $bb1; +$aa1064: + $p := 1064; + goto $bb1; +$aa1065: + $p := 1065; + goto $bb1; +$aa1066: + $p := 1066; + goto $bb1; +$aa1067: + $p := 1067; + goto $bb1; +$aa1068: + $p := 1068; + goto $bb1; +$aa1069: + $p := 1069; + goto $bb1; +$aa1070: + $p := 1070; + goto $bb1; +$aa1071: + $p := 1071; + goto $bb1; +$aa1072: + $p := 1072; + goto $bb1; +$aa1073: + $p := 1073; + goto $bb1; +$aa1074: + $p := 1074; + goto $bb1; +$aa1075: + $p := 1075; + goto $bb1; +$aa1076: + $p := 1076; + goto $bb1; +$aa1077: + $p := 1077; + goto $bb1; +$aa1078: + $p := 1078; + goto $bb1; +$aa1079: + $p := 1079; + goto $bb1; +$aa1080: + $p := 1080; + goto $bb1; +$aa1081: + $p := 1081; + goto $bb1; +$aa1082: + $p := 1082; + goto $bb1; +$aa1083: + $p := 1083; + goto $bb1; +$aa1084: + $p := 1084; + goto $bb1; +$aa1085: + $p := 1085; + goto $bb1; +$aa1086: + $p := 1086; + goto $bb1; +$aa1087: + $p := 1087; + goto $bb1; +$aa1088: + $p := 1088; + goto $bb1; +$aa1089: + $p := 1089; + goto $bb1; +$aa1090: + $p := 1090; + goto $bb1; +$aa1091: + $p := 1091; + goto $bb1; +$aa1092: + $p := 1092; + goto $bb1; +$aa1093: + $p := 1093; + goto $bb1; +$aa1094: + $p := 1094; + goto $bb1; +$aa1095: + $p := 1095; + goto $bb1; +$aa1096: + $p := 1096; + goto $bb1; +$aa1097: + $p := 1097; + goto $bb1; +$aa1098: + $p := 1098; + goto $bb1; +$aa1099: + $p := 1099; + goto $bb1; +$aa1100: + $p := 1100; + goto $bb1; +$aa1101: + $p := 1101; + goto $bb1; +$aa1102: + $p := 1102; + goto $bb1; +$aa1103: + $p := 1103; + goto $bb1; +$aa1104: + $p := 1104; + goto $bb1; +$aa1105: + $p := 1105; + goto $bb1; +$aa1106: + $p := 1106; + goto $bb1; +$aa1107: + $p := 1107; + goto $bb1; +$aa1108: + $p := 1108; + goto $bb1; +$aa1109: + $p := 1109; + goto $bb1; +$aa1110: + $p := 1110; + goto $bb1; +$aa1111: + $p := 1111; + goto $bb1; +$aa1112: + $p := 1112; + goto $bb1; +$aa1113: + $p := 1113; + goto $bb1; +$aa1114: + $p := 1114; + goto $bb1; +$aa1115: + $p := 1115; + goto $bb1; +$aa1116: + $p := 1116; + goto $bb1; +$aa1117: + $p := 1117; + goto $bb1; +$aa1118: + $p := 1118; + goto $bb1; +$aa1119: + $p := 1119; + goto $bb1; +$aa1120: + $p := 1120; + goto $bb1; +$aa1121: + $p := 1121; + goto $bb1; +$aa1122: + $p := 1122; + goto $bb1; +$aa1123: + $p := 1123; + goto $bb1; +$aa1124: + $p := 1124; + goto $bb1; +$aa1125: + $p := 1125; + goto $bb1; +$aa1126: + $p := 1126; + goto $bb1; +$aa1127: + $p := 1127; + goto $bb1; +$aa1128: + $p := 1128; + goto $bb1; +$aa1129: + $p := 1129; + goto $bb1; +$aa1130: + $p := 1130; + goto $bb1; +$aa1131: + $p := 1131; + goto $bb1; +$aa1132: + $p := 1132; + goto $bb1; +$aa1133: + $p := 1133; + goto $bb1; +$aa1134: + $p := 1134; + goto $bb1; +$aa1135: + $p := 1135; + goto $bb1; +$aa1136: + $p := 1136; + goto $bb1; +$aa1137: + $p := 1137; + goto $bb1; +$aa1138: + $p := 1138; + goto $bb1; +$aa1139: + $p := 1139; + goto $bb1; +$aa1140: + $p := 1140; + goto $bb1; +$aa1141: + $p := 1141; + goto $bb1; +$aa1142: + $p := 1142; + goto $bb1; +$aa1143: + $p := 1143; + goto $bb1; +$aa1144: + $p := 1144; + goto $bb1; +$aa1145: + $p := 1145; + goto $bb1; +$aa1146: + $p := 1146; + goto $bb1; +$aa1147: + $p := 1147; + goto $bb1; +$aa1148: + $p := 1148; + goto $bb1; +$aa1149: + $p := 1149; + goto $bb1; +$aa1150: + $p := 1150; + goto $bb1; +$aa1151: + $p := 1151; + goto $bb1; +$aa1152: + $p := 1152; + goto $bb1; +$aa1153: + $p := 1153; + goto $bb1; +$aa1154: + $p := 1154; + goto $bb1; +$aa1155: + $p := 1155; + goto $bb1; +$aa1156: + $p := 1156; + goto $bb1; +$aa1157: + $p := 1157; + goto $bb1; +$aa1158: + $p := 1158; + goto $bb1; +$aa1159: + $p := 1159; + goto $bb1; +$aa1160: + $p := 1160; + goto $bb1; +$aa1161: + $p := 1161; + goto $bb1; +$aa1162: + $p := 1162; + goto $bb1; +$aa1163: + $p := 1163; + goto $bb1; +$aa1164: + $p := 1164; + goto $bb1; +$aa1165: + $p := 1165; + goto $bb1; +$aa1166: + $p := 1166; + goto $bb1; +$aa1167: + $p := 1167; + goto $bb1; +$aa1168: + $p := 1168; + goto $bb1; +$aa1169: + $p := 1169; + goto $bb1; +$aa1170: + $p := 1170; + goto $bb1; +$aa1171: + $p := 1171; + goto $bb1; +$aa1172: + $p := 1172; + goto $bb1; +$aa1173: + $p := 1173; + goto $bb1; +$aa1174: + $p := 1174; + goto $bb1; +$aa1175: + $p := 1175; + goto $bb1; +$aa1176: + $p := 1176; + goto $bb1; +$aa1177: + $p := 1177; + goto $bb1; +$aa1178: + $p := 1178; + goto $bb1; +$aa1179: + $p := 1179; + goto $bb1; +$aa1180: + $p := 1180; + goto $bb1; +$aa1181: + $p := 1181; + goto $bb1; +$aa1182: + $p := 1182; + goto $bb1; +$aa1183: + $p := 1183; + goto $bb1; +$aa1184: + $p := 1184; + goto $bb1; +$aa1185: + $p := 1185; + goto $bb1; +$aa1186: + $p := 1186; + goto $bb1; +$aa1187: + $p := 1187; + goto $bb1; +$aa1188: + $p := 1188; + goto $bb1; +$aa1189: + $p := 1189; + goto $bb1; +$aa1190: + $p := 1190; + goto $bb1; +$aa1191: + $p := 1191; + goto $bb1; +$aa1192: + $p := 1192; + goto $bb1; +$aa1193: + $p := 1193; + goto $bb1; +$aa1194: + $p := 1194; + goto $bb1; +$aa1195: + $p := 1195; + goto $bb1; +$aa1196: + $p := 1196; + goto $bb1; +$aa1197: + $p := 1197; + goto $bb1; +$aa1198: + $p := 1198; + goto $bb1; +$aa1199: + $p := 1199; + goto $bb1; +$aa1200: + $p := 1200; + goto $bb1; +$aa1201: + $p := 1201; + goto $bb1; +$aa1202: + $p := 1202; + goto $bb1; +$aa1203: + $p := 1203; + goto $bb1; +$aa1204: + $p := 1204; + goto $bb1; +$aa1205: + $p := 1205; + goto $bb1; +$aa1206: + $p := 1206; + goto $bb1; +$aa1207: + $p := 1207; + goto $bb1; +$aa1208: + $p := 1208; + goto $bb1; +$aa1209: + $p := 1209; + goto $bb1; +$aa1210: + $p := 1210; + goto $bb1; +$aa1211: + $p := 1211; + goto $bb1; +$aa1212: + $p := 1212; + goto $bb1; +$aa1213: + $p := 1213; + goto $bb1; +$aa1214: + $p := 1214; + goto $bb1; +$aa1215: + $p := 1215; + goto $bb1; +$aa1216: + $p := 1216; + goto $bb1; +$aa1217: + $p := 1217; + goto $bb1; +$aa1218: + $p := 1218; + goto $bb1; +$aa1219: + $p := 1219; + goto $bb1; +$aa1220: + $p := 1220; + goto $bb1; +$aa1221: + $p := 1221; + goto $bb1; +$aa1222: + $p := 1222; + goto $bb1; +$aa1223: + $p := 1223; + goto $bb1; +$aa1224: + $p := 1224; + goto $bb1; +$aa1225: + $p := 1225; + goto $bb1; +$aa1226: + $p := 1226; + goto $bb1; +$aa1227: + $p := 1227; + goto $bb1; +$aa1228: + $p := 1228; + goto $bb1; +$aa1229: + $p := 1229; + goto $bb1; +$aa1230: + $p := 1230; + goto $bb1; +$aa1231: + $p := 1231; + goto $bb1; +$aa1232: + $p := 1232; + goto $bb1; +$aa1233: + $p := 1233; + goto $bb1; +$aa1234: + $p := 1234; + goto $bb1; +$aa1235: + $p := 1235; + goto $bb1; +$aa1236: + $p := 1236; + goto $bb1; +$aa1237: + $p := 1237; + goto $bb1; +$aa1238: + $p := 1238; + goto $bb1; +$aa1239: + $p := 1239; + goto $bb1; +$aa1240: + $p := 1240; + goto $bb1; +$aa1241: + $p := 1241; + goto $bb1; +$aa1242: + $p := 1242; + goto $bb1; +$aa1243: + $p := 1243; + goto $bb1; +$aa1244: + $p := 1244; + goto $bb1; +$aa1245: + $p := 1245; + goto $bb1; +$aa1246: + $p := 1246; + goto $bb1; +$aa1247: + $p := 1247; + goto $bb1; +$aa1248: + $p := 1248; + goto $bb1; +$aa1249: + $p := 1249; + goto $bb1; +$aa1250: + $p := 1250; + goto $bb1; +$aa1251: + $p := 1251; + goto $bb1; +$aa1252: + $p := 1252; + goto $bb1; +$aa1253: + $p := 1253; + goto $bb1; +$aa1254: + $p := 1254; + goto $bb1; +$aa1255: + $p := 1255; + goto $bb1; +$aa1256: + $p := 1256; + goto $bb1; +$aa1257: + $p := 1257; + goto $bb1; +$aa1258: + $p := 1258; + goto $bb1; +$aa1259: + $p := 1259; + goto $bb1; +$aa1260: + $p := 1260; + goto $bb1; +$aa1261: + $p := 1261; + goto $bb1; +$aa1262: + $p := 1262; + goto $bb1; +$aa1263: + $p := 1263; + goto $bb1; +$aa1264: + $p := 1264; + goto $bb1; +$aa1265: + $p := 1265; + goto $bb1; +$aa1266: + $p := 1266; + goto $bb1; +$aa1267: + $p := 1267; + goto $bb1; +$aa1268: + $p := 1268; + goto $bb1; +$aa1269: + $p := 1269; + goto $bb1; +$aa1270: + $p := 1270; + goto $bb1; +$aa1271: + $p := 1271; + goto $bb1; +$aa1272: + $p := 1272; + goto $bb1; +$aa1273: + $p := 1273; + goto $bb1; +$aa1274: + $p := 1274; + goto $bb1; +$aa1275: + $p := 1275; + goto $bb1; +$aa1276: + $p := 1276; + goto $bb1; +$aa1277: + $p := 1277; + goto $bb1; +$aa1278: + $p := 1278; + goto $bb1; +$aa1279: + $p := 1279; + goto $bb1; +$aa1280: + $p := 1280; + goto $bb1; +$aa1281: + $p := 1281; + goto $bb1; +$aa1282: + $p := 1282; + goto $bb1; +$aa1283: + $p := 1283; + goto $bb1; +$aa1284: + $p := 1284; + goto $bb1; +$aa1285: + $p := 1285; + goto $bb1; +$aa1286: + $p := 1286; + goto $bb1; +$aa1287: + $p := 1287; + goto $bb1; +$aa1288: + $p := 1288; + goto $bb1; +$aa1289: + $p := 1289; + goto $bb1; +$aa1290: + $p := 1290; + goto $bb1; +$aa1291: + $p := 1291; + goto $bb1; +$aa1292: + $p := 1292; + goto $bb1; +$aa1293: + $p := 1293; + goto $bb1; +$aa1294: + $p := 1294; + goto $bb1; +$aa1295: + $p := 1295; + goto $bb1; +$aa1296: + $p := 1296; + goto $bb1; +$aa1297: + $p := 1297; + goto $bb1; +$aa1298: + $p := 1298; + goto $bb1; +$aa1299: + $p := 1299; + goto $bb1; +$aa1300: + $p := 1300; + goto $bb1; +$aa1301: + $p := 1301; + goto $bb1; +$aa1302: + $p := 1302; + goto $bb1; +$aa1303: + $p := 1303; + goto $bb1; +$aa1304: + $p := 1304; + goto $bb1; +$aa1305: + $p := 1305; + goto $bb1; +$aa1306: + $p := 1306; + goto $bb1; +$aa1307: + $p := 1307; + goto $bb1; +$aa1308: + $p := 1308; + goto $bb1; +$aa1309: + $p := 1309; + goto $bb1; +$aa1310: + $p := 1310; + goto $bb1; +$aa1311: + $p := 1311; + goto $bb1; +$aa1312: + $p := 1312; + goto $bb1; +$aa1313: + $p := 1313; + goto $bb1; +$aa1314: + $p := 1314; + goto $bb1; +$aa1315: + $p := 1315; + goto $bb1; +$aa1316: + $p := 1316; + goto $bb1; +$aa1317: + $p := 1317; + goto $bb1; +$aa1318: + $p := 1318; + goto $bb1; +$aa1319: + $p := 1319; + goto $bb1; +$aa1320: + $p := 1320; + goto $bb1; +$aa1321: + $p := 1321; + goto $bb1; +$aa1322: + $p := 1322; + goto $bb1; +$aa1323: + $p := 1323; + goto $bb1; +$aa1324: + $p := 1324; + goto $bb1; +$aa1325: + $p := 1325; + goto $bb1; +$aa1326: + $p := 1326; + goto $bb1; +$aa1327: + $p := 1327; + goto $bb1; +$aa1328: + $p := 1328; + goto $bb1; +$aa1329: + $p := 1329; + goto $bb1; +$aa1330: + $p := 1330; + goto $bb1; +$aa1331: + $p := 1331; + goto $bb1; +$aa1332: + $p := 1332; + goto $bb1; +$aa1333: + $p := 1333; + goto $bb1; +$aa1334: + $p := 1334; + goto $bb1; +$aa1335: + $p := 1335; + goto $bb1; +$aa1336: + $p := 1336; + goto $bb1; +$aa1337: + $p := 1337; + goto $bb1; +$aa1338: + $p := 1338; + goto $bb1; +$aa1339: + $p := 1339; + goto $bb1; +$aa1340: + $p := 1340; + goto $bb1; +$aa1341: + $p := 1341; + goto $bb1; +$aa1342: + $p := 1342; + goto $bb1; +$aa1343: + $p := 1343; + goto $bb1; +$aa1344: + $p := 1344; + goto $bb1; +$aa1345: + $p := 1345; + goto $bb1; +$aa1346: + $p := 1346; + goto $bb1; +$aa1347: + $p := 1347; + goto $bb1; +$aa1348: + $p := 1348; + goto $bb1; +$aa1349: + $p := 1349; + goto $bb1; +$aa1350: + $p := 1350; + goto $bb1; +$aa1351: + $p := 1351; + goto $bb1; +$aa1352: + $p := 1352; + goto $bb1; +$aa1353: + $p := 1353; + goto $bb1; +$aa1354: + $p := 1354; + goto $bb1; +$aa1355: + $p := 1355; + goto $bb1; +$aa1356: + $p := 1356; + goto $bb1; +$aa1357: + $p := 1357; + goto $bb1; +$aa1358: + $p := 1358; + goto $bb1; +$aa1359: + $p := 1359; + goto $bb1; +$aa1360: + $p := 1360; + goto $bb1; +$aa1361: + $p := 1361; + goto $bb1; +$aa1362: + $p := 1362; + goto $bb1; +$aa1363: + $p := 1363; + goto $bb1; +$aa1364: + $p := 1364; + goto $bb1; +$aa1365: + $p := 1365; + goto $bb1; +$aa1366: + $p := 1366; + goto $bb1; +$aa1367: + $p := 1367; + goto $bb1; +$aa1368: + $p := 1368; + goto $bb1; +$aa1369: + $p := 1369; + goto $bb1; +$aa1370: + $p := 1370; + goto $bb1; +$aa1371: + $p := 1371; + goto $bb1; +$aa1372: + $p := 1372; + goto $bb1; +$aa1373: + $p := 1373; + goto $bb1; +$aa1374: + $p := 1374; + goto $bb1; +$aa1375: + $p := 1375; + goto $bb1; +$aa1376: + $p := 1376; + goto $bb1; +$aa1377: + $p := 1377; + goto $bb1; +$aa1378: + $p := 1378; + goto $bb1; +$aa1379: + $p := 1379; + goto $bb1; +$aa1380: + $p := 1380; + goto $bb1; +$aa1381: + $p := 1381; + goto $bb1; +$aa1382: + $p := 1382; + goto $bb1; +$aa1383: + $p := 1383; + goto $bb1; +$aa1384: + $p := 1384; + goto $bb1; +$aa1385: + $p := 1385; + goto $bb1; +$aa1386: + $p := 1386; + goto $bb1; +$aa1387: + $p := 1387; + goto $bb1; +$aa1388: + $p := 1388; + goto $bb1; +$aa1389: + $p := 1389; + goto $bb1; +$aa1390: + $p := 1390; + goto $bb1; +$aa1391: + $p := 1391; + goto $bb1; +$aa1392: + $p := 1392; + goto $bb1; +$aa1393: + $p := 1393; + goto $bb1; +$aa1394: + $p := 1394; + goto $bb1; +$aa1395: + $p := 1395; + goto $bb1; +$aa1396: + $p := 1396; + goto $bb1; +$aa1397: + $p := 1397; + goto $bb1; +$aa1398: + $p := 1398; + goto $bb1; +$aa1399: + $p := 1399; + goto $bb1; +$aa1400: + $p := 1400; + goto $bb1; +$aa1401: + $p := 1401; + goto $bb1; +$aa1402: + $p := 1402; + goto $bb1; +$aa1403: + $p := 1403; + goto $bb1; +$aa1404: + $p := 1404; + goto $bb1; +$aa1405: + $p := 1405; + goto $bb1; +$aa1406: + $p := 1406; + goto $bb1; +$aa1407: + $p := 1407; + goto $bb1; +$aa1408: + $p := 1408; + goto $bb1; +$aa1409: + $p := 1409; + goto $bb1; +$aa1410: + $p := 1410; + goto $bb1; +$aa1411: + $p := 1411; + goto $bb1; +$aa1412: + $p := 1412; + goto $bb1; +$aa1413: + $p := 1413; + goto $bb1; +$aa1414: + $p := 1414; + goto $bb1; +$aa1415: + $p := 1415; + goto $bb1; +$aa1416: + $p := 1416; + goto $bb1; +$aa1417: + $p := 1417; + goto $bb1; +$aa1418: + $p := 1418; + goto $bb1; +$aa1419: + $p := 1419; + goto $bb1; +$aa1420: + $p := 1420; + goto $bb1; +$aa1421: + $p := 1421; + goto $bb1; +$aa1422: + $p := 1422; + goto $bb1; +$aa1423: + $p := 1423; + goto $bb1; +$aa1424: + $p := 1424; + goto $bb1; +$aa1425: + $p := 1425; + goto $bb1; +$aa1426: + $p := 1426; + goto $bb1; +$aa1427: + $p := 1427; + goto $bb1; +$aa1428: + $p := 1428; + goto $bb1; +$aa1429: + $p := 1429; + goto $bb1; +$aa1430: + $p := 1430; + goto $bb1; +$aa1431: + $p := 1431; + goto $bb1; +$aa1432: + $p := 1432; + goto $bb1; +$aa1433: + $p := 1433; + goto $bb1; +$aa1434: + $p := 1434; + goto $bb1; +$aa1435: + $p := 1435; + goto $bb1; +$aa1436: + $p := 1436; + goto $bb1; +$aa1437: + $p := 1437; + goto $bb1; +$aa1438: + $p := 1438; + goto $bb1; +$aa1439: + $p := 1439; + goto $bb1; +$aa1440: + $p := 1440; + goto $bb1; +$aa1441: + $p := 1441; + goto $bb1; +$aa1442: + $p := 1442; + goto $bb1; +$aa1443: + $p := 1443; + goto $bb1; +$aa1444: + $p := 1444; + goto $bb1; +$aa1445: + $p := 1445; + goto $bb1; +$aa1446: + $p := 1446; + goto $bb1; +$aa1447: + $p := 1447; + goto $bb1; +$aa1448: + $p := 1448; + goto $bb1; +$aa1449: + $p := 1449; + goto $bb1; +$aa1450: + $p := 1450; + goto $bb1; +$aa1451: + $p := 1451; + goto $bb1; +$aa1452: + $p := 1452; + goto $bb1; +$aa1453: + $p := 1453; + goto $bb1; +$aa1454: + $p := 1454; + goto $bb1; +$aa1455: + $p := 1455; + goto $bb1; +$aa1456: + $p := 1456; + goto $bb1; +$aa1457: + $p := 1457; + goto $bb1; +$aa1458: + $p := 1458; + goto $bb1; +$aa1459: + $p := 1459; + goto $bb1; +$aa1460: + $p := 1460; + goto $bb1; +$aa1461: + $p := 1461; + goto $bb1; +$aa1462: + $p := 1462; + goto $bb1; +$aa1463: + $p := 1463; + goto $bb1; +$aa1464: + $p := 1464; + goto $bb1; +$aa1465: + $p := 1465; + goto $bb1; +$aa1466: + $p := 1466; + goto $bb1; +$aa1467: + $p := 1467; + goto $bb1; +$aa1468: + $p := 1468; + goto $bb1; +$aa1469: + $p := 1469; + goto $bb1; +$aa1470: + $p := 1470; + goto $bb1; +$aa1471: + $p := 1471; + goto $bb1; +$aa1472: + $p := 1472; + goto $bb1; +$aa1473: + $p := 1473; + goto $bb1; +$aa1474: + $p := 1474; + goto $bb1; +$aa1475: + $p := 1475; + goto $bb1; +$aa1476: + $p := 1476; + goto $bb1; +$aa1477: + $p := 1477; + goto $bb1; +$aa1478: + $p := 1478; + goto $bb1; +$aa1479: + $p := 1479; + goto $bb1; +$aa1480: + $p := 1480; + goto $bb1; +$aa1481: + $p := 1481; + goto $bb1; +$aa1482: + $p := 1482; + goto $bb1; +$aa1483: + $p := 1483; + goto $bb1; +$aa1484: + $p := 1484; + goto $bb1; +$aa1485: + $p := 1485; + goto $bb1; +$aa1486: + $p := 1486; + goto $bb1; +$aa1487: + $p := 1487; + goto $bb1; +$aa1488: + $p := 1488; + goto $bb1; +$aa1489: + $p := 1489; + goto $bb1; +$aa1490: + $p := 1490; + goto $bb1; +$aa1491: + $p := 1491; + goto $bb1; +$aa1492: + $p := 1492; + goto $bb1; +$aa1493: + $p := 1493; + goto $bb1; +$aa1494: + $p := 1494; + goto $bb1; +$aa1495: + $p := 1495; + goto $bb1; +$aa1496: + $p := 1496; + goto $bb1; +$aa1497: + $p := 1497; + goto $bb1; +$aa1498: + $p := 1498; + goto $bb1; +$aa1499: + $p := 1499; + goto $bb1; +$aa1500: + $p := 1500; + goto $bb1; +$aa1501: + $p := 1501; + goto $bb1; +$aa1502: + $p := 1502; + goto $bb1; +$aa1503: + $p := 1503; + goto $bb1; +$aa1504: + $p := 1504; + goto $bb1; +$aa1505: + $p := 1505; + goto $bb1; +$aa1506: + $p := 1506; + goto $bb1; +$aa1507: + $p := 1507; + goto $bb1; +$aa1508: + $p := 1508; + goto $bb1; +$aa1509: + $p := 1509; + goto $bb1; +$aa1510: + $p := 1510; + goto $bb1; +$aa1511: + $p := 1511; + goto $bb1; +$aa1512: + $p := 1512; + goto $bb1; +$aa1513: + $p := 1513; + goto $bb1; +$aa1514: + $p := 1514; + goto $bb1; +$aa1515: + $p := 1515; + goto $bb1; +$aa1516: + $p := 1516; + goto $bb1; +$aa1517: + $p := 1517; + goto $bb1; +$aa1518: + $p := 1518; + goto $bb1; +$aa1519: + $p := 1519; + goto $bb1; +$aa1520: + $p := 1520; + goto $bb1; +$aa1521: + $p := 1521; + goto $bb1; +$aa1522: + $p := 1522; + goto $bb1; +$aa1523: + $p := 1523; + goto $bb1; +$aa1524: + $p := 1524; + goto $bb1; +$aa1525: + $p := 1525; + goto $bb1; +$aa1526: + $p := 1526; + goto $bb1; +$aa1527: + $p := 1527; + goto $bb1; +$aa1528: + $p := 1528; + goto $bb1; +$aa1529: + $p := 1529; + goto $bb1; +$aa1530: + $p := 1530; + goto $bb1; +$aa1531: + $p := 1531; + goto $bb1; +$aa1532: + $p := 1532; + goto $bb1; +$aa1533: + $p := 1533; + goto $bb1; +$aa1534: + $p := 1534; + goto $bb1; +$aa1535: + $p := 1535; + goto $bb1; +$aa1536: + $p := 1536; + goto $bb1; +$aa1537: + $p := 1537; + goto $bb1; +$aa1538: + $p := 1538; + goto $bb1; +$aa1539: + $p := 1539; + goto $bb1; +$aa1540: + $p := 1540; + goto $bb1; +$aa1541: + $p := 1541; + goto $bb1; +$aa1542: + $p := 1542; + goto $bb1; +$aa1543: + $p := 1543; + goto $bb1; +$aa1544: + $p := 1544; + goto $bb1; +$aa1545: + $p := 1545; + goto $bb1; +$aa1546: + $p := 1546; + goto $bb1; +$aa1547: + $p := 1547; + goto $bb1; +$aa1548: + $p := 1548; + goto $bb1; +$aa1549: + $p := 1549; + goto $bb1; +$aa1550: + $p := 1550; + goto $bb1; +$aa1551: + $p := 1551; + goto $bb1; +$aa1552: + $p := 1552; + goto $bb1; +$aa1553: + $p := 1553; + goto $bb1; +$aa1554: + $p := 1554; + goto $bb1; +$aa1555: + $p := 1555; + goto $bb1; +$aa1556: + $p := 1556; + goto $bb1; +$aa1557: + $p := 1557; + goto $bb1; +$aa1558: + $p := 1558; + goto $bb1; +$aa1559: + $p := 1559; + goto $bb1; +$aa1560: + $p := 1560; + goto $bb1; +$aa1561: + $p := 1561; + goto $bb1; +$aa1562: + $p := 1562; + goto $bb1; +$aa1563: + $p := 1563; + goto $bb1; +$aa1564: + $p := 1564; + goto $bb1; +$aa1565: + $p := 1565; + goto $bb1; +$aa1566: + $p := 1566; + goto $bb1; +$aa1567: + $p := 1567; + goto $bb1; +$aa1568: + $p := 1568; + goto $bb1; +$aa1569: + $p := 1569; + goto $bb1; +$aa1570: + $p := 1570; + goto $bb1; +$aa1571: + $p := 1571; + goto $bb1; +$aa1572: + $p := 1572; + goto $bb1; +$aa1573: + $p := 1573; + goto $bb1; +$aa1574: + $p := 1574; + goto $bb1; +$aa1575: + $p := 1575; + goto $bb1; +$aa1576: + $p := 1576; + goto $bb1; +$aa1577: + $p := 1577; + goto $bb1; +$aa1578: + $p := 1578; + goto $bb1; +$aa1579: + $p := 1579; + goto $bb1; +$aa1580: + $p := 1580; + goto $bb1; +$aa1581: + $p := 1581; + goto $bb1; +$aa1582: + $p := 1582; + goto $bb1; +$aa1583: + $p := 1583; + goto $bb1; +$aa1584: + $p := 1584; + goto $bb1; +$aa1585: + $p := 1585; + goto $bb1; +$aa1586: + $p := 1586; + goto $bb1; +$aa1587: + $p := 1587; + goto $bb1; +$aa1588: + $p := 1588; + goto $bb1; +$aa1589: + $p := 1589; + goto $bb1; +$aa1590: + $p := 1590; + goto $bb1; +$aa1591: + $p := 1591; + goto $bb1; +$aa1592: + $p := 1592; + goto $bb1; +$aa1593: + $p := 1593; + goto $bb1; +$aa1594: + $p := 1594; + goto $bb1; +$aa1595: + $p := 1595; + goto $bb1; +$aa1596: + $p := 1596; + goto $bb1; +$aa1597: + $p := 1597; + goto $bb1; +$aa1598: + $p := 1598; + goto $bb1; +$aa1599: + $p := 1599; + goto $bb1; +$aa1600: + $p := 1600; + goto $bb1; +$aa1601: + $p := 1601; + goto $bb1; +$aa1602: + $p := 1602; + goto $bb1; +$aa1603: + $p := 1603; + goto $bb1; +$aa1604: + $p := 1604; + goto $bb1; +$aa1605: + $p := 1605; + goto $bb1; +$aa1606: + $p := 1606; + goto $bb1; +$aa1607: + $p := 1607; + goto $bb1; +$aa1608: + $p := 1608; + goto $bb1; +$aa1609: + $p := 1609; + goto $bb1; +$aa1610: + $p := 1610; + goto $bb1; +$aa1611: + $p := 1611; + goto $bb1; +$aa1612: + $p := 1612; + goto $bb1; +$aa1613: + $p := 1613; + goto $bb1; +$aa1614: + $p := 1614; + goto $bb1; +$aa1615: + $p := 1615; + goto $bb1; +$aa1616: + $p := 1616; + goto $bb1; +$aa1617: + $p := 1617; + goto $bb1; +$aa1618: + $p := 1618; + goto $bb1; +$aa1619: + $p := 1619; + goto $bb1; +$aa1620: + $p := 1620; + goto $bb1; +$aa1621: + $p := 1621; + goto $bb1; +$aa1622: + $p := 1622; + goto $bb1; +$aa1623: + $p := 1623; + goto $bb1; +$aa1624: + $p := 1624; + goto $bb1; +$aa1625: + $p := 1625; + goto $bb1; +$aa1626: + $p := 1626; + goto $bb1; +$aa1627: + $p := 1627; + goto $bb1; +$aa1628: + $p := 1628; + goto $bb1; +$aa1629: + $p := 1629; + goto $bb1; +$aa1630: + $p := 1630; + goto $bb1; +$aa1631: + $p := 1631; + goto $bb1; +$aa1632: + $p := 1632; + goto $bb1; +$aa1633: + $p := 1633; + goto $bb1; +$aa1634: + $p := 1634; + goto $bb1; +$aa1635: + $p := 1635; + goto $bb1; +$aa1636: + $p := 1636; + goto $bb1; +$aa1637: + $p := 1637; + goto $bb1; +$aa1638: + $p := 1638; + goto $bb1; +$aa1639: + $p := 1639; + goto $bb1; +$aa1640: + $p := 1640; + goto $bb1; +$aa1641: + $p := 1641; + goto $bb1; +$aa1642: + $p := 1642; + goto $bb1; +$aa1643: + $p := 1643; + goto $bb1; +$aa1644: + $p := 1644; + goto $bb1; +$aa1645: + $p := 1645; + goto $bb1; +$aa1646: + $p := 1646; + goto $bb1; +$aa1647: + $p := 1647; + goto $bb1; +$aa1648: + $p := 1648; + goto $bb1; +$aa1649: + $p := 1649; + goto $bb1; +$aa1650: + $p := 1650; + goto $bb1; +$aa1651: + $p := 1651; + goto $bb1; +$aa1652: + $p := 1652; + goto $bb1; +$aa1653: + $p := 1653; + goto $bb1; +$aa1654: + $p := 1654; + goto $bb1; +$aa1655: + $p := 1655; + goto $bb1; +$aa1656: + $p := 1656; + goto $bb1; +$aa1657: + $p := 1657; + goto $bb1; +$aa1658: + $p := 1658; + goto $bb1; +$aa1659: + $p := 1659; + goto $bb1; +$aa1660: + $p := 1660; + goto $bb1; +$aa1661: + $p := 1661; + goto $bb1; +$aa1662: + $p := 1662; + goto $bb1; +$aa1663: + $p := 1663; + goto $bb1; +$aa1664: + $p := 1664; + goto $bb1; +$aa1665: + $p := 1665; + goto $bb1; +$aa1666: + $p := 1666; + goto $bb1; +$aa1667: + $p := 1667; + goto $bb1; +$aa1668: + $p := 1668; + goto $bb1; +$aa1669: + $p := 1669; + goto $bb1; +$aa1670: + $p := 1670; + goto $bb1; +$aa1671: + $p := 1671; + goto $bb1; +$aa1672: + $p := 1672; + goto $bb1; +$aa1673: + $p := 1673; + goto $bb1; +$aa1674: + $p := 1674; + goto $bb1; +$aa1675: + $p := 1675; + goto $bb1; +$aa1676: + $p := 1676; + goto $bb1; +$aa1677: + $p := 1677; + goto $bb1; +$aa1678: + $p := 1678; + goto $bb1; +$aa1679: + $p := 1679; + goto $bb1; +$aa1680: + $p := 1680; + goto $bb1; +$aa1681: + $p := 1681; + goto $bb1; +$aa1682: + $p := 1682; + goto $bb1; +$aa1683: + $p := 1683; + goto $bb1; +$aa1684: + $p := 1684; + goto $bb1; +$aa1685: + $p := 1685; + goto $bb1; +$aa1686: + $p := 1686; + goto $bb1; +$aa1687: + $p := 1687; + goto $bb1; +$aa1688: + $p := 1688; + goto $bb1; +$aa1689: + $p := 1689; + goto $bb1; +$aa1690: + $p := 1690; + goto $bb1; +$aa1691: + $p := 1691; + goto $bb1; +$aa1692: + $p := 1692; + goto $bb1; +$aa1693: + $p := 1693; + goto $bb1; +$aa1694: + $p := 1694; + goto $bb1; +$aa1695: + $p := 1695; + goto $bb1; +$aa1696: + $p := 1696; + goto $bb1; +$aa1697: + $p := 1697; + goto $bb1; +$aa1698: + $p := 1698; + goto $bb1; +$aa1699: + $p := 1699; + goto $bb1; +$aa1700: + $p := 1700; + goto $bb1; +$aa1701: + $p := 1701; + goto $bb1; +$aa1702: + $p := 1702; + goto $bb1; +$aa1703: + $p := 1703; + goto $bb1; +$aa1704: + $p := 1704; + goto $bb1; +$aa1705: + $p := 1705; + goto $bb1; +$aa1706: + $p := 1706; + goto $bb1; +$aa1707: + $p := 1707; + goto $bb1; +$aa1708: + $p := 1708; + goto $bb1; +$aa1709: + $p := 1709; + goto $bb1; +$aa1710: + $p := 1710; + goto $bb1; +$aa1711: + $p := 1711; + goto $bb1; +$aa1712: + $p := 1712; + goto $bb1; +$aa1713: + $p := 1713; + goto $bb1; +$aa1714: + $p := 1714; + goto $bb1; +$aa1715: + $p := 1715; + goto $bb1; +$aa1716: + $p := 1716; + goto $bb1; +$aa1717: + $p := 1717; + goto $bb1; +$aa1718: + $p := 1718; + goto $bb1; +$aa1719: + $p := 1719; + goto $bb1; +$aa1720: + $p := 1720; + goto $bb1; +$aa1721: + $p := 1721; + goto $bb1; +$aa1722: + $p := 1722; + goto $bb1; +$aa1723: + $p := 1723; + goto $bb1; +$aa1724: + $p := 1724; + goto $bb1; +$aa1725: + $p := 1725; + goto $bb1; +$aa1726: + $p := 1726; + goto $bb1; +$aa1727: + $p := 1727; + goto $bb1; +$aa1728: + $p := 1728; + goto $bb1; +$aa1729: + $p := 1729; + goto $bb1; +$aa1730: + $p := 1730; + goto $bb1; +$aa1731: + $p := 1731; + goto $bb1; +$aa1732: + $p := 1732; + goto $bb1; +$aa1733: + $p := 1733; + goto $bb1; +$aa1734: + $p := 1734; + goto $bb1; +$aa1735: + $p := 1735; + goto $bb1; +$aa1736: + $p := 1736; + goto $bb1; +$aa1737: + $p := 1737; + goto $bb1; +$aa1738: + $p := 1738; + goto $bb1; +$aa1739: + $p := 1739; + goto $bb1; +$aa1740: + $p := 1740; + goto $bb1; +$aa1741: + $p := 1741; + goto $bb1; +$aa1742: + $p := 1742; + goto $bb1; +$aa1743: + $p := 1743; + goto $bb1; +$aa1744: + $p := 1744; + goto $bb1; +$aa1745: + $p := 1745; + goto $bb1; +$aa1746: + $p := 1746; + goto $bb1; +$aa1747: + $p := 1747; + goto $bb1; +$aa1748: + $p := 1748; + goto $bb1; +$aa1749: + $p := 1749; + goto $bb1; +$aa1750: + $p := 1750; + goto $bb1; +$aa1751: + $p := 1751; + goto $bb1; +$aa1752: + $p := 1752; + goto $bb1; +$aa1753: + $p := 1753; + goto $bb1; +$aa1754: + $p := 1754; + goto $bb1; +$aa1755: + $p := 1755; + goto $bb1; +$aa1756: + $p := 1756; + goto $bb1; +$aa1757: + $p := 1757; + goto $bb1; +$aa1758: + $p := 1758; + goto $bb1; +$aa1759: + $p := 1759; + goto $bb1; +$aa1760: + $p := 1760; + goto $bb1; +$aa1761: + $p := 1761; + goto $bb1; +$aa1762: + $p := 1762; + goto $bb1; +$aa1763: + $p := 1763; + goto $bb1; +$aa1764: + $p := 1764; + goto $bb1; +$aa1765: + $p := 1765; + goto $bb1; +$aa1766: + $p := 1766; + goto $bb1; +$aa1767: + $p := 1767; + goto $bb1; +$aa1768: + $p := 1768; + goto $bb1; +$aa1769: + $p := 1769; + goto $bb1; +$aa1770: + $p := 1770; + goto $bb1; +$aa1771: + $p := 1771; + goto $bb1; +$aa1772: + $p := 1772; + goto $bb1; +$aa1773: + $p := 1773; + goto $bb1; +$aa1774: + $p := 1774; + goto $bb1; +$aa1775: + $p := 1775; + goto $bb1; +$aa1776: + $p := 1776; + goto $bb1; +$aa1777: + $p := 1777; + goto $bb1; +$aa1778: + $p := 1778; + goto $bb1; +$aa1779: + $p := 1779; + goto $bb1; +$aa1780: + $p := 1780; + goto $bb1; +$aa1781: + $p := 1781; + goto $bb1; +$aa1782: + $p := 1782; + goto $bb1; +$aa1783: + $p := 1783; + goto $bb1; +$aa1784: + $p := 1784; + goto $bb1; +$aa1785: + $p := 1785; + goto $bb1; +$aa1786: + $p := 1786; + goto $bb1; +$aa1787: + $p := 1787; + goto $bb1; +$aa1788: + $p := 1788; + goto $bb1; +$aa1789: + $p := 1789; + goto $bb1; +$aa1790: + $p := 1790; + goto $bb1; +$aa1791: + $p := 1791; + goto $bb1; +$aa1792: + $p := 1792; + goto $bb1; +$aa1793: + $p := 1793; + goto $bb1; +$aa1794: + $p := 1794; + goto $bb1; +$aa1795: + $p := 1795; + goto $bb1; +$aa1796: + $p := 1796; + goto $bb1; +$aa1797: + $p := 1797; + goto $bb1; +$aa1798: + $p := 1798; + goto $bb1; +$aa1799: + $p := 1799; + goto $bb1; +$aa1800: + $p := 1800; + goto $bb1; +$aa1801: + $p := 1801; + goto $bb1; +$aa1802: + $p := 1802; + goto $bb1; +$aa1803: + $p := 1803; + goto $bb1; +$aa1804: + $p := 1804; + goto $bb1; +$aa1805: + $p := 1805; + goto $bb1; +$aa1806: + $p := 1806; + goto $bb1; +$aa1807: + $p := 1807; + goto $bb1; +$aa1808: + $p := 1808; + goto $bb1; +$aa1809: + $p := 1809; + goto $bb1; +$aa1810: + $p := 1810; + goto $bb1; +$aa1811: + $p := 1811; + goto $bb1; +$aa1812: + $p := 1812; + goto $bb1; +$aa1813: + $p := 1813; + goto $bb1; +$aa1814: + $p := 1814; + goto $bb1; +$aa1815: + $p := 1815; + goto $bb1; +$aa1816: + $p := 1816; + goto $bb1; +$aa1817: + $p := 1817; + goto $bb1; +$aa1818: + $p := 1818; + goto $bb1; +$aa1819: + $p := 1819; + goto $bb1; +$aa1820: + $p := 1820; + goto $bb1; +$aa1821: + $p := 1821; + goto $bb1; +$aa1822: + $p := 1822; + goto $bb1; +$aa1823: + $p := 1823; + goto $bb1; +$aa1824: + $p := 1824; + goto $bb1; +$aa1825: + $p := 1825; + goto $bb1; +$aa1826: + $p := 1826; + goto $bb1; +$aa1827: + $p := 1827; + goto $bb1; +$aa1828: + $p := 1828; + goto $bb1; +$aa1829: + $p := 1829; + goto $bb1; +$aa1830: + $p := 1830; + goto $bb1; +$aa1831: + $p := 1831; + goto $bb1; +$aa1832: + $p := 1832; + goto $bb1; +$aa1833: + $p := 1833; + goto $bb1; +$aa1834: + $p := 1834; + goto $bb1; +$aa1835: + $p := 1835; + goto $bb1; +$aa1836: + $p := 1836; + goto $bb1; +$aa1837: + $p := 1837; + goto $bb1; +$aa1838: + $p := 1838; + goto $bb1; +$aa1839: + $p := 1839; + goto $bb1; +$aa1840: + $p := 1840; + goto $bb1; +$aa1841: + $p := 1841; + goto $bb1; +$aa1842: + $p := 1842; + goto $bb1; +$aa1843: + $p := 1843; + goto $bb1; +$aa1844: + $p := 1844; + goto $bb1; +$aa1845: + $p := 1845; + goto $bb1; +$aa1846: + $p := 1846; + goto $bb1; +$aa1847: + $p := 1847; + goto $bb1; +$aa1848: + $p := 1848; + goto $bb1; +$aa1849: + $p := 1849; + goto $bb1; +$aa1850: + $p := 1850; + goto $bb1; +$aa1851: + $p := 1851; + goto $bb1; +$aa1852: + $p := 1852; + goto $bb1; +$aa1853: + $p := 1853; + goto $bb1; +$aa1854: + $p := 1854; + goto $bb1; +$aa1855: + $p := 1855; + goto $bb1; +$aa1856: + $p := 1856; + goto $bb1; +$aa1857: + $p := 1857; + goto $bb1; +$aa1858: + $p := 1858; + goto $bb1; +$aa1859: + $p := 1859; + goto $bb1; +$aa1860: + $p := 1860; + goto $bb1; +$aa1861: + $p := 1861; + goto $bb1; +$aa1862: + $p := 1862; + goto $bb1; +$aa1863: + $p := 1863; + goto $bb1; +$aa1864: + $p := 1864; + goto $bb1; +$aa1865: + $p := 1865; + goto $bb1; +$aa1866: + $p := 1866; + goto $bb1; +$aa1867: + $p := 1867; + goto $bb1; +$aa1868: + $p := 1868; + goto $bb1; +$aa1869: + $p := 1869; + goto $bb1; +$aa1870: + $p := 1870; + goto $bb1; +$aa1871: + $p := 1871; + goto $bb1; +$aa1872: + $p := 1872; + goto $bb1; +$aa1873: + $p := 1873; + goto $bb1; +$aa1874: + $p := 1874; + goto $bb1; +$aa1875: + $p := 1875; + goto $bb1; +$aa1876: + $p := 1876; + goto $bb1; +$aa1877: + $p := 1877; + goto $bb1; +$aa1878: + $p := 1878; + goto $bb1; +$aa1879: + $p := 1879; + goto $bb1; +$aa1880: + $p := 1880; + goto $bb1; +$aa1881: + $p := 1881; + goto $bb1; +$aa1882: + $p := 1882; + goto $bb1; +$aa1883: + $p := 1883; + goto $bb1; +$aa1884: + $p := 1884; + goto $bb1; +$aa1885: + $p := 1885; + goto $bb1; +$aa1886: + $p := 1886; + goto $bb1; +$aa1887: + $p := 1887; + goto $bb1; +$aa1888: + $p := 1888; + goto $bb1; +$aa1889: + $p := 1889; + goto $bb1; +$aa1890: + $p := 1890; + goto $bb1; +$aa1891: + $p := 1891; + goto $bb1; +$aa1892: + $p := 1892; + goto $bb1; +$aa1893: + $p := 1893; + goto $bb1; +$aa1894: + $p := 1894; + goto $bb1; +$aa1895: + $p := 1895; + goto $bb1; +$aa1896: + $p := 1896; + goto $bb1; +$aa1897: + $p := 1897; + goto $bb1; +$aa1898: + $p := 1898; + goto $bb1; +$aa1899: + $p := 1899; + goto $bb1; +$aa1900: + $p := 1900; + goto $bb1; +$aa1901: + $p := 1901; + goto $bb1; +$aa1902: + $p := 1902; + goto $bb1; +$aa1903: + $p := 1903; + goto $bb1; +$aa1904: + $p := 1904; + goto $bb1; +$aa1905: + $p := 1905; + goto $bb1; +$aa1906: + $p := 1906; + goto $bb1; +$aa1907: + $p := 1907; + goto $bb1; +$aa1908: + $p := 1908; + goto $bb1; +$aa1909: + $p := 1909; + goto $bb1; +$aa1910: + $p := 1910; + goto $bb1; +$aa1911: + $p := 1911; + goto $bb1; +$aa1912: + $p := 1912; + goto $bb1; +$aa1913: + $p := 1913; + goto $bb1; +$aa1914: + $p := 1914; + goto $bb1; +$aa1915: + $p := 1915; + goto $bb1; +$aa1916: + $p := 1916; + goto $bb1; +$aa1917: + $p := 1917; + goto $bb1; +$aa1918: + $p := 1918; + goto $bb1; +$aa1919: + $p := 1919; + goto $bb1; +$aa1920: + $p := 1920; + goto $bb1; +$aa1921: + $p := 1921; + goto $bb1; +$aa1922: + $p := 1922; + goto $bb1; +$aa1923: + $p := 1923; + goto $bb1; +$aa1924: + $p := 1924; + goto $bb1; +$aa1925: + $p := 1925; + goto $bb1; +$aa1926: + $p := 1926; + goto $bb1; +$aa1927: + $p := 1927; + goto $bb1; +$aa1928: + $p := 1928; + goto $bb1; +$aa1929: + $p := 1929; + goto $bb1; +$aa1930: + $p := 1930; + goto $bb1; +$aa1931: + $p := 1931; + goto $bb1; +$aa1932: + $p := 1932; + goto $bb1; +$aa1933: + $p := 1933; + goto $bb1; +$aa1934: + $p := 1934; + goto $bb1; +$aa1935: + $p := 1935; + goto $bb1; +$aa1936: + $p := 1936; + goto $bb1; +$aa1937: + $p := 1937; + goto $bb1; +$aa1938: + $p := 1938; + goto $bb1; +$aa1939: + $p := 1939; + goto $bb1; +$aa1940: + $p := 1940; + goto $bb1; +$aa1941: + $p := 1941; + goto $bb1; +$aa1942: + $p := 1942; + goto $bb1; +$aa1943: + $p := 1943; + goto $bb1; +$aa1944: + $p := 1944; + goto $bb1; +$aa1945: + $p := 1945; + goto $bb1; +$aa1946: + $p := 1946; + goto $bb1; +$aa1947: + $p := 1947; + goto $bb1; +$aa1948: + $p := 1948; + goto $bb1; +$aa1949: + $p := 1949; + goto $bb1; +$aa1950: + $p := 1950; + goto $bb1; +$aa1951: + $p := 1951; + goto $bb1; +$aa1952: + $p := 1952; + goto $bb1; +$aa1953: + $p := 1953; + goto $bb1; +$aa1954: + $p := 1954; + goto $bb1; +$aa1955: + $p := 1955; + goto $bb1; +$aa1956: + $p := 1956; + goto $bb1; +$aa1957: + $p := 1957; + goto $bb1; +$aa1958: + $p := 1958; + goto $bb1; +$aa1959: + $p := 1959; + goto $bb1; +$aa1960: + $p := 1960; + goto $bb1; +$aa1961: + $p := 1961; + goto $bb1; +$aa1962: + $p := 1962; + goto $bb1; +$aa1963: + $p := 1963; + goto $bb1; +$aa1964: + $p := 1964; + goto $bb1; +$aa1965: + $p := 1965; + goto $bb1; +$aa1966: + $p := 1966; + goto $bb1; +$aa1967: + $p := 1967; + goto $bb1; +$aa1968: + $p := 1968; + goto $bb1; +$aa1969: + $p := 1969; + goto $bb1; +$aa1970: + $p := 1970; + goto $bb1; +$aa1971: + $p := 1971; + goto $bb1; +$aa1972: + $p := 1972; + goto $bb1; +$aa1973: + $p := 1973; + goto $bb1; +$aa1974: + $p := 1974; + goto $bb1; +$aa1975: + $p := 1975; + goto $bb1; +$aa1976: + $p := 1976; + goto $bb1; +$aa1977: + $p := 1977; + goto $bb1; +$aa1978: + $p := 1978; + goto $bb1; +$aa1979: + $p := 1979; + goto $bb1; +$aa1980: + $p := 1980; + goto $bb1; +$aa1981: + $p := 1981; + goto $bb1; +$aa1982: + $p := 1982; + goto $bb1; +$aa1983: + $p := 1983; + goto $bb1; +$aa1984: + $p := 1984; + goto $bb1; +$aa1985: + $p := 1985; + goto $bb1; +$aa1986: + $p := 1986; + goto $bb1; +$aa1987: + $p := 1987; + goto $bb1; +$aa1988: + $p := 1988; + goto $bb1; +$aa1989: + $p := 1989; + goto $bb1; +$aa1990: + $p := 1990; + goto $bb1; +$aa1991: + $p := 1991; + goto $bb1; +$aa1992: + $p := 1992; + goto $bb1; +$aa1993: + $p := 1993; + goto $bb1; +$aa1994: + $p := 1994; + goto $bb1; +$aa1995: + $p := 1995; + goto $bb1; +$aa1996: + $p := 1996; + goto $bb1; +$aa1997: + $p := 1997; + goto $bb1; +$aa1998: + $p := 1998; + goto $bb1; +$aa1999: + $p := 1999; + goto $bb1; +$aa2000: + $p := 2000; + goto $bb1; +$aa2001: + $p := 2001; + goto $bb1; +$aa2002: + $p := 2002; + goto $bb1; +$aa2003: + $p := 2003; + goto $bb1; +$aa2004: + $p := 2004; + goto $bb1; +$aa2005: + $p := 2005; + goto $bb1; +$aa2006: + $p := 2006; + goto $bb1; +$aa2007: + $p := 2007; + goto $bb1; +$aa2008: + $p := 2008; + goto $bb1; +$aa2009: + $p := 2009; + goto $bb1; +$aa2010: + $p := 2010; + goto $bb1; +$aa2011: + $p := 2011; + goto $bb1; +$aa2012: + $p := 2012; + goto $bb1; +$aa2013: + $p := 2013; + goto $bb1; +$aa2014: + $p := 2014; + goto $bb1; +$aa2015: + $p := 2015; + goto $bb1; +$aa2016: + $p := 2016; + goto $bb1; +$aa2017: + $p := 2017; + goto $bb1; +$aa2018: + $p := 2018; + goto $bb1; +$aa2019: + $p := 2019; + goto $bb1; +$aa2020: + $p := 2020; + goto $bb1; +$aa2021: + $p := 2021; + goto $bb1; +$aa2022: + $p := 2022; + goto $bb1; +$aa2023: + $p := 2023; + goto $bb1; +$aa2024: + $p := 2024; + goto $bb1; +$aa2025: + $p := 2025; + goto $bb1; +$aa2026: + $p := 2026; + goto $bb1; +$aa2027: + $p := 2027; + goto $bb1; +$aa2028: + $p := 2028; + goto $bb1; +$aa2029: + $p := 2029; + goto $bb1; +$aa2030: + $p := 2030; + goto $bb1; +$aa2031: + $p := 2031; + goto $bb1; +$aa2032: + $p := 2032; + goto $bb1; +$aa2033: + $p := 2033; + goto $bb1; +$aa2034: + $p := 2034; + goto $bb1; +$aa2035: + $p := 2035; + goto $bb1; +$aa2036: + $p := 2036; + goto $bb1; +$aa2037: + $p := 2037; + goto $bb1; +$aa2038: + $p := 2038; + goto $bb1; +$aa2039: + $p := 2039; + goto $bb1; +$aa2040: + $p := 2040; + goto $bb1; +$aa2041: + $p := 2041; + goto $bb1; +$aa2042: + $p := 2042; + goto $bb1; +$aa2043: + $p := 2043; + goto $bb1; +$aa2044: + $p := 2044; + goto $bb1; +$aa2045: + $p := 2045; + goto $bb1; +$aa2046: + $p := 2046; + goto $bb1; +$aa2047: + $p := 2047; + goto $bb1; +$aa2048: + $p := 2048; + goto $bb1; +$bb1: + assert b0($p); + //$b := $sge($p, $p1); + goto $bb2, $bb3; +$bb2: + $p6 := $add(1, $p); + $p := $p6; + goto $bb1; +$bb3: + $c1 := ($p > 0); + assert $c1; + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; diff --git a/bench_horn_ice/samples_shrink_big_numbers_4096.bpl b/bench_horn_ice/samples_shrink_big_numbers_4096.bpl new file mode 100644 index 000000000..f367b2fdd --- /dev/null +++ b/bench_horn_ice/samples_shrink_big_numbers_4096.bpl @@ -0,0 +1,12473 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $p: int; + var $b: bool; + var $b2: bool; + var $c1: bool; + var $c2: bool; + var $p3: int; + var $p4: int; + var $p5: int; + var $p6: int; + var $v1: int; + var $v2: int; + +$bb0: + goto $aa1, $aa2, $aa3, $aa4, $aa5, $aa6, $aa7, $aa8, $aa9, $aa10, $aa11, $aa12, $aa13, $aa14, $aa15, $aa16, $aa17, $aa18, $aa19, $aa20, $aa21, $aa22, $aa23, $aa24, $aa25, $aa26, $aa27, $aa28, $aa29, $aa30, $aa31, $aa32, $aa33, $aa34, $aa35, $aa36, $aa37, $aa38, $aa39, $aa40, $aa41, $aa42, $aa43, $aa44, $aa45, $aa46, $aa47, $aa48, $aa49, $aa50, $aa51, $aa52, $aa53, $aa54, $aa55, $aa56, $aa57, $aa58, $aa59, $aa60, $aa61, $aa62, $aa63, $aa64, $aa65, $aa66, $aa67, $aa68, $aa69, $aa70, $aa71, $aa72, $aa73, $aa74, $aa75, $aa76, $aa77, $aa78, $aa79, $aa80, $aa81, $aa82, $aa83, $aa84, $aa85, $aa86, $aa87, $aa88, $aa89, $aa90, $aa91, $aa92, $aa93, $aa94, $aa95, $aa96, $aa97, $aa98, $aa99, $aa100, $aa101, $aa102, $aa103, $aa104, $aa105, $aa106, $aa107, $aa108, $aa109, $aa110, $aa111, $aa112, $aa113, $aa114, $aa115, $aa116, $aa117, $aa118, $aa119, $aa120, $aa121, $aa122, $aa123, $aa124, $aa125, $aa126, $aa127, $aa128, $aa129, $aa130, $aa131, $aa132, $aa133, $aa134, $aa135, $aa136, $aa137, $aa138, $aa139, $aa140, $aa141, $aa142, $aa143, $aa144, $aa145, $aa146, $aa147, $aa148, $aa149, $aa150, $aa151, $aa152, $aa153, $aa154, $aa155, $aa156, $aa157, $aa158, $aa159, $aa160, $aa161, $aa162, $aa163, $aa164, $aa165, $aa166, $aa167, $aa168, $aa169, $aa170, $aa171, $aa172, $aa173, $aa174, $aa175, $aa176, $aa177, $aa178, $aa179, $aa180, $aa181, $aa182, $aa183, $aa184, $aa185, $aa186, $aa187, $aa188, $aa189, $aa190, $aa191, $aa192, $aa193, $aa194, $aa195, $aa196, $aa197, $aa198, $aa199, $aa200, $aa201, $aa202, $aa203, $aa204, $aa205, $aa206, $aa207, $aa208, $aa209, $aa210, $aa211, $aa212, $aa213, $aa214, $aa215, $aa216, $aa217, $aa218, $aa219, $aa220, $aa221, $aa222, $aa223, $aa224, $aa225, $aa226, $aa227, $aa228, $aa229, $aa230, $aa231, $aa232, $aa233, $aa234, $aa235, $aa236, $aa237, $aa238, $aa239, $aa240, $aa241, $aa242, $aa243, $aa244, $aa245, $aa246, $aa247, $aa248, $aa249, $aa250, $aa251, $aa252, $aa253, $aa254, $aa255, $aa256, $aa257, $aa258, $aa259, $aa260, $aa261, $aa262, $aa263, $aa264, $aa265, $aa266, $aa267, $aa268, $aa269, $aa270, $aa271, $aa272, $aa273, $aa274, $aa275, $aa276, $aa277, $aa278, $aa279, $aa280, $aa281, $aa282, $aa283, $aa284, $aa285, $aa286, $aa287, $aa288, $aa289, $aa290, $aa291, $aa292, $aa293, $aa294, $aa295, $aa296, $aa297, $aa298, $aa299, $aa300, $aa301, $aa302, $aa303, $aa304, $aa305, $aa306, $aa307, $aa308, $aa309, $aa310, $aa311, $aa312, $aa313, $aa314, $aa315, $aa316, $aa317, $aa318, $aa319, $aa320, $aa321, $aa322, $aa323, $aa324, $aa325, $aa326, $aa327, $aa328, $aa329, $aa330, $aa331, $aa332, $aa333, $aa334, $aa335, $aa336, $aa337, $aa338, $aa339, $aa340, $aa341, $aa342, $aa343, $aa344, $aa345, $aa346, $aa347, $aa348, $aa349, $aa350, $aa351, $aa352, $aa353, $aa354, $aa355, $aa356, $aa357, $aa358, $aa359, $aa360, $aa361, $aa362, $aa363, $aa364, $aa365, $aa366, $aa367, $aa368, $aa369, $aa370, $aa371, $aa372, $aa373, $aa374, $aa375, $aa376, $aa377, $aa378, $aa379, $aa380, $aa381, $aa382, $aa383, $aa384, $aa385, $aa386, $aa387, $aa388, $aa389, $aa390, $aa391, $aa392, $aa393, $aa394, $aa395, $aa396, $aa397, $aa398, $aa399, $aa400, $aa401, $aa402, $aa403, $aa404, $aa405, $aa406, $aa407, $aa408, $aa409, $aa410, $aa411, $aa412, $aa413, $aa414, $aa415, $aa416, $aa417, $aa418, $aa419, $aa420, $aa421, $aa422, $aa423, $aa424, $aa425, $aa426, $aa427, $aa428, $aa429, $aa430, $aa431, $aa432, $aa433, $aa434, $aa435, $aa436, $aa437, $aa438, $aa439, $aa440, $aa441, $aa442, $aa443, $aa444, $aa445, $aa446, $aa447, $aa448, $aa449, $aa450, $aa451, $aa452, $aa453, $aa454, $aa455, $aa456, $aa457, $aa458, $aa459, $aa460, $aa461, $aa462, $aa463, $aa464, $aa465, $aa466, $aa467, $aa468, $aa469, $aa470, $aa471, $aa472, $aa473, $aa474, $aa475, $aa476, $aa477, $aa478, $aa479, $aa480, $aa481, $aa482, $aa483, $aa484, $aa485, $aa486, $aa487, $aa488, $aa489, $aa490, $aa491, $aa492, $aa493, $aa494, $aa495, $aa496, $aa497, $aa498, $aa499, $aa500, $aa501, $aa502, $aa503, $aa504, $aa505, $aa506, $aa507, $aa508, $aa509, $aa510, $aa511, $aa512, $aa513, $aa514, $aa515, $aa516, $aa517, $aa518, $aa519, $aa520, $aa521, $aa522, $aa523, $aa524, $aa525, $aa526, $aa527, $aa528, $aa529, $aa530, $aa531, $aa532, $aa533, $aa534, $aa535, $aa536, $aa537, $aa538, $aa539, $aa540, $aa541, $aa542, $aa543, $aa544, $aa545, $aa546, $aa547, $aa548, $aa549, $aa550, $aa551, $aa552, $aa553, $aa554, $aa555, $aa556, $aa557, $aa558, $aa559, $aa560, $aa561, $aa562, $aa563, $aa564, $aa565, $aa566, $aa567, $aa568, $aa569, $aa570, $aa571, $aa572, $aa573, $aa574, $aa575, $aa576, $aa577, $aa578, $aa579, $aa580, $aa581, $aa582, $aa583, $aa584, $aa585, $aa586, $aa587, $aa588, $aa589, $aa590, $aa591, $aa592, $aa593, $aa594, $aa595, $aa596, $aa597, $aa598, $aa599, $aa600, $aa601, $aa602, $aa603, $aa604, $aa605, $aa606, $aa607, $aa608, $aa609, $aa610, $aa611, $aa612, $aa613, $aa614, $aa615, $aa616, $aa617, $aa618, $aa619, $aa620, $aa621, $aa622, $aa623, $aa624, $aa625, $aa626, $aa627, $aa628, $aa629, $aa630, $aa631, $aa632, $aa633, $aa634, $aa635, $aa636, $aa637, $aa638, $aa639, $aa640, $aa641, $aa642, $aa643, $aa644, $aa645, $aa646, $aa647, $aa648, $aa649, $aa650, $aa651, $aa652, $aa653, $aa654, $aa655, $aa656, $aa657, $aa658, $aa659, $aa660, $aa661, $aa662, $aa663, $aa664, $aa665, $aa666, $aa667, $aa668, $aa669, $aa670, $aa671, $aa672, $aa673, $aa674, $aa675, $aa676, $aa677, $aa678, $aa679, $aa680, $aa681, $aa682, $aa683, $aa684, $aa685, $aa686, $aa687, $aa688, $aa689, $aa690, $aa691, $aa692, $aa693, $aa694, $aa695, $aa696, $aa697, $aa698, $aa699, $aa700, $aa701, $aa702, $aa703, $aa704, $aa705, $aa706, $aa707, $aa708, $aa709, $aa710, $aa711, $aa712, $aa713, $aa714, $aa715, $aa716, $aa717, $aa718, $aa719, $aa720, $aa721, $aa722, $aa723, $aa724, $aa725, $aa726, $aa727, $aa728, $aa729, $aa730, $aa731, $aa732, $aa733, $aa734, $aa735, $aa736, $aa737, $aa738, $aa739, $aa740, $aa741, $aa742, $aa743, $aa744, $aa745, $aa746, $aa747, $aa748, $aa749, $aa750, $aa751, $aa752, $aa753, $aa754, $aa755, $aa756, $aa757, $aa758, $aa759, $aa760, $aa761, $aa762, $aa763, $aa764, $aa765, $aa766, $aa767, $aa768, $aa769, $aa770, $aa771, $aa772, $aa773, $aa774, $aa775, $aa776, $aa777, $aa778, $aa779, $aa780, $aa781, $aa782, $aa783, $aa784, $aa785, $aa786, $aa787, $aa788, $aa789, $aa790, $aa791, $aa792, $aa793, $aa794, $aa795, $aa796, $aa797, $aa798, $aa799, $aa800, $aa801, $aa802, $aa803, $aa804, $aa805, $aa806, $aa807, $aa808, $aa809, $aa810, $aa811, $aa812, $aa813, $aa814, $aa815, $aa816, $aa817, $aa818, $aa819, $aa820, $aa821, $aa822, $aa823, $aa824, $aa825, $aa826, $aa827, $aa828, $aa829, $aa830, $aa831, $aa832, $aa833, $aa834, $aa835, $aa836, $aa837, $aa838, $aa839, $aa840, $aa841, $aa842, $aa843, $aa844, $aa845, $aa846, $aa847, $aa848, $aa849, $aa850, $aa851, $aa852, $aa853, $aa854, $aa855, $aa856, $aa857, $aa858, $aa859, $aa860, $aa861, $aa862, $aa863, $aa864, $aa865, $aa866, $aa867, $aa868, $aa869, $aa870, $aa871, $aa872, $aa873, $aa874, $aa875, $aa876, $aa877, $aa878, $aa879, $aa880, $aa881, $aa882, $aa883, $aa884, $aa885, $aa886, $aa887, $aa888, $aa889, $aa890, $aa891, $aa892, $aa893, $aa894, $aa895, $aa896, $aa897, $aa898, $aa899, $aa900, $aa901, $aa902, $aa903, $aa904, $aa905, $aa906, $aa907, $aa908, $aa909, $aa910, $aa911, $aa912, $aa913, $aa914, $aa915, $aa916, $aa917, $aa918, $aa919, $aa920, $aa921, $aa922, $aa923, $aa924, $aa925, $aa926, $aa927, $aa928, $aa929, $aa930, $aa931, $aa932, $aa933, $aa934, $aa935, $aa936, $aa937, $aa938, $aa939, $aa940, $aa941, $aa942, $aa943, $aa944, $aa945, $aa946, $aa947, $aa948, $aa949, $aa950, $aa951, $aa952, $aa953, $aa954, $aa955, $aa956, $aa957, $aa958, $aa959, $aa960, $aa961, $aa962, $aa963, $aa964, $aa965, $aa966, $aa967, $aa968, $aa969, $aa970, $aa971, $aa972, $aa973, $aa974, $aa975, $aa976, $aa977, $aa978, $aa979, $aa980, $aa981, $aa982, $aa983, $aa984, $aa985, $aa986, $aa987, $aa988, $aa989, $aa990, $aa991, $aa992, $aa993, $aa994, $aa995, $aa996, $aa997, $aa998, $aa999, $aa1000, $aa1001, $aa1002, $aa1003, $aa1004, $aa1005, $aa1006, $aa1007, $aa1008, $aa1009, $aa1010, $aa1011, $aa1012, $aa1013, $aa1014, $aa1015, $aa1016, $aa1017, $aa1018, $aa1019, $aa1020, $aa1021, $aa1022, $aa1023, $aa1024, $aa1025, $aa1026, $aa1027, $aa1028, $aa1029, $aa1030, $aa1031, $aa1032, $aa1033, $aa1034, $aa1035, $aa1036, $aa1037, $aa1038, $aa1039, $aa1040, $aa1041, $aa1042, $aa1043, $aa1044, $aa1045, $aa1046, $aa1047, $aa1048, $aa1049, $aa1050, $aa1051, $aa1052, $aa1053, $aa1054, $aa1055, $aa1056, $aa1057, $aa1058, $aa1059, $aa1060, $aa1061, $aa1062, $aa1063, $aa1064, $aa1065, $aa1066, $aa1067, $aa1068, $aa1069, $aa1070, $aa1071, $aa1072, $aa1073, $aa1074, $aa1075, $aa1076, $aa1077, $aa1078, $aa1079, $aa1080, $aa1081, $aa1082, $aa1083, $aa1084, $aa1085, $aa1086, $aa1087, $aa1088, $aa1089, $aa1090, $aa1091, $aa1092, $aa1093, $aa1094, $aa1095, $aa1096, $aa1097, $aa1098, $aa1099, $aa1100, $aa1101, $aa1102, $aa1103, $aa1104, $aa1105, $aa1106, $aa1107, $aa1108, $aa1109, $aa1110, $aa1111, $aa1112, $aa1113, $aa1114, $aa1115, $aa1116, $aa1117, $aa1118, $aa1119, $aa1120, $aa1121, $aa1122, $aa1123, $aa1124, $aa1125, $aa1126, $aa1127, $aa1128, $aa1129, $aa1130, $aa1131, $aa1132, $aa1133, $aa1134, $aa1135, $aa1136, $aa1137, $aa1138, $aa1139, $aa1140, $aa1141, $aa1142, $aa1143, $aa1144, $aa1145, $aa1146, $aa1147, $aa1148, $aa1149, $aa1150, $aa1151, $aa1152, $aa1153, $aa1154, $aa1155, $aa1156, $aa1157, $aa1158, $aa1159, $aa1160, $aa1161, $aa1162, $aa1163, $aa1164, $aa1165, $aa1166, $aa1167, $aa1168, $aa1169, $aa1170, $aa1171, $aa1172, $aa1173, $aa1174, $aa1175, $aa1176, $aa1177, $aa1178, $aa1179, $aa1180, $aa1181, $aa1182, $aa1183, $aa1184, $aa1185, $aa1186, $aa1187, $aa1188, $aa1189, $aa1190, $aa1191, $aa1192, $aa1193, $aa1194, $aa1195, $aa1196, $aa1197, $aa1198, $aa1199, $aa1200, $aa1201, $aa1202, $aa1203, $aa1204, $aa1205, $aa1206, $aa1207, $aa1208, $aa1209, $aa1210, $aa1211, $aa1212, $aa1213, $aa1214, $aa1215, $aa1216, $aa1217, $aa1218, $aa1219, $aa1220, $aa1221, $aa1222, $aa1223, $aa1224, $aa1225, $aa1226, $aa1227, $aa1228, $aa1229, $aa1230, $aa1231, $aa1232, $aa1233, $aa1234, $aa1235, $aa1236, $aa1237, $aa1238, $aa1239, $aa1240, $aa1241, $aa1242, $aa1243, $aa1244, $aa1245, $aa1246, $aa1247, $aa1248, $aa1249, $aa1250, $aa1251, $aa1252, $aa1253, $aa1254, $aa1255, $aa1256, $aa1257, $aa1258, $aa1259, $aa1260, $aa1261, $aa1262, $aa1263, $aa1264, $aa1265, $aa1266, $aa1267, $aa1268, $aa1269, $aa1270, $aa1271, $aa1272, $aa1273, $aa1274, $aa1275, $aa1276, $aa1277, $aa1278, $aa1279, $aa1280, $aa1281, $aa1282, $aa1283, $aa1284, $aa1285, $aa1286, $aa1287, $aa1288, $aa1289, $aa1290, $aa1291, $aa1292, $aa1293, $aa1294, $aa1295, $aa1296, $aa1297, $aa1298, $aa1299, $aa1300, $aa1301, $aa1302, $aa1303, $aa1304, $aa1305, $aa1306, $aa1307, $aa1308, $aa1309, $aa1310, $aa1311, $aa1312, $aa1313, $aa1314, $aa1315, $aa1316, $aa1317, $aa1318, $aa1319, $aa1320, $aa1321, $aa1322, $aa1323, $aa1324, $aa1325, $aa1326, $aa1327, $aa1328, $aa1329, $aa1330, $aa1331, $aa1332, $aa1333, $aa1334, $aa1335, $aa1336, $aa1337, $aa1338, $aa1339, $aa1340, $aa1341, $aa1342, $aa1343, $aa1344, $aa1345, $aa1346, $aa1347, $aa1348, $aa1349, $aa1350, $aa1351, $aa1352, $aa1353, $aa1354, $aa1355, $aa1356, $aa1357, $aa1358, $aa1359, $aa1360, $aa1361, $aa1362, $aa1363, $aa1364, $aa1365, $aa1366, $aa1367, $aa1368, $aa1369, $aa1370, $aa1371, $aa1372, $aa1373, $aa1374, $aa1375, $aa1376, $aa1377, $aa1378, $aa1379, $aa1380, $aa1381, $aa1382, $aa1383, $aa1384, $aa1385, $aa1386, $aa1387, $aa1388, $aa1389, $aa1390, $aa1391, $aa1392, $aa1393, $aa1394, $aa1395, $aa1396, $aa1397, $aa1398, $aa1399, $aa1400, $aa1401, $aa1402, $aa1403, $aa1404, $aa1405, $aa1406, $aa1407, $aa1408, $aa1409, $aa1410, $aa1411, $aa1412, $aa1413, $aa1414, $aa1415, $aa1416, $aa1417, $aa1418, $aa1419, $aa1420, $aa1421, $aa1422, $aa1423, $aa1424, $aa1425, $aa1426, $aa1427, $aa1428, $aa1429, $aa1430, $aa1431, $aa1432, $aa1433, $aa1434, $aa1435, $aa1436, $aa1437, $aa1438, $aa1439, $aa1440, $aa1441, $aa1442, $aa1443, $aa1444, $aa1445, $aa1446, $aa1447, $aa1448, $aa1449, $aa1450, $aa1451, $aa1452, $aa1453, $aa1454, $aa1455, $aa1456, $aa1457, $aa1458, $aa1459, $aa1460, $aa1461, $aa1462, $aa1463, $aa1464, $aa1465, $aa1466, $aa1467, $aa1468, $aa1469, $aa1470, $aa1471, $aa1472, $aa1473, $aa1474, $aa1475, $aa1476, $aa1477, $aa1478, $aa1479, $aa1480, $aa1481, $aa1482, $aa1483, $aa1484, $aa1485, $aa1486, $aa1487, $aa1488, $aa1489, $aa1490, $aa1491, $aa1492, $aa1493, $aa1494, $aa1495, $aa1496, $aa1497, $aa1498, $aa1499, $aa1500, $aa1501, $aa1502, $aa1503, $aa1504, $aa1505, $aa1506, $aa1507, $aa1508, $aa1509, $aa1510, $aa1511, $aa1512, $aa1513, $aa1514, $aa1515, $aa1516, $aa1517, $aa1518, $aa1519, $aa1520, $aa1521, $aa1522, $aa1523, $aa1524, $aa1525, $aa1526, $aa1527, $aa1528, $aa1529, $aa1530, $aa1531, $aa1532, $aa1533, $aa1534, $aa1535, $aa1536, $aa1537, $aa1538, $aa1539, $aa1540, $aa1541, $aa1542, $aa1543, $aa1544, $aa1545, $aa1546, $aa1547, $aa1548, $aa1549, $aa1550, $aa1551, $aa1552, $aa1553, $aa1554, $aa1555, $aa1556, $aa1557, $aa1558, $aa1559, $aa1560, $aa1561, $aa1562, $aa1563, $aa1564, $aa1565, $aa1566, $aa1567, $aa1568, $aa1569, $aa1570, $aa1571, $aa1572, $aa1573, $aa1574, $aa1575, $aa1576, $aa1577, $aa1578, $aa1579, $aa1580, $aa1581, $aa1582, $aa1583, $aa1584, $aa1585, $aa1586, $aa1587, $aa1588, $aa1589, $aa1590, $aa1591, $aa1592, $aa1593, $aa1594, $aa1595, $aa1596, $aa1597, $aa1598, $aa1599, $aa1600, $aa1601, $aa1602, $aa1603, $aa1604, $aa1605, $aa1606, $aa1607, $aa1608, $aa1609, $aa1610, $aa1611, $aa1612, $aa1613, $aa1614, $aa1615, $aa1616, $aa1617, $aa1618, $aa1619, $aa1620, $aa1621, $aa1622, $aa1623, $aa1624, $aa1625, $aa1626, $aa1627, $aa1628, $aa1629, $aa1630, $aa1631, $aa1632, $aa1633, $aa1634, $aa1635, $aa1636, $aa1637, $aa1638, $aa1639, $aa1640, $aa1641, $aa1642, $aa1643, $aa1644, $aa1645, $aa1646, $aa1647, $aa1648, $aa1649, $aa1650, $aa1651, $aa1652, $aa1653, $aa1654, $aa1655, $aa1656, $aa1657, $aa1658, $aa1659, $aa1660, $aa1661, $aa1662, $aa1663, $aa1664, $aa1665, $aa1666, $aa1667, $aa1668, $aa1669, $aa1670, $aa1671, $aa1672, $aa1673, $aa1674, $aa1675, $aa1676, $aa1677, $aa1678, $aa1679, $aa1680, $aa1681, $aa1682, $aa1683, $aa1684, $aa1685, $aa1686, $aa1687, $aa1688, $aa1689, $aa1690, $aa1691, $aa1692, $aa1693, $aa1694, $aa1695, $aa1696, $aa1697, $aa1698, $aa1699, $aa1700, $aa1701, $aa1702, $aa1703, $aa1704, $aa1705, $aa1706, $aa1707, $aa1708, $aa1709, $aa1710, $aa1711, $aa1712, $aa1713, $aa1714, $aa1715, $aa1716, $aa1717, $aa1718, $aa1719, $aa1720, $aa1721, $aa1722, $aa1723, $aa1724, $aa1725, $aa1726, $aa1727, $aa1728, $aa1729, $aa1730, $aa1731, $aa1732, $aa1733, $aa1734, $aa1735, $aa1736, $aa1737, $aa1738, $aa1739, $aa1740, $aa1741, $aa1742, $aa1743, $aa1744, $aa1745, $aa1746, $aa1747, $aa1748, $aa1749, $aa1750, $aa1751, $aa1752, $aa1753, $aa1754, $aa1755, $aa1756, $aa1757, $aa1758, $aa1759, $aa1760, $aa1761, $aa1762, $aa1763, $aa1764, $aa1765, $aa1766, $aa1767, $aa1768, $aa1769, $aa1770, $aa1771, $aa1772, $aa1773, $aa1774, $aa1775, $aa1776, $aa1777, $aa1778, $aa1779, $aa1780, $aa1781, $aa1782, $aa1783, $aa1784, $aa1785, $aa1786, $aa1787, $aa1788, $aa1789, $aa1790, $aa1791, $aa1792, $aa1793, $aa1794, $aa1795, $aa1796, $aa1797, $aa1798, $aa1799, $aa1800, $aa1801, $aa1802, $aa1803, $aa1804, $aa1805, $aa1806, $aa1807, $aa1808, $aa1809, $aa1810, $aa1811, $aa1812, $aa1813, $aa1814, $aa1815, $aa1816, $aa1817, $aa1818, $aa1819, $aa1820, $aa1821, $aa1822, $aa1823, $aa1824, $aa1825, $aa1826, $aa1827, $aa1828, $aa1829, $aa1830, $aa1831, $aa1832, $aa1833, $aa1834, $aa1835, $aa1836, $aa1837, $aa1838, $aa1839, $aa1840, $aa1841, $aa1842, $aa1843, $aa1844, $aa1845, $aa1846, $aa1847, $aa1848, $aa1849, $aa1850, $aa1851, $aa1852, $aa1853, $aa1854, $aa1855, $aa1856, $aa1857, $aa1858, $aa1859, $aa1860, $aa1861, $aa1862, $aa1863, $aa1864, $aa1865, $aa1866, $aa1867, $aa1868, $aa1869, $aa1870, $aa1871, $aa1872, $aa1873, $aa1874, $aa1875, $aa1876, $aa1877, $aa1878, $aa1879, $aa1880, $aa1881, $aa1882, $aa1883, $aa1884, $aa1885, $aa1886, $aa1887, $aa1888, $aa1889, $aa1890, $aa1891, $aa1892, $aa1893, $aa1894, $aa1895, $aa1896, $aa1897, $aa1898, $aa1899, $aa1900, $aa1901, $aa1902, $aa1903, $aa1904, $aa1905, $aa1906, $aa1907, $aa1908, $aa1909, $aa1910, $aa1911, $aa1912, $aa1913, $aa1914, $aa1915, $aa1916, $aa1917, $aa1918, $aa1919, $aa1920, $aa1921, $aa1922, $aa1923, $aa1924, $aa1925, $aa1926, $aa1927, $aa1928, $aa1929, $aa1930, $aa1931, $aa1932, $aa1933, $aa1934, $aa1935, $aa1936, $aa1937, $aa1938, $aa1939, $aa1940, $aa1941, $aa1942, $aa1943, $aa1944, $aa1945, $aa1946, $aa1947, $aa1948, $aa1949, $aa1950, $aa1951, $aa1952, $aa1953, $aa1954, $aa1955, $aa1956, $aa1957, $aa1958, $aa1959, $aa1960, $aa1961, $aa1962, $aa1963, $aa1964, $aa1965, $aa1966, $aa1967, $aa1968, $aa1969, $aa1970, $aa1971, $aa1972, $aa1973, $aa1974, $aa1975, $aa1976, $aa1977, $aa1978, $aa1979, $aa1980, $aa1981, $aa1982, $aa1983, $aa1984, $aa1985, $aa1986, $aa1987, $aa1988, $aa1989, $aa1990, $aa1991, $aa1992, $aa1993, $aa1994, $aa1995, $aa1996, $aa1997, $aa1998, $aa1999, $aa2000, $aa2001, $aa2002, $aa2003, $aa2004, $aa2005, $aa2006, $aa2007, $aa2008, $aa2009, $aa2010, $aa2011, $aa2012, $aa2013, $aa2014, $aa2015, $aa2016, $aa2017, $aa2018, $aa2019, $aa2020, $aa2021, $aa2022, $aa2023, $aa2024, $aa2025, $aa2026, $aa2027, $aa2028, $aa2029, $aa2030, $aa2031, $aa2032, $aa2033, $aa2034, $aa2035, $aa2036, $aa2037, $aa2038, $aa2039, $aa2040, $aa2041, $aa2042, $aa2043, $aa2044, $aa2045, $aa2046, $aa2047, $aa2048, $aa2049, $aa2050, $aa2051, $aa2052, $aa2053, $aa2054, $aa2055, $aa2056, $aa2057, $aa2058, $aa2059, $aa2060, $aa2061, $aa2062, $aa2063, $aa2064, $aa2065, $aa2066, $aa2067, $aa2068, $aa2069, $aa2070, $aa2071, $aa2072, $aa2073, $aa2074, $aa2075, $aa2076, $aa2077, $aa2078, $aa2079, $aa2080, $aa2081, $aa2082, $aa2083, $aa2084, $aa2085, $aa2086, $aa2087, $aa2088, $aa2089, $aa2090, $aa2091, $aa2092, $aa2093, $aa2094, $aa2095, $aa2096, $aa2097, $aa2098, $aa2099, $aa2100, $aa2101, $aa2102, $aa2103, $aa2104, $aa2105, $aa2106, $aa2107, $aa2108, $aa2109, $aa2110, $aa2111, $aa2112, $aa2113, $aa2114, $aa2115, $aa2116, $aa2117, $aa2118, $aa2119, $aa2120, $aa2121, $aa2122, $aa2123, $aa2124, $aa2125, $aa2126, $aa2127, $aa2128, $aa2129, $aa2130, $aa2131, $aa2132, $aa2133, $aa2134, $aa2135, $aa2136, $aa2137, $aa2138, $aa2139, $aa2140, $aa2141, $aa2142, $aa2143, $aa2144, $aa2145, $aa2146, $aa2147, $aa2148, $aa2149, $aa2150, $aa2151, $aa2152, $aa2153, $aa2154, $aa2155, $aa2156, $aa2157, $aa2158, $aa2159, $aa2160, $aa2161, $aa2162, $aa2163, $aa2164, $aa2165, $aa2166, $aa2167, $aa2168, $aa2169, $aa2170, $aa2171, $aa2172, $aa2173, $aa2174, $aa2175, $aa2176, $aa2177, $aa2178, $aa2179, $aa2180, $aa2181, $aa2182, $aa2183, $aa2184, $aa2185, $aa2186, $aa2187, $aa2188, $aa2189, $aa2190, $aa2191, $aa2192, $aa2193, $aa2194, $aa2195, $aa2196, $aa2197, $aa2198, $aa2199, $aa2200, $aa2201, $aa2202, $aa2203, $aa2204, $aa2205, $aa2206, $aa2207, $aa2208, $aa2209, $aa2210, $aa2211, $aa2212, $aa2213, $aa2214, $aa2215, $aa2216, $aa2217, $aa2218, $aa2219, $aa2220, $aa2221, $aa2222, $aa2223, $aa2224, $aa2225, $aa2226, $aa2227, $aa2228, $aa2229, $aa2230, $aa2231, $aa2232, $aa2233, $aa2234, $aa2235, $aa2236, $aa2237, $aa2238, $aa2239, $aa2240, $aa2241, $aa2242, $aa2243, $aa2244, $aa2245, $aa2246, $aa2247, $aa2248, $aa2249, $aa2250, $aa2251, $aa2252, $aa2253, $aa2254, $aa2255, $aa2256, $aa2257, $aa2258, $aa2259, $aa2260, $aa2261, $aa2262, $aa2263, $aa2264, $aa2265, $aa2266, $aa2267, $aa2268, $aa2269, $aa2270, $aa2271, $aa2272, $aa2273, $aa2274, $aa2275, $aa2276, $aa2277, $aa2278, $aa2279, $aa2280, $aa2281, $aa2282, $aa2283, $aa2284, $aa2285, $aa2286, $aa2287, $aa2288, $aa2289, $aa2290, $aa2291, $aa2292, $aa2293, $aa2294, $aa2295, $aa2296, $aa2297, $aa2298, $aa2299, $aa2300, $aa2301, $aa2302, $aa2303, $aa2304, $aa2305, $aa2306, $aa2307, $aa2308, $aa2309, $aa2310, $aa2311, $aa2312, $aa2313, $aa2314, $aa2315, $aa2316, $aa2317, $aa2318, $aa2319, $aa2320, $aa2321, $aa2322, $aa2323, $aa2324, $aa2325, $aa2326, $aa2327, $aa2328, $aa2329, $aa2330, $aa2331, $aa2332, $aa2333, $aa2334, $aa2335, $aa2336, $aa2337, $aa2338, $aa2339, $aa2340, $aa2341, $aa2342, $aa2343, $aa2344, $aa2345, $aa2346, $aa2347, $aa2348, $aa2349, $aa2350, $aa2351, $aa2352, $aa2353, $aa2354, $aa2355, $aa2356, $aa2357, $aa2358, $aa2359, $aa2360, $aa2361, $aa2362, $aa2363, $aa2364, $aa2365, $aa2366, $aa2367, $aa2368, $aa2369, $aa2370, $aa2371, $aa2372, $aa2373, $aa2374, $aa2375, $aa2376, $aa2377, $aa2378, $aa2379, $aa2380, $aa2381, $aa2382, $aa2383, $aa2384, $aa2385, $aa2386, $aa2387, $aa2388, $aa2389, $aa2390, $aa2391, $aa2392, $aa2393, $aa2394, $aa2395, $aa2396, $aa2397, $aa2398, $aa2399, $aa2400, $aa2401, $aa2402, $aa2403, $aa2404, $aa2405, $aa2406, $aa2407, $aa2408, $aa2409, $aa2410, $aa2411, $aa2412, $aa2413, $aa2414, $aa2415, $aa2416, $aa2417, $aa2418, $aa2419, $aa2420, $aa2421, $aa2422, $aa2423, $aa2424, $aa2425, $aa2426, $aa2427, $aa2428, $aa2429, $aa2430, $aa2431, $aa2432, $aa2433, $aa2434, $aa2435, $aa2436, $aa2437, $aa2438, $aa2439, $aa2440, $aa2441, $aa2442, $aa2443, $aa2444, $aa2445, $aa2446, $aa2447, $aa2448, $aa2449, $aa2450, $aa2451, $aa2452, $aa2453, $aa2454, $aa2455, $aa2456, $aa2457, $aa2458, $aa2459, $aa2460, $aa2461, $aa2462, $aa2463, $aa2464, $aa2465, $aa2466, $aa2467, $aa2468, $aa2469, $aa2470, $aa2471, $aa2472, $aa2473, $aa2474, $aa2475, $aa2476, $aa2477, $aa2478, $aa2479, $aa2480, $aa2481, $aa2482, $aa2483, $aa2484, $aa2485, $aa2486, $aa2487, $aa2488, $aa2489, $aa2490, $aa2491, $aa2492, $aa2493, $aa2494, $aa2495, $aa2496, $aa2497, $aa2498, $aa2499, $aa2500, $aa2501, $aa2502, $aa2503, $aa2504, $aa2505, $aa2506, $aa2507, $aa2508, $aa2509, $aa2510, $aa2511, $aa2512, $aa2513, $aa2514, $aa2515, $aa2516, $aa2517, $aa2518, $aa2519, $aa2520, $aa2521, $aa2522, $aa2523, $aa2524, $aa2525, $aa2526, $aa2527, $aa2528, $aa2529, $aa2530, $aa2531, $aa2532, $aa2533, $aa2534, $aa2535, $aa2536, $aa2537, $aa2538, $aa2539, $aa2540, $aa2541, $aa2542, $aa2543, $aa2544, $aa2545, $aa2546, $aa2547, $aa2548, $aa2549, $aa2550, $aa2551, $aa2552, $aa2553, $aa2554, $aa2555, $aa2556, $aa2557, $aa2558, $aa2559, $aa2560, $aa2561, $aa2562, $aa2563, $aa2564, $aa2565, $aa2566, $aa2567, $aa2568, $aa2569, $aa2570, $aa2571, $aa2572, $aa2573, $aa2574, $aa2575, $aa2576, $aa2577, $aa2578, $aa2579, $aa2580, $aa2581, $aa2582, $aa2583, $aa2584, $aa2585, $aa2586, $aa2587, $aa2588, $aa2589, $aa2590, $aa2591, $aa2592, $aa2593, $aa2594, $aa2595, $aa2596, $aa2597, $aa2598, $aa2599, $aa2600, $aa2601, $aa2602, $aa2603, $aa2604, $aa2605, $aa2606, $aa2607, $aa2608, $aa2609, $aa2610, $aa2611, $aa2612, $aa2613, $aa2614, $aa2615, $aa2616, $aa2617, $aa2618, $aa2619, $aa2620, $aa2621, $aa2622, $aa2623, $aa2624, $aa2625, $aa2626, $aa2627, $aa2628, $aa2629, $aa2630, $aa2631, $aa2632, $aa2633, $aa2634, $aa2635, $aa2636, $aa2637, $aa2638, $aa2639, $aa2640, $aa2641, $aa2642, $aa2643, $aa2644, $aa2645, $aa2646, $aa2647, $aa2648, $aa2649, $aa2650, $aa2651, $aa2652, $aa2653, $aa2654, $aa2655, $aa2656, $aa2657, $aa2658, $aa2659, $aa2660, $aa2661, $aa2662, $aa2663, $aa2664, $aa2665, $aa2666, $aa2667, $aa2668, $aa2669, $aa2670, $aa2671, $aa2672, $aa2673, $aa2674, $aa2675, $aa2676, $aa2677, $aa2678, $aa2679, $aa2680, $aa2681, $aa2682, $aa2683, $aa2684, $aa2685, $aa2686, $aa2687, $aa2688, $aa2689, $aa2690, $aa2691, $aa2692, $aa2693, $aa2694, $aa2695, $aa2696, $aa2697, $aa2698, $aa2699, $aa2700, $aa2701, $aa2702, $aa2703, $aa2704, $aa2705, $aa2706, $aa2707, $aa2708, $aa2709, $aa2710, $aa2711, $aa2712, $aa2713, $aa2714, $aa2715, $aa2716, $aa2717, $aa2718, $aa2719, $aa2720, $aa2721, $aa2722, $aa2723, $aa2724, $aa2725, $aa2726, $aa2727, $aa2728, $aa2729, $aa2730, $aa2731, $aa2732, $aa2733, $aa2734, $aa2735, $aa2736, $aa2737, $aa2738, $aa2739, $aa2740, $aa2741, $aa2742, $aa2743, $aa2744, $aa2745, $aa2746, $aa2747, $aa2748, $aa2749, $aa2750, $aa2751, $aa2752, $aa2753, $aa2754, $aa2755, $aa2756, $aa2757, $aa2758, $aa2759, $aa2760, $aa2761, $aa2762, $aa2763, $aa2764, $aa2765, $aa2766, $aa2767, $aa2768, $aa2769, $aa2770, $aa2771, $aa2772, $aa2773, $aa2774, $aa2775, $aa2776, $aa2777, $aa2778, $aa2779, $aa2780, $aa2781, $aa2782, $aa2783, $aa2784, $aa2785, $aa2786, $aa2787, $aa2788, $aa2789, $aa2790, $aa2791, $aa2792, $aa2793, $aa2794, $aa2795, $aa2796, $aa2797, $aa2798, $aa2799, $aa2800, $aa2801, $aa2802, $aa2803, $aa2804, $aa2805, $aa2806, $aa2807, $aa2808, $aa2809, $aa2810, $aa2811, $aa2812, $aa2813, $aa2814, $aa2815, $aa2816, $aa2817, $aa2818, $aa2819, $aa2820, $aa2821, $aa2822, $aa2823, $aa2824, $aa2825, $aa2826, $aa2827, $aa2828, $aa2829, $aa2830, $aa2831, $aa2832, $aa2833, $aa2834, $aa2835, $aa2836, $aa2837, $aa2838, $aa2839, $aa2840, $aa2841, $aa2842, $aa2843, $aa2844, $aa2845, $aa2846, $aa2847, $aa2848, $aa2849, $aa2850, $aa2851, $aa2852, $aa2853, $aa2854, $aa2855, $aa2856, $aa2857, $aa2858, $aa2859, $aa2860, $aa2861, $aa2862, $aa2863, $aa2864, $aa2865, $aa2866, $aa2867, $aa2868, $aa2869, $aa2870, $aa2871, $aa2872, $aa2873, $aa2874, $aa2875, $aa2876, $aa2877, $aa2878, $aa2879, $aa2880, $aa2881, $aa2882, $aa2883, $aa2884, $aa2885, $aa2886, $aa2887, $aa2888, $aa2889, $aa2890, $aa2891, $aa2892, $aa2893, $aa2894, $aa2895, $aa2896, $aa2897, $aa2898, $aa2899, $aa2900, $aa2901, $aa2902, $aa2903, $aa2904, $aa2905, $aa2906, $aa2907, $aa2908, $aa2909, $aa2910, $aa2911, $aa2912, $aa2913, $aa2914, $aa2915, $aa2916, $aa2917, $aa2918, $aa2919, $aa2920, $aa2921, $aa2922, $aa2923, $aa2924, $aa2925, $aa2926, $aa2927, $aa2928, $aa2929, $aa2930, $aa2931, $aa2932, $aa2933, $aa2934, $aa2935, $aa2936, $aa2937, $aa2938, $aa2939, $aa2940, $aa2941, $aa2942, $aa2943, $aa2944, $aa2945, $aa2946, $aa2947, $aa2948, $aa2949, $aa2950, $aa2951, $aa2952, $aa2953, $aa2954, $aa2955, $aa2956, $aa2957, $aa2958, $aa2959, $aa2960, $aa2961, $aa2962, $aa2963, $aa2964, $aa2965, $aa2966, $aa2967, $aa2968, $aa2969, $aa2970, $aa2971, $aa2972, $aa2973, $aa2974, $aa2975, $aa2976, $aa2977, $aa2978, $aa2979, $aa2980, $aa2981, $aa2982, $aa2983, $aa2984, $aa2985, $aa2986, $aa2987, $aa2988, $aa2989, $aa2990, $aa2991, $aa2992, $aa2993, $aa2994, $aa2995, $aa2996, $aa2997, $aa2998, $aa2999, $aa3000, $aa3001, $aa3002, $aa3003, $aa3004, $aa3005, $aa3006, $aa3007, $aa3008, $aa3009, $aa3010, $aa3011, $aa3012, $aa3013, $aa3014, $aa3015, $aa3016, $aa3017, $aa3018, $aa3019, $aa3020, $aa3021, $aa3022, $aa3023, $aa3024, $aa3025, $aa3026, $aa3027, $aa3028, $aa3029, $aa3030, $aa3031, $aa3032, $aa3033, $aa3034, $aa3035, $aa3036, $aa3037, $aa3038, $aa3039, $aa3040, $aa3041, $aa3042, $aa3043, $aa3044, $aa3045, $aa3046, $aa3047, $aa3048, $aa3049, $aa3050, $aa3051, $aa3052, $aa3053, $aa3054, $aa3055, $aa3056, $aa3057, $aa3058, $aa3059, $aa3060, $aa3061, $aa3062, $aa3063, $aa3064, $aa3065, $aa3066, $aa3067, $aa3068, $aa3069, $aa3070, $aa3071, $aa3072, $aa3073, $aa3074, $aa3075, $aa3076, $aa3077, $aa3078, $aa3079, $aa3080, $aa3081, $aa3082, $aa3083, $aa3084, $aa3085, $aa3086, $aa3087, $aa3088, $aa3089, $aa3090, $aa3091, $aa3092, $aa3093, $aa3094, $aa3095, $aa3096, $aa3097, $aa3098, $aa3099, $aa3100, $aa3101, $aa3102, $aa3103, $aa3104, $aa3105, $aa3106, $aa3107, $aa3108, $aa3109, $aa3110, $aa3111, $aa3112, $aa3113, $aa3114, $aa3115, $aa3116, $aa3117, $aa3118, $aa3119, $aa3120, $aa3121, $aa3122, $aa3123, $aa3124, $aa3125, $aa3126, $aa3127, $aa3128, $aa3129, $aa3130, $aa3131, $aa3132, $aa3133, $aa3134, $aa3135, $aa3136, $aa3137, $aa3138, $aa3139, $aa3140, $aa3141, $aa3142, $aa3143, $aa3144, $aa3145, $aa3146, $aa3147, $aa3148, $aa3149, $aa3150, $aa3151, $aa3152, $aa3153, $aa3154, $aa3155, $aa3156, $aa3157, $aa3158, $aa3159, $aa3160, $aa3161, $aa3162, $aa3163, $aa3164, $aa3165, $aa3166, $aa3167, $aa3168, $aa3169, $aa3170, $aa3171, $aa3172, $aa3173, $aa3174, $aa3175, $aa3176, $aa3177, $aa3178, $aa3179, $aa3180, $aa3181, $aa3182, $aa3183, $aa3184, $aa3185, $aa3186, $aa3187, $aa3188, $aa3189, $aa3190, $aa3191, $aa3192, $aa3193, $aa3194, $aa3195, $aa3196, $aa3197, $aa3198, $aa3199, $aa3200, $aa3201, $aa3202, $aa3203, $aa3204, $aa3205, $aa3206, $aa3207, $aa3208, $aa3209, $aa3210, $aa3211, $aa3212, $aa3213, $aa3214, $aa3215, $aa3216, $aa3217, $aa3218, $aa3219, $aa3220, $aa3221, $aa3222, $aa3223, $aa3224, $aa3225, $aa3226, $aa3227, $aa3228, $aa3229, $aa3230, $aa3231, $aa3232, $aa3233, $aa3234, $aa3235, $aa3236, $aa3237, $aa3238, $aa3239, $aa3240, $aa3241, $aa3242, $aa3243, $aa3244, $aa3245, $aa3246, $aa3247, $aa3248, $aa3249, $aa3250, $aa3251, $aa3252, $aa3253, $aa3254, $aa3255, $aa3256, $aa3257, $aa3258, $aa3259, $aa3260, $aa3261, $aa3262, $aa3263, $aa3264, $aa3265, $aa3266, $aa3267, $aa3268, $aa3269, $aa3270, $aa3271, $aa3272, $aa3273, $aa3274, $aa3275, $aa3276, $aa3277, $aa3278, $aa3279, $aa3280, $aa3281, $aa3282, $aa3283, $aa3284, $aa3285, $aa3286, $aa3287, $aa3288, $aa3289, $aa3290, $aa3291, $aa3292, $aa3293, $aa3294, $aa3295, $aa3296, $aa3297, $aa3298, $aa3299, $aa3300, $aa3301, $aa3302, $aa3303, $aa3304, $aa3305, $aa3306, $aa3307, $aa3308, $aa3309, $aa3310, $aa3311, $aa3312, $aa3313, $aa3314, $aa3315, $aa3316, $aa3317, $aa3318, $aa3319, $aa3320, $aa3321, $aa3322, $aa3323, $aa3324, $aa3325, $aa3326, $aa3327, $aa3328, $aa3329, $aa3330, $aa3331, $aa3332, $aa3333, $aa3334, $aa3335, $aa3336, $aa3337, $aa3338, $aa3339, $aa3340, $aa3341, $aa3342, $aa3343, $aa3344, $aa3345, $aa3346, $aa3347, $aa3348, $aa3349, $aa3350, $aa3351, $aa3352, $aa3353, $aa3354, $aa3355, $aa3356, $aa3357, $aa3358, $aa3359, $aa3360, $aa3361, $aa3362, $aa3363, $aa3364, $aa3365, $aa3366, $aa3367, $aa3368, $aa3369, $aa3370, $aa3371, $aa3372, $aa3373, $aa3374, $aa3375, $aa3376, $aa3377, $aa3378, $aa3379, $aa3380, $aa3381, $aa3382, $aa3383, $aa3384, $aa3385, $aa3386, $aa3387, $aa3388, $aa3389, $aa3390, $aa3391, $aa3392, $aa3393, $aa3394, $aa3395, $aa3396, $aa3397, $aa3398, $aa3399, $aa3400, $aa3401, $aa3402, $aa3403, $aa3404, $aa3405, $aa3406, $aa3407, $aa3408, $aa3409, $aa3410, $aa3411, $aa3412, $aa3413, $aa3414, $aa3415, $aa3416, $aa3417, $aa3418, $aa3419, $aa3420, $aa3421, $aa3422, $aa3423, $aa3424, $aa3425, $aa3426, $aa3427, $aa3428, $aa3429, $aa3430, $aa3431, $aa3432, $aa3433, $aa3434, $aa3435, $aa3436, $aa3437, $aa3438, $aa3439, $aa3440, $aa3441, $aa3442, $aa3443, $aa3444, $aa3445, $aa3446, $aa3447, $aa3448, $aa3449, $aa3450, $aa3451, $aa3452, $aa3453, $aa3454, $aa3455, $aa3456, $aa3457, $aa3458, $aa3459, $aa3460, $aa3461, $aa3462, $aa3463, $aa3464, $aa3465, $aa3466, $aa3467, $aa3468, $aa3469, $aa3470, $aa3471, $aa3472, $aa3473, $aa3474, $aa3475, $aa3476, $aa3477, $aa3478, $aa3479, $aa3480, $aa3481, $aa3482, $aa3483, $aa3484, $aa3485, $aa3486, $aa3487, $aa3488, $aa3489, $aa3490, $aa3491, $aa3492, $aa3493, $aa3494, $aa3495, $aa3496, $aa3497, $aa3498, $aa3499, $aa3500, $aa3501, $aa3502, $aa3503, $aa3504, $aa3505, $aa3506, $aa3507, $aa3508, $aa3509, $aa3510, $aa3511, $aa3512, $aa3513, $aa3514, $aa3515, $aa3516, $aa3517, $aa3518, $aa3519, $aa3520, $aa3521, $aa3522, $aa3523, $aa3524, $aa3525, $aa3526, $aa3527, $aa3528, $aa3529, $aa3530, $aa3531, $aa3532, $aa3533, $aa3534, $aa3535, $aa3536, $aa3537, $aa3538, $aa3539, $aa3540, $aa3541, $aa3542, $aa3543, $aa3544, $aa3545, $aa3546, $aa3547, $aa3548, $aa3549, $aa3550, $aa3551, $aa3552, $aa3553, $aa3554, $aa3555, $aa3556, $aa3557, $aa3558, $aa3559, $aa3560, $aa3561, $aa3562, $aa3563, $aa3564, $aa3565, $aa3566, $aa3567, $aa3568, $aa3569, $aa3570, $aa3571, $aa3572, $aa3573, $aa3574, $aa3575, $aa3576, $aa3577, $aa3578, $aa3579, $aa3580, $aa3581, $aa3582, $aa3583, $aa3584, $aa3585, $aa3586, $aa3587, $aa3588, $aa3589, $aa3590, $aa3591, $aa3592, $aa3593, $aa3594, $aa3595, $aa3596, $aa3597, $aa3598, $aa3599, $aa3600, $aa3601, $aa3602, $aa3603, $aa3604, $aa3605, $aa3606, $aa3607, $aa3608, $aa3609, $aa3610, $aa3611, $aa3612, $aa3613, $aa3614, $aa3615, $aa3616, $aa3617, $aa3618, $aa3619, $aa3620, $aa3621, $aa3622, $aa3623, $aa3624, $aa3625, $aa3626, $aa3627, $aa3628, $aa3629, $aa3630, $aa3631, $aa3632, $aa3633, $aa3634, $aa3635, $aa3636, $aa3637, $aa3638, $aa3639, $aa3640, $aa3641, $aa3642, $aa3643, $aa3644, $aa3645, $aa3646, $aa3647, $aa3648, $aa3649, $aa3650, $aa3651, $aa3652, $aa3653, $aa3654, $aa3655, $aa3656, $aa3657, $aa3658, $aa3659, $aa3660, $aa3661, $aa3662, $aa3663, $aa3664, $aa3665, $aa3666, $aa3667, $aa3668, $aa3669, $aa3670, $aa3671, $aa3672, $aa3673, $aa3674, $aa3675, $aa3676, $aa3677, $aa3678, $aa3679, $aa3680, $aa3681, $aa3682, $aa3683, $aa3684, $aa3685, $aa3686, $aa3687, $aa3688, $aa3689, $aa3690, $aa3691, $aa3692, $aa3693, $aa3694, $aa3695, $aa3696, $aa3697, $aa3698, $aa3699, $aa3700, $aa3701, $aa3702, $aa3703, $aa3704, $aa3705, $aa3706, $aa3707, $aa3708, $aa3709, $aa3710, $aa3711, $aa3712, $aa3713, $aa3714, $aa3715, $aa3716, $aa3717, $aa3718, $aa3719, $aa3720, $aa3721, $aa3722, $aa3723, $aa3724, $aa3725, $aa3726, $aa3727, $aa3728, $aa3729, $aa3730, $aa3731, $aa3732, $aa3733, $aa3734, $aa3735, $aa3736, $aa3737, $aa3738, $aa3739, $aa3740, $aa3741, $aa3742, $aa3743, $aa3744, $aa3745, $aa3746, $aa3747, $aa3748, $aa3749, $aa3750, $aa3751, $aa3752, $aa3753, $aa3754, $aa3755, $aa3756, $aa3757, $aa3758, $aa3759, $aa3760, $aa3761, $aa3762, $aa3763, $aa3764, $aa3765, $aa3766, $aa3767, $aa3768, $aa3769, $aa3770, $aa3771, $aa3772, $aa3773, $aa3774, $aa3775, $aa3776, $aa3777, $aa3778, $aa3779, $aa3780, $aa3781, $aa3782, $aa3783, $aa3784, $aa3785, $aa3786, $aa3787, $aa3788, $aa3789, $aa3790, $aa3791, $aa3792, $aa3793, $aa3794, $aa3795, $aa3796, $aa3797, $aa3798, $aa3799, $aa3800, $aa3801, $aa3802, $aa3803, $aa3804, $aa3805, $aa3806, $aa3807, $aa3808, $aa3809, $aa3810, $aa3811, $aa3812, $aa3813, $aa3814, $aa3815, $aa3816, $aa3817, $aa3818, $aa3819, $aa3820, $aa3821, $aa3822, $aa3823, $aa3824, $aa3825, $aa3826, $aa3827, $aa3828, $aa3829, $aa3830, $aa3831, $aa3832, $aa3833, $aa3834, $aa3835, $aa3836, $aa3837, $aa3838, $aa3839, $aa3840, $aa3841, $aa3842, $aa3843, $aa3844, $aa3845, $aa3846, $aa3847, $aa3848, $aa3849, $aa3850, $aa3851, $aa3852, $aa3853, $aa3854, $aa3855, $aa3856, $aa3857, $aa3858, $aa3859, $aa3860, $aa3861, $aa3862, $aa3863, $aa3864, $aa3865, $aa3866, $aa3867, $aa3868, $aa3869, $aa3870, $aa3871, $aa3872, $aa3873, $aa3874, $aa3875, $aa3876, $aa3877, $aa3878, $aa3879, $aa3880, $aa3881, $aa3882, $aa3883, $aa3884, $aa3885, $aa3886, $aa3887, $aa3888, $aa3889, $aa3890, $aa3891, $aa3892, $aa3893, $aa3894, $aa3895, $aa3896, $aa3897, $aa3898, $aa3899, $aa3900, $aa3901, $aa3902, $aa3903, $aa3904, $aa3905, $aa3906, $aa3907, $aa3908, $aa3909, $aa3910, $aa3911, $aa3912, $aa3913, $aa3914, $aa3915, $aa3916, $aa3917, $aa3918, $aa3919, $aa3920, $aa3921, $aa3922, $aa3923, $aa3924, $aa3925, $aa3926, $aa3927, $aa3928, $aa3929, $aa3930, $aa3931, $aa3932, $aa3933, $aa3934, $aa3935, $aa3936, $aa3937, $aa3938, $aa3939, $aa3940, $aa3941, $aa3942, $aa3943, $aa3944, $aa3945, $aa3946, $aa3947, $aa3948, $aa3949, $aa3950, $aa3951, $aa3952, $aa3953, $aa3954, $aa3955, $aa3956, $aa3957, $aa3958, $aa3959, $aa3960, $aa3961, $aa3962, $aa3963, $aa3964, $aa3965, $aa3966, $aa3967, $aa3968, $aa3969, $aa3970, $aa3971, $aa3972, $aa3973, $aa3974, $aa3975, $aa3976, $aa3977, $aa3978, $aa3979, $aa3980, $aa3981, $aa3982, $aa3983, $aa3984, $aa3985, $aa3986, $aa3987, $aa3988, $aa3989, $aa3990, $aa3991, $aa3992, $aa3993, $aa3994, $aa3995, $aa3996, $aa3997, $aa3998, $aa3999, $aa4000, $aa4001, $aa4002, $aa4003, $aa4004, $aa4005, $aa4006, $aa4007, $aa4008, $aa4009, $aa4010, $aa4011, $aa4012, $aa4013, $aa4014, $aa4015, $aa4016, $aa4017, $aa4018, $aa4019, $aa4020, $aa4021, $aa4022, $aa4023, $aa4024, $aa4025, $aa4026, $aa4027, $aa4028, $aa4029, $aa4030, $aa4031, $aa4032, $aa4033, $aa4034, $aa4035, $aa4036, $aa4037, $aa4038, $aa4039, $aa4040, $aa4041, $aa4042, $aa4043, $aa4044, $aa4045, $aa4046, $aa4047, $aa4048, $aa4049, $aa4050, $aa4051, $aa4052, $aa4053, $aa4054, $aa4055, $aa4056, $aa4057, $aa4058, $aa4059, $aa4060, $aa4061, $aa4062, $aa4063, $aa4064, $aa4065, $aa4066, $aa4067, $aa4068, $aa4069, $aa4070, $aa4071, $aa4072, $aa4073, $aa4074, $aa4075, $aa4076, $aa4077, $aa4078, $aa4079, $aa4080, $aa4081, $aa4082, $aa4083, $aa4084, $aa4085, $aa4086, $aa4087, $aa4088, $aa4089, $aa4090, $aa4091, $aa4092, $aa4093, $aa4094, $aa4095, $aa4096; +$aa1: + $p := 1; + goto $bb1; +$aa2: + $p := 2; + goto $bb1; +$aa3: + $p := 3; + goto $bb1; +$aa4: + $p := 4; + goto $bb1; +$aa5: + $p := 5; + goto $bb1; +$aa6: + $p := 6; + goto $bb1; +$aa7: + $p := 7; + goto $bb1; +$aa8: + $p := 8; + goto $bb1; +$aa9: + $p := 9; + goto $bb1; +$aa10: + $p := 10; + goto $bb1; +$aa11: + $p := 11; + goto $bb1; +$aa12: + $p := 12; + goto $bb1; +$aa13: + $p := 13; + goto $bb1; +$aa14: + $p := 14; + goto $bb1; +$aa15: + $p := 15; + goto $bb1; +$aa16: + $p := 16; + goto $bb1; +$aa17: + $p := 17; + goto $bb1; +$aa18: + $p := 18; + goto $bb1; +$aa19: + $p := 19; + goto $bb1; +$aa20: + $p := 20; + goto $bb1; +$aa21: + $p := 21; + goto $bb1; +$aa22: + $p := 22; + goto $bb1; +$aa23: + $p := 23; + goto $bb1; +$aa24: + $p := 24; + goto $bb1; +$aa25: + $p := 25; + goto $bb1; +$aa26: + $p := 26; + goto $bb1; +$aa27: + $p := 27; + goto $bb1; +$aa28: + $p := 28; + goto $bb1; +$aa29: + $p := 29; + goto $bb1; +$aa30: + $p := 30; + goto $bb1; +$aa31: + $p := 31; + goto $bb1; +$aa32: + $p := 32; + goto $bb1; +$aa33: + $p := 33; + goto $bb1; +$aa34: + $p := 34; + goto $bb1; +$aa35: + $p := 35; + goto $bb1; +$aa36: + $p := 36; + goto $bb1; +$aa37: + $p := 37; + goto $bb1; +$aa38: + $p := 38; + goto $bb1; +$aa39: + $p := 39; + goto $bb1; +$aa40: + $p := 40; + goto $bb1; +$aa41: + $p := 41; + goto $bb1; +$aa42: + $p := 42; + goto $bb1; +$aa43: + $p := 43; + goto $bb1; +$aa44: + $p := 44; + goto $bb1; +$aa45: + $p := 45; + goto $bb1; +$aa46: + $p := 46; + goto $bb1; +$aa47: + $p := 47; + goto $bb1; +$aa48: + $p := 48; + goto $bb1; +$aa49: + $p := 49; + goto $bb1; +$aa50: + $p := 50; + goto $bb1; +$aa51: + $p := 51; + goto $bb1; +$aa52: + $p := 52; + goto $bb1; +$aa53: + $p := 53; + goto $bb1; +$aa54: + $p := 54; + goto $bb1; +$aa55: + $p := 55; + goto $bb1; +$aa56: + $p := 56; + goto $bb1; +$aa57: + $p := 57; + goto $bb1; +$aa58: + $p := 58; + goto $bb1; +$aa59: + $p := 59; + goto $bb1; +$aa60: + $p := 60; + goto $bb1; +$aa61: + $p := 61; + goto $bb1; +$aa62: + $p := 62; + goto $bb1; +$aa63: + $p := 63; + goto $bb1; +$aa64: + $p := 64; + goto $bb1; +$aa65: + $p := 65; + goto $bb1; +$aa66: + $p := 66; + goto $bb1; +$aa67: + $p := 67; + goto $bb1; +$aa68: + $p := 68; + goto $bb1; +$aa69: + $p := 69; + goto $bb1; +$aa70: + $p := 70; + goto $bb1; +$aa71: + $p := 71; + goto $bb1; +$aa72: + $p := 72; + goto $bb1; +$aa73: + $p := 73; + goto $bb1; +$aa74: + $p := 74; + goto $bb1; +$aa75: + $p := 75; + goto $bb1; +$aa76: + $p := 76; + goto $bb1; +$aa77: + $p := 77; + goto $bb1; +$aa78: + $p := 78; + goto $bb1; +$aa79: + $p := 79; + goto $bb1; +$aa80: + $p := 80; + goto $bb1; +$aa81: + $p := 81; + goto $bb1; +$aa82: + $p := 82; + goto $bb1; +$aa83: + $p := 83; + goto $bb1; +$aa84: + $p := 84; + goto $bb1; +$aa85: + $p := 85; + goto $bb1; +$aa86: + $p := 86; + goto $bb1; +$aa87: + $p := 87; + goto $bb1; +$aa88: + $p := 88; + goto $bb1; +$aa89: + $p := 89; + goto $bb1; +$aa90: + $p := 90; + goto $bb1; +$aa91: + $p := 91; + goto $bb1; +$aa92: + $p := 92; + goto $bb1; +$aa93: + $p := 93; + goto $bb1; +$aa94: + $p := 94; + goto $bb1; +$aa95: + $p := 95; + goto $bb1; +$aa96: + $p := 96; + goto $bb1; +$aa97: + $p := 97; + goto $bb1; +$aa98: + $p := 98; + goto $bb1; +$aa99: + $p := 99; + goto $bb1; +$aa100: + $p := 100; + goto $bb1; +$aa101: + $p := 101; + goto $bb1; +$aa102: + $p := 102; + goto $bb1; +$aa103: + $p := 103; + goto $bb1; +$aa104: + $p := 104; + goto $bb1; +$aa105: + $p := 105; + goto $bb1; +$aa106: + $p := 106; + goto $bb1; +$aa107: + $p := 107; + goto $bb1; +$aa108: + $p := 108; + goto $bb1; +$aa109: + $p := 109; + goto $bb1; +$aa110: + $p := 110; + goto $bb1; +$aa111: + $p := 111; + goto $bb1; +$aa112: + $p := 112; + goto $bb1; +$aa113: + $p := 113; + goto $bb1; +$aa114: + $p := 114; + goto $bb1; +$aa115: + $p := 115; + goto $bb1; +$aa116: + $p := 116; + goto $bb1; +$aa117: + $p := 117; + goto $bb1; +$aa118: + $p := 118; + goto $bb1; +$aa119: + $p := 119; + goto $bb1; +$aa120: + $p := 120; + goto $bb1; +$aa121: + $p := 121; + goto $bb1; +$aa122: + $p := 122; + goto $bb1; +$aa123: + $p := 123; + goto $bb1; +$aa124: + $p := 124; + goto $bb1; +$aa125: + $p := 125; + goto $bb1; +$aa126: + $p := 126; + goto $bb1; +$aa127: + $p := 127; + goto $bb1; +$aa128: + $p := 128; + goto $bb1; +$aa129: + $p := 129; + goto $bb1; +$aa130: + $p := 130; + goto $bb1; +$aa131: + $p := 131; + goto $bb1; +$aa132: + $p := 132; + goto $bb1; +$aa133: + $p := 133; + goto $bb1; +$aa134: + $p := 134; + goto $bb1; +$aa135: + $p := 135; + goto $bb1; +$aa136: + $p := 136; + goto $bb1; +$aa137: + $p := 137; + goto $bb1; +$aa138: + $p := 138; + goto $bb1; +$aa139: + $p := 139; + goto $bb1; +$aa140: + $p := 140; + goto $bb1; +$aa141: + $p := 141; + goto $bb1; +$aa142: + $p := 142; + goto $bb1; +$aa143: + $p := 143; + goto $bb1; +$aa144: + $p := 144; + goto $bb1; +$aa145: + $p := 145; + goto $bb1; +$aa146: + $p := 146; + goto $bb1; +$aa147: + $p := 147; + goto $bb1; +$aa148: + $p := 148; + goto $bb1; +$aa149: + $p := 149; + goto $bb1; +$aa150: + $p := 150; + goto $bb1; +$aa151: + $p := 151; + goto $bb1; +$aa152: + $p := 152; + goto $bb1; +$aa153: + $p := 153; + goto $bb1; +$aa154: + $p := 154; + goto $bb1; +$aa155: + $p := 155; + goto $bb1; +$aa156: + $p := 156; + goto $bb1; +$aa157: + $p := 157; + goto $bb1; +$aa158: + $p := 158; + goto $bb1; +$aa159: + $p := 159; + goto $bb1; +$aa160: + $p := 160; + goto $bb1; +$aa161: + $p := 161; + goto $bb1; +$aa162: + $p := 162; + goto $bb1; +$aa163: + $p := 163; + goto $bb1; +$aa164: + $p := 164; + goto $bb1; +$aa165: + $p := 165; + goto $bb1; +$aa166: + $p := 166; + goto $bb1; +$aa167: + $p := 167; + goto $bb1; +$aa168: + $p := 168; + goto $bb1; +$aa169: + $p := 169; + goto $bb1; +$aa170: + $p := 170; + goto $bb1; +$aa171: + $p := 171; + goto $bb1; +$aa172: + $p := 172; + goto $bb1; +$aa173: + $p := 173; + goto $bb1; +$aa174: + $p := 174; + goto $bb1; +$aa175: + $p := 175; + goto $bb1; +$aa176: + $p := 176; + goto $bb1; +$aa177: + $p := 177; + goto $bb1; +$aa178: + $p := 178; + goto $bb1; +$aa179: + $p := 179; + goto $bb1; +$aa180: + $p := 180; + goto $bb1; +$aa181: + $p := 181; + goto $bb1; +$aa182: + $p := 182; + goto $bb1; +$aa183: + $p := 183; + goto $bb1; +$aa184: + $p := 184; + goto $bb1; +$aa185: + $p := 185; + goto $bb1; +$aa186: + $p := 186; + goto $bb1; +$aa187: + $p := 187; + goto $bb1; +$aa188: + $p := 188; + goto $bb1; +$aa189: + $p := 189; + goto $bb1; +$aa190: + $p := 190; + goto $bb1; +$aa191: + $p := 191; + goto $bb1; +$aa192: + $p := 192; + goto $bb1; +$aa193: + $p := 193; + goto $bb1; +$aa194: + $p := 194; + goto $bb1; +$aa195: + $p := 195; + goto $bb1; +$aa196: + $p := 196; + goto $bb1; +$aa197: + $p := 197; + goto $bb1; +$aa198: + $p := 198; + goto $bb1; +$aa199: + $p := 199; + goto $bb1; +$aa200: + $p := 200; + goto $bb1; +$aa201: + $p := 201; + goto $bb1; +$aa202: + $p := 202; + goto $bb1; +$aa203: + $p := 203; + goto $bb1; +$aa204: + $p := 204; + goto $bb1; +$aa205: + $p := 205; + goto $bb1; +$aa206: + $p := 206; + goto $bb1; +$aa207: + $p := 207; + goto $bb1; +$aa208: + $p := 208; + goto $bb1; +$aa209: + $p := 209; + goto $bb1; +$aa210: + $p := 210; + goto $bb1; +$aa211: + $p := 211; + goto $bb1; +$aa212: + $p := 212; + goto $bb1; +$aa213: + $p := 213; + goto $bb1; +$aa214: + $p := 214; + goto $bb1; +$aa215: + $p := 215; + goto $bb1; +$aa216: + $p := 216; + goto $bb1; +$aa217: + $p := 217; + goto $bb1; +$aa218: + $p := 218; + goto $bb1; +$aa219: + $p := 219; + goto $bb1; +$aa220: + $p := 220; + goto $bb1; +$aa221: + $p := 221; + goto $bb1; +$aa222: + $p := 222; + goto $bb1; +$aa223: + $p := 223; + goto $bb1; +$aa224: + $p := 224; + goto $bb1; +$aa225: + $p := 225; + goto $bb1; +$aa226: + $p := 226; + goto $bb1; +$aa227: + $p := 227; + goto $bb1; +$aa228: + $p := 228; + goto $bb1; +$aa229: + $p := 229; + goto $bb1; +$aa230: + $p := 230; + goto $bb1; +$aa231: + $p := 231; + goto $bb1; +$aa232: + $p := 232; + goto $bb1; +$aa233: + $p := 233; + goto $bb1; +$aa234: + $p := 234; + goto $bb1; +$aa235: + $p := 235; + goto $bb1; +$aa236: + $p := 236; + goto $bb1; +$aa237: + $p := 237; + goto $bb1; +$aa238: + $p := 238; + goto $bb1; +$aa239: + $p := 239; + goto $bb1; +$aa240: + $p := 240; + goto $bb1; +$aa241: + $p := 241; + goto $bb1; +$aa242: + $p := 242; + goto $bb1; +$aa243: + $p := 243; + goto $bb1; +$aa244: + $p := 244; + goto $bb1; +$aa245: + $p := 245; + goto $bb1; +$aa246: + $p := 246; + goto $bb1; +$aa247: + $p := 247; + goto $bb1; +$aa248: + $p := 248; + goto $bb1; +$aa249: + $p := 249; + goto $bb1; +$aa250: + $p := 250; + goto $bb1; +$aa251: + $p := 251; + goto $bb1; +$aa252: + $p := 252; + goto $bb1; +$aa253: + $p := 253; + goto $bb1; +$aa254: + $p := 254; + goto $bb1; +$aa255: + $p := 255; + goto $bb1; +$aa256: + $p := 256; + goto $bb1; +$aa257: + $p := 257; + goto $bb1; +$aa258: + $p := 258; + goto $bb1; +$aa259: + $p := 259; + goto $bb1; +$aa260: + $p := 260; + goto $bb1; +$aa261: + $p := 261; + goto $bb1; +$aa262: + $p := 262; + goto $bb1; +$aa263: + $p := 263; + goto $bb1; +$aa264: + $p := 264; + goto $bb1; +$aa265: + $p := 265; + goto $bb1; +$aa266: + $p := 266; + goto $bb1; +$aa267: + $p := 267; + goto $bb1; +$aa268: + $p := 268; + goto $bb1; +$aa269: + $p := 269; + goto $bb1; +$aa270: + $p := 270; + goto $bb1; +$aa271: + $p := 271; + goto $bb1; +$aa272: + $p := 272; + goto $bb1; +$aa273: + $p := 273; + goto $bb1; +$aa274: + $p := 274; + goto $bb1; +$aa275: + $p := 275; + goto $bb1; +$aa276: + $p := 276; + goto $bb1; +$aa277: + $p := 277; + goto $bb1; +$aa278: + $p := 278; + goto $bb1; +$aa279: + $p := 279; + goto $bb1; +$aa280: + $p := 280; + goto $bb1; +$aa281: + $p := 281; + goto $bb1; +$aa282: + $p := 282; + goto $bb1; +$aa283: + $p := 283; + goto $bb1; +$aa284: + $p := 284; + goto $bb1; +$aa285: + $p := 285; + goto $bb1; +$aa286: + $p := 286; + goto $bb1; +$aa287: + $p := 287; + goto $bb1; +$aa288: + $p := 288; + goto $bb1; +$aa289: + $p := 289; + goto $bb1; +$aa290: + $p := 290; + goto $bb1; +$aa291: + $p := 291; + goto $bb1; +$aa292: + $p := 292; + goto $bb1; +$aa293: + $p := 293; + goto $bb1; +$aa294: + $p := 294; + goto $bb1; +$aa295: + $p := 295; + goto $bb1; +$aa296: + $p := 296; + goto $bb1; +$aa297: + $p := 297; + goto $bb1; +$aa298: + $p := 298; + goto $bb1; +$aa299: + $p := 299; + goto $bb1; +$aa300: + $p := 300; + goto $bb1; +$aa301: + $p := 301; + goto $bb1; +$aa302: + $p := 302; + goto $bb1; +$aa303: + $p := 303; + goto $bb1; +$aa304: + $p := 304; + goto $bb1; +$aa305: + $p := 305; + goto $bb1; +$aa306: + $p := 306; + goto $bb1; +$aa307: + $p := 307; + goto $bb1; +$aa308: + $p := 308; + goto $bb1; +$aa309: + $p := 309; + goto $bb1; +$aa310: + $p := 310; + goto $bb1; +$aa311: + $p := 311; + goto $bb1; +$aa312: + $p := 312; + goto $bb1; +$aa313: + $p := 313; + goto $bb1; +$aa314: + $p := 314; + goto $bb1; +$aa315: + $p := 315; + goto $bb1; +$aa316: + $p := 316; + goto $bb1; +$aa317: + $p := 317; + goto $bb1; +$aa318: + $p := 318; + goto $bb1; +$aa319: + $p := 319; + goto $bb1; +$aa320: + $p := 320; + goto $bb1; +$aa321: + $p := 321; + goto $bb1; +$aa322: + $p := 322; + goto $bb1; +$aa323: + $p := 323; + goto $bb1; +$aa324: + $p := 324; + goto $bb1; +$aa325: + $p := 325; + goto $bb1; +$aa326: + $p := 326; + goto $bb1; +$aa327: + $p := 327; + goto $bb1; +$aa328: + $p := 328; + goto $bb1; +$aa329: + $p := 329; + goto $bb1; +$aa330: + $p := 330; + goto $bb1; +$aa331: + $p := 331; + goto $bb1; +$aa332: + $p := 332; + goto $bb1; +$aa333: + $p := 333; + goto $bb1; +$aa334: + $p := 334; + goto $bb1; +$aa335: + $p := 335; + goto $bb1; +$aa336: + $p := 336; + goto $bb1; +$aa337: + $p := 337; + goto $bb1; +$aa338: + $p := 338; + goto $bb1; +$aa339: + $p := 339; + goto $bb1; +$aa340: + $p := 340; + goto $bb1; +$aa341: + $p := 341; + goto $bb1; +$aa342: + $p := 342; + goto $bb1; +$aa343: + $p := 343; + goto $bb1; +$aa344: + $p := 344; + goto $bb1; +$aa345: + $p := 345; + goto $bb1; +$aa346: + $p := 346; + goto $bb1; +$aa347: + $p := 347; + goto $bb1; +$aa348: + $p := 348; + goto $bb1; +$aa349: + $p := 349; + goto $bb1; +$aa350: + $p := 350; + goto $bb1; +$aa351: + $p := 351; + goto $bb1; +$aa352: + $p := 352; + goto $bb1; +$aa353: + $p := 353; + goto $bb1; +$aa354: + $p := 354; + goto $bb1; +$aa355: + $p := 355; + goto $bb1; +$aa356: + $p := 356; + goto $bb1; +$aa357: + $p := 357; + goto $bb1; +$aa358: + $p := 358; + goto $bb1; +$aa359: + $p := 359; + goto $bb1; +$aa360: + $p := 360; + goto $bb1; +$aa361: + $p := 361; + goto $bb1; +$aa362: + $p := 362; + goto $bb1; +$aa363: + $p := 363; + goto $bb1; +$aa364: + $p := 364; + goto $bb1; +$aa365: + $p := 365; + goto $bb1; +$aa366: + $p := 366; + goto $bb1; +$aa367: + $p := 367; + goto $bb1; +$aa368: + $p := 368; + goto $bb1; +$aa369: + $p := 369; + goto $bb1; +$aa370: + $p := 370; + goto $bb1; +$aa371: + $p := 371; + goto $bb1; +$aa372: + $p := 372; + goto $bb1; +$aa373: + $p := 373; + goto $bb1; +$aa374: + $p := 374; + goto $bb1; +$aa375: + $p := 375; + goto $bb1; +$aa376: + $p := 376; + goto $bb1; +$aa377: + $p := 377; + goto $bb1; +$aa378: + $p := 378; + goto $bb1; +$aa379: + $p := 379; + goto $bb1; +$aa380: + $p := 380; + goto $bb1; +$aa381: + $p := 381; + goto $bb1; +$aa382: + $p := 382; + goto $bb1; +$aa383: + $p := 383; + goto $bb1; +$aa384: + $p := 384; + goto $bb1; +$aa385: + $p := 385; + goto $bb1; +$aa386: + $p := 386; + goto $bb1; +$aa387: + $p := 387; + goto $bb1; +$aa388: + $p := 388; + goto $bb1; +$aa389: + $p := 389; + goto $bb1; +$aa390: + $p := 390; + goto $bb1; +$aa391: + $p := 391; + goto $bb1; +$aa392: + $p := 392; + goto $bb1; +$aa393: + $p := 393; + goto $bb1; +$aa394: + $p := 394; + goto $bb1; +$aa395: + $p := 395; + goto $bb1; +$aa396: + $p := 396; + goto $bb1; +$aa397: + $p := 397; + goto $bb1; +$aa398: + $p := 398; + goto $bb1; +$aa399: + $p := 399; + goto $bb1; +$aa400: + $p := 400; + goto $bb1; +$aa401: + $p := 401; + goto $bb1; +$aa402: + $p := 402; + goto $bb1; +$aa403: + $p := 403; + goto $bb1; +$aa404: + $p := 404; + goto $bb1; +$aa405: + $p := 405; + goto $bb1; +$aa406: + $p := 406; + goto $bb1; +$aa407: + $p := 407; + goto $bb1; +$aa408: + $p := 408; + goto $bb1; +$aa409: + $p := 409; + goto $bb1; +$aa410: + $p := 410; + goto $bb1; +$aa411: + $p := 411; + goto $bb1; +$aa412: + $p := 412; + goto $bb1; +$aa413: + $p := 413; + goto $bb1; +$aa414: + $p := 414; + goto $bb1; +$aa415: + $p := 415; + goto $bb1; +$aa416: + $p := 416; + goto $bb1; +$aa417: + $p := 417; + goto $bb1; +$aa418: + $p := 418; + goto $bb1; +$aa419: + $p := 419; + goto $bb1; +$aa420: + $p := 420; + goto $bb1; +$aa421: + $p := 421; + goto $bb1; +$aa422: + $p := 422; + goto $bb1; +$aa423: + $p := 423; + goto $bb1; +$aa424: + $p := 424; + goto $bb1; +$aa425: + $p := 425; + goto $bb1; +$aa426: + $p := 426; + goto $bb1; +$aa427: + $p := 427; + goto $bb1; +$aa428: + $p := 428; + goto $bb1; +$aa429: + $p := 429; + goto $bb1; +$aa430: + $p := 430; + goto $bb1; +$aa431: + $p := 431; + goto $bb1; +$aa432: + $p := 432; + goto $bb1; +$aa433: + $p := 433; + goto $bb1; +$aa434: + $p := 434; + goto $bb1; +$aa435: + $p := 435; + goto $bb1; +$aa436: + $p := 436; + goto $bb1; +$aa437: + $p := 437; + goto $bb1; +$aa438: + $p := 438; + goto $bb1; +$aa439: + $p := 439; + goto $bb1; +$aa440: + $p := 440; + goto $bb1; +$aa441: + $p := 441; + goto $bb1; +$aa442: + $p := 442; + goto $bb1; +$aa443: + $p := 443; + goto $bb1; +$aa444: + $p := 444; + goto $bb1; +$aa445: + $p := 445; + goto $bb1; +$aa446: + $p := 446; + goto $bb1; +$aa447: + $p := 447; + goto $bb1; +$aa448: + $p := 448; + goto $bb1; +$aa449: + $p := 449; + goto $bb1; +$aa450: + $p := 450; + goto $bb1; +$aa451: + $p := 451; + goto $bb1; +$aa452: + $p := 452; + goto $bb1; +$aa453: + $p := 453; + goto $bb1; +$aa454: + $p := 454; + goto $bb1; +$aa455: + $p := 455; + goto $bb1; +$aa456: + $p := 456; + goto $bb1; +$aa457: + $p := 457; + goto $bb1; +$aa458: + $p := 458; + goto $bb1; +$aa459: + $p := 459; + goto $bb1; +$aa460: + $p := 460; + goto $bb1; +$aa461: + $p := 461; + goto $bb1; +$aa462: + $p := 462; + goto $bb1; +$aa463: + $p := 463; + goto $bb1; +$aa464: + $p := 464; + goto $bb1; +$aa465: + $p := 465; + goto $bb1; +$aa466: + $p := 466; + goto $bb1; +$aa467: + $p := 467; + goto $bb1; +$aa468: + $p := 468; + goto $bb1; +$aa469: + $p := 469; + goto $bb1; +$aa470: + $p := 470; + goto $bb1; +$aa471: + $p := 471; + goto $bb1; +$aa472: + $p := 472; + goto $bb1; +$aa473: + $p := 473; + goto $bb1; +$aa474: + $p := 474; + goto $bb1; +$aa475: + $p := 475; + goto $bb1; +$aa476: + $p := 476; + goto $bb1; +$aa477: + $p := 477; + goto $bb1; +$aa478: + $p := 478; + goto $bb1; +$aa479: + $p := 479; + goto $bb1; +$aa480: + $p := 480; + goto $bb1; +$aa481: + $p := 481; + goto $bb1; +$aa482: + $p := 482; + goto $bb1; +$aa483: + $p := 483; + goto $bb1; +$aa484: + $p := 484; + goto $bb1; +$aa485: + $p := 485; + goto $bb1; +$aa486: + $p := 486; + goto $bb1; +$aa487: + $p := 487; + goto $bb1; +$aa488: + $p := 488; + goto $bb1; +$aa489: + $p := 489; + goto $bb1; +$aa490: + $p := 490; + goto $bb1; +$aa491: + $p := 491; + goto $bb1; +$aa492: + $p := 492; + goto $bb1; +$aa493: + $p := 493; + goto $bb1; +$aa494: + $p := 494; + goto $bb1; +$aa495: + $p := 495; + goto $bb1; +$aa496: + $p := 496; + goto $bb1; +$aa497: + $p := 497; + goto $bb1; +$aa498: + $p := 498; + goto $bb1; +$aa499: + $p := 499; + goto $bb1; +$aa500: + $p := 500; + goto $bb1; +$aa501: + $p := 501; + goto $bb1; +$aa502: + $p := 502; + goto $bb1; +$aa503: + $p := 503; + goto $bb1; +$aa504: + $p := 504; + goto $bb1; +$aa505: + $p := 505; + goto $bb1; +$aa506: + $p := 506; + goto $bb1; +$aa507: + $p := 507; + goto $bb1; +$aa508: + $p := 508; + goto $bb1; +$aa509: + $p := 509; + goto $bb1; +$aa510: + $p := 510; + goto $bb1; +$aa511: + $p := 511; + goto $bb1; +$aa512: + $p := 512; + goto $bb1; +$aa513: + $p := 513; + goto $bb1; +$aa514: + $p := 514; + goto $bb1; +$aa515: + $p := 515; + goto $bb1; +$aa516: + $p := 516; + goto $bb1; +$aa517: + $p := 517; + goto $bb1; +$aa518: + $p := 518; + goto $bb1; +$aa519: + $p := 519; + goto $bb1; +$aa520: + $p := 520; + goto $bb1; +$aa521: + $p := 521; + goto $bb1; +$aa522: + $p := 522; + goto $bb1; +$aa523: + $p := 523; + goto $bb1; +$aa524: + $p := 524; + goto $bb1; +$aa525: + $p := 525; + goto $bb1; +$aa526: + $p := 526; + goto $bb1; +$aa527: + $p := 527; + goto $bb1; +$aa528: + $p := 528; + goto $bb1; +$aa529: + $p := 529; + goto $bb1; +$aa530: + $p := 530; + goto $bb1; +$aa531: + $p := 531; + goto $bb1; +$aa532: + $p := 532; + goto $bb1; +$aa533: + $p := 533; + goto $bb1; +$aa534: + $p := 534; + goto $bb1; +$aa535: + $p := 535; + goto $bb1; +$aa536: + $p := 536; + goto $bb1; +$aa537: + $p := 537; + goto $bb1; +$aa538: + $p := 538; + goto $bb1; +$aa539: + $p := 539; + goto $bb1; +$aa540: + $p := 540; + goto $bb1; +$aa541: + $p := 541; + goto $bb1; +$aa542: + $p := 542; + goto $bb1; +$aa543: + $p := 543; + goto $bb1; +$aa544: + $p := 544; + goto $bb1; +$aa545: + $p := 545; + goto $bb1; +$aa546: + $p := 546; + goto $bb1; +$aa547: + $p := 547; + goto $bb1; +$aa548: + $p := 548; + goto $bb1; +$aa549: + $p := 549; + goto $bb1; +$aa550: + $p := 550; + goto $bb1; +$aa551: + $p := 551; + goto $bb1; +$aa552: + $p := 552; + goto $bb1; +$aa553: + $p := 553; + goto $bb1; +$aa554: + $p := 554; + goto $bb1; +$aa555: + $p := 555; + goto $bb1; +$aa556: + $p := 556; + goto $bb1; +$aa557: + $p := 557; + goto $bb1; +$aa558: + $p := 558; + goto $bb1; +$aa559: + $p := 559; + goto $bb1; +$aa560: + $p := 560; + goto $bb1; +$aa561: + $p := 561; + goto $bb1; +$aa562: + $p := 562; + goto $bb1; +$aa563: + $p := 563; + goto $bb1; +$aa564: + $p := 564; + goto $bb1; +$aa565: + $p := 565; + goto $bb1; +$aa566: + $p := 566; + goto $bb1; +$aa567: + $p := 567; + goto $bb1; +$aa568: + $p := 568; + goto $bb1; +$aa569: + $p := 569; + goto $bb1; +$aa570: + $p := 570; + goto $bb1; +$aa571: + $p := 571; + goto $bb1; +$aa572: + $p := 572; + goto $bb1; +$aa573: + $p := 573; + goto $bb1; +$aa574: + $p := 574; + goto $bb1; +$aa575: + $p := 575; + goto $bb1; +$aa576: + $p := 576; + goto $bb1; +$aa577: + $p := 577; + goto $bb1; +$aa578: + $p := 578; + goto $bb1; +$aa579: + $p := 579; + goto $bb1; +$aa580: + $p := 580; + goto $bb1; +$aa581: + $p := 581; + goto $bb1; +$aa582: + $p := 582; + goto $bb1; +$aa583: + $p := 583; + goto $bb1; +$aa584: + $p := 584; + goto $bb1; +$aa585: + $p := 585; + goto $bb1; +$aa586: + $p := 586; + goto $bb1; +$aa587: + $p := 587; + goto $bb1; +$aa588: + $p := 588; + goto $bb1; +$aa589: + $p := 589; + goto $bb1; +$aa590: + $p := 590; + goto $bb1; +$aa591: + $p := 591; + goto $bb1; +$aa592: + $p := 592; + goto $bb1; +$aa593: + $p := 593; + goto $bb1; +$aa594: + $p := 594; + goto $bb1; +$aa595: + $p := 595; + goto $bb1; +$aa596: + $p := 596; + goto $bb1; +$aa597: + $p := 597; + goto $bb1; +$aa598: + $p := 598; + goto $bb1; +$aa599: + $p := 599; + goto $bb1; +$aa600: + $p := 600; + goto $bb1; +$aa601: + $p := 601; + goto $bb1; +$aa602: + $p := 602; + goto $bb1; +$aa603: + $p := 603; + goto $bb1; +$aa604: + $p := 604; + goto $bb1; +$aa605: + $p := 605; + goto $bb1; +$aa606: + $p := 606; + goto $bb1; +$aa607: + $p := 607; + goto $bb1; +$aa608: + $p := 608; + goto $bb1; +$aa609: + $p := 609; + goto $bb1; +$aa610: + $p := 610; + goto $bb1; +$aa611: + $p := 611; + goto $bb1; +$aa612: + $p := 612; + goto $bb1; +$aa613: + $p := 613; + goto $bb1; +$aa614: + $p := 614; + goto $bb1; +$aa615: + $p := 615; + goto $bb1; +$aa616: + $p := 616; + goto $bb1; +$aa617: + $p := 617; + goto $bb1; +$aa618: + $p := 618; + goto $bb1; +$aa619: + $p := 619; + goto $bb1; +$aa620: + $p := 620; + goto $bb1; +$aa621: + $p := 621; + goto $bb1; +$aa622: + $p := 622; + goto $bb1; +$aa623: + $p := 623; + goto $bb1; +$aa624: + $p := 624; + goto $bb1; +$aa625: + $p := 625; + goto $bb1; +$aa626: + $p := 626; + goto $bb1; +$aa627: + $p := 627; + goto $bb1; +$aa628: + $p := 628; + goto $bb1; +$aa629: + $p := 629; + goto $bb1; +$aa630: + $p := 630; + goto $bb1; +$aa631: + $p := 631; + goto $bb1; +$aa632: + $p := 632; + goto $bb1; +$aa633: + $p := 633; + goto $bb1; +$aa634: + $p := 634; + goto $bb1; +$aa635: + $p := 635; + goto $bb1; +$aa636: + $p := 636; + goto $bb1; +$aa637: + $p := 637; + goto $bb1; +$aa638: + $p := 638; + goto $bb1; +$aa639: + $p := 639; + goto $bb1; +$aa640: + $p := 640; + goto $bb1; +$aa641: + $p := 641; + goto $bb1; +$aa642: + $p := 642; + goto $bb1; +$aa643: + $p := 643; + goto $bb1; +$aa644: + $p := 644; + goto $bb1; +$aa645: + $p := 645; + goto $bb1; +$aa646: + $p := 646; + goto $bb1; +$aa647: + $p := 647; + goto $bb1; +$aa648: + $p := 648; + goto $bb1; +$aa649: + $p := 649; + goto $bb1; +$aa650: + $p := 650; + goto $bb1; +$aa651: + $p := 651; + goto $bb1; +$aa652: + $p := 652; + goto $bb1; +$aa653: + $p := 653; + goto $bb1; +$aa654: + $p := 654; + goto $bb1; +$aa655: + $p := 655; + goto $bb1; +$aa656: + $p := 656; + goto $bb1; +$aa657: + $p := 657; + goto $bb1; +$aa658: + $p := 658; + goto $bb1; +$aa659: + $p := 659; + goto $bb1; +$aa660: + $p := 660; + goto $bb1; +$aa661: + $p := 661; + goto $bb1; +$aa662: + $p := 662; + goto $bb1; +$aa663: + $p := 663; + goto $bb1; +$aa664: + $p := 664; + goto $bb1; +$aa665: + $p := 665; + goto $bb1; +$aa666: + $p := 666; + goto $bb1; +$aa667: + $p := 667; + goto $bb1; +$aa668: + $p := 668; + goto $bb1; +$aa669: + $p := 669; + goto $bb1; +$aa670: + $p := 670; + goto $bb1; +$aa671: + $p := 671; + goto $bb1; +$aa672: + $p := 672; + goto $bb1; +$aa673: + $p := 673; + goto $bb1; +$aa674: + $p := 674; + goto $bb1; +$aa675: + $p := 675; + goto $bb1; +$aa676: + $p := 676; + goto $bb1; +$aa677: + $p := 677; + goto $bb1; +$aa678: + $p := 678; + goto $bb1; +$aa679: + $p := 679; + goto $bb1; +$aa680: + $p := 680; + goto $bb1; +$aa681: + $p := 681; + goto $bb1; +$aa682: + $p := 682; + goto $bb1; +$aa683: + $p := 683; + goto $bb1; +$aa684: + $p := 684; + goto $bb1; +$aa685: + $p := 685; + goto $bb1; +$aa686: + $p := 686; + goto $bb1; +$aa687: + $p := 687; + goto $bb1; +$aa688: + $p := 688; + goto $bb1; +$aa689: + $p := 689; + goto $bb1; +$aa690: + $p := 690; + goto $bb1; +$aa691: + $p := 691; + goto $bb1; +$aa692: + $p := 692; + goto $bb1; +$aa693: + $p := 693; + goto $bb1; +$aa694: + $p := 694; + goto $bb1; +$aa695: + $p := 695; + goto $bb1; +$aa696: + $p := 696; + goto $bb1; +$aa697: + $p := 697; + goto $bb1; +$aa698: + $p := 698; + goto $bb1; +$aa699: + $p := 699; + goto $bb1; +$aa700: + $p := 700; + goto $bb1; +$aa701: + $p := 701; + goto $bb1; +$aa702: + $p := 702; + goto $bb1; +$aa703: + $p := 703; + goto $bb1; +$aa704: + $p := 704; + goto $bb1; +$aa705: + $p := 705; + goto $bb1; +$aa706: + $p := 706; + goto $bb1; +$aa707: + $p := 707; + goto $bb1; +$aa708: + $p := 708; + goto $bb1; +$aa709: + $p := 709; + goto $bb1; +$aa710: + $p := 710; + goto $bb1; +$aa711: + $p := 711; + goto $bb1; +$aa712: + $p := 712; + goto $bb1; +$aa713: + $p := 713; + goto $bb1; +$aa714: + $p := 714; + goto $bb1; +$aa715: + $p := 715; + goto $bb1; +$aa716: + $p := 716; + goto $bb1; +$aa717: + $p := 717; + goto $bb1; +$aa718: + $p := 718; + goto $bb1; +$aa719: + $p := 719; + goto $bb1; +$aa720: + $p := 720; + goto $bb1; +$aa721: + $p := 721; + goto $bb1; +$aa722: + $p := 722; + goto $bb1; +$aa723: + $p := 723; + goto $bb1; +$aa724: + $p := 724; + goto $bb1; +$aa725: + $p := 725; + goto $bb1; +$aa726: + $p := 726; + goto $bb1; +$aa727: + $p := 727; + goto $bb1; +$aa728: + $p := 728; + goto $bb1; +$aa729: + $p := 729; + goto $bb1; +$aa730: + $p := 730; + goto $bb1; +$aa731: + $p := 731; + goto $bb1; +$aa732: + $p := 732; + goto $bb1; +$aa733: + $p := 733; + goto $bb1; +$aa734: + $p := 734; + goto $bb1; +$aa735: + $p := 735; + goto $bb1; +$aa736: + $p := 736; + goto $bb1; +$aa737: + $p := 737; + goto $bb1; +$aa738: + $p := 738; + goto $bb1; +$aa739: + $p := 739; + goto $bb1; +$aa740: + $p := 740; + goto $bb1; +$aa741: + $p := 741; + goto $bb1; +$aa742: + $p := 742; + goto $bb1; +$aa743: + $p := 743; + goto $bb1; +$aa744: + $p := 744; + goto $bb1; +$aa745: + $p := 745; + goto $bb1; +$aa746: + $p := 746; + goto $bb1; +$aa747: + $p := 747; + goto $bb1; +$aa748: + $p := 748; + goto $bb1; +$aa749: + $p := 749; + goto $bb1; +$aa750: + $p := 750; + goto $bb1; +$aa751: + $p := 751; + goto $bb1; +$aa752: + $p := 752; + goto $bb1; +$aa753: + $p := 753; + goto $bb1; +$aa754: + $p := 754; + goto $bb1; +$aa755: + $p := 755; + goto $bb1; +$aa756: + $p := 756; + goto $bb1; +$aa757: + $p := 757; + goto $bb1; +$aa758: + $p := 758; + goto $bb1; +$aa759: + $p := 759; + goto $bb1; +$aa760: + $p := 760; + goto $bb1; +$aa761: + $p := 761; + goto $bb1; +$aa762: + $p := 762; + goto $bb1; +$aa763: + $p := 763; + goto $bb1; +$aa764: + $p := 764; + goto $bb1; +$aa765: + $p := 765; + goto $bb1; +$aa766: + $p := 766; + goto $bb1; +$aa767: + $p := 767; + goto $bb1; +$aa768: + $p := 768; + goto $bb1; +$aa769: + $p := 769; + goto $bb1; +$aa770: + $p := 770; + goto $bb1; +$aa771: + $p := 771; + goto $bb1; +$aa772: + $p := 772; + goto $bb1; +$aa773: + $p := 773; + goto $bb1; +$aa774: + $p := 774; + goto $bb1; +$aa775: + $p := 775; + goto $bb1; +$aa776: + $p := 776; + goto $bb1; +$aa777: + $p := 777; + goto $bb1; +$aa778: + $p := 778; + goto $bb1; +$aa779: + $p := 779; + goto $bb1; +$aa780: + $p := 780; + goto $bb1; +$aa781: + $p := 781; + goto $bb1; +$aa782: + $p := 782; + goto $bb1; +$aa783: + $p := 783; + goto $bb1; +$aa784: + $p := 784; + goto $bb1; +$aa785: + $p := 785; + goto $bb1; +$aa786: + $p := 786; + goto $bb1; +$aa787: + $p := 787; + goto $bb1; +$aa788: + $p := 788; + goto $bb1; +$aa789: + $p := 789; + goto $bb1; +$aa790: + $p := 790; + goto $bb1; +$aa791: + $p := 791; + goto $bb1; +$aa792: + $p := 792; + goto $bb1; +$aa793: + $p := 793; + goto $bb1; +$aa794: + $p := 794; + goto $bb1; +$aa795: + $p := 795; + goto $bb1; +$aa796: + $p := 796; + goto $bb1; +$aa797: + $p := 797; + goto $bb1; +$aa798: + $p := 798; + goto $bb1; +$aa799: + $p := 799; + goto $bb1; +$aa800: + $p := 800; + goto $bb1; +$aa801: + $p := 801; + goto $bb1; +$aa802: + $p := 802; + goto $bb1; +$aa803: + $p := 803; + goto $bb1; +$aa804: + $p := 804; + goto $bb1; +$aa805: + $p := 805; + goto $bb1; +$aa806: + $p := 806; + goto $bb1; +$aa807: + $p := 807; + goto $bb1; +$aa808: + $p := 808; + goto $bb1; +$aa809: + $p := 809; + goto $bb1; +$aa810: + $p := 810; + goto $bb1; +$aa811: + $p := 811; + goto $bb1; +$aa812: + $p := 812; + goto $bb1; +$aa813: + $p := 813; + goto $bb1; +$aa814: + $p := 814; + goto $bb1; +$aa815: + $p := 815; + goto $bb1; +$aa816: + $p := 816; + goto $bb1; +$aa817: + $p := 817; + goto $bb1; +$aa818: + $p := 818; + goto $bb1; +$aa819: + $p := 819; + goto $bb1; +$aa820: + $p := 820; + goto $bb1; +$aa821: + $p := 821; + goto $bb1; +$aa822: + $p := 822; + goto $bb1; +$aa823: + $p := 823; + goto $bb1; +$aa824: + $p := 824; + goto $bb1; +$aa825: + $p := 825; + goto $bb1; +$aa826: + $p := 826; + goto $bb1; +$aa827: + $p := 827; + goto $bb1; +$aa828: + $p := 828; + goto $bb1; +$aa829: + $p := 829; + goto $bb1; +$aa830: + $p := 830; + goto $bb1; +$aa831: + $p := 831; + goto $bb1; +$aa832: + $p := 832; + goto $bb1; +$aa833: + $p := 833; + goto $bb1; +$aa834: + $p := 834; + goto $bb1; +$aa835: + $p := 835; + goto $bb1; +$aa836: + $p := 836; + goto $bb1; +$aa837: + $p := 837; + goto $bb1; +$aa838: + $p := 838; + goto $bb1; +$aa839: + $p := 839; + goto $bb1; +$aa840: + $p := 840; + goto $bb1; +$aa841: + $p := 841; + goto $bb1; +$aa842: + $p := 842; + goto $bb1; +$aa843: + $p := 843; + goto $bb1; +$aa844: + $p := 844; + goto $bb1; +$aa845: + $p := 845; + goto $bb1; +$aa846: + $p := 846; + goto $bb1; +$aa847: + $p := 847; + goto $bb1; +$aa848: + $p := 848; + goto $bb1; +$aa849: + $p := 849; + goto $bb1; +$aa850: + $p := 850; + goto $bb1; +$aa851: + $p := 851; + goto $bb1; +$aa852: + $p := 852; + goto $bb1; +$aa853: + $p := 853; + goto $bb1; +$aa854: + $p := 854; + goto $bb1; +$aa855: + $p := 855; + goto $bb1; +$aa856: + $p := 856; + goto $bb1; +$aa857: + $p := 857; + goto $bb1; +$aa858: + $p := 858; + goto $bb1; +$aa859: + $p := 859; + goto $bb1; +$aa860: + $p := 860; + goto $bb1; +$aa861: + $p := 861; + goto $bb1; +$aa862: + $p := 862; + goto $bb1; +$aa863: + $p := 863; + goto $bb1; +$aa864: + $p := 864; + goto $bb1; +$aa865: + $p := 865; + goto $bb1; +$aa866: + $p := 866; + goto $bb1; +$aa867: + $p := 867; + goto $bb1; +$aa868: + $p := 868; + goto $bb1; +$aa869: + $p := 869; + goto $bb1; +$aa870: + $p := 870; + goto $bb1; +$aa871: + $p := 871; + goto $bb1; +$aa872: + $p := 872; + goto $bb1; +$aa873: + $p := 873; + goto $bb1; +$aa874: + $p := 874; + goto $bb1; +$aa875: + $p := 875; + goto $bb1; +$aa876: + $p := 876; + goto $bb1; +$aa877: + $p := 877; + goto $bb1; +$aa878: + $p := 878; + goto $bb1; +$aa879: + $p := 879; + goto $bb1; +$aa880: + $p := 880; + goto $bb1; +$aa881: + $p := 881; + goto $bb1; +$aa882: + $p := 882; + goto $bb1; +$aa883: + $p := 883; + goto $bb1; +$aa884: + $p := 884; + goto $bb1; +$aa885: + $p := 885; + goto $bb1; +$aa886: + $p := 886; + goto $bb1; +$aa887: + $p := 887; + goto $bb1; +$aa888: + $p := 888; + goto $bb1; +$aa889: + $p := 889; + goto $bb1; +$aa890: + $p := 890; + goto $bb1; +$aa891: + $p := 891; + goto $bb1; +$aa892: + $p := 892; + goto $bb1; +$aa893: + $p := 893; + goto $bb1; +$aa894: + $p := 894; + goto $bb1; +$aa895: + $p := 895; + goto $bb1; +$aa896: + $p := 896; + goto $bb1; +$aa897: + $p := 897; + goto $bb1; +$aa898: + $p := 898; + goto $bb1; +$aa899: + $p := 899; + goto $bb1; +$aa900: + $p := 900; + goto $bb1; +$aa901: + $p := 901; + goto $bb1; +$aa902: + $p := 902; + goto $bb1; +$aa903: + $p := 903; + goto $bb1; +$aa904: + $p := 904; + goto $bb1; +$aa905: + $p := 905; + goto $bb1; +$aa906: + $p := 906; + goto $bb1; +$aa907: + $p := 907; + goto $bb1; +$aa908: + $p := 908; + goto $bb1; +$aa909: + $p := 909; + goto $bb1; +$aa910: + $p := 910; + goto $bb1; +$aa911: + $p := 911; + goto $bb1; +$aa912: + $p := 912; + goto $bb1; +$aa913: + $p := 913; + goto $bb1; +$aa914: + $p := 914; + goto $bb1; +$aa915: + $p := 915; + goto $bb1; +$aa916: + $p := 916; + goto $bb1; +$aa917: + $p := 917; + goto $bb1; +$aa918: + $p := 918; + goto $bb1; +$aa919: + $p := 919; + goto $bb1; +$aa920: + $p := 920; + goto $bb1; +$aa921: + $p := 921; + goto $bb1; +$aa922: + $p := 922; + goto $bb1; +$aa923: + $p := 923; + goto $bb1; +$aa924: + $p := 924; + goto $bb1; +$aa925: + $p := 925; + goto $bb1; +$aa926: + $p := 926; + goto $bb1; +$aa927: + $p := 927; + goto $bb1; +$aa928: + $p := 928; + goto $bb1; +$aa929: + $p := 929; + goto $bb1; +$aa930: + $p := 930; + goto $bb1; +$aa931: + $p := 931; + goto $bb1; +$aa932: + $p := 932; + goto $bb1; +$aa933: + $p := 933; + goto $bb1; +$aa934: + $p := 934; + goto $bb1; +$aa935: + $p := 935; + goto $bb1; +$aa936: + $p := 936; + goto $bb1; +$aa937: + $p := 937; + goto $bb1; +$aa938: + $p := 938; + goto $bb1; +$aa939: + $p := 939; + goto $bb1; +$aa940: + $p := 940; + goto $bb1; +$aa941: + $p := 941; + goto $bb1; +$aa942: + $p := 942; + goto $bb1; +$aa943: + $p := 943; + goto $bb1; +$aa944: + $p := 944; + goto $bb1; +$aa945: + $p := 945; + goto $bb1; +$aa946: + $p := 946; + goto $bb1; +$aa947: + $p := 947; + goto $bb1; +$aa948: + $p := 948; + goto $bb1; +$aa949: + $p := 949; + goto $bb1; +$aa950: + $p := 950; + goto $bb1; +$aa951: + $p := 951; + goto $bb1; +$aa952: + $p := 952; + goto $bb1; +$aa953: + $p := 953; + goto $bb1; +$aa954: + $p := 954; + goto $bb1; +$aa955: + $p := 955; + goto $bb1; +$aa956: + $p := 956; + goto $bb1; +$aa957: + $p := 957; + goto $bb1; +$aa958: + $p := 958; + goto $bb1; +$aa959: + $p := 959; + goto $bb1; +$aa960: + $p := 960; + goto $bb1; +$aa961: + $p := 961; + goto $bb1; +$aa962: + $p := 962; + goto $bb1; +$aa963: + $p := 963; + goto $bb1; +$aa964: + $p := 964; + goto $bb1; +$aa965: + $p := 965; + goto $bb1; +$aa966: + $p := 966; + goto $bb1; +$aa967: + $p := 967; + goto $bb1; +$aa968: + $p := 968; + goto $bb1; +$aa969: + $p := 969; + goto $bb1; +$aa970: + $p := 970; + goto $bb1; +$aa971: + $p := 971; + goto $bb1; +$aa972: + $p := 972; + goto $bb1; +$aa973: + $p := 973; + goto $bb1; +$aa974: + $p := 974; + goto $bb1; +$aa975: + $p := 975; + goto $bb1; +$aa976: + $p := 976; + goto $bb1; +$aa977: + $p := 977; + goto $bb1; +$aa978: + $p := 978; + goto $bb1; +$aa979: + $p := 979; + goto $bb1; +$aa980: + $p := 980; + goto $bb1; +$aa981: + $p := 981; + goto $bb1; +$aa982: + $p := 982; + goto $bb1; +$aa983: + $p := 983; + goto $bb1; +$aa984: + $p := 984; + goto $bb1; +$aa985: + $p := 985; + goto $bb1; +$aa986: + $p := 986; + goto $bb1; +$aa987: + $p := 987; + goto $bb1; +$aa988: + $p := 988; + goto $bb1; +$aa989: + $p := 989; + goto $bb1; +$aa990: + $p := 990; + goto $bb1; +$aa991: + $p := 991; + goto $bb1; +$aa992: + $p := 992; + goto $bb1; +$aa993: + $p := 993; + goto $bb1; +$aa994: + $p := 994; + goto $bb1; +$aa995: + $p := 995; + goto $bb1; +$aa996: + $p := 996; + goto $bb1; +$aa997: + $p := 997; + goto $bb1; +$aa998: + $p := 998; + goto $bb1; +$aa999: + $p := 999; + goto $bb1; +$aa1000: + $p := 1000; + goto $bb1; +$aa1001: + $p := 1001; + goto $bb1; +$aa1002: + $p := 1002; + goto $bb1; +$aa1003: + $p := 1003; + goto $bb1; +$aa1004: + $p := 1004; + goto $bb1; +$aa1005: + $p := 1005; + goto $bb1; +$aa1006: + $p := 1006; + goto $bb1; +$aa1007: + $p := 1007; + goto $bb1; +$aa1008: + $p := 1008; + goto $bb1; +$aa1009: + $p := 1009; + goto $bb1; +$aa1010: + $p := 1010; + goto $bb1; +$aa1011: + $p := 1011; + goto $bb1; +$aa1012: + $p := 1012; + goto $bb1; +$aa1013: + $p := 1013; + goto $bb1; +$aa1014: + $p := 1014; + goto $bb1; +$aa1015: + $p := 1015; + goto $bb1; +$aa1016: + $p := 1016; + goto $bb1; +$aa1017: + $p := 1017; + goto $bb1; +$aa1018: + $p := 1018; + goto $bb1; +$aa1019: + $p := 1019; + goto $bb1; +$aa1020: + $p := 1020; + goto $bb1; +$aa1021: + $p := 1021; + goto $bb1; +$aa1022: + $p := 1022; + goto $bb1; +$aa1023: + $p := 1023; + goto $bb1; +$aa1024: + $p := 1024; + goto $bb1; +$aa1025: + $p := 1025; + goto $bb1; +$aa1026: + $p := 1026; + goto $bb1; +$aa1027: + $p := 1027; + goto $bb1; +$aa1028: + $p := 1028; + goto $bb1; +$aa1029: + $p := 1029; + goto $bb1; +$aa1030: + $p := 1030; + goto $bb1; +$aa1031: + $p := 1031; + goto $bb1; +$aa1032: + $p := 1032; + goto $bb1; +$aa1033: + $p := 1033; + goto $bb1; +$aa1034: + $p := 1034; + goto $bb1; +$aa1035: + $p := 1035; + goto $bb1; +$aa1036: + $p := 1036; + goto $bb1; +$aa1037: + $p := 1037; + goto $bb1; +$aa1038: + $p := 1038; + goto $bb1; +$aa1039: + $p := 1039; + goto $bb1; +$aa1040: + $p := 1040; + goto $bb1; +$aa1041: + $p := 1041; + goto $bb1; +$aa1042: + $p := 1042; + goto $bb1; +$aa1043: + $p := 1043; + goto $bb1; +$aa1044: + $p := 1044; + goto $bb1; +$aa1045: + $p := 1045; + goto $bb1; +$aa1046: + $p := 1046; + goto $bb1; +$aa1047: + $p := 1047; + goto $bb1; +$aa1048: + $p := 1048; + goto $bb1; +$aa1049: + $p := 1049; + goto $bb1; +$aa1050: + $p := 1050; + goto $bb1; +$aa1051: + $p := 1051; + goto $bb1; +$aa1052: + $p := 1052; + goto $bb1; +$aa1053: + $p := 1053; + goto $bb1; +$aa1054: + $p := 1054; + goto $bb1; +$aa1055: + $p := 1055; + goto $bb1; +$aa1056: + $p := 1056; + goto $bb1; +$aa1057: + $p := 1057; + goto $bb1; +$aa1058: + $p := 1058; + goto $bb1; +$aa1059: + $p := 1059; + goto $bb1; +$aa1060: + $p := 1060; + goto $bb1; +$aa1061: + $p := 1061; + goto $bb1; +$aa1062: + $p := 1062; + goto $bb1; +$aa1063: + $p := 1063; + goto $bb1; +$aa1064: + $p := 1064; + goto $bb1; +$aa1065: + $p := 1065; + goto $bb1; +$aa1066: + $p := 1066; + goto $bb1; +$aa1067: + $p := 1067; + goto $bb1; +$aa1068: + $p := 1068; + goto $bb1; +$aa1069: + $p := 1069; + goto $bb1; +$aa1070: + $p := 1070; + goto $bb1; +$aa1071: + $p := 1071; + goto $bb1; +$aa1072: + $p := 1072; + goto $bb1; +$aa1073: + $p := 1073; + goto $bb1; +$aa1074: + $p := 1074; + goto $bb1; +$aa1075: + $p := 1075; + goto $bb1; +$aa1076: + $p := 1076; + goto $bb1; +$aa1077: + $p := 1077; + goto $bb1; +$aa1078: + $p := 1078; + goto $bb1; +$aa1079: + $p := 1079; + goto $bb1; +$aa1080: + $p := 1080; + goto $bb1; +$aa1081: + $p := 1081; + goto $bb1; +$aa1082: + $p := 1082; + goto $bb1; +$aa1083: + $p := 1083; + goto $bb1; +$aa1084: + $p := 1084; + goto $bb1; +$aa1085: + $p := 1085; + goto $bb1; +$aa1086: + $p := 1086; + goto $bb1; +$aa1087: + $p := 1087; + goto $bb1; +$aa1088: + $p := 1088; + goto $bb1; +$aa1089: + $p := 1089; + goto $bb1; +$aa1090: + $p := 1090; + goto $bb1; +$aa1091: + $p := 1091; + goto $bb1; +$aa1092: + $p := 1092; + goto $bb1; +$aa1093: + $p := 1093; + goto $bb1; +$aa1094: + $p := 1094; + goto $bb1; +$aa1095: + $p := 1095; + goto $bb1; +$aa1096: + $p := 1096; + goto $bb1; +$aa1097: + $p := 1097; + goto $bb1; +$aa1098: + $p := 1098; + goto $bb1; +$aa1099: + $p := 1099; + goto $bb1; +$aa1100: + $p := 1100; + goto $bb1; +$aa1101: + $p := 1101; + goto $bb1; +$aa1102: + $p := 1102; + goto $bb1; +$aa1103: + $p := 1103; + goto $bb1; +$aa1104: + $p := 1104; + goto $bb1; +$aa1105: + $p := 1105; + goto $bb1; +$aa1106: + $p := 1106; + goto $bb1; +$aa1107: + $p := 1107; + goto $bb1; +$aa1108: + $p := 1108; + goto $bb1; +$aa1109: + $p := 1109; + goto $bb1; +$aa1110: + $p := 1110; + goto $bb1; +$aa1111: + $p := 1111; + goto $bb1; +$aa1112: + $p := 1112; + goto $bb1; +$aa1113: + $p := 1113; + goto $bb1; +$aa1114: + $p := 1114; + goto $bb1; +$aa1115: + $p := 1115; + goto $bb1; +$aa1116: + $p := 1116; + goto $bb1; +$aa1117: + $p := 1117; + goto $bb1; +$aa1118: + $p := 1118; + goto $bb1; +$aa1119: + $p := 1119; + goto $bb1; +$aa1120: + $p := 1120; + goto $bb1; +$aa1121: + $p := 1121; + goto $bb1; +$aa1122: + $p := 1122; + goto $bb1; +$aa1123: + $p := 1123; + goto $bb1; +$aa1124: + $p := 1124; + goto $bb1; +$aa1125: + $p := 1125; + goto $bb1; +$aa1126: + $p := 1126; + goto $bb1; +$aa1127: + $p := 1127; + goto $bb1; +$aa1128: + $p := 1128; + goto $bb1; +$aa1129: + $p := 1129; + goto $bb1; +$aa1130: + $p := 1130; + goto $bb1; +$aa1131: + $p := 1131; + goto $bb1; +$aa1132: + $p := 1132; + goto $bb1; +$aa1133: + $p := 1133; + goto $bb1; +$aa1134: + $p := 1134; + goto $bb1; +$aa1135: + $p := 1135; + goto $bb1; +$aa1136: + $p := 1136; + goto $bb1; +$aa1137: + $p := 1137; + goto $bb1; +$aa1138: + $p := 1138; + goto $bb1; +$aa1139: + $p := 1139; + goto $bb1; +$aa1140: + $p := 1140; + goto $bb1; +$aa1141: + $p := 1141; + goto $bb1; +$aa1142: + $p := 1142; + goto $bb1; +$aa1143: + $p := 1143; + goto $bb1; +$aa1144: + $p := 1144; + goto $bb1; +$aa1145: + $p := 1145; + goto $bb1; +$aa1146: + $p := 1146; + goto $bb1; +$aa1147: + $p := 1147; + goto $bb1; +$aa1148: + $p := 1148; + goto $bb1; +$aa1149: + $p := 1149; + goto $bb1; +$aa1150: + $p := 1150; + goto $bb1; +$aa1151: + $p := 1151; + goto $bb1; +$aa1152: + $p := 1152; + goto $bb1; +$aa1153: + $p := 1153; + goto $bb1; +$aa1154: + $p := 1154; + goto $bb1; +$aa1155: + $p := 1155; + goto $bb1; +$aa1156: + $p := 1156; + goto $bb1; +$aa1157: + $p := 1157; + goto $bb1; +$aa1158: + $p := 1158; + goto $bb1; +$aa1159: + $p := 1159; + goto $bb1; +$aa1160: + $p := 1160; + goto $bb1; +$aa1161: + $p := 1161; + goto $bb1; +$aa1162: + $p := 1162; + goto $bb1; +$aa1163: + $p := 1163; + goto $bb1; +$aa1164: + $p := 1164; + goto $bb1; +$aa1165: + $p := 1165; + goto $bb1; +$aa1166: + $p := 1166; + goto $bb1; +$aa1167: + $p := 1167; + goto $bb1; +$aa1168: + $p := 1168; + goto $bb1; +$aa1169: + $p := 1169; + goto $bb1; +$aa1170: + $p := 1170; + goto $bb1; +$aa1171: + $p := 1171; + goto $bb1; +$aa1172: + $p := 1172; + goto $bb1; +$aa1173: + $p := 1173; + goto $bb1; +$aa1174: + $p := 1174; + goto $bb1; +$aa1175: + $p := 1175; + goto $bb1; +$aa1176: + $p := 1176; + goto $bb1; +$aa1177: + $p := 1177; + goto $bb1; +$aa1178: + $p := 1178; + goto $bb1; +$aa1179: + $p := 1179; + goto $bb1; +$aa1180: + $p := 1180; + goto $bb1; +$aa1181: + $p := 1181; + goto $bb1; +$aa1182: + $p := 1182; + goto $bb1; +$aa1183: + $p := 1183; + goto $bb1; +$aa1184: + $p := 1184; + goto $bb1; +$aa1185: + $p := 1185; + goto $bb1; +$aa1186: + $p := 1186; + goto $bb1; +$aa1187: + $p := 1187; + goto $bb1; +$aa1188: + $p := 1188; + goto $bb1; +$aa1189: + $p := 1189; + goto $bb1; +$aa1190: + $p := 1190; + goto $bb1; +$aa1191: + $p := 1191; + goto $bb1; +$aa1192: + $p := 1192; + goto $bb1; +$aa1193: + $p := 1193; + goto $bb1; +$aa1194: + $p := 1194; + goto $bb1; +$aa1195: + $p := 1195; + goto $bb1; +$aa1196: + $p := 1196; + goto $bb1; +$aa1197: + $p := 1197; + goto $bb1; +$aa1198: + $p := 1198; + goto $bb1; +$aa1199: + $p := 1199; + goto $bb1; +$aa1200: + $p := 1200; + goto $bb1; +$aa1201: + $p := 1201; + goto $bb1; +$aa1202: + $p := 1202; + goto $bb1; +$aa1203: + $p := 1203; + goto $bb1; +$aa1204: + $p := 1204; + goto $bb1; +$aa1205: + $p := 1205; + goto $bb1; +$aa1206: + $p := 1206; + goto $bb1; +$aa1207: + $p := 1207; + goto $bb1; +$aa1208: + $p := 1208; + goto $bb1; +$aa1209: + $p := 1209; + goto $bb1; +$aa1210: + $p := 1210; + goto $bb1; +$aa1211: + $p := 1211; + goto $bb1; +$aa1212: + $p := 1212; + goto $bb1; +$aa1213: + $p := 1213; + goto $bb1; +$aa1214: + $p := 1214; + goto $bb1; +$aa1215: + $p := 1215; + goto $bb1; +$aa1216: + $p := 1216; + goto $bb1; +$aa1217: + $p := 1217; + goto $bb1; +$aa1218: + $p := 1218; + goto $bb1; +$aa1219: + $p := 1219; + goto $bb1; +$aa1220: + $p := 1220; + goto $bb1; +$aa1221: + $p := 1221; + goto $bb1; +$aa1222: + $p := 1222; + goto $bb1; +$aa1223: + $p := 1223; + goto $bb1; +$aa1224: + $p := 1224; + goto $bb1; +$aa1225: + $p := 1225; + goto $bb1; +$aa1226: + $p := 1226; + goto $bb1; +$aa1227: + $p := 1227; + goto $bb1; +$aa1228: + $p := 1228; + goto $bb1; +$aa1229: + $p := 1229; + goto $bb1; +$aa1230: + $p := 1230; + goto $bb1; +$aa1231: + $p := 1231; + goto $bb1; +$aa1232: + $p := 1232; + goto $bb1; +$aa1233: + $p := 1233; + goto $bb1; +$aa1234: + $p := 1234; + goto $bb1; +$aa1235: + $p := 1235; + goto $bb1; +$aa1236: + $p := 1236; + goto $bb1; +$aa1237: + $p := 1237; + goto $bb1; +$aa1238: + $p := 1238; + goto $bb1; +$aa1239: + $p := 1239; + goto $bb1; +$aa1240: + $p := 1240; + goto $bb1; +$aa1241: + $p := 1241; + goto $bb1; +$aa1242: + $p := 1242; + goto $bb1; +$aa1243: + $p := 1243; + goto $bb1; +$aa1244: + $p := 1244; + goto $bb1; +$aa1245: + $p := 1245; + goto $bb1; +$aa1246: + $p := 1246; + goto $bb1; +$aa1247: + $p := 1247; + goto $bb1; +$aa1248: + $p := 1248; + goto $bb1; +$aa1249: + $p := 1249; + goto $bb1; +$aa1250: + $p := 1250; + goto $bb1; +$aa1251: + $p := 1251; + goto $bb1; +$aa1252: + $p := 1252; + goto $bb1; +$aa1253: + $p := 1253; + goto $bb1; +$aa1254: + $p := 1254; + goto $bb1; +$aa1255: + $p := 1255; + goto $bb1; +$aa1256: + $p := 1256; + goto $bb1; +$aa1257: + $p := 1257; + goto $bb1; +$aa1258: + $p := 1258; + goto $bb1; +$aa1259: + $p := 1259; + goto $bb1; +$aa1260: + $p := 1260; + goto $bb1; +$aa1261: + $p := 1261; + goto $bb1; +$aa1262: + $p := 1262; + goto $bb1; +$aa1263: + $p := 1263; + goto $bb1; +$aa1264: + $p := 1264; + goto $bb1; +$aa1265: + $p := 1265; + goto $bb1; +$aa1266: + $p := 1266; + goto $bb1; +$aa1267: + $p := 1267; + goto $bb1; +$aa1268: + $p := 1268; + goto $bb1; +$aa1269: + $p := 1269; + goto $bb1; +$aa1270: + $p := 1270; + goto $bb1; +$aa1271: + $p := 1271; + goto $bb1; +$aa1272: + $p := 1272; + goto $bb1; +$aa1273: + $p := 1273; + goto $bb1; +$aa1274: + $p := 1274; + goto $bb1; +$aa1275: + $p := 1275; + goto $bb1; +$aa1276: + $p := 1276; + goto $bb1; +$aa1277: + $p := 1277; + goto $bb1; +$aa1278: + $p := 1278; + goto $bb1; +$aa1279: + $p := 1279; + goto $bb1; +$aa1280: + $p := 1280; + goto $bb1; +$aa1281: + $p := 1281; + goto $bb1; +$aa1282: + $p := 1282; + goto $bb1; +$aa1283: + $p := 1283; + goto $bb1; +$aa1284: + $p := 1284; + goto $bb1; +$aa1285: + $p := 1285; + goto $bb1; +$aa1286: + $p := 1286; + goto $bb1; +$aa1287: + $p := 1287; + goto $bb1; +$aa1288: + $p := 1288; + goto $bb1; +$aa1289: + $p := 1289; + goto $bb1; +$aa1290: + $p := 1290; + goto $bb1; +$aa1291: + $p := 1291; + goto $bb1; +$aa1292: + $p := 1292; + goto $bb1; +$aa1293: + $p := 1293; + goto $bb1; +$aa1294: + $p := 1294; + goto $bb1; +$aa1295: + $p := 1295; + goto $bb1; +$aa1296: + $p := 1296; + goto $bb1; +$aa1297: + $p := 1297; + goto $bb1; +$aa1298: + $p := 1298; + goto $bb1; +$aa1299: + $p := 1299; + goto $bb1; +$aa1300: + $p := 1300; + goto $bb1; +$aa1301: + $p := 1301; + goto $bb1; +$aa1302: + $p := 1302; + goto $bb1; +$aa1303: + $p := 1303; + goto $bb1; +$aa1304: + $p := 1304; + goto $bb1; +$aa1305: + $p := 1305; + goto $bb1; +$aa1306: + $p := 1306; + goto $bb1; +$aa1307: + $p := 1307; + goto $bb1; +$aa1308: + $p := 1308; + goto $bb1; +$aa1309: + $p := 1309; + goto $bb1; +$aa1310: + $p := 1310; + goto $bb1; +$aa1311: + $p := 1311; + goto $bb1; +$aa1312: + $p := 1312; + goto $bb1; +$aa1313: + $p := 1313; + goto $bb1; +$aa1314: + $p := 1314; + goto $bb1; +$aa1315: + $p := 1315; + goto $bb1; +$aa1316: + $p := 1316; + goto $bb1; +$aa1317: + $p := 1317; + goto $bb1; +$aa1318: + $p := 1318; + goto $bb1; +$aa1319: + $p := 1319; + goto $bb1; +$aa1320: + $p := 1320; + goto $bb1; +$aa1321: + $p := 1321; + goto $bb1; +$aa1322: + $p := 1322; + goto $bb1; +$aa1323: + $p := 1323; + goto $bb1; +$aa1324: + $p := 1324; + goto $bb1; +$aa1325: + $p := 1325; + goto $bb1; +$aa1326: + $p := 1326; + goto $bb1; +$aa1327: + $p := 1327; + goto $bb1; +$aa1328: + $p := 1328; + goto $bb1; +$aa1329: + $p := 1329; + goto $bb1; +$aa1330: + $p := 1330; + goto $bb1; +$aa1331: + $p := 1331; + goto $bb1; +$aa1332: + $p := 1332; + goto $bb1; +$aa1333: + $p := 1333; + goto $bb1; +$aa1334: + $p := 1334; + goto $bb1; +$aa1335: + $p := 1335; + goto $bb1; +$aa1336: + $p := 1336; + goto $bb1; +$aa1337: + $p := 1337; + goto $bb1; +$aa1338: + $p := 1338; + goto $bb1; +$aa1339: + $p := 1339; + goto $bb1; +$aa1340: + $p := 1340; + goto $bb1; +$aa1341: + $p := 1341; + goto $bb1; +$aa1342: + $p := 1342; + goto $bb1; +$aa1343: + $p := 1343; + goto $bb1; +$aa1344: + $p := 1344; + goto $bb1; +$aa1345: + $p := 1345; + goto $bb1; +$aa1346: + $p := 1346; + goto $bb1; +$aa1347: + $p := 1347; + goto $bb1; +$aa1348: + $p := 1348; + goto $bb1; +$aa1349: + $p := 1349; + goto $bb1; +$aa1350: + $p := 1350; + goto $bb1; +$aa1351: + $p := 1351; + goto $bb1; +$aa1352: + $p := 1352; + goto $bb1; +$aa1353: + $p := 1353; + goto $bb1; +$aa1354: + $p := 1354; + goto $bb1; +$aa1355: + $p := 1355; + goto $bb1; +$aa1356: + $p := 1356; + goto $bb1; +$aa1357: + $p := 1357; + goto $bb1; +$aa1358: + $p := 1358; + goto $bb1; +$aa1359: + $p := 1359; + goto $bb1; +$aa1360: + $p := 1360; + goto $bb1; +$aa1361: + $p := 1361; + goto $bb1; +$aa1362: + $p := 1362; + goto $bb1; +$aa1363: + $p := 1363; + goto $bb1; +$aa1364: + $p := 1364; + goto $bb1; +$aa1365: + $p := 1365; + goto $bb1; +$aa1366: + $p := 1366; + goto $bb1; +$aa1367: + $p := 1367; + goto $bb1; +$aa1368: + $p := 1368; + goto $bb1; +$aa1369: + $p := 1369; + goto $bb1; +$aa1370: + $p := 1370; + goto $bb1; +$aa1371: + $p := 1371; + goto $bb1; +$aa1372: + $p := 1372; + goto $bb1; +$aa1373: + $p := 1373; + goto $bb1; +$aa1374: + $p := 1374; + goto $bb1; +$aa1375: + $p := 1375; + goto $bb1; +$aa1376: + $p := 1376; + goto $bb1; +$aa1377: + $p := 1377; + goto $bb1; +$aa1378: + $p := 1378; + goto $bb1; +$aa1379: + $p := 1379; + goto $bb1; +$aa1380: + $p := 1380; + goto $bb1; +$aa1381: + $p := 1381; + goto $bb1; +$aa1382: + $p := 1382; + goto $bb1; +$aa1383: + $p := 1383; + goto $bb1; +$aa1384: + $p := 1384; + goto $bb1; +$aa1385: + $p := 1385; + goto $bb1; +$aa1386: + $p := 1386; + goto $bb1; +$aa1387: + $p := 1387; + goto $bb1; +$aa1388: + $p := 1388; + goto $bb1; +$aa1389: + $p := 1389; + goto $bb1; +$aa1390: + $p := 1390; + goto $bb1; +$aa1391: + $p := 1391; + goto $bb1; +$aa1392: + $p := 1392; + goto $bb1; +$aa1393: + $p := 1393; + goto $bb1; +$aa1394: + $p := 1394; + goto $bb1; +$aa1395: + $p := 1395; + goto $bb1; +$aa1396: + $p := 1396; + goto $bb1; +$aa1397: + $p := 1397; + goto $bb1; +$aa1398: + $p := 1398; + goto $bb1; +$aa1399: + $p := 1399; + goto $bb1; +$aa1400: + $p := 1400; + goto $bb1; +$aa1401: + $p := 1401; + goto $bb1; +$aa1402: + $p := 1402; + goto $bb1; +$aa1403: + $p := 1403; + goto $bb1; +$aa1404: + $p := 1404; + goto $bb1; +$aa1405: + $p := 1405; + goto $bb1; +$aa1406: + $p := 1406; + goto $bb1; +$aa1407: + $p := 1407; + goto $bb1; +$aa1408: + $p := 1408; + goto $bb1; +$aa1409: + $p := 1409; + goto $bb1; +$aa1410: + $p := 1410; + goto $bb1; +$aa1411: + $p := 1411; + goto $bb1; +$aa1412: + $p := 1412; + goto $bb1; +$aa1413: + $p := 1413; + goto $bb1; +$aa1414: + $p := 1414; + goto $bb1; +$aa1415: + $p := 1415; + goto $bb1; +$aa1416: + $p := 1416; + goto $bb1; +$aa1417: + $p := 1417; + goto $bb1; +$aa1418: + $p := 1418; + goto $bb1; +$aa1419: + $p := 1419; + goto $bb1; +$aa1420: + $p := 1420; + goto $bb1; +$aa1421: + $p := 1421; + goto $bb1; +$aa1422: + $p := 1422; + goto $bb1; +$aa1423: + $p := 1423; + goto $bb1; +$aa1424: + $p := 1424; + goto $bb1; +$aa1425: + $p := 1425; + goto $bb1; +$aa1426: + $p := 1426; + goto $bb1; +$aa1427: + $p := 1427; + goto $bb1; +$aa1428: + $p := 1428; + goto $bb1; +$aa1429: + $p := 1429; + goto $bb1; +$aa1430: + $p := 1430; + goto $bb1; +$aa1431: + $p := 1431; + goto $bb1; +$aa1432: + $p := 1432; + goto $bb1; +$aa1433: + $p := 1433; + goto $bb1; +$aa1434: + $p := 1434; + goto $bb1; +$aa1435: + $p := 1435; + goto $bb1; +$aa1436: + $p := 1436; + goto $bb1; +$aa1437: + $p := 1437; + goto $bb1; +$aa1438: + $p := 1438; + goto $bb1; +$aa1439: + $p := 1439; + goto $bb1; +$aa1440: + $p := 1440; + goto $bb1; +$aa1441: + $p := 1441; + goto $bb1; +$aa1442: + $p := 1442; + goto $bb1; +$aa1443: + $p := 1443; + goto $bb1; +$aa1444: + $p := 1444; + goto $bb1; +$aa1445: + $p := 1445; + goto $bb1; +$aa1446: + $p := 1446; + goto $bb1; +$aa1447: + $p := 1447; + goto $bb1; +$aa1448: + $p := 1448; + goto $bb1; +$aa1449: + $p := 1449; + goto $bb1; +$aa1450: + $p := 1450; + goto $bb1; +$aa1451: + $p := 1451; + goto $bb1; +$aa1452: + $p := 1452; + goto $bb1; +$aa1453: + $p := 1453; + goto $bb1; +$aa1454: + $p := 1454; + goto $bb1; +$aa1455: + $p := 1455; + goto $bb1; +$aa1456: + $p := 1456; + goto $bb1; +$aa1457: + $p := 1457; + goto $bb1; +$aa1458: + $p := 1458; + goto $bb1; +$aa1459: + $p := 1459; + goto $bb1; +$aa1460: + $p := 1460; + goto $bb1; +$aa1461: + $p := 1461; + goto $bb1; +$aa1462: + $p := 1462; + goto $bb1; +$aa1463: + $p := 1463; + goto $bb1; +$aa1464: + $p := 1464; + goto $bb1; +$aa1465: + $p := 1465; + goto $bb1; +$aa1466: + $p := 1466; + goto $bb1; +$aa1467: + $p := 1467; + goto $bb1; +$aa1468: + $p := 1468; + goto $bb1; +$aa1469: + $p := 1469; + goto $bb1; +$aa1470: + $p := 1470; + goto $bb1; +$aa1471: + $p := 1471; + goto $bb1; +$aa1472: + $p := 1472; + goto $bb1; +$aa1473: + $p := 1473; + goto $bb1; +$aa1474: + $p := 1474; + goto $bb1; +$aa1475: + $p := 1475; + goto $bb1; +$aa1476: + $p := 1476; + goto $bb1; +$aa1477: + $p := 1477; + goto $bb1; +$aa1478: + $p := 1478; + goto $bb1; +$aa1479: + $p := 1479; + goto $bb1; +$aa1480: + $p := 1480; + goto $bb1; +$aa1481: + $p := 1481; + goto $bb1; +$aa1482: + $p := 1482; + goto $bb1; +$aa1483: + $p := 1483; + goto $bb1; +$aa1484: + $p := 1484; + goto $bb1; +$aa1485: + $p := 1485; + goto $bb1; +$aa1486: + $p := 1486; + goto $bb1; +$aa1487: + $p := 1487; + goto $bb1; +$aa1488: + $p := 1488; + goto $bb1; +$aa1489: + $p := 1489; + goto $bb1; +$aa1490: + $p := 1490; + goto $bb1; +$aa1491: + $p := 1491; + goto $bb1; +$aa1492: + $p := 1492; + goto $bb1; +$aa1493: + $p := 1493; + goto $bb1; +$aa1494: + $p := 1494; + goto $bb1; +$aa1495: + $p := 1495; + goto $bb1; +$aa1496: + $p := 1496; + goto $bb1; +$aa1497: + $p := 1497; + goto $bb1; +$aa1498: + $p := 1498; + goto $bb1; +$aa1499: + $p := 1499; + goto $bb1; +$aa1500: + $p := 1500; + goto $bb1; +$aa1501: + $p := 1501; + goto $bb1; +$aa1502: + $p := 1502; + goto $bb1; +$aa1503: + $p := 1503; + goto $bb1; +$aa1504: + $p := 1504; + goto $bb1; +$aa1505: + $p := 1505; + goto $bb1; +$aa1506: + $p := 1506; + goto $bb1; +$aa1507: + $p := 1507; + goto $bb1; +$aa1508: + $p := 1508; + goto $bb1; +$aa1509: + $p := 1509; + goto $bb1; +$aa1510: + $p := 1510; + goto $bb1; +$aa1511: + $p := 1511; + goto $bb1; +$aa1512: + $p := 1512; + goto $bb1; +$aa1513: + $p := 1513; + goto $bb1; +$aa1514: + $p := 1514; + goto $bb1; +$aa1515: + $p := 1515; + goto $bb1; +$aa1516: + $p := 1516; + goto $bb1; +$aa1517: + $p := 1517; + goto $bb1; +$aa1518: + $p := 1518; + goto $bb1; +$aa1519: + $p := 1519; + goto $bb1; +$aa1520: + $p := 1520; + goto $bb1; +$aa1521: + $p := 1521; + goto $bb1; +$aa1522: + $p := 1522; + goto $bb1; +$aa1523: + $p := 1523; + goto $bb1; +$aa1524: + $p := 1524; + goto $bb1; +$aa1525: + $p := 1525; + goto $bb1; +$aa1526: + $p := 1526; + goto $bb1; +$aa1527: + $p := 1527; + goto $bb1; +$aa1528: + $p := 1528; + goto $bb1; +$aa1529: + $p := 1529; + goto $bb1; +$aa1530: + $p := 1530; + goto $bb1; +$aa1531: + $p := 1531; + goto $bb1; +$aa1532: + $p := 1532; + goto $bb1; +$aa1533: + $p := 1533; + goto $bb1; +$aa1534: + $p := 1534; + goto $bb1; +$aa1535: + $p := 1535; + goto $bb1; +$aa1536: + $p := 1536; + goto $bb1; +$aa1537: + $p := 1537; + goto $bb1; +$aa1538: + $p := 1538; + goto $bb1; +$aa1539: + $p := 1539; + goto $bb1; +$aa1540: + $p := 1540; + goto $bb1; +$aa1541: + $p := 1541; + goto $bb1; +$aa1542: + $p := 1542; + goto $bb1; +$aa1543: + $p := 1543; + goto $bb1; +$aa1544: + $p := 1544; + goto $bb1; +$aa1545: + $p := 1545; + goto $bb1; +$aa1546: + $p := 1546; + goto $bb1; +$aa1547: + $p := 1547; + goto $bb1; +$aa1548: + $p := 1548; + goto $bb1; +$aa1549: + $p := 1549; + goto $bb1; +$aa1550: + $p := 1550; + goto $bb1; +$aa1551: + $p := 1551; + goto $bb1; +$aa1552: + $p := 1552; + goto $bb1; +$aa1553: + $p := 1553; + goto $bb1; +$aa1554: + $p := 1554; + goto $bb1; +$aa1555: + $p := 1555; + goto $bb1; +$aa1556: + $p := 1556; + goto $bb1; +$aa1557: + $p := 1557; + goto $bb1; +$aa1558: + $p := 1558; + goto $bb1; +$aa1559: + $p := 1559; + goto $bb1; +$aa1560: + $p := 1560; + goto $bb1; +$aa1561: + $p := 1561; + goto $bb1; +$aa1562: + $p := 1562; + goto $bb1; +$aa1563: + $p := 1563; + goto $bb1; +$aa1564: + $p := 1564; + goto $bb1; +$aa1565: + $p := 1565; + goto $bb1; +$aa1566: + $p := 1566; + goto $bb1; +$aa1567: + $p := 1567; + goto $bb1; +$aa1568: + $p := 1568; + goto $bb1; +$aa1569: + $p := 1569; + goto $bb1; +$aa1570: + $p := 1570; + goto $bb1; +$aa1571: + $p := 1571; + goto $bb1; +$aa1572: + $p := 1572; + goto $bb1; +$aa1573: + $p := 1573; + goto $bb1; +$aa1574: + $p := 1574; + goto $bb1; +$aa1575: + $p := 1575; + goto $bb1; +$aa1576: + $p := 1576; + goto $bb1; +$aa1577: + $p := 1577; + goto $bb1; +$aa1578: + $p := 1578; + goto $bb1; +$aa1579: + $p := 1579; + goto $bb1; +$aa1580: + $p := 1580; + goto $bb1; +$aa1581: + $p := 1581; + goto $bb1; +$aa1582: + $p := 1582; + goto $bb1; +$aa1583: + $p := 1583; + goto $bb1; +$aa1584: + $p := 1584; + goto $bb1; +$aa1585: + $p := 1585; + goto $bb1; +$aa1586: + $p := 1586; + goto $bb1; +$aa1587: + $p := 1587; + goto $bb1; +$aa1588: + $p := 1588; + goto $bb1; +$aa1589: + $p := 1589; + goto $bb1; +$aa1590: + $p := 1590; + goto $bb1; +$aa1591: + $p := 1591; + goto $bb1; +$aa1592: + $p := 1592; + goto $bb1; +$aa1593: + $p := 1593; + goto $bb1; +$aa1594: + $p := 1594; + goto $bb1; +$aa1595: + $p := 1595; + goto $bb1; +$aa1596: + $p := 1596; + goto $bb1; +$aa1597: + $p := 1597; + goto $bb1; +$aa1598: + $p := 1598; + goto $bb1; +$aa1599: + $p := 1599; + goto $bb1; +$aa1600: + $p := 1600; + goto $bb1; +$aa1601: + $p := 1601; + goto $bb1; +$aa1602: + $p := 1602; + goto $bb1; +$aa1603: + $p := 1603; + goto $bb1; +$aa1604: + $p := 1604; + goto $bb1; +$aa1605: + $p := 1605; + goto $bb1; +$aa1606: + $p := 1606; + goto $bb1; +$aa1607: + $p := 1607; + goto $bb1; +$aa1608: + $p := 1608; + goto $bb1; +$aa1609: + $p := 1609; + goto $bb1; +$aa1610: + $p := 1610; + goto $bb1; +$aa1611: + $p := 1611; + goto $bb1; +$aa1612: + $p := 1612; + goto $bb1; +$aa1613: + $p := 1613; + goto $bb1; +$aa1614: + $p := 1614; + goto $bb1; +$aa1615: + $p := 1615; + goto $bb1; +$aa1616: + $p := 1616; + goto $bb1; +$aa1617: + $p := 1617; + goto $bb1; +$aa1618: + $p := 1618; + goto $bb1; +$aa1619: + $p := 1619; + goto $bb1; +$aa1620: + $p := 1620; + goto $bb1; +$aa1621: + $p := 1621; + goto $bb1; +$aa1622: + $p := 1622; + goto $bb1; +$aa1623: + $p := 1623; + goto $bb1; +$aa1624: + $p := 1624; + goto $bb1; +$aa1625: + $p := 1625; + goto $bb1; +$aa1626: + $p := 1626; + goto $bb1; +$aa1627: + $p := 1627; + goto $bb1; +$aa1628: + $p := 1628; + goto $bb1; +$aa1629: + $p := 1629; + goto $bb1; +$aa1630: + $p := 1630; + goto $bb1; +$aa1631: + $p := 1631; + goto $bb1; +$aa1632: + $p := 1632; + goto $bb1; +$aa1633: + $p := 1633; + goto $bb1; +$aa1634: + $p := 1634; + goto $bb1; +$aa1635: + $p := 1635; + goto $bb1; +$aa1636: + $p := 1636; + goto $bb1; +$aa1637: + $p := 1637; + goto $bb1; +$aa1638: + $p := 1638; + goto $bb1; +$aa1639: + $p := 1639; + goto $bb1; +$aa1640: + $p := 1640; + goto $bb1; +$aa1641: + $p := 1641; + goto $bb1; +$aa1642: + $p := 1642; + goto $bb1; +$aa1643: + $p := 1643; + goto $bb1; +$aa1644: + $p := 1644; + goto $bb1; +$aa1645: + $p := 1645; + goto $bb1; +$aa1646: + $p := 1646; + goto $bb1; +$aa1647: + $p := 1647; + goto $bb1; +$aa1648: + $p := 1648; + goto $bb1; +$aa1649: + $p := 1649; + goto $bb1; +$aa1650: + $p := 1650; + goto $bb1; +$aa1651: + $p := 1651; + goto $bb1; +$aa1652: + $p := 1652; + goto $bb1; +$aa1653: + $p := 1653; + goto $bb1; +$aa1654: + $p := 1654; + goto $bb1; +$aa1655: + $p := 1655; + goto $bb1; +$aa1656: + $p := 1656; + goto $bb1; +$aa1657: + $p := 1657; + goto $bb1; +$aa1658: + $p := 1658; + goto $bb1; +$aa1659: + $p := 1659; + goto $bb1; +$aa1660: + $p := 1660; + goto $bb1; +$aa1661: + $p := 1661; + goto $bb1; +$aa1662: + $p := 1662; + goto $bb1; +$aa1663: + $p := 1663; + goto $bb1; +$aa1664: + $p := 1664; + goto $bb1; +$aa1665: + $p := 1665; + goto $bb1; +$aa1666: + $p := 1666; + goto $bb1; +$aa1667: + $p := 1667; + goto $bb1; +$aa1668: + $p := 1668; + goto $bb1; +$aa1669: + $p := 1669; + goto $bb1; +$aa1670: + $p := 1670; + goto $bb1; +$aa1671: + $p := 1671; + goto $bb1; +$aa1672: + $p := 1672; + goto $bb1; +$aa1673: + $p := 1673; + goto $bb1; +$aa1674: + $p := 1674; + goto $bb1; +$aa1675: + $p := 1675; + goto $bb1; +$aa1676: + $p := 1676; + goto $bb1; +$aa1677: + $p := 1677; + goto $bb1; +$aa1678: + $p := 1678; + goto $bb1; +$aa1679: + $p := 1679; + goto $bb1; +$aa1680: + $p := 1680; + goto $bb1; +$aa1681: + $p := 1681; + goto $bb1; +$aa1682: + $p := 1682; + goto $bb1; +$aa1683: + $p := 1683; + goto $bb1; +$aa1684: + $p := 1684; + goto $bb1; +$aa1685: + $p := 1685; + goto $bb1; +$aa1686: + $p := 1686; + goto $bb1; +$aa1687: + $p := 1687; + goto $bb1; +$aa1688: + $p := 1688; + goto $bb1; +$aa1689: + $p := 1689; + goto $bb1; +$aa1690: + $p := 1690; + goto $bb1; +$aa1691: + $p := 1691; + goto $bb1; +$aa1692: + $p := 1692; + goto $bb1; +$aa1693: + $p := 1693; + goto $bb1; +$aa1694: + $p := 1694; + goto $bb1; +$aa1695: + $p := 1695; + goto $bb1; +$aa1696: + $p := 1696; + goto $bb1; +$aa1697: + $p := 1697; + goto $bb1; +$aa1698: + $p := 1698; + goto $bb1; +$aa1699: + $p := 1699; + goto $bb1; +$aa1700: + $p := 1700; + goto $bb1; +$aa1701: + $p := 1701; + goto $bb1; +$aa1702: + $p := 1702; + goto $bb1; +$aa1703: + $p := 1703; + goto $bb1; +$aa1704: + $p := 1704; + goto $bb1; +$aa1705: + $p := 1705; + goto $bb1; +$aa1706: + $p := 1706; + goto $bb1; +$aa1707: + $p := 1707; + goto $bb1; +$aa1708: + $p := 1708; + goto $bb1; +$aa1709: + $p := 1709; + goto $bb1; +$aa1710: + $p := 1710; + goto $bb1; +$aa1711: + $p := 1711; + goto $bb1; +$aa1712: + $p := 1712; + goto $bb1; +$aa1713: + $p := 1713; + goto $bb1; +$aa1714: + $p := 1714; + goto $bb1; +$aa1715: + $p := 1715; + goto $bb1; +$aa1716: + $p := 1716; + goto $bb1; +$aa1717: + $p := 1717; + goto $bb1; +$aa1718: + $p := 1718; + goto $bb1; +$aa1719: + $p := 1719; + goto $bb1; +$aa1720: + $p := 1720; + goto $bb1; +$aa1721: + $p := 1721; + goto $bb1; +$aa1722: + $p := 1722; + goto $bb1; +$aa1723: + $p := 1723; + goto $bb1; +$aa1724: + $p := 1724; + goto $bb1; +$aa1725: + $p := 1725; + goto $bb1; +$aa1726: + $p := 1726; + goto $bb1; +$aa1727: + $p := 1727; + goto $bb1; +$aa1728: + $p := 1728; + goto $bb1; +$aa1729: + $p := 1729; + goto $bb1; +$aa1730: + $p := 1730; + goto $bb1; +$aa1731: + $p := 1731; + goto $bb1; +$aa1732: + $p := 1732; + goto $bb1; +$aa1733: + $p := 1733; + goto $bb1; +$aa1734: + $p := 1734; + goto $bb1; +$aa1735: + $p := 1735; + goto $bb1; +$aa1736: + $p := 1736; + goto $bb1; +$aa1737: + $p := 1737; + goto $bb1; +$aa1738: + $p := 1738; + goto $bb1; +$aa1739: + $p := 1739; + goto $bb1; +$aa1740: + $p := 1740; + goto $bb1; +$aa1741: + $p := 1741; + goto $bb1; +$aa1742: + $p := 1742; + goto $bb1; +$aa1743: + $p := 1743; + goto $bb1; +$aa1744: + $p := 1744; + goto $bb1; +$aa1745: + $p := 1745; + goto $bb1; +$aa1746: + $p := 1746; + goto $bb1; +$aa1747: + $p := 1747; + goto $bb1; +$aa1748: + $p := 1748; + goto $bb1; +$aa1749: + $p := 1749; + goto $bb1; +$aa1750: + $p := 1750; + goto $bb1; +$aa1751: + $p := 1751; + goto $bb1; +$aa1752: + $p := 1752; + goto $bb1; +$aa1753: + $p := 1753; + goto $bb1; +$aa1754: + $p := 1754; + goto $bb1; +$aa1755: + $p := 1755; + goto $bb1; +$aa1756: + $p := 1756; + goto $bb1; +$aa1757: + $p := 1757; + goto $bb1; +$aa1758: + $p := 1758; + goto $bb1; +$aa1759: + $p := 1759; + goto $bb1; +$aa1760: + $p := 1760; + goto $bb1; +$aa1761: + $p := 1761; + goto $bb1; +$aa1762: + $p := 1762; + goto $bb1; +$aa1763: + $p := 1763; + goto $bb1; +$aa1764: + $p := 1764; + goto $bb1; +$aa1765: + $p := 1765; + goto $bb1; +$aa1766: + $p := 1766; + goto $bb1; +$aa1767: + $p := 1767; + goto $bb1; +$aa1768: + $p := 1768; + goto $bb1; +$aa1769: + $p := 1769; + goto $bb1; +$aa1770: + $p := 1770; + goto $bb1; +$aa1771: + $p := 1771; + goto $bb1; +$aa1772: + $p := 1772; + goto $bb1; +$aa1773: + $p := 1773; + goto $bb1; +$aa1774: + $p := 1774; + goto $bb1; +$aa1775: + $p := 1775; + goto $bb1; +$aa1776: + $p := 1776; + goto $bb1; +$aa1777: + $p := 1777; + goto $bb1; +$aa1778: + $p := 1778; + goto $bb1; +$aa1779: + $p := 1779; + goto $bb1; +$aa1780: + $p := 1780; + goto $bb1; +$aa1781: + $p := 1781; + goto $bb1; +$aa1782: + $p := 1782; + goto $bb1; +$aa1783: + $p := 1783; + goto $bb1; +$aa1784: + $p := 1784; + goto $bb1; +$aa1785: + $p := 1785; + goto $bb1; +$aa1786: + $p := 1786; + goto $bb1; +$aa1787: + $p := 1787; + goto $bb1; +$aa1788: + $p := 1788; + goto $bb1; +$aa1789: + $p := 1789; + goto $bb1; +$aa1790: + $p := 1790; + goto $bb1; +$aa1791: + $p := 1791; + goto $bb1; +$aa1792: + $p := 1792; + goto $bb1; +$aa1793: + $p := 1793; + goto $bb1; +$aa1794: + $p := 1794; + goto $bb1; +$aa1795: + $p := 1795; + goto $bb1; +$aa1796: + $p := 1796; + goto $bb1; +$aa1797: + $p := 1797; + goto $bb1; +$aa1798: + $p := 1798; + goto $bb1; +$aa1799: + $p := 1799; + goto $bb1; +$aa1800: + $p := 1800; + goto $bb1; +$aa1801: + $p := 1801; + goto $bb1; +$aa1802: + $p := 1802; + goto $bb1; +$aa1803: + $p := 1803; + goto $bb1; +$aa1804: + $p := 1804; + goto $bb1; +$aa1805: + $p := 1805; + goto $bb1; +$aa1806: + $p := 1806; + goto $bb1; +$aa1807: + $p := 1807; + goto $bb1; +$aa1808: + $p := 1808; + goto $bb1; +$aa1809: + $p := 1809; + goto $bb1; +$aa1810: + $p := 1810; + goto $bb1; +$aa1811: + $p := 1811; + goto $bb1; +$aa1812: + $p := 1812; + goto $bb1; +$aa1813: + $p := 1813; + goto $bb1; +$aa1814: + $p := 1814; + goto $bb1; +$aa1815: + $p := 1815; + goto $bb1; +$aa1816: + $p := 1816; + goto $bb1; +$aa1817: + $p := 1817; + goto $bb1; +$aa1818: + $p := 1818; + goto $bb1; +$aa1819: + $p := 1819; + goto $bb1; +$aa1820: + $p := 1820; + goto $bb1; +$aa1821: + $p := 1821; + goto $bb1; +$aa1822: + $p := 1822; + goto $bb1; +$aa1823: + $p := 1823; + goto $bb1; +$aa1824: + $p := 1824; + goto $bb1; +$aa1825: + $p := 1825; + goto $bb1; +$aa1826: + $p := 1826; + goto $bb1; +$aa1827: + $p := 1827; + goto $bb1; +$aa1828: + $p := 1828; + goto $bb1; +$aa1829: + $p := 1829; + goto $bb1; +$aa1830: + $p := 1830; + goto $bb1; +$aa1831: + $p := 1831; + goto $bb1; +$aa1832: + $p := 1832; + goto $bb1; +$aa1833: + $p := 1833; + goto $bb1; +$aa1834: + $p := 1834; + goto $bb1; +$aa1835: + $p := 1835; + goto $bb1; +$aa1836: + $p := 1836; + goto $bb1; +$aa1837: + $p := 1837; + goto $bb1; +$aa1838: + $p := 1838; + goto $bb1; +$aa1839: + $p := 1839; + goto $bb1; +$aa1840: + $p := 1840; + goto $bb1; +$aa1841: + $p := 1841; + goto $bb1; +$aa1842: + $p := 1842; + goto $bb1; +$aa1843: + $p := 1843; + goto $bb1; +$aa1844: + $p := 1844; + goto $bb1; +$aa1845: + $p := 1845; + goto $bb1; +$aa1846: + $p := 1846; + goto $bb1; +$aa1847: + $p := 1847; + goto $bb1; +$aa1848: + $p := 1848; + goto $bb1; +$aa1849: + $p := 1849; + goto $bb1; +$aa1850: + $p := 1850; + goto $bb1; +$aa1851: + $p := 1851; + goto $bb1; +$aa1852: + $p := 1852; + goto $bb1; +$aa1853: + $p := 1853; + goto $bb1; +$aa1854: + $p := 1854; + goto $bb1; +$aa1855: + $p := 1855; + goto $bb1; +$aa1856: + $p := 1856; + goto $bb1; +$aa1857: + $p := 1857; + goto $bb1; +$aa1858: + $p := 1858; + goto $bb1; +$aa1859: + $p := 1859; + goto $bb1; +$aa1860: + $p := 1860; + goto $bb1; +$aa1861: + $p := 1861; + goto $bb1; +$aa1862: + $p := 1862; + goto $bb1; +$aa1863: + $p := 1863; + goto $bb1; +$aa1864: + $p := 1864; + goto $bb1; +$aa1865: + $p := 1865; + goto $bb1; +$aa1866: + $p := 1866; + goto $bb1; +$aa1867: + $p := 1867; + goto $bb1; +$aa1868: + $p := 1868; + goto $bb1; +$aa1869: + $p := 1869; + goto $bb1; +$aa1870: + $p := 1870; + goto $bb1; +$aa1871: + $p := 1871; + goto $bb1; +$aa1872: + $p := 1872; + goto $bb1; +$aa1873: + $p := 1873; + goto $bb1; +$aa1874: + $p := 1874; + goto $bb1; +$aa1875: + $p := 1875; + goto $bb1; +$aa1876: + $p := 1876; + goto $bb1; +$aa1877: + $p := 1877; + goto $bb1; +$aa1878: + $p := 1878; + goto $bb1; +$aa1879: + $p := 1879; + goto $bb1; +$aa1880: + $p := 1880; + goto $bb1; +$aa1881: + $p := 1881; + goto $bb1; +$aa1882: + $p := 1882; + goto $bb1; +$aa1883: + $p := 1883; + goto $bb1; +$aa1884: + $p := 1884; + goto $bb1; +$aa1885: + $p := 1885; + goto $bb1; +$aa1886: + $p := 1886; + goto $bb1; +$aa1887: + $p := 1887; + goto $bb1; +$aa1888: + $p := 1888; + goto $bb1; +$aa1889: + $p := 1889; + goto $bb1; +$aa1890: + $p := 1890; + goto $bb1; +$aa1891: + $p := 1891; + goto $bb1; +$aa1892: + $p := 1892; + goto $bb1; +$aa1893: + $p := 1893; + goto $bb1; +$aa1894: + $p := 1894; + goto $bb1; +$aa1895: + $p := 1895; + goto $bb1; +$aa1896: + $p := 1896; + goto $bb1; +$aa1897: + $p := 1897; + goto $bb1; +$aa1898: + $p := 1898; + goto $bb1; +$aa1899: + $p := 1899; + goto $bb1; +$aa1900: + $p := 1900; + goto $bb1; +$aa1901: + $p := 1901; + goto $bb1; +$aa1902: + $p := 1902; + goto $bb1; +$aa1903: + $p := 1903; + goto $bb1; +$aa1904: + $p := 1904; + goto $bb1; +$aa1905: + $p := 1905; + goto $bb1; +$aa1906: + $p := 1906; + goto $bb1; +$aa1907: + $p := 1907; + goto $bb1; +$aa1908: + $p := 1908; + goto $bb1; +$aa1909: + $p := 1909; + goto $bb1; +$aa1910: + $p := 1910; + goto $bb1; +$aa1911: + $p := 1911; + goto $bb1; +$aa1912: + $p := 1912; + goto $bb1; +$aa1913: + $p := 1913; + goto $bb1; +$aa1914: + $p := 1914; + goto $bb1; +$aa1915: + $p := 1915; + goto $bb1; +$aa1916: + $p := 1916; + goto $bb1; +$aa1917: + $p := 1917; + goto $bb1; +$aa1918: + $p := 1918; + goto $bb1; +$aa1919: + $p := 1919; + goto $bb1; +$aa1920: + $p := 1920; + goto $bb1; +$aa1921: + $p := 1921; + goto $bb1; +$aa1922: + $p := 1922; + goto $bb1; +$aa1923: + $p := 1923; + goto $bb1; +$aa1924: + $p := 1924; + goto $bb1; +$aa1925: + $p := 1925; + goto $bb1; +$aa1926: + $p := 1926; + goto $bb1; +$aa1927: + $p := 1927; + goto $bb1; +$aa1928: + $p := 1928; + goto $bb1; +$aa1929: + $p := 1929; + goto $bb1; +$aa1930: + $p := 1930; + goto $bb1; +$aa1931: + $p := 1931; + goto $bb1; +$aa1932: + $p := 1932; + goto $bb1; +$aa1933: + $p := 1933; + goto $bb1; +$aa1934: + $p := 1934; + goto $bb1; +$aa1935: + $p := 1935; + goto $bb1; +$aa1936: + $p := 1936; + goto $bb1; +$aa1937: + $p := 1937; + goto $bb1; +$aa1938: + $p := 1938; + goto $bb1; +$aa1939: + $p := 1939; + goto $bb1; +$aa1940: + $p := 1940; + goto $bb1; +$aa1941: + $p := 1941; + goto $bb1; +$aa1942: + $p := 1942; + goto $bb1; +$aa1943: + $p := 1943; + goto $bb1; +$aa1944: + $p := 1944; + goto $bb1; +$aa1945: + $p := 1945; + goto $bb1; +$aa1946: + $p := 1946; + goto $bb1; +$aa1947: + $p := 1947; + goto $bb1; +$aa1948: + $p := 1948; + goto $bb1; +$aa1949: + $p := 1949; + goto $bb1; +$aa1950: + $p := 1950; + goto $bb1; +$aa1951: + $p := 1951; + goto $bb1; +$aa1952: + $p := 1952; + goto $bb1; +$aa1953: + $p := 1953; + goto $bb1; +$aa1954: + $p := 1954; + goto $bb1; +$aa1955: + $p := 1955; + goto $bb1; +$aa1956: + $p := 1956; + goto $bb1; +$aa1957: + $p := 1957; + goto $bb1; +$aa1958: + $p := 1958; + goto $bb1; +$aa1959: + $p := 1959; + goto $bb1; +$aa1960: + $p := 1960; + goto $bb1; +$aa1961: + $p := 1961; + goto $bb1; +$aa1962: + $p := 1962; + goto $bb1; +$aa1963: + $p := 1963; + goto $bb1; +$aa1964: + $p := 1964; + goto $bb1; +$aa1965: + $p := 1965; + goto $bb1; +$aa1966: + $p := 1966; + goto $bb1; +$aa1967: + $p := 1967; + goto $bb1; +$aa1968: + $p := 1968; + goto $bb1; +$aa1969: + $p := 1969; + goto $bb1; +$aa1970: + $p := 1970; + goto $bb1; +$aa1971: + $p := 1971; + goto $bb1; +$aa1972: + $p := 1972; + goto $bb1; +$aa1973: + $p := 1973; + goto $bb1; +$aa1974: + $p := 1974; + goto $bb1; +$aa1975: + $p := 1975; + goto $bb1; +$aa1976: + $p := 1976; + goto $bb1; +$aa1977: + $p := 1977; + goto $bb1; +$aa1978: + $p := 1978; + goto $bb1; +$aa1979: + $p := 1979; + goto $bb1; +$aa1980: + $p := 1980; + goto $bb1; +$aa1981: + $p := 1981; + goto $bb1; +$aa1982: + $p := 1982; + goto $bb1; +$aa1983: + $p := 1983; + goto $bb1; +$aa1984: + $p := 1984; + goto $bb1; +$aa1985: + $p := 1985; + goto $bb1; +$aa1986: + $p := 1986; + goto $bb1; +$aa1987: + $p := 1987; + goto $bb1; +$aa1988: + $p := 1988; + goto $bb1; +$aa1989: + $p := 1989; + goto $bb1; +$aa1990: + $p := 1990; + goto $bb1; +$aa1991: + $p := 1991; + goto $bb1; +$aa1992: + $p := 1992; + goto $bb1; +$aa1993: + $p := 1993; + goto $bb1; +$aa1994: + $p := 1994; + goto $bb1; +$aa1995: + $p := 1995; + goto $bb1; +$aa1996: + $p := 1996; + goto $bb1; +$aa1997: + $p := 1997; + goto $bb1; +$aa1998: + $p := 1998; + goto $bb1; +$aa1999: + $p := 1999; + goto $bb1; +$aa2000: + $p := 2000; + goto $bb1; +$aa2001: + $p := 2001; + goto $bb1; +$aa2002: + $p := 2002; + goto $bb1; +$aa2003: + $p := 2003; + goto $bb1; +$aa2004: + $p := 2004; + goto $bb1; +$aa2005: + $p := 2005; + goto $bb1; +$aa2006: + $p := 2006; + goto $bb1; +$aa2007: + $p := 2007; + goto $bb1; +$aa2008: + $p := 2008; + goto $bb1; +$aa2009: + $p := 2009; + goto $bb1; +$aa2010: + $p := 2010; + goto $bb1; +$aa2011: + $p := 2011; + goto $bb1; +$aa2012: + $p := 2012; + goto $bb1; +$aa2013: + $p := 2013; + goto $bb1; +$aa2014: + $p := 2014; + goto $bb1; +$aa2015: + $p := 2015; + goto $bb1; +$aa2016: + $p := 2016; + goto $bb1; +$aa2017: + $p := 2017; + goto $bb1; +$aa2018: + $p := 2018; + goto $bb1; +$aa2019: + $p := 2019; + goto $bb1; +$aa2020: + $p := 2020; + goto $bb1; +$aa2021: + $p := 2021; + goto $bb1; +$aa2022: + $p := 2022; + goto $bb1; +$aa2023: + $p := 2023; + goto $bb1; +$aa2024: + $p := 2024; + goto $bb1; +$aa2025: + $p := 2025; + goto $bb1; +$aa2026: + $p := 2026; + goto $bb1; +$aa2027: + $p := 2027; + goto $bb1; +$aa2028: + $p := 2028; + goto $bb1; +$aa2029: + $p := 2029; + goto $bb1; +$aa2030: + $p := 2030; + goto $bb1; +$aa2031: + $p := 2031; + goto $bb1; +$aa2032: + $p := 2032; + goto $bb1; +$aa2033: + $p := 2033; + goto $bb1; +$aa2034: + $p := 2034; + goto $bb1; +$aa2035: + $p := 2035; + goto $bb1; +$aa2036: + $p := 2036; + goto $bb1; +$aa2037: + $p := 2037; + goto $bb1; +$aa2038: + $p := 2038; + goto $bb1; +$aa2039: + $p := 2039; + goto $bb1; +$aa2040: + $p := 2040; + goto $bb1; +$aa2041: + $p := 2041; + goto $bb1; +$aa2042: + $p := 2042; + goto $bb1; +$aa2043: + $p := 2043; + goto $bb1; +$aa2044: + $p := 2044; + goto $bb1; +$aa2045: + $p := 2045; + goto $bb1; +$aa2046: + $p := 2046; + goto $bb1; +$aa2047: + $p := 2047; + goto $bb1; +$aa2048: + $p := 2048; + goto $bb1; +$aa2049: + $p := 2049; + goto $bb1; +$aa2050: + $p := 2050; + goto $bb1; +$aa2051: + $p := 2051; + goto $bb1; +$aa2052: + $p := 2052; + goto $bb1; +$aa2053: + $p := 2053; + goto $bb1; +$aa2054: + $p := 2054; + goto $bb1; +$aa2055: + $p := 2055; + goto $bb1; +$aa2056: + $p := 2056; + goto $bb1; +$aa2057: + $p := 2057; + goto $bb1; +$aa2058: + $p := 2058; + goto $bb1; +$aa2059: + $p := 2059; + goto $bb1; +$aa2060: + $p := 2060; + goto $bb1; +$aa2061: + $p := 2061; + goto $bb1; +$aa2062: + $p := 2062; + goto $bb1; +$aa2063: + $p := 2063; + goto $bb1; +$aa2064: + $p := 2064; + goto $bb1; +$aa2065: + $p := 2065; + goto $bb1; +$aa2066: + $p := 2066; + goto $bb1; +$aa2067: + $p := 2067; + goto $bb1; +$aa2068: + $p := 2068; + goto $bb1; +$aa2069: + $p := 2069; + goto $bb1; +$aa2070: + $p := 2070; + goto $bb1; +$aa2071: + $p := 2071; + goto $bb1; +$aa2072: + $p := 2072; + goto $bb1; +$aa2073: + $p := 2073; + goto $bb1; +$aa2074: + $p := 2074; + goto $bb1; +$aa2075: + $p := 2075; + goto $bb1; +$aa2076: + $p := 2076; + goto $bb1; +$aa2077: + $p := 2077; + goto $bb1; +$aa2078: + $p := 2078; + goto $bb1; +$aa2079: + $p := 2079; + goto $bb1; +$aa2080: + $p := 2080; + goto $bb1; +$aa2081: + $p := 2081; + goto $bb1; +$aa2082: + $p := 2082; + goto $bb1; +$aa2083: + $p := 2083; + goto $bb1; +$aa2084: + $p := 2084; + goto $bb1; +$aa2085: + $p := 2085; + goto $bb1; +$aa2086: + $p := 2086; + goto $bb1; +$aa2087: + $p := 2087; + goto $bb1; +$aa2088: + $p := 2088; + goto $bb1; +$aa2089: + $p := 2089; + goto $bb1; +$aa2090: + $p := 2090; + goto $bb1; +$aa2091: + $p := 2091; + goto $bb1; +$aa2092: + $p := 2092; + goto $bb1; +$aa2093: + $p := 2093; + goto $bb1; +$aa2094: + $p := 2094; + goto $bb1; +$aa2095: + $p := 2095; + goto $bb1; +$aa2096: + $p := 2096; + goto $bb1; +$aa2097: + $p := 2097; + goto $bb1; +$aa2098: + $p := 2098; + goto $bb1; +$aa2099: + $p := 2099; + goto $bb1; +$aa2100: + $p := 2100; + goto $bb1; +$aa2101: + $p := 2101; + goto $bb1; +$aa2102: + $p := 2102; + goto $bb1; +$aa2103: + $p := 2103; + goto $bb1; +$aa2104: + $p := 2104; + goto $bb1; +$aa2105: + $p := 2105; + goto $bb1; +$aa2106: + $p := 2106; + goto $bb1; +$aa2107: + $p := 2107; + goto $bb1; +$aa2108: + $p := 2108; + goto $bb1; +$aa2109: + $p := 2109; + goto $bb1; +$aa2110: + $p := 2110; + goto $bb1; +$aa2111: + $p := 2111; + goto $bb1; +$aa2112: + $p := 2112; + goto $bb1; +$aa2113: + $p := 2113; + goto $bb1; +$aa2114: + $p := 2114; + goto $bb1; +$aa2115: + $p := 2115; + goto $bb1; +$aa2116: + $p := 2116; + goto $bb1; +$aa2117: + $p := 2117; + goto $bb1; +$aa2118: + $p := 2118; + goto $bb1; +$aa2119: + $p := 2119; + goto $bb1; +$aa2120: + $p := 2120; + goto $bb1; +$aa2121: + $p := 2121; + goto $bb1; +$aa2122: + $p := 2122; + goto $bb1; +$aa2123: + $p := 2123; + goto $bb1; +$aa2124: + $p := 2124; + goto $bb1; +$aa2125: + $p := 2125; + goto $bb1; +$aa2126: + $p := 2126; + goto $bb1; +$aa2127: + $p := 2127; + goto $bb1; +$aa2128: + $p := 2128; + goto $bb1; +$aa2129: + $p := 2129; + goto $bb1; +$aa2130: + $p := 2130; + goto $bb1; +$aa2131: + $p := 2131; + goto $bb1; +$aa2132: + $p := 2132; + goto $bb1; +$aa2133: + $p := 2133; + goto $bb1; +$aa2134: + $p := 2134; + goto $bb1; +$aa2135: + $p := 2135; + goto $bb1; +$aa2136: + $p := 2136; + goto $bb1; +$aa2137: + $p := 2137; + goto $bb1; +$aa2138: + $p := 2138; + goto $bb1; +$aa2139: + $p := 2139; + goto $bb1; +$aa2140: + $p := 2140; + goto $bb1; +$aa2141: + $p := 2141; + goto $bb1; +$aa2142: + $p := 2142; + goto $bb1; +$aa2143: + $p := 2143; + goto $bb1; +$aa2144: + $p := 2144; + goto $bb1; +$aa2145: + $p := 2145; + goto $bb1; +$aa2146: + $p := 2146; + goto $bb1; +$aa2147: + $p := 2147; + goto $bb1; +$aa2148: + $p := 2148; + goto $bb1; +$aa2149: + $p := 2149; + goto $bb1; +$aa2150: + $p := 2150; + goto $bb1; +$aa2151: + $p := 2151; + goto $bb1; +$aa2152: + $p := 2152; + goto $bb1; +$aa2153: + $p := 2153; + goto $bb1; +$aa2154: + $p := 2154; + goto $bb1; +$aa2155: + $p := 2155; + goto $bb1; +$aa2156: + $p := 2156; + goto $bb1; +$aa2157: + $p := 2157; + goto $bb1; +$aa2158: + $p := 2158; + goto $bb1; +$aa2159: + $p := 2159; + goto $bb1; +$aa2160: + $p := 2160; + goto $bb1; +$aa2161: + $p := 2161; + goto $bb1; +$aa2162: + $p := 2162; + goto $bb1; +$aa2163: + $p := 2163; + goto $bb1; +$aa2164: + $p := 2164; + goto $bb1; +$aa2165: + $p := 2165; + goto $bb1; +$aa2166: + $p := 2166; + goto $bb1; +$aa2167: + $p := 2167; + goto $bb1; +$aa2168: + $p := 2168; + goto $bb1; +$aa2169: + $p := 2169; + goto $bb1; +$aa2170: + $p := 2170; + goto $bb1; +$aa2171: + $p := 2171; + goto $bb1; +$aa2172: + $p := 2172; + goto $bb1; +$aa2173: + $p := 2173; + goto $bb1; +$aa2174: + $p := 2174; + goto $bb1; +$aa2175: + $p := 2175; + goto $bb1; +$aa2176: + $p := 2176; + goto $bb1; +$aa2177: + $p := 2177; + goto $bb1; +$aa2178: + $p := 2178; + goto $bb1; +$aa2179: + $p := 2179; + goto $bb1; +$aa2180: + $p := 2180; + goto $bb1; +$aa2181: + $p := 2181; + goto $bb1; +$aa2182: + $p := 2182; + goto $bb1; +$aa2183: + $p := 2183; + goto $bb1; +$aa2184: + $p := 2184; + goto $bb1; +$aa2185: + $p := 2185; + goto $bb1; +$aa2186: + $p := 2186; + goto $bb1; +$aa2187: + $p := 2187; + goto $bb1; +$aa2188: + $p := 2188; + goto $bb1; +$aa2189: + $p := 2189; + goto $bb1; +$aa2190: + $p := 2190; + goto $bb1; +$aa2191: + $p := 2191; + goto $bb1; +$aa2192: + $p := 2192; + goto $bb1; +$aa2193: + $p := 2193; + goto $bb1; +$aa2194: + $p := 2194; + goto $bb1; +$aa2195: + $p := 2195; + goto $bb1; +$aa2196: + $p := 2196; + goto $bb1; +$aa2197: + $p := 2197; + goto $bb1; +$aa2198: + $p := 2198; + goto $bb1; +$aa2199: + $p := 2199; + goto $bb1; +$aa2200: + $p := 2200; + goto $bb1; +$aa2201: + $p := 2201; + goto $bb1; +$aa2202: + $p := 2202; + goto $bb1; +$aa2203: + $p := 2203; + goto $bb1; +$aa2204: + $p := 2204; + goto $bb1; +$aa2205: + $p := 2205; + goto $bb1; +$aa2206: + $p := 2206; + goto $bb1; +$aa2207: + $p := 2207; + goto $bb1; +$aa2208: + $p := 2208; + goto $bb1; +$aa2209: + $p := 2209; + goto $bb1; +$aa2210: + $p := 2210; + goto $bb1; +$aa2211: + $p := 2211; + goto $bb1; +$aa2212: + $p := 2212; + goto $bb1; +$aa2213: + $p := 2213; + goto $bb1; +$aa2214: + $p := 2214; + goto $bb1; +$aa2215: + $p := 2215; + goto $bb1; +$aa2216: + $p := 2216; + goto $bb1; +$aa2217: + $p := 2217; + goto $bb1; +$aa2218: + $p := 2218; + goto $bb1; +$aa2219: + $p := 2219; + goto $bb1; +$aa2220: + $p := 2220; + goto $bb1; +$aa2221: + $p := 2221; + goto $bb1; +$aa2222: + $p := 2222; + goto $bb1; +$aa2223: + $p := 2223; + goto $bb1; +$aa2224: + $p := 2224; + goto $bb1; +$aa2225: + $p := 2225; + goto $bb1; +$aa2226: + $p := 2226; + goto $bb1; +$aa2227: + $p := 2227; + goto $bb1; +$aa2228: + $p := 2228; + goto $bb1; +$aa2229: + $p := 2229; + goto $bb1; +$aa2230: + $p := 2230; + goto $bb1; +$aa2231: + $p := 2231; + goto $bb1; +$aa2232: + $p := 2232; + goto $bb1; +$aa2233: + $p := 2233; + goto $bb1; +$aa2234: + $p := 2234; + goto $bb1; +$aa2235: + $p := 2235; + goto $bb1; +$aa2236: + $p := 2236; + goto $bb1; +$aa2237: + $p := 2237; + goto $bb1; +$aa2238: + $p := 2238; + goto $bb1; +$aa2239: + $p := 2239; + goto $bb1; +$aa2240: + $p := 2240; + goto $bb1; +$aa2241: + $p := 2241; + goto $bb1; +$aa2242: + $p := 2242; + goto $bb1; +$aa2243: + $p := 2243; + goto $bb1; +$aa2244: + $p := 2244; + goto $bb1; +$aa2245: + $p := 2245; + goto $bb1; +$aa2246: + $p := 2246; + goto $bb1; +$aa2247: + $p := 2247; + goto $bb1; +$aa2248: + $p := 2248; + goto $bb1; +$aa2249: + $p := 2249; + goto $bb1; +$aa2250: + $p := 2250; + goto $bb1; +$aa2251: + $p := 2251; + goto $bb1; +$aa2252: + $p := 2252; + goto $bb1; +$aa2253: + $p := 2253; + goto $bb1; +$aa2254: + $p := 2254; + goto $bb1; +$aa2255: + $p := 2255; + goto $bb1; +$aa2256: + $p := 2256; + goto $bb1; +$aa2257: + $p := 2257; + goto $bb1; +$aa2258: + $p := 2258; + goto $bb1; +$aa2259: + $p := 2259; + goto $bb1; +$aa2260: + $p := 2260; + goto $bb1; +$aa2261: + $p := 2261; + goto $bb1; +$aa2262: + $p := 2262; + goto $bb1; +$aa2263: + $p := 2263; + goto $bb1; +$aa2264: + $p := 2264; + goto $bb1; +$aa2265: + $p := 2265; + goto $bb1; +$aa2266: + $p := 2266; + goto $bb1; +$aa2267: + $p := 2267; + goto $bb1; +$aa2268: + $p := 2268; + goto $bb1; +$aa2269: + $p := 2269; + goto $bb1; +$aa2270: + $p := 2270; + goto $bb1; +$aa2271: + $p := 2271; + goto $bb1; +$aa2272: + $p := 2272; + goto $bb1; +$aa2273: + $p := 2273; + goto $bb1; +$aa2274: + $p := 2274; + goto $bb1; +$aa2275: + $p := 2275; + goto $bb1; +$aa2276: + $p := 2276; + goto $bb1; +$aa2277: + $p := 2277; + goto $bb1; +$aa2278: + $p := 2278; + goto $bb1; +$aa2279: + $p := 2279; + goto $bb1; +$aa2280: + $p := 2280; + goto $bb1; +$aa2281: + $p := 2281; + goto $bb1; +$aa2282: + $p := 2282; + goto $bb1; +$aa2283: + $p := 2283; + goto $bb1; +$aa2284: + $p := 2284; + goto $bb1; +$aa2285: + $p := 2285; + goto $bb1; +$aa2286: + $p := 2286; + goto $bb1; +$aa2287: + $p := 2287; + goto $bb1; +$aa2288: + $p := 2288; + goto $bb1; +$aa2289: + $p := 2289; + goto $bb1; +$aa2290: + $p := 2290; + goto $bb1; +$aa2291: + $p := 2291; + goto $bb1; +$aa2292: + $p := 2292; + goto $bb1; +$aa2293: + $p := 2293; + goto $bb1; +$aa2294: + $p := 2294; + goto $bb1; +$aa2295: + $p := 2295; + goto $bb1; +$aa2296: + $p := 2296; + goto $bb1; +$aa2297: + $p := 2297; + goto $bb1; +$aa2298: + $p := 2298; + goto $bb1; +$aa2299: + $p := 2299; + goto $bb1; +$aa2300: + $p := 2300; + goto $bb1; +$aa2301: + $p := 2301; + goto $bb1; +$aa2302: + $p := 2302; + goto $bb1; +$aa2303: + $p := 2303; + goto $bb1; +$aa2304: + $p := 2304; + goto $bb1; +$aa2305: + $p := 2305; + goto $bb1; +$aa2306: + $p := 2306; + goto $bb1; +$aa2307: + $p := 2307; + goto $bb1; +$aa2308: + $p := 2308; + goto $bb1; +$aa2309: + $p := 2309; + goto $bb1; +$aa2310: + $p := 2310; + goto $bb1; +$aa2311: + $p := 2311; + goto $bb1; +$aa2312: + $p := 2312; + goto $bb1; +$aa2313: + $p := 2313; + goto $bb1; +$aa2314: + $p := 2314; + goto $bb1; +$aa2315: + $p := 2315; + goto $bb1; +$aa2316: + $p := 2316; + goto $bb1; +$aa2317: + $p := 2317; + goto $bb1; +$aa2318: + $p := 2318; + goto $bb1; +$aa2319: + $p := 2319; + goto $bb1; +$aa2320: + $p := 2320; + goto $bb1; +$aa2321: + $p := 2321; + goto $bb1; +$aa2322: + $p := 2322; + goto $bb1; +$aa2323: + $p := 2323; + goto $bb1; +$aa2324: + $p := 2324; + goto $bb1; +$aa2325: + $p := 2325; + goto $bb1; +$aa2326: + $p := 2326; + goto $bb1; +$aa2327: + $p := 2327; + goto $bb1; +$aa2328: + $p := 2328; + goto $bb1; +$aa2329: + $p := 2329; + goto $bb1; +$aa2330: + $p := 2330; + goto $bb1; +$aa2331: + $p := 2331; + goto $bb1; +$aa2332: + $p := 2332; + goto $bb1; +$aa2333: + $p := 2333; + goto $bb1; +$aa2334: + $p := 2334; + goto $bb1; +$aa2335: + $p := 2335; + goto $bb1; +$aa2336: + $p := 2336; + goto $bb1; +$aa2337: + $p := 2337; + goto $bb1; +$aa2338: + $p := 2338; + goto $bb1; +$aa2339: + $p := 2339; + goto $bb1; +$aa2340: + $p := 2340; + goto $bb1; +$aa2341: + $p := 2341; + goto $bb1; +$aa2342: + $p := 2342; + goto $bb1; +$aa2343: + $p := 2343; + goto $bb1; +$aa2344: + $p := 2344; + goto $bb1; +$aa2345: + $p := 2345; + goto $bb1; +$aa2346: + $p := 2346; + goto $bb1; +$aa2347: + $p := 2347; + goto $bb1; +$aa2348: + $p := 2348; + goto $bb1; +$aa2349: + $p := 2349; + goto $bb1; +$aa2350: + $p := 2350; + goto $bb1; +$aa2351: + $p := 2351; + goto $bb1; +$aa2352: + $p := 2352; + goto $bb1; +$aa2353: + $p := 2353; + goto $bb1; +$aa2354: + $p := 2354; + goto $bb1; +$aa2355: + $p := 2355; + goto $bb1; +$aa2356: + $p := 2356; + goto $bb1; +$aa2357: + $p := 2357; + goto $bb1; +$aa2358: + $p := 2358; + goto $bb1; +$aa2359: + $p := 2359; + goto $bb1; +$aa2360: + $p := 2360; + goto $bb1; +$aa2361: + $p := 2361; + goto $bb1; +$aa2362: + $p := 2362; + goto $bb1; +$aa2363: + $p := 2363; + goto $bb1; +$aa2364: + $p := 2364; + goto $bb1; +$aa2365: + $p := 2365; + goto $bb1; +$aa2366: + $p := 2366; + goto $bb1; +$aa2367: + $p := 2367; + goto $bb1; +$aa2368: + $p := 2368; + goto $bb1; +$aa2369: + $p := 2369; + goto $bb1; +$aa2370: + $p := 2370; + goto $bb1; +$aa2371: + $p := 2371; + goto $bb1; +$aa2372: + $p := 2372; + goto $bb1; +$aa2373: + $p := 2373; + goto $bb1; +$aa2374: + $p := 2374; + goto $bb1; +$aa2375: + $p := 2375; + goto $bb1; +$aa2376: + $p := 2376; + goto $bb1; +$aa2377: + $p := 2377; + goto $bb1; +$aa2378: + $p := 2378; + goto $bb1; +$aa2379: + $p := 2379; + goto $bb1; +$aa2380: + $p := 2380; + goto $bb1; +$aa2381: + $p := 2381; + goto $bb1; +$aa2382: + $p := 2382; + goto $bb1; +$aa2383: + $p := 2383; + goto $bb1; +$aa2384: + $p := 2384; + goto $bb1; +$aa2385: + $p := 2385; + goto $bb1; +$aa2386: + $p := 2386; + goto $bb1; +$aa2387: + $p := 2387; + goto $bb1; +$aa2388: + $p := 2388; + goto $bb1; +$aa2389: + $p := 2389; + goto $bb1; +$aa2390: + $p := 2390; + goto $bb1; +$aa2391: + $p := 2391; + goto $bb1; +$aa2392: + $p := 2392; + goto $bb1; +$aa2393: + $p := 2393; + goto $bb1; +$aa2394: + $p := 2394; + goto $bb1; +$aa2395: + $p := 2395; + goto $bb1; +$aa2396: + $p := 2396; + goto $bb1; +$aa2397: + $p := 2397; + goto $bb1; +$aa2398: + $p := 2398; + goto $bb1; +$aa2399: + $p := 2399; + goto $bb1; +$aa2400: + $p := 2400; + goto $bb1; +$aa2401: + $p := 2401; + goto $bb1; +$aa2402: + $p := 2402; + goto $bb1; +$aa2403: + $p := 2403; + goto $bb1; +$aa2404: + $p := 2404; + goto $bb1; +$aa2405: + $p := 2405; + goto $bb1; +$aa2406: + $p := 2406; + goto $bb1; +$aa2407: + $p := 2407; + goto $bb1; +$aa2408: + $p := 2408; + goto $bb1; +$aa2409: + $p := 2409; + goto $bb1; +$aa2410: + $p := 2410; + goto $bb1; +$aa2411: + $p := 2411; + goto $bb1; +$aa2412: + $p := 2412; + goto $bb1; +$aa2413: + $p := 2413; + goto $bb1; +$aa2414: + $p := 2414; + goto $bb1; +$aa2415: + $p := 2415; + goto $bb1; +$aa2416: + $p := 2416; + goto $bb1; +$aa2417: + $p := 2417; + goto $bb1; +$aa2418: + $p := 2418; + goto $bb1; +$aa2419: + $p := 2419; + goto $bb1; +$aa2420: + $p := 2420; + goto $bb1; +$aa2421: + $p := 2421; + goto $bb1; +$aa2422: + $p := 2422; + goto $bb1; +$aa2423: + $p := 2423; + goto $bb1; +$aa2424: + $p := 2424; + goto $bb1; +$aa2425: + $p := 2425; + goto $bb1; +$aa2426: + $p := 2426; + goto $bb1; +$aa2427: + $p := 2427; + goto $bb1; +$aa2428: + $p := 2428; + goto $bb1; +$aa2429: + $p := 2429; + goto $bb1; +$aa2430: + $p := 2430; + goto $bb1; +$aa2431: + $p := 2431; + goto $bb1; +$aa2432: + $p := 2432; + goto $bb1; +$aa2433: + $p := 2433; + goto $bb1; +$aa2434: + $p := 2434; + goto $bb1; +$aa2435: + $p := 2435; + goto $bb1; +$aa2436: + $p := 2436; + goto $bb1; +$aa2437: + $p := 2437; + goto $bb1; +$aa2438: + $p := 2438; + goto $bb1; +$aa2439: + $p := 2439; + goto $bb1; +$aa2440: + $p := 2440; + goto $bb1; +$aa2441: + $p := 2441; + goto $bb1; +$aa2442: + $p := 2442; + goto $bb1; +$aa2443: + $p := 2443; + goto $bb1; +$aa2444: + $p := 2444; + goto $bb1; +$aa2445: + $p := 2445; + goto $bb1; +$aa2446: + $p := 2446; + goto $bb1; +$aa2447: + $p := 2447; + goto $bb1; +$aa2448: + $p := 2448; + goto $bb1; +$aa2449: + $p := 2449; + goto $bb1; +$aa2450: + $p := 2450; + goto $bb1; +$aa2451: + $p := 2451; + goto $bb1; +$aa2452: + $p := 2452; + goto $bb1; +$aa2453: + $p := 2453; + goto $bb1; +$aa2454: + $p := 2454; + goto $bb1; +$aa2455: + $p := 2455; + goto $bb1; +$aa2456: + $p := 2456; + goto $bb1; +$aa2457: + $p := 2457; + goto $bb1; +$aa2458: + $p := 2458; + goto $bb1; +$aa2459: + $p := 2459; + goto $bb1; +$aa2460: + $p := 2460; + goto $bb1; +$aa2461: + $p := 2461; + goto $bb1; +$aa2462: + $p := 2462; + goto $bb1; +$aa2463: + $p := 2463; + goto $bb1; +$aa2464: + $p := 2464; + goto $bb1; +$aa2465: + $p := 2465; + goto $bb1; +$aa2466: + $p := 2466; + goto $bb1; +$aa2467: + $p := 2467; + goto $bb1; +$aa2468: + $p := 2468; + goto $bb1; +$aa2469: + $p := 2469; + goto $bb1; +$aa2470: + $p := 2470; + goto $bb1; +$aa2471: + $p := 2471; + goto $bb1; +$aa2472: + $p := 2472; + goto $bb1; +$aa2473: + $p := 2473; + goto $bb1; +$aa2474: + $p := 2474; + goto $bb1; +$aa2475: + $p := 2475; + goto $bb1; +$aa2476: + $p := 2476; + goto $bb1; +$aa2477: + $p := 2477; + goto $bb1; +$aa2478: + $p := 2478; + goto $bb1; +$aa2479: + $p := 2479; + goto $bb1; +$aa2480: + $p := 2480; + goto $bb1; +$aa2481: + $p := 2481; + goto $bb1; +$aa2482: + $p := 2482; + goto $bb1; +$aa2483: + $p := 2483; + goto $bb1; +$aa2484: + $p := 2484; + goto $bb1; +$aa2485: + $p := 2485; + goto $bb1; +$aa2486: + $p := 2486; + goto $bb1; +$aa2487: + $p := 2487; + goto $bb1; +$aa2488: + $p := 2488; + goto $bb1; +$aa2489: + $p := 2489; + goto $bb1; +$aa2490: + $p := 2490; + goto $bb1; +$aa2491: + $p := 2491; + goto $bb1; +$aa2492: + $p := 2492; + goto $bb1; +$aa2493: + $p := 2493; + goto $bb1; +$aa2494: + $p := 2494; + goto $bb1; +$aa2495: + $p := 2495; + goto $bb1; +$aa2496: + $p := 2496; + goto $bb1; +$aa2497: + $p := 2497; + goto $bb1; +$aa2498: + $p := 2498; + goto $bb1; +$aa2499: + $p := 2499; + goto $bb1; +$aa2500: + $p := 2500; + goto $bb1; +$aa2501: + $p := 2501; + goto $bb1; +$aa2502: + $p := 2502; + goto $bb1; +$aa2503: + $p := 2503; + goto $bb1; +$aa2504: + $p := 2504; + goto $bb1; +$aa2505: + $p := 2505; + goto $bb1; +$aa2506: + $p := 2506; + goto $bb1; +$aa2507: + $p := 2507; + goto $bb1; +$aa2508: + $p := 2508; + goto $bb1; +$aa2509: + $p := 2509; + goto $bb1; +$aa2510: + $p := 2510; + goto $bb1; +$aa2511: + $p := 2511; + goto $bb1; +$aa2512: + $p := 2512; + goto $bb1; +$aa2513: + $p := 2513; + goto $bb1; +$aa2514: + $p := 2514; + goto $bb1; +$aa2515: + $p := 2515; + goto $bb1; +$aa2516: + $p := 2516; + goto $bb1; +$aa2517: + $p := 2517; + goto $bb1; +$aa2518: + $p := 2518; + goto $bb1; +$aa2519: + $p := 2519; + goto $bb1; +$aa2520: + $p := 2520; + goto $bb1; +$aa2521: + $p := 2521; + goto $bb1; +$aa2522: + $p := 2522; + goto $bb1; +$aa2523: + $p := 2523; + goto $bb1; +$aa2524: + $p := 2524; + goto $bb1; +$aa2525: + $p := 2525; + goto $bb1; +$aa2526: + $p := 2526; + goto $bb1; +$aa2527: + $p := 2527; + goto $bb1; +$aa2528: + $p := 2528; + goto $bb1; +$aa2529: + $p := 2529; + goto $bb1; +$aa2530: + $p := 2530; + goto $bb1; +$aa2531: + $p := 2531; + goto $bb1; +$aa2532: + $p := 2532; + goto $bb1; +$aa2533: + $p := 2533; + goto $bb1; +$aa2534: + $p := 2534; + goto $bb1; +$aa2535: + $p := 2535; + goto $bb1; +$aa2536: + $p := 2536; + goto $bb1; +$aa2537: + $p := 2537; + goto $bb1; +$aa2538: + $p := 2538; + goto $bb1; +$aa2539: + $p := 2539; + goto $bb1; +$aa2540: + $p := 2540; + goto $bb1; +$aa2541: + $p := 2541; + goto $bb1; +$aa2542: + $p := 2542; + goto $bb1; +$aa2543: + $p := 2543; + goto $bb1; +$aa2544: + $p := 2544; + goto $bb1; +$aa2545: + $p := 2545; + goto $bb1; +$aa2546: + $p := 2546; + goto $bb1; +$aa2547: + $p := 2547; + goto $bb1; +$aa2548: + $p := 2548; + goto $bb1; +$aa2549: + $p := 2549; + goto $bb1; +$aa2550: + $p := 2550; + goto $bb1; +$aa2551: + $p := 2551; + goto $bb1; +$aa2552: + $p := 2552; + goto $bb1; +$aa2553: + $p := 2553; + goto $bb1; +$aa2554: + $p := 2554; + goto $bb1; +$aa2555: + $p := 2555; + goto $bb1; +$aa2556: + $p := 2556; + goto $bb1; +$aa2557: + $p := 2557; + goto $bb1; +$aa2558: + $p := 2558; + goto $bb1; +$aa2559: + $p := 2559; + goto $bb1; +$aa2560: + $p := 2560; + goto $bb1; +$aa2561: + $p := 2561; + goto $bb1; +$aa2562: + $p := 2562; + goto $bb1; +$aa2563: + $p := 2563; + goto $bb1; +$aa2564: + $p := 2564; + goto $bb1; +$aa2565: + $p := 2565; + goto $bb1; +$aa2566: + $p := 2566; + goto $bb1; +$aa2567: + $p := 2567; + goto $bb1; +$aa2568: + $p := 2568; + goto $bb1; +$aa2569: + $p := 2569; + goto $bb1; +$aa2570: + $p := 2570; + goto $bb1; +$aa2571: + $p := 2571; + goto $bb1; +$aa2572: + $p := 2572; + goto $bb1; +$aa2573: + $p := 2573; + goto $bb1; +$aa2574: + $p := 2574; + goto $bb1; +$aa2575: + $p := 2575; + goto $bb1; +$aa2576: + $p := 2576; + goto $bb1; +$aa2577: + $p := 2577; + goto $bb1; +$aa2578: + $p := 2578; + goto $bb1; +$aa2579: + $p := 2579; + goto $bb1; +$aa2580: + $p := 2580; + goto $bb1; +$aa2581: + $p := 2581; + goto $bb1; +$aa2582: + $p := 2582; + goto $bb1; +$aa2583: + $p := 2583; + goto $bb1; +$aa2584: + $p := 2584; + goto $bb1; +$aa2585: + $p := 2585; + goto $bb1; +$aa2586: + $p := 2586; + goto $bb1; +$aa2587: + $p := 2587; + goto $bb1; +$aa2588: + $p := 2588; + goto $bb1; +$aa2589: + $p := 2589; + goto $bb1; +$aa2590: + $p := 2590; + goto $bb1; +$aa2591: + $p := 2591; + goto $bb1; +$aa2592: + $p := 2592; + goto $bb1; +$aa2593: + $p := 2593; + goto $bb1; +$aa2594: + $p := 2594; + goto $bb1; +$aa2595: + $p := 2595; + goto $bb1; +$aa2596: + $p := 2596; + goto $bb1; +$aa2597: + $p := 2597; + goto $bb1; +$aa2598: + $p := 2598; + goto $bb1; +$aa2599: + $p := 2599; + goto $bb1; +$aa2600: + $p := 2600; + goto $bb1; +$aa2601: + $p := 2601; + goto $bb1; +$aa2602: + $p := 2602; + goto $bb1; +$aa2603: + $p := 2603; + goto $bb1; +$aa2604: + $p := 2604; + goto $bb1; +$aa2605: + $p := 2605; + goto $bb1; +$aa2606: + $p := 2606; + goto $bb1; +$aa2607: + $p := 2607; + goto $bb1; +$aa2608: + $p := 2608; + goto $bb1; +$aa2609: + $p := 2609; + goto $bb1; +$aa2610: + $p := 2610; + goto $bb1; +$aa2611: + $p := 2611; + goto $bb1; +$aa2612: + $p := 2612; + goto $bb1; +$aa2613: + $p := 2613; + goto $bb1; +$aa2614: + $p := 2614; + goto $bb1; +$aa2615: + $p := 2615; + goto $bb1; +$aa2616: + $p := 2616; + goto $bb1; +$aa2617: + $p := 2617; + goto $bb1; +$aa2618: + $p := 2618; + goto $bb1; +$aa2619: + $p := 2619; + goto $bb1; +$aa2620: + $p := 2620; + goto $bb1; +$aa2621: + $p := 2621; + goto $bb1; +$aa2622: + $p := 2622; + goto $bb1; +$aa2623: + $p := 2623; + goto $bb1; +$aa2624: + $p := 2624; + goto $bb1; +$aa2625: + $p := 2625; + goto $bb1; +$aa2626: + $p := 2626; + goto $bb1; +$aa2627: + $p := 2627; + goto $bb1; +$aa2628: + $p := 2628; + goto $bb1; +$aa2629: + $p := 2629; + goto $bb1; +$aa2630: + $p := 2630; + goto $bb1; +$aa2631: + $p := 2631; + goto $bb1; +$aa2632: + $p := 2632; + goto $bb1; +$aa2633: + $p := 2633; + goto $bb1; +$aa2634: + $p := 2634; + goto $bb1; +$aa2635: + $p := 2635; + goto $bb1; +$aa2636: + $p := 2636; + goto $bb1; +$aa2637: + $p := 2637; + goto $bb1; +$aa2638: + $p := 2638; + goto $bb1; +$aa2639: + $p := 2639; + goto $bb1; +$aa2640: + $p := 2640; + goto $bb1; +$aa2641: + $p := 2641; + goto $bb1; +$aa2642: + $p := 2642; + goto $bb1; +$aa2643: + $p := 2643; + goto $bb1; +$aa2644: + $p := 2644; + goto $bb1; +$aa2645: + $p := 2645; + goto $bb1; +$aa2646: + $p := 2646; + goto $bb1; +$aa2647: + $p := 2647; + goto $bb1; +$aa2648: + $p := 2648; + goto $bb1; +$aa2649: + $p := 2649; + goto $bb1; +$aa2650: + $p := 2650; + goto $bb1; +$aa2651: + $p := 2651; + goto $bb1; +$aa2652: + $p := 2652; + goto $bb1; +$aa2653: + $p := 2653; + goto $bb1; +$aa2654: + $p := 2654; + goto $bb1; +$aa2655: + $p := 2655; + goto $bb1; +$aa2656: + $p := 2656; + goto $bb1; +$aa2657: + $p := 2657; + goto $bb1; +$aa2658: + $p := 2658; + goto $bb1; +$aa2659: + $p := 2659; + goto $bb1; +$aa2660: + $p := 2660; + goto $bb1; +$aa2661: + $p := 2661; + goto $bb1; +$aa2662: + $p := 2662; + goto $bb1; +$aa2663: + $p := 2663; + goto $bb1; +$aa2664: + $p := 2664; + goto $bb1; +$aa2665: + $p := 2665; + goto $bb1; +$aa2666: + $p := 2666; + goto $bb1; +$aa2667: + $p := 2667; + goto $bb1; +$aa2668: + $p := 2668; + goto $bb1; +$aa2669: + $p := 2669; + goto $bb1; +$aa2670: + $p := 2670; + goto $bb1; +$aa2671: + $p := 2671; + goto $bb1; +$aa2672: + $p := 2672; + goto $bb1; +$aa2673: + $p := 2673; + goto $bb1; +$aa2674: + $p := 2674; + goto $bb1; +$aa2675: + $p := 2675; + goto $bb1; +$aa2676: + $p := 2676; + goto $bb1; +$aa2677: + $p := 2677; + goto $bb1; +$aa2678: + $p := 2678; + goto $bb1; +$aa2679: + $p := 2679; + goto $bb1; +$aa2680: + $p := 2680; + goto $bb1; +$aa2681: + $p := 2681; + goto $bb1; +$aa2682: + $p := 2682; + goto $bb1; +$aa2683: + $p := 2683; + goto $bb1; +$aa2684: + $p := 2684; + goto $bb1; +$aa2685: + $p := 2685; + goto $bb1; +$aa2686: + $p := 2686; + goto $bb1; +$aa2687: + $p := 2687; + goto $bb1; +$aa2688: + $p := 2688; + goto $bb1; +$aa2689: + $p := 2689; + goto $bb1; +$aa2690: + $p := 2690; + goto $bb1; +$aa2691: + $p := 2691; + goto $bb1; +$aa2692: + $p := 2692; + goto $bb1; +$aa2693: + $p := 2693; + goto $bb1; +$aa2694: + $p := 2694; + goto $bb1; +$aa2695: + $p := 2695; + goto $bb1; +$aa2696: + $p := 2696; + goto $bb1; +$aa2697: + $p := 2697; + goto $bb1; +$aa2698: + $p := 2698; + goto $bb1; +$aa2699: + $p := 2699; + goto $bb1; +$aa2700: + $p := 2700; + goto $bb1; +$aa2701: + $p := 2701; + goto $bb1; +$aa2702: + $p := 2702; + goto $bb1; +$aa2703: + $p := 2703; + goto $bb1; +$aa2704: + $p := 2704; + goto $bb1; +$aa2705: + $p := 2705; + goto $bb1; +$aa2706: + $p := 2706; + goto $bb1; +$aa2707: + $p := 2707; + goto $bb1; +$aa2708: + $p := 2708; + goto $bb1; +$aa2709: + $p := 2709; + goto $bb1; +$aa2710: + $p := 2710; + goto $bb1; +$aa2711: + $p := 2711; + goto $bb1; +$aa2712: + $p := 2712; + goto $bb1; +$aa2713: + $p := 2713; + goto $bb1; +$aa2714: + $p := 2714; + goto $bb1; +$aa2715: + $p := 2715; + goto $bb1; +$aa2716: + $p := 2716; + goto $bb1; +$aa2717: + $p := 2717; + goto $bb1; +$aa2718: + $p := 2718; + goto $bb1; +$aa2719: + $p := 2719; + goto $bb1; +$aa2720: + $p := 2720; + goto $bb1; +$aa2721: + $p := 2721; + goto $bb1; +$aa2722: + $p := 2722; + goto $bb1; +$aa2723: + $p := 2723; + goto $bb1; +$aa2724: + $p := 2724; + goto $bb1; +$aa2725: + $p := 2725; + goto $bb1; +$aa2726: + $p := 2726; + goto $bb1; +$aa2727: + $p := 2727; + goto $bb1; +$aa2728: + $p := 2728; + goto $bb1; +$aa2729: + $p := 2729; + goto $bb1; +$aa2730: + $p := 2730; + goto $bb1; +$aa2731: + $p := 2731; + goto $bb1; +$aa2732: + $p := 2732; + goto $bb1; +$aa2733: + $p := 2733; + goto $bb1; +$aa2734: + $p := 2734; + goto $bb1; +$aa2735: + $p := 2735; + goto $bb1; +$aa2736: + $p := 2736; + goto $bb1; +$aa2737: + $p := 2737; + goto $bb1; +$aa2738: + $p := 2738; + goto $bb1; +$aa2739: + $p := 2739; + goto $bb1; +$aa2740: + $p := 2740; + goto $bb1; +$aa2741: + $p := 2741; + goto $bb1; +$aa2742: + $p := 2742; + goto $bb1; +$aa2743: + $p := 2743; + goto $bb1; +$aa2744: + $p := 2744; + goto $bb1; +$aa2745: + $p := 2745; + goto $bb1; +$aa2746: + $p := 2746; + goto $bb1; +$aa2747: + $p := 2747; + goto $bb1; +$aa2748: + $p := 2748; + goto $bb1; +$aa2749: + $p := 2749; + goto $bb1; +$aa2750: + $p := 2750; + goto $bb1; +$aa2751: + $p := 2751; + goto $bb1; +$aa2752: + $p := 2752; + goto $bb1; +$aa2753: + $p := 2753; + goto $bb1; +$aa2754: + $p := 2754; + goto $bb1; +$aa2755: + $p := 2755; + goto $bb1; +$aa2756: + $p := 2756; + goto $bb1; +$aa2757: + $p := 2757; + goto $bb1; +$aa2758: + $p := 2758; + goto $bb1; +$aa2759: + $p := 2759; + goto $bb1; +$aa2760: + $p := 2760; + goto $bb1; +$aa2761: + $p := 2761; + goto $bb1; +$aa2762: + $p := 2762; + goto $bb1; +$aa2763: + $p := 2763; + goto $bb1; +$aa2764: + $p := 2764; + goto $bb1; +$aa2765: + $p := 2765; + goto $bb1; +$aa2766: + $p := 2766; + goto $bb1; +$aa2767: + $p := 2767; + goto $bb1; +$aa2768: + $p := 2768; + goto $bb1; +$aa2769: + $p := 2769; + goto $bb1; +$aa2770: + $p := 2770; + goto $bb1; +$aa2771: + $p := 2771; + goto $bb1; +$aa2772: + $p := 2772; + goto $bb1; +$aa2773: + $p := 2773; + goto $bb1; +$aa2774: + $p := 2774; + goto $bb1; +$aa2775: + $p := 2775; + goto $bb1; +$aa2776: + $p := 2776; + goto $bb1; +$aa2777: + $p := 2777; + goto $bb1; +$aa2778: + $p := 2778; + goto $bb1; +$aa2779: + $p := 2779; + goto $bb1; +$aa2780: + $p := 2780; + goto $bb1; +$aa2781: + $p := 2781; + goto $bb1; +$aa2782: + $p := 2782; + goto $bb1; +$aa2783: + $p := 2783; + goto $bb1; +$aa2784: + $p := 2784; + goto $bb1; +$aa2785: + $p := 2785; + goto $bb1; +$aa2786: + $p := 2786; + goto $bb1; +$aa2787: + $p := 2787; + goto $bb1; +$aa2788: + $p := 2788; + goto $bb1; +$aa2789: + $p := 2789; + goto $bb1; +$aa2790: + $p := 2790; + goto $bb1; +$aa2791: + $p := 2791; + goto $bb1; +$aa2792: + $p := 2792; + goto $bb1; +$aa2793: + $p := 2793; + goto $bb1; +$aa2794: + $p := 2794; + goto $bb1; +$aa2795: + $p := 2795; + goto $bb1; +$aa2796: + $p := 2796; + goto $bb1; +$aa2797: + $p := 2797; + goto $bb1; +$aa2798: + $p := 2798; + goto $bb1; +$aa2799: + $p := 2799; + goto $bb1; +$aa2800: + $p := 2800; + goto $bb1; +$aa2801: + $p := 2801; + goto $bb1; +$aa2802: + $p := 2802; + goto $bb1; +$aa2803: + $p := 2803; + goto $bb1; +$aa2804: + $p := 2804; + goto $bb1; +$aa2805: + $p := 2805; + goto $bb1; +$aa2806: + $p := 2806; + goto $bb1; +$aa2807: + $p := 2807; + goto $bb1; +$aa2808: + $p := 2808; + goto $bb1; +$aa2809: + $p := 2809; + goto $bb1; +$aa2810: + $p := 2810; + goto $bb1; +$aa2811: + $p := 2811; + goto $bb1; +$aa2812: + $p := 2812; + goto $bb1; +$aa2813: + $p := 2813; + goto $bb1; +$aa2814: + $p := 2814; + goto $bb1; +$aa2815: + $p := 2815; + goto $bb1; +$aa2816: + $p := 2816; + goto $bb1; +$aa2817: + $p := 2817; + goto $bb1; +$aa2818: + $p := 2818; + goto $bb1; +$aa2819: + $p := 2819; + goto $bb1; +$aa2820: + $p := 2820; + goto $bb1; +$aa2821: + $p := 2821; + goto $bb1; +$aa2822: + $p := 2822; + goto $bb1; +$aa2823: + $p := 2823; + goto $bb1; +$aa2824: + $p := 2824; + goto $bb1; +$aa2825: + $p := 2825; + goto $bb1; +$aa2826: + $p := 2826; + goto $bb1; +$aa2827: + $p := 2827; + goto $bb1; +$aa2828: + $p := 2828; + goto $bb1; +$aa2829: + $p := 2829; + goto $bb1; +$aa2830: + $p := 2830; + goto $bb1; +$aa2831: + $p := 2831; + goto $bb1; +$aa2832: + $p := 2832; + goto $bb1; +$aa2833: + $p := 2833; + goto $bb1; +$aa2834: + $p := 2834; + goto $bb1; +$aa2835: + $p := 2835; + goto $bb1; +$aa2836: + $p := 2836; + goto $bb1; +$aa2837: + $p := 2837; + goto $bb1; +$aa2838: + $p := 2838; + goto $bb1; +$aa2839: + $p := 2839; + goto $bb1; +$aa2840: + $p := 2840; + goto $bb1; +$aa2841: + $p := 2841; + goto $bb1; +$aa2842: + $p := 2842; + goto $bb1; +$aa2843: + $p := 2843; + goto $bb1; +$aa2844: + $p := 2844; + goto $bb1; +$aa2845: + $p := 2845; + goto $bb1; +$aa2846: + $p := 2846; + goto $bb1; +$aa2847: + $p := 2847; + goto $bb1; +$aa2848: + $p := 2848; + goto $bb1; +$aa2849: + $p := 2849; + goto $bb1; +$aa2850: + $p := 2850; + goto $bb1; +$aa2851: + $p := 2851; + goto $bb1; +$aa2852: + $p := 2852; + goto $bb1; +$aa2853: + $p := 2853; + goto $bb1; +$aa2854: + $p := 2854; + goto $bb1; +$aa2855: + $p := 2855; + goto $bb1; +$aa2856: + $p := 2856; + goto $bb1; +$aa2857: + $p := 2857; + goto $bb1; +$aa2858: + $p := 2858; + goto $bb1; +$aa2859: + $p := 2859; + goto $bb1; +$aa2860: + $p := 2860; + goto $bb1; +$aa2861: + $p := 2861; + goto $bb1; +$aa2862: + $p := 2862; + goto $bb1; +$aa2863: + $p := 2863; + goto $bb1; +$aa2864: + $p := 2864; + goto $bb1; +$aa2865: + $p := 2865; + goto $bb1; +$aa2866: + $p := 2866; + goto $bb1; +$aa2867: + $p := 2867; + goto $bb1; +$aa2868: + $p := 2868; + goto $bb1; +$aa2869: + $p := 2869; + goto $bb1; +$aa2870: + $p := 2870; + goto $bb1; +$aa2871: + $p := 2871; + goto $bb1; +$aa2872: + $p := 2872; + goto $bb1; +$aa2873: + $p := 2873; + goto $bb1; +$aa2874: + $p := 2874; + goto $bb1; +$aa2875: + $p := 2875; + goto $bb1; +$aa2876: + $p := 2876; + goto $bb1; +$aa2877: + $p := 2877; + goto $bb1; +$aa2878: + $p := 2878; + goto $bb1; +$aa2879: + $p := 2879; + goto $bb1; +$aa2880: + $p := 2880; + goto $bb1; +$aa2881: + $p := 2881; + goto $bb1; +$aa2882: + $p := 2882; + goto $bb1; +$aa2883: + $p := 2883; + goto $bb1; +$aa2884: + $p := 2884; + goto $bb1; +$aa2885: + $p := 2885; + goto $bb1; +$aa2886: + $p := 2886; + goto $bb1; +$aa2887: + $p := 2887; + goto $bb1; +$aa2888: + $p := 2888; + goto $bb1; +$aa2889: + $p := 2889; + goto $bb1; +$aa2890: + $p := 2890; + goto $bb1; +$aa2891: + $p := 2891; + goto $bb1; +$aa2892: + $p := 2892; + goto $bb1; +$aa2893: + $p := 2893; + goto $bb1; +$aa2894: + $p := 2894; + goto $bb1; +$aa2895: + $p := 2895; + goto $bb1; +$aa2896: + $p := 2896; + goto $bb1; +$aa2897: + $p := 2897; + goto $bb1; +$aa2898: + $p := 2898; + goto $bb1; +$aa2899: + $p := 2899; + goto $bb1; +$aa2900: + $p := 2900; + goto $bb1; +$aa2901: + $p := 2901; + goto $bb1; +$aa2902: + $p := 2902; + goto $bb1; +$aa2903: + $p := 2903; + goto $bb1; +$aa2904: + $p := 2904; + goto $bb1; +$aa2905: + $p := 2905; + goto $bb1; +$aa2906: + $p := 2906; + goto $bb1; +$aa2907: + $p := 2907; + goto $bb1; +$aa2908: + $p := 2908; + goto $bb1; +$aa2909: + $p := 2909; + goto $bb1; +$aa2910: + $p := 2910; + goto $bb1; +$aa2911: + $p := 2911; + goto $bb1; +$aa2912: + $p := 2912; + goto $bb1; +$aa2913: + $p := 2913; + goto $bb1; +$aa2914: + $p := 2914; + goto $bb1; +$aa2915: + $p := 2915; + goto $bb1; +$aa2916: + $p := 2916; + goto $bb1; +$aa2917: + $p := 2917; + goto $bb1; +$aa2918: + $p := 2918; + goto $bb1; +$aa2919: + $p := 2919; + goto $bb1; +$aa2920: + $p := 2920; + goto $bb1; +$aa2921: + $p := 2921; + goto $bb1; +$aa2922: + $p := 2922; + goto $bb1; +$aa2923: + $p := 2923; + goto $bb1; +$aa2924: + $p := 2924; + goto $bb1; +$aa2925: + $p := 2925; + goto $bb1; +$aa2926: + $p := 2926; + goto $bb1; +$aa2927: + $p := 2927; + goto $bb1; +$aa2928: + $p := 2928; + goto $bb1; +$aa2929: + $p := 2929; + goto $bb1; +$aa2930: + $p := 2930; + goto $bb1; +$aa2931: + $p := 2931; + goto $bb1; +$aa2932: + $p := 2932; + goto $bb1; +$aa2933: + $p := 2933; + goto $bb1; +$aa2934: + $p := 2934; + goto $bb1; +$aa2935: + $p := 2935; + goto $bb1; +$aa2936: + $p := 2936; + goto $bb1; +$aa2937: + $p := 2937; + goto $bb1; +$aa2938: + $p := 2938; + goto $bb1; +$aa2939: + $p := 2939; + goto $bb1; +$aa2940: + $p := 2940; + goto $bb1; +$aa2941: + $p := 2941; + goto $bb1; +$aa2942: + $p := 2942; + goto $bb1; +$aa2943: + $p := 2943; + goto $bb1; +$aa2944: + $p := 2944; + goto $bb1; +$aa2945: + $p := 2945; + goto $bb1; +$aa2946: + $p := 2946; + goto $bb1; +$aa2947: + $p := 2947; + goto $bb1; +$aa2948: + $p := 2948; + goto $bb1; +$aa2949: + $p := 2949; + goto $bb1; +$aa2950: + $p := 2950; + goto $bb1; +$aa2951: + $p := 2951; + goto $bb1; +$aa2952: + $p := 2952; + goto $bb1; +$aa2953: + $p := 2953; + goto $bb1; +$aa2954: + $p := 2954; + goto $bb1; +$aa2955: + $p := 2955; + goto $bb1; +$aa2956: + $p := 2956; + goto $bb1; +$aa2957: + $p := 2957; + goto $bb1; +$aa2958: + $p := 2958; + goto $bb1; +$aa2959: + $p := 2959; + goto $bb1; +$aa2960: + $p := 2960; + goto $bb1; +$aa2961: + $p := 2961; + goto $bb1; +$aa2962: + $p := 2962; + goto $bb1; +$aa2963: + $p := 2963; + goto $bb1; +$aa2964: + $p := 2964; + goto $bb1; +$aa2965: + $p := 2965; + goto $bb1; +$aa2966: + $p := 2966; + goto $bb1; +$aa2967: + $p := 2967; + goto $bb1; +$aa2968: + $p := 2968; + goto $bb1; +$aa2969: + $p := 2969; + goto $bb1; +$aa2970: + $p := 2970; + goto $bb1; +$aa2971: + $p := 2971; + goto $bb1; +$aa2972: + $p := 2972; + goto $bb1; +$aa2973: + $p := 2973; + goto $bb1; +$aa2974: + $p := 2974; + goto $bb1; +$aa2975: + $p := 2975; + goto $bb1; +$aa2976: + $p := 2976; + goto $bb1; +$aa2977: + $p := 2977; + goto $bb1; +$aa2978: + $p := 2978; + goto $bb1; +$aa2979: + $p := 2979; + goto $bb1; +$aa2980: + $p := 2980; + goto $bb1; +$aa2981: + $p := 2981; + goto $bb1; +$aa2982: + $p := 2982; + goto $bb1; +$aa2983: + $p := 2983; + goto $bb1; +$aa2984: + $p := 2984; + goto $bb1; +$aa2985: + $p := 2985; + goto $bb1; +$aa2986: + $p := 2986; + goto $bb1; +$aa2987: + $p := 2987; + goto $bb1; +$aa2988: + $p := 2988; + goto $bb1; +$aa2989: + $p := 2989; + goto $bb1; +$aa2990: + $p := 2990; + goto $bb1; +$aa2991: + $p := 2991; + goto $bb1; +$aa2992: + $p := 2992; + goto $bb1; +$aa2993: + $p := 2993; + goto $bb1; +$aa2994: + $p := 2994; + goto $bb1; +$aa2995: + $p := 2995; + goto $bb1; +$aa2996: + $p := 2996; + goto $bb1; +$aa2997: + $p := 2997; + goto $bb1; +$aa2998: + $p := 2998; + goto $bb1; +$aa2999: + $p := 2999; + goto $bb1; +$aa3000: + $p := 3000; + goto $bb1; +$aa3001: + $p := 3001; + goto $bb1; +$aa3002: + $p := 3002; + goto $bb1; +$aa3003: + $p := 3003; + goto $bb1; +$aa3004: + $p := 3004; + goto $bb1; +$aa3005: + $p := 3005; + goto $bb1; +$aa3006: + $p := 3006; + goto $bb1; +$aa3007: + $p := 3007; + goto $bb1; +$aa3008: + $p := 3008; + goto $bb1; +$aa3009: + $p := 3009; + goto $bb1; +$aa3010: + $p := 3010; + goto $bb1; +$aa3011: + $p := 3011; + goto $bb1; +$aa3012: + $p := 3012; + goto $bb1; +$aa3013: + $p := 3013; + goto $bb1; +$aa3014: + $p := 3014; + goto $bb1; +$aa3015: + $p := 3015; + goto $bb1; +$aa3016: + $p := 3016; + goto $bb1; +$aa3017: + $p := 3017; + goto $bb1; +$aa3018: + $p := 3018; + goto $bb1; +$aa3019: + $p := 3019; + goto $bb1; +$aa3020: + $p := 3020; + goto $bb1; +$aa3021: + $p := 3021; + goto $bb1; +$aa3022: + $p := 3022; + goto $bb1; +$aa3023: + $p := 3023; + goto $bb1; +$aa3024: + $p := 3024; + goto $bb1; +$aa3025: + $p := 3025; + goto $bb1; +$aa3026: + $p := 3026; + goto $bb1; +$aa3027: + $p := 3027; + goto $bb1; +$aa3028: + $p := 3028; + goto $bb1; +$aa3029: + $p := 3029; + goto $bb1; +$aa3030: + $p := 3030; + goto $bb1; +$aa3031: + $p := 3031; + goto $bb1; +$aa3032: + $p := 3032; + goto $bb1; +$aa3033: + $p := 3033; + goto $bb1; +$aa3034: + $p := 3034; + goto $bb1; +$aa3035: + $p := 3035; + goto $bb1; +$aa3036: + $p := 3036; + goto $bb1; +$aa3037: + $p := 3037; + goto $bb1; +$aa3038: + $p := 3038; + goto $bb1; +$aa3039: + $p := 3039; + goto $bb1; +$aa3040: + $p := 3040; + goto $bb1; +$aa3041: + $p := 3041; + goto $bb1; +$aa3042: + $p := 3042; + goto $bb1; +$aa3043: + $p := 3043; + goto $bb1; +$aa3044: + $p := 3044; + goto $bb1; +$aa3045: + $p := 3045; + goto $bb1; +$aa3046: + $p := 3046; + goto $bb1; +$aa3047: + $p := 3047; + goto $bb1; +$aa3048: + $p := 3048; + goto $bb1; +$aa3049: + $p := 3049; + goto $bb1; +$aa3050: + $p := 3050; + goto $bb1; +$aa3051: + $p := 3051; + goto $bb1; +$aa3052: + $p := 3052; + goto $bb1; +$aa3053: + $p := 3053; + goto $bb1; +$aa3054: + $p := 3054; + goto $bb1; +$aa3055: + $p := 3055; + goto $bb1; +$aa3056: + $p := 3056; + goto $bb1; +$aa3057: + $p := 3057; + goto $bb1; +$aa3058: + $p := 3058; + goto $bb1; +$aa3059: + $p := 3059; + goto $bb1; +$aa3060: + $p := 3060; + goto $bb1; +$aa3061: + $p := 3061; + goto $bb1; +$aa3062: + $p := 3062; + goto $bb1; +$aa3063: + $p := 3063; + goto $bb1; +$aa3064: + $p := 3064; + goto $bb1; +$aa3065: + $p := 3065; + goto $bb1; +$aa3066: + $p := 3066; + goto $bb1; +$aa3067: + $p := 3067; + goto $bb1; +$aa3068: + $p := 3068; + goto $bb1; +$aa3069: + $p := 3069; + goto $bb1; +$aa3070: + $p := 3070; + goto $bb1; +$aa3071: + $p := 3071; + goto $bb1; +$aa3072: + $p := 3072; + goto $bb1; +$aa3073: + $p := 3073; + goto $bb1; +$aa3074: + $p := 3074; + goto $bb1; +$aa3075: + $p := 3075; + goto $bb1; +$aa3076: + $p := 3076; + goto $bb1; +$aa3077: + $p := 3077; + goto $bb1; +$aa3078: + $p := 3078; + goto $bb1; +$aa3079: + $p := 3079; + goto $bb1; +$aa3080: + $p := 3080; + goto $bb1; +$aa3081: + $p := 3081; + goto $bb1; +$aa3082: + $p := 3082; + goto $bb1; +$aa3083: + $p := 3083; + goto $bb1; +$aa3084: + $p := 3084; + goto $bb1; +$aa3085: + $p := 3085; + goto $bb1; +$aa3086: + $p := 3086; + goto $bb1; +$aa3087: + $p := 3087; + goto $bb1; +$aa3088: + $p := 3088; + goto $bb1; +$aa3089: + $p := 3089; + goto $bb1; +$aa3090: + $p := 3090; + goto $bb1; +$aa3091: + $p := 3091; + goto $bb1; +$aa3092: + $p := 3092; + goto $bb1; +$aa3093: + $p := 3093; + goto $bb1; +$aa3094: + $p := 3094; + goto $bb1; +$aa3095: + $p := 3095; + goto $bb1; +$aa3096: + $p := 3096; + goto $bb1; +$aa3097: + $p := 3097; + goto $bb1; +$aa3098: + $p := 3098; + goto $bb1; +$aa3099: + $p := 3099; + goto $bb1; +$aa3100: + $p := 3100; + goto $bb1; +$aa3101: + $p := 3101; + goto $bb1; +$aa3102: + $p := 3102; + goto $bb1; +$aa3103: + $p := 3103; + goto $bb1; +$aa3104: + $p := 3104; + goto $bb1; +$aa3105: + $p := 3105; + goto $bb1; +$aa3106: + $p := 3106; + goto $bb1; +$aa3107: + $p := 3107; + goto $bb1; +$aa3108: + $p := 3108; + goto $bb1; +$aa3109: + $p := 3109; + goto $bb1; +$aa3110: + $p := 3110; + goto $bb1; +$aa3111: + $p := 3111; + goto $bb1; +$aa3112: + $p := 3112; + goto $bb1; +$aa3113: + $p := 3113; + goto $bb1; +$aa3114: + $p := 3114; + goto $bb1; +$aa3115: + $p := 3115; + goto $bb1; +$aa3116: + $p := 3116; + goto $bb1; +$aa3117: + $p := 3117; + goto $bb1; +$aa3118: + $p := 3118; + goto $bb1; +$aa3119: + $p := 3119; + goto $bb1; +$aa3120: + $p := 3120; + goto $bb1; +$aa3121: + $p := 3121; + goto $bb1; +$aa3122: + $p := 3122; + goto $bb1; +$aa3123: + $p := 3123; + goto $bb1; +$aa3124: + $p := 3124; + goto $bb1; +$aa3125: + $p := 3125; + goto $bb1; +$aa3126: + $p := 3126; + goto $bb1; +$aa3127: + $p := 3127; + goto $bb1; +$aa3128: + $p := 3128; + goto $bb1; +$aa3129: + $p := 3129; + goto $bb1; +$aa3130: + $p := 3130; + goto $bb1; +$aa3131: + $p := 3131; + goto $bb1; +$aa3132: + $p := 3132; + goto $bb1; +$aa3133: + $p := 3133; + goto $bb1; +$aa3134: + $p := 3134; + goto $bb1; +$aa3135: + $p := 3135; + goto $bb1; +$aa3136: + $p := 3136; + goto $bb1; +$aa3137: + $p := 3137; + goto $bb1; +$aa3138: + $p := 3138; + goto $bb1; +$aa3139: + $p := 3139; + goto $bb1; +$aa3140: + $p := 3140; + goto $bb1; +$aa3141: + $p := 3141; + goto $bb1; +$aa3142: + $p := 3142; + goto $bb1; +$aa3143: + $p := 3143; + goto $bb1; +$aa3144: + $p := 3144; + goto $bb1; +$aa3145: + $p := 3145; + goto $bb1; +$aa3146: + $p := 3146; + goto $bb1; +$aa3147: + $p := 3147; + goto $bb1; +$aa3148: + $p := 3148; + goto $bb1; +$aa3149: + $p := 3149; + goto $bb1; +$aa3150: + $p := 3150; + goto $bb1; +$aa3151: + $p := 3151; + goto $bb1; +$aa3152: + $p := 3152; + goto $bb1; +$aa3153: + $p := 3153; + goto $bb1; +$aa3154: + $p := 3154; + goto $bb1; +$aa3155: + $p := 3155; + goto $bb1; +$aa3156: + $p := 3156; + goto $bb1; +$aa3157: + $p := 3157; + goto $bb1; +$aa3158: + $p := 3158; + goto $bb1; +$aa3159: + $p := 3159; + goto $bb1; +$aa3160: + $p := 3160; + goto $bb1; +$aa3161: + $p := 3161; + goto $bb1; +$aa3162: + $p := 3162; + goto $bb1; +$aa3163: + $p := 3163; + goto $bb1; +$aa3164: + $p := 3164; + goto $bb1; +$aa3165: + $p := 3165; + goto $bb1; +$aa3166: + $p := 3166; + goto $bb1; +$aa3167: + $p := 3167; + goto $bb1; +$aa3168: + $p := 3168; + goto $bb1; +$aa3169: + $p := 3169; + goto $bb1; +$aa3170: + $p := 3170; + goto $bb1; +$aa3171: + $p := 3171; + goto $bb1; +$aa3172: + $p := 3172; + goto $bb1; +$aa3173: + $p := 3173; + goto $bb1; +$aa3174: + $p := 3174; + goto $bb1; +$aa3175: + $p := 3175; + goto $bb1; +$aa3176: + $p := 3176; + goto $bb1; +$aa3177: + $p := 3177; + goto $bb1; +$aa3178: + $p := 3178; + goto $bb1; +$aa3179: + $p := 3179; + goto $bb1; +$aa3180: + $p := 3180; + goto $bb1; +$aa3181: + $p := 3181; + goto $bb1; +$aa3182: + $p := 3182; + goto $bb1; +$aa3183: + $p := 3183; + goto $bb1; +$aa3184: + $p := 3184; + goto $bb1; +$aa3185: + $p := 3185; + goto $bb1; +$aa3186: + $p := 3186; + goto $bb1; +$aa3187: + $p := 3187; + goto $bb1; +$aa3188: + $p := 3188; + goto $bb1; +$aa3189: + $p := 3189; + goto $bb1; +$aa3190: + $p := 3190; + goto $bb1; +$aa3191: + $p := 3191; + goto $bb1; +$aa3192: + $p := 3192; + goto $bb1; +$aa3193: + $p := 3193; + goto $bb1; +$aa3194: + $p := 3194; + goto $bb1; +$aa3195: + $p := 3195; + goto $bb1; +$aa3196: + $p := 3196; + goto $bb1; +$aa3197: + $p := 3197; + goto $bb1; +$aa3198: + $p := 3198; + goto $bb1; +$aa3199: + $p := 3199; + goto $bb1; +$aa3200: + $p := 3200; + goto $bb1; +$aa3201: + $p := 3201; + goto $bb1; +$aa3202: + $p := 3202; + goto $bb1; +$aa3203: + $p := 3203; + goto $bb1; +$aa3204: + $p := 3204; + goto $bb1; +$aa3205: + $p := 3205; + goto $bb1; +$aa3206: + $p := 3206; + goto $bb1; +$aa3207: + $p := 3207; + goto $bb1; +$aa3208: + $p := 3208; + goto $bb1; +$aa3209: + $p := 3209; + goto $bb1; +$aa3210: + $p := 3210; + goto $bb1; +$aa3211: + $p := 3211; + goto $bb1; +$aa3212: + $p := 3212; + goto $bb1; +$aa3213: + $p := 3213; + goto $bb1; +$aa3214: + $p := 3214; + goto $bb1; +$aa3215: + $p := 3215; + goto $bb1; +$aa3216: + $p := 3216; + goto $bb1; +$aa3217: + $p := 3217; + goto $bb1; +$aa3218: + $p := 3218; + goto $bb1; +$aa3219: + $p := 3219; + goto $bb1; +$aa3220: + $p := 3220; + goto $bb1; +$aa3221: + $p := 3221; + goto $bb1; +$aa3222: + $p := 3222; + goto $bb1; +$aa3223: + $p := 3223; + goto $bb1; +$aa3224: + $p := 3224; + goto $bb1; +$aa3225: + $p := 3225; + goto $bb1; +$aa3226: + $p := 3226; + goto $bb1; +$aa3227: + $p := 3227; + goto $bb1; +$aa3228: + $p := 3228; + goto $bb1; +$aa3229: + $p := 3229; + goto $bb1; +$aa3230: + $p := 3230; + goto $bb1; +$aa3231: + $p := 3231; + goto $bb1; +$aa3232: + $p := 3232; + goto $bb1; +$aa3233: + $p := 3233; + goto $bb1; +$aa3234: + $p := 3234; + goto $bb1; +$aa3235: + $p := 3235; + goto $bb1; +$aa3236: + $p := 3236; + goto $bb1; +$aa3237: + $p := 3237; + goto $bb1; +$aa3238: + $p := 3238; + goto $bb1; +$aa3239: + $p := 3239; + goto $bb1; +$aa3240: + $p := 3240; + goto $bb1; +$aa3241: + $p := 3241; + goto $bb1; +$aa3242: + $p := 3242; + goto $bb1; +$aa3243: + $p := 3243; + goto $bb1; +$aa3244: + $p := 3244; + goto $bb1; +$aa3245: + $p := 3245; + goto $bb1; +$aa3246: + $p := 3246; + goto $bb1; +$aa3247: + $p := 3247; + goto $bb1; +$aa3248: + $p := 3248; + goto $bb1; +$aa3249: + $p := 3249; + goto $bb1; +$aa3250: + $p := 3250; + goto $bb1; +$aa3251: + $p := 3251; + goto $bb1; +$aa3252: + $p := 3252; + goto $bb1; +$aa3253: + $p := 3253; + goto $bb1; +$aa3254: + $p := 3254; + goto $bb1; +$aa3255: + $p := 3255; + goto $bb1; +$aa3256: + $p := 3256; + goto $bb1; +$aa3257: + $p := 3257; + goto $bb1; +$aa3258: + $p := 3258; + goto $bb1; +$aa3259: + $p := 3259; + goto $bb1; +$aa3260: + $p := 3260; + goto $bb1; +$aa3261: + $p := 3261; + goto $bb1; +$aa3262: + $p := 3262; + goto $bb1; +$aa3263: + $p := 3263; + goto $bb1; +$aa3264: + $p := 3264; + goto $bb1; +$aa3265: + $p := 3265; + goto $bb1; +$aa3266: + $p := 3266; + goto $bb1; +$aa3267: + $p := 3267; + goto $bb1; +$aa3268: + $p := 3268; + goto $bb1; +$aa3269: + $p := 3269; + goto $bb1; +$aa3270: + $p := 3270; + goto $bb1; +$aa3271: + $p := 3271; + goto $bb1; +$aa3272: + $p := 3272; + goto $bb1; +$aa3273: + $p := 3273; + goto $bb1; +$aa3274: + $p := 3274; + goto $bb1; +$aa3275: + $p := 3275; + goto $bb1; +$aa3276: + $p := 3276; + goto $bb1; +$aa3277: + $p := 3277; + goto $bb1; +$aa3278: + $p := 3278; + goto $bb1; +$aa3279: + $p := 3279; + goto $bb1; +$aa3280: + $p := 3280; + goto $bb1; +$aa3281: + $p := 3281; + goto $bb1; +$aa3282: + $p := 3282; + goto $bb1; +$aa3283: + $p := 3283; + goto $bb1; +$aa3284: + $p := 3284; + goto $bb1; +$aa3285: + $p := 3285; + goto $bb1; +$aa3286: + $p := 3286; + goto $bb1; +$aa3287: + $p := 3287; + goto $bb1; +$aa3288: + $p := 3288; + goto $bb1; +$aa3289: + $p := 3289; + goto $bb1; +$aa3290: + $p := 3290; + goto $bb1; +$aa3291: + $p := 3291; + goto $bb1; +$aa3292: + $p := 3292; + goto $bb1; +$aa3293: + $p := 3293; + goto $bb1; +$aa3294: + $p := 3294; + goto $bb1; +$aa3295: + $p := 3295; + goto $bb1; +$aa3296: + $p := 3296; + goto $bb1; +$aa3297: + $p := 3297; + goto $bb1; +$aa3298: + $p := 3298; + goto $bb1; +$aa3299: + $p := 3299; + goto $bb1; +$aa3300: + $p := 3300; + goto $bb1; +$aa3301: + $p := 3301; + goto $bb1; +$aa3302: + $p := 3302; + goto $bb1; +$aa3303: + $p := 3303; + goto $bb1; +$aa3304: + $p := 3304; + goto $bb1; +$aa3305: + $p := 3305; + goto $bb1; +$aa3306: + $p := 3306; + goto $bb1; +$aa3307: + $p := 3307; + goto $bb1; +$aa3308: + $p := 3308; + goto $bb1; +$aa3309: + $p := 3309; + goto $bb1; +$aa3310: + $p := 3310; + goto $bb1; +$aa3311: + $p := 3311; + goto $bb1; +$aa3312: + $p := 3312; + goto $bb1; +$aa3313: + $p := 3313; + goto $bb1; +$aa3314: + $p := 3314; + goto $bb1; +$aa3315: + $p := 3315; + goto $bb1; +$aa3316: + $p := 3316; + goto $bb1; +$aa3317: + $p := 3317; + goto $bb1; +$aa3318: + $p := 3318; + goto $bb1; +$aa3319: + $p := 3319; + goto $bb1; +$aa3320: + $p := 3320; + goto $bb1; +$aa3321: + $p := 3321; + goto $bb1; +$aa3322: + $p := 3322; + goto $bb1; +$aa3323: + $p := 3323; + goto $bb1; +$aa3324: + $p := 3324; + goto $bb1; +$aa3325: + $p := 3325; + goto $bb1; +$aa3326: + $p := 3326; + goto $bb1; +$aa3327: + $p := 3327; + goto $bb1; +$aa3328: + $p := 3328; + goto $bb1; +$aa3329: + $p := 3329; + goto $bb1; +$aa3330: + $p := 3330; + goto $bb1; +$aa3331: + $p := 3331; + goto $bb1; +$aa3332: + $p := 3332; + goto $bb1; +$aa3333: + $p := 3333; + goto $bb1; +$aa3334: + $p := 3334; + goto $bb1; +$aa3335: + $p := 3335; + goto $bb1; +$aa3336: + $p := 3336; + goto $bb1; +$aa3337: + $p := 3337; + goto $bb1; +$aa3338: + $p := 3338; + goto $bb1; +$aa3339: + $p := 3339; + goto $bb1; +$aa3340: + $p := 3340; + goto $bb1; +$aa3341: + $p := 3341; + goto $bb1; +$aa3342: + $p := 3342; + goto $bb1; +$aa3343: + $p := 3343; + goto $bb1; +$aa3344: + $p := 3344; + goto $bb1; +$aa3345: + $p := 3345; + goto $bb1; +$aa3346: + $p := 3346; + goto $bb1; +$aa3347: + $p := 3347; + goto $bb1; +$aa3348: + $p := 3348; + goto $bb1; +$aa3349: + $p := 3349; + goto $bb1; +$aa3350: + $p := 3350; + goto $bb1; +$aa3351: + $p := 3351; + goto $bb1; +$aa3352: + $p := 3352; + goto $bb1; +$aa3353: + $p := 3353; + goto $bb1; +$aa3354: + $p := 3354; + goto $bb1; +$aa3355: + $p := 3355; + goto $bb1; +$aa3356: + $p := 3356; + goto $bb1; +$aa3357: + $p := 3357; + goto $bb1; +$aa3358: + $p := 3358; + goto $bb1; +$aa3359: + $p := 3359; + goto $bb1; +$aa3360: + $p := 3360; + goto $bb1; +$aa3361: + $p := 3361; + goto $bb1; +$aa3362: + $p := 3362; + goto $bb1; +$aa3363: + $p := 3363; + goto $bb1; +$aa3364: + $p := 3364; + goto $bb1; +$aa3365: + $p := 3365; + goto $bb1; +$aa3366: + $p := 3366; + goto $bb1; +$aa3367: + $p := 3367; + goto $bb1; +$aa3368: + $p := 3368; + goto $bb1; +$aa3369: + $p := 3369; + goto $bb1; +$aa3370: + $p := 3370; + goto $bb1; +$aa3371: + $p := 3371; + goto $bb1; +$aa3372: + $p := 3372; + goto $bb1; +$aa3373: + $p := 3373; + goto $bb1; +$aa3374: + $p := 3374; + goto $bb1; +$aa3375: + $p := 3375; + goto $bb1; +$aa3376: + $p := 3376; + goto $bb1; +$aa3377: + $p := 3377; + goto $bb1; +$aa3378: + $p := 3378; + goto $bb1; +$aa3379: + $p := 3379; + goto $bb1; +$aa3380: + $p := 3380; + goto $bb1; +$aa3381: + $p := 3381; + goto $bb1; +$aa3382: + $p := 3382; + goto $bb1; +$aa3383: + $p := 3383; + goto $bb1; +$aa3384: + $p := 3384; + goto $bb1; +$aa3385: + $p := 3385; + goto $bb1; +$aa3386: + $p := 3386; + goto $bb1; +$aa3387: + $p := 3387; + goto $bb1; +$aa3388: + $p := 3388; + goto $bb1; +$aa3389: + $p := 3389; + goto $bb1; +$aa3390: + $p := 3390; + goto $bb1; +$aa3391: + $p := 3391; + goto $bb1; +$aa3392: + $p := 3392; + goto $bb1; +$aa3393: + $p := 3393; + goto $bb1; +$aa3394: + $p := 3394; + goto $bb1; +$aa3395: + $p := 3395; + goto $bb1; +$aa3396: + $p := 3396; + goto $bb1; +$aa3397: + $p := 3397; + goto $bb1; +$aa3398: + $p := 3398; + goto $bb1; +$aa3399: + $p := 3399; + goto $bb1; +$aa3400: + $p := 3400; + goto $bb1; +$aa3401: + $p := 3401; + goto $bb1; +$aa3402: + $p := 3402; + goto $bb1; +$aa3403: + $p := 3403; + goto $bb1; +$aa3404: + $p := 3404; + goto $bb1; +$aa3405: + $p := 3405; + goto $bb1; +$aa3406: + $p := 3406; + goto $bb1; +$aa3407: + $p := 3407; + goto $bb1; +$aa3408: + $p := 3408; + goto $bb1; +$aa3409: + $p := 3409; + goto $bb1; +$aa3410: + $p := 3410; + goto $bb1; +$aa3411: + $p := 3411; + goto $bb1; +$aa3412: + $p := 3412; + goto $bb1; +$aa3413: + $p := 3413; + goto $bb1; +$aa3414: + $p := 3414; + goto $bb1; +$aa3415: + $p := 3415; + goto $bb1; +$aa3416: + $p := 3416; + goto $bb1; +$aa3417: + $p := 3417; + goto $bb1; +$aa3418: + $p := 3418; + goto $bb1; +$aa3419: + $p := 3419; + goto $bb1; +$aa3420: + $p := 3420; + goto $bb1; +$aa3421: + $p := 3421; + goto $bb1; +$aa3422: + $p := 3422; + goto $bb1; +$aa3423: + $p := 3423; + goto $bb1; +$aa3424: + $p := 3424; + goto $bb1; +$aa3425: + $p := 3425; + goto $bb1; +$aa3426: + $p := 3426; + goto $bb1; +$aa3427: + $p := 3427; + goto $bb1; +$aa3428: + $p := 3428; + goto $bb1; +$aa3429: + $p := 3429; + goto $bb1; +$aa3430: + $p := 3430; + goto $bb1; +$aa3431: + $p := 3431; + goto $bb1; +$aa3432: + $p := 3432; + goto $bb1; +$aa3433: + $p := 3433; + goto $bb1; +$aa3434: + $p := 3434; + goto $bb1; +$aa3435: + $p := 3435; + goto $bb1; +$aa3436: + $p := 3436; + goto $bb1; +$aa3437: + $p := 3437; + goto $bb1; +$aa3438: + $p := 3438; + goto $bb1; +$aa3439: + $p := 3439; + goto $bb1; +$aa3440: + $p := 3440; + goto $bb1; +$aa3441: + $p := 3441; + goto $bb1; +$aa3442: + $p := 3442; + goto $bb1; +$aa3443: + $p := 3443; + goto $bb1; +$aa3444: + $p := 3444; + goto $bb1; +$aa3445: + $p := 3445; + goto $bb1; +$aa3446: + $p := 3446; + goto $bb1; +$aa3447: + $p := 3447; + goto $bb1; +$aa3448: + $p := 3448; + goto $bb1; +$aa3449: + $p := 3449; + goto $bb1; +$aa3450: + $p := 3450; + goto $bb1; +$aa3451: + $p := 3451; + goto $bb1; +$aa3452: + $p := 3452; + goto $bb1; +$aa3453: + $p := 3453; + goto $bb1; +$aa3454: + $p := 3454; + goto $bb1; +$aa3455: + $p := 3455; + goto $bb1; +$aa3456: + $p := 3456; + goto $bb1; +$aa3457: + $p := 3457; + goto $bb1; +$aa3458: + $p := 3458; + goto $bb1; +$aa3459: + $p := 3459; + goto $bb1; +$aa3460: + $p := 3460; + goto $bb1; +$aa3461: + $p := 3461; + goto $bb1; +$aa3462: + $p := 3462; + goto $bb1; +$aa3463: + $p := 3463; + goto $bb1; +$aa3464: + $p := 3464; + goto $bb1; +$aa3465: + $p := 3465; + goto $bb1; +$aa3466: + $p := 3466; + goto $bb1; +$aa3467: + $p := 3467; + goto $bb1; +$aa3468: + $p := 3468; + goto $bb1; +$aa3469: + $p := 3469; + goto $bb1; +$aa3470: + $p := 3470; + goto $bb1; +$aa3471: + $p := 3471; + goto $bb1; +$aa3472: + $p := 3472; + goto $bb1; +$aa3473: + $p := 3473; + goto $bb1; +$aa3474: + $p := 3474; + goto $bb1; +$aa3475: + $p := 3475; + goto $bb1; +$aa3476: + $p := 3476; + goto $bb1; +$aa3477: + $p := 3477; + goto $bb1; +$aa3478: + $p := 3478; + goto $bb1; +$aa3479: + $p := 3479; + goto $bb1; +$aa3480: + $p := 3480; + goto $bb1; +$aa3481: + $p := 3481; + goto $bb1; +$aa3482: + $p := 3482; + goto $bb1; +$aa3483: + $p := 3483; + goto $bb1; +$aa3484: + $p := 3484; + goto $bb1; +$aa3485: + $p := 3485; + goto $bb1; +$aa3486: + $p := 3486; + goto $bb1; +$aa3487: + $p := 3487; + goto $bb1; +$aa3488: + $p := 3488; + goto $bb1; +$aa3489: + $p := 3489; + goto $bb1; +$aa3490: + $p := 3490; + goto $bb1; +$aa3491: + $p := 3491; + goto $bb1; +$aa3492: + $p := 3492; + goto $bb1; +$aa3493: + $p := 3493; + goto $bb1; +$aa3494: + $p := 3494; + goto $bb1; +$aa3495: + $p := 3495; + goto $bb1; +$aa3496: + $p := 3496; + goto $bb1; +$aa3497: + $p := 3497; + goto $bb1; +$aa3498: + $p := 3498; + goto $bb1; +$aa3499: + $p := 3499; + goto $bb1; +$aa3500: + $p := 3500; + goto $bb1; +$aa3501: + $p := 3501; + goto $bb1; +$aa3502: + $p := 3502; + goto $bb1; +$aa3503: + $p := 3503; + goto $bb1; +$aa3504: + $p := 3504; + goto $bb1; +$aa3505: + $p := 3505; + goto $bb1; +$aa3506: + $p := 3506; + goto $bb1; +$aa3507: + $p := 3507; + goto $bb1; +$aa3508: + $p := 3508; + goto $bb1; +$aa3509: + $p := 3509; + goto $bb1; +$aa3510: + $p := 3510; + goto $bb1; +$aa3511: + $p := 3511; + goto $bb1; +$aa3512: + $p := 3512; + goto $bb1; +$aa3513: + $p := 3513; + goto $bb1; +$aa3514: + $p := 3514; + goto $bb1; +$aa3515: + $p := 3515; + goto $bb1; +$aa3516: + $p := 3516; + goto $bb1; +$aa3517: + $p := 3517; + goto $bb1; +$aa3518: + $p := 3518; + goto $bb1; +$aa3519: + $p := 3519; + goto $bb1; +$aa3520: + $p := 3520; + goto $bb1; +$aa3521: + $p := 3521; + goto $bb1; +$aa3522: + $p := 3522; + goto $bb1; +$aa3523: + $p := 3523; + goto $bb1; +$aa3524: + $p := 3524; + goto $bb1; +$aa3525: + $p := 3525; + goto $bb1; +$aa3526: + $p := 3526; + goto $bb1; +$aa3527: + $p := 3527; + goto $bb1; +$aa3528: + $p := 3528; + goto $bb1; +$aa3529: + $p := 3529; + goto $bb1; +$aa3530: + $p := 3530; + goto $bb1; +$aa3531: + $p := 3531; + goto $bb1; +$aa3532: + $p := 3532; + goto $bb1; +$aa3533: + $p := 3533; + goto $bb1; +$aa3534: + $p := 3534; + goto $bb1; +$aa3535: + $p := 3535; + goto $bb1; +$aa3536: + $p := 3536; + goto $bb1; +$aa3537: + $p := 3537; + goto $bb1; +$aa3538: + $p := 3538; + goto $bb1; +$aa3539: + $p := 3539; + goto $bb1; +$aa3540: + $p := 3540; + goto $bb1; +$aa3541: + $p := 3541; + goto $bb1; +$aa3542: + $p := 3542; + goto $bb1; +$aa3543: + $p := 3543; + goto $bb1; +$aa3544: + $p := 3544; + goto $bb1; +$aa3545: + $p := 3545; + goto $bb1; +$aa3546: + $p := 3546; + goto $bb1; +$aa3547: + $p := 3547; + goto $bb1; +$aa3548: + $p := 3548; + goto $bb1; +$aa3549: + $p := 3549; + goto $bb1; +$aa3550: + $p := 3550; + goto $bb1; +$aa3551: + $p := 3551; + goto $bb1; +$aa3552: + $p := 3552; + goto $bb1; +$aa3553: + $p := 3553; + goto $bb1; +$aa3554: + $p := 3554; + goto $bb1; +$aa3555: + $p := 3555; + goto $bb1; +$aa3556: + $p := 3556; + goto $bb1; +$aa3557: + $p := 3557; + goto $bb1; +$aa3558: + $p := 3558; + goto $bb1; +$aa3559: + $p := 3559; + goto $bb1; +$aa3560: + $p := 3560; + goto $bb1; +$aa3561: + $p := 3561; + goto $bb1; +$aa3562: + $p := 3562; + goto $bb1; +$aa3563: + $p := 3563; + goto $bb1; +$aa3564: + $p := 3564; + goto $bb1; +$aa3565: + $p := 3565; + goto $bb1; +$aa3566: + $p := 3566; + goto $bb1; +$aa3567: + $p := 3567; + goto $bb1; +$aa3568: + $p := 3568; + goto $bb1; +$aa3569: + $p := 3569; + goto $bb1; +$aa3570: + $p := 3570; + goto $bb1; +$aa3571: + $p := 3571; + goto $bb1; +$aa3572: + $p := 3572; + goto $bb1; +$aa3573: + $p := 3573; + goto $bb1; +$aa3574: + $p := 3574; + goto $bb1; +$aa3575: + $p := 3575; + goto $bb1; +$aa3576: + $p := 3576; + goto $bb1; +$aa3577: + $p := 3577; + goto $bb1; +$aa3578: + $p := 3578; + goto $bb1; +$aa3579: + $p := 3579; + goto $bb1; +$aa3580: + $p := 3580; + goto $bb1; +$aa3581: + $p := 3581; + goto $bb1; +$aa3582: + $p := 3582; + goto $bb1; +$aa3583: + $p := 3583; + goto $bb1; +$aa3584: + $p := 3584; + goto $bb1; +$aa3585: + $p := 3585; + goto $bb1; +$aa3586: + $p := 3586; + goto $bb1; +$aa3587: + $p := 3587; + goto $bb1; +$aa3588: + $p := 3588; + goto $bb1; +$aa3589: + $p := 3589; + goto $bb1; +$aa3590: + $p := 3590; + goto $bb1; +$aa3591: + $p := 3591; + goto $bb1; +$aa3592: + $p := 3592; + goto $bb1; +$aa3593: + $p := 3593; + goto $bb1; +$aa3594: + $p := 3594; + goto $bb1; +$aa3595: + $p := 3595; + goto $bb1; +$aa3596: + $p := 3596; + goto $bb1; +$aa3597: + $p := 3597; + goto $bb1; +$aa3598: + $p := 3598; + goto $bb1; +$aa3599: + $p := 3599; + goto $bb1; +$aa3600: + $p := 3600; + goto $bb1; +$aa3601: + $p := 3601; + goto $bb1; +$aa3602: + $p := 3602; + goto $bb1; +$aa3603: + $p := 3603; + goto $bb1; +$aa3604: + $p := 3604; + goto $bb1; +$aa3605: + $p := 3605; + goto $bb1; +$aa3606: + $p := 3606; + goto $bb1; +$aa3607: + $p := 3607; + goto $bb1; +$aa3608: + $p := 3608; + goto $bb1; +$aa3609: + $p := 3609; + goto $bb1; +$aa3610: + $p := 3610; + goto $bb1; +$aa3611: + $p := 3611; + goto $bb1; +$aa3612: + $p := 3612; + goto $bb1; +$aa3613: + $p := 3613; + goto $bb1; +$aa3614: + $p := 3614; + goto $bb1; +$aa3615: + $p := 3615; + goto $bb1; +$aa3616: + $p := 3616; + goto $bb1; +$aa3617: + $p := 3617; + goto $bb1; +$aa3618: + $p := 3618; + goto $bb1; +$aa3619: + $p := 3619; + goto $bb1; +$aa3620: + $p := 3620; + goto $bb1; +$aa3621: + $p := 3621; + goto $bb1; +$aa3622: + $p := 3622; + goto $bb1; +$aa3623: + $p := 3623; + goto $bb1; +$aa3624: + $p := 3624; + goto $bb1; +$aa3625: + $p := 3625; + goto $bb1; +$aa3626: + $p := 3626; + goto $bb1; +$aa3627: + $p := 3627; + goto $bb1; +$aa3628: + $p := 3628; + goto $bb1; +$aa3629: + $p := 3629; + goto $bb1; +$aa3630: + $p := 3630; + goto $bb1; +$aa3631: + $p := 3631; + goto $bb1; +$aa3632: + $p := 3632; + goto $bb1; +$aa3633: + $p := 3633; + goto $bb1; +$aa3634: + $p := 3634; + goto $bb1; +$aa3635: + $p := 3635; + goto $bb1; +$aa3636: + $p := 3636; + goto $bb1; +$aa3637: + $p := 3637; + goto $bb1; +$aa3638: + $p := 3638; + goto $bb1; +$aa3639: + $p := 3639; + goto $bb1; +$aa3640: + $p := 3640; + goto $bb1; +$aa3641: + $p := 3641; + goto $bb1; +$aa3642: + $p := 3642; + goto $bb1; +$aa3643: + $p := 3643; + goto $bb1; +$aa3644: + $p := 3644; + goto $bb1; +$aa3645: + $p := 3645; + goto $bb1; +$aa3646: + $p := 3646; + goto $bb1; +$aa3647: + $p := 3647; + goto $bb1; +$aa3648: + $p := 3648; + goto $bb1; +$aa3649: + $p := 3649; + goto $bb1; +$aa3650: + $p := 3650; + goto $bb1; +$aa3651: + $p := 3651; + goto $bb1; +$aa3652: + $p := 3652; + goto $bb1; +$aa3653: + $p := 3653; + goto $bb1; +$aa3654: + $p := 3654; + goto $bb1; +$aa3655: + $p := 3655; + goto $bb1; +$aa3656: + $p := 3656; + goto $bb1; +$aa3657: + $p := 3657; + goto $bb1; +$aa3658: + $p := 3658; + goto $bb1; +$aa3659: + $p := 3659; + goto $bb1; +$aa3660: + $p := 3660; + goto $bb1; +$aa3661: + $p := 3661; + goto $bb1; +$aa3662: + $p := 3662; + goto $bb1; +$aa3663: + $p := 3663; + goto $bb1; +$aa3664: + $p := 3664; + goto $bb1; +$aa3665: + $p := 3665; + goto $bb1; +$aa3666: + $p := 3666; + goto $bb1; +$aa3667: + $p := 3667; + goto $bb1; +$aa3668: + $p := 3668; + goto $bb1; +$aa3669: + $p := 3669; + goto $bb1; +$aa3670: + $p := 3670; + goto $bb1; +$aa3671: + $p := 3671; + goto $bb1; +$aa3672: + $p := 3672; + goto $bb1; +$aa3673: + $p := 3673; + goto $bb1; +$aa3674: + $p := 3674; + goto $bb1; +$aa3675: + $p := 3675; + goto $bb1; +$aa3676: + $p := 3676; + goto $bb1; +$aa3677: + $p := 3677; + goto $bb1; +$aa3678: + $p := 3678; + goto $bb1; +$aa3679: + $p := 3679; + goto $bb1; +$aa3680: + $p := 3680; + goto $bb1; +$aa3681: + $p := 3681; + goto $bb1; +$aa3682: + $p := 3682; + goto $bb1; +$aa3683: + $p := 3683; + goto $bb1; +$aa3684: + $p := 3684; + goto $bb1; +$aa3685: + $p := 3685; + goto $bb1; +$aa3686: + $p := 3686; + goto $bb1; +$aa3687: + $p := 3687; + goto $bb1; +$aa3688: + $p := 3688; + goto $bb1; +$aa3689: + $p := 3689; + goto $bb1; +$aa3690: + $p := 3690; + goto $bb1; +$aa3691: + $p := 3691; + goto $bb1; +$aa3692: + $p := 3692; + goto $bb1; +$aa3693: + $p := 3693; + goto $bb1; +$aa3694: + $p := 3694; + goto $bb1; +$aa3695: + $p := 3695; + goto $bb1; +$aa3696: + $p := 3696; + goto $bb1; +$aa3697: + $p := 3697; + goto $bb1; +$aa3698: + $p := 3698; + goto $bb1; +$aa3699: + $p := 3699; + goto $bb1; +$aa3700: + $p := 3700; + goto $bb1; +$aa3701: + $p := 3701; + goto $bb1; +$aa3702: + $p := 3702; + goto $bb1; +$aa3703: + $p := 3703; + goto $bb1; +$aa3704: + $p := 3704; + goto $bb1; +$aa3705: + $p := 3705; + goto $bb1; +$aa3706: + $p := 3706; + goto $bb1; +$aa3707: + $p := 3707; + goto $bb1; +$aa3708: + $p := 3708; + goto $bb1; +$aa3709: + $p := 3709; + goto $bb1; +$aa3710: + $p := 3710; + goto $bb1; +$aa3711: + $p := 3711; + goto $bb1; +$aa3712: + $p := 3712; + goto $bb1; +$aa3713: + $p := 3713; + goto $bb1; +$aa3714: + $p := 3714; + goto $bb1; +$aa3715: + $p := 3715; + goto $bb1; +$aa3716: + $p := 3716; + goto $bb1; +$aa3717: + $p := 3717; + goto $bb1; +$aa3718: + $p := 3718; + goto $bb1; +$aa3719: + $p := 3719; + goto $bb1; +$aa3720: + $p := 3720; + goto $bb1; +$aa3721: + $p := 3721; + goto $bb1; +$aa3722: + $p := 3722; + goto $bb1; +$aa3723: + $p := 3723; + goto $bb1; +$aa3724: + $p := 3724; + goto $bb1; +$aa3725: + $p := 3725; + goto $bb1; +$aa3726: + $p := 3726; + goto $bb1; +$aa3727: + $p := 3727; + goto $bb1; +$aa3728: + $p := 3728; + goto $bb1; +$aa3729: + $p := 3729; + goto $bb1; +$aa3730: + $p := 3730; + goto $bb1; +$aa3731: + $p := 3731; + goto $bb1; +$aa3732: + $p := 3732; + goto $bb1; +$aa3733: + $p := 3733; + goto $bb1; +$aa3734: + $p := 3734; + goto $bb1; +$aa3735: + $p := 3735; + goto $bb1; +$aa3736: + $p := 3736; + goto $bb1; +$aa3737: + $p := 3737; + goto $bb1; +$aa3738: + $p := 3738; + goto $bb1; +$aa3739: + $p := 3739; + goto $bb1; +$aa3740: + $p := 3740; + goto $bb1; +$aa3741: + $p := 3741; + goto $bb1; +$aa3742: + $p := 3742; + goto $bb1; +$aa3743: + $p := 3743; + goto $bb1; +$aa3744: + $p := 3744; + goto $bb1; +$aa3745: + $p := 3745; + goto $bb1; +$aa3746: + $p := 3746; + goto $bb1; +$aa3747: + $p := 3747; + goto $bb1; +$aa3748: + $p := 3748; + goto $bb1; +$aa3749: + $p := 3749; + goto $bb1; +$aa3750: + $p := 3750; + goto $bb1; +$aa3751: + $p := 3751; + goto $bb1; +$aa3752: + $p := 3752; + goto $bb1; +$aa3753: + $p := 3753; + goto $bb1; +$aa3754: + $p := 3754; + goto $bb1; +$aa3755: + $p := 3755; + goto $bb1; +$aa3756: + $p := 3756; + goto $bb1; +$aa3757: + $p := 3757; + goto $bb1; +$aa3758: + $p := 3758; + goto $bb1; +$aa3759: + $p := 3759; + goto $bb1; +$aa3760: + $p := 3760; + goto $bb1; +$aa3761: + $p := 3761; + goto $bb1; +$aa3762: + $p := 3762; + goto $bb1; +$aa3763: + $p := 3763; + goto $bb1; +$aa3764: + $p := 3764; + goto $bb1; +$aa3765: + $p := 3765; + goto $bb1; +$aa3766: + $p := 3766; + goto $bb1; +$aa3767: + $p := 3767; + goto $bb1; +$aa3768: + $p := 3768; + goto $bb1; +$aa3769: + $p := 3769; + goto $bb1; +$aa3770: + $p := 3770; + goto $bb1; +$aa3771: + $p := 3771; + goto $bb1; +$aa3772: + $p := 3772; + goto $bb1; +$aa3773: + $p := 3773; + goto $bb1; +$aa3774: + $p := 3774; + goto $bb1; +$aa3775: + $p := 3775; + goto $bb1; +$aa3776: + $p := 3776; + goto $bb1; +$aa3777: + $p := 3777; + goto $bb1; +$aa3778: + $p := 3778; + goto $bb1; +$aa3779: + $p := 3779; + goto $bb1; +$aa3780: + $p := 3780; + goto $bb1; +$aa3781: + $p := 3781; + goto $bb1; +$aa3782: + $p := 3782; + goto $bb1; +$aa3783: + $p := 3783; + goto $bb1; +$aa3784: + $p := 3784; + goto $bb1; +$aa3785: + $p := 3785; + goto $bb1; +$aa3786: + $p := 3786; + goto $bb1; +$aa3787: + $p := 3787; + goto $bb1; +$aa3788: + $p := 3788; + goto $bb1; +$aa3789: + $p := 3789; + goto $bb1; +$aa3790: + $p := 3790; + goto $bb1; +$aa3791: + $p := 3791; + goto $bb1; +$aa3792: + $p := 3792; + goto $bb1; +$aa3793: + $p := 3793; + goto $bb1; +$aa3794: + $p := 3794; + goto $bb1; +$aa3795: + $p := 3795; + goto $bb1; +$aa3796: + $p := 3796; + goto $bb1; +$aa3797: + $p := 3797; + goto $bb1; +$aa3798: + $p := 3798; + goto $bb1; +$aa3799: + $p := 3799; + goto $bb1; +$aa3800: + $p := 3800; + goto $bb1; +$aa3801: + $p := 3801; + goto $bb1; +$aa3802: + $p := 3802; + goto $bb1; +$aa3803: + $p := 3803; + goto $bb1; +$aa3804: + $p := 3804; + goto $bb1; +$aa3805: + $p := 3805; + goto $bb1; +$aa3806: + $p := 3806; + goto $bb1; +$aa3807: + $p := 3807; + goto $bb1; +$aa3808: + $p := 3808; + goto $bb1; +$aa3809: + $p := 3809; + goto $bb1; +$aa3810: + $p := 3810; + goto $bb1; +$aa3811: + $p := 3811; + goto $bb1; +$aa3812: + $p := 3812; + goto $bb1; +$aa3813: + $p := 3813; + goto $bb1; +$aa3814: + $p := 3814; + goto $bb1; +$aa3815: + $p := 3815; + goto $bb1; +$aa3816: + $p := 3816; + goto $bb1; +$aa3817: + $p := 3817; + goto $bb1; +$aa3818: + $p := 3818; + goto $bb1; +$aa3819: + $p := 3819; + goto $bb1; +$aa3820: + $p := 3820; + goto $bb1; +$aa3821: + $p := 3821; + goto $bb1; +$aa3822: + $p := 3822; + goto $bb1; +$aa3823: + $p := 3823; + goto $bb1; +$aa3824: + $p := 3824; + goto $bb1; +$aa3825: + $p := 3825; + goto $bb1; +$aa3826: + $p := 3826; + goto $bb1; +$aa3827: + $p := 3827; + goto $bb1; +$aa3828: + $p := 3828; + goto $bb1; +$aa3829: + $p := 3829; + goto $bb1; +$aa3830: + $p := 3830; + goto $bb1; +$aa3831: + $p := 3831; + goto $bb1; +$aa3832: + $p := 3832; + goto $bb1; +$aa3833: + $p := 3833; + goto $bb1; +$aa3834: + $p := 3834; + goto $bb1; +$aa3835: + $p := 3835; + goto $bb1; +$aa3836: + $p := 3836; + goto $bb1; +$aa3837: + $p := 3837; + goto $bb1; +$aa3838: + $p := 3838; + goto $bb1; +$aa3839: + $p := 3839; + goto $bb1; +$aa3840: + $p := 3840; + goto $bb1; +$aa3841: + $p := 3841; + goto $bb1; +$aa3842: + $p := 3842; + goto $bb1; +$aa3843: + $p := 3843; + goto $bb1; +$aa3844: + $p := 3844; + goto $bb1; +$aa3845: + $p := 3845; + goto $bb1; +$aa3846: + $p := 3846; + goto $bb1; +$aa3847: + $p := 3847; + goto $bb1; +$aa3848: + $p := 3848; + goto $bb1; +$aa3849: + $p := 3849; + goto $bb1; +$aa3850: + $p := 3850; + goto $bb1; +$aa3851: + $p := 3851; + goto $bb1; +$aa3852: + $p := 3852; + goto $bb1; +$aa3853: + $p := 3853; + goto $bb1; +$aa3854: + $p := 3854; + goto $bb1; +$aa3855: + $p := 3855; + goto $bb1; +$aa3856: + $p := 3856; + goto $bb1; +$aa3857: + $p := 3857; + goto $bb1; +$aa3858: + $p := 3858; + goto $bb1; +$aa3859: + $p := 3859; + goto $bb1; +$aa3860: + $p := 3860; + goto $bb1; +$aa3861: + $p := 3861; + goto $bb1; +$aa3862: + $p := 3862; + goto $bb1; +$aa3863: + $p := 3863; + goto $bb1; +$aa3864: + $p := 3864; + goto $bb1; +$aa3865: + $p := 3865; + goto $bb1; +$aa3866: + $p := 3866; + goto $bb1; +$aa3867: + $p := 3867; + goto $bb1; +$aa3868: + $p := 3868; + goto $bb1; +$aa3869: + $p := 3869; + goto $bb1; +$aa3870: + $p := 3870; + goto $bb1; +$aa3871: + $p := 3871; + goto $bb1; +$aa3872: + $p := 3872; + goto $bb1; +$aa3873: + $p := 3873; + goto $bb1; +$aa3874: + $p := 3874; + goto $bb1; +$aa3875: + $p := 3875; + goto $bb1; +$aa3876: + $p := 3876; + goto $bb1; +$aa3877: + $p := 3877; + goto $bb1; +$aa3878: + $p := 3878; + goto $bb1; +$aa3879: + $p := 3879; + goto $bb1; +$aa3880: + $p := 3880; + goto $bb1; +$aa3881: + $p := 3881; + goto $bb1; +$aa3882: + $p := 3882; + goto $bb1; +$aa3883: + $p := 3883; + goto $bb1; +$aa3884: + $p := 3884; + goto $bb1; +$aa3885: + $p := 3885; + goto $bb1; +$aa3886: + $p := 3886; + goto $bb1; +$aa3887: + $p := 3887; + goto $bb1; +$aa3888: + $p := 3888; + goto $bb1; +$aa3889: + $p := 3889; + goto $bb1; +$aa3890: + $p := 3890; + goto $bb1; +$aa3891: + $p := 3891; + goto $bb1; +$aa3892: + $p := 3892; + goto $bb1; +$aa3893: + $p := 3893; + goto $bb1; +$aa3894: + $p := 3894; + goto $bb1; +$aa3895: + $p := 3895; + goto $bb1; +$aa3896: + $p := 3896; + goto $bb1; +$aa3897: + $p := 3897; + goto $bb1; +$aa3898: + $p := 3898; + goto $bb1; +$aa3899: + $p := 3899; + goto $bb1; +$aa3900: + $p := 3900; + goto $bb1; +$aa3901: + $p := 3901; + goto $bb1; +$aa3902: + $p := 3902; + goto $bb1; +$aa3903: + $p := 3903; + goto $bb1; +$aa3904: + $p := 3904; + goto $bb1; +$aa3905: + $p := 3905; + goto $bb1; +$aa3906: + $p := 3906; + goto $bb1; +$aa3907: + $p := 3907; + goto $bb1; +$aa3908: + $p := 3908; + goto $bb1; +$aa3909: + $p := 3909; + goto $bb1; +$aa3910: + $p := 3910; + goto $bb1; +$aa3911: + $p := 3911; + goto $bb1; +$aa3912: + $p := 3912; + goto $bb1; +$aa3913: + $p := 3913; + goto $bb1; +$aa3914: + $p := 3914; + goto $bb1; +$aa3915: + $p := 3915; + goto $bb1; +$aa3916: + $p := 3916; + goto $bb1; +$aa3917: + $p := 3917; + goto $bb1; +$aa3918: + $p := 3918; + goto $bb1; +$aa3919: + $p := 3919; + goto $bb1; +$aa3920: + $p := 3920; + goto $bb1; +$aa3921: + $p := 3921; + goto $bb1; +$aa3922: + $p := 3922; + goto $bb1; +$aa3923: + $p := 3923; + goto $bb1; +$aa3924: + $p := 3924; + goto $bb1; +$aa3925: + $p := 3925; + goto $bb1; +$aa3926: + $p := 3926; + goto $bb1; +$aa3927: + $p := 3927; + goto $bb1; +$aa3928: + $p := 3928; + goto $bb1; +$aa3929: + $p := 3929; + goto $bb1; +$aa3930: + $p := 3930; + goto $bb1; +$aa3931: + $p := 3931; + goto $bb1; +$aa3932: + $p := 3932; + goto $bb1; +$aa3933: + $p := 3933; + goto $bb1; +$aa3934: + $p := 3934; + goto $bb1; +$aa3935: + $p := 3935; + goto $bb1; +$aa3936: + $p := 3936; + goto $bb1; +$aa3937: + $p := 3937; + goto $bb1; +$aa3938: + $p := 3938; + goto $bb1; +$aa3939: + $p := 3939; + goto $bb1; +$aa3940: + $p := 3940; + goto $bb1; +$aa3941: + $p := 3941; + goto $bb1; +$aa3942: + $p := 3942; + goto $bb1; +$aa3943: + $p := 3943; + goto $bb1; +$aa3944: + $p := 3944; + goto $bb1; +$aa3945: + $p := 3945; + goto $bb1; +$aa3946: + $p := 3946; + goto $bb1; +$aa3947: + $p := 3947; + goto $bb1; +$aa3948: + $p := 3948; + goto $bb1; +$aa3949: + $p := 3949; + goto $bb1; +$aa3950: + $p := 3950; + goto $bb1; +$aa3951: + $p := 3951; + goto $bb1; +$aa3952: + $p := 3952; + goto $bb1; +$aa3953: + $p := 3953; + goto $bb1; +$aa3954: + $p := 3954; + goto $bb1; +$aa3955: + $p := 3955; + goto $bb1; +$aa3956: + $p := 3956; + goto $bb1; +$aa3957: + $p := 3957; + goto $bb1; +$aa3958: + $p := 3958; + goto $bb1; +$aa3959: + $p := 3959; + goto $bb1; +$aa3960: + $p := 3960; + goto $bb1; +$aa3961: + $p := 3961; + goto $bb1; +$aa3962: + $p := 3962; + goto $bb1; +$aa3963: + $p := 3963; + goto $bb1; +$aa3964: + $p := 3964; + goto $bb1; +$aa3965: + $p := 3965; + goto $bb1; +$aa3966: + $p := 3966; + goto $bb1; +$aa3967: + $p := 3967; + goto $bb1; +$aa3968: + $p := 3968; + goto $bb1; +$aa3969: + $p := 3969; + goto $bb1; +$aa3970: + $p := 3970; + goto $bb1; +$aa3971: + $p := 3971; + goto $bb1; +$aa3972: + $p := 3972; + goto $bb1; +$aa3973: + $p := 3973; + goto $bb1; +$aa3974: + $p := 3974; + goto $bb1; +$aa3975: + $p := 3975; + goto $bb1; +$aa3976: + $p := 3976; + goto $bb1; +$aa3977: + $p := 3977; + goto $bb1; +$aa3978: + $p := 3978; + goto $bb1; +$aa3979: + $p := 3979; + goto $bb1; +$aa3980: + $p := 3980; + goto $bb1; +$aa3981: + $p := 3981; + goto $bb1; +$aa3982: + $p := 3982; + goto $bb1; +$aa3983: + $p := 3983; + goto $bb1; +$aa3984: + $p := 3984; + goto $bb1; +$aa3985: + $p := 3985; + goto $bb1; +$aa3986: + $p := 3986; + goto $bb1; +$aa3987: + $p := 3987; + goto $bb1; +$aa3988: + $p := 3988; + goto $bb1; +$aa3989: + $p := 3989; + goto $bb1; +$aa3990: + $p := 3990; + goto $bb1; +$aa3991: + $p := 3991; + goto $bb1; +$aa3992: + $p := 3992; + goto $bb1; +$aa3993: + $p := 3993; + goto $bb1; +$aa3994: + $p := 3994; + goto $bb1; +$aa3995: + $p := 3995; + goto $bb1; +$aa3996: + $p := 3996; + goto $bb1; +$aa3997: + $p := 3997; + goto $bb1; +$aa3998: + $p := 3998; + goto $bb1; +$aa3999: + $p := 3999; + goto $bb1; +$aa4000: + $p := 4000; + goto $bb1; +$aa4001: + $p := 4001; + goto $bb1; +$aa4002: + $p := 4002; + goto $bb1; +$aa4003: + $p := 4003; + goto $bb1; +$aa4004: + $p := 4004; + goto $bb1; +$aa4005: + $p := 4005; + goto $bb1; +$aa4006: + $p := 4006; + goto $bb1; +$aa4007: + $p := 4007; + goto $bb1; +$aa4008: + $p := 4008; + goto $bb1; +$aa4009: + $p := 4009; + goto $bb1; +$aa4010: + $p := 4010; + goto $bb1; +$aa4011: + $p := 4011; + goto $bb1; +$aa4012: + $p := 4012; + goto $bb1; +$aa4013: + $p := 4013; + goto $bb1; +$aa4014: + $p := 4014; + goto $bb1; +$aa4015: + $p := 4015; + goto $bb1; +$aa4016: + $p := 4016; + goto $bb1; +$aa4017: + $p := 4017; + goto $bb1; +$aa4018: + $p := 4018; + goto $bb1; +$aa4019: + $p := 4019; + goto $bb1; +$aa4020: + $p := 4020; + goto $bb1; +$aa4021: + $p := 4021; + goto $bb1; +$aa4022: + $p := 4022; + goto $bb1; +$aa4023: + $p := 4023; + goto $bb1; +$aa4024: + $p := 4024; + goto $bb1; +$aa4025: + $p := 4025; + goto $bb1; +$aa4026: + $p := 4026; + goto $bb1; +$aa4027: + $p := 4027; + goto $bb1; +$aa4028: + $p := 4028; + goto $bb1; +$aa4029: + $p := 4029; + goto $bb1; +$aa4030: + $p := 4030; + goto $bb1; +$aa4031: + $p := 4031; + goto $bb1; +$aa4032: + $p := 4032; + goto $bb1; +$aa4033: + $p := 4033; + goto $bb1; +$aa4034: + $p := 4034; + goto $bb1; +$aa4035: + $p := 4035; + goto $bb1; +$aa4036: + $p := 4036; + goto $bb1; +$aa4037: + $p := 4037; + goto $bb1; +$aa4038: + $p := 4038; + goto $bb1; +$aa4039: + $p := 4039; + goto $bb1; +$aa4040: + $p := 4040; + goto $bb1; +$aa4041: + $p := 4041; + goto $bb1; +$aa4042: + $p := 4042; + goto $bb1; +$aa4043: + $p := 4043; + goto $bb1; +$aa4044: + $p := 4044; + goto $bb1; +$aa4045: + $p := 4045; + goto $bb1; +$aa4046: + $p := 4046; + goto $bb1; +$aa4047: + $p := 4047; + goto $bb1; +$aa4048: + $p := 4048; + goto $bb1; +$aa4049: + $p := 4049; + goto $bb1; +$aa4050: + $p := 4050; + goto $bb1; +$aa4051: + $p := 4051; + goto $bb1; +$aa4052: + $p := 4052; + goto $bb1; +$aa4053: + $p := 4053; + goto $bb1; +$aa4054: + $p := 4054; + goto $bb1; +$aa4055: + $p := 4055; + goto $bb1; +$aa4056: + $p := 4056; + goto $bb1; +$aa4057: + $p := 4057; + goto $bb1; +$aa4058: + $p := 4058; + goto $bb1; +$aa4059: + $p := 4059; + goto $bb1; +$aa4060: + $p := 4060; + goto $bb1; +$aa4061: + $p := 4061; + goto $bb1; +$aa4062: + $p := 4062; + goto $bb1; +$aa4063: + $p := 4063; + goto $bb1; +$aa4064: + $p := 4064; + goto $bb1; +$aa4065: + $p := 4065; + goto $bb1; +$aa4066: + $p := 4066; + goto $bb1; +$aa4067: + $p := 4067; + goto $bb1; +$aa4068: + $p := 4068; + goto $bb1; +$aa4069: + $p := 4069; + goto $bb1; +$aa4070: + $p := 4070; + goto $bb1; +$aa4071: + $p := 4071; + goto $bb1; +$aa4072: + $p := 4072; + goto $bb1; +$aa4073: + $p := 4073; + goto $bb1; +$aa4074: + $p := 4074; + goto $bb1; +$aa4075: + $p := 4075; + goto $bb1; +$aa4076: + $p := 4076; + goto $bb1; +$aa4077: + $p := 4077; + goto $bb1; +$aa4078: + $p := 4078; + goto $bb1; +$aa4079: + $p := 4079; + goto $bb1; +$aa4080: + $p := 4080; + goto $bb1; +$aa4081: + $p := 4081; + goto $bb1; +$aa4082: + $p := 4082; + goto $bb1; +$aa4083: + $p := 4083; + goto $bb1; +$aa4084: + $p := 4084; + goto $bb1; +$aa4085: + $p := 4085; + goto $bb1; +$aa4086: + $p := 4086; + goto $bb1; +$aa4087: + $p := 4087; + goto $bb1; +$aa4088: + $p := 4088; + goto $bb1; +$aa4089: + $p := 4089; + goto $bb1; +$aa4090: + $p := 4090; + goto $bb1; +$aa4091: + $p := 4091; + goto $bb1; +$aa4092: + $p := 4092; + goto $bb1; +$aa4093: + $p := 4093; + goto $bb1; +$aa4094: + $p := 4094; + goto $bb1; +$aa4095: + $p := 4095; + goto $bb1; +$aa4096: + $p := 4096; + goto $bb1; +$bb1: + assert b0($p); + //$b := $sge($p, $p1); + goto $bb2, $bb3; +$bb2: + $p6 := $add(1, $p); + $p := $p6; + goto $bb1; +$bb3: + $c1 := ($p > 0); + assert $c1; + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; diff --git a/bench_horn_ice/samples_shrink_big_numbers_8192.bpl b/bench_horn_ice/samples_shrink_big_numbers_8192.bpl new file mode 100644 index 000000000..81326896e --- /dev/null +++ b/bench_horn_ice/samples_shrink_big_numbers_8192.bpl @@ -0,0 +1,24761 @@ +// SMACK-PRELUDE-BEGIN +procedure boogie_si_record_int(i: int); + +function {:existential true} b0(i:int): bool; + +// Integer arithmetic +function $add(p1:int, p2:int) returns (int) {p1 + p2} +function $sub(p1:int, p2:int) returns (int) {p1 - p2} +function $mul(p1:int, p2:int) returns (int) {p1 * p2} +function $sdiv(p1:int, p2:int) returns (int); +function $udiv(p1:int, p2:int) returns (int); +function $srem(p1:int, p2:int) returns (int); +function $urem(p1:int, p2:int) returns (int); +function $and(p1:int, p2:int) returns (int); +axiom $and(0,0) == 0; +axiom $and(0,1) == 0; +axiom $and(1,0) == 0; +axiom $and(1,1) == 1; +function $or(p1:int, p2:int) returns (int); +axiom $or(0,0) == 0; +axiom $or(0,1) == 1; +axiom $or(1,0) == 1; +axiom $or(1,1) == 1; +function $xor(p1:int, p2:int) returns (int); +axiom $xor(0,0) == 0; +axiom $xor(0,1) == 1; +axiom $xor(1,0) == 1; +axiom $xor(1,1) == 0; +function $lshr(p1:int, p2:int) returns (int); +function $ashr(p1:int, p2:int) returns (int); +function $shl(p1:int, p2:int) returns (int); +function $ult(p1:int, p2:int) returns (bool) {p1 < p2} +function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} +function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} +function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $slt(p1:int, p2:int) returns (bool) {p1 < p2} +function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} +function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} +function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} +function $nand(p1:int, p2:int) returns (int); +function $max(p1:int, p2:int) returns (int); +function $min(p1:int, p2:int) returns (int); +function $umax(p1:int, p2:int) returns (int); +function $umin(p1:int, p2:int) returns (int); +function $i2b(i: int) returns (bool); +axiom (forall i:int :: $i2b(i) <==> i != 0); +axiom $i2b(0) == false; +function $b2i(b: bool) returns (int); +axiom $b2i(true) == 1; +axiom $b2i(false) == 0; + +// Floating point +type float; +function $fp(a:int) returns (float); +const $ffalse: float; +const $ftrue: float; +function $fadd(f1:float, f2:float) returns (float); +function $fsub(f1:float, f2:float) returns (float); +function $fmul(f1:float, f2:float) returns (float); +function $fdiv(f1:float, f2:float) returns (float); +function $frem(f1:float, f2:float) returns (float); +function $foeq(f1:float, f2:float) returns (bool); +function $foge(f1:float, f2:float) returns (bool); +function $fogt(f1:float, f2:float) returns (bool); +function $fole(f1:float, f2:float) returns (bool); +function $folt(f1:float, f2:float) returns (bool); +function $fone(f1:float, f2:float) returns (bool); +function $ford(f1:float, f2:float) returns (bool); +function $fueq(f1:float, f2:float) returns (bool); +function $fuge(f1:float, f2:float) returns (bool); +function $fugt(f1:float, f2:float) returns (bool); +function $fule(f1:float, f2:float) returns (bool); +function $fult(f1:float, f2:float) returns (bool); +function $fune(f1:float, f2:float) returns (bool); +function $funo(f1:float, f2:float) returns (bool); +function $fp2si(f:float) returns (int); +function $fp2ui(f:float) returns (int); +function $si2fp(i:int) returns (float); +function $ui2fp(i:int) returns (float); + +// Memory region declarations: 0 + +// SMACK Flat Memory Model + +function $ptr(obj:int, off:int) returns (int) {obj + off} +function $size(int) returns (int); +function $obj(int) returns (int); +function $off(ptr:int) returns (int) {ptr} + +var alloc: [int] bool; +var $CurrAddr:int; + +const unique $NULL: int; +axiom $NULL == 0; +const $UNDEF: int; + +function $pa(pointer: int, index: int, size: int) returns (int); +function $trunc(p: int) returns (int); +function $p2i(p: int) returns (int); +function $i2p(p: int) returns (int); +function $p2b(p: int) returns (bool); +function $b2p(b: bool) returns (int); + +axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); +axiom (forall p:int :: $trunc(p) == p); + +axiom $b2p(true) == 1; +axiom $b2p(false) == 0; +axiom (forall i:int :: $p2b(i) <==> i != 0); +axiom $p2b(0) == false; +axiom (forall i:int :: $p2i(i) == i); +axiom (forall i:int :: $i2p(i) == i); +procedure __SMACK_nondet() returns (p: int); +procedure __SMACK_nondetInt() returns (p: int); + +procedure $malloc(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +procedure $free(pointer: int); +modifies alloc; +requires alloc[pointer]; +requires $obj(pointer) == pointer; +ensures !alloc[pointer]; +ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); + +procedure $alloca(obj_size: int) returns (new: int); +modifies $CurrAddr, alloc; +requires obj_size > 0; +ensures 0 < old($CurrAddr); +ensures new == old($CurrAddr); +ensures $CurrAddr > old($CurrAddr) + obj_size; +ensures $size(new) == obj_size; +ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); +ensures alloc[new]; +ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); + +// SMACK-PRELUDE-END +// BEGIN SMACK-GENERATED CODE +const unique main: int; +axiom (main == -1024); +const unique __VERIFIER_assert: int; +axiom (__VERIFIER_assert == -2048); + +procedure main() + modifies alloc, $CurrAddr; +{ + var $p: int; + var $b: bool; + var $b2: bool; + var $c1: bool; + var $c2: bool; + var $p3: int; + var $p4: int; + var $p5: int; + var $p6: int; + var $v1: int; + var $v2: int; + +$bb0: + goto $aa1, $aa2, $aa3, $aa4, $aa5, $aa6, $aa7, $aa8, $aa9, $aa10, $aa11, $aa12, $aa13, $aa14, $aa15, $aa16, $aa17, $aa18, $aa19, $aa20, $aa21, $aa22, $aa23, $aa24, $aa25, $aa26, $aa27, $aa28, $aa29, $aa30, $aa31, $aa32, $aa33, $aa34, $aa35, $aa36, $aa37, $aa38, $aa39, $aa40, $aa41, $aa42, $aa43, $aa44, $aa45, $aa46, $aa47, $aa48, $aa49, $aa50, $aa51, $aa52, $aa53, $aa54, $aa55, $aa56, $aa57, $aa58, $aa59, $aa60, $aa61, $aa62, $aa63, $aa64, $aa65, $aa66, $aa67, $aa68, $aa69, $aa70, $aa71, $aa72, $aa73, $aa74, $aa75, $aa76, $aa77, $aa78, $aa79, $aa80, $aa81, $aa82, $aa83, $aa84, $aa85, $aa86, $aa87, $aa88, $aa89, $aa90, $aa91, $aa92, $aa93, $aa94, $aa95, $aa96, $aa97, $aa98, $aa99, $aa100, $aa101, $aa102, $aa103, $aa104, $aa105, $aa106, $aa107, $aa108, $aa109, $aa110, $aa111, $aa112, $aa113, $aa114, $aa115, $aa116, $aa117, $aa118, $aa119, $aa120, $aa121, $aa122, $aa123, $aa124, $aa125, $aa126, $aa127, $aa128, $aa129, $aa130, $aa131, $aa132, $aa133, $aa134, $aa135, $aa136, $aa137, $aa138, $aa139, $aa140, $aa141, $aa142, $aa143, $aa144, $aa145, $aa146, $aa147, $aa148, $aa149, $aa150, $aa151, $aa152, $aa153, $aa154, $aa155, $aa156, $aa157, $aa158, $aa159, $aa160, $aa161, $aa162, $aa163, $aa164, $aa165, $aa166, $aa167, $aa168, $aa169, $aa170, $aa171, $aa172, $aa173, $aa174, $aa175, $aa176, $aa177, $aa178, $aa179, $aa180, $aa181, $aa182, $aa183, $aa184, $aa185, $aa186, $aa187, $aa188, $aa189, $aa190, $aa191, $aa192, $aa193, $aa194, $aa195, $aa196, $aa197, $aa198, $aa199, $aa200, $aa201, $aa202, $aa203, $aa204, $aa205, $aa206, $aa207, $aa208, $aa209, $aa210, $aa211, $aa212, $aa213, $aa214, $aa215, $aa216, $aa217, $aa218, $aa219, $aa220, $aa221, $aa222, $aa223, $aa224, $aa225, $aa226, $aa227, $aa228, $aa229, $aa230, $aa231, $aa232, $aa233, $aa234, $aa235, $aa236, $aa237, $aa238, $aa239, $aa240, $aa241, $aa242, $aa243, $aa244, $aa245, $aa246, $aa247, $aa248, $aa249, $aa250, $aa251, $aa252, $aa253, $aa254, $aa255, $aa256, $aa257, $aa258, $aa259, $aa260, $aa261, $aa262, $aa263, $aa264, $aa265, $aa266, $aa267, $aa268, $aa269, $aa270, $aa271, $aa272, $aa273, $aa274, $aa275, $aa276, $aa277, $aa278, $aa279, $aa280, $aa281, $aa282, $aa283, $aa284, $aa285, $aa286, $aa287, $aa288, $aa289, $aa290, $aa291, $aa292, $aa293, $aa294, $aa295, $aa296, $aa297, $aa298, $aa299, $aa300, $aa301, $aa302, $aa303, $aa304, $aa305, $aa306, $aa307, $aa308, $aa309, $aa310, $aa311, $aa312, $aa313, $aa314, $aa315, $aa316, $aa317, $aa318, $aa319, $aa320, $aa321, $aa322, $aa323, $aa324, $aa325, $aa326, $aa327, $aa328, $aa329, $aa330, $aa331, $aa332, $aa333, $aa334, $aa335, $aa336, $aa337, $aa338, $aa339, $aa340, $aa341, $aa342, $aa343, $aa344, $aa345, $aa346, $aa347, $aa348, $aa349, $aa350, $aa351, $aa352, $aa353, $aa354, $aa355, $aa356, $aa357, $aa358, $aa359, $aa360, $aa361, $aa362, $aa363, $aa364, $aa365, $aa366, $aa367, $aa368, $aa369, $aa370, $aa371, $aa372, $aa373, $aa374, $aa375, $aa376, $aa377, $aa378, $aa379, $aa380, $aa381, $aa382, $aa383, $aa384, $aa385, $aa386, $aa387, $aa388, $aa389, $aa390, $aa391, $aa392, $aa393, $aa394, $aa395, $aa396, $aa397, $aa398, $aa399, $aa400, $aa401, $aa402, $aa403, $aa404, $aa405, $aa406, $aa407, $aa408, $aa409, $aa410, $aa411, $aa412, $aa413, $aa414, $aa415, $aa416, $aa417, $aa418, $aa419, $aa420, $aa421, $aa422, $aa423, $aa424, $aa425, $aa426, $aa427, $aa428, $aa429, $aa430, $aa431, $aa432, $aa433, $aa434, $aa435, $aa436, $aa437, $aa438, $aa439, $aa440, $aa441, $aa442, $aa443, $aa444, $aa445, $aa446, $aa447, $aa448, $aa449, $aa450, $aa451, $aa452, $aa453, $aa454, $aa455, $aa456, $aa457, $aa458, $aa459, $aa460, $aa461, $aa462, $aa463, $aa464, $aa465, $aa466, $aa467, $aa468, $aa469, $aa470, $aa471, $aa472, $aa473, $aa474, $aa475, $aa476, $aa477, $aa478, $aa479, $aa480, $aa481, $aa482, $aa483, $aa484, $aa485, $aa486, $aa487, $aa488, $aa489, $aa490, $aa491, $aa492, $aa493, $aa494, $aa495, $aa496, $aa497, $aa498, $aa499, $aa500, $aa501, $aa502, $aa503, $aa504, $aa505, $aa506, $aa507, $aa508, $aa509, $aa510, $aa511, $aa512, $aa513, $aa514, $aa515, $aa516, $aa517, $aa518, $aa519, $aa520, $aa521, $aa522, $aa523, $aa524, $aa525, $aa526, $aa527, $aa528, $aa529, $aa530, $aa531, $aa532, $aa533, $aa534, $aa535, $aa536, $aa537, $aa538, $aa539, $aa540, $aa541, $aa542, $aa543, $aa544, $aa545, $aa546, $aa547, $aa548, $aa549, $aa550, $aa551, $aa552, $aa553, $aa554, $aa555, $aa556, $aa557, $aa558, $aa559, $aa560, $aa561, $aa562, $aa563, $aa564, $aa565, $aa566, $aa567, $aa568, $aa569, $aa570, $aa571, $aa572, $aa573, $aa574, $aa575, $aa576, $aa577, $aa578, $aa579, $aa580, $aa581, $aa582, $aa583, $aa584, $aa585, $aa586, $aa587, $aa588, $aa589, $aa590, $aa591, $aa592, $aa593, $aa594, $aa595, $aa596, $aa597, $aa598, $aa599, $aa600, $aa601, $aa602, $aa603, $aa604, $aa605, $aa606, $aa607, $aa608, $aa609, $aa610, $aa611, $aa612, $aa613, $aa614, $aa615, $aa616, $aa617, $aa618, $aa619, $aa620, $aa621, $aa622, $aa623, $aa624, $aa625, $aa626, $aa627, $aa628, $aa629, $aa630, $aa631, $aa632, $aa633, $aa634, $aa635, $aa636, $aa637, $aa638, $aa639, $aa640, $aa641, $aa642, $aa643, $aa644, $aa645, $aa646, $aa647, $aa648, $aa649, $aa650, $aa651, $aa652, $aa653, $aa654, $aa655, $aa656, $aa657, $aa658, $aa659, $aa660, $aa661, $aa662, $aa663, $aa664, $aa665, $aa666, $aa667, $aa668, $aa669, $aa670, $aa671, $aa672, $aa673, $aa674, $aa675, $aa676, $aa677, $aa678, $aa679, $aa680, $aa681, $aa682, $aa683, $aa684, $aa685, $aa686, $aa687, $aa688, $aa689, $aa690, $aa691, $aa692, $aa693, $aa694, $aa695, $aa696, $aa697, $aa698, $aa699, $aa700, $aa701, $aa702, $aa703, $aa704, $aa705, $aa706, $aa707, $aa708, $aa709, $aa710, $aa711, $aa712, $aa713, $aa714, $aa715, $aa716, $aa717, $aa718, $aa719, $aa720, $aa721, $aa722, $aa723, $aa724, $aa725, $aa726, $aa727, $aa728, $aa729, $aa730, $aa731, $aa732, $aa733, $aa734, $aa735, $aa736, $aa737, $aa738, $aa739, $aa740, $aa741, $aa742, $aa743, $aa744, $aa745, $aa746, $aa747, $aa748, $aa749, $aa750, $aa751, $aa752, $aa753, $aa754, $aa755, $aa756, $aa757, $aa758, $aa759, $aa760, $aa761, $aa762, $aa763, $aa764, $aa765, $aa766, $aa767, $aa768, $aa769, $aa770, $aa771, $aa772, $aa773, $aa774, $aa775, $aa776, $aa777, $aa778, $aa779, $aa780, $aa781, $aa782, $aa783, $aa784, $aa785, $aa786, $aa787, $aa788, $aa789, $aa790, $aa791, $aa792, $aa793, $aa794, $aa795, $aa796, $aa797, $aa798, $aa799, $aa800, $aa801, $aa802, $aa803, $aa804, $aa805, $aa806, $aa807, $aa808, $aa809, $aa810, $aa811, $aa812, $aa813, $aa814, $aa815, $aa816, $aa817, $aa818, $aa819, $aa820, $aa821, $aa822, $aa823, $aa824, $aa825, $aa826, $aa827, $aa828, $aa829, $aa830, $aa831, $aa832, $aa833, $aa834, $aa835, $aa836, $aa837, $aa838, $aa839, $aa840, $aa841, $aa842, $aa843, $aa844, $aa845, $aa846, $aa847, $aa848, $aa849, $aa850, $aa851, $aa852, $aa853, $aa854, $aa855, $aa856, $aa857, $aa858, $aa859, $aa860, $aa861, $aa862, $aa863, $aa864, $aa865, $aa866, $aa867, $aa868, $aa869, $aa870, $aa871, $aa872, $aa873, $aa874, $aa875, $aa876, $aa877, $aa878, $aa879, $aa880, $aa881, $aa882, $aa883, $aa884, $aa885, $aa886, $aa887, $aa888, $aa889, $aa890, $aa891, $aa892, $aa893, $aa894, $aa895, $aa896, $aa897, $aa898, $aa899, $aa900, $aa901, $aa902, $aa903, $aa904, $aa905, $aa906, $aa907, $aa908, $aa909, $aa910, $aa911, $aa912, $aa913, $aa914, $aa915, $aa916, $aa917, $aa918, $aa919, $aa920, $aa921, $aa922, $aa923, $aa924, $aa925, $aa926, $aa927, $aa928, $aa929, $aa930, $aa931, $aa932, $aa933, $aa934, $aa935, $aa936, $aa937, $aa938, $aa939, $aa940, $aa941, $aa942, $aa943, $aa944, $aa945, $aa946, $aa947, $aa948, $aa949, $aa950, $aa951, $aa952, $aa953, $aa954, $aa955, $aa956, $aa957, $aa958, $aa959, $aa960, $aa961, $aa962, $aa963, $aa964, $aa965, $aa966, $aa967, $aa968, $aa969, $aa970, $aa971, $aa972, $aa973, $aa974, $aa975, $aa976, $aa977, $aa978, $aa979, $aa980, $aa981, $aa982, $aa983, $aa984, $aa985, $aa986, $aa987, $aa988, $aa989, $aa990, $aa991, $aa992, $aa993, $aa994, $aa995, $aa996, $aa997, $aa998, $aa999, $aa1000, $aa1001, $aa1002, $aa1003, $aa1004, $aa1005, $aa1006, $aa1007, $aa1008, $aa1009, $aa1010, $aa1011, $aa1012, $aa1013, $aa1014, $aa1015, $aa1016, $aa1017, $aa1018, $aa1019, $aa1020, $aa1021, $aa1022, $aa1023, $aa1024, $aa1025, $aa1026, $aa1027, $aa1028, $aa1029, $aa1030, $aa1031, $aa1032, $aa1033, $aa1034, $aa1035, $aa1036, $aa1037, $aa1038, $aa1039, $aa1040, $aa1041, $aa1042, $aa1043, $aa1044, $aa1045, $aa1046, $aa1047, $aa1048, $aa1049, $aa1050, $aa1051, $aa1052, $aa1053, $aa1054, $aa1055, $aa1056, $aa1057, $aa1058, $aa1059, $aa1060, $aa1061, $aa1062, $aa1063, $aa1064, $aa1065, $aa1066, $aa1067, $aa1068, $aa1069, $aa1070, $aa1071, $aa1072, $aa1073, $aa1074, $aa1075, $aa1076, $aa1077, $aa1078, $aa1079, $aa1080, $aa1081, $aa1082, $aa1083, $aa1084, $aa1085, $aa1086, $aa1087, $aa1088, $aa1089, $aa1090, $aa1091, $aa1092, $aa1093, $aa1094, $aa1095, $aa1096, $aa1097, $aa1098, $aa1099, $aa1100, $aa1101, $aa1102, $aa1103, $aa1104, $aa1105, $aa1106, $aa1107, $aa1108, $aa1109, $aa1110, $aa1111, $aa1112, $aa1113, $aa1114, $aa1115, $aa1116, $aa1117, $aa1118, $aa1119, $aa1120, $aa1121, $aa1122, $aa1123, $aa1124, $aa1125, $aa1126, $aa1127, $aa1128, $aa1129, $aa1130, $aa1131, $aa1132, $aa1133, $aa1134, $aa1135, $aa1136, $aa1137, $aa1138, $aa1139, $aa1140, $aa1141, $aa1142, $aa1143, $aa1144, $aa1145, $aa1146, $aa1147, $aa1148, $aa1149, $aa1150, $aa1151, $aa1152, $aa1153, $aa1154, $aa1155, $aa1156, $aa1157, $aa1158, $aa1159, $aa1160, $aa1161, $aa1162, $aa1163, $aa1164, $aa1165, $aa1166, $aa1167, $aa1168, $aa1169, $aa1170, $aa1171, $aa1172, $aa1173, $aa1174, $aa1175, $aa1176, $aa1177, $aa1178, $aa1179, $aa1180, $aa1181, $aa1182, $aa1183, $aa1184, $aa1185, $aa1186, $aa1187, $aa1188, $aa1189, $aa1190, $aa1191, $aa1192, $aa1193, $aa1194, $aa1195, $aa1196, $aa1197, $aa1198, $aa1199, $aa1200, $aa1201, $aa1202, $aa1203, $aa1204, $aa1205, $aa1206, $aa1207, $aa1208, $aa1209, $aa1210, $aa1211, $aa1212, $aa1213, $aa1214, $aa1215, $aa1216, $aa1217, $aa1218, $aa1219, $aa1220, $aa1221, $aa1222, $aa1223, $aa1224, $aa1225, $aa1226, $aa1227, $aa1228, $aa1229, $aa1230, $aa1231, $aa1232, $aa1233, $aa1234, $aa1235, $aa1236, $aa1237, $aa1238, $aa1239, $aa1240, $aa1241, $aa1242, $aa1243, $aa1244, $aa1245, $aa1246, $aa1247, $aa1248, $aa1249, $aa1250, $aa1251, $aa1252, $aa1253, $aa1254, $aa1255, $aa1256, $aa1257, $aa1258, $aa1259, $aa1260, $aa1261, $aa1262, $aa1263, $aa1264, $aa1265, $aa1266, $aa1267, $aa1268, $aa1269, $aa1270, $aa1271, $aa1272, $aa1273, $aa1274, $aa1275, $aa1276, $aa1277, $aa1278, $aa1279, $aa1280, $aa1281, $aa1282, $aa1283, $aa1284, $aa1285, $aa1286, $aa1287, $aa1288, $aa1289, $aa1290, $aa1291, $aa1292, $aa1293, $aa1294, $aa1295, $aa1296, $aa1297, $aa1298, $aa1299, $aa1300, $aa1301, $aa1302, $aa1303, $aa1304, $aa1305, $aa1306, $aa1307, $aa1308, $aa1309, $aa1310, $aa1311, $aa1312, $aa1313, $aa1314, $aa1315, $aa1316, $aa1317, $aa1318, $aa1319, $aa1320, $aa1321, $aa1322, $aa1323, $aa1324, $aa1325, $aa1326, $aa1327, $aa1328, $aa1329, $aa1330, $aa1331, $aa1332, $aa1333, $aa1334, $aa1335, $aa1336, $aa1337, $aa1338, $aa1339, $aa1340, $aa1341, $aa1342, $aa1343, $aa1344, $aa1345, $aa1346, $aa1347, $aa1348, $aa1349, $aa1350, $aa1351, $aa1352, $aa1353, $aa1354, $aa1355, $aa1356, $aa1357, $aa1358, $aa1359, $aa1360, $aa1361, $aa1362, $aa1363, $aa1364, $aa1365, $aa1366, $aa1367, $aa1368, $aa1369, $aa1370, $aa1371, $aa1372, $aa1373, $aa1374, $aa1375, $aa1376, $aa1377, $aa1378, $aa1379, $aa1380, $aa1381, $aa1382, $aa1383, $aa1384, $aa1385, $aa1386, $aa1387, $aa1388, $aa1389, $aa1390, $aa1391, $aa1392, $aa1393, $aa1394, $aa1395, $aa1396, $aa1397, $aa1398, $aa1399, $aa1400, $aa1401, $aa1402, $aa1403, $aa1404, $aa1405, $aa1406, $aa1407, $aa1408, $aa1409, $aa1410, $aa1411, $aa1412, $aa1413, $aa1414, $aa1415, $aa1416, $aa1417, $aa1418, $aa1419, $aa1420, $aa1421, $aa1422, $aa1423, $aa1424, $aa1425, $aa1426, $aa1427, $aa1428, $aa1429, $aa1430, $aa1431, $aa1432, $aa1433, $aa1434, $aa1435, $aa1436, $aa1437, $aa1438, $aa1439, $aa1440, $aa1441, $aa1442, $aa1443, $aa1444, $aa1445, $aa1446, $aa1447, $aa1448, $aa1449, $aa1450, $aa1451, $aa1452, $aa1453, $aa1454, $aa1455, $aa1456, $aa1457, $aa1458, $aa1459, $aa1460, $aa1461, $aa1462, $aa1463, $aa1464, $aa1465, $aa1466, $aa1467, $aa1468, $aa1469, $aa1470, $aa1471, $aa1472, $aa1473, $aa1474, $aa1475, $aa1476, $aa1477, $aa1478, $aa1479, $aa1480, $aa1481, $aa1482, $aa1483, $aa1484, $aa1485, $aa1486, $aa1487, $aa1488, $aa1489, $aa1490, $aa1491, $aa1492, $aa1493, $aa1494, $aa1495, $aa1496, $aa1497, $aa1498, $aa1499, $aa1500, $aa1501, $aa1502, $aa1503, $aa1504, $aa1505, $aa1506, $aa1507, $aa1508, $aa1509, $aa1510, $aa1511, $aa1512, $aa1513, $aa1514, $aa1515, $aa1516, $aa1517, $aa1518, $aa1519, $aa1520, $aa1521, $aa1522, $aa1523, $aa1524, $aa1525, $aa1526, $aa1527, $aa1528, $aa1529, $aa1530, $aa1531, $aa1532, $aa1533, $aa1534, $aa1535, $aa1536, $aa1537, $aa1538, $aa1539, $aa1540, $aa1541, $aa1542, $aa1543, $aa1544, $aa1545, $aa1546, $aa1547, $aa1548, $aa1549, $aa1550, $aa1551, $aa1552, $aa1553, $aa1554, $aa1555, $aa1556, $aa1557, $aa1558, $aa1559, $aa1560, $aa1561, $aa1562, $aa1563, $aa1564, $aa1565, $aa1566, $aa1567, $aa1568, $aa1569, $aa1570, $aa1571, $aa1572, $aa1573, $aa1574, $aa1575, $aa1576, $aa1577, $aa1578, $aa1579, $aa1580, $aa1581, $aa1582, $aa1583, $aa1584, $aa1585, $aa1586, $aa1587, $aa1588, $aa1589, $aa1590, $aa1591, $aa1592, $aa1593, $aa1594, $aa1595, $aa1596, $aa1597, $aa1598, $aa1599, $aa1600, $aa1601, $aa1602, $aa1603, $aa1604, $aa1605, $aa1606, $aa1607, $aa1608, $aa1609, $aa1610, $aa1611, $aa1612, $aa1613, $aa1614, $aa1615, $aa1616, $aa1617, $aa1618, $aa1619, $aa1620, $aa1621, $aa1622, $aa1623, $aa1624, $aa1625, $aa1626, $aa1627, $aa1628, $aa1629, $aa1630, $aa1631, $aa1632, $aa1633, $aa1634, $aa1635, $aa1636, $aa1637, $aa1638, $aa1639, $aa1640, $aa1641, $aa1642, $aa1643, $aa1644, $aa1645, $aa1646, $aa1647, $aa1648, $aa1649, $aa1650, $aa1651, $aa1652, $aa1653, $aa1654, $aa1655, $aa1656, $aa1657, $aa1658, $aa1659, $aa1660, $aa1661, $aa1662, $aa1663, $aa1664, $aa1665, $aa1666, $aa1667, $aa1668, $aa1669, $aa1670, $aa1671, $aa1672, $aa1673, $aa1674, $aa1675, $aa1676, $aa1677, $aa1678, $aa1679, $aa1680, $aa1681, $aa1682, $aa1683, $aa1684, $aa1685, $aa1686, $aa1687, $aa1688, $aa1689, $aa1690, $aa1691, $aa1692, $aa1693, $aa1694, $aa1695, $aa1696, $aa1697, $aa1698, $aa1699, $aa1700, $aa1701, $aa1702, $aa1703, $aa1704, $aa1705, $aa1706, $aa1707, $aa1708, $aa1709, $aa1710, $aa1711, $aa1712, $aa1713, $aa1714, $aa1715, $aa1716, $aa1717, $aa1718, $aa1719, $aa1720, $aa1721, $aa1722, $aa1723, $aa1724, $aa1725, $aa1726, $aa1727, $aa1728, $aa1729, $aa1730, $aa1731, $aa1732, $aa1733, $aa1734, $aa1735, $aa1736, $aa1737, $aa1738, $aa1739, $aa1740, $aa1741, $aa1742, $aa1743, $aa1744, $aa1745, $aa1746, $aa1747, $aa1748, $aa1749, $aa1750, $aa1751, $aa1752, $aa1753, $aa1754, $aa1755, $aa1756, $aa1757, $aa1758, $aa1759, $aa1760, $aa1761, $aa1762, $aa1763, $aa1764, $aa1765, $aa1766, $aa1767, $aa1768, $aa1769, $aa1770, $aa1771, $aa1772, $aa1773, $aa1774, $aa1775, $aa1776, $aa1777, $aa1778, $aa1779, $aa1780, $aa1781, $aa1782, $aa1783, $aa1784, $aa1785, $aa1786, $aa1787, $aa1788, $aa1789, $aa1790, $aa1791, $aa1792, $aa1793, $aa1794, $aa1795, $aa1796, $aa1797, $aa1798, $aa1799, $aa1800, $aa1801, $aa1802, $aa1803, $aa1804, $aa1805, $aa1806, $aa1807, $aa1808, $aa1809, $aa1810, $aa1811, $aa1812, $aa1813, $aa1814, $aa1815, $aa1816, $aa1817, $aa1818, $aa1819, $aa1820, $aa1821, $aa1822, $aa1823, $aa1824, $aa1825, $aa1826, $aa1827, $aa1828, $aa1829, $aa1830, $aa1831, $aa1832, $aa1833, $aa1834, $aa1835, $aa1836, $aa1837, $aa1838, $aa1839, $aa1840, $aa1841, $aa1842, $aa1843, $aa1844, $aa1845, $aa1846, $aa1847, $aa1848, $aa1849, $aa1850, $aa1851, $aa1852, $aa1853, $aa1854, $aa1855, $aa1856, $aa1857, $aa1858, $aa1859, $aa1860, $aa1861, $aa1862, $aa1863, $aa1864, $aa1865, $aa1866, $aa1867, $aa1868, $aa1869, $aa1870, $aa1871, $aa1872, $aa1873, $aa1874, $aa1875, $aa1876, $aa1877, $aa1878, $aa1879, $aa1880, $aa1881, $aa1882, $aa1883, $aa1884, $aa1885, $aa1886, $aa1887, $aa1888, $aa1889, $aa1890, $aa1891, $aa1892, $aa1893, $aa1894, $aa1895, $aa1896, $aa1897, $aa1898, $aa1899, $aa1900, $aa1901, $aa1902, $aa1903, $aa1904, $aa1905, $aa1906, $aa1907, $aa1908, $aa1909, $aa1910, $aa1911, $aa1912, $aa1913, $aa1914, $aa1915, $aa1916, $aa1917, $aa1918, $aa1919, $aa1920, $aa1921, $aa1922, $aa1923, $aa1924, $aa1925, $aa1926, $aa1927, $aa1928, $aa1929, $aa1930, $aa1931, $aa1932, $aa1933, $aa1934, $aa1935, $aa1936, $aa1937, $aa1938, $aa1939, $aa1940, $aa1941, $aa1942, $aa1943, $aa1944, $aa1945, $aa1946, $aa1947, $aa1948, $aa1949, $aa1950, $aa1951, $aa1952, $aa1953, $aa1954, $aa1955, $aa1956, $aa1957, $aa1958, $aa1959, $aa1960, $aa1961, $aa1962, $aa1963, $aa1964, $aa1965, $aa1966, $aa1967, $aa1968, $aa1969, $aa1970, $aa1971, $aa1972, $aa1973, $aa1974, $aa1975, $aa1976, $aa1977, $aa1978, $aa1979, $aa1980, $aa1981, $aa1982, $aa1983, $aa1984, $aa1985, $aa1986, $aa1987, $aa1988, $aa1989, $aa1990, $aa1991, $aa1992, $aa1993, $aa1994, $aa1995, $aa1996, $aa1997, $aa1998, $aa1999, $aa2000, $aa2001, $aa2002, $aa2003, $aa2004, $aa2005, $aa2006, $aa2007, $aa2008, $aa2009, $aa2010, $aa2011, $aa2012, $aa2013, $aa2014, $aa2015, $aa2016, $aa2017, $aa2018, $aa2019, $aa2020, $aa2021, $aa2022, $aa2023, $aa2024, $aa2025, $aa2026, $aa2027, $aa2028, $aa2029, $aa2030, $aa2031, $aa2032, $aa2033, $aa2034, $aa2035, $aa2036, $aa2037, $aa2038, $aa2039, $aa2040, $aa2041, $aa2042, $aa2043, $aa2044, $aa2045, $aa2046, $aa2047, $aa2048, $aa2049, $aa2050, $aa2051, $aa2052, $aa2053, $aa2054, $aa2055, $aa2056, $aa2057, $aa2058, $aa2059, $aa2060, $aa2061, $aa2062, $aa2063, $aa2064, $aa2065, $aa2066, $aa2067, $aa2068, $aa2069, $aa2070, $aa2071, $aa2072, $aa2073, $aa2074, $aa2075, $aa2076, $aa2077, $aa2078, $aa2079, $aa2080, $aa2081, $aa2082, $aa2083, $aa2084, $aa2085, $aa2086, $aa2087, $aa2088, $aa2089, $aa2090, $aa2091, $aa2092, $aa2093, $aa2094, $aa2095, $aa2096, $aa2097, $aa2098, $aa2099, $aa2100, $aa2101, $aa2102, $aa2103, $aa2104, $aa2105, $aa2106, $aa2107, $aa2108, $aa2109, $aa2110, $aa2111, $aa2112, $aa2113, $aa2114, $aa2115, $aa2116, $aa2117, $aa2118, $aa2119, $aa2120, $aa2121, $aa2122, $aa2123, $aa2124, $aa2125, $aa2126, $aa2127, $aa2128, $aa2129, $aa2130, $aa2131, $aa2132, $aa2133, $aa2134, $aa2135, $aa2136, $aa2137, $aa2138, $aa2139, $aa2140, $aa2141, $aa2142, $aa2143, $aa2144, $aa2145, $aa2146, $aa2147, $aa2148, $aa2149, $aa2150, $aa2151, $aa2152, $aa2153, $aa2154, $aa2155, $aa2156, $aa2157, $aa2158, $aa2159, $aa2160, $aa2161, $aa2162, $aa2163, $aa2164, $aa2165, $aa2166, $aa2167, $aa2168, $aa2169, $aa2170, $aa2171, $aa2172, $aa2173, $aa2174, $aa2175, $aa2176, $aa2177, $aa2178, $aa2179, $aa2180, $aa2181, $aa2182, $aa2183, $aa2184, $aa2185, $aa2186, $aa2187, $aa2188, $aa2189, $aa2190, $aa2191, $aa2192, $aa2193, $aa2194, $aa2195, $aa2196, $aa2197, $aa2198, $aa2199, $aa2200, $aa2201, $aa2202, $aa2203, $aa2204, $aa2205, $aa2206, $aa2207, $aa2208, $aa2209, $aa2210, $aa2211, $aa2212, $aa2213, $aa2214, $aa2215, $aa2216, $aa2217, $aa2218, $aa2219, $aa2220, $aa2221, $aa2222, $aa2223, $aa2224, $aa2225, $aa2226, $aa2227, $aa2228, $aa2229, $aa2230, $aa2231, $aa2232, $aa2233, $aa2234, $aa2235, $aa2236, $aa2237, $aa2238, $aa2239, $aa2240, $aa2241, $aa2242, $aa2243, $aa2244, $aa2245, $aa2246, $aa2247, $aa2248, $aa2249, $aa2250, $aa2251, $aa2252, $aa2253, $aa2254, $aa2255, $aa2256, $aa2257, $aa2258, $aa2259, $aa2260, $aa2261, $aa2262, $aa2263, $aa2264, $aa2265, $aa2266, $aa2267, $aa2268, $aa2269, $aa2270, $aa2271, $aa2272, $aa2273, $aa2274, $aa2275, $aa2276, $aa2277, $aa2278, $aa2279, $aa2280, $aa2281, $aa2282, $aa2283, $aa2284, $aa2285, $aa2286, $aa2287, $aa2288, $aa2289, $aa2290, $aa2291, $aa2292, $aa2293, $aa2294, $aa2295, $aa2296, $aa2297, $aa2298, $aa2299, $aa2300, $aa2301, $aa2302, $aa2303, $aa2304, $aa2305, $aa2306, $aa2307, $aa2308, $aa2309, $aa2310, $aa2311, $aa2312, $aa2313, $aa2314, $aa2315, $aa2316, $aa2317, $aa2318, $aa2319, $aa2320, $aa2321, $aa2322, $aa2323, $aa2324, $aa2325, $aa2326, $aa2327, $aa2328, $aa2329, $aa2330, $aa2331, $aa2332, $aa2333, $aa2334, $aa2335, $aa2336, $aa2337, $aa2338, $aa2339, $aa2340, $aa2341, $aa2342, $aa2343, $aa2344, $aa2345, $aa2346, $aa2347, $aa2348, $aa2349, $aa2350, $aa2351, $aa2352, $aa2353, $aa2354, $aa2355, $aa2356, $aa2357, $aa2358, $aa2359, $aa2360, $aa2361, $aa2362, $aa2363, $aa2364, $aa2365, $aa2366, $aa2367, $aa2368, $aa2369, $aa2370, $aa2371, $aa2372, $aa2373, $aa2374, $aa2375, $aa2376, $aa2377, $aa2378, $aa2379, $aa2380, $aa2381, $aa2382, $aa2383, $aa2384, $aa2385, $aa2386, $aa2387, $aa2388, $aa2389, $aa2390, $aa2391, $aa2392, $aa2393, $aa2394, $aa2395, $aa2396, $aa2397, $aa2398, $aa2399, $aa2400, $aa2401, $aa2402, $aa2403, $aa2404, $aa2405, $aa2406, $aa2407, $aa2408, $aa2409, $aa2410, $aa2411, $aa2412, $aa2413, $aa2414, $aa2415, $aa2416, $aa2417, $aa2418, $aa2419, $aa2420, $aa2421, $aa2422, $aa2423, $aa2424, $aa2425, $aa2426, $aa2427, $aa2428, $aa2429, $aa2430, $aa2431, $aa2432, $aa2433, $aa2434, $aa2435, $aa2436, $aa2437, $aa2438, $aa2439, $aa2440, $aa2441, $aa2442, $aa2443, $aa2444, $aa2445, $aa2446, $aa2447, $aa2448, $aa2449, $aa2450, $aa2451, $aa2452, $aa2453, $aa2454, $aa2455, $aa2456, $aa2457, $aa2458, $aa2459, $aa2460, $aa2461, $aa2462, $aa2463, $aa2464, $aa2465, $aa2466, $aa2467, $aa2468, $aa2469, $aa2470, $aa2471, $aa2472, $aa2473, $aa2474, $aa2475, $aa2476, $aa2477, $aa2478, $aa2479, $aa2480, $aa2481, $aa2482, $aa2483, $aa2484, $aa2485, $aa2486, $aa2487, $aa2488, $aa2489, $aa2490, $aa2491, $aa2492, $aa2493, $aa2494, $aa2495, $aa2496, $aa2497, $aa2498, $aa2499, $aa2500, $aa2501, $aa2502, $aa2503, $aa2504, $aa2505, $aa2506, $aa2507, $aa2508, $aa2509, $aa2510, $aa2511, $aa2512, $aa2513, $aa2514, $aa2515, $aa2516, $aa2517, $aa2518, $aa2519, $aa2520, $aa2521, $aa2522, $aa2523, $aa2524, $aa2525, $aa2526, $aa2527, $aa2528, $aa2529, $aa2530, $aa2531, $aa2532, $aa2533, $aa2534, $aa2535, $aa2536, $aa2537, $aa2538, $aa2539, $aa2540, $aa2541, $aa2542, $aa2543, $aa2544, $aa2545, $aa2546, $aa2547, $aa2548, $aa2549, $aa2550, $aa2551, $aa2552, $aa2553, $aa2554, $aa2555, $aa2556, $aa2557, $aa2558, $aa2559, $aa2560, $aa2561, $aa2562, $aa2563, $aa2564, $aa2565, $aa2566, $aa2567, $aa2568, $aa2569, $aa2570, $aa2571, $aa2572, $aa2573, $aa2574, $aa2575, $aa2576, $aa2577, $aa2578, $aa2579, $aa2580, $aa2581, $aa2582, $aa2583, $aa2584, $aa2585, $aa2586, $aa2587, $aa2588, $aa2589, $aa2590, $aa2591, $aa2592, $aa2593, $aa2594, $aa2595, $aa2596, $aa2597, $aa2598, $aa2599, $aa2600, $aa2601, $aa2602, $aa2603, $aa2604, $aa2605, $aa2606, $aa2607, $aa2608, $aa2609, $aa2610, $aa2611, $aa2612, $aa2613, $aa2614, $aa2615, $aa2616, $aa2617, $aa2618, $aa2619, $aa2620, $aa2621, $aa2622, $aa2623, $aa2624, $aa2625, $aa2626, $aa2627, $aa2628, $aa2629, $aa2630, $aa2631, $aa2632, $aa2633, $aa2634, $aa2635, $aa2636, $aa2637, $aa2638, $aa2639, $aa2640, $aa2641, $aa2642, $aa2643, $aa2644, $aa2645, $aa2646, $aa2647, $aa2648, $aa2649, $aa2650, $aa2651, $aa2652, $aa2653, $aa2654, $aa2655, $aa2656, $aa2657, $aa2658, $aa2659, $aa2660, $aa2661, $aa2662, $aa2663, $aa2664, $aa2665, $aa2666, $aa2667, $aa2668, $aa2669, $aa2670, $aa2671, $aa2672, $aa2673, $aa2674, $aa2675, $aa2676, $aa2677, $aa2678, $aa2679, $aa2680, $aa2681, $aa2682, $aa2683, $aa2684, $aa2685, $aa2686, $aa2687, $aa2688, $aa2689, $aa2690, $aa2691, $aa2692, $aa2693, $aa2694, $aa2695, $aa2696, $aa2697, $aa2698, $aa2699, $aa2700, $aa2701, $aa2702, $aa2703, $aa2704, $aa2705, $aa2706, $aa2707, $aa2708, $aa2709, $aa2710, $aa2711, $aa2712, $aa2713, $aa2714, $aa2715, $aa2716, $aa2717, $aa2718, $aa2719, $aa2720, $aa2721, $aa2722, $aa2723, $aa2724, $aa2725, $aa2726, $aa2727, $aa2728, $aa2729, $aa2730, $aa2731, $aa2732, $aa2733, $aa2734, $aa2735, $aa2736, $aa2737, $aa2738, $aa2739, $aa2740, $aa2741, $aa2742, $aa2743, $aa2744, $aa2745, $aa2746, $aa2747, $aa2748, $aa2749, $aa2750, $aa2751, $aa2752, $aa2753, $aa2754, $aa2755, $aa2756, $aa2757, $aa2758, $aa2759, $aa2760, $aa2761, $aa2762, $aa2763, $aa2764, $aa2765, $aa2766, $aa2767, $aa2768, $aa2769, $aa2770, $aa2771, $aa2772, $aa2773, $aa2774, $aa2775, $aa2776, $aa2777, $aa2778, $aa2779, $aa2780, $aa2781, $aa2782, $aa2783, $aa2784, $aa2785, $aa2786, $aa2787, $aa2788, $aa2789, $aa2790, $aa2791, $aa2792, $aa2793, $aa2794, $aa2795, $aa2796, $aa2797, $aa2798, $aa2799, $aa2800, $aa2801, $aa2802, $aa2803, $aa2804, $aa2805, $aa2806, $aa2807, $aa2808, $aa2809, $aa2810, $aa2811, $aa2812, $aa2813, $aa2814, $aa2815, $aa2816, $aa2817, $aa2818, $aa2819, $aa2820, $aa2821, $aa2822, $aa2823, $aa2824, $aa2825, $aa2826, $aa2827, $aa2828, $aa2829, $aa2830, $aa2831, $aa2832, $aa2833, $aa2834, $aa2835, $aa2836, $aa2837, $aa2838, $aa2839, $aa2840, $aa2841, $aa2842, $aa2843, $aa2844, $aa2845, $aa2846, $aa2847, $aa2848, $aa2849, $aa2850, $aa2851, $aa2852, $aa2853, $aa2854, $aa2855, $aa2856, $aa2857, $aa2858, $aa2859, $aa2860, $aa2861, $aa2862, $aa2863, $aa2864, $aa2865, $aa2866, $aa2867, $aa2868, $aa2869, $aa2870, $aa2871, $aa2872, $aa2873, $aa2874, $aa2875, $aa2876, $aa2877, $aa2878, $aa2879, $aa2880, $aa2881, $aa2882, $aa2883, $aa2884, $aa2885, $aa2886, $aa2887, $aa2888, $aa2889, $aa2890, $aa2891, $aa2892, $aa2893, $aa2894, $aa2895, $aa2896, $aa2897, $aa2898, $aa2899, $aa2900, $aa2901, $aa2902, $aa2903, $aa2904, $aa2905, $aa2906, $aa2907, $aa2908, $aa2909, $aa2910, $aa2911, $aa2912, $aa2913, $aa2914, $aa2915, $aa2916, $aa2917, $aa2918, $aa2919, $aa2920, $aa2921, $aa2922, $aa2923, $aa2924, $aa2925, $aa2926, $aa2927, $aa2928, $aa2929, $aa2930, $aa2931, $aa2932, $aa2933, $aa2934, $aa2935, $aa2936, $aa2937, $aa2938, $aa2939, $aa2940, $aa2941, $aa2942, $aa2943, $aa2944, $aa2945, $aa2946, $aa2947, $aa2948, $aa2949, $aa2950, $aa2951, $aa2952, $aa2953, $aa2954, $aa2955, $aa2956, $aa2957, $aa2958, $aa2959, $aa2960, $aa2961, $aa2962, $aa2963, $aa2964, $aa2965, $aa2966, $aa2967, $aa2968, $aa2969, $aa2970, $aa2971, $aa2972, $aa2973, $aa2974, $aa2975, $aa2976, $aa2977, $aa2978, $aa2979, $aa2980, $aa2981, $aa2982, $aa2983, $aa2984, $aa2985, $aa2986, $aa2987, $aa2988, $aa2989, $aa2990, $aa2991, $aa2992, $aa2993, $aa2994, $aa2995, $aa2996, $aa2997, $aa2998, $aa2999, $aa3000, $aa3001, $aa3002, $aa3003, $aa3004, $aa3005, $aa3006, $aa3007, $aa3008, $aa3009, $aa3010, $aa3011, $aa3012, $aa3013, $aa3014, $aa3015, $aa3016, $aa3017, $aa3018, $aa3019, $aa3020, $aa3021, $aa3022, $aa3023, $aa3024, $aa3025, $aa3026, $aa3027, $aa3028, $aa3029, $aa3030, $aa3031, $aa3032, $aa3033, $aa3034, $aa3035, $aa3036, $aa3037, $aa3038, $aa3039, $aa3040, $aa3041, $aa3042, $aa3043, $aa3044, $aa3045, $aa3046, $aa3047, $aa3048, $aa3049, $aa3050, $aa3051, $aa3052, $aa3053, $aa3054, $aa3055, $aa3056, $aa3057, $aa3058, $aa3059, $aa3060, $aa3061, $aa3062, $aa3063, $aa3064, $aa3065, $aa3066, $aa3067, $aa3068, $aa3069, $aa3070, $aa3071, $aa3072, $aa3073, $aa3074, $aa3075, $aa3076, $aa3077, $aa3078, $aa3079, $aa3080, $aa3081, $aa3082, $aa3083, $aa3084, $aa3085, $aa3086, $aa3087, $aa3088, $aa3089, $aa3090, $aa3091, $aa3092, $aa3093, $aa3094, $aa3095, $aa3096, $aa3097, $aa3098, $aa3099, $aa3100, $aa3101, $aa3102, $aa3103, $aa3104, $aa3105, $aa3106, $aa3107, $aa3108, $aa3109, $aa3110, $aa3111, $aa3112, $aa3113, $aa3114, $aa3115, $aa3116, $aa3117, $aa3118, $aa3119, $aa3120, $aa3121, $aa3122, $aa3123, $aa3124, $aa3125, $aa3126, $aa3127, $aa3128, $aa3129, $aa3130, $aa3131, $aa3132, $aa3133, $aa3134, $aa3135, $aa3136, $aa3137, $aa3138, $aa3139, $aa3140, $aa3141, $aa3142, $aa3143, $aa3144, $aa3145, $aa3146, $aa3147, $aa3148, $aa3149, $aa3150, $aa3151, $aa3152, $aa3153, $aa3154, $aa3155, $aa3156, $aa3157, $aa3158, $aa3159, $aa3160, $aa3161, $aa3162, $aa3163, $aa3164, $aa3165, $aa3166, $aa3167, $aa3168, $aa3169, $aa3170, $aa3171, $aa3172, $aa3173, $aa3174, $aa3175, $aa3176, $aa3177, $aa3178, $aa3179, $aa3180, $aa3181, $aa3182, $aa3183, $aa3184, $aa3185, $aa3186, $aa3187, $aa3188, $aa3189, $aa3190, $aa3191, $aa3192, $aa3193, $aa3194, $aa3195, $aa3196, $aa3197, $aa3198, $aa3199, $aa3200, $aa3201, $aa3202, $aa3203, $aa3204, $aa3205, $aa3206, $aa3207, $aa3208, $aa3209, $aa3210, $aa3211, $aa3212, $aa3213, $aa3214, $aa3215, $aa3216, $aa3217, $aa3218, $aa3219, $aa3220, $aa3221, $aa3222, $aa3223, $aa3224, $aa3225, $aa3226, $aa3227, $aa3228, $aa3229, $aa3230, $aa3231, $aa3232, $aa3233, $aa3234, $aa3235, $aa3236, $aa3237, $aa3238, $aa3239, $aa3240, $aa3241, $aa3242, $aa3243, $aa3244, $aa3245, $aa3246, $aa3247, $aa3248, $aa3249, $aa3250, $aa3251, $aa3252, $aa3253, $aa3254, $aa3255, $aa3256, $aa3257, $aa3258, $aa3259, $aa3260, $aa3261, $aa3262, $aa3263, $aa3264, $aa3265, $aa3266, $aa3267, $aa3268, $aa3269, $aa3270, $aa3271, $aa3272, $aa3273, $aa3274, $aa3275, $aa3276, $aa3277, $aa3278, $aa3279, $aa3280, $aa3281, $aa3282, $aa3283, $aa3284, $aa3285, $aa3286, $aa3287, $aa3288, $aa3289, $aa3290, $aa3291, $aa3292, $aa3293, $aa3294, $aa3295, $aa3296, $aa3297, $aa3298, $aa3299, $aa3300, $aa3301, $aa3302, $aa3303, $aa3304, $aa3305, $aa3306, $aa3307, $aa3308, $aa3309, $aa3310, $aa3311, $aa3312, $aa3313, $aa3314, $aa3315, $aa3316, $aa3317, $aa3318, $aa3319, $aa3320, $aa3321, $aa3322, $aa3323, $aa3324, $aa3325, $aa3326, $aa3327, $aa3328, $aa3329, $aa3330, $aa3331, $aa3332, $aa3333, $aa3334, $aa3335, $aa3336, $aa3337, $aa3338, $aa3339, $aa3340, $aa3341, $aa3342, $aa3343, $aa3344, $aa3345, $aa3346, $aa3347, $aa3348, $aa3349, $aa3350, $aa3351, $aa3352, $aa3353, $aa3354, $aa3355, $aa3356, $aa3357, $aa3358, $aa3359, $aa3360, $aa3361, $aa3362, $aa3363, $aa3364, $aa3365, $aa3366, $aa3367, $aa3368, $aa3369, $aa3370, $aa3371, $aa3372, $aa3373, $aa3374, $aa3375, $aa3376, $aa3377, $aa3378, $aa3379, $aa3380, $aa3381, $aa3382, $aa3383, $aa3384, $aa3385, $aa3386, $aa3387, $aa3388, $aa3389, $aa3390, $aa3391, $aa3392, $aa3393, $aa3394, $aa3395, $aa3396, $aa3397, $aa3398, $aa3399, $aa3400, $aa3401, $aa3402, $aa3403, $aa3404, $aa3405, $aa3406, $aa3407, $aa3408, $aa3409, $aa3410, $aa3411, $aa3412, $aa3413, $aa3414, $aa3415, $aa3416, $aa3417, $aa3418, $aa3419, $aa3420, $aa3421, $aa3422, $aa3423, $aa3424, $aa3425, $aa3426, $aa3427, $aa3428, $aa3429, $aa3430, $aa3431, $aa3432, $aa3433, $aa3434, $aa3435, $aa3436, $aa3437, $aa3438, $aa3439, $aa3440, $aa3441, $aa3442, $aa3443, $aa3444, $aa3445, $aa3446, $aa3447, $aa3448, $aa3449, $aa3450, $aa3451, $aa3452, $aa3453, $aa3454, $aa3455, $aa3456, $aa3457, $aa3458, $aa3459, $aa3460, $aa3461, $aa3462, $aa3463, $aa3464, $aa3465, $aa3466, $aa3467, $aa3468, $aa3469, $aa3470, $aa3471, $aa3472, $aa3473, $aa3474, $aa3475, $aa3476, $aa3477, $aa3478, $aa3479, $aa3480, $aa3481, $aa3482, $aa3483, $aa3484, $aa3485, $aa3486, $aa3487, $aa3488, $aa3489, $aa3490, $aa3491, $aa3492, $aa3493, $aa3494, $aa3495, $aa3496, $aa3497, $aa3498, $aa3499, $aa3500, $aa3501, $aa3502, $aa3503, $aa3504, $aa3505, $aa3506, $aa3507, $aa3508, $aa3509, $aa3510, $aa3511, $aa3512, $aa3513, $aa3514, $aa3515, $aa3516, $aa3517, $aa3518, $aa3519, $aa3520, $aa3521, $aa3522, $aa3523, $aa3524, $aa3525, $aa3526, $aa3527, $aa3528, $aa3529, $aa3530, $aa3531, $aa3532, $aa3533, $aa3534, $aa3535, $aa3536, $aa3537, $aa3538, $aa3539, $aa3540, $aa3541, $aa3542, $aa3543, $aa3544, $aa3545, $aa3546, $aa3547, $aa3548, $aa3549, $aa3550, $aa3551, $aa3552, $aa3553, $aa3554, $aa3555, $aa3556, $aa3557, $aa3558, $aa3559, $aa3560, $aa3561, $aa3562, $aa3563, $aa3564, $aa3565, $aa3566, $aa3567, $aa3568, $aa3569, $aa3570, $aa3571, $aa3572, $aa3573, $aa3574, $aa3575, $aa3576, $aa3577, $aa3578, $aa3579, $aa3580, $aa3581, $aa3582, $aa3583, $aa3584, $aa3585, $aa3586, $aa3587, $aa3588, $aa3589, $aa3590, $aa3591, $aa3592, $aa3593, $aa3594, $aa3595, $aa3596, $aa3597, $aa3598, $aa3599, $aa3600, $aa3601, $aa3602, $aa3603, $aa3604, $aa3605, $aa3606, $aa3607, $aa3608, $aa3609, $aa3610, $aa3611, $aa3612, $aa3613, $aa3614, $aa3615, $aa3616, $aa3617, $aa3618, $aa3619, $aa3620, $aa3621, $aa3622, $aa3623, $aa3624, $aa3625, $aa3626, $aa3627, $aa3628, $aa3629, $aa3630, $aa3631, $aa3632, $aa3633, $aa3634, $aa3635, $aa3636, $aa3637, $aa3638, $aa3639, $aa3640, $aa3641, $aa3642, $aa3643, $aa3644, $aa3645, $aa3646, $aa3647, $aa3648, $aa3649, $aa3650, $aa3651, $aa3652, $aa3653, $aa3654, $aa3655, $aa3656, $aa3657, $aa3658, $aa3659, $aa3660, $aa3661, $aa3662, $aa3663, $aa3664, $aa3665, $aa3666, $aa3667, $aa3668, $aa3669, $aa3670, $aa3671, $aa3672, $aa3673, $aa3674, $aa3675, $aa3676, $aa3677, $aa3678, $aa3679, $aa3680, $aa3681, $aa3682, $aa3683, $aa3684, $aa3685, $aa3686, $aa3687, $aa3688, $aa3689, $aa3690, $aa3691, $aa3692, $aa3693, $aa3694, $aa3695, $aa3696, $aa3697, $aa3698, $aa3699, $aa3700, $aa3701, $aa3702, $aa3703, $aa3704, $aa3705, $aa3706, $aa3707, $aa3708, $aa3709, $aa3710, $aa3711, $aa3712, $aa3713, $aa3714, $aa3715, $aa3716, $aa3717, $aa3718, $aa3719, $aa3720, $aa3721, $aa3722, $aa3723, $aa3724, $aa3725, $aa3726, $aa3727, $aa3728, $aa3729, $aa3730, $aa3731, $aa3732, $aa3733, $aa3734, $aa3735, $aa3736, $aa3737, $aa3738, $aa3739, $aa3740, $aa3741, $aa3742, $aa3743, $aa3744, $aa3745, $aa3746, $aa3747, $aa3748, $aa3749, $aa3750, $aa3751, $aa3752, $aa3753, $aa3754, $aa3755, $aa3756, $aa3757, $aa3758, $aa3759, $aa3760, $aa3761, $aa3762, $aa3763, $aa3764, $aa3765, $aa3766, $aa3767, $aa3768, $aa3769, $aa3770, $aa3771, $aa3772, $aa3773, $aa3774, $aa3775, $aa3776, $aa3777, $aa3778, $aa3779, $aa3780, $aa3781, $aa3782, $aa3783, $aa3784, $aa3785, $aa3786, $aa3787, $aa3788, $aa3789, $aa3790, $aa3791, $aa3792, $aa3793, $aa3794, $aa3795, $aa3796, $aa3797, $aa3798, $aa3799, $aa3800, $aa3801, $aa3802, $aa3803, $aa3804, $aa3805, $aa3806, $aa3807, $aa3808, $aa3809, $aa3810, $aa3811, $aa3812, $aa3813, $aa3814, $aa3815, $aa3816, $aa3817, $aa3818, $aa3819, $aa3820, $aa3821, $aa3822, $aa3823, $aa3824, $aa3825, $aa3826, $aa3827, $aa3828, $aa3829, $aa3830, $aa3831, $aa3832, $aa3833, $aa3834, $aa3835, $aa3836, $aa3837, $aa3838, $aa3839, $aa3840, $aa3841, $aa3842, $aa3843, $aa3844, $aa3845, $aa3846, $aa3847, $aa3848, $aa3849, $aa3850, $aa3851, $aa3852, $aa3853, $aa3854, $aa3855, $aa3856, $aa3857, $aa3858, $aa3859, $aa3860, $aa3861, $aa3862, $aa3863, $aa3864, $aa3865, $aa3866, $aa3867, $aa3868, $aa3869, $aa3870, $aa3871, $aa3872, $aa3873, $aa3874, $aa3875, $aa3876, $aa3877, $aa3878, $aa3879, $aa3880, $aa3881, $aa3882, $aa3883, $aa3884, $aa3885, $aa3886, $aa3887, $aa3888, $aa3889, $aa3890, $aa3891, $aa3892, $aa3893, $aa3894, $aa3895, $aa3896, $aa3897, $aa3898, $aa3899, $aa3900, $aa3901, $aa3902, $aa3903, $aa3904, $aa3905, $aa3906, $aa3907, $aa3908, $aa3909, $aa3910, $aa3911, $aa3912, $aa3913, $aa3914, $aa3915, $aa3916, $aa3917, $aa3918, $aa3919, $aa3920, $aa3921, $aa3922, $aa3923, $aa3924, $aa3925, $aa3926, $aa3927, $aa3928, $aa3929, $aa3930, $aa3931, $aa3932, $aa3933, $aa3934, $aa3935, $aa3936, $aa3937, $aa3938, $aa3939, $aa3940, $aa3941, $aa3942, $aa3943, $aa3944, $aa3945, $aa3946, $aa3947, $aa3948, $aa3949, $aa3950, $aa3951, $aa3952, $aa3953, $aa3954, $aa3955, $aa3956, $aa3957, $aa3958, $aa3959, $aa3960, $aa3961, $aa3962, $aa3963, $aa3964, $aa3965, $aa3966, $aa3967, $aa3968, $aa3969, $aa3970, $aa3971, $aa3972, $aa3973, $aa3974, $aa3975, $aa3976, $aa3977, $aa3978, $aa3979, $aa3980, $aa3981, $aa3982, $aa3983, $aa3984, $aa3985, $aa3986, $aa3987, $aa3988, $aa3989, $aa3990, $aa3991, $aa3992, $aa3993, $aa3994, $aa3995, $aa3996, $aa3997, $aa3998, $aa3999, $aa4000, $aa4001, $aa4002, $aa4003, $aa4004, $aa4005, $aa4006, $aa4007, $aa4008, $aa4009, $aa4010, $aa4011, $aa4012, $aa4013, $aa4014, $aa4015, $aa4016, $aa4017, $aa4018, $aa4019, $aa4020, $aa4021, $aa4022, $aa4023, $aa4024, $aa4025, $aa4026, $aa4027, $aa4028, $aa4029, $aa4030, $aa4031, $aa4032, $aa4033, $aa4034, $aa4035, $aa4036, $aa4037, $aa4038, $aa4039, $aa4040, $aa4041, $aa4042, $aa4043, $aa4044, $aa4045, $aa4046, $aa4047, $aa4048, $aa4049, $aa4050, $aa4051, $aa4052, $aa4053, $aa4054, $aa4055, $aa4056, $aa4057, $aa4058, $aa4059, $aa4060, $aa4061, $aa4062, $aa4063, $aa4064, $aa4065, $aa4066, $aa4067, $aa4068, $aa4069, $aa4070, $aa4071, $aa4072, $aa4073, $aa4074, $aa4075, $aa4076, $aa4077, $aa4078, $aa4079, $aa4080, $aa4081, $aa4082, $aa4083, $aa4084, $aa4085, $aa4086, $aa4087, $aa4088, $aa4089, $aa4090, $aa4091, $aa4092, $aa4093, $aa4094, $aa4095, $aa4096, $aa4097, $aa4098, $aa4099, $aa4100, $aa4101, $aa4102, $aa4103, $aa4104, $aa4105, $aa4106, $aa4107, $aa4108, $aa4109, $aa4110, $aa4111, $aa4112, $aa4113, $aa4114, $aa4115, $aa4116, $aa4117, $aa4118, $aa4119, $aa4120, $aa4121, $aa4122, $aa4123, $aa4124, $aa4125, $aa4126, $aa4127, $aa4128, $aa4129, $aa4130, $aa4131, $aa4132, $aa4133, $aa4134, $aa4135, $aa4136, $aa4137, $aa4138, $aa4139, $aa4140, $aa4141, $aa4142, $aa4143, $aa4144, $aa4145, $aa4146, $aa4147, $aa4148, $aa4149, $aa4150, $aa4151, $aa4152, $aa4153, $aa4154, $aa4155, $aa4156, $aa4157, $aa4158, $aa4159, $aa4160, $aa4161, $aa4162, $aa4163, $aa4164, $aa4165, $aa4166, $aa4167, $aa4168, $aa4169, $aa4170, $aa4171, $aa4172, $aa4173, $aa4174, $aa4175, $aa4176, $aa4177, $aa4178, $aa4179, $aa4180, $aa4181, $aa4182, $aa4183, $aa4184, $aa4185, $aa4186, $aa4187, $aa4188, $aa4189, $aa4190, $aa4191, $aa4192, $aa4193, $aa4194, $aa4195, $aa4196, $aa4197, $aa4198, $aa4199, $aa4200, $aa4201, $aa4202, $aa4203, $aa4204, $aa4205, $aa4206, $aa4207, $aa4208, $aa4209, $aa4210, $aa4211, $aa4212, $aa4213, $aa4214, $aa4215, $aa4216, $aa4217, $aa4218, $aa4219, $aa4220, $aa4221, $aa4222, $aa4223, $aa4224, $aa4225, $aa4226, $aa4227, $aa4228, $aa4229, $aa4230, $aa4231, $aa4232, $aa4233, $aa4234, $aa4235, $aa4236, $aa4237, $aa4238, $aa4239, $aa4240, $aa4241, $aa4242, $aa4243, $aa4244, $aa4245, $aa4246, $aa4247, $aa4248, $aa4249, $aa4250, $aa4251, $aa4252, $aa4253, $aa4254, $aa4255, $aa4256, $aa4257, $aa4258, $aa4259, $aa4260, $aa4261, $aa4262, $aa4263, $aa4264, $aa4265, $aa4266, $aa4267, $aa4268, $aa4269, $aa4270, $aa4271, $aa4272, $aa4273, $aa4274, $aa4275, $aa4276, $aa4277, $aa4278, $aa4279, $aa4280, $aa4281, $aa4282, $aa4283, $aa4284, $aa4285, $aa4286, $aa4287, $aa4288, $aa4289, $aa4290, $aa4291, $aa4292, $aa4293, $aa4294, $aa4295, $aa4296, $aa4297, $aa4298, $aa4299, $aa4300, $aa4301, $aa4302, $aa4303, $aa4304, $aa4305, $aa4306, $aa4307, $aa4308, $aa4309, $aa4310, $aa4311, $aa4312, $aa4313, $aa4314, $aa4315, $aa4316, $aa4317, $aa4318, $aa4319, $aa4320, $aa4321, $aa4322, $aa4323, $aa4324, $aa4325, $aa4326, $aa4327, $aa4328, $aa4329, $aa4330, $aa4331, $aa4332, $aa4333, $aa4334, $aa4335, $aa4336, $aa4337, $aa4338, $aa4339, $aa4340, $aa4341, $aa4342, $aa4343, $aa4344, $aa4345, $aa4346, $aa4347, $aa4348, $aa4349, $aa4350, $aa4351, $aa4352, $aa4353, $aa4354, $aa4355, $aa4356, $aa4357, $aa4358, $aa4359, $aa4360, $aa4361, $aa4362, $aa4363, $aa4364, $aa4365, $aa4366, $aa4367, $aa4368, $aa4369, $aa4370, $aa4371, $aa4372, $aa4373, $aa4374, $aa4375, $aa4376, $aa4377, $aa4378, $aa4379, $aa4380, $aa4381, $aa4382, $aa4383, $aa4384, $aa4385, $aa4386, $aa4387, $aa4388, $aa4389, $aa4390, $aa4391, $aa4392, $aa4393, $aa4394, $aa4395, $aa4396, $aa4397, $aa4398, $aa4399, $aa4400, $aa4401, $aa4402, $aa4403, $aa4404, $aa4405, $aa4406, $aa4407, $aa4408, $aa4409, $aa4410, $aa4411, $aa4412, $aa4413, $aa4414, $aa4415, $aa4416, $aa4417, $aa4418, $aa4419, $aa4420, $aa4421, $aa4422, $aa4423, $aa4424, $aa4425, $aa4426, $aa4427, $aa4428, $aa4429, $aa4430, $aa4431, $aa4432, $aa4433, $aa4434, $aa4435, $aa4436, $aa4437, $aa4438, $aa4439, $aa4440, $aa4441, $aa4442, $aa4443, $aa4444, $aa4445, $aa4446, $aa4447, $aa4448, $aa4449, $aa4450, $aa4451, $aa4452, $aa4453, $aa4454, $aa4455, $aa4456, $aa4457, $aa4458, $aa4459, $aa4460, $aa4461, $aa4462, $aa4463, $aa4464, $aa4465, $aa4466, $aa4467, $aa4468, $aa4469, $aa4470, $aa4471, $aa4472, $aa4473, $aa4474, $aa4475, $aa4476, $aa4477, $aa4478, $aa4479, $aa4480, $aa4481, $aa4482, $aa4483, $aa4484, $aa4485, $aa4486, $aa4487, $aa4488, $aa4489, $aa4490, $aa4491, $aa4492, $aa4493, $aa4494, $aa4495, $aa4496, $aa4497, $aa4498, $aa4499, $aa4500, $aa4501, $aa4502, $aa4503, $aa4504, $aa4505, $aa4506, $aa4507, $aa4508, $aa4509, $aa4510, $aa4511, $aa4512, $aa4513, $aa4514, $aa4515, $aa4516, $aa4517, $aa4518, $aa4519, $aa4520, $aa4521, $aa4522, $aa4523, $aa4524, $aa4525, $aa4526, $aa4527, $aa4528, $aa4529, $aa4530, $aa4531, $aa4532, $aa4533, $aa4534, $aa4535, $aa4536, $aa4537, $aa4538, $aa4539, $aa4540, $aa4541, $aa4542, $aa4543, $aa4544, $aa4545, $aa4546, $aa4547, $aa4548, $aa4549, $aa4550, $aa4551, $aa4552, $aa4553, $aa4554, $aa4555, $aa4556, $aa4557, $aa4558, $aa4559, $aa4560, $aa4561, $aa4562, $aa4563, $aa4564, $aa4565, $aa4566, $aa4567, $aa4568, $aa4569, $aa4570, $aa4571, $aa4572, $aa4573, $aa4574, $aa4575, $aa4576, $aa4577, $aa4578, $aa4579, $aa4580, $aa4581, $aa4582, $aa4583, $aa4584, $aa4585, $aa4586, $aa4587, $aa4588, $aa4589, $aa4590, $aa4591, $aa4592, $aa4593, $aa4594, $aa4595, $aa4596, $aa4597, $aa4598, $aa4599, $aa4600, $aa4601, $aa4602, $aa4603, $aa4604, $aa4605, $aa4606, $aa4607, $aa4608, $aa4609, $aa4610, $aa4611, $aa4612, $aa4613, $aa4614, $aa4615, $aa4616, $aa4617, $aa4618, $aa4619, $aa4620, $aa4621, $aa4622, $aa4623, $aa4624, $aa4625, $aa4626, $aa4627, $aa4628, $aa4629, $aa4630, $aa4631, $aa4632, $aa4633, $aa4634, $aa4635, $aa4636, $aa4637, $aa4638, $aa4639, $aa4640, $aa4641, $aa4642, $aa4643, $aa4644, $aa4645, $aa4646, $aa4647, $aa4648, $aa4649, $aa4650, $aa4651, $aa4652, $aa4653, $aa4654, $aa4655, $aa4656, $aa4657, $aa4658, $aa4659, $aa4660, $aa4661, $aa4662, $aa4663, $aa4664, $aa4665, $aa4666, $aa4667, $aa4668, $aa4669, $aa4670, $aa4671, $aa4672, $aa4673, $aa4674, $aa4675, $aa4676, $aa4677, $aa4678, $aa4679, $aa4680, $aa4681, $aa4682, $aa4683, $aa4684, $aa4685, $aa4686, $aa4687, $aa4688, $aa4689, $aa4690, $aa4691, $aa4692, $aa4693, $aa4694, $aa4695, $aa4696, $aa4697, $aa4698, $aa4699, $aa4700, $aa4701, $aa4702, $aa4703, $aa4704, $aa4705, $aa4706, $aa4707, $aa4708, $aa4709, $aa4710, $aa4711, $aa4712, $aa4713, $aa4714, $aa4715, $aa4716, $aa4717, $aa4718, $aa4719, $aa4720, $aa4721, $aa4722, $aa4723, $aa4724, $aa4725, $aa4726, $aa4727, $aa4728, $aa4729, $aa4730, $aa4731, $aa4732, $aa4733, $aa4734, $aa4735, $aa4736, $aa4737, $aa4738, $aa4739, $aa4740, $aa4741, $aa4742, $aa4743, $aa4744, $aa4745, $aa4746, $aa4747, $aa4748, $aa4749, $aa4750, $aa4751, $aa4752, $aa4753, $aa4754, $aa4755, $aa4756, $aa4757, $aa4758, $aa4759, $aa4760, $aa4761, $aa4762, $aa4763, $aa4764, $aa4765, $aa4766, $aa4767, $aa4768, $aa4769, $aa4770, $aa4771, $aa4772, $aa4773, $aa4774, $aa4775, $aa4776, $aa4777, $aa4778, $aa4779, $aa4780, $aa4781, $aa4782, $aa4783, $aa4784, $aa4785, $aa4786, $aa4787, $aa4788, $aa4789, $aa4790, $aa4791, $aa4792, $aa4793, $aa4794, $aa4795, $aa4796, $aa4797, $aa4798, $aa4799, $aa4800, $aa4801, $aa4802, $aa4803, $aa4804, $aa4805, $aa4806, $aa4807, $aa4808, $aa4809, $aa4810, $aa4811, $aa4812, $aa4813, $aa4814, $aa4815, $aa4816, $aa4817, $aa4818, $aa4819, $aa4820, $aa4821, $aa4822, $aa4823, $aa4824, $aa4825, $aa4826, $aa4827, $aa4828, $aa4829, $aa4830, $aa4831, $aa4832, $aa4833, $aa4834, $aa4835, $aa4836, $aa4837, $aa4838, $aa4839, $aa4840, $aa4841, $aa4842, $aa4843, $aa4844, $aa4845, $aa4846, $aa4847, $aa4848, $aa4849, $aa4850, $aa4851, $aa4852, $aa4853, $aa4854, $aa4855, $aa4856, $aa4857, $aa4858, $aa4859, $aa4860, $aa4861, $aa4862, $aa4863, $aa4864, $aa4865, $aa4866, $aa4867, $aa4868, $aa4869, $aa4870, $aa4871, $aa4872, $aa4873, $aa4874, $aa4875, $aa4876, $aa4877, $aa4878, $aa4879, $aa4880, $aa4881, $aa4882, $aa4883, $aa4884, $aa4885, $aa4886, $aa4887, $aa4888, $aa4889, $aa4890, $aa4891, $aa4892, $aa4893, $aa4894, $aa4895, $aa4896, $aa4897, $aa4898, $aa4899, $aa4900, $aa4901, $aa4902, $aa4903, $aa4904, $aa4905, $aa4906, $aa4907, $aa4908, $aa4909, $aa4910, $aa4911, $aa4912, $aa4913, $aa4914, $aa4915, $aa4916, $aa4917, $aa4918, $aa4919, $aa4920, $aa4921, $aa4922, $aa4923, $aa4924, $aa4925, $aa4926, $aa4927, $aa4928, $aa4929, $aa4930, $aa4931, $aa4932, $aa4933, $aa4934, $aa4935, $aa4936, $aa4937, $aa4938, $aa4939, $aa4940, $aa4941, $aa4942, $aa4943, $aa4944, $aa4945, $aa4946, $aa4947, $aa4948, $aa4949, $aa4950, $aa4951, $aa4952, $aa4953, $aa4954, $aa4955, $aa4956, $aa4957, $aa4958, $aa4959, $aa4960, $aa4961, $aa4962, $aa4963, $aa4964, $aa4965, $aa4966, $aa4967, $aa4968, $aa4969, $aa4970, $aa4971, $aa4972, $aa4973, $aa4974, $aa4975, $aa4976, $aa4977, $aa4978, $aa4979, $aa4980, $aa4981, $aa4982, $aa4983, $aa4984, $aa4985, $aa4986, $aa4987, $aa4988, $aa4989, $aa4990, $aa4991, $aa4992, $aa4993, $aa4994, $aa4995, $aa4996, $aa4997, $aa4998, $aa4999, $aa5000, $aa5001, $aa5002, $aa5003, $aa5004, $aa5005, $aa5006, $aa5007, $aa5008, $aa5009, $aa5010, $aa5011, $aa5012, $aa5013, $aa5014, $aa5015, $aa5016, $aa5017, $aa5018, $aa5019, $aa5020, $aa5021, $aa5022, $aa5023, $aa5024, $aa5025, $aa5026, $aa5027, $aa5028, $aa5029, $aa5030, $aa5031, $aa5032, $aa5033, $aa5034, $aa5035, $aa5036, $aa5037, $aa5038, $aa5039, $aa5040, $aa5041, $aa5042, $aa5043, $aa5044, $aa5045, $aa5046, $aa5047, $aa5048, $aa5049, $aa5050, $aa5051, $aa5052, $aa5053, $aa5054, $aa5055, $aa5056, $aa5057, $aa5058, $aa5059, $aa5060, $aa5061, $aa5062, $aa5063, $aa5064, $aa5065, $aa5066, $aa5067, $aa5068, $aa5069, $aa5070, $aa5071, $aa5072, $aa5073, $aa5074, $aa5075, $aa5076, $aa5077, $aa5078, $aa5079, $aa5080, $aa5081, $aa5082, $aa5083, $aa5084, $aa5085, $aa5086, $aa5087, $aa5088, $aa5089, $aa5090, $aa5091, $aa5092, $aa5093, $aa5094, $aa5095, $aa5096, $aa5097, $aa5098, $aa5099, $aa5100, $aa5101, $aa5102, $aa5103, $aa5104, $aa5105, $aa5106, $aa5107, $aa5108, $aa5109, $aa5110, $aa5111, $aa5112, $aa5113, $aa5114, $aa5115, $aa5116, $aa5117, $aa5118, $aa5119, $aa5120, $aa5121, $aa5122, $aa5123, $aa5124, $aa5125, $aa5126, $aa5127, $aa5128, $aa5129, $aa5130, $aa5131, $aa5132, $aa5133, $aa5134, $aa5135, $aa5136, $aa5137, $aa5138, $aa5139, $aa5140, $aa5141, $aa5142, $aa5143, $aa5144, $aa5145, $aa5146, $aa5147, $aa5148, $aa5149, $aa5150, $aa5151, $aa5152, $aa5153, $aa5154, $aa5155, $aa5156, $aa5157, $aa5158, $aa5159, $aa5160, $aa5161, $aa5162, $aa5163, $aa5164, $aa5165, $aa5166, $aa5167, $aa5168, $aa5169, $aa5170, $aa5171, $aa5172, $aa5173, $aa5174, $aa5175, $aa5176, $aa5177, $aa5178, $aa5179, $aa5180, $aa5181, $aa5182, $aa5183, $aa5184, $aa5185, $aa5186, $aa5187, $aa5188, $aa5189, $aa5190, $aa5191, $aa5192, $aa5193, $aa5194, $aa5195, $aa5196, $aa5197, $aa5198, $aa5199, $aa5200, $aa5201, $aa5202, $aa5203, $aa5204, $aa5205, $aa5206, $aa5207, $aa5208, $aa5209, $aa5210, $aa5211, $aa5212, $aa5213, $aa5214, $aa5215, $aa5216, $aa5217, $aa5218, $aa5219, $aa5220, $aa5221, $aa5222, $aa5223, $aa5224, $aa5225, $aa5226, $aa5227, $aa5228, $aa5229, $aa5230, $aa5231, $aa5232, $aa5233, $aa5234, $aa5235, $aa5236, $aa5237, $aa5238, $aa5239, $aa5240, $aa5241, $aa5242, $aa5243, $aa5244, $aa5245, $aa5246, $aa5247, $aa5248, $aa5249, $aa5250, $aa5251, $aa5252, $aa5253, $aa5254, $aa5255, $aa5256, $aa5257, $aa5258, $aa5259, $aa5260, $aa5261, $aa5262, $aa5263, $aa5264, $aa5265, $aa5266, $aa5267, $aa5268, $aa5269, $aa5270, $aa5271, $aa5272, $aa5273, $aa5274, $aa5275, $aa5276, $aa5277, $aa5278, $aa5279, $aa5280, $aa5281, $aa5282, $aa5283, $aa5284, $aa5285, $aa5286, $aa5287, $aa5288, $aa5289, $aa5290, $aa5291, $aa5292, $aa5293, $aa5294, $aa5295, $aa5296, $aa5297, $aa5298, $aa5299, $aa5300, $aa5301, $aa5302, $aa5303, $aa5304, $aa5305, $aa5306, $aa5307, $aa5308, $aa5309, $aa5310, $aa5311, $aa5312, $aa5313, $aa5314, $aa5315, $aa5316, $aa5317, $aa5318, $aa5319, $aa5320, $aa5321, $aa5322, $aa5323, $aa5324, $aa5325, $aa5326, $aa5327, $aa5328, $aa5329, $aa5330, $aa5331, $aa5332, $aa5333, $aa5334, $aa5335, $aa5336, $aa5337, $aa5338, $aa5339, $aa5340, $aa5341, $aa5342, $aa5343, $aa5344, $aa5345, $aa5346, $aa5347, $aa5348, $aa5349, $aa5350, $aa5351, $aa5352, $aa5353, $aa5354, $aa5355, $aa5356, $aa5357, $aa5358, $aa5359, $aa5360, $aa5361, $aa5362, $aa5363, $aa5364, $aa5365, $aa5366, $aa5367, $aa5368, $aa5369, $aa5370, $aa5371, $aa5372, $aa5373, $aa5374, $aa5375, $aa5376, $aa5377, $aa5378, $aa5379, $aa5380, $aa5381, $aa5382, $aa5383, $aa5384, $aa5385, $aa5386, $aa5387, $aa5388, $aa5389, $aa5390, $aa5391, $aa5392, $aa5393, $aa5394, $aa5395, $aa5396, $aa5397, $aa5398, $aa5399, $aa5400, $aa5401, $aa5402, $aa5403, $aa5404, $aa5405, $aa5406, $aa5407, $aa5408, $aa5409, $aa5410, $aa5411, $aa5412, $aa5413, $aa5414, $aa5415, $aa5416, $aa5417, $aa5418, $aa5419, $aa5420, $aa5421, $aa5422, $aa5423, $aa5424, $aa5425, $aa5426, $aa5427, $aa5428, $aa5429, $aa5430, $aa5431, $aa5432, $aa5433, $aa5434, $aa5435, $aa5436, $aa5437, $aa5438, $aa5439, $aa5440, $aa5441, $aa5442, $aa5443, $aa5444, $aa5445, $aa5446, $aa5447, $aa5448, $aa5449, $aa5450, $aa5451, $aa5452, $aa5453, $aa5454, $aa5455, $aa5456, $aa5457, $aa5458, $aa5459, $aa5460, $aa5461, $aa5462, $aa5463, $aa5464, $aa5465, $aa5466, $aa5467, $aa5468, $aa5469, $aa5470, $aa5471, $aa5472, $aa5473, $aa5474, $aa5475, $aa5476, $aa5477, $aa5478, $aa5479, $aa5480, $aa5481, $aa5482, $aa5483, $aa5484, $aa5485, $aa5486, $aa5487, $aa5488, $aa5489, $aa5490, $aa5491, $aa5492, $aa5493, $aa5494, $aa5495, $aa5496, $aa5497, $aa5498, $aa5499, $aa5500, $aa5501, $aa5502, $aa5503, $aa5504, $aa5505, $aa5506, $aa5507, $aa5508, $aa5509, $aa5510, $aa5511, $aa5512, $aa5513, $aa5514, $aa5515, $aa5516, $aa5517, $aa5518, $aa5519, $aa5520, $aa5521, $aa5522, $aa5523, $aa5524, $aa5525, $aa5526, $aa5527, $aa5528, $aa5529, $aa5530, $aa5531, $aa5532, $aa5533, $aa5534, $aa5535, $aa5536, $aa5537, $aa5538, $aa5539, $aa5540, $aa5541, $aa5542, $aa5543, $aa5544, $aa5545, $aa5546, $aa5547, $aa5548, $aa5549, $aa5550, $aa5551, $aa5552, $aa5553, $aa5554, $aa5555, $aa5556, $aa5557, $aa5558, $aa5559, $aa5560, $aa5561, $aa5562, $aa5563, $aa5564, $aa5565, $aa5566, $aa5567, $aa5568, $aa5569, $aa5570, $aa5571, $aa5572, $aa5573, $aa5574, $aa5575, $aa5576, $aa5577, $aa5578, $aa5579, $aa5580, $aa5581, $aa5582, $aa5583, $aa5584, $aa5585, $aa5586, $aa5587, $aa5588, $aa5589, $aa5590, $aa5591, $aa5592, $aa5593, $aa5594, $aa5595, $aa5596, $aa5597, $aa5598, $aa5599, $aa5600, $aa5601, $aa5602, $aa5603, $aa5604, $aa5605, $aa5606, $aa5607, $aa5608, $aa5609, $aa5610, $aa5611, $aa5612, $aa5613, $aa5614, $aa5615, $aa5616, $aa5617, $aa5618, $aa5619, $aa5620, $aa5621, $aa5622, $aa5623, $aa5624, $aa5625, $aa5626, $aa5627, $aa5628, $aa5629, $aa5630, $aa5631, $aa5632, $aa5633, $aa5634, $aa5635, $aa5636, $aa5637, $aa5638, $aa5639, $aa5640, $aa5641, $aa5642, $aa5643, $aa5644, $aa5645, $aa5646, $aa5647, $aa5648, $aa5649, $aa5650, $aa5651, $aa5652, $aa5653, $aa5654, $aa5655, $aa5656, $aa5657, $aa5658, $aa5659, $aa5660, $aa5661, $aa5662, $aa5663, $aa5664, $aa5665, $aa5666, $aa5667, $aa5668, $aa5669, $aa5670, $aa5671, $aa5672, $aa5673, $aa5674, $aa5675, $aa5676, $aa5677, $aa5678, $aa5679, $aa5680, $aa5681, $aa5682, $aa5683, $aa5684, $aa5685, $aa5686, $aa5687, $aa5688, $aa5689, $aa5690, $aa5691, $aa5692, $aa5693, $aa5694, $aa5695, $aa5696, $aa5697, $aa5698, $aa5699, $aa5700, $aa5701, $aa5702, $aa5703, $aa5704, $aa5705, $aa5706, $aa5707, $aa5708, $aa5709, $aa5710, $aa5711, $aa5712, $aa5713, $aa5714, $aa5715, $aa5716, $aa5717, $aa5718, $aa5719, $aa5720, $aa5721, $aa5722, $aa5723, $aa5724, $aa5725, $aa5726, $aa5727, $aa5728, $aa5729, $aa5730, $aa5731, $aa5732, $aa5733, $aa5734, $aa5735, $aa5736, $aa5737, $aa5738, $aa5739, $aa5740, $aa5741, $aa5742, $aa5743, $aa5744, $aa5745, $aa5746, $aa5747, $aa5748, $aa5749, $aa5750, $aa5751, $aa5752, $aa5753, $aa5754, $aa5755, $aa5756, $aa5757, $aa5758, $aa5759, $aa5760, $aa5761, $aa5762, $aa5763, $aa5764, $aa5765, $aa5766, $aa5767, $aa5768, $aa5769, $aa5770, $aa5771, $aa5772, $aa5773, $aa5774, $aa5775, $aa5776, $aa5777, $aa5778, $aa5779, $aa5780, $aa5781, $aa5782, $aa5783, $aa5784, $aa5785, $aa5786, $aa5787, $aa5788, $aa5789, $aa5790, $aa5791, $aa5792, $aa5793, $aa5794, $aa5795, $aa5796, $aa5797, $aa5798, $aa5799, $aa5800, $aa5801, $aa5802, $aa5803, $aa5804, $aa5805, $aa5806, $aa5807, $aa5808, $aa5809, $aa5810, $aa5811, $aa5812, $aa5813, $aa5814, $aa5815, $aa5816, $aa5817, $aa5818, $aa5819, $aa5820, $aa5821, $aa5822, $aa5823, $aa5824, $aa5825, $aa5826, $aa5827, $aa5828, $aa5829, $aa5830, $aa5831, $aa5832, $aa5833, $aa5834, $aa5835, $aa5836, $aa5837, $aa5838, $aa5839, $aa5840, $aa5841, $aa5842, $aa5843, $aa5844, $aa5845, $aa5846, $aa5847, $aa5848, $aa5849, $aa5850, $aa5851, $aa5852, $aa5853, $aa5854, $aa5855, $aa5856, $aa5857, $aa5858, $aa5859, $aa5860, $aa5861, $aa5862, $aa5863, $aa5864, $aa5865, $aa5866, $aa5867, $aa5868, $aa5869, $aa5870, $aa5871, $aa5872, $aa5873, $aa5874, $aa5875, $aa5876, $aa5877, $aa5878, $aa5879, $aa5880, $aa5881, $aa5882, $aa5883, $aa5884, $aa5885, $aa5886, $aa5887, $aa5888, $aa5889, $aa5890, $aa5891, $aa5892, $aa5893, $aa5894, $aa5895, $aa5896, $aa5897, $aa5898, $aa5899, $aa5900, $aa5901, $aa5902, $aa5903, $aa5904, $aa5905, $aa5906, $aa5907, $aa5908, $aa5909, $aa5910, $aa5911, $aa5912, $aa5913, $aa5914, $aa5915, $aa5916, $aa5917, $aa5918, $aa5919, $aa5920, $aa5921, $aa5922, $aa5923, $aa5924, $aa5925, $aa5926, $aa5927, $aa5928, $aa5929, $aa5930, $aa5931, $aa5932, $aa5933, $aa5934, $aa5935, $aa5936, $aa5937, $aa5938, $aa5939, $aa5940, $aa5941, $aa5942, $aa5943, $aa5944, $aa5945, $aa5946, $aa5947, $aa5948, $aa5949, $aa5950, $aa5951, $aa5952, $aa5953, $aa5954, $aa5955, $aa5956, $aa5957, $aa5958, $aa5959, $aa5960, $aa5961, $aa5962, $aa5963, $aa5964, $aa5965, $aa5966, $aa5967, $aa5968, $aa5969, $aa5970, $aa5971, $aa5972, $aa5973, $aa5974, $aa5975, $aa5976, $aa5977, $aa5978, $aa5979, $aa5980, $aa5981, $aa5982, $aa5983, $aa5984, $aa5985, $aa5986, $aa5987, $aa5988, $aa5989, $aa5990, $aa5991, $aa5992, $aa5993, $aa5994, $aa5995, $aa5996, $aa5997, $aa5998, $aa5999, $aa6000, $aa6001, $aa6002, $aa6003, $aa6004, $aa6005, $aa6006, $aa6007, $aa6008, $aa6009, $aa6010, $aa6011, $aa6012, $aa6013, $aa6014, $aa6015, $aa6016, $aa6017, $aa6018, $aa6019, $aa6020, $aa6021, $aa6022, $aa6023, $aa6024, $aa6025, $aa6026, $aa6027, $aa6028, $aa6029, $aa6030, $aa6031, $aa6032, $aa6033, $aa6034, $aa6035, $aa6036, $aa6037, $aa6038, $aa6039, $aa6040, $aa6041, $aa6042, $aa6043, $aa6044, $aa6045, $aa6046, $aa6047, $aa6048, $aa6049, $aa6050, $aa6051, $aa6052, $aa6053, $aa6054, $aa6055, $aa6056, $aa6057, $aa6058, $aa6059, $aa6060, $aa6061, $aa6062, $aa6063, $aa6064, $aa6065, $aa6066, $aa6067, $aa6068, $aa6069, $aa6070, $aa6071, $aa6072, $aa6073, $aa6074, $aa6075, $aa6076, $aa6077, $aa6078, $aa6079, $aa6080, $aa6081, $aa6082, $aa6083, $aa6084, $aa6085, $aa6086, $aa6087, $aa6088, $aa6089, $aa6090, $aa6091, $aa6092, $aa6093, $aa6094, $aa6095, $aa6096, $aa6097, $aa6098, $aa6099, $aa6100, $aa6101, $aa6102, $aa6103, $aa6104, $aa6105, $aa6106, $aa6107, $aa6108, $aa6109, $aa6110, $aa6111, $aa6112, $aa6113, $aa6114, $aa6115, $aa6116, $aa6117, $aa6118, $aa6119, $aa6120, $aa6121, $aa6122, $aa6123, $aa6124, $aa6125, $aa6126, $aa6127, $aa6128, $aa6129, $aa6130, $aa6131, $aa6132, $aa6133, $aa6134, $aa6135, $aa6136, $aa6137, $aa6138, $aa6139, $aa6140, $aa6141, $aa6142, $aa6143, $aa6144, $aa6145, $aa6146, $aa6147, $aa6148, $aa6149, $aa6150, $aa6151, $aa6152, $aa6153, $aa6154, $aa6155, $aa6156, $aa6157, $aa6158, $aa6159, $aa6160, $aa6161, $aa6162, $aa6163, $aa6164, $aa6165, $aa6166, $aa6167, $aa6168, $aa6169, $aa6170, $aa6171, $aa6172, $aa6173, $aa6174, $aa6175, $aa6176, $aa6177, $aa6178, $aa6179, $aa6180, $aa6181, $aa6182, $aa6183, $aa6184, $aa6185, $aa6186, $aa6187, $aa6188, $aa6189, $aa6190, $aa6191, $aa6192, $aa6193, $aa6194, $aa6195, $aa6196, $aa6197, $aa6198, $aa6199, $aa6200, $aa6201, $aa6202, $aa6203, $aa6204, $aa6205, $aa6206, $aa6207, $aa6208, $aa6209, $aa6210, $aa6211, $aa6212, $aa6213, $aa6214, $aa6215, $aa6216, $aa6217, $aa6218, $aa6219, $aa6220, $aa6221, $aa6222, $aa6223, $aa6224, $aa6225, $aa6226, $aa6227, $aa6228, $aa6229, $aa6230, $aa6231, $aa6232, $aa6233, $aa6234, $aa6235, $aa6236, $aa6237, $aa6238, $aa6239, $aa6240, $aa6241, $aa6242, $aa6243, $aa6244, $aa6245, $aa6246, $aa6247, $aa6248, $aa6249, $aa6250, $aa6251, $aa6252, $aa6253, $aa6254, $aa6255, $aa6256, $aa6257, $aa6258, $aa6259, $aa6260, $aa6261, $aa6262, $aa6263, $aa6264, $aa6265, $aa6266, $aa6267, $aa6268, $aa6269, $aa6270, $aa6271, $aa6272, $aa6273, $aa6274, $aa6275, $aa6276, $aa6277, $aa6278, $aa6279, $aa6280, $aa6281, $aa6282, $aa6283, $aa6284, $aa6285, $aa6286, $aa6287, $aa6288, $aa6289, $aa6290, $aa6291, $aa6292, $aa6293, $aa6294, $aa6295, $aa6296, $aa6297, $aa6298, $aa6299, $aa6300, $aa6301, $aa6302, $aa6303, $aa6304, $aa6305, $aa6306, $aa6307, $aa6308, $aa6309, $aa6310, $aa6311, $aa6312, $aa6313, $aa6314, $aa6315, $aa6316, $aa6317, $aa6318, $aa6319, $aa6320, $aa6321, $aa6322, $aa6323, $aa6324, $aa6325, $aa6326, $aa6327, $aa6328, $aa6329, $aa6330, $aa6331, $aa6332, $aa6333, $aa6334, $aa6335, $aa6336, $aa6337, $aa6338, $aa6339, $aa6340, $aa6341, $aa6342, $aa6343, $aa6344, $aa6345, $aa6346, $aa6347, $aa6348, $aa6349, $aa6350, $aa6351, $aa6352, $aa6353, $aa6354, $aa6355, $aa6356, $aa6357, $aa6358, $aa6359, $aa6360, $aa6361, $aa6362, $aa6363, $aa6364, $aa6365, $aa6366, $aa6367, $aa6368, $aa6369, $aa6370, $aa6371, $aa6372, $aa6373, $aa6374, $aa6375, $aa6376, $aa6377, $aa6378, $aa6379, $aa6380, $aa6381, $aa6382, $aa6383, $aa6384, $aa6385, $aa6386, $aa6387, $aa6388, $aa6389, $aa6390, $aa6391, $aa6392, $aa6393, $aa6394, $aa6395, $aa6396, $aa6397, $aa6398, $aa6399, $aa6400, $aa6401, $aa6402, $aa6403, $aa6404, $aa6405, $aa6406, $aa6407, $aa6408, $aa6409, $aa6410, $aa6411, $aa6412, $aa6413, $aa6414, $aa6415, $aa6416, $aa6417, $aa6418, $aa6419, $aa6420, $aa6421, $aa6422, $aa6423, $aa6424, $aa6425, $aa6426, $aa6427, $aa6428, $aa6429, $aa6430, $aa6431, $aa6432, $aa6433, $aa6434, $aa6435, $aa6436, $aa6437, $aa6438, $aa6439, $aa6440, $aa6441, $aa6442, $aa6443, $aa6444, $aa6445, $aa6446, $aa6447, $aa6448, $aa6449, $aa6450, $aa6451, $aa6452, $aa6453, $aa6454, $aa6455, $aa6456, $aa6457, $aa6458, $aa6459, $aa6460, $aa6461, $aa6462, $aa6463, $aa6464, $aa6465, $aa6466, $aa6467, $aa6468, $aa6469, $aa6470, $aa6471, $aa6472, $aa6473, $aa6474, $aa6475, $aa6476, $aa6477, $aa6478, $aa6479, $aa6480, $aa6481, $aa6482, $aa6483, $aa6484, $aa6485, $aa6486, $aa6487, $aa6488, $aa6489, $aa6490, $aa6491, $aa6492, $aa6493, $aa6494, $aa6495, $aa6496, $aa6497, $aa6498, $aa6499, $aa6500, $aa6501, $aa6502, $aa6503, $aa6504, $aa6505, $aa6506, $aa6507, $aa6508, $aa6509, $aa6510, $aa6511, $aa6512, $aa6513, $aa6514, $aa6515, $aa6516, $aa6517, $aa6518, $aa6519, $aa6520, $aa6521, $aa6522, $aa6523, $aa6524, $aa6525, $aa6526, $aa6527, $aa6528, $aa6529, $aa6530, $aa6531, $aa6532, $aa6533, $aa6534, $aa6535, $aa6536, $aa6537, $aa6538, $aa6539, $aa6540, $aa6541, $aa6542, $aa6543, $aa6544, $aa6545, $aa6546, $aa6547, $aa6548, $aa6549, $aa6550, $aa6551, $aa6552, $aa6553, $aa6554, $aa6555, $aa6556, $aa6557, $aa6558, $aa6559, $aa6560, $aa6561, $aa6562, $aa6563, $aa6564, $aa6565, $aa6566, $aa6567, $aa6568, $aa6569, $aa6570, $aa6571, $aa6572, $aa6573, $aa6574, $aa6575, $aa6576, $aa6577, $aa6578, $aa6579, $aa6580, $aa6581, $aa6582, $aa6583, $aa6584, $aa6585, $aa6586, $aa6587, $aa6588, $aa6589, $aa6590, $aa6591, $aa6592, $aa6593, $aa6594, $aa6595, $aa6596, $aa6597, $aa6598, $aa6599, $aa6600, $aa6601, $aa6602, $aa6603, $aa6604, $aa6605, $aa6606, $aa6607, $aa6608, $aa6609, $aa6610, $aa6611, $aa6612, $aa6613, $aa6614, $aa6615, $aa6616, $aa6617, $aa6618, $aa6619, $aa6620, $aa6621, $aa6622, $aa6623, $aa6624, $aa6625, $aa6626, $aa6627, $aa6628, $aa6629, $aa6630, $aa6631, $aa6632, $aa6633, $aa6634, $aa6635, $aa6636, $aa6637, $aa6638, $aa6639, $aa6640, $aa6641, $aa6642, $aa6643, $aa6644, $aa6645, $aa6646, $aa6647, $aa6648, $aa6649, $aa6650, $aa6651, $aa6652, $aa6653, $aa6654, $aa6655, $aa6656, $aa6657, $aa6658, $aa6659, $aa6660, $aa6661, $aa6662, $aa6663, $aa6664, $aa6665, $aa6666, $aa6667, $aa6668, $aa6669, $aa6670, $aa6671, $aa6672, $aa6673, $aa6674, $aa6675, $aa6676, $aa6677, $aa6678, $aa6679, $aa6680, $aa6681, $aa6682, $aa6683, $aa6684, $aa6685, $aa6686, $aa6687, $aa6688, $aa6689, $aa6690, $aa6691, $aa6692, $aa6693, $aa6694, $aa6695, $aa6696, $aa6697, $aa6698, $aa6699, $aa6700, $aa6701, $aa6702, $aa6703, $aa6704, $aa6705, $aa6706, $aa6707, $aa6708, $aa6709, $aa6710, $aa6711, $aa6712, $aa6713, $aa6714, $aa6715, $aa6716, $aa6717, $aa6718, $aa6719, $aa6720, $aa6721, $aa6722, $aa6723, $aa6724, $aa6725, $aa6726, $aa6727, $aa6728, $aa6729, $aa6730, $aa6731, $aa6732, $aa6733, $aa6734, $aa6735, $aa6736, $aa6737, $aa6738, $aa6739, $aa6740, $aa6741, $aa6742, $aa6743, $aa6744, $aa6745, $aa6746, $aa6747, $aa6748, $aa6749, $aa6750, $aa6751, $aa6752, $aa6753, $aa6754, $aa6755, $aa6756, $aa6757, $aa6758, $aa6759, $aa6760, $aa6761, $aa6762, $aa6763, $aa6764, $aa6765, $aa6766, $aa6767, $aa6768, $aa6769, $aa6770, $aa6771, $aa6772, $aa6773, $aa6774, $aa6775, $aa6776, $aa6777, $aa6778, $aa6779, $aa6780, $aa6781, $aa6782, $aa6783, $aa6784, $aa6785, $aa6786, $aa6787, $aa6788, $aa6789, $aa6790, $aa6791, $aa6792, $aa6793, $aa6794, $aa6795, $aa6796, $aa6797, $aa6798, $aa6799, $aa6800, $aa6801, $aa6802, $aa6803, $aa6804, $aa6805, $aa6806, $aa6807, $aa6808, $aa6809, $aa6810, $aa6811, $aa6812, $aa6813, $aa6814, $aa6815, $aa6816, $aa6817, $aa6818, $aa6819, $aa6820, $aa6821, $aa6822, $aa6823, $aa6824, $aa6825, $aa6826, $aa6827, $aa6828, $aa6829, $aa6830, $aa6831, $aa6832, $aa6833, $aa6834, $aa6835, $aa6836, $aa6837, $aa6838, $aa6839, $aa6840, $aa6841, $aa6842, $aa6843, $aa6844, $aa6845, $aa6846, $aa6847, $aa6848, $aa6849, $aa6850, $aa6851, $aa6852, $aa6853, $aa6854, $aa6855, $aa6856, $aa6857, $aa6858, $aa6859, $aa6860, $aa6861, $aa6862, $aa6863, $aa6864, $aa6865, $aa6866, $aa6867, $aa6868, $aa6869, $aa6870, $aa6871, $aa6872, $aa6873, $aa6874, $aa6875, $aa6876, $aa6877, $aa6878, $aa6879, $aa6880, $aa6881, $aa6882, $aa6883, $aa6884, $aa6885, $aa6886, $aa6887, $aa6888, $aa6889, $aa6890, $aa6891, $aa6892, $aa6893, $aa6894, $aa6895, $aa6896, $aa6897, $aa6898, $aa6899, $aa6900, $aa6901, $aa6902, $aa6903, $aa6904, $aa6905, $aa6906, $aa6907, $aa6908, $aa6909, $aa6910, $aa6911, $aa6912, $aa6913, $aa6914, $aa6915, $aa6916, $aa6917, $aa6918, $aa6919, $aa6920, $aa6921, $aa6922, $aa6923, $aa6924, $aa6925, $aa6926, $aa6927, $aa6928, $aa6929, $aa6930, $aa6931, $aa6932, $aa6933, $aa6934, $aa6935, $aa6936, $aa6937, $aa6938, $aa6939, $aa6940, $aa6941, $aa6942, $aa6943, $aa6944, $aa6945, $aa6946, $aa6947, $aa6948, $aa6949, $aa6950, $aa6951, $aa6952, $aa6953, $aa6954, $aa6955, $aa6956, $aa6957, $aa6958, $aa6959, $aa6960, $aa6961, $aa6962, $aa6963, $aa6964, $aa6965, $aa6966, $aa6967, $aa6968, $aa6969, $aa6970, $aa6971, $aa6972, $aa6973, $aa6974, $aa6975, $aa6976, $aa6977, $aa6978, $aa6979, $aa6980, $aa6981, $aa6982, $aa6983, $aa6984, $aa6985, $aa6986, $aa6987, $aa6988, $aa6989, $aa6990, $aa6991, $aa6992, $aa6993, $aa6994, $aa6995, $aa6996, $aa6997, $aa6998, $aa6999, $aa7000, $aa7001, $aa7002, $aa7003, $aa7004, $aa7005, $aa7006, $aa7007, $aa7008, $aa7009, $aa7010, $aa7011, $aa7012, $aa7013, $aa7014, $aa7015, $aa7016, $aa7017, $aa7018, $aa7019, $aa7020, $aa7021, $aa7022, $aa7023, $aa7024, $aa7025, $aa7026, $aa7027, $aa7028, $aa7029, $aa7030, $aa7031, $aa7032, $aa7033, $aa7034, $aa7035, $aa7036, $aa7037, $aa7038, $aa7039, $aa7040, $aa7041, $aa7042, $aa7043, $aa7044, $aa7045, $aa7046, $aa7047, $aa7048, $aa7049, $aa7050, $aa7051, $aa7052, $aa7053, $aa7054, $aa7055, $aa7056, $aa7057, $aa7058, $aa7059, $aa7060, $aa7061, $aa7062, $aa7063, $aa7064, $aa7065, $aa7066, $aa7067, $aa7068, $aa7069, $aa7070, $aa7071, $aa7072, $aa7073, $aa7074, $aa7075, $aa7076, $aa7077, $aa7078, $aa7079, $aa7080, $aa7081, $aa7082, $aa7083, $aa7084, $aa7085, $aa7086, $aa7087, $aa7088, $aa7089, $aa7090, $aa7091, $aa7092, $aa7093, $aa7094, $aa7095, $aa7096, $aa7097, $aa7098, $aa7099, $aa7100, $aa7101, $aa7102, $aa7103, $aa7104, $aa7105, $aa7106, $aa7107, $aa7108, $aa7109, $aa7110, $aa7111, $aa7112, $aa7113, $aa7114, $aa7115, $aa7116, $aa7117, $aa7118, $aa7119, $aa7120, $aa7121, $aa7122, $aa7123, $aa7124, $aa7125, $aa7126, $aa7127, $aa7128, $aa7129, $aa7130, $aa7131, $aa7132, $aa7133, $aa7134, $aa7135, $aa7136, $aa7137, $aa7138, $aa7139, $aa7140, $aa7141, $aa7142, $aa7143, $aa7144, $aa7145, $aa7146, $aa7147, $aa7148, $aa7149, $aa7150, $aa7151, $aa7152, $aa7153, $aa7154, $aa7155, $aa7156, $aa7157, $aa7158, $aa7159, $aa7160, $aa7161, $aa7162, $aa7163, $aa7164, $aa7165, $aa7166, $aa7167, $aa7168, $aa7169, $aa7170, $aa7171, $aa7172, $aa7173, $aa7174, $aa7175, $aa7176, $aa7177, $aa7178, $aa7179, $aa7180, $aa7181, $aa7182, $aa7183, $aa7184, $aa7185, $aa7186, $aa7187, $aa7188, $aa7189, $aa7190, $aa7191, $aa7192, $aa7193, $aa7194, $aa7195, $aa7196, $aa7197, $aa7198, $aa7199, $aa7200, $aa7201, $aa7202, $aa7203, $aa7204, $aa7205, $aa7206, $aa7207, $aa7208, $aa7209, $aa7210, $aa7211, $aa7212, $aa7213, $aa7214, $aa7215, $aa7216, $aa7217, $aa7218, $aa7219, $aa7220, $aa7221, $aa7222, $aa7223, $aa7224, $aa7225, $aa7226, $aa7227, $aa7228, $aa7229, $aa7230, $aa7231, $aa7232, $aa7233, $aa7234, $aa7235, $aa7236, $aa7237, $aa7238, $aa7239, $aa7240, $aa7241, $aa7242, $aa7243, $aa7244, $aa7245, $aa7246, $aa7247, $aa7248, $aa7249, $aa7250, $aa7251, $aa7252, $aa7253, $aa7254, $aa7255, $aa7256, $aa7257, $aa7258, $aa7259, $aa7260, $aa7261, $aa7262, $aa7263, $aa7264, $aa7265, $aa7266, $aa7267, $aa7268, $aa7269, $aa7270, $aa7271, $aa7272, $aa7273, $aa7274, $aa7275, $aa7276, $aa7277, $aa7278, $aa7279, $aa7280, $aa7281, $aa7282, $aa7283, $aa7284, $aa7285, $aa7286, $aa7287, $aa7288, $aa7289, $aa7290, $aa7291, $aa7292, $aa7293, $aa7294, $aa7295, $aa7296, $aa7297, $aa7298, $aa7299, $aa7300, $aa7301, $aa7302, $aa7303, $aa7304, $aa7305, $aa7306, $aa7307, $aa7308, $aa7309, $aa7310, $aa7311, $aa7312, $aa7313, $aa7314, $aa7315, $aa7316, $aa7317, $aa7318, $aa7319, $aa7320, $aa7321, $aa7322, $aa7323, $aa7324, $aa7325, $aa7326, $aa7327, $aa7328, $aa7329, $aa7330, $aa7331, $aa7332, $aa7333, $aa7334, $aa7335, $aa7336, $aa7337, $aa7338, $aa7339, $aa7340, $aa7341, $aa7342, $aa7343, $aa7344, $aa7345, $aa7346, $aa7347, $aa7348, $aa7349, $aa7350, $aa7351, $aa7352, $aa7353, $aa7354, $aa7355, $aa7356, $aa7357, $aa7358, $aa7359, $aa7360, $aa7361, $aa7362, $aa7363, $aa7364, $aa7365, $aa7366, $aa7367, $aa7368, $aa7369, $aa7370, $aa7371, $aa7372, $aa7373, $aa7374, $aa7375, $aa7376, $aa7377, $aa7378, $aa7379, $aa7380, $aa7381, $aa7382, $aa7383, $aa7384, $aa7385, $aa7386, $aa7387, $aa7388, $aa7389, $aa7390, $aa7391, $aa7392, $aa7393, $aa7394, $aa7395, $aa7396, $aa7397, $aa7398, $aa7399, $aa7400, $aa7401, $aa7402, $aa7403, $aa7404, $aa7405, $aa7406, $aa7407, $aa7408, $aa7409, $aa7410, $aa7411, $aa7412, $aa7413, $aa7414, $aa7415, $aa7416, $aa7417, $aa7418, $aa7419, $aa7420, $aa7421, $aa7422, $aa7423, $aa7424, $aa7425, $aa7426, $aa7427, $aa7428, $aa7429, $aa7430, $aa7431, $aa7432, $aa7433, $aa7434, $aa7435, $aa7436, $aa7437, $aa7438, $aa7439, $aa7440, $aa7441, $aa7442, $aa7443, $aa7444, $aa7445, $aa7446, $aa7447, $aa7448, $aa7449, $aa7450, $aa7451, $aa7452, $aa7453, $aa7454, $aa7455, $aa7456, $aa7457, $aa7458, $aa7459, $aa7460, $aa7461, $aa7462, $aa7463, $aa7464, $aa7465, $aa7466, $aa7467, $aa7468, $aa7469, $aa7470, $aa7471, $aa7472, $aa7473, $aa7474, $aa7475, $aa7476, $aa7477, $aa7478, $aa7479, $aa7480, $aa7481, $aa7482, $aa7483, $aa7484, $aa7485, $aa7486, $aa7487, $aa7488, $aa7489, $aa7490, $aa7491, $aa7492, $aa7493, $aa7494, $aa7495, $aa7496, $aa7497, $aa7498, $aa7499, $aa7500, $aa7501, $aa7502, $aa7503, $aa7504, $aa7505, $aa7506, $aa7507, $aa7508, $aa7509, $aa7510, $aa7511, $aa7512, $aa7513, $aa7514, $aa7515, $aa7516, $aa7517, $aa7518, $aa7519, $aa7520, $aa7521, $aa7522, $aa7523, $aa7524, $aa7525, $aa7526, $aa7527, $aa7528, $aa7529, $aa7530, $aa7531, $aa7532, $aa7533, $aa7534, $aa7535, $aa7536, $aa7537, $aa7538, $aa7539, $aa7540, $aa7541, $aa7542, $aa7543, $aa7544, $aa7545, $aa7546, $aa7547, $aa7548, $aa7549, $aa7550, $aa7551, $aa7552, $aa7553, $aa7554, $aa7555, $aa7556, $aa7557, $aa7558, $aa7559, $aa7560, $aa7561, $aa7562, $aa7563, $aa7564, $aa7565, $aa7566, $aa7567, $aa7568, $aa7569, $aa7570, $aa7571, $aa7572, $aa7573, $aa7574, $aa7575, $aa7576, $aa7577, $aa7578, $aa7579, $aa7580, $aa7581, $aa7582, $aa7583, $aa7584, $aa7585, $aa7586, $aa7587, $aa7588, $aa7589, $aa7590, $aa7591, $aa7592, $aa7593, $aa7594, $aa7595, $aa7596, $aa7597, $aa7598, $aa7599, $aa7600, $aa7601, $aa7602, $aa7603, $aa7604, $aa7605, $aa7606, $aa7607, $aa7608, $aa7609, $aa7610, $aa7611, $aa7612, $aa7613, $aa7614, $aa7615, $aa7616, $aa7617, $aa7618, $aa7619, $aa7620, $aa7621, $aa7622, $aa7623, $aa7624, $aa7625, $aa7626, $aa7627, $aa7628, $aa7629, $aa7630, $aa7631, $aa7632, $aa7633, $aa7634, $aa7635, $aa7636, $aa7637, $aa7638, $aa7639, $aa7640, $aa7641, $aa7642, $aa7643, $aa7644, $aa7645, $aa7646, $aa7647, $aa7648, $aa7649, $aa7650, $aa7651, $aa7652, $aa7653, $aa7654, $aa7655, $aa7656, $aa7657, $aa7658, $aa7659, $aa7660, $aa7661, $aa7662, $aa7663, $aa7664, $aa7665, $aa7666, $aa7667, $aa7668, $aa7669, $aa7670, $aa7671, $aa7672, $aa7673, $aa7674, $aa7675, $aa7676, $aa7677, $aa7678, $aa7679, $aa7680, $aa7681, $aa7682, $aa7683, $aa7684, $aa7685, $aa7686, $aa7687, $aa7688, $aa7689, $aa7690, $aa7691, $aa7692, $aa7693, $aa7694, $aa7695, $aa7696, $aa7697, $aa7698, $aa7699, $aa7700, $aa7701, $aa7702, $aa7703, $aa7704, $aa7705, $aa7706, $aa7707, $aa7708, $aa7709, $aa7710, $aa7711, $aa7712, $aa7713, $aa7714, $aa7715, $aa7716, $aa7717, $aa7718, $aa7719, $aa7720, $aa7721, $aa7722, $aa7723, $aa7724, $aa7725, $aa7726, $aa7727, $aa7728, $aa7729, $aa7730, $aa7731, $aa7732, $aa7733, $aa7734, $aa7735, $aa7736, $aa7737, $aa7738, $aa7739, $aa7740, $aa7741, $aa7742, $aa7743, $aa7744, $aa7745, $aa7746, $aa7747, $aa7748, $aa7749, $aa7750, $aa7751, $aa7752, $aa7753, $aa7754, $aa7755, $aa7756, $aa7757, $aa7758, $aa7759, $aa7760, $aa7761, $aa7762, $aa7763, $aa7764, $aa7765, $aa7766, $aa7767, $aa7768, $aa7769, $aa7770, $aa7771, $aa7772, $aa7773, $aa7774, $aa7775, $aa7776, $aa7777, $aa7778, $aa7779, $aa7780, $aa7781, $aa7782, $aa7783, $aa7784, $aa7785, $aa7786, $aa7787, $aa7788, $aa7789, $aa7790, $aa7791, $aa7792, $aa7793, $aa7794, $aa7795, $aa7796, $aa7797, $aa7798, $aa7799, $aa7800, $aa7801, $aa7802, $aa7803, $aa7804, $aa7805, $aa7806, $aa7807, $aa7808, $aa7809, $aa7810, $aa7811, $aa7812, $aa7813, $aa7814, $aa7815, $aa7816, $aa7817, $aa7818, $aa7819, $aa7820, $aa7821, $aa7822, $aa7823, $aa7824, $aa7825, $aa7826, $aa7827, $aa7828, $aa7829, $aa7830, $aa7831, $aa7832, $aa7833, $aa7834, $aa7835, $aa7836, $aa7837, $aa7838, $aa7839, $aa7840, $aa7841, $aa7842, $aa7843, $aa7844, $aa7845, $aa7846, $aa7847, $aa7848, $aa7849, $aa7850, $aa7851, $aa7852, $aa7853, $aa7854, $aa7855, $aa7856, $aa7857, $aa7858, $aa7859, $aa7860, $aa7861, $aa7862, $aa7863, $aa7864, $aa7865, $aa7866, $aa7867, $aa7868, $aa7869, $aa7870, $aa7871, $aa7872, $aa7873, $aa7874, $aa7875, $aa7876, $aa7877, $aa7878, $aa7879, $aa7880, $aa7881, $aa7882, $aa7883, $aa7884, $aa7885, $aa7886, $aa7887, $aa7888, $aa7889, $aa7890, $aa7891, $aa7892, $aa7893, $aa7894, $aa7895, $aa7896, $aa7897, $aa7898, $aa7899, $aa7900, $aa7901, $aa7902, $aa7903, $aa7904, $aa7905, $aa7906, $aa7907, $aa7908, $aa7909, $aa7910, $aa7911, $aa7912, $aa7913, $aa7914, $aa7915, $aa7916, $aa7917, $aa7918, $aa7919, $aa7920, $aa7921, $aa7922, $aa7923, $aa7924, $aa7925, $aa7926, $aa7927, $aa7928, $aa7929, $aa7930, $aa7931, $aa7932, $aa7933, $aa7934, $aa7935, $aa7936, $aa7937, $aa7938, $aa7939, $aa7940, $aa7941, $aa7942, $aa7943, $aa7944, $aa7945, $aa7946, $aa7947, $aa7948, $aa7949, $aa7950, $aa7951, $aa7952, $aa7953, $aa7954, $aa7955, $aa7956, $aa7957, $aa7958, $aa7959, $aa7960, $aa7961, $aa7962, $aa7963, $aa7964, $aa7965, $aa7966, $aa7967, $aa7968, $aa7969, $aa7970, $aa7971, $aa7972, $aa7973, $aa7974, $aa7975, $aa7976, $aa7977, $aa7978, $aa7979, $aa7980, $aa7981, $aa7982, $aa7983, $aa7984, $aa7985, $aa7986, $aa7987, $aa7988, $aa7989, $aa7990, $aa7991, $aa7992, $aa7993, $aa7994, $aa7995, $aa7996, $aa7997, $aa7998, $aa7999, $aa8000, $aa8001, $aa8002, $aa8003, $aa8004, $aa8005, $aa8006, $aa8007, $aa8008, $aa8009, $aa8010, $aa8011, $aa8012, $aa8013, $aa8014, $aa8015, $aa8016, $aa8017, $aa8018, $aa8019, $aa8020, $aa8021, $aa8022, $aa8023, $aa8024, $aa8025, $aa8026, $aa8027, $aa8028, $aa8029, $aa8030, $aa8031, $aa8032, $aa8033, $aa8034, $aa8035, $aa8036, $aa8037, $aa8038, $aa8039, $aa8040, $aa8041, $aa8042, $aa8043, $aa8044, $aa8045, $aa8046, $aa8047, $aa8048, $aa8049, $aa8050, $aa8051, $aa8052, $aa8053, $aa8054, $aa8055, $aa8056, $aa8057, $aa8058, $aa8059, $aa8060, $aa8061, $aa8062, $aa8063, $aa8064, $aa8065, $aa8066, $aa8067, $aa8068, $aa8069, $aa8070, $aa8071, $aa8072, $aa8073, $aa8074, $aa8075, $aa8076, $aa8077, $aa8078, $aa8079, $aa8080, $aa8081, $aa8082, $aa8083, $aa8084, $aa8085, $aa8086, $aa8087, $aa8088, $aa8089, $aa8090, $aa8091, $aa8092, $aa8093, $aa8094, $aa8095, $aa8096, $aa8097, $aa8098, $aa8099, $aa8100, $aa8101, $aa8102, $aa8103, $aa8104, $aa8105, $aa8106, $aa8107, $aa8108, $aa8109, $aa8110, $aa8111, $aa8112, $aa8113, $aa8114, $aa8115, $aa8116, $aa8117, $aa8118, $aa8119, $aa8120, $aa8121, $aa8122, $aa8123, $aa8124, $aa8125, $aa8126, $aa8127, $aa8128, $aa8129, $aa8130, $aa8131, $aa8132, $aa8133, $aa8134, $aa8135, $aa8136, $aa8137, $aa8138, $aa8139, $aa8140, $aa8141, $aa8142, $aa8143, $aa8144, $aa8145, $aa8146, $aa8147, $aa8148, $aa8149, $aa8150, $aa8151, $aa8152, $aa8153, $aa8154, $aa8155, $aa8156, $aa8157, $aa8158, $aa8159, $aa8160, $aa8161, $aa8162, $aa8163, $aa8164, $aa8165, $aa8166, $aa8167, $aa8168, $aa8169, $aa8170, $aa8171, $aa8172, $aa8173, $aa8174, $aa8175, $aa8176, $aa8177, $aa8178, $aa8179, $aa8180, $aa8181, $aa8182, $aa8183, $aa8184, $aa8185, $aa8186, $aa8187, $aa8188, $aa8189, $aa8190, $aa8191, $aa8192; +$aa1: + $p := 1; + goto $bb1; +$aa2: + $p := 2; + goto $bb1; +$aa3: + $p := 3; + goto $bb1; +$aa4: + $p := 4; + goto $bb1; +$aa5: + $p := 5; + goto $bb1; +$aa6: + $p := 6; + goto $bb1; +$aa7: + $p := 7; + goto $bb1; +$aa8: + $p := 8; + goto $bb1; +$aa9: + $p := 9; + goto $bb1; +$aa10: + $p := 10; + goto $bb1; +$aa11: + $p := 11; + goto $bb1; +$aa12: + $p := 12; + goto $bb1; +$aa13: + $p := 13; + goto $bb1; +$aa14: + $p := 14; + goto $bb1; +$aa15: + $p := 15; + goto $bb1; +$aa16: + $p := 16; + goto $bb1; +$aa17: + $p := 17; + goto $bb1; +$aa18: + $p := 18; + goto $bb1; +$aa19: + $p := 19; + goto $bb1; +$aa20: + $p := 20; + goto $bb1; +$aa21: + $p := 21; + goto $bb1; +$aa22: + $p := 22; + goto $bb1; +$aa23: + $p := 23; + goto $bb1; +$aa24: + $p := 24; + goto $bb1; +$aa25: + $p := 25; + goto $bb1; +$aa26: + $p := 26; + goto $bb1; +$aa27: + $p := 27; + goto $bb1; +$aa28: + $p := 28; + goto $bb1; +$aa29: + $p := 29; + goto $bb1; +$aa30: + $p := 30; + goto $bb1; +$aa31: + $p := 31; + goto $bb1; +$aa32: + $p := 32; + goto $bb1; +$aa33: + $p := 33; + goto $bb1; +$aa34: + $p := 34; + goto $bb1; +$aa35: + $p := 35; + goto $bb1; +$aa36: + $p := 36; + goto $bb1; +$aa37: + $p := 37; + goto $bb1; +$aa38: + $p := 38; + goto $bb1; +$aa39: + $p := 39; + goto $bb1; +$aa40: + $p := 40; + goto $bb1; +$aa41: + $p := 41; + goto $bb1; +$aa42: + $p := 42; + goto $bb1; +$aa43: + $p := 43; + goto $bb1; +$aa44: + $p := 44; + goto $bb1; +$aa45: + $p := 45; + goto $bb1; +$aa46: + $p := 46; + goto $bb1; +$aa47: + $p := 47; + goto $bb1; +$aa48: + $p := 48; + goto $bb1; +$aa49: + $p := 49; + goto $bb1; +$aa50: + $p := 50; + goto $bb1; +$aa51: + $p := 51; + goto $bb1; +$aa52: + $p := 52; + goto $bb1; +$aa53: + $p := 53; + goto $bb1; +$aa54: + $p := 54; + goto $bb1; +$aa55: + $p := 55; + goto $bb1; +$aa56: + $p := 56; + goto $bb1; +$aa57: + $p := 57; + goto $bb1; +$aa58: + $p := 58; + goto $bb1; +$aa59: + $p := 59; + goto $bb1; +$aa60: + $p := 60; + goto $bb1; +$aa61: + $p := 61; + goto $bb1; +$aa62: + $p := 62; + goto $bb1; +$aa63: + $p := 63; + goto $bb1; +$aa64: + $p := 64; + goto $bb1; +$aa65: + $p := 65; + goto $bb1; +$aa66: + $p := 66; + goto $bb1; +$aa67: + $p := 67; + goto $bb1; +$aa68: + $p := 68; + goto $bb1; +$aa69: + $p := 69; + goto $bb1; +$aa70: + $p := 70; + goto $bb1; +$aa71: + $p := 71; + goto $bb1; +$aa72: + $p := 72; + goto $bb1; +$aa73: + $p := 73; + goto $bb1; +$aa74: + $p := 74; + goto $bb1; +$aa75: + $p := 75; + goto $bb1; +$aa76: + $p := 76; + goto $bb1; +$aa77: + $p := 77; + goto $bb1; +$aa78: + $p := 78; + goto $bb1; +$aa79: + $p := 79; + goto $bb1; +$aa80: + $p := 80; + goto $bb1; +$aa81: + $p := 81; + goto $bb1; +$aa82: + $p := 82; + goto $bb1; +$aa83: + $p := 83; + goto $bb1; +$aa84: + $p := 84; + goto $bb1; +$aa85: + $p := 85; + goto $bb1; +$aa86: + $p := 86; + goto $bb1; +$aa87: + $p := 87; + goto $bb1; +$aa88: + $p := 88; + goto $bb1; +$aa89: + $p := 89; + goto $bb1; +$aa90: + $p := 90; + goto $bb1; +$aa91: + $p := 91; + goto $bb1; +$aa92: + $p := 92; + goto $bb1; +$aa93: + $p := 93; + goto $bb1; +$aa94: + $p := 94; + goto $bb1; +$aa95: + $p := 95; + goto $bb1; +$aa96: + $p := 96; + goto $bb1; +$aa97: + $p := 97; + goto $bb1; +$aa98: + $p := 98; + goto $bb1; +$aa99: + $p := 99; + goto $bb1; +$aa100: + $p := 100; + goto $bb1; +$aa101: + $p := 101; + goto $bb1; +$aa102: + $p := 102; + goto $bb1; +$aa103: + $p := 103; + goto $bb1; +$aa104: + $p := 104; + goto $bb1; +$aa105: + $p := 105; + goto $bb1; +$aa106: + $p := 106; + goto $bb1; +$aa107: + $p := 107; + goto $bb1; +$aa108: + $p := 108; + goto $bb1; +$aa109: + $p := 109; + goto $bb1; +$aa110: + $p := 110; + goto $bb1; +$aa111: + $p := 111; + goto $bb1; +$aa112: + $p := 112; + goto $bb1; +$aa113: + $p := 113; + goto $bb1; +$aa114: + $p := 114; + goto $bb1; +$aa115: + $p := 115; + goto $bb1; +$aa116: + $p := 116; + goto $bb1; +$aa117: + $p := 117; + goto $bb1; +$aa118: + $p := 118; + goto $bb1; +$aa119: + $p := 119; + goto $bb1; +$aa120: + $p := 120; + goto $bb1; +$aa121: + $p := 121; + goto $bb1; +$aa122: + $p := 122; + goto $bb1; +$aa123: + $p := 123; + goto $bb1; +$aa124: + $p := 124; + goto $bb1; +$aa125: + $p := 125; + goto $bb1; +$aa126: + $p := 126; + goto $bb1; +$aa127: + $p := 127; + goto $bb1; +$aa128: + $p := 128; + goto $bb1; +$aa129: + $p := 129; + goto $bb1; +$aa130: + $p := 130; + goto $bb1; +$aa131: + $p := 131; + goto $bb1; +$aa132: + $p := 132; + goto $bb1; +$aa133: + $p := 133; + goto $bb1; +$aa134: + $p := 134; + goto $bb1; +$aa135: + $p := 135; + goto $bb1; +$aa136: + $p := 136; + goto $bb1; +$aa137: + $p := 137; + goto $bb1; +$aa138: + $p := 138; + goto $bb1; +$aa139: + $p := 139; + goto $bb1; +$aa140: + $p := 140; + goto $bb1; +$aa141: + $p := 141; + goto $bb1; +$aa142: + $p := 142; + goto $bb1; +$aa143: + $p := 143; + goto $bb1; +$aa144: + $p := 144; + goto $bb1; +$aa145: + $p := 145; + goto $bb1; +$aa146: + $p := 146; + goto $bb1; +$aa147: + $p := 147; + goto $bb1; +$aa148: + $p := 148; + goto $bb1; +$aa149: + $p := 149; + goto $bb1; +$aa150: + $p := 150; + goto $bb1; +$aa151: + $p := 151; + goto $bb1; +$aa152: + $p := 152; + goto $bb1; +$aa153: + $p := 153; + goto $bb1; +$aa154: + $p := 154; + goto $bb1; +$aa155: + $p := 155; + goto $bb1; +$aa156: + $p := 156; + goto $bb1; +$aa157: + $p := 157; + goto $bb1; +$aa158: + $p := 158; + goto $bb1; +$aa159: + $p := 159; + goto $bb1; +$aa160: + $p := 160; + goto $bb1; +$aa161: + $p := 161; + goto $bb1; +$aa162: + $p := 162; + goto $bb1; +$aa163: + $p := 163; + goto $bb1; +$aa164: + $p := 164; + goto $bb1; +$aa165: + $p := 165; + goto $bb1; +$aa166: + $p := 166; + goto $bb1; +$aa167: + $p := 167; + goto $bb1; +$aa168: + $p := 168; + goto $bb1; +$aa169: + $p := 169; + goto $bb1; +$aa170: + $p := 170; + goto $bb1; +$aa171: + $p := 171; + goto $bb1; +$aa172: + $p := 172; + goto $bb1; +$aa173: + $p := 173; + goto $bb1; +$aa174: + $p := 174; + goto $bb1; +$aa175: + $p := 175; + goto $bb1; +$aa176: + $p := 176; + goto $bb1; +$aa177: + $p := 177; + goto $bb1; +$aa178: + $p := 178; + goto $bb1; +$aa179: + $p := 179; + goto $bb1; +$aa180: + $p := 180; + goto $bb1; +$aa181: + $p := 181; + goto $bb1; +$aa182: + $p := 182; + goto $bb1; +$aa183: + $p := 183; + goto $bb1; +$aa184: + $p := 184; + goto $bb1; +$aa185: + $p := 185; + goto $bb1; +$aa186: + $p := 186; + goto $bb1; +$aa187: + $p := 187; + goto $bb1; +$aa188: + $p := 188; + goto $bb1; +$aa189: + $p := 189; + goto $bb1; +$aa190: + $p := 190; + goto $bb1; +$aa191: + $p := 191; + goto $bb1; +$aa192: + $p := 192; + goto $bb1; +$aa193: + $p := 193; + goto $bb1; +$aa194: + $p := 194; + goto $bb1; +$aa195: + $p := 195; + goto $bb1; +$aa196: + $p := 196; + goto $bb1; +$aa197: + $p := 197; + goto $bb1; +$aa198: + $p := 198; + goto $bb1; +$aa199: + $p := 199; + goto $bb1; +$aa200: + $p := 200; + goto $bb1; +$aa201: + $p := 201; + goto $bb1; +$aa202: + $p := 202; + goto $bb1; +$aa203: + $p := 203; + goto $bb1; +$aa204: + $p := 204; + goto $bb1; +$aa205: + $p := 205; + goto $bb1; +$aa206: + $p := 206; + goto $bb1; +$aa207: + $p := 207; + goto $bb1; +$aa208: + $p := 208; + goto $bb1; +$aa209: + $p := 209; + goto $bb1; +$aa210: + $p := 210; + goto $bb1; +$aa211: + $p := 211; + goto $bb1; +$aa212: + $p := 212; + goto $bb1; +$aa213: + $p := 213; + goto $bb1; +$aa214: + $p := 214; + goto $bb1; +$aa215: + $p := 215; + goto $bb1; +$aa216: + $p := 216; + goto $bb1; +$aa217: + $p := 217; + goto $bb1; +$aa218: + $p := 218; + goto $bb1; +$aa219: + $p := 219; + goto $bb1; +$aa220: + $p := 220; + goto $bb1; +$aa221: + $p := 221; + goto $bb1; +$aa222: + $p := 222; + goto $bb1; +$aa223: + $p := 223; + goto $bb1; +$aa224: + $p := 224; + goto $bb1; +$aa225: + $p := 225; + goto $bb1; +$aa226: + $p := 226; + goto $bb1; +$aa227: + $p := 227; + goto $bb1; +$aa228: + $p := 228; + goto $bb1; +$aa229: + $p := 229; + goto $bb1; +$aa230: + $p := 230; + goto $bb1; +$aa231: + $p := 231; + goto $bb1; +$aa232: + $p := 232; + goto $bb1; +$aa233: + $p := 233; + goto $bb1; +$aa234: + $p := 234; + goto $bb1; +$aa235: + $p := 235; + goto $bb1; +$aa236: + $p := 236; + goto $bb1; +$aa237: + $p := 237; + goto $bb1; +$aa238: + $p := 238; + goto $bb1; +$aa239: + $p := 239; + goto $bb1; +$aa240: + $p := 240; + goto $bb1; +$aa241: + $p := 241; + goto $bb1; +$aa242: + $p := 242; + goto $bb1; +$aa243: + $p := 243; + goto $bb1; +$aa244: + $p := 244; + goto $bb1; +$aa245: + $p := 245; + goto $bb1; +$aa246: + $p := 246; + goto $bb1; +$aa247: + $p := 247; + goto $bb1; +$aa248: + $p := 248; + goto $bb1; +$aa249: + $p := 249; + goto $bb1; +$aa250: + $p := 250; + goto $bb1; +$aa251: + $p := 251; + goto $bb1; +$aa252: + $p := 252; + goto $bb1; +$aa253: + $p := 253; + goto $bb1; +$aa254: + $p := 254; + goto $bb1; +$aa255: + $p := 255; + goto $bb1; +$aa256: + $p := 256; + goto $bb1; +$aa257: + $p := 257; + goto $bb1; +$aa258: + $p := 258; + goto $bb1; +$aa259: + $p := 259; + goto $bb1; +$aa260: + $p := 260; + goto $bb1; +$aa261: + $p := 261; + goto $bb1; +$aa262: + $p := 262; + goto $bb1; +$aa263: + $p := 263; + goto $bb1; +$aa264: + $p := 264; + goto $bb1; +$aa265: + $p := 265; + goto $bb1; +$aa266: + $p := 266; + goto $bb1; +$aa267: + $p := 267; + goto $bb1; +$aa268: + $p := 268; + goto $bb1; +$aa269: + $p := 269; + goto $bb1; +$aa270: + $p := 270; + goto $bb1; +$aa271: + $p := 271; + goto $bb1; +$aa272: + $p := 272; + goto $bb1; +$aa273: + $p := 273; + goto $bb1; +$aa274: + $p := 274; + goto $bb1; +$aa275: + $p := 275; + goto $bb1; +$aa276: + $p := 276; + goto $bb1; +$aa277: + $p := 277; + goto $bb1; +$aa278: + $p := 278; + goto $bb1; +$aa279: + $p := 279; + goto $bb1; +$aa280: + $p := 280; + goto $bb1; +$aa281: + $p := 281; + goto $bb1; +$aa282: + $p := 282; + goto $bb1; +$aa283: + $p := 283; + goto $bb1; +$aa284: + $p := 284; + goto $bb1; +$aa285: + $p := 285; + goto $bb1; +$aa286: + $p := 286; + goto $bb1; +$aa287: + $p := 287; + goto $bb1; +$aa288: + $p := 288; + goto $bb1; +$aa289: + $p := 289; + goto $bb1; +$aa290: + $p := 290; + goto $bb1; +$aa291: + $p := 291; + goto $bb1; +$aa292: + $p := 292; + goto $bb1; +$aa293: + $p := 293; + goto $bb1; +$aa294: + $p := 294; + goto $bb1; +$aa295: + $p := 295; + goto $bb1; +$aa296: + $p := 296; + goto $bb1; +$aa297: + $p := 297; + goto $bb1; +$aa298: + $p := 298; + goto $bb1; +$aa299: + $p := 299; + goto $bb1; +$aa300: + $p := 300; + goto $bb1; +$aa301: + $p := 301; + goto $bb1; +$aa302: + $p := 302; + goto $bb1; +$aa303: + $p := 303; + goto $bb1; +$aa304: + $p := 304; + goto $bb1; +$aa305: + $p := 305; + goto $bb1; +$aa306: + $p := 306; + goto $bb1; +$aa307: + $p := 307; + goto $bb1; +$aa308: + $p := 308; + goto $bb1; +$aa309: + $p := 309; + goto $bb1; +$aa310: + $p := 310; + goto $bb1; +$aa311: + $p := 311; + goto $bb1; +$aa312: + $p := 312; + goto $bb1; +$aa313: + $p := 313; + goto $bb1; +$aa314: + $p := 314; + goto $bb1; +$aa315: + $p := 315; + goto $bb1; +$aa316: + $p := 316; + goto $bb1; +$aa317: + $p := 317; + goto $bb1; +$aa318: + $p := 318; + goto $bb1; +$aa319: + $p := 319; + goto $bb1; +$aa320: + $p := 320; + goto $bb1; +$aa321: + $p := 321; + goto $bb1; +$aa322: + $p := 322; + goto $bb1; +$aa323: + $p := 323; + goto $bb1; +$aa324: + $p := 324; + goto $bb1; +$aa325: + $p := 325; + goto $bb1; +$aa326: + $p := 326; + goto $bb1; +$aa327: + $p := 327; + goto $bb1; +$aa328: + $p := 328; + goto $bb1; +$aa329: + $p := 329; + goto $bb1; +$aa330: + $p := 330; + goto $bb1; +$aa331: + $p := 331; + goto $bb1; +$aa332: + $p := 332; + goto $bb1; +$aa333: + $p := 333; + goto $bb1; +$aa334: + $p := 334; + goto $bb1; +$aa335: + $p := 335; + goto $bb1; +$aa336: + $p := 336; + goto $bb1; +$aa337: + $p := 337; + goto $bb1; +$aa338: + $p := 338; + goto $bb1; +$aa339: + $p := 339; + goto $bb1; +$aa340: + $p := 340; + goto $bb1; +$aa341: + $p := 341; + goto $bb1; +$aa342: + $p := 342; + goto $bb1; +$aa343: + $p := 343; + goto $bb1; +$aa344: + $p := 344; + goto $bb1; +$aa345: + $p := 345; + goto $bb1; +$aa346: + $p := 346; + goto $bb1; +$aa347: + $p := 347; + goto $bb1; +$aa348: + $p := 348; + goto $bb1; +$aa349: + $p := 349; + goto $bb1; +$aa350: + $p := 350; + goto $bb1; +$aa351: + $p := 351; + goto $bb1; +$aa352: + $p := 352; + goto $bb1; +$aa353: + $p := 353; + goto $bb1; +$aa354: + $p := 354; + goto $bb1; +$aa355: + $p := 355; + goto $bb1; +$aa356: + $p := 356; + goto $bb1; +$aa357: + $p := 357; + goto $bb1; +$aa358: + $p := 358; + goto $bb1; +$aa359: + $p := 359; + goto $bb1; +$aa360: + $p := 360; + goto $bb1; +$aa361: + $p := 361; + goto $bb1; +$aa362: + $p := 362; + goto $bb1; +$aa363: + $p := 363; + goto $bb1; +$aa364: + $p := 364; + goto $bb1; +$aa365: + $p := 365; + goto $bb1; +$aa366: + $p := 366; + goto $bb1; +$aa367: + $p := 367; + goto $bb1; +$aa368: + $p := 368; + goto $bb1; +$aa369: + $p := 369; + goto $bb1; +$aa370: + $p := 370; + goto $bb1; +$aa371: + $p := 371; + goto $bb1; +$aa372: + $p := 372; + goto $bb1; +$aa373: + $p := 373; + goto $bb1; +$aa374: + $p := 374; + goto $bb1; +$aa375: + $p := 375; + goto $bb1; +$aa376: + $p := 376; + goto $bb1; +$aa377: + $p := 377; + goto $bb1; +$aa378: + $p := 378; + goto $bb1; +$aa379: + $p := 379; + goto $bb1; +$aa380: + $p := 380; + goto $bb1; +$aa381: + $p := 381; + goto $bb1; +$aa382: + $p := 382; + goto $bb1; +$aa383: + $p := 383; + goto $bb1; +$aa384: + $p := 384; + goto $bb1; +$aa385: + $p := 385; + goto $bb1; +$aa386: + $p := 386; + goto $bb1; +$aa387: + $p := 387; + goto $bb1; +$aa388: + $p := 388; + goto $bb1; +$aa389: + $p := 389; + goto $bb1; +$aa390: + $p := 390; + goto $bb1; +$aa391: + $p := 391; + goto $bb1; +$aa392: + $p := 392; + goto $bb1; +$aa393: + $p := 393; + goto $bb1; +$aa394: + $p := 394; + goto $bb1; +$aa395: + $p := 395; + goto $bb1; +$aa396: + $p := 396; + goto $bb1; +$aa397: + $p := 397; + goto $bb1; +$aa398: + $p := 398; + goto $bb1; +$aa399: + $p := 399; + goto $bb1; +$aa400: + $p := 400; + goto $bb1; +$aa401: + $p := 401; + goto $bb1; +$aa402: + $p := 402; + goto $bb1; +$aa403: + $p := 403; + goto $bb1; +$aa404: + $p := 404; + goto $bb1; +$aa405: + $p := 405; + goto $bb1; +$aa406: + $p := 406; + goto $bb1; +$aa407: + $p := 407; + goto $bb1; +$aa408: + $p := 408; + goto $bb1; +$aa409: + $p := 409; + goto $bb1; +$aa410: + $p := 410; + goto $bb1; +$aa411: + $p := 411; + goto $bb1; +$aa412: + $p := 412; + goto $bb1; +$aa413: + $p := 413; + goto $bb1; +$aa414: + $p := 414; + goto $bb1; +$aa415: + $p := 415; + goto $bb1; +$aa416: + $p := 416; + goto $bb1; +$aa417: + $p := 417; + goto $bb1; +$aa418: + $p := 418; + goto $bb1; +$aa419: + $p := 419; + goto $bb1; +$aa420: + $p := 420; + goto $bb1; +$aa421: + $p := 421; + goto $bb1; +$aa422: + $p := 422; + goto $bb1; +$aa423: + $p := 423; + goto $bb1; +$aa424: + $p := 424; + goto $bb1; +$aa425: + $p := 425; + goto $bb1; +$aa426: + $p := 426; + goto $bb1; +$aa427: + $p := 427; + goto $bb1; +$aa428: + $p := 428; + goto $bb1; +$aa429: + $p := 429; + goto $bb1; +$aa430: + $p := 430; + goto $bb1; +$aa431: + $p := 431; + goto $bb1; +$aa432: + $p := 432; + goto $bb1; +$aa433: + $p := 433; + goto $bb1; +$aa434: + $p := 434; + goto $bb1; +$aa435: + $p := 435; + goto $bb1; +$aa436: + $p := 436; + goto $bb1; +$aa437: + $p := 437; + goto $bb1; +$aa438: + $p := 438; + goto $bb1; +$aa439: + $p := 439; + goto $bb1; +$aa440: + $p := 440; + goto $bb1; +$aa441: + $p := 441; + goto $bb1; +$aa442: + $p := 442; + goto $bb1; +$aa443: + $p := 443; + goto $bb1; +$aa444: + $p := 444; + goto $bb1; +$aa445: + $p := 445; + goto $bb1; +$aa446: + $p := 446; + goto $bb1; +$aa447: + $p := 447; + goto $bb1; +$aa448: + $p := 448; + goto $bb1; +$aa449: + $p := 449; + goto $bb1; +$aa450: + $p := 450; + goto $bb1; +$aa451: + $p := 451; + goto $bb1; +$aa452: + $p := 452; + goto $bb1; +$aa453: + $p := 453; + goto $bb1; +$aa454: + $p := 454; + goto $bb1; +$aa455: + $p := 455; + goto $bb1; +$aa456: + $p := 456; + goto $bb1; +$aa457: + $p := 457; + goto $bb1; +$aa458: + $p := 458; + goto $bb1; +$aa459: + $p := 459; + goto $bb1; +$aa460: + $p := 460; + goto $bb1; +$aa461: + $p := 461; + goto $bb1; +$aa462: + $p := 462; + goto $bb1; +$aa463: + $p := 463; + goto $bb1; +$aa464: + $p := 464; + goto $bb1; +$aa465: + $p := 465; + goto $bb1; +$aa466: + $p := 466; + goto $bb1; +$aa467: + $p := 467; + goto $bb1; +$aa468: + $p := 468; + goto $bb1; +$aa469: + $p := 469; + goto $bb1; +$aa470: + $p := 470; + goto $bb1; +$aa471: + $p := 471; + goto $bb1; +$aa472: + $p := 472; + goto $bb1; +$aa473: + $p := 473; + goto $bb1; +$aa474: + $p := 474; + goto $bb1; +$aa475: + $p := 475; + goto $bb1; +$aa476: + $p := 476; + goto $bb1; +$aa477: + $p := 477; + goto $bb1; +$aa478: + $p := 478; + goto $bb1; +$aa479: + $p := 479; + goto $bb1; +$aa480: + $p := 480; + goto $bb1; +$aa481: + $p := 481; + goto $bb1; +$aa482: + $p := 482; + goto $bb1; +$aa483: + $p := 483; + goto $bb1; +$aa484: + $p := 484; + goto $bb1; +$aa485: + $p := 485; + goto $bb1; +$aa486: + $p := 486; + goto $bb1; +$aa487: + $p := 487; + goto $bb1; +$aa488: + $p := 488; + goto $bb1; +$aa489: + $p := 489; + goto $bb1; +$aa490: + $p := 490; + goto $bb1; +$aa491: + $p := 491; + goto $bb1; +$aa492: + $p := 492; + goto $bb1; +$aa493: + $p := 493; + goto $bb1; +$aa494: + $p := 494; + goto $bb1; +$aa495: + $p := 495; + goto $bb1; +$aa496: + $p := 496; + goto $bb1; +$aa497: + $p := 497; + goto $bb1; +$aa498: + $p := 498; + goto $bb1; +$aa499: + $p := 499; + goto $bb1; +$aa500: + $p := 500; + goto $bb1; +$aa501: + $p := 501; + goto $bb1; +$aa502: + $p := 502; + goto $bb1; +$aa503: + $p := 503; + goto $bb1; +$aa504: + $p := 504; + goto $bb1; +$aa505: + $p := 505; + goto $bb1; +$aa506: + $p := 506; + goto $bb1; +$aa507: + $p := 507; + goto $bb1; +$aa508: + $p := 508; + goto $bb1; +$aa509: + $p := 509; + goto $bb1; +$aa510: + $p := 510; + goto $bb1; +$aa511: + $p := 511; + goto $bb1; +$aa512: + $p := 512; + goto $bb1; +$aa513: + $p := 513; + goto $bb1; +$aa514: + $p := 514; + goto $bb1; +$aa515: + $p := 515; + goto $bb1; +$aa516: + $p := 516; + goto $bb1; +$aa517: + $p := 517; + goto $bb1; +$aa518: + $p := 518; + goto $bb1; +$aa519: + $p := 519; + goto $bb1; +$aa520: + $p := 520; + goto $bb1; +$aa521: + $p := 521; + goto $bb1; +$aa522: + $p := 522; + goto $bb1; +$aa523: + $p := 523; + goto $bb1; +$aa524: + $p := 524; + goto $bb1; +$aa525: + $p := 525; + goto $bb1; +$aa526: + $p := 526; + goto $bb1; +$aa527: + $p := 527; + goto $bb1; +$aa528: + $p := 528; + goto $bb1; +$aa529: + $p := 529; + goto $bb1; +$aa530: + $p := 530; + goto $bb1; +$aa531: + $p := 531; + goto $bb1; +$aa532: + $p := 532; + goto $bb1; +$aa533: + $p := 533; + goto $bb1; +$aa534: + $p := 534; + goto $bb1; +$aa535: + $p := 535; + goto $bb1; +$aa536: + $p := 536; + goto $bb1; +$aa537: + $p := 537; + goto $bb1; +$aa538: + $p := 538; + goto $bb1; +$aa539: + $p := 539; + goto $bb1; +$aa540: + $p := 540; + goto $bb1; +$aa541: + $p := 541; + goto $bb1; +$aa542: + $p := 542; + goto $bb1; +$aa543: + $p := 543; + goto $bb1; +$aa544: + $p := 544; + goto $bb1; +$aa545: + $p := 545; + goto $bb1; +$aa546: + $p := 546; + goto $bb1; +$aa547: + $p := 547; + goto $bb1; +$aa548: + $p := 548; + goto $bb1; +$aa549: + $p := 549; + goto $bb1; +$aa550: + $p := 550; + goto $bb1; +$aa551: + $p := 551; + goto $bb1; +$aa552: + $p := 552; + goto $bb1; +$aa553: + $p := 553; + goto $bb1; +$aa554: + $p := 554; + goto $bb1; +$aa555: + $p := 555; + goto $bb1; +$aa556: + $p := 556; + goto $bb1; +$aa557: + $p := 557; + goto $bb1; +$aa558: + $p := 558; + goto $bb1; +$aa559: + $p := 559; + goto $bb1; +$aa560: + $p := 560; + goto $bb1; +$aa561: + $p := 561; + goto $bb1; +$aa562: + $p := 562; + goto $bb1; +$aa563: + $p := 563; + goto $bb1; +$aa564: + $p := 564; + goto $bb1; +$aa565: + $p := 565; + goto $bb1; +$aa566: + $p := 566; + goto $bb1; +$aa567: + $p := 567; + goto $bb1; +$aa568: + $p := 568; + goto $bb1; +$aa569: + $p := 569; + goto $bb1; +$aa570: + $p := 570; + goto $bb1; +$aa571: + $p := 571; + goto $bb1; +$aa572: + $p := 572; + goto $bb1; +$aa573: + $p := 573; + goto $bb1; +$aa574: + $p := 574; + goto $bb1; +$aa575: + $p := 575; + goto $bb1; +$aa576: + $p := 576; + goto $bb1; +$aa577: + $p := 577; + goto $bb1; +$aa578: + $p := 578; + goto $bb1; +$aa579: + $p := 579; + goto $bb1; +$aa580: + $p := 580; + goto $bb1; +$aa581: + $p := 581; + goto $bb1; +$aa582: + $p := 582; + goto $bb1; +$aa583: + $p := 583; + goto $bb1; +$aa584: + $p := 584; + goto $bb1; +$aa585: + $p := 585; + goto $bb1; +$aa586: + $p := 586; + goto $bb1; +$aa587: + $p := 587; + goto $bb1; +$aa588: + $p := 588; + goto $bb1; +$aa589: + $p := 589; + goto $bb1; +$aa590: + $p := 590; + goto $bb1; +$aa591: + $p := 591; + goto $bb1; +$aa592: + $p := 592; + goto $bb1; +$aa593: + $p := 593; + goto $bb1; +$aa594: + $p := 594; + goto $bb1; +$aa595: + $p := 595; + goto $bb1; +$aa596: + $p := 596; + goto $bb1; +$aa597: + $p := 597; + goto $bb1; +$aa598: + $p := 598; + goto $bb1; +$aa599: + $p := 599; + goto $bb1; +$aa600: + $p := 600; + goto $bb1; +$aa601: + $p := 601; + goto $bb1; +$aa602: + $p := 602; + goto $bb1; +$aa603: + $p := 603; + goto $bb1; +$aa604: + $p := 604; + goto $bb1; +$aa605: + $p := 605; + goto $bb1; +$aa606: + $p := 606; + goto $bb1; +$aa607: + $p := 607; + goto $bb1; +$aa608: + $p := 608; + goto $bb1; +$aa609: + $p := 609; + goto $bb1; +$aa610: + $p := 610; + goto $bb1; +$aa611: + $p := 611; + goto $bb1; +$aa612: + $p := 612; + goto $bb1; +$aa613: + $p := 613; + goto $bb1; +$aa614: + $p := 614; + goto $bb1; +$aa615: + $p := 615; + goto $bb1; +$aa616: + $p := 616; + goto $bb1; +$aa617: + $p := 617; + goto $bb1; +$aa618: + $p := 618; + goto $bb1; +$aa619: + $p := 619; + goto $bb1; +$aa620: + $p := 620; + goto $bb1; +$aa621: + $p := 621; + goto $bb1; +$aa622: + $p := 622; + goto $bb1; +$aa623: + $p := 623; + goto $bb1; +$aa624: + $p := 624; + goto $bb1; +$aa625: + $p := 625; + goto $bb1; +$aa626: + $p := 626; + goto $bb1; +$aa627: + $p := 627; + goto $bb1; +$aa628: + $p := 628; + goto $bb1; +$aa629: + $p := 629; + goto $bb1; +$aa630: + $p := 630; + goto $bb1; +$aa631: + $p := 631; + goto $bb1; +$aa632: + $p := 632; + goto $bb1; +$aa633: + $p := 633; + goto $bb1; +$aa634: + $p := 634; + goto $bb1; +$aa635: + $p := 635; + goto $bb1; +$aa636: + $p := 636; + goto $bb1; +$aa637: + $p := 637; + goto $bb1; +$aa638: + $p := 638; + goto $bb1; +$aa639: + $p := 639; + goto $bb1; +$aa640: + $p := 640; + goto $bb1; +$aa641: + $p := 641; + goto $bb1; +$aa642: + $p := 642; + goto $bb1; +$aa643: + $p := 643; + goto $bb1; +$aa644: + $p := 644; + goto $bb1; +$aa645: + $p := 645; + goto $bb1; +$aa646: + $p := 646; + goto $bb1; +$aa647: + $p := 647; + goto $bb1; +$aa648: + $p := 648; + goto $bb1; +$aa649: + $p := 649; + goto $bb1; +$aa650: + $p := 650; + goto $bb1; +$aa651: + $p := 651; + goto $bb1; +$aa652: + $p := 652; + goto $bb1; +$aa653: + $p := 653; + goto $bb1; +$aa654: + $p := 654; + goto $bb1; +$aa655: + $p := 655; + goto $bb1; +$aa656: + $p := 656; + goto $bb1; +$aa657: + $p := 657; + goto $bb1; +$aa658: + $p := 658; + goto $bb1; +$aa659: + $p := 659; + goto $bb1; +$aa660: + $p := 660; + goto $bb1; +$aa661: + $p := 661; + goto $bb1; +$aa662: + $p := 662; + goto $bb1; +$aa663: + $p := 663; + goto $bb1; +$aa664: + $p := 664; + goto $bb1; +$aa665: + $p := 665; + goto $bb1; +$aa666: + $p := 666; + goto $bb1; +$aa667: + $p := 667; + goto $bb1; +$aa668: + $p := 668; + goto $bb1; +$aa669: + $p := 669; + goto $bb1; +$aa670: + $p := 670; + goto $bb1; +$aa671: + $p := 671; + goto $bb1; +$aa672: + $p := 672; + goto $bb1; +$aa673: + $p := 673; + goto $bb1; +$aa674: + $p := 674; + goto $bb1; +$aa675: + $p := 675; + goto $bb1; +$aa676: + $p := 676; + goto $bb1; +$aa677: + $p := 677; + goto $bb1; +$aa678: + $p := 678; + goto $bb1; +$aa679: + $p := 679; + goto $bb1; +$aa680: + $p := 680; + goto $bb1; +$aa681: + $p := 681; + goto $bb1; +$aa682: + $p := 682; + goto $bb1; +$aa683: + $p := 683; + goto $bb1; +$aa684: + $p := 684; + goto $bb1; +$aa685: + $p := 685; + goto $bb1; +$aa686: + $p := 686; + goto $bb1; +$aa687: + $p := 687; + goto $bb1; +$aa688: + $p := 688; + goto $bb1; +$aa689: + $p := 689; + goto $bb1; +$aa690: + $p := 690; + goto $bb1; +$aa691: + $p := 691; + goto $bb1; +$aa692: + $p := 692; + goto $bb1; +$aa693: + $p := 693; + goto $bb1; +$aa694: + $p := 694; + goto $bb1; +$aa695: + $p := 695; + goto $bb1; +$aa696: + $p := 696; + goto $bb1; +$aa697: + $p := 697; + goto $bb1; +$aa698: + $p := 698; + goto $bb1; +$aa699: + $p := 699; + goto $bb1; +$aa700: + $p := 700; + goto $bb1; +$aa701: + $p := 701; + goto $bb1; +$aa702: + $p := 702; + goto $bb1; +$aa703: + $p := 703; + goto $bb1; +$aa704: + $p := 704; + goto $bb1; +$aa705: + $p := 705; + goto $bb1; +$aa706: + $p := 706; + goto $bb1; +$aa707: + $p := 707; + goto $bb1; +$aa708: + $p := 708; + goto $bb1; +$aa709: + $p := 709; + goto $bb1; +$aa710: + $p := 710; + goto $bb1; +$aa711: + $p := 711; + goto $bb1; +$aa712: + $p := 712; + goto $bb1; +$aa713: + $p := 713; + goto $bb1; +$aa714: + $p := 714; + goto $bb1; +$aa715: + $p := 715; + goto $bb1; +$aa716: + $p := 716; + goto $bb1; +$aa717: + $p := 717; + goto $bb1; +$aa718: + $p := 718; + goto $bb1; +$aa719: + $p := 719; + goto $bb1; +$aa720: + $p := 720; + goto $bb1; +$aa721: + $p := 721; + goto $bb1; +$aa722: + $p := 722; + goto $bb1; +$aa723: + $p := 723; + goto $bb1; +$aa724: + $p := 724; + goto $bb1; +$aa725: + $p := 725; + goto $bb1; +$aa726: + $p := 726; + goto $bb1; +$aa727: + $p := 727; + goto $bb1; +$aa728: + $p := 728; + goto $bb1; +$aa729: + $p := 729; + goto $bb1; +$aa730: + $p := 730; + goto $bb1; +$aa731: + $p := 731; + goto $bb1; +$aa732: + $p := 732; + goto $bb1; +$aa733: + $p := 733; + goto $bb1; +$aa734: + $p := 734; + goto $bb1; +$aa735: + $p := 735; + goto $bb1; +$aa736: + $p := 736; + goto $bb1; +$aa737: + $p := 737; + goto $bb1; +$aa738: + $p := 738; + goto $bb1; +$aa739: + $p := 739; + goto $bb1; +$aa740: + $p := 740; + goto $bb1; +$aa741: + $p := 741; + goto $bb1; +$aa742: + $p := 742; + goto $bb1; +$aa743: + $p := 743; + goto $bb1; +$aa744: + $p := 744; + goto $bb1; +$aa745: + $p := 745; + goto $bb1; +$aa746: + $p := 746; + goto $bb1; +$aa747: + $p := 747; + goto $bb1; +$aa748: + $p := 748; + goto $bb1; +$aa749: + $p := 749; + goto $bb1; +$aa750: + $p := 750; + goto $bb1; +$aa751: + $p := 751; + goto $bb1; +$aa752: + $p := 752; + goto $bb1; +$aa753: + $p := 753; + goto $bb1; +$aa754: + $p := 754; + goto $bb1; +$aa755: + $p := 755; + goto $bb1; +$aa756: + $p := 756; + goto $bb1; +$aa757: + $p := 757; + goto $bb1; +$aa758: + $p := 758; + goto $bb1; +$aa759: + $p := 759; + goto $bb1; +$aa760: + $p := 760; + goto $bb1; +$aa761: + $p := 761; + goto $bb1; +$aa762: + $p := 762; + goto $bb1; +$aa763: + $p := 763; + goto $bb1; +$aa764: + $p := 764; + goto $bb1; +$aa765: + $p := 765; + goto $bb1; +$aa766: + $p := 766; + goto $bb1; +$aa767: + $p := 767; + goto $bb1; +$aa768: + $p := 768; + goto $bb1; +$aa769: + $p := 769; + goto $bb1; +$aa770: + $p := 770; + goto $bb1; +$aa771: + $p := 771; + goto $bb1; +$aa772: + $p := 772; + goto $bb1; +$aa773: + $p := 773; + goto $bb1; +$aa774: + $p := 774; + goto $bb1; +$aa775: + $p := 775; + goto $bb1; +$aa776: + $p := 776; + goto $bb1; +$aa777: + $p := 777; + goto $bb1; +$aa778: + $p := 778; + goto $bb1; +$aa779: + $p := 779; + goto $bb1; +$aa780: + $p := 780; + goto $bb1; +$aa781: + $p := 781; + goto $bb1; +$aa782: + $p := 782; + goto $bb1; +$aa783: + $p := 783; + goto $bb1; +$aa784: + $p := 784; + goto $bb1; +$aa785: + $p := 785; + goto $bb1; +$aa786: + $p := 786; + goto $bb1; +$aa787: + $p := 787; + goto $bb1; +$aa788: + $p := 788; + goto $bb1; +$aa789: + $p := 789; + goto $bb1; +$aa790: + $p := 790; + goto $bb1; +$aa791: + $p := 791; + goto $bb1; +$aa792: + $p := 792; + goto $bb1; +$aa793: + $p := 793; + goto $bb1; +$aa794: + $p := 794; + goto $bb1; +$aa795: + $p := 795; + goto $bb1; +$aa796: + $p := 796; + goto $bb1; +$aa797: + $p := 797; + goto $bb1; +$aa798: + $p := 798; + goto $bb1; +$aa799: + $p := 799; + goto $bb1; +$aa800: + $p := 800; + goto $bb1; +$aa801: + $p := 801; + goto $bb1; +$aa802: + $p := 802; + goto $bb1; +$aa803: + $p := 803; + goto $bb1; +$aa804: + $p := 804; + goto $bb1; +$aa805: + $p := 805; + goto $bb1; +$aa806: + $p := 806; + goto $bb1; +$aa807: + $p := 807; + goto $bb1; +$aa808: + $p := 808; + goto $bb1; +$aa809: + $p := 809; + goto $bb1; +$aa810: + $p := 810; + goto $bb1; +$aa811: + $p := 811; + goto $bb1; +$aa812: + $p := 812; + goto $bb1; +$aa813: + $p := 813; + goto $bb1; +$aa814: + $p := 814; + goto $bb1; +$aa815: + $p := 815; + goto $bb1; +$aa816: + $p := 816; + goto $bb1; +$aa817: + $p := 817; + goto $bb1; +$aa818: + $p := 818; + goto $bb1; +$aa819: + $p := 819; + goto $bb1; +$aa820: + $p := 820; + goto $bb1; +$aa821: + $p := 821; + goto $bb1; +$aa822: + $p := 822; + goto $bb1; +$aa823: + $p := 823; + goto $bb1; +$aa824: + $p := 824; + goto $bb1; +$aa825: + $p := 825; + goto $bb1; +$aa826: + $p := 826; + goto $bb1; +$aa827: + $p := 827; + goto $bb1; +$aa828: + $p := 828; + goto $bb1; +$aa829: + $p := 829; + goto $bb1; +$aa830: + $p := 830; + goto $bb1; +$aa831: + $p := 831; + goto $bb1; +$aa832: + $p := 832; + goto $bb1; +$aa833: + $p := 833; + goto $bb1; +$aa834: + $p := 834; + goto $bb1; +$aa835: + $p := 835; + goto $bb1; +$aa836: + $p := 836; + goto $bb1; +$aa837: + $p := 837; + goto $bb1; +$aa838: + $p := 838; + goto $bb1; +$aa839: + $p := 839; + goto $bb1; +$aa840: + $p := 840; + goto $bb1; +$aa841: + $p := 841; + goto $bb1; +$aa842: + $p := 842; + goto $bb1; +$aa843: + $p := 843; + goto $bb1; +$aa844: + $p := 844; + goto $bb1; +$aa845: + $p := 845; + goto $bb1; +$aa846: + $p := 846; + goto $bb1; +$aa847: + $p := 847; + goto $bb1; +$aa848: + $p := 848; + goto $bb1; +$aa849: + $p := 849; + goto $bb1; +$aa850: + $p := 850; + goto $bb1; +$aa851: + $p := 851; + goto $bb1; +$aa852: + $p := 852; + goto $bb1; +$aa853: + $p := 853; + goto $bb1; +$aa854: + $p := 854; + goto $bb1; +$aa855: + $p := 855; + goto $bb1; +$aa856: + $p := 856; + goto $bb1; +$aa857: + $p := 857; + goto $bb1; +$aa858: + $p := 858; + goto $bb1; +$aa859: + $p := 859; + goto $bb1; +$aa860: + $p := 860; + goto $bb1; +$aa861: + $p := 861; + goto $bb1; +$aa862: + $p := 862; + goto $bb1; +$aa863: + $p := 863; + goto $bb1; +$aa864: + $p := 864; + goto $bb1; +$aa865: + $p := 865; + goto $bb1; +$aa866: + $p := 866; + goto $bb1; +$aa867: + $p := 867; + goto $bb1; +$aa868: + $p := 868; + goto $bb1; +$aa869: + $p := 869; + goto $bb1; +$aa870: + $p := 870; + goto $bb1; +$aa871: + $p := 871; + goto $bb1; +$aa872: + $p := 872; + goto $bb1; +$aa873: + $p := 873; + goto $bb1; +$aa874: + $p := 874; + goto $bb1; +$aa875: + $p := 875; + goto $bb1; +$aa876: + $p := 876; + goto $bb1; +$aa877: + $p := 877; + goto $bb1; +$aa878: + $p := 878; + goto $bb1; +$aa879: + $p := 879; + goto $bb1; +$aa880: + $p := 880; + goto $bb1; +$aa881: + $p := 881; + goto $bb1; +$aa882: + $p := 882; + goto $bb1; +$aa883: + $p := 883; + goto $bb1; +$aa884: + $p := 884; + goto $bb1; +$aa885: + $p := 885; + goto $bb1; +$aa886: + $p := 886; + goto $bb1; +$aa887: + $p := 887; + goto $bb1; +$aa888: + $p := 888; + goto $bb1; +$aa889: + $p := 889; + goto $bb1; +$aa890: + $p := 890; + goto $bb1; +$aa891: + $p := 891; + goto $bb1; +$aa892: + $p := 892; + goto $bb1; +$aa893: + $p := 893; + goto $bb1; +$aa894: + $p := 894; + goto $bb1; +$aa895: + $p := 895; + goto $bb1; +$aa896: + $p := 896; + goto $bb1; +$aa897: + $p := 897; + goto $bb1; +$aa898: + $p := 898; + goto $bb1; +$aa899: + $p := 899; + goto $bb1; +$aa900: + $p := 900; + goto $bb1; +$aa901: + $p := 901; + goto $bb1; +$aa902: + $p := 902; + goto $bb1; +$aa903: + $p := 903; + goto $bb1; +$aa904: + $p := 904; + goto $bb1; +$aa905: + $p := 905; + goto $bb1; +$aa906: + $p := 906; + goto $bb1; +$aa907: + $p := 907; + goto $bb1; +$aa908: + $p := 908; + goto $bb1; +$aa909: + $p := 909; + goto $bb1; +$aa910: + $p := 910; + goto $bb1; +$aa911: + $p := 911; + goto $bb1; +$aa912: + $p := 912; + goto $bb1; +$aa913: + $p := 913; + goto $bb1; +$aa914: + $p := 914; + goto $bb1; +$aa915: + $p := 915; + goto $bb1; +$aa916: + $p := 916; + goto $bb1; +$aa917: + $p := 917; + goto $bb1; +$aa918: + $p := 918; + goto $bb1; +$aa919: + $p := 919; + goto $bb1; +$aa920: + $p := 920; + goto $bb1; +$aa921: + $p := 921; + goto $bb1; +$aa922: + $p := 922; + goto $bb1; +$aa923: + $p := 923; + goto $bb1; +$aa924: + $p := 924; + goto $bb1; +$aa925: + $p := 925; + goto $bb1; +$aa926: + $p := 926; + goto $bb1; +$aa927: + $p := 927; + goto $bb1; +$aa928: + $p := 928; + goto $bb1; +$aa929: + $p := 929; + goto $bb1; +$aa930: + $p := 930; + goto $bb1; +$aa931: + $p := 931; + goto $bb1; +$aa932: + $p := 932; + goto $bb1; +$aa933: + $p := 933; + goto $bb1; +$aa934: + $p := 934; + goto $bb1; +$aa935: + $p := 935; + goto $bb1; +$aa936: + $p := 936; + goto $bb1; +$aa937: + $p := 937; + goto $bb1; +$aa938: + $p := 938; + goto $bb1; +$aa939: + $p := 939; + goto $bb1; +$aa940: + $p := 940; + goto $bb1; +$aa941: + $p := 941; + goto $bb1; +$aa942: + $p := 942; + goto $bb1; +$aa943: + $p := 943; + goto $bb1; +$aa944: + $p := 944; + goto $bb1; +$aa945: + $p := 945; + goto $bb1; +$aa946: + $p := 946; + goto $bb1; +$aa947: + $p := 947; + goto $bb1; +$aa948: + $p := 948; + goto $bb1; +$aa949: + $p := 949; + goto $bb1; +$aa950: + $p := 950; + goto $bb1; +$aa951: + $p := 951; + goto $bb1; +$aa952: + $p := 952; + goto $bb1; +$aa953: + $p := 953; + goto $bb1; +$aa954: + $p := 954; + goto $bb1; +$aa955: + $p := 955; + goto $bb1; +$aa956: + $p := 956; + goto $bb1; +$aa957: + $p := 957; + goto $bb1; +$aa958: + $p := 958; + goto $bb1; +$aa959: + $p := 959; + goto $bb1; +$aa960: + $p := 960; + goto $bb1; +$aa961: + $p := 961; + goto $bb1; +$aa962: + $p := 962; + goto $bb1; +$aa963: + $p := 963; + goto $bb1; +$aa964: + $p := 964; + goto $bb1; +$aa965: + $p := 965; + goto $bb1; +$aa966: + $p := 966; + goto $bb1; +$aa967: + $p := 967; + goto $bb1; +$aa968: + $p := 968; + goto $bb1; +$aa969: + $p := 969; + goto $bb1; +$aa970: + $p := 970; + goto $bb1; +$aa971: + $p := 971; + goto $bb1; +$aa972: + $p := 972; + goto $bb1; +$aa973: + $p := 973; + goto $bb1; +$aa974: + $p := 974; + goto $bb1; +$aa975: + $p := 975; + goto $bb1; +$aa976: + $p := 976; + goto $bb1; +$aa977: + $p := 977; + goto $bb1; +$aa978: + $p := 978; + goto $bb1; +$aa979: + $p := 979; + goto $bb1; +$aa980: + $p := 980; + goto $bb1; +$aa981: + $p := 981; + goto $bb1; +$aa982: + $p := 982; + goto $bb1; +$aa983: + $p := 983; + goto $bb1; +$aa984: + $p := 984; + goto $bb1; +$aa985: + $p := 985; + goto $bb1; +$aa986: + $p := 986; + goto $bb1; +$aa987: + $p := 987; + goto $bb1; +$aa988: + $p := 988; + goto $bb1; +$aa989: + $p := 989; + goto $bb1; +$aa990: + $p := 990; + goto $bb1; +$aa991: + $p := 991; + goto $bb1; +$aa992: + $p := 992; + goto $bb1; +$aa993: + $p := 993; + goto $bb1; +$aa994: + $p := 994; + goto $bb1; +$aa995: + $p := 995; + goto $bb1; +$aa996: + $p := 996; + goto $bb1; +$aa997: + $p := 997; + goto $bb1; +$aa998: + $p := 998; + goto $bb1; +$aa999: + $p := 999; + goto $bb1; +$aa1000: + $p := 1000; + goto $bb1; +$aa1001: + $p := 1001; + goto $bb1; +$aa1002: + $p := 1002; + goto $bb1; +$aa1003: + $p := 1003; + goto $bb1; +$aa1004: + $p := 1004; + goto $bb1; +$aa1005: + $p := 1005; + goto $bb1; +$aa1006: + $p := 1006; + goto $bb1; +$aa1007: + $p := 1007; + goto $bb1; +$aa1008: + $p := 1008; + goto $bb1; +$aa1009: + $p := 1009; + goto $bb1; +$aa1010: + $p := 1010; + goto $bb1; +$aa1011: + $p := 1011; + goto $bb1; +$aa1012: + $p := 1012; + goto $bb1; +$aa1013: + $p := 1013; + goto $bb1; +$aa1014: + $p := 1014; + goto $bb1; +$aa1015: + $p := 1015; + goto $bb1; +$aa1016: + $p := 1016; + goto $bb1; +$aa1017: + $p := 1017; + goto $bb1; +$aa1018: + $p := 1018; + goto $bb1; +$aa1019: + $p := 1019; + goto $bb1; +$aa1020: + $p := 1020; + goto $bb1; +$aa1021: + $p := 1021; + goto $bb1; +$aa1022: + $p := 1022; + goto $bb1; +$aa1023: + $p := 1023; + goto $bb1; +$aa1024: + $p := 1024; + goto $bb1; +$aa1025: + $p := 1025; + goto $bb1; +$aa1026: + $p := 1026; + goto $bb1; +$aa1027: + $p := 1027; + goto $bb1; +$aa1028: + $p := 1028; + goto $bb1; +$aa1029: + $p := 1029; + goto $bb1; +$aa1030: + $p := 1030; + goto $bb1; +$aa1031: + $p := 1031; + goto $bb1; +$aa1032: + $p := 1032; + goto $bb1; +$aa1033: + $p := 1033; + goto $bb1; +$aa1034: + $p := 1034; + goto $bb1; +$aa1035: + $p := 1035; + goto $bb1; +$aa1036: + $p := 1036; + goto $bb1; +$aa1037: + $p := 1037; + goto $bb1; +$aa1038: + $p := 1038; + goto $bb1; +$aa1039: + $p := 1039; + goto $bb1; +$aa1040: + $p := 1040; + goto $bb1; +$aa1041: + $p := 1041; + goto $bb1; +$aa1042: + $p := 1042; + goto $bb1; +$aa1043: + $p := 1043; + goto $bb1; +$aa1044: + $p := 1044; + goto $bb1; +$aa1045: + $p := 1045; + goto $bb1; +$aa1046: + $p := 1046; + goto $bb1; +$aa1047: + $p := 1047; + goto $bb1; +$aa1048: + $p := 1048; + goto $bb1; +$aa1049: + $p := 1049; + goto $bb1; +$aa1050: + $p := 1050; + goto $bb1; +$aa1051: + $p := 1051; + goto $bb1; +$aa1052: + $p := 1052; + goto $bb1; +$aa1053: + $p := 1053; + goto $bb1; +$aa1054: + $p := 1054; + goto $bb1; +$aa1055: + $p := 1055; + goto $bb1; +$aa1056: + $p := 1056; + goto $bb1; +$aa1057: + $p := 1057; + goto $bb1; +$aa1058: + $p := 1058; + goto $bb1; +$aa1059: + $p := 1059; + goto $bb1; +$aa1060: + $p := 1060; + goto $bb1; +$aa1061: + $p := 1061; + goto $bb1; +$aa1062: + $p := 1062; + goto $bb1; +$aa1063: + $p := 1063; + goto $bb1; +$aa1064: + $p := 1064; + goto $bb1; +$aa1065: + $p := 1065; + goto $bb1; +$aa1066: + $p := 1066; + goto $bb1; +$aa1067: + $p := 1067; + goto $bb1; +$aa1068: + $p := 1068; + goto $bb1; +$aa1069: + $p := 1069; + goto $bb1; +$aa1070: + $p := 1070; + goto $bb1; +$aa1071: + $p := 1071; + goto $bb1; +$aa1072: + $p := 1072; + goto $bb1; +$aa1073: + $p := 1073; + goto $bb1; +$aa1074: + $p := 1074; + goto $bb1; +$aa1075: + $p := 1075; + goto $bb1; +$aa1076: + $p := 1076; + goto $bb1; +$aa1077: + $p := 1077; + goto $bb1; +$aa1078: + $p := 1078; + goto $bb1; +$aa1079: + $p := 1079; + goto $bb1; +$aa1080: + $p := 1080; + goto $bb1; +$aa1081: + $p := 1081; + goto $bb1; +$aa1082: + $p := 1082; + goto $bb1; +$aa1083: + $p := 1083; + goto $bb1; +$aa1084: + $p := 1084; + goto $bb1; +$aa1085: + $p := 1085; + goto $bb1; +$aa1086: + $p := 1086; + goto $bb1; +$aa1087: + $p := 1087; + goto $bb1; +$aa1088: + $p := 1088; + goto $bb1; +$aa1089: + $p := 1089; + goto $bb1; +$aa1090: + $p := 1090; + goto $bb1; +$aa1091: + $p := 1091; + goto $bb1; +$aa1092: + $p := 1092; + goto $bb1; +$aa1093: + $p := 1093; + goto $bb1; +$aa1094: + $p := 1094; + goto $bb1; +$aa1095: + $p := 1095; + goto $bb1; +$aa1096: + $p := 1096; + goto $bb1; +$aa1097: + $p := 1097; + goto $bb1; +$aa1098: + $p := 1098; + goto $bb1; +$aa1099: + $p := 1099; + goto $bb1; +$aa1100: + $p := 1100; + goto $bb1; +$aa1101: + $p := 1101; + goto $bb1; +$aa1102: + $p := 1102; + goto $bb1; +$aa1103: + $p := 1103; + goto $bb1; +$aa1104: + $p := 1104; + goto $bb1; +$aa1105: + $p := 1105; + goto $bb1; +$aa1106: + $p := 1106; + goto $bb1; +$aa1107: + $p := 1107; + goto $bb1; +$aa1108: + $p := 1108; + goto $bb1; +$aa1109: + $p := 1109; + goto $bb1; +$aa1110: + $p := 1110; + goto $bb1; +$aa1111: + $p := 1111; + goto $bb1; +$aa1112: + $p := 1112; + goto $bb1; +$aa1113: + $p := 1113; + goto $bb1; +$aa1114: + $p := 1114; + goto $bb1; +$aa1115: + $p := 1115; + goto $bb1; +$aa1116: + $p := 1116; + goto $bb1; +$aa1117: + $p := 1117; + goto $bb1; +$aa1118: + $p := 1118; + goto $bb1; +$aa1119: + $p := 1119; + goto $bb1; +$aa1120: + $p := 1120; + goto $bb1; +$aa1121: + $p := 1121; + goto $bb1; +$aa1122: + $p := 1122; + goto $bb1; +$aa1123: + $p := 1123; + goto $bb1; +$aa1124: + $p := 1124; + goto $bb1; +$aa1125: + $p := 1125; + goto $bb1; +$aa1126: + $p := 1126; + goto $bb1; +$aa1127: + $p := 1127; + goto $bb1; +$aa1128: + $p := 1128; + goto $bb1; +$aa1129: + $p := 1129; + goto $bb1; +$aa1130: + $p := 1130; + goto $bb1; +$aa1131: + $p := 1131; + goto $bb1; +$aa1132: + $p := 1132; + goto $bb1; +$aa1133: + $p := 1133; + goto $bb1; +$aa1134: + $p := 1134; + goto $bb1; +$aa1135: + $p := 1135; + goto $bb1; +$aa1136: + $p := 1136; + goto $bb1; +$aa1137: + $p := 1137; + goto $bb1; +$aa1138: + $p := 1138; + goto $bb1; +$aa1139: + $p := 1139; + goto $bb1; +$aa1140: + $p := 1140; + goto $bb1; +$aa1141: + $p := 1141; + goto $bb1; +$aa1142: + $p := 1142; + goto $bb1; +$aa1143: + $p := 1143; + goto $bb1; +$aa1144: + $p := 1144; + goto $bb1; +$aa1145: + $p := 1145; + goto $bb1; +$aa1146: + $p := 1146; + goto $bb1; +$aa1147: + $p := 1147; + goto $bb1; +$aa1148: + $p := 1148; + goto $bb1; +$aa1149: + $p := 1149; + goto $bb1; +$aa1150: + $p := 1150; + goto $bb1; +$aa1151: + $p := 1151; + goto $bb1; +$aa1152: + $p := 1152; + goto $bb1; +$aa1153: + $p := 1153; + goto $bb1; +$aa1154: + $p := 1154; + goto $bb1; +$aa1155: + $p := 1155; + goto $bb1; +$aa1156: + $p := 1156; + goto $bb1; +$aa1157: + $p := 1157; + goto $bb1; +$aa1158: + $p := 1158; + goto $bb1; +$aa1159: + $p := 1159; + goto $bb1; +$aa1160: + $p := 1160; + goto $bb1; +$aa1161: + $p := 1161; + goto $bb1; +$aa1162: + $p := 1162; + goto $bb1; +$aa1163: + $p := 1163; + goto $bb1; +$aa1164: + $p := 1164; + goto $bb1; +$aa1165: + $p := 1165; + goto $bb1; +$aa1166: + $p := 1166; + goto $bb1; +$aa1167: + $p := 1167; + goto $bb1; +$aa1168: + $p := 1168; + goto $bb1; +$aa1169: + $p := 1169; + goto $bb1; +$aa1170: + $p := 1170; + goto $bb1; +$aa1171: + $p := 1171; + goto $bb1; +$aa1172: + $p := 1172; + goto $bb1; +$aa1173: + $p := 1173; + goto $bb1; +$aa1174: + $p := 1174; + goto $bb1; +$aa1175: + $p := 1175; + goto $bb1; +$aa1176: + $p := 1176; + goto $bb1; +$aa1177: + $p := 1177; + goto $bb1; +$aa1178: + $p := 1178; + goto $bb1; +$aa1179: + $p := 1179; + goto $bb1; +$aa1180: + $p := 1180; + goto $bb1; +$aa1181: + $p := 1181; + goto $bb1; +$aa1182: + $p := 1182; + goto $bb1; +$aa1183: + $p := 1183; + goto $bb1; +$aa1184: + $p := 1184; + goto $bb1; +$aa1185: + $p := 1185; + goto $bb1; +$aa1186: + $p := 1186; + goto $bb1; +$aa1187: + $p := 1187; + goto $bb1; +$aa1188: + $p := 1188; + goto $bb1; +$aa1189: + $p := 1189; + goto $bb1; +$aa1190: + $p := 1190; + goto $bb1; +$aa1191: + $p := 1191; + goto $bb1; +$aa1192: + $p := 1192; + goto $bb1; +$aa1193: + $p := 1193; + goto $bb1; +$aa1194: + $p := 1194; + goto $bb1; +$aa1195: + $p := 1195; + goto $bb1; +$aa1196: + $p := 1196; + goto $bb1; +$aa1197: + $p := 1197; + goto $bb1; +$aa1198: + $p := 1198; + goto $bb1; +$aa1199: + $p := 1199; + goto $bb1; +$aa1200: + $p := 1200; + goto $bb1; +$aa1201: + $p := 1201; + goto $bb1; +$aa1202: + $p := 1202; + goto $bb1; +$aa1203: + $p := 1203; + goto $bb1; +$aa1204: + $p := 1204; + goto $bb1; +$aa1205: + $p := 1205; + goto $bb1; +$aa1206: + $p := 1206; + goto $bb1; +$aa1207: + $p := 1207; + goto $bb1; +$aa1208: + $p := 1208; + goto $bb1; +$aa1209: + $p := 1209; + goto $bb1; +$aa1210: + $p := 1210; + goto $bb1; +$aa1211: + $p := 1211; + goto $bb1; +$aa1212: + $p := 1212; + goto $bb1; +$aa1213: + $p := 1213; + goto $bb1; +$aa1214: + $p := 1214; + goto $bb1; +$aa1215: + $p := 1215; + goto $bb1; +$aa1216: + $p := 1216; + goto $bb1; +$aa1217: + $p := 1217; + goto $bb1; +$aa1218: + $p := 1218; + goto $bb1; +$aa1219: + $p := 1219; + goto $bb1; +$aa1220: + $p := 1220; + goto $bb1; +$aa1221: + $p := 1221; + goto $bb1; +$aa1222: + $p := 1222; + goto $bb1; +$aa1223: + $p := 1223; + goto $bb1; +$aa1224: + $p := 1224; + goto $bb1; +$aa1225: + $p := 1225; + goto $bb1; +$aa1226: + $p := 1226; + goto $bb1; +$aa1227: + $p := 1227; + goto $bb1; +$aa1228: + $p := 1228; + goto $bb1; +$aa1229: + $p := 1229; + goto $bb1; +$aa1230: + $p := 1230; + goto $bb1; +$aa1231: + $p := 1231; + goto $bb1; +$aa1232: + $p := 1232; + goto $bb1; +$aa1233: + $p := 1233; + goto $bb1; +$aa1234: + $p := 1234; + goto $bb1; +$aa1235: + $p := 1235; + goto $bb1; +$aa1236: + $p := 1236; + goto $bb1; +$aa1237: + $p := 1237; + goto $bb1; +$aa1238: + $p := 1238; + goto $bb1; +$aa1239: + $p := 1239; + goto $bb1; +$aa1240: + $p := 1240; + goto $bb1; +$aa1241: + $p := 1241; + goto $bb1; +$aa1242: + $p := 1242; + goto $bb1; +$aa1243: + $p := 1243; + goto $bb1; +$aa1244: + $p := 1244; + goto $bb1; +$aa1245: + $p := 1245; + goto $bb1; +$aa1246: + $p := 1246; + goto $bb1; +$aa1247: + $p := 1247; + goto $bb1; +$aa1248: + $p := 1248; + goto $bb1; +$aa1249: + $p := 1249; + goto $bb1; +$aa1250: + $p := 1250; + goto $bb1; +$aa1251: + $p := 1251; + goto $bb1; +$aa1252: + $p := 1252; + goto $bb1; +$aa1253: + $p := 1253; + goto $bb1; +$aa1254: + $p := 1254; + goto $bb1; +$aa1255: + $p := 1255; + goto $bb1; +$aa1256: + $p := 1256; + goto $bb1; +$aa1257: + $p := 1257; + goto $bb1; +$aa1258: + $p := 1258; + goto $bb1; +$aa1259: + $p := 1259; + goto $bb1; +$aa1260: + $p := 1260; + goto $bb1; +$aa1261: + $p := 1261; + goto $bb1; +$aa1262: + $p := 1262; + goto $bb1; +$aa1263: + $p := 1263; + goto $bb1; +$aa1264: + $p := 1264; + goto $bb1; +$aa1265: + $p := 1265; + goto $bb1; +$aa1266: + $p := 1266; + goto $bb1; +$aa1267: + $p := 1267; + goto $bb1; +$aa1268: + $p := 1268; + goto $bb1; +$aa1269: + $p := 1269; + goto $bb1; +$aa1270: + $p := 1270; + goto $bb1; +$aa1271: + $p := 1271; + goto $bb1; +$aa1272: + $p := 1272; + goto $bb1; +$aa1273: + $p := 1273; + goto $bb1; +$aa1274: + $p := 1274; + goto $bb1; +$aa1275: + $p := 1275; + goto $bb1; +$aa1276: + $p := 1276; + goto $bb1; +$aa1277: + $p := 1277; + goto $bb1; +$aa1278: + $p := 1278; + goto $bb1; +$aa1279: + $p := 1279; + goto $bb1; +$aa1280: + $p := 1280; + goto $bb1; +$aa1281: + $p := 1281; + goto $bb1; +$aa1282: + $p := 1282; + goto $bb1; +$aa1283: + $p := 1283; + goto $bb1; +$aa1284: + $p := 1284; + goto $bb1; +$aa1285: + $p := 1285; + goto $bb1; +$aa1286: + $p := 1286; + goto $bb1; +$aa1287: + $p := 1287; + goto $bb1; +$aa1288: + $p := 1288; + goto $bb1; +$aa1289: + $p := 1289; + goto $bb1; +$aa1290: + $p := 1290; + goto $bb1; +$aa1291: + $p := 1291; + goto $bb1; +$aa1292: + $p := 1292; + goto $bb1; +$aa1293: + $p := 1293; + goto $bb1; +$aa1294: + $p := 1294; + goto $bb1; +$aa1295: + $p := 1295; + goto $bb1; +$aa1296: + $p := 1296; + goto $bb1; +$aa1297: + $p := 1297; + goto $bb1; +$aa1298: + $p := 1298; + goto $bb1; +$aa1299: + $p := 1299; + goto $bb1; +$aa1300: + $p := 1300; + goto $bb1; +$aa1301: + $p := 1301; + goto $bb1; +$aa1302: + $p := 1302; + goto $bb1; +$aa1303: + $p := 1303; + goto $bb1; +$aa1304: + $p := 1304; + goto $bb1; +$aa1305: + $p := 1305; + goto $bb1; +$aa1306: + $p := 1306; + goto $bb1; +$aa1307: + $p := 1307; + goto $bb1; +$aa1308: + $p := 1308; + goto $bb1; +$aa1309: + $p := 1309; + goto $bb1; +$aa1310: + $p := 1310; + goto $bb1; +$aa1311: + $p := 1311; + goto $bb1; +$aa1312: + $p := 1312; + goto $bb1; +$aa1313: + $p := 1313; + goto $bb1; +$aa1314: + $p := 1314; + goto $bb1; +$aa1315: + $p := 1315; + goto $bb1; +$aa1316: + $p := 1316; + goto $bb1; +$aa1317: + $p := 1317; + goto $bb1; +$aa1318: + $p := 1318; + goto $bb1; +$aa1319: + $p := 1319; + goto $bb1; +$aa1320: + $p := 1320; + goto $bb1; +$aa1321: + $p := 1321; + goto $bb1; +$aa1322: + $p := 1322; + goto $bb1; +$aa1323: + $p := 1323; + goto $bb1; +$aa1324: + $p := 1324; + goto $bb1; +$aa1325: + $p := 1325; + goto $bb1; +$aa1326: + $p := 1326; + goto $bb1; +$aa1327: + $p := 1327; + goto $bb1; +$aa1328: + $p := 1328; + goto $bb1; +$aa1329: + $p := 1329; + goto $bb1; +$aa1330: + $p := 1330; + goto $bb1; +$aa1331: + $p := 1331; + goto $bb1; +$aa1332: + $p := 1332; + goto $bb1; +$aa1333: + $p := 1333; + goto $bb1; +$aa1334: + $p := 1334; + goto $bb1; +$aa1335: + $p := 1335; + goto $bb1; +$aa1336: + $p := 1336; + goto $bb1; +$aa1337: + $p := 1337; + goto $bb1; +$aa1338: + $p := 1338; + goto $bb1; +$aa1339: + $p := 1339; + goto $bb1; +$aa1340: + $p := 1340; + goto $bb1; +$aa1341: + $p := 1341; + goto $bb1; +$aa1342: + $p := 1342; + goto $bb1; +$aa1343: + $p := 1343; + goto $bb1; +$aa1344: + $p := 1344; + goto $bb1; +$aa1345: + $p := 1345; + goto $bb1; +$aa1346: + $p := 1346; + goto $bb1; +$aa1347: + $p := 1347; + goto $bb1; +$aa1348: + $p := 1348; + goto $bb1; +$aa1349: + $p := 1349; + goto $bb1; +$aa1350: + $p := 1350; + goto $bb1; +$aa1351: + $p := 1351; + goto $bb1; +$aa1352: + $p := 1352; + goto $bb1; +$aa1353: + $p := 1353; + goto $bb1; +$aa1354: + $p := 1354; + goto $bb1; +$aa1355: + $p := 1355; + goto $bb1; +$aa1356: + $p := 1356; + goto $bb1; +$aa1357: + $p := 1357; + goto $bb1; +$aa1358: + $p := 1358; + goto $bb1; +$aa1359: + $p := 1359; + goto $bb1; +$aa1360: + $p := 1360; + goto $bb1; +$aa1361: + $p := 1361; + goto $bb1; +$aa1362: + $p := 1362; + goto $bb1; +$aa1363: + $p := 1363; + goto $bb1; +$aa1364: + $p := 1364; + goto $bb1; +$aa1365: + $p := 1365; + goto $bb1; +$aa1366: + $p := 1366; + goto $bb1; +$aa1367: + $p := 1367; + goto $bb1; +$aa1368: + $p := 1368; + goto $bb1; +$aa1369: + $p := 1369; + goto $bb1; +$aa1370: + $p := 1370; + goto $bb1; +$aa1371: + $p := 1371; + goto $bb1; +$aa1372: + $p := 1372; + goto $bb1; +$aa1373: + $p := 1373; + goto $bb1; +$aa1374: + $p := 1374; + goto $bb1; +$aa1375: + $p := 1375; + goto $bb1; +$aa1376: + $p := 1376; + goto $bb1; +$aa1377: + $p := 1377; + goto $bb1; +$aa1378: + $p := 1378; + goto $bb1; +$aa1379: + $p := 1379; + goto $bb1; +$aa1380: + $p := 1380; + goto $bb1; +$aa1381: + $p := 1381; + goto $bb1; +$aa1382: + $p := 1382; + goto $bb1; +$aa1383: + $p := 1383; + goto $bb1; +$aa1384: + $p := 1384; + goto $bb1; +$aa1385: + $p := 1385; + goto $bb1; +$aa1386: + $p := 1386; + goto $bb1; +$aa1387: + $p := 1387; + goto $bb1; +$aa1388: + $p := 1388; + goto $bb1; +$aa1389: + $p := 1389; + goto $bb1; +$aa1390: + $p := 1390; + goto $bb1; +$aa1391: + $p := 1391; + goto $bb1; +$aa1392: + $p := 1392; + goto $bb1; +$aa1393: + $p := 1393; + goto $bb1; +$aa1394: + $p := 1394; + goto $bb1; +$aa1395: + $p := 1395; + goto $bb1; +$aa1396: + $p := 1396; + goto $bb1; +$aa1397: + $p := 1397; + goto $bb1; +$aa1398: + $p := 1398; + goto $bb1; +$aa1399: + $p := 1399; + goto $bb1; +$aa1400: + $p := 1400; + goto $bb1; +$aa1401: + $p := 1401; + goto $bb1; +$aa1402: + $p := 1402; + goto $bb1; +$aa1403: + $p := 1403; + goto $bb1; +$aa1404: + $p := 1404; + goto $bb1; +$aa1405: + $p := 1405; + goto $bb1; +$aa1406: + $p := 1406; + goto $bb1; +$aa1407: + $p := 1407; + goto $bb1; +$aa1408: + $p := 1408; + goto $bb1; +$aa1409: + $p := 1409; + goto $bb1; +$aa1410: + $p := 1410; + goto $bb1; +$aa1411: + $p := 1411; + goto $bb1; +$aa1412: + $p := 1412; + goto $bb1; +$aa1413: + $p := 1413; + goto $bb1; +$aa1414: + $p := 1414; + goto $bb1; +$aa1415: + $p := 1415; + goto $bb1; +$aa1416: + $p := 1416; + goto $bb1; +$aa1417: + $p := 1417; + goto $bb1; +$aa1418: + $p := 1418; + goto $bb1; +$aa1419: + $p := 1419; + goto $bb1; +$aa1420: + $p := 1420; + goto $bb1; +$aa1421: + $p := 1421; + goto $bb1; +$aa1422: + $p := 1422; + goto $bb1; +$aa1423: + $p := 1423; + goto $bb1; +$aa1424: + $p := 1424; + goto $bb1; +$aa1425: + $p := 1425; + goto $bb1; +$aa1426: + $p := 1426; + goto $bb1; +$aa1427: + $p := 1427; + goto $bb1; +$aa1428: + $p := 1428; + goto $bb1; +$aa1429: + $p := 1429; + goto $bb1; +$aa1430: + $p := 1430; + goto $bb1; +$aa1431: + $p := 1431; + goto $bb1; +$aa1432: + $p := 1432; + goto $bb1; +$aa1433: + $p := 1433; + goto $bb1; +$aa1434: + $p := 1434; + goto $bb1; +$aa1435: + $p := 1435; + goto $bb1; +$aa1436: + $p := 1436; + goto $bb1; +$aa1437: + $p := 1437; + goto $bb1; +$aa1438: + $p := 1438; + goto $bb1; +$aa1439: + $p := 1439; + goto $bb1; +$aa1440: + $p := 1440; + goto $bb1; +$aa1441: + $p := 1441; + goto $bb1; +$aa1442: + $p := 1442; + goto $bb1; +$aa1443: + $p := 1443; + goto $bb1; +$aa1444: + $p := 1444; + goto $bb1; +$aa1445: + $p := 1445; + goto $bb1; +$aa1446: + $p := 1446; + goto $bb1; +$aa1447: + $p := 1447; + goto $bb1; +$aa1448: + $p := 1448; + goto $bb1; +$aa1449: + $p := 1449; + goto $bb1; +$aa1450: + $p := 1450; + goto $bb1; +$aa1451: + $p := 1451; + goto $bb1; +$aa1452: + $p := 1452; + goto $bb1; +$aa1453: + $p := 1453; + goto $bb1; +$aa1454: + $p := 1454; + goto $bb1; +$aa1455: + $p := 1455; + goto $bb1; +$aa1456: + $p := 1456; + goto $bb1; +$aa1457: + $p := 1457; + goto $bb1; +$aa1458: + $p := 1458; + goto $bb1; +$aa1459: + $p := 1459; + goto $bb1; +$aa1460: + $p := 1460; + goto $bb1; +$aa1461: + $p := 1461; + goto $bb1; +$aa1462: + $p := 1462; + goto $bb1; +$aa1463: + $p := 1463; + goto $bb1; +$aa1464: + $p := 1464; + goto $bb1; +$aa1465: + $p := 1465; + goto $bb1; +$aa1466: + $p := 1466; + goto $bb1; +$aa1467: + $p := 1467; + goto $bb1; +$aa1468: + $p := 1468; + goto $bb1; +$aa1469: + $p := 1469; + goto $bb1; +$aa1470: + $p := 1470; + goto $bb1; +$aa1471: + $p := 1471; + goto $bb1; +$aa1472: + $p := 1472; + goto $bb1; +$aa1473: + $p := 1473; + goto $bb1; +$aa1474: + $p := 1474; + goto $bb1; +$aa1475: + $p := 1475; + goto $bb1; +$aa1476: + $p := 1476; + goto $bb1; +$aa1477: + $p := 1477; + goto $bb1; +$aa1478: + $p := 1478; + goto $bb1; +$aa1479: + $p := 1479; + goto $bb1; +$aa1480: + $p := 1480; + goto $bb1; +$aa1481: + $p := 1481; + goto $bb1; +$aa1482: + $p := 1482; + goto $bb1; +$aa1483: + $p := 1483; + goto $bb1; +$aa1484: + $p := 1484; + goto $bb1; +$aa1485: + $p := 1485; + goto $bb1; +$aa1486: + $p := 1486; + goto $bb1; +$aa1487: + $p := 1487; + goto $bb1; +$aa1488: + $p := 1488; + goto $bb1; +$aa1489: + $p := 1489; + goto $bb1; +$aa1490: + $p := 1490; + goto $bb1; +$aa1491: + $p := 1491; + goto $bb1; +$aa1492: + $p := 1492; + goto $bb1; +$aa1493: + $p := 1493; + goto $bb1; +$aa1494: + $p := 1494; + goto $bb1; +$aa1495: + $p := 1495; + goto $bb1; +$aa1496: + $p := 1496; + goto $bb1; +$aa1497: + $p := 1497; + goto $bb1; +$aa1498: + $p := 1498; + goto $bb1; +$aa1499: + $p := 1499; + goto $bb1; +$aa1500: + $p := 1500; + goto $bb1; +$aa1501: + $p := 1501; + goto $bb1; +$aa1502: + $p := 1502; + goto $bb1; +$aa1503: + $p := 1503; + goto $bb1; +$aa1504: + $p := 1504; + goto $bb1; +$aa1505: + $p := 1505; + goto $bb1; +$aa1506: + $p := 1506; + goto $bb1; +$aa1507: + $p := 1507; + goto $bb1; +$aa1508: + $p := 1508; + goto $bb1; +$aa1509: + $p := 1509; + goto $bb1; +$aa1510: + $p := 1510; + goto $bb1; +$aa1511: + $p := 1511; + goto $bb1; +$aa1512: + $p := 1512; + goto $bb1; +$aa1513: + $p := 1513; + goto $bb1; +$aa1514: + $p := 1514; + goto $bb1; +$aa1515: + $p := 1515; + goto $bb1; +$aa1516: + $p := 1516; + goto $bb1; +$aa1517: + $p := 1517; + goto $bb1; +$aa1518: + $p := 1518; + goto $bb1; +$aa1519: + $p := 1519; + goto $bb1; +$aa1520: + $p := 1520; + goto $bb1; +$aa1521: + $p := 1521; + goto $bb1; +$aa1522: + $p := 1522; + goto $bb1; +$aa1523: + $p := 1523; + goto $bb1; +$aa1524: + $p := 1524; + goto $bb1; +$aa1525: + $p := 1525; + goto $bb1; +$aa1526: + $p := 1526; + goto $bb1; +$aa1527: + $p := 1527; + goto $bb1; +$aa1528: + $p := 1528; + goto $bb1; +$aa1529: + $p := 1529; + goto $bb1; +$aa1530: + $p := 1530; + goto $bb1; +$aa1531: + $p := 1531; + goto $bb1; +$aa1532: + $p := 1532; + goto $bb1; +$aa1533: + $p := 1533; + goto $bb1; +$aa1534: + $p := 1534; + goto $bb1; +$aa1535: + $p := 1535; + goto $bb1; +$aa1536: + $p := 1536; + goto $bb1; +$aa1537: + $p := 1537; + goto $bb1; +$aa1538: + $p := 1538; + goto $bb1; +$aa1539: + $p := 1539; + goto $bb1; +$aa1540: + $p := 1540; + goto $bb1; +$aa1541: + $p := 1541; + goto $bb1; +$aa1542: + $p := 1542; + goto $bb1; +$aa1543: + $p := 1543; + goto $bb1; +$aa1544: + $p := 1544; + goto $bb1; +$aa1545: + $p := 1545; + goto $bb1; +$aa1546: + $p := 1546; + goto $bb1; +$aa1547: + $p := 1547; + goto $bb1; +$aa1548: + $p := 1548; + goto $bb1; +$aa1549: + $p := 1549; + goto $bb1; +$aa1550: + $p := 1550; + goto $bb1; +$aa1551: + $p := 1551; + goto $bb1; +$aa1552: + $p := 1552; + goto $bb1; +$aa1553: + $p := 1553; + goto $bb1; +$aa1554: + $p := 1554; + goto $bb1; +$aa1555: + $p := 1555; + goto $bb1; +$aa1556: + $p := 1556; + goto $bb1; +$aa1557: + $p := 1557; + goto $bb1; +$aa1558: + $p := 1558; + goto $bb1; +$aa1559: + $p := 1559; + goto $bb1; +$aa1560: + $p := 1560; + goto $bb1; +$aa1561: + $p := 1561; + goto $bb1; +$aa1562: + $p := 1562; + goto $bb1; +$aa1563: + $p := 1563; + goto $bb1; +$aa1564: + $p := 1564; + goto $bb1; +$aa1565: + $p := 1565; + goto $bb1; +$aa1566: + $p := 1566; + goto $bb1; +$aa1567: + $p := 1567; + goto $bb1; +$aa1568: + $p := 1568; + goto $bb1; +$aa1569: + $p := 1569; + goto $bb1; +$aa1570: + $p := 1570; + goto $bb1; +$aa1571: + $p := 1571; + goto $bb1; +$aa1572: + $p := 1572; + goto $bb1; +$aa1573: + $p := 1573; + goto $bb1; +$aa1574: + $p := 1574; + goto $bb1; +$aa1575: + $p := 1575; + goto $bb1; +$aa1576: + $p := 1576; + goto $bb1; +$aa1577: + $p := 1577; + goto $bb1; +$aa1578: + $p := 1578; + goto $bb1; +$aa1579: + $p := 1579; + goto $bb1; +$aa1580: + $p := 1580; + goto $bb1; +$aa1581: + $p := 1581; + goto $bb1; +$aa1582: + $p := 1582; + goto $bb1; +$aa1583: + $p := 1583; + goto $bb1; +$aa1584: + $p := 1584; + goto $bb1; +$aa1585: + $p := 1585; + goto $bb1; +$aa1586: + $p := 1586; + goto $bb1; +$aa1587: + $p := 1587; + goto $bb1; +$aa1588: + $p := 1588; + goto $bb1; +$aa1589: + $p := 1589; + goto $bb1; +$aa1590: + $p := 1590; + goto $bb1; +$aa1591: + $p := 1591; + goto $bb1; +$aa1592: + $p := 1592; + goto $bb1; +$aa1593: + $p := 1593; + goto $bb1; +$aa1594: + $p := 1594; + goto $bb1; +$aa1595: + $p := 1595; + goto $bb1; +$aa1596: + $p := 1596; + goto $bb1; +$aa1597: + $p := 1597; + goto $bb1; +$aa1598: + $p := 1598; + goto $bb1; +$aa1599: + $p := 1599; + goto $bb1; +$aa1600: + $p := 1600; + goto $bb1; +$aa1601: + $p := 1601; + goto $bb1; +$aa1602: + $p := 1602; + goto $bb1; +$aa1603: + $p := 1603; + goto $bb1; +$aa1604: + $p := 1604; + goto $bb1; +$aa1605: + $p := 1605; + goto $bb1; +$aa1606: + $p := 1606; + goto $bb1; +$aa1607: + $p := 1607; + goto $bb1; +$aa1608: + $p := 1608; + goto $bb1; +$aa1609: + $p := 1609; + goto $bb1; +$aa1610: + $p := 1610; + goto $bb1; +$aa1611: + $p := 1611; + goto $bb1; +$aa1612: + $p := 1612; + goto $bb1; +$aa1613: + $p := 1613; + goto $bb1; +$aa1614: + $p := 1614; + goto $bb1; +$aa1615: + $p := 1615; + goto $bb1; +$aa1616: + $p := 1616; + goto $bb1; +$aa1617: + $p := 1617; + goto $bb1; +$aa1618: + $p := 1618; + goto $bb1; +$aa1619: + $p := 1619; + goto $bb1; +$aa1620: + $p := 1620; + goto $bb1; +$aa1621: + $p := 1621; + goto $bb1; +$aa1622: + $p := 1622; + goto $bb1; +$aa1623: + $p := 1623; + goto $bb1; +$aa1624: + $p := 1624; + goto $bb1; +$aa1625: + $p := 1625; + goto $bb1; +$aa1626: + $p := 1626; + goto $bb1; +$aa1627: + $p := 1627; + goto $bb1; +$aa1628: + $p := 1628; + goto $bb1; +$aa1629: + $p := 1629; + goto $bb1; +$aa1630: + $p := 1630; + goto $bb1; +$aa1631: + $p := 1631; + goto $bb1; +$aa1632: + $p := 1632; + goto $bb1; +$aa1633: + $p := 1633; + goto $bb1; +$aa1634: + $p := 1634; + goto $bb1; +$aa1635: + $p := 1635; + goto $bb1; +$aa1636: + $p := 1636; + goto $bb1; +$aa1637: + $p := 1637; + goto $bb1; +$aa1638: + $p := 1638; + goto $bb1; +$aa1639: + $p := 1639; + goto $bb1; +$aa1640: + $p := 1640; + goto $bb1; +$aa1641: + $p := 1641; + goto $bb1; +$aa1642: + $p := 1642; + goto $bb1; +$aa1643: + $p := 1643; + goto $bb1; +$aa1644: + $p := 1644; + goto $bb1; +$aa1645: + $p := 1645; + goto $bb1; +$aa1646: + $p := 1646; + goto $bb1; +$aa1647: + $p := 1647; + goto $bb1; +$aa1648: + $p := 1648; + goto $bb1; +$aa1649: + $p := 1649; + goto $bb1; +$aa1650: + $p := 1650; + goto $bb1; +$aa1651: + $p := 1651; + goto $bb1; +$aa1652: + $p := 1652; + goto $bb1; +$aa1653: + $p := 1653; + goto $bb1; +$aa1654: + $p := 1654; + goto $bb1; +$aa1655: + $p := 1655; + goto $bb1; +$aa1656: + $p := 1656; + goto $bb1; +$aa1657: + $p := 1657; + goto $bb1; +$aa1658: + $p := 1658; + goto $bb1; +$aa1659: + $p := 1659; + goto $bb1; +$aa1660: + $p := 1660; + goto $bb1; +$aa1661: + $p := 1661; + goto $bb1; +$aa1662: + $p := 1662; + goto $bb1; +$aa1663: + $p := 1663; + goto $bb1; +$aa1664: + $p := 1664; + goto $bb1; +$aa1665: + $p := 1665; + goto $bb1; +$aa1666: + $p := 1666; + goto $bb1; +$aa1667: + $p := 1667; + goto $bb1; +$aa1668: + $p := 1668; + goto $bb1; +$aa1669: + $p := 1669; + goto $bb1; +$aa1670: + $p := 1670; + goto $bb1; +$aa1671: + $p := 1671; + goto $bb1; +$aa1672: + $p := 1672; + goto $bb1; +$aa1673: + $p := 1673; + goto $bb1; +$aa1674: + $p := 1674; + goto $bb1; +$aa1675: + $p := 1675; + goto $bb1; +$aa1676: + $p := 1676; + goto $bb1; +$aa1677: + $p := 1677; + goto $bb1; +$aa1678: + $p := 1678; + goto $bb1; +$aa1679: + $p := 1679; + goto $bb1; +$aa1680: + $p := 1680; + goto $bb1; +$aa1681: + $p := 1681; + goto $bb1; +$aa1682: + $p := 1682; + goto $bb1; +$aa1683: + $p := 1683; + goto $bb1; +$aa1684: + $p := 1684; + goto $bb1; +$aa1685: + $p := 1685; + goto $bb1; +$aa1686: + $p := 1686; + goto $bb1; +$aa1687: + $p := 1687; + goto $bb1; +$aa1688: + $p := 1688; + goto $bb1; +$aa1689: + $p := 1689; + goto $bb1; +$aa1690: + $p := 1690; + goto $bb1; +$aa1691: + $p := 1691; + goto $bb1; +$aa1692: + $p := 1692; + goto $bb1; +$aa1693: + $p := 1693; + goto $bb1; +$aa1694: + $p := 1694; + goto $bb1; +$aa1695: + $p := 1695; + goto $bb1; +$aa1696: + $p := 1696; + goto $bb1; +$aa1697: + $p := 1697; + goto $bb1; +$aa1698: + $p := 1698; + goto $bb1; +$aa1699: + $p := 1699; + goto $bb1; +$aa1700: + $p := 1700; + goto $bb1; +$aa1701: + $p := 1701; + goto $bb1; +$aa1702: + $p := 1702; + goto $bb1; +$aa1703: + $p := 1703; + goto $bb1; +$aa1704: + $p := 1704; + goto $bb1; +$aa1705: + $p := 1705; + goto $bb1; +$aa1706: + $p := 1706; + goto $bb1; +$aa1707: + $p := 1707; + goto $bb1; +$aa1708: + $p := 1708; + goto $bb1; +$aa1709: + $p := 1709; + goto $bb1; +$aa1710: + $p := 1710; + goto $bb1; +$aa1711: + $p := 1711; + goto $bb1; +$aa1712: + $p := 1712; + goto $bb1; +$aa1713: + $p := 1713; + goto $bb1; +$aa1714: + $p := 1714; + goto $bb1; +$aa1715: + $p := 1715; + goto $bb1; +$aa1716: + $p := 1716; + goto $bb1; +$aa1717: + $p := 1717; + goto $bb1; +$aa1718: + $p := 1718; + goto $bb1; +$aa1719: + $p := 1719; + goto $bb1; +$aa1720: + $p := 1720; + goto $bb1; +$aa1721: + $p := 1721; + goto $bb1; +$aa1722: + $p := 1722; + goto $bb1; +$aa1723: + $p := 1723; + goto $bb1; +$aa1724: + $p := 1724; + goto $bb1; +$aa1725: + $p := 1725; + goto $bb1; +$aa1726: + $p := 1726; + goto $bb1; +$aa1727: + $p := 1727; + goto $bb1; +$aa1728: + $p := 1728; + goto $bb1; +$aa1729: + $p := 1729; + goto $bb1; +$aa1730: + $p := 1730; + goto $bb1; +$aa1731: + $p := 1731; + goto $bb1; +$aa1732: + $p := 1732; + goto $bb1; +$aa1733: + $p := 1733; + goto $bb1; +$aa1734: + $p := 1734; + goto $bb1; +$aa1735: + $p := 1735; + goto $bb1; +$aa1736: + $p := 1736; + goto $bb1; +$aa1737: + $p := 1737; + goto $bb1; +$aa1738: + $p := 1738; + goto $bb1; +$aa1739: + $p := 1739; + goto $bb1; +$aa1740: + $p := 1740; + goto $bb1; +$aa1741: + $p := 1741; + goto $bb1; +$aa1742: + $p := 1742; + goto $bb1; +$aa1743: + $p := 1743; + goto $bb1; +$aa1744: + $p := 1744; + goto $bb1; +$aa1745: + $p := 1745; + goto $bb1; +$aa1746: + $p := 1746; + goto $bb1; +$aa1747: + $p := 1747; + goto $bb1; +$aa1748: + $p := 1748; + goto $bb1; +$aa1749: + $p := 1749; + goto $bb1; +$aa1750: + $p := 1750; + goto $bb1; +$aa1751: + $p := 1751; + goto $bb1; +$aa1752: + $p := 1752; + goto $bb1; +$aa1753: + $p := 1753; + goto $bb1; +$aa1754: + $p := 1754; + goto $bb1; +$aa1755: + $p := 1755; + goto $bb1; +$aa1756: + $p := 1756; + goto $bb1; +$aa1757: + $p := 1757; + goto $bb1; +$aa1758: + $p := 1758; + goto $bb1; +$aa1759: + $p := 1759; + goto $bb1; +$aa1760: + $p := 1760; + goto $bb1; +$aa1761: + $p := 1761; + goto $bb1; +$aa1762: + $p := 1762; + goto $bb1; +$aa1763: + $p := 1763; + goto $bb1; +$aa1764: + $p := 1764; + goto $bb1; +$aa1765: + $p := 1765; + goto $bb1; +$aa1766: + $p := 1766; + goto $bb1; +$aa1767: + $p := 1767; + goto $bb1; +$aa1768: + $p := 1768; + goto $bb1; +$aa1769: + $p := 1769; + goto $bb1; +$aa1770: + $p := 1770; + goto $bb1; +$aa1771: + $p := 1771; + goto $bb1; +$aa1772: + $p := 1772; + goto $bb1; +$aa1773: + $p := 1773; + goto $bb1; +$aa1774: + $p := 1774; + goto $bb1; +$aa1775: + $p := 1775; + goto $bb1; +$aa1776: + $p := 1776; + goto $bb1; +$aa1777: + $p := 1777; + goto $bb1; +$aa1778: + $p := 1778; + goto $bb1; +$aa1779: + $p := 1779; + goto $bb1; +$aa1780: + $p := 1780; + goto $bb1; +$aa1781: + $p := 1781; + goto $bb1; +$aa1782: + $p := 1782; + goto $bb1; +$aa1783: + $p := 1783; + goto $bb1; +$aa1784: + $p := 1784; + goto $bb1; +$aa1785: + $p := 1785; + goto $bb1; +$aa1786: + $p := 1786; + goto $bb1; +$aa1787: + $p := 1787; + goto $bb1; +$aa1788: + $p := 1788; + goto $bb1; +$aa1789: + $p := 1789; + goto $bb1; +$aa1790: + $p := 1790; + goto $bb1; +$aa1791: + $p := 1791; + goto $bb1; +$aa1792: + $p := 1792; + goto $bb1; +$aa1793: + $p := 1793; + goto $bb1; +$aa1794: + $p := 1794; + goto $bb1; +$aa1795: + $p := 1795; + goto $bb1; +$aa1796: + $p := 1796; + goto $bb1; +$aa1797: + $p := 1797; + goto $bb1; +$aa1798: + $p := 1798; + goto $bb1; +$aa1799: + $p := 1799; + goto $bb1; +$aa1800: + $p := 1800; + goto $bb1; +$aa1801: + $p := 1801; + goto $bb1; +$aa1802: + $p := 1802; + goto $bb1; +$aa1803: + $p := 1803; + goto $bb1; +$aa1804: + $p := 1804; + goto $bb1; +$aa1805: + $p := 1805; + goto $bb1; +$aa1806: + $p := 1806; + goto $bb1; +$aa1807: + $p := 1807; + goto $bb1; +$aa1808: + $p := 1808; + goto $bb1; +$aa1809: + $p := 1809; + goto $bb1; +$aa1810: + $p := 1810; + goto $bb1; +$aa1811: + $p := 1811; + goto $bb1; +$aa1812: + $p := 1812; + goto $bb1; +$aa1813: + $p := 1813; + goto $bb1; +$aa1814: + $p := 1814; + goto $bb1; +$aa1815: + $p := 1815; + goto $bb1; +$aa1816: + $p := 1816; + goto $bb1; +$aa1817: + $p := 1817; + goto $bb1; +$aa1818: + $p := 1818; + goto $bb1; +$aa1819: + $p := 1819; + goto $bb1; +$aa1820: + $p := 1820; + goto $bb1; +$aa1821: + $p := 1821; + goto $bb1; +$aa1822: + $p := 1822; + goto $bb1; +$aa1823: + $p := 1823; + goto $bb1; +$aa1824: + $p := 1824; + goto $bb1; +$aa1825: + $p := 1825; + goto $bb1; +$aa1826: + $p := 1826; + goto $bb1; +$aa1827: + $p := 1827; + goto $bb1; +$aa1828: + $p := 1828; + goto $bb1; +$aa1829: + $p := 1829; + goto $bb1; +$aa1830: + $p := 1830; + goto $bb1; +$aa1831: + $p := 1831; + goto $bb1; +$aa1832: + $p := 1832; + goto $bb1; +$aa1833: + $p := 1833; + goto $bb1; +$aa1834: + $p := 1834; + goto $bb1; +$aa1835: + $p := 1835; + goto $bb1; +$aa1836: + $p := 1836; + goto $bb1; +$aa1837: + $p := 1837; + goto $bb1; +$aa1838: + $p := 1838; + goto $bb1; +$aa1839: + $p := 1839; + goto $bb1; +$aa1840: + $p := 1840; + goto $bb1; +$aa1841: + $p := 1841; + goto $bb1; +$aa1842: + $p := 1842; + goto $bb1; +$aa1843: + $p := 1843; + goto $bb1; +$aa1844: + $p := 1844; + goto $bb1; +$aa1845: + $p := 1845; + goto $bb1; +$aa1846: + $p := 1846; + goto $bb1; +$aa1847: + $p := 1847; + goto $bb1; +$aa1848: + $p := 1848; + goto $bb1; +$aa1849: + $p := 1849; + goto $bb1; +$aa1850: + $p := 1850; + goto $bb1; +$aa1851: + $p := 1851; + goto $bb1; +$aa1852: + $p := 1852; + goto $bb1; +$aa1853: + $p := 1853; + goto $bb1; +$aa1854: + $p := 1854; + goto $bb1; +$aa1855: + $p := 1855; + goto $bb1; +$aa1856: + $p := 1856; + goto $bb1; +$aa1857: + $p := 1857; + goto $bb1; +$aa1858: + $p := 1858; + goto $bb1; +$aa1859: + $p := 1859; + goto $bb1; +$aa1860: + $p := 1860; + goto $bb1; +$aa1861: + $p := 1861; + goto $bb1; +$aa1862: + $p := 1862; + goto $bb1; +$aa1863: + $p := 1863; + goto $bb1; +$aa1864: + $p := 1864; + goto $bb1; +$aa1865: + $p := 1865; + goto $bb1; +$aa1866: + $p := 1866; + goto $bb1; +$aa1867: + $p := 1867; + goto $bb1; +$aa1868: + $p := 1868; + goto $bb1; +$aa1869: + $p := 1869; + goto $bb1; +$aa1870: + $p := 1870; + goto $bb1; +$aa1871: + $p := 1871; + goto $bb1; +$aa1872: + $p := 1872; + goto $bb1; +$aa1873: + $p := 1873; + goto $bb1; +$aa1874: + $p := 1874; + goto $bb1; +$aa1875: + $p := 1875; + goto $bb1; +$aa1876: + $p := 1876; + goto $bb1; +$aa1877: + $p := 1877; + goto $bb1; +$aa1878: + $p := 1878; + goto $bb1; +$aa1879: + $p := 1879; + goto $bb1; +$aa1880: + $p := 1880; + goto $bb1; +$aa1881: + $p := 1881; + goto $bb1; +$aa1882: + $p := 1882; + goto $bb1; +$aa1883: + $p := 1883; + goto $bb1; +$aa1884: + $p := 1884; + goto $bb1; +$aa1885: + $p := 1885; + goto $bb1; +$aa1886: + $p := 1886; + goto $bb1; +$aa1887: + $p := 1887; + goto $bb1; +$aa1888: + $p := 1888; + goto $bb1; +$aa1889: + $p := 1889; + goto $bb1; +$aa1890: + $p := 1890; + goto $bb1; +$aa1891: + $p := 1891; + goto $bb1; +$aa1892: + $p := 1892; + goto $bb1; +$aa1893: + $p := 1893; + goto $bb1; +$aa1894: + $p := 1894; + goto $bb1; +$aa1895: + $p := 1895; + goto $bb1; +$aa1896: + $p := 1896; + goto $bb1; +$aa1897: + $p := 1897; + goto $bb1; +$aa1898: + $p := 1898; + goto $bb1; +$aa1899: + $p := 1899; + goto $bb1; +$aa1900: + $p := 1900; + goto $bb1; +$aa1901: + $p := 1901; + goto $bb1; +$aa1902: + $p := 1902; + goto $bb1; +$aa1903: + $p := 1903; + goto $bb1; +$aa1904: + $p := 1904; + goto $bb1; +$aa1905: + $p := 1905; + goto $bb1; +$aa1906: + $p := 1906; + goto $bb1; +$aa1907: + $p := 1907; + goto $bb1; +$aa1908: + $p := 1908; + goto $bb1; +$aa1909: + $p := 1909; + goto $bb1; +$aa1910: + $p := 1910; + goto $bb1; +$aa1911: + $p := 1911; + goto $bb1; +$aa1912: + $p := 1912; + goto $bb1; +$aa1913: + $p := 1913; + goto $bb1; +$aa1914: + $p := 1914; + goto $bb1; +$aa1915: + $p := 1915; + goto $bb1; +$aa1916: + $p := 1916; + goto $bb1; +$aa1917: + $p := 1917; + goto $bb1; +$aa1918: + $p := 1918; + goto $bb1; +$aa1919: + $p := 1919; + goto $bb1; +$aa1920: + $p := 1920; + goto $bb1; +$aa1921: + $p := 1921; + goto $bb1; +$aa1922: + $p := 1922; + goto $bb1; +$aa1923: + $p := 1923; + goto $bb1; +$aa1924: + $p := 1924; + goto $bb1; +$aa1925: + $p := 1925; + goto $bb1; +$aa1926: + $p := 1926; + goto $bb1; +$aa1927: + $p := 1927; + goto $bb1; +$aa1928: + $p := 1928; + goto $bb1; +$aa1929: + $p := 1929; + goto $bb1; +$aa1930: + $p := 1930; + goto $bb1; +$aa1931: + $p := 1931; + goto $bb1; +$aa1932: + $p := 1932; + goto $bb1; +$aa1933: + $p := 1933; + goto $bb1; +$aa1934: + $p := 1934; + goto $bb1; +$aa1935: + $p := 1935; + goto $bb1; +$aa1936: + $p := 1936; + goto $bb1; +$aa1937: + $p := 1937; + goto $bb1; +$aa1938: + $p := 1938; + goto $bb1; +$aa1939: + $p := 1939; + goto $bb1; +$aa1940: + $p := 1940; + goto $bb1; +$aa1941: + $p := 1941; + goto $bb1; +$aa1942: + $p := 1942; + goto $bb1; +$aa1943: + $p := 1943; + goto $bb1; +$aa1944: + $p := 1944; + goto $bb1; +$aa1945: + $p := 1945; + goto $bb1; +$aa1946: + $p := 1946; + goto $bb1; +$aa1947: + $p := 1947; + goto $bb1; +$aa1948: + $p := 1948; + goto $bb1; +$aa1949: + $p := 1949; + goto $bb1; +$aa1950: + $p := 1950; + goto $bb1; +$aa1951: + $p := 1951; + goto $bb1; +$aa1952: + $p := 1952; + goto $bb1; +$aa1953: + $p := 1953; + goto $bb1; +$aa1954: + $p := 1954; + goto $bb1; +$aa1955: + $p := 1955; + goto $bb1; +$aa1956: + $p := 1956; + goto $bb1; +$aa1957: + $p := 1957; + goto $bb1; +$aa1958: + $p := 1958; + goto $bb1; +$aa1959: + $p := 1959; + goto $bb1; +$aa1960: + $p := 1960; + goto $bb1; +$aa1961: + $p := 1961; + goto $bb1; +$aa1962: + $p := 1962; + goto $bb1; +$aa1963: + $p := 1963; + goto $bb1; +$aa1964: + $p := 1964; + goto $bb1; +$aa1965: + $p := 1965; + goto $bb1; +$aa1966: + $p := 1966; + goto $bb1; +$aa1967: + $p := 1967; + goto $bb1; +$aa1968: + $p := 1968; + goto $bb1; +$aa1969: + $p := 1969; + goto $bb1; +$aa1970: + $p := 1970; + goto $bb1; +$aa1971: + $p := 1971; + goto $bb1; +$aa1972: + $p := 1972; + goto $bb1; +$aa1973: + $p := 1973; + goto $bb1; +$aa1974: + $p := 1974; + goto $bb1; +$aa1975: + $p := 1975; + goto $bb1; +$aa1976: + $p := 1976; + goto $bb1; +$aa1977: + $p := 1977; + goto $bb1; +$aa1978: + $p := 1978; + goto $bb1; +$aa1979: + $p := 1979; + goto $bb1; +$aa1980: + $p := 1980; + goto $bb1; +$aa1981: + $p := 1981; + goto $bb1; +$aa1982: + $p := 1982; + goto $bb1; +$aa1983: + $p := 1983; + goto $bb1; +$aa1984: + $p := 1984; + goto $bb1; +$aa1985: + $p := 1985; + goto $bb1; +$aa1986: + $p := 1986; + goto $bb1; +$aa1987: + $p := 1987; + goto $bb1; +$aa1988: + $p := 1988; + goto $bb1; +$aa1989: + $p := 1989; + goto $bb1; +$aa1990: + $p := 1990; + goto $bb1; +$aa1991: + $p := 1991; + goto $bb1; +$aa1992: + $p := 1992; + goto $bb1; +$aa1993: + $p := 1993; + goto $bb1; +$aa1994: + $p := 1994; + goto $bb1; +$aa1995: + $p := 1995; + goto $bb1; +$aa1996: + $p := 1996; + goto $bb1; +$aa1997: + $p := 1997; + goto $bb1; +$aa1998: + $p := 1998; + goto $bb1; +$aa1999: + $p := 1999; + goto $bb1; +$aa2000: + $p := 2000; + goto $bb1; +$aa2001: + $p := 2001; + goto $bb1; +$aa2002: + $p := 2002; + goto $bb1; +$aa2003: + $p := 2003; + goto $bb1; +$aa2004: + $p := 2004; + goto $bb1; +$aa2005: + $p := 2005; + goto $bb1; +$aa2006: + $p := 2006; + goto $bb1; +$aa2007: + $p := 2007; + goto $bb1; +$aa2008: + $p := 2008; + goto $bb1; +$aa2009: + $p := 2009; + goto $bb1; +$aa2010: + $p := 2010; + goto $bb1; +$aa2011: + $p := 2011; + goto $bb1; +$aa2012: + $p := 2012; + goto $bb1; +$aa2013: + $p := 2013; + goto $bb1; +$aa2014: + $p := 2014; + goto $bb1; +$aa2015: + $p := 2015; + goto $bb1; +$aa2016: + $p := 2016; + goto $bb1; +$aa2017: + $p := 2017; + goto $bb1; +$aa2018: + $p := 2018; + goto $bb1; +$aa2019: + $p := 2019; + goto $bb1; +$aa2020: + $p := 2020; + goto $bb1; +$aa2021: + $p := 2021; + goto $bb1; +$aa2022: + $p := 2022; + goto $bb1; +$aa2023: + $p := 2023; + goto $bb1; +$aa2024: + $p := 2024; + goto $bb1; +$aa2025: + $p := 2025; + goto $bb1; +$aa2026: + $p := 2026; + goto $bb1; +$aa2027: + $p := 2027; + goto $bb1; +$aa2028: + $p := 2028; + goto $bb1; +$aa2029: + $p := 2029; + goto $bb1; +$aa2030: + $p := 2030; + goto $bb1; +$aa2031: + $p := 2031; + goto $bb1; +$aa2032: + $p := 2032; + goto $bb1; +$aa2033: + $p := 2033; + goto $bb1; +$aa2034: + $p := 2034; + goto $bb1; +$aa2035: + $p := 2035; + goto $bb1; +$aa2036: + $p := 2036; + goto $bb1; +$aa2037: + $p := 2037; + goto $bb1; +$aa2038: + $p := 2038; + goto $bb1; +$aa2039: + $p := 2039; + goto $bb1; +$aa2040: + $p := 2040; + goto $bb1; +$aa2041: + $p := 2041; + goto $bb1; +$aa2042: + $p := 2042; + goto $bb1; +$aa2043: + $p := 2043; + goto $bb1; +$aa2044: + $p := 2044; + goto $bb1; +$aa2045: + $p := 2045; + goto $bb1; +$aa2046: + $p := 2046; + goto $bb1; +$aa2047: + $p := 2047; + goto $bb1; +$aa2048: + $p := 2048; + goto $bb1; +$aa2049: + $p := 2049; + goto $bb1; +$aa2050: + $p := 2050; + goto $bb1; +$aa2051: + $p := 2051; + goto $bb1; +$aa2052: + $p := 2052; + goto $bb1; +$aa2053: + $p := 2053; + goto $bb1; +$aa2054: + $p := 2054; + goto $bb1; +$aa2055: + $p := 2055; + goto $bb1; +$aa2056: + $p := 2056; + goto $bb1; +$aa2057: + $p := 2057; + goto $bb1; +$aa2058: + $p := 2058; + goto $bb1; +$aa2059: + $p := 2059; + goto $bb1; +$aa2060: + $p := 2060; + goto $bb1; +$aa2061: + $p := 2061; + goto $bb1; +$aa2062: + $p := 2062; + goto $bb1; +$aa2063: + $p := 2063; + goto $bb1; +$aa2064: + $p := 2064; + goto $bb1; +$aa2065: + $p := 2065; + goto $bb1; +$aa2066: + $p := 2066; + goto $bb1; +$aa2067: + $p := 2067; + goto $bb1; +$aa2068: + $p := 2068; + goto $bb1; +$aa2069: + $p := 2069; + goto $bb1; +$aa2070: + $p := 2070; + goto $bb1; +$aa2071: + $p := 2071; + goto $bb1; +$aa2072: + $p := 2072; + goto $bb1; +$aa2073: + $p := 2073; + goto $bb1; +$aa2074: + $p := 2074; + goto $bb1; +$aa2075: + $p := 2075; + goto $bb1; +$aa2076: + $p := 2076; + goto $bb1; +$aa2077: + $p := 2077; + goto $bb1; +$aa2078: + $p := 2078; + goto $bb1; +$aa2079: + $p := 2079; + goto $bb1; +$aa2080: + $p := 2080; + goto $bb1; +$aa2081: + $p := 2081; + goto $bb1; +$aa2082: + $p := 2082; + goto $bb1; +$aa2083: + $p := 2083; + goto $bb1; +$aa2084: + $p := 2084; + goto $bb1; +$aa2085: + $p := 2085; + goto $bb1; +$aa2086: + $p := 2086; + goto $bb1; +$aa2087: + $p := 2087; + goto $bb1; +$aa2088: + $p := 2088; + goto $bb1; +$aa2089: + $p := 2089; + goto $bb1; +$aa2090: + $p := 2090; + goto $bb1; +$aa2091: + $p := 2091; + goto $bb1; +$aa2092: + $p := 2092; + goto $bb1; +$aa2093: + $p := 2093; + goto $bb1; +$aa2094: + $p := 2094; + goto $bb1; +$aa2095: + $p := 2095; + goto $bb1; +$aa2096: + $p := 2096; + goto $bb1; +$aa2097: + $p := 2097; + goto $bb1; +$aa2098: + $p := 2098; + goto $bb1; +$aa2099: + $p := 2099; + goto $bb1; +$aa2100: + $p := 2100; + goto $bb1; +$aa2101: + $p := 2101; + goto $bb1; +$aa2102: + $p := 2102; + goto $bb1; +$aa2103: + $p := 2103; + goto $bb1; +$aa2104: + $p := 2104; + goto $bb1; +$aa2105: + $p := 2105; + goto $bb1; +$aa2106: + $p := 2106; + goto $bb1; +$aa2107: + $p := 2107; + goto $bb1; +$aa2108: + $p := 2108; + goto $bb1; +$aa2109: + $p := 2109; + goto $bb1; +$aa2110: + $p := 2110; + goto $bb1; +$aa2111: + $p := 2111; + goto $bb1; +$aa2112: + $p := 2112; + goto $bb1; +$aa2113: + $p := 2113; + goto $bb1; +$aa2114: + $p := 2114; + goto $bb1; +$aa2115: + $p := 2115; + goto $bb1; +$aa2116: + $p := 2116; + goto $bb1; +$aa2117: + $p := 2117; + goto $bb1; +$aa2118: + $p := 2118; + goto $bb1; +$aa2119: + $p := 2119; + goto $bb1; +$aa2120: + $p := 2120; + goto $bb1; +$aa2121: + $p := 2121; + goto $bb1; +$aa2122: + $p := 2122; + goto $bb1; +$aa2123: + $p := 2123; + goto $bb1; +$aa2124: + $p := 2124; + goto $bb1; +$aa2125: + $p := 2125; + goto $bb1; +$aa2126: + $p := 2126; + goto $bb1; +$aa2127: + $p := 2127; + goto $bb1; +$aa2128: + $p := 2128; + goto $bb1; +$aa2129: + $p := 2129; + goto $bb1; +$aa2130: + $p := 2130; + goto $bb1; +$aa2131: + $p := 2131; + goto $bb1; +$aa2132: + $p := 2132; + goto $bb1; +$aa2133: + $p := 2133; + goto $bb1; +$aa2134: + $p := 2134; + goto $bb1; +$aa2135: + $p := 2135; + goto $bb1; +$aa2136: + $p := 2136; + goto $bb1; +$aa2137: + $p := 2137; + goto $bb1; +$aa2138: + $p := 2138; + goto $bb1; +$aa2139: + $p := 2139; + goto $bb1; +$aa2140: + $p := 2140; + goto $bb1; +$aa2141: + $p := 2141; + goto $bb1; +$aa2142: + $p := 2142; + goto $bb1; +$aa2143: + $p := 2143; + goto $bb1; +$aa2144: + $p := 2144; + goto $bb1; +$aa2145: + $p := 2145; + goto $bb1; +$aa2146: + $p := 2146; + goto $bb1; +$aa2147: + $p := 2147; + goto $bb1; +$aa2148: + $p := 2148; + goto $bb1; +$aa2149: + $p := 2149; + goto $bb1; +$aa2150: + $p := 2150; + goto $bb1; +$aa2151: + $p := 2151; + goto $bb1; +$aa2152: + $p := 2152; + goto $bb1; +$aa2153: + $p := 2153; + goto $bb1; +$aa2154: + $p := 2154; + goto $bb1; +$aa2155: + $p := 2155; + goto $bb1; +$aa2156: + $p := 2156; + goto $bb1; +$aa2157: + $p := 2157; + goto $bb1; +$aa2158: + $p := 2158; + goto $bb1; +$aa2159: + $p := 2159; + goto $bb1; +$aa2160: + $p := 2160; + goto $bb1; +$aa2161: + $p := 2161; + goto $bb1; +$aa2162: + $p := 2162; + goto $bb1; +$aa2163: + $p := 2163; + goto $bb1; +$aa2164: + $p := 2164; + goto $bb1; +$aa2165: + $p := 2165; + goto $bb1; +$aa2166: + $p := 2166; + goto $bb1; +$aa2167: + $p := 2167; + goto $bb1; +$aa2168: + $p := 2168; + goto $bb1; +$aa2169: + $p := 2169; + goto $bb1; +$aa2170: + $p := 2170; + goto $bb1; +$aa2171: + $p := 2171; + goto $bb1; +$aa2172: + $p := 2172; + goto $bb1; +$aa2173: + $p := 2173; + goto $bb1; +$aa2174: + $p := 2174; + goto $bb1; +$aa2175: + $p := 2175; + goto $bb1; +$aa2176: + $p := 2176; + goto $bb1; +$aa2177: + $p := 2177; + goto $bb1; +$aa2178: + $p := 2178; + goto $bb1; +$aa2179: + $p := 2179; + goto $bb1; +$aa2180: + $p := 2180; + goto $bb1; +$aa2181: + $p := 2181; + goto $bb1; +$aa2182: + $p := 2182; + goto $bb1; +$aa2183: + $p := 2183; + goto $bb1; +$aa2184: + $p := 2184; + goto $bb1; +$aa2185: + $p := 2185; + goto $bb1; +$aa2186: + $p := 2186; + goto $bb1; +$aa2187: + $p := 2187; + goto $bb1; +$aa2188: + $p := 2188; + goto $bb1; +$aa2189: + $p := 2189; + goto $bb1; +$aa2190: + $p := 2190; + goto $bb1; +$aa2191: + $p := 2191; + goto $bb1; +$aa2192: + $p := 2192; + goto $bb1; +$aa2193: + $p := 2193; + goto $bb1; +$aa2194: + $p := 2194; + goto $bb1; +$aa2195: + $p := 2195; + goto $bb1; +$aa2196: + $p := 2196; + goto $bb1; +$aa2197: + $p := 2197; + goto $bb1; +$aa2198: + $p := 2198; + goto $bb1; +$aa2199: + $p := 2199; + goto $bb1; +$aa2200: + $p := 2200; + goto $bb1; +$aa2201: + $p := 2201; + goto $bb1; +$aa2202: + $p := 2202; + goto $bb1; +$aa2203: + $p := 2203; + goto $bb1; +$aa2204: + $p := 2204; + goto $bb1; +$aa2205: + $p := 2205; + goto $bb1; +$aa2206: + $p := 2206; + goto $bb1; +$aa2207: + $p := 2207; + goto $bb1; +$aa2208: + $p := 2208; + goto $bb1; +$aa2209: + $p := 2209; + goto $bb1; +$aa2210: + $p := 2210; + goto $bb1; +$aa2211: + $p := 2211; + goto $bb1; +$aa2212: + $p := 2212; + goto $bb1; +$aa2213: + $p := 2213; + goto $bb1; +$aa2214: + $p := 2214; + goto $bb1; +$aa2215: + $p := 2215; + goto $bb1; +$aa2216: + $p := 2216; + goto $bb1; +$aa2217: + $p := 2217; + goto $bb1; +$aa2218: + $p := 2218; + goto $bb1; +$aa2219: + $p := 2219; + goto $bb1; +$aa2220: + $p := 2220; + goto $bb1; +$aa2221: + $p := 2221; + goto $bb1; +$aa2222: + $p := 2222; + goto $bb1; +$aa2223: + $p := 2223; + goto $bb1; +$aa2224: + $p := 2224; + goto $bb1; +$aa2225: + $p := 2225; + goto $bb1; +$aa2226: + $p := 2226; + goto $bb1; +$aa2227: + $p := 2227; + goto $bb1; +$aa2228: + $p := 2228; + goto $bb1; +$aa2229: + $p := 2229; + goto $bb1; +$aa2230: + $p := 2230; + goto $bb1; +$aa2231: + $p := 2231; + goto $bb1; +$aa2232: + $p := 2232; + goto $bb1; +$aa2233: + $p := 2233; + goto $bb1; +$aa2234: + $p := 2234; + goto $bb1; +$aa2235: + $p := 2235; + goto $bb1; +$aa2236: + $p := 2236; + goto $bb1; +$aa2237: + $p := 2237; + goto $bb1; +$aa2238: + $p := 2238; + goto $bb1; +$aa2239: + $p := 2239; + goto $bb1; +$aa2240: + $p := 2240; + goto $bb1; +$aa2241: + $p := 2241; + goto $bb1; +$aa2242: + $p := 2242; + goto $bb1; +$aa2243: + $p := 2243; + goto $bb1; +$aa2244: + $p := 2244; + goto $bb1; +$aa2245: + $p := 2245; + goto $bb1; +$aa2246: + $p := 2246; + goto $bb1; +$aa2247: + $p := 2247; + goto $bb1; +$aa2248: + $p := 2248; + goto $bb1; +$aa2249: + $p := 2249; + goto $bb1; +$aa2250: + $p := 2250; + goto $bb1; +$aa2251: + $p := 2251; + goto $bb1; +$aa2252: + $p := 2252; + goto $bb1; +$aa2253: + $p := 2253; + goto $bb1; +$aa2254: + $p := 2254; + goto $bb1; +$aa2255: + $p := 2255; + goto $bb1; +$aa2256: + $p := 2256; + goto $bb1; +$aa2257: + $p := 2257; + goto $bb1; +$aa2258: + $p := 2258; + goto $bb1; +$aa2259: + $p := 2259; + goto $bb1; +$aa2260: + $p := 2260; + goto $bb1; +$aa2261: + $p := 2261; + goto $bb1; +$aa2262: + $p := 2262; + goto $bb1; +$aa2263: + $p := 2263; + goto $bb1; +$aa2264: + $p := 2264; + goto $bb1; +$aa2265: + $p := 2265; + goto $bb1; +$aa2266: + $p := 2266; + goto $bb1; +$aa2267: + $p := 2267; + goto $bb1; +$aa2268: + $p := 2268; + goto $bb1; +$aa2269: + $p := 2269; + goto $bb1; +$aa2270: + $p := 2270; + goto $bb1; +$aa2271: + $p := 2271; + goto $bb1; +$aa2272: + $p := 2272; + goto $bb1; +$aa2273: + $p := 2273; + goto $bb1; +$aa2274: + $p := 2274; + goto $bb1; +$aa2275: + $p := 2275; + goto $bb1; +$aa2276: + $p := 2276; + goto $bb1; +$aa2277: + $p := 2277; + goto $bb1; +$aa2278: + $p := 2278; + goto $bb1; +$aa2279: + $p := 2279; + goto $bb1; +$aa2280: + $p := 2280; + goto $bb1; +$aa2281: + $p := 2281; + goto $bb1; +$aa2282: + $p := 2282; + goto $bb1; +$aa2283: + $p := 2283; + goto $bb1; +$aa2284: + $p := 2284; + goto $bb1; +$aa2285: + $p := 2285; + goto $bb1; +$aa2286: + $p := 2286; + goto $bb1; +$aa2287: + $p := 2287; + goto $bb1; +$aa2288: + $p := 2288; + goto $bb1; +$aa2289: + $p := 2289; + goto $bb1; +$aa2290: + $p := 2290; + goto $bb1; +$aa2291: + $p := 2291; + goto $bb1; +$aa2292: + $p := 2292; + goto $bb1; +$aa2293: + $p := 2293; + goto $bb1; +$aa2294: + $p := 2294; + goto $bb1; +$aa2295: + $p := 2295; + goto $bb1; +$aa2296: + $p := 2296; + goto $bb1; +$aa2297: + $p := 2297; + goto $bb1; +$aa2298: + $p := 2298; + goto $bb1; +$aa2299: + $p := 2299; + goto $bb1; +$aa2300: + $p := 2300; + goto $bb1; +$aa2301: + $p := 2301; + goto $bb1; +$aa2302: + $p := 2302; + goto $bb1; +$aa2303: + $p := 2303; + goto $bb1; +$aa2304: + $p := 2304; + goto $bb1; +$aa2305: + $p := 2305; + goto $bb1; +$aa2306: + $p := 2306; + goto $bb1; +$aa2307: + $p := 2307; + goto $bb1; +$aa2308: + $p := 2308; + goto $bb1; +$aa2309: + $p := 2309; + goto $bb1; +$aa2310: + $p := 2310; + goto $bb1; +$aa2311: + $p := 2311; + goto $bb1; +$aa2312: + $p := 2312; + goto $bb1; +$aa2313: + $p := 2313; + goto $bb1; +$aa2314: + $p := 2314; + goto $bb1; +$aa2315: + $p := 2315; + goto $bb1; +$aa2316: + $p := 2316; + goto $bb1; +$aa2317: + $p := 2317; + goto $bb1; +$aa2318: + $p := 2318; + goto $bb1; +$aa2319: + $p := 2319; + goto $bb1; +$aa2320: + $p := 2320; + goto $bb1; +$aa2321: + $p := 2321; + goto $bb1; +$aa2322: + $p := 2322; + goto $bb1; +$aa2323: + $p := 2323; + goto $bb1; +$aa2324: + $p := 2324; + goto $bb1; +$aa2325: + $p := 2325; + goto $bb1; +$aa2326: + $p := 2326; + goto $bb1; +$aa2327: + $p := 2327; + goto $bb1; +$aa2328: + $p := 2328; + goto $bb1; +$aa2329: + $p := 2329; + goto $bb1; +$aa2330: + $p := 2330; + goto $bb1; +$aa2331: + $p := 2331; + goto $bb1; +$aa2332: + $p := 2332; + goto $bb1; +$aa2333: + $p := 2333; + goto $bb1; +$aa2334: + $p := 2334; + goto $bb1; +$aa2335: + $p := 2335; + goto $bb1; +$aa2336: + $p := 2336; + goto $bb1; +$aa2337: + $p := 2337; + goto $bb1; +$aa2338: + $p := 2338; + goto $bb1; +$aa2339: + $p := 2339; + goto $bb1; +$aa2340: + $p := 2340; + goto $bb1; +$aa2341: + $p := 2341; + goto $bb1; +$aa2342: + $p := 2342; + goto $bb1; +$aa2343: + $p := 2343; + goto $bb1; +$aa2344: + $p := 2344; + goto $bb1; +$aa2345: + $p := 2345; + goto $bb1; +$aa2346: + $p := 2346; + goto $bb1; +$aa2347: + $p := 2347; + goto $bb1; +$aa2348: + $p := 2348; + goto $bb1; +$aa2349: + $p := 2349; + goto $bb1; +$aa2350: + $p := 2350; + goto $bb1; +$aa2351: + $p := 2351; + goto $bb1; +$aa2352: + $p := 2352; + goto $bb1; +$aa2353: + $p := 2353; + goto $bb1; +$aa2354: + $p := 2354; + goto $bb1; +$aa2355: + $p := 2355; + goto $bb1; +$aa2356: + $p := 2356; + goto $bb1; +$aa2357: + $p := 2357; + goto $bb1; +$aa2358: + $p := 2358; + goto $bb1; +$aa2359: + $p := 2359; + goto $bb1; +$aa2360: + $p := 2360; + goto $bb1; +$aa2361: + $p := 2361; + goto $bb1; +$aa2362: + $p := 2362; + goto $bb1; +$aa2363: + $p := 2363; + goto $bb1; +$aa2364: + $p := 2364; + goto $bb1; +$aa2365: + $p := 2365; + goto $bb1; +$aa2366: + $p := 2366; + goto $bb1; +$aa2367: + $p := 2367; + goto $bb1; +$aa2368: + $p := 2368; + goto $bb1; +$aa2369: + $p := 2369; + goto $bb1; +$aa2370: + $p := 2370; + goto $bb1; +$aa2371: + $p := 2371; + goto $bb1; +$aa2372: + $p := 2372; + goto $bb1; +$aa2373: + $p := 2373; + goto $bb1; +$aa2374: + $p := 2374; + goto $bb1; +$aa2375: + $p := 2375; + goto $bb1; +$aa2376: + $p := 2376; + goto $bb1; +$aa2377: + $p := 2377; + goto $bb1; +$aa2378: + $p := 2378; + goto $bb1; +$aa2379: + $p := 2379; + goto $bb1; +$aa2380: + $p := 2380; + goto $bb1; +$aa2381: + $p := 2381; + goto $bb1; +$aa2382: + $p := 2382; + goto $bb1; +$aa2383: + $p := 2383; + goto $bb1; +$aa2384: + $p := 2384; + goto $bb1; +$aa2385: + $p := 2385; + goto $bb1; +$aa2386: + $p := 2386; + goto $bb1; +$aa2387: + $p := 2387; + goto $bb1; +$aa2388: + $p := 2388; + goto $bb1; +$aa2389: + $p := 2389; + goto $bb1; +$aa2390: + $p := 2390; + goto $bb1; +$aa2391: + $p := 2391; + goto $bb1; +$aa2392: + $p := 2392; + goto $bb1; +$aa2393: + $p := 2393; + goto $bb1; +$aa2394: + $p := 2394; + goto $bb1; +$aa2395: + $p := 2395; + goto $bb1; +$aa2396: + $p := 2396; + goto $bb1; +$aa2397: + $p := 2397; + goto $bb1; +$aa2398: + $p := 2398; + goto $bb1; +$aa2399: + $p := 2399; + goto $bb1; +$aa2400: + $p := 2400; + goto $bb1; +$aa2401: + $p := 2401; + goto $bb1; +$aa2402: + $p := 2402; + goto $bb1; +$aa2403: + $p := 2403; + goto $bb1; +$aa2404: + $p := 2404; + goto $bb1; +$aa2405: + $p := 2405; + goto $bb1; +$aa2406: + $p := 2406; + goto $bb1; +$aa2407: + $p := 2407; + goto $bb1; +$aa2408: + $p := 2408; + goto $bb1; +$aa2409: + $p := 2409; + goto $bb1; +$aa2410: + $p := 2410; + goto $bb1; +$aa2411: + $p := 2411; + goto $bb1; +$aa2412: + $p := 2412; + goto $bb1; +$aa2413: + $p := 2413; + goto $bb1; +$aa2414: + $p := 2414; + goto $bb1; +$aa2415: + $p := 2415; + goto $bb1; +$aa2416: + $p := 2416; + goto $bb1; +$aa2417: + $p := 2417; + goto $bb1; +$aa2418: + $p := 2418; + goto $bb1; +$aa2419: + $p := 2419; + goto $bb1; +$aa2420: + $p := 2420; + goto $bb1; +$aa2421: + $p := 2421; + goto $bb1; +$aa2422: + $p := 2422; + goto $bb1; +$aa2423: + $p := 2423; + goto $bb1; +$aa2424: + $p := 2424; + goto $bb1; +$aa2425: + $p := 2425; + goto $bb1; +$aa2426: + $p := 2426; + goto $bb1; +$aa2427: + $p := 2427; + goto $bb1; +$aa2428: + $p := 2428; + goto $bb1; +$aa2429: + $p := 2429; + goto $bb1; +$aa2430: + $p := 2430; + goto $bb1; +$aa2431: + $p := 2431; + goto $bb1; +$aa2432: + $p := 2432; + goto $bb1; +$aa2433: + $p := 2433; + goto $bb1; +$aa2434: + $p := 2434; + goto $bb1; +$aa2435: + $p := 2435; + goto $bb1; +$aa2436: + $p := 2436; + goto $bb1; +$aa2437: + $p := 2437; + goto $bb1; +$aa2438: + $p := 2438; + goto $bb1; +$aa2439: + $p := 2439; + goto $bb1; +$aa2440: + $p := 2440; + goto $bb1; +$aa2441: + $p := 2441; + goto $bb1; +$aa2442: + $p := 2442; + goto $bb1; +$aa2443: + $p := 2443; + goto $bb1; +$aa2444: + $p := 2444; + goto $bb1; +$aa2445: + $p := 2445; + goto $bb1; +$aa2446: + $p := 2446; + goto $bb1; +$aa2447: + $p := 2447; + goto $bb1; +$aa2448: + $p := 2448; + goto $bb1; +$aa2449: + $p := 2449; + goto $bb1; +$aa2450: + $p := 2450; + goto $bb1; +$aa2451: + $p := 2451; + goto $bb1; +$aa2452: + $p := 2452; + goto $bb1; +$aa2453: + $p := 2453; + goto $bb1; +$aa2454: + $p := 2454; + goto $bb1; +$aa2455: + $p := 2455; + goto $bb1; +$aa2456: + $p := 2456; + goto $bb1; +$aa2457: + $p := 2457; + goto $bb1; +$aa2458: + $p := 2458; + goto $bb1; +$aa2459: + $p := 2459; + goto $bb1; +$aa2460: + $p := 2460; + goto $bb1; +$aa2461: + $p := 2461; + goto $bb1; +$aa2462: + $p := 2462; + goto $bb1; +$aa2463: + $p := 2463; + goto $bb1; +$aa2464: + $p := 2464; + goto $bb1; +$aa2465: + $p := 2465; + goto $bb1; +$aa2466: + $p := 2466; + goto $bb1; +$aa2467: + $p := 2467; + goto $bb1; +$aa2468: + $p := 2468; + goto $bb1; +$aa2469: + $p := 2469; + goto $bb1; +$aa2470: + $p := 2470; + goto $bb1; +$aa2471: + $p := 2471; + goto $bb1; +$aa2472: + $p := 2472; + goto $bb1; +$aa2473: + $p := 2473; + goto $bb1; +$aa2474: + $p := 2474; + goto $bb1; +$aa2475: + $p := 2475; + goto $bb1; +$aa2476: + $p := 2476; + goto $bb1; +$aa2477: + $p := 2477; + goto $bb1; +$aa2478: + $p := 2478; + goto $bb1; +$aa2479: + $p := 2479; + goto $bb1; +$aa2480: + $p := 2480; + goto $bb1; +$aa2481: + $p := 2481; + goto $bb1; +$aa2482: + $p := 2482; + goto $bb1; +$aa2483: + $p := 2483; + goto $bb1; +$aa2484: + $p := 2484; + goto $bb1; +$aa2485: + $p := 2485; + goto $bb1; +$aa2486: + $p := 2486; + goto $bb1; +$aa2487: + $p := 2487; + goto $bb1; +$aa2488: + $p := 2488; + goto $bb1; +$aa2489: + $p := 2489; + goto $bb1; +$aa2490: + $p := 2490; + goto $bb1; +$aa2491: + $p := 2491; + goto $bb1; +$aa2492: + $p := 2492; + goto $bb1; +$aa2493: + $p := 2493; + goto $bb1; +$aa2494: + $p := 2494; + goto $bb1; +$aa2495: + $p := 2495; + goto $bb1; +$aa2496: + $p := 2496; + goto $bb1; +$aa2497: + $p := 2497; + goto $bb1; +$aa2498: + $p := 2498; + goto $bb1; +$aa2499: + $p := 2499; + goto $bb1; +$aa2500: + $p := 2500; + goto $bb1; +$aa2501: + $p := 2501; + goto $bb1; +$aa2502: + $p := 2502; + goto $bb1; +$aa2503: + $p := 2503; + goto $bb1; +$aa2504: + $p := 2504; + goto $bb1; +$aa2505: + $p := 2505; + goto $bb1; +$aa2506: + $p := 2506; + goto $bb1; +$aa2507: + $p := 2507; + goto $bb1; +$aa2508: + $p := 2508; + goto $bb1; +$aa2509: + $p := 2509; + goto $bb1; +$aa2510: + $p := 2510; + goto $bb1; +$aa2511: + $p := 2511; + goto $bb1; +$aa2512: + $p := 2512; + goto $bb1; +$aa2513: + $p := 2513; + goto $bb1; +$aa2514: + $p := 2514; + goto $bb1; +$aa2515: + $p := 2515; + goto $bb1; +$aa2516: + $p := 2516; + goto $bb1; +$aa2517: + $p := 2517; + goto $bb1; +$aa2518: + $p := 2518; + goto $bb1; +$aa2519: + $p := 2519; + goto $bb1; +$aa2520: + $p := 2520; + goto $bb1; +$aa2521: + $p := 2521; + goto $bb1; +$aa2522: + $p := 2522; + goto $bb1; +$aa2523: + $p := 2523; + goto $bb1; +$aa2524: + $p := 2524; + goto $bb1; +$aa2525: + $p := 2525; + goto $bb1; +$aa2526: + $p := 2526; + goto $bb1; +$aa2527: + $p := 2527; + goto $bb1; +$aa2528: + $p := 2528; + goto $bb1; +$aa2529: + $p := 2529; + goto $bb1; +$aa2530: + $p := 2530; + goto $bb1; +$aa2531: + $p := 2531; + goto $bb1; +$aa2532: + $p := 2532; + goto $bb1; +$aa2533: + $p := 2533; + goto $bb1; +$aa2534: + $p := 2534; + goto $bb1; +$aa2535: + $p := 2535; + goto $bb1; +$aa2536: + $p := 2536; + goto $bb1; +$aa2537: + $p := 2537; + goto $bb1; +$aa2538: + $p := 2538; + goto $bb1; +$aa2539: + $p := 2539; + goto $bb1; +$aa2540: + $p := 2540; + goto $bb1; +$aa2541: + $p := 2541; + goto $bb1; +$aa2542: + $p := 2542; + goto $bb1; +$aa2543: + $p := 2543; + goto $bb1; +$aa2544: + $p := 2544; + goto $bb1; +$aa2545: + $p := 2545; + goto $bb1; +$aa2546: + $p := 2546; + goto $bb1; +$aa2547: + $p := 2547; + goto $bb1; +$aa2548: + $p := 2548; + goto $bb1; +$aa2549: + $p := 2549; + goto $bb1; +$aa2550: + $p := 2550; + goto $bb1; +$aa2551: + $p := 2551; + goto $bb1; +$aa2552: + $p := 2552; + goto $bb1; +$aa2553: + $p := 2553; + goto $bb1; +$aa2554: + $p := 2554; + goto $bb1; +$aa2555: + $p := 2555; + goto $bb1; +$aa2556: + $p := 2556; + goto $bb1; +$aa2557: + $p := 2557; + goto $bb1; +$aa2558: + $p := 2558; + goto $bb1; +$aa2559: + $p := 2559; + goto $bb1; +$aa2560: + $p := 2560; + goto $bb1; +$aa2561: + $p := 2561; + goto $bb1; +$aa2562: + $p := 2562; + goto $bb1; +$aa2563: + $p := 2563; + goto $bb1; +$aa2564: + $p := 2564; + goto $bb1; +$aa2565: + $p := 2565; + goto $bb1; +$aa2566: + $p := 2566; + goto $bb1; +$aa2567: + $p := 2567; + goto $bb1; +$aa2568: + $p := 2568; + goto $bb1; +$aa2569: + $p := 2569; + goto $bb1; +$aa2570: + $p := 2570; + goto $bb1; +$aa2571: + $p := 2571; + goto $bb1; +$aa2572: + $p := 2572; + goto $bb1; +$aa2573: + $p := 2573; + goto $bb1; +$aa2574: + $p := 2574; + goto $bb1; +$aa2575: + $p := 2575; + goto $bb1; +$aa2576: + $p := 2576; + goto $bb1; +$aa2577: + $p := 2577; + goto $bb1; +$aa2578: + $p := 2578; + goto $bb1; +$aa2579: + $p := 2579; + goto $bb1; +$aa2580: + $p := 2580; + goto $bb1; +$aa2581: + $p := 2581; + goto $bb1; +$aa2582: + $p := 2582; + goto $bb1; +$aa2583: + $p := 2583; + goto $bb1; +$aa2584: + $p := 2584; + goto $bb1; +$aa2585: + $p := 2585; + goto $bb1; +$aa2586: + $p := 2586; + goto $bb1; +$aa2587: + $p := 2587; + goto $bb1; +$aa2588: + $p := 2588; + goto $bb1; +$aa2589: + $p := 2589; + goto $bb1; +$aa2590: + $p := 2590; + goto $bb1; +$aa2591: + $p := 2591; + goto $bb1; +$aa2592: + $p := 2592; + goto $bb1; +$aa2593: + $p := 2593; + goto $bb1; +$aa2594: + $p := 2594; + goto $bb1; +$aa2595: + $p := 2595; + goto $bb1; +$aa2596: + $p := 2596; + goto $bb1; +$aa2597: + $p := 2597; + goto $bb1; +$aa2598: + $p := 2598; + goto $bb1; +$aa2599: + $p := 2599; + goto $bb1; +$aa2600: + $p := 2600; + goto $bb1; +$aa2601: + $p := 2601; + goto $bb1; +$aa2602: + $p := 2602; + goto $bb1; +$aa2603: + $p := 2603; + goto $bb1; +$aa2604: + $p := 2604; + goto $bb1; +$aa2605: + $p := 2605; + goto $bb1; +$aa2606: + $p := 2606; + goto $bb1; +$aa2607: + $p := 2607; + goto $bb1; +$aa2608: + $p := 2608; + goto $bb1; +$aa2609: + $p := 2609; + goto $bb1; +$aa2610: + $p := 2610; + goto $bb1; +$aa2611: + $p := 2611; + goto $bb1; +$aa2612: + $p := 2612; + goto $bb1; +$aa2613: + $p := 2613; + goto $bb1; +$aa2614: + $p := 2614; + goto $bb1; +$aa2615: + $p := 2615; + goto $bb1; +$aa2616: + $p := 2616; + goto $bb1; +$aa2617: + $p := 2617; + goto $bb1; +$aa2618: + $p := 2618; + goto $bb1; +$aa2619: + $p := 2619; + goto $bb1; +$aa2620: + $p := 2620; + goto $bb1; +$aa2621: + $p := 2621; + goto $bb1; +$aa2622: + $p := 2622; + goto $bb1; +$aa2623: + $p := 2623; + goto $bb1; +$aa2624: + $p := 2624; + goto $bb1; +$aa2625: + $p := 2625; + goto $bb1; +$aa2626: + $p := 2626; + goto $bb1; +$aa2627: + $p := 2627; + goto $bb1; +$aa2628: + $p := 2628; + goto $bb1; +$aa2629: + $p := 2629; + goto $bb1; +$aa2630: + $p := 2630; + goto $bb1; +$aa2631: + $p := 2631; + goto $bb1; +$aa2632: + $p := 2632; + goto $bb1; +$aa2633: + $p := 2633; + goto $bb1; +$aa2634: + $p := 2634; + goto $bb1; +$aa2635: + $p := 2635; + goto $bb1; +$aa2636: + $p := 2636; + goto $bb1; +$aa2637: + $p := 2637; + goto $bb1; +$aa2638: + $p := 2638; + goto $bb1; +$aa2639: + $p := 2639; + goto $bb1; +$aa2640: + $p := 2640; + goto $bb1; +$aa2641: + $p := 2641; + goto $bb1; +$aa2642: + $p := 2642; + goto $bb1; +$aa2643: + $p := 2643; + goto $bb1; +$aa2644: + $p := 2644; + goto $bb1; +$aa2645: + $p := 2645; + goto $bb1; +$aa2646: + $p := 2646; + goto $bb1; +$aa2647: + $p := 2647; + goto $bb1; +$aa2648: + $p := 2648; + goto $bb1; +$aa2649: + $p := 2649; + goto $bb1; +$aa2650: + $p := 2650; + goto $bb1; +$aa2651: + $p := 2651; + goto $bb1; +$aa2652: + $p := 2652; + goto $bb1; +$aa2653: + $p := 2653; + goto $bb1; +$aa2654: + $p := 2654; + goto $bb1; +$aa2655: + $p := 2655; + goto $bb1; +$aa2656: + $p := 2656; + goto $bb1; +$aa2657: + $p := 2657; + goto $bb1; +$aa2658: + $p := 2658; + goto $bb1; +$aa2659: + $p := 2659; + goto $bb1; +$aa2660: + $p := 2660; + goto $bb1; +$aa2661: + $p := 2661; + goto $bb1; +$aa2662: + $p := 2662; + goto $bb1; +$aa2663: + $p := 2663; + goto $bb1; +$aa2664: + $p := 2664; + goto $bb1; +$aa2665: + $p := 2665; + goto $bb1; +$aa2666: + $p := 2666; + goto $bb1; +$aa2667: + $p := 2667; + goto $bb1; +$aa2668: + $p := 2668; + goto $bb1; +$aa2669: + $p := 2669; + goto $bb1; +$aa2670: + $p := 2670; + goto $bb1; +$aa2671: + $p := 2671; + goto $bb1; +$aa2672: + $p := 2672; + goto $bb1; +$aa2673: + $p := 2673; + goto $bb1; +$aa2674: + $p := 2674; + goto $bb1; +$aa2675: + $p := 2675; + goto $bb1; +$aa2676: + $p := 2676; + goto $bb1; +$aa2677: + $p := 2677; + goto $bb1; +$aa2678: + $p := 2678; + goto $bb1; +$aa2679: + $p := 2679; + goto $bb1; +$aa2680: + $p := 2680; + goto $bb1; +$aa2681: + $p := 2681; + goto $bb1; +$aa2682: + $p := 2682; + goto $bb1; +$aa2683: + $p := 2683; + goto $bb1; +$aa2684: + $p := 2684; + goto $bb1; +$aa2685: + $p := 2685; + goto $bb1; +$aa2686: + $p := 2686; + goto $bb1; +$aa2687: + $p := 2687; + goto $bb1; +$aa2688: + $p := 2688; + goto $bb1; +$aa2689: + $p := 2689; + goto $bb1; +$aa2690: + $p := 2690; + goto $bb1; +$aa2691: + $p := 2691; + goto $bb1; +$aa2692: + $p := 2692; + goto $bb1; +$aa2693: + $p := 2693; + goto $bb1; +$aa2694: + $p := 2694; + goto $bb1; +$aa2695: + $p := 2695; + goto $bb1; +$aa2696: + $p := 2696; + goto $bb1; +$aa2697: + $p := 2697; + goto $bb1; +$aa2698: + $p := 2698; + goto $bb1; +$aa2699: + $p := 2699; + goto $bb1; +$aa2700: + $p := 2700; + goto $bb1; +$aa2701: + $p := 2701; + goto $bb1; +$aa2702: + $p := 2702; + goto $bb1; +$aa2703: + $p := 2703; + goto $bb1; +$aa2704: + $p := 2704; + goto $bb1; +$aa2705: + $p := 2705; + goto $bb1; +$aa2706: + $p := 2706; + goto $bb1; +$aa2707: + $p := 2707; + goto $bb1; +$aa2708: + $p := 2708; + goto $bb1; +$aa2709: + $p := 2709; + goto $bb1; +$aa2710: + $p := 2710; + goto $bb1; +$aa2711: + $p := 2711; + goto $bb1; +$aa2712: + $p := 2712; + goto $bb1; +$aa2713: + $p := 2713; + goto $bb1; +$aa2714: + $p := 2714; + goto $bb1; +$aa2715: + $p := 2715; + goto $bb1; +$aa2716: + $p := 2716; + goto $bb1; +$aa2717: + $p := 2717; + goto $bb1; +$aa2718: + $p := 2718; + goto $bb1; +$aa2719: + $p := 2719; + goto $bb1; +$aa2720: + $p := 2720; + goto $bb1; +$aa2721: + $p := 2721; + goto $bb1; +$aa2722: + $p := 2722; + goto $bb1; +$aa2723: + $p := 2723; + goto $bb1; +$aa2724: + $p := 2724; + goto $bb1; +$aa2725: + $p := 2725; + goto $bb1; +$aa2726: + $p := 2726; + goto $bb1; +$aa2727: + $p := 2727; + goto $bb1; +$aa2728: + $p := 2728; + goto $bb1; +$aa2729: + $p := 2729; + goto $bb1; +$aa2730: + $p := 2730; + goto $bb1; +$aa2731: + $p := 2731; + goto $bb1; +$aa2732: + $p := 2732; + goto $bb1; +$aa2733: + $p := 2733; + goto $bb1; +$aa2734: + $p := 2734; + goto $bb1; +$aa2735: + $p := 2735; + goto $bb1; +$aa2736: + $p := 2736; + goto $bb1; +$aa2737: + $p := 2737; + goto $bb1; +$aa2738: + $p := 2738; + goto $bb1; +$aa2739: + $p := 2739; + goto $bb1; +$aa2740: + $p := 2740; + goto $bb1; +$aa2741: + $p := 2741; + goto $bb1; +$aa2742: + $p := 2742; + goto $bb1; +$aa2743: + $p := 2743; + goto $bb1; +$aa2744: + $p := 2744; + goto $bb1; +$aa2745: + $p := 2745; + goto $bb1; +$aa2746: + $p := 2746; + goto $bb1; +$aa2747: + $p := 2747; + goto $bb1; +$aa2748: + $p := 2748; + goto $bb1; +$aa2749: + $p := 2749; + goto $bb1; +$aa2750: + $p := 2750; + goto $bb1; +$aa2751: + $p := 2751; + goto $bb1; +$aa2752: + $p := 2752; + goto $bb1; +$aa2753: + $p := 2753; + goto $bb1; +$aa2754: + $p := 2754; + goto $bb1; +$aa2755: + $p := 2755; + goto $bb1; +$aa2756: + $p := 2756; + goto $bb1; +$aa2757: + $p := 2757; + goto $bb1; +$aa2758: + $p := 2758; + goto $bb1; +$aa2759: + $p := 2759; + goto $bb1; +$aa2760: + $p := 2760; + goto $bb1; +$aa2761: + $p := 2761; + goto $bb1; +$aa2762: + $p := 2762; + goto $bb1; +$aa2763: + $p := 2763; + goto $bb1; +$aa2764: + $p := 2764; + goto $bb1; +$aa2765: + $p := 2765; + goto $bb1; +$aa2766: + $p := 2766; + goto $bb1; +$aa2767: + $p := 2767; + goto $bb1; +$aa2768: + $p := 2768; + goto $bb1; +$aa2769: + $p := 2769; + goto $bb1; +$aa2770: + $p := 2770; + goto $bb1; +$aa2771: + $p := 2771; + goto $bb1; +$aa2772: + $p := 2772; + goto $bb1; +$aa2773: + $p := 2773; + goto $bb1; +$aa2774: + $p := 2774; + goto $bb1; +$aa2775: + $p := 2775; + goto $bb1; +$aa2776: + $p := 2776; + goto $bb1; +$aa2777: + $p := 2777; + goto $bb1; +$aa2778: + $p := 2778; + goto $bb1; +$aa2779: + $p := 2779; + goto $bb1; +$aa2780: + $p := 2780; + goto $bb1; +$aa2781: + $p := 2781; + goto $bb1; +$aa2782: + $p := 2782; + goto $bb1; +$aa2783: + $p := 2783; + goto $bb1; +$aa2784: + $p := 2784; + goto $bb1; +$aa2785: + $p := 2785; + goto $bb1; +$aa2786: + $p := 2786; + goto $bb1; +$aa2787: + $p := 2787; + goto $bb1; +$aa2788: + $p := 2788; + goto $bb1; +$aa2789: + $p := 2789; + goto $bb1; +$aa2790: + $p := 2790; + goto $bb1; +$aa2791: + $p := 2791; + goto $bb1; +$aa2792: + $p := 2792; + goto $bb1; +$aa2793: + $p := 2793; + goto $bb1; +$aa2794: + $p := 2794; + goto $bb1; +$aa2795: + $p := 2795; + goto $bb1; +$aa2796: + $p := 2796; + goto $bb1; +$aa2797: + $p := 2797; + goto $bb1; +$aa2798: + $p := 2798; + goto $bb1; +$aa2799: + $p := 2799; + goto $bb1; +$aa2800: + $p := 2800; + goto $bb1; +$aa2801: + $p := 2801; + goto $bb1; +$aa2802: + $p := 2802; + goto $bb1; +$aa2803: + $p := 2803; + goto $bb1; +$aa2804: + $p := 2804; + goto $bb1; +$aa2805: + $p := 2805; + goto $bb1; +$aa2806: + $p := 2806; + goto $bb1; +$aa2807: + $p := 2807; + goto $bb1; +$aa2808: + $p := 2808; + goto $bb1; +$aa2809: + $p := 2809; + goto $bb1; +$aa2810: + $p := 2810; + goto $bb1; +$aa2811: + $p := 2811; + goto $bb1; +$aa2812: + $p := 2812; + goto $bb1; +$aa2813: + $p := 2813; + goto $bb1; +$aa2814: + $p := 2814; + goto $bb1; +$aa2815: + $p := 2815; + goto $bb1; +$aa2816: + $p := 2816; + goto $bb1; +$aa2817: + $p := 2817; + goto $bb1; +$aa2818: + $p := 2818; + goto $bb1; +$aa2819: + $p := 2819; + goto $bb1; +$aa2820: + $p := 2820; + goto $bb1; +$aa2821: + $p := 2821; + goto $bb1; +$aa2822: + $p := 2822; + goto $bb1; +$aa2823: + $p := 2823; + goto $bb1; +$aa2824: + $p := 2824; + goto $bb1; +$aa2825: + $p := 2825; + goto $bb1; +$aa2826: + $p := 2826; + goto $bb1; +$aa2827: + $p := 2827; + goto $bb1; +$aa2828: + $p := 2828; + goto $bb1; +$aa2829: + $p := 2829; + goto $bb1; +$aa2830: + $p := 2830; + goto $bb1; +$aa2831: + $p := 2831; + goto $bb1; +$aa2832: + $p := 2832; + goto $bb1; +$aa2833: + $p := 2833; + goto $bb1; +$aa2834: + $p := 2834; + goto $bb1; +$aa2835: + $p := 2835; + goto $bb1; +$aa2836: + $p := 2836; + goto $bb1; +$aa2837: + $p := 2837; + goto $bb1; +$aa2838: + $p := 2838; + goto $bb1; +$aa2839: + $p := 2839; + goto $bb1; +$aa2840: + $p := 2840; + goto $bb1; +$aa2841: + $p := 2841; + goto $bb1; +$aa2842: + $p := 2842; + goto $bb1; +$aa2843: + $p := 2843; + goto $bb1; +$aa2844: + $p := 2844; + goto $bb1; +$aa2845: + $p := 2845; + goto $bb1; +$aa2846: + $p := 2846; + goto $bb1; +$aa2847: + $p := 2847; + goto $bb1; +$aa2848: + $p := 2848; + goto $bb1; +$aa2849: + $p := 2849; + goto $bb1; +$aa2850: + $p := 2850; + goto $bb1; +$aa2851: + $p := 2851; + goto $bb1; +$aa2852: + $p := 2852; + goto $bb1; +$aa2853: + $p := 2853; + goto $bb1; +$aa2854: + $p := 2854; + goto $bb1; +$aa2855: + $p := 2855; + goto $bb1; +$aa2856: + $p := 2856; + goto $bb1; +$aa2857: + $p := 2857; + goto $bb1; +$aa2858: + $p := 2858; + goto $bb1; +$aa2859: + $p := 2859; + goto $bb1; +$aa2860: + $p := 2860; + goto $bb1; +$aa2861: + $p := 2861; + goto $bb1; +$aa2862: + $p := 2862; + goto $bb1; +$aa2863: + $p := 2863; + goto $bb1; +$aa2864: + $p := 2864; + goto $bb1; +$aa2865: + $p := 2865; + goto $bb1; +$aa2866: + $p := 2866; + goto $bb1; +$aa2867: + $p := 2867; + goto $bb1; +$aa2868: + $p := 2868; + goto $bb1; +$aa2869: + $p := 2869; + goto $bb1; +$aa2870: + $p := 2870; + goto $bb1; +$aa2871: + $p := 2871; + goto $bb1; +$aa2872: + $p := 2872; + goto $bb1; +$aa2873: + $p := 2873; + goto $bb1; +$aa2874: + $p := 2874; + goto $bb1; +$aa2875: + $p := 2875; + goto $bb1; +$aa2876: + $p := 2876; + goto $bb1; +$aa2877: + $p := 2877; + goto $bb1; +$aa2878: + $p := 2878; + goto $bb1; +$aa2879: + $p := 2879; + goto $bb1; +$aa2880: + $p := 2880; + goto $bb1; +$aa2881: + $p := 2881; + goto $bb1; +$aa2882: + $p := 2882; + goto $bb1; +$aa2883: + $p := 2883; + goto $bb1; +$aa2884: + $p := 2884; + goto $bb1; +$aa2885: + $p := 2885; + goto $bb1; +$aa2886: + $p := 2886; + goto $bb1; +$aa2887: + $p := 2887; + goto $bb1; +$aa2888: + $p := 2888; + goto $bb1; +$aa2889: + $p := 2889; + goto $bb1; +$aa2890: + $p := 2890; + goto $bb1; +$aa2891: + $p := 2891; + goto $bb1; +$aa2892: + $p := 2892; + goto $bb1; +$aa2893: + $p := 2893; + goto $bb1; +$aa2894: + $p := 2894; + goto $bb1; +$aa2895: + $p := 2895; + goto $bb1; +$aa2896: + $p := 2896; + goto $bb1; +$aa2897: + $p := 2897; + goto $bb1; +$aa2898: + $p := 2898; + goto $bb1; +$aa2899: + $p := 2899; + goto $bb1; +$aa2900: + $p := 2900; + goto $bb1; +$aa2901: + $p := 2901; + goto $bb1; +$aa2902: + $p := 2902; + goto $bb1; +$aa2903: + $p := 2903; + goto $bb1; +$aa2904: + $p := 2904; + goto $bb1; +$aa2905: + $p := 2905; + goto $bb1; +$aa2906: + $p := 2906; + goto $bb1; +$aa2907: + $p := 2907; + goto $bb1; +$aa2908: + $p := 2908; + goto $bb1; +$aa2909: + $p := 2909; + goto $bb1; +$aa2910: + $p := 2910; + goto $bb1; +$aa2911: + $p := 2911; + goto $bb1; +$aa2912: + $p := 2912; + goto $bb1; +$aa2913: + $p := 2913; + goto $bb1; +$aa2914: + $p := 2914; + goto $bb1; +$aa2915: + $p := 2915; + goto $bb1; +$aa2916: + $p := 2916; + goto $bb1; +$aa2917: + $p := 2917; + goto $bb1; +$aa2918: + $p := 2918; + goto $bb1; +$aa2919: + $p := 2919; + goto $bb1; +$aa2920: + $p := 2920; + goto $bb1; +$aa2921: + $p := 2921; + goto $bb1; +$aa2922: + $p := 2922; + goto $bb1; +$aa2923: + $p := 2923; + goto $bb1; +$aa2924: + $p := 2924; + goto $bb1; +$aa2925: + $p := 2925; + goto $bb1; +$aa2926: + $p := 2926; + goto $bb1; +$aa2927: + $p := 2927; + goto $bb1; +$aa2928: + $p := 2928; + goto $bb1; +$aa2929: + $p := 2929; + goto $bb1; +$aa2930: + $p := 2930; + goto $bb1; +$aa2931: + $p := 2931; + goto $bb1; +$aa2932: + $p := 2932; + goto $bb1; +$aa2933: + $p := 2933; + goto $bb1; +$aa2934: + $p := 2934; + goto $bb1; +$aa2935: + $p := 2935; + goto $bb1; +$aa2936: + $p := 2936; + goto $bb1; +$aa2937: + $p := 2937; + goto $bb1; +$aa2938: + $p := 2938; + goto $bb1; +$aa2939: + $p := 2939; + goto $bb1; +$aa2940: + $p := 2940; + goto $bb1; +$aa2941: + $p := 2941; + goto $bb1; +$aa2942: + $p := 2942; + goto $bb1; +$aa2943: + $p := 2943; + goto $bb1; +$aa2944: + $p := 2944; + goto $bb1; +$aa2945: + $p := 2945; + goto $bb1; +$aa2946: + $p := 2946; + goto $bb1; +$aa2947: + $p := 2947; + goto $bb1; +$aa2948: + $p := 2948; + goto $bb1; +$aa2949: + $p := 2949; + goto $bb1; +$aa2950: + $p := 2950; + goto $bb1; +$aa2951: + $p := 2951; + goto $bb1; +$aa2952: + $p := 2952; + goto $bb1; +$aa2953: + $p := 2953; + goto $bb1; +$aa2954: + $p := 2954; + goto $bb1; +$aa2955: + $p := 2955; + goto $bb1; +$aa2956: + $p := 2956; + goto $bb1; +$aa2957: + $p := 2957; + goto $bb1; +$aa2958: + $p := 2958; + goto $bb1; +$aa2959: + $p := 2959; + goto $bb1; +$aa2960: + $p := 2960; + goto $bb1; +$aa2961: + $p := 2961; + goto $bb1; +$aa2962: + $p := 2962; + goto $bb1; +$aa2963: + $p := 2963; + goto $bb1; +$aa2964: + $p := 2964; + goto $bb1; +$aa2965: + $p := 2965; + goto $bb1; +$aa2966: + $p := 2966; + goto $bb1; +$aa2967: + $p := 2967; + goto $bb1; +$aa2968: + $p := 2968; + goto $bb1; +$aa2969: + $p := 2969; + goto $bb1; +$aa2970: + $p := 2970; + goto $bb1; +$aa2971: + $p := 2971; + goto $bb1; +$aa2972: + $p := 2972; + goto $bb1; +$aa2973: + $p := 2973; + goto $bb1; +$aa2974: + $p := 2974; + goto $bb1; +$aa2975: + $p := 2975; + goto $bb1; +$aa2976: + $p := 2976; + goto $bb1; +$aa2977: + $p := 2977; + goto $bb1; +$aa2978: + $p := 2978; + goto $bb1; +$aa2979: + $p := 2979; + goto $bb1; +$aa2980: + $p := 2980; + goto $bb1; +$aa2981: + $p := 2981; + goto $bb1; +$aa2982: + $p := 2982; + goto $bb1; +$aa2983: + $p := 2983; + goto $bb1; +$aa2984: + $p := 2984; + goto $bb1; +$aa2985: + $p := 2985; + goto $bb1; +$aa2986: + $p := 2986; + goto $bb1; +$aa2987: + $p := 2987; + goto $bb1; +$aa2988: + $p := 2988; + goto $bb1; +$aa2989: + $p := 2989; + goto $bb1; +$aa2990: + $p := 2990; + goto $bb1; +$aa2991: + $p := 2991; + goto $bb1; +$aa2992: + $p := 2992; + goto $bb1; +$aa2993: + $p := 2993; + goto $bb1; +$aa2994: + $p := 2994; + goto $bb1; +$aa2995: + $p := 2995; + goto $bb1; +$aa2996: + $p := 2996; + goto $bb1; +$aa2997: + $p := 2997; + goto $bb1; +$aa2998: + $p := 2998; + goto $bb1; +$aa2999: + $p := 2999; + goto $bb1; +$aa3000: + $p := 3000; + goto $bb1; +$aa3001: + $p := 3001; + goto $bb1; +$aa3002: + $p := 3002; + goto $bb1; +$aa3003: + $p := 3003; + goto $bb1; +$aa3004: + $p := 3004; + goto $bb1; +$aa3005: + $p := 3005; + goto $bb1; +$aa3006: + $p := 3006; + goto $bb1; +$aa3007: + $p := 3007; + goto $bb1; +$aa3008: + $p := 3008; + goto $bb1; +$aa3009: + $p := 3009; + goto $bb1; +$aa3010: + $p := 3010; + goto $bb1; +$aa3011: + $p := 3011; + goto $bb1; +$aa3012: + $p := 3012; + goto $bb1; +$aa3013: + $p := 3013; + goto $bb1; +$aa3014: + $p := 3014; + goto $bb1; +$aa3015: + $p := 3015; + goto $bb1; +$aa3016: + $p := 3016; + goto $bb1; +$aa3017: + $p := 3017; + goto $bb1; +$aa3018: + $p := 3018; + goto $bb1; +$aa3019: + $p := 3019; + goto $bb1; +$aa3020: + $p := 3020; + goto $bb1; +$aa3021: + $p := 3021; + goto $bb1; +$aa3022: + $p := 3022; + goto $bb1; +$aa3023: + $p := 3023; + goto $bb1; +$aa3024: + $p := 3024; + goto $bb1; +$aa3025: + $p := 3025; + goto $bb1; +$aa3026: + $p := 3026; + goto $bb1; +$aa3027: + $p := 3027; + goto $bb1; +$aa3028: + $p := 3028; + goto $bb1; +$aa3029: + $p := 3029; + goto $bb1; +$aa3030: + $p := 3030; + goto $bb1; +$aa3031: + $p := 3031; + goto $bb1; +$aa3032: + $p := 3032; + goto $bb1; +$aa3033: + $p := 3033; + goto $bb1; +$aa3034: + $p := 3034; + goto $bb1; +$aa3035: + $p := 3035; + goto $bb1; +$aa3036: + $p := 3036; + goto $bb1; +$aa3037: + $p := 3037; + goto $bb1; +$aa3038: + $p := 3038; + goto $bb1; +$aa3039: + $p := 3039; + goto $bb1; +$aa3040: + $p := 3040; + goto $bb1; +$aa3041: + $p := 3041; + goto $bb1; +$aa3042: + $p := 3042; + goto $bb1; +$aa3043: + $p := 3043; + goto $bb1; +$aa3044: + $p := 3044; + goto $bb1; +$aa3045: + $p := 3045; + goto $bb1; +$aa3046: + $p := 3046; + goto $bb1; +$aa3047: + $p := 3047; + goto $bb1; +$aa3048: + $p := 3048; + goto $bb1; +$aa3049: + $p := 3049; + goto $bb1; +$aa3050: + $p := 3050; + goto $bb1; +$aa3051: + $p := 3051; + goto $bb1; +$aa3052: + $p := 3052; + goto $bb1; +$aa3053: + $p := 3053; + goto $bb1; +$aa3054: + $p := 3054; + goto $bb1; +$aa3055: + $p := 3055; + goto $bb1; +$aa3056: + $p := 3056; + goto $bb1; +$aa3057: + $p := 3057; + goto $bb1; +$aa3058: + $p := 3058; + goto $bb1; +$aa3059: + $p := 3059; + goto $bb1; +$aa3060: + $p := 3060; + goto $bb1; +$aa3061: + $p := 3061; + goto $bb1; +$aa3062: + $p := 3062; + goto $bb1; +$aa3063: + $p := 3063; + goto $bb1; +$aa3064: + $p := 3064; + goto $bb1; +$aa3065: + $p := 3065; + goto $bb1; +$aa3066: + $p := 3066; + goto $bb1; +$aa3067: + $p := 3067; + goto $bb1; +$aa3068: + $p := 3068; + goto $bb1; +$aa3069: + $p := 3069; + goto $bb1; +$aa3070: + $p := 3070; + goto $bb1; +$aa3071: + $p := 3071; + goto $bb1; +$aa3072: + $p := 3072; + goto $bb1; +$aa3073: + $p := 3073; + goto $bb1; +$aa3074: + $p := 3074; + goto $bb1; +$aa3075: + $p := 3075; + goto $bb1; +$aa3076: + $p := 3076; + goto $bb1; +$aa3077: + $p := 3077; + goto $bb1; +$aa3078: + $p := 3078; + goto $bb1; +$aa3079: + $p := 3079; + goto $bb1; +$aa3080: + $p := 3080; + goto $bb1; +$aa3081: + $p := 3081; + goto $bb1; +$aa3082: + $p := 3082; + goto $bb1; +$aa3083: + $p := 3083; + goto $bb1; +$aa3084: + $p := 3084; + goto $bb1; +$aa3085: + $p := 3085; + goto $bb1; +$aa3086: + $p := 3086; + goto $bb1; +$aa3087: + $p := 3087; + goto $bb1; +$aa3088: + $p := 3088; + goto $bb1; +$aa3089: + $p := 3089; + goto $bb1; +$aa3090: + $p := 3090; + goto $bb1; +$aa3091: + $p := 3091; + goto $bb1; +$aa3092: + $p := 3092; + goto $bb1; +$aa3093: + $p := 3093; + goto $bb1; +$aa3094: + $p := 3094; + goto $bb1; +$aa3095: + $p := 3095; + goto $bb1; +$aa3096: + $p := 3096; + goto $bb1; +$aa3097: + $p := 3097; + goto $bb1; +$aa3098: + $p := 3098; + goto $bb1; +$aa3099: + $p := 3099; + goto $bb1; +$aa3100: + $p := 3100; + goto $bb1; +$aa3101: + $p := 3101; + goto $bb1; +$aa3102: + $p := 3102; + goto $bb1; +$aa3103: + $p := 3103; + goto $bb1; +$aa3104: + $p := 3104; + goto $bb1; +$aa3105: + $p := 3105; + goto $bb1; +$aa3106: + $p := 3106; + goto $bb1; +$aa3107: + $p := 3107; + goto $bb1; +$aa3108: + $p := 3108; + goto $bb1; +$aa3109: + $p := 3109; + goto $bb1; +$aa3110: + $p := 3110; + goto $bb1; +$aa3111: + $p := 3111; + goto $bb1; +$aa3112: + $p := 3112; + goto $bb1; +$aa3113: + $p := 3113; + goto $bb1; +$aa3114: + $p := 3114; + goto $bb1; +$aa3115: + $p := 3115; + goto $bb1; +$aa3116: + $p := 3116; + goto $bb1; +$aa3117: + $p := 3117; + goto $bb1; +$aa3118: + $p := 3118; + goto $bb1; +$aa3119: + $p := 3119; + goto $bb1; +$aa3120: + $p := 3120; + goto $bb1; +$aa3121: + $p := 3121; + goto $bb1; +$aa3122: + $p := 3122; + goto $bb1; +$aa3123: + $p := 3123; + goto $bb1; +$aa3124: + $p := 3124; + goto $bb1; +$aa3125: + $p := 3125; + goto $bb1; +$aa3126: + $p := 3126; + goto $bb1; +$aa3127: + $p := 3127; + goto $bb1; +$aa3128: + $p := 3128; + goto $bb1; +$aa3129: + $p := 3129; + goto $bb1; +$aa3130: + $p := 3130; + goto $bb1; +$aa3131: + $p := 3131; + goto $bb1; +$aa3132: + $p := 3132; + goto $bb1; +$aa3133: + $p := 3133; + goto $bb1; +$aa3134: + $p := 3134; + goto $bb1; +$aa3135: + $p := 3135; + goto $bb1; +$aa3136: + $p := 3136; + goto $bb1; +$aa3137: + $p := 3137; + goto $bb1; +$aa3138: + $p := 3138; + goto $bb1; +$aa3139: + $p := 3139; + goto $bb1; +$aa3140: + $p := 3140; + goto $bb1; +$aa3141: + $p := 3141; + goto $bb1; +$aa3142: + $p := 3142; + goto $bb1; +$aa3143: + $p := 3143; + goto $bb1; +$aa3144: + $p := 3144; + goto $bb1; +$aa3145: + $p := 3145; + goto $bb1; +$aa3146: + $p := 3146; + goto $bb1; +$aa3147: + $p := 3147; + goto $bb1; +$aa3148: + $p := 3148; + goto $bb1; +$aa3149: + $p := 3149; + goto $bb1; +$aa3150: + $p := 3150; + goto $bb1; +$aa3151: + $p := 3151; + goto $bb1; +$aa3152: + $p := 3152; + goto $bb1; +$aa3153: + $p := 3153; + goto $bb1; +$aa3154: + $p := 3154; + goto $bb1; +$aa3155: + $p := 3155; + goto $bb1; +$aa3156: + $p := 3156; + goto $bb1; +$aa3157: + $p := 3157; + goto $bb1; +$aa3158: + $p := 3158; + goto $bb1; +$aa3159: + $p := 3159; + goto $bb1; +$aa3160: + $p := 3160; + goto $bb1; +$aa3161: + $p := 3161; + goto $bb1; +$aa3162: + $p := 3162; + goto $bb1; +$aa3163: + $p := 3163; + goto $bb1; +$aa3164: + $p := 3164; + goto $bb1; +$aa3165: + $p := 3165; + goto $bb1; +$aa3166: + $p := 3166; + goto $bb1; +$aa3167: + $p := 3167; + goto $bb1; +$aa3168: + $p := 3168; + goto $bb1; +$aa3169: + $p := 3169; + goto $bb1; +$aa3170: + $p := 3170; + goto $bb1; +$aa3171: + $p := 3171; + goto $bb1; +$aa3172: + $p := 3172; + goto $bb1; +$aa3173: + $p := 3173; + goto $bb1; +$aa3174: + $p := 3174; + goto $bb1; +$aa3175: + $p := 3175; + goto $bb1; +$aa3176: + $p := 3176; + goto $bb1; +$aa3177: + $p := 3177; + goto $bb1; +$aa3178: + $p := 3178; + goto $bb1; +$aa3179: + $p := 3179; + goto $bb1; +$aa3180: + $p := 3180; + goto $bb1; +$aa3181: + $p := 3181; + goto $bb1; +$aa3182: + $p := 3182; + goto $bb1; +$aa3183: + $p := 3183; + goto $bb1; +$aa3184: + $p := 3184; + goto $bb1; +$aa3185: + $p := 3185; + goto $bb1; +$aa3186: + $p := 3186; + goto $bb1; +$aa3187: + $p := 3187; + goto $bb1; +$aa3188: + $p := 3188; + goto $bb1; +$aa3189: + $p := 3189; + goto $bb1; +$aa3190: + $p := 3190; + goto $bb1; +$aa3191: + $p := 3191; + goto $bb1; +$aa3192: + $p := 3192; + goto $bb1; +$aa3193: + $p := 3193; + goto $bb1; +$aa3194: + $p := 3194; + goto $bb1; +$aa3195: + $p := 3195; + goto $bb1; +$aa3196: + $p := 3196; + goto $bb1; +$aa3197: + $p := 3197; + goto $bb1; +$aa3198: + $p := 3198; + goto $bb1; +$aa3199: + $p := 3199; + goto $bb1; +$aa3200: + $p := 3200; + goto $bb1; +$aa3201: + $p := 3201; + goto $bb1; +$aa3202: + $p := 3202; + goto $bb1; +$aa3203: + $p := 3203; + goto $bb1; +$aa3204: + $p := 3204; + goto $bb1; +$aa3205: + $p := 3205; + goto $bb1; +$aa3206: + $p := 3206; + goto $bb1; +$aa3207: + $p := 3207; + goto $bb1; +$aa3208: + $p := 3208; + goto $bb1; +$aa3209: + $p := 3209; + goto $bb1; +$aa3210: + $p := 3210; + goto $bb1; +$aa3211: + $p := 3211; + goto $bb1; +$aa3212: + $p := 3212; + goto $bb1; +$aa3213: + $p := 3213; + goto $bb1; +$aa3214: + $p := 3214; + goto $bb1; +$aa3215: + $p := 3215; + goto $bb1; +$aa3216: + $p := 3216; + goto $bb1; +$aa3217: + $p := 3217; + goto $bb1; +$aa3218: + $p := 3218; + goto $bb1; +$aa3219: + $p := 3219; + goto $bb1; +$aa3220: + $p := 3220; + goto $bb1; +$aa3221: + $p := 3221; + goto $bb1; +$aa3222: + $p := 3222; + goto $bb1; +$aa3223: + $p := 3223; + goto $bb1; +$aa3224: + $p := 3224; + goto $bb1; +$aa3225: + $p := 3225; + goto $bb1; +$aa3226: + $p := 3226; + goto $bb1; +$aa3227: + $p := 3227; + goto $bb1; +$aa3228: + $p := 3228; + goto $bb1; +$aa3229: + $p := 3229; + goto $bb1; +$aa3230: + $p := 3230; + goto $bb1; +$aa3231: + $p := 3231; + goto $bb1; +$aa3232: + $p := 3232; + goto $bb1; +$aa3233: + $p := 3233; + goto $bb1; +$aa3234: + $p := 3234; + goto $bb1; +$aa3235: + $p := 3235; + goto $bb1; +$aa3236: + $p := 3236; + goto $bb1; +$aa3237: + $p := 3237; + goto $bb1; +$aa3238: + $p := 3238; + goto $bb1; +$aa3239: + $p := 3239; + goto $bb1; +$aa3240: + $p := 3240; + goto $bb1; +$aa3241: + $p := 3241; + goto $bb1; +$aa3242: + $p := 3242; + goto $bb1; +$aa3243: + $p := 3243; + goto $bb1; +$aa3244: + $p := 3244; + goto $bb1; +$aa3245: + $p := 3245; + goto $bb1; +$aa3246: + $p := 3246; + goto $bb1; +$aa3247: + $p := 3247; + goto $bb1; +$aa3248: + $p := 3248; + goto $bb1; +$aa3249: + $p := 3249; + goto $bb1; +$aa3250: + $p := 3250; + goto $bb1; +$aa3251: + $p := 3251; + goto $bb1; +$aa3252: + $p := 3252; + goto $bb1; +$aa3253: + $p := 3253; + goto $bb1; +$aa3254: + $p := 3254; + goto $bb1; +$aa3255: + $p := 3255; + goto $bb1; +$aa3256: + $p := 3256; + goto $bb1; +$aa3257: + $p := 3257; + goto $bb1; +$aa3258: + $p := 3258; + goto $bb1; +$aa3259: + $p := 3259; + goto $bb1; +$aa3260: + $p := 3260; + goto $bb1; +$aa3261: + $p := 3261; + goto $bb1; +$aa3262: + $p := 3262; + goto $bb1; +$aa3263: + $p := 3263; + goto $bb1; +$aa3264: + $p := 3264; + goto $bb1; +$aa3265: + $p := 3265; + goto $bb1; +$aa3266: + $p := 3266; + goto $bb1; +$aa3267: + $p := 3267; + goto $bb1; +$aa3268: + $p := 3268; + goto $bb1; +$aa3269: + $p := 3269; + goto $bb1; +$aa3270: + $p := 3270; + goto $bb1; +$aa3271: + $p := 3271; + goto $bb1; +$aa3272: + $p := 3272; + goto $bb1; +$aa3273: + $p := 3273; + goto $bb1; +$aa3274: + $p := 3274; + goto $bb1; +$aa3275: + $p := 3275; + goto $bb1; +$aa3276: + $p := 3276; + goto $bb1; +$aa3277: + $p := 3277; + goto $bb1; +$aa3278: + $p := 3278; + goto $bb1; +$aa3279: + $p := 3279; + goto $bb1; +$aa3280: + $p := 3280; + goto $bb1; +$aa3281: + $p := 3281; + goto $bb1; +$aa3282: + $p := 3282; + goto $bb1; +$aa3283: + $p := 3283; + goto $bb1; +$aa3284: + $p := 3284; + goto $bb1; +$aa3285: + $p := 3285; + goto $bb1; +$aa3286: + $p := 3286; + goto $bb1; +$aa3287: + $p := 3287; + goto $bb1; +$aa3288: + $p := 3288; + goto $bb1; +$aa3289: + $p := 3289; + goto $bb1; +$aa3290: + $p := 3290; + goto $bb1; +$aa3291: + $p := 3291; + goto $bb1; +$aa3292: + $p := 3292; + goto $bb1; +$aa3293: + $p := 3293; + goto $bb1; +$aa3294: + $p := 3294; + goto $bb1; +$aa3295: + $p := 3295; + goto $bb1; +$aa3296: + $p := 3296; + goto $bb1; +$aa3297: + $p := 3297; + goto $bb1; +$aa3298: + $p := 3298; + goto $bb1; +$aa3299: + $p := 3299; + goto $bb1; +$aa3300: + $p := 3300; + goto $bb1; +$aa3301: + $p := 3301; + goto $bb1; +$aa3302: + $p := 3302; + goto $bb1; +$aa3303: + $p := 3303; + goto $bb1; +$aa3304: + $p := 3304; + goto $bb1; +$aa3305: + $p := 3305; + goto $bb1; +$aa3306: + $p := 3306; + goto $bb1; +$aa3307: + $p := 3307; + goto $bb1; +$aa3308: + $p := 3308; + goto $bb1; +$aa3309: + $p := 3309; + goto $bb1; +$aa3310: + $p := 3310; + goto $bb1; +$aa3311: + $p := 3311; + goto $bb1; +$aa3312: + $p := 3312; + goto $bb1; +$aa3313: + $p := 3313; + goto $bb1; +$aa3314: + $p := 3314; + goto $bb1; +$aa3315: + $p := 3315; + goto $bb1; +$aa3316: + $p := 3316; + goto $bb1; +$aa3317: + $p := 3317; + goto $bb1; +$aa3318: + $p := 3318; + goto $bb1; +$aa3319: + $p := 3319; + goto $bb1; +$aa3320: + $p := 3320; + goto $bb1; +$aa3321: + $p := 3321; + goto $bb1; +$aa3322: + $p := 3322; + goto $bb1; +$aa3323: + $p := 3323; + goto $bb1; +$aa3324: + $p := 3324; + goto $bb1; +$aa3325: + $p := 3325; + goto $bb1; +$aa3326: + $p := 3326; + goto $bb1; +$aa3327: + $p := 3327; + goto $bb1; +$aa3328: + $p := 3328; + goto $bb1; +$aa3329: + $p := 3329; + goto $bb1; +$aa3330: + $p := 3330; + goto $bb1; +$aa3331: + $p := 3331; + goto $bb1; +$aa3332: + $p := 3332; + goto $bb1; +$aa3333: + $p := 3333; + goto $bb1; +$aa3334: + $p := 3334; + goto $bb1; +$aa3335: + $p := 3335; + goto $bb1; +$aa3336: + $p := 3336; + goto $bb1; +$aa3337: + $p := 3337; + goto $bb1; +$aa3338: + $p := 3338; + goto $bb1; +$aa3339: + $p := 3339; + goto $bb1; +$aa3340: + $p := 3340; + goto $bb1; +$aa3341: + $p := 3341; + goto $bb1; +$aa3342: + $p := 3342; + goto $bb1; +$aa3343: + $p := 3343; + goto $bb1; +$aa3344: + $p := 3344; + goto $bb1; +$aa3345: + $p := 3345; + goto $bb1; +$aa3346: + $p := 3346; + goto $bb1; +$aa3347: + $p := 3347; + goto $bb1; +$aa3348: + $p := 3348; + goto $bb1; +$aa3349: + $p := 3349; + goto $bb1; +$aa3350: + $p := 3350; + goto $bb1; +$aa3351: + $p := 3351; + goto $bb1; +$aa3352: + $p := 3352; + goto $bb1; +$aa3353: + $p := 3353; + goto $bb1; +$aa3354: + $p := 3354; + goto $bb1; +$aa3355: + $p := 3355; + goto $bb1; +$aa3356: + $p := 3356; + goto $bb1; +$aa3357: + $p := 3357; + goto $bb1; +$aa3358: + $p := 3358; + goto $bb1; +$aa3359: + $p := 3359; + goto $bb1; +$aa3360: + $p := 3360; + goto $bb1; +$aa3361: + $p := 3361; + goto $bb1; +$aa3362: + $p := 3362; + goto $bb1; +$aa3363: + $p := 3363; + goto $bb1; +$aa3364: + $p := 3364; + goto $bb1; +$aa3365: + $p := 3365; + goto $bb1; +$aa3366: + $p := 3366; + goto $bb1; +$aa3367: + $p := 3367; + goto $bb1; +$aa3368: + $p := 3368; + goto $bb1; +$aa3369: + $p := 3369; + goto $bb1; +$aa3370: + $p := 3370; + goto $bb1; +$aa3371: + $p := 3371; + goto $bb1; +$aa3372: + $p := 3372; + goto $bb1; +$aa3373: + $p := 3373; + goto $bb1; +$aa3374: + $p := 3374; + goto $bb1; +$aa3375: + $p := 3375; + goto $bb1; +$aa3376: + $p := 3376; + goto $bb1; +$aa3377: + $p := 3377; + goto $bb1; +$aa3378: + $p := 3378; + goto $bb1; +$aa3379: + $p := 3379; + goto $bb1; +$aa3380: + $p := 3380; + goto $bb1; +$aa3381: + $p := 3381; + goto $bb1; +$aa3382: + $p := 3382; + goto $bb1; +$aa3383: + $p := 3383; + goto $bb1; +$aa3384: + $p := 3384; + goto $bb1; +$aa3385: + $p := 3385; + goto $bb1; +$aa3386: + $p := 3386; + goto $bb1; +$aa3387: + $p := 3387; + goto $bb1; +$aa3388: + $p := 3388; + goto $bb1; +$aa3389: + $p := 3389; + goto $bb1; +$aa3390: + $p := 3390; + goto $bb1; +$aa3391: + $p := 3391; + goto $bb1; +$aa3392: + $p := 3392; + goto $bb1; +$aa3393: + $p := 3393; + goto $bb1; +$aa3394: + $p := 3394; + goto $bb1; +$aa3395: + $p := 3395; + goto $bb1; +$aa3396: + $p := 3396; + goto $bb1; +$aa3397: + $p := 3397; + goto $bb1; +$aa3398: + $p := 3398; + goto $bb1; +$aa3399: + $p := 3399; + goto $bb1; +$aa3400: + $p := 3400; + goto $bb1; +$aa3401: + $p := 3401; + goto $bb1; +$aa3402: + $p := 3402; + goto $bb1; +$aa3403: + $p := 3403; + goto $bb1; +$aa3404: + $p := 3404; + goto $bb1; +$aa3405: + $p := 3405; + goto $bb1; +$aa3406: + $p := 3406; + goto $bb1; +$aa3407: + $p := 3407; + goto $bb1; +$aa3408: + $p := 3408; + goto $bb1; +$aa3409: + $p := 3409; + goto $bb1; +$aa3410: + $p := 3410; + goto $bb1; +$aa3411: + $p := 3411; + goto $bb1; +$aa3412: + $p := 3412; + goto $bb1; +$aa3413: + $p := 3413; + goto $bb1; +$aa3414: + $p := 3414; + goto $bb1; +$aa3415: + $p := 3415; + goto $bb1; +$aa3416: + $p := 3416; + goto $bb1; +$aa3417: + $p := 3417; + goto $bb1; +$aa3418: + $p := 3418; + goto $bb1; +$aa3419: + $p := 3419; + goto $bb1; +$aa3420: + $p := 3420; + goto $bb1; +$aa3421: + $p := 3421; + goto $bb1; +$aa3422: + $p := 3422; + goto $bb1; +$aa3423: + $p := 3423; + goto $bb1; +$aa3424: + $p := 3424; + goto $bb1; +$aa3425: + $p := 3425; + goto $bb1; +$aa3426: + $p := 3426; + goto $bb1; +$aa3427: + $p := 3427; + goto $bb1; +$aa3428: + $p := 3428; + goto $bb1; +$aa3429: + $p := 3429; + goto $bb1; +$aa3430: + $p := 3430; + goto $bb1; +$aa3431: + $p := 3431; + goto $bb1; +$aa3432: + $p := 3432; + goto $bb1; +$aa3433: + $p := 3433; + goto $bb1; +$aa3434: + $p := 3434; + goto $bb1; +$aa3435: + $p := 3435; + goto $bb1; +$aa3436: + $p := 3436; + goto $bb1; +$aa3437: + $p := 3437; + goto $bb1; +$aa3438: + $p := 3438; + goto $bb1; +$aa3439: + $p := 3439; + goto $bb1; +$aa3440: + $p := 3440; + goto $bb1; +$aa3441: + $p := 3441; + goto $bb1; +$aa3442: + $p := 3442; + goto $bb1; +$aa3443: + $p := 3443; + goto $bb1; +$aa3444: + $p := 3444; + goto $bb1; +$aa3445: + $p := 3445; + goto $bb1; +$aa3446: + $p := 3446; + goto $bb1; +$aa3447: + $p := 3447; + goto $bb1; +$aa3448: + $p := 3448; + goto $bb1; +$aa3449: + $p := 3449; + goto $bb1; +$aa3450: + $p := 3450; + goto $bb1; +$aa3451: + $p := 3451; + goto $bb1; +$aa3452: + $p := 3452; + goto $bb1; +$aa3453: + $p := 3453; + goto $bb1; +$aa3454: + $p := 3454; + goto $bb1; +$aa3455: + $p := 3455; + goto $bb1; +$aa3456: + $p := 3456; + goto $bb1; +$aa3457: + $p := 3457; + goto $bb1; +$aa3458: + $p := 3458; + goto $bb1; +$aa3459: + $p := 3459; + goto $bb1; +$aa3460: + $p := 3460; + goto $bb1; +$aa3461: + $p := 3461; + goto $bb1; +$aa3462: + $p := 3462; + goto $bb1; +$aa3463: + $p := 3463; + goto $bb1; +$aa3464: + $p := 3464; + goto $bb1; +$aa3465: + $p := 3465; + goto $bb1; +$aa3466: + $p := 3466; + goto $bb1; +$aa3467: + $p := 3467; + goto $bb1; +$aa3468: + $p := 3468; + goto $bb1; +$aa3469: + $p := 3469; + goto $bb1; +$aa3470: + $p := 3470; + goto $bb1; +$aa3471: + $p := 3471; + goto $bb1; +$aa3472: + $p := 3472; + goto $bb1; +$aa3473: + $p := 3473; + goto $bb1; +$aa3474: + $p := 3474; + goto $bb1; +$aa3475: + $p := 3475; + goto $bb1; +$aa3476: + $p := 3476; + goto $bb1; +$aa3477: + $p := 3477; + goto $bb1; +$aa3478: + $p := 3478; + goto $bb1; +$aa3479: + $p := 3479; + goto $bb1; +$aa3480: + $p := 3480; + goto $bb1; +$aa3481: + $p := 3481; + goto $bb1; +$aa3482: + $p := 3482; + goto $bb1; +$aa3483: + $p := 3483; + goto $bb1; +$aa3484: + $p := 3484; + goto $bb1; +$aa3485: + $p := 3485; + goto $bb1; +$aa3486: + $p := 3486; + goto $bb1; +$aa3487: + $p := 3487; + goto $bb1; +$aa3488: + $p := 3488; + goto $bb1; +$aa3489: + $p := 3489; + goto $bb1; +$aa3490: + $p := 3490; + goto $bb1; +$aa3491: + $p := 3491; + goto $bb1; +$aa3492: + $p := 3492; + goto $bb1; +$aa3493: + $p := 3493; + goto $bb1; +$aa3494: + $p := 3494; + goto $bb1; +$aa3495: + $p := 3495; + goto $bb1; +$aa3496: + $p := 3496; + goto $bb1; +$aa3497: + $p := 3497; + goto $bb1; +$aa3498: + $p := 3498; + goto $bb1; +$aa3499: + $p := 3499; + goto $bb1; +$aa3500: + $p := 3500; + goto $bb1; +$aa3501: + $p := 3501; + goto $bb1; +$aa3502: + $p := 3502; + goto $bb1; +$aa3503: + $p := 3503; + goto $bb1; +$aa3504: + $p := 3504; + goto $bb1; +$aa3505: + $p := 3505; + goto $bb1; +$aa3506: + $p := 3506; + goto $bb1; +$aa3507: + $p := 3507; + goto $bb1; +$aa3508: + $p := 3508; + goto $bb1; +$aa3509: + $p := 3509; + goto $bb1; +$aa3510: + $p := 3510; + goto $bb1; +$aa3511: + $p := 3511; + goto $bb1; +$aa3512: + $p := 3512; + goto $bb1; +$aa3513: + $p := 3513; + goto $bb1; +$aa3514: + $p := 3514; + goto $bb1; +$aa3515: + $p := 3515; + goto $bb1; +$aa3516: + $p := 3516; + goto $bb1; +$aa3517: + $p := 3517; + goto $bb1; +$aa3518: + $p := 3518; + goto $bb1; +$aa3519: + $p := 3519; + goto $bb1; +$aa3520: + $p := 3520; + goto $bb1; +$aa3521: + $p := 3521; + goto $bb1; +$aa3522: + $p := 3522; + goto $bb1; +$aa3523: + $p := 3523; + goto $bb1; +$aa3524: + $p := 3524; + goto $bb1; +$aa3525: + $p := 3525; + goto $bb1; +$aa3526: + $p := 3526; + goto $bb1; +$aa3527: + $p := 3527; + goto $bb1; +$aa3528: + $p := 3528; + goto $bb1; +$aa3529: + $p := 3529; + goto $bb1; +$aa3530: + $p := 3530; + goto $bb1; +$aa3531: + $p := 3531; + goto $bb1; +$aa3532: + $p := 3532; + goto $bb1; +$aa3533: + $p := 3533; + goto $bb1; +$aa3534: + $p := 3534; + goto $bb1; +$aa3535: + $p := 3535; + goto $bb1; +$aa3536: + $p := 3536; + goto $bb1; +$aa3537: + $p := 3537; + goto $bb1; +$aa3538: + $p := 3538; + goto $bb1; +$aa3539: + $p := 3539; + goto $bb1; +$aa3540: + $p := 3540; + goto $bb1; +$aa3541: + $p := 3541; + goto $bb1; +$aa3542: + $p := 3542; + goto $bb1; +$aa3543: + $p := 3543; + goto $bb1; +$aa3544: + $p := 3544; + goto $bb1; +$aa3545: + $p := 3545; + goto $bb1; +$aa3546: + $p := 3546; + goto $bb1; +$aa3547: + $p := 3547; + goto $bb1; +$aa3548: + $p := 3548; + goto $bb1; +$aa3549: + $p := 3549; + goto $bb1; +$aa3550: + $p := 3550; + goto $bb1; +$aa3551: + $p := 3551; + goto $bb1; +$aa3552: + $p := 3552; + goto $bb1; +$aa3553: + $p := 3553; + goto $bb1; +$aa3554: + $p := 3554; + goto $bb1; +$aa3555: + $p := 3555; + goto $bb1; +$aa3556: + $p := 3556; + goto $bb1; +$aa3557: + $p := 3557; + goto $bb1; +$aa3558: + $p := 3558; + goto $bb1; +$aa3559: + $p := 3559; + goto $bb1; +$aa3560: + $p := 3560; + goto $bb1; +$aa3561: + $p := 3561; + goto $bb1; +$aa3562: + $p := 3562; + goto $bb1; +$aa3563: + $p := 3563; + goto $bb1; +$aa3564: + $p := 3564; + goto $bb1; +$aa3565: + $p := 3565; + goto $bb1; +$aa3566: + $p := 3566; + goto $bb1; +$aa3567: + $p := 3567; + goto $bb1; +$aa3568: + $p := 3568; + goto $bb1; +$aa3569: + $p := 3569; + goto $bb1; +$aa3570: + $p := 3570; + goto $bb1; +$aa3571: + $p := 3571; + goto $bb1; +$aa3572: + $p := 3572; + goto $bb1; +$aa3573: + $p := 3573; + goto $bb1; +$aa3574: + $p := 3574; + goto $bb1; +$aa3575: + $p := 3575; + goto $bb1; +$aa3576: + $p := 3576; + goto $bb1; +$aa3577: + $p := 3577; + goto $bb1; +$aa3578: + $p := 3578; + goto $bb1; +$aa3579: + $p := 3579; + goto $bb1; +$aa3580: + $p := 3580; + goto $bb1; +$aa3581: + $p := 3581; + goto $bb1; +$aa3582: + $p := 3582; + goto $bb1; +$aa3583: + $p := 3583; + goto $bb1; +$aa3584: + $p := 3584; + goto $bb1; +$aa3585: + $p := 3585; + goto $bb1; +$aa3586: + $p := 3586; + goto $bb1; +$aa3587: + $p := 3587; + goto $bb1; +$aa3588: + $p := 3588; + goto $bb1; +$aa3589: + $p := 3589; + goto $bb1; +$aa3590: + $p := 3590; + goto $bb1; +$aa3591: + $p := 3591; + goto $bb1; +$aa3592: + $p := 3592; + goto $bb1; +$aa3593: + $p := 3593; + goto $bb1; +$aa3594: + $p := 3594; + goto $bb1; +$aa3595: + $p := 3595; + goto $bb1; +$aa3596: + $p := 3596; + goto $bb1; +$aa3597: + $p := 3597; + goto $bb1; +$aa3598: + $p := 3598; + goto $bb1; +$aa3599: + $p := 3599; + goto $bb1; +$aa3600: + $p := 3600; + goto $bb1; +$aa3601: + $p := 3601; + goto $bb1; +$aa3602: + $p := 3602; + goto $bb1; +$aa3603: + $p := 3603; + goto $bb1; +$aa3604: + $p := 3604; + goto $bb1; +$aa3605: + $p := 3605; + goto $bb1; +$aa3606: + $p := 3606; + goto $bb1; +$aa3607: + $p := 3607; + goto $bb1; +$aa3608: + $p := 3608; + goto $bb1; +$aa3609: + $p := 3609; + goto $bb1; +$aa3610: + $p := 3610; + goto $bb1; +$aa3611: + $p := 3611; + goto $bb1; +$aa3612: + $p := 3612; + goto $bb1; +$aa3613: + $p := 3613; + goto $bb1; +$aa3614: + $p := 3614; + goto $bb1; +$aa3615: + $p := 3615; + goto $bb1; +$aa3616: + $p := 3616; + goto $bb1; +$aa3617: + $p := 3617; + goto $bb1; +$aa3618: + $p := 3618; + goto $bb1; +$aa3619: + $p := 3619; + goto $bb1; +$aa3620: + $p := 3620; + goto $bb1; +$aa3621: + $p := 3621; + goto $bb1; +$aa3622: + $p := 3622; + goto $bb1; +$aa3623: + $p := 3623; + goto $bb1; +$aa3624: + $p := 3624; + goto $bb1; +$aa3625: + $p := 3625; + goto $bb1; +$aa3626: + $p := 3626; + goto $bb1; +$aa3627: + $p := 3627; + goto $bb1; +$aa3628: + $p := 3628; + goto $bb1; +$aa3629: + $p := 3629; + goto $bb1; +$aa3630: + $p := 3630; + goto $bb1; +$aa3631: + $p := 3631; + goto $bb1; +$aa3632: + $p := 3632; + goto $bb1; +$aa3633: + $p := 3633; + goto $bb1; +$aa3634: + $p := 3634; + goto $bb1; +$aa3635: + $p := 3635; + goto $bb1; +$aa3636: + $p := 3636; + goto $bb1; +$aa3637: + $p := 3637; + goto $bb1; +$aa3638: + $p := 3638; + goto $bb1; +$aa3639: + $p := 3639; + goto $bb1; +$aa3640: + $p := 3640; + goto $bb1; +$aa3641: + $p := 3641; + goto $bb1; +$aa3642: + $p := 3642; + goto $bb1; +$aa3643: + $p := 3643; + goto $bb1; +$aa3644: + $p := 3644; + goto $bb1; +$aa3645: + $p := 3645; + goto $bb1; +$aa3646: + $p := 3646; + goto $bb1; +$aa3647: + $p := 3647; + goto $bb1; +$aa3648: + $p := 3648; + goto $bb1; +$aa3649: + $p := 3649; + goto $bb1; +$aa3650: + $p := 3650; + goto $bb1; +$aa3651: + $p := 3651; + goto $bb1; +$aa3652: + $p := 3652; + goto $bb1; +$aa3653: + $p := 3653; + goto $bb1; +$aa3654: + $p := 3654; + goto $bb1; +$aa3655: + $p := 3655; + goto $bb1; +$aa3656: + $p := 3656; + goto $bb1; +$aa3657: + $p := 3657; + goto $bb1; +$aa3658: + $p := 3658; + goto $bb1; +$aa3659: + $p := 3659; + goto $bb1; +$aa3660: + $p := 3660; + goto $bb1; +$aa3661: + $p := 3661; + goto $bb1; +$aa3662: + $p := 3662; + goto $bb1; +$aa3663: + $p := 3663; + goto $bb1; +$aa3664: + $p := 3664; + goto $bb1; +$aa3665: + $p := 3665; + goto $bb1; +$aa3666: + $p := 3666; + goto $bb1; +$aa3667: + $p := 3667; + goto $bb1; +$aa3668: + $p := 3668; + goto $bb1; +$aa3669: + $p := 3669; + goto $bb1; +$aa3670: + $p := 3670; + goto $bb1; +$aa3671: + $p := 3671; + goto $bb1; +$aa3672: + $p := 3672; + goto $bb1; +$aa3673: + $p := 3673; + goto $bb1; +$aa3674: + $p := 3674; + goto $bb1; +$aa3675: + $p := 3675; + goto $bb1; +$aa3676: + $p := 3676; + goto $bb1; +$aa3677: + $p := 3677; + goto $bb1; +$aa3678: + $p := 3678; + goto $bb1; +$aa3679: + $p := 3679; + goto $bb1; +$aa3680: + $p := 3680; + goto $bb1; +$aa3681: + $p := 3681; + goto $bb1; +$aa3682: + $p := 3682; + goto $bb1; +$aa3683: + $p := 3683; + goto $bb1; +$aa3684: + $p := 3684; + goto $bb1; +$aa3685: + $p := 3685; + goto $bb1; +$aa3686: + $p := 3686; + goto $bb1; +$aa3687: + $p := 3687; + goto $bb1; +$aa3688: + $p := 3688; + goto $bb1; +$aa3689: + $p := 3689; + goto $bb1; +$aa3690: + $p := 3690; + goto $bb1; +$aa3691: + $p := 3691; + goto $bb1; +$aa3692: + $p := 3692; + goto $bb1; +$aa3693: + $p := 3693; + goto $bb1; +$aa3694: + $p := 3694; + goto $bb1; +$aa3695: + $p := 3695; + goto $bb1; +$aa3696: + $p := 3696; + goto $bb1; +$aa3697: + $p := 3697; + goto $bb1; +$aa3698: + $p := 3698; + goto $bb1; +$aa3699: + $p := 3699; + goto $bb1; +$aa3700: + $p := 3700; + goto $bb1; +$aa3701: + $p := 3701; + goto $bb1; +$aa3702: + $p := 3702; + goto $bb1; +$aa3703: + $p := 3703; + goto $bb1; +$aa3704: + $p := 3704; + goto $bb1; +$aa3705: + $p := 3705; + goto $bb1; +$aa3706: + $p := 3706; + goto $bb1; +$aa3707: + $p := 3707; + goto $bb1; +$aa3708: + $p := 3708; + goto $bb1; +$aa3709: + $p := 3709; + goto $bb1; +$aa3710: + $p := 3710; + goto $bb1; +$aa3711: + $p := 3711; + goto $bb1; +$aa3712: + $p := 3712; + goto $bb1; +$aa3713: + $p := 3713; + goto $bb1; +$aa3714: + $p := 3714; + goto $bb1; +$aa3715: + $p := 3715; + goto $bb1; +$aa3716: + $p := 3716; + goto $bb1; +$aa3717: + $p := 3717; + goto $bb1; +$aa3718: + $p := 3718; + goto $bb1; +$aa3719: + $p := 3719; + goto $bb1; +$aa3720: + $p := 3720; + goto $bb1; +$aa3721: + $p := 3721; + goto $bb1; +$aa3722: + $p := 3722; + goto $bb1; +$aa3723: + $p := 3723; + goto $bb1; +$aa3724: + $p := 3724; + goto $bb1; +$aa3725: + $p := 3725; + goto $bb1; +$aa3726: + $p := 3726; + goto $bb1; +$aa3727: + $p := 3727; + goto $bb1; +$aa3728: + $p := 3728; + goto $bb1; +$aa3729: + $p := 3729; + goto $bb1; +$aa3730: + $p := 3730; + goto $bb1; +$aa3731: + $p := 3731; + goto $bb1; +$aa3732: + $p := 3732; + goto $bb1; +$aa3733: + $p := 3733; + goto $bb1; +$aa3734: + $p := 3734; + goto $bb1; +$aa3735: + $p := 3735; + goto $bb1; +$aa3736: + $p := 3736; + goto $bb1; +$aa3737: + $p := 3737; + goto $bb1; +$aa3738: + $p := 3738; + goto $bb1; +$aa3739: + $p := 3739; + goto $bb1; +$aa3740: + $p := 3740; + goto $bb1; +$aa3741: + $p := 3741; + goto $bb1; +$aa3742: + $p := 3742; + goto $bb1; +$aa3743: + $p := 3743; + goto $bb1; +$aa3744: + $p := 3744; + goto $bb1; +$aa3745: + $p := 3745; + goto $bb1; +$aa3746: + $p := 3746; + goto $bb1; +$aa3747: + $p := 3747; + goto $bb1; +$aa3748: + $p := 3748; + goto $bb1; +$aa3749: + $p := 3749; + goto $bb1; +$aa3750: + $p := 3750; + goto $bb1; +$aa3751: + $p := 3751; + goto $bb1; +$aa3752: + $p := 3752; + goto $bb1; +$aa3753: + $p := 3753; + goto $bb1; +$aa3754: + $p := 3754; + goto $bb1; +$aa3755: + $p := 3755; + goto $bb1; +$aa3756: + $p := 3756; + goto $bb1; +$aa3757: + $p := 3757; + goto $bb1; +$aa3758: + $p := 3758; + goto $bb1; +$aa3759: + $p := 3759; + goto $bb1; +$aa3760: + $p := 3760; + goto $bb1; +$aa3761: + $p := 3761; + goto $bb1; +$aa3762: + $p := 3762; + goto $bb1; +$aa3763: + $p := 3763; + goto $bb1; +$aa3764: + $p := 3764; + goto $bb1; +$aa3765: + $p := 3765; + goto $bb1; +$aa3766: + $p := 3766; + goto $bb1; +$aa3767: + $p := 3767; + goto $bb1; +$aa3768: + $p := 3768; + goto $bb1; +$aa3769: + $p := 3769; + goto $bb1; +$aa3770: + $p := 3770; + goto $bb1; +$aa3771: + $p := 3771; + goto $bb1; +$aa3772: + $p := 3772; + goto $bb1; +$aa3773: + $p := 3773; + goto $bb1; +$aa3774: + $p := 3774; + goto $bb1; +$aa3775: + $p := 3775; + goto $bb1; +$aa3776: + $p := 3776; + goto $bb1; +$aa3777: + $p := 3777; + goto $bb1; +$aa3778: + $p := 3778; + goto $bb1; +$aa3779: + $p := 3779; + goto $bb1; +$aa3780: + $p := 3780; + goto $bb1; +$aa3781: + $p := 3781; + goto $bb1; +$aa3782: + $p := 3782; + goto $bb1; +$aa3783: + $p := 3783; + goto $bb1; +$aa3784: + $p := 3784; + goto $bb1; +$aa3785: + $p := 3785; + goto $bb1; +$aa3786: + $p := 3786; + goto $bb1; +$aa3787: + $p := 3787; + goto $bb1; +$aa3788: + $p := 3788; + goto $bb1; +$aa3789: + $p := 3789; + goto $bb1; +$aa3790: + $p := 3790; + goto $bb1; +$aa3791: + $p := 3791; + goto $bb1; +$aa3792: + $p := 3792; + goto $bb1; +$aa3793: + $p := 3793; + goto $bb1; +$aa3794: + $p := 3794; + goto $bb1; +$aa3795: + $p := 3795; + goto $bb1; +$aa3796: + $p := 3796; + goto $bb1; +$aa3797: + $p := 3797; + goto $bb1; +$aa3798: + $p := 3798; + goto $bb1; +$aa3799: + $p := 3799; + goto $bb1; +$aa3800: + $p := 3800; + goto $bb1; +$aa3801: + $p := 3801; + goto $bb1; +$aa3802: + $p := 3802; + goto $bb1; +$aa3803: + $p := 3803; + goto $bb1; +$aa3804: + $p := 3804; + goto $bb1; +$aa3805: + $p := 3805; + goto $bb1; +$aa3806: + $p := 3806; + goto $bb1; +$aa3807: + $p := 3807; + goto $bb1; +$aa3808: + $p := 3808; + goto $bb1; +$aa3809: + $p := 3809; + goto $bb1; +$aa3810: + $p := 3810; + goto $bb1; +$aa3811: + $p := 3811; + goto $bb1; +$aa3812: + $p := 3812; + goto $bb1; +$aa3813: + $p := 3813; + goto $bb1; +$aa3814: + $p := 3814; + goto $bb1; +$aa3815: + $p := 3815; + goto $bb1; +$aa3816: + $p := 3816; + goto $bb1; +$aa3817: + $p := 3817; + goto $bb1; +$aa3818: + $p := 3818; + goto $bb1; +$aa3819: + $p := 3819; + goto $bb1; +$aa3820: + $p := 3820; + goto $bb1; +$aa3821: + $p := 3821; + goto $bb1; +$aa3822: + $p := 3822; + goto $bb1; +$aa3823: + $p := 3823; + goto $bb1; +$aa3824: + $p := 3824; + goto $bb1; +$aa3825: + $p := 3825; + goto $bb1; +$aa3826: + $p := 3826; + goto $bb1; +$aa3827: + $p := 3827; + goto $bb1; +$aa3828: + $p := 3828; + goto $bb1; +$aa3829: + $p := 3829; + goto $bb1; +$aa3830: + $p := 3830; + goto $bb1; +$aa3831: + $p := 3831; + goto $bb1; +$aa3832: + $p := 3832; + goto $bb1; +$aa3833: + $p := 3833; + goto $bb1; +$aa3834: + $p := 3834; + goto $bb1; +$aa3835: + $p := 3835; + goto $bb1; +$aa3836: + $p := 3836; + goto $bb1; +$aa3837: + $p := 3837; + goto $bb1; +$aa3838: + $p := 3838; + goto $bb1; +$aa3839: + $p := 3839; + goto $bb1; +$aa3840: + $p := 3840; + goto $bb1; +$aa3841: + $p := 3841; + goto $bb1; +$aa3842: + $p := 3842; + goto $bb1; +$aa3843: + $p := 3843; + goto $bb1; +$aa3844: + $p := 3844; + goto $bb1; +$aa3845: + $p := 3845; + goto $bb1; +$aa3846: + $p := 3846; + goto $bb1; +$aa3847: + $p := 3847; + goto $bb1; +$aa3848: + $p := 3848; + goto $bb1; +$aa3849: + $p := 3849; + goto $bb1; +$aa3850: + $p := 3850; + goto $bb1; +$aa3851: + $p := 3851; + goto $bb1; +$aa3852: + $p := 3852; + goto $bb1; +$aa3853: + $p := 3853; + goto $bb1; +$aa3854: + $p := 3854; + goto $bb1; +$aa3855: + $p := 3855; + goto $bb1; +$aa3856: + $p := 3856; + goto $bb1; +$aa3857: + $p := 3857; + goto $bb1; +$aa3858: + $p := 3858; + goto $bb1; +$aa3859: + $p := 3859; + goto $bb1; +$aa3860: + $p := 3860; + goto $bb1; +$aa3861: + $p := 3861; + goto $bb1; +$aa3862: + $p := 3862; + goto $bb1; +$aa3863: + $p := 3863; + goto $bb1; +$aa3864: + $p := 3864; + goto $bb1; +$aa3865: + $p := 3865; + goto $bb1; +$aa3866: + $p := 3866; + goto $bb1; +$aa3867: + $p := 3867; + goto $bb1; +$aa3868: + $p := 3868; + goto $bb1; +$aa3869: + $p := 3869; + goto $bb1; +$aa3870: + $p := 3870; + goto $bb1; +$aa3871: + $p := 3871; + goto $bb1; +$aa3872: + $p := 3872; + goto $bb1; +$aa3873: + $p := 3873; + goto $bb1; +$aa3874: + $p := 3874; + goto $bb1; +$aa3875: + $p := 3875; + goto $bb1; +$aa3876: + $p := 3876; + goto $bb1; +$aa3877: + $p := 3877; + goto $bb1; +$aa3878: + $p := 3878; + goto $bb1; +$aa3879: + $p := 3879; + goto $bb1; +$aa3880: + $p := 3880; + goto $bb1; +$aa3881: + $p := 3881; + goto $bb1; +$aa3882: + $p := 3882; + goto $bb1; +$aa3883: + $p := 3883; + goto $bb1; +$aa3884: + $p := 3884; + goto $bb1; +$aa3885: + $p := 3885; + goto $bb1; +$aa3886: + $p := 3886; + goto $bb1; +$aa3887: + $p := 3887; + goto $bb1; +$aa3888: + $p := 3888; + goto $bb1; +$aa3889: + $p := 3889; + goto $bb1; +$aa3890: + $p := 3890; + goto $bb1; +$aa3891: + $p := 3891; + goto $bb1; +$aa3892: + $p := 3892; + goto $bb1; +$aa3893: + $p := 3893; + goto $bb1; +$aa3894: + $p := 3894; + goto $bb1; +$aa3895: + $p := 3895; + goto $bb1; +$aa3896: + $p := 3896; + goto $bb1; +$aa3897: + $p := 3897; + goto $bb1; +$aa3898: + $p := 3898; + goto $bb1; +$aa3899: + $p := 3899; + goto $bb1; +$aa3900: + $p := 3900; + goto $bb1; +$aa3901: + $p := 3901; + goto $bb1; +$aa3902: + $p := 3902; + goto $bb1; +$aa3903: + $p := 3903; + goto $bb1; +$aa3904: + $p := 3904; + goto $bb1; +$aa3905: + $p := 3905; + goto $bb1; +$aa3906: + $p := 3906; + goto $bb1; +$aa3907: + $p := 3907; + goto $bb1; +$aa3908: + $p := 3908; + goto $bb1; +$aa3909: + $p := 3909; + goto $bb1; +$aa3910: + $p := 3910; + goto $bb1; +$aa3911: + $p := 3911; + goto $bb1; +$aa3912: + $p := 3912; + goto $bb1; +$aa3913: + $p := 3913; + goto $bb1; +$aa3914: + $p := 3914; + goto $bb1; +$aa3915: + $p := 3915; + goto $bb1; +$aa3916: + $p := 3916; + goto $bb1; +$aa3917: + $p := 3917; + goto $bb1; +$aa3918: + $p := 3918; + goto $bb1; +$aa3919: + $p := 3919; + goto $bb1; +$aa3920: + $p := 3920; + goto $bb1; +$aa3921: + $p := 3921; + goto $bb1; +$aa3922: + $p := 3922; + goto $bb1; +$aa3923: + $p := 3923; + goto $bb1; +$aa3924: + $p := 3924; + goto $bb1; +$aa3925: + $p := 3925; + goto $bb1; +$aa3926: + $p := 3926; + goto $bb1; +$aa3927: + $p := 3927; + goto $bb1; +$aa3928: + $p := 3928; + goto $bb1; +$aa3929: + $p := 3929; + goto $bb1; +$aa3930: + $p := 3930; + goto $bb1; +$aa3931: + $p := 3931; + goto $bb1; +$aa3932: + $p := 3932; + goto $bb1; +$aa3933: + $p := 3933; + goto $bb1; +$aa3934: + $p := 3934; + goto $bb1; +$aa3935: + $p := 3935; + goto $bb1; +$aa3936: + $p := 3936; + goto $bb1; +$aa3937: + $p := 3937; + goto $bb1; +$aa3938: + $p := 3938; + goto $bb1; +$aa3939: + $p := 3939; + goto $bb1; +$aa3940: + $p := 3940; + goto $bb1; +$aa3941: + $p := 3941; + goto $bb1; +$aa3942: + $p := 3942; + goto $bb1; +$aa3943: + $p := 3943; + goto $bb1; +$aa3944: + $p := 3944; + goto $bb1; +$aa3945: + $p := 3945; + goto $bb1; +$aa3946: + $p := 3946; + goto $bb1; +$aa3947: + $p := 3947; + goto $bb1; +$aa3948: + $p := 3948; + goto $bb1; +$aa3949: + $p := 3949; + goto $bb1; +$aa3950: + $p := 3950; + goto $bb1; +$aa3951: + $p := 3951; + goto $bb1; +$aa3952: + $p := 3952; + goto $bb1; +$aa3953: + $p := 3953; + goto $bb1; +$aa3954: + $p := 3954; + goto $bb1; +$aa3955: + $p := 3955; + goto $bb1; +$aa3956: + $p := 3956; + goto $bb1; +$aa3957: + $p := 3957; + goto $bb1; +$aa3958: + $p := 3958; + goto $bb1; +$aa3959: + $p := 3959; + goto $bb1; +$aa3960: + $p := 3960; + goto $bb1; +$aa3961: + $p := 3961; + goto $bb1; +$aa3962: + $p := 3962; + goto $bb1; +$aa3963: + $p := 3963; + goto $bb1; +$aa3964: + $p := 3964; + goto $bb1; +$aa3965: + $p := 3965; + goto $bb1; +$aa3966: + $p := 3966; + goto $bb1; +$aa3967: + $p := 3967; + goto $bb1; +$aa3968: + $p := 3968; + goto $bb1; +$aa3969: + $p := 3969; + goto $bb1; +$aa3970: + $p := 3970; + goto $bb1; +$aa3971: + $p := 3971; + goto $bb1; +$aa3972: + $p := 3972; + goto $bb1; +$aa3973: + $p := 3973; + goto $bb1; +$aa3974: + $p := 3974; + goto $bb1; +$aa3975: + $p := 3975; + goto $bb1; +$aa3976: + $p := 3976; + goto $bb1; +$aa3977: + $p := 3977; + goto $bb1; +$aa3978: + $p := 3978; + goto $bb1; +$aa3979: + $p := 3979; + goto $bb1; +$aa3980: + $p := 3980; + goto $bb1; +$aa3981: + $p := 3981; + goto $bb1; +$aa3982: + $p := 3982; + goto $bb1; +$aa3983: + $p := 3983; + goto $bb1; +$aa3984: + $p := 3984; + goto $bb1; +$aa3985: + $p := 3985; + goto $bb1; +$aa3986: + $p := 3986; + goto $bb1; +$aa3987: + $p := 3987; + goto $bb1; +$aa3988: + $p := 3988; + goto $bb1; +$aa3989: + $p := 3989; + goto $bb1; +$aa3990: + $p := 3990; + goto $bb1; +$aa3991: + $p := 3991; + goto $bb1; +$aa3992: + $p := 3992; + goto $bb1; +$aa3993: + $p := 3993; + goto $bb1; +$aa3994: + $p := 3994; + goto $bb1; +$aa3995: + $p := 3995; + goto $bb1; +$aa3996: + $p := 3996; + goto $bb1; +$aa3997: + $p := 3997; + goto $bb1; +$aa3998: + $p := 3998; + goto $bb1; +$aa3999: + $p := 3999; + goto $bb1; +$aa4000: + $p := 4000; + goto $bb1; +$aa4001: + $p := 4001; + goto $bb1; +$aa4002: + $p := 4002; + goto $bb1; +$aa4003: + $p := 4003; + goto $bb1; +$aa4004: + $p := 4004; + goto $bb1; +$aa4005: + $p := 4005; + goto $bb1; +$aa4006: + $p := 4006; + goto $bb1; +$aa4007: + $p := 4007; + goto $bb1; +$aa4008: + $p := 4008; + goto $bb1; +$aa4009: + $p := 4009; + goto $bb1; +$aa4010: + $p := 4010; + goto $bb1; +$aa4011: + $p := 4011; + goto $bb1; +$aa4012: + $p := 4012; + goto $bb1; +$aa4013: + $p := 4013; + goto $bb1; +$aa4014: + $p := 4014; + goto $bb1; +$aa4015: + $p := 4015; + goto $bb1; +$aa4016: + $p := 4016; + goto $bb1; +$aa4017: + $p := 4017; + goto $bb1; +$aa4018: + $p := 4018; + goto $bb1; +$aa4019: + $p := 4019; + goto $bb1; +$aa4020: + $p := 4020; + goto $bb1; +$aa4021: + $p := 4021; + goto $bb1; +$aa4022: + $p := 4022; + goto $bb1; +$aa4023: + $p := 4023; + goto $bb1; +$aa4024: + $p := 4024; + goto $bb1; +$aa4025: + $p := 4025; + goto $bb1; +$aa4026: + $p := 4026; + goto $bb1; +$aa4027: + $p := 4027; + goto $bb1; +$aa4028: + $p := 4028; + goto $bb1; +$aa4029: + $p := 4029; + goto $bb1; +$aa4030: + $p := 4030; + goto $bb1; +$aa4031: + $p := 4031; + goto $bb1; +$aa4032: + $p := 4032; + goto $bb1; +$aa4033: + $p := 4033; + goto $bb1; +$aa4034: + $p := 4034; + goto $bb1; +$aa4035: + $p := 4035; + goto $bb1; +$aa4036: + $p := 4036; + goto $bb1; +$aa4037: + $p := 4037; + goto $bb1; +$aa4038: + $p := 4038; + goto $bb1; +$aa4039: + $p := 4039; + goto $bb1; +$aa4040: + $p := 4040; + goto $bb1; +$aa4041: + $p := 4041; + goto $bb1; +$aa4042: + $p := 4042; + goto $bb1; +$aa4043: + $p := 4043; + goto $bb1; +$aa4044: + $p := 4044; + goto $bb1; +$aa4045: + $p := 4045; + goto $bb1; +$aa4046: + $p := 4046; + goto $bb1; +$aa4047: + $p := 4047; + goto $bb1; +$aa4048: + $p := 4048; + goto $bb1; +$aa4049: + $p := 4049; + goto $bb1; +$aa4050: + $p := 4050; + goto $bb1; +$aa4051: + $p := 4051; + goto $bb1; +$aa4052: + $p := 4052; + goto $bb1; +$aa4053: + $p := 4053; + goto $bb1; +$aa4054: + $p := 4054; + goto $bb1; +$aa4055: + $p := 4055; + goto $bb1; +$aa4056: + $p := 4056; + goto $bb1; +$aa4057: + $p := 4057; + goto $bb1; +$aa4058: + $p := 4058; + goto $bb1; +$aa4059: + $p := 4059; + goto $bb1; +$aa4060: + $p := 4060; + goto $bb1; +$aa4061: + $p := 4061; + goto $bb1; +$aa4062: + $p := 4062; + goto $bb1; +$aa4063: + $p := 4063; + goto $bb1; +$aa4064: + $p := 4064; + goto $bb1; +$aa4065: + $p := 4065; + goto $bb1; +$aa4066: + $p := 4066; + goto $bb1; +$aa4067: + $p := 4067; + goto $bb1; +$aa4068: + $p := 4068; + goto $bb1; +$aa4069: + $p := 4069; + goto $bb1; +$aa4070: + $p := 4070; + goto $bb1; +$aa4071: + $p := 4071; + goto $bb1; +$aa4072: + $p := 4072; + goto $bb1; +$aa4073: + $p := 4073; + goto $bb1; +$aa4074: + $p := 4074; + goto $bb1; +$aa4075: + $p := 4075; + goto $bb1; +$aa4076: + $p := 4076; + goto $bb1; +$aa4077: + $p := 4077; + goto $bb1; +$aa4078: + $p := 4078; + goto $bb1; +$aa4079: + $p := 4079; + goto $bb1; +$aa4080: + $p := 4080; + goto $bb1; +$aa4081: + $p := 4081; + goto $bb1; +$aa4082: + $p := 4082; + goto $bb1; +$aa4083: + $p := 4083; + goto $bb1; +$aa4084: + $p := 4084; + goto $bb1; +$aa4085: + $p := 4085; + goto $bb1; +$aa4086: + $p := 4086; + goto $bb1; +$aa4087: + $p := 4087; + goto $bb1; +$aa4088: + $p := 4088; + goto $bb1; +$aa4089: + $p := 4089; + goto $bb1; +$aa4090: + $p := 4090; + goto $bb1; +$aa4091: + $p := 4091; + goto $bb1; +$aa4092: + $p := 4092; + goto $bb1; +$aa4093: + $p := 4093; + goto $bb1; +$aa4094: + $p := 4094; + goto $bb1; +$aa4095: + $p := 4095; + goto $bb1; +$aa4096: + $p := 4096; + goto $bb1; +$aa4097: + $p := 4097; + goto $bb1; +$aa4098: + $p := 4098; + goto $bb1; +$aa4099: + $p := 4099; + goto $bb1; +$aa4100: + $p := 4100; + goto $bb1; +$aa4101: + $p := 4101; + goto $bb1; +$aa4102: + $p := 4102; + goto $bb1; +$aa4103: + $p := 4103; + goto $bb1; +$aa4104: + $p := 4104; + goto $bb1; +$aa4105: + $p := 4105; + goto $bb1; +$aa4106: + $p := 4106; + goto $bb1; +$aa4107: + $p := 4107; + goto $bb1; +$aa4108: + $p := 4108; + goto $bb1; +$aa4109: + $p := 4109; + goto $bb1; +$aa4110: + $p := 4110; + goto $bb1; +$aa4111: + $p := 4111; + goto $bb1; +$aa4112: + $p := 4112; + goto $bb1; +$aa4113: + $p := 4113; + goto $bb1; +$aa4114: + $p := 4114; + goto $bb1; +$aa4115: + $p := 4115; + goto $bb1; +$aa4116: + $p := 4116; + goto $bb1; +$aa4117: + $p := 4117; + goto $bb1; +$aa4118: + $p := 4118; + goto $bb1; +$aa4119: + $p := 4119; + goto $bb1; +$aa4120: + $p := 4120; + goto $bb1; +$aa4121: + $p := 4121; + goto $bb1; +$aa4122: + $p := 4122; + goto $bb1; +$aa4123: + $p := 4123; + goto $bb1; +$aa4124: + $p := 4124; + goto $bb1; +$aa4125: + $p := 4125; + goto $bb1; +$aa4126: + $p := 4126; + goto $bb1; +$aa4127: + $p := 4127; + goto $bb1; +$aa4128: + $p := 4128; + goto $bb1; +$aa4129: + $p := 4129; + goto $bb1; +$aa4130: + $p := 4130; + goto $bb1; +$aa4131: + $p := 4131; + goto $bb1; +$aa4132: + $p := 4132; + goto $bb1; +$aa4133: + $p := 4133; + goto $bb1; +$aa4134: + $p := 4134; + goto $bb1; +$aa4135: + $p := 4135; + goto $bb1; +$aa4136: + $p := 4136; + goto $bb1; +$aa4137: + $p := 4137; + goto $bb1; +$aa4138: + $p := 4138; + goto $bb1; +$aa4139: + $p := 4139; + goto $bb1; +$aa4140: + $p := 4140; + goto $bb1; +$aa4141: + $p := 4141; + goto $bb1; +$aa4142: + $p := 4142; + goto $bb1; +$aa4143: + $p := 4143; + goto $bb1; +$aa4144: + $p := 4144; + goto $bb1; +$aa4145: + $p := 4145; + goto $bb1; +$aa4146: + $p := 4146; + goto $bb1; +$aa4147: + $p := 4147; + goto $bb1; +$aa4148: + $p := 4148; + goto $bb1; +$aa4149: + $p := 4149; + goto $bb1; +$aa4150: + $p := 4150; + goto $bb1; +$aa4151: + $p := 4151; + goto $bb1; +$aa4152: + $p := 4152; + goto $bb1; +$aa4153: + $p := 4153; + goto $bb1; +$aa4154: + $p := 4154; + goto $bb1; +$aa4155: + $p := 4155; + goto $bb1; +$aa4156: + $p := 4156; + goto $bb1; +$aa4157: + $p := 4157; + goto $bb1; +$aa4158: + $p := 4158; + goto $bb1; +$aa4159: + $p := 4159; + goto $bb1; +$aa4160: + $p := 4160; + goto $bb1; +$aa4161: + $p := 4161; + goto $bb1; +$aa4162: + $p := 4162; + goto $bb1; +$aa4163: + $p := 4163; + goto $bb1; +$aa4164: + $p := 4164; + goto $bb1; +$aa4165: + $p := 4165; + goto $bb1; +$aa4166: + $p := 4166; + goto $bb1; +$aa4167: + $p := 4167; + goto $bb1; +$aa4168: + $p := 4168; + goto $bb1; +$aa4169: + $p := 4169; + goto $bb1; +$aa4170: + $p := 4170; + goto $bb1; +$aa4171: + $p := 4171; + goto $bb1; +$aa4172: + $p := 4172; + goto $bb1; +$aa4173: + $p := 4173; + goto $bb1; +$aa4174: + $p := 4174; + goto $bb1; +$aa4175: + $p := 4175; + goto $bb1; +$aa4176: + $p := 4176; + goto $bb1; +$aa4177: + $p := 4177; + goto $bb1; +$aa4178: + $p := 4178; + goto $bb1; +$aa4179: + $p := 4179; + goto $bb1; +$aa4180: + $p := 4180; + goto $bb1; +$aa4181: + $p := 4181; + goto $bb1; +$aa4182: + $p := 4182; + goto $bb1; +$aa4183: + $p := 4183; + goto $bb1; +$aa4184: + $p := 4184; + goto $bb1; +$aa4185: + $p := 4185; + goto $bb1; +$aa4186: + $p := 4186; + goto $bb1; +$aa4187: + $p := 4187; + goto $bb1; +$aa4188: + $p := 4188; + goto $bb1; +$aa4189: + $p := 4189; + goto $bb1; +$aa4190: + $p := 4190; + goto $bb1; +$aa4191: + $p := 4191; + goto $bb1; +$aa4192: + $p := 4192; + goto $bb1; +$aa4193: + $p := 4193; + goto $bb1; +$aa4194: + $p := 4194; + goto $bb1; +$aa4195: + $p := 4195; + goto $bb1; +$aa4196: + $p := 4196; + goto $bb1; +$aa4197: + $p := 4197; + goto $bb1; +$aa4198: + $p := 4198; + goto $bb1; +$aa4199: + $p := 4199; + goto $bb1; +$aa4200: + $p := 4200; + goto $bb1; +$aa4201: + $p := 4201; + goto $bb1; +$aa4202: + $p := 4202; + goto $bb1; +$aa4203: + $p := 4203; + goto $bb1; +$aa4204: + $p := 4204; + goto $bb1; +$aa4205: + $p := 4205; + goto $bb1; +$aa4206: + $p := 4206; + goto $bb1; +$aa4207: + $p := 4207; + goto $bb1; +$aa4208: + $p := 4208; + goto $bb1; +$aa4209: + $p := 4209; + goto $bb1; +$aa4210: + $p := 4210; + goto $bb1; +$aa4211: + $p := 4211; + goto $bb1; +$aa4212: + $p := 4212; + goto $bb1; +$aa4213: + $p := 4213; + goto $bb1; +$aa4214: + $p := 4214; + goto $bb1; +$aa4215: + $p := 4215; + goto $bb1; +$aa4216: + $p := 4216; + goto $bb1; +$aa4217: + $p := 4217; + goto $bb1; +$aa4218: + $p := 4218; + goto $bb1; +$aa4219: + $p := 4219; + goto $bb1; +$aa4220: + $p := 4220; + goto $bb1; +$aa4221: + $p := 4221; + goto $bb1; +$aa4222: + $p := 4222; + goto $bb1; +$aa4223: + $p := 4223; + goto $bb1; +$aa4224: + $p := 4224; + goto $bb1; +$aa4225: + $p := 4225; + goto $bb1; +$aa4226: + $p := 4226; + goto $bb1; +$aa4227: + $p := 4227; + goto $bb1; +$aa4228: + $p := 4228; + goto $bb1; +$aa4229: + $p := 4229; + goto $bb1; +$aa4230: + $p := 4230; + goto $bb1; +$aa4231: + $p := 4231; + goto $bb1; +$aa4232: + $p := 4232; + goto $bb1; +$aa4233: + $p := 4233; + goto $bb1; +$aa4234: + $p := 4234; + goto $bb1; +$aa4235: + $p := 4235; + goto $bb1; +$aa4236: + $p := 4236; + goto $bb1; +$aa4237: + $p := 4237; + goto $bb1; +$aa4238: + $p := 4238; + goto $bb1; +$aa4239: + $p := 4239; + goto $bb1; +$aa4240: + $p := 4240; + goto $bb1; +$aa4241: + $p := 4241; + goto $bb1; +$aa4242: + $p := 4242; + goto $bb1; +$aa4243: + $p := 4243; + goto $bb1; +$aa4244: + $p := 4244; + goto $bb1; +$aa4245: + $p := 4245; + goto $bb1; +$aa4246: + $p := 4246; + goto $bb1; +$aa4247: + $p := 4247; + goto $bb1; +$aa4248: + $p := 4248; + goto $bb1; +$aa4249: + $p := 4249; + goto $bb1; +$aa4250: + $p := 4250; + goto $bb1; +$aa4251: + $p := 4251; + goto $bb1; +$aa4252: + $p := 4252; + goto $bb1; +$aa4253: + $p := 4253; + goto $bb1; +$aa4254: + $p := 4254; + goto $bb1; +$aa4255: + $p := 4255; + goto $bb1; +$aa4256: + $p := 4256; + goto $bb1; +$aa4257: + $p := 4257; + goto $bb1; +$aa4258: + $p := 4258; + goto $bb1; +$aa4259: + $p := 4259; + goto $bb1; +$aa4260: + $p := 4260; + goto $bb1; +$aa4261: + $p := 4261; + goto $bb1; +$aa4262: + $p := 4262; + goto $bb1; +$aa4263: + $p := 4263; + goto $bb1; +$aa4264: + $p := 4264; + goto $bb1; +$aa4265: + $p := 4265; + goto $bb1; +$aa4266: + $p := 4266; + goto $bb1; +$aa4267: + $p := 4267; + goto $bb1; +$aa4268: + $p := 4268; + goto $bb1; +$aa4269: + $p := 4269; + goto $bb1; +$aa4270: + $p := 4270; + goto $bb1; +$aa4271: + $p := 4271; + goto $bb1; +$aa4272: + $p := 4272; + goto $bb1; +$aa4273: + $p := 4273; + goto $bb1; +$aa4274: + $p := 4274; + goto $bb1; +$aa4275: + $p := 4275; + goto $bb1; +$aa4276: + $p := 4276; + goto $bb1; +$aa4277: + $p := 4277; + goto $bb1; +$aa4278: + $p := 4278; + goto $bb1; +$aa4279: + $p := 4279; + goto $bb1; +$aa4280: + $p := 4280; + goto $bb1; +$aa4281: + $p := 4281; + goto $bb1; +$aa4282: + $p := 4282; + goto $bb1; +$aa4283: + $p := 4283; + goto $bb1; +$aa4284: + $p := 4284; + goto $bb1; +$aa4285: + $p := 4285; + goto $bb1; +$aa4286: + $p := 4286; + goto $bb1; +$aa4287: + $p := 4287; + goto $bb1; +$aa4288: + $p := 4288; + goto $bb1; +$aa4289: + $p := 4289; + goto $bb1; +$aa4290: + $p := 4290; + goto $bb1; +$aa4291: + $p := 4291; + goto $bb1; +$aa4292: + $p := 4292; + goto $bb1; +$aa4293: + $p := 4293; + goto $bb1; +$aa4294: + $p := 4294; + goto $bb1; +$aa4295: + $p := 4295; + goto $bb1; +$aa4296: + $p := 4296; + goto $bb1; +$aa4297: + $p := 4297; + goto $bb1; +$aa4298: + $p := 4298; + goto $bb1; +$aa4299: + $p := 4299; + goto $bb1; +$aa4300: + $p := 4300; + goto $bb1; +$aa4301: + $p := 4301; + goto $bb1; +$aa4302: + $p := 4302; + goto $bb1; +$aa4303: + $p := 4303; + goto $bb1; +$aa4304: + $p := 4304; + goto $bb1; +$aa4305: + $p := 4305; + goto $bb1; +$aa4306: + $p := 4306; + goto $bb1; +$aa4307: + $p := 4307; + goto $bb1; +$aa4308: + $p := 4308; + goto $bb1; +$aa4309: + $p := 4309; + goto $bb1; +$aa4310: + $p := 4310; + goto $bb1; +$aa4311: + $p := 4311; + goto $bb1; +$aa4312: + $p := 4312; + goto $bb1; +$aa4313: + $p := 4313; + goto $bb1; +$aa4314: + $p := 4314; + goto $bb1; +$aa4315: + $p := 4315; + goto $bb1; +$aa4316: + $p := 4316; + goto $bb1; +$aa4317: + $p := 4317; + goto $bb1; +$aa4318: + $p := 4318; + goto $bb1; +$aa4319: + $p := 4319; + goto $bb1; +$aa4320: + $p := 4320; + goto $bb1; +$aa4321: + $p := 4321; + goto $bb1; +$aa4322: + $p := 4322; + goto $bb1; +$aa4323: + $p := 4323; + goto $bb1; +$aa4324: + $p := 4324; + goto $bb1; +$aa4325: + $p := 4325; + goto $bb1; +$aa4326: + $p := 4326; + goto $bb1; +$aa4327: + $p := 4327; + goto $bb1; +$aa4328: + $p := 4328; + goto $bb1; +$aa4329: + $p := 4329; + goto $bb1; +$aa4330: + $p := 4330; + goto $bb1; +$aa4331: + $p := 4331; + goto $bb1; +$aa4332: + $p := 4332; + goto $bb1; +$aa4333: + $p := 4333; + goto $bb1; +$aa4334: + $p := 4334; + goto $bb1; +$aa4335: + $p := 4335; + goto $bb1; +$aa4336: + $p := 4336; + goto $bb1; +$aa4337: + $p := 4337; + goto $bb1; +$aa4338: + $p := 4338; + goto $bb1; +$aa4339: + $p := 4339; + goto $bb1; +$aa4340: + $p := 4340; + goto $bb1; +$aa4341: + $p := 4341; + goto $bb1; +$aa4342: + $p := 4342; + goto $bb1; +$aa4343: + $p := 4343; + goto $bb1; +$aa4344: + $p := 4344; + goto $bb1; +$aa4345: + $p := 4345; + goto $bb1; +$aa4346: + $p := 4346; + goto $bb1; +$aa4347: + $p := 4347; + goto $bb1; +$aa4348: + $p := 4348; + goto $bb1; +$aa4349: + $p := 4349; + goto $bb1; +$aa4350: + $p := 4350; + goto $bb1; +$aa4351: + $p := 4351; + goto $bb1; +$aa4352: + $p := 4352; + goto $bb1; +$aa4353: + $p := 4353; + goto $bb1; +$aa4354: + $p := 4354; + goto $bb1; +$aa4355: + $p := 4355; + goto $bb1; +$aa4356: + $p := 4356; + goto $bb1; +$aa4357: + $p := 4357; + goto $bb1; +$aa4358: + $p := 4358; + goto $bb1; +$aa4359: + $p := 4359; + goto $bb1; +$aa4360: + $p := 4360; + goto $bb1; +$aa4361: + $p := 4361; + goto $bb1; +$aa4362: + $p := 4362; + goto $bb1; +$aa4363: + $p := 4363; + goto $bb1; +$aa4364: + $p := 4364; + goto $bb1; +$aa4365: + $p := 4365; + goto $bb1; +$aa4366: + $p := 4366; + goto $bb1; +$aa4367: + $p := 4367; + goto $bb1; +$aa4368: + $p := 4368; + goto $bb1; +$aa4369: + $p := 4369; + goto $bb1; +$aa4370: + $p := 4370; + goto $bb1; +$aa4371: + $p := 4371; + goto $bb1; +$aa4372: + $p := 4372; + goto $bb1; +$aa4373: + $p := 4373; + goto $bb1; +$aa4374: + $p := 4374; + goto $bb1; +$aa4375: + $p := 4375; + goto $bb1; +$aa4376: + $p := 4376; + goto $bb1; +$aa4377: + $p := 4377; + goto $bb1; +$aa4378: + $p := 4378; + goto $bb1; +$aa4379: + $p := 4379; + goto $bb1; +$aa4380: + $p := 4380; + goto $bb1; +$aa4381: + $p := 4381; + goto $bb1; +$aa4382: + $p := 4382; + goto $bb1; +$aa4383: + $p := 4383; + goto $bb1; +$aa4384: + $p := 4384; + goto $bb1; +$aa4385: + $p := 4385; + goto $bb1; +$aa4386: + $p := 4386; + goto $bb1; +$aa4387: + $p := 4387; + goto $bb1; +$aa4388: + $p := 4388; + goto $bb1; +$aa4389: + $p := 4389; + goto $bb1; +$aa4390: + $p := 4390; + goto $bb1; +$aa4391: + $p := 4391; + goto $bb1; +$aa4392: + $p := 4392; + goto $bb1; +$aa4393: + $p := 4393; + goto $bb1; +$aa4394: + $p := 4394; + goto $bb1; +$aa4395: + $p := 4395; + goto $bb1; +$aa4396: + $p := 4396; + goto $bb1; +$aa4397: + $p := 4397; + goto $bb1; +$aa4398: + $p := 4398; + goto $bb1; +$aa4399: + $p := 4399; + goto $bb1; +$aa4400: + $p := 4400; + goto $bb1; +$aa4401: + $p := 4401; + goto $bb1; +$aa4402: + $p := 4402; + goto $bb1; +$aa4403: + $p := 4403; + goto $bb1; +$aa4404: + $p := 4404; + goto $bb1; +$aa4405: + $p := 4405; + goto $bb1; +$aa4406: + $p := 4406; + goto $bb1; +$aa4407: + $p := 4407; + goto $bb1; +$aa4408: + $p := 4408; + goto $bb1; +$aa4409: + $p := 4409; + goto $bb1; +$aa4410: + $p := 4410; + goto $bb1; +$aa4411: + $p := 4411; + goto $bb1; +$aa4412: + $p := 4412; + goto $bb1; +$aa4413: + $p := 4413; + goto $bb1; +$aa4414: + $p := 4414; + goto $bb1; +$aa4415: + $p := 4415; + goto $bb1; +$aa4416: + $p := 4416; + goto $bb1; +$aa4417: + $p := 4417; + goto $bb1; +$aa4418: + $p := 4418; + goto $bb1; +$aa4419: + $p := 4419; + goto $bb1; +$aa4420: + $p := 4420; + goto $bb1; +$aa4421: + $p := 4421; + goto $bb1; +$aa4422: + $p := 4422; + goto $bb1; +$aa4423: + $p := 4423; + goto $bb1; +$aa4424: + $p := 4424; + goto $bb1; +$aa4425: + $p := 4425; + goto $bb1; +$aa4426: + $p := 4426; + goto $bb1; +$aa4427: + $p := 4427; + goto $bb1; +$aa4428: + $p := 4428; + goto $bb1; +$aa4429: + $p := 4429; + goto $bb1; +$aa4430: + $p := 4430; + goto $bb1; +$aa4431: + $p := 4431; + goto $bb1; +$aa4432: + $p := 4432; + goto $bb1; +$aa4433: + $p := 4433; + goto $bb1; +$aa4434: + $p := 4434; + goto $bb1; +$aa4435: + $p := 4435; + goto $bb1; +$aa4436: + $p := 4436; + goto $bb1; +$aa4437: + $p := 4437; + goto $bb1; +$aa4438: + $p := 4438; + goto $bb1; +$aa4439: + $p := 4439; + goto $bb1; +$aa4440: + $p := 4440; + goto $bb1; +$aa4441: + $p := 4441; + goto $bb1; +$aa4442: + $p := 4442; + goto $bb1; +$aa4443: + $p := 4443; + goto $bb1; +$aa4444: + $p := 4444; + goto $bb1; +$aa4445: + $p := 4445; + goto $bb1; +$aa4446: + $p := 4446; + goto $bb1; +$aa4447: + $p := 4447; + goto $bb1; +$aa4448: + $p := 4448; + goto $bb1; +$aa4449: + $p := 4449; + goto $bb1; +$aa4450: + $p := 4450; + goto $bb1; +$aa4451: + $p := 4451; + goto $bb1; +$aa4452: + $p := 4452; + goto $bb1; +$aa4453: + $p := 4453; + goto $bb1; +$aa4454: + $p := 4454; + goto $bb1; +$aa4455: + $p := 4455; + goto $bb1; +$aa4456: + $p := 4456; + goto $bb1; +$aa4457: + $p := 4457; + goto $bb1; +$aa4458: + $p := 4458; + goto $bb1; +$aa4459: + $p := 4459; + goto $bb1; +$aa4460: + $p := 4460; + goto $bb1; +$aa4461: + $p := 4461; + goto $bb1; +$aa4462: + $p := 4462; + goto $bb1; +$aa4463: + $p := 4463; + goto $bb1; +$aa4464: + $p := 4464; + goto $bb1; +$aa4465: + $p := 4465; + goto $bb1; +$aa4466: + $p := 4466; + goto $bb1; +$aa4467: + $p := 4467; + goto $bb1; +$aa4468: + $p := 4468; + goto $bb1; +$aa4469: + $p := 4469; + goto $bb1; +$aa4470: + $p := 4470; + goto $bb1; +$aa4471: + $p := 4471; + goto $bb1; +$aa4472: + $p := 4472; + goto $bb1; +$aa4473: + $p := 4473; + goto $bb1; +$aa4474: + $p := 4474; + goto $bb1; +$aa4475: + $p := 4475; + goto $bb1; +$aa4476: + $p := 4476; + goto $bb1; +$aa4477: + $p := 4477; + goto $bb1; +$aa4478: + $p := 4478; + goto $bb1; +$aa4479: + $p := 4479; + goto $bb1; +$aa4480: + $p := 4480; + goto $bb1; +$aa4481: + $p := 4481; + goto $bb1; +$aa4482: + $p := 4482; + goto $bb1; +$aa4483: + $p := 4483; + goto $bb1; +$aa4484: + $p := 4484; + goto $bb1; +$aa4485: + $p := 4485; + goto $bb1; +$aa4486: + $p := 4486; + goto $bb1; +$aa4487: + $p := 4487; + goto $bb1; +$aa4488: + $p := 4488; + goto $bb1; +$aa4489: + $p := 4489; + goto $bb1; +$aa4490: + $p := 4490; + goto $bb1; +$aa4491: + $p := 4491; + goto $bb1; +$aa4492: + $p := 4492; + goto $bb1; +$aa4493: + $p := 4493; + goto $bb1; +$aa4494: + $p := 4494; + goto $bb1; +$aa4495: + $p := 4495; + goto $bb1; +$aa4496: + $p := 4496; + goto $bb1; +$aa4497: + $p := 4497; + goto $bb1; +$aa4498: + $p := 4498; + goto $bb1; +$aa4499: + $p := 4499; + goto $bb1; +$aa4500: + $p := 4500; + goto $bb1; +$aa4501: + $p := 4501; + goto $bb1; +$aa4502: + $p := 4502; + goto $bb1; +$aa4503: + $p := 4503; + goto $bb1; +$aa4504: + $p := 4504; + goto $bb1; +$aa4505: + $p := 4505; + goto $bb1; +$aa4506: + $p := 4506; + goto $bb1; +$aa4507: + $p := 4507; + goto $bb1; +$aa4508: + $p := 4508; + goto $bb1; +$aa4509: + $p := 4509; + goto $bb1; +$aa4510: + $p := 4510; + goto $bb1; +$aa4511: + $p := 4511; + goto $bb1; +$aa4512: + $p := 4512; + goto $bb1; +$aa4513: + $p := 4513; + goto $bb1; +$aa4514: + $p := 4514; + goto $bb1; +$aa4515: + $p := 4515; + goto $bb1; +$aa4516: + $p := 4516; + goto $bb1; +$aa4517: + $p := 4517; + goto $bb1; +$aa4518: + $p := 4518; + goto $bb1; +$aa4519: + $p := 4519; + goto $bb1; +$aa4520: + $p := 4520; + goto $bb1; +$aa4521: + $p := 4521; + goto $bb1; +$aa4522: + $p := 4522; + goto $bb1; +$aa4523: + $p := 4523; + goto $bb1; +$aa4524: + $p := 4524; + goto $bb1; +$aa4525: + $p := 4525; + goto $bb1; +$aa4526: + $p := 4526; + goto $bb1; +$aa4527: + $p := 4527; + goto $bb1; +$aa4528: + $p := 4528; + goto $bb1; +$aa4529: + $p := 4529; + goto $bb1; +$aa4530: + $p := 4530; + goto $bb1; +$aa4531: + $p := 4531; + goto $bb1; +$aa4532: + $p := 4532; + goto $bb1; +$aa4533: + $p := 4533; + goto $bb1; +$aa4534: + $p := 4534; + goto $bb1; +$aa4535: + $p := 4535; + goto $bb1; +$aa4536: + $p := 4536; + goto $bb1; +$aa4537: + $p := 4537; + goto $bb1; +$aa4538: + $p := 4538; + goto $bb1; +$aa4539: + $p := 4539; + goto $bb1; +$aa4540: + $p := 4540; + goto $bb1; +$aa4541: + $p := 4541; + goto $bb1; +$aa4542: + $p := 4542; + goto $bb1; +$aa4543: + $p := 4543; + goto $bb1; +$aa4544: + $p := 4544; + goto $bb1; +$aa4545: + $p := 4545; + goto $bb1; +$aa4546: + $p := 4546; + goto $bb1; +$aa4547: + $p := 4547; + goto $bb1; +$aa4548: + $p := 4548; + goto $bb1; +$aa4549: + $p := 4549; + goto $bb1; +$aa4550: + $p := 4550; + goto $bb1; +$aa4551: + $p := 4551; + goto $bb1; +$aa4552: + $p := 4552; + goto $bb1; +$aa4553: + $p := 4553; + goto $bb1; +$aa4554: + $p := 4554; + goto $bb1; +$aa4555: + $p := 4555; + goto $bb1; +$aa4556: + $p := 4556; + goto $bb1; +$aa4557: + $p := 4557; + goto $bb1; +$aa4558: + $p := 4558; + goto $bb1; +$aa4559: + $p := 4559; + goto $bb1; +$aa4560: + $p := 4560; + goto $bb1; +$aa4561: + $p := 4561; + goto $bb1; +$aa4562: + $p := 4562; + goto $bb1; +$aa4563: + $p := 4563; + goto $bb1; +$aa4564: + $p := 4564; + goto $bb1; +$aa4565: + $p := 4565; + goto $bb1; +$aa4566: + $p := 4566; + goto $bb1; +$aa4567: + $p := 4567; + goto $bb1; +$aa4568: + $p := 4568; + goto $bb1; +$aa4569: + $p := 4569; + goto $bb1; +$aa4570: + $p := 4570; + goto $bb1; +$aa4571: + $p := 4571; + goto $bb1; +$aa4572: + $p := 4572; + goto $bb1; +$aa4573: + $p := 4573; + goto $bb1; +$aa4574: + $p := 4574; + goto $bb1; +$aa4575: + $p := 4575; + goto $bb1; +$aa4576: + $p := 4576; + goto $bb1; +$aa4577: + $p := 4577; + goto $bb1; +$aa4578: + $p := 4578; + goto $bb1; +$aa4579: + $p := 4579; + goto $bb1; +$aa4580: + $p := 4580; + goto $bb1; +$aa4581: + $p := 4581; + goto $bb1; +$aa4582: + $p := 4582; + goto $bb1; +$aa4583: + $p := 4583; + goto $bb1; +$aa4584: + $p := 4584; + goto $bb1; +$aa4585: + $p := 4585; + goto $bb1; +$aa4586: + $p := 4586; + goto $bb1; +$aa4587: + $p := 4587; + goto $bb1; +$aa4588: + $p := 4588; + goto $bb1; +$aa4589: + $p := 4589; + goto $bb1; +$aa4590: + $p := 4590; + goto $bb1; +$aa4591: + $p := 4591; + goto $bb1; +$aa4592: + $p := 4592; + goto $bb1; +$aa4593: + $p := 4593; + goto $bb1; +$aa4594: + $p := 4594; + goto $bb1; +$aa4595: + $p := 4595; + goto $bb1; +$aa4596: + $p := 4596; + goto $bb1; +$aa4597: + $p := 4597; + goto $bb1; +$aa4598: + $p := 4598; + goto $bb1; +$aa4599: + $p := 4599; + goto $bb1; +$aa4600: + $p := 4600; + goto $bb1; +$aa4601: + $p := 4601; + goto $bb1; +$aa4602: + $p := 4602; + goto $bb1; +$aa4603: + $p := 4603; + goto $bb1; +$aa4604: + $p := 4604; + goto $bb1; +$aa4605: + $p := 4605; + goto $bb1; +$aa4606: + $p := 4606; + goto $bb1; +$aa4607: + $p := 4607; + goto $bb1; +$aa4608: + $p := 4608; + goto $bb1; +$aa4609: + $p := 4609; + goto $bb1; +$aa4610: + $p := 4610; + goto $bb1; +$aa4611: + $p := 4611; + goto $bb1; +$aa4612: + $p := 4612; + goto $bb1; +$aa4613: + $p := 4613; + goto $bb1; +$aa4614: + $p := 4614; + goto $bb1; +$aa4615: + $p := 4615; + goto $bb1; +$aa4616: + $p := 4616; + goto $bb1; +$aa4617: + $p := 4617; + goto $bb1; +$aa4618: + $p := 4618; + goto $bb1; +$aa4619: + $p := 4619; + goto $bb1; +$aa4620: + $p := 4620; + goto $bb1; +$aa4621: + $p := 4621; + goto $bb1; +$aa4622: + $p := 4622; + goto $bb1; +$aa4623: + $p := 4623; + goto $bb1; +$aa4624: + $p := 4624; + goto $bb1; +$aa4625: + $p := 4625; + goto $bb1; +$aa4626: + $p := 4626; + goto $bb1; +$aa4627: + $p := 4627; + goto $bb1; +$aa4628: + $p := 4628; + goto $bb1; +$aa4629: + $p := 4629; + goto $bb1; +$aa4630: + $p := 4630; + goto $bb1; +$aa4631: + $p := 4631; + goto $bb1; +$aa4632: + $p := 4632; + goto $bb1; +$aa4633: + $p := 4633; + goto $bb1; +$aa4634: + $p := 4634; + goto $bb1; +$aa4635: + $p := 4635; + goto $bb1; +$aa4636: + $p := 4636; + goto $bb1; +$aa4637: + $p := 4637; + goto $bb1; +$aa4638: + $p := 4638; + goto $bb1; +$aa4639: + $p := 4639; + goto $bb1; +$aa4640: + $p := 4640; + goto $bb1; +$aa4641: + $p := 4641; + goto $bb1; +$aa4642: + $p := 4642; + goto $bb1; +$aa4643: + $p := 4643; + goto $bb1; +$aa4644: + $p := 4644; + goto $bb1; +$aa4645: + $p := 4645; + goto $bb1; +$aa4646: + $p := 4646; + goto $bb1; +$aa4647: + $p := 4647; + goto $bb1; +$aa4648: + $p := 4648; + goto $bb1; +$aa4649: + $p := 4649; + goto $bb1; +$aa4650: + $p := 4650; + goto $bb1; +$aa4651: + $p := 4651; + goto $bb1; +$aa4652: + $p := 4652; + goto $bb1; +$aa4653: + $p := 4653; + goto $bb1; +$aa4654: + $p := 4654; + goto $bb1; +$aa4655: + $p := 4655; + goto $bb1; +$aa4656: + $p := 4656; + goto $bb1; +$aa4657: + $p := 4657; + goto $bb1; +$aa4658: + $p := 4658; + goto $bb1; +$aa4659: + $p := 4659; + goto $bb1; +$aa4660: + $p := 4660; + goto $bb1; +$aa4661: + $p := 4661; + goto $bb1; +$aa4662: + $p := 4662; + goto $bb1; +$aa4663: + $p := 4663; + goto $bb1; +$aa4664: + $p := 4664; + goto $bb1; +$aa4665: + $p := 4665; + goto $bb1; +$aa4666: + $p := 4666; + goto $bb1; +$aa4667: + $p := 4667; + goto $bb1; +$aa4668: + $p := 4668; + goto $bb1; +$aa4669: + $p := 4669; + goto $bb1; +$aa4670: + $p := 4670; + goto $bb1; +$aa4671: + $p := 4671; + goto $bb1; +$aa4672: + $p := 4672; + goto $bb1; +$aa4673: + $p := 4673; + goto $bb1; +$aa4674: + $p := 4674; + goto $bb1; +$aa4675: + $p := 4675; + goto $bb1; +$aa4676: + $p := 4676; + goto $bb1; +$aa4677: + $p := 4677; + goto $bb1; +$aa4678: + $p := 4678; + goto $bb1; +$aa4679: + $p := 4679; + goto $bb1; +$aa4680: + $p := 4680; + goto $bb1; +$aa4681: + $p := 4681; + goto $bb1; +$aa4682: + $p := 4682; + goto $bb1; +$aa4683: + $p := 4683; + goto $bb1; +$aa4684: + $p := 4684; + goto $bb1; +$aa4685: + $p := 4685; + goto $bb1; +$aa4686: + $p := 4686; + goto $bb1; +$aa4687: + $p := 4687; + goto $bb1; +$aa4688: + $p := 4688; + goto $bb1; +$aa4689: + $p := 4689; + goto $bb1; +$aa4690: + $p := 4690; + goto $bb1; +$aa4691: + $p := 4691; + goto $bb1; +$aa4692: + $p := 4692; + goto $bb1; +$aa4693: + $p := 4693; + goto $bb1; +$aa4694: + $p := 4694; + goto $bb1; +$aa4695: + $p := 4695; + goto $bb1; +$aa4696: + $p := 4696; + goto $bb1; +$aa4697: + $p := 4697; + goto $bb1; +$aa4698: + $p := 4698; + goto $bb1; +$aa4699: + $p := 4699; + goto $bb1; +$aa4700: + $p := 4700; + goto $bb1; +$aa4701: + $p := 4701; + goto $bb1; +$aa4702: + $p := 4702; + goto $bb1; +$aa4703: + $p := 4703; + goto $bb1; +$aa4704: + $p := 4704; + goto $bb1; +$aa4705: + $p := 4705; + goto $bb1; +$aa4706: + $p := 4706; + goto $bb1; +$aa4707: + $p := 4707; + goto $bb1; +$aa4708: + $p := 4708; + goto $bb1; +$aa4709: + $p := 4709; + goto $bb1; +$aa4710: + $p := 4710; + goto $bb1; +$aa4711: + $p := 4711; + goto $bb1; +$aa4712: + $p := 4712; + goto $bb1; +$aa4713: + $p := 4713; + goto $bb1; +$aa4714: + $p := 4714; + goto $bb1; +$aa4715: + $p := 4715; + goto $bb1; +$aa4716: + $p := 4716; + goto $bb1; +$aa4717: + $p := 4717; + goto $bb1; +$aa4718: + $p := 4718; + goto $bb1; +$aa4719: + $p := 4719; + goto $bb1; +$aa4720: + $p := 4720; + goto $bb1; +$aa4721: + $p := 4721; + goto $bb1; +$aa4722: + $p := 4722; + goto $bb1; +$aa4723: + $p := 4723; + goto $bb1; +$aa4724: + $p := 4724; + goto $bb1; +$aa4725: + $p := 4725; + goto $bb1; +$aa4726: + $p := 4726; + goto $bb1; +$aa4727: + $p := 4727; + goto $bb1; +$aa4728: + $p := 4728; + goto $bb1; +$aa4729: + $p := 4729; + goto $bb1; +$aa4730: + $p := 4730; + goto $bb1; +$aa4731: + $p := 4731; + goto $bb1; +$aa4732: + $p := 4732; + goto $bb1; +$aa4733: + $p := 4733; + goto $bb1; +$aa4734: + $p := 4734; + goto $bb1; +$aa4735: + $p := 4735; + goto $bb1; +$aa4736: + $p := 4736; + goto $bb1; +$aa4737: + $p := 4737; + goto $bb1; +$aa4738: + $p := 4738; + goto $bb1; +$aa4739: + $p := 4739; + goto $bb1; +$aa4740: + $p := 4740; + goto $bb1; +$aa4741: + $p := 4741; + goto $bb1; +$aa4742: + $p := 4742; + goto $bb1; +$aa4743: + $p := 4743; + goto $bb1; +$aa4744: + $p := 4744; + goto $bb1; +$aa4745: + $p := 4745; + goto $bb1; +$aa4746: + $p := 4746; + goto $bb1; +$aa4747: + $p := 4747; + goto $bb1; +$aa4748: + $p := 4748; + goto $bb1; +$aa4749: + $p := 4749; + goto $bb1; +$aa4750: + $p := 4750; + goto $bb1; +$aa4751: + $p := 4751; + goto $bb1; +$aa4752: + $p := 4752; + goto $bb1; +$aa4753: + $p := 4753; + goto $bb1; +$aa4754: + $p := 4754; + goto $bb1; +$aa4755: + $p := 4755; + goto $bb1; +$aa4756: + $p := 4756; + goto $bb1; +$aa4757: + $p := 4757; + goto $bb1; +$aa4758: + $p := 4758; + goto $bb1; +$aa4759: + $p := 4759; + goto $bb1; +$aa4760: + $p := 4760; + goto $bb1; +$aa4761: + $p := 4761; + goto $bb1; +$aa4762: + $p := 4762; + goto $bb1; +$aa4763: + $p := 4763; + goto $bb1; +$aa4764: + $p := 4764; + goto $bb1; +$aa4765: + $p := 4765; + goto $bb1; +$aa4766: + $p := 4766; + goto $bb1; +$aa4767: + $p := 4767; + goto $bb1; +$aa4768: + $p := 4768; + goto $bb1; +$aa4769: + $p := 4769; + goto $bb1; +$aa4770: + $p := 4770; + goto $bb1; +$aa4771: + $p := 4771; + goto $bb1; +$aa4772: + $p := 4772; + goto $bb1; +$aa4773: + $p := 4773; + goto $bb1; +$aa4774: + $p := 4774; + goto $bb1; +$aa4775: + $p := 4775; + goto $bb1; +$aa4776: + $p := 4776; + goto $bb1; +$aa4777: + $p := 4777; + goto $bb1; +$aa4778: + $p := 4778; + goto $bb1; +$aa4779: + $p := 4779; + goto $bb1; +$aa4780: + $p := 4780; + goto $bb1; +$aa4781: + $p := 4781; + goto $bb1; +$aa4782: + $p := 4782; + goto $bb1; +$aa4783: + $p := 4783; + goto $bb1; +$aa4784: + $p := 4784; + goto $bb1; +$aa4785: + $p := 4785; + goto $bb1; +$aa4786: + $p := 4786; + goto $bb1; +$aa4787: + $p := 4787; + goto $bb1; +$aa4788: + $p := 4788; + goto $bb1; +$aa4789: + $p := 4789; + goto $bb1; +$aa4790: + $p := 4790; + goto $bb1; +$aa4791: + $p := 4791; + goto $bb1; +$aa4792: + $p := 4792; + goto $bb1; +$aa4793: + $p := 4793; + goto $bb1; +$aa4794: + $p := 4794; + goto $bb1; +$aa4795: + $p := 4795; + goto $bb1; +$aa4796: + $p := 4796; + goto $bb1; +$aa4797: + $p := 4797; + goto $bb1; +$aa4798: + $p := 4798; + goto $bb1; +$aa4799: + $p := 4799; + goto $bb1; +$aa4800: + $p := 4800; + goto $bb1; +$aa4801: + $p := 4801; + goto $bb1; +$aa4802: + $p := 4802; + goto $bb1; +$aa4803: + $p := 4803; + goto $bb1; +$aa4804: + $p := 4804; + goto $bb1; +$aa4805: + $p := 4805; + goto $bb1; +$aa4806: + $p := 4806; + goto $bb1; +$aa4807: + $p := 4807; + goto $bb1; +$aa4808: + $p := 4808; + goto $bb1; +$aa4809: + $p := 4809; + goto $bb1; +$aa4810: + $p := 4810; + goto $bb1; +$aa4811: + $p := 4811; + goto $bb1; +$aa4812: + $p := 4812; + goto $bb1; +$aa4813: + $p := 4813; + goto $bb1; +$aa4814: + $p := 4814; + goto $bb1; +$aa4815: + $p := 4815; + goto $bb1; +$aa4816: + $p := 4816; + goto $bb1; +$aa4817: + $p := 4817; + goto $bb1; +$aa4818: + $p := 4818; + goto $bb1; +$aa4819: + $p := 4819; + goto $bb1; +$aa4820: + $p := 4820; + goto $bb1; +$aa4821: + $p := 4821; + goto $bb1; +$aa4822: + $p := 4822; + goto $bb1; +$aa4823: + $p := 4823; + goto $bb1; +$aa4824: + $p := 4824; + goto $bb1; +$aa4825: + $p := 4825; + goto $bb1; +$aa4826: + $p := 4826; + goto $bb1; +$aa4827: + $p := 4827; + goto $bb1; +$aa4828: + $p := 4828; + goto $bb1; +$aa4829: + $p := 4829; + goto $bb1; +$aa4830: + $p := 4830; + goto $bb1; +$aa4831: + $p := 4831; + goto $bb1; +$aa4832: + $p := 4832; + goto $bb1; +$aa4833: + $p := 4833; + goto $bb1; +$aa4834: + $p := 4834; + goto $bb1; +$aa4835: + $p := 4835; + goto $bb1; +$aa4836: + $p := 4836; + goto $bb1; +$aa4837: + $p := 4837; + goto $bb1; +$aa4838: + $p := 4838; + goto $bb1; +$aa4839: + $p := 4839; + goto $bb1; +$aa4840: + $p := 4840; + goto $bb1; +$aa4841: + $p := 4841; + goto $bb1; +$aa4842: + $p := 4842; + goto $bb1; +$aa4843: + $p := 4843; + goto $bb1; +$aa4844: + $p := 4844; + goto $bb1; +$aa4845: + $p := 4845; + goto $bb1; +$aa4846: + $p := 4846; + goto $bb1; +$aa4847: + $p := 4847; + goto $bb1; +$aa4848: + $p := 4848; + goto $bb1; +$aa4849: + $p := 4849; + goto $bb1; +$aa4850: + $p := 4850; + goto $bb1; +$aa4851: + $p := 4851; + goto $bb1; +$aa4852: + $p := 4852; + goto $bb1; +$aa4853: + $p := 4853; + goto $bb1; +$aa4854: + $p := 4854; + goto $bb1; +$aa4855: + $p := 4855; + goto $bb1; +$aa4856: + $p := 4856; + goto $bb1; +$aa4857: + $p := 4857; + goto $bb1; +$aa4858: + $p := 4858; + goto $bb1; +$aa4859: + $p := 4859; + goto $bb1; +$aa4860: + $p := 4860; + goto $bb1; +$aa4861: + $p := 4861; + goto $bb1; +$aa4862: + $p := 4862; + goto $bb1; +$aa4863: + $p := 4863; + goto $bb1; +$aa4864: + $p := 4864; + goto $bb1; +$aa4865: + $p := 4865; + goto $bb1; +$aa4866: + $p := 4866; + goto $bb1; +$aa4867: + $p := 4867; + goto $bb1; +$aa4868: + $p := 4868; + goto $bb1; +$aa4869: + $p := 4869; + goto $bb1; +$aa4870: + $p := 4870; + goto $bb1; +$aa4871: + $p := 4871; + goto $bb1; +$aa4872: + $p := 4872; + goto $bb1; +$aa4873: + $p := 4873; + goto $bb1; +$aa4874: + $p := 4874; + goto $bb1; +$aa4875: + $p := 4875; + goto $bb1; +$aa4876: + $p := 4876; + goto $bb1; +$aa4877: + $p := 4877; + goto $bb1; +$aa4878: + $p := 4878; + goto $bb1; +$aa4879: + $p := 4879; + goto $bb1; +$aa4880: + $p := 4880; + goto $bb1; +$aa4881: + $p := 4881; + goto $bb1; +$aa4882: + $p := 4882; + goto $bb1; +$aa4883: + $p := 4883; + goto $bb1; +$aa4884: + $p := 4884; + goto $bb1; +$aa4885: + $p := 4885; + goto $bb1; +$aa4886: + $p := 4886; + goto $bb1; +$aa4887: + $p := 4887; + goto $bb1; +$aa4888: + $p := 4888; + goto $bb1; +$aa4889: + $p := 4889; + goto $bb1; +$aa4890: + $p := 4890; + goto $bb1; +$aa4891: + $p := 4891; + goto $bb1; +$aa4892: + $p := 4892; + goto $bb1; +$aa4893: + $p := 4893; + goto $bb1; +$aa4894: + $p := 4894; + goto $bb1; +$aa4895: + $p := 4895; + goto $bb1; +$aa4896: + $p := 4896; + goto $bb1; +$aa4897: + $p := 4897; + goto $bb1; +$aa4898: + $p := 4898; + goto $bb1; +$aa4899: + $p := 4899; + goto $bb1; +$aa4900: + $p := 4900; + goto $bb1; +$aa4901: + $p := 4901; + goto $bb1; +$aa4902: + $p := 4902; + goto $bb1; +$aa4903: + $p := 4903; + goto $bb1; +$aa4904: + $p := 4904; + goto $bb1; +$aa4905: + $p := 4905; + goto $bb1; +$aa4906: + $p := 4906; + goto $bb1; +$aa4907: + $p := 4907; + goto $bb1; +$aa4908: + $p := 4908; + goto $bb1; +$aa4909: + $p := 4909; + goto $bb1; +$aa4910: + $p := 4910; + goto $bb1; +$aa4911: + $p := 4911; + goto $bb1; +$aa4912: + $p := 4912; + goto $bb1; +$aa4913: + $p := 4913; + goto $bb1; +$aa4914: + $p := 4914; + goto $bb1; +$aa4915: + $p := 4915; + goto $bb1; +$aa4916: + $p := 4916; + goto $bb1; +$aa4917: + $p := 4917; + goto $bb1; +$aa4918: + $p := 4918; + goto $bb1; +$aa4919: + $p := 4919; + goto $bb1; +$aa4920: + $p := 4920; + goto $bb1; +$aa4921: + $p := 4921; + goto $bb1; +$aa4922: + $p := 4922; + goto $bb1; +$aa4923: + $p := 4923; + goto $bb1; +$aa4924: + $p := 4924; + goto $bb1; +$aa4925: + $p := 4925; + goto $bb1; +$aa4926: + $p := 4926; + goto $bb1; +$aa4927: + $p := 4927; + goto $bb1; +$aa4928: + $p := 4928; + goto $bb1; +$aa4929: + $p := 4929; + goto $bb1; +$aa4930: + $p := 4930; + goto $bb1; +$aa4931: + $p := 4931; + goto $bb1; +$aa4932: + $p := 4932; + goto $bb1; +$aa4933: + $p := 4933; + goto $bb1; +$aa4934: + $p := 4934; + goto $bb1; +$aa4935: + $p := 4935; + goto $bb1; +$aa4936: + $p := 4936; + goto $bb1; +$aa4937: + $p := 4937; + goto $bb1; +$aa4938: + $p := 4938; + goto $bb1; +$aa4939: + $p := 4939; + goto $bb1; +$aa4940: + $p := 4940; + goto $bb1; +$aa4941: + $p := 4941; + goto $bb1; +$aa4942: + $p := 4942; + goto $bb1; +$aa4943: + $p := 4943; + goto $bb1; +$aa4944: + $p := 4944; + goto $bb1; +$aa4945: + $p := 4945; + goto $bb1; +$aa4946: + $p := 4946; + goto $bb1; +$aa4947: + $p := 4947; + goto $bb1; +$aa4948: + $p := 4948; + goto $bb1; +$aa4949: + $p := 4949; + goto $bb1; +$aa4950: + $p := 4950; + goto $bb1; +$aa4951: + $p := 4951; + goto $bb1; +$aa4952: + $p := 4952; + goto $bb1; +$aa4953: + $p := 4953; + goto $bb1; +$aa4954: + $p := 4954; + goto $bb1; +$aa4955: + $p := 4955; + goto $bb1; +$aa4956: + $p := 4956; + goto $bb1; +$aa4957: + $p := 4957; + goto $bb1; +$aa4958: + $p := 4958; + goto $bb1; +$aa4959: + $p := 4959; + goto $bb1; +$aa4960: + $p := 4960; + goto $bb1; +$aa4961: + $p := 4961; + goto $bb1; +$aa4962: + $p := 4962; + goto $bb1; +$aa4963: + $p := 4963; + goto $bb1; +$aa4964: + $p := 4964; + goto $bb1; +$aa4965: + $p := 4965; + goto $bb1; +$aa4966: + $p := 4966; + goto $bb1; +$aa4967: + $p := 4967; + goto $bb1; +$aa4968: + $p := 4968; + goto $bb1; +$aa4969: + $p := 4969; + goto $bb1; +$aa4970: + $p := 4970; + goto $bb1; +$aa4971: + $p := 4971; + goto $bb1; +$aa4972: + $p := 4972; + goto $bb1; +$aa4973: + $p := 4973; + goto $bb1; +$aa4974: + $p := 4974; + goto $bb1; +$aa4975: + $p := 4975; + goto $bb1; +$aa4976: + $p := 4976; + goto $bb1; +$aa4977: + $p := 4977; + goto $bb1; +$aa4978: + $p := 4978; + goto $bb1; +$aa4979: + $p := 4979; + goto $bb1; +$aa4980: + $p := 4980; + goto $bb1; +$aa4981: + $p := 4981; + goto $bb1; +$aa4982: + $p := 4982; + goto $bb1; +$aa4983: + $p := 4983; + goto $bb1; +$aa4984: + $p := 4984; + goto $bb1; +$aa4985: + $p := 4985; + goto $bb1; +$aa4986: + $p := 4986; + goto $bb1; +$aa4987: + $p := 4987; + goto $bb1; +$aa4988: + $p := 4988; + goto $bb1; +$aa4989: + $p := 4989; + goto $bb1; +$aa4990: + $p := 4990; + goto $bb1; +$aa4991: + $p := 4991; + goto $bb1; +$aa4992: + $p := 4992; + goto $bb1; +$aa4993: + $p := 4993; + goto $bb1; +$aa4994: + $p := 4994; + goto $bb1; +$aa4995: + $p := 4995; + goto $bb1; +$aa4996: + $p := 4996; + goto $bb1; +$aa4997: + $p := 4997; + goto $bb1; +$aa4998: + $p := 4998; + goto $bb1; +$aa4999: + $p := 4999; + goto $bb1; +$aa5000: + $p := 5000; + goto $bb1; +$aa5001: + $p := 5001; + goto $bb1; +$aa5002: + $p := 5002; + goto $bb1; +$aa5003: + $p := 5003; + goto $bb1; +$aa5004: + $p := 5004; + goto $bb1; +$aa5005: + $p := 5005; + goto $bb1; +$aa5006: + $p := 5006; + goto $bb1; +$aa5007: + $p := 5007; + goto $bb1; +$aa5008: + $p := 5008; + goto $bb1; +$aa5009: + $p := 5009; + goto $bb1; +$aa5010: + $p := 5010; + goto $bb1; +$aa5011: + $p := 5011; + goto $bb1; +$aa5012: + $p := 5012; + goto $bb1; +$aa5013: + $p := 5013; + goto $bb1; +$aa5014: + $p := 5014; + goto $bb1; +$aa5015: + $p := 5015; + goto $bb1; +$aa5016: + $p := 5016; + goto $bb1; +$aa5017: + $p := 5017; + goto $bb1; +$aa5018: + $p := 5018; + goto $bb1; +$aa5019: + $p := 5019; + goto $bb1; +$aa5020: + $p := 5020; + goto $bb1; +$aa5021: + $p := 5021; + goto $bb1; +$aa5022: + $p := 5022; + goto $bb1; +$aa5023: + $p := 5023; + goto $bb1; +$aa5024: + $p := 5024; + goto $bb1; +$aa5025: + $p := 5025; + goto $bb1; +$aa5026: + $p := 5026; + goto $bb1; +$aa5027: + $p := 5027; + goto $bb1; +$aa5028: + $p := 5028; + goto $bb1; +$aa5029: + $p := 5029; + goto $bb1; +$aa5030: + $p := 5030; + goto $bb1; +$aa5031: + $p := 5031; + goto $bb1; +$aa5032: + $p := 5032; + goto $bb1; +$aa5033: + $p := 5033; + goto $bb1; +$aa5034: + $p := 5034; + goto $bb1; +$aa5035: + $p := 5035; + goto $bb1; +$aa5036: + $p := 5036; + goto $bb1; +$aa5037: + $p := 5037; + goto $bb1; +$aa5038: + $p := 5038; + goto $bb1; +$aa5039: + $p := 5039; + goto $bb1; +$aa5040: + $p := 5040; + goto $bb1; +$aa5041: + $p := 5041; + goto $bb1; +$aa5042: + $p := 5042; + goto $bb1; +$aa5043: + $p := 5043; + goto $bb1; +$aa5044: + $p := 5044; + goto $bb1; +$aa5045: + $p := 5045; + goto $bb1; +$aa5046: + $p := 5046; + goto $bb1; +$aa5047: + $p := 5047; + goto $bb1; +$aa5048: + $p := 5048; + goto $bb1; +$aa5049: + $p := 5049; + goto $bb1; +$aa5050: + $p := 5050; + goto $bb1; +$aa5051: + $p := 5051; + goto $bb1; +$aa5052: + $p := 5052; + goto $bb1; +$aa5053: + $p := 5053; + goto $bb1; +$aa5054: + $p := 5054; + goto $bb1; +$aa5055: + $p := 5055; + goto $bb1; +$aa5056: + $p := 5056; + goto $bb1; +$aa5057: + $p := 5057; + goto $bb1; +$aa5058: + $p := 5058; + goto $bb1; +$aa5059: + $p := 5059; + goto $bb1; +$aa5060: + $p := 5060; + goto $bb1; +$aa5061: + $p := 5061; + goto $bb1; +$aa5062: + $p := 5062; + goto $bb1; +$aa5063: + $p := 5063; + goto $bb1; +$aa5064: + $p := 5064; + goto $bb1; +$aa5065: + $p := 5065; + goto $bb1; +$aa5066: + $p := 5066; + goto $bb1; +$aa5067: + $p := 5067; + goto $bb1; +$aa5068: + $p := 5068; + goto $bb1; +$aa5069: + $p := 5069; + goto $bb1; +$aa5070: + $p := 5070; + goto $bb1; +$aa5071: + $p := 5071; + goto $bb1; +$aa5072: + $p := 5072; + goto $bb1; +$aa5073: + $p := 5073; + goto $bb1; +$aa5074: + $p := 5074; + goto $bb1; +$aa5075: + $p := 5075; + goto $bb1; +$aa5076: + $p := 5076; + goto $bb1; +$aa5077: + $p := 5077; + goto $bb1; +$aa5078: + $p := 5078; + goto $bb1; +$aa5079: + $p := 5079; + goto $bb1; +$aa5080: + $p := 5080; + goto $bb1; +$aa5081: + $p := 5081; + goto $bb1; +$aa5082: + $p := 5082; + goto $bb1; +$aa5083: + $p := 5083; + goto $bb1; +$aa5084: + $p := 5084; + goto $bb1; +$aa5085: + $p := 5085; + goto $bb1; +$aa5086: + $p := 5086; + goto $bb1; +$aa5087: + $p := 5087; + goto $bb1; +$aa5088: + $p := 5088; + goto $bb1; +$aa5089: + $p := 5089; + goto $bb1; +$aa5090: + $p := 5090; + goto $bb1; +$aa5091: + $p := 5091; + goto $bb1; +$aa5092: + $p := 5092; + goto $bb1; +$aa5093: + $p := 5093; + goto $bb1; +$aa5094: + $p := 5094; + goto $bb1; +$aa5095: + $p := 5095; + goto $bb1; +$aa5096: + $p := 5096; + goto $bb1; +$aa5097: + $p := 5097; + goto $bb1; +$aa5098: + $p := 5098; + goto $bb1; +$aa5099: + $p := 5099; + goto $bb1; +$aa5100: + $p := 5100; + goto $bb1; +$aa5101: + $p := 5101; + goto $bb1; +$aa5102: + $p := 5102; + goto $bb1; +$aa5103: + $p := 5103; + goto $bb1; +$aa5104: + $p := 5104; + goto $bb1; +$aa5105: + $p := 5105; + goto $bb1; +$aa5106: + $p := 5106; + goto $bb1; +$aa5107: + $p := 5107; + goto $bb1; +$aa5108: + $p := 5108; + goto $bb1; +$aa5109: + $p := 5109; + goto $bb1; +$aa5110: + $p := 5110; + goto $bb1; +$aa5111: + $p := 5111; + goto $bb1; +$aa5112: + $p := 5112; + goto $bb1; +$aa5113: + $p := 5113; + goto $bb1; +$aa5114: + $p := 5114; + goto $bb1; +$aa5115: + $p := 5115; + goto $bb1; +$aa5116: + $p := 5116; + goto $bb1; +$aa5117: + $p := 5117; + goto $bb1; +$aa5118: + $p := 5118; + goto $bb1; +$aa5119: + $p := 5119; + goto $bb1; +$aa5120: + $p := 5120; + goto $bb1; +$aa5121: + $p := 5121; + goto $bb1; +$aa5122: + $p := 5122; + goto $bb1; +$aa5123: + $p := 5123; + goto $bb1; +$aa5124: + $p := 5124; + goto $bb1; +$aa5125: + $p := 5125; + goto $bb1; +$aa5126: + $p := 5126; + goto $bb1; +$aa5127: + $p := 5127; + goto $bb1; +$aa5128: + $p := 5128; + goto $bb1; +$aa5129: + $p := 5129; + goto $bb1; +$aa5130: + $p := 5130; + goto $bb1; +$aa5131: + $p := 5131; + goto $bb1; +$aa5132: + $p := 5132; + goto $bb1; +$aa5133: + $p := 5133; + goto $bb1; +$aa5134: + $p := 5134; + goto $bb1; +$aa5135: + $p := 5135; + goto $bb1; +$aa5136: + $p := 5136; + goto $bb1; +$aa5137: + $p := 5137; + goto $bb1; +$aa5138: + $p := 5138; + goto $bb1; +$aa5139: + $p := 5139; + goto $bb1; +$aa5140: + $p := 5140; + goto $bb1; +$aa5141: + $p := 5141; + goto $bb1; +$aa5142: + $p := 5142; + goto $bb1; +$aa5143: + $p := 5143; + goto $bb1; +$aa5144: + $p := 5144; + goto $bb1; +$aa5145: + $p := 5145; + goto $bb1; +$aa5146: + $p := 5146; + goto $bb1; +$aa5147: + $p := 5147; + goto $bb1; +$aa5148: + $p := 5148; + goto $bb1; +$aa5149: + $p := 5149; + goto $bb1; +$aa5150: + $p := 5150; + goto $bb1; +$aa5151: + $p := 5151; + goto $bb1; +$aa5152: + $p := 5152; + goto $bb1; +$aa5153: + $p := 5153; + goto $bb1; +$aa5154: + $p := 5154; + goto $bb1; +$aa5155: + $p := 5155; + goto $bb1; +$aa5156: + $p := 5156; + goto $bb1; +$aa5157: + $p := 5157; + goto $bb1; +$aa5158: + $p := 5158; + goto $bb1; +$aa5159: + $p := 5159; + goto $bb1; +$aa5160: + $p := 5160; + goto $bb1; +$aa5161: + $p := 5161; + goto $bb1; +$aa5162: + $p := 5162; + goto $bb1; +$aa5163: + $p := 5163; + goto $bb1; +$aa5164: + $p := 5164; + goto $bb1; +$aa5165: + $p := 5165; + goto $bb1; +$aa5166: + $p := 5166; + goto $bb1; +$aa5167: + $p := 5167; + goto $bb1; +$aa5168: + $p := 5168; + goto $bb1; +$aa5169: + $p := 5169; + goto $bb1; +$aa5170: + $p := 5170; + goto $bb1; +$aa5171: + $p := 5171; + goto $bb1; +$aa5172: + $p := 5172; + goto $bb1; +$aa5173: + $p := 5173; + goto $bb1; +$aa5174: + $p := 5174; + goto $bb1; +$aa5175: + $p := 5175; + goto $bb1; +$aa5176: + $p := 5176; + goto $bb1; +$aa5177: + $p := 5177; + goto $bb1; +$aa5178: + $p := 5178; + goto $bb1; +$aa5179: + $p := 5179; + goto $bb1; +$aa5180: + $p := 5180; + goto $bb1; +$aa5181: + $p := 5181; + goto $bb1; +$aa5182: + $p := 5182; + goto $bb1; +$aa5183: + $p := 5183; + goto $bb1; +$aa5184: + $p := 5184; + goto $bb1; +$aa5185: + $p := 5185; + goto $bb1; +$aa5186: + $p := 5186; + goto $bb1; +$aa5187: + $p := 5187; + goto $bb1; +$aa5188: + $p := 5188; + goto $bb1; +$aa5189: + $p := 5189; + goto $bb1; +$aa5190: + $p := 5190; + goto $bb1; +$aa5191: + $p := 5191; + goto $bb1; +$aa5192: + $p := 5192; + goto $bb1; +$aa5193: + $p := 5193; + goto $bb1; +$aa5194: + $p := 5194; + goto $bb1; +$aa5195: + $p := 5195; + goto $bb1; +$aa5196: + $p := 5196; + goto $bb1; +$aa5197: + $p := 5197; + goto $bb1; +$aa5198: + $p := 5198; + goto $bb1; +$aa5199: + $p := 5199; + goto $bb1; +$aa5200: + $p := 5200; + goto $bb1; +$aa5201: + $p := 5201; + goto $bb1; +$aa5202: + $p := 5202; + goto $bb1; +$aa5203: + $p := 5203; + goto $bb1; +$aa5204: + $p := 5204; + goto $bb1; +$aa5205: + $p := 5205; + goto $bb1; +$aa5206: + $p := 5206; + goto $bb1; +$aa5207: + $p := 5207; + goto $bb1; +$aa5208: + $p := 5208; + goto $bb1; +$aa5209: + $p := 5209; + goto $bb1; +$aa5210: + $p := 5210; + goto $bb1; +$aa5211: + $p := 5211; + goto $bb1; +$aa5212: + $p := 5212; + goto $bb1; +$aa5213: + $p := 5213; + goto $bb1; +$aa5214: + $p := 5214; + goto $bb1; +$aa5215: + $p := 5215; + goto $bb1; +$aa5216: + $p := 5216; + goto $bb1; +$aa5217: + $p := 5217; + goto $bb1; +$aa5218: + $p := 5218; + goto $bb1; +$aa5219: + $p := 5219; + goto $bb1; +$aa5220: + $p := 5220; + goto $bb1; +$aa5221: + $p := 5221; + goto $bb1; +$aa5222: + $p := 5222; + goto $bb1; +$aa5223: + $p := 5223; + goto $bb1; +$aa5224: + $p := 5224; + goto $bb1; +$aa5225: + $p := 5225; + goto $bb1; +$aa5226: + $p := 5226; + goto $bb1; +$aa5227: + $p := 5227; + goto $bb1; +$aa5228: + $p := 5228; + goto $bb1; +$aa5229: + $p := 5229; + goto $bb1; +$aa5230: + $p := 5230; + goto $bb1; +$aa5231: + $p := 5231; + goto $bb1; +$aa5232: + $p := 5232; + goto $bb1; +$aa5233: + $p := 5233; + goto $bb1; +$aa5234: + $p := 5234; + goto $bb1; +$aa5235: + $p := 5235; + goto $bb1; +$aa5236: + $p := 5236; + goto $bb1; +$aa5237: + $p := 5237; + goto $bb1; +$aa5238: + $p := 5238; + goto $bb1; +$aa5239: + $p := 5239; + goto $bb1; +$aa5240: + $p := 5240; + goto $bb1; +$aa5241: + $p := 5241; + goto $bb1; +$aa5242: + $p := 5242; + goto $bb1; +$aa5243: + $p := 5243; + goto $bb1; +$aa5244: + $p := 5244; + goto $bb1; +$aa5245: + $p := 5245; + goto $bb1; +$aa5246: + $p := 5246; + goto $bb1; +$aa5247: + $p := 5247; + goto $bb1; +$aa5248: + $p := 5248; + goto $bb1; +$aa5249: + $p := 5249; + goto $bb1; +$aa5250: + $p := 5250; + goto $bb1; +$aa5251: + $p := 5251; + goto $bb1; +$aa5252: + $p := 5252; + goto $bb1; +$aa5253: + $p := 5253; + goto $bb1; +$aa5254: + $p := 5254; + goto $bb1; +$aa5255: + $p := 5255; + goto $bb1; +$aa5256: + $p := 5256; + goto $bb1; +$aa5257: + $p := 5257; + goto $bb1; +$aa5258: + $p := 5258; + goto $bb1; +$aa5259: + $p := 5259; + goto $bb1; +$aa5260: + $p := 5260; + goto $bb1; +$aa5261: + $p := 5261; + goto $bb1; +$aa5262: + $p := 5262; + goto $bb1; +$aa5263: + $p := 5263; + goto $bb1; +$aa5264: + $p := 5264; + goto $bb1; +$aa5265: + $p := 5265; + goto $bb1; +$aa5266: + $p := 5266; + goto $bb1; +$aa5267: + $p := 5267; + goto $bb1; +$aa5268: + $p := 5268; + goto $bb1; +$aa5269: + $p := 5269; + goto $bb1; +$aa5270: + $p := 5270; + goto $bb1; +$aa5271: + $p := 5271; + goto $bb1; +$aa5272: + $p := 5272; + goto $bb1; +$aa5273: + $p := 5273; + goto $bb1; +$aa5274: + $p := 5274; + goto $bb1; +$aa5275: + $p := 5275; + goto $bb1; +$aa5276: + $p := 5276; + goto $bb1; +$aa5277: + $p := 5277; + goto $bb1; +$aa5278: + $p := 5278; + goto $bb1; +$aa5279: + $p := 5279; + goto $bb1; +$aa5280: + $p := 5280; + goto $bb1; +$aa5281: + $p := 5281; + goto $bb1; +$aa5282: + $p := 5282; + goto $bb1; +$aa5283: + $p := 5283; + goto $bb1; +$aa5284: + $p := 5284; + goto $bb1; +$aa5285: + $p := 5285; + goto $bb1; +$aa5286: + $p := 5286; + goto $bb1; +$aa5287: + $p := 5287; + goto $bb1; +$aa5288: + $p := 5288; + goto $bb1; +$aa5289: + $p := 5289; + goto $bb1; +$aa5290: + $p := 5290; + goto $bb1; +$aa5291: + $p := 5291; + goto $bb1; +$aa5292: + $p := 5292; + goto $bb1; +$aa5293: + $p := 5293; + goto $bb1; +$aa5294: + $p := 5294; + goto $bb1; +$aa5295: + $p := 5295; + goto $bb1; +$aa5296: + $p := 5296; + goto $bb1; +$aa5297: + $p := 5297; + goto $bb1; +$aa5298: + $p := 5298; + goto $bb1; +$aa5299: + $p := 5299; + goto $bb1; +$aa5300: + $p := 5300; + goto $bb1; +$aa5301: + $p := 5301; + goto $bb1; +$aa5302: + $p := 5302; + goto $bb1; +$aa5303: + $p := 5303; + goto $bb1; +$aa5304: + $p := 5304; + goto $bb1; +$aa5305: + $p := 5305; + goto $bb1; +$aa5306: + $p := 5306; + goto $bb1; +$aa5307: + $p := 5307; + goto $bb1; +$aa5308: + $p := 5308; + goto $bb1; +$aa5309: + $p := 5309; + goto $bb1; +$aa5310: + $p := 5310; + goto $bb1; +$aa5311: + $p := 5311; + goto $bb1; +$aa5312: + $p := 5312; + goto $bb1; +$aa5313: + $p := 5313; + goto $bb1; +$aa5314: + $p := 5314; + goto $bb1; +$aa5315: + $p := 5315; + goto $bb1; +$aa5316: + $p := 5316; + goto $bb1; +$aa5317: + $p := 5317; + goto $bb1; +$aa5318: + $p := 5318; + goto $bb1; +$aa5319: + $p := 5319; + goto $bb1; +$aa5320: + $p := 5320; + goto $bb1; +$aa5321: + $p := 5321; + goto $bb1; +$aa5322: + $p := 5322; + goto $bb1; +$aa5323: + $p := 5323; + goto $bb1; +$aa5324: + $p := 5324; + goto $bb1; +$aa5325: + $p := 5325; + goto $bb1; +$aa5326: + $p := 5326; + goto $bb1; +$aa5327: + $p := 5327; + goto $bb1; +$aa5328: + $p := 5328; + goto $bb1; +$aa5329: + $p := 5329; + goto $bb1; +$aa5330: + $p := 5330; + goto $bb1; +$aa5331: + $p := 5331; + goto $bb1; +$aa5332: + $p := 5332; + goto $bb1; +$aa5333: + $p := 5333; + goto $bb1; +$aa5334: + $p := 5334; + goto $bb1; +$aa5335: + $p := 5335; + goto $bb1; +$aa5336: + $p := 5336; + goto $bb1; +$aa5337: + $p := 5337; + goto $bb1; +$aa5338: + $p := 5338; + goto $bb1; +$aa5339: + $p := 5339; + goto $bb1; +$aa5340: + $p := 5340; + goto $bb1; +$aa5341: + $p := 5341; + goto $bb1; +$aa5342: + $p := 5342; + goto $bb1; +$aa5343: + $p := 5343; + goto $bb1; +$aa5344: + $p := 5344; + goto $bb1; +$aa5345: + $p := 5345; + goto $bb1; +$aa5346: + $p := 5346; + goto $bb1; +$aa5347: + $p := 5347; + goto $bb1; +$aa5348: + $p := 5348; + goto $bb1; +$aa5349: + $p := 5349; + goto $bb1; +$aa5350: + $p := 5350; + goto $bb1; +$aa5351: + $p := 5351; + goto $bb1; +$aa5352: + $p := 5352; + goto $bb1; +$aa5353: + $p := 5353; + goto $bb1; +$aa5354: + $p := 5354; + goto $bb1; +$aa5355: + $p := 5355; + goto $bb1; +$aa5356: + $p := 5356; + goto $bb1; +$aa5357: + $p := 5357; + goto $bb1; +$aa5358: + $p := 5358; + goto $bb1; +$aa5359: + $p := 5359; + goto $bb1; +$aa5360: + $p := 5360; + goto $bb1; +$aa5361: + $p := 5361; + goto $bb1; +$aa5362: + $p := 5362; + goto $bb1; +$aa5363: + $p := 5363; + goto $bb1; +$aa5364: + $p := 5364; + goto $bb1; +$aa5365: + $p := 5365; + goto $bb1; +$aa5366: + $p := 5366; + goto $bb1; +$aa5367: + $p := 5367; + goto $bb1; +$aa5368: + $p := 5368; + goto $bb1; +$aa5369: + $p := 5369; + goto $bb1; +$aa5370: + $p := 5370; + goto $bb1; +$aa5371: + $p := 5371; + goto $bb1; +$aa5372: + $p := 5372; + goto $bb1; +$aa5373: + $p := 5373; + goto $bb1; +$aa5374: + $p := 5374; + goto $bb1; +$aa5375: + $p := 5375; + goto $bb1; +$aa5376: + $p := 5376; + goto $bb1; +$aa5377: + $p := 5377; + goto $bb1; +$aa5378: + $p := 5378; + goto $bb1; +$aa5379: + $p := 5379; + goto $bb1; +$aa5380: + $p := 5380; + goto $bb1; +$aa5381: + $p := 5381; + goto $bb1; +$aa5382: + $p := 5382; + goto $bb1; +$aa5383: + $p := 5383; + goto $bb1; +$aa5384: + $p := 5384; + goto $bb1; +$aa5385: + $p := 5385; + goto $bb1; +$aa5386: + $p := 5386; + goto $bb1; +$aa5387: + $p := 5387; + goto $bb1; +$aa5388: + $p := 5388; + goto $bb1; +$aa5389: + $p := 5389; + goto $bb1; +$aa5390: + $p := 5390; + goto $bb1; +$aa5391: + $p := 5391; + goto $bb1; +$aa5392: + $p := 5392; + goto $bb1; +$aa5393: + $p := 5393; + goto $bb1; +$aa5394: + $p := 5394; + goto $bb1; +$aa5395: + $p := 5395; + goto $bb1; +$aa5396: + $p := 5396; + goto $bb1; +$aa5397: + $p := 5397; + goto $bb1; +$aa5398: + $p := 5398; + goto $bb1; +$aa5399: + $p := 5399; + goto $bb1; +$aa5400: + $p := 5400; + goto $bb1; +$aa5401: + $p := 5401; + goto $bb1; +$aa5402: + $p := 5402; + goto $bb1; +$aa5403: + $p := 5403; + goto $bb1; +$aa5404: + $p := 5404; + goto $bb1; +$aa5405: + $p := 5405; + goto $bb1; +$aa5406: + $p := 5406; + goto $bb1; +$aa5407: + $p := 5407; + goto $bb1; +$aa5408: + $p := 5408; + goto $bb1; +$aa5409: + $p := 5409; + goto $bb1; +$aa5410: + $p := 5410; + goto $bb1; +$aa5411: + $p := 5411; + goto $bb1; +$aa5412: + $p := 5412; + goto $bb1; +$aa5413: + $p := 5413; + goto $bb1; +$aa5414: + $p := 5414; + goto $bb1; +$aa5415: + $p := 5415; + goto $bb1; +$aa5416: + $p := 5416; + goto $bb1; +$aa5417: + $p := 5417; + goto $bb1; +$aa5418: + $p := 5418; + goto $bb1; +$aa5419: + $p := 5419; + goto $bb1; +$aa5420: + $p := 5420; + goto $bb1; +$aa5421: + $p := 5421; + goto $bb1; +$aa5422: + $p := 5422; + goto $bb1; +$aa5423: + $p := 5423; + goto $bb1; +$aa5424: + $p := 5424; + goto $bb1; +$aa5425: + $p := 5425; + goto $bb1; +$aa5426: + $p := 5426; + goto $bb1; +$aa5427: + $p := 5427; + goto $bb1; +$aa5428: + $p := 5428; + goto $bb1; +$aa5429: + $p := 5429; + goto $bb1; +$aa5430: + $p := 5430; + goto $bb1; +$aa5431: + $p := 5431; + goto $bb1; +$aa5432: + $p := 5432; + goto $bb1; +$aa5433: + $p := 5433; + goto $bb1; +$aa5434: + $p := 5434; + goto $bb1; +$aa5435: + $p := 5435; + goto $bb1; +$aa5436: + $p := 5436; + goto $bb1; +$aa5437: + $p := 5437; + goto $bb1; +$aa5438: + $p := 5438; + goto $bb1; +$aa5439: + $p := 5439; + goto $bb1; +$aa5440: + $p := 5440; + goto $bb1; +$aa5441: + $p := 5441; + goto $bb1; +$aa5442: + $p := 5442; + goto $bb1; +$aa5443: + $p := 5443; + goto $bb1; +$aa5444: + $p := 5444; + goto $bb1; +$aa5445: + $p := 5445; + goto $bb1; +$aa5446: + $p := 5446; + goto $bb1; +$aa5447: + $p := 5447; + goto $bb1; +$aa5448: + $p := 5448; + goto $bb1; +$aa5449: + $p := 5449; + goto $bb1; +$aa5450: + $p := 5450; + goto $bb1; +$aa5451: + $p := 5451; + goto $bb1; +$aa5452: + $p := 5452; + goto $bb1; +$aa5453: + $p := 5453; + goto $bb1; +$aa5454: + $p := 5454; + goto $bb1; +$aa5455: + $p := 5455; + goto $bb1; +$aa5456: + $p := 5456; + goto $bb1; +$aa5457: + $p := 5457; + goto $bb1; +$aa5458: + $p := 5458; + goto $bb1; +$aa5459: + $p := 5459; + goto $bb1; +$aa5460: + $p := 5460; + goto $bb1; +$aa5461: + $p := 5461; + goto $bb1; +$aa5462: + $p := 5462; + goto $bb1; +$aa5463: + $p := 5463; + goto $bb1; +$aa5464: + $p := 5464; + goto $bb1; +$aa5465: + $p := 5465; + goto $bb1; +$aa5466: + $p := 5466; + goto $bb1; +$aa5467: + $p := 5467; + goto $bb1; +$aa5468: + $p := 5468; + goto $bb1; +$aa5469: + $p := 5469; + goto $bb1; +$aa5470: + $p := 5470; + goto $bb1; +$aa5471: + $p := 5471; + goto $bb1; +$aa5472: + $p := 5472; + goto $bb1; +$aa5473: + $p := 5473; + goto $bb1; +$aa5474: + $p := 5474; + goto $bb1; +$aa5475: + $p := 5475; + goto $bb1; +$aa5476: + $p := 5476; + goto $bb1; +$aa5477: + $p := 5477; + goto $bb1; +$aa5478: + $p := 5478; + goto $bb1; +$aa5479: + $p := 5479; + goto $bb1; +$aa5480: + $p := 5480; + goto $bb1; +$aa5481: + $p := 5481; + goto $bb1; +$aa5482: + $p := 5482; + goto $bb1; +$aa5483: + $p := 5483; + goto $bb1; +$aa5484: + $p := 5484; + goto $bb1; +$aa5485: + $p := 5485; + goto $bb1; +$aa5486: + $p := 5486; + goto $bb1; +$aa5487: + $p := 5487; + goto $bb1; +$aa5488: + $p := 5488; + goto $bb1; +$aa5489: + $p := 5489; + goto $bb1; +$aa5490: + $p := 5490; + goto $bb1; +$aa5491: + $p := 5491; + goto $bb1; +$aa5492: + $p := 5492; + goto $bb1; +$aa5493: + $p := 5493; + goto $bb1; +$aa5494: + $p := 5494; + goto $bb1; +$aa5495: + $p := 5495; + goto $bb1; +$aa5496: + $p := 5496; + goto $bb1; +$aa5497: + $p := 5497; + goto $bb1; +$aa5498: + $p := 5498; + goto $bb1; +$aa5499: + $p := 5499; + goto $bb1; +$aa5500: + $p := 5500; + goto $bb1; +$aa5501: + $p := 5501; + goto $bb1; +$aa5502: + $p := 5502; + goto $bb1; +$aa5503: + $p := 5503; + goto $bb1; +$aa5504: + $p := 5504; + goto $bb1; +$aa5505: + $p := 5505; + goto $bb1; +$aa5506: + $p := 5506; + goto $bb1; +$aa5507: + $p := 5507; + goto $bb1; +$aa5508: + $p := 5508; + goto $bb1; +$aa5509: + $p := 5509; + goto $bb1; +$aa5510: + $p := 5510; + goto $bb1; +$aa5511: + $p := 5511; + goto $bb1; +$aa5512: + $p := 5512; + goto $bb1; +$aa5513: + $p := 5513; + goto $bb1; +$aa5514: + $p := 5514; + goto $bb1; +$aa5515: + $p := 5515; + goto $bb1; +$aa5516: + $p := 5516; + goto $bb1; +$aa5517: + $p := 5517; + goto $bb1; +$aa5518: + $p := 5518; + goto $bb1; +$aa5519: + $p := 5519; + goto $bb1; +$aa5520: + $p := 5520; + goto $bb1; +$aa5521: + $p := 5521; + goto $bb1; +$aa5522: + $p := 5522; + goto $bb1; +$aa5523: + $p := 5523; + goto $bb1; +$aa5524: + $p := 5524; + goto $bb1; +$aa5525: + $p := 5525; + goto $bb1; +$aa5526: + $p := 5526; + goto $bb1; +$aa5527: + $p := 5527; + goto $bb1; +$aa5528: + $p := 5528; + goto $bb1; +$aa5529: + $p := 5529; + goto $bb1; +$aa5530: + $p := 5530; + goto $bb1; +$aa5531: + $p := 5531; + goto $bb1; +$aa5532: + $p := 5532; + goto $bb1; +$aa5533: + $p := 5533; + goto $bb1; +$aa5534: + $p := 5534; + goto $bb1; +$aa5535: + $p := 5535; + goto $bb1; +$aa5536: + $p := 5536; + goto $bb1; +$aa5537: + $p := 5537; + goto $bb1; +$aa5538: + $p := 5538; + goto $bb1; +$aa5539: + $p := 5539; + goto $bb1; +$aa5540: + $p := 5540; + goto $bb1; +$aa5541: + $p := 5541; + goto $bb1; +$aa5542: + $p := 5542; + goto $bb1; +$aa5543: + $p := 5543; + goto $bb1; +$aa5544: + $p := 5544; + goto $bb1; +$aa5545: + $p := 5545; + goto $bb1; +$aa5546: + $p := 5546; + goto $bb1; +$aa5547: + $p := 5547; + goto $bb1; +$aa5548: + $p := 5548; + goto $bb1; +$aa5549: + $p := 5549; + goto $bb1; +$aa5550: + $p := 5550; + goto $bb1; +$aa5551: + $p := 5551; + goto $bb1; +$aa5552: + $p := 5552; + goto $bb1; +$aa5553: + $p := 5553; + goto $bb1; +$aa5554: + $p := 5554; + goto $bb1; +$aa5555: + $p := 5555; + goto $bb1; +$aa5556: + $p := 5556; + goto $bb1; +$aa5557: + $p := 5557; + goto $bb1; +$aa5558: + $p := 5558; + goto $bb1; +$aa5559: + $p := 5559; + goto $bb1; +$aa5560: + $p := 5560; + goto $bb1; +$aa5561: + $p := 5561; + goto $bb1; +$aa5562: + $p := 5562; + goto $bb1; +$aa5563: + $p := 5563; + goto $bb1; +$aa5564: + $p := 5564; + goto $bb1; +$aa5565: + $p := 5565; + goto $bb1; +$aa5566: + $p := 5566; + goto $bb1; +$aa5567: + $p := 5567; + goto $bb1; +$aa5568: + $p := 5568; + goto $bb1; +$aa5569: + $p := 5569; + goto $bb1; +$aa5570: + $p := 5570; + goto $bb1; +$aa5571: + $p := 5571; + goto $bb1; +$aa5572: + $p := 5572; + goto $bb1; +$aa5573: + $p := 5573; + goto $bb1; +$aa5574: + $p := 5574; + goto $bb1; +$aa5575: + $p := 5575; + goto $bb1; +$aa5576: + $p := 5576; + goto $bb1; +$aa5577: + $p := 5577; + goto $bb1; +$aa5578: + $p := 5578; + goto $bb1; +$aa5579: + $p := 5579; + goto $bb1; +$aa5580: + $p := 5580; + goto $bb1; +$aa5581: + $p := 5581; + goto $bb1; +$aa5582: + $p := 5582; + goto $bb1; +$aa5583: + $p := 5583; + goto $bb1; +$aa5584: + $p := 5584; + goto $bb1; +$aa5585: + $p := 5585; + goto $bb1; +$aa5586: + $p := 5586; + goto $bb1; +$aa5587: + $p := 5587; + goto $bb1; +$aa5588: + $p := 5588; + goto $bb1; +$aa5589: + $p := 5589; + goto $bb1; +$aa5590: + $p := 5590; + goto $bb1; +$aa5591: + $p := 5591; + goto $bb1; +$aa5592: + $p := 5592; + goto $bb1; +$aa5593: + $p := 5593; + goto $bb1; +$aa5594: + $p := 5594; + goto $bb1; +$aa5595: + $p := 5595; + goto $bb1; +$aa5596: + $p := 5596; + goto $bb1; +$aa5597: + $p := 5597; + goto $bb1; +$aa5598: + $p := 5598; + goto $bb1; +$aa5599: + $p := 5599; + goto $bb1; +$aa5600: + $p := 5600; + goto $bb1; +$aa5601: + $p := 5601; + goto $bb1; +$aa5602: + $p := 5602; + goto $bb1; +$aa5603: + $p := 5603; + goto $bb1; +$aa5604: + $p := 5604; + goto $bb1; +$aa5605: + $p := 5605; + goto $bb1; +$aa5606: + $p := 5606; + goto $bb1; +$aa5607: + $p := 5607; + goto $bb1; +$aa5608: + $p := 5608; + goto $bb1; +$aa5609: + $p := 5609; + goto $bb1; +$aa5610: + $p := 5610; + goto $bb1; +$aa5611: + $p := 5611; + goto $bb1; +$aa5612: + $p := 5612; + goto $bb1; +$aa5613: + $p := 5613; + goto $bb1; +$aa5614: + $p := 5614; + goto $bb1; +$aa5615: + $p := 5615; + goto $bb1; +$aa5616: + $p := 5616; + goto $bb1; +$aa5617: + $p := 5617; + goto $bb1; +$aa5618: + $p := 5618; + goto $bb1; +$aa5619: + $p := 5619; + goto $bb1; +$aa5620: + $p := 5620; + goto $bb1; +$aa5621: + $p := 5621; + goto $bb1; +$aa5622: + $p := 5622; + goto $bb1; +$aa5623: + $p := 5623; + goto $bb1; +$aa5624: + $p := 5624; + goto $bb1; +$aa5625: + $p := 5625; + goto $bb1; +$aa5626: + $p := 5626; + goto $bb1; +$aa5627: + $p := 5627; + goto $bb1; +$aa5628: + $p := 5628; + goto $bb1; +$aa5629: + $p := 5629; + goto $bb1; +$aa5630: + $p := 5630; + goto $bb1; +$aa5631: + $p := 5631; + goto $bb1; +$aa5632: + $p := 5632; + goto $bb1; +$aa5633: + $p := 5633; + goto $bb1; +$aa5634: + $p := 5634; + goto $bb1; +$aa5635: + $p := 5635; + goto $bb1; +$aa5636: + $p := 5636; + goto $bb1; +$aa5637: + $p := 5637; + goto $bb1; +$aa5638: + $p := 5638; + goto $bb1; +$aa5639: + $p := 5639; + goto $bb1; +$aa5640: + $p := 5640; + goto $bb1; +$aa5641: + $p := 5641; + goto $bb1; +$aa5642: + $p := 5642; + goto $bb1; +$aa5643: + $p := 5643; + goto $bb1; +$aa5644: + $p := 5644; + goto $bb1; +$aa5645: + $p := 5645; + goto $bb1; +$aa5646: + $p := 5646; + goto $bb1; +$aa5647: + $p := 5647; + goto $bb1; +$aa5648: + $p := 5648; + goto $bb1; +$aa5649: + $p := 5649; + goto $bb1; +$aa5650: + $p := 5650; + goto $bb1; +$aa5651: + $p := 5651; + goto $bb1; +$aa5652: + $p := 5652; + goto $bb1; +$aa5653: + $p := 5653; + goto $bb1; +$aa5654: + $p := 5654; + goto $bb1; +$aa5655: + $p := 5655; + goto $bb1; +$aa5656: + $p := 5656; + goto $bb1; +$aa5657: + $p := 5657; + goto $bb1; +$aa5658: + $p := 5658; + goto $bb1; +$aa5659: + $p := 5659; + goto $bb1; +$aa5660: + $p := 5660; + goto $bb1; +$aa5661: + $p := 5661; + goto $bb1; +$aa5662: + $p := 5662; + goto $bb1; +$aa5663: + $p := 5663; + goto $bb1; +$aa5664: + $p := 5664; + goto $bb1; +$aa5665: + $p := 5665; + goto $bb1; +$aa5666: + $p := 5666; + goto $bb1; +$aa5667: + $p := 5667; + goto $bb1; +$aa5668: + $p := 5668; + goto $bb1; +$aa5669: + $p := 5669; + goto $bb1; +$aa5670: + $p := 5670; + goto $bb1; +$aa5671: + $p := 5671; + goto $bb1; +$aa5672: + $p := 5672; + goto $bb1; +$aa5673: + $p := 5673; + goto $bb1; +$aa5674: + $p := 5674; + goto $bb1; +$aa5675: + $p := 5675; + goto $bb1; +$aa5676: + $p := 5676; + goto $bb1; +$aa5677: + $p := 5677; + goto $bb1; +$aa5678: + $p := 5678; + goto $bb1; +$aa5679: + $p := 5679; + goto $bb1; +$aa5680: + $p := 5680; + goto $bb1; +$aa5681: + $p := 5681; + goto $bb1; +$aa5682: + $p := 5682; + goto $bb1; +$aa5683: + $p := 5683; + goto $bb1; +$aa5684: + $p := 5684; + goto $bb1; +$aa5685: + $p := 5685; + goto $bb1; +$aa5686: + $p := 5686; + goto $bb1; +$aa5687: + $p := 5687; + goto $bb1; +$aa5688: + $p := 5688; + goto $bb1; +$aa5689: + $p := 5689; + goto $bb1; +$aa5690: + $p := 5690; + goto $bb1; +$aa5691: + $p := 5691; + goto $bb1; +$aa5692: + $p := 5692; + goto $bb1; +$aa5693: + $p := 5693; + goto $bb1; +$aa5694: + $p := 5694; + goto $bb1; +$aa5695: + $p := 5695; + goto $bb1; +$aa5696: + $p := 5696; + goto $bb1; +$aa5697: + $p := 5697; + goto $bb1; +$aa5698: + $p := 5698; + goto $bb1; +$aa5699: + $p := 5699; + goto $bb1; +$aa5700: + $p := 5700; + goto $bb1; +$aa5701: + $p := 5701; + goto $bb1; +$aa5702: + $p := 5702; + goto $bb1; +$aa5703: + $p := 5703; + goto $bb1; +$aa5704: + $p := 5704; + goto $bb1; +$aa5705: + $p := 5705; + goto $bb1; +$aa5706: + $p := 5706; + goto $bb1; +$aa5707: + $p := 5707; + goto $bb1; +$aa5708: + $p := 5708; + goto $bb1; +$aa5709: + $p := 5709; + goto $bb1; +$aa5710: + $p := 5710; + goto $bb1; +$aa5711: + $p := 5711; + goto $bb1; +$aa5712: + $p := 5712; + goto $bb1; +$aa5713: + $p := 5713; + goto $bb1; +$aa5714: + $p := 5714; + goto $bb1; +$aa5715: + $p := 5715; + goto $bb1; +$aa5716: + $p := 5716; + goto $bb1; +$aa5717: + $p := 5717; + goto $bb1; +$aa5718: + $p := 5718; + goto $bb1; +$aa5719: + $p := 5719; + goto $bb1; +$aa5720: + $p := 5720; + goto $bb1; +$aa5721: + $p := 5721; + goto $bb1; +$aa5722: + $p := 5722; + goto $bb1; +$aa5723: + $p := 5723; + goto $bb1; +$aa5724: + $p := 5724; + goto $bb1; +$aa5725: + $p := 5725; + goto $bb1; +$aa5726: + $p := 5726; + goto $bb1; +$aa5727: + $p := 5727; + goto $bb1; +$aa5728: + $p := 5728; + goto $bb1; +$aa5729: + $p := 5729; + goto $bb1; +$aa5730: + $p := 5730; + goto $bb1; +$aa5731: + $p := 5731; + goto $bb1; +$aa5732: + $p := 5732; + goto $bb1; +$aa5733: + $p := 5733; + goto $bb1; +$aa5734: + $p := 5734; + goto $bb1; +$aa5735: + $p := 5735; + goto $bb1; +$aa5736: + $p := 5736; + goto $bb1; +$aa5737: + $p := 5737; + goto $bb1; +$aa5738: + $p := 5738; + goto $bb1; +$aa5739: + $p := 5739; + goto $bb1; +$aa5740: + $p := 5740; + goto $bb1; +$aa5741: + $p := 5741; + goto $bb1; +$aa5742: + $p := 5742; + goto $bb1; +$aa5743: + $p := 5743; + goto $bb1; +$aa5744: + $p := 5744; + goto $bb1; +$aa5745: + $p := 5745; + goto $bb1; +$aa5746: + $p := 5746; + goto $bb1; +$aa5747: + $p := 5747; + goto $bb1; +$aa5748: + $p := 5748; + goto $bb1; +$aa5749: + $p := 5749; + goto $bb1; +$aa5750: + $p := 5750; + goto $bb1; +$aa5751: + $p := 5751; + goto $bb1; +$aa5752: + $p := 5752; + goto $bb1; +$aa5753: + $p := 5753; + goto $bb1; +$aa5754: + $p := 5754; + goto $bb1; +$aa5755: + $p := 5755; + goto $bb1; +$aa5756: + $p := 5756; + goto $bb1; +$aa5757: + $p := 5757; + goto $bb1; +$aa5758: + $p := 5758; + goto $bb1; +$aa5759: + $p := 5759; + goto $bb1; +$aa5760: + $p := 5760; + goto $bb1; +$aa5761: + $p := 5761; + goto $bb1; +$aa5762: + $p := 5762; + goto $bb1; +$aa5763: + $p := 5763; + goto $bb1; +$aa5764: + $p := 5764; + goto $bb1; +$aa5765: + $p := 5765; + goto $bb1; +$aa5766: + $p := 5766; + goto $bb1; +$aa5767: + $p := 5767; + goto $bb1; +$aa5768: + $p := 5768; + goto $bb1; +$aa5769: + $p := 5769; + goto $bb1; +$aa5770: + $p := 5770; + goto $bb1; +$aa5771: + $p := 5771; + goto $bb1; +$aa5772: + $p := 5772; + goto $bb1; +$aa5773: + $p := 5773; + goto $bb1; +$aa5774: + $p := 5774; + goto $bb1; +$aa5775: + $p := 5775; + goto $bb1; +$aa5776: + $p := 5776; + goto $bb1; +$aa5777: + $p := 5777; + goto $bb1; +$aa5778: + $p := 5778; + goto $bb1; +$aa5779: + $p := 5779; + goto $bb1; +$aa5780: + $p := 5780; + goto $bb1; +$aa5781: + $p := 5781; + goto $bb1; +$aa5782: + $p := 5782; + goto $bb1; +$aa5783: + $p := 5783; + goto $bb1; +$aa5784: + $p := 5784; + goto $bb1; +$aa5785: + $p := 5785; + goto $bb1; +$aa5786: + $p := 5786; + goto $bb1; +$aa5787: + $p := 5787; + goto $bb1; +$aa5788: + $p := 5788; + goto $bb1; +$aa5789: + $p := 5789; + goto $bb1; +$aa5790: + $p := 5790; + goto $bb1; +$aa5791: + $p := 5791; + goto $bb1; +$aa5792: + $p := 5792; + goto $bb1; +$aa5793: + $p := 5793; + goto $bb1; +$aa5794: + $p := 5794; + goto $bb1; +$aa5795: + $p := 5795; + goto $bb1; +$aa5796: + $p := 5796; + goto $bb1; +$aa5797: + $p := 5797; + goto $bb1; +$aa5798: + $p := 5798; + goto $bb1; +$aa5799: + $p := 5799; + goto $bb1; +$aa5800: + $p := 5800; + goto $bb1; +$aa5801: + $p := 5801; + goto $bb1; +$aa5802: + $p := 5802; + goto $bb1; +$aa5803: + $p := 5803; + goto $bb1; +$aa5804: + $p := 5804; + goto $bb1; +$aa5805: + $p := 5805; + goto $bb1; +$aa5806: + $p := 5806; + goto $bb1; +$aa5807: + $p := 5807; + goto $bb1; +$aa5808: + $p := 5808; + goto $bb1; +$aa5809: + $p := 5809; + goto $bb1; +$aa5810: + $p := 5810; + goto $bb1; +$aa5811: + $p := 5811; + goto $bb1; +$aa5812: + $p := 5812; + goto $bb1; +$aa5813: + $p := 5813; + goto $bb1; +$aa5814: + $p := 5814; + goto $bb1; +$aa5815: + $p := 5815; + goto $bb1; +$aa5816: + $p := 5816; + goto $bb1; +$aa5817: + $p := 5817; + goto $bb1; +$aa5818: + $p := 5818; + goto $bb1; +$aa5819: + $p := 5819; + goto $bb1; +$aa5820: + $p := 5820; + goto $bb1; +$aa5821: + $p := 5821; + goto $bb1; +$aa5822: + $p := 5822; + goto $bb1; +$aa5823: + $p := 5823; + goto $bb1; +$aa5824: + $p := 5824; + goto $bb1; +$aa5825: + $p := 5825; + goto $bb1; +$aa5826: + $p := 5826; + goto $bb1; +$aa5827: + $p := 5827; + goto $bb1; +$aa5828: + $p := 5828; + goto $bb1; +$aa5829: + $p := 5829; + goto $bb1; +$aa5830: + $p := 5830; + goto $bb1; +$aa5831: + $p := 5831; + goto $bb1; +$aa5832: + $p := 5832; + goto $bb1; +$aa5833: + $p := 5833; + goto $bb1; +$aa5834: + $p := 5834; + goto $bb1; +$aa5835: + $p := 5835; + goto $bb1; +$aa5836: + $p := 5836; + goto $bb1; +$aa5837: + $p := 5837; + goto $bb1; +$aa5838: + $p := 5838; + goto $bb1; +$aa5839: + $p := 5839; + goto $bb1; +$aa5840: + $p := 5840; + goto $bb1; +$aa5841: + $p := 5841; + goto $bb1; +$aa5842: + $p := 5842; + goto $bb1; +$aa5843: + $p := 5843; + goto $bb1; +$aa5844: + $p := 5844; + goto $bb1; +$aa5845: + $p := 5845; + goto $bb1; +$aa5846: + $p := 5846; + goto $bb1; +$aa5847: + $p := 5847; + goto $bb1; +$aa5848: + $p := 5848; + goto $bb1; +$aa5849: + $p := 5849; + goto $bb1; +$aa5850: + $p := 5850; + goto $bb1; +$aa5851: + $p := 5851; + goto $bb1; +$aa5852: + $p := 5852; + goto $bb1; +$aa5853: + $p := 5853; + goto $bb1; +$aa5854: + $p := 5854; + goto $bb1; +$aa5855: + $p := 5855; + goto $bb1; +$aa5856: + $p := 5856; + goto $bb1; +$aa5857: + $p := 5857; + goto $bb1; +$aa5858: + $p := 5858; + goto $bb1; +$aa5859: + $p := 5859; + goto $bb1; +$aa5860: + $p := 5860; + goto $bb1; +$aa5861: + $p := 5861; + goto $bb1; +$aa5862: + $p := 5862; + goto $bb1; +$aa5863: + $p := 5863; + goto $bb1; +$aa5864: + $p := 5864; + goto $bb1; +$aa5865: + $p := 5865; + goto $bb1; +$aa5866: + $p := 5866; + goto $bb1; +$aa5867: + $p := 5867; + goto $bb1; +$aa5868: + $p := 5868; + goto $bb1; +$aa5869: + $p := 5869; + goto $bb1; +$aa5870: + $p := 5870; + goto $bb1; +$aa5871: + $p := 5871; + goto $bb1; +$aa5872: + $p := 5872; + goto $bb1; +$aa5873: + $p := 5873; + goto $bb1; +$aa5874: + $p := 5874; + goto $bb1; +$aa5875: + $p := 5875; + goto $bb1; +$aa5876: + $p := 5876; + goto $bb1; +$aa5877: + $p := 5877; + goto $bb1; +$aa5878: + $p := 5878; + goto $bb1; +$aa5879: + $p := 5879; + goto $bb1; +$aa5880: + $p := 5880; + goto $bb1; +$aa5881: + $p := 5881; + goto $bb1; +$aa5882: + $p := 5882; + goto $bb1; +$aa5883: + $p := 5883; + goto $bb1; +$aa5884: + $p := 5884; + goto $bb1; +$aa5885: + $p := 5885; + goto $bb1; +$aa5886: + $p := 5886; + goto $bb1; +$aa5887: + $p := 5887; + goto $bb1; +$aa5888: + $p := 5888; + goto $bb1; +$aa5889: + $p := 5889; + goto $bb1; +$aa5890: + $p := 5890; + goto $bb1; +$aa5891: + $p := 5891; + goto $bb1; +$aa5892: + $p := 5892; + goto $bb1; +$aa5893: + $p := 5893; + goto $bb1; +$aa5894: + $p := 5894; + goto $bb1; +$aa5895: + $p := 5895; + goto $bb1; +$aa5896: + $p := 5896; + goto $bb1; +$aa5897: + $p := 5897; + goto $bb1; +$aa5898: + $p := 5898; + goto $bb1; +$aa5899: + $p := 5899; + goto $bb1; +$aa5900: + $p := 5900; + goto $bb1; +$aa5901: + $p := 5901; + goto $bb1; +$aa5902: + $p := 5902; + goto $bb1; +$aa5903: + $p := 5903; + goto $bb1; +$aa5904: + $p := 5904; + goto $bb1; +$aa5905: + $p := 5905; + goto $bb1; +$aa5906: + $p := 5906; + goto $bb1; +$aa5907: + $p := 5907; + goto $bb1; +$aa5908: + $p := 5908; + goto $bb1; +$aa5909: + $p := 5909; + goto $bb1; +$aa5910: + $p := 5910; + goto $bb1; +$aa5911: + $p := 5911; + goto $bb1; +$aa5912: + $p := 5912; + goto $bb1; +$aa5913: + $p := 5913; + goto $bb1; +$aa5914: + $p := 5914; + goto $bb1; +$aa5915: + $p := 5915; + goto $bb1; +$aa5916: + $p := 5916; + goto $bb1; +$aa5917: + $p := 5917; + goto $bb1; +$aa5918: + $p := 5918; + goto $bb1; +$aa5919: + $p := 5919; + goto $bb1; +$aa5920: + $p := 5920; + goto $bb1; +$aa5921: + $p := 5921; + goto $bb1; +$aa5922: + $p := 5922; + goto $bb1; +$aa5923: + $p := 5923; + goto $bb1; +$aa5924: + $p := 5924; + goto $bb1; +$aa5925: + $p := 5925; + goto $bb1; +$aa5926: + $p := 5926; + goto $bb1; +$aa5927: + $p := 5927; + goto $bb1; +$aa5928: + $p := 5928; + goto $bb1; +$aa5929: + $p := 5929; + goto $bb1; +$aa5930: + $p := 5930; + goto $bb1; +$aa5931: + $p := 5931; + goto $bb1; +$aa5932: + $p := 5932; + goto $bb1; +$aa5933: + $p := 5933; + goto $bb1; +$aa5934: + $p := 5934; + goto $bb1; +$aa5935: + $p := 5935; + goto $bb1; +$aa5936: + $p := 5936; + goto $bb1; +$aa5937: + $p := 5937; + goto $bb1; +$aa5938: + $p := 5938; + goto $bb1; +$aa5939: + $p := 5939; + goto $bb1; +$aa5940: + $p := 5940; + goto $bb1; +$aa5941: + $p := 5941; + goto $bb1; +$aa5942: + $p := 5942; + goto $bb1; +$aa5943: + $p := 5943; + goto $bb1; +$aa5944: + $p := 5944; + goto $bb1; +$aa5945: + $p := 5945; + goto $bb1; +$aa5946: + $p := 5946; + goto $bb1; +$aa5947: + $p := 5947; + goto $bb1; +$aa5948: + $p := 5948; + goto $bb1; +$aa5949: + $p := 5949; + goto $bb1; +$aa5950: + $p := 5950; + goto $bb1; +$aa5951: + $p := 5951; + goto $bb1; +$aa5952: + $p := 5952; + goto $bb1; +$aa5953: + $p := 5953; + goto $bb1; +$aa5954: + $p := 5954; + goto $bb1; +$aa5955: + $p := 5955; + goto $bb1; +$aa5956: + $p := 5956; + goto $bb1; +$aa5957: + $p := 5957; + goto $bb1; +$aa5958: + $p := 5958; + goto $bb1; +$aa5959: + $p := 5959; + goto $bb1; +$aa5960: + $p := 5960; + goto $bb1; +$aa5961: + $p := 5961; + goto $bb1; +$aa5962: + $p := 5962; + goto $bb1; +$aa5963: + $p := 5963; + goto $bb1; +$aa5964: + $p := 5964; + goto $bb1; +$aa5965: + $p := 5965; + goto $bb1; +$aa5966: + $p := 5966; + goto $bb1; +$aa5967: + $p := 5967; + goto $bb1; +$aa5968: + $p := 5968; + goto $bb1; +$aa5969: + $p := 5969; + goto $bb1; +$aa5970: + $p := 5970; + goto $bb1; +$aa5971: + $p := 5971; + goto $bb1; +$aa5972: + $p := 5972; + goto $bb1; +$aa5973: + $p := 5973; + goto $bb1; +$aa5974: + $p := 5974; + goto $bb1; +$aa5975: + $p := 5975; + goto $bb1; +$aa5976: + $p := 5976; + goto $bb1; +$aa5977: + $p := 5977; + goto $bb1; +$aa5978: + $p := 5978; + goto $bb1; +$aa5979: + $p := 5979; + goto $bb1; +$aa5980: + $p := 5980; + goto $bb1; +$aa5981: + $p := 5981; + goto $bb1; +$aa5982: + $p := 5982; + goto $bb1; +$aa5983: + $p := 5983; + goto $bb1; +$aa5984: + $p := 5984; + goto $bb1; +$aa5985: + $p := 5985; + goto $bb1; +$aa5986: + $p := 5986; + goto $bb1; +$aa5987: + $p := 5987; + goto $bb1; +$aa5988: + $p := 5988; + goto $bb1; +$aa5989: + $p := 5989; + goto $bb1; +$aa5990: + $p := 5990; + goto $bb1; +$aa5991: + $p := 5991; + goto $bb1; +$aa5992: + $p := 5992; + goto $bb1; +$aa5993: + $p := 5993; + goto $bb1; +$aa5994: + $p := 5994; + goto $bb1; +$aa5995: + $p := 5995; + goto $bb1; +$aa5996: + $p := 5996; + goto $bb1; +$aa5997: + $p := 5997; + goto $bb1; +$aa5998: + $p := 5998; + goto $bb1; +$aa5999: + $p := 5999; + goto $bb1; +$aa6000: + $p := 6000; + goto $bb1; +$aa6001: + $p := 6001; + goto $bb1; +$aa6002: + $p := 6002; + goto $bb1; +$aa6003: + $p := 6003; + goto $bb1; +$aa6004: + $p := 6004; + goto $bb1; +$aa6005: + $p := 6005; + goto $bb1; +$aa6006: + $p := 6006; + goto $bb1; +$aa6007: + $p := 6007; + goto $bb1; +$aa6008: + $p := 6008; + goto $bb1; +$aa6009: + $p := 6009; + goto $bb1; +$aa6010: + $p := 6010; + goto $bb1; +$aa6011: + $p := 6011; + goto $bb1; +$aa6012: + $p := 6012; + goto $bb1; +$aa6013: + $p := 6013; + goto $bb1; +$aa6014: + $p := 6014; + goto $bb1; +$aa6015: + $p := 6015; + goto $bb1; +$aa6016: + $p := 6016; + goto $bb1; +$aa6017: + $p := 6017; + goto $bb1; +$aa6018: + $p := 6018; + goto $bb1; +$aa6019: + $p := 6019; + goto $bb1; +$aa6020: + $p := 6020; + goto $bb1; +$aa6021: + $p := 6021; + goto $bb1; +$aa6022: + $p := 6022; + goto $bb1; +$aa6023: + $p := 6023; + goto $bb1; +$aa6024: + $p := 6024; + goto $bb1; +$aa6025: + $p := 6025; + goto $bb1; +$aa6026: + $p := 6026; + goto $bb1; +$aa6027: + $p := 6027; + goto $bb1; +$aa6028: + $p := 6028; + goto $bb1; +$aa6029: + $p := 6029; + goto $bb1; +$aa6030: + $p := 6030; + goto $bb1; +$aa6031: + $p := 6031; + goto $bb1; +$aa6032: + $p := 6032; + goto $bb1; +$aa6033: + $p := 6033; + goto $bb1; +$aa6034: + $p := 6034; + goto $bb1; +$aa6035: + $p := 6035; + goto $bb1; +$aa6036: + $p := 6036; + goto $bb1; +$aa6037: + $p := 6037; + goto $bb1; +$aa6038: + $p := 6038; + goto $bb1; +$aa6039: + $p := 6039; + goto $bb1; +$aa6040: + $p := 6040; + goto $bb1; +$aa6041: + $p := 6041; + goto $bb1; +$aa6042: + $p := 6042; + goto $bb1; +$aa6043: + $p := 6043; + goto $bb1; +$aa6044: + $p := 6044; + goto $bb1; +$aa6045: + $p := 6045; + goto $bb1; +$aa6046: + $p := 6046; + goto $bb1; +$aa6047: + $p := 6047; + goto $bb1; +$aa6048: + $p := 6048; + goto $bb1; +$aa6049: + $p := 6049; + goto $bb1; +$aa6050: + $p := 6050; + goto $bb1; +$aa6051: + $p := 6051; + goto $bb1; +$aa6052: + $p := 6052; + goto $bb1; +$aa6053: + $p := 6053; + goto $bb1; +$aa6054: + $p := 6054; + goto $bb1; +$aa6055: + $p := 6055; + goto $bb1; +$aa6056: + $p := 6056; + goto $bb1; +$aa6057: + $p := 6057; + goto $bb1; +$aa6058: + $p := 6058; + goto $bb1; +$aa6059: + $p := 6059; + goto $bb1; +$aa6060: + $p := 6060; + goto $bb1; +$aa6061: + $p := 6061; + goto $bb1; +$aa6062: + $p := 6062; + goto $bb1; +$aa6063: + $p := 6063; + goto $bb1; +$aa6064: + $p := 6064; + goto $bb1; +$aa6065: + $p := 6065; + goto $bb1; +$aa6066: + $p := 6066; + goto $bb1; +$aa6067: + $p := 6067; + goto $bb1; +$aa6068: + $p := 6068; + goto $bb1; +$aa6069: + $p := 6069; + goto $bb1; +$aa6070: + $p := 6070; + goto $bb1; +$aa6071: + $p := 6071; + goto $bb1; +$aa6072: + $p := 6072; + goto $bb1; +$aa6073: + $p := 6073; + goto $bb1; +$aa6074: + $p := 6074; + goto $bb1; +$aa6075: + $p := 6075; + goto $bb1; +$aa6076: + $p := 6076; + goto $bb1; +$aa6077: + $p := 6077; + goto $bb1; +$aa6078: + $p := 6078; + goto $bb1; +$aa6079: + $p := 6079; + goto $bb1; +$aa6080: + $p := 6080; + goto $bb1; +$aa6081: + $p := 6081; + goto $bb1; +$aa6082: + $p := 6082; + goto $bb1; +$aa6083: + $p := 6083; + goto $bb1; +$aa6084: + $p := 6084; + goto $bb1; +$aa6085: + $p := 6085; + goto $bb1; +$aa6086: + $p := 6086; + goto $bb1; +$aa6087: + $p := 6087; + goto $bb1; +$aa6088: + $p := 6088; + goto $bb1; +$aa6089: + $p := 6089; + goto $bb1; +$aa6090: + $p := 6090; + goto $bb1; +$aa6091: + $p := 6091; + goto $bb1; +$aa6092: + $p := 6092; + goto $bb1; +$aa6093: + $p := 6093; + goto $bb1; +$aa6094: + $p := 6094; + goto $bb1; +$aa6095: + $p := 6095; + goto $bb1; +$aa6096: + $p := 6096; + goto $bb1; +$aa6097: + $p := 6097; + goto $bb1; +$aa6098: + $p := 6098; + goto $bb1; +$aa6099: + $p := 6099; + goto $bb1; +$aa6100: + $p := 6100; + goto $bb1; +$aa6101: + $p := 6101; + goto $bb1; +$aa6102: + $p := 6102; + goto $bb1; +$aa6103: + $p := 6103; + goto $bb1; +$aa6104: + $p := 6104; + goto $bb1; +$aa6105: + $p := 6105; + goto $bb1; +$aa6106: + $p := 6106; + goto $bb1; +$aa6107: + $p := 6107; + goto $bb1; +$aa6108: + $p := 6108; + goto $bb1; +$aa6109: + $p := 6109; + goto $bb1; +$aa6110: + $p := 6110; + goto $bb1; +$aa6111: + $p := 6111; + goto $bb1; +$aa6112: + $p := 6112; + goto $bb1; +$aa6113: + $p := 6113; + goto $bb1; +$aa6114: + $p := 6114; + goto $bb1; +$aa6115: + $p := 6115; + goto $bb1; +$aa6116: + $p := 6116; + goto $bb1; +$aa6117: + $p := 6117; + goto $bb1; +$aa6118: + $p := 6118; + goto $bb1; +$aa6119: + $p := 6119; + goto $bb1; +$aa6120: + $p := 6120; + goto $bb1; +$aa6121: + $p := 6121; + goto $bb1; +$aa6122: + $p := 6122; + goto $bb1; +$aa6123: + $p := 6123; + goto $bb1; +$aa6124: + $p := 6124; + goto $bb1; +$aa6125: + $p := 6125; + goto $bb1; +$aa6126: + $p := 6126; + goto $bb1; +$aa6127: + $p := 6127; + goto $bb1; +$aa6128: + $p := 6128; + goto $bb1; +$aa6129: + $p := 6129; + goto $bb1; +$aa6130: + $p := 6130; + goto $bb1; +$aa6131: + $p := 6131; + goto $bb1; +$aa6132: + $p := 6132; + goto $bb1; +$aa6133: + $p := 6133; + goto $bb1; +$aa6134: + $p := 6134; + goto $bb1; +$aa6135: + $p := 6135; + goto $bb1; +$aa6136: + $p := 6136; + goto $bb1; +$aa6137: + $p := 6137; + goto $bb1; +$aa6138: + $p := 6138; + goto $bb1; +$aa6139: + $p := 6139; + goto $bb1; +$aa6140: + $p := 6140; + goto $bb1; +$aa6141: + $p := 6141; + goto $bb1; +$aa6142: + $p := 6142; + goto $bb1; +$aa6143: + $p := 6143; + goto $bb1; +$aa6144: + $p := 6144; + goto $bb1; +$aa6145: + $p := 6145; + goto $bb1; +$aa6146: + $p := 6146; + goto $bb1; +$aa6147: + $p := 6147; + goto $bb1; +$aa6148: + $p := 6148; + goto $bb1; +$aa6149: + $p := 6149; + goto $bb1; +$aa6150: + $p := 6150; + goto $bb1; +$aa6151: + $p := 6151; + goto $bb1; +$aa6152: + $p := 6152; + goto $bb1; +$aa6153: + $p := 6153; + goto $bb1; +$aa6154: + $p := 6154; + goto $bb1; +$aa6155: + $p := 6155; + goto $bb1; +$aa6156: + $p := 6156; + goto $bb1; +$aa6157: + $p := 6157; + goto $bb1; +$aa6158: + $p := 6158; + goto $bb1; +$aa6159: + $p := 6159; + goto $bb1; +$aa6160: + $p := 6160; + goto $bb1; +$aa6161: + $p := 6161; + goto $bb1; +$aa6162: + $p := 6162; + goto $bb1; +$aa6163: + $p := 6163; + goto $bb1; +$aa6164: + $p := 6164; + goto $bb1; +$aa6165: + $p := 6165; + goto $bb1; +$aa6166: + $p := 6166; + goto $bb1; +$aa6167: + $p := 6167; + goto $bb1; +$aa6168: + $p := 6168; + goto $bb1; +$aa6169: + $p := 6169; + goto $bb1; +$aa6170: + $p := 6170; + goto $bb1; +$aa6171: + $p := 6171; + goto $bb1; +$aa6172: + $p := 6172; + goto $bb1; +$aa6173: + $p := 6173; + goto $bb1; +$aa6174: + $p := 6174; + goto $bb1; +$aa6175: + $p := 6175; + goto $bb1; +$aa6176: + $p := 6176; + goto $bb1; +$aa6177: + $p := 6177; + goto $bb1; +$aa6178: + $p := 6178; + goto $bb1; +$aa6179: + $p := 6179; + goto $bb1; +$aa6180: + $p := 6180; + goto $bb1; +$aa6181: + $p := 6181; + goto $bb1; +$aa6182: + $p := 6182; + goto $bb1; +$aa6183: + $p := 6183; + goto $bb1; +$aa6184: + $p := 6184; + goto $bb1; +$aa6185: + $p := 6185; + goto $bb1; +$aa6186: + $p := 6186; + goto $bb1; +$aa6187: + $p := 6187; + goto $bb1; +$aa6188: + $p := 6188; + goto $bb1; +$aa6189: + $p := 6189; + goto $bb1; +$aa6190: + $p := 6190; + goto $bb1; +$aa6191: + $p := 6191; + goto $bb1; +$aa6192: + $p := 6192; + goto $bb1; +$aa6193: + $p := 6193; + goto $bb1; +$aa6194: + $p := 6194; + goto $bb1; +$aa6195: + $p := 6195; + goto $bb1; +$aa6196: + $p := 6196; + goto $bb1; +$aa6197: + $p := 6197; + goto $bb1; +$aa6198: + $p := 6198; + goto $bb1; +$aa6199: + $p := 6199; + goto $bb1; +$aa6200: + $p := 6200; + goto $bb1; +$aa6201: + $p := 6201; + goto $bb1; +$aa6202: + $p := 6202; + goto $bb1; +$aa6203: + $p := 6203; + goto $bb1; +$aa6204: + $p := 6204; + goto $bb1; +$aa6205: + $p := 6205; + goto $bb1; +$aa6206: + $p := 6206; + goto $bb1; +$aa6207: + $p := 6207; + goto $bb1; +$aa6208: + $p := 6208; + goto $bb1; +$aa6209: + $p := 6209; + goto $bb1; +$aa6210: + $p := 6210; + goto $bb1; +$aa6211: + $p := 6211; + goto $bb1; +$aa6212: + $p := 6212; + goto $bb1; +$aa6213: + $p := 6213; + goto $bb1; +$aa6214: + $p := 6214; + goto $bb1; +$aa6215: + $p := 6215; + goto $bb1; +$aa6216: + $p := 6216; + goto $bb1; +$aa6217: + $p := 6217; + goto $bb1; +$aa6218: + $p := 6218; + goto $bb1; +$aa6219: + $p := 6219; + goto $bb1; +$aa6220: + $p := 6220; + goto $bb1; +$aa6221: + $p := 6221; + goto $bb1; +$aa6222: + $p := 6222; + goto $bb1; +$aa6223: + $p := 6223; + goto $bb1; +$aa6224: + $p := 6224; + goto $bb1; +$aa6225: + $p := 6225; + goto $bb1; +$aa6226: + $p := 6226; + goto $bb1; +$aa6227: + $p := 6227; + goto $bb1; +$aa6228: + $p := 6228; + goto $bb1; +$aa6229: + $p := 6229; + goto $bb1; +$aa6230: + $p := 6230; + goto $bb1; +$aa6231: + $p := 6231; + goto $bb1; +$aa6232: + $p := 6232; + goto $bb1; +$aa6233: + $p := 6233; + goto $bb1; +$aa6234: + $p := 6234; + goto $bb1; +$aa6235: + $p := 6235; + goto $bb1; +$aa6236: + $p := 6236; + goto $bb1; +$aa6237: + $p := 6237; + goto $bb1; +$aa6238: + $p := 6238; + goto $bb1; +$aa6239: + $p := 6239; + goto $bb1; +$aa6240: + $p := 6240; + goto $bb1; +$aa6241: + $p := 6241; + goto $bb1; +$aa6242: + $p := 6242; + goto $bb1; +$aa6243: + $p := 6243; + goto $bb1; +$aa6244: + $p := 6244; + goto $bb1; +$aa6245: + $p := 6245; + goto $bb1; +$aa6246: + $p := 6246; + goto $bb1; +$aa6247: + $p := 6247; + goto $bb1; +$aa6248: + $p := 6248; + goto $bb1; +$aa6249: + $p := 6249; + goto $bb1; +$aa6250: + $p := 6250; + goto $bb1; +$aa6251: + $p := 6251; + goto $bb1; +$aa6252: + $p := 6252; + goto $bb1; +$aa6253: + $p := 6253; + goto $bb1; +$aa6254: + $p := 6254; + goto $bb1; +$aa6255: + $p := 6255; + goto $bb1; +$aa6256: + $p := 6256; + goto $bb1; +$aa6257: + $p := 6257; + goto $bb1; +$aa6258: + $p := 6258; + goto $bb1; +$aa6259: + $p := 6259; + goto $bb1; +$aa6260: + $p := 6260; + goto $bb1; +$aa6261: + $p := 6261; + goto $bb1; +$aa6262: + $p := 6262; + goto $bb1; +$aa6263: + $p := 6263; + goto $bb1; +$aa6264: + $p := 6264; + goto $bb1; +$aa6265: + $p := 6265; + goto $bb1; +$aa6266: + $p := 6266; + goto $bb1; +$aa6267: + $p := 6267; + goto $bb1; +$aa6268: + $p := 6268; + goto $bb1; +$aa6269: + $p := 6269; + goto $bb1; +$aa6270: + $p := 6270; + goto $bb1; +$aa6271: + $p := 6271; + goto $bb1; +$aa6272: + $p := 6272; + goto $bb1; +$aa6273: + $p := 6273; + goto $bb1; +$aa6274: + $p := 6274; + goto $bb1; +$aa6275: + $p := 6275; + goto $bb1; +$aa6276: + $p := 6276; + goto $bb1; +$aa6277: + $p := 6277; + goto $bb1; +$aa6278: + $p := 6278; + goto $bb1; +$aa6279: + $p := 6279; + goto $bb1; +$aa6280: + $p := 6280; + goto $bb1; +$aa6281: + $p := 6281; + goto $bb1; +$aa6282: + $p := 6282; + goto $bb1; +$aa6283: + $p := 6283; + goto $bb1; +$aa6284: + $p := 6284; + goto $bb1; +$aa6285: + $p := 6285; + goto $bb1; +$aa6286: + $p := 6286; + goto $bb1; +$aa6287: + $p := 6287; + goto $bb1; +$aa6288: + $p := 6288; + goto $bb1; +$aa6289: + $p := 6289; + goto $bb1; +$aa6290: + $p := 6290; + goto $bb1; +$aa6291: + $p := 6291; + goto $bb1; +$aa6292: + $p := 6292; + goto $bb1; +$aa6293: + $p := 6293; + goto $bb1; +$aa6294: + $p := 6294; + goto $bb1; +$aa6295: + $p := 6295; + goto $bb1; +$aa6296: + $p := 6296; + goto $bb1; +$aa6297: + $p := 6297; + goto $bb1; +$aa6298: + $p := 6298; + goto $bb1; +$aa6299: + $p := 6299; + goto $bb1; +$aa6300: + $p := 6300; + goto $bb1; +$aa6301: + $p := 6301; + goto $bb1; +$aa6302: + $p := 6302; + goto $bb1; +$aa6303: + $p := 6303; + goto $bb1; +$aa6304: + $p := 6304; + goto $bb1; +$aa6305: + $p := 6305; + goto $bb1; +$aa6306: + $p := 6306; + goto $bb1; +$aa6307: + $p := 6307; + goto $bb1; +$aa6308: + $p := 6308; + goto $bb1; +$aa6309: + $p := 6309; + goto $bb1; +$aa6310: + $p := 6310; + goto $bb1; +$aa6311: + $p := 6311; + goto $bb1; +$aa6312: + $p := 6312; + goto $bb1; +$aa6313: + $p := 6313; + goto $bb1; +$aa6314: + $p := 6314; + goto $bb1; +$aa6315: + $p := 6315; + goto $bb1; +$aa6316: + $p := 6316; + goto $bb1; +$aa6317: + $p := 6317; + goto $bb1; +$aa6318: + $p := 6318; + goto $bb1; +$aa6319: + $p := 6319; + goto $bb1; +$aa6320: + $p := 6320; + goto $bb1; +$aa6321: + $p := 6321; + goto $bb1; +$aa6322: + $p := 6322; + goto $bb1; +$aa6323: + $p := 6323; + goto $bb1; +$aa6324: + $p := 6324; + goto $bb1; +$aa6325: + $p := 6325; + goto $bb1; +$aa6326: + $p := 6326; + goto $bb1; +$aa6327: + $p := 6327; + goto $bb1; +$aa6328: + $p := 6328; + goto $bb1; +$aa6329: + $p := 6329; + goto $bb1; +$aa6330: + $p := 6330; + goto $bb1; +$aa6331: + $p := 6331; + goto $bb1; +$aa6332: + $p := 6332; + goto $bb1; +$aa6333: + $p := 6333; + goto $bb1; +$aa6334: + $p := 6334; + goto $bb1; +$aa6335: + $p := 6335; + goto $bb1; +$aa6336: + $p := 6336; + goto $bb1; +$aa6337: + $p := 6337; + goto $bb1; +$aa6338: + $p := 6338; + goto $bb1; +$aa6339: + $p := 6339; + goto $bb1; +$aa6340: + $p := 6340; + goto $bb1; +$aa6341: + $p := 6341; + goto $bb1; +$aa6342: + $p := 6342; + goto $bb1; +$aa6343: + $p := 6343; + goto $bb1; +$aa6344: + $p := 6344; + goto $bb1; +$aa6345: + $p := 6345; + goto $bb1; +$aa6346: + $p := 6346; + goto $bb1; +$aa6347: + $p := 6347; + goto $bb1; +$aa6348: + $p := 6348; + goto $bb1; +$aa6349: + $p := 6349; + goto $bb1; +$aa6350: + $p := 6350; + goto $bb1; +$aa6351: + $p := 6351; + goto $bb1; +$aa6352: + $p := 6352; + goto $bb1; +$aa6353: + $p := 6353; + goto $bb1; +$aa6354: + $p := 6354; + goto $bb1; +$aa6355: + $p := 6355; + goto $bb1; +$aa6356: + $p := 6356; + goto $bb1; +$aa6357: + $p := 6357; + goto $bb1; +$aa6358: + $p := 6358; + goto $bb1; +$aa6359: + $p := 6359; + goto $bb1; +$aa6360: + $p := 6360; + goto $bb1; +$aa6361: + $p := 6361; + goto $bb1; +$aa6362: + $p := 6362; + goto $bb1; +$aa6363: + $p := 6363; + goto $bb1; +$aa6364: + $p := 6364; + goto $bb1; +$aa6365: + $p := 6365; + goto $bb1; +$aa6366: + $p := 6366; + goto $bb1; +$aa6367: + $p := 6367; + goto $bb1; +$aa6368: + $p := 6368; + goto $bb1; +$aa6369: + $p := 6369; + goto $bb1; +$aa6370: + $p := 6370; + goto $bb1; +$aa6371: + $p := 6371; + goto $bb1; +$aa6372: + $p := 6372; + goto $bb1; +$aa6373: + $p := 6373; + goto $bb1; +$aa6374: + $p := 6374; + goto $bb1; +$aa6375: + $p := 6375; + goto $bb1; +$aa6376: + $p := 6376; + goto $bb1; +$aa6377: + $p := 6377; + goto $bb1; +$aa6378: + $p := 6378; + goto $bb1; +$aa6379: + $p := 6379; + goto $bb1; +$aa6380: + $p := 6380; + goto $bb1; +$aa6381: + $p := 6381; + goto $bb1; +$aa6382: + $p := 6382; + goto $bb1; +$aa6383: + $p := 6383; + goto $bb1; +$aa6384: + $p := 6384; + goto $bb1; +$aa6385: + $p := 6385; + goto $bb1; +$aa6386: + $p := 6386; + goto $bb1; +$aa6387: + $p := 6387; + goto $bb1; +$aa6388: + $p := 6388; + goto $bb1; +$aa6389: + $p := 6389; + goto $bb1; +$aa6390: + $p := 6390; + goto $bb1; +$aa6391: + $p := 6391; + goto $bb1; +$aa6392: + $p := 6392; + goto $bb1; +$aa6393: + $p := 6393; + goto $bb1; +$aa6394: + $p := 6394; + goto $bb1; +$aa6395: + $p := 6395; + goto $bb1; +$aa6396: + $p := 6396; + goto $bb1; +$aa6397: + $p := 6397; + goto $bb1; +$aa6398: + $p := 6398; + goto $bb1; +$aa6399: + $p := 6399; + goto $bb1; +$aa6400: + $p := 6400; + goto $bb1; +$aa6401: + $p := 6401; + goto $bb1; +$aa6402: + $p := 6402; + goto $bb1; +$aa6403: + $p := 6403; + goto $bb1; +$aa6404: + $p := 6404; + goto $bb1; +$aa6405: + $p := 6405; + goto $bb1; +$aa6406: + $p := 6406; + goto $bb1; +$aa6407: + $p := 6407; + goto $bb1; +$aa6408: + $p := 6408; + goto $bb1; +$aa6409: + $p := 6409; + goto $bb1; +$aa6410: + $p := 6410; + goto $bb1; +$aa6411: + $p := 6411; + goto $bb1; +$aa6412: + $p := 6412; + goto $bb1; +$aa6413: + $p := 6413; + goto $bb1; +$aa6414: + $p := 6414; + goto $bb1; +$aa6415: + $p := 6415; + goto $bb1; +$aa6416: + $p := 6416; + goto $bb1; +$aa6417: + $p := 6417; + goto $bb1; +$aa6418: + $p := 6418; + goto $bb1; +$aa6419: + $p := 6419; + goto $bb1; +$aa6420: + $p := 6420; + goto $bb1; +$aa6421: + $p := 6421; + goto $bb1; +$aa6422: + $p := 6422; + goto $bb1; +$aa6423: + $p := 6423; + goto $bb1; +$aa6424: + $p := 6424; + goto $bb1; +$aa6425: + $p := 6425; + goto $bb1; +$aa6426: + $p := 6426; + goto $bb1; +$aa6427: + $p := 6427; + goto $bb1; +$aa6428: + $p := 6428; + goto $bb1; +$aa6429: + $p := 6429; + goto $bb1; +$aa6430: + $p := 6430; + goto $bb1; +$aa6431: + $p := 6431; + goto $bb1; +$aa6432: + $p := 6432; + goto $bb1; +$aa6433: + $p := 6433; + goto $bb1; +$aa6434: + $p := 6434; + goto $bb1; +$aa6435: + $p := 6435; + goto $bb1; +$aa6436: + $p := 6436; + goto $bb1; +$aa6437: + $p := 6437; + goto $bb1; +$aa6438: + $p := 6438; + goto $bb1; +$aa6439: + $p := 6439; + goto $bb1; +$aa6440: + $p := 6440; + goto $bb1; +$aa6441: + $p := 6441; + goto $bb1; +$aa6442: + $p := 6442; + goto $bb1; +$aa6443: + $p := 6443; + goto $bb1; +$aa6444: + $p := 6444; + goto $bb1; +$aa6445: + $p := 6445; + goto $bb1; +$aa6446: + $p := 6446; + goto $bb1; +$aa6447: + $p := 6447; + goto $bb1; +$aa6448: + $p := 6448; + goto $bb1; +$aa6449: + $p := 6449; + goto $bb1; +$aa6450: + $p := 6450; + goto $bb1; +$aa6451: + $p := 6451; + goto $bb1; +$aa6452: + $p := 6452; + goto $bb1; +$aa6453: + $p := 6453; + goto $bb1; +$aa6454: + $p := 6454; + goto $bb1; +$aa6455: + $p := 6455; + goto $bb1; +$aa6456: + $p := 6456; + goto $bb1; +$aa6457: + $p := 6457; + goto $bb1; +$aa6458: + $p := 6458; + goto $bb1; +$aa6459: + $p := 6459; + goto $bb1; +$aa6460: + $p := 6460; + goto $bb1; +$aa6461: + $p := 6461; + goto $bb1; +$aa6462: + $p := 6462; + goto $bb1; +$aa6463: + $p := 6463; + goto $bb1; +$aa6464: + $p := 6464; + goto $bb1; +$aa6465: + $p := 6465; + goto $bb1; +$aa6466: + $p := 6466; + goto $bb1; +$aa6467: + $p := 6467; + goto $bb1; +$aa6468: + $p := 6468; + goto $bb1; +$aa6469: + $p := 6469; + goto $bb1; +$aa6470: + $p := 6470; + goto $bb1; +$aa6471: + $p := 6471; + goto $bb1; +$aa6472: + $p := 6472; + goto $bb1; +$aa6473: + $p := 6473; + goto $bb1; +$aa6474: + $p := 6474; + goto $bb1; +$aa6475: + $p := 6475; + goto $bb1; +$aa6476: + $p := 6476; + goto $bb1; +$aa6477: + $p := 6477; + goto $bb1; +$aa6478: + $p := 6478; + goto $bb1; +$aa6479: + $p := 6479; + goto $bb1; +$aa6480: + $p := 6480; + goto $bb1; +$aa6481: + $p := 6481; + goto $bb1; +$aa6482: + $p := 6482; + goto $bb1; +$aa6483: + $p := 6483; + goto $bb1; +$aa6484: + $p := 6484; + goto $bb1; +$aa6485: + $p := 6485; + goto $bb1; +$aa6486: + $p := 6486; + goto $bb1; +$aa6487: + $p := 6487; + goto $bb1; +$aa6488: + $p := 6488; + goto $bb1; +$aa6489: + $p := 6489; + goto $bb1; +$aa6490: + $p := 6490; + goto $bb1; +$aa6491: + $p := 6491; + goto $bb1; +$aa6492: + $p := 6492; + goto $bb1; +$aa6493: + $p := 6493; + goto $bb1; +$aa6494: + $p := 6494; + goto $bb1; +$aa6495: + $p := 6495; + goto $bb1; +$aa6496: + $p := 6496; + goto $bb1; +$aa6497: + $p := 6497; + goto $bb1; +$aa6498: + $p := 6498; + goto $bb1; +$aa6499: + $p := 6499; + goto $bb1; +$aa6500: + $p := 6500; + goto $bb1; +$aa6501: + $p := 6501; + goto $bb1; +$aa6502: + $p := 6502; + goto $bb1; +$aa6503: + $p := 6503; + goto $bb1; +$aa6504: + $p := 6504; + goto $bb1; +$aa6505: + $p := 6505; + goto $bb1; +$aa6506: + $p := 6506; + goto $bb1; +$aa6507: + $p := 6507; + goto $bb1; +$aa6508: + $p := 6508; + goto $bb1; +$aa6509: + $p := 6509; + goto $bb1; +$aa6510: + $p := 6510; + goto $bb1; +$aa6511: + $p := 6511; + goto $bb1; +$aa6512: + $p := 6512; + goto $bb1; +$aa6513: + $p := 6513; + goto $bb1; +$aa6514: + $p := 6514; + goto $bb1; +$aa6515: + $p := 6515; + goto $bb1; +$aa6516: + $p := 6516; + goto $bb1; +$aa6517: + $p := 6517; + goto $bb1; +$aa6518: + $p := 6518; + goto $bb1; +$aa6519: + $p := 6519; + goto $bb1; +$aa6520: + $p := 6520; + goto $bb1; +$aa6521: + $p := 6521; + goto $bb1; +$aa6522: + $p := 6522; + goto $bb1; +$aa6523: + $p := 6523; + goto $bb1; +$aa6524: + $p := 6524; + goto $bb1; +$aa6525: + $p := 6525; + goto $bb1; +$aa6526: + $p := 6526; + goto $bb1; +$aa6527: + $p := 6527; + goto $bb1; +$aa6528: + $p := 6528; + goto $bb1; +$aa6529: + $p := 6529; + goto $bb1; +$aa6530: + $p := 6530; + goto $bb1; +$aa6531: + $p := 6531; + goto $bb1; +$aa6532: + $p := 6532; + goto $bb1; +$aa6533: + $p := 6533; + goto $bb1; +$aa6534: + $p := 6534; + goto $bb1; +$aa6535: + $p := 6535; + goto $bb1; +$aa6536: + $p := 6536; + goto $bb1; +$aa6537: + $p := 6537; + goto $bb1; +$aa6538: + $p := 6538; + goto $bb1; +$aa6539: + $p := 6539; + goto $bb1; +$aa6540: + $p := 6540; + goto $bb1; +$aa6541: + $p := 6541; + goto $bb1; +$aa6542: + $p := 6542; + goto $bb1; +$aa6543: + $p := 6543; + goto $bb1; +$aa6544: + $p := 6544; + goto $bb1; +$aa6545: + $p := 6545; + goto $bb1; +$aa6546: + $p := 6546; + goto $bb1; +$aa6547: + $p := 6547; + goto $bb1; +$aa6548: + $p := 6548; + goto $bb1; +$aa6549: + $p := 6549; + goto $bb1; +$aa6550: + $p := 6550; + goto $bb1; +$aa6551: + $p := 6551; + goto $bb1; +$aa6552: + $p := 6552; + goto $bb1; +$aa6553: + $p := 6553; + goto $bb1; +$aa6554: + $p := 6554; + goto $bb1; +$aa6555: + $p := 6555; + goto $bb1; +$aa6556: + $p := 6556; + goto $bb1; +$aa6557: + $p := 6557; + goto $bb1; +$aa6558: + $p := 6558; + goto $bb1; +$aa6559: + $p := 6559; + goto $bb1; +$aa6560: + $p := 6560; + goto $bb1; +$aa6561: + $p := 6561; + goto $bb1; +$aa6562: + $p := 6562; + goto $bb1; +$aa6563: + $p := 6563; + goto $bb1; +$aa6564: + $p := 6564; + goto $bb1; +$aa6565: + $p := 6565; + goto $bb1; +$aa6566: + $p := 6566; + goto $bb1; +$aa6567: + $p := 6567; + goto $bb1; +$aa6568: + $p := 6568; + goto $bb1; +$aa6569: + $p := 6569; + goto $bb1; +$aa6570: + $p := 6570; + goto $bb1; +$aa6571: + $p := 6571; + goto $bb1; +$aa6572: + $p := 6572; + goto $bb1; +$aa6573: + $p := 6573; + goto $bb1; +$aa6574: + $p := 6574; + goto $bb1; +$aa6575: + $p := 6575; + goto $bb1; +$aa6576: + $p := 6576; + goto $bb1; +$aa6577: + $p := 6577; + goto $bb1; +$aa6578: + $p := 6578; + goto $bb1; +$aa6579: + $p := 6579; + goto $bb1; +$aa6580: + $p := 6580; + goto $bb1; +$aa6581: + $p := 6581; + goto $bb1; +$aa6582: + $p := 6582; + goto $bb1; +$aa6583: + $p := 6583; + goto $bb1; +$aa6584: + $p := 6584; + goto $bb1; +$aa6585: + $p := 6585; + goto $bb1; +$aa6586: + $p := 6586; + goto $bb1; +$aa6587: + $p := 6587; + goto $bb1; +$aa6588: + $p := 6588; + goto $bb1; +$aa6589: + $p := 6589; + goto $bb1; +$aa6590: + $p := 6590; + goto $bb1; +$aa6591: + $p := 6591; + goto $bb1; +$aa6592: + $p := 6592; + goto $bb1; +$aa6593: + $p := 6593; + goto $bb1; +$aa6594: + $p := 6594; + goto $bb1; +$aa6595: + $p := 6595; + goto $bb1; +$aa6596: + $p := 6596; + goto $bb1; +$aa6597: + $p := 6597; + goto $bb1; +$aa6598: + $p := 6598; + goto $bb1; +$aa6599: + $p := 6599; + goto $bb1; +$aa6600: + $p := 6600; + goto $bb1; +$aa6601: + $p := 6601; + goto $bb1; +$aa6602: + $p := 6602; + goto $bb1; +$aa6603: + $p := 6603; + goto $bb1; +$aa6604: + $p := 6604; + goto $bb1; +$aa6605: + $p := 6605; + goto $bb1; +$aa6606: + $p := 6606; + goto $bb1; +$aa6607: + $p := 6607; + goto $bb1; +$aa6608: + $p := 6608; + goto $bb1; +$aa6609: + $p := 6609; + goto $bb1; +$aa6610: + $p := 6610; + goto $bb1; +$aa6611: + $p := 6611; + goto $bb1; +$aa6612: + $p := 6612; + goto $bb1; +$aa6613: + $p := 6613; + goto $bb1; +$aa6614: + $p := 6614; + goto $bb1; +$aa6615: + $p := 6615; + goto $bb1; +$aa6616: + $p := 6616; + goto $bb1; +$aa6617: + $p := 6617; + goto $bb1; +$aa6618: + $p := 6618; + goto $bb1; +$aa6619: + $p := 6619; + goto $bb1; +$aa6620: + $p := 6620; + goto $bb1; +$aa6621: + $p := 6621; + goto $bb1; +$aa6622: + $p := 6622; + goto $bb1; +$aa6623: + $p := 6623; + goto $bb1; +$aa6624: + $p := 6624; + goto $bb1; +$aa6625: + $p := 6625; + goto $bb1; +$aa6626: + $p := 6626; + goto $bb1; +$aa6627: + $p := 6627; + goto $bb1; +$aa6628: + $p := 6628; + goto $bb1; +$aa6629: + $p := 6629; + goto $bb1; +$aa6630: + $p := 6630; + goto $bb1; +$aa6631: + $p := 6631; + goto $bb1; +$aa6632: + $p := 6632; + goto $bb1; +$aa6633: + $p := 6633; + goto $bb1; +$aa6634: + $p := 6634; + goto $bb1; +$aa6635: + $p := 6635; + goto $bb1; +$aa6636: + $p := 6636; + goto $bb1; +$aa6637: + $p := 6637; + goto $bb1; +$aa6638: + $p := 6638; + goto $bb1; +$aa6639: + $p := 6639; + goto $bb1; +$aa6640: + $p := 6640; + goto $bb1; +$aa6641: + $p := 6641; + goto $bb1; +$aa6642: + $p := 6642; + goto $bb1; +$aa6643: + $p := 6643; + goto $bb1; +$aa6644: + $p := 6644; + goto $bb1; +$aa6645: + $p := 6645; + goto $bb1; +$aa6646: + $p := 6646; + goto $bb1; +$aa6647: + $p := 6647; + goto $bb1; +$aa6648: + $p := 6648; + goto $bb1; +$aa6649: + $p := 6649; + goto $bb1; +$aa6650: + $p := 6650; + goto $bb1; +$aa6651: + $p := 6651; + goto $bb1; +$aa6652: + $p := 6652; + goto $bb1; +$aa6653: + $p := 6653; + goto $bb1; +$aa6654: + $p := 6654; + goto $bb1; +$aa6655: + $p := 6655; + goto $bb1; +$aa6656: + $p := 6656; + goto $bb1; +$aa6657: + $p := 6657; + goto $bb1; +$aa6658: + $p := 6658; + goto $bb1; +$aa6659: + $p := 6659; + goto $bb1; +$aa6660: + $p := 6660; + goto $bb1; +$aa6661: + $p := 6661; + goto $bb1; +$aa6662: + $p := 6662; + goto $bb1; +$aa6663: + $p := 6663; + goto $bb1; +$aa6664: + $p := 6664; + goto $bb1; +$aa6665: + $p := 6665; + goto $bb1; +$aa6666: + $p := 6666; + goto $bb1; +$aa6667: + $p := 6667; + goto $bb1; +$aa6668: + $p := 6668; + goto $bb1; +$aa6669: + $p := 6669; + goto $bb1; +$aa6670: + $p := 6670; + goto $bb1; +$aa6671: + $p := 6671; + goto $bb1; +$aa6672: + $p := 6672; + goto $bb1; +$aa6673: + $p := 6673; + goto $bb1; +$aa6674: + $p := 6674; + goto $bb1; +$aa6675: + $p := 6675; + goto $bb1; +$aa6676: + $p := 6676; + goto $bb1; +$aa6677: + $p := 6677; + goto $bb1; +$aa6678: + $p := 6678; + goto $bb1; +$aa6679: + $p := 6679; + goto $bb1; +$aa6680: + $p := 6680; + goto $bb1; +$aa6681: + $p := 6681; + goto $bb1; +$aa6682: + $p := 6682; + goto $bb1; +$aa6683: + $p := 6683; + goto $bb1; +$aa6684: + $p := 6684; + goto $bb1; +$aa6685: + $p := 6685; + goto $bb1; +$aa6686: + $p := 6686; + goto $bb1; +$aa6687: + $p := 6687; + goto $bb1; +$aa6688: + $p := 6688; + goto $bb1; +$aa6689: + $p := 6689; + goto $bb1; +$aa6690: + $p := 6690; + goto $bb1; +$aa6691: + $p := 6691; + goto $bb1; +$aa6692: + $p := 6692; + goto $bb1; +$aa6693: + $p := 6693; + goto $bb1; +$aa6694: + $p := 6694; + goto $bb1; +$aa6695: + $p := 6695; + goto $bb1; +$aa6696: + $p := 6696; + goto $bb1; +$aa6697: + $p := 6697; + goto $bb1; +$aa6698: + $p := 6698; + goto $bb1; +$aa6699: + $p := 6699; + goto $bb1; +$aa6700: + $p := 6700; + goto $bb1; +$aa6701: + $p := 6701; + goto $bb1; +$aa6702: + $p := 6702; + goto $bb1; +$aa6703: + $p := 6703; + goto $bb1; +$aa6704: + $p := 6704; + goto $bb1; +$aa6705: + $p := 6705; + goto $bb1; +$aa6706: + $p := 6706; + goto $bb1; +$aa6707: + $p := 6707; + goto $bb1; +$aa6708: + $p := 6708; + goto $bb1; +$aa6709: + $p := 6709; + goto $bb1; +$aa6710: + $p := 6710; + goto $bb1; +$aa6711: + $p := 6711; + goto $bb1; +$aa6712: + $p := 6712; + goto $bb1; +$aa6713: + $p := 6713; + goto $bb1; +$aa6714: + $p := 6714; + goto $bb1; +$aa6715: + $p := 6715; + goto $bb1; +$aa6716: + $p := 6716; + goto $bb1; +$aa6717: + $p := 6717; + goto $bb1; +$aa6718: + $p := 6718; + goto $bb1; +$aa6719: + $p := 6719; + goto $bb1; +$aa6720: + $p := 6720; + goto $bb1; +$aa6721: + $p := 6721; + goto $bb1; +$aa6722: + $p := 6722; + goto $bb1; +$aa6723: + $p := 6723; + goto $bb1; +$aa6724: + $p := 6724; + goto $bb1; +$aa6725: + $p := 6725; + goto $bb1; +$aa6726: + $p := 6726; + goto $bb1; +$aa6727: + $p := 6727; + goto $bb1; +$aa6728: + $p := 6728; + goto $bb1; +$aa6729: + $p := 6729; + goto $bb1; +$aa6730: + $p := 6730; + goto $bb1; +$aa6731: + $p := 6731; + goto $bb1; +$aa6732: + $p := 6732; + goto $bb1; +$aa6733: + $p := 6733; + goto $bb1; +$aa6734: + $p := 6734; + goto $bb1; +$aa6735: + $p := 6735; + goto $bb1; +$aa6736: + $p := 6736; + goto $bb1; +$aa6737: + $p := 6737; + goto $bb1; +$aa6738: + $p := 6738; + goto $bb1; +$aa6739: + $p := 6739; + goto $bb1; +$aa6740: + $p := 6740; + goto $bb1; +$aa6741: + $p := 6741; + goto $bb1; +$aa6742: + $p := 6742; + goto $bb1; +$aa6743: + $p := 6743; + goto $bb1; +$aa6744: + $p := 6744; + goto $bb1; +$aa6745: + $p := 6745; + goto $bb1; +$aa6746: + $p := 6746; + goto $bb1; +$aa6747: + $p := 6747; + goto $bb1; +$aa6748: + $p := 6748; + goto $bb1; +$aa6749: + $p := 6749; + goto $bb1; +$aa6750: + $p := 6750; + goto $bb1; +$aa6751: + $p := 6751; + goto $bb1; +$aa6752: + $p := 6752; + goto $bb1; +$aa6753: + $p := 6753; + goto $bb1; +$aa6754: + $p := 6754; + goto $bb1; +$aa6755: + $p := 6755; + goto $bb1; +$aa6756: + $p := 6756; + goto $bb1; +$aa6757: + $p := 6757; + goto $bb1; +$aa6758: + $p := 6758; + goto $bb1; +$aa6759: + $p := 6759; + goto $bb1; +$aa6760: + $p := 6760; + goto $bb1; +$aa6761: + $p := 6761; + goto $bb1; +$aa6762: + $p := 6762; + goto $bb1; +$aa6763: + $p := 6763; + goto $bb1; +$aa6764: + $p := 6764; + goto $bb1; +$aa6765: + $p := 6765; + goto $bb1; +$aa6766: + $p := 6766; + goto $bb1; +$aa6767: + $p := 6767; + goto $bb1; +$aa6768: + $p := 6768; + goto $bb1; +$aa6769: + $p := 6769; + goto $bb1; +$aa6770: + $p := 6770; + goto $bb1; +$aa6771: + $p := 6771; + goto $bb1; +$aa6772: + $p := 6772; + goto $bb1; +$aa6773: + $p := 6773; + goto $bb1; +$aa6774: + $p := 6774; + goto $bb1; +$aa6775: + $p := 6775; + goto $bb1; +$aa6776: + $p := 6776; + goto $bb1; +$aa6777: + $p := 6777; + goto $bb1; +$aa6778: + $p := 6778; + goto $bb1; +$aa6779: + $p := 6779; + goto $bb1; +$aa6780: + $p := 6780; + goto $bb1; +$aa6781: + $p := 6781; + goto $bb1; +$aa6782: + $p := 6782; + goto $bb1; +$aa6783: + $p := 6783; + goto $bb1; +$aa6784: + $p := 6784; + goto $bb1; +$aa6785: + $p := 6785; + goto $bb1; +$aa6786: + $p := 6786; + goto $bb1; +$aa6787: + $p := 6787; + goto $bb1; +$aa6788: + $p := 6788; + goto $bb1; +$aa6789: + $p := 6789; + goto $bb1; +$aa6790: + $p := 6790; + goto $bb1; +$aa6791: + $p := 6791; + goto $bb1; +$aa6792: + $p := 6792; + goto $bb1; +$aa6793: + $p := 6793; + goto $bb1; +$aa6794: + $p := 6794; + goto $bb1; +$aa6795: + $p := 6795; + goto $bb1; +$aa6796: + $p := 6796; + goto $bb1; +$aa6797: + $p := 6797; + goto $bb1; +$aa6798: + $p := 6798; + goto $bb1; +$aa6799: + $p := 6799; + goto $bb1; +$aa6800: + $p := 6800; + goto $bb1; +$aa6801: + $p := 6801; + goto $bb1; +$aa6802: + $p := 6802; + goto $bb1; +$aa6803: + $p := 6803; + goto $bb1; +$aa6804: + $p := 6804; + goto $bb1; +$aa6805: + $p := 6805; + goto $bb1; +$aa6806: + $p := 6806; + goto $bb1; +$aa6807: + $p := 6807; + goto $bb1; +$aa6808: + $p := 6808; + goto $bb1; +$aa6809: + $p := 6809; + goto $bb1; +$aa6810: + $p := 6810; + goto $bb1; +$aa6811: + $p := 6811; + goto $bb1; +$aa6812: + $p := 6812; + goto $bb1; +$aa6813: + $p := 6813; + goto $bb1; +$aa6814: + $p := 6814; + goto $bb1; +$aa6815: + $p := 6815; + goto $bb1; +$aa6816: + $p := 6816; + goto $bb1; +$aa6817: + $p := 6817; + goto $bb1; +$aa6818: + $p := 6818; + goto $bb1; +$aa6819: + $p := 6819; + goto $bb1; +$aa6820: + $p := 6820; + goto $bb1; +$aa6821: + $p := 6821; + goto $bb1; +$aa6822: + $p := 6822; + goto $bb1; +$aa6823: + $p := 6823; + goto $bb1; +$aa6824: + $p := 6824; + goto $bb1; +$aa6825: + $p := 6825; + goto $bb1; +$aa6826: + $p := 6826; + goto $bb1; +$aa6827: + $p := 6827; + goto $bb1; +$aa6828: + $p := 6828; + goto $bb1; +$aa6829: + $p := 6829; + goto $bb1; +$aa6830: + $p := 6830; + goto $bb1; +$aa6831: + $p := 6831; + goto $bb1; +$aa6832: + $p := 6832; + goto $bb1; +$aa6833: + $p := 6833; + goto $bb1; +$aa6834: + $p := 6834; + goto $bb1; +$aa6835: + $p := 6835; + goto $bb1; +$aa6836: + $p := 6836; + goto $bb1; +$aa6837: + $p := 6837; + goto $bb1; +$aa6838: + $p := 6838; + goto $bb1; +$aa6839: + $p := 6839; + goto $bb1; +$aa6840: + $p := 6840; + goto $bb1; +$aa6841: + $p := 6841; + goto $bb1; +$aa6842: + $p := 6842; + goto $bb1; +$aa6843: + $p := 6843; + goto $bb1; +$aa6844: + $p := 6844; + goto $bb1; +$aa6845: + $p := 6845; + goto $bb1; +$aa6846: + $p := 6846; + goto $bb1; +$aa6847: + $p := 6847; + goto $bb1; +$aa6848: + $p := 6848; + goto $bb1; +$aa6849: + $p := 6849; + goto $bb1; +$aa6850: + $p := 6850; + goto $bb1; +$aa6851: + $p := 6851; + goto $bb1; +$aa6852: + $p := 6852; + goto $bb1; +$aa6853: + $p := 6853; + goto $bb1; +$aa6854: + $p := 6854; + goto $bb1; +$aa6855: + $p := 6855; + goto $bb1; +$aa6856: + $p := 6856; + goto $bb1; +$aa6857: + $p := 6857; + goto $bb1; +$aa6858: + $p := 6858; + goto $bb1; +$aa6859: + $p := 6859; + goto $bb1; +$aa6860: + $p := 6860; + goto $bb1; +$aa6861: + $p := 6861; + goto $bb1; +$aa6862: + $p := 6862; + goto $bb1; +$aa6863: + $p := 6863; + goto $bb1; +$aa6864: + $p := 6864; + goto $bb1; +$aa6865: + $p := 6865; + goto $bb1; +$aa6866: + $p := 6866; + goto $bb1; +$aa6867: + $p := 6867; + goto $bb1; +$aa6868: + $p := 6868; + goto $bb1; +$aa6869: + $p := 6869; + goto $bb1; +$aa6870: + $p := 6870; + goto $bb1; +$aa6871: + $p := 6871; + goto $bb1; +$aa6872: + $p := 6872; + goto $bb1; +$aa6873: + $p := 6873; + goto $bb1; +$aa6874: + $p := 6874; + goto $bb1; +$aa6875: + $p := 6875; + goto $bb1; +$aa6876: + $p := 6876; + goto $bb1; +$aa6877: + $p := 6877; + goto $bb1; +$aa6878: + $p := 6878; + goto $bb1; +$aa6879: + $p := 6879; + goto $bb1; +$aa6880: + $p := 6880; + goto $bb1; +$aa6881: + $p := 6881; + goto $bb1; +$aa6882: + $p := 6882; + goto $bb1; +$aa6883: + $p := 6883; + goto $bb1; +$aa6884: + $p := 6884; + goto $bb1; +$aa6885: + $p := 6885; + goto $bb1; +$aa6886: + $p := 6886; + goto $bb1; +$aa6887: + $p := 6887; + goto $bb1; +$aa6888: + $p := 6888; + goto $bb1; +$aa6889: + $p := 6889; + goto $bb1; +$aa6890: + $p := 6890; + goto $bb1; +$aa6891: + $p := 6891; + goto $bb1; +$aa6892: + $p := 6892; + goto $bb1; +$aa6893: + $p := 6893; + goto $bb1; +$aa6894: + $p := 6894; + goto $bb1; +$aa6895: + $p := 6895; + goto $bb1; +$aa6896: + $p := 6896; + goto $bb1; +$aa6897: + $p := 6897; + goto $bb1; +$aa6898: + $p := 6898; + goto $bb1; +$aa6899: + $p := 6899; + goto $bb1; +$aa6900: + $p := 6900; + goto $bb1; +$aa6901: + $p := 6901; + goto $bb1; +$aa6902: + $p := 6902; + goto $bb1; +$aa6903: + $p := 6903; + goto $bb1; +$aa6904: + $p := 6904; + goto $bb1; +$aa6905: + $p := 6905; + goto $bb1; +$aa6906: + $p := 6906; + goto $bb1; +$aa6907: + $p := 6907; + goto $bb1; +$aa6908: + $p := 6908; + goto $bb1; +$aa6909: + $p := 6909; + goto $bb1; +$aa6910: + $p := 6910; + goto $bb1; +$aa6911: + $p := 6911; + goto $bb1; +$aa6912: + $p := 6912; + goto $bb1; +$aa6913: + $p := 6913; + goto $bb1; +$aa6914: + $p := 6914; + goto $bb1; +$aa6915: + $p := 6915; + goto $bb1; +$aa6916: + $p := 6916; + goto $bb1; +$aa6917: + $p := 6917; + goto $bb1; +$aa6918: + $p := 6918; + goto $bb1; +$aa6919: + $p := 6919; + goto $bb1; +$aa6920: + $p := 6920; + goto $bb1; +$aa6921: + $p := 6921; + goto $bb1; +$aa6922: + $p := 6922; + goto $bb1; +$aa6923: + $p := 6923; + goto $bb1; +$aa6924: + $p := 6924; + goto $bb1; +$aa6925: + $p := 6925; + goto $bb1; +$aa6926: + $p := 6926; + goto $bb1; +$aa6927: + $p := 6927; + goto $bb1; +$aa6928: + $p := 6928; + goto $bb1; +$aa6929: + $p := 6929; + goto $bb1; +$aa6930: + $p := 6930; + goto $bb1; +$aa6931: + $p := 6931; + goto $bb1; +$aa6932: + $p := 6932; + goto $bb1; +$aa6933: + $p := 6933; + goto $bb1; +$aa6934: + $p := 6934; + goto $bb1; +$aa6935: + $p := 6935; + goto $bb1; +$aa6936: + $p := 6936; + goto $bb1; +$aa6937: + $p := 6937; + goto $bb1; +$aa6938: + $p := 6938; + goto $bb1; +$aa6939: + $p := 6939; + goto $bb1; +$aa6940: + $p := 6940; + goto $bb1; +$aa6941: + $p := 6941; + goto $bb1; +$aa6942: + $p := 6942; + goto $bb1; +$aa6943: + $p := 6943; + goto $bb1; +$aa6944: + $p := 6944; + goto $bb1; +$aa6945: + $p := 6945; + goto $bb1; +$aa6946: + $p := 6946; + goto $bb1; +$aa6947: + $p := 6947; + goto $bb1; +$aa6948: + $p := 6948; + goto $bb1; +$aa6949: + $p := 6949; + goto $bb1; +$aa6950: + $p := 6950; + goto $bb1; +$aa6951: + $p := 6951; + goto $bb1; +$aa6952: + $p := 6952; + goto $bb1; +$aa6953: + $p := 6953; + goto $bb1; +$aa6954: + $p := 6954; + goto $bb1; +$aa6955: + $p := 6955; + goto $bb1; +$aa6956: + $p := 6956; + goto $bb1; +$aa6957: + $p := 6957; + goto $bb1; +$aa6958: + $p := 6958; + goto $bb1; +$aa6959: + $p := 6959; + goto $bb1; +$aa6960: + $p := 6960; + goto $bb1; +$aa6961: + $p := 6961; + goto $bb1; +$aa6962: + $p := 6962; + goto $bb1; +$aa6963: + $p := 6963; + goto $bb1; +$aa6964: + $p := 6964; + goto $bb1; +$aa6965: + $p := 6965; + goto $bb1; +$aa6966: + $p := 6966; + goto $bb1; +$aa6967: + $p := 6967; + goto $bb1; +$aa6968: + $p := 6968; + goto $bb1; +$aa6969: + $p := 6969; + goto $bb1; +$aa6970: + $p := 6970; + goto $bb1; +$aa6971: + $p := 6971; + goto $bb1; +$aa6972: + $p := 6972; + goto $bb1; +$aa6973: + $p := 6973; + goto $bb1; +$aa6974: + $p := 6974; + goto $bb1; +$aa6975: + $p := 6975; + goto $bb1; +$aa6976: + $p := 6976; + goto $bb1; +$aa6977: + $p := 6977; + goto $bb1; +$aa6978: + $p := 6978; + goto $bb1; +$aa6979: + $p := 6979; + goto $bb1; +$aa6980: + $p := 6980; + goto $bb1; +$aa6981: + $p := 6981; + goto $bb1; +$aa6982: + $p := 6982; + goto $bb1; +$aa6983: + $p := 6983; + goto $bb1; +$aa6984: + $p := 6984; + goto $bb1; +$aa6985: + $p := 6985; + goto $bb1; +$aa6986: + $p := 6986; + goto $bb1; +$aa6987: + $p := 6987; + goto $bb1; +$aa6988: + $p := 6988; + goto $bb1; +$aa6989: + $p := 6989; + goto $bb1; +$aa6990: + $p := 6990; + goto $bb1; +$aa6991: + $p := 6991; + goto $bb1; +$aa6992: + $p := 6992; + goto $bb1; +$aa6993: + $p := 6993; + goto $bb1; +$aa6994: + $p := 6994; + goto $bb1; +$aa6995: + $p := 6995; + goto $bb1; +$aa6996: + $p := 6996; + goto $bb1; +$aa6997: + $p := 6997; + goto $bb1; +$aa6998: + $p := 6998; + goto $bb1; +$aa6999: + $p := 6999; + goto $bb1; +$aa7000: + $p := 7000; + goto $bb1; +$aa7001: + $p := 7001; + goto $bb1; +$aa7002: + $p := 7002; + goto $bb1; +$aa7003: + $p := 7003; + goto $bb1; +$aa7004: + $p := 7004; + goto $bb1; +$aa7005: + $p := 7005; + goto $bb1; +$aa7006: + $p := 7006; + goto $bb1; +$aa7007: + $p := 7007; + goto $bb1; +$aa7008: + $p := 7008; + goto $bb1; +$aa7009: + $p := 7009; + goto $bb1; +$aa7010: + $p := 7010; + goto $bb1; +$aa7011: + $p := 7011; + goto $bb1; +$aa7012: + $p := 7012; + goto $bb1; +$aa7013: + $p := 7013; + goto $bb1; +$aa7014: + $p := 7014; + goto $bb1; +$aa7015: + $p := 7015; + goto $bb1; +$aa7016: + $p := 7016; + goto $bb1; +$aa7017: + $p := 7017; + goto $bb1; +$aa7018: + $p := 7018; + goto $bb1; +$aa7019: + $p := 7019; + goto $bb1; +$aa7020: + $p := 7020; + goto $bb1; +$aa7021: + $p := 7021; + goto $bb1; +$aa7022: + $p := 7022; + goto $bb1; +$aa7023: + $p := 7023; + goto $bb1; +$aa7024: + $p := 7024; + goto $bb1; +$aa7025: + $p := 7025; + goto $bb1; +$aa7026: + $p := 7026; + goto $bb1; +$aa7027: + $p := 7027; + goto $bb1; +$aa7028: + $p := 7028; + goto $bb1; +$aa7029: + $p := 7029; + goto $bb1; +$aa7030: + $p := 7030; + goto $bb1; +$aa7031: + $p := 7031; + goto $bb1; +$aa7032: + $p := 7032; + goto $bb1; +$aa7033: + $p := 7033; + goto $bb1; +$aa7034: + $p := 7034; + goto $bb1; +$aa7035: + $p := 7035; + goto $bb1; +$aa7036: + $p := 7036; + goto $bb1; +$aa7037: + $p := 7037; + goto $bb1; +$aa7038: + $p := 7038; + goto $bb1; +$aa7039: + $p := 7039; + goto $bb1; +$aa7040: + $p := 7040; + goto $bb1; +$aa7041: + $p := 7041; + goto $bb1; +$aa7042: + $p := 7042; + goto $bb1; +$aa7043: + $p := 7043; + goto $bb1; +$aa7044: + $p := 7044; + goto $bb1; +$aa7045: + $p := 7045; + goto $bb1; +$aa7046: + $p := 7046; + goto $bb1; +$aa7047: + $p := 7047; + goto $bb1; +$aa7048: + $p := 7048; + goto $bb1; +$aa7049: + $p := 7049; + goto $bb1; +$aa7050: + $p := 7050; + goto $bb1; +$aa7051: + $p := 7051; + goto $bb1; +$aa7052: + $p := 7052; + goto $bb1; +$aa7053: + $p := 7053; + goto $bb1; +$aa7054: + $p := 7054; + goto $bb1; +$aa7055: + $p := 7055; + goto $bb1; +$aa7056: + $p := 7056; + goto $bb1; +$aa7057: + $p := 7057; + goto $bb1; +$aa7058: + $p := 7058; + goto $bb1; +$aa7059: + $p := 7059; + goto $bb1; +$aa7060: + $p := 7060; + goto $bb1; +$aa7061: + $p := 7061; + goto $bb1; +$aa7062: + $p := 7062; + goto $bb1; +$aa7063: + $p := 7063; + goto $bb1; +$aa7064: + $p := 7064; + goto $bb1; +$aa7065: + $p := 7065; + goto $bb1; +$aa7066: + $p := 7066; + goto $bb1; +$aa7067: + $p := 7067; + goto $bb1; +$aa7068: + $p := 7068; + goto $bb1; +$aa7069: + $p := 7069; + goto $bb1; +$aa7070: + $p := 7070; + goto $bb1; +$aa7071: + $p := 7071; + goto $bb1; +$aa7072: + $p := 7072; + goto $bb1; +$aa7073: + $p := 7073; + goto $bb1; +$aa7074: + $p := 7074; + goto $bb1; +$aa7075: + $p := 7075; + goto $bb1; +$aa7076: + $p := 7076; + goto $bb1; +$aa7077: + $p := 7077; + goto $bb1; +$aa7078: + $p := 7078; + goto $bb1; +$aa7079: + $p := 7079; + goto $bb1; +$aa7080: + $p := 7080; + goto $bb1; +$aa7081: + $p := 7081; + goto $bb1; +$aa7082: + $p := 7082; + goto $bb1; +$aa7083: + $p := 7083; + goto $bb1; +$aa7084: + $p := 7084; + goto $bb1; +$aa7085: + $p := 7085; + goto $bb1; +$aa7086: + $p := 7086; + goto $bb1; +$aa7087: + $p := 7087; + goto $bb1; +$aa7088: + $p := 7088; + goto $bb1; +$aa7089: + $p := 7089; + goto $bb1; +$aa7090: + $p := 7090; + goto $bb1; +$aa7091: + $p := 7091; + goto $bb1; +$aa7092: + $p := 7092; + goto $bb1; +$aa7093: + $p := 7093; + goto $bb1; +$aa7094: + $p := 7094; + goto $bb1; +$aa7095: + $p := 7095; + goto $bb1; +$aa7096: + $p := 7096; + goto $bb1; +$aa7097: + $p := 7097; + goto $bb1; +$aa7098: + $p := 7098; + goto $bb1; +$aa7099: + $p := 7099; + goto $bb1; +$aa7100: + $p := 7100; + goto $bb1; +$aa7101: + $p := 7101; + goto $bb1; +$aa7102: + $p := 7102; + goto $bb1; +$aa7103: + $p := 7103; + goto $bb1; +$aa7104: + $p := 7104; + goto $bb1; +$aa7105: + $p := 7105; + goto $bb1; +$aa7106: + $p := 7106; + goto $bb1; +$aa7107: + $p := 7107; + goto $bb1; +$aa7108: + $p := 7108; + goto $bb1; +$aa7109: + $p := 7109; + goto $bb1; +$aa7110: + $p := 7110; + goto $bb1; +$aa7111: + $p := 7111; + goto $bb1; +$aa7112: + $p := 7112; + goto $bb1; +$aa7113: + $p := 7113; + goto $bb1; +$aa7114: + $p := 7114; + goto $bb1; +$aa7115: + $p := 7115; + goto $bb1; +$aa7116: + $p := 7116; + goto $bb1; +$aa7117: + $p := 7117; + goto $bb1; +$aa7118: + $p := 7118; + goto $bb1; +$aa7119: + $p := 7119; + goto $bb1; +$aa7120: + $p := 7120; + goto $bb1; +$aa7121: + $p := 7121; + goto $bb1; +$aa7122: + $p := 7122; + goto $bb1; +$aa7123: + $p := 7123; + goto $bb1; +$aa7124: + $p := 7124; + goto $bb1; +$aa7125: + $p := 7125; + goto $bb1; +$aa7126: + $p := 7126; + goto $bb1; +$aa7127: + $p := 7127; + goto $bb1; +$aa7128: + $p := 7128; + goto $bb1; +$aa7129: + $p := 7129; + goto $bb1; +$aa7130: + $p := 7130; + goto $bb1; +$aa7131: + $p := 7131; + goto $bb1; +$aa7132: + $p := 7132; + goto $bb1; +$aa7133: + $p := 7133; + goto $bb1; +$aa7134: + $p := 7134; + goto $bb1; +$aa7135: + $p := 7135; + goto $bb1; +$aa7136: + $p := 7136; + goto $bb1; +$aa7137: + $p := 7137; + goto $bb1; +$aa7138: + $p := 7138; + goto $bb1; +$aa7139: + $p := 7139; + goto $bb1; +$aa7140: + $p := 7140; + goto $bb1; +$aa7141: + $p := 7141; + goto $bb1; +$aa7142: + $p := 7142; + goto $bb1; +$aa7143: + $p := 7143; + goto $bb1; +$aa7144: + $p := 7144; + goto $bb1; +$aa7145: + $p := 7145; + goto $bb1; +$aa7146: + $p := 7146; + goto $bb1; +$aa7147: + $p := 7147; + goto $bb1; +$aa7148: + $p := 7148; + goto $bb1; +$aa7149: + $p := 7149; + goto $bb1; +$aa7150: + $p := 7150; + goto $bb1; +$aa7151: + $p := 7151; + goto $bb1; +$aa7152: + $p := 7152; + goto $bb1; +$aa7153: + $p := 7153; + goto $bb1; +$aa7154: + $p := 7154; + goto $bb1; +$aa7155: + $p := 7155; + goto $bb1; +$aa7156: + $p := 7156; + goto $bb1; +$aa7157: + $p := 7157; + goto $bb1; +$aa7158: + $p := 7158; + goto $bb1; +$aa7159: + $p := 7159; + goto $bb1; +$aa7160: + $p := 7160; + goto $bb1; +$aa7161: + $p := 7161; + goto $bb1; +$aa7162: + $p := 7162; + goto $bb1; +$aa7163: + $p := 7163; + goto $bb1; +$aa7164: + $p := 7164; + goto $bb1; +$aa7165: + $p := 7165; + goto $bb1; +$aa7166: + $p := 7166; + goto $bb1; +$aa7167: + $p := 7167; + goto $bb1; +$aa7168: + $p := 7168; + goto $bb1; +$aa7169: + $p := 7169; + goto $bb1; +$aa7170: + $p := 7170; + goto $bb1; +$aa7171: + $p := 7171; + goto $bb1; +$aa7172: + $p := 7172; + goto $bb1; +$aa7173: + $p := 7173; + goto $bb1; +$aa7174: + $p := 7174; + goto $bb1; +$aa7175: + $p := 7175; + goto $bb1; +$aa7176: + $p := 7176; + goto $bb1; +$aa7177: + $p := 7177; + goto $bb1; +$aa7178: + $p := 7178; + goto $bb1; +$aa7179: + $p := 7179; + goto $bb1; +$aa7180: + $p := 7180; + goto $bb1; +$aa7181: + $p := 7181; + goto $bb1; +$aa7182: + $p := 7182; + goto $bb1; +$aa7183: + $p := 7183; + goto $bb1; +$aa7184: + $p := 7184; + goto $bb1; +$aa7185: + $p := 7185; + goto $bb1; +$aa7186: + $p := 7186; + goto $bb1; +$aa7187: + $p := 7187; + goto $bb1; +$aa7188: + $p := 7188; + goto $bb1; +$aa7189: + $p := 7189; + goto $bb1; +$aa7190: + $p := 7190; + goto $bb1; +$aa7191: + $p := 7191; + goto $bb1; +$aa7192: + $p := 7192; + goto $bb1; +$aa7193: + $p := 7193; + goto $bb1; +$aa7194: + $p := 7194; + goto $bb1; +$aa7195: + $p := 7195; + goto $bb1; +$aa7196: + $p := 7196; + goto $bb1; +$aa7197: + $p := 7197; + goto $bb1; +$aa7198: + $p := 7198; + goto $bb1; +$aa7199: + $p := 7199; + goto $bb1; +$aa7200: + $p := 7200; + goto $bb1; +$aa7201: + $p := 7201; + goto $bb1; +$aa7202: + $p := 7202; + goto $bb1; +$aa7203: + $p := 7203; + goto $bb1; +$aa7204: + $p := 7204; + goto $bb1; +$aa7205: + $p := 7205; + goto $bb1; +$aa7206: + $p := 7206; + goto $bb1; +$aa7207: + $p := 7207; + goto $bb1; +$aa7208: + $p := 7208; + goto $bb1; +$aa7209: + $p := 7209; + goto $bb1; +$aa7210: + $p := 7210; + goto $bb1; +$aa7211: + $p := 7211; + goto $bb1; +$aa7212: + $p := 7212; + goto $bb1; +$aa7213: + $p := 7213; + goto $bb1; +$aa7214: + $p := 7214; + goto $bb1; +$aa7215: + $p := 7215; + goto $bb1; +$aa7216: + $p := 7216; + goto $bb1; +$aa7217: + $p := 7217; + goto $bb1; +$aa7218: + $p := 7218; + goto $bb1; +$aa7219: + $p := 7219; + goto $bb1; +$aa7220: + $p := 7220; + goto $bb1; +$aa7221: + $p := 7221; + goto $bb1; +$aa7222: + $p := 7222; + goto $bb1; +$aa7223: + $p := 7223; + goto $bb1; +$aa7224: + $p := 7224; + goto $bb1; +$aa7225: + $p := 7225; + goto $bb1; +$aa7226: + $p := 7226; + goto $bb1; +$aa7227: + $p := 7227; + goto $bb1; +$aa7228: + $p := 7228; + goto $bb1; +$aa7229: + $p := 7229; + goto $bb1; +$aa7230: + $p := 7230; + goto $bb1; +$aa7231: + $p := 7231; + goto $bb1; +$aa7232: + $p := 7232; + goto $bb1; +$aa7233: + $p := 7233; + goto $bb1; +$aa7234: + $p := 7234; + goto $bb1; +$aa7235: + $p := 7235; + goto $bb1; +$aa7236: + $p := 7236; + goto $bb1; +$aa7237: + $p := 7237; + goto $bb1; +$aa7238: + $p := 7238; + goto $bb1; +$aa7239: + $p := 7239; + goto $bb1; +$aa7240: + $p := 7240; + goto $bb1; +$aa7241: + $p := 7241; + goto $bb1; +$aa7242: + $p := 7242; + goto $bb1; +$aa7243: + $p := 7243; + goto $bb1; +$aa7244: + $p := 7244; + goto $bb1; +$aa7245: + $p := 7245; + goto $bb1; +$aa7246: + $p := 7246; + goto $bb1; +$aa7247: + $p := 7247; + goto $bb1; +$aa7248: + $p := 7248; + goto $bb1; +$aa7249: + $p := 7249; + goto $bb1; +$aa7250: + $p := 7250; + goto $bb1; +$aa7251: + $p := 7251; + goto $bb1; +$aa7252: + $p := 7252; + goto $bb1; +$aa7253: + $p := 7253; + goto $bb1; +$aa7254: + $p := 7254; + goto $bb1; +$aa7255: + $p := 7255; + goto $bb1; +$aa7256: + $p := 7256; + goto $bb1; +$aa7257: + $p := 7257; + goto $bb1; +$aa7258: + $p := 7258; + goto $bb1; +$aa7259: + $p := 7259; + goto $bb1; +$aa7260: + $p := 7260; + goto $bb1; +$aa7261: + $p := 7261; + goto $bb1; +$aa7262: + $p := 7262; + goto $bb1; +$aa7263: + $p := 7263; + goto $bb1; +$aa7264: + $p := 7264; + goto $bb1; +$aa7265: + $p := 7265; + goto $bb1; +$aa7266: + $p := 7266; + goto $bb1; +$aa7267: + $p := 7267; + goto $bb1; +$aa7268: + $p := 7268; + goto $bb1; +$aa7269: + $p := 7269; + goto $bb1; +$aa7270: + $p := 7270; + goto $bb1; +$aa7271: + $p := 7271; + goto $bb1; +$aa7272: + $p := 7272; + goto $bb1; +$aa7273: + $p := 7273; + goto $bb1; +$aa7274: + $p := 7274; + goto $bb1; +$aa7275: + $p := 7275; + goto $bb1; +$aa7276: + $p := 7276; + goto $bb1; +$aa7277: + $p := 7277; + goto $bb1; +$aa7278: + $p := 7278; + goto $bb1; +$aa7279: + $p := 7279; + goto $bb1; +$aa7280: + $p := 7280; + goto $bb1; +$aa7281: + $p := 7281; + goto $bb1; +$aa7282: + $p := 7282; + goto $bb1; +$aa7283: + $p := 7283; + goto $bb1; +$aa7284: + $p := 7284; + goto $bb1; +$aa7285: + $p := 7285; + goto $bb1; +$aa7286: + $p := 7286; + goto $bb1; +$aa7287: + $p := 7287; + goto $bb1; +$aa7288: + $p := 7288; + goto $bb1; +$aa7289: + $p := 7289; + goto $bb1; +$aa7290: + $p := 7290; + goto $bb1; +$aa7291: + $p := 7291; + goto $bb1; +$aa7292: + $p := 7292; + goto $bb1; +$aa7293: + $p := 7293; + goto $bb1; +$aa7294: + $p := 7294; + goto $bb1; +$aa7295: + $p := 7295; + goto $bb1; +$aa7296: + $p := 7296; + goto $bb1; +$aa7297: + $p := 7297; + goto $bb1; +$aa7298: + $p := 7298; + goto $bb1; +$aa7299: + $p := 7299; + goto $bb1; +$aa7300: + $p := 7300; + goto $bb1; +$aa7301: + $p := 7301; + goto $bb1; +$aa7302: + $p := 7302; + goto $bb1; +$aa7303: + $p := 7303; + goto $bb1; +$aa7304: + $p := 7304; + goto $bb1; +$aa7305: + $p := 7305; + goto $bb1; +$aa7306: + $p := 7306; + goto $bb1; +$aa7307: + $p := 7307; + goto $bb1; +$aa7308: + $p := 7308; + goto $bb1; +$aa7309: + $p := 7309; + goto $bb1; +$aa7310: + $p := 7310; + goto $bb1; +$aa7311: + $p := 7311; + goto $bb1; +$aa7312: + $p := 7312; + goto $bb1; +$aa7313: + $p := 7313; + goto $bb1; +$aa7314: + $p := 7314; + goto $bb1; +$aa7315: + $p := 7315; + goto $bb1; +$aa7316: + $p := 7316; + goto $bb1; +$aa7317: + $p := 7317; + goto $bb1; +$aa7318: + $p := 7318; + goto $bb1; +$aa7319: + $p := 7319; + goto $bb1; +$aa7320: + $p := 7320; + goto $bb1; +$aa7321: + $p := 7321; + goto $bb1; +$aa7322: + $p := 7322; + goto $bb1; +$aa7323: + $p := 7323; + goto $bb1; +$aa7324: + $p := 7324; + goto $bb1; +$aa7325: + $p := 7325; + goto $bb1; +$aa7326: + $p := 7326; + goto $bb1; +$aa7327: + $p := 7327; + goto $bb1; +$aa7328: + $p := 7328; + goto $bb1; +$aa7329: + $p := 7329; + goto $bb1; +$aa7330: + $p := 7330; + goto $bb1; +$aa7331: + $p := 7331; + goto $bb1; +$aa7332: + $p := 7332; + goto $bb1; +$aa7333: + $p := 7333; + goto $bb1; +$aa7334: + $p := 7334; + goto $bb1; +$aa7335: + $p := 7335; + goto $bb1; +$aa7336: + $p := 7336; + goto $bb1; +$aa7337: + $p := 7337; + goto $bb1; +$aa7338: + $p := 7338; + goto $bb1; +$aa7339: + $p := 7339; + goto $bb1; +$aa7340: + $p := 7340; + goto $bb1; +$aa7341: + $p := 7341; + goto $bb1; +$aa7342: + $p := 7342; + goto $bb1; +$aa7343: + $p := 7343; + goto $bb1; +$aa7344: + $p := 7344; + goto $bb1; +$aa7345: + $p := 7345; + goto $bb1; +$aa7346: + $p := 7346; + goto $bb1; +$aa7347: + $p := 7347; + goto $bb1; +$aa7348: + $p := 7348; + goto $bb1; +$aa7349: + $p := 7349; + goto $bb1; +$aa7350: + $p := 7350; + goto $bb1; +$aa7351: + $p := 7351; + goto $bb1; +$aa7352: + $p := 7352; + goto $bb1; +$aa7353: + $p := 7353; + goto $bb1; +$aa7354: + $p := 7354; + goto $bb1; +$aa7355: + $p := 7355; + goto $bb1; +$aa7356: + $p := 7356; + goto $bb1; +$aa7357: + $p := 7357; + goto $bb1; +$aa7358: + $p := 7358; + goto $bb1; +$aa7359: + $p := 7359; + goto $bb1; +$aa7360: + $p := 7360; + goto $bb1; +$aa7361: + $p := 7361; + goto $bb1; +$aa7362: + $p := 7362; + goto $bb1; +$aa7363: + $p := 7363; + goto $bb1; +$aa7364: + $p := 7364; + goto $bb1; +$aa7365: + $p := 7365; + goto $bb1; +$aa7366: + $p := 7366; + goto $bb1; +$aa7367: + $p := 7367; + goto $bb1; +$aa7368: + $p := 7368; + goto $bb1; +$aa7369: + $p := 7369; + goto $bb1; +$aa7370: + $p := 7370; + goto $bb1; +$aa7371: + $p := 7371; + goto $bb1; +$aa7372: + $p := 7372; + goto $bb1; +$aa7373: + $p := 7373; + goto $bb1; +$aa7374: + $p := 7374; + goto $bb1; +$aa7375: + $p := 7375; + goto $bb1; +$aa7376: + $p := 7376; + goto $bb1; +$aa7377: + $p := 7377; + goto $bb1; +$aa7378: + $p := 7378; + goto $bb1; +$aa7379: + $p := 7379; + goto $bb1; +$aa7380: + $p := 7380; + goto $bb1; +$aa7381: + $p := 7381; + goto $bb1; +$aa7382: + $p := 7382; + goto $bb1; +$aa7383: + $p := 7383; + goto $bb1; +$aa7384: + $p := 7384; + goto $bb1; +$aa7385: + $p := 7385; + goto $bb1; +$aa7386: + $p := 7386; + goto $bb1; +$aa7387: + $p := 7387; + goto $bb1; +$aa7388: + $p := 7388; + goto $bb1; +$aa7389: + $p := 7389; + goto $bb1; +$aa7390: + $p := 7390; + goto $bb1; +$aa7391: + $p := 7391; + goto $bb1; +$aa7392: + $p := 7392; + goto $bb1; +$aa7393: + $p := 7393; + goto $bb1; +$aa7394: + $p := 7394; + goto $bb1; +$aa7395: + $p := 7395; + goto $bb1; +$aa7396: + $p := 7396; + goto $bb1; +$aa7397: + $p := 7397; + goto $bb1; +$aa7398: + $p := 7398; + goto $bb1; +$aa7399: + $p := 7399; + goto $bb1; +$aa7400: + $p := 7400; + goto $bb1; +$aa7401: + $p := 7401; + goto $bb1; +$aa7402: + $p := 7402; + goto $bb1; +$aa7403: + $p := 7403; + goto $bb1; +$aa7404: + $p := 7404; + goto $bb1; +$aa7405: + $p := 7405; + goto $bb1; +$aa7406: + $p := 7406; + goto $bb1; +$aa7407: + $p := 7407; + goto $bb1; +$aa7408: + $p := 7408; + goto $bb1; +$aa7409: + $p := 7409; + goto $bb1; +$aa7410: + $p := 7410; + goto $bb1; +$aa7411: + $p := 7411; + goto $bb1; +$aa7412: + $p := 7412; + goto $bb1; +$aa7413: + $p := 7413; + goto $bb1; +$aa7414: + $p := 7414; + goto $bb1; +$aa7415: + $p := 7415; + goto $bb1; +$aa7416: + $p := 7416; + goto $bb1; +$aa7417: + $p := 7417; + goto $bb1; +$aa7418: + $p := 7418; + goto $bb1; +$aa7419: + $p := 7419; + goto $bb1; +$aa7420: + $p := 7420; + goto $bb1; +$aa7421: + $p := 7421; + goto $bb1; +$aa7422: + $p := 7422; + goto $bb1; +$aa7423: + $p := 7423; + goto $bb1; +$aa7424: + $p := 7424; + goto $bb1; +$aa7425: + $p := 7425; + goto $bb1; +$aa7426: + $p := 7426; + goto $bb1; +$aa7427: + $p := 7427; + goto $bb1; +$aa7428: + $p := 7428; + goto $bb1; +$aa7429: + $p := 7429; + goto $bb1; +$aa7430: + $p := 7430; + goto $bb1; +$aa7431: + $p := 7431; + goto $bb1; +$aa7432: + $p := 7432; + goto $bb1; +$aa7433: + $p := 7433; + goto $bb1; +$aa7434: + $p := 7434; + goto $bb1; +$aa7435: + $p := 7435; + goto $bb1; +$aa7436: + $p := 7436; + goto $bb1; +$aa7437: + $p := 7437; + goto $bb1; +$aa7438: + $p := 7438; + goto $bb1; +$aa7439: + $p := 7439; + goto $bb1; +$aa7440: + $p := 7440; + goto $bb1; +$aa7441: + $p := 7441; + goto $bb1; +$aa7442: + $p := 7442; + goto $bb1; +$aa7443: + $p := 7443; + goto $bb1; +$aa7444: + $p := 7444; + goto $bb1; +$aa7445: + $p := 7445; + goto $bb1; +$aa7446: + $p := 7446; + goto $bb1; +$aa7447: + $p := 7447; + goto $bb1; +$aa7448: + $p := 7448; + goto $bb1; +$aa7449: + $p := 7449; + goto $bb1; +$aa7450: + $p := 7450; + goto $bb1; +$aa7451: + $p := 7451; + goto $bb1; +$aa7452: + $p := 7452; + goto $bb1; +$aa7453: + $p := 7453; + goto $bb1; +$aa7454: + $p := 7454; + goto $bb1; +$aa7455: + $p := 7455; + goto $bb1; +$aa7456: + $p := 7456; + goto $bb1; +$aa7457: + $p := 7457; + goto $bb1; +$aa7458: + $p := 7458; + goto $bb1; +$aa7459: + $p := 7459; + goto $bb1; +$aa7460: + $p := 7460; + goto $bb1; +$aa7461: + $p := 7461; + goto $bb1; +$aa7462: + $p := 7462; + goto $bb1; +$aa7463: + $p := 7463; + goto $bb1; +$aa7464: + $p := 7464; + goto $bb1; +$aa7465: + $p := 7465; + goto $bb1; +$aa7466: + $p := 7466; + goto $bb1; +$aa7467: + $p := 7467; + goto $bb1; +$aa7468: + $p := 7468; + goto $bb1; +$aa7469: + $p := 7469; + goto $bb1; +$aa7470: + $p := 7470; + goto $bb1; +$aa7471: + $p := 7471; + goto $bb1; +$aa7472: + $p := 7472; + goto $bb1; +$aa7473: + $p := 7473; + goto $bb1; +$aa7474: + $p := 7474; + goto $bb1; +$aa7475: + $p := 7475; + goto $bb1; +$aa7476: + $p := 7476; + goto $bb1; +$aa7477: + $p := 7477; + goto $bb1; +$aa7478: + $p := 7478; + goto $bb1; +$aa7479: + $p := 7479; + goto $bb1; +$aa7480: + $p := 7480; + goto $bb1; +$aa7481: + $p := 7481; + goto $bb1; +$aa7482: + $p := 7482; + goto $bb1; +$aa7483: + $p := 7483; + goto $bb1; +$aa7484: + $p := 7484; + goto $bb1; +$aa7485: + $p := 7485; + goto $bb1; +$aa7486: + $p := 7486; + goto $bb1; +$aa7487: + $p := 7487; + goto $bb1; +$aa7488: + $p := 7488; + goto $bb1; +$aa7489: + $p := 7489; + goto $bb1; +$aa7490: + $p := 7490; + goto $bb1; +$aa7491: + $p := 7491; + goto $bb1; +$aa7492: + $p := 7492; + goto $bb1; +$aa7493: + $p := 7493; + goto $bb1; +$aa7494: + $p := 7494; + goto $bb1; +$aa7495: + $p := 7495; + goto $bb1; +$aa7496: + $p := 7496; + goto $bb1; +$aa7497: + $p := 7497; + goto $bb1; +$aa7498: + $p := 7498; + goto $bb1; +$aa7499: + $p := 7499; + goto $bb1; +$aa7500: + $p := 7500; + goto $bb1; +$aa7501: + $p := 7501; + goto $bb1; +$aa7502: + $p := 7502; + goto $bb1; +$aa7503: + $p := 7503; + goto $bb1; +$aa7504: + $p := 7504; + goto $bb1; +$aa7505: + $p := 7505; + goto $bb1; +$aa7506: + $p := 7506; + goto $bb1; +$aa7507: + $p := 7507; + goto $bb1; +$aa7508: + $p := 7508; + goto $bb1; +$aa7509: + $p := 7509; + goto $bb1; +$aa7510: + $p := 7510; + goto $bb1; +$aa7511: + $p := 7511; + goto $bb1; +$aa7512: + $p := 7512; + goto $bb1; +$aa7513: + $p := 7513; + goto $bb1; +$aa7514: + $p := 7514; + goto $bb1; +$aa7515: + $p := 7515; + goto $bb1; +$aa7516: + $p := 7516; + goto $bb1; +$aa7517: + $p := 7517; + goto $bb1; +$aa7518: + $p := 7518; + goto $bb1; +$aa7519: + $p := 7519; + goto $bb1; +$aa7520: + $p := 7520; + goto $bb1; +$aa7521: + $p := 7521; + goto $bb1; +$aa7522: + $p := 7522; + goto $bb1; +$aa7523: + $p := 7523; + goto $bb1; +$aa7524: + $p := 7524; + goto $bb1; +$aa7525: + $p := 7525; + goto $bb1; +$aa7526: + $p := 7526; + goto $bb1; +$aa7527: + $p := 7527; + goto $bb1; +$aa7528: + $p := 7528; + goto $bb1; +$aa7529: + $p := 7529; + goto $bb1; +$aa7530: + $p := 7530; + goto $bb1; +$aa7531: + $p := 7531; + goto $bb1; +$aa7532: + $p := 7532; + goto $bb1; +$aa7533: + $p := 7533; + goto $bb1; +$aa7534: + $p := 7534; + goto $bb1; +$aa7535: + $p := 7535; + goto $bb1; +$aa7536: + $p := 7536; + goto $bb1; +$aa7537: + $p := 7537; + goto $bb1; +$aa7538: + $p := 7538; + goto $bb1; +$aa7539: + $p := 7539; + goto $bb1; +$aa7540: + $p := 7540; + goto $bb1; +$aa7541: + $p := 7541; + goto $bb1; +$aa7542: + $p := 7542; + goto $bb1; +$aa7543: + $p := 7543; + goto $bb1; +$aa7544: + $p := 7544; + goto $bb1; +$aa7545: + $p := 7545; + goto $bb1; +$aa7546: + $p := 7546; + goto $bb1; +$aa7547: + $p := 7547; + goto $bb1; +$aa7548: + $p := 7548; + goto $bb1; +$aa7549: + $p := 7549; + goto $bb1; +$aa7550: + $p := 7550; + goto $bb1; +$aa7551: + $p := 7551; + goto $bb1; +$aa7552: + $p := 7552; + goto $bb1; +$aa7553: + $p := 7553; + goto $bb1; +$aa7554: + $p := 7554; + goto $bb1; +$aa7555: + $p := 7555; + goto $bb1; +$aa7556: + $p := 7556; + goto $bb1; +$aa7557: + $p := 7557; + goto $bb1; +$aa7558: + $p := 7558; + goto $bb1; +$aa7559: + $p := 7559; + goto $bb1; +$aa7560: + $p := 7560; + goto $bb1; +$aa7561: + $p := 7561; + goto $bb1; +$aa7562: + $p := 7562; + goto $bb1; +$aa7563: + $p := 7563; + goto $bb1; +$aa7564: + $p := 7564; + goto $bb1; +$aa7565: + $p := 7565; + goto $bb1; +$aa7566: + $p := 7566; + goto $bb1; +$aa7567: + $p := 7567; + goto $bb1; +$aa7568: + $p := 7568; + goto $bb1; +$aa7569: + $p := 7569; + goto $bb1; +$aa7570: + $p := 7570; + goto $bb1; +$aa7571: + $p := 7571; + goto $bb1; +$aa7572: + $p := 7572; + goto $bb1; +$aa7573: + $p := 7573; + goto $bb1; +$aa7574: + $p := 7574; + goto $bb1; +$aa7575: + $p := 7575; + goto $bb1; +$aa7576: + $p := 7576; + goto $bb1; +$aa7577: + $p := 7577; + goto $bb1; +$aa7578: + $p := 7578; + goto $bb1; +$aa7579: + $p := 7579; + goto $bb1; +$aa7580: + $p := 7580; + goto $bb1; +$aa7581: + $p := 7581; + goto $bb1; +$aa7582: + $p := 7582; + goto $bb1; +$aa7583: + $p := 7583; + goto $bb1; +$aa7584: + $p := 7584; + goto $bb1; +$aa7585: + $p := 7585; + goto $bb1; +$aa7586: + $p := 7586; + goto $bb1; +$aa7587: + $p := 7587; + goto $bb1; +$aa7588: + $p := 7588; + goto $bb1; +$aa7589: + $p := 7589; + goto $bb1; +$aa7590: + $p := 7590; + goto $bb1; +$aa7591: + $p := 7591; + goto $bb1; +$aa7592: + $p := 7592; + goto $bb1; +$aa7593: + $p := 7593; + goto $bb1; +$aa7594: + $p := 7594; + goto $bb1; +$aa7595: + $p := 7595; + goto $bb1; +$aa7596: + $p := 7596; + goto $bb1; +$aa7597: + $p := 7597; + goto $bb1; +$aa7598: + $p := 7598; + goto $bb1; +$aa7599: + $p := 7599; + goto $bb1; +$aa7600: + $p := 7600; + goto $bb1; +$aa7601: + $p := 7601; + goto $bb1; +$aa7602: + $p := 7602; + goto $bb1; +$aa7603: + $p := 7603; + goto $bb1; +$aa7604: + $p := 7604; + goto $bb1; +$aa7605: + $p := 7605; + goto $bb1; +$aa7606: + $p := 7606; + goto $bb1; +$aa7607: + $p := 7607; + goto $bb1; +$aa7608: + $p := 7608; + goto $bb1; +$aa7609: + $p := 7609; + goto $bb1; +$aa7610: + $p := 7610; + goto $bb1; +$aa7611: + $p := 7611; + goto $bb1; +$aa7612: + $p := 7612; + goto $bb1; +$aa7613: + $p := 7613; + goto $bb1; +$aa7614: + $p := 7614; + goto $bb1; +$aa7615: + $p := 7615; + goto $bb1; +$aa7616: + $p := 7616; + goto $bb1; +$aa7617: + $p := 7617; + goto $bb1; +$aa7618: + $p := 7618; + goto $bb1; +$aa7619: + $p := 7619; + goto $bb1; +$aa7620: + $p := 7620; + goto $bb1; +$aa7621: + $p := 7621; + goto $bb1; +$aa7622: + $p := 7622; + goto $bb1; +$aa7623: + $p := 7623; + goto $bb1; +$aa7624: + $p := 7624; + goto $bb1; +$aa7625: + $p := 7625; + goto $bb1; +$aa7626: + $p := 7626; + goto $bb1; +$aa7627: + $p := 7627; + goto $bb1; +$aa7628: + $p := 7628; + goto $bb1; +$aa7629: + $p := 7629; + goto $bb1; +$aa7630: + $p := 7630; + goto $bb1; +$aa7631: + $p := 7631; + goto $bb1; +$aa7632: + $p := 7632; + goto $bb1; +$aa7633: + $p := 7633; + goto $bb1; +$aa7634: + $p := 7634; + goto $bb1; +$aa7635: + $p := 7635; + goto $bb1; +$aa7636: + $p := 7636; + goto $bb1; +$aa7637: + $p := 7637; + goto $bb1; +$aa7638: + $p := 7638; + goto $bb1; +$aa7639: + $p := 7639; + goto $bb1; +$aa7640: + $p := 7640; + goto $bb1; +$aa7641: + $p := 7641; + goto $bb1; +$aa7642: + $p := 7642; + goto $bb1; +$aa7643: + $p := 7643; + goto $bb1; +$aa7644: + $p := 7644; + goto $bb1; +$aa7645: + $p := 7645; + goto $bb1; +$aa7646: + $p := 7646; + goto $bb1; +$aa7647: + $p := 7647; + goto $bb1; +$aa7648: + $p := 7648; + goto $bb1; +$aa7649: + $p := 7649; + goto $bb1; +$aa7650: + $p := 7650; + goto $bb1; +$aa7651: + $p := 7651; + goto $bb1; +$aa7652: + $p := 7652; + goto $bb1; +$aa7653: + $p := 7653; + goto $bb1; +$aa7654: + $p := 7654; + goto $bb1; +$aa7655: + $p := 7655; + goto $bb1; +$aa7656: + $p := 7656; + goto $bb1; +$aa7657: + $p := 7657; + goto $bb1; +$aa7658: + $p := 7658; + goto $bb1; +$aa7659: + $p := 7659; + goto $bb1; +$aa7660: + $p := 7660; + goto $bb1; +$aa7661: + $p := 7661; + goto $bb1; +$aa7662: + $p := 7662; + goto $bb1; +$aa7663: + $p := 7663; + goto $bb1; +$aa7664: + $p := 7664; + goto $bb1; +$aa7665: + $p := 7665; + goto $bb1; +$aa7666: + $p := 7666; + goto $bb1; +$aa7667: + $p := 7667; + goto $bb1; +$aa7668: + $p := 7668; + goto $bb1; +$aa7669: + $p := 7669; + goto $bb1; +$aa7670: + $p := 7670; + goto $bb1; +$aa7671: + $p := 7671; + goto $bb1; +$aa7672: + $p := 7672; + goto $bb1; +$aa7673: + $p := 7673; + goto $bb1; +$aa7674: + $p := 7674; + goto $bb1; +$aa7675: + $p := 7675; + goto $bb1; +$aa7676: + $p := 7676; + goto $bb1; +$aa7677: + $p := 7677; + goto $bb1; +$aa7678: + $p := 7678; + goto $bb1; +$aa7679: + $p := 7679; + goto $bb1; +$aa7680: + $p := 7680; + goto $bb1; +$aa7681: + $p := 7681; + goto $bb1; +$aa7682: + $p := 7682; + goto $bb1; +$aa7683: + $p := 7683; + goto $bb1; +$aa7684: + $p := 7684; + goto $bb1; +$aa7685: + $p := 7685; + goto $bb1; +$aa7686: + $p := 7686; + goto $bb1; +$aa7687: + $p := 7687; + goto $bb1; +$aa7688: + $p := 7688; + goto $bb1; +$aa7689: + $p := 7689; + goto $bb1; +$aa7690: + $p := 7690; + goto $bb1; +$aa7691: + $p := 7691; + goto $bb1; +$aa7692: + $p := 7692; + goto $bb1; +$aa7693: + $p := 7693; + goto $bb1; +$aa7694: + $p := 7694; + goto $bb1; +$aa7695: + $p := 7695; + goto $bb1; +$aa7696: + $p := 7696; + goto $bb1; +$aa7697: + $p := 7697; + goto $bb1; +$aa7698: + $p := 7698; + goto $bb1; +$aa7699: + $p := 7699; + goto $bb1; +$aa7700: + $p := 7700; + goto $bb1; +$aa7701: + $p := 7701; + goto $bb1; +$aa7702: + $p := 7702; + goto $bb1; +$aa7703: + $p := 7703; + goto $bb1; +$aa7704: + $p := 7704; + goto $bb1; +$aa7705: + $p := 7705; + goto $bb1; +$aa7706: + $p := 7706; + goto $bb1; +$aa7707: + $p := 7707; + goto $bb1; +$aa7708: + $p := 7708; + goto $bb1; +$aa7709: + $p := 7709; + goto $bb1; +$aa7710: + $p := 7710; + goto $bb1; +$aa7711: + $p := 7711; + goto $bb1; +$aa7712: + $p := 7712; + goto $bb1; +$aa7713: + $p := 7713; + goto $bb1; +$aa7714: + $p := 7714; + goto $bb1; +$aa7715: + $p := 7715; + goto $bb1; +$aa7716: + $p := 7716; + goto $bb1; +$aa7717: + $p := 7717; + goto $bb1; +$aa7718: + $p := 7718; + goto $bb1; +$aa7719: + $p := 7719; + goto $bb1; +$aa7720: + $p := 7720; + goto $bb1; +$aa7721: + $p := 7721; + goto $bb1; +$aa7722: + $p := 7722; + goto $bb1; +$aa7723: + $p := 7723; + goto $bb1; +$aa7724: + $p := 7724; + goto $bb1; +$aa7725: + $p := 7725; + goto $bb1; +$aa7726: + $p := 7726; + goto $bb1; +$aa7727: + $p := 7727; + goto $bb1; +$aa7728: + $p := 7728; + goto $bb1; +$aa7729: + $p := 7729; + goto $bb1; +$aa7730: + $p := 7730; + goto $bb1; +$aa7731: + $p := 7731; + goto $bb1; +$aa7732: + $p := 7732; + goto $bb1; +$aa7733: + $p := 7733; + goto $bb1; +$aa7734: + $p := 7734; + goto $bb1; +$aa7735: + $p := 7735; + goto $bb1; +$aa7736: + $p := 7736; + goto $bb1; +$aa7737: + $p := 7737; + goto $bb1; +$aa7738: + $p := 7738; + goto $bb1; +$aa7739: + $p := 7739; + goto $bb1; +$aa7740: + $p := 7740; + goto $bb1; +$aa7741: + $p := 7741; + goto $bb1; +$aa7742: + $p := 7742; + goto $bb1; +$aa7743: + $p := 7743; + goto $bb1; +$aa7744: + $p := 7744; + goto $bb1; +$aa7745: + $p := 7745; + goto $bb1; +$aa7746: + $p := 7746; + goto $bb1; +$aa7747: + $p := 7747; + goto $bb1; +$aa7748: + $p := 7748; + goto $bb1; +$aa7749: + $p := 7749; + goto $bb1; +$aa7750: + $p := 7750; + goto $bb1; +$aa7751: + $p := 7751; + goto $bb1; +$aa7752: + $p := 7752; + goto $bb1; +$aa7753: + $p := 7753; + goto $bb1; +$aa7754: + $p := 7754; + goto $bb1; +$aa7755: + $p := 7755; + goto $bb1; +$aa7756: + $p := 7756; + goto $bb1; +$aa7757: + $p := 7757; + goto $bb1; +$aa7758: + $p := 7758; + goto $bb1; +$aa7759: + $p := 7759; + goto $bb1; +$aa7760: + $p := 7760; + goto $bb1; +$aa7761: + $p := 7761; + goto $bb1; +$aa7762: + $p := 7762; + goto $bb1; +$aa7763: + $p := 7763; + goto $bb1; +$aa7764: + $p := 7764; + goto $bb1; +$aa7765: + $p := 7765; + goto $bb1; +$aa7766: + $p := 7766; + goto $bb1; +$aa7767: + $p := 7767; + goto $bb1; +$aa7768: + $p := 7768; + goto $bb1; +$aa7769: + $p := 7769; + goto $bb1; +$aa7770: + $p := 7770; + goto $bb1; +$aa7771: + $p := 7771; + goto $bb1; +$aa7772: + $p := 7772; + goto $bb1; +$aa7773: + $p := 7773; + goto $bb1; +$aa7774: + $p := 7774; + goto $bb1; +$aa7775: + $p := 7775; + goto $bb1; +$aa7776: + $p := 7776; + goto $bb1; +$aa7777: + $p := 7777; + goto $bb1; +$aa7778: + $p := 7778; + goto $bb1; +$aa7779: + $p := 7779; + goto $bb1; +$aa7780: + $p := 7780; + goto $bb1; +$aa7781: + $p := 7781; + goto $bb1; +$aa7782: + $p := 7782; + goto $bb1; +$aa7783: + $p := 7783; + goto $bb1; +$aa7784: + $p := 7784; + goto $bb1; +$aa7785: + $p := 7785; + goto $bb1; +$aa7786: + $p := 7786; + goto $bb1; +$aa7787: + $p := 7787; + goto $bb1; +$aa7788: + $p := 7788; + goto $bb1; +$aa7789: + $p := 7789; + goto $bb1; +$aa7790: + $p := 7790; + goto $bb1; +$aa7791: + $p := 7791; + goto $bb1; +$aa7792: + $p := 7792; + goto $bb1; +$aa7793: + $p := 7793; + goto $bb1; +$aa7794: + $p := 7794; + goto $bb1; +$aa7795: + $p := 7795; + goto $bb1; +$aa7796: + $p := 7796; + goto $bb1; +$aa7797: + $p := 7797; + goto $bb1; +$aa7798: + $p := 7798; + goto $bb1; +$aa7799: + $p := 7799; + goto $bb1; +$aa7800: + $p := 7800; + goto $bb1; +$aa7801: + $p := 7801; + goto $bb1; +$aa7802: + $p := 7802; + goto $bb1; +$aa7803: + $p := 7803; + goto $bb1; +$aa7804: + $p := 7804; + goto $bb1; +$aa7805: + $p := 7805; + goto $bb1; +$aa7806: + $p := 7806; + goto $bb1; +$aa7807: + $p := 7807; + goto $bb1; +$aa7808: + $p := 7808; + goto $bb1; +$aa7809: + $p := 7809; + goto $bb1; +$aa7810: + $p := 7810; + goto $bb1; +$aa7811: + $p := 7811; + goto $bb1; +$aa7812: + $p := 7812; + goto $bb1; +$aa7813: + $p := 7813; + goto $bb1; +$aa7814: + $p := 7814; + goto $bb1; +$aa7815: + $p := 7815; + goto $bb1; +$aa7816: + $p := 7816; + goto $bb1; +$aa7817: + $p := 7817; + goto $bb1; +$aa7818: + $p := 7818; + goto $bb1; +$aa7819: + $p := 7819; + goto $bb1; +$aa7820: + $p := 7820; + goto $bb1; +$aa7821: + $p := 7821; + goto $bb1; +$aa7822: + $p := 7822; + goto $bb1; +$aa7823: + $p := 7823; + goto $bb1; +$aa7824: + $p := 7824; + goto $bb1; +$aa7825: + $p := 7825; + goto $bb1; +$aa7826: + $p := 7826; + goto $bb1; +$aa7827: + $p := 7827; + goto $bb1; +$aa7828: + $p := 7828; + goto $bb1; +$aa7829: + $p := 7829; + goto $bb1; +$aa7830: + $p := 7830; + goto $bb1; +$aa7831: + $p := 7831; + goto $bb1; +$aa7832: + $p := 7832; + goto $bb1; +$aa7833: + $p := 7833; + goto $bb1; +$aa7834: + $p := 7834; + goto $bb1; +$aa7835: + $p := 7835; + goto $bb1; +$aa7836: + $p := 7836; + goto $bb1; +$aa7837: + $p := 7837; + goto $bb1; +$aa7838: + $p := 7838; + goto $bb1; +$aa7839: + $p := 7839; + goto $bb1; +$aa7840: + $p := 7840; + goto $bb1; +$aa7841: + $p := 7841; + goto $bb1; +$aa7842: + $p := 7842; + goto $bb1; +$aa7843: + $p := 7843; + goto $bb1; +$aa7844: + $p := 7844; + goto $bb1; +$aa7845: + $p := 7845; + goto $bb1; +$aa7846: + $p := 7846; + goto $bb1; +$aa7847: + $p := 7847; + goto $bb1; +$aa7848: + $p := 7848; + goto $bb1; +$aa7849: + $p := 7849; + goto $bb1; +$aa7850: + $p := 7850; + goto $bb1; +$aa7851: + $p := 7851; + goto $bb1; +$aa7852: + $p := 7852; + goto $bb1; +$aa7853: + $p := 7853; + goto $bb1; +$aa7854: + $p := 7854; + goto $bb1; +$aa7855: + $p := 7855; + goto $bb1; +$aa7856: + $p := 7856; + goto $bb1; +$aa7857: + $p := 7857; + goto $bb1; +$aa7858: + $p := 7858; + goto $bb1; +$aa7859: + $p := 7859; + goto $bb1; +$aa7860: + $p := 7860; + goto $bb1; +$aa7861: + $p := 7861; + goto $bb1; +$aa7862: + $p := 7862; + goto $bb1; +$aa7863: + $p := 7863; + goto $bb1; +$aa7864: + $p := 7864; + goto $bb1; +$aa7865: + $p := 7865; + goto $bb1; +$aa7866: + $p := 7866; + goto $bb1; +$aa7867: + $p := 7867; + goto $bb1; +$aa7868: + $p := 7868; + goto $bb1; +$aa7869: + $p := 7869; + goto $bb1; +$aa7870: + $p := 7870; + goto $bb1; +$aa7871: + $p := 7871; + goto $bb1; +$aa7872: + $p := 7872; + goto $bb1; +$aa7873: + $p := 7873; + goto $bb1; +$aa7874: + $p := 7874; + goto $bb1; +$aa7875: + $p := 7875; + goto $bb1; +$aa7876: + $p := 7876; + goto $bb1; +$aa7877: + $p := 7877; + goto $bb1; +$aa7878: + $p := 7878; + goto $bb1; +$aa7879: + $p := 7879; + goto $bb1; +$aa7880: + $p := 7880; + goto $bb1; +$aa7881: + $p := 7881; + goto $bb1; +$aa7882: + $p := 7882; + goto $bb1; +$aa7883: + $p := 7883; + goto $bb1; +$aa7884: + $p := 7884; + goto $bb1; +$aa7885: + $p := 7885; + goto $bb1; +$aa7886: + $p := 7886; + goto $bb1; +$aa7887: + $p := 7887; + goto $bb1; +$aa7888: + $p := 7888; + goto $bb1; +$aa7889: + $p := 7889; + goto $bb1; +$aa7890: + $p := 7890; + goto $bb1; +$aa7891: + $p := 7891; + goto $bb1; +$aa7892: + $p := 7892; + goto $bb1; +$aa7893: + $p := 7893; + goto $bb1; +$aa7894: + $p := 7894; + goto $bb1; +$aa7895: + $p := 7895; + goto $bb1; +$aa7896: + $p := 7896; + goto $bb1; +$aa7897: + $p := 7897; + goto $bb1; +$aa7898: + $p := 7898; + goto $bb1; +$aa7899: + $p := 7899; + goto $bb1; +$aa7900: + $p := 7900; + goto $bb1; +$aa7901: + $p := 7901; + goto $bb1; +$aa7902: + $p := 7902; + goto $bb1; +$aa7903: + $p := 7903; + goto $bb1; +$aa7904: + $p := 7904; + goto $bb1; +$aa7905: + $p := 7905; + goto $bb1; +$aa7906: + $p := 7906; + goto $bb1; +$aa7907: + $p := 7907; + goto $bb1; +$aa7908: + $p := 7908; + goto $bb1; +$aa7909: + $p := 7909; + goto $bb1; +$aa7910: + $p := 7910; + goto $bb1; +$aa7911: + $p := 7911; + goto $bb1; +$aa7912: + $p := 7912; + goto $bb1; +$aa7913: + $p := 7913; + goto $bb1; +$aa7914: + $p := 7914; + goto $bb1; +$aa7915: + $p := 7915; + goto $bb1; +$aa7916: + $p := 7916; + goto $bb1; +$aa7917: + $p := 7917; + goto $bb1; +$aa7918: + $p := 7918; + goto $bb1; +$aa7919: + $p := 7919; + goto $bb1; +$aa7920: + $p := 7920; + goto $bb1; +$aa7921: + $p := 7921; + goto $bb1; +$aa7922: + $p := 7922; + goto $bb1; +$aa7923: + $p := 7923; + goto $bb1; +$aa7924: + $p := 7924; + goto $bb1; +$aa7925: + $p := 7925; + goto $bb1; +$aa7926: + $p := 7926; + goto $bb1; +$aa7927: + $p := 7927; + goto $bb1; +$aa7928: + $p := 7928; + goto $bb1; +$aa7929: + $p := 7929; + goto $bb1; +$aa7930: + $p := 7930; + goto $bb1; +$aa7931: + $p := 7931; + goto $bb1; +$aa7932: + $p := 7932; + goto $bb1; +$aa7933: + $p := 7933; + goto $bb1; +$aa7934: + $p := 7934; + goto $bb1; +$aa7935: + $p := 7935; + goto $bb1; +$aa7936: + $p := 7936; + goto $bb1; +$aa7937: + $p := 7937; + goto $bb1; +$aa7938: + $p := 7938; + goto $bb1; +$aa7939: + $p := 7939; + goto $bb1; +$aa7940: + $p := 7940; + goto $bb1; +$aa7941: + $p := 7941; + goto $bb1; +$aa7942: + $p := 7942; + goto $bb1; +$aa7943: + $p := 7943; + goto $bb1; +$aa7944: + $p := 7944; + goto $bb1; +$aa7945: + $p := 7945; + goto $bb1; +$aa7946: + $p := 7946; + goto $bb1; +$aa7947: + $p := 7947; + goto $bb1; +$aa7948: + $p := 7948; + goto $bb1; +$aa7949: + $p := 7949; + goto $bb1; +$aa7950: + $p := 7950; + goto $bb1; +$aa7951: + $p := 7951; + goto $bb1; +$aa7952: + $p := 7952; + goto $bb1; +$aa7953: + $p := 7953; + goto $bb1; +$aa7954: + $p := 7954; + goto $bb1; +$aa7955: + $p := 7955; + goto $bb1; +$aa7956: + $p := 7956; + goto $bb1; +$aa7957: + $p := 7957; + goto $bb1; +$aa7958: + $p := 7958; + goto $bb1; +$aa7959: + $p := 7959; + goto $bb1; +$aa7960: + $p := 7960; + goto $bb1; +$aa7961: + $p := 7961; + goto $bb1; +$aa7962: + $p := 7962; + goto $bb1; +$aa7963: + $p := 7963; + goto $bb1; +$aa7964: + $p := 7964; + goto $bb1; +$aa7965: + $p := 7965; + goto $bb1; +$aa7966: + $p := 7966; + goto $bb1; +$aa7967: + $p := 7967; + goto $bb1; +$aa7968: + $p := 7968; + goto $bb1; +$aa7969: + $p := 7969; + goto $bb1; +$aa7970: + $p := 7970; + goto $bb1; +$aa7971: + $p := 7971; + goto $bb1; +$aa7972: + $p := 7972; + goto $bb1; +$aa7973: + $p := 7973; + goto $bb1; +$aa7974: + $p := 7974; + goto $bb1; +$aa7975: + $p := 7975; + goto $bb1; +$aa7976: + $p := 7976; + goto $bb1; +$aa7977: + $p := 7977; + goto $bb1; +$aa7978: + $p := 7978; + goto $bb1; +$aa7979: + $p := 7979; + goto $bb1; +$aa7980: + $p := 7980; + goto $bb1; +$aa7981: + $p := 7981; + goto $bb1; +$aa7982: + $p := 7982; + goto $bb1; +$aa7983: + $p := 7983; + goto $bb1; +$aa7984: + $p := 7984; + goto $bb1; +$aa7985: + $p := 7985; + goto $bb1; +$aa7986: + $p := 7986; + goto $bb1; +$aa7987: + $p := 7987; + goto $bb1; +$aa7988: + $p := 7988; + goto $bb1; +$aa7989: + $p := 7989; + goto $bb1; +$aa7990: + $p := 7990; + goto $bb1; +$aa7991: + $p := 7991; + goto $bb1; +$aa7992: + $p := 7992; + goto $bb1; +$aa7993: + $p := 7993; + goto $bb1; +$aa7994: + $p := 7994; + goto $bb1; +$aa7995: + $p := 7995; + goto $bb1; +$aa7996: + $p := 7996; + goto $bb1; +$aa7997: + $p := 7997; + goto $bb1; +$aa7998: + $p := 7998; + goto $bb1; +$aa7999: + $p := 7999; + goto $bb1; +$aa8000: + $p := 8000; + goto $bb1; +$aa8001: + $p := 8001; + goto $bb1; +$aa8002: + $p := 8002; + goto $bb1; +$aa8003: + $p := 8003; + goto $bb1; +$aa8004: + $p := 8004; + goto $bb1; +$aa8005: + $p := 8005; + goto $bb1; +$aa8006: + $p := 8006; + goto $bb1; +$aa8007: + $p := 8007; + goto $bb1; +$aa8008: + $p := 8008; + goto $bb1; +$aa8009: + $p := 8009; + goto $bb1; +$aa8010: + $p := 8010; + goto $bb1; +$aa8011: + $p := 8011; + goto $bb1; +$aa8012: + $p := 8012; + goto $bb1; +$aa8013: + $p := 8013; + goto $bb1; +$aa8014: + $p := 8014; + goto $bb1; +$aa8015: + $p := 8015; + goto $bb1; +$aa8016: + $p := 8016; + goto $bb1; +$aa8017: + $p := 8017; + goto $bb1; +$aa8018: + $p := 8018; + goto $bb1; +$aa8019: + $p := 8019; + goto $bb1; +$aa8020: + $p := 8020; + goto $bb1; +$aa8021: + $p := 8021; + goto $bb1; +$aa8022: + $p := 8022; + goto $bb1; +$aa8023: + $p := 8023; + goto $bb1; +$aa8024: + $p := 8024; + goto $bb1; +$aa8025: + $p := 8025; + goto $bb1; +$aa8026: + $p := 8026; + goto $bb1; +$aa8027: + $p := 8027; + goto $bb1; +$aa8028: + $p := 8028; + goto $bb1; +$aa8029: + $p := 8029; + goto $bb1; +$aa8030: + $p := 8030; + goto $bb1; +$aa8031: + $p := 8031; + goto $bb1; +$aa8032: + $p := 8032; + goto $bb1; +$aa8033: + $p := 8033; + goto $bb1; +$aa8034: + $p := 8034; + goto $bb1; +$aa8035: + $p := 8035; + goto $bb1; +$aa8036: + $p := 8036; + goto $bb1; +$aa8037: + $p := 8037; + goto $bb1; +$aa8038: + $p := 8038; + goto $bb1; +$aa8039: + $p := 8039; + goto $bb1; +$aa8040: + $p := 8040; + goto $bb1; +$aa8041: + $p := 8041; + goto $bb1; +$aa8042: + $p := 8042; + goto $bb1; +$aa8043: + $p := 8043; + goto $bb1; +$aa8044: + $p := 8044; + goto $bb1; +$aa8045: + $p := 8045; + goto $bb1; +$aa8046: + $p := 8046; + goto $bb1; +$aa8047: + $p := 8047; + goto $bb1; +$aa8048: + $p := 8048; + goto $bb1; +$aa8049: + $p := 8049; + goto $bb1; +$aa8050: + $p := 8050; + goto $bb1; +$aa8051: + $p := 8051; + goto $bb1; +$aa8052: + $p := 8052; + goto $bb1; +$aa8053: + $p := 8053; + goto $bb1; +$aa8054: + $p := 8054; + goto $bb1; +$aa8055: + $p := 8055; + goto $bb1; +$aa8056: + $p := 8056; + goto $bb1; +$aa8057: + $p := 8057; + goto $bb1; +$aa8058: + $p := 8058; + goto $bb1; +$aa8059: + $p := 8059; + goto $bb1; +$aa8060: + $p := 8060; + goto $bb1; +$aa8061: + $p := 8061; + goto $bb1; +$aa8062: + $p := 8062; + goto $bb1; +$aa8063: + $p := 8063; + goto $bb1; +$aa8064: + $p := 8064; + goto $bb1; +$aa8065: + $p := 8065; + goto $bb1; +$aa8066: + $p := 8066; + goto $bb1; +$aa8067: + $p := 8067; + goto $bb1; +$aa8068: + $p := 8068; + goto $bb1; +$aa8069: + $p := 8069; + goto $bb1; +$aa8070: + $p := 8070; + goto $bb1; +$aa8071: + $p := 8071; + goto $bb1; +$aa8072: + $p := 8072; + goto $bb1; +$aa8073: + $p := 8073; + goto $bb1; +$aa8074: + $p := 8074; + goto $bb1; +$aa8075: + $p := 8075; + goto $bb1; +$aa8076: + $p := 8076; + goto $bb1; +$aa8077: + $p := 8077; + goto $bb1; +$aa8078: + $p := 8078; + goto $bb1; +$aa8079: + $p := 8079; + goto $bb1; +$aa8080: + $p := 8080; + goto $bb1; +$aa8081: + $p := 8081; + goto $bb1; +$aa8082: + $p := 8082; + goto $bb1; +$aa8083: + $p := 8083; + goto $bb1; +$aa8084: + $p := 8084; + goto $bb1; +$aa8085: + $p := 8085; + goto $bb1; +$aa8086: + $p := 8086; + goto $bb1; +$aa8087: + $p := 8087; + goto $bb1; +$aa8088: + $p := 8088; + goto $bb1; +$aa8089: + $p := 8089; + goto $bb1; +$aa8090: + $p := 8090; + goto $bb1; +$aa8091: + $p := 8091; + goto $bb1; +$aa8092: + $p := 8092; + goto $bb1; +$aa8093: + $p := 8093; + goto $bb1; +$aa8094: + $p := 8094; + goto $bb1; +$aa8095: + $p := 8095; + goto $bb1; +$aa8096: + $p := 8096; + goto $bb1; +$aa8097: + $p := 8097; + goto $bb1; +$aa8098: + $p := 8098; + goto $bb1; +$aa8099: + $p := 8099; + goto $bb1; +$aa8100: + $p := 8100; + goto $bb1; +$aa8101: + $p := 8101; + goto $bb1; +$aa8102: + $p := 8102; + goto $bb1; +$aa8103: + $p := 8103; + goto $bb1; +$aa8104: + $p := 8104; + goto $bb1; +$aa8105: + $p := 8105; + goto $bb1; +$aa8106: + $p := 8106; + goto $bb1; +$aa8107: + $p := 8107; + goto $bb1; +$aa8108: + $p := 8108; + goto $bb1; +$aa8109: + $p := 8109; + goto $bb1; +$aa8110: + $p := 8110; + goto $bb1; +$aa8111: + $p := 8111; + goto $bb1; +$aa8112: + $p := 8112; + goto $bb1; +$aa8113: + $p := 8113; + goto $bb1; +$aa8114: + $p := 8114; + goto $bb1; +$aa8115: + $p := 8115; + goto $bb1; +$aa8116: + $p := 8116; + goto $bb1; +$aa8117: + $p := 8117; + goto $bb1; +$aa8118: + $p := 8118; + goto $bb1; +$aa8119: + $p := 8119; + goto $bb1; +$aa8120: + $p := 8120; + goto $bb1; +$aa8121: + $p := 8121; + goto $bb1; +$aa8122: + $p := 8122; + goto $bb1; +$aa8123: + $p := 8123; + goto $bb1; +$aa8124: + $p := 8124; + goto $bb1; +$aa8125: + $p := 8125; + goto $bb1; +$aa8126: + $p := 8126; + goto $bb1; +$aa8127: + $p := 8127; + goto $bb1; +$aa8128: + $p := 8128; + goto $bb1; +$aa8129: + $p := 8129; + goto $bb1; +$aa8130: + $p := 8130; + goto $bb1; +$aa8131: + $p := 8131; + goto $bb1; +$aa8132: + $p := 8132; + goto $bb1; +$aa8133: + $p := 8133; + goto $bb1; +$aa8134: + $p := 8134; + goto $bb1; +$aa8135: + $p := 8135; + goto $bb1; +$aa8136: + $p := 8136; + goto $bb1; +$aa8137: + $p := 8137; + goto $bb1; +$aa8138: + $p := 8138; + goto $bb1; +$aa8139: + $p := 8139; + goto $bb1; +$aa8140: + $p := 8140; + goto $bb1; +$aa8141: + $p := 8141; + goto $bb1; +$aa8142: + $p := 8142; + goto $bb1; +$aa8143: + $p := 8143; + goto $bb1; +$aa8144: + $p := 8144; + goto $bb1; +$aa8145: + $p := 8145; + goto $bb1; +$aa8146: + $p := 8146; + goto $bb1; +$aa8147: + $p := 8147; + goto $bb1; +$aa8148: + $p := 8148; + goto $bb1; +$aa8149: + $p := 8149; + goto $bb1; +$aa8150: + $p := 8150; + goto $bb1; +$aa8151: + $p := 8151; + goto $bb1; +$aa8152: + $p := 8152; + goto $bb1; +$aa8153: + $p := 8153; + goto $bb1; +$aa8154: + $p := 8154; + goto $bb1; +$aa8155: + $p := 8155; + goto $bb1; +$aa8156: + $p := 8156; + goto $bb1; +$aa8157: + $p := 8157; + goto $bb1; +$aa8158: + $p := 8158; + goto $bb1; +$aa8159: + $p := 8159; + goto $bb1; +$aa8160: + $p := 8160; + goto $bb1; +$aa8161: + $p := 8161; + goto $bb1; +$aa8162: + $p := 8162; + goto $bb1; +$aa8163: + $p := 8163; + goto $bb1; +$aa8164: + $p := 8164; + goto $bb1; +$aa8165: + $p := 8165; + goto $bb1; +$aa8166: + $p := 8166; + goto $bb1; +$aa8167: + $p := 8167; + goto $bb1; +$aa8168: + $p := 8168; + goto $bb1; +$aa8169: + $p := 8169; + goto $bb1; +$aa8170: + $p := 8170; + goto $bb1; +$aa8171: + $p := 8171; + goto $bb1; +$aa8172: + $p := 8172; + goto $bb1; +$aa8173: + $p := 8173; + goto $bb1; +$aa8174: + $p := 8174; + goto $bb1; +$aa8175: + $p := 8175; + goto $bb1; +$aa8176: + $p := 8176; + goto $bb1; +$aa8177: + $p := 8177; + goto $bb1; +$aa8178: + $p := 8178; + goto $bb1; +$aa8179: + $p := 8179; + goto $bb1; +$aa8180: + $p := 8180; + goto $bb1; +$aa8181: + $p := 8181; + goto $bb1; +$aa8182: + $p := 8182; + goto $bb1; +$aa8183: + $p := 8183; + goto $bb1; +$aa8184: + $p := 8184; + goto $bb1; +$aa8185: + $p := 8185; + goto $bb1; +$aa8186: + $p := 8186; + goto $bb1; +$aa8187: + $p := 8187; + goto $bb1; +$aa8188: + $p := 8188; + goto $bb1; +$aa8189: + $p := 8189; + goto $bb1; +$aa8190: + $p := 8190; + goto $bb1; +$aa8191: + $p := 8191; + goto $bb1; +$aa8192: + $p := 8192; + goto $bb1; +$bb1: + assert b0($p); + //$b := $sge($p, $p1); + goto $bb2, $bb3; +$bb2: + $p6 := $add(1, $p); + $p := $p6; + goto $bb1; +$bb3: + $c1 := ($p > 0); + assert $c1; + return; +} + +procedure __VERIFIER_assert#1(p0: int) + returns ($r: int) ; + modifies alloc, $CurrAddr; diff --git a/bench_horn_mcmc/abdu_01/config b/bench_horn_mcmc/abdu_01/config new file mode 100644 index 000000000..d6adcb786 --- /dev/null +++ b/bench_horn_mcmc/abdu_01/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +5 +-2 -1 0 1 2 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/abdu_01/first.xml b/bench_horn_mcmc/abdu_01/first.xml new file mode 100644 index 000000000..de7bbe4c0 --- /dev/null +++ b/bench_horn_mcmc/abdu_01/first.xml @@ -0,0 +1,98 @@ + + + + + 3 + inv + + + + x + x1 + y + y1 + len + + + + x + y + len + + + + + x + 0 + + + + + y + 0 + + + + + len + 0 + + + + + + + x + y + len + + + x1 + y1 + len + + + + + x + len + + + + + x1 + + x + 1 + + + + + + y1 + + y + 2 + + + + + + + + x + y + len + + + + y + + 2 + x + + + + + + diff --git a/bench_horn_mcmc/abdu_02/config b/bench_horn_mcmc/abdu_02/config new file mode 100644 index 000000000..d6adcb786 --- /dev/null +++ b/bench_horn_mcmc/abdu_02/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +5 +-2 -1 0 1 2 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/abdu_02/first.xml b/bench_horn_mcmc/abdu_02/first.xml new file mode 100644 index 000000000..b6340a353 --- /dev/null +++ b/bench_horn_mcmc/abdu_02/first.xml @@ -0,0 +1,104 @@ + + + + + 3 + inv + + + + x + x1 + y + y1 + len + + + + x + y + len + + + + + x + 0 + + + + + y + 0 + + + + + len + 0 + + + + + + + x + y + len + + + x1 + y1 + len + + + + + x + len + + + + + x1 + + x + 1 + + + + + + y1 + + y + 2 + + + + + + + + x + y + len + + + + + x + len + + + + y + + 2 + len + + + + + + diff --git a/bench_horn_mcmc/abdu_03/config b/bench_horn_mcmc/abdu_03/config new file mode 100644 index 000000000..7f5bac4ff --- /dev/null +++ b/bench_horn_mcmc/abdu_03/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +7 +-3 -2 -1 0 1 2 3 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/abdu_03/first.xml b/bench_horn_mcmc/abdu_03/first.xml new file mode 100644 index 000000000..46ff0975a --- /dev/null +++ b/bench_horn_mcmc/abdu_03/first.xml @@ -0,0 +1,107 @@ + + + + + 3 + inv + + + + x + x1 + y + y1 + len + + + + x + y + len + + + + + x + 0 + + + + + y + 0 + + + + + len + 0 + + + + + + + x + y + len + + + x1 + y1 + len + + + + + x + len + + + + + x1 + + x + 1 + + + + + + y1 + + y + 2 + + + + + + + + x + y + len + + + + + x + len + + + + + x + y + + + 3 + len + + + + + + diff --git a/bench_horn_mcmc/bouncy_two_counters_merged/config b/bench_horn_mcmc/bouncy_two_counters_merged/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/bouncy_two_counters_merged/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/bouncy_two_counters_merged/first.xml b/bench_horn_mcmc/bouncy_two_counters_merged/first.xml new file mode 100644 index 000000000..e741fd84b --- /dev/null +++ b/bench_horn_mcmc/bouncy_two_counters_merged/first.xml @@ -0,0 +1,132 @@ + + + + + 3 + itp1 + + + + x1 + y1 + z1 + x2 + y2 + z2 + + + + x1 + y1 + z1 + + + + + x1 + 0 + + + + + y1 + 0 + + + + + z1 + 0 + + + + + + + x1 + y1 + z1 + + + x2 + y2 + z2 + + + + + + + x2 + + x1 + 1 + + + + + + y2 + y1 + + + + + z2 + + z1 + 1 + + + + + + + + y2 + + y1 + 1 + + + + + + x2 + x1 + + + + + z2 + + z1 + 1 + + + + + + + + + + x1 + y1 + z1 + + + + + x1 + y1 + + + + z1 + 0 + + + + + diff --git a/bench_horn_mcmc/cegar1/config b/bench_horn_mcmc/cegar1/config new file mode 100644 index 000000000..e3206a470 --- /dev/null +++ b/bench_horn_mcmc/cegar1/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +5 +-4 -2 0 2 4 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/cegar1/first.xml b/bench_horn_mcmc/cegar1/first.xml new file mode 100644 index 000000000..bfd2a0c4c --- /dev/null +++ b/bench_horn_mcmc/cegar1/first.xml @@ -0,0 +1,100 @@ + + + + + 2 + inv + + + + x1 + x2 + x3 + x4 + x5 + x6 + + + + x1 + x3 + + + + + x1 + 0 + + + + + x1 + 2 + + + + + x3 + 0 + + + + + x3 + 2 + + + + + + + x1 + x3 + + + x2 + x4 + + + + + x2 + + x1 + 2 + + + + + + x4 + + x3 + 2 + + + + + + + + x1 + x3 + + + + + x1 + 4 + + + + + x3 + 0 + + + + + + diff --git a/bench_horn_mcmc/cegar2/config b/bench_horn_mcmc/cegar2/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/cegar2/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/cegar2/first.xml b/bench_horn_mcmc/cegar2/first.xml new file mode 100644 index 000000000..54443600e --- /dev/null +++ b/bench_horn_mcmc/cegar2/first.xml @@ -0,0 +1,95 @@ + + + + + 2 + inv + + + + x1 + x2 + x3 + x4 + x5 + x6 + + + + x1 + x3 + + + + + x1 + 0 + + + + + x3 + 0 + + + + + + + x1 + x3 + + + x2 + x4 + + + + + x2 + + x1 + 1 + + + + + + + x4 + x3 + + + + + x4 + x2 + + + + + + + + x1 + x3 + + + + x1 + 0 + + + + 0 + x3 + + + x3 + x1 + + + + + + diff --git a/bench_horn_mcmc/cggmp_iter_1/config b/bench_horn_mcmc/cggmp_iter_1/config new file mode 100644 index 000000000..2ac6a997d --- /dev/null +++ b/bench_horn_mcmc/cggmp_iter_1/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +4 +-2 -1 1 2 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/cggmp_iter_1/first.xml b/bench_horn_mcmc/cggmp_iter_1/first.xml new file mode 100644 index 000000000..7104ee072 --- /dev/null +++ b/bench_horn_mcmc/cggmp_iter_1/first.xml @@ -0,0 +1,90 @@ + + + + + 2 + inv + + + + i1 + i2 + j1 + j2 + + + + i1 + j1 + + + + + i1 + 1 + + + + + j1 + 2 + + + + + + + i1 + j1 + + + i2 + j2 + + + + + j1 + i1 + + + + + i2 + + i1 + 2 + + + + + + j2 + + j1 + 1 + + + + + + + + i1 + j1 + + + + + j1 + i1 + + + + j1 + 1 + + + + + diff --git a/bench_horn_mcmc/cggmp_iter_2/config b/bench_horn_mcmc/cggmp_iter_2/config new file mode 100644 index 000000000..eabddeadf --- /dev/null +++ b/bench_horn_mcmc/cggmp_iter_2/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +6 +-4 -2 -1 1 2 4 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/cggmp_iter_2/first.xml b/bench_horn_mcmc/cggmp_iter_2/first.xml new file mode 100644 index 000000000..295e156f6 --- /dev/null +++ b/bench_horn_mcmc/cggmp_iter_2/first.xml @@ -0,0 +1,90 @@ + + + + + 2 + inv + + + + i1 + i2 + j1 + j2 + + + + i1 + j1 + + + + + i1 + 1 + + + + + j1 + 4 + + + + + + + i1 + j1 + + + i2 + j2 + + + + + j1 + i1 + + + + + i2 + + i1 + 2 + + + + + + j2 + + j1 + 1 + + + + + + + + i1 + j1 + + + + + j1 + i1 + + + + j1 + 2 + + + + + diff --git a/bench_horn_mcmc/cggmp_iter_3/config b/bench_horn_mcmc/cggmp_iter_3/config new file mode 100644 index 000000000..4b5b24430 --- /dev/null +++ b/bench_horn_mcmc/cggmp_iter_3/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +8 +-6 -4 -2 -1 1 2 4 6 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/cggmp_iter_3/first.xml b/bench_horn_mcmc/cggmp_iter_3/first.xml new file mode 100644 index 000000000..c3251ebec --- /dev/null +++ b/bench_horn_mcmc/cggmp_iter_3/first.xml @@ -0,0 +1,90 @@ + + + + + 2 + inv + + + + i1 + i2 + j1 + j2 + + + + i1 + j1 + + + + + i1 + 1 + + + + + j1 + 6 + + + + + + + i1 + j1 + + + i2 + j2 + + + + + j1 + i1 + + + + + i2 + + i1 + 2 + + + + + + j2 + + j1 + 1 + + + + + + + + i1 + j1 + + + + + j1 + i1 + + + + j1 + 4 + + + + + diff --git a/bench_horn_mcmc/const_div_1/config b/bench_horn_mcmc/const_div_1/config new file mode 100644 index 000000000..d6adcb786 --- /dev/null +++ b/bench_horn_mcmc/const_div_1/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +5 +-2 -1 0 1 2 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/const_div_1/first.xml b/bench_horn_mcmc/const_div_1/first.xml new file mode 100644 index 000000000..cf6648219 --- /dev/null +++ b/bench_horn_mcmc/const_div_1/first.xml @@ -0,0 +1,81 @@ + + + + + 2 + inv + + + + i + i1 + j + j1 + + + + i + j + + + + + i + 2 + + + + + j + 1 + + + + + + + i + j + + + i1 + j1 + + + + + i1 + + i + 2 + + + + + + j1 + + j + 1 + + + + + + + + i + j + + + +
+ i + 2 +
+ j +
+
+
+
+ diff --git a/bench_horn_mcmc/const_div_2/config b/bench_horn_mcmc/const_div_2/config new file mode 100644 index 000000000..3eff0aeb1 --- /dev/null +++ b/bench_horn_mcmc/const_div_2/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +5 +-7610 -1 0 1 7610 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/const_div_2/first.xml b/bench_horn_mcmc/const_div_2/first.xml new file mode 100644 index 000000000..b0f7850fb --- /dev/null +++ b/bench_horn_mcmc/const_div_2/first.xml @@ -0,0 +1,81 @@ + + + + + 2 + inv + + + + i + i1 + j + j1 + + + + i + j + + + + + i + 7610 + + + + + j + 1 + + + + + + + i + j + + + i1 + j1 + + + + + i1 + + i + 7610 + + + + + + j1 + + j + 1 + + + + + + + + i + j + + + +
+ i + 7610 +
+ j +
+
+
+
+ diff --git a/bench_horn_mcmc/const_div_mod/config b/bench_horn_mcmc/const_div_mod/config new file mode 100644 index 000000000..d6adcb786 --- /dev/null +++ b/bench_horn_mcmc/const_div_mod/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +5 +-2 -1 0 1 2 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/const_div_mod/first.xml b/bench_horn_mcmc/const_div_mod/first.xml new file mode 100644 index 000000000..9fc523d93 --- /dev/null +++ b/bench_horn_mcmc/const_div_mod/first.xml @@ -0,0 +1,87 @@ + + + + + 2 + inv + + + + i + i1 + j + j1 + + + + i + j + + + + + i + j + + + + + + + i + j + + + i1 + j + + + + + i + 0 + + + + + + i + 2 + + 0 + + + + + i1 +
+ i + 2 +
+
+
+
+
+ + + i + j + + + + + i + 0 + + + + + j + 2 + + 0 + + + +
+ diff --git a/bench_horn_mcmc/const_false-unreach-call1.c/config b/bench_horn_mcmc/const_false-unreach-call1.c/config new file mode 100644 index 000000000..3d057dd12 --- /dev/null +++ b/bench_horn_mcmc/const_false-unreach-call1.c/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +5 +-1024 -1 0 1 1024 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/const_false-unreach-call1.c/first.xml b/bench_horn_mcmc/const_false-unreach-call1.c/first.xml new file mode 100644 index 000000000..5f95ad577 --- /dev/null +++ b/bench_horn_mcmc/const_false-unreach-call1.c/first.xml @@ -0,0 +1,99 @@ + + + + + 2 + itp + + + + x + x_ + y + y_ + + + + y + x + + + + + y + 0 + + + + + x + 1 + + + + + + + y_ + x_ + + + y + x + + + + + y_ + 0 + + + + + y_ + 1024 + + + + + y + + 1 + y_ + + + + + + x + 0 + + + + + + + y_ + x_ + + + + + y_ + 0 + + + + + y_ + 1024 + + + + x_ + 1 + + + + + diff --git a/bench_horn_mcmc/count_by_1_true-unreach-call_true-termination.c/config b/bench_horn_mcmc/count_by_1_true-unreach-call_true-termination.c/config new file mode 100644 index 000000000..3a13bfd83 --- /dev/null +++ b/bench_horn_mcmc/count_by_1_true-unreach-call_true-termination.c/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +5 +-10000 -1 0 1 10000 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/count_by_1_true-unreach-call_true-termination.c/first.xml b/bench_horn_mcmc/count_by_1_true-unreach-call_true-termination.c/first.xml new file mode 100644 index 000000000..e236c4376 --- /dev/null +++ b/bench_horn_mcmc/count_by_1_true-unreach-call_true-termination.c/first.xml @@ -0,0 +1,70 @@ + + + + + 2 + itp + + + + i + i_ + LRG + + + + i + LRG + + + + + i + 0 + + + + + + + i_ + LRG + + + i + LRG + + + + + i_ + LRG + + + + + i + + 1 + i_ + + + + + + + + LRG + LRG + + + + + LRG + 10000 + + + + + + diff --git a/bench_horn_mcmc/count_by_1_variant_true-unreach-call_true-termination/config b/bench_horn_mcmc/count_by_1_variant_true-unreach-call_true-termination/config new file mode 100644 index 000000000..3a13bfd83 --- /dev/null +++ b/bench_horn_mcmc/count_by_1_variant_true-unreach-call_true-termination/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +5 +-10000 -1 0 1 10000 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/count_by_1_variant_true-unreach-call_true-termination/first.xml b/bench_horn_mcmc/count_by_1_variant_true-unreach-call_true-termination/first.xml new file mode 100644 index 000000000..dc1c275d3 --- /dev/null +++ b/bench_horn_mcmc/count_by_1_variant_true-unreach-call_true-termination/first.xml @@ -0,0 +1,78 @@ + + + + + 2 + itp + + + + i + i_ + LRG + + + + i + LRG + + + + + i + 0 + + + + i + LRG + + + + + + i_ + LRG + + + i + LRG + + + + + i + + 1 + i_ + + + + + i + LRG + + + + + + i + LRG + + + + + i + LRG + + + + + LRG + 10000 + + + + + + diff --git a/bench_horn_mcmc/count_by_2_true-unreach-call_true-termination/config b/bench_horn_mcmc/count_by_2_true-unreach-call_true-termination/config new file mode 100644 index 000000000..46ee2c791 --- /dev/null +++ b/bench_horn_mcmc/count_by_2_true-unreach-call_true-termination/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +5 +-256 -2 0 2 256 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/count_by_2_true-unreach-call_true-termination/first.xml b/bench_horn_mcmc/count_by_2_true-unreach-call_true-termination/first.xml new file mode 100644 index 000000000..e847d3163 --- /dev/null +++ b/bench_horn_mcmc/count_by_2_true-unreach-call_true-termination/first.xml @@ -0,0 +1,80 @@ + + + + + 2 + itp + + + + i + i_ + LRG + + + + i + LRG + + + + + i + 0 + + + + + + + i_ + LRG + + + i + LRG + + + + + i_ + LRG + + + + + i + + i_ + 2 + + + + + + + + i + LRG + + + + + i + LRG + + + + i + LRG + + + + LRG + 256 + + + + + + diff --git a/bench_horn_mcmc/count_by_k_true-unreach-call_true-termination_bound/config b/bench_horn_mcmc/count_by_k_true-unreach-call_true-termination_bound/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/count_by_k_true-unreach-call_true-termination_bound/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/count_by_k_true-unreach-call_true-termination_bound/first.xml b/bench_horn_mcmc/count_by_k_true-unreach-call_true-termination_bound/first.xml new file mode 100644 index 000000000..7130ce607 --- /dev/null +++ b/bench_horn_mcmc/count_by_k_true-unreach-call_true-termination_bound/first.xml @@ -0,0 +1,98 @@ + + + + + 3 + itp + + + + i + i_ + k + LRG + + + + i + k + LRG + + + + + 0 + k + + + + + LRG + 0 + + + + + i + 0 + + + + + + + i_ + k + LRG + + + i + k + LRG + + + + + i_ + + LRG + k + + + + + + i + + i_ + k + + + + + + + + i + k + LRG + + + + i + + LRG + k + + + + i + + LRG + k + + + + + + diff --git a/bench_horn_mcmc/count_by_k_true-unreach-call_true-termination_unbound/config b/bench_horn_mcmc/count_by_k_true-unreach-call_true-termination_unbound/config new file mode 100644 index 000000000..c851ea2e0 --- /dev/null +++ b/bench_horn_mcmc/count_by_k_true-unreach-call_true-termination_unbound/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +5 +-10 -1 0 1 10 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/count_by_k_true-unreach-call_true-termination_unbound/first.xml b/bench_horn_mcmc/count_by_k_true-unreach-call_true-termination_unbound/first.xml new file mode 100644 index 000000000..8fd051849 --- /dev/null +++ b/bench_horn_mcmc/count_by_k_true-unreach-call_true-termination_unbound/first.xml @@ -0,0 +1,104 @@ + + + + + 3 + itp + + + + i + i_ + k + LRG + + + + i + k + LRG + + + + + 0 + k + + + + + k + 10 + + + + + LRG + 0 + + + + + i + 0 + + + + + + + i_ + k + LRG + + + i + k + LRG + + + + + i_ + + LRG + k + + + + + + i + + i_ + k + + + + + + + + i + k + LRG + + + + i + + LRG + k + + + + i + + LRG + k + + + + + + diff --git a/bench_horn_mcmc/count_by_nondet_true-unreach-call_true-termination/config b/bench_horn_mcmc/count_by_nondet_true-unreach-call_true-termination/config new file mode 100644 index 000000000..3cacd38ac --- /dev/null +++ b/bench_horn_mcmc/count_by_nondet_true-unreach-call_true-termination/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +5 +-256 -1 0 1 256 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/count_by_nondet_true-unreach-call_true-termination/first.xml b/bench_horn_mcmc/count_by_nondet_true-unreach-call_true-termination/first.xml new file mode 100644 index 000000000..5e2daa737 --- /dev/null +++ b/bench_horn_mcmc/count_by_nondet_true-unreach-call_true-termination/first.xml @@ -0,0 +1,133 @@ + + + + + 3 + itp + + + + i + i_ + k + k_ + j + LRG + + + + i + k + LRG + + + + + i + 0 + + + + + k + 0 + + + + + i + LRG + + + + + + + i_ + k_ + LRG + + + i + k + LRG + + + + LRG + i + + + LRG + + i + i_ + + + + + i + + i_ + 1 + + + + + + k + + 1 + k_ + + + + + + + + i + k + LRG + + + + + LRG + + k + 1 + + + + + + 1 + j + + + + + j + LRG + + + + + LRG + + j + i + + + + + + LRG + 256 + + + + + + diff --git a/bench_horn_mcmc/countud/config b/bench_horn_mcmc/countud/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/countud/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/countud/first.xml b/bench_horn_mcmc/countud/first.xml new file mode 100644 index 000000000..0235b8159 --- /dev/null +++ b/bench_horn_mcmc/countud/first.xml @@ -0,0 +1,102 @@ + + + + + 3 + itp + + + + x1 + x2 + x3 + x4 + x5 + x6 + + + + x1 + x3 + x5 + + + + + x1 + 0 + + + + + x1 + x5 + + + + + x3 + 0 + + + + + + + x1 + x3 + x5 + + + x2 + x4 + x6 + + + + + x2 + + x1 + 1 + + + + + + x4 + + x3 + 1 + + + + + + x6 + x5 + + + + + + + x1 + x3 + x5 + + + + + x1 + 0 + + + + x3 + x5 + + + + + diff --git a/bench_horn_mcmc/dillig01/config b/bench_horn_mcmc/dillig01/config new file mode 100644 index 000000000..12a268ac3 --- /dev/null +++ b/bench_horn_mcmc/dillig01/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +2 +-1 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/dillig01/first.xml b/bench_horn_mcmc/dillig01/first.xml new file mode 100644 index 000000000..1277677e7 --- /dev/null +++ b/bench_horn_mcmc/dillig01/first.xml @@ -0,0 +1,78 @@ + + + + + 2 + itp + + + + x1 + x2 + x3 + x4 + + + + x1 + x3 + + + + + x1 + 1 + + + + + x3 + 1 + + + + + + + x1 + x3 + + + x2 + x4 + + + + + x2 + + x1 + x3 + + + + + + x4 + + x1 + x3 + + + + + + + + x1 + x3 + + + + x3 + 1 + + + + + diff --git a/bench_horn_mcmc/dillig03/config b/bench_horn_mcmc/dillig03/config new file mode 100644 index 000000000..12a268ac3 --- /dev/null +++ b/bench_horn_mcmc/dillig03/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +2 +-1 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/dillig03/first.xml b/bench_horn_mcmc/dillig03/first.xml new file mode 100644 index 000000000..947b631d3 --- /dev/null +++ b/bench_horn_mcmc/dillig03/first.xml @@ -0,0 +1,86 @@ + + + + + 2 + itp + + + + x1 + x2 + x3 + x4 + + + + x1 + x3 + + + + + x1 + 1 + + + + + x3 + 1 + + + + + + + x1 + x3 + + + x2 + x4 + + + + + + x2 + x1 + + + + + x2 + + x1 + 1 + + + + + + + x4 + + x3 + x2 + + + + + + + + x1 + x3 + + + + x3 + 1 + + + + + diff --git a/bench_horn_mcmc/dillig05/config b/bench_horn_mcmc/dillig05/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/dillig05/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/dillig05/first.xml b/bench_horn_mcmc/dillig05/first.xml new file mode 100644 index 000000000..2a2d84e00 --- /dev/null +++ b/bench_horn_mcmc/dillig05/first.xml @@ -0,0 +1,141 @@ + + + + + 4 + itp + + + + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + tmp + + + + x1 + x3 + x5 + x7 + + + + + x1 + 0 + + + + + x3 + 0 + + + + + x5 + 0 + + + + + x7 + 0 + + + + + + + x1 + x3 + x5 + x7 + + + x2 + x4 + x6 + x8 + + + + + x2 + + x1 + 1 + + + + + + x4 + + x3 + 1 + + + + + + x6 + + x5 + x2 + + + + + + tmp + + x7 + x4 + + + + + + + x8 + tmp + + + + + x8 + + tmp + 1 + + + + + + + + + x1 + x3 + x5 + x7 + + + + x7 + + x5 + 1 + + + + + + diff --git a/bench_horn_mcmc/dillig07/config b/bench_horn_mcmc/dillig07/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/dillig07/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/dillig07/first.xml b/bench_horn_mcmc/dillig07/first.xml new file mode 100644 index 000000000..825d99f80 --- /dev/null +++ b/bench_horn_mcmc/dillig07/first.xml @@ -0,0 +1,108 @@ + + + + + 3 + itp + + + + x1 + x2 + x3 + x4 + x5 + x6 + + + + x1 + x3 + x5 + + + + + x1 + 0 + + + + + x3 + 0 + + + + + x5 + 0 + + + + + + + x1 + x3 + x5 + + + x2 + x4 + x6 + + + + + x1 + x5 + + + + + x2 + + x1 + 1 + + + + + + x4 + + x3 + 1 + + + + + + x6 + x5 + + + + + + + x1 + x3 + x5 + + + + + x1 + x5 + + + + x3 + x5 + + + + + diff --git a/bench_horn_mcmc/exact_iters_1/config b/bench_horn_mcmc/exact_iters_1/config new file mode 100644 index 000000000..9a2edeea1 --- /dev/null +++ b/bench_horn_mcmc/exact_iters_1/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +11 +-10 -8 -4 -2 -1 0 1 2 4 8 10 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/exact_iters_1/first.xml b/bench_horn_mcmc/exact_iters_1/first.xml new file mode 100644 index 000000000..d5d3607a2 --- /dev/null +++ b/bench_horn_mcmc/exact_iters_1/first.xml @@ -0,0 +1,84 @@ + + + + + 2 + inv + + + + i1 + i2 + j1 + j2 + + + + i1 + j1 + + + + + i1 + 0 + + + + + j1 + 10 + + + + + + + i1 + j1 + + + i2 + j2 + + + + + i2 + + i1 + 2 + + + + + + j2 + + j1 + 1 + + + + + + + + i1 + j1 + + + + + i1 + 4 + + + + j1 + 8 + + + + + diff --git a/bench_horn_mcmc/exact_iters_2/config b/bench_horn_mcmc/exact_iters_2/config new file mode 100644 index 000000000..5ecd642be --- /dev/null +++ b/bench_horn_mcmc/exact_iters_2/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +11 +-1000 -800 -400 -2 -1 0 1 2 400 800 1000 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/exact_iters_2/first.xml b/bench_horn_mcmc/exact_iters_2/first.xml new file mode 100644 index 000000000..d4992d7c6 --- /dev/null +++ b/bench_horn_mcmc/exact_iters_2/first.xml @@ -0,0 +1,84 @@ + + + + + 2 + inv + + + + i1 + i2 + j1 + j2 + + + + i1 + j1 + + + + + i1 + 0 + + + + + j1 + 1000 + + + + + + + i1 + j1 + + + i2 + j2 + + + + + i2 + + i1 + 2 + + + + + + j2 + + j1 + 1 + + + + + + + + i1 + j1 + + + + + i1 + 400 + + + + j1 + 800 + + + + + diff --git a/bench_horn_mcmc/exact_iters_3/config b/bench_horn_mcmc/exact_iters_3/config new file mode 100644 index 000000000..55bdf7480 --- /dev/null +++ b/bench_horn_mcmc/exact_iters_3/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +11 +-10000 -8000 -4000 -2 -1 0 1 2 4000 8000 10000 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/exact_iters_3/first.xml b/bench_horn_mcmc/exact_iters_3/first.xml new file mode 100644 index 000000000..bbd71df61 --- /dev/null +++ b/bench_horn_mcmc/exact_iters_3/first.xml @@ -0,0 +1,84 @@ + + + + + 2 + inv + + + + i1 + i2 + j1 + j2 + + + + i1 + j1 + + + + + i1 + 0 + + + + + j1 + 10000 + + + + + + + i1 + j1 + + + i2 + j2 + + + + + i2 + + i1 + 2 + + + + + + j2 + + j1 + 1 + + + + + + + + i1 + j1 + + + + + i1 + 4000 + + + + j1 + 8000 + + + + + diff --git a/bench_horn_mcmc/exact_iters_4/config b/bench_horn_mcmc/exact_iters_4/config new file mode 100644 index 000000000..ef1dc0e13 --- /dev/null +++ b/bench_horn_mcmc/exact_iters_4/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +13 +-10 -6 -4 -3 -2 -1 0 1 2 3 4 6 10 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/exact_iters_4/first.xml b/bench_horn_mcmc/exact_iters_4/first.xml new file mode 100644 index 000000000..3d0f9d6be --- /dev/null +++ b/bench_horn_mcmc/exact_iters_4/first.xml @@ -0,0 +1,108 @@ + + + + + 3 + inv + + + + i1 + i2 + j1 + j2 + k1 + k2 + + + + i1 + j1 + k1 + + + + + i1 + 0 + + + + + j1 + 10 + + + + + k1 + 0 + + + + + + + i1 + j1 + k1 + + + i2 + j2 + k2 + + + + + i2 + + i1 + 1 + + + + + + j2 + + j1 + 3 + + + + + + k2 + + k1 + 2 + + + + + + + + i1 + j1 + k1 + + + + + + i1 + k1 + + 6 + + + + j1 + 4 + + + + + diff --git a/bench_horn_mcmc/exact_iters_5/config b/bench_horn_mcmc/exact_iters_5/config new file mode 100644 index 000000000..f2e0c8dea --- /dev/null +++ b/bench_horn_mcmc/exact_iters_5/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +13 +-1000 -600 -400 -3 -2 -1 0 1 2 3 400 600 1000 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/exact_iters_5/first.xml b/bench_horn_mcmc/exact_iters_5/first.xml new file mode 100644 index 000000000..0eec61329 --- /dev/null +++ b/bench_horn_mcmc/exact_iters_5/first.xml @@ -0,0 +1,108 @@ + + + + + 3 + inv + + + + i1 + i2 + j1 + j2 + k1 + k2 + + + + i1 + j1 + k1 + + + + + i1 + 0 + + + + + j1 + 1000 + + + + + k1 + 0 + + + + + + + i1 + j1 + k1 + + + i2 + j2 + k2 + + + + + i2 + + i1 + 1 + + + + + + j2 + + j1 + 3 + + + + + + k2 + + k1 + 2 + + + + + + + + i1 + j1 + k1 + + + + + + i1 + k1 + + 600 + + + + j1 + 400 + + + + + diff --git a/bench_horn_mcmc/formula22/config b/bench_horn_mcmc/formula22/config new file mode 100644 index 000000000..607212c84 --- /dev/null +++ b/bench_horn_mcmc/formula22/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-2 0 2 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/formula22/first.xml b/bench_horn_mcmc/formula22/first.xml new file mode 100644 index 000000000..ae982c4f5 --- /dev/null +++ b/bench_horn_mcmc/formula22/first.xml @@ -0,0 +1,158 @@ + + + + + 3 + itp + + + + x1 + x2 + x3 + x4 + x5 + x6 + y1 + y3 + y5 + + + + x1 + x3 + x5 + + + + + x1 + 0 + + + + + x3 + 0 + + + + + x5 + 0 + + + + + + + x1 + x3 + x5 + + + x2 + x4 + x6 + + + + + + + y1 + y3 + + + + + + y3 + 0 + + + + + + y3 + y5 + + 2 + + + + + + + + y1 + y3 + + + + y3 + 0 + + + + y3 + y5 + + 2 + + + + + + + x2 + x1 + + + + + x4 + x3 + + + + + x6 + x5 + + + + + + + + + + x1 + x3 + x5 + + + + + x1 + x3 + + + + x3 + 0 + + + + x3 + x5 + + 2 + + + + + + + diff --git a/bench_horn_mcmc/formula25/config b/bench_horn_mcmc/formula25/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/formula25/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/formula25/first.xml b/bench_horn_mcmc/formula25/first.xml new file mode 100644 index 000000000..e37b4782f --- /dev/null +++ b/bench_horn_mcmc/formula25/first.xml @@ -0,0 +1,205 @@ + + + + + 4 + itp + + + + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + y1 + y3 + y5 + y7 + + + + x1 + x3 + x5 + x7 + + + + + x1 + 0 + + + + + x3 + 0 + + + + + x5 + 0 + + + + + x7 + -1 + + + + + + + x1 + x3 + x5 + x7 + + + x2 + x4 + x6 + x8 + + + + + + + y1 + 0 + + + + + y1 + + y7 + 1 + + + + + + y3 + y5 + + + + + + y7 + 0 + + + + + y7 + y5 + + + + + + + + y1 + 0 + + + y1 + + y7 + 1 + + + + y3 + y5 + + + + y7 + 0 + + + y7 + y5 + + + + + + + x2 + x1 + + + + + x4 + x3 + + + + + x6 + x5 + + + + + x8 + x7 + + + + + + + + + + x1 + x3 + x5 + x7 + + + + + x1 + 0 + + + x1 + + x7 + 1 + + + + x3 + x5 + + + + x7 + 0 + + + x7 + x5 + + + + + + + diff --git a/bench_horn_mcmc/formula27/config b/bench_horn_mcmc/formula27/config new file mode 100644 index 000000000..d6adcb786 --- /dev/null +++ b/bench_horn_mcmc/formula27/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +5 +-2 -1 0 1 2 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/formula27/first.xml b/bench_horn_mcmc/formula27/first.xml new file mode 100644 index 000000000..88c1f8adf --- /dev/null +++ b/bench_horn_mcmc/formula27/first.xml @@ -0,0 +1,233 @@ + + + + + 5 + itp + + + + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x0 + y1 + y3 + y5 + y7 + y9 + + + + x1 + x3 + x5 + x7 + x9 + + + + + x1 + 0 + + + + + x3 + 0 + + + + + x5 + 0 + + + + + x7 + 0 + + + + + x9 + 0 + + + + + + + x1 + x3 + x5 + x7 + x9 + + + x2 + x4 + x6 + x8 + x0 + + + + + + + x2 + y1 + + + + + x4 + y3 + + + + + x6 + y5 + + + + + x8 + y7 + + + + + x0 + y9 + + + + + + + 0 + y1 + + + y1 + + y7 + 1 + + + + y3 + y5 + + + + y3 + -1 + + + y7 + + y3 + 2 + + + + + y9 + 0 + + + + + + x2 + x1 + + + + + x4 + x3 + + + + + x6 + x5 + + + + + x8 + x7 + + + + + x0 + x9 + + + + + + + + + + x1 + x3 + x5 + x7 + x9 + + + + + 0 + x1 + + + x1 + + x7 + 1 + + + + x3 + x5 + + + + x3 + -1 + + + x7 + + x3 + 2 + + + + + x9 + 0 + + + + + + diff --git a/bench_horn_mcmc/nonlin_div/config b/bench_horn_mcmc/nonlin_div/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/nonlin_div/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/nonlin_div/first.xml b/bench_horn_mcmc/nonlin_div/first.xml new file mode 100644 index 000000000..6ea354201 --- /dev/null +++ b/bench_horn_mcmc/nonlin_div/first.xml @@ -0,0 +1,92 @@ + + + + + 3 + inv + + + + a + a1 + b + c + c1 + + + + a + b + c + + + + + b + 0 + + + + + b + a + + + + + c + 1 + + + + + + + a + b + c + + + a1 + b + c1 + + + + + a1 + + a + b + + + + + + c1 + + 1 + c + + + + + + + + a + b + c + + + + c +
+ a + b +
+
+
+
+
+ diff --git a/bench_horn_mcmc/nonlin_factorial/config b/bench_horn_mcmc/nonlin_factorial/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/nonlin_factorial/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/nonlin_factorial/first.xml b/bench_horn_mcmc/nonlin_factorial/first.xml new file mode 100644 index 000000000..b7e866781 --- /dev/null +++ b/bench_horn_mcmc/nonlin_factorial/first.xml @@ -0,0 +1,78 @@ + + + + + 2 + inv + + + + a + a2 + b + b2 + + + + a + b + + + + + a + 1 + + + + + b + 1 + + + + + + + a + b + + + a2 + b2 + + + + + a2 + + a + 1 + + + + + + b2 + + b + a + + + + + + + + a + b + + + + b + 0 + + + + + diff --git a/bench_horn_mcmc/nonlin_gauss_sum/config b/bench_horn_mcmc/nonlin_gauss_sum/config new file mode 100644 index 000000000..8fb1e815e --- /dev/null +++ b/bench_horn_mcmc/nonlin_gauss_sum/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +7 +-1000 -2 -1 0 1 2 1000 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/nonlin_gauss_sum/first.xml b/bench_horn_mcmc/nonlin_gauss_sum/first.xml new file mode 100644 index 000000000..3399a9350 --- /dev/null +++ b/bench_horn_mcmc/nonlin_gauss_sum/first.xml @@ -0,0 +1,122 @@ + + + + + 3 + inv + + + + i + n + sum + i1 + sum1 + + + + i + n + sum + + + + + sum + 0 + + + + + i + 1 + + + + + 1 + n + + + + + n + 1000 + + + + + + + i + n + sum + + + i1 + n + sum1 + + + + + i + n + + + + + sum1 + + sum + i + + + + + + i1 + + i + 1 + + + + + + + + i + n + sum + + + + + i + n + + + + + + 2 + sum + + + 2 + n + + + + n + + n + 1 + + + + + + + diff --git a/bench_horn_mcmc/nonlin_minus/config b/bench_horn_mcmc/nonlin_minus/config new file mode 100755 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/nonlin_minus/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/nonlin_minus/first.xml b/bench_horn_mcmc/nonlin_minus/first.xml new file mode 100755 index 000000000..45dcc0248 --- /dev/null +++ b/bench_horn_mcmc/nonlin_minus/first.xml @@ -0,0 +1,98 @@ + + + + + 3 + inv + + + + a + a2 + n + n2 + b + + + + a + b + n + + + + + a + 0 + + + + + b + 0 + + + + + n + + a + b + + + + + + + + a + b + n + + + a2 + b + n2 + + + + + n2 + + n + b + + + + + + a2 + + a + 1 + + + + + + + + a + b + n + + + + + n + 0 + + + + a + 0 + + + + + diff --git a/bench_horn_mcmc/nonlin_minus_1/config b/bench_horn_mcmc/nonlin_minus_1/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/nonlin_minus_1/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/nonlin_minus_1/first.xml b/bench_horn_mcmc/nonlin_minus_1/first.xml new file mode 100644 index 000000000..45dcc0248 --- /dev/null +++ b/bench_horn_mcmc/nonlin_minus_1/first.xml @@ -0,0 +1,98 @@ + + + + + 3 + inv + + + + a + a2 + n + n2 + b + + + + a + b + n + + + + + a + 0 + + + + + b + 0 + + + + + n + + a + b + + + + + + + + a + b + n + + + a2 + b + n2 + + + + + n2 + + n + b + + + + + + a2 + + a + 1 + + + + + + + + a + b + n + + + + + n + 0 + + + + a + 0 + + + + + diff --git a/bench_horn_mcmc/nonlin_minus_2/config b/bench_horn_mcmc/nonlin_minus_2/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/nonlin_minus_2/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/nonlin_minus_2/first.xml b/bench_horn_mcmc/nonlin_minus_2/first.xml new file mode 100644 index 000000000..7daf0ca01 --- /dev/null +++ b/bench_horn_mcmc/nonlin_minus_2/first.xml @@ -0,0 +1,118 @@ + + + + + 4 + inv + + + + a + b + c + d + c1 + d1 + + + + a + b + c + d + + + + + a + 0 + + + + + b + 0 + + + + + c + 0 + + + + + d + a + + + + + + + a + b + c + d + + + a + b + c1 + d1 + + + + + d + b + + + + + c1 + + c + 1 + + + + + + d1 + + d + b + + + + + + + + a + b + c + d + + + + + c + b + + + + a + + + b + c + + d + + + + + + diff --git a/bench_horn_mcmc/nonlin_mod/config b/bench_horn_mcmc/nonlin_mod/config new file mode 100755 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/nonlin_mod/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/nonlin_mod/first.xml b/bench_horn_mcmc/nonlin_mod/first.xml new file mode 100755 index 000000000..f7e939e36 --- /dev/null +++ b/bench_horn_mcmc/nonlin_mod/first.xml @@ -0,0 +1,71 @@ + + + + + 2 + inv + + + + a + b + a1 + + + + a + b + + + + + b + 0 + + + + + b + a + + + + + + + a + b + + + a1 + b + + + + + a1 + + a + b + + + + + + + + a + b + + + + 0 + + a + b + + + + + + diff --git a/bench_horn_mcmc/nonlin_mod_1/config b/bench_horn_mcmc/nonlin_mod_1/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/nonlin_mod_1/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/nonlin_mod_1/first.xml b/bench_horn_mcmc/nonlin_mod_1/first.xml new file mode 100644 index 000000000..f7e939e36 --- /dev/null +++ b/bench_horn_mcmc/nonlin_mod_1/first.xml @@ -0,0 +1,71 @@ + + + + + 2 + inv + + + + a + b + a1 + + + + a + b + + + + + b + 0 + + + + + b + a + + + + + + + a + b + + + a1 + b + + + + + a1 + + a + b + + + + + + + + a + b + + + + 0 + + a + b + + + + + + diff --git a/bench_horn_mcmc/nonlin_mod_2/config b/bench_horn_mcmc/nonlin_mod_2/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/nonlin_mod_2/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/nonlin_mod_2/first.xml b/bench_horn_mcmc/nonlin_mod_2/first.xml new file mode 100644 index 000000000..3cfe61b35 --- /dev/null +++ b/bench_horn_mcmc/nonlin_mod_2/first.xml @@ -0,0 +1,86 @@ + + + + + 2 + inv + + + + a + b + a1 + + + + a + b + + + + + b + 0 + + + + + a + 0 + + + + + + a + b + + 0 + + + + + + + a + b + + + a1 + b + + + + + a + b + + + + + a1 + + a + b + + + + + + + + a + b + + + + + a + b + + 0 + + + + + diff --git a/bench_horn_mcmc/nonlin_mod_mult/config b/bench_horn_mcmc/nonlin_mod_mult/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/nonlin_mod_mult/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/nonlin_mod_mult/first.xml b/bench_horn_mcmc/nonlin_mod_mult/first.xml new file mode 100644 index 000000000..af93ac716 --- /dev/null +++ b/bench_horn_mcmc/nonlin_mod_mult/first.xml @@ -0,0 +1,123 @@ + + + + + 4 + inv + + + + i + i1 + j + j1 + k + l + l1 + m + + + + i + j + k + l + + + + + i + 0 + + + + + j + 0 + + + + + k + 0 + + + + + l + 0 + + + + + + + i + j + k + l + + + i1 + j1 + k + l1 + + + + + i1 + + i + 1 + + + + + + m + + j + k + + + + + + j1 + + j + m + + + + + + l1 + + l + m + + + + + + + + i + j + k + l + + + + l + + k + i + + + + + + diff --git a/bench_horn_mcmc/nonlin_mult_1/config b/bench_horn_mcmc/nonlin_mult_1/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/nonlin_mult_1/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/nonlin_mult_1/first.xml b/bench_horn_mcmc/nonlin_mult_1/first.xml new file mode 100644 index 000000000..f11dea210 --- /dev/null +++ b/bench_horn_mcmc/nonlin_mult_1/first.xml @@ -0,0 +1,92 @@ + + + + + 3 + inv + + + + a + c1 + c2 + d1 + d2 + + + + a + c1 + d1 + + + + + a + 0 + + + + + c1 + 0 + + + + + d1 + 0 + + + + + + + a + c1 + d1 + + + a + c2 + d2 + + + + + d2 + + d1 + 1 + + + + + + c2 + + c1 + a + + + + + + + + a + c1 + d1 + + + + c1 + + a + d1 + + + + + + diff --git a/bench_horn_mcmc/nonlin_mult_2/config b/bench_horn_mcmc/nonlin_mult_2/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/nonlin_mult_2/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/nonlin_mult_2/first.xml b/bench_horn_mcmc/nonlin_mult_2/first.xml new file mode 100644 index 000000000..48066eaa1 --- /dev/null +++ b/bench_horn_mcmc/nonlin_mult_2/first.xml @@ -0,0 +1,124 @@ + + + + + 5 + inv + + + + a + b + c1 + c2 + d1 + d2 + e1 + e2 + + + + a + b + c1 + d1 + e1 + + + + + a + 0 + + + + + b + a + + + + + c1 + 0 + + + + + e1 + 0 + + + + + d1 + 0 + + + + + + + a + b + c1 + d1 + e1 + + + a + b + c2 + d2 + e2 + + + + + c2 + + c1 + 1 + + + + + + d2 + + d1 + a + + + + + + e2 + + e1 + b + + + + + + + + a + b + c1 + d1 + e1 + + + + e1 + + a + c1 + + + + + + diff --git a/bench_horn_mcmc/nonlin_mult_3/config b/bench_horn_mcmc/nonlin_mult_3/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/nonlin_mult_3/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/nonlin_mult_3/first.xml b/bench_horn_mcmc/nonlin_mult_3/first.xml new file mode 100644 index 000000000..c31891331 --- /dev/null +++ b/bench_horn_mcmc/nonlin_mult_3/first.xml @@ -0,0 +1,124 @@ + + + + + 5 + inv + + + + a + b + c1 + c2 + d1 + d2 + e1 + e2 + + + + a + b + c1 + d1 + e1 + + + + + a + 0 + + + + + b + a + + + + + c1 + 0 + + + + + e1 + 0 + + + + + d1 + 0 + + + + + + + a + b + c1 + d1 + e1 + + + a + b + c2 + d2 + e2 + + + + + c2 + + c1 + 1 + + + + + + d2 + + d1 + a + + + + + + e2 + + e1 + b + + + + + + + + a + b + c1 + d1 + e1 + + + + d1 + + b + c1 + + + + + + diff --git a/bench_horn_mcmc/nonlin_mult_4/config b/bench_horn_mcmc/nonlin_mult_4/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/nonlin_mult_4/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/nonlin_mult_4/first.xml b/bench_horn_mcmc/nonlin_mult_4/first.xml new file mode 100644 index 000000000..5df66531a --- /dev/null +++ b/bench_horn_mcmc/nonlin_mult_4/first.xml @@ -0,0 +1,127 @@ + + + + + 5 + inv + + + + a + b + c1 + c2 + d1 + d2 + e1 + e2 + + + + a + b + c1 + d1 + e1 + + + + + a + 0 + + + + + b + a + + + + + c1 + 0 + + + + + e1 + 0 + + + + + d1 + 0 + + + + + + + a + b + c1 + d1 + e1 + + + a + b + c2 + d2 + e2 + + + + + c2 + + c1 + 1 + + + + + + d2 + + d1 + a + + + + + + e2 + + e1 + b + + + + + + + + a + b + c1 + d1 + e1 + + + + + b + c1 + + + a + c1 + + + + + + diff --git a/bench_horn_mcmc/nonlin_mult_5/config b/bench_horn_mcmc/nonlin_mult_5/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/nonlin_mult_5/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/nonlin_mult_5/first.xml b/bench_horn_mcmc/nonlin_mult_5/first.xml new file mode 100644 index 000000000..dfd1a23bb --- /dev/null +++ b/bench_horn_mcmc/nonlin_mult_5/first.xml @@ -0,0 +1,109 @@ + + + + + 4 + inv + + + + a + b + c1 + c2 + d1 + d2 + + + + a + b + c1 + d1 + + + + + a + 0 + + + + + b + 0 + + + + + c1 + 0 + + + + + d1 + 0 + + + + + + + a + b + c1 + d1 + + + a + b + c2 + d2 + + + + + c2 + + c1 + 1 + + + + + + d2 + + d1 + b + + + + + + + + a + b + c1 + d1 + + + + + c1 + a + + + + d1 + + a + b + + + + + + diff --git a/bench_horn_mcmc/nonlin_mult_6/config b/bench_horn_mcmc/nonlin_mult_6/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/nonlin_mult_6/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/nonlin_mult_6/first.xml b/bench_horn_mcmc/nonlin_mult_6/first.xml new file mode 100644 index 000000000..6db38f90f --- /dev/null +++ b/bench_horn_mcmc/nonlin_mult_6/first.xml @@ -0,0 +1,91 @@ + + + + + 3 + inv + + + + a + b + b1 + i + i1 + + + + a + b + i + + + + + a + 0 + + + + + b + a + + + + + i + -1 + + + + + + + a + b + i + + + a + b1 + i1 + + + + + b1 + + a + b + + + + + + i1 + + i + + + + + + + + a + b + i + + + + + b + i + + 0 + + + + + diff --git a/bench_horn_mcmc/nonlin_power/config b/bench_horn_mcmc/nonlin_power/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/nonlin_power/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/nonlin_power/first.xml b/bench_horn_mcmc/nonlin_power/first.xml new file mode 100644 index 000000000..d18a438b1 --- /dev/null +++ b/bench_horn_mcmc/nonlin_power/first.xml @@ -0,0 +1,68 @@ + + + + + 2 + inv + + + + a + b + b2 + + + + a + b + + + + + a + 0 + + + + + b + 1 + + + + + + + a + b + + + a + b2 + + + + + b2 + + b + a + + + + + + + + a + b + + + + b + 0 + + + + + diff --git a/bench_horn_mcmc/nonlin_square/config b/bench_horn_mcmc/nonlin_square/config new file mode 100644 index 000000000..d6adcb786 --- /dev/null +++ b/bench_horn_mcmc/nonlin_square/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +5 +-2 -1 0 1 2 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/nonlin_square/first.xml b/bench_horn_mcmc/nonlin_square/first.xml new file mode 100644 index 000000000..fa3862c69 --- /dev/null +++ b/bench_horn_mcmc/nonlin_square/first.xml @@ -0,0 +1,85 @@ + + + + + 2 + inv + + + + x + x1 + n + n1 + + + + x + n + + + + + x + 0 + + + + + n + 0 + + + + + + + x + n + + + x1 + n1 + + + + + n1 + + n + 1 + + + + + + x1 + + x + + 2 + n1 + + -1 + + + + + + + + x + n + + + + x + + n + n + + + + + + diff --git a/bench_horn_mcmc/recur_1/config b/bench_horn_mcmc/recur_1/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/recur_1/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/recur_1/first.xml b/bench_horn_mcmc/recur_1/first.xml new file mode 100644 index 000000000..187d6b0f7 --- /dev/null +++ b/bench_horn_mcmc/recur_1/first.xml @@ -0,0 +1,103 @@ + + + + + 2 + itp1 + + + + cnt_all_1 + cnt_all_2 + st_all_1 + st_all_2 + segm1 + segm2 + m + + + + cnt_all_1 + st_all_1 + + + + + cnt_all_1 + 0 + + + + + st_all_1 + 0 + + + + + + + cnt_all_1 + st_all_1 + + + cnt_all_2 + st_all_2 + + + + + + + m + 1 + + + + + cnt_all_2 + + 1 + cnt_all_1 + + + + + + + m + 1 + + + + cnt_all_2 + cnt_all_1 + + + + + + + st_all_2 + + st_all_1 + 1 + + + + + + + + cnt_all_1 + st_all_1 + + + + cnt_all_1 + st_all_1 + + + + + diff --git a/bench_horn_mcmc/samples_only_01/config b/bench_horn_mcmc/samples_only_01/config new file mode 100644 index 000000000..9d1c6fe7d --- /dev/null +++ b/bench_horn_mcmc/samples_only_01/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +5 +-66 -55 0 55 66 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/samples_only_01/first.xml b/bench_horn_mcmc/samples_only_01/first.xml new file mode 100644 index 000000000..05d9749f5 --- /dev/null +++ b/bench_horn_mcmc/samples_only_01/first.xml @@ -0,0 +1,82 @@ + + + + + 2 + itp + + + + m + m1 + i + i1 + b + + + + m + i + + + + + m + 0 + + + + + i + 0 + + + + + + + m + i + + + m1 + i1 + + + + + i1 + + i + 55 + + + + + + m1 + + m + 66 + + + + + + + + m + i + + + + + m + i + + 0 + + + + + diff --git a/bench_horn_mcmc/samples_only_02/config b/bench_horn_mcmc/samples_only_02/config new file mode 100644 index 000000000..d6adcb786 --- /dev/null +++ b/bench_horn_mcmc/samples_only_02/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +5 +-2 -1 0 1 2 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/samples_only_02/first.xml b/bench_horn_mcmc/samples_only_02/first.xml new file mode 100644 index 000000000..2ee4b0774 --- /dev/null +++ b/bench_horn_mcmc/samples_only_02/first.xml @@ -0,0 +1,159 @@ + + + + + 5 + itp + + + + x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + + + + x1 + x2 + x3 + x4 + x5 + + + + + x1 + 2 + + + + + x2 + 2 + + + + + x3 + 2 + + + + + x4 + 2 + + + + + x5 + 2 + + + + + + + x1 + x3 + x5 + x7 + x9 + + + x2 + x4 + x6 + x8 + x0 + + + + + x2 + + x1 + 1 + + + + + + x4 + + x3 + 1 + + + + + + x6 + + x5 + 1 + + + + + + x8 + + x7 + 1 + + + + + + x0 + + x9 + 1 + + + + + + + + x1 + x3 + x5 + x7 + x9 + + + + + x1 + 0 + + + x3 + 0 + + + x5 + 0 + + + x7 + 0 + + + x9 + 0 + + + + + + diff --git a/bench_horn_mcmc/samples_only_03/config b/bench_horn_mcmc/samples_only_03/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/samples_only_03/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/samples_only_03/first.xml b/bench_horn_mcmc/samples_only_03/first.xml new file mode 100644 index 000000000..c1074a7ae --- /dev/null +++ b/bench_horn_mcmc/samples_only_03/first.xml @@ -0,0 +1,90 @@ + + + + + 2 + itp + + + + x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + + + + x1 + x3 + + + + + x1 + 0 + + + + + x3 + 0 + + + + + + + x1 + x3 + + + x2 + x4 + + + + + x2 + + x1 + 1 + + + + + + x4 + + x3 + 1 + + + + + + + + x1 + x3 + + + + + x1 + 0 + + + x3 + 0 + + + + + + diff --git a/bench_horn_mcmc/samples_only_04/config b/bench_horn_mcmc/samples_only_04/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/samples_only_04/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/samples_only_04/first.xml b/bench_horn_mcmc/samples_only_04/first.xml new file mode 100644 index 000000000..8143a8d58 --- /dev/null +++ b/bench_horn_mcmc/samples_only_04/first.xml @@ -0,0 +1,128 @@ + + + + + 3 + itp + + + + x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + + + + x1 + x3 + x5 + + + + + x1 + 0 + + + + + x3 + 0 + + + + + x5 + 0 + + + + + + + x1 + x3 + x5 + + + x2 + x4 + x6 + + + + + + + x2 + + x1 + 1 + + + + + + x4 + + x3 + 1 + + + + + + + + x2 + + x1 + 1 + + + + + + x4 + + x3 + 1 + + + + + + + + x6 + + x5 + x2 + x4 + + + + + + + + x1 + x3 + x5 + + + + x5 + 0 + + + + + diff --git a/bench_horn_mcmc/samples_only_05/config b/bench_horn_mcmc/samples_only_05/config new file mode 100644 index 000000000..65ea94857 --- /dev/null +++ b/bench_horn_mcmc/samples_only_05/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +5 +-1000 -1 0 1 1000 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/samples_only_05/first.xml b/bench_horn_mcmc/samples_only_05/first.xml new file mode 100644 index 000000000..269fbb305 --- /dev/null +++ b/bench_horn_mcmc/samples_only_05/first.xml @@ -0,0 +1,90 @@ + + + + + 2 + itp + + + + x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + + + + x1 + x3 + + + + + x1 + 0 + + + + + x3 + x1 + + + + + + + x1 + x3 + + + x2 + x4 + + + + + x2 + + x1 + 1 + + + + + + x4 + + x3 + 1 + + + + + + + + x1 + x3 + + + + + x1 + 1000 + + + + x3 + 1000 + + + + + diff --git a/bench_horn_mcmc/samples_only_06/config b/bench_horn_mcmc/samples_only_06/config new file mode 100644 index 000000000..6b16ce1f5 --- /dev/null +++ b/bench_horn_mcmc/samples_only_06/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +7 +-8 -7 -1 0 1 7 8 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/samples_only_06/first.xml b/bench_horn_mcmc/samples_only_06/first.xml new file mode 100644 index 000000000..130e0f394 --- /dev/null +++ b/bench_horn_mcmc/samples_only_06/first.xml @@ -0,0 +1,117 @@ + + + + + 3 + inv + + + + x + x1 + y + y1 + i + i1 + + + + x + y + i + + + + + x + 0 + + + + + y + 0 + + + + + i + 0 + + + + + + + x + y + i + + + x1 + y1 + i1 + + + + + i1 + + i + 1 + + + + + + x1 + + x + i1 + + + + + + y1 + + y + i1 + + + + + + + + x + y + i + + + + + 0 + + x + + y + + 8 + i + 7 + + + + + + + x + + y + + + + + + diff --git a/bench_horn_mcmc/samples_only_07/config b/bench_horn_mcmc/samples_only_07/config new file mode 100644 index 000000000..c851ea2e0 --- /dev/null +++ b/bench_horn_mcmc/samples_only_07/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +5 +-10 -1 0 1 10 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/samples_only_07/first.xml b/bench_horn_mcmc/samples_only_07/first.xml new file mode 100644 index 000000000..26b82da4d --- /dev/null +++ b/bench_horn_mcmc/samples_only_07/first.xml @@ -0,0 +1,87 @@ + + + + + 1 + itp + + + + x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + + + + x3 + + + + + x3 + 0 + + + + + + + x3 + + + x4 + + + + + + + x3 + 10 + + + + + x4 + 0 + + + + + + x3 + 10 + + + + x4 + + x3 + 1 + + + + + + + + + + x3 + + + + x3 + 10 + + + + + diff --git a/bench_horn_mcmc/samples_only_08/config b/bench_horn_mcmc/samples_only_08/config new file mode 100644 index 000000000..dea192feb --- /dev/null +++ b/bench_horn_mcmc/samples_only_08/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +7 +-100 -5 -1 0 1 5 100 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/samples_only_08/first.xml b/bench_horn_mcmc/samples_only_08/first.xml new file mode 100644 index 000000000..bd58f14ab --- /dev/null +++ b/bench_horn_mcmc/samples_only_08/first.xml @@ -0,0 +1,137 @@ + + + + + 2 + inv + + + + x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + + + + x1 + x3 + + + + + x1 + 0 + + + + + x3 + 100 + + + + + + + x1 + x3 + + + x2 + x4 + + + + + x2 + + x1 + 1 + + + + + + + + + + x2 + 0 + + + + + x3 + 0 + + + + + + + x2 + 0 + + + + + x3 + 5 + + + + + + + x4 + x2 + + + + + + + x2 + 0 + + + x3 + 0 + + + + + x2 + 0 + + + x3 + 5 + + + + + + + + + x1 + x3 + + + + x3 + 0 + + + + + diff --git a/bench_horn_mcmc/samples_search_01/config b/bench_horn_mcmc/samples_search_01/config new file mode 100644 index 000000000..a6bc2751e --- /dev/null +++ b/bench_horn_mcmc/samples_search_01/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +7 +-112 -32 -25 0 25 32 112 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/samples_search_01/first.xml b/bench_horn_mcmc/samples_search_01/first.xml new file mode 100644 index 000000000..d166e335d --- /dev/null +++ b/bench_horn_mcmc/samples_search_01/first.xml @@ -0,0 +1,78 @@ + + + + + 2 + inv + + + + x + x1 + i + i1 + + + + x + i + + + + + x + 32 + + + + + i + 25 + + + + + + + x + i + + + x1 + i1 + + + + + i1 + + i + 112 + + + + + + x1 + + x + i1 + + + + + + + + x + i + + + + x + 0 + + + + + diff --git a/bench_horn_mcmc/samples_search_02/config b/bench_horn_mcmc/samples_search_02/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/samples_search_02/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/samples_search_02/first.xml b/bench_horn_mcmc/samples_search_02/first.xml new file mode 100644 index 000000000..e00a7b456 --- /dev/null +++ b/bench_horn_mcmc/samples_search_02/first.xml @@ -0,0 +1,122 @@ + + + + + 4 + itp + + + + x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + + + + x1 + x3 + x5 + x7 + + + + + x1 + 0 + + + + + x3 + 0 + + + + + x5 + 0 + + + + + x7 + 0 + + + + + + + x1 + x3 + x5 + x7 + + + x2 + x4 + x6 + x8 + + + + + x2 + + x1 + 1 + + + + + + x4 + + x3 + x2 + + + + + + x6 + + x5 + x4 + + + + + + x8 + + x7 + x6 + + + + + + + + x1 + x3 + x5 + x7 + + + + x7 + 0 + + + + + diff --git a/bench_horn_mcmc/samples_search_03/config b/bench_horn_mcmc/samples_search_03/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/samples_search_03/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/samples_search_03/first.xml b/bench_horn_mcmc/samples_search_03/first.xml new file mode 100644 index 000000000..407294ef1 --- /dev/null +++ b/bench_horn_mcmc/samples_search_03/first.xml @@ -0,0 +1,94 @@ + + + + + 3 + itp + + + + x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + + + + x1 + x3 + x5 + + + + + x1 + 0 + + + + + x3 + 0 + + + + + x5 + 0 + + + + + + + x1 + x3 + x5 + + + x2 + x4 + x6 + + + + + x2 + + x1 + 1 + + + + + + x4 + + x3 + 1 + + + + + + + + x1 + x3 + x5 + + + + x5 + 0 + + + + + diff --git a/bench_horn_mcmc/samples_search_04/config b/bench_horn_mcmc/samples_search_04/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/samples_search_04/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/samples_search_04/first.xml b/bench_horn_mcmc/samples_search_04/first.xml new file mode 100644 index 000000000..a2737b1bb --- /dev/null +++ b/bench_horn_mcmc/samples_search_04/first.xml @@ -0,0 +1,90 @@ + + + + + 2 + itp + + + + x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + + + + x1 + x3 + + + + + x1 + 0 + + + + + x3 + 0 + + + + + + + x1 + x3 + + + x2 + x4 + + + + + x2 + + x1 + 1 + + + + + + x4 + + x3 + 1 + + + + + + + + x1 + x3 + + + + + x1 + 0 + + + + x3 + 0 + + + + + diff --git a/bench_horn_mcmc/samples_search_05/config b/bench_horn_mcmc/samples_search_05/config new file mode 100644 index 000000000..26b53fd9c --- /dev/null +++ b/bench_horn_mcmc/samples_search_05/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +9 +-2000 -1000 -2 -1 0 1 2 1000 2000 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/samples_search_05/first.xml b/bench_horn_mcmc/samples_search_05/first.xml new file mode 100644 index 000000000..02b15b410 --- /dev/null +++ b/bench_horn_mcmc/samples_search_05/first.xml @@ -0,0 +1,90 @@ + + + + + 2 + itp + + + + x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + + + + x1 + x3 + + + + + x1 + 0 + + + + + x3 + x1 + + + + + + + x1 + x3 + + + x2 + x4 + + + + + x2 + + x1 + 1 + + + + + + x4 + + x3 + 2 + + + + + + + + x1 + x3 + + + + + x1 + 1000 + + + + x3 + 2000 + + + + + diff --git a/bench_horn_mcmc/samples_search_06/config b/bench_horn_mcmc/samples_search_06/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/samples_search_06/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/samples_search_06/first.xml b/bench_horn_mcmc/samples_search_06/first.xml new file mode 100644 index 000000000..0bd25c46b --- /dev/null +++ b/bench_horn_mcmc/samples_search_06/first.xml @@ -0,0 +1,99 @@ + + + + + 3 + inv + + + + x + x1 + y + y1 + i + i1 + + + + x + y + i + + + + + x + 0 + + + + + y + 0 + + + + + i + 0 + + + + + + + x + y + i + + + x1 + y1 + i1 + + + + + i1 + + i + 1 + + + + + + x1 + + x + i1 + + + + + + y1 + + y + i1 + + + + + + + + x + y + i + + + + x + y + + + + + diff --git a/bench_horn_mcmc/samples_search_07/config b/bench_horn_mcmc/samples_search_07/config new file mode 100644 index 000000000..c06731ecb --- /dev/null +++ b/bench_horn_mcmc/samples_search_07/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +1 +0 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/samples_search_07/first.xml b/bench_horn_mcmc/samples_search_07/first.xml new file mode 100644 index 000000000..3c6d34f72 --- /dev/null +++ b/bench_horn_mcmc/samples_search_07/first.xml @@ -0,0 +1,128 @@ + + + + + 4 + inv + + + + x + x1 + y + y1 + i + i1 + j + j1 + nondet1 + nondet2 + + + + x + y + i + j + + + + + x + 0 + + + + + y + 0 + + + + + i + 0 + + + + + j + 0 + + + + + + + x + y + i + j + + + x1 + y1 + i1 + j1 + + + + + i1 + + i + nondet1 + + + + + + j1 + + j + nondet2 + + + + + + x1 + + x + nondet1 + + + + + + y1 + + y + nondet2 + + + + + + + + x + y + i + j + + + + + i + j + + + + x + y + + + + + diff --git a/bench_horn_mcmc/samples_search_08/config b/bench_horn_mcmc/samples_search_08/config new file mode 100644 index 000000000..4751d8dea --- /dev/null +++ b/bench_horn_mcmc/samples_search_08/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +7 +-100 -2 -1 0 1 2 100 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/samples_search_08/first.xml b/bench_horn_mcmc/samples_search_08/first.xml new file mode 100644 index 000000000..202291548 --- /dev/null +++ b/bench_horn_mcmc/samples_search_08/first.xml @@ -0,0 +1,91 @@ + + + + + 2 + inv + + + + x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + + + + x1 + x3 + + + + + x1 + -100 + + + + + x3 + + 2 + x1 + + + + + + + + x1 + x3 + + + x2 + x4 + + + + + x2 + + x1 + 1 + + + + + + x4 + + x2 + 2 + + + + + + + + x1 + x3 + + + + x1 + 0 + + + x3 + 0 + + + + + diff --git a/bench_horn_mcmc/samples_search_09/config b/bench_horn_mcmc/samples_search_09/config new file mode 100644 index 000000000..12a268ac3 --- /dev/null +++ b/bench_horn_mcmc/samples_search_09/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +2 +-1 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/samples_search_09/first.xml b/bench_horn_mcmc/samples_search_09/first.xml new file mode 100644 index 000000000..453e892f1 --- /dev/null +++ b/bench_horn_mcmc/samples_search_09/first.xml @@ -0,0 +1,82 @@ + + + + + 2 + inv + + + + x1 + x2 + x3 + x4 + + + + x1 + x3 + + + + + x1 + 1 + + + + + + + x1 + x3 + + + x2 + x4 + + + + + x2 + + x1 + x1 + + + + + + x4 + x1 + + + + + + + x1 + x3 + + + + x1 + + + + x3 + x3 + + x3 + + x3 + + + + x1 + 1 + + + + + diff --git a/bench_horn_mcmc/samples_search_10/config b/bench_horn_mcmc/samples_search_10/config new file mode 100644 index 000000000..2099276ec --- /dev/null +++ b/bench_horn_mcmc/samples_search_10/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +5 +-878 -602 0 602 878 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/samples_search_10/first.xml b/bench_horn_mcmc/samples_search_10/first.xml new file mode 100644 index 000000000..d362e69ed --- /dev/null +++ b/bench_horn_mcmc/samples_search_10/first.xml @@ -0,0 +1,76 @@ + + + + + 2 + inv + + + + x1 + x2 + x3 + x4 + + + + x1 + x3 + + + + + + x1 + 878 + + + x3 + 602 + + + + + + + + x1 + x3 + + + x2 + x4 + + + + + x3 + x1 + + + + + x4 + x2 + + + + + + + x1 + x3 + + + + x1 + 0 + + + x3 + 0 + + + + + diff --git a/bench_horn_mcmc/samples_search_11/config b/bench_horn_mcmc/samples_search_11/config new file mode 100644 index 000000000..ee1a2da97 --- /dev/null +++ b/bench_horn_mcmc/samples_search_11/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +6 +-1000 -500 -1 1 500 1000 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/samples_search_11/first.xml b/bench_horn_mcmc/samples_search_11/first.xml new file mode 100644 index 000000000..721863513 --- /dev/null +++ b/bench_horn_mcmc/samples_search_11/first.xml @@ -0,0 +1,107 @@ + + + + + 3 + itp + + + + x1 + x2 + x3 + x4 + x5 + x6 + + + + x1 + x3 + x5 + + + + + x1 + 1 + + + + + x3 + 1 + + + + + x5 + 1 + + + + + + + x1 + x3 + x5 + + + x2 + x4 + x6 + + + + + x2 + + x1 + 1 + + + + + + x4 + + x1 + x1 + + + + + + x6 + + x1 + x1 + x1 + + + + + + + + x1 + x3 + x5 + + + + + x5 + x3 + + 500 + + + x1 + 1000 + + + + + diff --git a/bench_horn_mcmc/samples_search_12/config b/bench_horn_mcmc/samples_search_12/config new file mode 100644 index 000000000..12a268ac3 --- /dev/null +++ b/bench_horn_mcmc/samples_search_12/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +2 +-1 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/samples_search_12/first.xml b/bench_horn_mcmc/samples_search_12/first.xml new file mode 100644 index 000000000..622bfd7ed --- /dev/null +++ b/bench_horn_mcmc/samples_search_12/first.xml @@ -0,0 +1,186 @@ + + + + + 6 + inv + + + + x + x1 + i + i1 + j + j1 + k + k1 + l + l1 + m + m1 + + + + x + i + j + k + l + m + + + + + x + 1 + + + + + i + 1 + + + + + j + 1 + + + + + k + 1 + + + + + l + 1 + + + + + m + 1 + + + + + + + x + i + j + k + l + m + + + x1 + i1 + j1 + k1 + l1 + m1 + + + + + x1 + + x + i + j + k + l + m + + + + + + i1 + + x + i + j + k + l + m + + + + + + j1 + + x + i + j + k + l + m + + + + + + k1 + + x + i + j + k + l + m + + + + + + l1 + + x + i + j + k + l + m + + + + + + m1 + + x + i + j + k + l + m + + + + + + + + x + i + j + k + l + m + + + + x + 1 + + + + + diff --git a/bench_horn_mcmc/samples_search_13/config b/bench_horn_mcmc/samples_search_13/config new file mode 100644 index 000000000..12a268ac3 --- /dev/null +++ b/bench_horn_mcmc/samples_search_13/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +2 +-1 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/samples_search_13/first.xml b/bench_horn_mcmc/samples_search_13/first.xml new file mode 100644 index 000000000..ec11e1c57 --- /dev/null +++ b/bench_horn_mcmc/samples_search_13/first.xml @@ -0,0 +1,194 @@ + + + + + 6 + inv + + + + x + x1 + i + i1 + j + j1 + k + k1 + l + l1 + m + m1 + + + + x + i + j + k + l + m + + + + + x + 1 + + + + + i + 1 + + + + + j + 1 + + + + + k + 1 + + + + + l + 1 + + + + + m + 1 + + + + + + + x + i + j + k + l + m + + + x1 + i1 + j1 + k1 + l1 + m1 + + + + + x1 + + x + i + j + k + l + m + + + + + + i1 + + x + i + j + k + l + m + + + + + + j1 + + x + i + j + k + l + m + + + + + + k1 + + x + i + j + k + l + m + + + + + + l1 + + x + i + j + k + l + m + + + + + + m1 + + x + i + j + k + l + m + + + + + + + + x + i + j + k + l + m + + + + + x + i + j + + + k + l + m + + + + + + diff --git a/bench_horn_mcmc/samples_search_14/config b/bench_horn_mcmc/samples_search_14/config new file mode 100644 index 000000000..0ef675755 --- /dev/null +++ b/bench_horn_mcmc/samples_search_14/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +4 +-5 -1 1 5 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/samples_search_14/first.xml b/bench_horn_mcmc/samples_search_14/first.xml new file mode 100644 index 000000000..215c06808 --- /dev/null +++ b/bench_horn_mcmc/samples_search_14/first.xml @@ -0,0 +1,195 @@ + + + + + 6 + inv + + + + x + x1 + i + i1 + j + j1 + k + k1 + l + l1 + m + m1 + + + + x + i + j + k + l + m + + + + + x + 1 + + + + + i + 1 + + + + + j + 1 + + + + + k + 1 + + + + + l + 1 + + + + + m + 1 + + + + + + + x + i + j + k + l + m + + + x1 + i1 + j1 + k1 + l1 + m1 + + + + + x1 + + x + i + j + k + l + m + + + + + + i1 + + x + i + j + k + l + m + + + + + + j1 + + x + i + j + k + l + m + + + + + + k1 + + x + i + j + k + l + m + + + + + + l1 + + x + i + j + k + l + m + + + + + + m1 + + x + i + j + k + l + m + + + + + + + + x + i + j + k + l + m + + + + + x + i + j + k + l + + + 5 + m + + + + + + diff --git a/bench_horn_mcmc/samples_search_15/config b/bench_horn_mcmc/samples_search_15/config new file mode 100644 index 000000000..eabddeadf --- /dev/null +++ b/bench_horn_mcmc/samples_search_15/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +6 +-4 -2 -1 1 2 4 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/samples_search_15/first.xml b/bench_horn_mcmc/samples_search_15/first.xml new file mode 100644 index 000000000..90e0765f1 --- /dev/null +++ b/bench_horn_mcmc/samples_search_15/first.xml @@ -0,0 +1,195 @@ + + + + + 6 + inv + + + + x + x1 + i + i1 + j + j1 + k + k1 + l + l1 + m + m1 + + + + x + i + j + k + l + m + + + + + x + 1 + + + + + i + 1 + + + + + j + 1 + + + + + k + 1 + + + + + l + 1 + + + + + m + 1 + + + + + + + x + i + j + k + l + m + + + x1 + i1 + j1 + k1 + l1 + m1 + + + + + x1 + + x + i + j + k + l + m + + + + + + i1 + + x + i + j + k + l + m + + + + + + j1 + + x + i + j + k + l + m + + + + + + k1 + + x + i + j + k + l + m + + + + + + l1 + + x + i + j + k + l + m + + + + + + m1 + + x + i + j + k + l + m + + + + + + + + x + i + j + k + l + m + + + + + 2 + + x + i + + + + 4 + m + + + + + + diff --git a/bench_horn_mcmc/samples_search_disj_ite_01/config b/bench_horn_mcmc/samples_search_disj_ite_01/config new file mode 100644 index 000000000..b9219dd0d --- /dev/null +++ b/bench_horn_mcmc/samples_search_disj_ite_01/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +7 +-100 -10 -1 0 1 10 100 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/samples_search_disj_ite_01/first.xml b/bench_horn_mcmc/samples_search_disj_ite_01/first.xml new file mode 100644 index 000000000..3f5219c46 --- /dev/null +++ b/bench_horn_mcmc/samples_search_disj_ite_01/first.xml @@ -0,0 +1,152 @@ + + + + + 2 + itp + + + + x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + c1 + c2 + + + + x1 + x3 + + + + + x1 + 0 + + + + + x3 + 100 + + + + + + + x1 + x3 + + + x2 + x4 + + + + + x2 + + x1 + 1 + + + + + + + + x2 + 0 + + + + + c1 + 1 + + + + + + + x2 + 0 + + + + + c1 + 0 + + + + + + + + + x3 + 10 + + + + + c2 + -1 + + + + + + + x3 + 10 + + + + + c2 + x3 + + + + + + + x4 + + c1 + c2 + + + + + + + + x1 + x3 + + + + + x1 + 10 + + + + x3 + x1 + + + + + diff --git a/bench_horn_mcmc/samples_search_disj_ite_02/config b/bench_horn_mcmc/samples_search_disj_ite_02/config new file mode 100644 index 000000000..b9219dd0d --- /dev/null +++ b/bench_horn_mcmc/samples_search_disj_ite_02/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +7 +-100 -10 -1 0 1 10 100 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/samples_search_disj_ite_02/first.xml b/bench_horn_mcmc/samples_search_disj_ite_02/first.xml new file mode 100644 index 000000000..cf16f8330 --- /dev/null +++ b/bench_horn_mcmc/samples_search_disj_ite_02/first.xml @@ -0,0 +1,155 @@ + + + + + 2 + itp + + + + x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + c1 + c2 + + + + x1 + x3 + + + + + x1 + 0 + + + + + x3 + 100 + + + + + + + x1 + x3 + + + x2 + x4 + + + + + x2 + + x1 + 1 + + + + + + + + x2 + 0 + + + + + c1 + x4 + + + + + + + x2 + 0 + + + + + c1 + + 1 + x4 + + + + + + + + + + x3 + 10 + + + + + c2 + 0 + + + + + + + x3 + 10 + + + + + c2 + + x3 + 1 + + + + + + + + c1 + c2 + + + + + + + x1 + x3 + + + + + x1 + 10 + + + + x3 + x1 + + + + + diff --git a/bench_horn_mcmc/samples_search_disj_ite_03/config b/bench_horn_mcmc/samples_search_disj_ite_03/config new file mode 100644 index 000000000..b9219dd0d --- /dev/null +++ b/bench_horn_mcmc/samples_search_disj_ite_03/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +7 +-100 -10 -1 0 1 10 100 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/samples_search_disj_ite_03/first.xml b/bench_horn_mcmc/samples_search_disj_ite_03/first.xml new file mode 100644 index 000000000..2f549bd59 --- /dev/null +++ b/bench_horn_mcmc/samples_search_disj_ite_03/first.xml @@ -0,0 +1,114 @@ + + + + + 2 + itp + + + + x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + + + + x1 + x3 + + + + + x1 + 0 + + + + + x3 + 100 + + + + + + + x1 + x3 + + + x2 + x4 + + + + + x2 + + x1 + 1 + + + + + + + + x3 + 10 + + + + + x4 + 0 + + + + + + + x3 + 10 + + + + + x4 + + x3 + 1 + + + + + + + + + + x1 + x3 + + + + + x1 + 10 + + + + x3 + x1 + + + + + diff --git a/bench_horn_mcmc/samples_search_disj_ite_04/config b/bench_horn_mcmc/samples_search_disj_ite_04/config new file mode 100644 index 000000000..b9219dd0d --- /dev/null +++ b/bench_horn_mcmc/samples_search_disj_ite_04/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +7 +-100 -10 -1 0 1 10 100 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/samples_search_disj_ite_04/first.xml b/bench_horn_mcmc/samples_search_disj_ite_04/first.xml new file mode 100644 index 000000000..5a4897891 --- /dev/null +++ b/bench_horn_mcmc/samples_search_disj_ite_04/first.xml @@ -0,0 +1,117 @@ + + + + + 2 + itp + + + + x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + + + + x1 + x3 + + + + + x1 + 0 + + + + + x3 + 100 + + + + + + + x1 + x3 + + + x2 + x4 + + + + + x2 + + x1 + 1 + + + + + + + + x3 + 10 + + + + + x4 + + 1 + -1 + + + + + + + + x3 + 10 + + + + + x4 + + 1 + x3 + + + + + + + + + + x1 + x3 + + + + + x1 + 10 + + + + x3 + x1 + + + + + diff --git a/bench_horn_mcmc/samples_search_disj_ite_05/config b/bench_horn_mcmc/samples_search_disj_ite_05/config new file mode 100644 index 000000000..59fbd1931 --- /dev/null +++ b/bench_horn_mcmc/samples_search_disj_ite_05/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +7 +-100 -50 -1 0 1 50 100 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/samples_search_disj_ite_05/first.xml b/bench_horn_mcmc/samples_search_disj_ite_05/first.xml new file mode 100644 index 000000000..3ab29ff7a --- /dev/null +++ b/bench_horn_mcmc/samples_search_disj_ite_05/first.xml @@ -0,0 +1,114 @@ + + + + + 2 + inv + + + + x + x2 + y + y2 + + + + x + y + + + + + x + 0 + + + + + y + 50 + + + + + + + x + y + + + x2 + y2 + + + + + x + 100 + + + + + x2 + + x + 1 + + + + + + + + x2 + 50 + + + + + y2 + + y + 1 + + + + + + + + x2 + 50 + + + + + y2 + y + + + + + + + + + x + y + + + + + x + 100 + + + + y + 100 + + + + + diff --git a/bench_horn_mcmc/samples_search_disj_ite_06/config b/bench_horn_mcmc/samples_search_disj_ite_06/config new file mode 100644 index 000000000..59fbd1931 --- /dev/null +++ b/bench_horn_mcmc/samples_search_disj_ite_06/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +7 +-100 -50 -1 0 1 50 100 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/samples_search_disj_ite_06/first.xml b/bench_horn_mcmc/samples_search_disj_ite_06/first.xml new file mode 100644 index 000000000..9fcdb9cc0 --- /dev/null +++ b/bench_horn_mcmc/samples_search_disj_ite_06/first.xml @@ -0,0 +1,114 @@ + + + + + 2 + inv + + + + x + x2 + y + y2 + + + + x + y + + + + + x + 0 + + + + + y + 50 + + + + + + + x + y + + + x2 + y2 + + + + + x + 100 + + + + + x2 + + x + 1 + + + + + + + + x2 + 50 + + + + + y2 + + y + 1 + + + + + + + + x2 + 50 + + + + + y2 + y + + + + + + + + + x + y + + + + + x + 50 + + + + y + x + + + + + diff --git a/bench_horn_mcmc/samples_shrink_big_numbers_1024/config b/bench_horn_mcmc/samples_shrink_big_numbers_1024/config new file mode 100644 index 000000000..1b06d1fb2 --- /dev/null +++ b/bench_horn_mcmc/samples_shrink_big_numbers_1024/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +2049 +-1024 -1023 -1022 -1021 -1020 -1019 -1018 -1017 -1016 -1015 -1014 -1013 -1012 -1011 -1010 -1009 -1008 -1007 -1006 -1005 -1004 -1003 -1002 -1001 -1000 -999 -998 -997 -996 -995 -994 -993 -992 -991 -990 -989 -988 -987 -986 -985 -984 -983 -982 -981 -980 -979 -978 -977 -976 -975 -974 -973 -972 -971 -970 -969 -968 -967 -966 -965 -964 -963 -962 -961 -960 -959 -958 -957 -956 -955 -954 -953 -952 -951 -950 -949 -948 -947 -946 -945 -944 -943 -942 -941 -940 -939 -938 -937 -936 -935 -934 -933 -932 -931 -930 -929 -928 -927 -926 -925 -924 -923 -922 -921 -920 -919 -918 -917 -916 -915 -914 -913 -912 -911 -910 -909 -908 -907 -906 -905 -904 -903 -902 -901 -900 -899 -898 -897 -896 -895 -894 -893 -892 -891 -890 -889 -888 -887 -886 -885 -884 -883 -882 -881 -880 -879 -878 -877 -876 -875 -874 -873 -872 -871 -870 -869 -868 -867 -866 -865 -864 -863 -862 -861 -860 -859 -858 -857 -856 -855 -854 -853 -852 -851 -850 -849 -848 -847 -846 -845 -844 -843 -842 -841 -840 -839 -838 -837 -836 -835 -834 -833 -832 -831 -830 -829 -828 -827 -826 -825 -824 -823 -822 -821 -820 -819 -818 -817 -816 -815 -814 -813 -812 -811 -810 -809 -808 -807 -806 -805 -804 -803 -802 -801 -800 -799 -798 -797 -796 -795 -794 -793 -792 -791 -790 -789 -788 -787 -786 -785 -784 -783 -782 -781 -780 -779 -778 -777 -776 -775 -774 -773 -772 -771 -770 -769 -768 -767 -766 -765 -764 -763 -762 -761 -760 -759 -758 -757 -756 -755 -754 -753 -752 -751 -750 -749 -748 -747 -746 -745 -744 -743 -742 -741 -740 -739 -738 -737 -736 -735 -734 -733 -732 -731 -730 -729 -728 -727 -726 -725 -724 -723 -722 -721 -720 -719 -718 -717 -716 -715 -714 -713 -712 -711 -710 -709 -708 -707 -706 -705 -704 -703 -702 -701 -700 -699 -698 -697 -696 -695 -694 -693 -692 -691 -690 -689 -688 -687 -686 -685 -684 -683 -682 -681 -680 -679 -678 -677 -676 -675 -674 -673 -672 -671 -670 -669 -668 -667 -666 -665 -664 -663 -662 -661 -660 -659 -658 -657 -656 -655 -654 -653 -652 -651 -650 -649 -648 -647 -646 -645 -644 -643 -642 -641 -640 -639 -638 -637 -636 -635 -634 -633 -632 -631 -630 -629 -628 -627 -626 -625 -624 -623 -622 -621 -620 -619 -618 -617 -616 -615 -614 -613 -612 -611 -610 -609 -608 -607 -606 -605 -604 -603 -602 -601 -600 -599 -598 -597 -596 -595 -594 -593 -592 -591 -590 -589 -588 -587 -586 -585 -584 -583 -582 -581 -580 -579 -578 -577 -576 -575 -574 -573 -572 -571 -570 -569 -568 -567 -566 -565 -564 -563 -562 -561 -560 -559 -558 -557 -556 -555 -554 -553 -552 -551 -550 -549 -548 -547 -546 -545 -544 -543 -542 -541 -540 -539 -538 -537 -536 -535 -534 -533 -532 -531 -530 -529 -528 -527 -526 -525 -524 -523 -522 -521 -520 -519 -518 -517 -516 -515 -514 -513 -512 -511 -510 -509 -508 -507 -506 -505 -504 -503 -502 -501 -500 -499 -498 -497 -496 -495 -494 -493 -492 -491 -490 -489 -488 -487 -486 -485 -484 -483 -482 -481 -480 -479 -478 -477 -476 -475 -474 -473 -472 -471 -470 -469 -468 -467 -466 -465 -464 -463 -462 -461 -460 -459 -458 -457 -456 -455 -454 -453 -452 -451 -450 -449 -448 -447 -446 -445 -444 -443 -442 -441 -440 -439 -438 -437 -436 -435 -434 -433 -432 -431 -430 -429 -428 -427 -426 -425 -424 -423 -422 -421 -420 -419 -418 -417 -416 -415 -414 -413 -412 -411 -410 -409 -408 -407 -406 -405 -404 -403 -402 -401 -400 -399 -398 -397 -396 -395 -394 -393 -392 -391 -390 -389 -388 -387 -386 -385 -384 -383 -382 -381 -380 -379 -378 -377 -376 -375 -374 -373 -372 -371 -370 -369 -368 -367 -366 -365 -364 -363 -362 -361 -360 -359 -358 -357 -356 -355 -354 -353 -352 -351 -350 -349 -348 -347 -346 -345 -344 -343 -342 -341 -340 -339 -338 -337 -336 -335 -334 -333 -332 -331 -330 -329 -328 -327 -326 -325 -324 -323 -322 -321 -320 -319 -318 -317 -316 -315 -314 -313 -312 -311 -310 -309 -308 -307 -306 -305 -304 -303 -302 -301 -300 -299 -298 -297 -296 -295 -294 -293 -292 -291 -290 -289 -288 -287 -286 -285 -284 -283 -282 -281 -280 -279 -278 -277 -276 -275 -274 -273 -272 -271 -270 -269 -268 -267 -266 -265 -264 -263 -262 -261 -260 -259 -258 -257 -256 -255 -254 -253 -252 -251 -250 -249 -248 -247 -246 -245 -244 -243 -242 -241 -240 -239 -238 -237 -236 -235 -234 -233 -232 -231 -230 -229 -228 -227 -226 -225 -224 -223 -222 -221 -220 -219 -218 -217 -216 -215 -214 -213 -212 -211 -210 -209 -208 -207 -206 -205 -204 -203 -202 -201 -200 -199 -198 -197 -196 -195 -194 -193 -192 -191 -190 -189 -188 -187 -186 -185 -184 -183 -182 -181 -180 -179 -178 -177 -176 -175 -174 -173 -172 -171 -170 -169 -168 -167 -166 -165 -164 -163 -162 -161 -160 -159 -158 -157 -156 -155 -154 -153 -152 -151 -150 -149 -148 -147 -146 -145 -144 -143 -142 -141 -140 -139 -138 -137 -136 -135 -134 -133 -132 -131 -130 -129 -128 -127 -126 -125 -124 -123 -122 -121 -120 -119 -118 -117 -116 -115 -114 -113 -112 -111 -110 -109 -108 -107 -106 -105 -104 -103 -102 -101 -100 -99 -98 -97 -96 -95 -94 -93 -92 -91 -90 -89 -88 -87 -86 -85 -84 -83 -82 -81 -80 -79 -78 -77 -76 -75 -74 -73 -72 -71 -70 -69 -68 -67 -66 -65 -64 -63 -62 -61 -60 -59 -58 -57 -56 -55 -54 -53 -52 -51 -50 -49 -48 -47 -46 -45 -44 -43 -42 -41 -40 -39 -38 -37 -36 -35 -34 -33 -32 -31 -30 -29 -28 -27 -26 -25 -24 -23 -22 -21 -20 -19 -18 -17 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/samples_shrink_big_numbers_1024/first.xml b/bench_horn_mcmc/samples_shrink_big_numbers_1024/first.xml new file mode 100644 index 000000000..ccf8e1e21 --- /dev/null +++ b/bench_horn_mcmc/samples_shrink_big_numbers_1024/first.xml @@ -0,0 +1,6197 @@ + + + + + 1 + itp + + + + x + x1 + + + + x + + + + + + x + 1 + + + + + x + 2 + + + + + x + 3 + + + + + x + 4 + + + + + x + 5 + + + + + x + 6 + + + + + x + 7 + + + + + x + 8 + + + + + x + 9 + + + + + x + 10 + + + + + x + 11 + + + + + x + 12 + + + + + x + 13 + + + + + x + 14 + + + + + x + 15 + + + + + x + 16 + + + + + x + 17 + + + + + x + 18 + + + + + x + 19 + + + + + x + 20 + + + + + x + 21 + + + + + x + 22 + + + + + x + 23 + + + + + x + 24 + + + + + x + 25 + + + + + x + 26 + + + + + x + 27 + + + + + x + 28 + + + + + x + 29 + + + + + x + 30 + + + + + x + 31 + + + + + x + 32 + + + + + x + 33 + + + + + x + 34 + + + + + x + 35 + + + + + x + 36 + + + + + x + 37 + + + + + x + 38 + + + + + x + 39 + + + + + x + 40 + + + + + x + 41 + + + + + x + 42 + + + + + x + 43 + + + + + x + 44 + + + + + x + 45 + + + + + x + 46 + + + + + x + 47 + + + + + x + 48 + + + + + x + 49 + + + + + x + 50 + + + + + x + 51 + + + + + x + 52 + + + + + x + 53 + + + + + x + 54 + + + + + x + 55 + + + + + x + 56 + + + + + x + 57 + + + + + x + 58 + + + + + x + 59 + + + + + x + 60 + + + + + x + 61 + + + + + x + 62 + + + + + x + 63 + + + + + x + 64 + + + + + x + 65 + + + + + x + 66 + + + + + x + 67 + + + + + x + 68 + + + + + x + 69 + + + + + x + 70 + + + + + x + 71 + + + + + x + 72 + + + + + x + 73 + + + + + x + 74 + + + + + x + 75 + + + + + x + 76 + + + + + x + 77 + + + + + x + 78 + + + + + x + 79 + + + + + x + 80 + + + + + x + 81 + + + + + x + 82 + + + + + x + 83 + + + + + x + 84 + + + + + x + 85 + + + + + x + 86 + + + + + x + 87 + + + + + x + 88 + + + + + x + 89 + + + + + x + 90 + + + + + x + 91 + + + + + x + 92 + + + + + x + 93 + + + + + x + 94 + + + + + x + 95 + + + + + x + 96 + + + + + x + 97 + + + + + x + 98 + + + + + x + 99 + + + + + x + 100 + + + + + x + 101 + + + + + x + 102 + + + + + x + 103 + + + + + x + 104 + + + + + x + 105 + + + + + x + 106 + + + + + x + 107 + + + + + x + 108 + + + + + x + 109 + + + + + x + 110 + + + + + x + 111 + + + + + x + 112 + + + + + x + 113 + + + + + x + 114 + + + + + x + 115 + + + + + x + 116 + + + + + x + 117 + + + + + x + 118 + + + + + x + 119 + + + + + x + 120 + + + + + x + 121 + + + + + x + 122 + + + + + x + 123 + + + + + x + 124 + + + + + x + 125 + + + + + x + 126 + + + + + x + 127 + + + + + x + 128 + + + + + x + 129 + + + + + x + 130 + + + + + x + 131 + + + + + x + 132 + + + + + x + 133 + + + + + x + 134 + + + + + x + 135 + + + + + x + 136 + + + + + x + 137 + + + + + x + 138 + + + + + x + 139 + + + + + x + 140 + + + + + x + 141 + + + + + x + 142 + + + + + x + 143 + + + + + x + 144 + + + + + x + 145 + + + + + x + 146 + + + + + x + 147 + + + + + x + 148 + + + + + x + 149 + + + + + x + 150 + + + + + x + 151 + + + + + x + 152 + + + + + x + 153 + + + + + x + 154 + + + + + x + 155 + + + + + x + 156 + + + + + x + 157 + + + + + x + 158 + + + + + x + 159 + + + + + x + 160 + + + + + x + 161 + + + + + x + 162 + + + + + x + 163 + + + + + x + 164 + + + + + x + 165 + + + + + x + 166 + + + + + x + 167 + + + + + x + 168 + + + + + x + 169 + + + + + x + 170 + + + + + x + 171 + + + + + x + 172 + + + + + x + 173 + + + + + x + 174 + + + + + x + 175 + + + + + x + 176 + + + + + x + 177 + + + + + x + 178 + + + + + x + 179 + + + + + x + 180 + + + + + x + 181 + + + + + x + 182 + + + + + x + 183 + + + + + x + 184 + + + + + x + 185 + + + + + x + 186 + + + + + x + 187 + + + + + x + 188 + + + + + x + 189 + + + + + x + 190 + + + + + x + 191 + + + + + x + 192 + + + + + x + 193 + + + + + x + 194 + + + + + x + 195 + + + + + x + 196 + + + + + x + 197 + + + + + x + 198 + + + + + x + 199 + + + + + x + 200 + + + + + x + 201 + + + + + x + 202 + + + + + x + 203 + + + + + x + 204 + + + + + x + 205 + + + + + x + 206 + + + + + x + 207 + + + + + x + 208 + + + + + x + 209 + + + + + x + 210 + + + + + x + 211 + + + + + x + 212 + + + + + x + 213 + + + + + x + 214 + + + + + x + 215 + + + + + x + 216 + + + + + x + 217 + + + + + x + 218 + + + + + x + 219 + + + + + x + 220 + + + + + x + 221 + + + + + x + 222 + + + + + x + 223 + + + + + x + 224 + + + + + x + 225 + + + + + x + 226 + + + + + x + 227 + + + + + x + 228 + + + + + x + 229 + + + + + x + 230 + + + + + x + 231 + + + + + x + 232 + + + + + x + 233 + + + + + x + 234 + + + + + x + 235 + + + + + x + 236 + + + + + x + 237 + + + + + x + 238 + + + + + x + 239 + + + + + x + 240 + + + + + x + 241 + + + + + x + 242 + + + + + x + 243 + + + + + x + 244 + + + + + x + 245 + + + + + x + 246 + + + + + x + 247 + + + + + x + 248 + + + + + x + 249 + + + + + x + 250 + + + + + x + 251 + + + + + x + 252 + + + + + x + 253 + + + + + x + 254 + + + + + x + 255 + + + + + x + 256 + + + + + x + 257 + + + + + x + 258 + + + + + x + 259 + + + + + x + 260 + + + + + x + 261 + + + + + x + 262 + + + + + x + 263 + + + + + x + 264 + + + + + x + 265 + + + + + x + 266 + + + + + x + 267 + + + + + x + 268 + + + + + x + 269 + + + + + x + 270 + + + + + x + 271 + + + + + x + 272 + + + + + x + 273 + + + + + x + 274 + + + + + x + 275 + + + + + x + 276 + + + + + x + 277 + + + + + x + 278 + + + + + x + 279 + + + + + x + 280 + + + + + x + 281 + + + + + x + 282 + + + + + x + 283 + + + + + x + 284 + + + + + x + 285 + + + + + x + 286 + + + + + x + 287 + + + + + x + 288 + + + + + x + 289 + + + + + x + 290 + + + + + x + 291 + + + + + x + 292 + + + + + x + 293 + + + + + x + 294 + + + + + x + 295 + + + + + x + 296 + + + + + x + 297 + + + + + x + 298 + + + + + x + 299 + + + + + x + 300 + + + + + x + 301 + + + + + x + 302 + + + + + x + 303 + + + + + x + 304 + + + + + x + 305 + + + + + x + 306 + + + + + x + 307 + + + + + x + 308 + + + + + x + 309 + + + + + x + 310 + + + + + x + 311 + + + + + x + 312 + + + + + x + 313 + + + + + x + 314 + + + + + x + 315 + + + + + x + 316 + + + + + x + 317 + + + + + x + 318 + + + + + x + 319 + + + + + x + 320 + + + + + x + 321 + + + + + x + 322 + + + + + x + 323 + + + + + x + 324 + + + + + x + 325 + + + + + x + 326 + + + + + x + 327 + + + + + x + 328 + + + + + x + 329 + + + + + x + 330 + + + + + x + 331 + + + + + x + 332 + + + + + x + 333 + + + + + x + 334 + + + + + x + 335 + + + + + x + 336 + + + + + x + 337 + + + + + x + 338 + + + + + x + 339 + + + + + x + 340 + + + + + x + 341 + + + + + x + 342 + + + + + x + 343 + + + + + x + 344 + + + + + x + 345 + + + + + x + 346 + + + + + x + 347 + + + + + x + 348 + + + + + x + 349 + + + + + x + 350 + + + + + x + 351 + + + + + x + 352 + + + + + x + 353 + + + + + x + 354 + + + + + x + 355 + + + + + x + 356 + + + + + x + 357 + + + + + x + 358 + + + + + x + 359 + + + + + x + 360 + + + + + x + 361 + + + + + x + 362 + + + + + x + 363 + + + + + x + 364 + + + + + x + 365 + + + + + x + 366 + + + + + x + 367 + + + + + x + 368 + + + + + x + 369 + + + + + x + 370 + + + + + x + 371 + + + + + x + 372 + + + + + x + 373 + + + + + x + 374 + + + + + x + 375 + + + + + x + 376 + + + + + x + 377 + + + + + x + 378 + + + + + x + 379 + + + + + x + 380 + + + + + x + 381 + + + + + x + 382 + + + + + x + 383 + + + + + x + 384 + + + + + x + 385 + + + + + x + 386 + + + + + x + 387 + + + + + x + 388 + + + + + x + 389 + + + + + x + 390 + + + + + x + 391 + + + + + x + 392 + + + + + x + 393 + + + + + x + 394 + + + + + x + 395 + + + + + x + 396 + + + + + x + 397 + + + + + x + 398 + + + + + x + 399 + + + + + x + 400 + + + + + x + 401 + + + + + x + 402 + + + + + x + 403 + + + + + x + 404 + + + + + x + 405 + + + + + x + 406 + + + + + x + 407 + + + + + x + 408 + + + + + x + 409 + + + + + x + 410 + + + + + x + 411 + + + + + x + 412 + + + + + x + 413 + + + + + x + 414 + + + + + x + 415 + + + + + x + 416 + + + + + x + 417 + + + + + x + 418 + + + + + x + 419 + + + + + x + 420 + + + + + x + 421 + + + + + x + 422 + + + + + x + 423 + + + + + x + 424 + + + + + x + 425 + + + + + x + 426 + + + + + x + 427 + + + + + x + 428 + + + + + x + 429 + + + + + x + 430 + + + + + x + 431 + + + + + x + 432 + + + + + x + 433 + + + + + x + 434 + + + + + x + 435 + + + + + x + 436 + + + + + x + 437 + + + + + x + 438 + + + + + x + 439 + + + + + x + 440 + + + + + x + 441 + + + + + x + 442 + + + + + x + 443 + + + + + x + 444 + + + + + x + 445 + + + + + x + 446 + + + + + x + 447 + + + + + x + 448 + + + + + x + 449 + + + + + x + 450 + + + + + x + 451 + + + + + x + 452 + + + + + x + 453 + + + + + x + 454 + + + + + x + 455 + + + + + x + 456 + + + + + x + 457 + + + + + x + 458 + + + + + x + 459 + + + + + x + 460 + + + + + x + 461 + + + + + x + 462 + + + + + x + 463 + + + + + x + 464 + + + + + x + 465 + + + + + x + 466 + + + + + x + 467 + + + + + x + 468 + + + + + x + 469 + + + + + x + 470 + + + + + x + 471 + + + + + x + 472 + + + + + x + 473 + + + + + x + 474 + + + + + x + 475 + + + + + x + 476 + + + + + x + 477 + + + + + x + 478 + + + + + x + 479 + + + + + x + 480 + + + + + x + 481 + + + + + x + 482 + + + + + x + 483 + + + + + x + 484 + + + + + x + 485 + + + + + x + 486 + + + + + x + 487 + + + + + x + 488 + + + + + x + 489 + + + + + x + 490 + + + + + x + 491 + + + + + x + 492 + + + + + x + 493 + + + + + x + 494 + + + + + x + 495 + + + + + x + 496 + + + + + x + 497 + + + + + x + 498 + + + + + x + 499 + + + + + x + 500 + + + + + x + 501 + + + + + x + 502 + + + + + x + 503 + + + + + x + 504 + + + + + x + 505 + + + + + x + 506 + + + + + x + 507 + + + + + x + 508 + + + + + x + 509 + + + + + x + 510 + + + + + x + 511 + + + + + x + 512 + + + + + x + 513 + + + + + x + 514 + + + + + x + 515 + + + + + x + 516 + + + + + x + 517 + + + + + x + 518 + + + + + x + 519 + + + + + x + 520 + + + + + x + 521 + + + + + x + 522 + + + + + x + 523 + + + + + x + 524 + + + + + x + 525 + + + + + x + 526 + + + + + x + 527 + + + + + x + 528 + + + + + x + 529 + + + + + x + 530 + + + + + x + 531 + + + + + x + 532 + + + + + x + 533 + + + + + x + 534 + + + + + x + 535 + + + + + x + 536 + + + + + x + 537 + + + + + x + 538 + + + + + x + 539 + + + + + x + 540 + + + + + x + 541 + + + + + x + 542 + + + + + x + 543 + + + + + x + 544 + + + + + x + 545 + + + + + x + 546 + + + + + x + 547 + + + + + x + 548 + + + + + x + 549 + + + + + x + 550 + + + + + x + 551 + + + + + x + 552 + + + + + x + 553 + + + + + x + 554 + + + + + x + 555 + + + + + x + 556 + + + + + x + 557 + + + + + x + 558 + + + + + x + 559 + + + + + x + 560 + + + + + x + 561 + + + + + x + 562 + + + + + x + 563 + + + + + x + 564 + + + + + x + 565 + + + + + x + 566 + + + + + x + 567 + + + + + x + 568 + + + + + x + 569 + + + + + x + 570 + + + + + x + 571 + + + + + x + 572 + + + + + x + 573 + + + + + x + 574 + + + + + x + 575 + + + + + x + 576 + + + + + x + 577 + + + + + x + 578 + + + + + x + 579 + + + + + x + 580 + + + + + x + 581 + + + + + x + 582 + + + + + x + 583 + + + + + x + 584 + + + + + x + 585 + + + + + x + 586 + + + + + x + 587 + + + + + x + 588 + + + + + x + 589 + + + + + x + 590 + + + + + x + 591 + + + + + x + 592 + + + + + x + 593 + + + + + x + 594 + + + + + x + 595 + + + + + x + 596 + + + + + x + 597 + + + + + x + 598 + + + + + x + 599 + + + + + x + 600 + + + + + x + 601 + + + + + x + 602 + + + + + x + 603 + + + + + x + 604 + + + + + x + 605 + + + + + x + 606 + + + + + x + 607 + + + + + x + 608 + + + + + x + 609 + + + + + x + 610 + + + + + x + 611 + + + + + x + 612 + + + + + x + 613 + + + + + x + 614 + + + + + x + 615 + + + + + x + 616 + + + + + x + 617 + + + + + x + 618 + + + + + x + 619 + + + + + x + 620 + + + + + x + 621 + + + + + x + 622 + + + + + x + 623 + + + + + x + 624 + + + + + x + 625 + + + + + x + 626 + + + + + x + 627 + + + + + x + 628 + + + + + x + 629 + + + + + x + 630 + + + + + x + 631 + + + + + x + 632 + + + + + x + 633 + + + + + x + 634 + + + + + x + 635 + + + + + x + 636 + + + + + x + 637 + + + + + x + 638 + + + + + x + 639 + + + + + x + 640 + + + + + x + 641 + + + + + x + 642 + + + + + x + 643 + + + + + x + 644 + + + + + x + 645 + + + + + x + 646 + + + + + x + 647 + + + + + x + 648 + + + + + x + 649 + + + + + x + 650 + + + + + x + 651 + + + + + x + 652 + + + + + x + 653 + + + + + x + 654 + + + + + x + 655 + + + + + x + 656 + + + + + x + 657 + + + + + x + 658 + + + + + x + 659 + + + + + x + 660 + + + + + x + 661 + + + + + x + 662 + + + + + x + 663 + + + + + x + 664 + + + + + x + 665 + + + + + x + 666 + + + + + x + 667 + + + + + x + 668 + + + + + x + 669 + + + + + x + 670 + + + + + x + 671 + + + + + x + 672 + + + + + x + 673 + + + + + x + 674 + + + + + x + 675 + + + + + x + 676 + + + + + x + 677 + + + + + x + 678 + + + + + x + 679 + + + + + x + 680 + + + + + x + 681 + + + + + x + 682 + + + + + x + 683 + + + + + x + 684 + + + + + x + 685 + + + + + x + 686 + + + + + x + 687 + + + + + x + 688 + + + + + x + 689 + + + + + x + 690 + + + + + x + 691 + + + + + x + 692 + + + + + x + 693 + + + + + x + 694 + + + + + x + 695 + + + + + x + 696 + + + + + x + 697 + + + + + x + 698 + + + + + x + 699 + + + + + x + 700 + + + + + x + 701 + + + + + x + 702 + + + + + x + 703 + + + + + x + 704 + + + + + x + 705 + + + + + x + 706 + + + + + x + 707 + + + + + x + 708 + + + + + x + 709 + + + + + x + 710 + + + + + x + 711 + + + + + x + 712 + + + + + x + 713 + + + + + x + 714 + + + + + x + 715 + + + + + x + 716 + + + + + x + 717 + + + + + x + 718 + + + + + x + 719 + + + + + x + 720 + + + + + x + 721 + + + + + x + 722 + + + + + x + 723 + + + + + x + 724 + + + + + x + 725 + + + + + x + 726 + + + + + x + 727 + + + + + x + 728 + + + + + x + 729 + + + + + x + 730 + + + + + x + 731 + + + + + x + 732 + + + + + x + 733 + + + + + x + 734 + + + + + x + 735 + + + + + x + 736 + + + + + x + 737 + + + + + x + 738 + + + + + x + 739 + + + + + x + 740 + + + + + x + 741 + + + + + x + 742 + + + + + x + 743 + + + + + x + 744 + + + + + x + 745 + + + + + x + 746 + + + + + x + 747 + + + + + x + 748 + + + + + x + 749 + + + + + x + 750 + + + + + x + 751 + + + + + x + 752 + + + + + x + 753 + + + + + x + 754 + + + + + x + 755 + + + + + x + 756 + + + + + x + 757 + + + + + x + 758 + + + + + x + 759 + + + + + x + 760 + + + + + x + 761 + + + + + x + 762 + + + + + x + 763 + + + + + x + 764 + + + + + x + 765 + + + + + x + 766 + + + + + x + 767 + + + + + x + 768 + + + + + x + 769 + + + + + x + 770 + + + + + x + 771 + + + + + x + 772 + + + + + x + 773 + + + + + x + 774 + + + + + x + 775 + + + + + x + 776 + + + + + x + 777 + + + + + x + 778 + + + + + x + 779 + + + + + x + 780 + + + + + x + 781 + + + + + x + 782 + + + + + x + 783 + + + + + x + 784 + + + + + x + 785 + + + + + x + 786 + + + + + x + 787 + + + + + x + 788 + + + + + x + 789 + + + + + x + 790 + + + + + x + 791 + + + + + x + 792 + + + + + x + 793 + + + + + x + 794 + + + + + x + 795 + + + + + x + 796 + + + + + x + 797 + + + + + x + 798 + + + + + x + 799 + + + + + x + 800 + + + + + x + 801 + + + + + x + 802 + + + + + x + 803 + + + + + x + 804 + + + + + x + 805 + + + + + x + 806 + + + + + x + 807 + + + + + x + 808 + + + + + x + 809 + + + + + x + 810 + + + + + x + 811 + + + + + x + 812 + + + + + x + 813 + + + + + x + 814 + + + + + x + 815 + + + + + x + 816 + + + + + x + 817 + + + + + x + 818 + + + + + x + 819 + + + + + x + 820 + + + + + x + 821 + + + + + x + 822 + + + + + x + 823 + + + + + x + 824 + + + + + x + 825 + + + + + x + 826 + + + + + x + 827 + + + + + x + 828 + + + + + x + 829 + + + + + x + 830 + + + + + x + 831 + + + + + x + 832 + + + + + x + 833 + + + + + x + 834 + + + + + x + 835 + + + + + x + 836 + + + + + x + 837 + + + + + x + 838 + + + + + x + 839 + + + + + x + 840 + + + + + x + 841 + + + + + x + 842 + + + + + x + 843 + + + + + x + 844 + + + + + x + 845 + + + + + x + 846 + + + + + x + 847 + + + + + x + 848 + + + + + x + 849 + + + + + x + 850 + + + + + x + 851 + + + + + x + 852 + + + + + x + 853 + + + + + x + 854 + + + + + x + 855 + + + + + x + 856 + + + + + x + 857 + + + + + x + 858 + + + + + x + 859 + + + + + x + 860 + + + + + x + 861 + + + + + x + 862 + + + + + x + 863 + + + + + x + 864 + + + + + x + 865 + + + + + x + 866 + + + + + x + 867 + + + + + x + 868 + + + + + x + 869 + + + + + x + 870 + + + + + x + 871 + + + + + x + 872 + + + + + x + 873 + + + + + x + 874 + + + + + x + 875 + + + + + x + 876 + + + + + x + 877 + + + + + x + 878 + + + + + x + 879 + + + + + x + 880 + + + + + x + 881 + + + + + x + 882 + + + + + x + 883 + + + + + x + 884 + + + + + x + 885 + + + + + x + 886 + + + + + x + 887 + + + + + x + 888 + + + + + x + 889 + + + + + x + 890 + + + + + x + 891 + + + + + x + 892 + + + + + x + 893 + + + + + x + 894 + + + + + x + 895 + + + + + x + 896 + + + + + x + 897 + + + + + x + 898 + + + + + x + 899 + + + + + x + 900 + + + + + x + 901 + + + + + x + 902 + + + + + x + 903 + + + + + x + 904 + + + + + x + 905 + + + + + x + 906 + + + + + x + 907 + + + + + x + 908 + + + + + x + 909 + + + + + x + 910 + + + + + x + 911 + + + + + x + 912 + + + + + x + 913 + + + + + x + 914 + + + + + x + 915 + + + + + x + 916 + + + + + x + 917 + + + + + x + 918 + + + + + x + 919 + + + + + x + 920 + + + + + x + 921 + + + + + x + 922 + + + + + x + 923 + + + + + x + 924 + + + + + x + 925 + + + + + x + 926 + + + + + x + 927 + + + + + x + 928 + + + + + x + 929 + + + + + x + 930 + + + + + x + 931 + + + + + x + 932 + + + + + x + 933 + + + + + x + 934 + + + + + x + 935 + + + + + x + 936 + + + + + x + 937 + + + + + x + 938 + + + + + x + 939 + + + + + x + 940 + + + + + x + 941 + + + + + x + 942 + + + + + x + 943 + + + + + x + 944 + + + + + x + 945 + + + + + x + 946 + + + + + x + 947 + + + + + x + 948 + + + + + x + 949 + + + + + x + 950 + + + + + x + 951 + + + + + x + 952 + + + + + x + 953 + + + + + x + 954 + + + + + x + 955 + + + + + x + 956 + + + + + x + 957 + + + + + x + 958 + + + + + x + 959 + + + + + x + 960 + + + + + x + 961 + + + + + x + 962 + + + + + x + 963 + + + + + x + 964 + + + + + x + 965 + + + + + x + 966 + + + + + x + 967 + + + + + x + 968 + + + + + x + 969 + + + + + x + 970 + + + + + x + 971 + + + + + x + 972 + + + + + x + 973 + + + + + x + 974 + + + + + x + 975 + + + + + x + 976 + + + + + x + 977 + + + + + x + 978 + + + + + x + 979 + + + + + x + 980 + + + + + x + 981 + + + + + x + 982 + + + + + x + 983 + + + + + x + 984 + + + + + x + 985 + + + + + x + 986 + + + + + x + 987 + + + + + x + 988 + + + + + x + 989 + + + + + x + 990 + + + + + x + 991 + + + + + x + 992 + + + + + x + 993 + + + + + x + 994 + + + + + x + 995 + + + + + x + 996 + + + + + x + 997 + + + + + x + 998 + + + + + x + 999 + + + + + x + 1000 + + + + + x + 1001 + + + + + x + 1002 + + + + + x + 1003 + + + + + x + 1004 + + + + + x + 1005 + + + + + x + 1006 + + + + + x + 1007 + + + + + x + 1008 + + + + + x + 1009 + + + + + x + 1010 + + + + + x + 1011 + + + + + x + 1012 + + + + + x + 1013 + + + + + x + 1014 + + + + + x + 1015 + + + + + x + 1016 + + + + + x + 1017 + + + + + x + 1018 + + + + + x + 1019 + + + + + x + 1020 + + + + + x + 1021 + + + + + x + 1022 + + + + + x + 1023 + + + + + x + 1024 + + + + + + + + x + + + x1 + + + + + x1 + + x + 1 + + + + + + + + x + + + + x + 0 + + + + + diff --git a/bench_horn_mcmc/samples_shrink_big_numbers_2048/config b/bench_horn_mcmc/samples_shrink_big_numbers_2048/config new file mode 100644 index 000000000..649f88219 --- /dev/null +++ b/bench_horn_mcmc/samples_shrink_big_numbers_2048/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +4097 +-2048 -2047 -2046 -2045 -2044 -2043 -2042 -2041 -2040 -2039 -2038 -2037 -2036 -2035 -2034 -2033 -2032 -2031 -2030 -2029 -2028 -2027 -2026 -2025 -2024 -2023 -2022 -2021 -2020 -2019 -2018 -2017 -2016 -2015 -2014 -2013 -2012 -2011 -2010 -2009 -2008 -2007 -2006 -2005 -2004 -2003 -2002 -2001 -2000 -1999 -1998 -1997 -1996 -1995 -1994 -1993 -1992 -1991 -1990 -1989 -1988 -1987 -1986 -1985 -1984 -1983 -1982 -1981 -1980 -1979 -1978 -1977 -1976 -1975 -1974 -1973 -1972 -1971 -1970 -1969 -1968 -1967 -1966 -1965 -1964 -1963 -1962 -1961 -1960 -1959 -1958 -1957 -1956 -1955 -1954 -1953 -1952 -1951 -1950 -1949 -1948 -1947 -1946 -1945 -1944 -1943 -1942 -1941 -1940 -1939 -1938 -1937 -1936 -1935 -1934 -1933 -1932 -1931 -1930 -1929 -1928 -1927 -1926 -1925 -1924 -1923 -1922 -1921 -1920 -1919 -1918 -1917 -1916 -1915 -1914 -1913 -1912 -1911 -1910 -1909 -1908 -1907 -1906 -1905 -1904 -1903 -1902 -1901 -1900 -1899 -1898 -1897 -1896 -1895 -1894 -1893 -1892 -1891 -1890 -1889 -1888 -1887 -1886 -1885 -1884 -1883 -1882 -1881 -1880 -1879 -1878 -1877 -1876 -1875 -1874 -1873 -1872 -1871 -1870 -1869 -1868 -1867 -1866 -1865 -1864 -1863 -1862 -1861 -1860 -1859 -1858 -1857 -1856 -1855 -1854 -1853 -1852 -1851 -1850 -1849 -1848 -1847 -1846 -1845 -1844 -1843 -1842 -1841 -1840 -1839 -1838 -1837 -1836 -1835 -1834 -1833 -1832 -1831 -1830 -1829 -1828 -1827 -1826 -1825 -1824 -1823 -1822 -1821 -1820 -1819 -1818 -1817 -1816 -1815 -1814 -1813 -1812 -1811 -1810 -1809 -1808 -1807 -1806 -1805 -1804 -1803 -1802 -1801 -1800 -1799 -1798 -1797 -1796 -1795 -1794 -1793 -1792 -1791 -1790 -1789 -1788 -1787 -1786 -1785 -1784 -1783 -1782 -1781 -1780 -1779 -1778 -1777 -1776 -1775 -1774 -1773 -1772 -1771 -1770 -1769 -1768 -1767 -1766 -1765 -1764 -1763 -1762 -1761 -1760 -1759 -1758 -1757 -1756 -1755 -1754 -1753 -1752 -1751 -1750 -1749 -1748 -1747 -1746 -1745 -1744 -1743 -1742 -1741 -1740 -1739 -1738 -1737 -1736 -1735 -1734 -1733 -1732 -1731 -1730 -1729 -1728 -1727 -1726 -1725 -1724 -1723 -1722 -1721 -1720 -1719 -1718 -1717 -1716 -1715 -1714 -1713 -1712 -1711 -1710 -1709 -1708 -1707 -1706 -1705 -1704 -1703 -1702 -1701 -1700 -1699 -1698 -1697 -1696 -1695 -1694 -1693 -1692 -1691 -1690 -1689 -1688 -1687 -1686 -1685 -1684 -1683 -1682 -1681 -1680 -1679 -1678 -1677 -1676 -1675 -1674 -1673 -1672 -1671 -1670 -1669 -1668 -1667 -1666 -1665 -1664 -1663 -1662 -1661 -1660 -1659 -1658 -1657 -1656 -1655 -1654 -1653 -1652 -1651 -1650 -1649 -1648 -1647 -1646 -1645 -1644 -1643 -1642 -1641 -1640 -1639 -1638 -1637 -1636 -1635 -1634 -1633 -1632 -1631 -1630 -1629 -1628 -1627 -1626 -1625 -1624 -1623 -1622 -1621 -1620 -1619 -1618 -1617 -1616 -1615 -1614 -1613 -1612 -1611 -1610 -1609 -1608 -1607 -1606 -1605 -1604 -1603 -1602 -1601 -1600 -1599 -1598 -1597 -1596 -1595 -1594 -1593 -1592 -1591 -1590 -1589 -1588 -1587 -1586 -1585 -1584 -1583 -1582 -1581 -1580 -1579 -1578 -1577 -1576 -1575 -1574 -1573 -1572 -1571 -1570 -1569 -1568 -1567 -1566 -1565 -1564 -1563 -1562 -1561 -1560 -1559 -1558 -1557 -1556 -1555 -1554 -1553 -1552 -1551 -1550 -1549 -1548 -1547 -1546 -1545 -1544 -1543 -1542 -1541 -1540 -1539 -1538 -1537 -1536 -1535 -1534 -1533 -1532 -1531 -1530 -1529 -1528 -1527 -1526 -1525 -1524 -1523 -1522 -1521 -1520 -1519 -1518 -1517 -1516 -1515 -1514 -1513 -1512 -1511 -1510 -1509 -1508 -1507 -1506 -1505 -1504 -1503 -1502 -1501 -1500 -1499 -1498 -1497 -1496 -1495 -1494 -1493 -1492 -1491 -1490 -1489 -1488 -1487 -1486 -1485 -1484 -1483 -1482 -1481 -1480 -1479 -1478 -1477 -1476 -1475 -1474 -1473 -1472 -1471 -1470 -1469 -1468 -1467 -1466 -1465 -1464 -1463 -1462 -1461 -1460 -1459 -1458 -1457 -1456 -1455 -1454 -1453 -1452 -1451 -1450 -1449 -1448 -1447 -1446 -1445 -1444 -1443 -1442 -1441 -1440 -1439 -1438 -1437 -1436 -1435 -1434 -1433 -1432 -1431 -1430 -1429 -1428 -1427 -1426 -1425 -1424 -1423 -1422 -1421 -1420 -1419 -1418 -1417 -1416 -1415 -1414 -1413 -1412 -1411 -1410 -1409 -1408 -1407 -1406 -1405 -1404 -1403 -1402 -1401 -1400 -1399 -1398 -1397 -1396 -1395 -1394 -1393 -1392 -1391 -1390 -1389 -1388 -1387 -1386 -1385 -1384 -1383 -1382 -1381 -1380 -1379 -1378 -1377 -1376 -1375 -1374 -1373 -1372 -1371 -1370 -1369 -1368 -1367 -1366 -1365 -1364 -1363 -1362 -1361 -1360 -1359 -1358 -1357 -1356 -1355 -1354 -1353 -1352 -1351 -1350 -1349 -1348 -1347 -1346 -1345 -1344 -1343 -1342 -1341 -1340 -1339 -1338 -1337 -1336 -1335 -1334 -1333 -1332 -1331 -1330 -1329 -1328 -1327 -1326 -1325 -1324 -1323 -1322 -1321 -1320 -1319 -1318 -1317 -1316 -1315 -1314 -1313 -1312 -1311 -1310 -1309 -1308 -1307 -1306 -1305 -1304 -1303 -1302 -1301 -1300 -1299 -1298 -1297 -1296 -1295 -1294 -1293 -1292 -1291 -1290 -1289 -1288 -1287 -1286 -1285 -1284 -1283 -1282 -1281 -1280 -1279 -1278 -1277 -1276 -1275 -1274 -1273 -1272 -1271 -1270 -1269 -1268 -1267 -1266 -1265 -1264 -1263 -1262 -1261 -1260 -1259 -1258 -1257 -1256 -1255 -1254 -1253 -1252 -1251 -1250 -1249 -1248 -1247 -1246 -1245 -1244 -1243 -1242 -1241 -1240 -1239 -1238 -1237 -1236 -1235 -1234 -1233 -1232 -1231 -1230 -1229 -1228 -1227 -1226 -1225 -1224 -1223 -1222 -1221 -1220 -1219 -1218 -1217 -1216 -1215 -1214 -1213 -1212 -1211 -1210 -1209 -1208 -1207 -1206 -1205 -1204 -1203 -1202 -1201 -1200 -1199 -1198 -1197 -1196 -1195 -1194 -1193 -1192 -1191 -1190 -1189 -1188 -1187 -1186 -1185 -1184 -1183 -1182 -1181 -1180 -1179 -1178 -1177 -1176 -1175 -1174 -1173 -1172 -1171 -1170 -1169 -1168 -1167 -1166 -1165 -1164 -1163 -1162 -1161 -1160 -1159 -1158 -1157 -1156 -1155 -1154 -1153 -1152 -1151 -1150 -1149 -1148 -1147 -1146 -1145 -1144 -1143 -1142 -1141 -1140 -1139 -1138 -1137 -1136 -1135 -1134 -1133 -1132 -1131 -1130 -1129 -1128 -1127 -1126 -1125 -1124 -1123 -1122 -1121 -1120 -1119 -1118 -1117 -1116 -1115 -1114 -1113 -1112 -1111 -1110 -1109 -1108 -1107 -1106 -1105 -1104 -1103 -1102 -1101 -1100 -1099 -1098 -1097 -1096 -1095 -1094 -1093 -1092 -1091 -1090 -1089 -1088 -1087 -1086 -1085 -1084 -1083 -1082 -1081 -1080 -1079 -1078 -1077 -1076 -1075 -1074 -1073 -1072 -1071 -1070 -1069 -1068 -1067 -1066 -1065 -1064 -1063 -1062 -1061 -1060 -1059 -1058 -1057 -1056 -1055 -1054 -1053 -1052 -1051 -1050 -1049 -1048 -1047 -1046 -1045 -1044 -1043 -1042 -1041 -1040 -1039 -1038 -1037 -1036 -1035 -1034 -1033 -1032 -1031 -1030 -1029 -1028 -1027 -1026 -1025 -1024 -1023 -1022 -1021 -1020 -1019 -1018 -1017 -1016 -1015 -1014 -1013 -1012 -1011 -1010 -1009 -1008 -1007 -1006 -1005 -1004 -1003 -1002 -1001 -1000 -999 -998 -997 -996 -995 -994 -993 -992 -991 -990 -989 -988 -987 -986 -985 -984 -983 -982 -981 -980 -979 -978 -977 -976 -975 -974 -973 -972 -971 -970 -969 -968 -967 -966 -965 -964 -963 -962 -961 -960 -959 -958 -957 -956 -955 -954 -953 -952 -951 -950 -949 -948 -947 -946 -945 -944 -943 -942 -941 -940 -939 -938 -937 -936 -935 -934 -933 -932 -931 -930 -929 -928 -927 -926 -925 -924 -923 -922 -921 -920 -919 -918 -917 -916 -915 -914 -913 -912 -911 -910 -909 -908 -907 -906 -905 -904 -903 -902 -901 -900 -899 -898 -897 -896 -895 -894 -893 -892 -891 -890 -889 -888 -887 -886 -885 -884 -883 -882 -881 -880 -879 -878 -877 -876 -875 -874 -873 -872 -871 -870 -869 -868 -867 -866 -865 -864 -863 -862 -861 -860 -859 -858 -857 -856 -855 -854 -853 -852 -851 -850 -849 -848 -847 -846 -845 -844 -843 -842 -841 -840 -839 -838 -837 -836 -835 -834 -833 -832 -831 -830 -829 -828 -827 -826 -825 -824 -823 -822 -821 -820 -819 -818 -817 -816 -815 -814 -813 -812 -811 -810 -809 -808 -807 -806 -805 -804 -803 -802 -801 -800 -799 -798 -797 -796 -795 -794 -793 -792 -791 -790 -789 -788 -787 -786 -785 -784 -783 -782 -781 -780 -779 -778 -777 -776 -775 -774 -773 -772 -771 -770 -769 -768 -767 -766 -765 -764 -763 -762 -761 -760 -759 -758 -757 -756 -755 -754 -753 -752 -751 -750 -749 -748 -747 -746 -745 -744 -743 -742 -741 -740 -739 -738 -737 -736 -735 -734 -733 -732 -731 -730 -729 -728 -727 -726 -725 -724 -723 -722 -721 -720 -719 -718 -717 -716 -715 -714 -713 -712 -711 -710 -709 -708 -707 -706 -705 -704 -703 -702 -701 -700 -699 -698 -697 -696 -695 -694 -693 -692 -691 -690 -689 -688 -687 -686 -685 -684 -683 -682 -681 -680 -679 -678 -677 -676 -675 -674 -673 -672 -671 -670 -669 -668 -667 -666 -665 -664 -663 -662 -661 -660 -659 -658 -657 -656 -655 -654 -653 -652 -651 -650 -649 -648 -647 -646 -645 -644 -643 -642 -641 -640 -639 -638 -637 -636 -635 -634 -633 -632 -631 -630 -629 -628 -627 -626 -625 -624 -623 -622 -621 -620 -619 -618 -617 -616 -615 -614 -613 -612 -611 -610 -609 -608 -607 -606 -605 -604 -603 -602 -601 -600 -599 -598 -597 -596 -595 -594 -593 -592 -591 -590 -589 -588 -587 -586 -585 -584 -583 -582 -581 -580 -579 -578 -577 -576 -575 -574 -573 -572 -571 -570 -569 -568 -567 -566 -565 -564 -563 -562 -561 -560 -559 -558 -557 -556 -555 -554 -553 -552 -551 -550 -549 -548 -547 -546 -545 -544 -543 -542 -541 -540 -539 -538 -537 -536 -535 -534 -533 -532 -531 -530 -529 -528 -527 -526 -525 -524 -523 -522 -521 -520 -519 -518 -517 -516 -515 -514 -513 -512 -511 -510 -509 -508 -507 -506 -505 -504 -503 -502 -501 -500 -499 -498 -497 -496 -495 -494 -493 -492 -491 -490 -489 -488 -487 -486 -485 -484 -483 -482 -481 -480 -479 -478 -477 -476 -475 -474 -473 -472 -471 -470 -469 -468 -467 -466 -465 -464 -463 -462 -461 -460 -459 -458 -457 -456 -455 -454 -453 -452 -451 -450 -449 -448 -447 -446 -445 -444 -443 -442 -441 -440 -439 -438 -437 -436 -435 -434 -433 -432 -431 -430 -429 -428 -427 -426 -425 -424 -423 -422 -421 -420 -419 -418 -417 -416 -415 -414 -413 -412 -411 -410 -409 -408 -407 -406 -405 -404 -403 -402 -401 -400 -399 -398 -397 -396 -395 -394 -393 -392 -391 -390 -389 -388 -387 -386 -385 -384 -383 -382 -381 -380 -379 -378 -377 -376 -375 -374 -373 -372 -371 -370 -369 -368 -367 -366 -365 -364 -363 -362 -361 -360 -359 -358 -357 -356 -355 -354 -353 -352 -351 -350 -349 -348 -347 -346 -345 -344 -343 -342 -341 -340 -339 -338 -337 -336 -335 -334 -333 -332 -331 -330 -329 -328 -327 -326 -325 -324 -323 -322 -321 -320 -319 -318 -317 -316 -315 -314 -313 -312 -311 -310 -309 -308 -307 -306 -305 -304 -303 -302 -301 -300 -299 -298 -297 -296 -295 -294 -293 -292 -291 -290 -289 -288 -287 -286 -285 -284 -283 -282 -281 -280 -279 -278 -277 -276 -275 -274 -273 -272 -271 -270 -269 -268 -267 -266 -265 -264 -263 -262 -261 -260 -259 -258 -257 -256 -255 -254 -253 -252 -251 -250 -249 -248 -247 -246 -245 -244 -243 -242 -241 -240 -239 -238 -237 -236 -235 -234 -233 -232 -231 -230 -229 -228 -227 -226 -225 -224 -223 -222 -221 -220 -219 -218 -217 -216 -215 -214 -213 -212 -211 -210 -209 -208 -207 -206 -205 -204 -203 -202 -201 -200 -199 -198 -197 -196 -195 -194 -193 -192 -191 -190 -189 -188 -187 -186 -185 -184 -183 -182 -181 -180 -179 -178 -177 -176 -175 -174 -173 -172 -171 -170 -169 -168 -167 -166 -165 -164 -163 -162 -161 -160 -159 -158 -157 -156 -155 -154 -153 -152 -151 -150 -149 -148 -147 -146 -145 -144 -143 -142 -141 -140 -139 -138 -137 -136 -135 -134 -133 -132 -131 -130 -129 -128 -127 -126 -125 -124 -123 -122 -121 -120 -119 -118 -117 -116 -115 -114 -113 -112 -111 -110 -109 -108 -107 -106 -105 -104 -103 -102 -101 -100 -99 -98 -97 -96 -95 -94 -93 -92 -91 -90 -89 -88 -87 -86 -85 -84 -83 -82 -81 -80 -79 -78 -77 -76 -75 -74 -73 -72 -71 -70 -69 -68 -67 -66 -65 -64 -63 -62 -61 -60 -59 -58 -57 -56 -55 -54 -53 -52 -51 -50 -49 -48 -47 -46 -45 -44 -43 -42 -41 -40 -39 -38 -37 -36 -35 -34 -33 -32 -31 -30 -29 -28 -27 -26 -25 -24 -23 -22 -21 -20 -19 -18 -17 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/samples_shrink_big_numbers_2048/first.xml b/bench_horn_mcmc/samples_shrink_big_numbers_2048/first.xml new file mode 100644 index 000000000..e547522f1 --- /dev/null +++ b/bench_horn_mcmc/samples_shrink_big_numbers_2048/first.xml @@ -0,0 +1,12341 @@ + + + + + 1 + itp + + + + x + x1 + + + + x + + + + + + x + 1 + + + + + x + 2 + + + + + x + 3 + + + + + x + 4 + + + + + x + 5 + + + + + x + 6 + + + + + x + 7 + + + + + x + 8 + + + + + x + 9 + + + + + x + 10 + + + + + x + 11 + + + + + x + 12 + + + + + x + 13 + + + + + x + 14 + + + + + x + 15 + + + + + x + 16 + + + + + x + 17 + + + + + x + 18 + + + + + x + 19 + + + + + x + 20 + + + + + x + 21 + + + + + x + 22 + + + + + x + 23 + + + + + x + 24 + + + + + x + 25 + + + + + x + 26 + + + + + x + 27 + + + + + x + 28 + + + + + x + 29 + + + + + x + 30 + + + + + x + 31 + + + + + x + 32 + + + + + x + 33 + + + + + x + 34 + + + + + x + 35 + + + + + x + 36 + + + + + x + 37 + + + + + x + 38 + + + + + x + 39 + + + + + x + 40 + + + + + x + 41 + + + + + x + 42 + + + + + x + 43 + + + + + x + 44 + + + + + x + 45 + + + + + x + 46 + + + + + x + 47 + + + + + x + 48 + + + + + x + 49 + + + + + x + 50 + + + + + x + 51 + + + + + x + 52 + + + + + x + 53 + + + + + x + 54 + + + + + x + 55 + + + + + x + 56 + + + + + x + 57 + + + + + x + 58 + + + + + x + 59 + + + + + x + 60 + + + + + x + 61 + + + + + x + 62 + + + + + x + 63 + + + + + x + 64 + + + + + x + 65 + + + + + x + 66 + + + + + x + 67 + + + + + x + 68 + + + + + x + 69 + + + + + x + 70 + + + + + x + 71 + + + + + x + 72 + + + + + x + 73 + + + + + x + 74 + + + + + x + 75 + + + + + x + 76 + + + + + x + 77 + + + + + x + 78 + + + + + x + 79 + + + + + x + 80 + + + + + x + 81 + + + + + x + 82 + + + + + x + 83 + + + + + x + 84 + + + + + x + 85 + + + + + x + 86 + + + + + x + 87 + + + + + x + 88 + + + + + x + 89 + + + + + x + 90 + + + + + x + 91 + + + + + x + 92 + + + + + x + 93 + + + + + x + 94 + + + + + x + 95 + + + + + x + 96 + + + + + x + 97 + + + + + x + 98 + + + + + x + 99 + + + + + x + 100 + + + + + x + 101 + + + + + x + 102 + + + + + x + 103 + + + + + x + 104 + + + + + x + 105 + + + + + x + 106 + + + + + x + 107 + + + + + x + 108 + + + + + x + 109 + + + + + x + 110 + + + + + x + 111 + + + + + x + 112 + + + + + x + 113 + + + + + x + 114 + + + + + x + 115 + + + + + x + 116 + + + + + x + 117 + + + + + x + 118 + + + + + x + 119 + + + + + x + 120 + + + + + x + 121 + + + + + x + 122 + + + + + x + 123 + + + + + x + 124 + + + + + x + 125 + + + + + x + 126 + + + + + x + 127 + + + + + x + 128 + + + + + x + 129 + + + + + x + 130 + + + + + x + 131 + + + + + x + 132 + + + + + x + 133 + + + + + x + 134 + + + + + x + 135 + + + + + x + 136 + + + + + x + 137 + + + + + x + 138 + + + + + x + 139 + + + + + x + 140 + + + + + x + 141 + + + + + x + 142 + + + + + x + 143 + + + + + x + 144 + + + + + x + 145 + + + + + x + 146 + + + + + x + 147 + + + + + x + 148 + + + + + x + 149 + + + + + x + 150 + + + + + x + 151 + + + + + x + 152 + + + + + x + 153 + + + + + x + 154 + + + + + x + 155 + + + + + x + 156 + + + + + x + 157 + + + + + x + 158 + + + + + x + 159 + + + + + x + 160 + + + + + x + 161 + + + + + x + 162 + + + + + x + 163 + + + + + x + 164 + + + + + x + 165 + + + + + x + 166 + + + + + x + 167 + + + + + x + 168 + + + + + x + 169 + + + + + x + 170 + + + + + x + 171 + + + + + x + 172 + + + + + x + 173 + + + + + x + 174 + + + + + x + 175 + + + + + x + 176 + + + + + x + 177 + + + + + x + 178 + + + + + x + 179 + + + + + x + 180 + + + + + x + 181 + + + + + x + 182 + + + + + x + 183 + + + + + x + 184 + + + + + x + 185 + + + + + x + 186 + + + + + x + 187 + + + + + x + 188 + + + + + x + 189 + + + + + x + 190 + + + + + x + 191 + + + + + x + 192 + + + + + x + 193 + + + + + x + 194 + + + + + x + 195 + + + + + x + 196 + + + + + x + 197 + + + + + x + 198 + + + + + x + 199 + + + + + x + 200 + + + + + x + 201 + + + + + x + 202 + + + + + x + 203 + + + + + x + 204 + + + + + x + 205 + + + + + x + 206 + + + + + x + 207 + + + + + x + 208 + + + + + x + 209 + + + + + x + 210 + + + + + x + 211 + + + + + x + 212 + + + + + x + 213 + + + + + x + 214 + + + + + x + 215 + + + + + x + 216 + + + + + x + 217 + + + + + x + 218 + + + + + x + 219 + + + + + x + 220 + + + + + x + 221 + + + + + x + 222 + + + + + x + 223 + + + + + x + 224 + + + + + x + 225 + + + + + x + 226 + + + + + x + 227 + + + + + x + 228 + + + + + x + 229 + + + + + x + 230 + + + + + x + 231 + + + + + x + 232 + + + + + x + 233 + + + + + x + 234 + + + + + x + 235 + + + + + x + 236 + + + + + x + 237 + + + + + x + 238 + + + + + x + 239 + + + + + x + 240 + + + + + x + 241 + + + + + x + 242 + + + + + x + 243 + + + + + x + 244 + + + + + x + 245 + + + + + x + 246 + + + + + x + 247 + + + + + x + 248 + + + + + x + 249 + + + + + x + 250 + + + + + x + 251 + + + + + x + 252 + + + + + x + 253 + + + + + x + 254 + + + + + x + 255 + + + + + x + 256 + + + + + x + 257 + + + + + x + 258 + + + + + x + 259 + + + + + x + 260 + + + + + x + 261 + + + + + x + 262 + + + + + x + 263 + + + + + x + 264 + + + + + x + 265 + + + + + x + 266 + + + + + x + 267 + + + + + x + 268 + + + + + x + 269 + + + + + x + 270 + + + + + x + 271 + + + + + x + 272 + + + + + x + 273 + + + + + x + 274 + + + + + x + 275 + + + + + x + 276 + + + + + x + 277 + + + + + x + 278 + + + + + x + 279 + + + + + x + 280 + + + + + x + 281 + + + + + x + 282 + + + + + x + 283 + + + + + x + 284 + + + + + x + 285 + + + + + x + 286 + + + + + x + 287 + + + + + x + 288 + + + + + x + 289 + + + + + x + 290 + + + + + x + 291 + + + + + x + 292 + + + + + x + 293 + + + + + x + 294 + + + + + x + 295 + + + + + x + 296 + + + + + x + 297 + + + + + x + 298 + + + + + x + 299 + + + + + x + 300 + + + + + x + 301 + + + + + x + 302 + + + + + x + 303 + + + + + x + 304 + + + + + x + 305 + + + + + x + 306 + + + + + x + 307 + + + + + x + 308 + + + + + x + 309 + + + + + x + 310 + + + + + x + 311 + + + + + x + 312 + + + + + x + 313 + + + + + x + 314 + + + + + x + 315 + + + + + x + 316 + + + + + x + 317 + + + + + x + 318 + + + + + x + 319 + + + + + x + 320 + + + + + x + 321 + + + + + x + 322 + + + + + x + 323 + + + + + x + 324 + + + + + x + 325 + + + + + x + 326 + + + + + x + 327 + + + + + x + 328 + + + + + x + 329 + + + + + x + 330 + + + + + x + 331 + + + + + x + 332 + + + + + x + 333 + + + + + x + 334 + + + + + x + 335 + + + + + x + 336 + + + + + x + 337 + + + + + x + 338 + + + + + x + 339 + + + + + x + 340 + + + + + x + 341 + + + + + x + 342 + + + + + x + 343 + + + + + x + 344 + + + + + x + 345 + + + + + x + 346 + + + + + x + 347 + + + + + x + 348 + + + + + x + 349 + + + + + x + 350 + + + + + x + 351 + + + + + x + 352 + + + + + x + 353 + + + + + x + 354 + + + + + x + 355 + + + + + x + 356 + + + + + x + 357 + + + + + x + 358 + + + + + x + 359 + + + + + x + 360 + + + + + x + 361 + + + + + x + 362 + + + + + x + 363 + + + + + x + 364 + + + + + x + 365 + + + + + x + 366 + + + + + x + 367 + + + + + x + 368 + + + + + x + 369 + + + + + x + 370 + + + + + x + 371 + + + + + x + 372 + + + + + x + 373 + + + + + x + 374 + + + + + x + 375 + + + + + x + 376 + + + + + x + 377 + + + + + x + 378 + + + + + x + 379 + + + + + x + 380 + + + + + x + 381 + + + + + x + 382 + + + + + x + 383 + + + + + x + 384 + + + + + x + 385 + + + + + x + 386 + + + + + x + 387 + + + + + x + 388 + + + + + x + 389 + + + + + x + 390 + + + + + x + 391 + + + + + x + 392 + + + + + x + 393 + + + + + x + 394 + + + + + x + 395 + + + + + x + 396 + + + + + x + 397 + + + + + x + 398 + + + + + x + 399 + + + + + x + 400 + + + + + x + 401 + + + + + x + 402 + + + + + x + 403 + + + + + x + 404 + + + + + x + 405 + + + + + x + 406 + + + + + x + 407 + + + + + x + 408 + + + + + x + 409 + + + + + x + 410 + + + + + x + 411 + + + + + x + 412 + + + + + x + 413 + + + + + x + 414 + + + + + x + 415 + + + + + x + 416 + + + + + x + 417 + + + + + x + 418 + + + + + x + 419 + + + + + x + 420 + + + + + x + 421 + + + + + x + 422 + + + + + x + 423 + + + + + x + 424 + + + + + x + 425 + + + + + x + 426 + + + + + x + 427 + + + + + x + 428 + + + + + x + 429 + + + + + x + 430 + + + + + x + 431 + + + + + x + 432 + + + + + x + 433 + + + + + x + 434 + + + + + x + 435 + + + + + x + 436 + + + + + x + 437 + + + + + x + 438 + + + + + x + 439 + + + + + x + 440 + + + + + x + 441 + + + + + x + 442 + + + + + x + 443 + + + + + x + 444 + + + + + x + 445 + + + + + x + 446 + + + + + x + 447 + + + + + x + 448 + + + + + x + 449 + + + + + x + 450 + + + + + x + 451 + + + + + x + 452 + + + + + x + 453 + + + + + x + 454 + + + + + x + 455 + + + + + x + 456 + + + + + x + 457 + + + + + x + 458 + + + + + x + 459 + + + + + x + 460 + + + + + x + 461 + + + + + x + 462 + + + + + x + 463 + + + + + x + 464 + + + + + x + 465 + + + + + x + 466 + + + + + x + 467 + + + + + x + 468 + + + + + x + 469 + + + + + x + 470 + + + + + x + 471 + + + + + x + 472 + + + + + x + 473 + + + + + x + 474 + + + + + x + 475 + + + + + x + 476 + + + + + x + 477 + + + + + x + 478 + + + + + x + 479 + + + + + x + 480 + + + + + x + 481 + + + + + x + 482 + + + + + x + 483 + + + + + x + 484 + + + + + x + 485 + + + + + x + 486 + + + + + x + 487 + + + + + x + 488 + + + + + x + 489 + + + + + x + 490 + + + + + x + 491 + + + + + x + 492 + + + + + x + 493 + + + + + x + 494 + + + + + x + 495 + + + + + x + 496 + + + + + x + 497 + + + + + x + 498 + + + + + x + 499 + + + + + x + 500 + + + + + x + 501 + + + + + x + 502 + + + + + x + 503 + + + + + x + 504 + + + + + x + 505 + + + + + x + 506 + + + + + x + 507 + + + + + x + 508 + + + + + x + 509 + + + + + x + 510 + + + + + x + 511 + + + + + x + 512 + + + + + x + 513 + + + + + x + 514 + + + + + x + 515 + + + + + x + 516 + + + + + x + 517 + + + + + x + 518 + + + + + x + 519 + + + + + x + 520 + + + + + x + 521 + + + + + x + 522 + + + + + x + 523 + + + + + x + 524 + + + + + x + 525 + + + + + x + 526 + + + + + x + 527 + + + + + x + 528 + + + + + x + 529 + + + + + x + 530 + + + + + x + 531 + + + + + x + 532 + + + + + x + 533 + + + + + x + 534 + + + + + x + 535 + + + + + x + 536 + + + + + x + 537 + + + + + x + 538 + + + + + x + 539 + + + + + x + 540 + + + + + x + 541 + + + + + x + 542 + + + + + x + 543 + + + + + x + 544 + + + + + x + 545 + + + + + x + 546 + + + + + x + 547 + + + + + x + 548 + + + + + x + 549 + + + + + x + 550 + + + + + x + 551 + + + + + x + 552 + + + + + x + 553 + + + + + x + 554 + + + + + x + 555 + + + + + x + 556 + + + + + x + 557 + + + + + x + 558 + + + + + x + 559 + + + + + x + 560 + + + + + x + 561 + + + + + x + 562 + + + + + x + 563 + + + + + x + 564 + + + + + x + 565 + + + + + x + 566 + + + + + x + 567 + + + + + x + 568 + + + + + x + 569 + + + + + x + 570 + + + + + x + 571 + + + + + x + 572 + + + + + x + 573 + + + + + x + 574 + + + + + x + 575 + + + + + x + 576 + + + + + x + 577 + + + + + x + 578 + + + + + x + 579 + + + + + x + 580 + + + + + x + 581 + + + + + x + 582 + + + + + x + 583 + + + + + x + 584 + + + + + x + 585 + + + + + x + 586 + + + + + x + 587 + + + + + x + 588 + + + + + x + 589 + + + + + x + 590 + + + + + x + 591 + + + + + x + 592 + + + + + x + 593 + + + + + x + 594 + + + + + x + 595 + + + + + x + 596 + + + + + x + 597 + + + + + x + 598 + + + + + x + 599 + + + + + x + 600 + + + + + x + 601 + + + + + x + 602 + + + + + x + 603 + + + + + x + 604 + + + + + x + 605 + + + + + x + 606 + + + + + x + 607 + + + + + x + 608 + + + + + x + 609 + + + + + x + 610 + + + + + x + 611 + + + + + x + 612 + + + + + x + 613 + + + + + x + 614 + + + + + x + 615 + + + + + x + 616 + + + + + x + 617 + + + + + x + 618 + + + + + x + 619 + + + + + x + 620 + + + + + x + 621 + + + + + x + 622 + + + + + x + 623 + + + + + x + 624 + + + + + x + 625 + + + + + x + 626 + + + + + x + 627 + + + + + x + 628 + + + + + x + 629 + + + + + x + 630 + + + + + x + 631 + + + + + x + 632 + + + + + x + 633 + + + + + x + 634 + + + + + x + 635 + + + + + x + 636 + + + + + x + 637 + + + + + x + 638 + + + + + x + 639 + + + + + x + 640 + + + + + x + 641 + + + + + x + 642 + + + + + x + 643 + + + + + x + 644 + + + + + x + 645 + + + + + x + 646 + + + + + x + 647 + + + + + x + 648 + + + + + x + 649 + + + + + x + 650 + + + + + x + 651 + + + + + x + 652 + + + + + x + 653 + + + + + x + 654 + + + + + x + 655 + + + + + x + 656 + + + + + x + 657 + + + + + x + 658 + + + + + x + 659 + + + + + x + 660 + + + + + x + 661 + + + + + x + 662 + + + + + x + 663 + + + + + x + 664 + + + + + x + 665 + + + + + x + 666 + + + + + x + 667 + + + + + x + 668 + + + + + x + 669 + + + + + x + 670 + + + + + x + 671 + + + + + x + 672 + + + + + x + 673 + + + + + x + 674 + + + + + x + 675 + + + + + x + 676 + + + + + x + 677 + + + + + x + 678 + + + + + x + 679 + + + + + x + 680 + + + + + x + 681 + + + + + x + 682 + + + + + x + 683 + + + + + x + 684 + + + + + x + 685 + + + + + x + 686 + + + + + x + 687 + + + + + x + 688 + + + + + x + 689 + + + + + x + 690 + + + + + x + 691 + + + + + x + 692 + + + + + x + 693 + + + + + x + 694 + + + + + x + 695 + + + + + x + 696 + + + + + x + 697 + + + + + x + 698 + + + + + x + 699 + + + + + x + 700 + + + + + x + 701 + + + + + x + 702 + + + + + x + 703 + + + + + x + 704 + + + + + x + 705 + + + + + x + 706 + + + + + x + 707 + + + + + x + 708 + + + + + x + 709 + + + + + x + 710 + + + + + x + 711 + + + + + x + 712 + + + + + x + 713 + + + + + x + 714 + + + + + x + 715 + + + + + x + 716 + + + + + x + 717 + + + + + x + 718 + + + + + x + 719 + + + + + x + 720 + + + + + x + 721 + + + + + x + 722 + + + + + x + 723 + + + + + x + 724 + + + + + x + 725 + + + + + x + 726 + + + + + x + 727 + + + + + x + 728 + + + + + x + 729 + + + + + x + 730 + + + + + x + 731 + + + + + x + 732 + + + + + x + 733 + + + + + x + 734 + + + + + x + 735 + + + + + x + 736 + + + + + x + 737 + + + + + x + 738 + + + + + x + 739 + + + + + x + 740 + + + + + x + 741 + + + + + x + 742 + + + + + x + 743 + + + + + x + 744 + + + + + x + 745 + + + + + x + 746 + + + + + x + 747 + + + + + x + 748 + + + + + x + 749 + + + + + x + 750 + + + + + x + 751 + + + + + x + 752 + + + + + x + 753 + + + + + x + 754 + + + + + x + 755 + + + + + x + 756 + + + + + x + 757 + + + + + x + 758 + + + + + x + 759 + + + + + x + 760 + + + + + x + 761 + + + + + x + 762 + + + + + x + 763 + + + + + x + 764 + + + + + x + 765 + + + + + x + 766 + + + + + x + 767 + + + + + x + 768 + + + + + x + 769 + + + + + x + 770 + + + + + x + 771 + + + + + x + 772 + + + + + x + 773 + + + + + x + 774 + + + + + x + 775 + + + + + x + 776 + + + + + x + 777 + + + + + x + 778 + + + + + x + 779 + + + + + x + 780 + + + + + x + 781 + + + + + x + 782 + + + + + x + 783 + + + + + x + 784 + + + + + x + 785 + + + + + x + 786 + + + + + x + 787 + + + + + x + 788 + + + + + x + 789 + + + + + x + 790 + + + + + x + 791 + + + + + x + 792 + + + + + x + 793 + + + + + x + 794 + + + + + x + 795 + + + + + x + 796 + + + + + x + 797 + + + + + x + 798 + + + + + x + 799 + + + + + x + 800 + + + + + x + 801 + + + + + x + 802 + + + + + x + 803 + + + + + x + 804 + + + + + x + 805 + + + + + x + 806 + + + + + x + 807 + + + + + x + 808 + + + + + x + 809 + + + + + x + 810 + + + + + x + 811 + + + + + x + 812 + + + + + x + 813 + + + + + x + 814 + + + + + x + 815 + + + + + x + 816 + + + + + x + 817 + + + + + x + 818 + + + + + x + 819 + + + + + x + 820 + + + + + x + 821 + + + + + x + 822 + + + + + x + 823 + + + + + x + 824 + + + + + x + 825 + + + + + x + 826 + + + + + x + 827 + + + + + x + 828 + + + + + x + 829 + + + + + x + 830 + + + + + x + 831 + + + + + x + 832 + + + + + x + 833 + + + + + x + 834 + + + + + x + 835 + + + + + x + 836 + + + + + x + 837 + + + + + x + 838 + + + + + x + 839 + + + + + x + 840 + + + + + x + 841 + + + + + x + 842 + + + + + x + 843 + + + + + x + 844 + + + + + x + 845 + + + + + x + 846 + + + + + x + 847 + + + + + x + 848 + + + + + x + 849 + + + + + x + 850 + + + + + x + 851 + + + + + x + 852 + + + + + x + 853 + + + + + x + 854 + + + + + x + 855 + + + + + x + 856 + + + + + x + 857 + + + + + x + 858 + + + + + x + 859 + + + + + x + 860 + + + + + x + 861 + + + + + x + 862 + + + + + x + 863 + + + + + x + 864 + + + + + x + 865 + + + + + x + 866 + + + + + x + 867 + + + + + x + 868 + + + + + x + 869 + + + + + x + 870 + + + + + x + 871 + + + + + x + 872 + + + + + x + 873 + + + + + x + 874 + + + + + x + 875 + + + + + x + 876 + + + + + x + 877 + + + + + x + 878 + + + + + x + 879 + + + + + x + 880 + + + + + x + 881 + + + + + x + 882 + + + + + x + 883 + + + + + x + 884 + + + + + x + 885 + + + + + x + 886 + + + + + x + 887 + + + + + x + 888 + + + + + x + 889 + + + + + x + 890 + + + + + x + 891 + + + + + x + 892 + + + + + x + 893 + + + + + x + 894 + + + + + x + 895 + + + + + x + 896 + + + + + x + 897 + + + + + x + 898 + + + + + x + 899 + + + + + x + 900 + + + + + x + 901 + + + + + x + 902 + + + + + x + 903 + + + + + x + 904 + + + + + x + 905 + + + + + x + 906 + + + + + x + 907 + + + + + x + 908 + + + + + x + 909 + + + + + x + 910 + + + + + x + 911 + + + + + x + 912 + + + + + x + 913 + + + + + x + 914 + + + + + x + 915 + + + + + x + 916 + + + + + x + 917 + + + + + x + 918 + + + + + x + 919 + + + + + x + 920 + + + + + x + 921 + + + + + x + 922 + + + + + x + 923 + + + + + x + 924 + + + + + x + 925 + + + + + x + 926 + + + + + x + 927 + + + + + x + 928 + + + + + x + 929 + + + + + x + 930 + + + + + x + 931 + + + + + x + 932 + + + + + x + 933 + + + + + x + 934 + + + + + x + 935 + + + + + x + 936 + + + + + x + 937 + + + + + x + 938 + + + + + x + 939 + + + + + x + 940 + + + + + x + 941 + + + + + x + 942 + + + + + x + 943 + + + + + x + 944 + + + + + x + 945 + + + + + x + 946 + + + + + x + 947 + + + + + x + 948 + + + + + x + 949 + + + + + x + 950 + + + + + x + 951 + + + + + x + 952 + + + + + x + 953 + + + + + x + 954 + + + + + x + 955 + + + + + x + 956 + + + + + x + 957 + + + + + x + 958 + + + + + x + 959 + + + + + x + 960 + + + + + x + 961 + + + + + x + 962 + + + + + x + 963 + + + + + x + 964 + + + + + x + 965 + + + + + x + 966 + + + + + x + 967 + + + + + x + 968 + + + + + x + 969 + + + + + x + 970 + + + + + x + 971 + + + + + x + 972 + + + + + x + 973 + + + + + x + 974 + + + + + x + 975 + + + + + x + 976 + + + + + x + 977 + + + + + x + 978 + + + + + x + 979 + + + + + x + 980 + + + + + x + 981 + + + + + x + 982 + + + + + x + 983 + + + + + x + 984 + + + + + x + 985 + + + + + x + 986 + + + + + x + 987 + + + + + x + 988 + + + + + x + 989 + + + + + x + 990 + + + + + x + 991 + + + + + x + 992 + + + + + x + 993 + + + + + x + 994 + + + + + x + 995 + + + + + x + 996 + + + + + x + 997 + + + + + x + 998 + + + + + x + 999 + + + + + x + 1000 + + + + + x + 1001 + + + + + x + 1002 + + + + + x + 1003 + + + + + x + 1004 + + + + + x + 1005 + + + + + x + 1006 + + + + + x + 1007 + + + + + x + 1008 + + + + + x + 1009 + + + + + x + 1010 + + + + + x + 1011 + + + + + x + 1012 + + + + + x + 1013 + + + + + x + 1014 + + + + + x + 1015 + + + + + x + 1016 + + + + + x + 1017 + + + + + x + 1018 + + + + + x + 1019 + + + + + x + 1020 + + + + + x + 1021 + + + + + x + 1022 + + + + + x + 1023 + + + + + x + 1024 + + + + + x + 1025 + + + + + x + 1026 + + + + + x + 1027 + + + + + x + 1028 + + + + + x + 1029 + + + + + x + 1030 + + + + + x + 1031 + + + + + x + 1032 + + + + + x + 1033 + + + + + x + 1034 + + + + + x + 1035 + + + + + x + 1036 + + + + + x + 1037 + + + + + x + 1038 + + + + + x + 1039 + + + + + x + 1040 + + + + + x + 1041 + + + + + x + 1042 + + + + + x + 1043 + + + + + x + 1044 + + + + + x + 1045 + + + + + x + 1046 + + + + + x + 1047 + + + + + x + 1048 + + + + + x + 1049 + + + + + x + 1050 + + + + + x + 1051 + + + + + x + 1052 + + + + + x + 1053 + + + + + x + 1054 + + + + + x + 1055 + + + + + x + 1056 + + + + + x + 1057 + + + + + x + 1058 + + + + + x + 1059 + + + + + x + 1060 + + + + + x + 1061 + + + + + x + 1062 + + + + + x + 1063 + + + + + x + 1064 + + + + + x + 1065 + + + + + x + 1066 + + + + + x + 1067 + + + + + x + 1068 + + + + + x + 1069 + + + + + x + 1070 + + + + + x + 1071 + + + + + x + 1072 + + + + + x + 1073 + + + + + x + 1074 + + + + + x + 1075 + + + + + x + 1076 + + + + + x + 1077 + + + + + x + 1078 + + + + + x + 1079 + + + + + x + 1080 + + + + + x + 1081 + + + + + x + 1082 + + + + + x + 1083 + + + + + x + 1084 + + + + + x + 1085 + + + + + x + 1086 + + + + + x + 1087 + + + + + x + 1088 + + + + + x + 1089 + + + + + x + 1090 + + + + + x + 1091 + + + + + x + 1092 + + + + + x + 1093 + + + + + x + 1094 + + + + + x + 1095 + + + + + x + 1096 + + + + + x + 1097 + + + + + x + 1098 + + + + + x + 1099 + + + + + x + 1100 + + + + + x + 1101 + + + + + x + 1102 + + + + + x + 1103 + + + + + x + 1104 + + + + + x + 1105 + + + + + x + 1106 + + + + + x + 1107 + + + + + x + 1108 + + + + + x + 1109 + + + + + x + 1110 + + + + + x + 1111 + + + + + x + 1112 + + + + + x + 1113 + + + + + x + 1114 + + + + + x + 1115 + + + + + x + 1116 + + + + + x + 1117 + + + + + x + 1118 + + + + + x + 1119 + + + + + x + 1120 + + + + + x + 1121 + + + + + x + 1122 + + + + + x + 1123 + + + + + x + 1124 + + + + + x + 1125 + + + + + x + 1126 + + + + + x + 1127 + + + + + x + 1128 + + + + + x + 1129 + + + + + x + 1130 + + + + + x + 1131 + + + + + x + 1132 + + + + + x + 1133 + + + + + x + 1134 + + + + + x + 1135 + + + + + x + 1136 + + + + + x + 1137 + + + + + x + 1138 + + + + + x + 1139 + + + + + x + 1140 + + + + + x + 1141 + + + + + x + 1142 + + + + + x + 1143 + + + + + x + 1144 + + + + + x + 1145 + + + + + x + 1146 + + + + + x + 1147 + + + + + x + 1148 + + + + + x + 1149 + + + + + x + 1150 + + + + + x + 1151 + + + + + x + 1152 + + + + + x + 1153 + + + + + x + 1154 + + + + + x + 1155 + + + + + x + 1156 + + + + + x + 1157 + + + + + x + 1158 + + + + + x + 1159 + + + + + x + 1160 + + + + + x + 1161 + + + + + x + 1162 + + + + + x + 1163 + + + + + x + 1164 + + + + + x + 1165 + + + + + x + 1166 + + + + + x + 1167 + + + + + x + 1168 + + + + + x + 1169 + + + + + x + 1170 + + + + + x + 1171 + + + + + x + 1172 + + + + + x + 1173 + + + + + x + 1174 + + + + + x + 1175 + + + + + x + 1176 + + + + + x + 1177 + + + + + x + 1178 + + + + + x + 1179 + + + + + x + 1180 + + + + + x + 1181 + + + + + x + 1182 + + + + + x + 1183 + + + + + x + 1184 + + + + + x + 1185 + + + + + x + 1186 + + + + + x + 1187 + + + + + x + 1188 + + + + + x + 1189 + + + + + x + 1190 + + + + + x + 1191 + + + + + x + 1192 + + + + + x + 1193 + + + + + x + 1194 + + + + + x + 1195 + + + + + x + 1196 + + + + + x + 1197 + + + + + x + 1198 + + + + + x + 1199 + + + + + x + 1200 + + + + + x + 1201 + + + + + x + 1202 + + + + + x + 1203 + + + + + x + 1204 + + + + + x + 1205 + + + + + x + 1206 + + + + + x + 1207 + + + + + x + 1208 + + + + + x + 1209 + + + + + x + 1210 + + + + + x + 1211 + + + + + x + 1212 + + + + + x + 1213 + + + + + x + 1214 + + + + + x + 1215 + + + + + x + 1216 + + + + + x + 1217 + + + + + x + 1218 + + + + + x + 1219 + + + + + x + 1220 + + + + + x + 1221 + + + + + x + 1222 + + + + + x + 1223 + + + + + x + 1224 + + + + + x + 1225 + + + + + x + 1226 + + + + + x + 1227 + + + + + x + 1228 + + + + + x + 1229 + + + + + x + 1230 + + + + + x + 1231 + + + + + x + 1232 + + + + + x + 1233 + + + + + x + 1234 + + + + + x + 1235 + + + + + x + 1236 + + + + + x + 1237 + + + + + x + 1238 + + + + + x + 1239 + + + + + x + 1240 + + + + + x + 1241 + + + + + x + 1242 + + + + + x + 1243 + + + + + x + 1244 + + + + + x + 1245 + + + + + x + 1246 + + + + + x + 1247 + + + + + x + 1248 + + + + + x + 1249 + + + + + x + 1250 + + + + + x + 1251 + + + + + x + 1252 + + + + + x + 1253 + + + + + x + 1254 + + + + + x + 1255 + + + + + x + 1256 + + + + + x + 1257 + + + + + x + 1258 + + + + + x + 1259 + + + + + x + 1260 + + + + + x + 1261 + + + + + x + 1262 + + + + + x + 1263 + + + + + x + 1264 + + + + + x + 1265 + + + + + x + 1266 + + + + + x + 1267 + + + + + x + 1268 + + + + + x + 1269 + + + + + x + 1270 + + + + + x + 1271 + + + + + x + 1272 + + + + + x + 1273 + + + + + x + 1274 + + + + + x + 1275 + + + + + x + 1276 + + + + + x + 1277 + + + + + x + 1278 + + + + + x + 1279 + + + + + x + 1280 + + + + + x + 1281 + + + + + x + 1282 + + + + + x + 1283 + + + + + x + 1284 + + + + + x + 1285 + + + + + x + 1286 + + + + + x + 1287 + + + + + x + 1288 + + + + + x + 1289 + + + + + x + 1290 + + + + + x + 1291 + + + + + x + 1292 + + + + + x + 1293 + + + + + x + 1294 + + + + + x + 1295 + + + + + x + 1296 + + + + + x + 1297 + + + + + x + 1298 + + + + + x + 1299 + + + + + x + 1300 + + + + + x + 1301 + + + + + x + 1302 + + + + + x + 1303 + + + + + x + 1304 + + + + + x + 1305 + + + + + x + 1306 + + + + + x + 1307 + + + + + x + 1308 + + + + + x + 1309 + + + + + x + 1310 + + + + + x + 1311 + + + + + x + 1312 + + + + + x + 1313 + + + + + x + 1314 + + + + + x + 1315 + + + + + x + 1316 + + + + + x + 1317 + + + + + x + 1318 + + + + + x + 1319 + + + + + x + 1320 + + + + + x + 1321 + + + + + x + 1322 + + + + + x + 1323 + + + + + x + 1324 + + + + + x + 1325 + + + + + x + 1326 + + + + + x + 1327 + + + + + x + 1328 + + + + + x + 1329 + + + + + x + 1330 + + + + + x + 1331 + + + + + x + 1332 + + + + + x + 1333 + + + + + x + 1334 + + + + + x + 1335 + + + + + x + 1336 + + + + + x + 1337 + + + + + x + 1338 + + + + + x + 1339 + + + + + x + 1340 + + + + + x + 1341 + + + + + x + 1342 + + + + + x + 1343 + + + + + x + 1344 + + + + + x + 1345 + + + + + x + 1346 + + + + + x + 1347 + + + + + x + 1348 + + + + + x + 1349 + + + + + x + 1350 + + + + + x + 1351 + + + + + x + 1352 + + + + + x + 1353 + + + + + x + 1354 + + + + + x + 1355 + + + + + x + 1356 + + + + + x + 1357 + + + + + x + 1358 + + + + + x + 1359 + + + + + x + 1360 + + + + + x + 1361 + + + + + x + 1362 + + + + + x + 1363 + + + + + x + 1364 + + + + + x + 1365 + + + + + x + 1366 + + + + + x + 1367 + + + + + x + 1368 + + + + + x + 1369 + + + + + x + 1370 + + + + + x + 1371 + + + + + x + 1372 + + + + + x + 1373 + + + + + x + 1374 + + + + + x + 1375 + + + + + x + 1376 + + + + + x + 1377 + + + + + x + 1378 + + + + + x + 1379 + + + + + x + 1380 + + + + + x + 1381 + + + + + x + 1382 + + + + + x + 1383 + + + + + x + 1384 + + + + + x + 1385 + + + + + x + 1386 + + + + + x + 1387 + + + + + x + 1388 + + + + + x + 1389 + + + + + x + 1390 + + + + + x + 1391 + + + + + x + 1392 + + + + + x + 1393 + + + + + x + 1394 + + + + + x + 1395 + + + + + x + 1396 + + + + + x + 1397 + + + + + x + 1398 + + + + + x + 1399 + + + + + x + 1400 + + + + + x + 1401 + + + + + x + 1402 + + + + + x + 1403 + + + + + x + 1404 + + + + + x + 1405 + + + + + x + 1406 + + + + + x + 1407 + + + + + x + 1408 + + + + + x + 1409 + + + + + x + 1410 + + + + + x + 1411 + + + + + x + 1412 + + + + + x + 1413 + + + + + x + 1414 + + + + + x + 1415 + + + + + x + 1416 + + + + + x + 1417 + + + + + x + 1418 + + + + + x + 1419 + + + + + x + 1420 + + + + + x + 1421 + + + + + x + 1422 + + + + + x + 1423 + + + + + x + 1424 + + + + + x + 1425 + + + + + x + 1426 + + + + + x + 1427 + + + + + x + 1428 + + + + + x + 1429 + + + + + x + 1430 + + + + + x + 1431 + + + + + x + 1432 + + + + + x + 1433 + + + + + x + 1434 + + + + + x + 1435 + + + + + x + 1436 + + + + + x + 1437 + + + + + x + 1438 + + + + + x + 1439 + + + + + x + 1440 + + + + + x + 1441 + + + + + x + 1442 + + + + + x + 1443 + + + + + x + 1444 + + + + + x + 1445 + + + + + x + 1446 + + + + + x + 1447 + + + + + x + 1448 + + + + + x + 1449 + + + + + x + 1450 + + + + + x + 1451 + + + + + x + 1452 + + + + + x + 1453 + + + + + x + 1454 + + + + + x + 1455 + + + + + x + 1456 + + + + + x + 1457 + + + + + x + 1458 + + + + + x + 1459 + + + + + x + 1460 + + + + + x + 1461 + + + + + x + 1462 + + + + + x + 1463 + + + + + x + 1464 + + + + + x + 1465 + + + + + x + 1466 + + + + + x + 1467 + + + + + x + 1468 + + + + + x + 1469 + + + + + x + 1470 + + + + + x + 1471 + + + + + x + 1472 + + + + + x + 1473 + + + + + x + 1474 + + + + + x + 1475 + + + + + x + 1476 + + + + + x + 1477 + + + + + x + 1478 + + + + + x + 1479 + + + + + x + 1480 + + + + + x + 1481 + + + + + x + 1482 + + + + + x + 1483 + + + + + x + 1484 + + + + + x + 1485 + + + + + x + 1486 + + + + + x + 1487 + + + + + x + 1488 + + + + + x + 1489 + + + + + x + 1490 + + + + + x + 1491 + + + + + x + 1492 + + + + + x + 1493 + + + + + x + 1494 + + + + + x + 1495 + + + + + x + 1496 + + + + + x + 1497 + + + + + x + 1498 + + + + + x + 1499 + + + + + x + 1500 + + + + + x + 1501 + + + + + x + 1502 + + + + + x + 1503 + + + + + x + 1504 + + + + + x + 1505 + + + + + x + 1506 + + + + + x + 1507 + + + + + x + 1508 + + + + + x + 1509 + + + + + x + 1510 + + + + + x + 1511 + + + + + x + 1512 + + + + + x + 1513 + + + + + x + 1514 + + + + + x + 1515 + + + + + x + 1516 + + + + + x + 1517 + + + + + x + 1518 + + + + + x + 1519 + + + + + x + 1520 + + + + + x + 1521 + + + + + x + 1522 + + + + + x + 1523 + + + + + x + 1524 + + + + + x + 1525 + + + + + x + 1526 + + + + + x + 1527 + + + + + x + 1528 + + + + + x + 1529 + + + + + x + 1530 + + + + + x + 1531 + + + + + x + 1532 + + + + + x + 1533 + + + + + x + 1534 + + + + + x + 1535 + + + + + x + 1536 + + + + + x + 1537 + + + + + x + 1538 + + + + + x + 1539 + + + + + x + 1540 + + + + + x + 1541 + + + + + x + 1542 + + + + + x + 1543 + + + + + x + 1544 + + + + + x + 1545 + + + + + x + 1546 + + + + + x + 1547 + + + + + x + 1548 + + + + + x + 1549 + + + + + x + 1550 + + + + + x + 1551 + + + + + x + 1552 + + + + + x + 1553 + + + + + x + 1554 + + + + + x + 1555 + + + + + x + 1556 + + + + + x + 1557 + + + + + x + 1558 + + + + + x + 1559 + + + + + x + 1560 + + + + + x + 1561 + + + + + x + 1562 + + + + + x + 1563 + + + + + x + 1564 + + + + + x + 1565 + + + + + x + 1566 + + + + + x + 1567 + + + + + x + 1568 + + + + + x + 1569 + + + + + x + 1570 + + + + + x + 1571 + + + + + x + 1572 + + + + + x + 1573 + + + + + x + 1574 + + + + + x + 1575 + + + + + x + 1576 + + + + + x + 1577 + + + + + x + 1578 + + + + + x + 1579 + + + + + x + 1580 + + + + + x + 1581 + + + + + x + 1582 + + + + + x + 1583 + + + + + x + 1584 + + + + + x + 1585 + + + + + x + 1586 + + + + + x + 1587 + + + + + x + 1588 + + + + + x + 1589 + + + + + x + 1590 + + + + + x + 1591 + + + + + x + 1592 + + + + + x + 1593 + + + + + x + 1594 + + + + + x + 1595 + + + + + x + 1596 + + + + + x + 1597 + + + + + x + 1598 + + + + + x + 1599 + + + + + x + 1600 + + + + + x + 1601 + + + + + x + 1602 + + + + + x + 1603 + + + + + x + 1604 + + + + + x + 1605 + + + + + x + 1606 + + + + + x + 1607 + + + + + x + 1608 + + + + + x + 1609 + + + + + x + 1610 + + + + + x + 1611 + + + + + x + 1612 + + + + + x + 1613 + + + + + x + 1614 + + + + + x + 1615 + + + + + x + 1616 + + + + + x + 1617 + + + + + x + 1618 + + + + + x + 1619 + + + + + x + 1620 + + + + + x + 1621 + + + + + x + 1622 + + + + + x + 1623 + + + + + x + 1624 + + + + + x + 1625 + + + + + x + 1626 + + + + + x + 1627 + + + + + x + 1628 + + + + + x + 1629 + + + + + x + 1630 + + + + + x + 1631 + + + + + x + 1632 + + + + + x + 1633 + + + + + x + 1634 + + + + + x + 1635 + + + + + x + 1636 + + + + + x + 1637 + + + + + x + 1638 + + + + + x + 1639 + + + + + x + 1640 + + + + + x + 1641 + + + + + x + 1642 + + + + + x + 1643 + + + + + x + 1644 + + + + + x + 1645 + + + + + x + 1646 + + + + + x + 1647 + + + + + x + 1648 + + + + + x + 1649 + + + + + x + 1650 + + + + + x + 1651 + + + + + x + 1652 + + + + + x + 1653 + + + + + x + 1654 + + + + + x + 1655 + + + + + x + 1656 + + + + + x + 1657 + + + + + x + 1658 + + + + + x + 1659 + + + + + x + 1660 + + + + + x + 1661 + + + + + x + 1662 + + + + + x + 1663 + + + + + x + 1664 + + + + + x + 1665 + + + + + x + 1666 + + + + + x + 1667 + + + + + x + 1668 + + + + + x + 1669 + + + + + x + 1670 + + + + + x + 1671 + + + + + x + 1672 + + + + + x + 1673 + + + + + x + 1674 + + + + + x + 1675 + + + + + x + 1676 + + + + + x + 1677 + + + + + x + 1678 + + + + + x + 1679 + + + + + x + 1680 + + + + + x + 1681 + + + + + x + 1682 + + + + + x + 1683 + + + + + x + 1684 + + + + + x + 1685 + + + + + x + 1686 + + + + + x + 1687 + + + + + x + 1688 + + + + + x + 1689 + + + + + x + 1690 + + + + + x + 1691 + + + + + x + 1692 + + + + + x + 1693 + + + + + x + 1694 + + + + + x + 1695 + + + + + x + 1696 + + + + + x + 1697 + + + + + x + 1698 + + + + + x + 1699 + + + + + x + 1700 + + + + + x + 1701 + + + + + x + 1702 + + + + + x + 1703 + + + + + x + 1704 + + + + + x + 1705 + + + + + x + 1706 + + + + + x + 1707 + + + + + x + 1708 + + + + + x + 1709 + + + + + x + 1710 + + + + + x + 1711 + + + + + x + 1712 + + + + + x + 1713 + + + + + x + 1714 + + + + + x + 1715 + + + + + x + 1716 + + + + + x + 1717 + + + + + x + 1718 + + + + + x + 1719 + + + + + x + 1720 + + + + + x + 1721 + + + + + x + 1722 + + + + + x + 1723 + + + + + x + 1724 + + + + + x + 1725 + + + + + x + 1726 + + + + + x + 1727 + + + + + x + 1728 + + + + + x + 1729 + + + + + x + 1730 + + + + + x + 1731 + + + + + x + 1732 + + + + + x + 1733 + + + + + x + 1734 + + + + + x + 1735 + + + + + x + 1736 + + + + + x + 1737 + + + + + x + 1738 + + + + + x + 1739 + + + + + x + 1740 + + + + + x + 1741 + + + + + x + 1742 + + + + + x + 1743 + + + + + x + 1744 + + + + + x + 1745 + + + + + x + 1746 + + + + + x + 1747 + + + + + x + 1748 + + + + + x + 1749 + + + + + x + 1750 + + + + + x + 1751 + + + + + x + 1752 + + + + + x + 1753 + + + + + x + 1754 + + + + + x + 1755 + + + + + x + 1756 + + + + + x + 1757 + + + + + x + 1758 + + + + + x + 1759 + + + + + x + 1760 + + + + + x + 1761 + + + + + x + 1762 + + + + + x + 1763 + + + + + x + 1764 + + + + + x + 1765 + + + + + x + 1766 + + + + + x + 1767 + + + + + x + 1768 + + + + + x + 1769 + + + + + x + 1770 + + + + + x + 1771 + + + + + x + 1772 + + + + + x + 1773 + + + + + x + 1774 + + + + + x + 1775 + + + + + x + 1776 + + + + + x + 1777 + + + + + x + 1778 + + + + + x + 1779 + + + + + x + 1780 + + + + + x + 1781 + + + + + x + 1782 + + + + + x + 1783 + + + + + x + 1784 + + + + + x + 1785 + + + + + x + 1786 + + + + + x + 1787 + + + + + x + 1788 + + + + + x + 1789 + + + + + x + 1790 + + + + + x + 1791 + + + + + x + 1792 + + + + + x + 1793 + + + + + x + 1794 + + + + + x + 1795 + + + + + x + 1796 + + + + + x + 1797 + + + + + x + 1798 + + + + + x + 1799 + + + + + x + 1800 + + + + + x + 1801 + + + + + x + 1802 + + + + + x + 1803 + + + + + x + 1804 + + + + + x + 1805 + + + + + x + 1806 + + + + + x + 1807 + + + + + x + 1808 + + + + + x + 1809 + + + + + x + 1810 + + + + + x + 1811 + + + + + x + 1812 + + + + + x + 1813 + + + + + x + 1814 + + + + + x + 1815 + + + + + x + 1816 + + + + + x + 1817 + + + + + x + 1818 + + + + + x + 1819 + + + + + x + 1820 + + + + + x + 1821 + + + + + x + 1822 + + + + + x + 1823 + + + + + x + 1824 + + + + + x + 1825 + + + + + x + 1826 + + + + + x + 1827 + + + + + x + 1828 + + + + + x + 1829 + + + + + x + 1830 + + + + + x + 1831 + + + + + x + 1832 + + + + + x + 1833 + + + + + x + 1834 + + + + + x + 1835 + + + + + x + 1836 + + + + + x + 1837 + + + + + x + 1838 + + + + + x + 1839 + + + + + x + 1840 + + + + + x + 1841 + + + + + x + 1842 + + + + + x + 1843 + + + + + x + 1844 + + + + + x + 1845 + + + + + x + 1846 + + + + + x + 1847 + + + + + x + 1848 + + + + + x + 1849 + + + + + x + 1850 + + + + + x + 1851 + + + + + x + 1852 + + + + + x + 1853 + + + + + x + 1854 + + + + + x + 1855 + + + + + x + 1856 + + + + + x + 1857 + + + + + x + 1858 + + + + + x + 1859 + + + + + x + 1860 + + + + + x + 1861 + + + + + x + 1862 + + + + + x + 1863 + + + + + x + 1864 + + + + + x + 1865 + + + + + x + 1866 + + + + + x + 1867 + + + + + x + 1868 + + + + + x + 1869 + + + + + x + 1870 + + + + + x + 1871 + + + + + x + 1872 + + + + + x + 1873 + + + + + x + 1874 + + + + + x + 1875 + + + + + x + 1876 + + + + + x + 1877 + + + + + x + 1878 + + + + + x + 1879 + + + + + x + 1880 + + + + + x + 1881 + + + + + x + 1882 + + + + + x + 1883 + + + + + x + 1884 + + + + + x + 1885 + + + + + x + 1886 + + + + + x + 1887 + + + + + x + 1888 + + + + + x + 1889 + + + + + x + 1890 + + + + + x + 1891 + + + + + x + 1892 + + + + + x + 1893 + + + + + x + 1894 + + + + + x + 1895 + + + + + x + 1896 + + + + + x + 1897 + + + + + x + 1898 + + + + + x + 1899 + + + + + x + 1900 + + + + + x + 1901 + + + + + x + 1902 + + + + + x + 1903 + + + + + x + 1904 + + + + + x + 1905 + + + + + x + 1906 + + + + + x + 1907 + + + + + x + 1908 + + + + + x + 1909 + + + + + x + 1910 + + + + + x + 1911 + + + + + x + 1912 + + + + + x + 1913 + + + + + x + 1914 + + + + + x + 1915 + + + + + x + 1916 + + + + + x + 1917 + + + + + x + 1918 + + + + + x + 1919 + + + + + x + 1920 + + + + + x + 1921 + + + + + x + 1922 + + + + + x + 1923 + + + + + x + 1924 + + + + + x + 1925 + + + + + x + 1926 + + + + + x + 1927 + + + + + x + 1928 + + + + + x + 1929 + + + + + x + 1930 + + + + + x + 1931 + + + + + x + 1932 + + + + + x + 1933 + + + + + x + 1934 + + + + + x + 1935 + + + + + x + 1936 + + + + + x + 1937 + + + + + x + 1938 + + + + + x + 1939 + + + + + x + 1940 + + + + + x + 1941 + + + + + x + 1942 + + + + + x + 1943 + + + + + x + 1944 + + + + + x + 1945 + + + + + x + 1946 + + + + + x + 1947 + + + + + x + 1948 + + + + + x + 1949 + + + + + x + 1950 + + + + + x + 1951 + + + + + x + 1952 + + + + + x + 1953 + + + + + x + 1954 + + + + + x + 1955 + + + + + x + 1956 + + + + + x + 1957 + + + + + x + 1958 + + + + + x + 1959 + + + + + x + 1960 + + + + + x + 1961 + + + + + x + 1962 + + + + + x + 1963 + + + + + x + 1964 + + + + + x + 1965 + + + + + x + 1966 + + + + + x + 1967 + + + + + x + 1968 + + + + + x + 1969 + + + + + x + 1970 + + + + + x + 1971 + + + + + x + 1972 + + + + + x + 1973 + + + + + x + 1974 + + + + + x + 1975 + + + + + x + 1976 + + + + + x + 1977 + + + + + x + 1978 + + + + + x + 1979 + + + + + x + 1980 + + + + + x + 1981 + + + + + x + 1982 + + + + + x + 1983 + + + + + x + 1984 + + + + + x + 1985 + + + + + x + 1986 + + + + + x + 1987 + + + + + x + 1988 + + + + + x + 1989 + + + + + x + 1990 + + + + + x + 1991 + + + + + x + 1992 + + + + + x + 1993 + + + + + x + 1994 + + + + + x + 1995 + + + + + x + 1996 + + + + + x + 1997 + + + + + x + 1998 + + + + + x + 1999 + + + + + x + 2000 + + + + + x + 2001 + + + + + x + 2002 + + + + + x + 2003 + + + + + x + 2004 + + + + + x + 2005 + + + + + x + 2006 + + + + + x + 2007 + + + + + x + 2008 + + + + + x + 2009 + + + + + x + 2010 + + + + + x + 2011 + + + + + x + 2012 + + + + + x + 2013 + + + + + x + 2014 + + + + + x + 2015 + + + + + x + 2016 + + + + + x + 2017 + + + + + x + 2018 + + + + + x + 2019 + + + + + x + 2020 + + + + + x + 2021 + + + + + x + 2022 + + + + + x + 2023 + + + + + x + 2024 + + + + + x + 2025 + + + + + x + 2026 + + + + + x + 2027 + + + + + x + 2028 + + + + + x + 2029 + + + + + x + 2030 + + + + + x + 2031 + + + + + x + 2032 + + + + + x + 2033 + + + + + x + 2034 + + + + + x + 2035 + + + + + x + 2036 + + + + + x + 2037 + + + + + x + 2038 + + + + + x + 2039 + + + + + x + 2040 + + + + + x + 2041 + + + + + x + 2042 + + + + + x + 2043 + + + + + x + 2044 + + + + + x + 2045 + + + + + x + 2046 + + + + + x + 2047 + + + + + x + 2048 + + + + + + + + x + + + x1 + + + + + x1 + + x + 1 + + + + + + + + x + + + + x + 0 + + + + + diff --git a/bench_horn_mcmc/samples_shrink_big_numbers_4096/config b/bench_horn_mcmc/samples_shrink_big_numbers_4096/config new file mode 100644 index 000000000..892379dc4 --- /dev/null +++ b/bench_horn_mcmc/samples_shrink_big_numbers_4096/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +8193 +-4096 -4095 -4094 -4093 -4092 -4091 -4090 -4089 -4088 -4087 -4086 -4085 -4084 -4083 -4082 -4081 -4080 -4079 -4078 -4077 -4076 -4075 -4074 -4073 -4072 -4071 -4070 -4069 -4068 -4067 -4066 -4065 -4064 -4063 -4062 -4061 -4060 -4059 -4058 -4057 -4056 -4055 -4054 -4053 -4052 -4051 -4050 -4049 -4048 -4047 -4046 -4045 -4044 -4043 -4042 -4041 -4040 -4039 -4038 -4037 -4036 -4035 -4034 -4033 -4032 -4031 -4030 -4029 -4028 -4027 -4026 -4025 -4024 -4023 -4022 -4021 -4020 -4019 -4018 -4017 -4016 -4015 -4014 -4013 -4012 -4011 -4010 -4009 -4008 -4007 -4006 -4005 -4004 -4003 -4002 -4001 -4000 -3999 -3998 -3997 -3996 -3995 -3994 -3993 -3992 -3991 -3990 -3989 -3988 -3987 -3986 -3985 -3984 -3983 -3982 -3981 -3980 -3979 -3978 -3977 -3976 -3975 -3974 -3973 -3972 -3971 -3970 -3969 -3968 -3967 -3966 -3965 -3964 -3963 -3962 -3961 -3960 -3959 -3958 -3957 -3956 -3955 -3954 -3953 -3952 -3951 -3950 -3949 -3948 -3947 -3946 -3945 -3944 -3943 -3942 -3941 -3940 -3939 -3938 -3937 -3936 -3935 -3934 -3933 -3932 -3931 -3930 -3929 -3928 -3927 -3926 -3925 -3924 -3923 -3922 -3921 -3920 -3919 -3918 -3917 -3916 -3915 -3914 -3913 -3912 -3911 -3910 -3909 -3908 -3907 -3906 -3905 -3904 -3903 -3902 -3901 -3900 -3899 -3898 -3897 -3896 -3895 -3894 -3893 -3892 -3891 -3890 -3889 -3888 -3887 -3886 -3885 -3884 -3883 -3882 -3881 -3880 -3879 -3878 -3877 -3876 -3875 -3874 -3873 -3872 -3871 -3870 -3869 -3868 -3867 -3866 -3865 -3864 -3863 -3862 -3861 -3860 -3859 -3858 -3857 -3856 -3855 -3854 -3853 -3852 -3851 -3850 -3849 -3848 -3847 -3846 -3845 -3844 -3843 -3842 -3841 -3840 -3839 -3838 -3837 -3836 -3835 -3834 -3833 -3832 -3831 -3830 -3829 -3828 -3827 -3826 -3825 -3824 -3823 -3822 -3821 -3820 -3819 -3818 -3817 -3816 -3815 -3814 -3813 -3812 -3811 -3810 -3809 -3808 -3807 -3806 -3805 -3804 -3803 -3802 -3801 -3800 -3799 -3798 -3797 -3796 -3795 -3794 -3793 -3792 -3791 -3790 -3789 -3788 -3787 -3786 -3785 -3784 -3783 -3782 -3781 -3780 -3779 -3778 -3777 -3776 -3775 -3774 -3773 -3772 -3771 -3770 -3769 -3768 -3767 -3766 -3765 -3764 -3763 -3762 -3761 -3760 -3759 -3758 -3757 -3756 -3755 -3754 -3753 -3752 -3751 -3750 -3749 -3748 -3747 -3746 -3745 -3744 -3743 -3742 -3741 -3740 -3739 -3738 -3737 -3736 -3735 -3734 -3733 -3732 -3731 -3730 -3729 -3728 -3727 -3726 -3725 -3724 -3723 -3722 -3721 -3720 -3719 -3718 -3717 -3716 -3715 -3714 -3713 -3712 -3711 -3710 -3709 -3708 -3707 -3706 -3705 -3704 -3703 -3702 -3701 -3700 -3699 -3698 -3697 -3696 -3695 -3694 -3693 -3692 -3691 -3690 -3689 -3688 -3687 -3686 -3685 -3684 -3683 -3682 -3681 -3680 -3679 -3678 -3677 -3676 -3675 -3674 -3673 -3672 -3671 -3670 -3669 -3668 -3667 -3666 -3665 -3664 -3663 -3662 -3661 -3660 -3659 -3658 -3657 -3656 -3655 -3654 -3653 -3652 -3651 -3650 -3649 -3648 -3647 -3646 -3645 -3644 -3643 -3642 -3641 -3640 -3639 -3638 -3637 -3636 -3635 -3634 -3633 -3632 -3631 -3630 -3629 -3628 -3627 -3626 -3625 -3624 -3623 -3622 -3621 -3620 -3619 -3618 -3617 -3616 -3615 -3614 -3613 -3612 -3611 -3610 -3609 -3608 -3607 -3606 -3605 -3604 -3603 -3602 -3601 -3600 -3599 -3598 -3597 -3596 -3595 -3594 -3593 -3592 -3591 -3590 -3589 -3588 -3587 -3586 -3585 -3584 -3583 -3582 -3581 -3580 -3579 -3578 -3577 -3576 -3575 -3574 -3573 -3572 -3571 -3570 -3569 -3568 -3567 -3566 -3565 -3564 -3563 -3562 -3561 -3560 -3559 -3558 -3557 -3556 -3555 -3554 -3553 -3552 -3551 -3550 -3549 -3548 -3547 -3546 -3545 -3544 -3543 -3542 -3541 -3540 -3539 -3538 -3537 -3536 -3535 -3534 -3533 -3532 -3531 -3530 -3529 -3528 -3527 -3526 -3525 -3524 -3523 -3522 -3521 -3520 -3519 -3518 -3517 -3516 -3515 -3514 -3513 -3512 -3511 -3510 -3509 -3508 -3507 -3506 -3505 -3504 -3503 -3502 -3501 -3500 -3499 -3498 -3497 -3496 -3495 -3494 -3493 -3492 -3491 -3490 -3489 -3488 -3487 -3486 -3485 -3484 -3483 -3482 -3481 -3480 -3479 -3478 -3477 -3476 -3475 -3474 -3473 -3472 -3471 -3470 -3469 -3468 -3467 -3466 -3465 -3464 -3463 -3462 -3461 -3460 -3459 -3458 -3457 -3456 -3455 -3454 -3453 -3452 -3451 -3450 -3449 -3448 -3447 -3446 -3445 -3444 -3443 -3442 -3441 -3440 -3439 -3438 -3437 -3436 -3435 -3434 -3433 -3432 -3431 -3430 -3429 -3428 -3427 -3426 -3425 -3424 -3423 -3422 -3421 -3420 -3419 -3418 -3417 -3416 -3415 -3414 -3413 -3412 -3411 -3410 -3409 -3408 -3407 -3406 -3405 -3404 -3403 -3402 -3401 -3400 -3399 -3398 -3397 -3396 -3395 -3394 -3393 -3392 -3391 -3390 -3389 -3388 -3387 -3386 -3385 -3384 -3383 -3382 -3381 -3380 -3379 -3378 -3377 -3376 -3375 -3374 -3373 -3372 -3371 -3370 -3369 -3368 -3367 -3366 -3365 -3364 -3363 -3362 -3361 -3360 -3359 -3358 -3357 -3356 -3355 -3354 -3353 -3352 -3351 -3350 -3349 -3348 -3347 -3346 -3345 -3344 -3343 -3342 -3341 -3340 -3339 -3338 -3337 -3336 -3335 -3334 -3333 -3332 -3331 -3330 -3329 -3328 -3327 -3326 -3325 -3324 -3323 -3322 -3321 -3320 -3319 -3318 -3317 -3316 -3315 -3314 -3313 -3312 -3311 -3310 -3309 -3308 -3307 -3306 -3305 -3304 -3303 -3302 -3301 -3300 -3299 -3298 -3297 -3296 -3295 -3294 -3293 -3292 -3291 -3290 -3289 -3288 -3287 -3286 -3285 -3284 -3283 -3282 -3281 -3280 -3279 -3278 -3277 -3276 -3275 -3274 -3273 -3272 -3271 -3270 -3269 -3268 -3267 -3266 -3265 -3264 -3263 -3262 -3261 -3260 -3259 -3258 -3257 -3256 -3255 -3254 -3253 -3252 -3251 -3250 -3249 -3248 -3247 -3246 -3245 -3244 -3243 -3242 -3241 -3240 -3239 -3238 -3237 -3236 -3235 -3234 -3233 -3232 -3231 -3230 -3229 -3228 -3227 -3226 -3225 -3224 -3223 -3222 -3221 -3220 -3219 -3218 -3217 -3216 -3215 -3214 -3213 -3212 -3211 -3210 -3209 -3208 -3207 -3206 -3205 -3204 -3203 -3202 -3201 -3200 -3199 -3198 -3197 -3196 -3195 -3194 -3193 -3192 -3191 -3190 -3189 -3188 -3187 -3186 -3185 -3184 -3183 -3182 -3181 -3180 -3179 -3178 -3177 -3176 -3175 -3174 -3173 -3172 -3171 -3170 -3169 -3168 -3167 -3166 -3165 -3164 -3163 -3162 -3161 -3160 -3159 -3158 -3157 -3156 -3155 -3154 -3153 -3152 -3151 -3150 -3149 -3148 -3147 -3146 -3145 -3144 -3143 -3142 -3141 -3140 -3139 -3138 -3137 -3136 -3135 -3134 -3133 -3132 -3131 -3130 -3129 -3128 -3127 -3126 -3125 -3124 -3123 -3122 -3121 -3120 -3119 -3118 -3117 -3116 -3115 -3114 -3113 -3112 -3111 -3110 -3109 -3108 -3107 -3106 -3105 -3104 -3103 -3102 -3101 -3100 -3099 -3098 -3097 -3096 -3095 -3094 -3093 -3092 -3091 -3090 -3089 -3088 -3087 -3086 -3085 -3084 -3083 -3082 -3081 -3080 -3079 -3078 -3077 -3076 -3075 -3074 -3073 -3072 -3071 -3070 -3069 -3068 -3067 -3066 -3065 -3064 -3063 -3062 -3061 -3060 -3059 -3058 -3057 -3056 -3055 -3054 -3053 -3052 -3051 -3050 -3049 -3048 -3047 -3046 -3045 -3044 -3043 -3042 -3041 -3040 -3039 -3038 -3037 -3036 -3035 -3034 -3033 -3032 -3031 -3030 -3029 -3028 -3027 -3026 -3025 -3024 -3023 -3022 -3021 -3020 -3019 -3018 -3017 -3016 -3015 -3014 -3013 -3012 -3011 -3010 -3009 -3008 -3007 -3006 -3005 -3004 -3003 -3002 -3001 -3000 -2999 -2998 -2997 -2996 -2995 -2994 -2993 -2992 -2991 -2990 -2989 -2988 -2987 -2986 -2985 -2984 -2983 -2982 -2981 -2980 -2979 -2978 -2977 -2976 -2975 -2974 -2973 -2972 -2971 -2970 -2969 -2968 -2967 -2966 -2965 -2964 -2963 -2962 -2961 -2960 -2959 -2958 -2957 -2956 -2955 -2954 -2953 -2952 -2951 -2950 -2949 -2948 -2947 -2946 -2945 -2944 -2943 -2942 -2941 -2940 -2939 -2938 -2937 -2936 -2935 -2934 -2933 -2932 -2931 -2930 -2929 -2928 -2927 -2926 -2925 -2924 -2923 -2922 -2921 -2920 -2919 -2918 -2917 -2916 -2915 -2914 -2913 -2912 -2911 -2910 -2909 -2908 -2907 -2906 -2905 -2904 -2903 -2902 -2901 -2900 -2899 -2898 -2897 -2896 -2895 -2894 -2893 -2892 -2891 -2890 -2889 -2888 -2887 -2886 -2885 -2884 -2883 -2882 -2881 -2880 -2879 -2878 -2877 -2876 -2875 -2874 -2873 -2872 -2871 -2870 -2869 -2868 -2867 -2866 -2865 -2864 -2863 -2862 -2861 -2860 -2859 -2858 -2857 -2856 -2855 -2854 -2853 -2852 -2851 -2850 -2849 -2848 -2847 -2846 -2845 -2844 -2843 -2842 -2841 -2840 -2839 -2838 -2837 -2836 -2835 -2834 -2833 -2832 -2831 -2830 -2829 -2828 -2827 -2826 -2825 -2824 -2823 -2822 -2821 -2820 -2819 -2818 -2817 -2816 -2815 -2814 -2813 -2812 -2811 -2810 -2809 -2808 -2807 -2806 -2805 -2804 -2803 -2802 -2801 -2800 -2799 -2798 -2797 -2796 -2795 -2794 -2793 -2792 -2791 -2790 -2789 -2788 -2787 -2786 -2785 -2784 -2783 -2782 -2781 -2780 -2779 -2778 -2777 -2776 -2775 -2774 -2773 -2772 -2771 -2770 -2769 -2768 -2767 -2766 -2765 -2764 -2763 -2762 -2761 -2760 -2759 -2758 -2757 -2756 -2755 -2754 -2753 -2752 -2751 -2750 -2749 -2748 -2747 -2746 -2745 -2744 -2743 -2742 -2741 -2740 -2739 -2738 -2737 -2736 -2735 -2734 -2733 -2732 -2731 -2730 -2729 -2728 -2727 -2726 -2725 -2724 -2723 -2722 -2721 -2720 -2719 -2718 -2717 -2716 -2715 -2714 -2713 -2712 -2711 -2710 -2709 -2708 -2707 -2706 -2705 -2704 -2703 -2702 -2701 -2700 -2699 -2698 -2697 -2696 -2695 -2694 -2693 -2692 -2691 -2690 -2689 -2688 -2687 -2686 -2685 -2684 -2683 -2682 -2681 -2680 -2679 -2678 -2677 -2676 -2675 -2674 -2673 -2672 -2671 -2670 -2669 -2668 -2667 -2666 -2665 -2664 -2663 -2662 -2661 -2660 -2659 -2658 -2657 -2656 -2655 -2654 -2653 -2652 -2651 -2650 -2649 -2648 -2647 -2646 -2645 -2644 -2643 -2642 -2641 -2640 -2639 -2638 -2637 -2636 -2635 -2634 -2633 -2632 -2631 -2630 -2629 -2628 -2627 -2626 -2625 -2624 -2623 -2622 -2621 -2620 -2619 -2618 -2617 -2616 -2615 -2614 -2613 -2612 -2611 -2610 -2609 -2608 -2607 -2606 -2605 -2604 -2603 -2602 -2601 -2600 -2599 -2598 -2597 -2596 -2595 -2594 -2593 -2592 -2591 -2590 -2589 -2588 -2587 -2586 -2585 -2584 -2583 -2582 -2581 -2580 -2579 -2578 -2577 -2576 -2575 -2574 -2573 -2572 -2571 -2570 -2569 -2568 -2567 -2566 -2565 -2564 -2563 -2562 -2561 -2560 -2559 -2558 -2557 -2556 -2555 -2554 -2553 -2552 -2551 -2550 -2549 -2548 -2547 -2546 -2545 -2544 -2543 -2542 -2541 -2540 -2539 -2538 -2537 -2536 -2535 -2534 -2533 -2532 -2531 -2530 -2529 -2528 -2527 -2526 -2525 -2524 -2523 -2522 -2521 -2520 -2519 -2518 -2517 -2516 -2515 -2514 -2513 -2512 -2511 -2510 -2509 -2508 -2507 -2506 -2505 -2504 -2503 -2502 -2501 -2500 -2499 -2498 -2497 -2496 -2495 -2494 -2493 -2492 -2491 -2490 -2489 -2488 -2487 -2486 -2485 -2484 -2483 -2482 -2481 -2480 -2479 -2478 -2477 -2476 -2475 -2474 -2473 -2472 -2471 -2470 -2469 -2468 -2467 -2466 -2465 -2464 -2463 -2462 -2461 -2460 -2459 -2458 -2457 -2456 -2455 -2454 -2453 -2452 -2451 -2450 -2449 -2448 -2447 -2446 -2445 -2444 -2443 -2442 -2441 -2440 -2439 -2438 -2437 -2436 -2435 -2434 -2433 -2432 -2431 -2430 -2429 -2428 -2427 -2426 -2425 -2424 -2423 -2422 -2421 -2420 -2419 -2418 -2417 -2416 -2415 -2414 -2413 -2412 -2411 -2410 -2409 -2408 -2407 -2406 -2405 -2404 -2403 -2402 -2401 -2400 -2399 -2398 -2397 -2396 -2395 -2394 -2393 -2392 -2391 -2390 -2389 -2388 -2387 -2386 -2385 -2384 -2383 -2382 -2381 -2380 -2379 -2378 -2377 -2376 -2375 -2374 -2373 -2372 -2371 -2370 -2369 -2368 -2367 -2366 -2365 -2364 -2363 -2362 -2361 -2360 -2359 -2358 -2357 -2356 -2355 -2354 -2353 -2352 -2351 -2350 -2349 -2348 -2347 -2346 -2345 -2344 -2343 -2342 -2341 -2340 -2339 -2338 -2337 -2336 -2335 -2334 -2333 -2332 -2331 -2330 -2329 -2328 -2327 -2326 -2325 -2324 -2323 -2322 -2321 -2320 -2319 -2318 -2317 -2316 -2315 -2314 -2313 -2312 -2311 -2310 -2309 -2308 -2307 -2306 -2305 -2304 -2303 -2302 -2301 -2300 -2299 -2298 -2297 -2296 -2295 -2294 -2293 -2292 -2291 -2290 -2289 -2288 -2287 -2286 -2285 -2284 -2283 -2282 -2281 -2280 -2279 -2278 -2277 -2276 -2275 -2274 -2273 -2272 -2271 -2270 -2269 -2268 -2267 -2266 -2265 -2264 -2263 -2262 -2261 -2260 -2259 -2258 -2257 -2256 -2255 -2254 -2253 -2252 -2251 -2250 -2249 -2248 -2247 -2246 -2245 -2244 -2243 -2242 -2241 -2240 -2239 -2238 -2237 -2236 -2235 -2234 -2233 -2232 -2231 -2230 -2229 -2228 -2227 -2226 -2225 -2224 -2223 -2222 -2221 -2220 -2219 -2218 -2217 -2216 -2215 -2214 -2213 -2212 -2211 -2210 -2209 -2208 -2207 -2206 -2205 -2204 -2203 -2202 -2201 -2200 -2199 -2198 -2197 -2196 -2195 -2194 -2193 -2192 -2191 -2190 -2189 -2188 -2187 -2186 -2185 -2184 -2183 -2182 -2181 -2180 -2179 -2178 -2177 -2176 -2175 -2174 -2173 -2172 -2171 -2170 -2169 -2168 -2167 -2166 -2165 -2164 -2163 -2162 -2161 -2160 -2159 -2158 -2157 -2156 -2155 -2154 -2153 -2152 -2151 -2150 -2149 -2148 -2147 -2146 -2145 -2144 -2143 -2142 -2141 -2140 -2139 -2138 -2137 -2136 -2135 -2134 -2133 -2132 -2131 -2130 -2129 -2128 -2127 -2126 -2125 -2124 -2123 -2122 -2121 -2120 -2119 -2118 -2117 -2116 -2115 -2114 -2113 -2112 -2111 -2110 -2109 -2108 -2107 -2106 -2105 -2104 -2103 -2102 -2101 -2100 -2099 -2098 -2097 -2096 -2095 -2094 -2093 -2092 -2091 -2090 -2089 -2088 -2087 -2086 -2085 -2084 -2083 -2082 -2081 -2080 -2079 -2078 -2077 -2076 -2075 -2074 -2073 -2072 -2071 -2070 -2069 -2068 -2067 -2066 -2065 -2064 -2063 -2062 -2061 -2060 -2059 -2058 -2057 -2056 -2055 -2054 -2053 -2052 -2051 -2050 -2049 -2048 -2047 -2046 -2045 -2044 -2043 -2042 -2041 -2040 -2039 -2038 -2037 -2036 -2035 -2034 -2033 -2032 -2031 -2030 -2029 -2028 -2027 -2026 -2025 -2024 -2023 -2022 -2021 -2020 -2019 -2018 -2017 -2016 -2015 -2014 -2013 -2012 -2011 -2010 -2009 -2008 -2007 -2006 -2005 -2004 -2003 -2002 -2001 -2000 -1999 -1998 -1997 -1996 -1995 -1994 -1993 -1992 -1991 -1990 -1989 -1988 -1987 -1986 -1985 -1984 -1983 -1982 -1981 -1980 -1979 -1978 -1977 -1976 -1975 -1974 -1973 -1972 -1971 -1970 -1969 -1968 -1967 -1966 -1965 -1964 -1963 -1962 -1961 -1960 -1959 -1958 -1957 -1956 -1955 -1954 -1953 -1952 -1951 -1950 -1949 -1948 -1947 -1946 -1945 -1944 -1943 -1942 -1941 -1940 -1939 -1938 -1937 -1936 -1935 -1934 -1933 -1932 -1931 -1930 -1929 -1928 -1927 -1926 -1925 -1924 -1923 -1922 -1921 -1920 -1919 -1918 -1917 -1916 -1915 -1914 -1913 -1912 -1911 -1910 -1909 -1908 -1907 -1906 -1905 -1904 -1903 -1902 -1901 -1900 -1899 -1898 -1897 -1896 -1895 -1894 -1893 -1892 -1891 -1890 -1889 -1888 -1887 -1886 -1885 -1884 -1883 -1882 -1881 -1880 -1879 -1878 -1877 -1876 -1875 -1874 -1873 -1872 -1871 -1870 -1869 -1868 -1867 -1866 -1865 -1864 -1863 -1862 -1861 -1860 -1859 -1858 -1857 -1856 -1855 -1854 -1853 -1852 -1851 -1850 -1849 -1848 -1847 -1846 -1845 -1844 -1843 -1842 -1841 -1840 -1839 -1838 -1837 -1836 -1835 -1834 -1833 -1832 -1831 -1830 -1829 -1828 -1827 -1826 -1825 -1824 -1823 -1822 -1821 -1820 -1819 -1818 -1817 -1816 -1815 -1814 -1813 -1812 -1811 -1810 -1809 -1808 -1807 -1806 -1805 -1804 -1803 -1802 -1801 -1800 -1799 -1798 -1797 -1796 -1795 -1794 -1793 -1792 -1791 -1790 -1789 -1788 -1787 -1786 -1785 -1784 -1783 -1782 -1781 -1780 -1779 -1778 -1777 -1776 -1775 -1774 -1773 -1772 -1771 -1770 -1769 -1768 -1767 -1766 -1765 -1764 -1763 -1762 -1761 -1760 -1759 -1758 -1757 -1756 -1755 -1754 -1753 -1752 -1751 -1750 -1749 -1748 -1747 -1746 -1745 -1744 -1743 -1742 -1741 -1740 -1739 -1738 -1737 -1736 -1735 -1734 -1733 -1732 -1731 -1730 -1729 -1728 -1727 -1726 -1725 -1724 -1723 -1722 -1721 -1720 -1719 -1718 -1717 -1716 -1715 -1714 -1713 -1712 -1711 -1710 -1709 -1708 -1707 -1706 -1705 -1704 -1703 -1702 -1701 -1700 -1699 -1698 -1697 -1696 -1695 -1694 -1693 -1692 -1691 -1690 -1689 -1688 -1687 -1686 -1685 -1684 -1683 -1682 -1681 -1680 -1679 -1678 -1677 -1676 -1675 -1674 -1673 -1672 -1671 -1670 -1669 -1668 -1667 -1666 -1665 -1664 -1663 -1662 -1661 -1660 -1659 -1658 -1657 -1656 -1655 -1654 -1653 -1652 -1651 -1650 -1649 -1648 -1647 -1646 -1645 -1644 -1643 -1642 -1641 -1640 -1639 -1638 -1637 -1636 -1635 -1634 -1633 -1632 -1631 -1630 -1629 -1628 -1627 -1626 -1625 -1624 -1623 -1622 -1621 -1620 -1619 -1618 -1617 -1616 -1615 -1614 -1613 -1612 -1611 -1610 -1609 -1608 -1607 -1606 -1605 -1604 -1603 -1602 -1601 -1600 -1599 -1598 -1597 -1596 -1595 -1594 -1593 -1592 -1591 -1590 -1589 -1588 -1587 -1586 -1585 -1584 -1583 -1582 -1581 -1580 -1579 -1578 -1577 -1576 -1575 -1574 -1573 -1572 -1571 -1570 -1569 -1568 -1567 -1566 -1565 -1564 -1563 -1562 -1561 -1560 -1559 -1558 -1557 -1556 -1555 -1554 -1553 -1552 -1551 -1550 -1549 -1548 -1547 -1546 -1545 -1544 -1543 -1542 -1541 -1540 -1539 -1538 -1537 -1536 -1535 -1534 -1533 -1532 -1531 -1530 -1529 -1528 -1527 -1526 -1525 -1524 -1523 -1522 -1521 -1520 -1519 -1518 -1517 -1516 -1515 -1514 -1513 -1512 -1511 -1510 -1509 -1508 -1507 -1506 -1505 -1504 -1503 -1502 -1501 -1500 -1499 -1498 -1497 -1496 -1495 -1494 -1493 -1492 -1491 -1490 -1489 -1488 -1487 -1486 -1485 -1484 -1483 -1482 -1481 -1480 -1479 -1478 -1477 -1476 -1475 -1474 -1473 -1472 -1471 -1470 -1469 -1468 -1467 -1466 -1465 -1464 -1463 -1462 -1461 -1460 -1459 -1458 -1457 -1456 -1455 -1454 -1453 -1452 -1451 -1450 -1449 -1448 -1447 -1446 -1445 -1444 -1443 -1442 -1441 -1440 -1439 -1438 -1437 -1436 -1435 -1434 -1433 -1432 -1431 -1430 -1429 -1428 -1427 -1426 -1425 -1424 -1423 -1422 -1421 -1420 -1419 -1418 -1417 -1416 -1415 -1414 -1413 -1412 -1411 -1410 -1409 -1408 -1407 -1406 -1405 -1404 -1403 -1402 -1401 -1400 -1399 -1398 -1397 -1396 -1395 -1394 -1393 -1392 -1391 -1390 -1389 -1388 -1387 -1386 -1385 -1384 -1383 -1382 -1381 -1380 -1379 -1378 -1377 -1376 -1375 -1374 -1373 -1372 -1371 -1370 -1369 -1368 -1367 -1366 -1365 -1364 -1363 -1362 -1361 -1360 -1359 -1358 -1357 -1356 -1355 -1354 -1353 -1352 -1351 -1350 -1349 -1348 -1347 -1346 -1345 -1344 -1343 -1342 -1341 -1340 -1339 -1338 -1337 -1336 -1335 -1334 -1333 -1332 -1331 -1330 -1329 -1328 -1327 -1326 -1325 -1324 -1323 -1322 -1321 -1320 -1319 -1318 -1317 -1316 -1315 -1314 -1313 -1312 -1311 -1310 -1309 -1308 -1307 -1306 -1305 -1304 -1303 -1302 -1301 -1300 -1299 -1298 -1297 -1296 -1295 -1294 -1293 -1292 -1291 -1290 -1289 -1288 -1287 -1286 -1285 -1284 -1283 -1282 -1281 -1280 -1279 -1278 -1277 -1276 -1275 -1274 -1273 -1272 -1271 -1270 -1269 -1268 -1267 -1266 -1265 -1264 -1263 -1262 -1261 -1260 -1259 -1258 -1257 -1256 -1255 -1254 -1253 -1252 -1251 -1250 -1249 -1248 -1247 -1246 -1245 -1244 -1243 -1242 -1241 -1240 -1239 -1238 -1237 -1236 -1235 -1234 -1233 -1232 -1231 -1230 -1229 -1228 -1227 -1226 -1225 -1224 -1223 -1222 -1221 -1220 -1219 -1218 -1217 -1216 -1215 -1214 -1213 -1212 -1211 -1210 -1209 -1208 -1207 -1206 -1205 -1204 -1203 -1202 -1201 -1200 -1199 -1198 -1197 -1196 -1195 -1194 -1193 -1192 -1191 -1190 -1189 -1188 -1187 -1186 -1185 -1184 -1183 -1182 -1181 -1180 -1179 -1178 -1177 -1176 -1175 -1174 -1173 -1172 -1171 -1170 -1169 -1168 -1167 -1166 -1165 -1164 -1163 -1162 -1161 -1160 -1159 -1158 -1157 -1156 -1155 -1154 -1153 -1152 -1151 -1150 -1149 -1148 -1147 -1146 -1145 -1144 -1143 -1142 -1141 -1140 -1139 -1138 -1137 -1136 -1135 -1134 -1133 -1132 -1131 -1130 -1129 -1128 -1127 -1126 -1125 -1124 -1123 -1122 -1121 -1120 -1119 -1118 -1117 -1116 -1115 -1114 -1113 -1112 -1111 -1110 -1109 -1108 -1107 -1106 -1105 -1104 -1103 -1102 -1101 -1100 -1099 -1098 -1097 -1096 -1095 -1094 -1093 -1092 -1091 -1090 -1089 -1088 -1087 -1086 -1085 -1084 -1083 -1082 -1081 -1080 -1079 -1078 -1077 -1076 -1075 -1074 -1073 -1072 -1071 -1070 -1069 -1068 -1067 -1066 -1065 -1064 -1063 -1062 -1061 -1060 -1059 -1058 -1057 -1056 -1055 -1054 -1053 -1052 -1051 -1050 -1049 -1048 -1047 -1046 -1045 -1044 -1043 -1042 -1041 -1040 -1039 -1038 -1037 -1036 -1035 -1034 -1033 -1032 -1031 -1030 -1029 -1028 -1027 -1026 -1025 -1024 -1023 -1022 -1021 -1020 -1019 -1018 -1017 -1016 -1015 -1014 -1013 -1012 -1011 -1010 -1009 -1008 -1007 -1006 -1005 -1004 -1003 -1002 -1001 -1000 -999 -998 -997 -996 -995 -994 -993 -992 -991 -990 -989 -988 -987 -986 -985 -984 -983 -982 -981 -980 -979 -978 -977 -976 -975 -974 -973 -972 -971 -970 -969 -968 -967 -966 -965 -964 -963 -962 -961 -960 -959 -958 -957 -956 -955 -954 -953 -952 -951 -950 -949 -948 -947 -946 -945 -944 -943 -942 -941 -940 -939 -938 -937 -936 -935 -934 -933 -932 -931 -930 -929 -928 -927 -926 -925 -924 -923 -922 -921 -920 -919 -918 -917 -916 -915 -914 -913 -912 -911 -910 -909 -908 -907 -906 -905 -904 -903 -902 -901 -900 -899 -898 -897 -896 -895 -894 -893 -892 -891 -890 -889 -888 -887 -886 -885 -884 -883 -882 -881 -880 -879 -878 -877 -876 -875 -874 -873 -872 -871 -870 -869 -868 -867 -866 -865 -864 -863 -862 -861 -860 -859 -858 -857 -856 -855 -854 -853 -852 -851 -850 -849 -848 -847 -846 -845 -844 -843 -842 -841 -840 -839 -838 -837 -836 -835 -834 -833 -832 -831 -830 -829 -828 -827 -826 -825 -824 -823 -822 -821 -820 -819 -818 -817 -816 -815 -814 -813 -812 -811 -810 -809 -808 -807 -806 -805 -804 -803 -802 -801 -800 -799 -798 -797 -796 -795 -794 -793 -792 -791 -790 -789 -788 -787 -786 -785 -784 -783 -782 -781 -780 -779 -778 -777 -776 -775 -774 -773 -772 -771 -770 -769 -768 -767 -766 -765 -764 -763 -762 -761 -760 -759 -758 -757 -756 -755 -754 -753 -752 -751 -750 -749 -748 -747 -746 -745 -744 -743 -742 -741 -740 -739 -738 -737 -736 -735 -734 -733 -732 -731 -730 -729 -728 -727 -726 -725 -724 -723 -722 -721 -720 -719 -718 -717 -716 -715 -714 -713 -712 -711 -710 -709 -708 -707 -706 -705 -704 -703 -702 -701 -700 -699 -698 -697 -696 -695 -694 -693 -692 -691 -690 -689 -688 -687 -686 -685 -684 -683 -682 -681 -680 -679 -678 -677 -676 -675 -674 -673 -672 -671 -670 -669 -668 -667 -666 -665 -664 -663 -662 -661 -660 -659 -658 -657 -656 -655 -654 -653 -652 -651 -650 -649 -648 -647 -646 -645 -644 -643 -642 -641 -640 -639 -638 -637 -636 -635 -634 -633 -632 -631 -630 -629 -628 -627 -626 -625 -624 -623 -622 -621 -620 -619 -618 -617 -616 -615 -614 -613 -612 -611 -610 -609 -608 -607 -606 -605 -604 -603 -602 -601 -600 -599 -598 -597 -596 -595 -594 -593 -592 -591 -590 -589 -588 -587 -586 -585 -584 -583 -582 -581 -580 -579 -578 -577 -576 -575 -574 -573 -572 -571 -570 -569 -568 -567 -566 -565 -564 -563 -562 -561 -560 -559 -558 -557 -556 -555 -554 -553 -552 -551 -550 -549 -548 -547 -546 -545 -544 -543 -542 -541 -540 -539 -538 -537 -536 -535 -534 -533 -532 -531 -530 -529 -528 -527 -526 -525 -524 -523 -522 -521 -520 -519 -518 -517 -516 -515 -514 -513 -512 -511 -510 -509 -508 -507 -506 -505 -504 -503 -502 -501 -500 -499 -498 -497 -496 -495 -494 -493 -492 -491 -490 -489 -488 -487 -486 -485 -484 -483 -482 -481 -480 -479 -478 -477 -476 -475 -474 -473 -472 -471 -470 -469 -468 -467 -466 -465 -464 -463 -462 -461 -460 -459 -458 -457 -456 -455 -454 -453 -452 -451 -450 -449 -448 -447 -446 -445 -444 -443 -442 -441 -440 -439 -438 -437 -436 -435 -434 -433 -432 -431 -430 -429 -428 -427 -426 -425 -424 -423 -422 -421 -420 -419 -418 -417 -416 -415 -414 -413 -412 -411 -410 -409 -408 -407 -406 -405 -404 -403 -402 -401 -400 -399 -398 -397 -396 -395 -394 -393 -392 -391 -390 -389 -388 -387 -386 -385 -384 -383 -382 -381 -380 -379 -378 -377 -376 -375 -374 -373 -372 -371 -370 -369 -368 -367 -366 -365 -364 -363 -362 -361 -360 -359 -358 -357 -356 -355 -354 -353 -352 -351 -350 -349 -348 -347 -346 -345 -344 -343 -342 -341 -340 -339 -338 -337 -336 -335 -334 -333 -332 -331 -330 -329 -328 -327 -326 -325 -324 -323 -322 -321 -320 -319 -318 -317 -316 -315 -314 -313 -312 -311 -310 -309 -308 -307 -306 -305 -304 -303 -302 -301 -300 -299 -298 -297 -296 -295 -294 -293 -292 -291 -290 -289 -288 -287 -286 -285 -284 -283 -282 -281 -280 -279 -278 -277 -276 -275 -274 -273 -272 -271 -270 -269 -268 -267 -266 -265 -264 -263 -262 -261 -260 -259 -258 -257 -256 -255 -254 -253 -252 -251 -250 -249 -248 -247 -246 -245 -244 -243 -242 -241 -240 -239 -238 -237 -236 -235 -234 -233 -232 -231 -230 -229 -228 -227 -226 -225 -224 -223 -222 -221 -220 -219 -218 -217 -216 -215 -214 -213 -212 -211 -210 -209 -208 -207 -206 -205 -204 -203 -202 -201 -200 -199 -198 -197 -196 -195 -194 -193 -192 -191 -190 -189 -188 -187 -186 -185 -184 -183 -182 -181 -180 -179 -178 -177 -176 -175 -174 -173 -172 -171 -170 -169 -168 -167 -166 -165 -164 -163 -162 -161 -160 -159 -158 -157 -156 -155 -154 -153 -152 -151 -150 -149 -148 -147 -146 -145 -144 -143 -142 -141 -140 -139 -138 -137 -136 -135 -134 -133 -132 -131 -130 -129 -128 -127 -126 -125 -124 -123 -122 -121 -120 -119 -118 -117 -116 -115 -114 -113 -112 -111 -110 -109 -108 -107 -106 -105 -104 -103 -102 -101 -100 -99 -98 -97 -96 -95 -94 -93 -92 -91 -90 -89 -88 -87 -86 -85 -84 -83 -82 -81 -80 -79 -78 -77 -76 -75 -74 -73 -72 -71 -70 -69 -68 -67 -66 -65 -64 -63 -62 -61 -60 -59 -58 -57 -56 -55 -54 -53 -52 -51 -50 -49 -48 -47 -46 -45 -44 -43 -42 -41 -40 -39 -38 -37 -36 -35 -34 -33 -32 -31 -30 -29 -28 -27 -26 -25 -24 -23 -22 -21 -20 -19 -18 -17 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/samples_shrink_big_numbers_4096/first.xml b/bench_horn_mcmc/samples_shrink_big_numbers_4096/first.xml new file mode 100644 index 000000000..65060a2c1 --- /dev/null +++ b/bench_horn_mcmc/samples_shrink_big_numbers_4096/first.xml @@ -0,0 +1,24635 @@ + + + + + 1 + itp + + + + x + x1 + + + + x + + + + + + x + 1 + + + + + x + 2 + + + + + x + 3 + + + + + x + 4 + + + + + x + 5 + + + + + x + 6 + + + + + x + 7 + + + + + x + 8 + + + + + x + 9 + + + + + x + 10 + + + + + x + 11 + + + + + x + 12 + + + + + x + 13 + + + + + x + 14 + + + + + x + 15 + + + + + x + 16 + + + + + x + 17 + + + + + x + 18 + + + + + x + 19 + + + + + x + 20 + + + + + x + 21 + + + + + x + 22 + + + + + x + 23 + + + + + x + 24 + + + + + x + 25 + + + + + x + 26 + + + + + x + 27 + + + + + x + 28 + + + + + x + 29 + + + + + x + 30 + + + + + x + 31 + + + + + x + 32 + + + + + x + 33 + + + + + x + 34 + + + + + x + 35 + + + + + x + 36 + + + + + x + 37 + + + + + x + 38 + + + + + x + 39 + + + + + x + 40 + + + + + x + 41 + + + + + x + 42 + + + + + x + 43 + + + + + x + 44 + + + + + x + 45 + + + + + x + 46 + + + + + x + 47 + + + + + x + 48 + + + + + x + 49 + + + + + x + 50 + + + + + x + 51 + + + + + x + 52 + + + + + x + 53 + + + + + x + 54 + + + + + x + 55 + + + + + x + 56 + + + + + x + 57 + + + + + x + 58 + + + + + x + 59 + + + + + x + 60 + + + + + x + 61 + + + + + x + 62 + + + + + x + 63 + + + + + x + 64 + + + + + x + 65 + + + + + x + 66 + + + + + x + 67 + + + + + x + 68 + + + + + x + 69 + + + + + x + 70 + + + + + x + 71 + + + + + x + 72 + + + + + x + 73 + + + + + x + 74 + + + + + x + 75 + + + + + x + 76 + + + + + x + 77 + + + + + x + 78 + + + + + x + 79 + + + + + x + 80 + + + + + x + 81 + + + + + x + 82 + + + + + x + 83 + + + + + x + 84 + + + + + x + 85 + + + + + x + 86 + + + + + x + 87 + + + + + x + 88 + + + + + x + 89 + + + + + x + 90 + + + + + x + 91 + + + + + x + 92 + + + + + x + 93 + + + + + x + 94 + + + + + x + 95 + + + + + x + 96 + + + + + x + 97 + + + + + x + 98 + + + + + x + 99 + + + + + x + 100 + + + + + x + 101 + + + + + x + 102 + + + + + x + 103 + + + + + x + 104 + + + + + x + 105 + + + + + x + 106 + + + + + x + 107 + + + + + x + 108 + + + + + x + 109 + + + + + x + 110 + + + + + x + 111 + + + + + x + 112 + + + + + x + 113 + + + + + x + 114 + + + + + x + 115 + + + + + x + 116 + + + + + x + 117 + + + + + x + 118 + + + + + x + 119 + + + + + x + 120 + + + + + x + 121 + + + + + x + 122 + + + + + x + 123 + + + + + x + 124 + + + + + x + 125 + + + + + x + 126 + + + + + x + 127 + + + + + x + 128 + + + + + x + 129 + + + + + x + 130 + + + + + x + 131 + + + + + x + 132 + + + + + x + 133 + + + + + x + 134 + + + + + x + 135 + + + + + x + 136 + + + + + x + 137 + + + + + x + 138 + + + + + x + 139 + + + + + x + 140 + + + + + x + 141 + + + + + x + 142 + + + + + x + 143 + + + + + x + 144 + + + + + x + 145 + + + + + x + 146 + + + + + x + 147 + + + + + x + 148 + + + + + x + 149 + + + + + x + 150 + + + + + x + 151 + + + + + x + 152 + + + + + x + 153 + + + + + x + 154 + + + + + x + 155 + + + + + x + 156 + + + + + x + 157 + + + + + x + 158 + + + + + x + 159 + + + + + x + 160 + + + + + x + 161 + + + + + x + 162 + + + + + x + 163 + + + + + x + 164 + + + + + x + 165 + + + + + x + 166 + + + + + x + 167 + + + + + x + 168 + + + + + x + 169 + + + + + x + 170 + + + + + x + 171 + + + + + x + 172 + + + + + x + 173 + + + + + x + 174 + + + + + x + 175 + + + + + x + 176 + + + + + x + 177 + + + + + x + 178 + + + + + x + 179 + + + + + x + 180 + + + + + x + 181 + + + + + x + 182 + + + + + x + 183 + + + + + x + 184 + + + + + x + 185 + + + + + x + 186 + + + + + x + 187 + + + + + x + 188 + + + + + x + 189 + + + + + x + 190 + + + + + x + 191 + + + + + x + 192 + + + + + x + 193 + + + + + x + 194 + + + + + x + 195 + + + + + x + 196 + + + + + x + 197 + + + + + x + 198 + + + + + x + 199 + + + + + x + 200 + + + + + x + 201 + + + + + x + 202 + + + + + x + 203 + + + + + x + 204 + + + + + x + 205 + + + + + x + 206 + + + + + x + 207 + + + + + x + 208 + + + + + x + 209 + + + + + x + 210 + + + + + x + 211 + + + + + x + 212 + + + + + x + 213 + + + + + x + 214 + + + + + x + 215 + + + + + x + 216 + + + + + x + 217 + + + + + x + 218 + + + + + x + 219 + + + + + x + 220 + + + + + x + 221 + + + + + x + 222 + + + + + x + 223 + + + + + x + 224 + + + + + x + 225 + + + + + x + 226 + + + + + x + 227 + + + + + x + 228 + + + + + x + 229 + + + + + x + 230 + + + + + x + 231 + + + + + x + 232 + + + + + x + 233 + + + + + x + 234 + + + + + x + 235 + + + + + x + 236 + + + + + x + 237 + + + + + x + 238 + + + + + x + 239 + + + + + x + 240 + + + + + x + 241 + + + + + x + 242 + + + + + x + 243 + + + + + x + 244 + + + + + x + 245 + + + + + x + 246 + + + + + x + 247 + + + + + x + 248 + + + + + x + 249 + + + + + x + 250 + + + + + x + 251 + + + + + x + 252 + + + + + x + 253 + + + + + x + 254 + + + + + x + 255 + + + + + x + 256 + + + + + x + 257 + + + + + x + 258 + + + + + x + 259 + + + + + x + 260 + + + + + x + 261 + + + + + x + 262 + + + + + x + 263 + + + + + x + 264 + + + + + x + 265 + + + + + x + 266 + + + + + x + 267 + + + + + x + 268 + + + + + x + 269 + + + + + x + 270 + + + + + x + 271 + + + + + x + 272 + + + + + x + 273 + + + + + x + 274 + + + + + x + 275 + + + + + x + 276 + + + + + x + 277 + + + + + x + 278 + + + + + x + 279 + + + + + x + 280 + + + + + x + 281 + + + + + x + 282 + + + + + x + 283 + + + + + x + 284 + + + + + x + 285 + + + + + x + 286 + + + + + x + 287 + + + + + x + 288 + + + + + x + 289 + + + + + x + 290 + + + + + x + 291 + + + + + x + 292 + + + + + x + 293 + + + + + x + 294 + + + + + x + 295 + + + + + x + 296 + + + + + x + 297 + + + + + x + 298 + + + + + x + 299 + + + + + x + 300 + + + + + x + 301 + + + + + x + 302 + + + + + x + 303 + + + + + x + 304 + + + + + x + 305 + + + + + x + 306 + + + + + x + 307 + + + + + x + 308 + + + + + x + 309 + + + + + x + 310 + + + + + x + 311 + + + + + x + 312 + + + + + x + 313 + + + + + x + 314 + + + + + x + 315 + + + + + x + 316 + + + + + x + 317 + + + + + x + 318 + + + + + x + 319 + + + + + x + 320 + + + + + x + 321 + + + + + x + 322 + + + + + x + 323 + + + + + x + 324 + + + + + x + 325 + + + + + x + 326 + + + + + x + 327 + + + + + x + 328 + + + + + x + 329 + + + + + x + 330 + + + + + x + 331 + + + + + x + 332 + + + + + x + 333 + + + + + x + 334 + + + + + x + 335 + + + + + x + 336 + + + + + x + 337 + + + + + x + 338 + + + + + x + 339 + + + + + x + 340 + + + + + x + 341 + + + + + x + 342 + + + + + x + 343 + + + + + x + 344 + + + + + x + 345 + + + + + x + 346 + + + + + x + 347 + + + + + x + 348 + + + + + x + 349 + + + + + x + 350 + + + + + x + 351 + + + + + x + 352 + + + + + x + 353 + + + + + x + 354 + + + + + x + 355 + + + + + x + 356 + + + + + x + 357 + + + + + x + 358 + + + + + x + 359 + + + + + x + 360 + + + + + x + 361 + + + + + x + 362 + + + + + x + 363 + + + + + x + 364 + + + + + x + 365 + + + + + x + 366 + + + + + x + 367 + + + + + x + 368 + + + + + x + 369 + + + + + x + 370 + + + + + x + 371 + + + + + x + 372 + + + + + x + 373 + + + + + x + 374 + + + + + x + 375 + + + + + x + 376 + + + + + x + 377 + + + + + x + 378 + + + + + x + 379 + + + + + x + 380 + + + + + x + 381 + + + + + x + 382 + + + + + x + 383 + + + + + x + 384 + + + + + x + 385 + + + + + x + 386 + + + + + x + 387 + + + + + x + 388 + + + + + x + 389 + + + + + x + 390 + + + + + x + 391 + + + + + x + 392 + + + + + x + 393 + + + + + x + 394 + + + + + x + 395 + + + + + x + 396 + + + + + x + 397 + + + + + x + 398 + + + + + x + 399 + + + + + x + 400 + + + + + x + 401 + + + + + x + 402 + + + + + x + 403 + + + + + x + 404 + + + + + x + 405 + + + + + x + 406 + + + + + x + 407 + + + + + x + 408 + + + + + x + 409 + + + + + x + 410 + + + + + x + 411 + + + + + x + 412 + + + + + x + 413 + + + + + x + 414 + + + + + x + 415 + + + + + x + 416 + + + + + x + 417 + + + + + x + 418 + + + + + x + 419 + + + + + x + 420 + + + + + x + 421 + + + + + x + 422 + + + + + x + 423 + + + + + x + 424 + + + + + x + 425 + + + + + x + 426 + + + + + x + 427 + + + + + x + 428 + + + + + x + 429 + + + + + x + 430 + + + + + x + 431 + + + + + x + 432 + + + + + x + 433 + + + + + x + 434 + + + + + x + 435 + + + + + x + 436 + + + + + x + 437 + + + + + x + 438 + + + + + x + 439 + + + + + x + 440 + + + + + x + 441 + + + + + x + 442 + + + + + x + 443 + + + + + x + 444 + + + + + x + 445 + + + + + x + 446 + + + + + x + 447 + + + + + x + 448 + + + + + x + 449 + + + + + x + 450 + + + + + x + 451 + + + + + x + 452 + + + + + x + 453 + + + + + x + 454 + + + + + x + 455 + + + + + x + 456 + + + + + x + 457 + + + + + x + 458 + + + + + x + 459 + + + + + x + 460 + + + + + x + 461 + + + + + x + 462 + + + + + x + 463 + + + + + x + 464 + + + + + x + 465 + + + + + x + 466 + + + + + x + 467 + + + + + x + 468 + + + + + x + 469 + + + + + x + 470 + + + + + x + 471 + + + + + x + 472 + + + + + x + 473 + + + + + x + 474 + + + + + x + 475 + + + + + x + 476 + + + + + x + 477 + + + + + x + 478 + + + + + x + 479 + + + + + x + 480 + + + + + x + 481 + + + + + x + 482 + + + + + x + 483 + + + + + x + 484 + + + + + x + 485 + + + + + x + 486 + + + + + x + 487 + + + + + x + 488 + + + + + x + 489 + + + + + x + 490 + + + + + x + 491 + + + + + x + 492 + + + + + x + 493 + + + + + x + 494 + + + + + x + 495 + + + + + x + 496 + + + + + x + 497 + + + + + x + 498 + + + + + x + 499 + + + + + x + 500 + + + + + x + 501 + + + + + x + 502 + + + + + x + 503 + + + + + x + 504 + + + + + x + 505 + + + + + x + 506 + + + + + x + 507 + + + + + x + 508 + + + + + x + 509 + + + + + x + 510 + + + + + x + 511 + + + + + x + 512 + + + + + x + 513 + + + + + x + 514 + + + + + x + 515 + + + + + x + 516 + + + + + x + 517 + + + + + x + 518 + + + + + x + 519 + + + + + x + 520 + + + + + x + 521 + + + + + x + 522 + + + + + x + 523 + + + + + x + 524 + + + + + x + 525 + + + + + x + 526 + + + + + x + 527 + + + + + x + 528 + + + + + x + 529 + + + + + x + 530 + + + + + x + 531 + + + + + x + 532 + + + + + x + 533 + + + + + x + 534 + + + + + x + 535 + + + + + x + 536 + + + + + x + 537 + + + + + x + 538 + + + + + x + 539 + + + + + x + 540 + + + + + x + 541 + + + + + x + 542 + + + + + x + 543 + + + + + x + 544 + + + + + x + 545 + + + + + x + 546 + + + + + x + 547 + + + + + x + 548 + + + + + x + 549 + + + + + x + 550 + + + + + x + 551 + + + + + x + 552 + + + + + x + 553 + + + + + x + 554 + + + + + x + 555 + + + + + x + 556 + + + + + x + 557 + + + + + x + 558 + + + + + x + 559 + + + + + x + 560 + + + + + x + 561 + + + + + x + 562 + + + + + x + 563 + + + + + x + 564 + + + + + x + 565 + + + + + x + 566 + + + + + x + 567 + + + + + x + 568 + + + + + x + 569 + + + + + x + 570 + + + + + x + 571 + + + + + x + 572 + + + + + x + 573 + + + + + x + 574 + + + + + x + 575 + + + + + x + 576 + + + + + x + 577 + + + + + x + 578 + + + + + x + 579 + + + + + x + 580 + + + + + x + 581 + + + + + x + 582 + + + + + x + 583 + + + + + x + 584 + + + + + x + 585 + + + + + x + 586 + + + + + x + 587 + + + + + x + 588 + + + + + x + 589 + + + + + x + 590 + + + + + x + 591 + + + + + x + 592 + + + + + x + 593 + + + + + x + 594 + + + + + x + 595 + + + + + x + 596 + + + + + x + 597 + + + + + x + 598 + + + + + x + 599 + + + + + x + 600 + + + + + x + 601 + + + + + x + 602 + + + + + x + 603 + + + + + x + 604 + + + + + x + 605 + + + + + x + 606 + + + + + x + 607 + + + + + x + 608 + + + + + x + 609 + + + + + x + 610 + + + + + x + 611 + + + + + x + 612 + + + + + x + 613 + + + + + x + 614 + + + + + x + 615 + + + + + x + 616 + + + + + x + 617 + + + + + x + 618 + + + + + x + 619 + + + + + x + 620 + + + + + x + 621 + + + + + x + 622 + + + + + x + 623 + + + + + x + 624 + + + + + x + 625 + + + + + x + 626 + + + + + x + 627 + + + + + x + 628 + + + + + x + 629 + + + + + x + 630 + + + + + x + 631 + + + + + x + 632 + + + + + x + 633 + + + + + x + 634 + + + + + x + 635 + + + + + x + 636 + + + + + x + 637 + + + + + x + 638 + + + + + x + 639 + + + + + x + 640 + + + + + x + 641 + + + + + x + 642 + + + + + x + 643 + + + + + x + 644 + + + + + x + 645 + + + + + x + 646 + + + + + x + 647 + + + + + x + 648 + + + + + x + 649 + + + + + x + 650 + + + + + x + 651 + + + + + x + 652 + + + + + x + 653 + + + + + x + 654 + + + + + x + 655 + + + + + x + 656 + + + + + x + 657 + + + + + x + 658 + + + + + x + 659 + + + + + x + 660 + + + + + x + 661 + + + + + x + 662 + + + + + x + 663 + + + + + x + 664 + + + + + x + 665 + + + + + x + 666 + + + + + x + 667 + + + + + x + 668 + + + + + x + 669 + + + + + x + 670 + + + + + x + 671 + + + + + x + 672 + + + + + x + 673 + + + + + x + 674 + + + + + x + 675 + + + + + x + 676 + + + + + x + 677 + + + + + x + 678 + + + + + x + 679 + + + + + x + 680 + + + + + x + 681 + + + + + x + 682 + + + + + x + 683 + + + + + x + 684 + + + + + x + 685 + + + + + x + 686 + + + + + x + 687 + + + + + x + 688 + + + + + x + 689 + + + + + x + 690 + + + + + x + 691 + + + + + x + 692 + + + + + x + 693 + + + + + x + 694 + + + + + x + 695 + + + + + x + 696 + + + + + x + 697 + + + + + x + 698 + + + + + x + 699 + + + + + x + 700 + + + + + x + 701 + + + + + x + 702 + + + + + x + 703 + + + + + x + 704 + + + + + x + 705 + + + + + x + 706 + + + + + x + 707 + + + + + x + 708 + + + + + x + 709 + + + + + x + 710 + + + + + x + 711 + + + + + x + 712 + + + + + x + 713 + + + + + x + 714 + + + + + x + 715 + + + + + x + 716 + + + + + x + 717 + + + + + x + 718 + + + + + x + 719 + + + + + x + 720 + + + + + x + 721 + + + + + x + 722 + + + + + x + 723 + + + + + x + 724 + + + + + x + 725 + + + + + x + 726 + + + + + x + 727 + + + + + x + 728 + + + + + x + 729 + + + + + x + 730 + + + + + x + 731 + + + + + x + 732 + + + + + x + 733 + + + + + x + 734 + + + + + x + 735 + + + + + x + 736 + + + + + x + 737 + + + + + x + 738 + + + + + x + 739 + + + + + x + 740 + + + + + x + 741 + + + + + x + 742 + + + + + x + 743 + + + + + x + 744 + + + + + x + 745 + + + + + x + 746 + + + + + x + 747 + + + + + x + 748 + + + + + x + 749 + + + + + x + 750 + + + + + x + 751 + + + + + x + 752 + + + + + x + 753 + + + + + x + 754 + + + + + x + 755 + + + + + x + 756 + + + + + x + 757 + + + + + x + 758 + + + + + x + 759 + + + + + x + 760 + + + + + x + 761 + + + + + x + 762 + + + + + x + 763 + + + + + x + 764 + + + + + x + 765 + + + + + x + 766 + + + + + x + 767 + + + + + x + 768 + + + + + x + 769 + + + + + x + 770 + + + + + x + 771 + + + + + x + 772 + + + + + x + 773 + + + + + x + 774 + + + + + x + 775 + + + + + x + 776 + + + + + x + 777 + + + + + x + 778 + + + + + x + 779 + + + + + x + 780 + + + + + x + 781 + + + + + x + 782 + + + + + x + 783 + + + + + x + 784 + + + + + x + 785 + + + + + x + 786 + + + + + x + 787 + + + + + x + 788 + + + + + x + 789 + + + + + x + 790 + + + + + x + 791 + + + + + x + 792 + + + + + x + 793 + + + + + x + 794 + + + + + x + 795 + + + + + x + 796 + + + + + x + 797 + + + + + x + 798 + + + + + x + 799 + + + + + x + 800 + + + + + x + 801 + + + + + x + 802 + + + + + x + 803 + + + + + x + 804 + + + + + x + 805 + + + + + x + 806 + + + + + x + 807 + + + + + x + 808 + + + + + x + 809 + + + + + x + 810 + + + + + x + 811 + + + + + x + 812 + + + + + x + 813 + + + + + x + 814 + + + + + x + 815 + + + + + x + 816 + + + + + x + 817 + + + + + x + 818 + + + + + x + 819 + + + + + x + 820 + + + + + x + 821 + + + + + x + 822 + + + + + x + 823 + + + + + x + 824 + + + + + x + 825 + + + + + x + 826 + + + + + x + 827 + + + + + x + 828 + + + + + x + 829 + + + + + x + 830 + + + + + x + 831 + + + + + x + 832 + + + + + x + 833 + + + + + x + 834 + + + + + x + 835 + + + + + x + 836 + + + + + x + 837 + + + + + x + 838 + + + + + x + 839 + + + + + x + 840 + + + + + x + 841 + + + + + x + 842 + + + + + x + 843 + + + + + x + 844 + + + + + x + 845 + + + + + x + 846 + + + + + x + 847 + + + + + x + 848 + + + + + x + 849 + + + + + x + 850 + + + + + x + 851 + + + + + x + 852 + + + + + x + 853 + + + + + x + 854 + + + + + x + 855 + + + + + x + 856 + + + + + x + 857 + + + + + x + 858 + + + + + x + 859 + + + + + x + 860 + + + + + x + 861 + + + + + x + 862 + + + + + x + 863 + + + + + x + 864 + + + + + x + 865 + + + + + x + 866 + + + + + x + 867 + + + + + x + 868 + + + + + x + 869 + + + + + x + 870 + + + + + x + 871 + + + + + x + 872 + + + + + x + 873 + + + + + x + 874 + + + + + x + 875 + + + + + x + 876 + + + + + x + 877 + + + + + x + 878 + + + + + x + 879 + + + + + x + 880 + + + + + x + 881 + + + + + x + 882 + + + + + x + 883 + + + + + x + 884 + + + + + x + 885 + + + + + x + 886 + + + + + x + 887 + + + + + x + 888 + + + + + x + 889 + + + + + x + 890 + + + + + x + 891 + + + + + x + 892 + + + + + x + 893 + + + + + x + 894 + + + + + x + 895 + + + + + x + 896 + + + + + x + 897 + + + + + x + 898 + + + + + x + 899 + + + + + x + 900 + + + + + x + 901 + + + + + x + 902 + + + + + x + 903 + + + + + x + 904 + + + + + x + 905 + + + + + x + 906 + + + + + x + 907 + + + + + x + 908 + + + + + x + 909 + + + + + x + 910 + + + + + x + 911 + + + + + x + 912 + + + + + x + 913 + + + + + x + 914 + + + + + x + 915 + + + + + x + 916 + + + + + x + 917 + + + + + x + 918 + + + + + x + 919 + + + + + x + 920 + + + + + x + 921 + + + + + x + 922 + + + + + x + 923 + + + + + x + 924 + + + + + x + 925 + + + + + x + 926 + + + + + x + 927 + + + + + x + 928 + + + + + x + 929 + + + + + x + 930 + + + + + x + 931 + + + + + x + 932 + + + + + x + 933 + + + + + x + 934 + + + + + x + 935 + + + + + x + 936 + + + + + x + 937 + + + + + x + 938 + + + + + x + 939 + + + + + x + 940 + + + + + x + 941 + + + + + x + 942 + + + + + x + 943 + + + + + x + 944 + + + + + x + 945 + + + + + x + 946 + + + + + x + 947 + + + + + x + 948 + + + + + x + 949 + + + + + x + 950 + + + + + x + 951 + + + + + x + 952 + + + + + x + 953 + + + + + x + 954 + + + + + x + 955 + + + + + x + 956 + + + + + x + 957 + + + + + x + 958 + + + + + x + 959 + + + + + x + 960 + + + + + x + 961 + + + + + x + 962 + + + + + x + 963 + + + + + x + 964 + + + + + x + 965 + + + + + x + 966 + + + + + x + 967 + + + + + x + 968 + + + + + x + 969 + + + + + x + 970 + + + + + x + 971 + + + + + x + 972 + + + + + x + 973 + + + + + x + 974 + + + + + x + 975 + + + + + x + 976 + + + + + x + 977 + + + + + x + 978 + + + + + x + 979 + + + + + x + 980 + + + + + x + 981 + + + + + x + 982 + + + + + x + 983 + + + + + x + 984 + + + + + x + 985 + + + + + x + 986 + + + + + x + 987 + + + + + x + 988 + + + + + x + 989 + + + + + x + 990 + + + + + x + 991 + + + + + x + 992 + + + + + x + 993 + + + + + x + 994 + + + + + x + 995 + + + + + x + 996 + + + + + x + 997 + + + + + x + 998 + + + + + x + 999 + + + + + x + 1000 + + + + + x + 1001 + + + + + x + 1002 + + + + + x + 1003 + + + + + x + 1004 + + + + + x + 1005 + + + + + x + 1006 + + + + + x + 1007 + + + + + x + 1008 + + + + + x + 1009 + + + + + x + 1010 + + + + + x + 1011 + + + + + x + 1012 + + + + + x + 1013 + + + + + x + 1014 + + + + + x + 1015 + + + + + x + 1016 + + + + + x + 1017 + + + + + x + 1018 + + + + + x + 1019 + + + + + x + 1020 + + + + + x + 1021 + + + + + x + 1022 + + + + + x + 1023 + + + + + x + 1024 + + + + + x + 1025 + + + + + x + 1026 + + + + + x + 1027 + + + + + x + 1028 + + + + + x + 1029 + + + + + x + 1030 + + + + + x + 1031 + + + + + x + 1032 + + + + + x + 1033 + + + + + x + 1034 + + + + + x + 1035 + + + + + x + 1036 + + + + + x + 1037 + + + + + x + 1038 + + + + + x + 1039 + + + + + x + 1040 + + + + + x + 1041 + + + + + x + 1042 + + + + + x + 1043 + + + + + x + 1044 + + + + + x + 1045 + + + + + x + 1046 + + + + + x + 1047 + + + + + x + 1048 + + + + + x + 1049 + + + + + x + 1050 + + + + + x + 1051 + + + + + x + 1052 + + + + + x + 1053 + + + + + x + 1054 + + + + + x + 1055 + + + + + x + 1056 + + + + + x + 1057 + + + + + x + 1058 + + + + + x + 1059 + + + + + x + 1060 + + + + + x + 1061 + + + + + x + 1062 + + + + + x + 1063 + + + + + x + 1064 + + + + + x + 1065 + + + + + x + 1066 + + + + + x + 1067 + + + + + x + 1068 + + + + + x + 1069 + + + + + x + 1070 + + + + + x + 1071 + + + + + x + 1072 + + + + + x + 1073 + + + + + x + 1074 + + + + + x + 1075 + + + + + x + 1076 + + + + + x + 1077 + + + + + x + 1078 + + + + + x + 1079 + + + + + x + 1080 + + + + + x + 1081 + + + + + x + 1082 + + + + + x + 1083 + + + + + x + 1084 + + + + + x + 1085 + + + + + x + 1086 + + + + + x + 1087 + + + + + x + 1088 + + + + + x + 1089 + + + + + x + 1090 + + + + + x + 1091 + + + + + x + 1092 + + + + + x + 1093 + + + + + x + 1094 + + + + + x + 1095 + + + + + x + 1096 + + + + + x + 1097 + + + + + x + 1098 + + + + + x + 1099 + + + + + x + 1100 + + + + + x + 1101 + + + + + x + 1102 + + + + + x + 1103 + + + + + x + 1104 + + + + + x + 1105 + + + + + x + 1106 + + + + + x + 1107 + + + + + x + 1108 + + + + + x + 1109 + + + + + x + 1110 + + + + + x + 1111 + + + + + x + 1112 + + + + + x + 1113 + + + + + x + 1114 + + + + + x + 1115 + + + + + x + 1116 + + + + + x + 1117 + + + + + x + 1118 + + + + + x + 1119 + + + + + x + 1120 + + + + + x + 1121 + + + + + x + 1122 + + + + + x + 1123 + + + + + x + 1124 + + + + + x + 1125 + + + + + x + 1126 + + + + + x + 1127 + + + + + x + 1128 + + + + + x + 1129 + + + + + x + 1130 + + + + + x + 1131 + + + + + x + 1132 + + + + + x + 1133 + + + + + x + 1134 + + + + + x + 1135 + + + + + x + 1136 + + + + + x + 1137 + + + + + x + 1138 + + + + + x + 1139 + + + + + x + 1140 + + + + + x + 1141 + + + + + x + 1142 + + + + + x + 1143 + + + + + x + 1144 + + + + + x + 1145 + + + + + x + 1146 + + + + + x + 1147 + + + + + x + 1148 + + + + + x + 1149 + + + + + x + 1150 + + + + + x + 1151 + + + + + x + 1152 + + + + + x + 1153 + + + + + x + 1154 + + + + + x + 1155 + + + + + x + 1156 + + + + + x + 1157 + + + + + x + 1158 + + + + + x + 1159 + + + + + x + 1160 + + + + + x + 1161 + + + + + x + 1162 + + + + + x + 1163 + + + + + x + 1164 + + + + + x + 1165 + + + + + x + 1166 + + + + + x + 1167 + + + + + x + 1168 + + + + + x + 1169 + + + + + x + 1170 + + + + + x + 1171 + + + + + x + 1172 + + + + + x + 1173 + + + + + x + 1174 + + + + + x + 1175 + + + + + x + 1176 + + + + + x + 1177 + + + + + x + 1178 + + + + + x + 1179 + + + + + x + 1180 + + + + + x + 1181 + + + + + x + 1182 + + + + + x + 1183 + + + + + x + 1184 + + + + + x + 1185 + + + + + x + 1186 + + + + + x + 1187 + + + + + x + 1188 + + + + + x + 1189 + + + + + x + 1190 + + + + + x + 1191 + + + + + x + 1192 + + + + + x + 1193 + + + + + x + 1194 + + + + + x + 1195 + + + + + x + 1196 + + + + + x + 1197 + + + + + x + 1198 + + + + + x + 1199 + + + + + x + 1200 + + + + + x + 1201 + + + + + x + 1202 + + + + + x + 1203 + + + + + x + 1204 + + + + + x + 1205 + + + + + x + 1206 + + + + + x + 1207 + + + + + x + 1208 + + + + + x + 1209 + + + + + x + 1210 + + + + + x + 1211 + + + + + x + 1212 + + + + + x + 1213 + + + + + x + 1214 + + + + + x + 1215 + + + + + x + 1216 + + + + + x + 1217 + + + + + x + 1218 + + + + + x + 1219 + + + + + x + 1220 + + + + + x + 1221 + + + + + x + 1222 + + + + + x + 1223 + + + + + x + 1224 + + + + + x + 1225 + + + + + x + 1226 + + + + + x + 1227 + + + + + x + 1228 + + + + + x + 1229 + + + + + x + 1230 + + + + + x + 1231 + + + + + x + 1232 + + + + + x + 1233 + + + + + x + 1234 + + + + + x + 1235 + + + + + x + 1236 + + + + + x + 1237 + + + + + x + 1238 + + + + + x + 1239 + + + + + x + 1240 + + + + + x + 1241 + + + + + x + 1242 + + + + + x + 1243 + + + + + x + 1244 + + + + + x + 1245 + + + + + x + 1246 + + + + + x + 1247 + + + + + x + 1248 + + + + + x + 1249 + + + + + x + 1250 + + + + + x + 1251 + + + + + x + 1252 + + + + + x + 1253 + + + + + x + 1254 + + + + + x + 1255 + + + + + x + 1256 + + + + + x + 1257 + + + + + x + 1258 + + + + + x + 1259 + + + + + x + 1260 + + + + + x + 1261 + + + + + x + 1262 + + + + + x + 1263 + + + + + x + 1264 + + + + + x + 1265 + + + + + x + 1266 + + + + + x + 1267 + + + + + x + 1268 + + + + + x + 1269 + + + + + x + 1270 + + + + + x + 1271 + + + + + x + 1272 + + + + + x + 1273 + + + + + x + 1274 + + + + + x + 1275 + + + + + x + 1276 + + + + + x + 1277 + + + + + x + 1278 + + + + + x + 1279 + + + + + x + 1280 + + + + + x + 1281 + + + + + x + 1282 + + + + + x + 1283 + + + + + x + 1284 + + + + + x + 1285 + + + + + x + 1286 + + + + + x + 1287 + + + + + x + 1288 + + + + + x + 1289 + + + + + x + 1290 + + + + + x + 1291 + + + + + x + 1292 + + + + + x + 1293 + + + + + x + 1294 + + + + + x + 1295 + + + + + x + 1296 + + + + + x + 1297 + + + + + x + 1298 + + + + + x + 1299 + + + + + x + 1300 + + + + + x + 1301 + + + + + x + 1302 + + + + + x + 1303 + + + + + x + 1304 + + + + + x + 1305 + + + + + x + 1306 + + + + + x + 1307 + + + + + x + 1308 + + + + + x + 1309 + + + + + x + 1310 + + + + + x + 1311 + + + + + x + 1312 + + + + + x + 1313 + + + + + x + 1314 + + + + + x + 1315 + + + + + x + 1316 + + + + + x + 1317 + + + + + x + 1318 + + + + + x + 1319 + + + + + x + 1320 + + + + + x + 1321 + + + + + x + 1322 + + + + + x + 1323 + + + + + x + 1324 + + + + + x + 1325 + + + + + x + 1326 + + + + + x + 1327 + + + + + x + 1328 + + + + + x + 1329 + + + + + x + 1330 + + + + + x + 1331 + + + + + x + 1332 + + + + + x + 1333 + + + + + x + 1334 + + + + + x + 1335 + + + + + x + 1336 + + + + + x + 1337 + + + + + x + 1338 + + + + + x + 1339 + + + + + x + 1340 + + + + + x + 1341 + + + + + x + 1342 + + + + + x + 1343 + + + + + x + 1344 + + + + + x + 1345 + + + + + x + 1346 + + + + + x + 1347 + + + + + x + 1348 + + + + + x + 1349 + + + + + x + 1350 + + + + + x + 1351 + + + + + x + 1352 + + + + + x + 1353 + + + + + x + 1354 + + + + + x + 1355 + + + + + x + 1356 + + + + + x + 1357 + + + + + x + 1358 + + + + + x + 1359 + + + + + x + 1360 + + + + + x + 1361 + + + + + x + 1362 + + + + + x + 1363 + + + + + x + 1364 + + + + + x + 1365 + + + + + x + 1366 + + + + + x + 1367 + + + + + x + 1368 + + + + + x + 1369 + + + + + x + 1370 + + + + + x + 1371 + + + + + x + 1372 + + + + + x + 1373 + + + + + x + 1374 + + + + + x + 1375 + + + + + x + 1376 + + + + + x + 1377 + + + + + x + 1378 + + + + + x + 1379 + + + + + x + 1380 + + + + + x + 1381 + + + + + x + 1382 + + + + + x + 1383 + + + + + x + 1384 + + + + + x + 1385 + + + + + x + 1386 + + + + + x + 1387 + + + + + x + 1388 + + + + + x + 1389 + + + + + x + 1390 + + + + + x + 1391 + + + + + x + 1392 + + + + + x + 1393 + + + + + x + 1394 + + + + + x + 1395 + + + + + x + 1396 + + + + + x + 1397 + + + + + x + 1398 + + + + + x + 1399 + + + + + x + 1400 + + + + + x + 1401 + + + + + x + 1402 + + + + + x + 1403 + + + + + x + 1404 + + + + + x + 1405 + + + + + x + 1406 + + + + + x + 1407 + + + + + x + 1408 + + + + + x + 1409 + + + + + x + 1410 + + + + + x + 1411 + + + + + x + 1412 + + + + + x + 1413 + + + + + x + 1414 + + + + + x + 1415 + + + + + x + 1416 + + + + + x + 1417 + + + + + x + 1418 + + + + + x + 1419 + + + + + x + 1420 + + + + + x + 1421 + + + + + x + 1422 + + + + + x + 1423 + + + + + x + 1424 + + + + + x + 1425 + + + + + x + 1426 + + + + + x + 1427 + + + + + x + 1428 + + + + + x + 1429 + + + + + x + 1430 + + + + + x + 1431 + + + + + x + 1432 + + + + + x + 1433 + + + + + x + 1434 + + + + + x + 1435 + + + + + x + 1436 + + + + + x + 1437 + + + + + x + 1438 + + + + + x + 1439 + + + + + x + 1440 + + + + + x + 1441 + + + + + x + 1442 + + + + + x + 1443 + + + + + x + 1444 + + + + + x + 1445 + + + + + x + 1446 + + + + + x + 1447 + + + + + x + 1448 + + + + + x + 1449 + + + + + x + 1450 + + + + + x + 1451 + + + + + x + 1452 + + + + + x + 1453 + + + + + x + 1454 + + + + + x + 1455 + + + + + x + 1456 + + + + + x + 1457 + + + + + x + 1458 + + + + + x + 1459 + + + + + x + 1460 + + + + + x + 1461 + + + + + x + 1462 + + + + + x + 1463 + + + + + x + 1464 + + + + + x + 1465 + + + + + x + 1466 + + + + + x + 1467 + + + + + x + 1468 + + + + + x + 1469 + + + + + x + 1470 + + + + + x + 1471 + + + + + x + 1472 + + + + + x + 1473 + + + + + x + 1474 + + + + + x + 1475 + + + + + x + 1476 + + + + + x + 1477 + + + + + x + 1478 + + + + + x + 1479 + + + + + x + 1480 + + + + + x + 1481 + + + + + x + 1482 + + + + + x + 1483 + + + + + x + 1484 + + + + + x + 1485 + + + + + x + 1486 + + + + + x + 1487 + + + + + x + 1488 + + + + + x + 1489 + + + + + x + 1490 + + + + + x + 1491 + + + + + x + 1492 + + + + + x + 1493 + + + + + x + 1494 + + + + + x + 1495 + + + + + x + 1496 + + + + + x + 1497 + + + + + x + 1498 + + + + + x + 1499 + + + + + x + 1500 + + + + + x + 1501 + + + + + x + 1502 + + + + + x + 1503 + + + + + x + 1504 + + + + + x + 1505 + + + + + x + 1506 + + + + + x + 1507 + + + + + x + 1508 + + + + + x + 1509 + + + + + x + 1510 + + + + + x + 1511 + + + + + x + 1512 + + + + + x + 1513 + + + + + x + 1514 + + + + + x + 1515 + + + + + x + 1516 + + + + + x + 1517 + + + + + x + 1518 + + + + + x + 1519 + + + + + x + 1520 + + + + + x + 1521 + + + + + x + 1522 + + + + + x + 1523 + + + + + x + 1524 + + + + + x + 1525 + + + + + x + 1526 + + + + + x + 1527 + + + + + x + 1528 + + + + + x + 1529 + + + + + x + 1530 + + + + + x + 1531 + + + + + x + 1532 + + + + + x + 1533 + + + + + x + 1534 + + + + + x + 1535 + + + + + x + 1536 + + + + + x + 1537 + + + + + x + 1538 + + + + + x + 1539 + + + + + x + 1540 + + + + + x + 1541 + + + + + x + 1542 + + + + + x + 1543 + + + + + x + 1544 + + + + + x + 1545 + + + + + x + 1546 + + + + + x + 1547 + + + + + x + 1548 + + + + + x + 1549 + + + + + x + 1550 + + + + + x + 1551 + + + + + x + 1552 + + + + + x + 1553 + + + + + x + 1554 + + + + + x + 1555 + + + + + x + 1556 + + + + + x + 1557 + + + + + x + 1558 + + + + + x + 1559 + + + + + x + 1560 + + + + + x + 1561 + + + + + x + 1562 + + + + + x + 1563 + + + + + x + 1564 + + + + + x + 1565 + + + + + x + 1566 + + + + + x + 1567 + + + + + x + 1568 + + + + + x + 1569 + + + + + x + 1570 + + + + + x + 1571 + + + + + x + 1572 + + + + + x + 1573 + + + + + x + 1574 + + + + + x + 1575 + + + + + x + 1576 + + + + + x + 1577 + + + + + x + 1578 + + + + + x + 1579 + + + + + x + 1580 + + + + + x + 1581 + + + + + x + 1582 + + + + + x + 1583 + + + + + x + 1584 + + + + + x + 1585 + + + + + x + 1586 + + + + + x + 1587 + + + + + x + 1588 + + + + + x + 1589 + + + + + x + 1590 + + + + + x + 1591 + + + + + x + 1592 + + + + + x + 1593 + + + + + x + 1594 + + + + + x + 1595 + + + + + x + 1596 + + + + + x + 1597 + + + + + x + 1598 + + + + + x + 1599 + + + + + x + 1600 + + + + + x + 1601 + + + + + x + 1602 + + + + + x + 1603 + + + + + x + 1604 + + + + + x + 1605 + + + + + x + 1606 + + + + + x + 1607 + + + + + x + 1608 + + + + + x + 1609 + + + + + x + 1610 + + + + + x + 1611 + + + + + x + 1612 + + + + + x + 1613 + + + + + x + 1614 + + + + + x + 1615 + + + + + x + 1616 + + + + + x + 1617 + + + + + x + 1618 + + + + + x + 1619 + + + + + x + 1620 + + + + + x + 1621 + + + + + x + 1622 + + + + + x + 1623 + + + + + x + 1624 + + + + + x + 1625 + + + + + x + 1626 + + + + + x + 1627 + + + + + x + 1628 + + + + + x + 1629 + + + + + x + 1630 + + + + + x + 1631 + + + + + x + 1632 + + + + + x + 1633 + + + + + x + 1634 + + + + + x + 1635 + + + + + x + 1636 + + + + + x + 1637 + + + + + x + 1638 + + + + + x + 1639 + + + + + x + 1640 + + + + + x + 1641 + + + + + x + 1642 + + + + + x + 1643 + + + + + x + 1644 + + + + + x + 1645 + + + + + x + 1646 + + + + + x + 1647 + + + + + x + 1648 + + + + + x + 1649 + + + + + x + 1650 + + + + + x + 1651 + + + + + x + 1652 + + + + + x + 1653 + + + + + x + 1654 + + + + + x + 1655 + + + + + x + 1656 + + + + + x + 1657 + + + + + x + 1658 + + + + + x + 1659 + + + + + x + 1660 + + + + + x + 1661 + + + + + x + 1662 + + + + + x + 1663 + + + + + x + 1664 + + + + + x + 1665 + + + + + x + 1666 + + + + + x + 1667 + + + + + x + 1668 + + + + + x + 1669 + + + + + x + 1670 + + + + + x + 1671 + + + + + x + 1672 + + + + + x + 1673 + + + + + x + 1674 + + + + + x + 1675 + + + + + x + 1676 + + + + + x + 1677 + + + + + x + 1678 + + + + + x + 1679 + + + + + x + 1680 + + + + + x + 1681 + + + + + x + 1682 + + + + + x + 1683 + + + + + x + 1684 + + + + + x + 1685 + + + + + x + 1686 + + + + + x + 1687 + + + + + x + 1688 + + + + + x + 1689 + + + + + x + 1690 + + + + + x + 1691 + + + + + x + 1692 + + + + + x + 1693 + + + + + x + 1694 + + + + + x + 1695 + + + + + x + 1696 + + + + + x + 1697 + + + + + x + 1698 + + + + + x + 1699 + + + + + x + 1700 + + + + + x + 1701 + + + + + x + 1702 + + + + + x + 1703 + + + + + x + 1704 + + + + + x + 1705 + + + + + x + 1706 + + + + + x + 1707 + + + + + x + 1708 + + + + + x + 1709 + + + + + x + 1710 + + + + + x + 1711 + + + + + x + 1712 + + + + + x + 1713 + + + + + x + 1714 + + + + + x + 1715 + + + + + x + 1716 + + + + + x + 1717 + + + + + x + 1718 + + + + + x + 1719 + + + + + x + 1720 + + + + + x + 1721 + + + + + x + 1722 + + + + + x + 1723 + + + + + x + 1724 + + + + + x + 1725 + + + + + x + 1726 + + + + + x + 1727 + + + + + x + 1728 + + + + + x + 1729 + + + + + x + 1730 + + + + + x + 1731 + + + + + x + 1732 + + + + + x + 1733 + + + + + x + 1734 + + + + + x + 1735 + + + + + x + 1736 + + + + + x + 1737 + + + + + x + 1738 + + + + + x + 1739 + + + + + x + 1740 + + + + + x + 1741 + + + + + x + 1742 + + + + + x + 1743 + + + + + x + 1744 + + + + + x + 1745 + + + + + x + 1746 + + + + + x + 1747 + + + + + x + 1748 + + + + + x + 1749 + + + + + x + 1750 + + + + + x + 1751 + + + + + x + 1752 + + + + + x + 1753 + + + + + x + 1754 + + + + + x + 1755 + + + + + x + 1756 + + + + + x + 1757 + + + + + x + 1758 + + + + + x + 1759 + + + + + x + 1760 + + + + + x + 1761 + + + + + x + 1762 + + + + + x + 1763 + + + + + x + 1764 + + + + + x + 1765 + + + + + x + 1766 + + + + + x + 1767 + + + + + x + 1768 + + + + + x + 1769 + + + + + x + 1770 + + + + + x + 1771 + + + + + x + 1772 + + + + + x + 1773 + + + + + x + 1774 + + + + + x + 1775 + + + + + x + 1776 + + + + + x + 1777 + + + + + x + 1778 + + + + + x + 1779 + + + + + x + 1780 + + + + + x + 1781 + + + + + x + 1782 + + + + + x + 1783 + + + + + x + 1784 + + + + + x + 1785 + + + + + x + 1786 + + + + + x + 1787 + + + + + x + 1788 + + + + + x + 1789 + + + + + x + 1790 + + + + + x + 1791 + + + + + x + 1792 + + + + + x + 1793 + + + + + x + 1794 + + + + + x + 1795 + + + + + x + 1796 + + + + + x + 1797 + + + + + x + 1798 + + + + + x + 1799 + + + + + x + 1800 + + + + + x + 1801 + + + + + x + 1802 + + + + + x + 1803 + + + + + x + 1804 + + + + + x + 1805 + + + + + x + 1806 + + + + + x + 1807 + + + + + x + 1808 + + + + + x + 1809 + + + + + x + 1810 + + + + + x + 1811 + + + + + x + 1812 + + + + + x + 1813 + + + + + x + 1814 + + + + + x + 1815 + + + + + x + 1816 + + + + + x + 1817 + + + + + x + 1818 + + + + + x + 1819 + + + + + x + 1820 + + + + + x + 1821 + + + + + x + 1822 + + + + + x + 1823 + + + + + x + 1824 + + + + + x + 1825 + + + + + x + 1826 + + + + + x + 1827 + + + + + x + 1828 + + + + + x + 1829 + + + + + x + 1830 + + + + + x + 1831 + + + + + x + 1832 + + + + + x + 1833 + + + + + x + 1834 + + + + + x + 1835 + + + + + x + 1836 + + + + + x + 1837 + + + + + x + 1838 + + + + + x + 1839 + + + + + x + 1840 + + + + + x + 1841 + + + + + x + 1842 + + + + + x + 1843 + + + + + x + 1844 + + + + + x + 1845 + + + + + x + 1846 + + + + + x + 1847 + + + + + x + 1848 + + + + + x + 1849 + + + + + x + 1850 + + + + + x + 1851 + + + + + x + 1852 + + + + + x + 1853 + + + + + x + 1854 + + + + + x + 1855 + + + + + x + 1856 + + + + + x + 1857 + + + + + x + 1858 + + + + + x + 1859 + + + + + x + 1860 + + + + + x + 1861 + + + + + x + 1862 + + + + + x + 1863 + + + + + x + 1864 + + + + + x + 1865 + + + + + x + 1866 + + + + + x + 1867 + + + + + x + 1868 + + + + + x + 1869 + + + + + x + 1870 + + + + + x + 1871 + + + + + x + 1872 + + + + + x + 1873 + + + + + x + 1874 + + + + + x + 1875 + + + + + x + 1876 + + + + + x + 1877 + + + + + x + 1878 + + + + + x + 1879 + + + + + x + 1880 + + + + + x + 1881 + + + + + x + 1882 + + + + + x + 1883 + + + + + x + 1884 + + + + + x + 1885 + + + + + x + 1886 + + + + + x + 1887 + + + + + x + 1888 + + + + + x + 1889 + + + + + x + 1890 + + + + + x + 1891 + + + + + x + 1892 + + + + + x + 1893 + + + + + x + 1894 + + + + + x + 1895 + + + + + x + 1896 + + + + + x + 1897 + + + + + x + 1898 + + + + + x + 1899 + + + + + x + 1900 + + + + + x + 1901 + + + + + x + 1902 + + + + + x + 1903 + + + + + x + 1904 + + + + + x + 1905 + + + + + x + 1906 + + + + + x + 1907 + + + + + x + 1908 + + + + + x + 1909 + + + + + x + 1910 + + + + + x + 1911 + + + + + x + 1912 + + + + + x + 1913 + + + + + x + 1914 + + + + + x + 1915 + + + + + x + 1916 + + + + + x + 1917 + + + + + x + 1918 + + + + + x + 1919 + + + + + x + 1920 + + + + + x + 1921 + + + + + x + 1922 + + + + + x + 1923 + + + + + x + 1924 + + + + + x + 1925 + + + + + x + 1926 + + + + + x + 1927 + + + + + x + 1928 + + + + + x + 1929 + + + + + x + 1930 + + + + + x + 1931 + + + + + x + 1932 + + + + + x + 1933 + + + + + x + 1934 + + + + + x + 1935 + + + + + x + 1936 + + + + + x + 1937 + + + + + x + 1938 + + + + + x + 1939 + + + + + x + 1940 + + + + + x + 1941 + + + + + x + 1942 + + + + + x + 1943 + + + + + x + 1944 + + + + + x + 1945 + + + + + x + 1946 + + + + + x + 1947 + + + + + x + 1948 + + + + + x + 1949 + + + + + x + 1950 + + + + + x + 1951 + + + + + x + 1952 + + + + + x + 1953 + + + + + x + 1954 + + + + + x + 1955 + + + + + x + 1956 + + + + + x + 1957 + + + + + x + 1958 + + + + + x + 1959 + + + + + x + 1960 + + + + + x + 1961 + + + + + x + 1962 + + + + + x + 1963 + + + + + x + 1964 + + + + + x + 1965 + + + + + x + 1966 + + + + + x + 1967 + + + + + x + 1968 + + + + + x + 1969 + + + + + x + 1970 + + + + + x + 1971 + + + + + x + 1972 + + + + + x + 1973 + + + + + x + 1974 + + + + + x + 1975 + + + + + x + 1976 + + + + + x + 1977 + + + + + x + 1978 + + + + + x + 1979 + + + + + x + 1980 + + + + + x + 1981 + + + + + x + 1982 + + + + + x + 1983 + + + + + x + 1984 + + + + + x + 1985 + + + + + x + 1986 + + + + + x + 1987 + + + + + x + 1988 + + + + + x + 1989 + + + + + x + 1990 + + + + + x + 1991 + + + + + x + 1992 + + + + + x + 1993 + + + + + x + 1994 + + + + + x + 1995 + + + + + x + 1996 + + + + + x + 1997 + + + + + x + 1998 + + + + + x + 1999 + + + + + x + 2000 + + + + + x + 2001 + + + + + x + 2002 + + + + + x + 2003 + + + + + x + 2004 + + + + + x + 2005 + + + + + x + 2006 + + + + + x + 2007 + + + + + x + 2008 + + + + + x + 2009 + + + + + x + 2010 + + + + + x + 2011 + + + + + x + 2012 + + + + + x + 2013 + + + + + x + 2014 + + + + + x + 2015 + + + + + x + 2016 + + + + + x + 2017 + + + + + x + 2018 + + + + + x + 2019 + + + + + x + 2020 + + + + + x + 2021 + + + + + x + 2022 + + + + + x + 2023 + + + + + x + 2024 + + + + + x + 2025 + + + + + x + 2026 + + + + + x + 2027 + + + + + x + 2028 + + + + + x + 2029 + + + + + x + 2030 + + + + + x + 2031 + + + + + x + 2032 + + + + + x + 2033 + + + + + x + 2034 + + + + + x + 2035 + + + + + x + 2036 + + + + + x + 2037 + + + + + x + 2038 + + + + + x + 2039 + + + + + x + 2040 + + + + + x + 2041 + + + + + x + 2042 + + + + + x + 2043 + + + + + x + 2044 + + + + + x + 2045 + + + + + x + 2046 + + + + + x + 2047 + + + + + x + 2048 + + + + + x + 2049 + + + + + x + 2050 + + + + + x + 2051 + + + + + x + 2052 + + + + + x + 2053 + + + + + x + 2054 + + + + + x + 2055 + + + + + x + 2056 + + + + + x + 2057 + + + + + x + 2058 + + + + + x + 2059 + + + + + x + 2060 + + + + + x + 2061 + + + + + x + 2062 + + + + + x + 2063 + + + + + x + 2064 + + + + + x + 2065 + + + + + x + 2066 + + + + + x + 2067 + + + + + x + 2068 + + + + + x + 2069 + + + + + x + 2070 + + + + + x + 2071 + + + + + x + 2072 + + + + + x + 2073 + + + + + x + 2074 + + + + + x + 2075 + + + + + x + 2076 + + + + + x + 2077 + + + + + x + 2078 + + + + + x + 2079 + + + + + x + 2080 + + + + + x + 2081 + + + + + x + 2082 + + + + + x + 2083 + + + + + x + 2084 + + + + + x + 2085 + + + + + x + 2086 + + + + + x + 2087 + + + + + x + 2088 + + + + + x + 2089 + + + + + x + 2090 + + + + + x + 2091 + + + + + x + 2092 + + + + + x + 2093 + + + + + x + 2094 + + + + + x + 2095 + + + + + x + 2096 + + + + + x + 2097 + + + + + x + 2098 + + + + + x + 2099 + + + + + x + 2100 + + + + + x + 2101 + + + + + x + 2102 + + + + + x + 2103 + + + + + x + 2104 + + + + + x + 2105 + + + + + x + 2106 + + + + + x + 2107 + + + + + x + 2108 + + + + + x + 2109 + + + + + x + 2110 + + + + + x + 2111 + + + + + x + 2112 + + + + + x + 2113 + + + + + x + 2114 + + + + + x + 2115 + + + + + x + 2116 + + + + + x + 2117 + + + + + x + 2118 + + + + + x + 2119 + + + + + x + 2120 + + + + + x + 2121 + + + + + x + 2122 + + + + + x + 2123 + + + + + x + 2124 + + + + + x + 2125 + + + + + x + 2126 + + + + + x + 2127 + + + + + x + 2128 + + + + + x + 2129 + + + + + x + 2130 + + + + + x + 2131 + + + + + x + 2132 + + + + + x + 2133 + + + + + x + 2134 + + + + + x + 2135 + + + + + x + 2136 + + + + + x + 2137 + + + + + x + 2138 + + + + + x + 2139 + + + + + x + 2140 + + + + + x + 2141 + + + + + x + 2142 + + + + + x + 2143 + + + + + x + 2144 + + + + + x + 2145 + + + + + x + 2146 + + + + + x + 2147 + + + + + x + 2148 + + + + + x + 2149 + + + + + x + 2150 + + + + + x + 2151 + + + + + x + 2152 + + + + + x + 2153 + + + + + x + 2154 + + + + + x + 2155 + + + + + x + 2156 + + + + + x + 2157 + + + + + x + 2158 + + + + + x + 2159 + + + + + x + 2160 + + + + + x + 2161 + + + + + x + 2162 + + + + + x + 2163 + + + + + x + 2164 + + + + + x + 2165 + + + + + x + 2166 + + + + + x + 2167 + + + + + x + 2168 + + + + + x + 2169 + + + + + x + 2170 + + + + + x + 2171 + + + + + x + 2172 + + + + + x + 2173 + + + + + x + 2174 + + + + + x + 2175 + + + + + x + 2176 + + + + + x + 2177 + + + + + x + 2178 + + + + + x + 2179 + + + + + x + 2180 + + + + + x + 2181 + + + + + x + 2182 + + + + + x + 2183 + + + + + x + 2184 + + + + + x + 2185 + + + + + x + 2186 + + + + + x + 2187 + + + + + x + 2188 + + + + + x + 2189 + + + + + x + 2190 + + + + + x + 2191 + + + + + x + 2192 + + + + + x + 2193 + + + + + x + 2194 + + + + + x + 2195 + + + + + x + 2196 + + + + + x + 2197 + + + + + x + 2198 + + + + + x + 2199 + + + + + x + 2200 + + + + + x + 2201 + + + + + x + 2202 + + + + + x + 2203 + + + + + x + 2204 + + + + + x + 2205 + + + + + x + 2206 + + + + + x + 2207 + + + + + x + 2208 + + + + + x + 2209 + + + + + x + 2210 + + + + + x + 2211 + + + + + x + 2212 + + + + + x + 2213 + + + + + x + 2214 + + + + + x + 2215 + + + + + x + 2216 + + + + + x + 2217 + + + + + x + 2218 + + + + + x + 2219 + + + + + x + 2220 + + + + + x + 2221 + + + + + x + 2222 + + + + + x + 2223 + + + + + x + 2224 + + + + + x + 2225 + + + + + x + 2226 + + + + + x + 2227 + + + + + x + 2228 + + + + + x + 2229 + + + + + x + 2230 + + + + + x + 2231 + + + + + x + 2232 + + + + + x + 2233 + + + + + x + 2234 + + + + + x + 2235 + + + + + x + 2236 + + + + + x + 2237 + + + + + x + 2238 + + + + + x + 2239 + + + + + x + 2240 + + + + + x + 2241 + + + + + x + 2242 + + + + + x + 2243 + + + + + x + 2244 + + + + + x + 2245 + + + + + x + 2246 + + + + + x + 2247 + + + + + x + 2248 + + + + + x + 2249 + + + + + x + 2250 + + + + + x + 2251 + + + + + x + 2252 + + + + + x + 2253 + + + + + x + 2254 + + + + + x + 2255 + + + + + x + 2256 + + + + + x + 2257 + + + + + x + 2258 + + + + + x + 2259 + + + + + x + 2260 + + + + + x + 2261 + + + + + x + 2262 + + + + + x + 2263 + + + + + x + 2264 + + + + + x + 2265 + + + + + x + 2266 + + + + + x + 2267 + + + + + x + 2268 + + + + + x + 2269 + + + + + x + 2270 + + + + + x + 2271 + + + + + x + 2272 + + + + + x + 2273 + + + + + x + 2274 + + + + + x + 2275 + + + + + x + 2276 + + + + + x + 2277 + + + + + x + 2278 + + + + + x + 2279 + + + + + x + 2280 + + + + + x + 2281 + + + + + x + 2282 + + + + + x + 2283 + + + + + x + 2284 + + + + + x + 2285 + + + + + x + 2286 + + + + + x + 2287 + + + + + x + 2288 + + + + + x + 2289 + + + + + x + 2290 + + + + + x + 2291 + + + + + x + 2292 + + + + + x + 2293 + + + + + x + 2294 + + + + + x + 2295 + + + + + x + 2296 + + + + + x + 2297 + + + + + x + 2298 + + + + + x + 2299 + + + + + x + 2300 + + + + + x + 2301 + + + + + x + 2302 + + + + + x + 2303 + + + + + x + 2304 + + + + + x + 2305 + + + + + x + 2306 + + + + + x + 2307 + + + + + x + 2308 + + + + + x + 2309 + + + + + x + 2310 + + + + + x + 2311 + + + + + x + 2312 + + + + + x + 2313 + + + + + x + 2314 + + + + + x + 2315 + + + + + x + 2316 + + + + + x + 2317 + + + + + x + 2318 + + + + + x + 2319 + + + + + x + 2320 + + + + + x + 2321 + + + + + x + 2322 + + + + + x + 2323 + + + + + x + 2324 + + + + + x + 2325 + + + + + x + 2326 + + + + + x + 2327 + + + + + x + 2328 + + + + + x + 2329 + + + + + x + 2330 + + + + + x + 2331 + + + + + x + 2332 + + + + + x + 2333 + + + + + x + 2334 + + + + + x + 2335 + + + + + x + 2336 + + + + + x + 2337 + + + + + x + 2338 + + + + + x + 2339 + + + + + x + 2340 + + + + + x + 2341 + + + + + x + 2342 + + + + + x + 2343 + + + + + x + 2344 + + + + + x + 2345 + + + + + x + 2346 + + + + + x + 2347 + + + + + x + 2348 + + + + + x + 2349 + + + + + x + 2350 + + + + + x + 2351 + + + + + x + 2352 + + + + + x + 2353 + + + + + x + 2354 + + + + + x + 2355 + + + + + x + 2356 + + + + + x + 2357 + + + + + x + 2358 + + + + + x + 2359 + + + + + x + 2360 + + + + + x + 2361 + + + + + x + 2362 + + + + + x + 2363 + + + + + x + 2364 + + + + + x + 2365 + + + + + x + 2366 + + + + + x + 2367 + + + + + x + 2368 + + + + + x + 2369 + + + + + x + 2370 + + + + + x + 2371 + + + + + x + 2372 + + + + + x + 2373 + + + + + x + 2374 + + + + + x + 2375 + + + + + x + 2376 + + + + + x + 2377 + + + + + x + 2378 + + + + + x + 2379 + + + + + x + 2380 + + + + + x + 2381 + + + + + x + 2382 + + + + + x + 2383 + + + + + x + 2384 + + + + + x + 2385 + + + + + x + 2386 + + + + + x + 2387 + + + + + x + 2388 + + + + + x + 2389 + + + + + x + 2390 + + + + + x + 2391 + + + + + x + 2392 + + + + + x + 2393 + + + + + x + 2394 + + + + + x + 2395 + + + + + x + 2396 + + + + + x + 2397 + + + + + x + 2398 + + + + + x + 2399 + + + + + x + 2400 + + + + + x + 2401 + + + + + x + 2402 + + + + + x + 2403 + + + + + x + 2404 + + + + + x + 2405 + + + + + x + 2406 + + + + + x + 2407 + + + + + x + 2408 + + + + + x + 2409 + + + + + x + 2410 + + + + + x + 2411 + + + + + x + 2412 + + + + + x + 2413 + + + + + x + 2414 + + + + + x + 2415 + + + + + x + 2416 + + + + + x + 2417 + + + + + x + 2418 + + + + + x + 2419 + + + + + x + 2420 + + + + + x + 2421 + + + + + x + 2422 + + + + + x + 2423 + + + + + x + 2424 + + + + + x + 2425 + + + + + x + 2426 + + + + + x + 2427 + + + + + x + 2428 + + + + + x + 2429 + + + + + x + 2430 + + + + + x + 2431 + + + + + x + 2432 + + + + + x + 2433 + + + + + x + 2434 + + + + + x + 2435 + + + + + x + 2436 + + + + + x + 2437 + + + + + x + 2438 + + + + + x + 2439 + + + + + x + 2440 + + + + + x + 2441 + + + + + x + 2442 + + + + + x + 2443 + + + + + x + 2444 + + + + + x + 2445 + + + + + x + 2446 + + + + + x + 2447 + + + + + x + 2448 + + + + + x + 2449 + + + + + x + 2450 + + + + + x + 2451 + + + + + x + 2452 + + + + + x + 2453 + + + + + x + 2454 + + + + + x + 2455 + + + + + x + 2456 + + + + + x + 2457 + + + + + x + 2458 + + + + + x + 2459 + + + + + x + 2460 + + + + + x + 2461 + + + + + x + 2462 + + + + + x + 2463 + + + + + x + 2464 + + + + + x + 2465 + + + + + x + 2466 + + + + + x + 2467 + + + + + x + 2468 + + + + + x + 2469 + + + + + x + 2470 + + + + + x + 2471 + + + + + x + 2472 + + + + + x + 2473 + + + + + x + 2474 + + + + + x + 2475 + + + + + x + 2476 + + + + + x + 2477 + + + + + x + 2478 + + + + + x + 2479 + + + + + x + 2480 + + + + + x + 2481 + + + + + x + 2482 + + + + + x + 2483 + + + + + x + 2484 + + + + + x + 2485 + + + + + x + 2486 + + + + + x + 2487 + + + + + x + 2488 + + + + + x + 2489 + + + + + x + 2490 + + + + + x + 2491 + + + + + x + 2492 + + + + + x + 2493 + + + + + x + 2494 + + + + + x + 2495 + + + + + x + 2496 + + + + + x + 2497 + + + + + x + 2498 + + + + + x + 2499 + + + + + x + 2500 + + + + + x + 2501 + + + + + x + 2502 + + + + + x + 2503 + + + + + x + 2504 + + + + + x + 2505 + + + + + x + 2506 + + + + + x + 2507 + + + + + x + 2508 + + + + + x + 2509 + + + + + x + 2510 + + + + + x + 2511 + + + + + x + 2512 + + + + + x + 2513 + + + + + x + 2514 + + + + + x + 2515 + + + + + x + 2516 + + + + + x + 2517 + + + + + x + 2518 + + + + + x + 2519 + + + + + x + 2520 + + + + + x + 2521 + + + + + x + 2522 + + + + + x + 2523 + + + + + x + 2524 + + + + + x + 2525 + + + + + x + 2526 + + + + + x + 2527 + + + + + x + 2528 + + + + + x + 2529 + + + + + x + 2530 + + + + + x + 2531 + + + + + x + 2532 + + + + + x + 2533 + + + + + x + 2534 + + + + + x + 2535 + + + + + x + 2536 + + + + + x + 2537 + + + + + x + 2538 + + + + + x + 2539 + + + + + x + 2540 + + + + + x + 2541 + + + + + x + 2542 + + + + + x + 2543 + + + + + x + 2544 + + + + + x + 2545 + + + + + x + 2546 + + + + + x + 2547 + + + + + x + 2548 + + + + + x + 2549 + + + + + x + 2550 + + + + + x + 2551 + + + + + x + 2552 + + + + + x + 2553 + + + + + x + 2554 + + + + + x + 2555 + + + + + x + 2556 + + + + + x + 2557 + + + + + x + 2558 + + + + + x + 2559 + + + + + x + 2560 + + + + + x + 2561 + + + + + x + 2562 + + + + + x + 2563 + + + + + x + 2564 + + + + + x + 2565 + + + + + x + 2566 + + + + + x + 2567 + + + + + x + 2568 + + + + + x + 2569 + + + + + x + 2570 + + + + + x + 2571 + + + + + x + 2572 + + + + + x + 2573 + + + + + x + 2574 + + + + + x + 2575 + + + + + x + 2576 + + + + + x + 2577 + + + + + x + 2578 + + + + + x + 2579 + + + + + x + 2580 + + + + + x + 2581 + + + + + x + 2582 + + + + + x + 2583 + + + + + x + 2584 + + + + + x + 2585 + + + + + x + 2586 + + + + + x + 2587 + + + + + x + 2588 + + + + + x + 2589 + + + + + x + 2590 + + + + + x + 2591 + + + + + x + 2592 + + + + + x + 2593 + + + + + x + 2594 + + + + + x + 2595 + + + + + x + 2596 + + + + + x + 2597 + + + + + x + 2598 + + + + + x + 2599 + + + + + x + 2600 + + + + + x + 2601 + + + + + x + 2602 + + + + + x + 2603 + + + + + x + 2604 + + + + + x + 2605 + + + + + x + 2606 + + + + + x + 2607 + + + + + x + 2608 + + + + + x + 2609 + + + + + x + 2610 + + + + + x + 2611 + + + + + x + 2612 + + + + + x + 2613 + + + + + x + 2614 + + + + + x + 2615 + + + + + x + 2616 + + + + + x + 2617 + + + + + x + 2618 + + + + + x + 2619 + + + + + x + 2620 + + + + + x + 2621 + + + + + x + 2622 + + + + + x + 2623 + + + + + x + 2624 + + + + + x + 2625 + + + + + x + 2626 + + + + + x + 2627 + + + + + x + 2628 + + + + + x + 2629 + + + + + x + 2630 + + + + + x + 2631 + + + + + x + 2632 + + + + + x + 2633 + + + + + x + 2634 + + + + + x + 2635 + + + + + x + 2636 + + + + + x + 2637 + + + + + x + 2638 + + + + + x + 2639 + + + + + x + 2640 + + + + + x + 2641 + + + + + x + 2642 + + + + + x + 2643 + + + + + x + 2644 + + + + + x + 2645 + + + + + x + 2646 + + + + + x + 2647 + + + + + x + 2648 + + + + + x + 2649 + + + + + x + 2650 + + + + + x + 2651 + + + + + x + 2652 + + + + + x + 2653 + + + + + x + 2654 + + + + + x + 2655 + + + + + x + 2656 + + + + + x + 2657 + + + + + x + 2658 + + + + + x + 2659 + + + + + x + 2660 + + + + + x + 2661 + + + + + x + 2662 + + + + + x + 2663 + + + + + x + 2664 + + + + + x + 2665 + + + + + x + 2666 + + + + + x + 2667 + + + + + x + 2668 + + + + + x + 2669 + + + + + x + 2670 + + + + + x + 2671 + + + + + x + 2672 + + + + + x + 2673 + + + + + x + 2674 + + + + + x + 2675 + + + + + x + 2676 + + + + + x + 2677 + + + + + x + 2678 + + + + + x + 2679 + + + + + x + 2680 + + + + + x + 2681 + + + + + x + 2682 + + + + + x + 2683 + + + + + x + 2684 + + + + + x + 2685 + + + + + x + 2686 + + + + + x + 2687 + + + + + x + 2688 + + + + + x + 2689 + + + + + x + 2690 + + + + + x + 2691 + + + + + x + 2692 + + + + + x + 2693 + + + + + x + 2694 + + + + + x + 2695 + + + + + x + 2696 + + + + + x + 2697 + + + + + x + 2698 + + + + + x + 2699 + + + + + x + 2700 + + + + + x + 2701 + + + + + x + 2702 + + + + + x + 2703 + + + + + x + 2704 + + + + + x + 2705 + + + + + x + 2706 + + + + + x + 2707 + + + + + x + 2708 + + + + + x + 2709 + + + + + x + 2710 + + + + + x + 2711 + + + + + x + 2712 + + + + + x + 2713 + + + + + x + 2714 + + + + + x + 2715 + + + + + x + 2716 + + + + + x + 2717 + + + + + x + 2718 + + + + + x + 2719 + + + + + x + 2720 + + + + + x + 2721 + + + + + x + 2722 + + + + + x + 2723 + + + + + x + 2724 + + + + + x + 2725 + + + + + x + 2726 + + + + + x + 2727 + + + + + x + 2728 + + + + + x + 2729 + + + + + x + 2730 + + + + + x + 2731 + + + + + x + 2732 + + + + + x + 2733 + + + + + x + 2734 + + + + + x + 2735 + + + + + x + 2736 + + + + + x + 2737 + + + + + x + 2738 + + + + + x + 2739 + + + + + x + 2740 + + + + + x + 2741 + + + + + x + 2742 + + + + + x + 2743 + + + + + x + 2744 + + + + + x + 2745 + + + + + x + 2746 + + + + + x + 2747 + + + + + x + 2748 + + + + + x + 2749 + + + + + x + 2750 + + + + + x + 2751 + + + + + x + 2752 + + + + + x + 2753 + + + + + x + 2754 + + + + + x + 2755 + + + + + x + 2756 + + + + + x + 2757 + + + + + x + 2758 + + + + + x + 2759 + + + + + x + 2760 + + + + + x + 2761 + + + + + x + 2762 + + + + + x + 2763 + + + + + x + 2764 + + + + + x + 2765 + + + + + x + 2766 + + + + + x + 2767 + + + + + x + 2768 + + + + + x + 2769 + + + + + x + 2770 + + + + + x + 2771 + + + + + x + 2772 + + + + + x + 2773 + + + + + x + 2774 + + + + + x + 2775 + + + + + x + 2776 + + + + + x + 2777 + + + + + x + 2778 + + + + + x + 2779 + + + + + x + 2780 + + + + + x + 2781 + + + + + x + 2782 + + + + + x + 2783 + + + + + x + 2784 + + + + + x + 2785 + + + + + x + 2786 + + + + + x + 2787 + + + + + x + 2788 + + + + + x + 2789 + + + + + x + 2790 + + + + + x + 2791 + + + + + x + 2792 + + + + + x + 2793 + + + + + x + 2794 + + + + + x + 2795 + + + + + x + 2796 + + + + + x + 2797 + + + + + x + 2798 + + + + + x + 2799 + + + + + x + 2800 + + + + + x + 2801 + + + + + x + 2802 + + + + + x + 2803 + + + + + x + 2804 + + + + + x + 2805 + + + + + x + 2806 + + + + + x + 2807 + + + + + x + 2808 + + + + + x + 2809 + + + + + x + 2810 + + + + + x + 2811 + + + + + x + 2812 + + + + + x + 2813 + + + + + x + 2814 + + + + + x + 2815 + + + + + x + 2816 + + + + + x + 2817 + + + + + x + 2818 + + + + + x + 2819 + + + + + x + 2820 + + + + + x + 2821 + + + + + x + 2822 + + + + + x + 2823 + + + + + x + 2824 + + + + + x + 2825 + + + + + x + 2826 + + + + + x + 2827 + + + + + x + 2828 + + + + + x + 2829 + + + + + x + 2830 + + + + + x + 2831 + + + + + x + 2832 + + + + + x + 2833 + + + + + x + 2834 + + + + + x + 2835 + + + + + x + 2836 + + + + + x + 2837 + + + + + x + 2838 + + + + + x + 2839 + + + + + x + 2840 + + + + + x + 2841 + + + + + x + 2842 + + + + + x + 2843 + + + + + x + 2844 + + + + + x + 2845 + + + + + x + 2846 + + + + + x + 2847 + + + + + x + 2848 + + + + + x + 2849 + + + + + x + 2850 + + + + + x + 2851 + + + + + x + 2852 + + + + + x + 2853 + + + + + x + 2854 + + + + + x + 2855 + + + + + x + 2856 + + + + + x + 2857 + + + + + x + 2858 + + + + + x + 2859 + + + + + x + 2860 + + + + + x + 2861 + + + + + x + 2862 + + + + + x + 2863 + + + + + x + 2864 + + + + + x + 2865 + + + + + x + 2866 + + + + + x + 2867 + + + + + x + 2868 + + + + + x + 2869 + + + + + x + 2870 + + + + + x + 2871 + + + + + x + 2872 + + + + + x + 2873 + + + + + x + 2874 + + + + + x + 2875 + + + + + x + 2876 + + + + + x + 2877 + + + + + x + 2878 + + + + + x + 2879 + + + + + x + 2880 + + + + + x + 2881 + + + + + x + 2882 + + + + + x + 2883 + + + + + x + 2884 + + + + + x + 2885 + + + + + x + 2886 + + + + + x + 2887 + + + + + x + 2888 + + + + + x + 2889 + + + + + x + 2890 + + + + + x + 2891 + + + + + x + 2892 + + + + + x + 2893 + + + + + x + 2894 + + + + + x + 2895 + + + + + x + 2896 + + + + + x + 2897 + + + + + x + 2898 + + + + + x + 2899 + + + + + x + 2900 + + + + + x + 2901 + + + + + x + 2902 + + + + + x + 2903 + + + + + x + 2904 + + + + + x + 2905 + + + + + x + 2906 + + + + + x + 2907 + + + + + x + 2908 + + + + + x + 2909 + + + + + x + 2910 + + + + + x + 2911 + + + + + x + 2912 + + + + + x + 2913 + + + + + x + 2914 + + + + + x + 2915 + + + + + x + 2916 + + + + + x + 2917 + + + + + x + 2918 + + + + + x + 2919 + + + + + x + 2920 + + + + + x + 2921 + + + + + x + 2922 + + + + + x + 2923 + + + + + x + 2924 + + + + + x + 2925 + + + + + x + 2926 + + + + + x + 2927 + + + + + x + 2928 + + + + + x + 2929 + + + + + x + 2930 + + + + + x + 2931 + + + + + x + 2932 + + + + + x + 2933 + + + + + x + 2934 + + + + + x + 2935 + + + + + x + 2936 + + + + + x + 2937 + + + + + x + 2938 + + + + + x + 2939 + + + + + x + 2940 + + + + + x + 2941 + + + + + x + 2942 + + + + + x + 2943 + + + + + x + 2944 + + + + + x + 2945 + + + + + x + 2946 + + + + + x + 2947 + + + + + x + 2948 + + + + + x + 2949 + + + + + x + 2950 + + + + + x + 2951 + + + + + x + 2952 + + + + + x + 2953 + + + + + x + 2954 + + + + + x + 2955 + + + + + x + 2956 + + + + + x + 2957 + + + + + x + 2958 + + + + + x + 2959 + + + + + x + 2960 + + + + + x + 2961 + + + + + x + 2962 + + + + + x + 2963 + + + + + x + 2964 + + + + + x + 2965 + + + + + x + 2966 + + + + + x + 2967 + + + + + x + 2968 + + + + + x + 2969 + + + + + x + 2970 + + + + + x + 2971 + + + + + x + 2972 + + + + + x + 2973 + + + + + x + 2974 + + + + + x + 2975 + + + + + x + 2976 + + + + + x + 2977 + + + + + x + 2978 + + + + + x + 2979 + + + + + x + 2980 + + + + + x + 2981 + + + + + x + 2982 + + + + + x + 2983 + + + + + x + 2984 + + + + + x + 2985 + + + + + x + 2986 + + + + + x + 2987 + + + + + x + 2988 + + + + + x + 2989 + + + + + x + 2990 + + + + + x + 2991 + + + + + x + 2992 + + + + + x + 2993 + + + + + x + 2994 + + + + + x + 2995 + + + + + x + 2996 + + + + + x + 2997 + + + + + x + 2998 + + + + + x + 2999 + + + + + x + 3000 + + + + + x + 3001 + + + + + x + 3002 + + + + + x + 3003 + + + + + x + 3004 + + + + + x + 3005 + + + + + x + 3006 + + + + + x + 3007 + + + + + x + 3008 + + + + + x + 3009 + + + + + x + 3010 + + + + + x + 3011 + + + + + x + 3012 + + + + + x + 3013 + + + + + x + 3014 + + + + + x + 3015 + + + + + x + 3016 + + + + + x + 3017 + + + + + x + 3018 + + + + + x + 3019 + + + + + x + 3020 + + + + + x + 3021 + + + + + x + 3022 + + + + + x + 3023 + + + + + x + 3024 + + + + + x + 3025 + + + + + x + 3026 + + + + + x + 3027 + + + + + x + 3028 + + + + + x + 3029 + + + + + x + 3030 + + + + + x + 3031 + + + + + x + 3032 + + + + + x + 3033 + + + + + x + 3034 + + + + + x + 3035 + + + + + x + 3036 + + + + + x + 3037 + + + + + x + 3038 + + + + + x + 3039 + + + + + x + 3040 + + + + + x + 3041 + + + + + x + 3042 + + + + + x + 3043 + + + + + x + 3044 + + + + + x + 3045 + + + + + x + 3046 + + + + + x + 3047 + + + + + x + 3048 + + + + + x + 3049 + + + + + x + 3050 + + + + + x + 3051 + + + + + x + 3052 + + + + + x + 3053 + + + + + x + 3054 + + + + + x + 3055 + + + + + x + 3056 + + + + + x + 3057 + + + + + x + 3058 + + + + + x + 3059 + + + + + x + 3060 + + + + + x + 3061 + + + + + x + 3062 + + + + + x + 3063 + + + + + x + 3064 + + + + + x + 3065 + + + + + x + 3066 + + + + + x + 3067 + + + + + x + 3068 + + + + + x + 3069 + + + + + x + 3070 + + + + + x + 3071 + + + + + x + 3072 + + + + + x + 3073 + + + + + x + 3074 + + + + + x + 3075 + + + + + x + 3076 + + + + + x + 3077 + + + + + x + 3078 + + + + + x + 3079 + + + + + x + 3080 + + + + + x + 3081 + + + + + x + 3082 + + + + + x + 3083 + + + + + x + 3084 + + + + + x + 3085 + + + + + x + 3086 + + + + + x + 3087 + + + + + x + 3088 + + + + + x + 3089 + + + + + x + 3090 + + + + + x + 3091 + + + + + x + 3092 + + + + + x + 3093 + + + + + x + 3094 + + + + + x + 3095 + + + + + x + 3096 + + + + + x + 3097 + + + + + x + 3098 + + + + + x + 3099 + + + + + x + 3100 + + + + + x + 3101 + + + + + x + 3102 + + + + + x + 3103 + + + + + x + 3104 + + + + + x + 3105 + + + + + x + 3106 + + + + + x + 3107 + + + + + x + 3108 + + + + + x + 3109 + + + + + x + 3110 + + + + + x + 3111 + + + + + x + 3112 + + + + + x + 3113 + + + + + x + 3114 + + + + + x + 3115 + + + + + x + 3116 + + + + + x + 3117 + + + + + x + 3118 + + + + + x + 3119 + + + + + x + 3120 + + + + + x + 3121 + + + + + x + 3122 + + + + + x + 3123 + + + + + x + 3124 + + + + + x + 3125 + + + + + x + 3126 + + + + + x + 3127 + + + + + x + 3128 + + + + + x + 3129 + + + + + x + 3130 + + + + + x + 3131 + + + + + x + 3132 + + + + + x + 3133 + + + + + x + 3134 + + + + + x + 3135 + + + + + x + 3136 + + + + + x + 3137 + + + + + x + 3138 + + + + + x + 3139 + + + + + x + 3140 + + + + + x + 3141 + + + + + x + 3142 + + + + + x + 3143 + + + + + x + 3144 + + + + + x + 3145 + + + + + x + 3146 + + + + + x + 3147 + + + + + x + 3148 + + + + + x + 3149 + + + + + x + 3150 + + + + + x + 3151 + + + + + x + 3152 + + + + + x + 3153 + + + + + x + 3154 + + + + + x + 3155 + + + + + x + 3156 + + + + + x + 3157 + + + + + x + 3158 + + + + + x + 3159 + + + + + x + 3160 + + + + + x + 3161 + + + + + x + 3162 + + + + + x + 3163 + + + + + x + 3164 + + + + + x + 3165 + + + + + x + 3166 + + + + + x + 3167 + + + + + x + 3168 + + + + + x + 3169 + + + + + x + 3170 + + + + + x + 3171 + + + + + x + 3172 + + + + + x + 3173 + + + + + x + 3174 + + + + + x + 3175 + + + + + x + 3176 + + + + + x + 3177 + + + + + x + 3178 + + + + + x + 3179 + + + + + x + 3180 + + + + + x + 3181 + + + + + x + 3182 + + + + + x + 3183 + + + + + x + 3184 + + + + + x + 3185 + + + + + x + 3186 + + + + + x + 3187 + + + + + x + 3188 + + + + + x + 3189 + + + + + x + 3190 + + + + + x + 3191 + + + + + x + 3192 + + + + + x + 3193 + + + + + x + 3194 + + + + + x + 3195 + + + + + x + 3196 + + + + + x + 3197 + + + + + x + 3198 + + + + + x + 3199 + + + + + x + 3200 + + + + + x + 3201 + + + + + x + 3202 + + + + + x + 3203 + + + + + x + 3204 + + + + + x + 3205 + + + + + x + 3206 + + + + + x + 3207 + + + + + x + 3208 + + + + + x + 3209 + + + + + x + 3210 + + + + + x + 3211 + + + + + x + 3212 + + + + + x + 3213 + + + + + x + 3214 + + + + + x + 3215 + + + + + x + 3216 + + + + + x + 3217 + + + + + x + 3218 + + + + + x + 3219 + + + + + x + 3220 + + + + + x + 3221 + + + + + x + 3222 + + + + + x + 3223 + + + + + x + 3224 + + + + + x + 3225 + + + + + x + 3226 + + + + + x + 3227 + + + + + x + 3228 + + + + + x + 3229 + + + + + x + 3230 + + + + + x + 3231 + + + + + x + 3232 + + + + + x + 3233 + + + + + x + 3234 + + + + + x + 3235 + + + + + x + 3236 + + + + + x + 3237 + + + + + x + 3238 + + + + + x + 3239 + + + + + x + 3240 + + + + + x + 3241 + + + + + x + 3242 + + + + + x + 3243 + + + + + x + 3244 + + + + + x + 3245 + + + + + x + 3246 + + + + + x + 3247 + + + + + x + 3248 + + + + + x + 3249 + + + + + x + 3250 + + + + + x + 3251 + + + + + x + 3252 + + + + + x + 3253 + + + + + x + 3254 + + + + + x + 3255 + + + + + x + 3256 + + + + + x + 3257 + + + + + x + 3258 + + + + + x + 3259 + + + + + x + 3260 + + + + + x + 3261 + + + + + x + 3262 + + + + + x + 3263 + + + + + x + 3264 + + + + + x + 3265 + + + + + x + 3266 + + + + + x + 3267 + + + + + x + 3268 + + + + + x + 3269 + + + + + x + 3270 + + + + + x + 3271 + + + + + x + 3272 + + + + + x + 3273 + + + + + x + 3274 + + + + + x + 3275 + + + + + x + 3276 + + + + + x + 3277 + + + + + x + 3278 + + + + + x + 3279 + + + + + x + 3280 + + + + + x + 3281 + + + + + x + 3282 + + + + + x + 3283 + + + + + x + 3284 + + + + + x + 3285 + + + + + x + 3286 + + + + + x + 3287 + + + + + x + 3288 + + + + + x + 3289 + + + + + x + 3290 + + + + + x + 3291 + + + + + x + 3292 + + + + + x + 3293 + + + + + x + 3294 + + + + + x + 3295 + + + + + x + 3296 + + + + + x + 3297 + + + + + x + 3298 + + + + + x + 3299 + + + + + x + 3300 + + + + + x + 3301 + + + + + x + 3302 + + + + + x + 3303 + + + + + x + 3304 + + + + + x + 3305 + + + + + x + 3306 + + + + + x + 3307 + + + + + x + 3308 + + + + + x + 3309 + + + + + x + 3310 + + + + + x + 3311 + + + + + x + 3312 + + + + + x + 3313 + + + + + x + 3314 + + + + + x + 3315 + + + + + x + 3316 + + + + + x + 3317 + + + + + x + 3318 + + + + + x + 3319 + + + + + x + 3320 + + + + + x + 3321 + + + + + x + 3322 + + + + + x + 3323 + + + + + x + 3324 + + + + + x + 3325 + + + + + x + 3326 + + + + + x + 3327 + + + + + x + 3328 + + + + + x + 3329 + + + + + x + 3330 + + + + + x + 3331 + + + + + x + 3332 + + + + + x + 3333 + + + + + x + 3334 + + + + + x + 3335 + + + + + x + 3336 + + + + + x + 3337 + + + + + x + 3338 + + + + + x + 3339 + + + + + x + 3340 + + + + + x + 3341 + + + + + x + 3342 + + + + + x + 3343 + + + + + x + 3344 + + + + + x + 3345 + + + + + x + 3346 + + + + + x + 3347 + + + + + x + 3348 + + + + + x + 3349 + + + + + x + 3350 + + + + + x + 3351 + + + + + x + 3352 + + + + + x + 3353 + + + + + x + 3354 + + + + + x + 3355 + + + + + x + 3356 + + + + + x + 3357 + + + + + x + 3358 + + + + + x + 3359 + + + + + x + 3360 + + + + + x + 3361 + + + + + x + 3362 + + + + + x + 3363 + + + + + x + 3364 + + + + + x + 3365 + + + + + x + 3366 + + + + + x + 3367 + + + + + x + 3368 + + + + + x + 3369 + + + + + x + 3370 + + + + + x + 3371 + + + + + x + 3372 + + + + + x + 3373 + + + + + x + 3374 + + + + + x + 3375 + + + + + x + 3376 + + + + + x + 3377 + + + + + x + 3378 + + + + + x + 3379 + + + + + x + 3380 + + + + + x + 3381 + + + + + x + 3382 + + + + + x + 3383 + + + + + x + 3384 + + + + + x + 3385 + + + + + x + 3386 + + + + + x + 3387 + + + + + x + 3388 + + + + + x + 3389 + + + + + x + 3390 + + + + + x + 3391 + + + + + x + 3392 + + + + + x + 3393 + + + + + x + 3394 + + + + + x + 3395 + + + + + x + 3396 + + + + + x + 3397 + + + + + x + 3398 + + + + + x + 3399 + + + + + x + 3400 + + + + + x + 3401 + + + + + x + 3402 + + + + + x + 3403 + + + + + x + 3404 + + + + + x + 3405 + + + + + x + 3406 + + + + + x + 3407 + + + + + x + 3408 + + + + + x + 3409 + + + + + x + 3410 + + + + + x + 3411 + + + + + x + 3412 + + + + + x + 3413 + + + + + x + 3414 + + + + + x + 3415 + + + + + x + 3416 + + + + + x + 3417 + + + + + x + 3418 + + + + + x + 3419 + + + + + x + 3420 + + + + + x + 3421 + + + + + x + 3422 + + + + + x + 3423 + + + + + x + 3424 + + + + + x + 3425 + + + + + x + 3426 + + + + + x + 3427 + + + + + x + 3428 + + + + + x + 3429 + + + + + x + 3430 + + + + + x + 3431 + + + + + x + 3432 + + + + + x + 3433 + + + + + x + 3434 + + + + + x + 3435 + + + + + x + 3436 + + + + + x + 3437 + + + + + x + 3438 + + + + + x + 3439 + + + + + x + 3440 + + + + + x + 3441 + + + + + x + 3442 + + + + + x + 3443 + + + + + x + 3444 + + + + + x + 3445 + + + + + x + 3446 + + + + + x + 3447 + + + + + x + 3448 + + + + + x + 3449 + + + + + x + 3450 + + + + + x + 3451 + + + + + x + 3452 + + + + + x + 3453 + + + + + x + 3454 + + + + + x + 3455 + + + + + x + 3456 + + + + + x + 3457 + + + + + x + 3458 + + + + + x + 3459 + + + + + x + 3460 + + + + + x + 3461 + + + + + x + 3462 + + + + + x + 3463 + + + + + x + 3464 + + + + + x + 3465 + + + + + x + 3466 + + + + + x + 3467 + + + + + x + 3468 + + + + + x + 3469 + + + + + x + 3470 + + + + + x + 3471 + + + + + x + 3472 + + + + + x + 3473 + + + + + x + 3474 + + + + + x + 3475 + + + + + x + 3476 + + + + + x + 3477 + + + + + x + 3478 + + + + + x + 3479 + + + + + x + 3480 + + + + + x + 3481 + + + + + x + 3482 + + + + + x + 3483 + + + + + x + 3484 + + + + + x + 3485 + + + + + x + 3486 + + + + + x + 3487 + + + + + x + 3488 + + + + + x + 3489 + + + + + x + 3490 + + + + + x + 3491 + + + + + x + 3492 + + + + + x + 3493 + + + + + x + 3494 + + + + + x + 3495 + + + + + x + 3496 + + + + + x + 3497 + + + + + x + 3498 + + + + + x + 3499 + + + + + x + 3500 + + + + + x + 3501 + + + + + x + 3502 + + + + + x + 3503 + + + + + x + 3504 + + + + + x + 3505 + + + + + x + 3506 + + + + + x + 3507 + + + + + x + 3508 + + + + + x + 3509 + + + + + x + 3510 + + + + + x + 3511 + + + + + x + 3512 + + + + + x + 3513 + + + + + x + 3514 + + + + + x + 3515 + + + + + x + 3516 + + + + + x + 3517 + + + + + x + 3518 + + + + + x + 3519 + + + + + x + 3520 + + + + + x + 3521 + + + + + x + 3522 + + + + + x + 3523 + + + + + x + 3524 + + + + + x + 3525 + + + + + x + 3526 + + + + + x + 3527 + + + + + x + 3528 + + + + + x + 3529 + + + + + x + 3530 + + + + + x + 3531 + + + + + x + 3532 + + + + + x + 3533 + + + + + x + 3534 + + + + + x + 3535 + + + + + x + 3536 + + + + + x + 3537 + + + + + x + 3538 + + + + + x + 3539 + + + + + x + 3540 + + + + + x + 3541 + + + + + x + 3542 + + + + + x + 3543 + + + + + x + 3544 + + + + + x + 3545 + + + + + x + 3546 + + + + + x + 3547 + + + + + x + 3548 + + + + + x + 3549 + + + + + x + 3550 + + + + + x + 3551 + + + + + x + 3552 + + + + + x + 3553 + + + + + x + 3554 + + + + + x + 3555 + + + + + x + 3556 + + + + + x + 3557 + + + + + x + 3558 + + + + + x + 3559 + + + + + x + 3560 + + + + + x + 3561 + + + + + x + 3562 + + + + + x + 3563 + + + + + x + 3564 + + + + + x + 3565 + + + + + x + 3566 + + + + + x + 3567 + + + + + x + 3568 + + + + + x + 3569 + + + + + x + 3570 + + + + + x + 3571 + + + + + x + 3572 + + + + + x + 3573 + + + + + x + 3574 + + + + + x + 3575 + + + + + x + 3576 + + + + + x + 3577 + + + + + x + 3578 + + + + + x + 3579 + + + + + x + 3580 + + + + + x + 3581 + + + + + x + 3582 + + + + + x + 3583 + + + + + x + 3584 + + + + + x + 3585 + + + + + x + 3586 + + + + + x + 3587 + + + + + x + 3588 + + + + + x + 3589 + + + + + x + 3590 + + + + + x + 3591 + + + + + x + 3592 + + + + + x + 3593 + + + + + x + 3594 + + + + + x + 3595 + + + + + x + 3596 + + + + + x + 3597 + + + + + x + 3598 + + + + + x + 3599 + + + + + x + 3600 + + + + + x + 3601 + + + + + x + 3602 + + + + + x + 3603 + + + + + x + 3604 + + + + + x + 3605 + + + + + x + 3606 + + + + + x + 3607 + + + + + x + 3608 + + + + + x + 3609 + + + + + x + 3610 + + + + + x + 3611 + + + + + x + 3612 + + + + + x + 3613 + + + + + x + 3614 + + + + + x + 3615 + + + + + x + 3616 + + + + + x + 3617 + + + + + x + 3618 + + + + + x + 3619 + + + + + x + 3620 + + + + + x + 3621 + + + + + x + 3622 + + + + + x + 3623 + + + + + x + 3624 + + + + + x + 3625 + + + + + x + 3626 + + + + + x + 3627 + + + + + x + 3628 + + + + + x + 3629 + + + + + x + 3630 + + + + + x + 3631 + + + + + x + 3632 + + + + + x + 3633 + + + + + x + 3634 + + + + + x + 3635 + + + + + x + 3636 + + + + + x + 3637 + + + + + x + 3638 + + + + + x + 3639 + + + + + x + 3640 + + + + + x + 3641 + + + + + x + 3642 + + + + + x + 3643 + + + + + x + 3644 + + + + + x + 3645 + + + + + x + 3646 + + + + + x + 3647 + + + + + x + 3648 + + + + + x + 3649 + + + + + x + 3650 + + + + + x + 3651 + + + + + x + 3652 + + + + + x + 3653 + + + + + x + 3654 + + + + + x + 3655 + + + + + x + 3656 + + + + + x + 3657 + + + + + x + 3658 + + + + + x + 3659 + + + + + x + 3660 + + + + + x + 3661 + + + + + x + 3662 + + + + + x + 3663 + + + + + x + 3664 + + + + + x + 3665 + + + + + x + 3666 + + + + + x + 3667 + + + + + x + 3668 + + + + + x + 3669 + + + + + x + 3670 + + + + + x + 3671 + + + + + x + 3672 + + + + + x + 3673 + + + + + x + 3674 + + + + + x + 3675 + + + + + x + 3676 + + + + + x + 3677 + + + + + x + 3678 + + + + + x + 3679 + + + + + x + 3680 + + + + + x + 3681 + + + + + x + 3682 + + + + + x + 3683 + + + + + x + 3684 + + + + + x + 3685 + + + + + x + 3686 + + + + + x + 3687 + + + + + x + 3688 + + + + + x + 3689 + + + + + x + 3690 + + + + + x + 3691 + + + + + x + 3692 + + + + + x + 3693 + + + + + x + 3694 + + + + + x + 3695 + + + + + x + 3696 + + + + + x + 3697 + + + + + x + 3698 + + + + + x + 3699 + + + + + x + 3700 + + + + + x + 3701 + + + + + x + 3702 + + + + + x + 3703 + + + + + x + 3704 + + + + + x + 3705 + + + + + x + 3706 + + + + + x + 3707 + + + + + x + 3708 + + + + + x + 3709 + + + + + x + 3710 + + + + + x + 3711 + + + + + x + 3712 + + + + + x + 3713 + + + + + x + 3714 + + + + + x + 3715 + + + + + x + 3716 + + + + + x + 3717 + + + + + x + 3718 + + + + + x + 3719 + + + + + x + 3720 + + + + + x + 3721 + + + + + x + 3722 + + + + + x + 3723 + + + + + x + 3724 + + + + + x + 3725 + + + + + x + 3726 + + + + + x + 3727 + + + + + x + 3728 + + + + + x + 3729 + + + + + x + 3730 + + + + + x + 3731 + + + + + x + 3732 + + + + + x + 3733 + + + + + x + 3734 + + + + + x + 3735 + + + + + x + 3736 + + + + + x + 3737 + + + + + x + 3738 + + + + + x + 3739 + + + + + x + 3740 + + + + + x + 3741 + + + + + x + 3742 + + + + + x + 3743 + + + + + x + 3744 + + + + + x + 3745 + + + + + x + 3746 + + + + + x + 3747 + + + + + x + 3748 + + + + + x + 3749 + + + + + x + 3750 + + + + + x + 3751 + + + + + x + 3752 + + + + + x + 3753 + + + + + x + 3754 + + + + + x + 3755 + + + + + x + 3756 + + + + + x + 3757 + + + + + x + 3758 + + + + + x + 3759 + + + + + x + 3760 + + + + + x + 3761 + + + + + x + 3762 + + + + + x + 3763 + + + + + x + 3764 + + + + + x + 3765 + + + + + x + 3766 + + + + + x + 3767 + + + + + x + 3768 + + + + + x + 3769 + + + + + x + 3770 + + + + + x + 3771 + + + + + x + 3772 + + + + + x + 3773 + + + + + x + 3774 + + + + + x + 3775 + + + + + x + 3776 + + + + + x + 3777 + + + + + x + 3778 + + + + + x + 3779 + + + + + x + 3780 + + + + + x + 3781 + + + + + x + 3782 + + + + + x + 3783 + + + + + x + 3784 + + + + + x + 3785 + + + + + x + 3786 + + + + + x + 3787 + + + + + x + 3788 + + + + + x + 3789 + + + + + x + 3790 + + + + + x + 3791 + + + + + x + 3792 + + + + + x + 3793 + + + + + x + 3794 + + + + + x + 3795 + + + + + x + 3796 + + + + + x + 3797 + + + + + x + 3798 + + + + + x + 3799 + + + + + x + 3800 + + + + + x + 3801 + + + + + x + 3802 + + + + + x + 3803 + + + + + x + 3804 + + + + + x + 3805 + + + + + x + 3806 + + + + + x + 3807 + + + + + x + 3808 + + + + + x + 3809 + + + + + x + 3810 + + + + + x + 3811 + + + + + x + 3812 + + + + + x + 3813 + + + + + x + 3814 + + + + + x + 3815 + + + + + x + 3816 + + + + + x + 3817 + + + + + x + 3818 + + + + + x + 3819 + + + + + x + 3820 + + + + + x + 3821 + + + + + x + 3822 + + + + + x + 3823 + + + + + x + 3824 + + + + + x + 3825 + + + + + x + 3826 + + + + + x + 3827 + + + + + x + 3828 + + + + + x + 3829 + + + + + x + 3830 + + + + + x + 3831 + + + + + x + 3832 + + + + + x + 3833 + + + + + x + 3834 + + + + + x + 3835 + + + + + x + 3836 + + + + + x + 3837 + + + + + x + 3838 + + + + + x + 3839 + + + + + x + 3840 + + + + + x + 3841 + + + + + x + 3842 + + + + + x + 3843 + + + + + x + 3844 + + + + + x + 3845 + + + + + x + 3846 + + + + + x + 3847 + + + + + x + 3848 + + + + + x + 3849 + + + + + x + 3850 + + + + + x + 3851 + + + + + x + 3852 + + + + + x + 3853 + + + + + x + 3854 + + + + + x + 3855 + + + + + x + 3856 + + + + + x + 3857 + + + + + x + 3858 + + + + + x + 3859 + + + + + x + 3860 + + + + + x + 3861 + + + + + x + 3862 + + + + + x + 3863 + + + + + x + 3864 + + + + + x + 3865 + + + + + x + 3866 + + + + + x + 3867 + + + + + x + 3868 + + + + + x + 3869 + + + + + x + 3870 + + + + + x + 3871 + + + + + x + 3872 + + + + + x + 3873 + + + + + x + 3874 + + + + + x + 3875 + + + + + x + 3876 + + + + + x + 3877 + + + + + x + 3878 + + + + + x + 3879 + + + + + x + 3880 + + + + + x + 3881 + + + + + x + 3882 + + + + + x + 3883 + + + + + x + 3884 + + + + + x + 3885 + + + + + x + 3886 + + + + + x + 3887 + + + + + x + 3888 + + + + + x + 3889 + + + + + x + 3890 + + + + + x + 3891 + + + + + x + 3892 + + + + + x + 3893 + + + + + x + 3894 + + + + + x + 3895 + + + + + x + 3896 + + + + + x + 3897 + + + + + x + 3898 + + + + + x + 3899 + + + + + x + 3900 + + + + + x + 3901 + + + + + x + 3902 + + + + + x + 3903 + + + + + x + 3904 + + + + + x + 3905 + + + + + x + 3906 + + + + + x + 3907 + + + + + x + 3908 + + + + + x + 3909 + + + + + x + 3910 + + + + + x + 3911 + + + + + x + 3912 + + + + + x + 3913 + + + + + x + 3914 + + + + + x + 3915 + + + + + x + 3916 + + + + + x + 3917 + + + + + x + 3918 + + + + + x + 3919 + + + + + x + 3920 + + + + + x + 3921 + + + + + x + 3922 + + + + + x + 3923 + + + + + x + 3924 + + + + + x + 3925 + + + + + x + 3926 + + + + + x + 3927 + + + + + x + 3928 + + + + + x + 3929 + + + + + x + 3930 + + + + + x + 3931 + + + + + x + 3932 + + + + + x + 3933 + + + + + x + 3934 + + + + + x + 3935 + + + + + x + 3936 + + + + + x + 3937 + + + + + x + 3938 + + + + + x + 3939 + + + + + x + 3940 + + + + + x + 3941 + + + + + x + 3942 + + + + + x + 3943 + + + + + x + 3944 + + + + + x + 3945 + + + + + x + 3946 + + + + + x + 3947 + + + + + x + 3948 + + + + + x + 3949 + + + + + x + 3950 + + + + + x + 3951 + + + + + x + 3952 + + + + + x + 3953 + + + + + x + 3954 + + + + + x + 3955 + + + + + x + 3956 + + + + + x + 3957 + + + + + x + 3958 + + + + + x + 3959 + + + + + x + 3960 + + + + + x + 3961 + + + + + x + 3962 + + + + + x + 3963 + + + + + x + 3964 + + + + + x + 3965 + + + + + x + 3966 + + + + + x + 3967 + + + + + x + 3968 + + + + + x + 3969 + + + + + x + 3970 + + + + + x + 3971 + + + + + x + 3972 + + + + + x + 3973 + + + + + x + 3974 + + + + + x + 3975 + + + + + x + 3976 + + + + + x + 3977 + + + + + x + 3978 + + + + + x + 3979 + + + + + x + 3980 + + + + + x + 3981 + + + + + x + 3982 + + + + + x + 3983 + + + + + x + 3984 + + + + + x + 3985 + + + + + x + 3986 + + + + + x + 3987 + + + + + x + 3988 + + + + + x + 3989 + + + + + x + 3990 + + + + + x + 3991 + + + + + x + 3992 + + + + + x + 3993 + + + + + x + 3994 + + + + + x + 3995 + + + + + x + 3996 + + + + + x + 3997 + + + + + x + 3998 + + + + + x + 3999 + + + + + x + 4000 + + + + + x + 4001 + + + + + x + 4002 + + + + + x + 4003 + + + + + x + 4004 + + + + + x + 4005 + + + + + x + 4006 + + + + + x + 4007 + + + + + x + 4008 + + + + + x + 4009 + + + + + x + 4010 + + + + + x + 4011 + + + + + x + 4012 + + + + + x + 4013 + + + + + x + 4014 + + + + + x + 4015 + + + + + x + 4016 + + + + + x + 4017 + + + + + x + 4018 + + + + + x + 4019 + + + + + x + 4020 + + + + + x + 4021 + + + + + x + 4022 + + + + + x + 4023 + + + + + x + 4024 + + + + + x + 4025 + + + + + x + 4026 + + + + + x + 4027 + + + + + x + 4028 + + + + + x + 4029 + + + + + x + 4030 + + + + + x + 4031 + + + + + x + 4032 + + + + + x + 4033 + + + + + x + 4034 + + + + + x + 4035 + + + + + x + 4036 + + + + + x + 4037 + + + + + x + 4038 + + + + + x + 4039 + + + + + x + 4040 + + + + + x + 4041 + + + + + x + 4042 + + + + + x + 4043 + + + + + x + 4044 + + + + + x + 4045 + + + + + x + 4046 + + + + + x + 4047 + + + + + x + 4048 + + + + + x + 4049 + + + + + x + 4050 + + + + + x + 4051 + + + + + x + 4052 + + + + + x + 4053 + + + + + x + 4054 + + + + + x + 4055 + + + + + x + 4056 + + + + + x + 4057 + + + + + x + 4058 + + + + + x + 4059 + + + + + x + 4060 + + + + + x + 4061 + + + + + x + 4062 + + + + + x + 4063 + + + + + x + 4064 + + + + + x + 4065 + + + + + x + 4066 + + + + + x + 4067 + + + + + x + 4068 + + + + + x + 4069 + + + + + x + 4070 + + + + + x + 4071 + + + + + x + 4072 + + + + + x + 4073 + + + + + x + 4074 + + + + + x + 4075 + + + + + x + 4076 + + + + + x + 4077 + + + + + x + 4078 + + + + + x + 4079 + + + + + x + 4080 + + + + + x + 4081 + + + + + x + 4082 + + + + + x + 4083 + + + + + x + 4084 + + + + + x + 4085 + + + + + x + 4086 + + + + + x + 4087 + + + + + x + 4088 + + + + + x + 4089 + + + + + x + 4090 + + + + + x + 4091 + + + + + x + 4092 + + + + + x + 4093 + + + + + x + 4094 + + + + + x + 4095 + + + + + x + 4096 + + + + + + + + x + + + x1 + + + + + x1 + + x + + 4 + + x + 1 + + + + + + + + + + x + + + + x + 0 + + + + + diff --git a/bench_horn_mcmc/samples_shrink_big_numbers_8192/config b/bench_horn_mcmc/samples_shrink_big_numbers_8192/config new file mode 100644 index 000000000..7d6db6322 --- /dev/null +++ b/bench_horn_mcmc/samples_shrink_big_numbers_8192/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +16385 +-8192 -8191 -8190 -8189 -8188 -8187 -8186 -8185 -8184 -8183 -8182 -8181 -8180 -8179 -8178 -8177 -8176 -8175 -8174 -8173 -8172 -8171 -8170 -8169 -8168 -8167 -8166 -8165 -8164 -8163 -8162 -8161 -8160 -8159 -8158 -8157 -8156 -8155 -8154 -8153 -8152 -8151 -8150 -8149 -8148 -8147 -8146 -8145 -8144 -8143 -8142 -8141 -8140 -8139 -8138 -8137 -8136 -8135 -8134 -8133 -8132 -8131 -8130 -8129 -8128 -8127 -8126 -8125 -8124 -8123 -8122 -8121 -8120 -8119 -8118 -8117 -8116 -8115 -8114 -8113 -8112 -8111 -8110 -8109 -8108 -8107 -8106 -8105 -8104 -8103 -8102 -8101 -8100 -8099 -8098 -8097 -8096 -8095 -8094 -8093 -8092 -8091 -8090 -8089 -8088 -8087 -8086 -8085 -8084 -8083 -8082 -8081 -8080 -8079 -8078 -8077 -8076 -8075 -8074 -8073 -8072 -8071 -8070 -8069 -8068 -8067 -8066 -8065 -8064 -8063 -8062 -8061 -8060 -8059 -8058 -8057 -8056 -8055 -8054 -8053 -8052 -8051 -8050 -8049 -8048 -8047 -8046 -8045 -8044 -8043 -8042 -8041 -8040 -8039 -8038 -8037 -8036 -8035 -8034 -8033 -8032 -8031 -8030 -8029 -8028 -8027 -8026 -8025 -8024 -8023 -8022 -8021 -8020 -8019 -8018 -8017 -8016 -8015 -8014 -8013 -8012 -8011 -8010 -8009 -8008 -8007 -8006 -8005 -8004 -8003 -8002 -8001 -8000 -7999 -7998 -7997 -7996 -7995 -7994 -7993 -7992 -7991 -7990 -7989 -7988 -7987 -7986 -7985 -7984 -7983 -7982 -7981 -7980 -7979 -7978 -7977 -7976 -7975 -7974 -7973 -7972 -7971 -7970 -7969 -7968 -7967 -7966 -7965 -7964 -7963 -7962 -7961 -7960 -7959 -7958 -7957 -7956 -7955 -7954 -7953 -7952 -7951 -7950 -7949 -7948 -7947 -7946 -7945 -7944 -7943 -7942 -7941 -7940 -7939 -7938 -7937 -7936 -7935 -7934 -7933 -7932 -7931 -7930 -7929 -7928 -7927 -7926 -7925 -7924 -7923 -7922 -7921 -7920 -7919 -7918 -7917 -7916 -7915 -7914 -7913 -7912 -7911 -7910 -7909 -7908 -7907 -7906 -7905 -7904 -7903 -7902 -7901 -7900 -7899 -7898 -7897 -7896 -7895 -7894 -7893 -7892 -7891 -7890 -7889 -7888 -7887 -7886 -7885 -7884 -7883 -7882 -7881 -7880 -7879 -7878 -7877 -7876 -7875 -7874 -7873 -7872 -7871 -7870 -7869 -7868 -7867 -7866 -7865 -7864 -7863 -7862 -7861 -7860 -7859 -7858 -7857 -7856 -7855 -7854 -7853 -7852 -7851 -7850 -7849 -7848 -7847 -7846 -7845 -7844 -7843 -7842 -7841 -7840 -7839 -7838 -7837 -7836 -7835 -7834 -7833 -7832 -7831 -7830 -7829 -7828 -7827 -7826 -7825 -7824 -7823 -7822 -7821 -7820 -7819 -7818 -7817 -7816 -7815 -7814 -7813 -7812 -7811 -7810 -7809 -7808 -7807 -7806 -7805 -7804 -7803 -7802 -7801 -7800 -7799 -7798 -7797 -7796 -7795 -7794 -7793 -7792 -7791 -7790 -7789 -7788 -7787 -7786 -7785 -7784 -7783 -7782 -7781 -7780 -7779 -7778 -7777 -7776 -7775 -7774 -7773 -7772 -7771 -7770 -7769 -7768 -7767 -7766 -7765 -7764 -7763 -7762 -7761 -7760 -7759 -7758 -7757 -7756 -7755 -7754 -7753 -7752 -7751 -7750 -7749 -7748 -7747 -7746 -7745 -7744 -7743 -7742 -7741 -7740 -7739 -7738 -7737 -7736 -7735 -7734 -7733 -7732 -7731 -7730 -7729 -7728 -7727 -7726 -7725 -7724 -7723 -7722 -7721 -7720 -7719 -7718 -7717 -7716 -7715 -7714 -7713 -7712 -7711 -7710 -7709 -7708 -7707 -7706 -7705 -7704 -7703 -7702 -7701 -7700 -7699 -7698 -7697 -7696 -7695 -7694 -7693 -7692 -7691 -7690 -7689 -7688 -7687 -7686 -7685 -7684 -7683 -7682 -7681 -7680 -7679 -7678 -7677 -7676 -7675 -7674 -7673 -7672 -7671 -7670 -7669 -7668 -7667 -7666 -7665 -7664 -7663 -7662 -7661 -7660 -7659 -7658 -7657 -7656 -7655 -7654 -7653 -7652 -7651 -7650 -7649 -7648 -7647 -7646 -7645 -7644 -7643 -7642 -7641 -7640 -7639 -7638 -7637 -7636 -7635 -7634 -7633 -7632 -7631 -7630 -7629 -7628 -7627 -7626 -7625 -7624 -7623 -7622 -7621 -7620 -7619 -7618 -7617 -7616 -7615 -7614 -7613 -7612 -7611 -7610 -7609 -7608 -7607 -7606 -7605 -7604 -7603 -7602 -7601 -7600 -7599 -7598 -7597 -7596 -7595 -7594 -7593 -7592 -7591 -7590 -7589 -7588 -7587 -7586 -7585 -7584 -7583 -7582 -7581 -7580 -7579 -7578 -7577 -7576 -7575 -7574 -7573 -7572 -7571 -7570 -7569 -7568 -7567 -7566 -7565 -7564 -7563 -7562 -7561 -7560 -7559 -7558 -7557 -7556 -7555 -7554 -7553 -7552 -7551 -7550 -7549 -7548 -7547 -7546 -7545 -7544 -7543 -7542 -7541 -7540 -7539 -7538 -7537 -7536 -7535 -7534 -7533 -7532 -7531 -7530 -7529 -7528 -7527 -7526 -7525 -7524 -7523 -7522 -7521 -7520 -7519 -7518 -7517 -7516 -7515 -7514 -7513 -7512 -7511 -7510 -7509 -7508 -7507 -7506 -7505 -7504 -7503 -7502 -7501 -7500 -7499 -7498 -7497 -7496 -7495 -7494 -7493 -7492 -7491 -7490 -7489 -7488 -7487 -7486 -7485 -7484 -7483 -7482 -7481 -7480 -7479 -7478 -7477 -7476 -7475 -7474 -7473 -7472 -7471 -7470 -7469 -7468 -7467 -7466 -7465 -7464 -7463 -7462 -7461 -7460 -7459 -7458 -7457 -7456 -7455 -7454 -7453 -7452 -7451 -7450 -7449 -7448 -7447 -7446 -7445 -7444 -7443 -7442 -7441 -7440 -7439 -7438 -7437 -7436 -7435 -7434 -7433 -7432 -7431 -7430 -7429 -7428 -7427 -7426 -7425 -7424 -7423 -7422 -7421 -7420 -7419 -7418 -7417 -7416 -7415 -7414 -7413 -7412 -7411 -7410 -7409 -7408 -7407 -7406 -7405 -7404 -7403 -7402 -7401 -7400 -7399 -7398 -7397 -7396 -7395 -7394 -7393 -7392 -7391 -7390 -7389 -7388 -7387 -7386 -7385 -7384 -7383 -7382 -7381 -7380 -7379 -7378 -7377 -7376 -7375 -7374 -7373 -7372 -7371 -7370 -7369 -7368 -7367 -7366 -7365 -7364 -7363 -7362 -7361 -7360 -7359 -7358 -7357 -7356 -7355 -7354 -7353 -7352 -7351 -7350 -7349 -7348 -7347 -7346 -7345 -7344 -7343 -7342 -7341 -7340 -7339 -7338 -7337 -7336 -7335 -7334 -7333 -7332 -7331 -7330 -7329 -7328 -7327 -7326 -7325 -7324 -7323 -7322 -7321 -7320 -7319 -7318 -7317 -7316 -7315 -7314 -7313 -7312 -7311 -7310 -7309 -7308 -7307 -7306 -7305 -7304 -7303 -7302 -7301 -7300 -7299 -7298 -7297 -7296 -7295 -7294 -7293 -7292 -7291 -7290 -7289 -7288 -7287 -7286 -7285 -7284 -7283 -7282 -7281 -7280 -7279 -7278 -7277 -7276 -7275 -7274 -7273 -7272 -7271 -7270 -7269 -7268 -7267 -7266 -7265 -7264 -7263 -7262 -7261 -7260 -7259 -7258 -7257 -7256 -7255 -7254 -7253 -7252 -7251 -7250 -7249 -7248 -7247 -7246 -7245 -7244 -7243 -7242 -7241 -7240 -7239 -7238 -7237 -7236 -7235 -7234 -7233 -7232 -7231 -7230 -7229 -7228 -7227 -7226 -7225 -7224 -7223 -7222 -7221 -7220 -7219 -7218 -7217 -7216 -7215 -7214 -7213 -7212 -7211 -7210 -7209 -7208 -7207 -7206 -7205 -7204 -7203 -7202 -7201 -7200 -7199 -7198 -7197 -7196 -7195 -7194 -7193 -7192 -7191 -7190 -7189 -7188 -7187 -7186 -7185 -7184 -7183 -7182 -7181 -7180 -7179 -7178 -7177 -7176 -7175 -7174 -7173 -7172 -7171 -7170 -7169 -7168 -7167 -7166 -7165 -7164 -7163 -7162 -7161 -7160 -7159 -7158 -7157 -7156 -7155 -7154 -7153 -7152 -7151 -7150 -7149 -7148 -7147 -7146 -7145 -7144 -7143 -7142 -7141 -7140 -7139 -7138 -7137 -7136 -7135 -7134 -7133 -7132 -7131 -7130 -7129 -7128 -7127 -7126 -7125 -7124 -7123 -7122 -7121 -7120 -7119 -7118 -7117 -7116 -7115 -7114 -7113 -7112 -7111 -7110 -7109 -7108 -7107 -7106 -7105 -7104 -7103 -7102 -7101 -7100 -7099 -7098 -7097 -7096 -7095 -7094 -7093 -7092 -7091 -7090 -7089 -7088 -7087 -7086 -7085 -7084 -7083 -7082 -7081 -7080 -7079 -7078 -7077 -7076 -7075 -7074 -7073 -7072 -7071 -7070 -7069 -7068 -7067 -7066 -7065 -7064 -7063 -7062 -7061 -7060 -7059 -7058 -7057 -7056 -7055 -7054 -7053 -7052 -7051 -7050 -7049 -7048 -7047 -7046 -7045 -7044 -7043 -7042 -7041 -7040 -7039 -7038 -7037 -7036 -7035 -7034 -7033 -7032 -7031 -7030 -7029 -7028 -7027 -7026 -7025 -7024 -7023 -7022 -7021 -7020 -7019 -7018 -7017 -7016 -7015 -7014 -7013 -7012 -7011 -7010 -7009 -7008 -7007 -7006 -7005 -7004 -7003 -7002 -7001 -7000 -6999 -6998 -6997 -6996 -6995 -6994 -6993 -6992 -6991 -6990 -6989 -6988 -6987 -6986 -6985 -6984 -6983 -6982 -6981 -6980 -6979 -6978 -6977 -6976 -6975 -6974 -6973 -6972 -6971 -6970 -6969 -6968 -6967 -6966 -6965 -6964 -6963 -6962 -6961 -6960 -6959 -6958 -6957 -6956 -6955 -6954 -6953 -6952 -6951 -6950 -6949 -6948 -6947 -6946 -6945 -6944 -6943 -6942 -6941 -6940 -6939 -6938 -6937 -6936 -6935 -6934 -6933 -6932 -6931 -6930 -6929 -6928 -6927 -6926 -6925 -6924 -6923 -6922 -6921 -6920 -6919 -6918 -6917 -6916 -6915 -6914 -6913 -6912 -6911 -6910 -6909 -6908 -6907 -6906 -6905 -6904 -6903 -6902 -6901 -6900 -6899 -6898 -6897 -6896 -6895 -6894 -6893 -6892 -6891 -6890 -6889 -6888 -6887 -6886 -6885 -6884 -6883 -6882 -6881 -6880 -6879 -6878 -6877 -6876 -6875 -6874 -6873 -6872 -6871 -6870 -6869 -6868 -6867 -6866 -6865 -6864 -6863 -6862 -6861 -6860 -6859 -6858 -6857 -6856 -6855 -6854 -6853 -6852 -6851 -6850 -6849 -6848 -6847 -6846 -6845 -6844 -6843 -6842 -6841 -6840 -6839 -6838 -6837 -6836 -6835 -6834 -6833 -6832 -6831 -6830 -6829 -6828 -6827 -6826 -6825 -6824 -6823 -6822 -6821 -6820 -6819 -6818 -6817 -6816 -6815 -6814 -6813 -6812 -6811 -6810 -6809 -6808 -6807 -6806 -6805 -6804 -6803 -6802 -6801 -6800 -6799 -6798 -6797 -6796 -6795 -6794 -6793 -6792 -6791 -6790 -6789 -6788 -6787 -6786 -6785 -6784 -6783 -6782 -6781 -6780 -6779 -6778 -6777 -6776 -6775 -6774 -6773 -6772 -6771 -6770 -6769 -6768 -6767 -6766 -6765 -6764 -6763 -6762 -6761 -6760 -6759 -6758 -6757 -6756 -6755 -6754 -6753 -6752 -6751 -6750 -6749 -6748 -6747 -6746 -6745 -6744 -6743 -6742 -6741 -6740 -6739 -6738 -6737 -6736 -6735 -6734 -6733 -6732 -6731 -6730 -6729 -6728 -6727 -6726 -6725 -6724 -6723 -6722 -6721 -6720 -6719 -6718 -6717 -6716 -6715 -6714 -6713 -6712 -6711 -6710 -6709 -6708 -6707 -6706 -6705 -6704 -6703 -6702 -6701 -6700 -6699 -6698 -6697 -6696 -6695 -6694 -6693 -6692 -6691 -6690 -6689 -6688 -6687 -6686 -6685 -6684 -6683 -6682 -6681 -6680 -6679 -6678 -6677 -6676 -6675 -6674 -6673 -6672 -6671 -6670 -6669 -6668 -6667 -6666 -6665 -6664 -6663 -6662 -6661 -6660 -6659 -6658 -6657 -6656 -6655 -6654 -6653 -6652 -6651 -6650 -6649 -6648 -6647 -6646 -6645 -6644 -6643 -6642 -6641 -6640 -6639 -6638 -6637 -6636 -6635 -6634 -6633 -6632 -6631 -6630 -6629 -6628 -6627 -6626 -6625 -6624 -6623 -6622 -6621 -6620 -6619 -6618 -6617 -6616 -6615 -6614 -6613 -6612 -6611 -6610 -6609 -6608 -6607 -6606 -6605 -6604 -6603 -6602 -6601 -6600 -6599 -6598 -6597 -6596 -6595 -6594 -6593 -6592 -6591 -6590 -6589 -6588 -6587 -6586 -6585 -6584 -6583 -6582 -6581 -6580 -6579 -6578 -6577 -6576 -6575 -6574 -6573 -6572 -6571 -6570 -6569 -6568 -6567 -6566 -6565 -6564 -6563 -6562 -6561 -6560 -6559 -6558 -6557 -6556 -6555 -6554 -6553 -6552 -6551 -6550 -6549 -6548 -6547 -6546 -6545 -6544 -6543 -6542 -6541 -6540 -6539 -6538 -6537 -6536 -6535 -6534 -6533 -6532 -6531 -6530 -6529 -6528 -6527 -6526 -6525 -6524 -6523 -6522 -6521 -6520 -6519 -6518 -6517 -6516 -6515 -6514 -6513 -6512 -6511 -6510 -6509 -6508 -6507 -6506 -6505 -6504 -6503 -6502 -6501 -6500 -6499 -6498 -6497 -6496 -6495 -6494 -6493 -6492 -6491 -6490 -6489 -6488 -6487 -6486 -6485 -6484 -6483 -6482 -6481 -6480 -6479 -6478 -6477 -6476 -6475 -6474 -6473 -6472 -6471 -6470 -6469 -6468 -6467 -6466 -6465 -6464 -6463 -6462 -6461 -6460 -6459 -6458 -6457 -6456 -6455 -6454 -6453 -6452 -6451 -6450 -6449 -6448 -6447 -6446 -6445 -6444 -6443 -6442 -6441 -6440 -6439 -6438 -6437 -6436 -6435 -6434 -6433 -6432 -6431 -6430 -6429 -6428 -6427 -6426 -6425 -6424 -6423 -6422 -6421 -6420 -6419 -6418 -6417 -6416 -6415 -6414 -6413 -6412 -6411 -6410 -6409 -6408 -6407 -6406 -6405 -6404 -6403 -6402 -6401 -6400 -6399 -6398 -6397 -6396 -6395 -6394 -6393 -6392 -6391 -6390 -6389 -6388 -6387 -6386 -6385 -6384 -6383 -6382 -6381 -6380 -6379 -6378 -6377 -6376 -6375 -6374 -6373 -6372 -6371 -6370 -6369 -6368 -6367 -6366 -6365 -6364 -6363 -6362 -6361 -6360 -6359 -6358 -6357 -6356 -6355 -6354 -6353 -6352 -6351 -6350 -6349 -6348 -6347 -6346 -6345 -6344 -6343 -6342 -6341 -6340 -6339 -6338 -6337 -6336 -6335 -6334 -6333 -6332 -6331 -6330 -6329 -6328 -6327 -6326 -6325 -6324 -6323 -6322 -6321 -6320 -6319 -6318 -6317 -6316 -6315 -6314 -6313 -6312 -6311 -6310 -6309 -6308 -6307 -6306 -6305 -6304 -6303 -6302 -6301 -6300 -6299 -6298 -6297 -6296 -6295 -6294 -6293 -6292 -6291 -6290 -6289 -6288 -6287 -6286 -6285 -6284 -6283 -6282 -6281 -6280 -6279 -6278 -6277 -6276 -6275 -6274 -6273 -6272 -6271 -6270 -6269 -6268 -6267 -6266 -6265 -6264 -6263 -6262 -6261 -6260 -6259 -6258 -6257 -6256 -6255 -6254 -6253 -6252 -6251 -6250 -6249 -6248 -6247 -6246 -6245 -6244 -6243 -6242 -6241 -6240 -6239 -6238 -6237 -6236 -6235 -6234 -6233 -6232 -6231 -6230 -6229 -6228 -6227 -6226 -6225 -6224 -6223 -6222 -6221 -6220 -6219 -6218 -6217 -6216 -6215 -6214 -6213 -6212 -6211 -6210 -6209 -6208 -6207 -6206 -6205 -6204 -6203 -6202 -6201 -6200 -6199 -6198 -6197 -6196 -6195 -6194 -6193 -6192 -6191 -6190 -6189 -6188 -6187 -6186 -6185 -6184 -6183 -6182 -6181 -6180 -6179 -6178 -6177 -6176 -6175 -6174 -6173 -6172 -6171 -6170 -6169 -6168 -6167 -6166 -6165 -6164 -6163 -6162 -6161 -6160 -6159 -6158 -6157 -6156 -6155 -6154 -6153 -6152 -6151 -6150 -6149 -6148 -6147 -6146 -6145 -6144 -6143 -6142 -6141 -6140 -6139 -6138 -6137 -6136 -6135 -6134 -6133 -6132 -6131 -6130 -6129 -6128 -6127 -6126 -6125 -6124 -6123 -6122 -6121 -6120 -6119 -6118 -6117 -6116 -6115 -6114 -6113 -6112 -6111 -6110 -6109 -6108 -6107 -6106 -6105 -6104 -6103 -6102 -6101 -6100 -6099 -6098 -6097 -6096 -6095 -6094 -6093 -6092 -6091 -6090 -6089 -6088 -6087 -6086 -6085 -6084 -6083 -6082 -6081 -6080 -6079 -6078 -6077 -6076 -6075 -6074 -6073 -6072 -6071 -6070 -6069 -6068 -6067 -6066 -6065 -6064 -6063 -6062 -6061 -6060 -6059 -6058 -6057 -6056 -6055 -6054 -6053 -6052 -6051 -6050 -6049 -6048 -6047 -6046 -6045 -6044 -6043 -6042 -6041 -6040 -6039 -6038 -6037 -6036 -6035 -6034 -6033 -6032 -6031 -6030 -6029 -6028 -6027 -6026 -6025 -6024 -6023 -6022 -6021 -6020 -6019 -6018 -6017 -6016 -6015 -6014 -6013 -6012 -6011 -6010 -6009 -6008 -6007 -6006 -6005 -6004 -6003 -6002 -6001 -6000 -5999 -5998 -5997 -5996 -5995 -5994 -5993 -5992 -5991 -5990 -5989 -5988 -5987 -5986 -5985 -5984 -5983 -5982 -5981 -5980 -5979 -5978 -5977 -5976 -5975 -5974 -5973 -5972 -5971 -5970 -5969 -5968 -5967 -5966 -5965 -5964 -5963 -5962 -5961 -5960 -5959 -5958 -5957 -5956 -5955 -5954 -5953 -5952 -5951 -5950 -5949 -5948 -5947 -5946 -5945 -5944 -5943 -5942 -5941 -5940 -5939 -5938 -5937 -5936 -5935 -5934 -5933 -5932 -5931 -5930 -5929 -5928 -5927 -5926 -5925 -5924 -5923 -5922 -5921 -5920 -5919 -5918 -5917 -5916 -5915 -5914 -5913 -5912 -5911 -5910 -5909 -5908 -5907 -5906 -5905 -5904 -5903 -5902 -5901 -5900 -5899 -5898 -5897 -5896 -5895 -5894 -5893 -5892 -5891 -5890 -5889 -5888 -5887 -5886 -5885 -5884 -5883 -5882 -5881 -5880 -5879 -5878 -5877 -5876 -5875 -5874 -5873 -5872 -5871 -5870 -5869 -5868 -5867 -5866 -5865 -5864 -5863 -5862 -5861 -5860 -5859 -5858 -5857 -5856 -5855 -5854 -5853 -5852 -5851 -5850 -5849 -5848 -5847 -5846 -5845 -5844 -5843 -5842 -5841 -5840 -5839 -5838 -5837 -5836 -5835 -5834 -5833 -5832 -5831 -5830 -5829 -5828 -5827 -5826 -5825 -5824 -5823 -5822 -5821 -5820 -5819 -5818 -5817 -5816 -5815 -5814 -5813 -5812 -5811 -5810 -5809 -5808 -5807 -5806 -5805 -5804 -5803 -5802 -5801 -5800 -5799 -5798 -5797 -5796 -5795 -5794 -5793 -5792 -5791 -5790 -5789 -5788 -5787 -5786 -5785 -5784 -5783 -5782 -5781 -5780 -5779 -5778 -5777 -5776 -5775 -5774 -5773 -5772 -5771 -5770 -5769 -5768 -5767 -5766 -5765 -5764 -5763 -5762 -5761 -5760 -5759 -5758 -5757 -5756 -5755 -5754 -5753 -5752 -5751 -5750 -5749 -5748 -5747 -5746 -5745 -5744 -5743 -5742 -5741 -5740 -5739 -5738 -5737 -5736 -5735 -5734 -5733 -5732 -5731 -5730 -5729 -5728 -5727 -5726 -5725 -5724 -5723 -5722 -5721 -5720 -5719 -5718 -5717 -5716 -5715 -5714 -5713 -5712 -5711 -5710 -5709 -5708 -5707 -5706 -5705 -5704 -5703 -5702 -5701 -5700 -5699 -5698 -5697 -5696 -5695 -5694 -5693 -5692 -5691 -5690 -5689 -5688 -5687 -5686 -5685 -5684 -5683 -5682 -5681 -5680 -5679 -5678 -5677 -5676 -5675 -5674 -5673 -5672 -5671 -5670 -5669 -5668 -5667 -5666 -5665 -5664 -5663 -5662 -5661 -5660 -5659 -5658 -5657 -5656 -5655 -5654 -5653 -5652 -5651 -5650 -5649 -5648 -5647 -5646 -5645 -5644 -5643 -5642 -5641 -5640 -5639 -5638 -5637 -5636 -5635 -5634 -5633 -5632 -5631 -5630 -5629 -5628 -5627 -5626 -5625 -5624 -5623 -5622 -5621 -5620 -5619 -5618 -5617 -5616 -5615 -5614 -5613 -5612 -5611 -5610 -5609 -5608 -5607 -5606 -5605 -5604 -5603 -5602 -5601 -5600 -5599 -5598 -5597 -5596 -5595 -5594 -5593 -5592 -5591 -5590 -5589 -5588 -5587 -5586 -5585 -5584 -5583 -5582 -5581 -5580 -5579 -5578 -5577 -5576 -5575 -5574 -5573 -5572 -5571 -5570 -5569 -5568 -5567 -5566 -5565 -5564 -5563 -5562 -5561 -5560 -5559 -5558 -5557 -5556 -5555 -5554 -5553 -5552 -5551 -5550 -5549 -5548 -5547 -5546 -5545 -5544 -5543 -5542 -5541 -5540 -5539 -5538 -5537 -5536 -5535 -5534 -5533 -5532 -5531 -5530 -5529 -5528 -5527 -5526 -5525 -5524 -5523 -5522 -5521 -5520 -5519 -5518 -5517 -5516 -5515 -5514 -5513 -5512 -5511 -5510 -5509 -5508 -5507 -5506 -5505 -5504 -5503 -5502 -5501 -5500 -5499 -5498 -5497 -5496 -5495 -5494 -5493 -5492 -5491 -5490 -5489 -5488 -5487 -5486 -5485 -5484 -5483 -5482 -5481 -5480 -5479 -5478 -5477 -5476 -5475 -5474 -5473 -5472 -5471 -5470 -5469 -5468 -5467 -5466 -5465 -5464 -5463 -5462 -5461 -5460 -5459 -5458 -5457 -5456 -5455 -5454 -5453 -5452 -5451 -5450 -5449 -5448 -5447 -5446 -5445 -5444 -5443 -5442 -5441 -5440 -5439 -5438 -5437 -5436 -5435 -5434 -5433 -5432 -5431 -5430 -5429 -5428 -5427 -5426 -5425 -5424 -5423 -5422 -5421 -5420 -5419 -5418 -5417 -5416 -5415 -5414 -5413 -5412 -5411 -5410 -5409 -5408 -5407 -5406 -5405 -5404 -5403 -5402 -5401 -5400 -5399 -5398 -5397 -5396 -5395 -5394 -5393 -5392 -5391 -5390 -5389 -5388 -5387 -5386 -5385 -5384 -5383 -5382 -5381 -5380 -5379 -5378 -5377 -5376 -5375 -5374 -5373 -5372 -5371 -5370 -5369 -5368 -5367 -5366 -5365 -5364 -5363 -5362 -5361 -5360 -5359 -5358 -5357 -5356 -5355 -5354 -5353 -5352 -5351 -5350 -5349 -5348 -5347 -5346 -5345 -5344 -5343 -5342 -5341 -5340 -5339 -5338 -5337 -5336 -5335 -5334 -5333 -5332 -5331 -5330 -5329 -5328 -5327 -5326 -5325 -5324 -5323 -5322 -5321 -5320 -5319 -5318 -5317 -5316 -5315 -5314 -5313 -5312 -5311 -5310 -5309 -5308 -5307 -5306 -5305 -5304 -5303 -5302 -5301 -5300 -5299 -5298 -5297 -5296 -5295 -5294 -5293 -5292 -5291 -5290 -5289 -5288 -5287 -5286 -5285 -5284 -5283 -5282 -5281 -5280 -5279 -5278 -5277 -5276 -5275 -5274 -5273 -5272 -5271 -5270 -5269 -5268 -5267 -5266 -5265 -5264 -5263 -5262 -5261 -5260 -5259 -5258 -5257 -5256 -5255 -5254 -5253 -5252 -5251 -5250 -5249 -5248 -5247 -5246 -5245 -5244 -5243 -5242 -5241 -5240 -5239 -5238 -5237 -5236 -5235 -5234 -5233 -5232 -5231 -5230 -5229 -5228 -5227 -5226 -5225 -5224 -5223 -5222 -5221 -5220 -5219 -5218 -5217 -5216 -5215 -5214 -5213 -5212 -5211 -5210 -5209 -5208 -5207 -5206 -5205 -5204 -5203 -5202 -5201 -5200 -5199 -5198 -5197 -5196 -5195 -5194 -5193 -5192 -5191 -5190 -5189 -5188 -5187 -5186 -5185 -5184 -5183 -5182 -5181 -5180 -5179 -5178 -5177 -5176 -5175 -5174 -5173 -5172 -5171 -5170 -5169 -5168 -5167 -5166 -5165 -5164 -5163 -5162 -5161 -5160 -5159 -5158 -5157 -5156 -5155 -5154 -5153 -5152 -5151 -5150 -5149 -5148 -5147 -5146 -5145 -5144 -5143 -5142 -5141 -5140 -5139 -5138 -5137 -5136 -5135 -5134 -5133 -5132 -5131 -5130 -5129 -5128 -5127 -5126 -5125 -5124 -5123 -5122 -5121 -5120 -5119 -5118 -5117 -5116 -5115 -5114 -5113 -5112 -5111 -5110 -5109 -5108 -5107 -5106 -5105 -5104 -5103 -5102 -5101 -5100 -5099 -5098 -5097 -5096 -5095 -5094 -5093 -5092 -5091 -5090 -5089 -5088 -5087 -5086 -5085 -5084 -5083 -5082 -5081 -5080 -5079 -5078 -5077 -5076 -5075 -5074 -5073 -5072 -5071 -5070 -5069 -5068 -5067 -5066 -5065 -5064 -5063 -5062 -5061 -5060 -5059 -5058 -5057 -5056 -5055 -5054 -5053 -5052 -5051 -5050 -5049 -5048 -5047 -5046 -5045 -5044 -5043 -5042 -5041 -5040 -5039 -5038 -5037 -5036 -5035 -5034 -5033 -5032 -5031 -5030 -5029 -5028 -5027 -5026 -5025 -5024 -5023 -5022 -5021 -5020 -5019 -5018 -5017 -5016 -5015 -5014 -5013 -5012 -5011 -5010 -5009 -5008 -5007 -5006 -5005 -5004 -5003 -5002 -5001 -5000 -4999 -4998 -4997 -4996 -4995 -4994 -4993 -4992 -4991 -4990 -4989 -4988 -4987 -4986 -4985 -4984 -4983 -4982 -4981 -4980 -4979 -4978 -4977 -4976 -4975 -4974 -4973 -4972 -4971 -4970 -4969 -4968 -4967 -4966 -4965 -4964 -4963 -4962 -4961 -4960 -4959 -4958 -4957 -4956 -4955 -4954 -4953 -4952 -4951 -4950 -4949 -4948 -4947 -4946 -4945 -4944 -4943 -4942 -4941 -4940 -4939 -4938 -4937 -4936 -4935 -4934 -4933 -4932 -4931 -4930 -4929 -4928 -4927 -4926 -4925 -4924 -4923 -4922 -4921 -4920 -4919 -4918 -4917 -4916 -4915 -4914 -4913 -4912 -4911 -4910 -4909 -4908 -4907 -4906 -4905 -4904 -4903 -4902 -4901 -4900 -4899 -4898 -4897 -4896 -4895 -4894 -4893 -4892 -4891 -4890 -4889 -4888 -4887 -4886 -4885 -4884 -4883 -4882 -4881 -4880 -4879 -4878 -4877 -4876 -4875 -4874 -4873 -4872 -4871 -4870 -4869 -4868 -4867 -4866 -4865 -4864 -4863 -4862 -4861 -4860 -4859 -4858 -4857 -4856 -4855 -4854 -4853 -4852 -4851 -4850 -4849 -4848 -4847 -4846 -4845 -4844 -4843 -4842 -4841 -4840 -4839 -4838 -4837 -4836 -4835 -4834 -4833 -4832 -4831 -4830 -4829 -4828 -4827 -4826 -4825 -4824 -4823 -4822 -4821 -4820 -4819 -4818 -4817 -4816 -4815 -4814 -4813 -4812 -4811 -4810 -4809 -4808 -4807 -4806 -4805 -4804 -4803 -4802 -4801 -4800 -4799 -4798 -4797 -4796 -4795 -4794 -4793 -4792 -4791 -4790 -4789 -4788 -4787 -4786 -4785 -4784 -4783 -4782 -4781 -4780 -4779 -4778 -4777 -4776 -4775 -4774 -4773 -4772 -4771 -4770 -4769 -4768 -4767 -4766 -4765 -4764 -4763 -4762 -4761 -4760 -4759 -4758 -4757 -4756 -4755 -4754 -4753 -4752 -4751 -4750 -4749 -4748 -4747 -4746 -4745 -4744 -4743 -4742 -4741 -4740 -4739 -4738 -4737 -4736 -4735 -4734 -4733 -4732 -4731 -4730 -4729 -4728 -4727 -4726 -4725 -4724 -4723 -4722 -4721 -4720 -4719 -4718 -4717 -4716 -4715 -4714 -4713 -4712 -4711 -4710 -4709 -4708 -4707 -4706 -4705 -4704 -4703 -4702 -4701 -4700 -4699 -4698 -4697 -4696 -4695 -4694 -4693 -4692 -4691 -4690 -4689 -4688 -4687 -4686 -4685 -4684 -4683 -4682 -4681 -4680 -4679 -4678 -4677 -4676 -4675 -4674 -4673 -4672 -4671 -4670 -4669 -4668 -4667 -4666 -4665 -4664 -4663 -4662 -4661 -4660 -4659 -4658 -4657 -4656 -4655 -4654 -4653 -4652 -4651 -4650 -4649 -4648 -4647 -4646 -4645 -4644 -4643 -4642 -4641 -4640 -4639 -4638 -4637 -4636 -4635 -4634 -4633 -4632 -4631 -4630 -4629 -4628 -4627 -4626 -4625 -4624 -4623 -4622 -4621 -4620 -4619 -4618 -4617 -4616 -4615 -4614 -4613 -4612 -4611 -4610 -4609 -4608 -4607 -4606 -4605 -4604 -4603 -4602 -4601 -4600 -4599 -4598 -4597 -4596 -4595 -4594 -4593 -4592 -4591 -4590 -4589 -4588 -4587 -4586 -4585 -4584 -4583 -4582 -4581 -4580 -4579 -4578 -4577 -4576 -4575 -4574 -4573 -4572 -4571 -4570 -4569 -4568 -4567 -4566 -4565 -4564 -4563 -4562 -4561 -4560 -4559 -4558 -4557 -4556 -4555 -4554 -4553 -4552 -4551 -4550 -4549 -4548 -4547 -4546 -4545 -4544 -4543 -4542 -4541 -4540 -4539 -4538 -4537 -4536 -4535 -4534 -4533 -4532 -4531 -4530 -4529 -4528 -4527 -4526 -4525 -4524 -4523 -4522 -4521 -4520 -4519 -4518 -4517 -4516 -4515 -4514 -4513 -4512 -4511 -4510 -4509 -4508 -4507 -4506 -4505 -4504 -4503 -4502 -4501 -4500 -4499 -4498 -4497 -4496 -4495 -4494 -4493 -4492 -4491 -4490 -4489 -4488 -4487 -4486 -4485 -4484 -4483 -4482 -4481 -4480 -4479 -4478 -4477 -4476 -4475 -4474 -4473 -4472 -4471 -4470 -4469 -4468 -4467 -4466 -4465 -4464 -4463 -4462 -4461 -4460 -4459 -4458 -4457 -4456 -4455 -4454 -4453 -4452 -4451 -4450 -4449 -4448 -4447 -4446 -4445 -4444 -4443 -4442 -4441 -4440 -4439 -4438 -4437 -4436 -4435 -4434 -4433 -4432 -4431 -4430 -4429 -4428 -4427 -4426 -4425 -4424 -4423 -4422 -4421 -4420 -4419 -4418 -4417 -4416 -4415 -4414 -4413 -4412 -4411 -4410 -4409 -4408 -4407 -4406 -4405 -4404 -4403 -4402 -4401 -4400 -4399 -4398 -4397 -4396 -4395 -4394 -4393 -4392 -4391 -4390 -4389 -4388 -4387 -4386 -4385 -4384 -4383 -4382 -4381 -4380 -4379 -4378 -4377 -4376 -4375 -4374 -4373 -4372 -4371 -4370 -4369 -4368 -4367 -4366 -4365 -4364 -4363 -4362 -4361 -4360 -4359 -4358 -4357 -4356 -4355 -4354 -4353 -4352 -4351 -4350 -4349 -4348 -4347 -4346 -4345 -4344 -4343 -4342 -4341 -4340 -4339 -4338 -4337 -4336 -4335 -4334 -4333 -4332 -4331 -4330 -4329 -4328 -4327 -4326 -4325 -4324 -4323 -4322 -4321 -4320 -4319 -4318 -4317 -4316 -4315 -4314 -4313 -4312 -4311 -4310 -4309 -4308 -4307 -4306 -4305 -4304 -4303 -4302 -4301 -4300 -4299 -4298 -4297 -4296 -4295 -4294 -4293 -4292 -4291 -4290 -4289 -4288 -4287 -4286 -4285 -4284 -4283 -4282 -4281 -4280 -4279 -4278 -4277 -4276 -4275 -4274 -4273 -4272 -4271 -4270 -4269 -4268 -4267 -4266 -4265 -4264 -4263 -4262 -4261 -4260 -4259 -4258 -4257 -4256 -4255 -4254 -4253 -4252 -4251 -4250 -4249 -4248 -4247 -4246 -4245 -4244 -4243 -4242 -4241 -4240 -4239 -4238 -4237 -4236 -4235 -4234 -4233 -4232 -4231 -4230 -4229 -4228 -4227 -4226 -4225 -4224 -4223 -4222 -4221 -4220 -4219 -4218 -4217 -4216 -4215 -4214 -4213 -4212 -4211 -4210 -4209 -4208 -4207 -4206 -4205 -4204 -4203 -4202 -4201 -4200 -4199 -4198 -4197 -4196 -4195 -4194 -4193 -4192 -4191 -4190 -4189 -4188 -4187 -4186 -4185 -4184 -4183 -4182 -4181 -4180 -4179 -4178 -4177 -4176 -4175 -4174 -4173 -4172 -4171 -4170 -4169 -4168 -4167 -4166 -4165 -4164 -4163 -4162 -4161 -4160 -4159 -4158 -4157 -4156 -4155 -4154 -4153 -4152 -4151 -4150 -4149 -4148 -4147 -4146 -4145 -4144 -4143 -4142 -4141 -4140 -4139 -4138 -4137 -4136 -4135 -4134 -4133 -4132 -4131 -4130 -4129 -4128 -4127 -4126 -4125 -4124 -4123 -4122 -4121 -4120 -4119 -4118 -4117 -4116 -4115 -4114 -4113 -4112 -4111 -4110 -4109 -4108 -4107 -4106 -4105 -4104 -4103 -4102 -4101 -4100 -4099 -4098 -4097 -4096 -4095 -4094 -4093 -4092 -4091 -4090 -4089 -4088 -4087 -4086 -4085 -4084 -4083 -4082 -4081 -4080 -4079 -4078 -4077 -4076 -4075 -4074 -4073 -4072 -4071 -4070 -4069 -4068 -4067 -4066 -4065 -4064 -4063 -4062 -4061 -4060 -4059 -4058 -4057 -4056 -4055 -4054 -4053 -4052 -4051 -4050 -4049 -4048 -4047 -4046 -4045 -4044 -4043 -4042 -4041 -4040 -4039 -4038 -4037 -4036 -4035 -4034 -4033 -4032 -4031 -4030 -4029 -4028 -4027 -4026 -4025 -4024 -4023 -4022 -4021 -4020 -4019 -4018 -4017 -4016 -4015 -4014 -4013 -4012 -4011 -4010 -4009 -4008 -4007 -4006 -4005 -4004 -4003 -4002 -4001 -4000 -3999 -3998 -3997 -3996 -3995 -3994 -3993 -3992 -3991 -3990 -3989 -3988 -3987 -3986 -3985 -3984 -3983 -3982 -3981 -3980 -3979 -3978 -3977 -3976 -3975 -3974 -3973 -3972 -3971 -3970 -3969 -3968 -3967 -3966 -3965 -3964 -3963 -3962 -3961 -3960 -3959 -3958 -3957 -3956 -3955 -3954 -3953 -3952 -3951 -3950 -3949 -3948 -3947 -3946 -3945 -3944 -3943 -3942 -3941 -3940 -3939 -3938 -3937 -3936 -3935 -3934 -3933 -3932 -3931 -3930 -3929 -3928 -3927 -3926 -3925 -3924 -3923 -3922 -3921 -3920 -3919 -3918 -3917 -3916 -3915 -3914 -3913 -3912 -3911 -3910 -3909 -3908 -3907 -3906 -3905 -3904 -3903 -3902 -3901 -3900 -3899 -3898 -3897 -3896 -3895 -3894 -3893 -3892 -3891 -3890 -3889 -3888 -3887 -3886 -3885 -3884 -3883 -3882 -3881 -3880 -3879 -3878 -3877 -3876 -3875 -3874 -3873 -3872 -3871 -3870 -3869 -3868 -3867 -3866 -3865 -3864 -3863 -3862 -3861 -3860 -3859 -3858 -3857 -3856 -3855 -3854 -3853 -3852 -3851 -3850 -3849 -3848 -3847 -3846 -3845 -3844 -3843 -3842 -3841 -3840 -3839 -3838 -3837 -3836 -3835 -3834 -3833 -3832 -3831 -3830 -3829 -3828 -3827 -3826 -3825 -3824 -3823 -3822 -3821 -3820 -3819 -3818 -3817 -3816 -3815 -3814 -3813 -3812 -3811 -3810 -3809 -3808 -3807 -3806 -3805 -3804 -3803 -3802 -3801 -3800 -3799 -3798 -3797 -3796 -3795 -3794 -3793 -3792 -3791 -3790 -3789 -3788 -3787 -3786 -3785 -3784 -3783 -3782 -3781 -3780 -3779 -3778 -3777 -3776 -3775 -3774 -3773 -3772 -3771 -3770 -3769 -3768 -3767 -3766 -3765 -3764 -3763 -3762 -3761 -3760 -3759 -3758 -3757 -3756 -3755 -3754 -3753 -3752 -3751 -3750 -3749 -3748 -3747 -3746 -3745 -3744 -3743 -3742 -3741 -3740 -3739 -3738 -3737 -3736 -3735 -3734 -3733 -3732 -3731 -3730 -3729 -3728 -3727 -3726 -3725 -3724 -3723 -3722 -3721 -3720 -3719 -3718 -3717 -3716 -3715 -3714 -3713 -3712 -3711 -3710 -3709 -3708 -3707 -3706 -3705 -3704 -3703 -3702 -3701 -3700 -3699 -3698 -3697 -3696 -3695 -3694 -3693 -3692 -3691 -3690 -3689 -3688 -3687 -3686 -3685 -3684 -3683 -3682 -3681 -3680 -3679 -3678 -3677 -3676 -3675 -3674 -3673 -3672 -3671 -3670 -3669 -3668 -3667 -3666 -3665 -3664 -3663 -3662 -3661 -3660 -3659 -3658 -3657 -3656 -3655 -3654 -3653 -3652 -3651 -3650 -3649 -3648 -3647 -3646 -3645 -3644 -3643 -3642 -3641 -3640 -3639 -3638 -3637 -3636 -3635 -3634 -3633 -3632 -3631 -3630 -3629 -3628 -3627 -3626 -3625 -3624 -3623 -3622 -3621 -3620 -3619 -3618 -3617 -3616 -3615 -3614 -3613 -3612 -3611 -3610 -3609 -3608 -3607 -3606 -3605 -3604 -3603 -3602 -3601 -3600 -3599 -3598 -3597 -3596 -3595 -3594 -3593 -3592 -3591 -3590 -3589 -3588 -3587 -3586 -3585 -3584 -3583 -3582 -3581 -3580 -3579 -3578 -3577 -3576 -3575 -3574 -3573 -3572 -3571 -3570 -3569 -3568 -3567 -3566 -3565 -3564 -3563 -3562 -3561 -3560 -3559 -3558 -3557 -3556 -3555 -3554 -3553 -3552 -3551 -3550 -3549 -3548 -3547 -3546 -3545 -3544 -3543 -3542 -3541 -3540 -3539 -3538 -3537 -3536 -3535 -3534 -3533 -3532 -3531 -3530 -3529 -3528 -3527 -3526 -3525 -3524 -3523 -3522 -3521 -3520 -3519 -3518 -3517 -3516 -3515 -3514 -3513 -3512 -3511 -3510 -3509 -3508 -3507 -3506 -3505 -3504 -3503 -3502 -3501 -3500 -3499 -3498 -3497 -3496 -3495 -3494 -3493 -3492 -3491 -3490 -3489 -3488 -3487 -3486 -3485 -3484 -3483 -3482 -3481 -3480 -3479 -3478 -3477 -3476 -3475 -3474 -3473 -3472 -3471 -3470 -3469 -3468 -3467 -3466 -3465 -3464 -3463 -3462 -3461 -3460 -3459 -3458 -3457 -3456 -3455 -3454 -3453 -3452 -3451 -3450 -3449 -3448 -3447 -3446 -3445 -3444 -3443 -3442 -3441 -3440 -3439 -3438 -3437 -3436 -3435 -3434 -3433 -3432 -3431 -3430 -3429 -3428 -3427 -3426 -3425 -3424 -3423 -3422 -3421 -3420 -3419 -3418 -3417 -3416 -3415 -3414 -3413 -3412 -3411 -3410 -3409 -3408 -3407 -3406 -3405 -3404 -3403 -3402 -3401 -3400 -3399 -3398 -3397 -3396 -3395 -3394 -3393 -3392 -3391 -3390 -3389 -3388 -3387 -3386 -3385 -3384 -3383 -3382 -3381 -3380 -3379 -3378 -3377 -3376 -3375 -3374 -3373 -3372 -3371 -3370 -3369 -3368 -3367 -3366 -3365 -3364 -3363 -3362 -3361 -3360 -3359 -3358 -3357 -3356 -3355 -3354 -3353 -3352 -3351 -3350 -3349 -3348 -3347 -3346 -3345 -3344 -3343 -3342 -3341 -3340 -3339 -3338 -3337 -3336 -3335 -3334 -3333 -3332 -3331 -3330 -3329 -3328 -3327 -3326 -3325 -3324 -3323 -3322 -3321 -3320 -3319 -3318 -3317 -3316 -3315 -3314 -3313 -3312 -3311 -3310 -3309 -3308 -3307 -3306 -3305 -3304 -3303 -3302 -3301 -3300 -3299 -3298 -3297 -3296 -3295 -3294 -3293 -3292 -3291 -3290 -3289 -3288 -3287 -3286 -3285 -3284 -3283 -3282 -3281 -3280 -3279 -3278 -3277 -3276 -3275 -3274 -3273 -3272 -3271 -3270 -3269 -3268 -3267 -3266 -3265 -3264 -3263 -3262 -3261 -3260 -3259 -3258 -3257 -3256 -3255 -3254 -3253 -3252 -3251 -3250 -3249 -3248 -3247 -3246 -3245 -3244 -3243 -3242 -3241 -3240 -3239 -3238 -3237 -3236 -3235 -3234 -3233 -3232 -3231 -3230 -3229 -3228 -3227 -3226 -3225 -3224 -3223 -3222 -3221 -3220 -3219 -3218 -3217 -3216 -3215 -3214 -3213 -3212 -3211 -3210 -3209 -3208 -3207 -3206 -3205 -3204 -3203 -3202 -3201 -3200 -3199 -3198 -3197 -3196 -3195 -3194 -3193 -3192 -3191 -3190 -3189 -3188 -3187 -3186 -3185 -3184 -3183 -3182 -3181 -3180 -3179 -3178 -3177 -3176 -3175 -3174 -3173 -3172 -3171 -3170 -3169 -3168 -3167 -3166 -3165 -3164 -3163 -3162 -3161 -3160 -3159 -3158 -3157 -3156 -3155 -3154 -3153 -3152 -3151 -3150 -3149 -3148 -3147 -3146 -3145 -3144 -3143 -3142 -3141 -3140 -3139 -3138 -3137 -3136 -3135 -3134 -3133 -3132 -3131 -3130 -3129 -3128 -3127 -3126 -3125 -3124 -3123 -3122 -3121 -3120 -3119 -3118 -3117 -3116 -3115 -3114 -3113 -3112 -3111 -3110 -3109 -3108 -3107 -3106 -3105 -3104 -3103 -3102 -3101 -3100 -3099 -3098 -3097 -3096 -3095 -3094 -3093 -3092 -3091 -3090 -3089 -3088 -3087 -3086 -3085 -3084 -3083 -3082 -3081 -3080 -3079 -3078 -3077 -3076 -3075 -3074 -3073 -3072 -3071 -3070 -3069 -3068 -3067 -3066 -3065 -3064 -3063 -3062 -3061 -3060 -3059 -3058 -3057 -3056 -3055 -3054 -3053 -3052 -3051 -3050 -3049 -3048 -3047 -3046 -3045 -3044 -3043 -3042 -3041 -3040 -3039 -3038 -3037 -3036 -3035 -3034 -3033 -3032 -3031 -3030 -3029 -3028 -3027 -3026 -3025 -3024 -3023 -3022 -3021 -3020 -3019 -3018 -3017 -3016 -3015 -3014 -3013 -3012 -3011 -3010 -3009 -3008 -3007 -3006 -3005 -3004 -3003 -3002 -3001 -3000 -2999 -2998 -2997 -2996 -2995 -2994 -2993 -2992 -2991 -2990 -2989 -2988 -2987 -2986 -2985 -2984 -2983 -2982 -2981 -2980 -2979 -2978 -2977 -2976 -2975 -2974 -2973 -2972 -2971 -2970 -2969 -2968 -2967 -2966 -2965 -2964 -2963 -2962 -2961 -2960 -2959 -2958 -2957 -2956 -2955 -2954 -2953 -2952 -2951 -2950 -2949 -2948 -2947 -2946 -2945 -2944 -2943 -2942 -2941 -2940 -2939 -2938 -2937 -2936 -2935 -2934 -2933 -2932 -2931 -2930 -2929 -2928 -2927 -2926 -2925 -2924 -2923 -2922 -2921 -2920 -2919 -2918 -2917 -2916 -2915 -2914 -2913 -2912 -2911 -2910 -2909 -2908 -2907 -2906 -2905 -2904 -2903 -2902 -2901 -2900 -2899 -2898 -2897 -2896 -2895 -2894 -2893 -2892 -2891 -2890 -2889 -2888 -2887 -2886 -2885 -2884 -2883 -2882 -2881 -2880 -2879 -2878 -2877 -2876 -2875 -2874 -2873 -2872 -2871 -2870 -2869 -2868 -2867 -2866 -2865 -2864 -2863 -2862 -2861 -2860 -2859 -2858 -2857 -2856 -2855 -2854 -2853 -2852 -2851 -2850 -2849 -2848 -2847 -2846 -2845 -2844 -2843 -2842 -2841 -2840 -2839 -2838 -2837 -2836 -2835 -2834 -2833 -2832 -2831 -2830 -2829 -2828 -2827 -2826 -2825 -2824 -2823 -2822 -2821 -2820 -2819 -2818 -2817 -2816 -2815 -2814 -2813 -2812 -2811 -2810 -2809 -2808 -2807 -2806 -2805 -2804 -2803 -2802 -2801 -2800 -2799 -2798 -2797 -2796 -2795 -2794 -2793 -2792 -2791 -2790 -2789 -2788 -2787 -2786 -2785 -2784 -2783 -2782 -2781 -2780 -2779 -2778 -2777 -2776 -2775 -2774 -2773 -2772 -2771 -2770 -2769 -2768 -2767 -2766 -2765 -2764 -2763 -2762 -2761 -2760 -2759 -2758 -2757 -2756 -2755 -2754 -2753 -2752 -2751 -2750 -2749 -2748 -2747 -2746 -2745 -2744 -2743 -2742 -2741 -2740 -2739 -2738 -2737 -2736 -2735 -2734 -2733 -2732 -2731 -2730 -2729 -2728 -2727 -2726 -2725 -2724 -2723 -2722 -2721 -2720 -2719 -2718 -2717 -2716 -2715 -2714 -2713 -2712 -2711 -2710 -2709 -2708 -2707 -2706 -2705 -2704 -2703 -2702 -2701 -2700 -2699 -2698 -2697 -2696 -2695 -2694 -2693 -2692 -2691 -2690 -2689 -2688 -2687 -2686 -2685 -2684 -2683 -2682 -2681 -2680 -2679 -2678 -2677 -2676 -2675 -2674 -2673 -2672 -2671 -2670 -2669 -2668 -2667 -2666 -2665 -2664 -2663 -2662 -2661 -2660 -2659 -2658 -2657 -2656 -2655 -2654 -2653 -2652 -2651 -2650 -2649 -2648 -2647 -2646 -2645 -2644 -2643 -2642 -2641 -2640 -2639 -2638 -2637 -2636 -2635 -2634 -2633 -2632 -2631 -2630 -2629 -2628 -2627 -2626 -2625 -2624 -2623 -2622 -2621 -2620 -2619 -2618 -2617 -2616 -2615 -2614 -2613 -2612 -2611 -2610 -2609 -2608 -2607 -2606 -2605 -2604 -2603 -2602 -2601 -2600 -2599 -2598 -2597 -2596 -2595 -2594 -2593 -2592 -2591 -2590 -2589 -2588 -2587 -2586 -2585 -2584 -2583 -2582 -2581 -2580 -2579 -2578 -2577 -2576 -2575 -2574 -2573 -2572 -2571 -2570 -2569 -2568 -2567 -2566 -2565 -2564 -2563 -2562 -2561 -2560 -2559 -2558 -2557 -2556 -2555 -2554 -2553 -2552 -2551 -2550 -2549 -2548 -2547 -2546 -2545 -2544 -2543 -2542 -2541 -2540 -2539 -2538 -2537 -2536 -2535 -2534 -2533 -2532 -2531 -2530 -2529 -2528 -2527 -2526 -2525 -2524 -2523 -2522 -2521 -2520 -2519 -2518 -2517 -2516 -2515 -2514 -2513 -2512 -2511 -2510 -2509 -2508 -2507 -2506 -2505 -2504 -2503 -2502 -2501 -2500 -2499 -2498 -2497 -2496 -2495 -2494 -2493 -2492 -2491 -2490 -2489 -2488 -2487 -2486 -2485 -2484 -2483 -2482 -2481 -2480 -2479 -2478 -2477 -2476 -2475 -2474 -2473 -2472 -2471 -2470 -2469 -2468 -2467 -2466 -2465 -2464 -2463 -2462 -2461 -2460 -2459 -2458 -2457 -2456 -2455 -2454 -2453 -2452 -2451 -2450 -2449 -2448 -2447 -2446 -2445 -2444 -2443 -2442 -2441 -2440 -2439 -2438 -2437 -2436 -2435 -2434 -2433 -2432 -2431 -2430 -2429 -2428 -2427 -2426 -2425 -2424 -2423 -2422 -2421 -2420 -2419 -2418 -2417 -2416 -2415 -2414 -2413 -2412 -2411 -2410 -2409 -2408 -2407 -2406 -2405 -2404 -2403 -2402 -2401 -2400 -2399 -2398 -2397 -2396 -2395 -2394 -2393 -2392 -2391 -2390 -2389 -2388 -2387 -2386 -2385 -2384 -2383 -2382 -2381 -2380 -2379 -2378 -2377 -2376 -2375 -2374 -2373 -2372 -2371 -2370 -2369 -2368 -2367 -2366 -2365 -2364 -2363 -2362 -2361 -2360 -2359 -2358 -2357 -2356 -2355 -2354 -2353 -2352 -2351 -2350 -2349 -2348 -2347 -2346 -2345 -2344 -2343 -2342 -2341 -2340 -2339 -2338 -2337 -2336 -2335 -2334 -2333 -2332 -2331 -2330 -2329 -2328 -2327 -2326 -2325 -2324 -2323 -2322 -2321 -2320 -2319 -2318 -2317 -2316 -2315 -2314 -2313 -2312 -2311 -2310 -2309 -2308 -2307 -2306 -2305 -2304 -2303 -2302 -2301 -2300 -2299 -2298 -2297 -2296 -2295 -2294 -2293 -2292 -2291 -2290 -2289 -2288 -2287 -2286 -2285 -2284 -2283 -2282 -2281 -2280 -2279 -2278 -2277 -2276 -2275 -2274 -2273 -2272 -2271 -2270 -2269 -2268 -2267 -2266 -2265 -2264 -2263 -2262 -2261 -2260 -2259 -2258 -2257 -2256 -2255 -2254 -2253 -2252 -2251 -2250 -2249 -2248 -2247 -2246 -2245 -2244 -2243 -2242 -2241 -2240 -2239 -2238 -2237 -2236 -2235 -2234 -2233 -2232 -2231 -2230 -2229 -2228 -2227 -2226 -2225 -2224 -2223 -2222 -2221 -2220 -2219 -2218 -2217 -2216 -2215 -2214 -2213 -2212 -2211 -2210 -2209 -2208 -2207 -2206 -2205 -2204 -2203 -2202 -2201 -2200 -2199 -2198 -2197 -2196 -2195 -2194 -2193 -2192 -2191 -2190 -2189 -2188 -2187 -2186 -2185 -2184 -2183 -2182 -2181 -2180 -2179 -2178 -2177 -2176 -2175 -2174 -2173 -2172 -2171 -2170 -2169 -2168 -2167 -2166 -2165 -2164 -2163 -2162 -2161 -2160 -2159 -2158 -2157 -2156 -2155 -2154 -2153 -2152 -2151 -2150 -2149 -2148 -2147 -2146 -2145 -2144 -2143 -2142 -2141 -2140 -2139 -2138 -2137 -2136 -2135 -2134 -2133 -2132 -2131 -2130 -2129 -2128 -2127 -2126 -2125 -2124 -2123 -2122 -2121 -2120 -2119 -2118 -2117 -2116 -2115 -2114 -2113 -2112 -2111 -2110 -2109 -2108 -2107 -2106 -2105 -2104 -2103 -2102 -2101 -2100 -2099 -2098 -2097 -2096 -2095 -2094 -2093 -2092 -2091 -2090 -2089 -2088 -2087 -2086 -2085 -2084 -2083 -2082 -2081 -2080 -2079 -2078 -2077 -2076 -2075 -2074 -2073 -2072 -2071 -2070 -2069 -2068 -2067 -2066 -2065 -2064 -2063 -2062 -2061 -2060 -2059 -2058 -2057 -2056 -2055 -2054 -2053 -2052 -2051 -2050 -2049 -2048 -2047 -2046 -2045 -2044 -2043 -2042 -2041 -2040 -2039 -2038 -2037 -2036 -2035 -2034 -2033 -2032 -2031 -2030 -2029 -2028 -2027 -2026 -2025 -2024 -2023 -2022 -2021 -2020 -2019 -2018 -2017 -2016 -2015 -2014 -2013 -2012 -2011 -2010 -2009 -2008 -2007 -2006 -2005 -2004 -2003 -2002 -2001 -2000 -1999 -1998 -1997 -1996 -1995 -1994 -1993 -1992 -1991 -1990 -1989 -1988 -1987 -1986 -1985 -1984 -1983 -1982 -1981 -1980 -1979 -1978 -1977 -1976 -1975 -1974 -1973 -1972 -1971 -1970 -1969 -1968 -1967 -1966 -1965 -1964 -1963 -1962 -1961 -1960 -1959 -1958 -1957 -1956 -1955 -1954 -1953 -1952 -1951 -1950 -1949 -1948 -1947 -1946 -1945 -1944 -1943 -1942 -1941 -1940 -1939 -1938 -1937 -1936 -1935 -1934 -1933 -1932 -1931 -1930 -1929 -1928 -1927 -1926 -1925 -1924 -1923 -1922 -1921 -1920 -1919 -1918 -1917 -1916 -1915 -1914 -1913 -1912 -1911 -1910 -1909 -1908 -1907 -1906 -1905 -1904 -1903 -1902 -1901 -1900 -1899 -1898 -1897 -1896 -1895 -1894 -1893 -1892 -1891 -1890 -1889 -1888 -1887 -1886 -1885 -1884 -1883 -1882 -1881 -1880 -1879 -1878 -1877 -1876 -1875 -1874 -1873 -1872 -1871 -1870 -1869 -1868 -1867 -1866 -1865 -1864 -1863 -1862 -1861 -1860 -1859 -1858 -1857 -1856 -1855 -1854 -1853 -1852 -1851 -1850 -1849 -1848 -1847 -1846 -1845 -1844 -1843 -1842 -1841 -1840 -1839 -1838 -1837 -1836 -1835 -1834 -1833 -1832 -1831 -1830 -1829 -1828 -1827 -1826 -1825 -1824 -1823 -1822 -1821 -1820 -1819 -1818 -1817 -1816 -1815 -1814 -1813 -1812 -1811 -1810 -1809 -1808 -1807 -1806 -1805 -1804 -1803 -1802 -1801 -1800 -1799 -1798 -1797 -1796 -1795 -1794 -1793 -1792 -1791 -1790 -1789 -1788 -1787 -1786 -1785 -1784 -1783 -1782 -1781 -1780 -1779 -1778 -1777 -1776 -1775 -1774 -1773 -1772 -1771 -1770 -1769 -1768 -1767 -1766 -1765 -1764 -1763 -1762 -1761 -1760 -1759 -1758 -1757 -1756 -1755 -1754 -1753 -1752 -1751 -1750 -1749 -1748 -1747 -1746 -1745 -1744 -1743 -1742 -1741 -1740 -1739 -1738 -1737 -1736 -1735 -1734 -1733 -1732 -1731 -1730 -1729 -1728 -1727 -1726 -1725 -1724 -1723 -1722 -1721 -1720 -1719 -1718 -1717 -1716 -1715 -1714 -1713 -1712 -1711 -1710 -1709 -1708 -1707 -1706 -1705 -1704 -1703 -1702 -1701 -1700 -1699 -1698 -1697 -1696 -1695 -1694 -1693 -1692 -1691 -1690 -1689 -1688 -1687 -1686 -1685 -1684 -1683 -1682 -1681 -1680 -1679 -1678 -1677 -1676 -1675 -1674 -1673 -1672 -1671 -1670 -1669 -1668 -1667 -1666 -1665 -1664 -1663 -1662 -1661 -1660 -1659 -1658 -1657 -1656 -1655 -1654 -1653 -1652 -1651 -1650 -1649 -1648 -1647 -1646 -1645 -1644 -1643 -1642 -1641 -1640 -1639 -1638 -1637 -1636 -1635 -1634 -1633 -1632 -1631 -1630 -1629 -1628 -1627 -1626 -1625 -1624 -1623 -1622 -1621 -1620 -1619 -1618 -1617 -1616 -1615 -1614 -1613 -1612 -1611 -1610 -1609 -1608 -1607 -1606 -1605 -1604 -1603 -1602 -1601 -1600 -1599 -1598 -1597 -1596 -1595 -1594 -1593 -1592 -1591 -1590 -1589 -1588 -1587 -1586 -1585 -1584 -1583 -1582 -1581 -1580 -1579 -1578 -1577 -1576 -1575 -1574 -1573 -1572 -1571 -1570 -1569 -1568 -1567 -1566 -1565 -1564 -1563 -1562 -1561 -1560 -1559 -1558 -1557 -1556 -1555 -1554 -1553 -1552 -1551 -1550 -1549 -1548 -1547 -1546 -1545 -1544 -1543 -1542 -1541 -1540 -1539 -1538 -1537 -1536 -1535 -1534 -1533 -1532 -1531 -1530 -1529 -1528 -1527 -1526 -1525 -1524 -1523 -1522 -1521 -1520 -1519 -1518 -1517 -1516 -1515 -1514 -1513 -1512 -1511 -1510 -1509 -1508 -1507 -1506 -1505 -1504 -1503 -1502 -1501 -1500 -1499 -1498 -1497 -1496 -1495 -1494 -1493 -1492 -1491 -1490 -1489 -1488 -1487 -1486 -1485 -1484 -1483 -1482 -1481 -1480 -1479 -1478 -1477 -1476 -1475 -1474 -1473 -1472 -1471 -1470 -1469 -1468 -1467 -1466 -1465 -1464 -1463 -1462 -1461 -1460 -1459 -1458 -1457 -1456 -1455 -1454 -1453 -1452 -1451 -1450 -1449 -1448 -1447 -1446 -1445 -1444 -1443 -1442 -1441 -1440 -1439 -1438 -1437 -1436 -1435 -1434 -1433 -1432 -1431 -1430 -1429 -1428 -1427 -1426 -1425 -1424 -1423 -1422 -1421 -1420 -1419 -1418 -1417 -1416 -1415 -1414 -1413 -1412 -1411 -1410 -1409 -1408 -1407 -1406 -1405 -1404 -1403 -1402 -1401 -1400 -1399 -1398 -1397 -1396 -1395 -1394 -1393 -1392 -1391 -1390 -1389 -1388 -1387 -1386 -1385 -1384 -1383 -1382 -1381 -1380 -1379 -1378 -1377 -1376 -1375 -1374 -1373 -1372 -1371 -1370 -1369 -1368 -1367 -1366 -1365 -1364 -1363 -1362 -1361 -1360 -1359 -1358 -1357 -1356 -1355 -1354 -1353 -1352 -1351 -1350 -1349 -1348 -1347 -1346 -1345 -1344 -1343 -1342 -1341 -1340 -1339 -1338 -1337 -1336 -1335 -1334 -1333 -1332 -1331 -1330 -1329 -1328 -1327 -1326 -1325 -1324 -1323 -1322 -1321 -1320 -1319 -1318 -1317 -1316 -1315 -1314 -1313 -1312 -1311 -1310 -1309 -1308 -1307 -1306 -1305 -1304 -1303 -1302 -1301 -1300 -1299 -1298 -1297 -1296 -1295 -1294 -1293 -1292 -1291 -1290 -1289 -1288 -1287 -1286 -1285 -1284 -1283 -1282 -1281 -1280 -1279 -1278 -1277 -1276 -1275 -1274 -1273 -1272 -1271 -1270 -1269 -1268 -1267 -1266 -1265 -1264 -1263 -1262 -1261 -1260 -1259 -1258 -1257 -1256 -1255 -1254 -1253 -1252 -1251 -1250 -1249 -1248 -1247 -1246 -1245 -1244 -1243 -1242 -1241 -1240 -1239 -1238 -1237 -1236 -1235 -1234 -1233 -1232 -1231 -1230 -1229 -1228 -1227 -1226 -1225 -1224 -1223 -1222 -1221 -1220 -1219 -1218 -1217 -1216 -1215 -1214 -1213 -1212 -1211 -1210 -1209 -1208 -1207 -1206 -1205 -1204 -1203 -1202 -1201 -1200 -1199 -1198 -1197 -1196 -1195 -1194 -1193 -1192 -1191 -1190 -1189 -1188 -1187 -1186 -1185 -1184 -1183 -1182 -1181 -1180 -1179 -1178 -1177 -1176 -1175 -1174 -1173 -1172 -1171 -1170 -1169 -1168 -1167 -1166 -1165 -1164 -1163 -1162 -1161 -1160 -1159 -1158 -1157 -1156 -1155 -1154 -1153 -1152 -1151 -1150 -1149 -1148 -1147 -1146 -1145 -1144 -1143 -1142 -1141 -1140 -1139 -1138 -1137 -1136 -1135 -1134 -1133 -1132 -1131 -1130 -1129 -1128 -1127 -1126 -1125 -1124 -1123 -1122 -1121 -1120 -1119 -1118 -1117 -1116 -1115 -1114 -1113 -1112 -1111 -1110 -1109 -1108 -1107 -1106 -1105 -1104 -1103 -1102 -1101 -1100 -1099 -1098 -1097 -1096 -1095 -1094 -1093 -1092 -1091 -1090 -1089 -1088 -1087 -1086 -1085 -1084 -1083 -1082 -1081 -1080 -1079 -1078 -1077 -1076 -1075 -1074 -1073 -1072 -1071 -1070 -1069 -1068 -1067 -1066 -1065 -1064 -1063 -1062 -1061 -1060 -1059 -1058 -1057 -1056 -1055 -1054 -1053 -1052 -1051 -1050 -1049 -1048 -1047 -1046 -1045 -1044 -1043 -1042 -1041 -1040 -1039 -1038 -1037 -1036 -1035 -1034 -1033 -1032 -1031 -1030 -1029 -1028 -1027 -1026 -1025 -1024 -1023 -1022 -1021 -1020 -1019 -1018 -1017 -1016 -1015 -1014 -1013 -1012 -1011 -1010 -1009 -1008 -1007 -1006 -1005 -1004 -1003 -1002 -1001 -1000 -999 -998 -997 -996 -995 -994 -993 -992 -991 -990 -989 -988 -987 -986 -985 -984 -983 -982 -981 -980 -979 -978 -977 -976 -975 -974 -973 -972 -971 -970 -969 -968 -967 -966 -965 -964 -963 -962 -961 -960 -959 -958 -957 -956 -955 -954 -953 -952 -951 -950 -949 -948 -947 -946 -945 -944 -943 -942 -941 -940 -939 -938 -937 -936 -935 -934 -933 -932 -931 -930 -929 -928 -927 -926 -925 -924 -923 -922 -921 -920 -919 -918 -917 -916 -915 -914 -913 -912 -911 -910 -909 -908 -907 -906 -905 -904 -903 -902 -901 -900 -899 -898 -897 -896 -895 -894 -893 -892 -891 -890 -889 -888 -887 -886 -885 -884 -883 -882 -881 -880 -879 -878 -877 -876 -875 -874 -873 -872 -871 -870 -869 -868 -867 -866 -865 -864 -863 -862 -861 -860 -859 -858 -857 -856 -855 -854 -853 -852 -851 -850 -849 -848 -847 -846 -845 -844 -843 -842 -841 -840 -839 -838 -837 -836 -835 -834 -833 -832 -831 -830 -829 -828 -827 -826 -825 -824 -823 -822 -821 -820 -819 -818 -817 -816 -815 -814 -813 -812 -811 -810 -809 -808 -807 -806 -805 -804 -803 -802 -801 -800 -799 -798 -797 -796 -795 -794 -793 -792 -791 -790 -789 -788 -787 -786 -785 -784 -783 -782 -781 -780 -779 -778 -777 -776 -775 -774 -773 -772 -771 -770 -769 -768 -767 -766 -765 -764 -763 -762 -761 -760 -759 -758 -757 -756 -755 -754 -753 -752 -751 -750 -749 -748 -747 -746 -745 -744 -743 -742 -741 -740 -739 -738 -737 -736 -735 -734 -733 -732 -731 -730 -729 -728 -727 -726 -725 -724 -723 -722 -721 -720 -719 -718 -717 -716 -715 -714 -713 -712 -711 -710 -709 -708 -707 -706 -705 -704 -703 -702 -701 -700 -699 -698 -697 -696 -695 -694 -693 -692 -691 -690 -689 -688 -687 -686 -685 -684 -683 -682 -681 -680 -679 -678 -677 -676 -675 -674 -673 -672 -671 -670 -669 -668 -667 -666 -665 -664 -663 -662 -661 -660 -659 -658 -657 -656 -655 -654 -653 -652 -651 -650 -649 -648 -647 -646 -645 -644 -643 -642 -641 -640 -639 -638 -637 -636 -635 -634 -633 -632 -631 -630 -629 -628 -627 -626 -625 -624 -623 -622 -621 -620 -619 -618 -617 -616 -615 -614 -613 -612 -611 -610 -609 -608 -607 -606 -605 -604 -603 -602 -601 -600 -599 -598 -597 -596 -595 -594 -593 -592 -591 -590 -589 -588 -587 -586 -585 -584 -583 -582 -581 -580 -579 -578 -577 -576 -575 -574 -573 -572 -571 -570 -569 -568 -567 -566 -565 -564 -563 -562 -561 -560 -559 -558 -557 -556 -555 -554 -553 -552 -551 -550 -549 -548 -547 -546 -545 -544 -543 -542 -541 -540 -539 -538 -537 -536 -535 -534 -533 -532 -531 -530 -529 -528 -527 -526 -525 -524 -523 -522 -521 -520 -519 -518 -517 -516 -515 -514 -513 -512 -511 -510 -509 -508 -507 -506 -505 -504 -503 -502 -501 -500 -499 -498 -497 -496 -495 -494 -493 -492 -491 -490 -489 -488 -487 -486 -485 -484 -483 -482 -481 -480 -479 -478 -477 -476 -475 -474 -473 -472 -471 -470 -469 -468 -467 -466 -465 -464 -463 -462 -461 -460 -459 -458 -457 -456 -455 -454 -453 -452 -451 -450 -449 -448 -447 -446 -445 -444 -443 -442 -441 -440 -439 -438 -437 -436 -435 -434 -433 -432 -431 -430 -429 -428 -427 -426 -425 -424 -423 -422 -421 -420 -419 -418 -417 -416 -415 -414 -413 -412 -411 -410 -409 -408 -407 -406 -405 -404 -403 -402 -401 -400 -399 -398 -397 -396 -395 -394 -393 -392 -391 -390 -389 -388 -387 -386 -385 -384 -383 -382 -381 -380 -379 -378 -377 -376 -375 -374 -373 -372 -371 -370 -369 -368 -367 -366 -365 -364 -363 -362 -361 -360 -359 -358 -357 -356 -355 -354 -353 -352 -351 -350 -349 -348 -347 -346 -345 -344 -343 -342 -341 -340 -339 -338 -337 -336 -335 -334 -333 -332 -331 -330 -329 -328 -327 -326 -325 -324 -323 -322 -321 -320 -319 -318 -317 -316 -315 -314 -313 -312 -311 -310 -309 -308 -307 -306 -305 -304 -303 -302 -301 -300 -299 -298 -297 -296 -295 -294 -293 -292 -291 -290 -289 -288 -287 -286 -285 -284 -283 -282 -281 -280 -279 -278 -277 -276 -275 -274 -273 -272 -271 -270 -269 -268 -267 -266 -265 -264 -263 -262 -261 -260 -259 -258 -257 -256 -255 -254 -253 -252 -251 -250 -249 -248 -247 -246 -245 -244 -243 -242 -241 -240 -239 -238 -237 -236 -235 -234 -233 -232 -231 -230 -229 -228 -227 -226 -225 -224 -223 -222 -221 -220 -219 -218 -217 -216 -215 -214 -213 -212 -211 -210 -209 -208 -207 -206 -205 -204 -203 -202 -201 -200 -199 -198 -197 -196 -195 -194 -193 -192 -191 -190 -189 -188 -187 -186 -185 -184 -183 -182 -181 -180 -179 -178 -177 -176 -175 -174 -173 -172 -171 -170 -169 -168 -167 -166 -165 -164 -163 -162 -161 -160 -159 -158 -157 -156 -155 -154 -153 -152 -151 -150 -149 -148 -147 -146 -145 -144 -143 -142 -141 -140 -139 -138 -137 -136 -135 -134 -133 -132 -131 -130 -129 -128 -127 -126 -125 -124 -123 -122 -121 -120 -119 -118 -117 -116 -115 -114 -113 -112 -111 -110 -109 -108 -107 -106 -105 -104 -103 -102 -101 -100 -99 -98 -97 -96 -95 -94 -93 -92 -91 -90 -89 -88 -87 -86 -85 -84 -83 -82 -81 -80 -79 -78 -77 -76 -75 -74 -73 -72 -71 -70 -69 -68 -67 -66 -65 -64 -63 -62 -61 -60 -59 -58 -57 -56 -55 -54 -53 -52 -51 -50 -49 -48 -47 -46 -45 -44 -43 -42 -41 -40 -39 -38 -37 -36 -35 -34 -33 -32 -31 -30 -29 -28 -27 -26 -25 -24 -23 -22 -21 -20 -19 -18 -17 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 6164 6165 6166 6167 6168 6169 6170 6171 6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218 6219 6220 6221 6222 6223 6224 6225 6226 6227 6228 6229 6230 6231 6232 6233 6234 6235 6236 6237 6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 6249 6250 6251 6252 6253 6254 6255 6256 6257 6258 6259 6260 6261 6262 6263 6264 6265 6266 6267 6268 6269 6270 6271 6272 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 6290 6291 6292 6293 6294 6295 6296 6297 6298 6299 6300 6301 6302 6303 6304 6305 6306 6307 6308 6309 6310 6311 6312 6313 6314 6315 6316 6317 6318 6319 6320 6321 6322 6323 6324 6325 6326 6327 6328 6329 6330 6331 6332 6333 6334 6335 6336 6337 6338 6339 6340 6341 6342 6343 6344 6345 6346 6347 6348 6349 6350 6351 6352 6353 6354 6355 6356 6357 6358 6359 6360 6361 6362 6363 6364 6365 6366 6367 6368 6369 6370 6371 6372 6373 6374 6375 6376 6377 6378 6379 6380 6381 6382 6383 6384 6385 6386 6387 6388 6389 6390 6391 6392 6393 6394 6395 6396 6397 6398 6399 6400 6401 6402 6403 6404 6405 6406 6407 6408 6409 6410 6411 6412 6413 6414 6415 6416 6417 6418 6419 6420 6421 6422 6423 6424 6425 6426 6427 6428 6429 6430 6431 6432 6433 6434 6435 6436 6437 6438 6439 6440 6441 6442 6443 6444 6445 6446 6447 6448 6449 6450 6451 6452 6453 6454 6455 6456 6457 6458 6459 6460 6461 6462 6463 6464 6465 6466 6467 6468 6469 6470 6471 6472 6473 6474 6475 6476 6477 6478 6479 6480 6481 6482 6483 6484 6485 6486 6487 6488 6489 6490 6491 6492 6493 6494 6495 6496 6497 6498 6499 6500 6501 6502 6503 6504 6505 6506 6507 6508 6509 6510 6511 6512 6513 6514 6515 6516 6517 6518 6519 6520 6521 6522 6523 6524 6525 6526 6527 6528 6529 6530 6531 6532 6533 6534 6535 6536 6537 6538 6539 6540 6541 6542 6543 6544 6545 6546 6547 6548 6549 6550 6551 6552 6553 6554 6555 6556 6557 6558 6559 6560 6561 6562 6563 6564 6565 6566 6567 6568 6569 6570 6571 6572 6573 6574 6575 6576 6577 6578 6579 6580 6581 6582 6583 6584 6585 6586 6587 6588 6589 6590 6591 6592 6593 6594 6595 6596 6597 6598 6599 6600 6601 6602 6603 6604 6605 6606 6607 6608 6609 6610 6611 6612 6613 6614 6615 6616 6617 6618 6619 6620 6621 6622 6623 6624 6625 6626 6627 6628 6629 6630 6631 6632 6633 6634 6635 6636 6637 6638 6639 6640 6641 6642 6643 6644 6645 6646 6647 6648 6649 6650 6651 6652 6653 6654 6655 6656 6657 6658 6659 6660 6661 6662 6663 6664 6665 6666 6667 6668 6669 6670 6671 6672 6673 6674 6675 6676 6677 6678 6679 6680 6681 6682 6683 6684 6685 6686 6687 6688 6689 6690 6691 6692 6693 6694 6695 6696 6697 6698 6699 6700 6701 6702 6703 6704 6705 6706 6707 6708 6709 6710 6711 6712 6713 6714 6715 6716 6717 6718 6719 6720 6721 6722 6723 6724 6725 6726 6727 6728 6729 6730 6731 6732 6733 6734 6735 6736 6737 6738 6739 6740 6741 6742 6743 6744 6745 6746 6747 6748 6749 6750 6751 6752 6753 6754 6755 6756 6757 6758 6759 6760 6761 6762 6763 6764 6765 6766 6767 6768 6769 6770 6771 6772 6773 6774 6775 6776 6777 6778 6779 6780 6781 6782 6783 6784 6785 6786 6787 6788 6789 6790 6791 6792 6793 6794 6795 6796 6797 6798 6799 6800 6801 6802 6803 6804 6805 6806 6807 6808 6809 6810 6811 6812 6813 6814 6815 6816 6817 6818 6819 6820 6821 6822 6823 6824 6825 6826 6827 6828 6829 6830 6831 6832 6833 6834 6835 6836 6837 6838 6839 6840 6841 6842 6843 6844 6845 6846 6847 6848 6849 6850 6851 6852 6853 6854 6855 6856 6857 6858 6859 6860 6861 6862 6863 6864 6865 6866 6867 6868 6869 6870 6871 6872 6873 6874 6875 6876 6877 6878 6879 6880 6881 6882 6883 6884 6885 6886 6887 6888 6889 6890 6891 6892 6893 6894 6895 6896 6897 6898 6899 6900 6901 6902 6903 6904 6905 6906 6907 6908 6909 6910 6911 6912 6913 6914 6915 6916 6917 6918 6919 6920 6921 6922 6923 6924 6925 6926 6927 6928 6929 6930 6931 6932 6933 6934 6935 6936 6937 6938 6939 6940 6941 6942 6943 6944 6945 6946 6947 6948 6949 6950 6951 6952 6953 6954 6955 6956 6957 6958 6959 6960 6961 6962 6963 6964 6965 6966 6967 6968 6969 6970 6971 6972 6973 6974 6975 6976 6977 6978 6979 6980 6981 6982 6983 6984 6985 6986 6987 6988 6989 6990 6991 6992 6993 6994 6995 6996 6997 6998 6999 7000 7001 7002 7003 7004 7005 7006 7007 7008 7009 7010 7011 7012 7013 7014 7015 7016 7017 7018 7019 7020 7021 7022 7023 7024 7025 7026 7027 7028 7029 7030 7031 7032 7033 7034 7035 7036 7037 7038 7039 7040 7041 7042 7043 7044 7045 7046 7047 7048 7049 7050 7051 7052 7053 7054 7055 7056 7057 7058 7059 7060 7061 7062 7063 7064 7065 7066 7067 7068 7069 7070 7071 7072 7073 7074 7075 7076 7077 7078 7079 7080 7081 7082 7083 7084 7085 7086 7087 7088 7089 7090 7091 7092 7093 7094 7095 7096 7097 7098 7099 7100 7101 7102 7103 7104 7105 7106 7107 7108 7109 7110 7111 7112 7113 7114 7115 7116 7117 7118 7119 7120 7121 7122 7123 7124 7125 7126 7127 7128 7129 7130 7131 7132 7133 7134 7135 7136 7137 7138 7139 7140 7141 7142 7143 7144 7145 7146 7147 7148 7149 7150 7151 7152 7153 7154 7155 7156 7157 7158 7159 7160 7161 7162 7163 7164 7165 7166 7167 7168 7169 7170 7171 7172 7173 7174 7175 7176 7177 7178 7179 7180 7181 7182 7183 7184 7185 7186 7187 7188 7189 7190 7191 7192 7193 7194 7195 7196 7197 7198 7199 7200 7201 7202 7203 7204 7205 7206 7207 7208 7209 7210 7211 7212 7213 7214 7215 7216 7217 7218 7219 7220 7221 7222 7223 7224 7225 7226 7227 7228 7229 7230 7231 7232 7233 7234 7235 7236 7237 7238 7239 7240 7241 7242 7243 7244 7245 7246 7247 7248 7249 7250 7251 7252 7253 7254 7255 7256 7257 7258 7259 7260 7261 7262 7263 7264 7265 7266 7267 7268 7269 7270 7271 7272 7273 7274 7275 7276 7277 7278 7279 7280 7281 7282 7283 7284 7285 7286 7287 7288 7289 7290 7291 7292 7293 7294 7295 7296 7297 7298 7299 7300 7301 7302 7303 7304 7305 7306 7307 7308 7309 7310 7311 7312 7313 7314 7315 7316 7317 7318 7319 7320 7321 7322 7323 7324 7325 7326 7327 7328 7329 7330 7331 7332 7333 7334 7335 7336 7337 7338 7339 7340 7341 7342 7343 7344 7345 7346 7347 7348 7349 7350 7351 7352 7353 7354 7355 7356 7357 7358 7359 7360 7361 7362 7363 7364 7365 7366 7367 7368 7369 7370 7371 7372 7373 7374 7375 7376 7377 7378 7379 7380 7381 7382 7383 7384 7385 7386 7387 7388 7389 7390 7391 7392 7393 7394 7395 7396 7397 7398 7399 7400 7401 7402 7403 7404 7405 7406 7407 7408 7409 7410 7411 7412 7413 7414 7415 7416 7417 7418 7419 7420 7421 7422 7423 7424 7425 7426 7427 7428 7429 7430 7431 7432 7433 7434 7435 7436 7437 7438 7439 7440 7441 7442 7443 7444 7445 7446 7447 7448 7449 7450 7451 7452 7453 7454 7455 7456 7457 7458 7459 7460 7461 7462 7463 7464 7465 7466 7467 7468 7469 7470 7471 7472 7473 7474 7475 7476 7477 7478 7479 7480 7481 7482 7483 7484 7485 7486 7487 7488 7489 7490 7491 7492 7493 7494 7495 7496 7497 7498 7499 7500 7501 7502 7503 7504 7505 7506 7507 7508 7509 7510 7511 7512 7513 7514 7515 7516 7517 7518 7519 7520 7521 7522 7523 7524 7525 7526 7527 7528 7529 7530 7531 7532 7533 7534 7535 7536 7537 7538 7539 7540 7541 7542 7543 7544 7545 7546 7547 7548 7549 7550 7551 7552 7553 7554 7555 7556 7557 7558 7559 7560 7561 7562 7563 7564 7565 7566 7567 7568 7569 7570 7571 7572 7573 7574 7575 7576 7577 7578 7579 7580 7581 7582 7583 7584 7585 7586 7587 7588 7589 7590 7591 7592 7593 7594 7595 7596 7597 7598 7599 7600 7601 7602 7603 7604 7605 7606 7607 7608 7609 7610 7611 7612 7613 7614 7615 7616 7617 7618 7619 7620 7621 7622 7623 7624 7625 7626 7627 7628 7629 7630 7631 7632 7633 7634 7635 7636 7637 7638 7639 7640 7641 7642 7643 7644 7645 7646 7647 7648 7649 7650 7651 7652 7653 7654 7655 7656 7657 7658 7659 7660 7661 7662 7663 7664 7665 7666 7667 7668 7669 7670 7671 7672 7673 7674 7675 7676 7677 7678 7679 7680 7681 7682 7683 7684 7685 7686 7687 7688 7689 7690 7691 7692 7693 7694 7695 7696 7697 7698 7699 7700 7701 7702 7703 7704 7705 7706 7707 7708 7709 7710 7711 7712 7713 7714 7715 7716 7717 7718 7719 7720 7721 7722 7723 7724 7725 7726 7727 7728 7729 7730 7731 7732 7733 7734 7735 7736 7737 7738 7739 7740 7741 7742 7743 7744 7745 7746 7747 7748 7749 7750 7751 7752 7753 7754 7755 7756 7757 7758 7759 7760 7761 7762 7763 7764 7765 7766 7767 7768 7769 7770 7771 7772 7773 7774 7775 7776 7777 7778 7779 7780 7781 7782 7783 7784 7785 7786 7787 7788 7789 7790 7791 7792 7793 7794 7795 7796 7797 7798 7799 7800 7801 7802 7803 7804 7805 7806 7807 7808 7809 7810 7811 7812 7813 7814 7815 7816 7817 7818 7819 7820 7821 7822 7823 7824 7825 7826 7827 7828 7829 7830 7831 7832 7833 7834 7835 7836 7837 7838 7839 7840 7841 7842 7843 7844 7845 7846 7847 7848 7849 7850 7851 7852 7853 7854 7855 7856 7857 7858 7859 7860 7861 7862 7863 7864 7865 7866 7867 7868 7869 7870 7871 7872 7873 7874 7875 7876 7877 7878 7879 7880 7881 7882 7883 7884 7885 7886 7887 7888 7889 7890 7891 7892 7893 7894 7895 7896 7897 7898 7899 7900 7901 7902 7903 7904 7905 7906 7907 7908 7909 7910 7911 7912 7913 7914 7915 7916 7917 7918 7919 7920 7921 7922 7923 7924 7925 7926 7927 7928 7929 7930 7931 7932 7933 7934 7935 7936 7937 7938 7939 7940 7941 7942 7943 7944 7945 7946 7947 7948 7949 7950 7951 7952 7953 7954 7955 7956 7957 7958 7959 7960 7961 7962 7963 7964 7965 7966 7967 7968 7969 7970 7971 7972 7973 7974 7975 7976 7977 7978 7979 7980 7981 7982 7983 7984 7985 7986 7987 7988 7989 7990 7991 7992 7993 7994 7995 7996 7997 7998 7999 8000 8001 8002 8003 8004 8005 8006 8007 8008 8009 8010 8011 8012 8013 8014 8015 8016 8017 8018 8019 8020 8021 8022 8023 8024 8025 8026 8027 8028 8029 8030 8031 8032 8033 8034 8035 8036 8037 8038 8039 8040 8041 8042 8043 8044 8045 8046 8047 8048 8049 8050 8051 8052 8053 8054 8055 8056 8057 8058 8059 8060 8061 8062 8063 8064 8065 8066 8067 8068 8069 8070 8071 8072 8073 8074 8075 8076 8077 8078 8079 8080 8081 8082 8083 8084 8085 8086 8087 8088 8089 8090 8091 8092 8093 8094 8095 8096 8097 8098 8099 8100 8101 8102 8103 8104 8105 8106 8107 8108 8109 8110 8111 8112 8113 8114 8115 8116 8117 8118 8119 8120 8121 8122 8123 8124 8125 8126 8127 8128 8129 8130 8131 8132 8133 8134 8135 8136 8137 8138 8139 8140 8141 8142 8143 8144 8145 8146 8147 8148 8149 8150 8151 8152 8153 8154 8155 8156 8157 8158 8159 8160 8161 8162 8163 8164 8165 8166 8167 8168 8169 8170 8171 8172 8173 8174 8175 8176 8177 8178 8179 8180 8181 8182 8183 8184 8185 8186 8187 8188 8189 8190 8191 8192 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/samples_shrink_big_numbers_8192/first.xml b/bench_horn_mcmc/samples_shrink_big_numbers_8192/first.xml new file mode 100644 index 000000000..9db40934f --- /dev/null +++ b/bench_horn_mcmc/samples_shrink_big_numbers_8192/first.xml @@ -0,0 +1,49205 @@ + + + + + 1 + itp + + + + x + x1 + + + + x + + + + + + x + 1 + + + + + x + 2 + + + + + x + 3 + + + + + x + 4 + + + + + x + 5 + + + + + x + 6 + + + + + x + 7 + + + + + x + 8 + + + + + x + 9 + + + + + x + 10 + + + + + x + 11 + + + + + x + 12 + + + + + x + 13 + + + + + x + 14 + + + + + x + 15 + + + + + x + 16 + + + + + x + 17 + + + + + x + 18 + + + + + x + 19 + + + + + x + 20 + + + + + x + 21 + + + + + x + 22 + + + + + x + 23 + + + + + x + 24 + + + + + x + 25 + + + + + x + 26 + + + + + x + 27 + + + + + x + 28 + + + + + x + 29 + + + + + x + 30 + + + + + x + 31 + + + + + x + 32 + + + + + x + 33 + + + + + x + 34 + + + + + x + 35 + + + + + x + 36 + + + + + x + 37 + + + + + x + 38 + + + + + x + 39 + + + + + x + 40 + + + + + x + 41 + + + + + x + 42 + + + + + x + 43 + + + + + x + 44 + + + + + x + 45 + + + + + x + 46 + + + + + x + 47 + + + + + x + 48 + + + + + x + 49 + + + + + x + 50 + + + + + x + 51 + + + + + x + 52 + + + + + x + 53 + + + + + x + 54 + + + + + x + 55 + + + + + x + 56 + + + + + x + 57 + + + + + x + 58 + + + + + x + 59 + + + + + x + 60 + + + + + x + 61 + + + + + x + 62 + + + + + x + 63 + + + + + x + 64 + + + + + x + 65 + + + + + x + 66 + + + + + x + 67 + + + + + x + 68 + + + + + x + 69 + + + + + x + 70 + + + + + x + 71 + + + + + x + 72 + + + + + x + 73 + + + + + x + 74 + + + + + x + 75 + + + + + x + 76 + + + + + x + 77 + + + + + x + 78 + + + + + x + 79 + + + + + x + 80 + + + + + x + 81 + + + + + x + 82 + + + + + x + 83 + + + + + x + 84 + + + + + x + 85 + + + + + x + 86 + + + + + x + 87 + + + + + x + 88 + + + + + x + 89 + + + + + x + 90 + + + + + x + 91 + + + + + x + 92 + + + + + x + 93 + + + + + x + 94 + + + + + x + 95 + + + + + x + 96 + + + + + x + 97 + + + + + x + 98 + + + + + x + 99 + + + + + x + 100 + + + + + x + 101 + + + + + x + 102 + + + + + x + 103 + + + + + x + 104 + + + + + x + 105 + + + + + x + 106 + + + + + x + 107 + + + + + x + 108 + + + + + x + 109 + + + + + x + 110 + + + + + x + 111 + + + + + x + 112 + + + + + x + 113 + + + + + x + 114 + + + + + x + 115 + + + + + x + 116 + + + + + x + 117 + + + + + x + 118 + + + + + x + 119 + + + + + x + 120 + + + + + x + 121 + + + + + x + 122 + + + + + x + 123 + + + + + x + 124 + + + + + x + 125 + + + + + x + 126 + + + + + x + 127 + + + + + x + 128 + + + + + x + 129 + + + + + x + 130 + + + + + x + 131 + + + + + x + 132 + + + + + x + 133 + + + + + x + 134 + + + + + x + 135 + + + + + x + 136 + + + + + x + 137 + + + + + x + 138 + + + + + x + 139 + + + + + x + 140 + + + + + x + 141 + + + + + x + 142 + + + + + x + 143 + + + + + x + 144 + + + + + x + 145 + + + + + x + 146 + + + + + x + 147 + + + + + x + 148 + + + + + x + 149 + + + + + x + 150 + + + + + x + 151 + + + + + x + 152 + + + + + x + 153 + + + + + x + 154 + + + + + x + 155 + + + + + x + 156 + + + + + x + 157 + + + + + x + 158 + + + + + x + 159 + + + + + x + 160 + + + + + x + 161 + + + + + x + 162 + + + + + x + 163 + + + + + x + 164 + + + + + x + 165 + + + + + x + 166 + + + + + x + 167 + + + + + x + 168 + + + + + x + 169 + + + + + x + 170 + + + + + x + 171 + + + + + x + 172 + + + + + x + 173 + + + + + x + 174 + + + + + x + 175 + + + + + x + 176 + + + + + x + 177 + + + + + x + 178 + + + + + x + 179 + + + + + x + 180 + + + + + x + 181 + + + + + x + 182 + + + + + x + 183 + + + + + x + 184 + + + + + x + 185 + + + + + x + 186 + + + + + x + 187 + + + + + x + 188 + + + + + x + 189 + + + + + x + 190 + + + + + x + 191 + + + + + x + 192 + + + + + x + 193 + + + + + x + 194 + + + + + x + 195 + + + + + x + 196 + + + + + x + 197 + + + + + x + 198 + + + + + x + 199 + + + + + x + 200 + + + + + x + 201 + + + + + x + 202 + + + + + x + 203 + + + + + x + 204 + + + + + x + 205 + + + + + x + 206 + + + + + x + 207 + + + + + x + 208 + + + + + x + 209 + + + + + x + 210 + + + + + x + 211 + + + + + x + 212 + + + + + x + 213 + + + + + x + 214 + + + + + x + 215 + + + + + x + 216 + + + + + x + 217 + + + + + x + 218 + + + + + x + 219 + + + + + x + 220 + + + + + x + 221 + + + + + x + 222 + + + + + x + 223 + + + + + x + 224 + + + + + x + 225 + + + + + x + 226 + + + + + x + 227 + + + + + x + 228 + + + + + x + 229 + + + + + x + 230 + + + + + x + 231 + + + + + x + 232 + + + + + x + 233 + + + + + x + 234 + + + + + x + 235 + + + + + x + 236 + + + + + x + 237 + + + + + x + 238 + + + + + x + 239 + + + + + x + 240 + + + + + x + 241 + + + + + x + 242 + + + + + x + 243 + + + + + x + 244 + + + + + x + 245 + + + + + x + 246 + + + + + x + 247 + + + + + x + 248 + + + + + x + 249 + + + + + x + 250 + + + + + x + 251 + + + + + x + 252 + + + + + x + 253 + + + + + x + 254 + + + + + x + 255 + + + + + x + 256 + + + + + x + 257 + + + + + x + 258 + + + + + x + 259 + + + + + x + 260 + + + + + x + 261 + + + + + x + 262 + + + + + x + 263 + + + + + x + 264 + + + + + x + 265 + + + + + x + 266 + + + + + x + 267 + + + + + x + 268 + + + + + x + 269 + + + + + x + 270 + + + + + x + 271 + + + + + x + 272 + + + + + x + 273 + + + + + x + 274 + + + + + x + 275 + + + + + x + 276 + + + + + x + 277 + + + + + x + 278 + + + + + x + 279 + + + + + x + 280 + + + + + x + 281 + + + + + x + 282 + + + + + x + 283 + + + + + x + 284 + + + + + x + 285 + + + + + x + 286 + + + + + x + 287 + + + + + x + 288 + + + + + x + 289 + + + + + x + 290 + + + + + x + 291 + + + + + x + 292 + + + + + x + 293 + + + + + x + 294 + + + + + x + 295 + + + + + x + 296 + + + + + x + 297 + + + + + x + 298 + + + + + x + 299 + + + + + x + 300 + + + + + x + 301 + + + + + x + 302 + + + + + x + 303 + + + + + x + 304 + + + + + x + 305 + + + + + x + 306 + + + + + x + 307 + + + + + x + 308 + + + + + x + 309 + + + + + x + 310 + + + + + x + 311 + + + + + x + 312 + + + + + x + 313 + + + + + x + 314 + + + + + x + 315 + + + + + x + 316 + + + + + x + 317 + + + + + x + 318 + + + + + x + 319 + + + + + x + 320 + + + + + x + 321 + + + + + x + 322 + + + + + x + 323 + + + + + x + 324 + + + + + x + 325 + + + + + x + 326 + + + + + x + 327 + + + + + x + 328 + + + + + x + 329 + + + + + x + 330 + + + + + x + 331 + + + + + x + 332 + + + + + x + 333 + + + + + x + 334 + + + + + x + 335 + + + + + x + 336 + + + + + x + 337 + + + + + x + 338 + + + + + x + 339 + + + + + x + 340 + + + + + x + 341 + + + + + x + 342 + + + + + x + 343 + + + + + x + 344 + + + + + x + 345 + + + + + x + 346 + + + + + x + 347 + + + + + x + 348 + + + + + x + 349 + + + + + x + 350 + + + + + x + 351 + + + + + x + 352 + + + + + x + 353 + + + + + x + 354 + + + + + x + 355 + + + + + x + 356 + + + + + x + 357 + + + + + x + 358 + + + + + x + 359 + + + + + x + 360 + + + + + x + 361 + + + + + x + 362 + + + + + x + 363 + + + + + x + 364 + + + + + x + 365 + + + + + x + 366 + + + + + x + 367 + + + + + x + 368 + + + + + x + 369 + + + + + x + 370 + + + + + x + 371 + + + + + x + 372 + + + + + x + 373 + + + + + x + 374 + + + + + x + 375 + + + + + x + 376 + + + + + x + 377 + + + + + x + 378 + + + + + x + 379 + + + + + x + 380 + + + + + x + 381 + + + + + x + 382 + + + + + x + 383 + + + + + x + 384 + + + + + x + 385 + + + + + x + 386 + + + + + x + 387 + + + + + x + 388 + + + + + x + 389 + + + + + x + 390 + + + + + x + 391 + + + + + x + 392 + + + + + x + 393 + + + + + x + 394 + + + + + x + 395 + + + + + x + 396 + + + + + x + 397 + + + + + x + 398 + + + + + x + 399 + + + + + x + 400 + + + + + x + 401 + + + + + x + 402 + + + + + x + 403 + + + + + x + 404 + + + + + x + 405 + + + + + x + 406 + + + + + x + 407 + + + + + x + 408 + + + + + x + 409 + + + + + x + 410 + + + + + x + 411 + + + + + x + 412 + + + + + x + 413 + + + + + x + 414 + + + + + x + 415 + + + + + x + 416 + + + + + x + 417 + + + + + x + 418 + + + + + x + 419 + + + + + x + 420 + + + + + x + 421 + + + + + x + 422 + + + + + x + 423 + + + + + x + 424 + + + + + x + 425 + + + + + x + 426 + + + + + x + 427 + + + + + x + 428 + + + + + x + 429 + + + + + x + 430 + + + + + x + 431 + + + + + x + 432 + + + + + x + 433 + + + + + x + 434 + + + + + x + 435 + + + + + x + 436 + + + + + x + 437 + + + + + x + 438 + + + + + x + 439 + + + + + x + 440 + + + + + x + 441 + + + + + x + 442 + + + + + x + 443 + + + + + x + 444 + + + + + x + 445 + + + + + x + 446 + + + + + x + 447 + + + + + x + 448 + + + + + x + 449 + + + + + x + 450 + + + + + x + 451 + + + + + x + 452 + + + + + x + 453 + + + + + x + 454 + + + + + x + 455 + + + + + x + 456 + + + + + x + 457 + + + + + x + 458 + + + + + x + 459 + + + + + x + 460 + + + + + x + 461 + + + + + x + 462 + + + + + x + 463 + + + + + x + 464 + + + + + x + 465 + + + + + x + 466 + + + + + x + 467 + + + + + x + 468 + + + + + x + 469 + + + + + x + 470 + + + + + x + 471 + + + + + x + 472 + + + + + x + 473 + + + + + x + 474 + + + + + x + 475 + + + + + x + 476 + + + + + x + 477 + + + + + x + 478 + + + + + x + 479 + + + + + x + 480 + + + + + x + 481 + + + + + x + 482 + + + + + x + 483 + + + + + x + 484 + + + + + x + 485 + + + + + x + 486 + + + + + x + 487 + + + + + x + 488 + + + + + x + 489 + + + + + x + 490 + + + + + x + 491 + + + + + x + 492 + + + + + x + 493 + + + + + x + 494 + + + + + x + 495 + + + + + x + 496 + + + + + x + 497 + + + + + x + 498 + + + + + x + 499 + + + + + x + 500 + + + + + x + 501 + + + + + x + 502 + + + + + x + 503 + + + + + x + 504 + + + + + x + 505 + + + + + x + 506 + + + + + x + 507 + + + + + x + 508 + + + + + x + 509 + + + + + x + 510 + + + + + x + 511 + + + + + x + 512 + + + + + x + 513 + + + + + x + 514 + + + + + x + 515 + + + + + x + 516 + + + + + x + 517 + + + + + x + 518 + + + + + x + 519 + + + + + x + 520 + + + + + x + 521 + + + + + x + 522 + + + + + x + 523 + + + + + x + 524 + + + + + x + 525 + + + + + x + 526 + + + + + x + 527 + + + + + x + 528 + + + + + x + 529 + + + + + x + 530 + + + + + x + 531 + + + + + x + 532 + + + + + x + 533 + + + + + x + 534 + + + + + x + 535 + + + + + x + 536 + + + + + x + 537 + + + + + x + 538 + + + + + x + 539 + + + + + x + 540 + + + + + x + 541 + + + + + x + 542 + + + + + x + 543 + + + + + x + 544 + + + + + x + 545 + + + + + x + 546 + + + + + x + 547 + + + + + x + 548 + + + + + x + 549 + + + + + x + 550 + + + + + x + 551 + + + + + x + 552 + + + + + x + 553 + + + + + x + 554 + + + + + x + 555 + + + + + x + 556 + + + + + x + 557 + + + + + x + 558 + + + + + x + 559 + + + + + x + 560 + + + + + x + 561 + + + + + x + 562 + + + + + x + 563 + + + + + x + 564 + + + + + x + 565 + + + + + x + 566 + + + + + x + 567 + + + + + x + 568 + + + + + x + 569 + + + + + x + 570 + + + + + x + 571 + + + + + x + 572 + + + + + x + 573 + + + + + x + 574 + + + + + x + 575 + + + + + x + 576 + + + + + x + 577 + + + + + x + 578 + + + + + x + 579 + + + + + x + 580 + + + + + x + 581 + + + + + x + 582 + + + + + x + 583 + + + + + x + 584 + + + + + x + 585 + + + + + x + 586 + + + + + x + 587 + + + + + x + 588 + + + + + x + 589 + + + + + x + 590 + + + + + x + 591 + + + + + x + 592 + + + + + x + 593 + + + + + x + 594 + + + + + x + 595 + + + + + x + 596 + + + + + x + 597 + + + + + x + 598 + + + + + x + 599 + + + + + x + 600 + + + + + x + 601 + + + + + x + 602 + + + + + x + 603 + + + + + x + 604 + + + + + x + 605 + + + + + x + 606 + + + + + x + 607 + + + + + x + 608 + + + + + x + 609 + + + + + x + 610 + + + + + x + 611 + + + + + x + 612 + + + + + x + 613 + + + + + x + 614 + + + + + x + 615 + + + + + x + 616 + + + + + x + 617 + + + + + x + 618 + + + + + x + 619 + + + + + x + 620 + + + + + x + 621 + + + + + x + 622 + + + + + x + 623 + + + + + x + 624 + + + + + x + 625 + + + + + x + 626 + + + + + x + 627 + + + + + x + 628 + + + + + x + 629 + + + + + x + 630 + + + + + x + 631 + + + + + x + 632 + + + + + x + 633 + + + + + x + 634 + + + + + x + 635 + + + + + x + 636 + + + + + x + 637 + + + + + x + 638 + + + + + x + 639 + + + + + x + 640 + + + + + x + 641 + + + + + x + 642 + + + + + x + 643 + + + + + x + 644 + + + + + x + 645 + + + + + x + 646 + + + + + x + 647 + + + + + x + 648 + + + + + x + 649 + + + + + x + 650 + + + + + x + 651 + + + + + x + 652 + + + + + x + 653 + + + + + x + 654 + + + + + x + 655 + + + + + x + 656 + + + + + x + 657 + + + + + x + 658 + + + + + x + 659 + + + + + x + 660 + + + + + x + 661 + + + + + x + 662 + + + + + x + 663 + + + + + x + 664 + + + + + x + 665 + + + + + x + 666 + + + + + x + 667 + + + + + x + 668 + + + + + x + 669 + + + + + x + 670 + + + + + x + 671 + + + + + x + 672 + + + + + x + 673 + + + + + x + 674 + + + + + x + 675 + + + + + x + 676 + + + + + x + 677 + + + + + x + 678 + + + + + x + 679 + + + + + x + 680 + + + + + x + 681 + + + + + x + 682 + + + + + x + 683 + + + + + x + 684 + + + + + x + 685 + + + + + x + 686 + + + + + x + 687 + + + + + x + 688 + + + + + x + 689 + + + + + x + 690 + + + + + x + 691 + + + + + x + 692 + + + + + x + 693 + + + + + x + 694 + + + + + x + 695 + + + + + x + 696 + + + + + x + 697 + + + + + x + 698 + + + + + x + 699 + + + + + x + 700 + + + + + x + 701 + + + + + x + 702 + + + + + x + 703 + + + + + x + 704 + + + + + x + 705 + + + + + x + 706 + + + + + x + 707 + + + + + x + 708 + + + + + x + 709 + + + + + x + 710 + + + + + x + 711 + + + + + x + 712 + + + + + x + 713 + + + + + x + 714 + + + + + x + 715 + + + + + x + 716 + + + + + x + 717 + + + + + x + 718 + + + + + x + 719 + + + + + x + 720 + + + + + x + 721 + + + + + x + 722 + + + + + x + 723 + + + + + x + 724 + + + + + x + 725 + + + + + x + 726 + + + + + x + 727 + + + + + x + 728 + + + + + x + 729 + + + + + x + 730 + + + + + x + 731 + + + + + x + 732 + + + + + x + 733 + + + + + x + 734 + + + + + x + 735 + + + + + x + 736 + + + + + x + 737 + + + + + x + 738 + + + + + x + 739 + + + + + x + 740 + + + + + x + 741 + + + + + x + 742 + + + + + x + 743 + + + + + x + 744 + + + + + x + 745 + + + + + x + 746 + + + + + x + 747 + + + + + x + 748 + + + + + x + 749 + + + + + x + 750 + + + + + x + 751 + + + + + x + 752 + + + + + x + 753 + + + + + x + 754 + + + + + x + 755 + + + + + x + 756 + + + + + x + 757 + + + + + x + 758 + + + + + x + 759 + + + + + x + 760 + + + + + x + 761 + + + + + x + 762 + + + + + x + 763 + + + + + x + 764 + + + + + x + 765 + + + + + x + 766 + + + + + x + 767 + + + + + x + 768 + + + + + x + 769 + + + + + x + 770 + + + + + x + 771 + + + + + x + 772 + + + + + x + 773 + + + + + x + 774 + + + + + x + 775 + + + + + x + 776 + + + + + x + 777 + + + + + x + 778 + + + + + x + 779 + + + + + x + 780 + + + + + x + 781 + + + + + x + 782 + + + + + x + 783 + + + + + x + 784 + + + + + x + 785 + + + + + x + 786 + + + + + x + 787 + + + + + x + 788 + + + + + x + 789 + + + + + x + 790 + + + + + x + 791 + + + + + x + 792 + + + + + x + 793 + + + + + x + 794 + + + + + x + 795 + + + + + x + 796 + + + + + x + 797 + + + + + x + 798 + + + + + x + 799 + + + + + x + 800 + + + + + x + 801 + + + + + x + 802 + + + + + x + 803 + + + + + x + 804 + + + + + x + 805 + + + + + x + 806 + + + + + x + 807 + + + + + x + 808 + + + + + x + 809 + + + + + x + 810 + + + + + x + 811 + + + + + x + 812 + + + + + x + 813 + + + + + x + 814 + + + + + x + 815 + + + + + x + 816 + + + + + x + 817 + + + + + x + 818 + + + + + x + 819 + + + + + x + 820 + + + + + x + 821 + + + + + x + 822 + + + + + x + 823 + + + + + x + 824 + + + + + x + 825 + + + + + x + 826 + + + + + x + 827 + + + + + x + 828 + + + + + x + 829 + + + + + x + 830 + + + + + x + 831 + + + + + x + 832 + + + + + x + 833 + + + + + x + 834 + + + + + x + 835 + + + + + x + 836 + + + + + x + 837 + + + + + x + 838 + + + + + x + 839 + + + + + x + 840 + + + + + x + 841 + + + + + x + 842 + + + + + x + 843 + + + + + x + 844 + + + + + x + 845 + + + + + x + 846 + + + + + x + 847 + + + + + x + 848 + + + + + x + 849 + + + + + x + 850 + + + + + x + 851 + + + + + x + 852 + + + + + x + 853 + + + + + x + 854 + + + + + x + 855 + + + + + x + 856 + + + + + x + 857 + + + + + x + 858 + + + + + x + 859 + + + + + x + 860 + + + + + x + 861 + + + + + x + 862 + + + + + x + 863 + + + + + x + 864 + + + + + x + 865 + + + + + x + 866 + + + + + x + 867 + + + + + x + 868 + + + + + x + 869 + + + + + x + 870 + + + + + x + 871 + + + + + x + 872 + + + + + x + 873 + + + + + x + 874 + + + + + x + 875 + + + + + x + 876 + + + + + x + 877 + + + + + x + 878 + + + + + x + 879 + + + + + x + 880 + + + + + x + 881 + + + + + x + 882 + + + + + x + 883 + + + + + x + 884 + + + + + x + 885 + + + + + x + 886 + + + + + x + 887 + + + + + x + 888 + + + + + x + 889 + + + + + x + 890 + + + + + x + 891 + + + + + x + 892 + + + + + x + 893 + + + + + x + 894 + + + + + x + 895 + + + + + x + 896 + + + + + x + 897 + + + + + x + 898 + + + + + x + 899 + + + + + x + 900 + + + + + x + 901 + + + + + x + 902 + + + + + x + 903 + + + + + x + 904 + + + + + x + 905 + + + + + x + 906 + + + + + x + 907 + + + + + x + 908 + + + + + x + 909 + + + + + x + 910 + + + + + x + 911 + + + + + x + 912 + + + + + x + 913 + + + + + x + 914 + + + + + x + 915 + + + + + x + 916 + + + + + x + 917 + + + + + x + 918 + + + + + x + 919 + + + + + x + 920 + + + + + x + 921 + + + + + x + 922 + + + + + x + 923 + + + + + x + 924 + + + + + x + 925 + + + + + x + 926 + + + + + x + 927 + + + + + x + 928 + + + + + x + 929 + + + + + x + 930 + + + + + x + 931 + + + + + x + 932 + + + + + x + 933 + + + + + x + 934 + + + + + x + 935 + + + + + x + 936 + + + + + x + 937 + + + + + x + 938 + + + + + x + 939 + + + + + x + 940 + + + + + x + 941 + + + + + x + 942 + + + + + x + 943 + + + + + x + 944 + + + + + x + 945 + + + + + x + 946 + + + + + x + 947 + + + + + x + 948 + + + + + x + 949 + + + + + x + 950 + + + + + x + 951 + + + + + x + 952 + + + + + x + 953 + + + + + x + 954 + + + + + x + 955 + + + + + x + 956 + + + + + x + 957 + + + + + x + 958 + + + + + x + 959 + + + + + x + 960 + + + + + x + 961 + + + + + x + 962 + + + + + x + 963 + + + + + x + 964 + + + + + x + 965 + + + + + x + 966 + + + + + x + 967 + + + + + x + 968 + + + + + x + 969 + + + + + x + 970 + + + + + x + 971 + + + + + x + 972 + + + + + x + 973 + + + + + x + 974 + + + + + x + 975 + + + + + x + 976 + + + + + x + 977 + + + + + x + 978 + + + + + x + 979 + + + + + x + 980 + + + + + x + 981 + + + + + x + 982 + + + + + x + 983 + + + + + x + 984 + + + + + x + 985 + + + + + x + 986 + + + + + x + 987 + + + + + x + 988 + + + + + x + 989 + + + + + x + 990 + + + + + x + 991 + + + + + x + 992 + + + + + x + 993 + + + + + x + 994 + + + + + x + 995 + + + + + x + 996 + + + + + x + 997 + + + + + x + 998 + + + + + x + 999 + + + + + x + 1000 + + + + + x + 1001 + + + + + x + 1002 + + + + + x + 1003 + + + + + x + 1004 + + + + + x + 1005 + + + + + x + 1006 + + + + + x + 1007 + + + + + x + 1008 + + + + + x + 1009 + + + + + x + 1010 + + + + + x + 1011 + + + + + x + 1012 + + + + + x + 1013 + + + + + x + 1014 + + + + + x + 1015 + + + + + x + 1016 + + + + + x + 1017 + + + + + x + 1018 + + + + + x + 1019 + + + + + x + 1020 + + + + + x + 1021 + + + + + x + 1022 + + + + + x + 1023 + + + + + x + 1024 + + + + + x + 1025 + + + + + x + 1026 + + + + + x + 1027 + + + + + x + 1028 + + + + + x + 1029 + + + + + x + 1030 + + + + + x + 1031 + + + + + x + 1032 + + + + + x + 1033 + + + + + x + 1034 + + + + + x + 1035 + + + + + x + 1036 + + + + + x + 1037 + + + + + x + 1038 + + + + + x + 1039 + + + + + x + 1040 + + + + + x + 1041 + + + + + x + 1042 + + + + + x + 1043 + + + + + x + 1044 + + + + + x + 1045 + + + + + x + 1046 + + + + + x + 1047 + + + + + x + 1048 + + + + + x + 1049 + + + + + x + 1050 + + + + + x + 1051 + + + + + x + 1052 + + + + + x + 1053 + + + + + x + 1054 + + + + + x + 1055 + + + + + x + 1056 + + + + + x + 1057 + + + + + x + 1058 + + + + + x + 1059 + + + + + x + 1060 + + + + + x + 1061 + + + + + x + 1062 + + + + + x + 1063 + + + + + x + 1064 + + + + + x + 1065 + + + + + x + 1066 + + + + + x + 1067 + + + + + x + 1068 + + + + + x + 1069 + + + + + x + 1070 + + + + + x + 1071 + + + + + x + 1072 + + + + + x + 1073 + + + + + x + 1074 + + + + + x + 1075 + + + + + x + 1076 + + + + + x + 1077 + + + + + x + 1078 + + + + + x + 1079 + + + + + x + 1080 + + + + + x + 1081 + + + + + x + 1082 + + + + + x + 1083 + + + + + x + 1084 + + + + + x + 1085 + + + + + x + 1086 + + + + + x + 1087 + + + + + x + 1088 + + + + + x + 1089 + + + + + x + 1090 + + + + + x + 1091 + + + + + x + 1092 + + + + + x + 1093 + + + + + x + 1094 + + + + + x + 1095 + + + + + x + 1096 + + + + + x + 1097 + + + + + x + 1098 + + + + + x + 1099 + + + + + x + 1100 + + + + + x + 1101 + + + + + x + 1102 + + + + + x + 1103 + + + + + x + 1104 + + + + + x + 1105 + + + + + x + 1106 + + + + + x + 1107 + + + + + x + 1108 + + + + + x + 1109 + + + + + x + 1110 + + + + + x + 1111 + + + + + x + 1112 + + + + + x + 1113 + + + + + x + 1114 + + + + + x + 1115 + + + + + x + 1116 + + + + + x + 1117 + + + + + x + 1118 + + + + + x + 1119 + + + + + x + 1120 + + + + + x + 1121 + + + + + x + 1122 + + + + + x + 1123 + + + + + x + 1124 + + + + + x + 1125 + + + + + x + 1126 + + + + + x + 1127 + + + + + x + 1128 + + + + + x + 1129 + + + + + x + 1130 + + + + + x + 1131 + + + + + x + 1132 + + + + + x + 1133 + + + + + x + 1134 + + + + + x + 1135 + + + + + x + 1136 + + + + + x + 1137 + + + + + x + 1138 + + + + + x + 1139 + + + + + x + 1140 + + + + + x + 1141 + + + + + x + 1142 + + + + + x + 1143 + + + + + x + 1144 + + + + + x + 1145 + + + + + x + 1146 + + + + + x + 1147 + + + + + x + 1148 + + + + + x + 1149 + + + + + x + 1150 + + + + + x + 1151 + + + + + x + 1152 + + + + + x + 1153 + + + + + x + 1154 + + + + + x + 1155 + + + + + x + 1156 + + + + + x + 1157 + + + + + x + 1158 + + + + + x + 1159 + + + + + x + 1160 + + + + + x + 1161 + + + + + x + 1162 + + + + + x + 1163 + + + + + x + 1164 + + + + + x + 1165 + + + + + x + 1166 + + + + + x + 1167 + + + + + x + 1168 + + + + + x + 1169 + + + + + x + 1170 + + + + + x + 1171 + + + + + x + 1172 + + + + + x + 1173 + + + + + x + 1174 + + + + + x + 1175 + + + + + x + 1176 + + + + + x + 1177 + + + + + x + 1178 + + + + + x + 1179 + + + + + x + 1180 + + + + + x + 1181 + + + + + x + 1182 + + + + + x + 1183 + + + + + x + 1184 + + + + + x + 1185 + + + + + x + 1186 + + + + + x + 1187 + + + + + x + 1188 + + + + + x + 1189 + + + + + x + 1190 + + + + + x + 1191 + + + + + x + 1192 + + + + + x + 1193 + + + + + x + 1194 + + + + + x + 1195 + + + + + x + 1196 + + + + + x + 1197 + + + + + x + 1198 + + + + + x + 1199 + + + + + x + 1200 + + + + + x + 1201 + + + + + x + 1202 + + + + + x + 1203 + + + + + x + 1204 + + + + + x + 1205 + + + + + x + 1206 + + + + + x + 1207 + + + + + x + 1208 + + + + + x + 1209 + + + + + x + 1210 + + + + + x + 1211 + + + + + x + 1212 + + + + + x + 1213 + + + + + x + 1214 + + + + + x + 1215 + + + + + x + 1216 + + + + + x + 1217 + + + + + x + 1218 + + + + + x + 1219 + + + + + x + 1220 + + + + + x + 1221 + + + + + x + 1222 + + + + + x + 1223 + + + + + x + 1224 + + + + + x + 1225 + + + + + x + 1226 + + + + + x + 1227 + + + + + x + 1228 + + + + + x + 1229 + + + + + x + 1230 + + + + + x + 1231 + + + + + x + 1232 + + + + + x + 1233 + + + + + x + 1234 + + + + + x + 1235 + + + + + x + 1236 + + + + + x + 1237 + + + + + x + 1238 + + + + + x + 1239 + + + + + x + 1240 + + + + + x + 1241 + + + + + x + 1242 + + + + + x + 1243 + + + + + x + 1244 + + + + + x + 1245 + + + + + x + 1246 + + + + + x + 1247 + + + + + x + 1248 + + + + + x + 1249 + + + + + x + 1250 + + + + + x + 1251 + + + + + x + 1252 + + + + + x + 1253 + + + + + x + 1254 + + + + + x + 1255 + + + + + x + 1256 + + + + + x + 1257 + + + + + x + 1258 + + + + + x + 1259 + + + + + x + 1260 + + + + + x + 1261 + + + + + x + 1262 + + + + + x + 1263 + + + + + x + 1264 + + + + + x + 1265 + + + + + x + 1266 + + + + + x + 1267 + + + + + x + 1268 + + + + + x + 1269 + + + + + x + 1270 + + + + + x + 1271 + + + + + x + 1272 + + + + + x + 1273 + + + + + x + 1274 + + + + + x + 1275 + + + + + x + 1276 + + + + + x + 1277 + + + + + x + 1278 + + + + + x + 1279 + + + + + x + 1280 + + + + + x + 1281 + + + + + x + 1282 + + + + + x + 1283 + + + + + x + 1284 + + + + + x + 1285 + + + + + x + 1286 + + + + + x + 1287 + + + + + x + 1288 + + + + + x + 1289 + + + + + x + 1290 + + + + + x + 1291 + + + + + x + 1292 + + + + + x + 1293 + + + + + x + 1294 + + + + + x + 1295 + + + + + x + 1296 + + + + + x + 1297 + + + + + x + 1298 + + + + + x + 1299 + + + + + x + 1300 + + + + + x + 1301 + + + + + x + 1302 + + + + + x + 1303 + + + + + x + 1304 + + + + + x + 1305 + + + + + x + 1306 + + + + + x + 1307 + + + + + x + 1308 + + + + + x + 1309 + + + + + x + 1310 + + + + + x + 1311 + + + + + x + 1312 + + + + + x + 1313 + + + + + x + 1314 + + + + + x + 1315 + + + + + x + 1316 + + + + + x + 1317 + + + + + x + 1318 + + + + + x + 1319 + + + + + x + 1320 + + + + + x + 1321 + + + + + x + 1322 + + + + + x + 1323 + + + + + x + 1324 + + + + + x + 1325 + + + + + x + 1326 + + + + + x + 1327 + + + + + x + 1328 + + + + + x + 1329 + + + + + x + 1330 + + + + + x + 1331 + + + + + x + 1332 + + + + + x + 1333 + + + + + x + 1334 + + + + + x + 1335 + + + + + x + 1336 + + + + + x + 1337 + + + + + x + 1338 + + + + + x + 1339 + + + + + x + 1340 + + + + + x + 1341 + + + + + x + 1342 + + + + + x + 1343 + + + + + x + 1344 + + + + + x + 1345 + + + + + x + 1346 + + + + + x + 1347 + + + + + x + 1348 + + + + + x + 1349 + + + + + x + 1350 + + + + + x + 1351 + + + + + x + 1352 + + + + + x + 1353 + + + + + x + 1354 + + + + + x + 1355 + + + + + x + 1356 + + + + + x + 1357 + + + + + x + 1358 + + + + + x + 1359 + + + + + x + 1360 + + + + + x + 1361 + + + + + x + 1362 + + + + + x + 1363 + + + + + x + 1364 + + + + + x + 1365 + + + + + x + 1366 + + + + + x + 1367 + + + + + x + 1368 + + + + + x + 1369 + + + + + x + 1370 + + + + + x + 1371 + + + + + x + 1372 + + + + + x + 1373 + + + + + x + 1374 + + + + + x + 1375 + + + + + x + 1376 + + + + + x + 1377 + + + + + x + 1378 + + + + + x + 1379 + + + + + x + 1380 + + + + + x + 1381 + + + + + x + 1382 + + + + + x + 1383 + + + + + x + 1384 + + + + + x + 1385 + + + + + x + 1386 + + + + + x + 1387 + + + + + x + 1388 + + + + + x + 1389 + + + + + x + 1390 + + + + + x + 1391 + + + + + x + 1392 + + + + + x + 1393 + + + + + x + 1394 + + + + + x + 1395 + + + + + x + 1396 + + + + + x + 1397 + + + + + x + 1398 + + + + + x + 1399 + + + + + x + 1400 + + + + + x + 1401 + + + + + x + 1402 + + + + + x + 1403 + + + + + x + 1404 + + + + + x + 1405 + + + + + x + 1406 + + + + + x + 1407 + + + + + x + 1408 + + + + + x + 1409 + + + + + x + 1410 + + + + + x + 1411 + + + + + x + 1412 + + + + + x + 1413 + + + + + x + 1414 + + + + + x + 1415 + + + + + x + 1416 + + + + + x + 1417 + + + + + x + 1418 + + + + + x + 1419 + + + + + x + 1420 + + + + + x + 1421 + + + + + x + 1422 + + + + + x + 1423 + + + + + x + 1424 + + + + + x + 1425 + + + + + x + 1426 + + + + + x + 1427 + + + + + x + 1428 + + + + + x + 1429 + + + + + x + 1430 + + + + + x + 1431 + + + + + x + 1432 + + + + + x + 1433 + + + + + x + 1434 + + + + + x + 1435 + + + + + x + 1436 + + + + + x + 1437 + + + + + x + 1438 + + + + + x + 1439 + + + + + x + 1440 + + + + + x + 1441 + + + + + x + 1442 + + + + + x + 1443 + + + + + x + 1444 + + + + + x + 1445 + + + + + x + 1446 + + + + + x + 1447 + + + + + x + 1448 + + + + + x + 1449 + + + + + x + 1450 + + + + + x + 1451 + + + + + x + 1452 + + + + + x + 1453 + + + + + x + 1454 + + + + + x + 1455 + + + + + x + 1456 + + + + + x + 1457 + + + + + x + 1458 + + + + + x + 1459 + + + + + x + 1460 + + + + + x + 1461 + + + + + x + 1462 + + + + + x + 1463 + + + + + x + 1464 + + + + + x + 1465 + + + + + x + 1466 + + + + + x + 1467 + + + + + x + 1468 + + + + + x + 1469 + + + + + x + 1470 + + + + + x + 1471 + + + + + x + 1472 + + + + + x + 1473 + + + + + x + 1474 + + + + + x + 1475 + + + + + x + 1476 + + + + + x + 1477 + + + + + x + 1478 + + + + + x + 1479 + + + + + x + 1480 + + + + + x + 1481 + + + + + x + 1482 + + + + + x + 1483 + + + + + x + 1484 + + + + + x + 1485 + + + + + x + 1486 + + + + + x + 1487 + + + + + x + 1488 + + + + + x + 1489 + + + + + x + 1490 + + + + + x + 1491 + + + + + x + 1492 + + + + + x + 1493 + + + + + x + 1494 + + + + + x + 1495 + + + + + x + 1496 + + + + + x + 1497 + + + + + x + 1498 + + + + + x + 1499 + + + + + x + 1500 + + + + + x + 1501 + + + + + x + 1502 + + + + + x + 1503 + + + + + x + 1504 + + + + + x + 1505 + + + + + x + 1506 + + + + + x + 1507 + + + + + x + 1508 + + + + + x + 1509 + + + + + x + 1510 + + + + + x + 1511 + + + + + x + 1512 + + + + + x + 1513 + + + + + x + 1514 + + + + + x + 1515 + + + + + x + 1516 + + + + + x + 1517 + + + + + x + 1518 + + + + + x + 1519 + + + + + x + 1520 + + + + + x + 1521 + + + + + x + 1522 + + + + + x + 1523 + + + + + x + 1524 + + + + + x + 1525 + + + + + x + 1526 + + + + + x + 1527 + + + + + x + 1528 + + + + + x + 1529 + + + + + x + 1530 + + + + + x + 1531 + + + + + x + 1532 + + + + + x + 1533 + + + + + x + 1534 + + + + + x + 1535 + + + + + x + 1536 + + + + + x + 1537 + + + + + x + 1538 + + + + + x + 1539 + + + + + x + 1540 + + + + + x + 1541 + + + + + x + 1542 + + + + + x + 1543 + + + + + x + 1544 + + + + + x + 1545 + + + + + x + 1546 + + + + + x + 1547 + + + + + x + 1548 + + + + + x + 1549 + + + + + x + 1550 + + + + + x + 1551 + + + + + x + 1552 + + + + + x + 1553 + + + + + x + 1554 + + + + + x + 1555 + + + + + x + 1556 + + + + + x + 1557 + + + + + x + 1558 + + + + + x + 1559 + + + + + x + 1560 + + + + + x + 1561 + + + + + x + 1562 + + + + + x + 1563 + + + + + x + 1564 + + + + + x + 1565 + + + + + x + 1566 + + + + + x + 1567 + + + + + x + 1568 + + + + + x + 1569 + + + + + x + 1570 + + + + + x + 1571 + + + + + x + 1572 + + + + + x + 1573 + + + + + x + 1574 + + + + + x + 1575 + + + + + x + 1576 + + + + + x + 1577 + + + + + x + 1578 + + + + + x + 1579 + + + + + x + 1580 + + + + + x + 1581 + + + + + x + 1582 + + + + + x + 1583 + + + + + x + 1584 + + + + + x + 1585 + + + + + x + 1586 + + + + + x + 1587 + + + + + x + 1588 + + + + + x + 1589 + + + + + x + 1590 + + + + + x + 1591 + + + + + x + 1592 + + + + + x + 1593 + + + + + x + 1594 + + + + + x + 1595 + + + + + x + 1596 + + + + + x + 1597 + + + + + x + 1598 + + + + + x + 1599 + + + + + x + 1600 + + + + + x + 1601 + + + + + x + 1602 + + + + + x + 1603 + + + + + x + 1604 + + + + + x + 1605 + + + + + x + 1606 + + + + + x + 1607 + + + + + x + 1608 + + + + + x + 1609 + + + + + x + 1610 + + + + + x + 1611 + + + + + x + 1612 + + + + + x + 1613 + + + + + x + 1614 + + + + + x + 1615 + + + + + x + 1616 + + + + + x + 1617 + + + + + x + 1618 + + + + + x + 1619 + + + + + x + 1620 + + + + + x + 1621 + + + + + x + 1622 + + + + + x + 1623 + + + + + x + 1624 + + + + + x + 1625 + + + + + x + 1626 + + + + + x + 1627 + + + + + x + 1628 + + + + + x + 1629 + + + + + x + 1630 + + + + + x + 1631 + + + + + x + 1632 + + + + + x + 1633 + + + + + x + 1634 + + + + + x + 1635 + + + + + x + 1636 + + + + + x + 1637 + + + + + x + 1638 + + + + + x + 1639 + + + + + x + 1640 + + + + + x + 1641 + + + + + x + 1642 + + + + + x + 1643 + + + + + x + 1644 + + + + + x + 1645 + + + + + x + 1646 + + + + + x + 1647 + + + + + x + 1648 + + + + + x + 1649 + + + + + x + 1650 + + + + + x + 1651 + + + + + x + 1652 + + + + + x + 1653 + + + + + x + 1654 + + + + + x + 1655 + + + + + x + 1656 + + + + + x + 1657 + + + + + x + 1658 + + + + + x + 1659 + + + + + x + 1660 + + + + + x + 1661 + + + + + x + 1662 + + + + + x + 1663 + + + + + x + 1664 + + + + + x + 1665 + + + + + x + 1666 + + + + + x + 1667 + + + + + x + 1668 + + + + + x + 1669 + + + + + x + 1670 + + + + + x + 1671 + + + + + x + 1672 + + + + + x + 1673 + + + + + x + 1674 + + + + + x + 1675 + + + + + x + 1676 + + + + + x + 1677 + + + + + x + 1678 + + + + + x + 1679 + + + + + x + 1680 + + + + + x + 1681 + + + + + x + 1682 + + + + + x + 1683 + + + + + x + 1684 + + + + + x + 1685 + + + + + x + 1686 + + + + + x + 1687 + + + + + x + 1688 + + + + + x + 1689 + + + + + x + 1690 + + + + + x + 1691 + + + + + x + 1692 + + + + + x + 1693 + + + + + x + 1694 + + + + + x + 1695 + + + + + x + 1696 + + + + + x + 1697 + + + + + x + 1698 + + + + + x + 1699 + + + + + x + 1700 + + + + + x + 1701 + + + + + x + 1702 + + + + + x + 1703 + + + + + x + 1704 + + + + + x + 1705 + + + + + x + 1706 + + + + + x + 1707 + + + + + x + 1708 + + + + + x + 1709 + + + + + x + 1710 + + + + + x + 1711 + + + + + x + 1712 + + + + + x + 1713 + + + + + x + 1714 + + + + + x + 1715 + + + + + x + 1716 + + + + + x + 1717 + + + + + x + 1718 + + + + + x + 1719 + + + + + x + 1720 + + + + + x + 1721 + + + + + x + 1722 + + + + + x + 1723 + + + + + x + 1724 + + + + + x + 1725 + + + + + x + 1726 + + + + + x + 1727 + + + + + x + 1728 + + + + + x + 1729 + + + + + x + 1730 + + + + + x + 1731 + + + + + x + 1732 + + + + + x + 1733 + + + + + x + 1734 + + + + + x + 1735 + + + + + x + 1736 + + + + + x + 1737 + + + + + x + 1738 + + + + + x + 1739 + + + + + x + 1740 + + + + + x + 1741 + + + + + x + 1742 + + + + + x + 1743 + + + + + x + 1744 + + + + + x + 1745 + + + + + x + 1746 + + + + + x + 1747 + + + + + x + 1748 + + + + + x + 1749 + + + + + x + 1750 + + + + + x + 1751 + + + + + x + 1752 + + + + + x + 1753 + + + + + x + 1754 + + + + + x + 1755 + + + + + x + 1756 + + + + + x + 1757 + + + + + x + 1758 + + + + + x + 1759 + + + + + x + 1760 + + + + + x + 1761 + + + + + x + 1762 + + + + + x + 1763 + + + + + x + 1764 + + + + + x + 1765 + + + + + x + 1766 + + + + + x + 1767 + + + + + x + 1768 + + + + + x + 1769 + + + + + x + 1770 + + + + + x + 1771 + + + + + x + 1772 + + + + + x + 1773 + + + + + x + 1774 + + + + + x + 1775 + + + + + x + 1776 + + + + + x + 1777 + + + + + x + 1778 + + + + + x + 1779 + + + + + x + 1780 + + + + + x + 1781 + + + + + x + 1782 + + + + + x + 1783 + + + + + x + 1784 + + + + + x + 1785 + + + + + x + 1786 + + + + + x + 1787 + + + + + x + 1788 + + + + + x + 1789 + + + + + x + 1790 + + + + + x + 1791 + + + + + x + 1792 + + + + + x + 1793 + + + + + x + 1794 + + + + + x + 1795 + + + + + x + 1796 + + + + + x + 1797 + + + + + x + 1798 + + + + + x + 1799 + + + + + x + 1800 + + + + + x + 1801 + + + + + x + 1802 + + + + + x + 1803 + + + + + x + 1804 + + + + + x + 1805 + + + + + x + 1806 + + + + + x + 1807 + + + + + x + 1808 + + + + + x + 1809 + + + + + x + 1810 + + + + + x + 1811 + + + + + x + 1812 + + + + + x + 1813 + + + + + x + 1814 + + + + + x + 1815 + + + + + x + 1816 + + + + + x + 1817 + + + + + x + 1818 + + + + + x + 1819 + + + + + x + 1820 + + + + + x + 1821 + + + + + x + 1822 + + + + + x + 1823 + + + + + x + 1824 + + + + + x + 1825 + + + + + x + 1826 + + + + + x + 1827 + + + + + x + 1828 + + + + + x + 1829 + + + + + x + 1830 + + + + + x + 1831 + + + + + x + 1832 + + + + + x + 1833 + + + + + x + 1834 + + + + + x + 1835 + + + + + x + 1836 + + + + + x + 1837 + + + + + x + 1838 + + + + + x + 1839 + + + + + x + 1840 + + + + + x + 1841 + + + + + x + 1842 + + + + + x + 1843 + + + + + x + 1844 + + + + + x + 1845 + + + + + x + 1846 + + + + + x + 1847 + + + + + x + 1848 + + + + + x + 1849 + + + + + x + 1850 + + + + + x + 1851 + + + + + x + 1852 + + + + + x + 1853 + + + + + x + 1854 + + + + + x + 1855 + + + + + x + 1856 + + + + + x + 1857 + + + + + x + 1858 + + + + + x + 1859 + + + + + x + 1860 + + + + + x + 1861 + + + + + x + 1862 + + + + + x + 1863 + + + + + x + 1864 + + + + + x + 1865 + + + + + x + 1866 + + + + + x + 1867 + + + + + x + 1868 + + + + + x + 1869 + + + + + x + 1870 + + + + + x + 1871 + + + + + x + 1872 + + + + + x + 1873 + + + + + x + 1874 + + + + + x + 1875 + + + + + x + 1876 + + + + + x + 1877 + + + + + x + 1878 + + + + + x + 1879 + + + + + x + 1880 + + + + + x + 1881 + + + + + x + 1882 + + + + + x + 1883 + + + + + x + 1884 + + + + + x + 1885 + + + + + x + 1886 + + + + + x + 1887 + + + + + x + 1888 + + + + + x + 1889 + + + + + x + 1890 + + + + + x + 1891 + + + + + x + 1892 + + + + + x + 1893 + + + + + x + 1894 + + + + + x + 1895 + + + + + x + 1896 + + + + + x + 1897 + + + + + x + 1898 + + + + + x + 1899 + + + + + x + 1900 + + + + + x + 1901 + + + + + x + 1902 + + + + + x + 1903 + + + + + x + 1904 + + + + + x + 1905 + + + + + x + 1906 + + + + + x + 1907 + + + + + x + 1908 + + + + + x + 1909 + + + + + x + 1910 + + + + + x + 1911 + + + + + x + 1912 + + + + + x + 1913 + + + + + x + 1914 + + + + + x + 1915 + + + + + x + 1916 + + + + + x + 1917 + + + + + x + 1918 + + + + + x + 1919 + + + + + x + 1920 + + + + + x + 1921 + + + + + x + 1922 + + + + + x + 1923 + + + + + x + 1924 + + + + + x + 1925 + + + + + x + 1926 + + + + + x + 1927 + + + + + x + 1928 + + + + + x + 1929 + + + + + x + 1930 + + + + + x + 1931 + + + + + x + 1932 + + + + + x + 1933 + + + + + x + 1934 + + + + + x + 1935 + + + + + x + 1936 + + + + + x + 1937 + + + + + x + 1938 + + + + + x + 1939 + + + + + x + 1940 + + + + + x + 1941 + + + + + x + 1942 + + + + + x + 1943 + + + + + x + 1944 + + + + + x + 1945 + + + + + x + 1946 + + + + + x + 1947 + + + + + x + 1948 + + + + + x + 1949 + + + + + x + 1950 + + + + + x + 1951 + + + + + x + 1952 + + + + + x + 1953 + + + + + x + 1954 + + + + + x + 1955 + + + + + x + 1956 + + + + + x + 1957 + + + + + x + 1958 + + + + + x + 1959 + + + + + x + 1960 + + + + + x + 1961 + + + + + x + 1962 + + + + + x + 1963 + + + + + x + 1964 + + + + + x + 1965 + + + + + x + 1966 + + + + + x + 1967 + + + + + x + 1968 + + + + + x + 1969 + + + + + x + 1970 + + + + + x + 1971 + + + + + x + 1972 + + + + + x + 1973 + + + + + x + 1974 + + + + + x + 1975 + + + + + x + 1976 + + + + + x + 1977 + + + + + x + 1978 + + + + + x + 1979 + + + + + x + 1980 + + + + + x + 1981 + + + + + x + 1982 + + + + + x + 1983 + + + + + x + 1984 + + + + + x + 1985 + + + + + x + 1986 + + + + + x + 1987 + + + + + x + 1988 + + + + + x + 1989 + + + + + x + 1990 + + + + + x + 1991 + + + + + x + 1992 + + + + + x + 1993 + + + + + x + 1994 + + + + + x + 1995 + + + + + x + 1996 + + + + + x + 1997 + + + + + x + 1998 + + + + + x + 1999 + + + + + x + 2000 + + + + + x + 2001 + + + + + x + 2002 + + + + + x + 2003 + + + + + x + 2004 + + + + + x + 2005 + + + + + x + 2006 + + + + + x + 2007 + + + + + x + 2008 + + + + + x + 2009 + + + + + x + 2010 + + + + + x + 2011 + + + + + x + 2012 + + + + + x + 2013 + + + + + x + 2014 + + + + + x + 2015 + + + + + x + 2016 + + + + + x + 2017 + + + + + x + 2018 + + + + + x + 2019 + + + + + x + 2020 + + + + + x + 2021 + + + + + x + 2022 + + + + + x + 2023 + + + + + x + 2024 + + + + + x + 2025 + + + + + x + 2026 + + + + + x + 2027 + + + + + x + 2028 + + + + + x + 2029 + + + + + x + 2030 + + + + + x + 2031 + + + + + x + 2032 + + + + + x + 2033 + + + + + x + 2034 + + + + + x + 2035 + + + + + x + 2036 + + + + + x + 2037 + + + + + x + 2038 + + + + + x + 2039 + + + + + x + 2040 + + + + + x + 2041 + + + + + x + 2042 + + + + + x + 2043 + + + + + x + 2044 + + + + + x + 2045 + + + + + x + 2046 + + + + + x + 2047 + + + + + x + 2048 + + + + + x + 2049 + + + + + x + 2050 + + + + + x + 2051 + + + + + x + 2052 + + + + + x + 2053 + + + + + x + 2054 + + + + + x + 2055 + + + + + x + 2056 + + + + + x + 2057 + + + + + x + 2058 + + + + + x + 2059 + + + + + x + 2060 + + + + + x + 2061 + + + + + x + 2062 + + + + + x + 2063 + + + + + x + 2064 + + + + + x + 2065 + + + + + x + 2066 + + + + + x + 2067 + + + + + x + 2068 + + + + + x + 2069 + + + + + x + 2070 + + + + + x + 2071 + + + + + x + 2072 + + + + + x + 2073 + + + + + x + 2074 + + + + + x + 2075 + + + + + x + 2076 + + + + + x + 2077 + + + + + x + 2078 + + + + + x + 2079 + + + + + x + 2080 + + + + + x + 2081 + + + + + x + 2082 + + + + + x + 2083 + + + + + x + 2084 + + + + + x + 2085 + + + + + x + 2086 + + + + + x + 2087 + + + + + x + 2088 + + + + + x + 2089 + + + + + x + 2090 + + + + + x + 2091 + + + + + x + 2092 + + + + + x + 2093 + + + + + x + 2094 + + + + + x + 2095 + + + + + x + 2096 + + + + + x + 2097 + + + + + x + 2098 + + + + + x + 2099 + + + + + x + 2100 + + + + + x + 2101 + + + + + x + 2102 + + + + + x + 2103 + + + + + x + 2104 + + + + + x + 2105 + + + + + x + 2106 + + + + + x + 2107 + + + + + x + 2108 + + + + + x + 2109 + + + + + x + 2110 + + + + + x + 2111 + + + + + x + 2112 + + + + + x + 2113 + + + + + x + 2114 + + + + + x + 2115 + + + + + x + 2116 + + + + + x + 2117 + + + + + x + 2118 + + + + + x + 2119 + + + + + x + 2120 + + + + + x + 2121 + + + + + x + 2122 + + + + + x + 2123 + + + + + x + 2124 + + + + + x + 2125 + + + + + x + 2126 + + + + + x + 2127 + + + + + x + 2128 + + + + + x + 2129 + + + + + x + 2130 + + + + + x + 2131 + + + + + x + 2132 + + + + + x + 2133 + + + + + x + 2134 + + + + + x + 2135 + + + + + x + 2136 + + + + + x + 2137 + + + + + x + 2138 + + + + + x + 2139 + + + + + x + 2140 + + + + + x + 2141 + + + + + x + 2142 + + + + + x + 2143 + + + + + x + 2144 + + + + + x + 2145 + + + + + x + 2146 + + + + + x + 2147 + + + + + x + 2148 + + + + + x + 2149 + + + + + x + 2150 + + + + + x + 2151 + + + + + x + 2152 + + + + + x + 2153 + + + + + x + 2154 + + + + + x + 2155 + + + + + x + 2156 + + + + + x + 2157 + + + + + x + 2158 + + + + + x + 2159 + + + + + x + 2160 + + + + + x + 2161 + + + + + x + 2162 + + + + + x + 2163 + + + + + x + 2164 + + + + + x + 2165 + + + + + x + 2166 + + + + + x + 2167 + + + + + x + 2168 + + + + + x + 2169 + + + + + x + 2170 + + + + + x + 2171 + + + + + x + 2172 + + + + + x + 2173 + + + + + x + 2174 + + + + + x + 2175 + + + + + x + 2176 + + + + + x + 2177 + + + + + x + 2178 + + + + + x + 2179 + + + + + x + 2180 + + + + + x + 2181 + + + + + x + 2182 + + + + + x + 2183 + + + + + x + 2184 + + + + + x + 2185 + + + + + x + 2186 + + + + + x + 2187 + + + + + x + 2188 + + + + + x + 2189 + + + + + x + 2190 + + + + + x + 2191 + + + + + x + 2192 + + + + + x + 2193 + + + + + x + 2194 + + + + + x + 2195 + + + + + x + 2196 + + + + + x + 2197 + + + + + x + 2198 + + + + + x + 2199 + + + + + x + 2200 + + + + + x + 2201 + + + + + x + 2202 + + + + + x + 2203 + + + + + x + 2204 + + + + + x + 2205 + + + + + x + 2206 + + + + + x + 2207 + + + + + x + 2208 + + + + + x + 2209 + + + + + x + 2210 + + + + + x + 2211 + + + + + x + 2212 + + + + + x + 2213 + + + + + x + 2214 + + + + + x + 2215 + + + + + x + 2216 + + + + + x + 2217 + + + + + x + 2218 + + + + + x + 2219 + + + + + x + 2220 + + + + + x + 2221 + + + + + x + 2222 + + + + + x + 2223 + + + + + x + 2224 + + + + + x + 2225 + + + + + x + 2226 + + + + + x + 2227 + + + + + x + 2228 + + + + + x + 2229 + + + + + x + 2230 + + + + + x + 2231 + + + + + x + 2232 + + + + + x + 2233 + + + + + x + 2234 + + + + + x + 2235 + + + + + x + 2236 + + + + + x + 2237 + + + + + x + 2238 + + + + + x + 2239 + + + + + x + 2240 + + + + + x + 2241 + + + + + x + 2242 + + + + + x + 2243 + + + + + x + 2244 + + + + + x + 2245 + + + + + x + 2246 + + + + + x + 2247 + + + + + x + 2248 + + + + + x + 2249 + + + + + x + 2250 + + + + + x + 2251 + + + + + x + 2252 + + + + + x + 2253 + + + + + x + 2254 + + + + + x + 2255 + + + + + x + 2256 + + + + + x + 2257 + + + + + x + 2258 + + + + + x + 2259 + + + + + x + 2260 + + + + + x + 2261 + + + + + x + 2262 + + + + + x + 2263 + + + + + x + 2264 + + + + + x + 2265 + + + + + x + 2266 + + + + + x + 2267 + + + + + x + 2268 + + + + + x + 2269 + + + + + x + 2270 + + + + + x + 2271 + + + + + x + 2272 + + + + + x + 2273 + + + + + x + 2274 + + + + + x + 2275 + + + + + x + 2276 + + + + + x + 2277 + + + + + x + 2278 + + + + + x + 2279 + + + + + x + 2280 + + + + + x + 2281 + + + + + x + 2282 + + + + + x + 2283 + + + + + x + 2284 + + + + + x + 2285 + + + + + x + 2286 + + + + + x + 2287 + + + + + x + 2288 + + + + + x + 2289 + + + + + x + 2290 + + + + + x + 2291 + + + + + x + 2292 + + + + + x + 2293 + + + + + x + 2294 + + + + + x + 2295 + + + + + x + 2296 + + + + + x + 2297 + + + + + x + 2298 + + + + + x + 2299 + + + + + x + 2300 + + + + + x + 2301 + + + + + x + 2302 + + + + + x + 2303 + + + + + x + 2304 + + + + + x + 2305 + + + + + x + 2306 + + + + + x + 2307 + + + + + x + 2308 + + + + + x + 2309 + + + + + x + 2310 + + + + + x + 2311 + + + + + x + 2312 + + + + + x + 2313 + + + + + x + 2314 + + + + + x + 2315 + + + + + x + 2316 + + + + + x + 2317 + + + + + x + 2318 + + + + + x + 2319 + + + + + x + 2320 + + + + + x + 2321 + + + + + x + 2322 + + + + + x + 2323 + + + + + x + 2324 + + + + + x + 2325 + + + + + x + 2326 + + + + + x + 2327 + + + + + x + 2328 + + + + + x + 2329 + + + + + x + 2330 + + + + + x + 2331 + + + + + x + 2332 + + + + + x + 2333 + + + + + x + 2334 + + + + + x + 2335 + + + + + x + 2336 + + + + + x + 2337 + + + + + x + 2338 + + + + + x + 2339 + + + + + x + 2340 + + + + + x + 2341 + + + + + x + 2342 + + + + + x + 2343 + + + + + x + 2344 + + + + + x + 2345 + + + + + x + 2346 + + + + + x + 2347 + + + + + x + 2348 + + + + + x + 2349 + + + + + x + 2350 + + + + + x + 2351 + + + + + x + 2352 + + + + + x + 2353 + + + + + x + 2354 + + + + + x + 2355 + + + + + x + 2356 + + + + + x + 2357 + + + + + x + 2358 + + + + + x + 2359 + + + + + x + 2360 + + + + + x + 2361 + + + + + x + 2362 + + + + + x + 2363 + + + + + x + 2364 + + + + + x + 2365 + + + + + x + 2366 + + + + + x + 2367 + + + + + x + 2368 + + + + + x + 2369 + + + + + x + 2370 + + + + + x + 2371 + + + + + x + 2372 + + + + + x + 2373 + + + + + x + 2374 + + + + + x + 2375 + + + + + x + 2376 + + + + + x + 2377 + + + + + x + 2378 + + + + + x + 2379 + + + + + x + 2380 + + + + + x + 2381 + + + + + x + 2382 + + + + + x + 2383 + + + + + x + 2384 + + + + + x + 2385 + + + + + x + 2386 + + + + + x + 2387 + + + + + x + 2388 + + + + + x + 2389 + + + + + x + 2390 + + + + + x + 2391 + + + + + x + 2392 + + + + + x + 2393 + + + + + x + 2394 + + + + + x + 2395 + + + + + x + 2396 + + + + + x + 2397 + + + + + x + 2398 + + + + + x + 2399 + + + + + x + 2400 + + + + + x + 2401 + + + + + x + 2402 + + + + + x + 2403 + + + + + x + 2404 + + + + + x + 2405 + + + + + x + 2406 + + + + + x + 2407 + + + + + x + 2408 + + + + + x + 2409 + + + + + x + 2410 + + + + + x + 2411 + + + + + x + 2412 + + + + + x + 2413 + + + + + x + 2414 + + + + + x + 2415 + + + + + x + 2416 + + + + + x + 2417 + + + + + x + 2418 + + + + + x + 2419 + + + + + x + 2420 + + + + + x + 2421 + + + + + x + 2422 + + + + + x + 2423 + + + + + x + 2424 + + + + + x + 2425 + + + + + x + 2426 + + + + + x + 2427 + + + + + x + 2428 + + + + + x + 2429 + + + + + x + 2430 + + + + + x + 2431 + + + + + x + 2432 + + + + + x + 2433 + + + + + x + 2434 + + + + + x + 2435 + + + + + x + 2436 + + + + + x + 2437 + + + + + x + 2438 + + + + + x + 2439 + + + + + x + 2440 + + + + + x + 2441 + + + + + x + 2442 + + + + + x + 2443 + + + + + x + 2444 + + + + + x + 2445 + + + + + x + 2446 + + + + + x + 2447 + + + + + x + 2448 + + + + + x + 2449 + + + + + x + 2450 + + + + + x + 2451 + + + + + x + 2452 + + + + + x + 2453 + + + + + x + 2454 + + + + + x + 2455 + + + + + x + 2456 + + + + + x + 2457 + + + + + x + 2458 + + + + + x + 2459 + + + + + x + 2460 + + + + + x + 2461 + + + + + x + 2462 + + + + + x + 2463 + + + + + x + 2464 + + + + + x + 2465 + + + + + x + 2466 + + + + + x + 2467 + + + + + x + 2468 + + + + + x + 2469 + + + + + x + 2470 + + + + + x + 2471 + + + + + x + 2472 + + + + + x + 2473 + + + + + x + 2474 + + + + + x + 2475 + + + + + x + 2476 + + + + + x + 2477 + + + + + x + 2478 + + + + + x + 2479 + + + + + x + 2480 + + + + + x + 2481 + + + + + x + 2482 + + + + + x + 2483 + + + + + x + 2484 + + + + + x + 2485 + + + + + x + 2486 + + + + + x + 2487 + + + + + x + 2488 + + + + + x + 2489 + + + + + x + 2490 + + + + + x + 2491 + + + + + x + 2492 + + + + + x + 2493 + + + + + x + 2494 + + + + + x + 2495 + + + + + x + 2496 + + + + + x + 2497 + + + + + x + 2498 + + + + + x + 2499 + + + + + x + 2500 + + + + + x + 2501 + + + + + x + 2502 + + + + + x + 2503 + + + + + x + 2504 + + + + + x + 2505 + + + + + x + 2506 + + + + + x + 2507 + + + + + x + 2508 + + + + + x + 2509 + + + + + x + 2510 + + + + + x + 2511 + + + + + x + 2512 + + + + + x + 2513 + + + + + x + 2514 + + + + + x + 2515 + + + + + x + 2516 + + + + + x + 2517 + + + + + x + 2518 + + + + + x + 2519 + + + + + x + 2520 + + + + + x + 2521 + + + + + x + 2522 + + + + + x + 2523 + + + + + x + 2524 + + + + + x + 2525 + + + + + x + 2526 + + + + + x + 2527 + + + + + x + 2528 + + + + + x + 2529 + + + + + x + 2530 + + + + + x + 2531 + + + + + x + 2532 + + + + + x + 2533 + + + + + x + 2534 + + + + + x + 2535 + + + + + x + 2536 + + + + + x + 2537 + + + + + x + 2538 + + + + + x + 2539 + + + + + x + 2540 + + + + + x + 2541 + + + + + x + 2542 + + + + + x + 2543 + + + + + x + 2544 + + + + + x + 2545 + + + + + x + 2546 + + + + + x + 2547 + + + + + x + 2548 + + + + + x + 2549 + + + + + x + 2550 + + + + + x + 2551 + + + + + x + 2552 + + + + + x + 2553 + + + + + x + 2554 + + + + + x + 2555 + + + + + x + 2556 + + + + + x + 2557 + + + + + x + 2558 + + + + + x + 2559 + + + + + x + 2560 + + + + + x + 2561 + + + + + x + 2562 + + + + + x + 2563 + + + + + x + 2564 + + + + + x + 2565 + + + + + x + 2566 + + + + + x + 2567 + + + + + x + 2568 + + + + + x + 2569 + + + + + x + 2570 + + + + + x + 2571 + + + + + x + 2572 + + + + + x + 2573 + + + + + x + 2574 + + + + + x + 2575 + + + + + x + 2576 + + + + + x + 2577 + + + + + x + 2578 + + + + + x + 2579 + + + + + x + 2580 + + + + + x + 2581 + + + + + x + 2582 + + + + + x + 2583 + + + + + x + 2584 + + + + + x + 2585 + + + + + x + 2586 + + + + + x + 2587 + + + + + x + 2588 + + + + + x + 2589 + + + + + x + 2590 + + + + + x + 2591 + + + + + x + 2592 + + + + + x + 2593 + + + + + x + 2594 + + + + + x + 2595 + + + + + x + 2596 + + + + + x + 2597 + + + + + x + 2598 + + + + + x + 2599 + + + + + x + 2600 + + + + + x + 2601 + + + + + x + 2602 + + + + + x + 2603 + + + + + x + 2604 + + + + + x + 2605 + + + + + x + 2606 + + + + + x + 2607 + + + + + x + 2608 + + + + + x + 2609 + + + + + x + 2610 + + + + + x + 2611 + + + + + x + 2612 + + + + + x + 2613 + + + + + x + 2614 + + + + + x + 2615 + + + + + x + 2616 + + + + + x + 2617 + + + + + x + 2618 + + + + + x + 2619 + + + + + x + 2620 + + + + + x + 2621 + + + + + x + 2622 + + + + + x + 2623 + + + + + x + 2624 + + + + + x + 2625 + + + + + x + 2626 + + + + + x + 2627 + + + + + x + 2628 + + + + + x + 2629 + + + + + x + 2630 + + + + + x + 2631 + + + + + x + 2632 + + + + + x + 2633 + + + + + x + 2634 + + + + + x + 2635 + + + + + x + 2636 + + + + + x + 2637 + + + + + x + 2638 + + + + + x + 2639 + + + + + x + 2640 + + + + + x + 2641 + + + + + x + 2642 + + + + + x + 2643 + + + + + x + 2644 + + + + + x + 2645 + + + + + x + 2646 + + + + + x + 2647 + + + + + x + 2648 + + + + + x + 2649 + + + + + x + 2650 + + + + + x + 2651 + + + + + x + 2652 + + + + + x + 2653 + + + + + x + 2654 + + + + + x + 2655 + + + + + x + 2656 + + + + + x + 2657 + + + + + x + 2658 + + + + + x + 2659 + + + + + x + 2660 + + + + + x + 2661 + + + + + x + 2662 + + + + + x + 2663 + + + + + x + 2664 + + + + + x + 2665 + + + + + x + 2666 + + + + + x + 2667 + + + + + x + 2668 + + + + + x + 2669 + + + + + x + 2670 + + + + + x + 2671 + + + + + x + 2672 + + + + + x + 2673 + + + + + x + 2674 + + + + + x + 2675 + + + + + x + 2676 + + + + + x + 2677 + + + + + x + 2678 + + + + + x + 2679 + + + + + x + 2680 + + + + + x + 2681 + + + + + x + 2682 + + + + + x + 2683 + + + + + x + 2684 + + + + + x + 2685 + + + + + x + 2686 + + + + + x + 2687 + + + + + x + 2688 + + + + + x + 2689 + + + + + x + 2690 + + + + + x + 2691 + + + + + x + 2692 + + + + + x + 2693 + + + + + x + 2694 + + + + + x + 2695 + + + + + x + 2696 + + + + + x + 2697 + + + + + x + 2698 + + + + + x + 2699 + + + + + x + 2700 + + + + + x + 2701 + + + + + x + 2702 + + + + + x + 2703 + + + + + x + 2704 + + + + + x + 2705 + + + + + x + 2706 + + + + + x + 2707 + + + + + x + 2708 + + + + + x + 2709 + + + + + x + 2710 + + + + + x + 2711 + + + + + x + 2712 + + + + + x + 2713 + + + + + x + 2714 + + + + + x + 2715 + + + + + x + 2716 + + + + + x + 2717 + + + + + x + 2718 + + + + + x + 2719 + + + + + x + 2720 + + + + + x + 2721 + + + + + x + 2722 + + + + + x + 2723 + + + + + x + 2724 + + + + + x + 2725 + + + + + x + 2726 + + + + + x + 2727 + + + + + x + 2728 + + + + + x + 2729 + + + + + x + 2730 + + + + + x + 2731 + + + + + x + 2732 + + + + + x + 2733 + + + + + x + 2734 + + + + + x + 2735 + + + + + x + 2736 + + + + + x + 2737 + + + + + x + 2738 + + + + + x + 2739 + + + + + x + 2740 + + + + + x + 2741 + + + + + x + 2742 + + + + + x + 2743 + + + + + x + 2744 + + + + + x + 2745 + + + + + x + 2746 + + + + + x + 2747 + + + + + x + 2748 + + + + + x + 2749 + + + + + x + 2750 + + + + + x + 2751 + + + + + x + 2752 + + + + + x + 2753 + + + + + x + 2754 + + + + + x + 2755 + + + + + x + 2756 + + + + + x + 2757 + + + + + x + 2758 + + + + + x + 2759 + + + + + x + 2760 + + + + + x + 2761 + + + + + x + 2762 + + + + + x + 2763 + + + + + x + 2764 + + + + + x + 2765 + + + + + x + 2766 + + + + + x + 2767 + + + + + x + 2768 + + + + + x + 2769 + + + + + x + 2770 + + + + + x + 2771 + + + + + x + 2772 + + + + + x + 2773 + + + + + x + 2774 + + + + + x + 2775 + + + + + x + 2776 + + + + + x + 2777 + + + + + x + 2778 + + + + + x + 2779 + + + + + x + 2780 + + + + + x + 2781 + + + + + x + 2782 + + + + + x + 2783 + + + + + x + 2784 + + + + + x + 2785 + + + + + x + 2786 + + + + + x + 2787 + + + + + x + 2788 + + + + + x + 2789 + + + + + x + 2790 + + + + + x + 2791 + + + + + x + 2792 + + + + + x + 2793 + + + + + x + 2794 + + + + + x + 2795 + + + + + x + 2796 + + + + + x + 2797 + + + + + x + 2798 + + + + + x + 2799 + + + + + x + 2800 + + + + + x + 2801 + + + + + x + 2802 + + + + + x + 2803 + + + + + x + 2804 + + + + + x + 2805 + + + + + x + 2806 + + + + + x + 2807 + + + + + x + 2808 + + + + + x + 2809 + + + + + x + 2810 + + + + + x + 2811 + + + + + x + 2812 + + + + + x + 2813 + + + + + x + 2814 + + + + + x + 2815 + + + + + x + 2816 + + + + + x + 2817 + + + + + x + 2818 + + + + + x + 2819 + + + + + x + 2820 + + + + + x + 2821 + + + + + x + 2822 + + + + + x + 2823 + + + + + x + 2824 + + + + + x + 2825 + + + + + x + 2826 + + + + + x + 2827 + + + + + x + 2828 + + + + + x + 2829 + + + + + x + 2830 + + + + + x + 2831 + + + + + x + 2832 + + + + + x + 2833 + + + + + x + 2834 + + + + + x + 2835 + + + + + x + 2836 + + + + + x + 2837 + + + + + x + 2838 + + + + + x + 2839 + + + + + x + 2840 + + + + + x + 2841 + + + + + x + 2842 + + + + + x + 2843 + + + + + x + 2844 + + + + + x + 2845 + + + + + x + 2846 + + + + + x + 2847 + + + + + x + 2848 + + + + + x + 2849 + + + + + x + 2850 + + + + + x + 2851 + + + + + x + 2852 + + + + + x + 2853 + + + + + x + 2854 + + + + + x + 2855 + + + + + x + 2856 + + + + + x + 2857 + + + + + x + 2858 + + + + + x + 2859 + + + + + x + 2860 + + + + + x + 2861 + + + + + x + 2862 + + + + + x + 2863 + + + + + x + 2864 + + + + + x + 2865 + + + + + x + 2866 + + + + + x + 2867 + + + + + x + 2868 + + + + + x + 2869 + + + + + x + 2870 + + + + + x + 2871 + + + + + x + 2872 + + + + + x + 2873 + + + + + x + 2874 + + + + + x + 2875 + + + + + x + 2876 + + + + + x + 2877 + + + + + x + 2878 + + + + + x + 2879 + + + + + x + 2880 + + + + + x + 2881 + + + + + x + 2882 + + + + + x + 2883 + + + + + x + 2884 + + + + + x + 2885 + + + + + x + 2886 + + + + + x + 2887 + + + + + x + 2888 + + + + + x + 2889 + + + + + x + 2890 + + + + + x + 2891 + + + + + x + 2892 + + + + + x + 2893 + + + + + x + 2894 + + + + + x + 2895 + + + + + x + 2896 + + + + + x + 2897 + + + + + x + 2898 + + + + + x + 2899 + + + + + x + 2900 + + + + + x + 2901 + + + + + x + 2902 + + + + + x + 2903 + + + + + x + 2904 + + + + + x + 2905 + + + + + x + 2906 + + + + + x + 2907 + + + + + x + 2908 + + + + + x + 2909 + + + + + x + 2910 + + + + + x + 2911 + + + + + x + 2912 + + + + + x + 2913 + + + + + x + 2914 + + + + + x + 2915 + + + + + x + 2916 + + + + + x + 2917 + + + + + x + 2918 + + + + + x + 2919 + + + + + x + 2920 + + + + + x + 2921 + + + + + x + 2922 + + + + + x + 2923 + + + + + x + 2924 + + + + + x + 2925 + + + + + x + 2926 + + + + + x + 2927 + + + + + x + 2928 + + + + + x + 2929 + + + + + x + 2930 + + + + + x + 2931 + + + + + x + 2932 + + + + + x + 2933 + + + + + x + 2934 + + + + + x + 2935 + + + + + x + 2936 + + + + + x + 2937 + + + + + x + 2938 + + + + + x + 2939 + + + + + x + 2940 + + + + + x + 2941 + + + + + x + 2942 + + + + + x + 2943 + + + + + x + 2944 + + + + + x + 2945 + + + + + x + 2946 + + + + + x + 2947 + + + + + x + 2948 + + + + + x + 2949 + + + + + x + 2950 + + + + + x + 2951 + + + + + x + 2952 + + + + + x + 2953 + + + + + x + 2954 + + + + + x + 2955 + + + + + x + 2956 + + + + + x + 2957 + + + + + x + 2958 + + + + + x + 2959 + + + + + x + 2960 + + + + + x + 2961 + + + + + x + 2962 + + + + + x + 2963 + + + + + x + 2964 + + + + + x + 2965 + + + + + x + 2966 + + + + + x + 2967 + + + + + x + 2968 + + + + + x + 2969 + + + + + x + 2970 + + + + + x + 2971 + + + + + x + 2972 + + + + + x + 2973 + + + + + x + 2974 + + + + + x + 2975 + + + + + x + 2976 + + + + + x + 2977 + + + + + x + 2978 + + + + + x + 2979 + + + + + x + 2980 + + + + + x + 2981 + + + + + x + 2982 + + + + + x + 2983 + + + + + x + 2984 + + + + + x + 2985 + + + + + x + 2986 + + + + + x + 2987 + + + + + x + 2988 + + + + + x + 2989 + + + + + x + 2990 + + + + + x + 2991 + + + + + x + 2992 + + + + + x + 2993 + + + + + x + 2994 + + + + + x + 2995 + + + + + x + 2996 + + + + + x + 2997 + + + + + x + 2998 + + + + + x + 2999 + + + + + x + 3000 + + + + + x + 3001 + + + + + x + 3002 + + + + + x + 3003 + + + + + x + 3004 + + + + + x + 3005 + + + + + x + 3006 + + + + + x + 3007 + + + + + x + 3008 + + + + + x + 3009 + + + + + x + 3010 + + + + + x + 3011 + + + + + x + 3012 + + + + + x + 3013 + + + + + x + 3014 + + + + + x + 3015 + + + + + x + 3016 + + + + + x + 3017 + + + + + x + 3018 + + + + + x + 3019 + + + + + x + 3020 + + + + + x + 3021 + + + + + x + 3022 + + + + + x + 3023 + + + + + x + 3024 + + + + + x + 3025 + + + + + x + 3026 + + + + + x + 3027 + + + + + x + 3028 + + + + + x + 3029 + + + + + x + 3030 + + + + + x + 3031 + + + + + x + 3032 + + + + + x + 3033 + + + + + x + 3034 + + + + + x + 3035 + + + + + x + 3036 + + + + + x + 3037 + + + + + x + 3038 + + + + + x + 3039 + + + + + x + 3040 + + + + + x + 3041 + + + + + x + 3042 + + + + + x + 3043 + + + + + x + 3044 + + + + + x + 3045 + + + + + x + 3046 + + + + + x + 3047 + + + + + x + 3048 + + + + + x + 3049 + + + + + x + 3050 + + + + + x + 3051 + + + + + x + 3052 + + + + + x + 3053 + + + + + x + 3054 + + + + + x + 3055 + + + + + x + 3056 + + + + + x + 3057 + + + + + x + 3058 + + + + + x + 3059 + + + + + x + 3060 + + + + + x + 3061 + + + + + x + 3062 + + + + + x + 3063 + + + + + x + 3064 + + + + + x + 3065 + + + + + x + 3066 + + + + + x + 3067 + + + + + x + 3068 + + + + + x + 3069 + + + + + x + 3070 + + + + + x + 3071 + + + + + x + 3072 + + + + + x + 3073 + + + + + x + 3074 + + + + + x + 3075 + + + + + x + 3076 + + + + + x + 3077 + + + + + x + 3078 + + + + + x + 3079 + + + + + x + 3080 + + + + + x + 3081 + + + + + x + 3082 + + + + + x + 3083 + + + + + x + 3084 + + + + + x + 3085 + + + + + x + 3086 + + + + + x + 3087 + + + + + x + 3088 + + + + + x + 3089 + + + + + x + 3090 + + + + + x + 3091 + + + + + x + 3092 + + + + + x + 3093 + + + + + x + 3094 + + + + + x + 3095 + + + + + x + 3096 + + + + + x + 3097 + + + + + x + 3098 + + + + + x + 3099 + + + + + x + 3100 + + + + + x + 3101 + + + + + x + 3102 + + + + + x + 3103 + + + + + x + 3104 + + + + + x + 3105 + + + + + x + 3106 + + + + + x + 3107 + + + + + x + 3108 + + + + + x + 3109 + + + + + x + 3110 + + + + + x + 3111 + + + + + x + 3112 + + + + + x + 3113 + + + + + x + 3114 + + + + + x + 3115 + + + + + x + 3116 + + + + + x + 3117 + + + + + x + 3118 + + + + + x + 3119 + + + + + x + 3120 + + + + + x + 3121 + + + + + x + 3122 + + + + + x + 3123 + + + + + x + 3124 + + + + + x + 3125 + + + + + x + 3126 + + + + + x + 3127 + + + + + x + 3128 + + + + + x + 3129 + + + + + x + 3130 + + + + + x + 3131 + + + + + x + 3132 + + + + + x + 3133 + + + + + x + 3134 + + + + + x + 3135 + + + + + x + 3136 + + + + + x + 3137 + + + + + x + 3138 + + + + + x + 3139 + + + + + x + 3140 + + + + + x + 3141 + + + + + x + 3142 + + + + + x + 3143 + + + + + x + 3144 + + + + + x + 3145 + + + + + x + 3146 + + + + + x + 3147 + + + + + x + 3148 + + + + + x + 3149 + + + + + x + 3150 + + + + + x + 3151 + + + + + x + 3152 + + + + + x + 3153 + + + + + x + 3154 + + + + + x + 3155 + + + + + x + 3156 + + + + + x + 3157 + + + + + x + 3158 + + + + + x + 3159 + + + + + x + 3160 + + + + + x + 3161 + + + + + x + 3162 + + + + + x + 3163 + + + + + x + 3164 + + + + + x + 3165 + + + + + x + 3166 + + + + + x + 3167 + + + + + x + 3168 + + + + + x + 3169 + + + + + x + 3170 + + + + + x + 3171 + + + + + x + 3172 + + + + + x + 3173 + + + + + x + 3174 + + + + + x + 3175 + + + + + x + 3176 + + + + + x + 3177 + + + + + x + 3178 + + + + + x + 3179 + + + + + x + 3180 + + + + + x + 3181 + + + + + x + 3182 + + + + + x + 3183 + + + + + x + 3184 + + + + + x + 3185 + + + + + x + 3186 + + + + + x + 3187 + + + + + x + 3188 + + + + + x + 3189 + + + + + x + 3190 + + + + + x + 3191 + + + + + x + 3192 + + + + + x + 3193 + + + + + x + 3194 + + + + + x + 3195 + + + + + x + 3196 + + + + + x + 3197 + + + + + x + 3198 + + + + + x + 3199 + + + + + x + 3200 + + + + + x + 3201 + + + + + x + 3202 + + + + + x + 3203 + + + + + x + 3204 + + + + + x + 3205 + + + + + x + 3206 + + + + + x + 3207 + + + + + x + 3208 + + + + + x + 3209 + + + + + x + 3210 + + + + + x + 3211 + + + + + x + 3212 + + + + + x + 3213 + + + + + x + 3214 + + + + + x + 3215 + + + + + x + 3216 + + + + + x + 3217 + + + + + x + 3218 + + + + + x + 3219 + + + + + x + 3220 + + + + + x + 3221 + + + + + x + 3222 + + + + + x + 3223 + + + + + x + 3224 + + + + + x + 3225 + + + + + x + 3226 + + + + + x + 3227 + + + + + x + 3228 + + + + + x + 3229 + + + + + x + 3230 + + + + + x + 3231 + + + + + x + 3232 + + + + + x + 3233 + + + + + x + 3234 + + + + + x + 3235 + + + + + x + 3236 + + + + + x + 3237 + + + + + x + 3238 + + + + + x + 3239 + + + + + x + 3240 + + + + + x + 3241 + + + + + x + 3242 + + + + + x + 3243 + + + + + x + 3244 + + + + + x + 3245 + + + + + x + 3246 + + + + + x + 3247 + + + + + x + 3248 + + + + + x + 3249 + + + + + x + 3250 + + + + + x + 3251 + + + + + x + 3252 + + + + + x + 3253 + + + + + x + 3254 + + + + + x + 3255 + + + + + x + 3256 + + + + + x + 3257 + + + + + x + 3258 + + + + + x + 3259 + + + + + x + 3260 + + + + + x + 3261 + + + + + x + 3262 + + + + + x + 3263 + + + + + x + 3264 + + + + + x + 3265 + + + + + x + 3266 + + + + + x + 3267 + + + + + x + 3268 + + + + + x + 3269 + + + + + x + 3270 + + + + + x + 3271 + + + + + x + 3272 + + + + + x + 3273 + + + + + x + 3274 + + + + + x + 3275 + + + + + x + 3276 + + + + + x + 3277 + + + + + x + 3278 + + + + + x + 3279 + + + + + x + 3280 + + + + + x + 3281 + + + + + x + 3282 + + + + + x + 3283 + + + + + x + 3284 + + + + + x + 3285 + + + + + x + 3286 + + + + + x + 3287 + + + + + x + 3288 + + + + + x + 3289 + + + + + x + 3290 + + + + + x + 3291 + + + + + x + 3292 + + + + + x + 3293 + + + + + x + 3294 + + + + + x + 3295 + + + + + x + 3296 + + + + + x + 3297 + + + + + x + 3298 + + + + + x + 3299 + + + + + x + 3300 + + + + + x + 3301 + + + + + x + 3302 + + + + + x + 3303 + + + + + x + 3304 + + + + + x + 3305 + + + + + x + 3306 + + + + + x + 3307 + + + + + x + 3308 + + + + + x + 3309 + + + + + x + 3310 + + + + + x + 3311 + + + + + x + 3312 + + + + + x + 3313 + + + + + x + 3314 + + + + + x + 3315 + + + + + x + 3316 + + + + + x + 3317 + + + + + x + 3318 + + + + + x + 3319 + + + + + x + 3320 + + + + + x + 3321 + + + + + x + 3322 + + + + + x + 3323 + + + + + x + 3324 + + + + + x + 3325 + + + + + x + 3326 + + + + + x + 3327 + + + + + x + 3328 + + + + + x + 3329 + + + + + x + 3330 + + + + + x + 3331 + + + + + x + 3332 + + + + + x + 3333 + + + + + x + 3334 + + + + + x + 3335 + + + + + x + 3336 + + + + + x + 3337 + + + + + x + 3338 + + + + + x + 3339 + + + + + x + 3340 + + + + + x + 3341 + + + + + x + 3342 + + + + + x + 3343 + + + + + x + 3344 + + + + + x + 3345 + + + + + x + 3346 + + + + + x + 3347 + + + + + x + 3348 + + + + + x + 3349 + + + + + x + 3350 + + + + + x + 3351 + + + + + x + 3352 + + + + + x + 3353 + + + + + x + 3354 + + + + + x + 3355 + + + + + x + 3356 + + + + + x + 3357 + + + + + x + 3358 + + + + + x + 3359 + + + + + x + 3360 + + + + + x + 3361 + + + + + x + 3362 + + + + + x + 3363 + + + + + x + 3364 + + + + + x + 3365 + + + + + x + 3366 + + + + + x + 3367 + + + + + x + 3368 + + + + + x + 3369 + + + + + x + 3370 + + + + + x + 3371 + + + + + x + 3372 + + + + + x + 3373 + + + + + x + 3374 + + + + + x + 3375 + + + + + x + 3376 + + + + + x + 3377 + + + + + x + 3378 + + + + + x + 3379 + + + + + x + 3380 + + + + + x + 3381 + + + + + x + 3382 + + + + + x + 3383 + + + + + x + 3384 + + + + + x + 3385 + + + + + x + 3386 + + + + + x + 3387 + + + + + x + 3388 + + + + + x + 3389 + + + + + x + 3390 + + + + + x + 3391 + + + + + x + 3392 + + + + + x + 3393 + + + + + x + 3394 + + + + + x + 3395 + + + + + x + 3396 + + + + + x + 3397 + + + + + x + 3398 + + + + + x + 3399 + + + + + x + 3400 + + + + + x + 3401 + + + + + x + 3402 + + + + + x + 3403 + + + + + x + 3404 + + + + + x + 3405 + + + + + x + 3406 + + + + + x + 3407 + + + + + x + 3408 + + + + + x + 3409 + + + + + x + 3410 + + + + + x + 3411 + + + + + x + 3412 + + + + + x + 3413 + + + + + x + 3414 + + + + + x + 3415 + + + + + x + 3416 + + + + + x + 3417 + + + + + x + 3418 + + + + + x + 3419 + + + + + x + 3420 + + + + + x + 3421 + + + + + x + 3422 + + + + + x + 3423 + + + + + x + 3424 + + + + + x + 3425 + + + + + x + 3426 + + + + + x + 3427 + + + + + x + 3428 + + + + + x + 3429 + + + + + x + 3430 + + + + + x + 3431 + + + + + x + 3432 + + + + + x + 3433 + + + + + x + 3434 + + + + + x + 3435 + + + + + x + 3436 + + + + + x + 3437 + + + + + x + 3438 + + + + + x + 3439 + + + + + x + 3440 + + + + + x + 3441 + + + + + x + 3442 + + + + + x + 3443 + + + + + x + 3444 + + + + + x + 3445 + + + + + x + 3446 + + + + + x + 3447 + + + + + x + 3448 + + + + + x + 3449 + + + + + x + 3450 + + + + + x + 3451 + + + + + x + 3452 + + + + + x + 3453 + + + + + x + 3454 + + + + + x + 3455 + + + + + x + 3456 + + + + + x + 3457 + + + + + x + 3458 + + + + + x + 3459 + + + + + x + 3460 + + + + + x + 3461 + + + + + x + 3462 + + + + + x + 3463 + + + + + x + 3464 + + + + + x + 3465 + + + + + x + 3466 + + + + + x + 3467 + + + + + x + 3468 + + + + + x + 3469 + + + + + x + 3470 + + + + + x + 3471 + + + + + x + 3472 + + + + + x + 3473 + + + + + x + 3474 + + + + + x + 3475 + + + + + x + 3476 + + + + + x + 3477 + + + + + x + 3478 + + + + + x + 3479 + + + + + x + 3480 + + + + + x + 3481 + + + + + x + 3482 + + + + + x + 3483 + + + + + x + 3484 + + + + + x + 3485 + + + + + x + 3486 + + + + + x + 3487 + + + + + x + 3488 + + + + + x + 3489 + + + + + x + 3490 + + + + + x + 3491 + + + + + x + 3492 + + + + + x + 3493 + + + + + x + 3494 + + + + + x + 3495 + + + + + x + 3496 + + + + + x + 3497 + + + + + x + 3498 + + + + + x + 3499 + + + + + x + 3500 + + + + + x + 3501 + + + + + x + 3502 + + + + + x + 3503 + + + + + x + 3504 + + + + + x + 3505 + + + + + x + 3506 + + + + + x + 3507 + + + + + x + 3508 + + + + + x + 3509 + + + + + x + 3510 + + + + + x + 3511 + + + + + x + 3512 + + + + + x + 3513 + + + + + x + 3514 + + + + + x + 3515 + + + + + x + 3516 + + + + + x + 3517 + + + + + x + 3518 + + + + + x + 3519 + + + + + x + 3520 + + + + + x + 3521 + + + + + x + 3522 + + + + + x + 3523 + + + + + x + 3524 + + + + + x + 3525 + + + + + x + 3526 + + + + + x + 3527 + + + + + x + 3528 + + + + + x + 3529 + + + + + x + 3530 + + + + + x + 3531 + + + + + x + 3532 + + + + + x + 3533 + + + + + x + 3534 + + + + + x + 3535 + + + + + x + 3536 + + + + + x + 3537 + + + + + x + 3538 + + + + + x + 3539 + + + + + x + 3540 + + + + + x + 3541 + + + + + x + 3542 + + + + + x + 3543 + + + + + x + 3544 + + + + + x + 3545 + + + + + x + 3546 + + + + + x + 3547 + + + + + x + 3548 + + + + + x + 3549 + + + + + x + 3550 + + + + + x + 3551 + + + + + x + 3552 + + + + + x + 3553 + + + + + x + 3554 + + + + + x + 3555 + + + + + x + 3556 + + + + + x + 3557 + + + + + x + 3558 + + + + + x + 3559 + + + + + x + 3560 + + + + + x + 3561 + + + + + x + 3562 + + + + + x + 3563 + + + + + x + 3564 + + + + + x + 3565 + + + + + x + 3566 + + + + + x + 3567 + + + + + x + 3568 + + + + + x + 3569 + + + + + x + 3570 + + + + + x + 3571 + + + + + x + 3572 + + + + + x + 3573 + + + + + x + 3574 + + + + + x + 3575 + + + + + x + 3576 + + + + + x + 3577 + + + + + x + 3578 + + + + + x + 3579 + + + + + x + 3580 + + + + + x + 3581 + + + + + x + 3582 + + + + + x + 3583 + + + + + x + 3584 + + + + + x + 3585 + + + + + x + 3586 + + + + + x + 3587 + + + + + x + 3588 + + + + + x + 3589 + + + + + x + 3590 + + + + + x + 3591 + + + + + x + 3592 + + + + + x + 3593 + + + + + x + 3594 + + + + + x + 3595 + + + + + x + 3596 + + + + + x + 3597 + + + + + x + 3598 + + + + + x + 3599 + + + + + x + 3600 + + + + + x + 3601 + + + + + x + 3602 + + + + + x + 3603 + + + + + x + 3604 + + + + + x + 3605 + + + + + x + 3606 + + + + + x + 3607 + + + + + x + 3608 + + + + + x + 3609 + + + + + x + 3610 + + + + + x + 3611 + + + + + x + 3612 + + + + + x + 3613 + + + + + x + 3614 + + + + + x + 3615 + + + + + x + 3616 + + + + + x + 3617 + + + + + x + 3618 + + + + + x + 3619 + + + + + x + 3620 + + + + + x + 3621 + + + + + x + 3622 + + + + + x + 3623 + + + + + x + 3624 + + + + + x + 3625 + + + + + x + 3626 + + + + + x + 3627 + + + + + x + 3628 + + + + + x + 3629 + + + + + x + 3630 + + + + + x + 3631 + + + + + x + 3632 + + + + + x + 3633 + + + + + x + 3634 + + + + + x + 3635 + + + + + x + 3636 + + + + + x + 3637 + + + + + x + 3638 + + + + + x + 3639 + + + + + x + 3640 + + + + + x + 3641 + + + + + x + 3642 + + + + + x + 3643 + + + + + x + 3644 + + + + + x + 3645 + + + + + x + 3646 + + + + + x + 3647 + + + + + x + 3648 + + + + + x + 3649 + + + + + x + 3650 + + + + + x + 3651 + + + + + x + 3652 + + + + + x + 3653 + + + + + x + 3654 + + + + + x + 3655 + + + + + x + 3656 + + + + + x + 3657 + + + + + x + 3658 + + + + + x + 3659 + + + + + x + 3660 + + + + + x + 3661 + + + + + x + 3662 + + + + + x + 3663 + + + + + x + 3664 + + + + + x + 3665 + + + + + x + 3666 + + + + + x + 3667 + + + + + x + 3668 + + + + + x + 3669 + + + + + x + 3670 + + + + + x + 3671 + + + + + x + 3672 + + + + + x + 3673 + + + + + x + 3674 + + + + + x + 3675 + + + + + x + 3676 + + + + + x + 3677 + + + + + x + 3678 + + + + + x + 3679 + + + + + x + 3680 + + + + + x + 3681 + + + + + x + 3682 + + + + + x + 3683 + + + + + x + 3684 + + + + + x + 3685 + + + + + x + 3686 + + + + + x + 3687 + + + + + x + 3688 + + + + + x + 3689 + + + + + x + 3690 + + + + + x + 3691 + + + + + x + 3692 + + + + + x + 3693 + + + + + x + 3694 + + + + + x + 3695 + + + + + x + 3696 + + + + + x + 3697 + + + + + x + 3698 + + + + + x + 3699 + + + + + x + 3700 + + + + + x + 3701 + + + + + x + 3702 + + + + + x + 3703 + + + + + x + 3704 + + + + + x + 3705 + + + + + x + 3706 + + + + + x + 3707 + + + + + x + 3708 + + + + + x + 3709 + + + + + x + 3710 + + + + + x + 3711 + + + + + x + 3712 + + + + + x + 3713 + + + + + x + 3714 + + + + + x + 3715 + + + + + x + 3716 + + + + + x + 3717 + + + + + x + 3718 + + + + + x + 3719 + + + + + x + 3720 + + + + + x + 3721 + + + + + x + 3722 + + + + + x + 3723 + + + + + x + 3724 + + + + + x + 3725 + + + + + x + 3726 + + + + + x + 3727 + + + + + x + 3728 + + + + + x + 3729 + + + + + x + 3730 + + + + + x + 3731 + + + + + x + 3732 + + + + + x + 3733 + + + + + x + 3734 + + + + + x + 3735 + + + + + x + 3736 + + + + + x + 3737 + + + + + x + 3738 + + + + + x + 3739 + + + + + x + 3740 + + + + + x + 3741 + + + + + x + 3742 + + + + + x + 3743 + + + + + x + 3744 + + + + + x + 3745 + + + + + x + 3746 + + + + + x + 3747 + + + + + x + 3748 + + + + + x + 3749 + + + + + x + 3750 + + + + + x + 3751 + + + + + x + 3752 + + + + + x + 3753 + + + + + x + 3754 + + + + + x + 3755 + + + + + x + 3756 + + + + + x + 3757 + + + + + x + 3758 + + + + + x + 3759 + + + + + x + 3760 + + + + + x + 3761 + + + + + x + 3762 + + + + + x + 3763 + + + + + x + 3764 + + + + + x + 3765 + + + + + x + 3766 + + + + + x + 3767 + + + + + x + 3768 + + + + + x + 3769 + + + + + x + 3770 + + + + + x + 3771 + + + + + x + 3772 + + + + + x + 3773 + + + + + x + 3774 + + + + + x + 3775 + + + + + x + 3776 + + + + + x + 3777 + + + + + x + 3778 + + + + + x + 3779 + + + + + x + 3780 + + + + + x + 3781 + + + + + x + 3782 + + + + + x + 3783 + + + + + x + 3784 + + + + + x + 3785 + + + + + x + 3786 + + + + + x + 3787 + + + + + x + 3788 + + + + + x + 3789 + + + + + x + 3790 + + + + + x + 3791 + + + + + x + 3792 + + + + + x + 3793 + + + + + x + 3794 + + + + + x + 3795 + + + + + x + 3796 + + + + + x + 3797 + + + + + x + 3798 + + + + + x + 3799 + + + + + x + 3800 + + + + + x + 3801 + + + + + x + 3802 + + + + + x + 3803 + + + + + x + 3804 + + + + + x + 3805 + + + + + x + 3806 + + + + + x + 3807 + + + + + x + 3808 + + + + + x + 3809 + + + + + x + 3810 + + + + + x + 3811 + + + + + x + 3812 + + + + + x + 3813 + + + + + x + 3814 + + + + + x + 3815 + + + + + x + 3816 + + + + + x + 3817 + + + + + x + 3818 + + + + + x + 3819 + + + + + x + 3820 + + + + + x + 3821 + + + + + x + 3822 + + + + + x + 3823 + + + + + x + 3824 + + + + + x + 3825 + + + + + x + 3826 + + + + + x + 3827 + + + + + x + 3828 + + + + + x + 3829 + + + + + x + 3830 + + + + + x + 3831 + + + + + x + 3832 + + + + + x + 3833 + + + + + x + 3834 + + + + + x + 3835 + + + + + x + 3836 + + + + + x + 3837 + + + + + x + 3838 + + + + + x + 3839 + + + + + x + 3840 + + + + + x + 3841 + + + + + x + 3842 + + + + + x + 3843 + + + + + x + 3844 + + + + + x + 3845 + + + + + x + 3846 + + + + + x + 3847 + + + + + x + 3848 + + + + + x + 3849 + + + + + x + 3850 + + + + + x + 3851 + + + + + x + 3852 + + + + + x + 3853 + + + + + x + 3854 + + + + + x + 3855 + + + + + x + 3856 + + + + + x + 3857 + + + + + x + 3858 + + + + + x + 3859 + + + + + x + 3860 + + + + + x + 3861 + + + + + x + 3862 + + + + + x + 3863 + + + + + x + 3864 + + + + + x + 3865 + + + + + x + 3866 + + + + + x + 3867 + + + + + x + 3868 + + + + + x + 3869 + + + + + x + 3870 + + + + + x + 3871 + + + + + x + 3872 + + + + + x + 3873 + + + + + x + 3874 + + + + + x + 3875 + + + + + x + 3876 + + + + + x + 3877 + + + + + x + 3878 + + + + + x + 3879 + + + + + x + 3880 + + + + + x + 3881 + + + + + x + 3882 + + + + + x + 3883 + + + + + x + 3884 + + + + + x + 3885 + + + + + x + 3886 + + + + + x + 3887 + + + + + x + 3888 + + + + + x + 3889 + + + + + x + 3890 + + + + + x + 3891 + + + + + x + 3892 + + + + + x + 3893 + + + + + x + 3894 + + + + + x + 3895 + + + + + x + 3896 + + + + + x + 3897 + + + + + x + 3898 + + + + + x + 3899 + + + + + x + 3900 + + + + + x + 3901 + + + + + x + 3902 + + + + + x + 3903 + + + + + x + 3904 + + + + + x + 3905 + + + + + x + 3906 + + + + + x + 3907 + + + + + x + 3908 + + + + + x + 3909 + + + + + x + 3910 + + + + + x + 3911 + + + + + x + 3912 + + + + + x + 3913 + + + + + x + 3914 + + + + + x + 3915 + + + + + x + 3916 + + + + + x + 3917 + + + + + x + 3918 + + + + + x + 3919 + + + + + x + 3920 + + + + + x + 3921 + + + + + x + 3922 + + + + + x + 3923 + + + + + x + 3924 + + + + + x + 3925 + + + + + x + 3926 + + + + + x + 3927 + + + + + x + 3928 + + + + + x + 3929 + + + + + x + 3930 + + + + + x + 3931 + + + + + x + 3932 + + + + + x + 3933 + + + + + x + 3934 + + + + + x + 3935 + + + + + x + 3936 + + + + + x + 3937 + + + + + x + 3938 + + + + + x + 3939 + + + + + x + 3940 + + + + + x + 3941 + + + + + x + 3942 + + + + + x + 3943 + + + + + x + 3944 + + + + + x + 3945 + + + + + x + 3946 + + + + + x + 3947 + + + + + x + 3948 + + + + + x + 3949 + + + + + x + 3950 + + + + + x + 3951 + + + + + x + 3952 + + + + + x + 3953 + + + + + x + 3954 + + + + + x + 3955 + + + + + x + 3956 + + + + + x + 3957 + + + + + x + 3958 + + + + + x + 3959 + + + + + x + 3960 + + + + + x + 3961 + + + + + x + 3962 + + + + + x + 3963 + + + + + x + 3964 + + + + + x + 3965 + + + + + x + 3966 + + + + + x + 3967 + + + + + x + 3968 + + + + + x + 3969 + + + + + x + 3970 + + + + + x + 3971 + + + + + x + 3972 + + + + + x + 3973 + + + + + x + 3974 + + + + + x + 3975 + + + + + x + 3976 + + + + + x + 3977 + + + + + x + 3978 + + + + + x + 3979 + + + + + x + 3980 + + + + + x + 3981 + + + + + x + 3982 + + + + + x + 3983 + + + + + x + 3984 + + + + + x + 3985 + + + + + x + 3986 + + + + + x + 3987 + + + + + x + 3988 + + + + + x + 3989 + + + + + x + 3990 + + + + + x + 3991 + + + + + x + 3992 + + + + + x + 3993 + + + + + x + 3994 + + + + + x + 3995 + + + + + x + 3996 + + + + + x + 3997 + + + + + x + 3998 + + + + + x + 3999 + + + + + x + 4000 + + + + + x + 4001 + + + + + x + 4002 + + + + + x + 4003 + + + + + x + 4004 + + + + + x + 4005 + + + + + x + 4006 + + + + + x + 4007 + + + + + x + 4008 + + + + + x + 4009 + + + + + x + 4010 + + + + + x + 4011 + + + + + x + 4012 + + + + + x + 4013 + + + + + x + 4014 + + + + + x + 4015 + + + + + x + 4016 + + + + + x + 4017 + + + + + x + 4018 + + + + + x + 4019 + + + + + x + 4020 + + + + + x + 4021 + + + + + x + 4022 + + + + + x + 4023 + + + + + x + 4024 + + + + + x + 4025 + + + + + x + 4026 + + + + + x + 4027 + + + + + x + 4028 + + + + + x + 4029 + + + + + x + 4030 + + + + + x + 4031 + + + + + x + 4032 + + + + + x + 4033 + + + + + x + 4034 + + + + + x + 4035 + + + + + x + 4036 + + + + + x + 4037 + + + + + x + 4038 + + + + + x + 4039 + + + + + x + 4040 + + + + + x + 4041 + + + + + x + 4042 + + + + + x + 4043 + + + + + x + 4044 + + + + + x + 4045 + + + + + x + 4046 + + + + + x + 4047 + + + + + x + 4048 + + + + + x + 4049 + + + + + x + 4050 + + + + + x + 4051 + + + + + x + 4052 + + + + + x + 4053 + + + + + x + 4054 + + + + + x + 4055 + + + + + x + 4056 + + + + + x + 4057 + + + + + x + 4058 + + + + + x + 4059 + + + + + x + 4060 + + + + + x + 4061 + + + + + x + 4062 + + + + + x + 4063 + + + + + x + 4064 + + + + + x + 4065 + + + + + x + 4066 + + + + + x + 4067 + + + + + x + 4068 + + + + + x + 4069 + + + + + x + 4070 + + + + + x + 4071 + + + + + x + 4072 + + + + + x + 4073 + + + + + x + 4074 + + + + + x + 4075 + + + + + x + 4076 + + + + + x + 4077 + + + + + x + 4078 + + + + + x + 4079 + + + + + x + 4080 + + + + + x + 4081 + + + + + x + 4082 + + + + + x + 4083 + + + + + x + 4084 + + + + + x + 4085 + + + + + x + 4086 + + + + + x + 4087 + + + + + x + 4088 + + + + + x + 4089 + + + + + x + 4090 + + + + + x + 4091 + + + + + x + 4092 + + + + + x + 4093 + + + + + x + 4094 + + + + + x + 4095 + + + + + x + 4096 + + + + + x + 4097 + + + + + x + 4098 + + + + + x + 4099 + + + + + x + 4100 + + + + + x + 4101 + + + + + x + 4102 + + + + + x + 4103 + + + + + x + 4104 + + + + + x + 4105 + + + + + x + 4106 + + + + + x + 4107 + + + + + x + 4108 + + + + + x + 4109 + + + + + x + 4110 + + + + + x + 4111 + + + + + x + 4112 + + + + + x + 4113 + + + + + x + 4114 + + + + + x + 4115 + + + + + x + 4116 + + + + + x + 4117 + + + + + x + 4118 + + + + + x + 4119 + + + + + x + 4120 + + + + + x + 4121 + + + + + x + 4122 + + + + + x + 4123 + + + + + x + 4124 + + + + + x + 4125 + + + + + x + 4126 + + + + + x + 4127 + + + + + x + 4128 + + + + + x + 4129 + + + + + x + 4130 + + + + + x + 4131 + + + + + x + 4132 + + + + + x + 4133 + + + + + x + 4134 + + + + + x + 4135 + + + + + x + 4136 + + + + + x + 4137 + + + + + x + 4138 + + + + + x + 4139 + + + + + x + 4140 + + + + + x + 4141 + + + + + x + 4142 + + + + + x + 4143 + + + + + x + 4144 + + + + + x + 4145 + + + + + x + 4146 + + + + + x + 4147 + + + + + x + 4148 + + + + + x + 4149 + + + + + x + 4150 + + + + + x + 4151 + + + + + x + 4152 + + + + + x + 4153 + + + + + x + 4154 + + + + + x + 4155 + + + + + x + 4156 + + + + + x + 4157 + + + + + x + 4158 + + + + + x + 4159 + + + + + x + 4160 + + + + + x + 4161 + + + + + x + 4162 + + + + + x + 4163 + + + + + x + 4164 + + + + + x + 4165 + + + + + x + 4166 + + + + + x + 4167 + + + + + x + 4168 + + + + + x + 4169 + + + + + x + 4170 + + + + + x + 4171 + + + + + x + 4172 + + + + + x + 4173 + + + + + x + 4174 + + + + + x + 4175 + + + + + x + 4176 + + + + + x + 4177 + + + + + x + 4178 + + + + + x + 4179 + + + + + x + 4180 + + + + + x + 4181 + + + + + x + 4182 + + + + + x + 4183 + + + + + x + 4184 + + + + + x + 4185 + + + + + x + 4186 + + + + + x + 4187 + + + + + x + 4188 + + + + + x + 4189 + + + + + x + 4190 + + + + + x + 4191 + + + + + x + 4192 + + + + + x + 4193 + + + + + x + 4194 + + + + + x + 4195 + + + + + x + 4196 + + + + + x + 4197 + + + + + x + 4198 + + + + + x + 4199 + + + + + x + 4200 + + + + + x + 4201 + + + + + x + 4202 + + + + + x + 4203 + + + + + x + 4204 + + + + + x + 4205 + + + + + x + 4206 + + + + + x + 4207 + + + + + x + 4208 + + + + + x + 4209 + + + + + x + 4210 + + + + + x + 4211 + + + + + x + 4212 + + + + + x + 4213 + + + + + x + 4214 + + + + + x + 4215 + + + + + x + 4216 + + + + + x + 4217 + + + + + x + 4218 + + + + + x + 4219 + + + + + x + 4220 + + + + + x + 4221 + + + + + x + 4222 + + + + + x + 4223 + + + + + x + 4224 + + + + + x + 4225 + + + + + x + 4226 + + + + + x + 4227 + + + + + x + 4228 + + + + + x + 4229 + + + + + x + 4230 + + + + + x + 4231 + + + + + x + 4232 + + + + + x + 4233 + + + + + x + 4234 + + + + + x + 4235 + + + + + x + 4236 + + + + + x + 4237 + + + + + x + 4238 + + + + + x + 4239 + + + + + x + 4240 + + + + + x + 4241 + + + + + x + 4242 + + + + + x + 4243 + + + + + x + 4244 + + + + + x + 4245 + + + + + x + 4246 + + + + + x + 4247 + + + + + x + 4248 + + + + + x + 4249 + + + + + x + 4250 + + + + + x + 4251 + + + + + x + 4252 + + + + + x + 4253 + + + + + x + 4254 + + + + + x + 4255 + + + + + x + 4256 + + + + + x + 4257 + + + + + x + 4258 + + + + + x + 4259 + + + + + x + 4260 + + + + + x + 4261 + + + + + x + 4262 + + + + + x + 4263 + + + + + x + 4264 + + + + + x + 4265 + + + + + x + 4266 + + + + + x + 4267 + + + + + x + 4268 + + + + + x + 4269 + + + + + x + 4270 + + + + + x + 4271 + + + + + x + 4272 + + + + + x + 4273 + + + + + x + 4274 + + + + + x + 4275 + + + + + x + 4276 + + + + + x + 4277 + + + + + x + 4278 + + + + + x + 4279 + + + + + x + 4280 + + + + + x + 4281 + + + + + x + 4282 + + + + + x + 4283 + + + + + x + 4284 + + + + + x + 4285 + + + + + x + 4286 + + + + + x + 4287 + + + + + x + 4288 + + + + + x + 4289 + + + + + x + 4290 + + + + + x + 4291 + + + + + x + 4292 + + + + + x + 4293 + + + + + x + 4294 + + + + + x + 4295 + + + + + x + 4296 + + + + + x + 4297 + + + + + x + 4298 + + + + + x + 4299 + + + + + x + 4300 + + + + + x + 4301 + + + + + x + 4302 + + + + + x + 4303 + + + + + x + 4304 + + + + + x + 4305 + + + + + x + 4306 + + + + + x + 4307 + + + + + x + 4308 + + + + + x + 4309 + + + + + x + 4310 + + + + + x + 4311 + + + + + x + 4312 + + + + + x + 4313 + + + + + x + 4314 + + + + + x + 4315 + + + + + x + 4316 + + + + + x + 4317 + + + + + x + 4318 + + + + + x + 4319 + + + + + x + 4320 + + + + + x + 4321 + + + + + x + 4322 + + + + + x + 4323 + + + + + x + 4324 + + + + + x + 4325 + + + + + x + 4326 + + + + + x + 4327 + + + + + x + 4328 + + + + + x + 4329 + + + + + x + 4330 + + + + + x + 4331 + + + + + x + 4332 + + + + + x + 4333 + + + + + x + 4334 + + + + + x + 4335 + + + + + x + 4336 + + + + + x + 4337 + + + + + x + 4338 + + + + + x + 4339 + + + + + x + 4340 + + + + + x + 4341 + + + + + x + 4342 + + + + + x + 4343 + + + + + x + 4344 + + + + + x + 4345 + + + + + x + 4346 + + + + + x + 4347 + + + + + x + 4348 + + + + + x + 4349 + + + + + x + 4350 + + + + + x + 4351 + + + + + x + 4352 + + + + + x + 4353 + + + + + x + 4354 + + + + + x + 4355 + + + + + x + 4356 + + + + + x + 4357 + + + + + x + 4358 + + + + + x + 4359 + + + + + x + 4360 + + + + + x + 4361 + + + + + x + 4362 + + + + + x + 4363 + + + + + x + 4364 + + + + + x + 4365 + + + + + x + 4366 + + + + + x + 4367 + + + + + x + 4368 + + + + + x + 4369 + + + + + x + 4370 + + + + + x + 4371 + + + + + x + 4372 + + + + + x + 4373 + + + + + x + 4374 + + + + + x + 4375 + + + + + x + 4376 + + + + + x + 4377 + + + + + x + 4378 + + + + + x + 4379 + + + + + x + 4380 + + + + + x + 4381 + + + + + x + 4382 + + + + + x + 4383 + + + + + x + 4384 + + + + + x + 4385 + + + + + x + 4386 + + + + + x + 4387 + + + + + x + 4388 + + + + + x + 4389 + + + + + x + 4390 + + + + + x + 4391 + + + + + x + 4392 + + + + + x + 4393 + + + + + x + 4394 + + + + + x + 4395 + + + + + x + 4396 + + + + + x + 4397 + + + + + x + 4398 + + + + + x + 4399 + + + + + x + 4400 + + + + + x + 4401 + + + + + x + 4402 + + + + + x + 4403 + + + + + x + 4404 + + + + + x + 4405 + + + + + x + 4406 + + + + + x + 4407 + + + + + x + 4408 + + + + + x + 4409 + + + + + x + 4410 + + + + + x + 4411 + + + + + x + 4412 + + + + + x + 4413 + + + + + x + 4414 + + + + + x + 4415 + + + + + x + 4416 + + + + + x + 4417 + + + + + x + 4418 + + + + + x + 4419 + + + + + x + 4420 + + + + + x + 4421 + + + + + x + 4422 + + + + + x + 4423 + + + + + x + 4424 + + + + + x + 4425 + + + + + x + 4426 + + + + + x + 4427 + + + + + x + 4428 + + + + + x + 4429 + + + + + x + 4430 + + + + + x + 4431 + + + + + x + 4432 + + + + + x + 4433 + + + + + x + 4434 + + + + + x + 4435 + + + + + x + 4436 + + + + + x + 4437 + + + + + x + 4438 + + + + + x + 4439 + + + + + x + 4440 + + + + + x + 4441 + + + + + x + 4442 + + + + + x + 4443 + + + + + x + 4444 + + + + + x + 4445 + + + + + x + 4446 + + + + + x + 4447 + + + + + x + 4448 + + + + + x + 4449 + + + + + x + 4450 + + + + + x + 4451 + + + + + x + 4452 + + + + + x + 4453 + + + + + x + 4454 + + + + + x + 4455 + + + + + x + 4456 + + + + + x + 4457 + + + + + x + 4458 + + + + + x + 4459 + + + + + x + 4460 + + + + + x + 4461 + + + + + x + 4462 + + + + + x + 4463 + + + + + x + 4464 + + + + + x + 4465 + + + + + x + 4466 + + + + + x + 4467 + + + + + x + 4468 + + + + + x + 4469 + + + + + x + 4470 + + + + + x + 4471 + + + + + x + 4472 + + + + + x + 4473 + + + + + x + 4474 + + + + + x + 4475 + + + + + x + 4476 + + + + + x + 4477 + + + + + x + 4478 + + + + + x + 4479 + + + + + x + 4480 + + + + + x + 4481 + + + + + x + 4482 + + + + + x + 4483 + + + + + x + 4484 + + + + + x + 4485 + + + + + x + 4486 + + + + + x + 4487 + + + + + x + 4488 + + + + + x + 4489 + + + + + x + 4490 + + + + + x + 4491 + + + + + x + 4492 + + + + + x + 4493 + + + + + x + 4494 + + + + + x + 4495 + + + + + x + 4496 + + + + + x + 4497 + + + + + x + 4498 + + + + + x + 4499 + + + + + x + 4500 + + + + + x + 4501 + + + + + x + 4502 + + + + + x + 4503 + + + + + x + 4504 + + + + + x + 4505 + + + + + x + 4506 + + + + + x + 4507 + + + + + x + 4508 + + + + + x + 4509 + + + + + x + 4510 + + + + + x + 4511 + + + + + x + 4512 + + + + + x + 4513 + + + + + x + 4514 + + + + + x + 4515 + + + + + x + 4516 + + + + + x + 4517 + + + + + x + 4518 + + + + + x + 4519 + + + + + x + 4520 + + + + + x + 4521 + + + + + x + 4522 + + + + + x + 4523 + + + + + x + 4524 + + + + + x + 4525 + + + + + x + 4526 + + + + + x + 4527 + + + + + x + 4528 + + + + + x + 4529 + + + + + x + 4530 + + + + + x + 4531 + + + + + x + 4532 + + + + + x + 4533 + + + + + x + 4534 + + + + + x + 4535 + + + + + x + 4536 + + + + + x + 4537 + + + + + x + 4538 + + + + + x + 4539 + + + + + x + 4540 + + + + + x + 4541 + + + + + x + 4542 + + + + + x + 4543 + + + + + x + 4544 + + + + + x + 4545 + + + + + x + 4546 + + + + + x + 4547 + + + + + x + 4548 + + + + + x + 4549 + + + + + x + 4550 + + + + + x + 4551 + + + + + x + 4552 + + + + + x + 4553 + + + + + x + 4554 + + + + + x + 4555 + + + + + x + 4556 + + + + + x + 4557 + + + + + x + 4558 + + + + + x + 4559 + + + + + x + 4560 + + + + + x + 4561 + + + + + x + 4562 + + + + + x + 4563 + + + + + x + 4564 + + + + + x + 4565 + + + + + x + 4566 + + + + + x + 4567 + + + + + x + 4568 + + + + + x + 4569 + + + + + x + 4570 + + + + + x + 4571 + + + + + x + 4572 + + + + + x + 4573 + + + + + x + 4574 + + + + + x + 4575 + + + + + x + 4576 + + + + + x + 4577 + + + + + x + 4578 + + + + + x + 4579 + + + + + x + 4580 + + + + + x + 4581 + + + + + x + 4582 + + + + + x + 4583 + + + + + x + 4584 + + + + + x + 4585 + + + + + x + 4586 + + + + + x + 4587 + + + + + x + 4588 + + + + + x + 4589 + + + + + x + 4590 + + + + + x + 4591 + + + + + x + 4592 + + + + + x + 4593 + + + + + x + 4594 + + + + + x + 4595 + + + + + x + 4596 + + + + + x + 4597 + + + + + x + 4598 + + + + + x + 4599 + + + + + x + 4600 + + + + + x + 4601 + + + + + x + 4602 + + + + + x + 4603 + + + + + x + 4604 + + + + + x + 4605 + + + + + x + 4606 + + + + + x + 4607 + + + + + x + 4608 + + + + + x + 4609 + + + + + x + 4610 + + + + + x + 4611 + + + + + x + 4612 + + + + + x + 4613 + + + + + x + 4614 + + + + + x + 4615 + + + + + x + 4616 + + + + + x + 4617 + + + + + x + 4618 + + + + + x + 4619 + + + + + x + 4620 + + + + + x + 4621 + + + + + x + 4622 + + + + + x + 4623 + + + + + x + 4624 + + + + + x + 4625 + + + + + x + 4626 + + + + + x + 4627 + + + + + x + 4628 + + + + + x + 4629 + + + + + x + 4630 + + + + + x + 4631 + + + + + x + 4632 + + + + + x + 4633 + + + + + x + 4634 + + + + + x + 4635 + + + + + x + 4636 + + + + + x + 4637 + + + + + x + 4638 + + + + + x + 4639 + + + + + x + 4640 + + + + + x + 4641 + + + + + x + 4642 + + + + + x + 4643 + + + + + x + 4644 + + + + + x + 4645 + + + + + x + 4646 + + + + + x + 4647 + + + + + x + 4648 + + + + + x + 4649 + + + + + x + 4650 + + + + + x + 4651 + + + + + x + 4652 + + + + + x + 4653 + + + + + x + 4654 + + + + + x + 4655 + + + + + x + 4656 + + + + + x + 4657 + + + + + x + 4658 + + + + + x + 4659 + + + + + x + 4660 + + + + + x + 4661 + + + + + x + 4662 + + + + + x + 4663 + + + + + x + 4664 + + + + + x + 4665 + + + + + x + 4666 + + + + + x + 4667 + + + + + x + 4668 + + + + + x + 4669 + + + + + x + 4670 + + + + + x + 4671 + + + + + x + 4672 + + + + + x + 4673 + + + + + x + 4674 + + + + + x + 4675 + + + + + x + 4676 + + + + + x + 4677 + + + + + x + 4678 + + + + + x + 4679 + + + + + x + 4680 + + + + + x + 4681 + + + + + x + 4682 + + + + + x + 4683 + + + + + x + 4684 + + + + + x + 4685 + + + + + x + 4686 + + + + + x + 4687 + + + + + x + 4688 + + + + + x + 4689 + + + + + x + 4690 + + + + + x + 4691 + + + + + x + 4692 + + + + + x + 4693 + + + + + x + 4694 + + + + + x + 4695 + + + + + x + 4696 + + + + + x + 4697 + + + + + x + 4698 + + + + + x + 4699 + + + + + x + 4700 + + + + + x + 4701 + + + + + x + 4702 + + + + + x + 4703 + + + + + x + 4704 + + + + + x + 4705 + + + + + x + 4706 + + + + + x + 4707 + + + + + x + 4708 + + + + + x + 4709 + + + + + x + 4710 + + + + + x + 4711 + + + + + x + 4712 + + + + + x + 4713 + + + + + x + 4714 + + + + + x + 4715 + + + + + x + 4716 + + + + + x + 4717 + + + + + x + 4718 + + + + + x + 4719 + + + + + x + 4720 + + + + + x + 4721 + + + + + x + 4722 + + + + + x + 4723 + + + + + x + 4724 + + + + + x + 4725 + + + + + x + 4726 + + + + + x + 4727 + + + + + x + 4728 + + + + + x + 4729 + + + + + x + 4730 + + + + + x + 4731 + + + + + x + 4732 + + + + + x + 4733 + + + + + x + 4734 + + + + + x + 4735 + + + + + x + 4736 + + + + + x + 4737 + + + + + x + 4738 + + + + + x + 4739 + + + + + x + 4740 + + + + + x + 4741 + + + + + x + 4742 + + + + + x + 4743 + + + + + x + 4744 + + + + + x + 4745 + + + + + x + 4746 + + + + + x + 4747 + + + + + x + 4748 + + + + + x + 4749 + + + + + x + 4750 + + + + + x + 4751 + + + + + x + 4752 + + + + + x + 4753 + + + + + x + 4754 + + + + + x + 4755 + + + + + x + 4756 + + + + + x + 4757 + + + + + x + 4758 + + + + + x + 4759 + + + + + x + 4760 + + + + + x + 4761 + + + + + x + 4762 + + + + + x + 4763 + + + + + x + 4764 + + + + + x + 4765 + + + + + x + 4766 + + + + + x + 4767 + + + + + x + 4768 + + + + + x + 4769 + + + + + x + 4770 + + + + + x + 4771 + + + + + x + 4772 + + + + + x + 4773 + + + + + x + 4774 + + + + + x + 4775 + + + + + x + 4776 + + + + + x + 4777 + + + + + x + 4778 + + + + + x + 4779 + + + + + x + 4780 + + + + + x + 4781 + + + + + x + 4782 + + + + + x + 4783 + + + + + x + 4784 + + + + + x + 4785 + + + + + x + 4786 + + + + + x + 4787 + + + + + x + 4788 + + + + + x + 4789 + + + + + x + 4790 + + + + + x + 4791 + + + + + x + 4792 + + + + + x + 4793 + + + + + x + 4794 + + + + + x + 4795 + + + + + x + 4796 + + + + + x + 4797 + + + + + x + 4798 + + + + + x + 4799 + + + + + x + 4800 + + + + + x + 4801 + + + + + x + 4802 + + + + + x + 4803 + + + + + x + 4804 + + + + + x + 4805 + + + + + x + 4806 + + + + + x + 4807 + + + + + x + 4808 + + + + + x + 4809 + + + + + x + 4810 + + + + + x + 4811 + + + + + x + 4812 + + + + + x + 4813 + + + + + x + 4814 + + + + + x + 4815 + + + + + x + 4816 + + + + + x + 4817 + + + + + x + 4818 + + + + + x + 4819 + + + + + x + 4820 + + + + + x + 4821 + + + + + x + 4822 + + + + + x + 4823 + + + + + x + 4824 + + + + + x + 4825 + + + + + x + 4826 + + + + + x + 4827 + + + + + x + 4828 + + + + + x + 4829 + + + + + x + 4830 + + + + + x + 4831 + + + + + x + 4832 + + + + + x + 4833 + + + + + x + 4834 + + + + + x + 4835 + + + + + x + 4836 + + + + + x + 4837 + + + + + x + 4838 + + + + + x + 4839 + + + + + x + 4840 + + + + + x + 4841 + + + + + x + 4842 + + + + + x + 4843 + + + + + x + 4844 + + + + + x + 4845 + + + + + x + 4846 + + + + + x + 4847 + + + + + x + 4848 + + + + + x + 4849 + + + + + x + 4850 + + + + + x + 4851 + + + + + x + 4852 + + + + + x + 4853 + + + + + x + 4854 + + + + + x + 4855 + + + + + x + 4856 + + + + + x + 4857 + + + + + x + 4858 + + + + + x + 4859 + + + + + x + 4860 + + + + + x + 4861 + + + + + x + 4862 + + + + + x + 4863 + + + + + x + 4864 + + + + + x + 4865 + + + + + x + 4866 + + + + + x + 4867 + + + + + x + 4868 + + + + + x + 4869 + + + + + x + 4870 + + + + + x + 4871 + + + + + x + 4872 + + + + + x + 4873 + + + + + x + 4874 + + + + + x + 4875 + + + + + x + 4876 + + + + + x + 4877 + + + + + x + 4878 + + + + + x + 4879 + + + + + x + 4880 + + + + + x + 4881 + + + + + x + 4882 + + + + + x + 4883 + + + + + x + 4884 + + + + + x + 4885 + + + + + x + 4886 + + + + + x + 4887 + + + + + x + 4888 + + + + + x + 4889 + + + + + x + 4890 + + + + + x + 4891 + + + + + x + 4892 + + + + + x + 4893 + + + + + x + 4894 + + + + + x + 4895 + + + + + x + 4896 + + + + + x + 4897 + + + + + x + 4898 + + + + + x + 4899 + + + + + x + 4900 + + + + + x + 4901 + + + + + x + 4902 + + + + + x + 4903 + + + + + x + 4904 + + + + + x + 4905 + + + + + x + 4906 + + + + + x + 4907 + + + + + x + 4908 + + + + + x + 4909 + + + + + x + 4910 + + + + + x + 4911 + + + + + x + 4912 + + + + + x + 4913 + + + + + x + 4914 + + + + + x + 4915 + + + + + x + 4916 + + + + + x + 4917 + + + + + x + 4918 + + + + + x + 4919 + + + + + x + 4920 + + + + + x + 4921 + + + + + x + 4922 + + + + + x + 4923 + + + + + x + 4924 + + + + + x + 4925 + + + + + x + 4926 + + + + + x + 4927 + + + + + x + 4928 + + + + + x + 4929 + + + + + x + 4930 + + + + + x + 4931 + + + + + x + 4932 + + + + + x + 4933 + + + + + x + 4934 + + + + + x + 4935 + + + + + x + 4936 + + + + + x + 4937 + + + + + x + 4938 + + + + + x + 4939 + + + + + x + 4940 + + + + + x + 4941 + + + + + x + 4942 + + + + + x + 4943 + + + + + x + 4944 + + + + + x + 4945 + + + + + x + 4946 + + + + + x + 4947 + + + + + x + 4948 + + + + + x + 4949 + + + + + x + 4950 + + + + + x + 4951 + + + + + x + 4952 + + + + + x + 4953 + + + + + x + 4954 + + + + + x + 4955 + + + + + x + 4956 + + + + + x + 4957 + + + + + x + 4958 + + + + + x + 4959 + + + + + x + 4960 + + + + + x + 4961 + + + + + x + 4962 + + + + + x + 4963 + + + + + x + 4964 + + + + + x + 4965 + + + + + x + 4966 + + + + + x + 4967 + + + + + x + 4968 + + + + + x + 4969 + + + + + x + 4970 + + + + + x + 4971 + + + + + x + 4972 + + + + + x + 4973 + + + + + x + 4974 + + + + + x + 4975 + + + + + x + 4976 + + + + + x + 4977 + + + + + x + 4978 + + + + + x + 4979 + + + + + x + 4980 + + + + + x + 4981 + + + + + x + 4982 + + + + + x + 4983 + + + + + x + 4984 + + + + + x + 4985 + + + + + x + 4986 + + + + + x + 4987 + + + + + x + 4988 + + + + + x + 4989 + + + + + x + 4990 + + + + + x + 4991 + + + + + x + 4992 + + + + + x + 4993 + + + + + x + 4994 + + + + + x + 4995 + + + + + x + 4996 + + + + + x + 4997 + + + + + x + 4998 + + + + + x + 4999 + + + + + x + 5000 + + + + + x + 5001 + + + + + x + 5002 + + + + + x + 5003 + + + + + x + 5004 + + + + + x + 5005 + + + + + x + 5006 + + + + + x + 5007 + + + + + x + 5008 + + + + + x + 5009 + + + + + x + 5010 + + + + + x + 5011 + + + + + x + 5012 + + + + + x + 5013 + + + + + x + 5014 + + + + + x + 5015 + + + + + x + 5016 + + + + + x + 5017 + + + + + x + 5018 + + + + + x + 5019 + + + + + x + 5020 + + + + + x + 5021 + + + + + x + 5022 + + + + + x + 5023 + + + + + x + 5024 + + + + + x + 5025 + + + + + x + 5026 + + + + + x + 5027 + + + + + x + 5028 + + + + + x + 5029 + + + + + x + 5030 + + + + + x + 5031 + + + + + x + 5032 + + + + + x + 5033 + + + + + x + 5034 + + + + + x + 5035 + + + + + x + 5036 + + + + + x + 5037 + + + + + x + 5038 + + + + + x + 5039 + + + + + x + 5040 + + + + + x + 5041 + + + + + x + 5042 + + + + + x + 5043 + + + + + x + 5044 + + + + + x + 5045 + + + + + x + 5046 + + + + + x + 5047 + + + + + x + 5048 + + + + + x + 5049 + + + + + x + 5050 + + + + + x + 5051 + + + + + x + 5052 + + + + + x + 5053 + + + + + x + 5054 + + + + + x + 5055 + + + + + x + 5056 + + + + + x + 5057 + + + + + x + 5058 + + + + + x + 5059 + + + + + x + 5060 + + + + + x + 5061 + + + + + x + 5062 + + + + + x + 5063 + + + + + x + 5064 + + + + + x + 5065 + + + + + x + 5066 + + + + + x + 5067 + + + + + x + 5068 + + + + + x + 5069 + + + + + x + 5070 + + + + + x + 5071 + + + + + x + 5072 + + + + + x + 5073 + + + + + x + 5074 + + + + + x + 5075 + + + + + x + 5076 + + + + + x + 5077 + + + + + x + 5078 + + + + + x + 5079 + + + + + x + 5080 + + + + + x + 5081 + + + + + x + 5082 + + + + + x + 5083 + + + + + x + 5084 + + + + + x + 5085 + + + + + x + 5086 + + + + + x + 5087 + + + + + x + 5088 + + + + + x + 5089 + + + + + x + 5090 + + + + + x + 5091 + + + + + x + 5092 + + + + + x + 5093 + + + + + x + 5094 + + + + + x + 5095 + + + + + x + 5096 + + + + + x + 5097 + + + + + x + 5098 + + + + + x + 5099 + + + + + x + 5100 + + + + + x + 5101 + + + + + x + 5102 + + + + + x + 5103 + + + + + x + 5104 + + + + + x + 5105 + + + + + x + 5106 + + + + + x + 5107 + + + + + x + 5108 + + + + + x + 5109 + + + + + x + 5110 + + + + + x + 5111 + + + + + x + 5112 + + + + + x + 5113 + + + + + x + 5114 + + + + + x + 5115 + + + + + x + 5116 + + + + + x + 5117 + + + + + x + 5118 + + + + + x + 5119 + + + + + x + 5120 + + + + + x + 5121 + + + + + x + 5122 + + + + + x + 5123 + + + + + x + 5124 + + + + + x + 5125 + + + + + x + 5126 + + + + + x + 5127 + + + + + x + 5128 + + + + + x + 5129 + + + + + x + 5130 + + + + + x + 5131 + + + + + x + 5132 + + + + + x + 5133 + + + + + x + 5134 + + + + + x + 5135 + + + + + x + 5136 + + + + + x + 5137 + + + + + x + 5138 + + + + + x + 5139 + + + + + x + 5140 + + + + + x + 5141 + + + + + x + 5142 + + + + + x + 5143 + + + + + x + 5144 + + + + + x + 5145 + + + + + x + 5146 + + + + + x + 5147 + + + + + x + 5148 + + + + + x + 5149 + + + + + x + 5150 + + + + + x + 5151 + + + + + x + 5152 + + + + + x + 5153 + + + + + x + 5154 + + + + + x + 5155 + + + + + x + 5156 + + + + + x + 5157 + + + + + x + 5158 + + + + + x + 5159 + + + + + x + 5160 + + + + + x + 5161 + + + + + x + 5162 + + + + + x + 5163 + + + + + x + 5164 + + + + + x + 5165 + + + + + x + 5166 + + + + + x + 5167 + + + + + x + 5168 + + + + + x + 5169 + + + + + x + 5170 + + + + + x + 5171 + + + + + x + 5172 + + + + + x + 5173 + + + + + x + 5174 + + + + + x + 5175 + + + + + x + 5176 + + + + + x + 5177 + + + + + x + 5178 + + + + + x + 5179 + + + + + x + 5180 + + + + + x + 5181 + + + + + x + 5182 + + + + + x + 5183 + + + + + x + 5184 + + + + + x + 5185 + + + + + x + 5186 + + + + + x + 5187 + + + + + x + 5188 + + + + + x + 5189 + + + + + x + 5190 + + + + + x + 5191 + + + + + x + 5192 + + + + + x + 5193 + + + + + x + 5194 + + + + + x + 5195 + + + + + x + 5196 + + + + + x + 5197 + + + + + x + 5198 + + + + + x + 5199 + + + + + x + 5200 + + + + + x + 5201 + + + + + x + 5202 + + + + + x + 5203 + + + + + x + 5204 + + + + + x + 5205 + + + + + x + 5206 + + + + + x + 5207 + + + + + x + 5208 + + + + + x + 5209 + + + + + x + 5210 + + + + + x + 5211 + + + + + x + 5212 + + + + + x + 5213 + + + + + x + 5214 + + + + + x + 5215 + + + + + x + 5216 + + + + + x + 5217 + + + + + x + 5218 + + + + + x + 5219 + + + + + x + 5220 + + + + + x + 5221 + + + + + x + 5222 + + + + + x + 5223 + + + + + x + 5224 + + + + + x + 5225 + + + + + x + 5226 + + + + + x + 5227 + + + + + x + 5228 + + + + + x + 5229 + + + + + x + 5230 + + + + + x + 5231 + + + + + x + 5232 + + + + + x + 5233 + + + + + x + 5234 + + + + + x + 5235 + + + + + x + 5236 + + + + + x + 5237 + + + + + x + 5238 + + + + + x + 5239 + + + + + x + 5240 + + + + + x + 5241 + + + + + x + 5242 + + + + + x + 5243 + + + + + x + 5244 + + + + + x + 5245 + + + + + x + 5246 + + + + + x + 5247 + + + + + x + 5248 + + + + + x + 5249 + + + + + x + 5250 + + + + + x + 5251 + + + + + x + 5252 + + + + + x + 5253 + + + + + x + 5254 + + + + + x + 5255 + + + + + x + 5256 + + + + + x + 5257 + + + + + x + 5258 + + + + + x + 5259 + + + + + x + 5260 + + + + + x + 5261 + + + + + x + 5262 + + + + + x + 5263 + + + + + x + 5264 + + + + + x + 5265 + + + + + x + 5266 + + + + + x + 5267 + + + + + x + 5268 + + + + + x + 5269 + + + + + x + 5270 + + + + + x + 5271 + + + + + x + 5272 + + + + + x + 5273 + + + + + x + 5274 + + + + + x + 5275 + + + + + x + 5276 + + + + + x + 5277 + + + + + x + 5278 + + + + + x + 5279 + + + + + x + 5280 + + + + + x + 5281 + + + + + x + 5282 + + + + + x + 5283 + + + + + x + 5284 + + + + + x + 5285 + + + + + x + 5286 + + + + + x + 5287 + + + + + x + 5288 + + + + + x + 5289 + + + + + x + 5290 + + + + + x + 5291 + + + + + x + 5292 + + + + + x + 5293 + + + + + x + 5294 + + + + + x + 5295 + + + + + x + 5296 + + + + + x + 5297 + + + + + x + 5298 + + + + + x + 5299 + + + + + x + 5300 + + + + + x + 5301 + + + + + x + 5302 + + + + + x + 5303 + + + + + x + 5304 + + + + + x + 5305 + + + + + x + 5306 + + + + + x + 5307 + + + + + x + 5308 + + + + + x + 5309 + + + + + x + 5310 + + + + + x + 5311 + + + + + x + 5312 + + + + + x + 5313 + + + + + x + 5314 + + + + + x + 5315 + + + + + x + 5316 + + + + + x + 5317 + + + + + x + 5318 + + + + + x + 5319 + + + + + x + 5320 + + + + + x + 5321 + + + + + x + 5322 + + + + + x + 5323 + + + + + x + 5324 + + + + + x + 5325 + + + + + x + 5326 + + + + + x + 5327 + + + + + x + 5328 + + + + + x + 5329 + + + + + x + 5330 + + + + + x + 5331 + + + + + x + 5332 + + + + + x + 5333 + + + + + x + 5334 + + + + + x + 5335 + + + + + x + 5336 + + + + + x + 5337 + + + + + x + 5338 + + + + + x + 5339 + + + + + x + 5340 + + + + + x + 5341 + + + + + x + 5342 + + + + + x + 5343 + + + + + x + 5344 + + + + + x + 5345 + + + + + x + 5346 + + + + + x + 5347 + + + + + x + 5348 + + + + + x + 5349 + + + + + x + 5350 + + + + + x + 5351 + + + + + x + 5352 + + + + + x + 5353 + + + + + x + 5354 + + + + + x + 5355 + + + + + x + 5356 + + + + + x + 5357 + + + + + x + 5358 + + + + + x + 5359 + + + + + x + 5360 + + + + + x + 5361 + + + + + x + 5362 + + + + + x + 5363 + + + + + x + 5364 + + + + + x + 5365 + + + + + x + 5366 + + + + + x + 5367 + + + + + x + 5368 + + + + + x + 5369 + + + + + x + 5370 + + + + + x + 5371 + + + + + x + 5372 + + + + + x + 5373 + + + + + x + 5374 + + + + + x + 5375 + + + + + x + 5376 + + + + + x + 5377 + + + + + x + 5378 + + + + + x + 5379 + + + + + x + 5380 + + + + + x + 5381 + + + + + x + 5382 + + + + + x + 5383 + + + + + x + 5384 + + + + + x + 5385 + + + + + x + 5386 + + + + + x + 5387 + + + + + x + 5388 + + + + + x + 5389 + + + + + x + 5390 + + + + + x + 5391 + + + + + x + 5392 + + + + + x + 5393 + + + + + x + 5394 + + + + + x + 5395 + + + + + x + 5396 + + + + + x + 5397 + + + + + x + 5398 + + + + + x + 5399 + + + + + x + 5400 + + + + + x + 5401 + + + + + x + 5402 + + + + + x + 5403 + + + + + x + 5404 + + + + + x + 5405 + + + + + x + 5406 + + + + + x + 5407 + + + + + x + 5408 + + + + + x + 5409 + + + + + x + 5410 + + + + + x + 5411 + + + + + x + 5412 + + + + + x + 5413 + + + + + x + 5414 + + + + + x + 5415 + + + + + x + 5416 + + + + + x + 5417 + + + + + x + 5418 + + + + + x + 5419 + + + + + x + 5420 + + + + + x + 5421 + + + + + x + 5422 + + + + + x + 5423 + + + + + x + 5424 + + + + + x + 5425 + + + + + x + 5426 + + + + + x + 5427 + + + + + x + 5428 + + + + + x + 5429 + + + + + x + 5430 + + + + + x + 5431 + + + + + x + 5432 + + + + + x + 5433 + + + + + x + 5434 + + + + + x + 5435 + + + + + x + 5436 + + + + + x + 5437 + + + + + x + 5438 + + + + + x + 5439 + + + + + x + 5440 + + + + + x + 5441 + + + + + x + 5442 + + + + + x + 5443 + + + + + x + 5444 + + + + + x + 5445 + + + + + x + 5446 + + + + + x + 5447 + + + + + x + 5448 + + + + + x + 5449 + + + + + x + 5450 + + + + + x + 5451 + + + + + x + 5452 + + + + + x + 5453 + + + + + x + 5454 + + + + + x + 5455 + + + + + x + 5456 + + + + + x + 5457 + + + + + x + 5458 + + + + + x + 5459 + + + + + x + 5460 + + + + + x + 5461 + + + + + x + 5462 + + + + + x + 5463 + + + + + x + 5464 + + + + + x + 5465 + + + + + x + 5466 + + + + + x + 5467 + + + + + x + 5468 + + + + + x + 5469 + + + + + x + 5470 + + + + + x + 5471 + + + + + x + 5472 + + + + + x + 5473 + + + + + x + 5474 + + + + + x + 5475 + + + + + x + 5476 + + + + + x + 5477 + + + + + x + 5478 + + + + + x + 5479 + + + + + x + 5480 + + + + + x + 5481 + + + + + x + 5482 + + + + + x + 5483 + + + + + x + 5484 + + + + + x + 5485 + + + + + x + 5486 + + + + + x + 5487 + + + + + x + 5488 + + + + + x + 5489 + + + + + x + 5490 + + + + + x + 5491 + + + + + x + 5492 + + + + + x + 5493 + + + + + x + 5494 + + + + + x + 5495 + + + + + x + 5496 + + + + + x + 5497 + + + + + x + 5498 + + + + + x + 5499 + + + + + x + 5500 + + + + + x + 5501 + + + + + x + 5502 + + + + + x + 5503 + + + + + x + 5504 + + + + + x + 5505 + + + + + x + 5506 + + + + + x + 5507 + + + + + x + 5508 + + + + + x + 5509 + + + + + x + 5510 + + + + + x + 5511 + + + + + x + 5512 + + + + + x + 5513 + + + + + x + 5514 + + + + + x + 5515 + + + + + x + 5516 + + + + + x + 5517 + + + + + x + 5518 + + + + + x + 5519 + + + + + x + 5520 + + + + + x + 5521 + + + + + x + 5522 + + + + + x + 5523 + + + + + x + 5524 + + + + + x + 5525 + + + + + x + 5526 + + + + + x + 5527 + + + + + x + 5528 + + + + + x + 5529 + + + + + x + 5530 + + + + + x + 5531 + + + + + x + 5532 + + + + + x + 5533 + + + + + x + 5534 + + + + + x + 5535 + + + + + x + 5536 + + + + + x + 5537 + + + + + x + 5538 + + + + + x + 5539 + + + + + x + 5540 + + + + + x + 5541 + + + + + x + 5542 + + + + + x + 5543 + + + + + x + 5544 + + + + + x + 5545 + + + + + x + 5546 + + + + + x + 5547 + + + + + x + 5548 + + + + + x + 5549 + + + + + x + 5550 + + + + + x + 5551 + + + + + x + 5552 + + + + + x + 5553 + + + + + x + 5554 + + + + + x + 5555 + + + + + x + 5556 + + + + + x + 5557 + + + + + x + 5558 + + + + + x + 5559 + + + + + x + 5560 + + + + + x + 5561 + + + + + x + 5562 + + + + + x + 5563 + + + + + x + 5564 + + + + + x + 5565 + + + + + x + 5566 + + + + + x + 5567 + + + + + x + 5568 + + + + + x + 5569 + + + + + x + 5570 + + + + + x + 5571 + + + + + x + 5572 + + + + + x + 5573 + + + + + x + 5574 + + + + + x + 5575 + + + + + x + 5576 + + + + + x + 5577 + + + + + x + 5578 + + + + + x + 5579 + + + + + x + 5580 + + + + + x + 5581 + + + + + x + 5582 + + + + + x + 5583 + + + + + x + 5584 + + + + + x + 5585 + + + + + x + 5586 + + + + + x + 5587 + + + + + x + 5588 + + + + + x + 5589 + + + + + x + 5590 + + + + + x + 5591 + + + + + x + 5592 + + + + + x + 5593 + + + + + x + 5594 + + + + + x + 5595 + + + + + x + 5596 + + + + + x + 5597 + + + + + x + 5598 + + + + + x + 5599 + + + + + x + 5600 + + + + + x + 5601 + + + + + x + 5602 + + + + + x + 5603 + + + + + x + 5604 + + + + + x + 5605 + + + + + x + 5606 + + + + + x + 5607 + + + + + x + 5608 + + + + + x + 5609 + + + + + x + 5610 + + + + + x + 5611 + + + + + x + 5612 + + + + + x + 5613 + + + + + x + 5614 + + + + + x + 5615 + + + + + x + 5616 + + + + + x + 5617 + + + + + x + 5618 + + + + + x + 5619 + + + + + x + 5620 + + + + + x + 5621 + + + + + x + 5622 + + + + + x + 5623 + + + + + x + 5624 + + + + + x + 5625 + + + + + x + 5626 + + + + + x + 5627 + + + + + x + 5628 + + + + + x + 5629 + + + + + x + 5630 + + + + + x + 5631 + + + + + x + 5632 + + + + + x + 5633 + + + + + x + 5634 + + + + + x + 5635 + + + + + x + 5636 + + + + + x + 5637 + + + + + x + 5638 + + + + + x + 5639 + + + + + x + 5640 + + + + + x + 5641 + + + + + x + 5642 + + + + + x + 5643 + + + + + x + 5644 + + + + + x + 5645 + + + + + x + 5646 + + + + + x + 5647 + + + + + x + 5648 + + + + + x + 5649 + + + + + x + 5650 + + + + + x + 5651 + + + + + x + 5652 + + + + + x + 5653 + + + + + x + 5654 + + + + + x + 5655 + + + + + x + 5656 + + + + + x + 5657 + + + + + x + 5658 + + + + + x + 5659 + + + + + x + 5660 + + + + + x + 5661 + + + + + x + 5662 + + + + + x + 5663 + + + + + x + 5664 + + + + + x + 5665 + + + + + x + 5666 + + + + + x + 5667 + + + + + x + 5668 + + + + + x + 5669 + + + + + x + 5670 + + + + + x + 5671 + + + + + x + 5672 + + + + + x + 5673 + + + + + x + 5674 + + + + + x + 5675 + + + + + x + 5676 + + + + + x + 5677 + + + + + x + 5678 + + + + + x + 5679 + + + + + x + 5680 + + + + + x + 5681 + + + + + x + 5682 + + + + + x + 5683 + + + + + x + 5684 + + + + + x + 5685 + + + + + x + 5686 + + + + + x + 5687 + + + + + x + 5688 + + + + + x + 5689 + + + + + x + 5690 + + + + + x + 5691 + + + + + x + 5692 + + + + + x + 5693 + + + + + x + 5694 + + + + + x + 5695 + + + + + x + 5696 + + + + + x + 5697 + + + + + x + 5698 + + + + + x + 5699 + + + + + x + 5700 + + + + + x + 5701 + + + + + x + 5702 + + + + + x + 5703 + + + + + x + 5704 + + + + + x + 5705 + + + + + x + 5706 + + + + + x + 5707 + + + + + x + 5708 + + + + + x + 5709 + + + + + x + 5710 + + + + + x + 5711 + + + + + x + 5712 + + + + + x + 5713 + + + + + x + 5714 + + + + + x + 5715 + + + + + x + 5716 + + + + + x + 5717 + + + + + x + 5718 + + + + + x + 5719 + + + + + x + 5720 + + + + + x + 5721 + + + + + x + 5722 + + + + + x + 5723 + + + + + x + 5724 + + + + + x + 5725 + + + + + x + 5726 + + + + + x + 5727 + + + + + x + 5728 + + + + + x + 5729 + + + + + x + 5730 + + + + + x + 5731 + + + + + x + 5732 + + + + + x + 5733 + + + + + x + 5734 + + + + + x + 5735 + + + + + x + 5736 + + + + + x + 5737 + + + + + x + 5738 + + + + + x + 5739 + + + + + x + 5740 + + + + + x + 5741 + + + + + x + 5742 + + + + + x + 5743 + + + + + x + 5744 + + + + + x + 5745 + + + + + x + 5746 + + + + + x + 5747 + + + + + x + 5748 + + + + + x + 5749 + + + + + x + 5750 + + + + + x + 5751 + + + + + x + 5752 + + + + + x + 5753 + + + + + x + 5754 + + + + + x + 5755 + + + + + x + 5756 + + + + + x + 5757 + + + + + x + 5758 + + + + + x + 5759 + + + + + x + 5760 + + + + + x + 5761 + + + + + x + 5762 + + + + + x + 5763 + + + + + x + 5764 + + + + + x + 5765 + + + + + x + 5766 + + + + + x + 5767 + + + + + x + 5768 + + + + + x + 5769 + + + + + x + 5770 + + + + + x + 5771 + + + + + x + 5772 + + + + + x + 5773 + + + + + x + 5774 + + + + + x + 5775 + + + + + x + 5776 + + + + + x + 5777 + + + + + x + 5778 + + + + + x + 5779 + + + + + x + 5780 + + + + + x + 5781 + + + + + x + 5782 + + + + + x + 5783 + + + + + x + 5784 + + + + + x + 5785 + + + + + x + 5786 + + + + + x + 5787 + + + + + x + 5788 + + + + + x + 5789 + + + + + x + 5790 + + + + + x + 5791 + + + + + x + 5792 + + + + + x + 5793 + + + + + x + 5794 + + + + + x + 5795 + + + + + x + 5796 + + + + + x + 5797 + + + + + x + 5798 + + + + + x + 5799 + + + + + x + 5800 + + + + + x + 5801 + + + + + x + 5802 + + + + + x + 5803 + + + + + x + 5804 + + + + + x + 5805 + + + + + x + 5806 + + + + + x + 5807 + + + + + x + 5808 + + + + + x + 5809 + + + + + x + 5810 + + + + + x + 5811 + + + + + x + 5812 + + + + + x + 5813 + + + + + x + 5814 + + + + + x + 5815 + + + + + x + 5816 + + + + + x + 5817 + + + + + x + 5818 + + + + + x + 5819 + + + + + x + 5820 + + + + + x + 5821 + + + + + x + 5822 + + + + + x + 5823 + + + + + x + 5824 + + + + + x + 5825 + + + + + x + 5826 + + + + + x + 5827 + + + + + x + 5828 + + + + + x + 5829 + + + + + x + 5830 + + + + + x + 5831 + + + + + x + 5832 + + + + + x + 5833 + + + + + x + 5834 + + + + + x + 5835 + + + + + x + 5836 + + + + + x + 5837 + + + + + x + 5838 + + + + + x + 5839 + + + + + x + 5840 + + + + + x + 5841 + + + + + x + 5842 + + + + + x + 5843 + + + + + x + 5844 + + + + + x + 5845 + + + + + x + 5846 + + + + + x + 5847 + + + + + x + 5848 + + + + + x + 5849 + + + + + x + 5850 + + + + + x + 5851 + + + + + x + 5852 + + + + + x + 5853 + + + + + x + 5854 + + + + + x + 5855 + + + + + x + 5856 + + + + + x + 5857 + + + + + x + 5858 + + + + + x + 5859 + + + + + x + 5860 + + + + + x + 5861 + + + + + x + 5862 + + + + + x + 5863 + + + + + x + 5864 + + + + + x + 5865 + + + + + x + 5866 + + + + + x + 5867 + + + + + x + 5868 + + + + + x + 5869 + + + + + x + 5870 + + + + + x + 5871 + + + + + x + 5872 + + + + + x + 5873 + + + + + x + 5874 + + + + + x + 5875 + + + + + x + 5876 + + + + + x + 5877 + + + + + x + 5878 + + + + + x + 5879 + + + + + x + 5880 + + + + + x + 5881 + + + + + x + 5882 + + + + + x + 5883 + + + + + x + 5884 + + + + + x + 5885 + + + + + x + 5886 + + + + + x + 5887 + + + + + x + 5888 + + + + + x + 5889 + + + + + x + 5890 + + + + + x + 5891 + + + + + x + 5892 + + + + + x + 5893 + + + + + x + 5894 + + + + + x + 5895 + + + + + x + 5896 + + + + + x + 5897 + + + + + x + 5898 + + + + + x + 5899 + + + + + x + 5900 + + + + + x + 5901 + + + + + x + 5902 + + + + + x + 5903 + + + + + x + 5904 + + + + + x + 5905 + + + + + x + 5906 + + + + + x + 5907 + + + + + x + 5908 + + + + + x + 5909 + + + + + x + 5910 + + + + + x + 5911 + + + + + x + 5912 + + + + + x + 5913 + + + + + x + 5914 + + + + + x + 5915 + + + + + x + 5916 + + + + + x + 5917 + + + + + x + 5918 + + + + + x + 5919 + + + + + x + 5920 + + + + + x + 5921 + + + + + x + 5922 + + + + + x + 5923 + + + + + x + 5924 + + + + + x + 5925 + + + + + x + 5926 + + + + + x + 5927 + + + + + x + 5928 + + + + + x + 5929 + + + + + x + 5930 + + + + + x + 5931 + + + + + x + 5932 + + + + + x + 5933 + + + + + x + 5934 + + + + + x + 5935 + + + + + x + 5936 + + + + + x + 5937 + + + + + x + 5938 + + + + + x + 5939 + + + + + x + 5940 + + + + + x + 5941 + + + + + x + 5942 + + + + + x + 5943 + + + + + x + 5944 + + + + + x + 5945 + + + + + x + 5946 + + + + + x + 5947 + + + + + x + 5948 + + + + + x + 5949 + + + + + x + 5950 + + + + + x + 5951 + + + + + x + 5952 + + + + + x + 5953 + + + + + x + 5954 + + + + + x + 5955 + + + + + x + 5956 + + + + + x + 5957 + + + + + x + 5958 + + + + + x + 5959 + + + + + x + 5960 + + + + + x + 5961 + + + + + x + 5962 + + + + + x + 5963 + + + + + x + 5964 + + + + + x + 5965 + + + + + x + 5966 + + + + + x + 5967 + + + + + x + 5968 + + + + + x + 5969 + + + + + x + 5970 + + + + + x + 5971 + + + + + x + 5972 + + + + + x + 5973 + + + + + x + 5974 + + + + + x + 5975 + + + + + x + 5976 + + + + + x + 5977 + + + + + x + 5978 + + + + + x + 5979 + + + + + x + 5980 + + + + + x + 5981 + + + + + x + 5982 + + + + + x + 5983 + + + + + x + 5984 + + + + + x + 5985 + + + + + x + 5986 + + + + + x + 5987 + + + + + x + 5988 + + + + + x + 5989 + + + + + x + 5990 + + + + + x + 5991 + + + + + x + 5992 + + + + + x + 5993 + + + + + x + 5994 + + + + + x + 5995 + + + + + x + 5996 + + + + + x + 5997 + + + + + x + 5998 + + + + + x + 5999 + + + + + x + 6000 + + + + + x + 6001 + + + + + x + 6002 + + + + + x + 6003 + + + + + x + 6004 + + + + + x + 6005 + + + + + x + 6006 + + + + + x + 6007 + + + + + x + 6008 + + + + + x + 6009 + + + + + x + 6010 + + + + + x + 6011 + + + + + x + 6012 + + + + + x + 6013 + + + + + x + 6014 + + + + + x + 6015 + + + + + x + 6016 + + + + + x + 6017 + + + + + x + 6018 + + + + + x + 6019 + + + + + x + 6020 + + + + + x + 6021 + + + + + x + 6022 + + + + + x + 6023 + + + + + x + 6024 + + + + + x + 6025 + + + + + x + 6026 + + + + + x + 6027 + + + + + x + 6028 + + + + + x + 6029 + + + + + x + 6030 + + + + + x + 6031 + + + + + x + 6032 + + + + + x + 6033 + + + + + x + 6034 + + + + + x + 6035 + + + + + x + 6036 + + + + + x + 6037 + + + + + x + 6038 + + + + + x + 6039 + + + + + x + 6040 + + + + + x + 6041 + + + + + x + 6042 + + + + + x + 6043 + + + + + x + 6044 + + + + + x + 6045 + + + + + x + 6046 + + + + + x + 6047 + + + + + x + 6048 + + + + + x + 6049 + + + + + x + 6050 + + + + + x + 6051 + + + + + x + 6052 + + + + + x + 6053 + + + + + x + 6054 + + + + + x + 6055 + + + + + x + 6056 + + + + + x + 6057 + + + + + x + 6058 + + + + + x + 6059 + + + + + x + 6060 + + + + + x + 6061 + + + + + x + 6062 + + + + + x + 6063 + + + + + x + 6064 + + + + + x + 6065 + + + + + x + 6066 + + + + + x + 6067 + + + + + x + 6068 + + + + + x + 6069 + + + + + x + 6070 + + + + + x + 6071 + + + + + x + 6072 + + + + + x + 6073 + + + + + x + 6074 + + + + + x + 6075 + + + + + x + 6076 + + + + + x + 6077 + + + + + x + 6078 + + + + + x + 6079 + + + + + x + 6080 + + + + + x + 6081 + + + + + x + 6082 + + + + + x + 6083 + + + + + x + 6084 + + + + + x + 6085 + + + + + x + 6086 + + + + + x + 6087 + + + + + x + 6088 + + + + + x + 6089 + + + + + x + 6090 + + + + + x + 6091 + + + + + x + 6092 + + + + + x + 6093 + + + + + x + 6094 + + + + + x + 6095 + + + + + x + 6096 + + + + + x + 6097 + + + + + x + 6098 + + + + + x + 6099 + + + + + x + 6100 + + + + + x + 6101 + + + + + x + 6102 + + + + + x + 6103 + + + + + x + 6104 + + + + + x + 6105 + + + + + x + 6106 + + + + + x + 6107 + + + + + x + 6108 + + + + + x + 6109 + + + + + x + 6110 + + + + + x + 6111 + + + + + x + 6112 + + + + + x + 6113 + + + + + x + 6114 + + + + + x + 6115 + + + + + x + 6116 + + + + + x + 6117 + + + + + x + 6118 + + + + + x + 6119 + + + + + x + 6120 + + + + + x + 6121 + + + + + x + 6122 + + + + + x + 6123 + + + + + x + 6124 + + + + + x + 6125 + + + + + x + 6126 + + + + + x + 6127 + + + + + x + 6128 + + + + + x + 6129 + + + + + x + 6130 + + + + + x + 6131 + + + + + x + 6132 + + + + + x + 6133 + + + + + x + 6134 + + + + + x + 6135 + + + + + x + 6136 + + + + + x + 6137 + + + + + x + 6138 + + + + + x + 6139 + + + + + x + 6140 + + + + + x + 6141 + + + + + x + 6142 + + + + + x + 6143 + + + + + x + 6144 + + + + + x + 6145 + + + + + x + 6146 + + + + + x + 6147 + + + + + x + 6148 + + + + + x + 6149 + + + + + x + 6150 + + + + + x + 6151 + + + + + x + 6152 + + + + + x + 6153 + + + + + x + 6154 + + + + + x + 6155 + + + + + x + 6156 + + + + + x + 6157 + + + + + x + 6158 + + + + + x + 6159 + + + + + x + 6160 + + + + + x + 6161 + + + + + x + 6162 + + + + + x + 6163 + + + + + x + 6164 + + + + + x + 6165 + + + + + x + 6166 + + + + + x + 6167 + + + + + x + 6168 + + + + + x + 6169 + + + + + x + 6170 + + + + + x + 6171 + + + + + x + 6172 + + + + + x + 6173 + + + + + x + 6174 + + + + + x + 6175 + + + + + x + 6176 + + + + + x + 6177 + + + + + x + 6178 + + + + + x + 6179 + + + + + x + 6180 + + + + + x + 6181 + + + + + x + 6182 + + + + + x + 6183 + + + + + x + 6184 + + + + + x + 6185 + + + + + x + 6186 + + + + + x + 6187 + + + + + x + 6188 + + + + + x + 6189 + + + + + x + 6190 + + + + + x + 6191 + + + + + x + 6192 + + + + + x + 6193 + + + + + x + 6194 + + + + + x + 6195 + + + + + x + 6196 + + + + + x + 6197 + + + + + x + 6198 + + + + + x + 6199 + + + + + x + 6200 + + + + + x + 6201 + + + + + x + 6202 + + + + + x + 6203 + + + + + x + 6204 + + + + + x + 6205 + + + + + x + 6206 + + + + + x + 6207 + + + + + x + 6208 + + + + + x + 6209 + + + + + x + 6210 + + + + + x + 6211 + + + + + x + 6212 + + + + + x + 6213 + + + + + x + 6214 + + + + + x + 6215 + + + + + x + 6216 + + + + + x + 6217 + + + + + x + 6218 + + + + + x + 6219 + + + + + x + 6220 + + + + + x + 6221 + + + + + x + 6222 + + + + + x + 6223 + + + + + x + 6224 + + + + + x + 6225 + + + + + x + 6226 + + + + + x + 6227 + + + + + x + 6228 + + + + + x + 6229 + + + + + x + 6230 + + + + + x + 6231 + + + + + x + 6232 + + + + + x + 6233 + + + + + x + 6234 + + + + + x + 6235 + + + + + x + 6236 + + + + + x + 6237 + + + + + x + 6238 + + + + + x + 6239 + + + + + x + 6240 + + + + + x + 6241 + + + + + x + 6242 + + + + + x + 6243 + + + + + x + 6244 + + + + + x + 6245 + + + + + x + 6246 + + + + + x + 6247 + + + + + x + 6248 + + + + + x + 6249 + + + + + x + 6250 + + + + + x + 6251 + + + + + x + 6252 + + + + + x + 6253 + + + + + x + 6254 + + + + + x + 6255 + + + + + x + 6256 + + + + + x + 6257 + + + + + x + 6258 + + + + + x + 6259 + + + + + x + 6260 + + + + + x + 6261 + + + + + x + 6262 + + + + + x + 6263 + + + + + x + 6264 + + + + + x + 6265 + + + + + x + 6266 + + + + + x + 6267 + + + + + x + 6268 + + + + + x + 6269 + + + + + x + 6270 + + + + + x + 6271 + + + + + x + 6272 + + + + + x + 6273 + + + + + x + 6274 + + + + + x + 6275 + + + + + x + 6276 + + + + + x + 6277 + + + + + x + 6278 + + + + + x + 6279 + + + + + x + 6280 + + + + + x + 6281 + + + + + x + 6282 + + + + + x + 6283 + + + + + x + 6284 + + + + + x + 6285 + + + + + x + 6286 + + + + + x + 6287 + + + + + x + 6288 + + + + + x + 6289 + + + + + x + 6290 + + + + + x + 6291 + + + + + x + 6292 + + + + + x + 6293 + + + + + x + 6294 + + + + + x + 6295 + + + + + x + 6296 + + + + + x + 6297 + + + + + x + 6298 + + + + + x + 6299 + + + + + x + 6300 + + + + + x + 6301 + + + + + x + 6302 + + + + + x + 6303 + + + + + x + 6304 + + + + + x + 6305 + + + + + x + 6306 + + + + + x + 6307 + + + + + x + 6308 + + + + + x + 6309 + + + + + x + 6310 + + + + + x + 6311 + + + + + x + 6312 + + + + + x + 6313 + + + + + x + 6314 + + + + + x + 6315 + + + + + x + 6316 + + + + + x + 6317 + + + + + x + 6318 + + + + + x + 6319 + + + + + x + 6320 + + + + + x + 6321 + + + + + x + 6322 + + + + + x + 6323 + + + + + x + 6324 + + + + + x + 6325 + + + + + x + 6326 + + + + + x + 6327 + + + + + x + 6328 + + + + + x + 6329 + + + + + x + 6330 + + + + + x + 6331 + + + + + x + 6332 + + + + + x + 6333 + + + + + x + 6334 + + + + + x + 6335 + + + + + x + 6336 + + + + + x + 6337 + + + + + x + 6338 + + + + + x + 6339 + + + + + x + 6340 + + + + + x + 6341 + + + + + x + 6342 + + + + + x + 6343 + + + + + x + 6344 + + + + + x + 6345 + + + + + x + 6346 + + + + + x + 6347 + + + + + x + 6348 + + + + + x + 6349 + + + + + x + 6350 + + + + + x + 6351 + + + + + x + 6352 + + + + + x + 6353 + + + + + x + 6354 + + + + + x + 6355 + + + + + x + 6356 + + + + + x + 6357 + + + + + x + 6358 + + + + + x + 6359 + + + + + x + 6360 + + + + + x + 6361 + + + + + x + 6362 + + + + + x + 6363 + + + + + x + 6364 + + + + + x + 6365 + + + + + x + 6366 + + + + + x + 6367 + + + + + x + 6368 + + + + + x + 6369 + + + + + x + 6370 + + + + + x + 6371 + + + + + x + 6372 + + + + + x + 6373 + + + + + x + 6374 + + + + + x + 6375 + + + + + x + 6376 + + + + + x + 6377 + + + + + x + 6378 + + + + + x + 6379 + + + + + x + 6380 + + + + + x + 6381 + + + + + x + 6382 + + + + + x + 6383 + + + + + x + 6384 + + + + + x + 6385 + + + + + x + 6386 + + + + + x + 6387 + + + + + x + 6388 + + + + + x + 6389 + + + + + x + 6390 + + + + + x + 6391 + + + + + x + 6392 + + + + + x + 6393 + + + + + x + 6394 + + + + + x + 6395 + + + + + x + 6396 + + + + + x + 6397 + + + + + x + 6398 + + + + + x + 6399 + + + + + x + 6400 + + + + + x + 6401 + + + + + x + 6402 + + + + + x + 6403 + + + + + x + 6404 + + + + + x + 6405 + + + + + x + 6406 + + + + + x + 6407 + + + + + x + 6408 + + + + + x + 6409 + + + + + x + 6410 + + + + + x + 6411 + + + + + x + 6412 + + + + + x + 6413 + + + + + x + 6414 + + + + + x + 6415 + + + + + x + 6416 + + + + + x + 6417 + + + + + x + 6418 + + + + + x + 6419 + + + + + x + 6420 + + + + + x + 6421 + + + + + x + 6422 + + + + + x + 6423 + + + + + x + 6424 + + + + + x + 6425 + + + + + x + 6426 + + + + + x + 6427 + + + + + x + 6428 + + + + + x + 6429 + + + + + x + 6430 + + + + + x + 6431 + + + + + x + 6432 + + + + + x + 6433 + + + + + x + 6434 + + + + + x + 6435 + + + + + x + 6436 + + + + + x + 6437 + + + + + x + 6438 + + + + + x + 6439 + + + + + x + 6440 + + + + + x + 6441 + + + + + x + 6442 + + + + + x + 6443 + + + + + x + 6444 + + + + + x + 6445 + + + + + x + 6446 + + + + + x + 6447 + + + + + x + 6448 + + + + + x + 6449 + + + + + x + 6450 + + + + + x + 6451 + + + + + x + 6452 + + + + + x + 6453 + + + + + x + 6454 + + + + + x + 6455 + + + + + x + 6456 + + + + + x + 6457 + + + + + x + 6458 + + + + + x + 6459 + + + + + x + 6460 + + + + + x + 6461 + + + + + x + 6462 + + + + + x + 6463 + + + + + x + 6464 + + + + + x + 6465 + + + + + x + 6466 + + + + + x + 6467 + + + + + x + 6468 + + + + + x + 6469 + + + + + x + 6470 + + + + + x + 6471 + + + + + x + 6472 + + + + + x + 6473 + + + + + x + 6474 + + + + + x + 6475 + + + + + x + 6476 + + + + + x + 6477 + + + + + x + 6478 + + + + + x + 6479 + + + + + x + 6480 + + + + + x + 6481 + + + + + x + 6482 + + + + + x + 6483 + + + + + x + 6484 + + + + + x + 6485 + + + + + x + 6486 + + + + + x + 6487 + + + + + x + 6488 + + + + + x + 6489 + + + + + x + 6490 + + + + + x + 6491 + + + + + x + 6492 + + + + + x + 6493 + + + + + x + 6494 + + + + + x + 6495 + + + + + x + 6496 + + + + + x + 6497 + + + + + x + 6498 + + + + + x + 6499 + + + + + x + 6500 + + + + + x + 6501 + + + + + x + 6502 + + + + + x + 6503 + + + + + x + 6504 + + + + + x + 6505 + + + + + x + 6506 + + + + + x + 6507 + + + + + x + 6508 + + + + + x + 6509 + + + + + x + 6510 + + + + + x + 6511 + + + + + x + 6512 + + + + + x + 6513 + + + + + x + 6514 + + + + + x + 6515 + + + + + x + 6516 + + + + + x + 6517 + + + + + x + 6518 + + + + + x + 6519 + + + + + x + 6520 + + + + + x + 6521 + + + + + x + 6522 + + + + + x + 6523 + + + + + x + 6524 + + + + + x + 6525 + + + + + x + 6526 + + + + + x + 6527 + + + + + x + 6528 + + + + + x + 6529 + + + + + x + 6530 + + + + + x + 6531 + + + + + x + 6532 + + + + + x + 6533 + + + + + x + 6534 + + + + + x + 6535 + + + + + x + 6536 + + + + + x + 6537 + + + + + x + 6538 + + + + + x + 6539 + + + + + x + 6540 + + + + + x + 6541 + + + + + x + 6542 + + + + + x + 6543 + + + + + x + 6544 + + + + + x + 6545 + + + + + x + 6546 + + + + + x + 6547 + + + + + x + 6548 + + + + + x + 6549 + + + + + x + 6550 + + + + + x + 6551 + + + + + x + 6552 + + + + + x + 6553 + + + + + x + 6554 + + + + + x + 6555 + + + + + x + 6556 + + + + + x + 6557 + + + + + x + 6558 + + + + + x + 6559 + + + + + x + 6560 + + + + + x + 6561 + + + + + x + 6562 + + + + + x + 6563 + + + + + x + 6564 + + + + + x + 6565 + + + + + x + 6566 + + + + + x + 6567 + + + + + x + 6568 + + + + + x + 6569 + + + + + x + 6570 + + + + + x + 6571 + + + + + x + 6572 + + + + + x + 6573 + + + + + x + 6574 + + + + + x + 6575 + + + + + x + 6576 + + + + + x + 6577 + + + + + x + 6578 + + + + + x + 6579 + + + + + x + 6580 + + + + + x + 6581 + + + + + x + 6582 + + + + + x + 6583 + + + + + x + 6584 + + + + + x + 6585 + + + + + x + 6586 + + + + + x + 6587 + + + + + x + 6588 + + + + + x + 6589 + + + + + x + 6590 + + + + + x + 6591 + + + + + x + 6592 + + + + + x + 6593 + + + + + x + 6594 + + + + + x + 6595 + + + + + x + 6596 + + + + + x + 6597 + + + + + x + 6598 + + + + + x + 6599 + + + + + x + 6600 + + + + + x + 6601 + + + + + x + 6602 + + + + + x + 6603 + + + + + x + 6604 + + + + + x + 6605 + + + + + x + 6606 + + + + + x + 6607 + + + + + x + 6608 + + + + + x + 6609 + + + + + x + 6610 + + + + + x + 6611 + + + + + x + 6612 + + + + + x + 6613 + + + + + x + 6614 + + + + + x + 6615 + + + + + x + 6616 + + + + + x + 6617 + + + + + x + 6618 + + + + + x + 6619 + + + + + x + 6620 + + + + + x + 6621 + + + + + x + 6622 + + + + + x + 6623 + + + + + x + 6624 + + + + + x + 6625 + + + + + x + 6626 + + + + + x + 6627 + + + + + x + 6628 + + + + + x + 6629 + + + + + x + 6630 + + + + + x + 6631 + + + + + x + 6632 + + + + + x + 6633 + + + + + x + 6634 + + + + + x + 6635 + + + + + x + 6636 + + + + + x + 6637 + + + + + x + 6638 + + + + + x + 6639 + + + + + x + 6640 + + + + + x + 6641 + + + + + x + 6642 + + + + + x + 6643 + + + + + x + 6644 + + + + + x + 6645 + + + + + x + 6646 + + + + + x + 6647 + + + + + x + 6648 + + + + + x + 6649 + + + + + x + 6650 + + + + + x + 6651 + + + + + x + 6652 + + + + + x + 6653 + + + + + x + 6654 + + + + + x + 6655 + + + + + x + 6656 + + + + + x + 6657 + + + + + x + 6658 + + + + + x + 6659 + + + + + x + 6660 + + + + + x + 6661 + + + + + x + 6662 + + + + + x + 6663 + + + + + x + 6664 + + + + + x + 6665 + + + + + x + 6666 + + + + + x + 6667 + + + + + x + 6668 + + + + + x + 6669 + + + + + x + 6670 + + + + + x + 6671 + + + + + x + 6672 + + + + + x + 6673 + + + + + x + 6674 + + + + + x + 6675 + + + + + x + 6676 + + + + + x + 6677 + + + + + x + 6678 + + + + + x + 6679 + + + + + x + 6680 + + + + + x + 6681 + + + + + x + 6682 + + + + + x + 6683 + + + + + x + 6684 + + + + + x + 6685 + + + + + x + 6686 + + + + + x + 6687 + + + + + x + 6688 + + + + + x + 6689 + + + + + x + 6690 + + + + + x + 6691 + + + + + x + 6692 + + + + + x + 6693 + + + + + x + 6694 + + + + + x + 6695 + + + + + x + 6696 + + + + + x + 6697 + + + + + x + 6698 + + + + + x + 6699 + + + + + x + 6700 + + + + + x + 6701 + + + + + x + 6702 + + + + + x + 6703 + + + + + x + 6704 + + + + + x + 6705 + + + + + x + 6706 + + + + + x + 6707 + + + + + x + 6708 + + + + + x + 6709 + + + + + x + 6710 + + + + + x + 6711 + + + + + x + 6712 + + + + + x + 6713 + + + + + x + 6714 + + + + + x + 6715 + + + + + x + 6716 + + + + + x + 6717 + + + + + x + 6718 + + + + + x + 6719 + + + + + x + 6720 + + + + + x + 6721 + + + + + x + 6722 + + + + + x + 6723 + + + + + x + 6724 + + + + + x + 6725 + + + + + x + 6726 + + + + + x + 6727 + + + + + x + 6728 + + + + + x + 6729 + + + + + x + 6730 + + + + + x + 6731 + + + + + x + 6732 + + + + + x + 6733 + + + + + x + 6734 + + + + + x + 6735 + + + + + x + 6736 + + + + + x + 6737 + + + + + x + 6738 + + + + + x + 6739 + + + + + x + 6740 + + + + + x + 6741 + + + + + x + 6742 + + + + + x + 6743 + + + + + x + 6744 + + + + + x + 6745 + + + + + x + 6746 + + + + + x + 6747 + + + + + x + 6748 + + + + + x + 6749 + + + + + x + 6750 + + + + + x + 6751 + + + + + x + 6752 + + + + + x + 6753 + + + + + x + 6754 + + + + + x + 6755 + + + + + x + 6756 + + + + + x + 6757 + + + + + x + 6758 + + + + + x + 6759 + + + + + x + 6760 + + + + + x + 6761 + + + + + x + 6762 + + + + + x + 6763 + + + + + x + 6764 + + + + + x + 6765 + + + + + x + 6766 + + + + + x + 6767 + + + + + x + 6768 + + + + + x + 6769 + + + + + x + 6770 + + + + + x + 6771 + + + + + x + 6772 + + + + + x + 6773 + + + + + x + 6774 + + + + + x + 6775 + + + + + x + 6776 + + + + + x + 6777 + + + + + x + 6778 + + + + + x + 6779 + + + + + x + 6780 + + + + + x + 6781 + + + + + x + 6782 + + + + + x + 6783 + + + + + x + 6784 + + + + + x + 6785 + + + + + x + 6786 + + + + + x + 6787 + + + + + x + 6788 + + + + + x + 6789 + + + + + x + 6790 + + + + + x + 6791 + + + + + x + 6792 + + + + + x + 6793 + + + + + x + 6794 + + + + + x + 6795 + + + + + x + 6796 + + + + + x + 6797 + + + + + x + 6798 + + + + + x + 6799 + + + + + x + 6800 + + + + + x + 6801 + + + + + x + 6802 + + + + + x + 6803 + + + + + x + 6804 + + + + + x + 6805 + + + + + x + 6806 + + + + + x + 6807 + + + + + x + 6808 + + + + + x + 6809 + + + + + x + 6810 + + + + + x + 6811 + + + + + x + 6812 + + + + + x + 6813 + + + + + x + 6814 + + + + + x + 6815 + + + + + x + 6816 + + + + + x + 6817 + + + + + x + 6818 + + + + + x + 6819 + + + + + x + 6820 + + + + + x + 6821 + + + + + x + 6822 + + + + + x + 6823 + + + + + x + 6824 + + + + + x + 6825 + + + + + x + 6826 + + + + + x + 6827 + + + + + x + 6828 + + + + + x + 6829 + + + + + x + 6830 + + + + + x + 6831 + + + + + x + 6832 + + + + + x + 6833 + + + + + x + 6834 + + + + + x + 6835 + + + + + x + 6836 + + + + + x + 6837 + + + + + x + 6838 + + + + + x + 6839 + + + + + x + 6840 + + + + + x + 6841 + + + + + x + 6842 + + + + + x + 6843 + + + + + x + 6844 + + + + + x + 6845 + + + + + x + 6846 + + + + + x + 6847 + + + + + x + 6848 + + + + + x + 6849 + + + + + x + 6850 + + + + + x + 6851 + + + + + x + 6852 + + + + + x + 6853 + + + + + x + 6854 + + + + + x + 6855 + + + + + x + 6856 + + + + + x + 6857 + + + + + x + 6858 + + + + + x + 6859 + + + + + x + 6860 + + + + + x + 6861 + + + + + x + 6862 + + + + + x + 6863 + + + + + x + 6864 + + + + + x + 6865 + + + + + x + 6866 + + + + + x + 6867 + + + + + x + 6868 + + + + + x + 6869 + + + + + x + 6870 + + + + + x + 6871 + + + + + x + 6872 + + + + + x + 6873 + + + + + x + 6874 + + + + + x + 6875 + + + + + x + 6876 + + + + + x + 6877 + + + + + x + 6878 + + + + + x + 6879 + + + + + x + 6880 + + + + + x + 6881 + + + + + x + 6882 + + + + + x + 6883 + + + + + x + 6884 + + + + + x + 6885 + + + + + x + 6886 + + + + + x + 6887 + + + + + x + 6888 + + + + + x + 6889 + + + + + x + 6890 + + + + + x + 6891 + + + + + x + 6892 + + + + + x + 6893 + + + + + x + 6894 + + + + + x + 6895 + + + + + x + 6896 + + + + + x + 6897 + + + + + x + 6898 + + + + + x + 6899 + + + + + x + 6900 + + + + + x + 6901 + + + + + x + 6902 + + + + + x + 6903 + + + + + x + 6904 + + + + + x + 6905 + + + + + x + 6906 + + + + + x + 6907 + + + + + x + 6908 + + + + + x + 6909 + + + + + x + 6910 + + + + + x + 6911 + + + + + x + 6912 + + + + + x + 6913 + + + + + x + 6914 + + + + + x + 6915 + + + + + x + 6916 + + + + + x + 6917 + + + + + x + 6918 + + + + + x + 6919 + + + + + x + 6920 + + + + + x + 6921 + + + + + x + 6922 + + + + + x + 6923 + + + + + x + 6924 + + + + + x + 6925 + + + + + x + 6926 + + + + + x + 6927 + + + + + x + 6928 + + + + + x + 6929 + + + + + x + 6930 + + + + + x + 6931 + + + + + x + 6932 + + + + + x + 6933 + + + + + x + 6934 + + + + + x + 6935 + + + + + x + 6936 + + + + + x + 6937 + + + + + x + 6938 + + + + + x + 6939 + + + + + x + 6940 + + + + + x + 6941 + + + + + x + 6942 + + + + + x + 6943 + + + + + x + 6944 + + + + + x + 6945 + + + + + x + 6946 + + + + + x + 6947 + + + + + x + 6948 + + + + + x + 6949 + + + + + x + 6950 + + + + + x + 6951 + + + + + x + 6952 + + + + + x + 6953 + + + + + x + 6954 + + + + + x + 6955 + + + + + x + 6956 + + + + + x + 6957 + + + + + x + 6958 + + + + + x + 6959 + + + + + x + 6960 + + + + + x + 6961 + + + + + x + 6962 + + + + + x + 6963 + + + + + x + 6964 + + + + + x + 6965 + + + + + x + 6966 + + + + + x + 6967 + + + + + x + 6968 + + + + + x + 6969 + + + + + x + 6970 + + + + + x + 6971 + + + + + x + 6972 + + + + + x + 6973 + + + + + x + 6974 + + + + + x + 6975 + + + + + x + 6976 + + + + + x + 6977 + + + + + x + 6978 + + + + + x + 6979 + + + + + x + 6980 + + + + + x + 6981 + + + + + x + 6982 + + + + + x + 6983 + + + + + x + 6984 + + + + + x + 6985 + + + + + x + 6986 + + + + + x + 6987 + + + + + x + 6988 + + + + + x + 6989 + + + + + x + 6990 + + + + + x + 6991 + + + + + x + 6992 + + + + + x + 6993 + + + + + x + 6994 + + + + + x + 6995 + + + + + x + 6996 + + + + + x + 6997 + + + + + x + 6998 + + + + + x + 6999 + + + + + x + 7000 + + + + + x + 7001 + + + + + x + 7002 + + + + + x + 7003 + + + + + x + 7004 + + + + + x + 7005 + + + + + x + 7006 + + + + + x + 7007 + + + + + x + 7008 + + + + + x + 7009 + + + + + x + 7010 + + + + + x + 7011 + + + + + x + 7012 + + + + + x + 7013 + + + + + x + 7014 + + + + + x + 7015 + + + + + x + 7016 + + + + + x + 7017 + + + + + x + 7018 + + + + + x + 7019 + + + + + x + 7020 + + + + + x + 7021 + + + + + x + 7022 + + + + + x + 7023 + + + + + x + 7024 + + + + + x + 7025 + + + + + x + 7026 + + + + + x + 7027 + + + + + x + 7028 + + + + + x + 7029 + + + + + x + 7030 + + + + + x + 7031 + + + + + x + 7032 + + + + + x + 7033 + + + + + x + 7034 + + + + + x + 7035 + + + + + x + 7036 + + + + + x + 7037 + + + + + x + 7038 + + + + + x + 7039 + + + + + x + 7040 + + + + + x + 7041 + + + + + x + 7042 + + + + + x + 7043 + + + + + x + 7044 + + + + + x + 7045 + + + + + x + 7046 + + + + + x + 7047 + + + + + x + 7048 + + + + + x + 7049 + + + + + x + 7050 + + + + + x + 7051 + + + + + x + 7052 + + + + + x + 7053 + + + + + x + 7054 + + + + + x + 7055 + + + + + x + 7056 + + + + + x + 7057 + + + + + x + 7058 + + + + + x + 7059 + + + + + x + 7060 + + + + + x + 7061 + + + + + x + 7062 + + + + + x + 7063 + + + + + x + 7064 + + + + + x + 7065 + + + + + x + 7066 + + + + + x + 7067 + + + + + x + 7068 + + + + + x + 7069 + + + + + x + 7070 + + + + + x + 7071 + + + + + x + 7072 + + + + + x + 7073 + + + + + x + 7074 + + + + + x + 7075 + + + + + x + 7076 + + + + + x + 7077 + + + + + x + 7078 + + + + + x + 7079 + + + + + x + 7080 + + + + + x + 7081 + + + + + x + 7082 + + + + + x + 7083 + + + + + x + 7084 + + + + + x + 7085 + + + + + x + 7086 + + + + + x + 7087 + + + + + x + 7088 + + + + + x + 7089 + + + + + x + 7090 + + + + + x + 7091 + + + + + x + 7092 + + + + + x + 7093 + + + + + x + 7094 + + + + + x + 7095 + + + + + x + 7096 + + + + + x + 7097 + + + + + x + 7098 + + + + + x + 7099 + + + + + x + 7100 + + + + + x + 7101 + + + + + x + 7102 + + + + + x + 7103 + + + + + x + 7104 + + + + + x + 7105 + + + + + x + 7106 + + + + + x + 7107 + + + + + x + 7108 + + + + + x + 7109 + + + + + x + 7110 + + + + + x + 7111 + + + + + x + 7112 + + + + + x + 7113 + + + + + x + 7114 + + + + + x + 7115 + + + + + x + 7116 + + + + + x + 7117 + + + + + x + 7118 + + + + + x + 7119 + + + + + x + 7120 + + + + + x + 7121 + + + + + x + 7122 + + + + + x + 7123 + + + + + x + 7124 + + + + + x + 7125 + + + + + x + 7126 + + + + + x + 7127 + + + + + x + 7128 + + + + + x + 7129 + + + + + x + 7130 + + + + + x + 7131 + + + + + x + 7132 + + + + + x + 7133 + + + + + x + 7134 + + + + + x + 7135 + + + + + x + 7136 + + + + + x + 7137 + + + + + x + 7138 + + + + + x + 7139 + + + + + x + 7140 + + + + + x + 7141 + + + + + x + 7142 + + + + + x + 7143 + + + + + x + 7144 + + + + + x + 7145 + + + + + x + 7146 + + + + + x + 7147 + + + + + x + 7148 + + + + + x + 7149 + + + + + x + 7150 + + + + + x + 7151 + + + + + x + 7152 + + + + + x + 7153 + + + + + x + 7154 + + + + + x + 7155 + + + + + x + 7156 + + + + + x + 7157 + + + + + x + 7158 + + + + + x + 7159 + + + + + x + 7160 + + + + + x + 7161 + + + + + x + 7162 + + + + + x + 7163 + + + + + x + 7164 + + + + + x + 7165 + + + + + x + 7166 + + + + + x + 7167 + + + + + x + 7168 + + + + + x + 7169 + + + + + x + 7170 + + + + + x + 7171 + + + + + x + 7172 + + + + + x + 7173 + + + + + x + 7174 + + + + + x + 7175 + + + + + x + 7176 + + + + + x + 7177 + + + + + x + 7178 + + + + + x + 7179 + + + + + x + 7180 + + + + + x + 7181 + + + + + x + 7182 + + + + + x + 7183 + + + + + x + 7184 + + + + + x + 7185 + + + + + x + 7186 + + + + + x + 7187 + + + + + x + 7188 + + + + + x + 7189 + + + + + x + 7190 + + + + + x + 7191 + + + + + x + 7192 + + + + + x + 7193 + + + + + x + 7194 + + + + + x + 7195 + + + + + x + 7196 + + + + + x + 7197 + + + + + x + 7198 + + + + + x + 7199 + + + + + x + 7200 + + + + + x + 7201 + + + + + x + 7202 + + + + + x + 7203 + + + + + x + 7204 + + + + + x + 7205 + + + + + x + 7206 + + + + + x + 7207 + + + + + x + 7208 + + + + + x + 7209 + + + + + x + 7210 + + + + + x + 7211 + + + + + x + 7212 + + + + + x + 7213 + + + + + x + 7214 + + + + + x + 7215 + + + + + x + 7216 + + + + + x + 7217 + + + + + x + 7218 + + + + + x + 7219 + + + + + x + 7220 + + + + + x + 7221 + + + + + x + 7222 + + + + + x + 7223 + + + + + x + 7224 + + + + + x + 7225 + + + + + x + 7226 + + + + + x + 7227 + + + + + x + 7228 + + + + + x + 7229 + + + + + x + 7230 + + + + + x + 7231 + + + + + x + 7232 + + + + + x + 7233 + + + + + x + 7234 + + + + + x + 7235 + + + + + x + 7236 + + + + + x + 7237 + + + + + x + 7238 + + + + + x + 7239 + + + + + x + 7240 + + + + + x + 7241 + + + + + x + 7242 + + + + + x + 7243 + + + + + x + 7244 + + + + + x + 7245 + + + + + x + 7246 + + + + + x + 7247 + + + + + x + 7248 + + + + + x + 7249 + + + + + x + 7250 + + + + + x + 7251 + + + + + x + 7252 + + + + + x + 7253 + + + + + x + 7254 + + + + + x + 7255 + + + + + x + 7256 + + + + + x + 7257 + + + + + x + 7258 + + + + + x + 7259 + + + + + x + 7260 + + + + + x + 7261 + + + + + x + 7262 + + + + + x + 7263 + + + + + x + 7264 + + + + + x + 7265 + + + + + x + 7266 + + + + + x + 7267 + + + + + x + 7268 + + + + + x + 7269 + + + + + x + 7270 + + + + + x + 7271 + + + + + x + 7272 + + + + + x + 7273 + + + + + x + 7274 + + + + + x + 7275 + + + + + x + 7276 + + + + + x + 7277 + + + + + x + 7278 + + + + + x + 7279 + + + + + x + 7280 + + + + + x + 7281 + + + + + x + 7282 + + + + + x + 7283 + + + + + x + 7284 + + + + + x + 7285 + + + + + x + 7286 + + + + + x + 7287 + + + + + x + 7288 + + + + + x + 7289 + + + + + x + 7290 + + + + + x + 7291 + + + + + x + 7292 + + + + + x + 7293 + + + + + x + 7294 + + + + + x + 7295 + + + + + x + 7296 + + + + + x + 7297 + + + + + x + 7298 + + + + + x + 7299 + + + + + x + 7300 + + + + + x + 7301 + + + + + x + 7302 + + + + + x + 7303 + + + + + x + 7304 + + + + + x + 7305 + + + + + x + 7306 + + + + + x + 7307 + + + + + x + 7308 + + + + + x + 7309 + + + + + x + 7310 + + + + + x + 7311 + + + + + x + 7312 + + + + + x + 7313 + + + + + x + 7314 + + + + + x + 7315 + + + + + x + 7316 + + + + + x + 7317 + + + + + x + 7318 + + + + + x + 7319 + + + + + x + 7320 + + + + + x + 7321 + + + + + x + 7322 + + + + + x + 7323 + + + + + x + 7324 + + + + + x + 7325 + + + + + x + 7326 + + + + + x + 7327 + + + + + x + 7328 + + + + + x + 7329 + + + + + x + 7330 + + + + + x + 7331 + + + + + x + 7332 + + + + + x + 7333 + + + + + x + 7334 + + + + + x + 7335 + + + + + x + 7336 + + + + + x + 7337 + + + + + x + 7338 + + + + + x + 7339 + + + + + x + 7340 + + + + + x + 7341 + + + + + x + 7342 + + + + + x + 7343 + + + + + x + 7344 + + + + + x + 7345 + + + + + x + 7346 + + + + + x + 7347 + + + + + x + 7348 + + + + + x + 7349 + + + + + x + 7350 + + + + + x + 7351 + + + + + x + 7352 + + + + + x + 7353 + + + + + x + 7354 + + + + + x + 7355 + + + + + x + 7356 + + + + + x + 7357 + + + + + x + 7358 + + + + + x + 7359 + + + + + x + 7360 + + + + + x + 7361 + + + + + x + 7362 + + + + + x + 7363 + + + + + x + 7364 + + + + + x + 7365 + + + + + x + 7366 + + + + + x + 7367 + + + + + x + 7368 + + + + + x + 7369 + + + + + x + 7370 + + + + + x + 7371 + + + + + x + 7372 + + + + + x + 7373 + + + + + x + 7374 + + + + + x + 7375 + + + + + x + 7376 + + + + + x + 7377 + + + + + x + 7378 + + + + + x + 7379 + + + + + x + 7380 + + + + + x + 7381 + + + + + x + 7382 + + + + + x + 7383 + + + + + x + 7384 + + + + + x + 7385 + + + + + x + 7386 + + + + + x + 7387 + + + + + x + 7388 + + + + + x + 7389 + + + + + x + 7390 + + + + + x + 7391 + + + + + x + 7392 + + + + + x + 7393 + + + + + x + 7394 + + + + + x + 7395 + + + + + x + 7396 + + + + + x + 7397 + + + + + x + 7398 + + + + + x + 7399 + + + + + x + 7400 + + + + + x + 7401 + + + + + x + 7402 + + + + + x + 7403 + + + + + x + 7404 + + + + + x + 7405 + + + + + x + 7406 + + + + + x + 7407 + + + + + x + 7408 + + + + + x + 7409 + + + + + x + 7410 + + + + + x + 7411 + + + + + x + 7412 + + + + + x + 7413 + + + + + x + 7414 + + + + + x + 7415 + + + + + x + 7416 + + + + + x + 7417 + + + + + x + 7418 + + + + + x + 7419 + + + + + x + 7420 + + + + + x + 7421 + + + + + x + 7422 + + + + + x + 7423 + + + + + x + 7424 + + + + + x + 7425 + + + + + x + 7426 + + + + + x + 7427 + + + + + x + 7428 + + + + + x + 7429 + + + + + x + 7430 + + + + + x + 7431 + + + + + x + 7432 + + + + + x + 7433 + + + + + x + 7434 + + + + + x + 7435 + + + + + x + 7436 + + + + + x + 7437 + + + + + x + 7438 + + + + + x + 7439 + + + + + x + 7440 + + + + + x + 7441 + + + + + x + 7442 + + + + + x + 7443 + + + + + x + 7444 + + + + + x + 7445 + + + + + x + 7446 + + + + + x + 7447 + + + + + x + 7448 + + + + + x + 7449 + + + + + x + 7450 + + + + + x + 7451 + + + + + x + 7452 + + + + + x + 7453 + + + + + x + 7454 + + + + + x + 7455 + + + + + x + 7456 + + + + + x + 7457 + + + + + x + 7458 + + + + + x + 7459 + + + + + x + 7460 + + + + + x + 7461 + + + + + x + 7462 + + + + + x + 7463 + + + + + x + 7464 + + + + + x + 7465 + + + + + x + 7466 + + + + + x + 7467 + + + + + x + 7468 + + + + + x + 7469 + + + + + x + 7470 + + + + + x + 7471 + + + + + x + 7472 + + + + + x + 7473 + + + + + x + 7474 + + + + + x + 7475 + + + + + x + 7476 + + + + + x + 7477 + + + + + x + 7478 + + + + + x + 7479 + + + + + x + 7480 + + + + + x + 7481 + + + + + x + 7482 + + + + + x + 7483 + + + + + x + 7484 + + + + + x + 7485 + + + + + x + 7486 + + + + + x + 7487 + + + + + x + 7488 + + + + + x + 7489 + + + + + x + 7490 + + + + + x + 7491 + + + + + x + 7492 + + + + + x + 7493 + + + + + x + 7494 + + + + + x + 7495 + + + + + x + 7496 + + + + + x + 7497 + + + + + x + 7498 + + + + + x + 7499 + + + + + x + 7500 + + + + + x + 7501 + + + + + x + 7502 + + + + + x + 7503 + + + + + x + 7504 + + + + + x + 7505 + + + + + x + 7506 + + + + + x + 7507 + + + + + x + 7508 + + + + + x + 7509 + + + + + x + 7510 + + + + + x + 7511 + + + + + x + 7512 + + + + + x + 7513 + + + + + x + 7514 + + + + + x + 7515 + + + + + x + 7516 + + + + + x + 7517 + + + + + x + 7518 + + + + + x + 7519 + + + + + x + 7520 + + + + + x + 7521 + + + + + x + 7522 + + + + + x + 7523 + + + + + x + 7524 + + + + + x + 7525 + + + + + x + 7526 + + + + + x + 7527 + + + + + x + 7528 + + + + + x + 7529 + + + + + x + 7530 + + + + + x + 7531 + + + + + x + 7532 + + + + + x + 7533 + + + + + x + 7534 + + + + + x + 7535 + + + + + x + 7536 + + + + + x + 7537 + + + + + x + 7538 + + + + + x + 7539 + + + + + x + 7540 + + + + + x + 7541 + + + + + x + 7542 + + + + + x + 7543 + + + + + x + 7544 + + + + + x + 7545 + + + + + x + 7546 + + + + + x + 7547 + + + + + x + 7548 + + + + + x + 7549 + + + + + x + 7550 + + + + + x + 7551 + + + + + x + 7552 + + + + + x + 7553 + + + + + x + 7554 + + + + + x + 7555 + + + + + x + 7556 + + + + + x + 7557 + + + + + x + 7558 + + + + + x + 7559 + + + + + x + 7560 + + + + + x + 7561 + + + + + x + 7562 + + + + + x + 7563 + + + + + x + 7564 + + + + + x + 7565 + + + + + x + 7566 + + + + + x + 7567 + + + + + x + 7568 + + + + + x + 7569 + + + + + x + 7570 + + + + + x + 7571 + + + + + x + 7572 + + + + + x + 7573 + + + + + x + 7574 + + + + + x + 7575 + + + + + x + 7576 + + + + + x + 7577 + + + + + x + 7578 + + + + + x + 7579 + + + + + x + 7580 + + + + + x + 7581 + + + + + x + 7582 + + + + + x + 7583 + + + + + x + 7584 + + + + + x + 7585 + + + + + x + 7586 + + + + + x + 7587 + + + + + x + 7588 + + + + + x + 7589 + + + + + x + 7590 + + + + + x + 7591 + + + + + x + 7592 + + + + + x + 7593 + + + + + x + 7594 + + + + + x + 7595 + + + + + x + 7596 + + + + + x + 7597 + + + + + x + 7598 + + + + + x + 7599 + + + + + x + 7600 + + + + + x + 7601 + + + + + x + 7602 + + + + + x + 7603 + + + + + x + 7604 + + + + + x + 7605 + + + + + x + 7606 + + + + + x + 7607 + + + + + x + 7608 + + + + + x + 7609 + + + + + x + 7610 + + + + + x + 7611 + + + + + x + 7612 + + + + + x + 7613 + + + + + x + 7614 + + + + + x + 7615 + + + + + x + 7616 + + + + + x + 7617 + + + + + x + 7618 + + + + + x + 7619 + + + + + x + 7620 + + + + + x + 7621 + + + + + x + 7622 + + + + + x + 7623 + + + + + x + 7624 + + + + + x + 7625 + + + + + x + 7626 + + + + + x + 7627 + + + + + x + 7628 + + + + + x + 7629 + + + + + x + 7630 + + + + + x + 7631 + + + + + x + 7632 + + + + + x + 7633 + + + + + x + 7634 + + + + + x + 7635 + + + + + x + 7636 + + + + + x + 7637 + + + + + x + 7638 + + + + + x + 7639 + + + + + x + 7640 + + + + + x + 7641 + + + + + x + 7642 + + + + + x + 7643 + + + + + x + 7644 + + + + + x + 7645 + + + + + x + 7646 + + + + + x + 7647 + + + + + x + 7648 + + + + + x + 7649 + + + + + x + 7650 + + + + + x + 7651 + + + + + x + 7652 + + + + + x + 7653 + + + + + x + 7654 + + + + + x + 7655 + + + + + x + 7656 + + + + + x + 7657 + + + + + x + 7658 + + + + + x + 7659 + + + + + x + 7660 + + + + + x + 7661 + + + + + x + 7662 + + + + + x + 7663 + + + + + x + 7664 + + + + + x + 7665 + + + + + x + 7666 + + + + + x + 7667 + + + + + x + 7668 + + + + + x + 7669 + + + + + x + 7670 + + + + + x + 7671 + + + + + x + 7672 + + + + + x + 7673 + + + + + x + 7674 + + + + + x + 7675 + + + + + x + 7676 + + + + + x + 7677 + + + + + x + 7678 + + + + + x + 7679 + + + + + x + 7680 + + + + + x + 7681 + + + + + x + 7682 + + + + + x + 7683 + + + + + x + 7684 + + + + + x + 7685 + + + + + x + 7686 + + + + + x + 7687 + + + + + x + 7688 + + + + + x + 7689 + + + + + x + 7690 + + + + + x + 7691 + + + + + x + 7692 + + + + + x + 7693 + + + + + x + 7694 + + + + + x + 7695 + + + + + x + 7696 + + + + + x + 7697 + + + + + x + 7698 + + + + + x + 7699 + + + + + x + 7700 + + + + + x + 7701 + + + + + x + 7702 + + + + + x + 7703 + + + + + x + 7704 + + + + + x + 7705 + + + + + x + 7706 + + + + + x + 7707 + + + + + x + 7708 + + + + + x + 7709 + + + + + x + 7710 + + + + + x + 7711 + + + + + x + 7712 + + + + + x + 7713 + + + + + x + 7714 + + + + + x + 7715 + + + + + x + 7716 + + + + + x + 7717 + + + + + x + 7718 + + + + + x + 7719 + + + + + x + 7720 + + + + + x + 7721 + + + + + x + 7722 + + + + + x + 7723 + + + + + x + 7724 + + + + + x + 7725 + + + + + x + 7726 + + + + + x + 7727 + + + + + x + 7728 + + + + + x + 7729 + + + + + x + 7730 + + + + + x + 7731 + + + + + x + 7732 + + + + + x + 7733 + + + + + x + 7734 + + + + + x + 7735 + + + + + x + 7736 + + + + + x + 7737 + + + + + x + 7738 + + + + + x + 7739 + + + + + x + 7740 + + + + + x + 7741 + + + + + x + 7742 + + + + + x + 7743 + + + + + x + 7744 + + + + + x + 7745 + + + + + x + 7746 + + + + + x + 7747 + + + + + x + 7748 + + + + + x + 7749 + + + + + x + 7750 + + + + + x + 7751 + + + + + x + 7752 + + + + + x + 7753 + + + + + x + 7754 + + + + + x + 7755 + + + + + x + 7756 + + + + + x + 7757 + + + + + x + 7758 + + + + + x + 7759 + + + + + x + 7760 + + + + + x + 7761 + + + + + x + 7762 + + + + + x + 7763 + + + + + x + 7764 + + + + + x + 7765 + + + + + x + 7766 + + + + + x + 7767 + + + + + x + 7768 + + + + + x + 7769 + + + + + x + 7770 + + + + + x + 7771 + + + + + x + 7772 + + + + + x + 7773 + + + + + x + 7774 + + + + + x + 7775 + + + + + x + 7776 + + + + + x + 7777 + + + + + x + 7778 + + + + + x + 7779 + + + + + x + 7780 + + + + + x + 7781 + + + + + x + 7782 + + + + + x + 7783 + + + + + x + 7784 + + + + + x + 7785 + + + + + x + 7786 + + + + + x + 7787 + + + + + x + 7788 + + + + + x + 7789 + + + + + x + 7790 + + + + + x + 7791 + + + + + x + 7792 + + + + + x + 7793 + + + + + x + 7794 + + + + + x + 7795 + + + + + x + 7796 + + + + + x + 7797 + + + + + x + 7798 + + + + + x + 7799 + + + + + x + 7800 + + + + + x + 7801 + + + + + x + 7802 + + + + + x + 7803 + + + + + x + 7804 + + + + + x + 7805 + + + + + x + 7806 + + + + + x + 7807 + + + + + x + 7808 + + + + + x + 7809 + + + + + x + 7810 + + + + + x + 7811 + + + + + x + 7812 + + + + + x + 7813 + + + + + x + 7814 + + + + + x + 7815 + + + + + x + 7816 + + + + + x + 7817 + + + + + x + 7818 + + + + + x + 7819 + + + + + x + 7820 + + + + + x + 7821 + + + + + x + 7822 + + + + + x + 7823 + + + + + x + 7824 + + + + + x + 7825 + + + + + x + 7826 + + + + + x + 7827 + + + + + x + 7828 + + + + + x + 7829 + + + + + x + 7830 + + + + + x + 7831 + + + + + x + 7832 + + + + + x + 7833 + + + + + x + 7834 + + + + + x + 7835 + + + + + x + 7836 + + + + + x + 7837 + + + + + x + 7838 + + + + + x + 7839 + + + + + x + 7840 + + + + + x + 7841 + + + + + x + 7842 + + + + + x + 7843 + + + + + x + 7844 + + + + + x + 7845 + + + + + x + 7846 + + + + + x + 7847 + + + + + x + 7848 + + + + + x + 7849 + + + + + x + 7850 + + + + + x + 7851 + + + + + x + 7852 + + + + + x + 7853 + + + + + x + 7854 + + + + + x + 7855 + + + + + x + 7856 + + + + + x + 7857 + + + + + x + 7858 + + + + + x + 7859 + + + + + x + 7860 + + + + + x + 7861 + + + + + x + 7862 + + + + + x + 7863 + + + + + x + 7864 + + + + + x + 7865 + + + + + x + 7866 + + + + + x + 7867 + + + + + x + 7868 + + + + + x + 7869 + + + + + x + 7870 + + + + + x + 7871 + + + + + x + 7872 + + + + + x + 7873 + + + + + x + 7874 + + + + + x + 7875 + + + + + x + 7876 + + + + + x + 7877 + + + + + x + 7878 + + + + + x + 7879 + + + + + x + 7880 + + + + + x + 7881 + + + + + x + 7882 + + + + + x + 7883 + + + + + x + 7884 + + + + + x + 7885 + + + + + x + 7886 + + + + + x + 7887 + + + + + x + 7888 + + + + + x + 7889 + + + + + x + 7890 + + + + + x + 7891 + + + + + x + 7892 + + + + + x + 7893 + + + + + x + 7894 + + + + + x + 7895 + + + + + x + 7896 + + + + + x + 7897 + + + + + x + 7898 + + + + + x + 7899 + + + + + x + 7900 + + + + + x + 7901 + + + + + x + 7902 + + + + + x + 7903 + + + + + x + 7904 + + + + + x + 7905 + + + + + x + 7906 + + + + + x + 7907 + + + + + x + 7908 + + + + + x + 7909 + + + + + x + 7910 + + + + + x + 7911 + + + + + x + 7912 + + + + + x + 7913 + + + + + x + 7914 + + + + + x + 7915 + + + + + x + 7916 + + + + + x + 7917 + + + + + x + 7918 + + + + + x + 7919 + + + + + x + 7920 + + + + + x + 7921 + + + + + x + 7922 + + + + + x + 7923 + + + + + x + 7924 + + + + + x + 7925 + + + + + x + 7926 + + + + + x + 7927 + + + + + x + 7928 + + + + + x + 7929 + + + + + x + 7930 + + + + + x + 7931 + + + + + x + 7932 + + + + + x + 7933 + + + + + x + 7934 + + + + + x + 7935 + + + + + x + 7936 + + + + + x + 7937 + + + + + x + 7938 + + + + + x + 7939 + + + + + x + 7940 + + + + + x + 7941 + + + + + x + 7942 + + + + + x + 7943 + + + + + x + 7944 + + + + + x + 7945 + + + + + x + 7946 + + + + + x + 7947 + + + + + x + 7948 + + + + + x + 7949 + + + + + x + 7950 + + + + + x + 7951 + + + + + x + 7952 + + + + + x + 7953 + + + + + x + 7954 + + + + + x + 7955 + + + + + x + 7956 + + + + + x + 7957 + + + + + x + 7958 + + + + + x + 7959 + + + + + x + 7960 + + + + + x + 7961 + + + + + x + 7962 + + + + + x + 7963 + + + + + x + 7964 + + + + + x + 7965 + + + + + x + 7966 + + + + + x + 7967 + + + + + x + 7968 + + + + + x + 7969 + + + + + x + 7970 + + + + + x + 7971 + + + + + x + 7972 + + + + + x + 7973 + + + + + x + 7974 + + + + + x + 7975 + + + + + x + 7976 + + + + + x + 7977 + + + + + x + 7978 + + + + + x + 7979 + + + + + x + 7980 + + + + + x + 7981 + + + + + x + 7982 + + + + + x + 7983 + + + + + x + 7984 + + + + + x + 7985 + + + + + x + 7986 + + + + + x + 7987 + + + + + x + 7988 + + + + + x + 7989 + + + + + x + 7990 + + + + + x + 7991 + + + + + x + 7992 + + + + + x + 7993 + + + + + x + 7994 + + + + + x + 7995 + + + + + x + 7996 + + + + + x + 7997 + + + + + x + 7998 + + + + + x + 7999 + + + + + x + 8000 + + + + + x + 8001 + + + + + x + 8002 + + + + + x + 8003 + + + + + x + 8004 + + + + + x + 8005 + + + + + x + 8006 + + + + + x + 8007 + + + + + x + 8008 + + + + + x + 8009 + + + + + x + 8010 + + + + + x + 8011 + + + + + x + 8012 + + + + + x + 8013 + + + + + x + 8014 + + + + + x + 8015 + + + + + x + 8016 + + + + + x + 8017 + + + + + x + 8018 + + + + + x + 8019 + + + + + x + 8020 + + + + + x + 8021 + + + + + x + 8022 + + + + + x + 8023 + + + + + x + 8024 + + + + + x + 8025 + + + + + x + 8026 + + + + + x + 8027 + + + + + x + 8028 + + + + + x + 8029 + + + + + x + 8030 + + + + + x + 8031 + + + + + x + 8032 + + + + + x + 8033 + + + + + x + 8034 + + + + + x + 8035 + + + + + x + 8036 + + + + + x + 8037 + + + + + x + 8038 + + + + + x + 8039 + + + + + x + 8040 + + + + + x + 8041 + + + + + x + 8042 + + + + + x + 8043 + + + + + x + 8044 + + + + + x + 8045 + + + + + x + 8046 + + + + + x + 8047 + + + + + x + 8048 + + + + + x + 8049 + + + + + x + 8050 + + + + + x + 8051 + + + + + x + 8052 + + + + + x + 8053 + + + + + x + 8054 + + + + + x + 8055 + + + + + x + 8056 + + + + + x + 8057 + + + + + x + 8058 + + + + + x + 8059 + + + + + x + 8060 + + + + + x + 8061 + + + + + x + 8062 + + + + + x + 8063 + + + + + x + 8064 + + + + + x + 8065 + + + + + x + 8066 + + + + + x + 8067 + + + + + x + 8068 + + + + + x + 8069 + + + + + x + 8070 + + + + + x + 8071 + + + + + x + 8072 + + + + + x + 8073 + + + + + x + 8074 + + + + + x + 8075 + + + + + x + 8076 + + + + + x + 8077 + + + + + x + 8078 + + + + + x + 8079 + + + + + x + 8080 + + + + + x + 8081 + + + + + x + 8082 + + + + + x + 8083 + + + + + x + 8084 + + + + + x + 8085 + + + + + x + 8086 + + + + + x + 8087 + + + + + x + 8088 + + + + + x + 8089 + + + + + x + 8090 + + + + + x + 8091 + + + + + x + 8092 + + + + + x + 8093 + + + + + x + 8094 + + + + + x + 8095 + + + + + x + 8096 + + + + + x + 8097 + + + + + x + 8098 + + + + + x + 8099 + + + + + x + 8100 + + + + + x + 8101 + + + + + x + 8102 + + + + + x + 8103 + + + + + x + 8104 + + + + + x + 8105 + + + + + x + 8106 + + + + + x + 8107 + + + + + x + 8108 + + + + + x + 8109 + + + + + x + 8110 + + + + + x + 8111 + + + + + x + 8112 + + + + + x + 8113 + + + + + x + 8114 + + + + + x + 8115 + + + + + x + 8116 + + + + + x + 8117 + + + + + x + 8118 + + + + + x + 8119 + + + + + x + 8120 + + + + + x + 8121 + + + + + x + 8122 + + + + + x + 8123 + + + + + x + 8124 + + + + + x + 8125 + + + + + x + 8126 + + + + + x + 8127 + + + + + x + 8128 + + + + + x + 8129 + + + + + x + 8130 + + + + + x + 8131 + + + + + x + 8132 + + + + + x + 8133 + + + + + x + 8134 + + + + + x + 8135 + + + + + x + 8136 + + + + + x + 8137 + + + + + x + 8138 + + + + + x + 8139 + + + + + x + 8140 + + + + + x + 8141 + + + + + x + 8142 + + + + + x + 8143 + + + + + x + 8144 + + + + + x + 8145 + + + + + x + 8146 + + + + + x + 8147 + + + + + x + 8148 + + + + + x + 8149 + + + + + x + 8150 + + + + + x + 8151 + + + + + x + 8152 + + + + + x + 8153 + + + + + x + 8154 + + + + + x + 8155 + + + + + x + 8156 + + + + + x + 8157 + + + + + x + 8158 + + + + + x + 8159 + + + + + x + 8160 + + + + + x + 8161 + + + + + x + 8162 + + + + + x + 8163 + + + + + x + 8164 + + + + + x + 8165 + + + + + x + 8166 + + + + + x + 8167 + + + + + x + 8168 + + + + + x + 8169 + + + + + x + 8170 + + + + + x + 8171 + + + + + x + 8172 + + + + + x + 8173 + + + + + x + 8174 + + + + + x + 8175 + + + + + x + 8176 + + + + + x + 8177 + + + + + x + 8178 + + + + + x + 8179 + + + + + x + 8180 + + + + + x + 8181 + + + + + x + 8182 + + + + + x + 8183 + + + + + x + 8184 + + + + + x + 8185 + + + + + x + 8186 + + + + + x + 8187 + + + + + x + 8188 + + + + + x + 8189 + + + + + x + 8190 + + + + + x + 8191 + + + + + x + 8192 + + + + + + + + x + + + x1 + + + + + x1 + + x + 1 + + + + + + + + x + + + + x + 0 + + + + + From bef9c4245ab55e340b1e4ac6815dceadcb32cb14 Mon Sep 17 00:00:00 2001 From: Sam Kaufman Date: Tue, 20 Feb 2018 11:28:29 -0500 Subject: [PATCH 058/236] New MCMC benchmarks --- bench_horn_mcmc/abdu_04/config | 12 + bench_horn_mcmc/abdu_04/first.xml | 140 + .../bhmr2007_true-unreach-call/config | 12 + .../bhmr2007_true-unreach-call/first.xml | 152 + .../bouncy_three_counters_merged/config | 12 + .../bouncy_three_counters_merged/first.xml | 194 + bench_horn_mcmc/const_mod_1/config | 12 + bench_horn_mcmc/const_mod_1/first.xml | 60 + bench_horn_mcmc/const_mod_2/config | 12 + bench_horn_mcmc/const_mod_2/first.xml | 60 + .../config | 12 + .../first.xml | 101 + bench_horn_mcmc/dillig04/config | 12 + bench_horn_mcmc/dillig04/first.xml | 82 + bench_horn_mcmc/dillig13/config | 12 + bench_horn_mcmc/dillig13/first.xml | 124 + bench_horn_mcmc/dillig14/config | 12 + bench_horn_mcmc/dillig14/first.xml | 121 + bench_horn_mcmc/dillig15/config | 12 + bench_horn_mcmc/dillig15/first.xml | 107 + bench_horn_mcmc/dillig16/config | 12 + bench_horn_mcmc/dillig16/first.xml | 106 + bench_horn_mcmc/dillig37/config | 12 + bench_horn_mcmc/dillig37/first.xml | 112 + bench_horn_mcmc/dillig41/config | 12 + bench_horn_mcmc/dillig41/first.xml | 108 + bench_horn_mcmc/dillig43/config | 12 + bench_horn_mcmc/dillig43/first.xml | 78 + bench_horn_mcmc/ex14/config | 12 + bench_horn_mcmc/ex14/first.xml | 108 + bench_horn_mcmc/ex7/config | 12 + bench_horn_mcmc/ex7/first.xml | 120 + bench_horn_mcmc/fig9/config | 12 + bench_horn_mcmc/fig9/first.xml | 77 + .../hhk2008_true-unreach-call/config | 12 + .../hhk2008_true-unreach-call/first.xml | 123 + bench_horn_mcmc/menlo_park_term_orig/config | 12 + .../menlo_park_term_orig/first.xml | 133 + .../menlo_park_term_simpl_1/config | 12 + .../menlo_park_term_simpl_1/first.xml | 130 + .../menlo_park_term_simpl_2/config | 12 + .../menlo_park_term_simpl_2/first.xml | 142 + .../config | 12 + .../first.xml | 104 + bench_horn_mcmc/s_mutants_01/config | 12 + bench_horn_mcmc/s_mutants_01/first.xml | 78 + bench_horn_mcmc/s_mutants_02/config | 12 + bench_horn_mcmc/s_mutants_02/first.xml | 122 + bench_horn_mcmc/s_mutants_03/config | 12 + bench_horn_mcmc/s_mutants_03/first.xml | 94 + bench_horn_mcmc/s_mutants_04/config | 12 + bench_horn_mcmc/s_mutants_04/first.xml | 90 + bench_horn_mcmc/s_mutants_05/config | 12 + bench_horn_mcmc/s_mutants_05/first.xml | 90 + bench_horn_mcmc/s_mutants_06/config | 12 + bench_horn_mcmc/s_mutants_06/first.xml | 99 + bench_horn_mcmc/s_mutants_07/config | 12 + bench_horn_mcmc/s_mutants_07/first.xml | 128 + bench_horn_mcmc/s_mutants_09/config | 12 + bench_horn_mcmc/s_mutants_09/first.xml | 79 + bench_horn_mcmc/s_mutants_10/config | 12 + bench_horn_mcmc/s_mutants_10/first.xml | 76 + bench_horn_mcmc/s_mutants_11/config | 12 + bench_horn_mcmc/s_mutants_11/first.xml | 107 + bench_horn_mcmc/s_mutants_12/config | 12 + bench_horn_mcmc/s_mutants_12/first.xml | 186 + bench_horn_mcmc/s_mutants_13/config | 12 + bench_horn_mcmc/s_mutants_13/first.xml | 194 + bench_horn_mcmc/s_mutants_14/config | 12 + bench_horn_mcmc/s_mutants_14/first.xml | 195 + bench_horn_mcmc/s_mutants_15/config | 12 + bench_horn_mcmc/s_mutants_15/first.xml | 195 + bench_horn_mcmc/s_mutants_16/config | 12 + bench_horn_mcmc/s_mutants_16/first.xml | 110 + bench_horn_mcmc/s_mutants_17/config | 12 + bench_horn_mcmc/s_mutants_17/first.xml | 110 + bench_horn_mcmc/s_mutants_21/config | 12 + bench_horn_mcmc/s_mutants_21/first.xml | 143 + bench_horn_mcmc/s_mutants_22/config | 12 + bench_horn_mcmc/s_mutants_22/first.xml | 131 + bench_horn_mcmc/s_mutants_23/config | 12 + bench_horn_mcmc/s_mutants_23/first.xml | 128 + bench_horn_mcmc/s_mutants_24/config | 12 + bench_horn_mcmc/s_mutants_24/first.xml | 112 + bench_horn_mcmc/s_seeds_01/config | 12 + bench_horn_mcmc/s_seeds_01/first.xml | 82 + bench_horn_mcmc/s_seeds_02/config | 12 + bench_horn_mcmc/s_seeds_02/first.xml | 159 + bench_horn_mcmc/s_seeds_03/config | 12 + bench_horn_mcmc/s_seeds_03/first.xml | 90 + bench_horn_mcmc/s_seeds_04/config | 12 + bench_horn_mcmc/s_seeds_04/first.xml | 84 + bench_horn_mcmc/s_seeds_05/config | 12 + bench_horn_mcmc/s_seeds_05/first.xml | 90 + bench_horn_mcmc/s_seeds_06/config | 12 + bench_horn_mcmc/s_seeds_06/first.xml | 117 + bench_horn_mcmc/s_seeds_09/config | 12 + bench_horn_mcmc/s_seeds_09/first.xml | 91 + bench_horn_mcmc/s_seeds_10/config | 12 + bench_horn_mcmc/s_seeds_10/first.xml | 59 + bench_horn_mcmc/s_triv_01/config | 12 + bench_horn_mcmc/s_triv_01/first.xml | 63 + bench_horn_mcmc/s_triv_03/config | 12 + bench_horn_mcmc/s_triv_03/first.xml | 63 + bench_horn_mcmc/s_triv_04/config | 12 + bench_horn_mcmc/s_triv_04/first.xml | 63 + bench_horn_mcmc/s_triv_09/config | 12 + bench_horn_mcmc/s_triv_09/first.xml | 71 + bench_horn_mcmc/s_triv_11/config | 12 + bench_horn_mcmc/s_triv_11/first.xml | 74 + bench_horn_mcmc/s_triv_12/config | 12 + bench_horn_mcmc/s_triv_12/first.xml | 114 + bench_horn_mcmc/s_triv_13/config | 12 + bench_horn_mcmc/s_triv_13/first.xml | 69 + bench_horn_mcmc/s_triv_15/config | 12 + bench_horn_mcmc/s_triv_15/first.xml | 69 + bench_horn_mcmc/sn_1024/config | 12 + bench_horn_mcmc/sn_1024/first.xml | 6197 ++ bench_horn_mcmc/sn_2048/config | 12 + bench_horn_mcmc/sn_2048/first.xml | 12341 ++++ bench_horn_mcmc/sn_4096/config | 12 + bench_horn_mcmc/sn_4096/first.xml | 24635 ++++++++ bench_horn_mcmc/sn_8192/config | 12 + bench_horn_mcmc/sn_8192/first.xml | 49205 ++++++++++++++++ bench_horn_mcmc/w1/config | 12 + bench_horn_mcmc/w1/first.xml | 80 + tools/deep_bench/scripts/mcmcify/mcmcify.py | 2 +- 127 files changed, 99522 insertions(+), 1 deletion(-) create mode 100644 bench_horn_mcmc/abdu_04/config create mode 100644 bench_horn_mcmc/abdu_04/first.xml create mode 100644 bench_horn_mcmc/bhmr2007_true-unreach-call/config create mode 100644 bench_horn_mcmc/bhmr2007_true-unreach-call/first.xml create mode 100644 bench_horn_mcmc/bouncy_three_counters_merged/config create mode 100644 bench_horn_mcmc/bouncy_three_counters_merged/first.xml create mode 100644 bench_horn_mcmc/const_mod_1/config create mode 100644 bench_horn_mcmc/const_mod_1/first.xml create mode 100644 bench_horn_mcmc/const_mod_2/config create mode 100644 bench_horn_mcmc/const_mod_2/first.xml create mode 100644 bench_horn_mcmc/count_by_2_modif_true-unreach-call_true-termination/config create mode 100644 bench_horn_mcmc/count_by_2_modif_true-unreach-call_true-termination/first.xml create mode 100644 bench_horn_mcmc/dillig04/config create mode 100644 bench_horn_mcmc/dillig04/first.xml create mode 100644 bench_horn_mcmc/dillig13/config create mode 100644 bench_horn_mcmc/dillig13/first.xml create mode 100644 bench_horn_mcmc/dillig14/config create mode 100644 bench_horn_mcmc/dillig14/first.xml create mode 100644 bench_horn_mcmc/dillig15/config create mode 100644 bench_horn_mcmc/dillig15/first.xml create mode 100644 bench_horn_mcmc/dillig16/config create mode 100644 bench_horn_mcmc/dillig16/first.xml create mode 100644 bench_horn_mcmc/dillig37/config create mode 100644 bench_horn_mcmc/dillig37/first.xml create mode 100644 bench_horn_mcmc/dillig41/config create mode 100644 bench_horn_mcmc/dillig41/first.xml create mode 100644 bench_horn_mcmc/dillig43/config create mode 100644 bench_horn_mcmc/dillig43/first.xml create mode 100644 bench_horn_mcmc/ex14/config create mode 100644 bench_horn_mcmc/ex14/first.xml create mode 100644 bench_horn_mcmc/ex7/config create mode 100644 bench_horn_mcmc/ex7/first.xml create mode 100644 bench_horn_mcmc/fig9/config create mode 100644 bench_horn_mcmc/fig9/first.xml create mode 100644 bench_horn_mcmc/hhk2008_true-unreach-call/config create mode 100644 bench_horn_mcmc/hhk2008_true-unreach-call/first.xml create mode 100644 bench_horn_mcmc/menlo_park_term_orig/config create mode 100644 bench_horn_mcmc/menlo_park_term_orig/first.xml create mode 100644 bench_horn_mcmc/menlo_park_term_simpl_1/config create mode 100644 bench_horn_mcmc/menlo_park_term_simpl_1/first.xml create mode 100644 bench_horn_mcmc/menlo_park_term_simpl_2/config create mode 100644 bench_horn_mcmc/menlo_park_term_simpl_2/first.xml create mode 100644 bench_horn_mcmc/nonlin_count_by_k_true-unreach-call_true-termination/config create mode 100644 bench_horn_mcmc/nonlin_count_by_k_true-unreach-call_true-termination/first.xml create mode 100644 bench_horn_mcmc/s_mutants_01/config create mode 100644 bench_horn_mcmc/s_mutants_01/first.xml create mode 100644 bench_horn_mcmc/s_mutants_02/config create mode 100644 bench_horn_mcmc/s_mutants_02/first.xml create mode 100644 bench_horn_mcmc/s_mutants_03/config create mode 100644 bench_horn_mcmc/s_mutants_03/first.xml create mode 100644 bench_horn_mcmc/s_mutants_04/config create mode 100644 bench_horn_mcmc/s_mutants_04/first.xml create mode 100644 bench_horn_mcmc/s_mutants_05/config create mode 100644 bench_horn_mcmc/s_mutants_05/first.xml create mode 100644 bench_horn_mcmc/s_mutants_06/config create mode 100644 bench_horn_mcmc/s_mutants_06/first.xml create mode 100644 bench_horn_mcmc/s_mutants_07/config create mode 100644 bench_horn_mcmc/s_mutants_07/first.xml create mode 100644 bench_horn_mcmc/s_mutants_09/config create mode 100644 bench_horn_mcmc/s_mutants_09/first.xml create mode 100644 bench_horn_mcmc/s_mutants_10/config create mode 100644 bench_horn_mcmc/s_mutants_10/first.xml create mode 100644 bench_horn_mcmc/s_mutants_11/config create mode 100644 bench_horn_mcmc/s_mutants_11/first.xml create mode 100644 bench_horn_mcmc/s_mutants_12/config create mode 100644 bench_horn_mcmc/s_mutants_12/first.xml create mode 100644 bench_horn_mcmc/s_mutants_13/config create mode 100644 bench_horn_mcmc/s_mutants_13/first.xml create mode 100644 bench_horn_mcmc/s_mutants_14/config create mode 100644 bench_horn_mcmc/s_mutants_14/first.xml create mode 100644 bench_horn_mcmc/s_mutants_15/config create mode 100644 bench_horn_mcmc/s_mutants_15/first.xml create mode 100644 bench_horn_mcmc/s_mutants_16/config create mode 100644 bench_horn_mcmc/s_mutants_16/first.xml create mode 100644 bench_horn_mcmc/s_mutants_17/config create mode 100644 bench_horn_mcmc/s_mutants_17/first.xml create mode 100644 bench_horn_mcmc/s_mutants_21/config create mode 100644 bench_horn_mcmc/s_mutants_21/first.xml create mode 100644 bench_horn_mcmc/s_mutants_22/config create mode 100644 bench_horn_mcmc/s_mutants_22/first.xml create mode 100644 bench_horn_mcmc/s_mutants_23/config create mode 100644 bench_horn_mcmc/s_mutants_23/first.xml create mode 100644 bench_horn_mcmc/s_mutants_24/config create mode 100644 bench_horn_mcmc/s_mutants_24/first.xml create mode 100644 bench_horn_mcmc/s_seeds_01/config create mode 100644 bench_horn_mcmc/s_seeds_01/first.xml create mode 100644 bench_horn_mcmc/s_seeds_02/config create mode 100644 bench_horn_mcmc/s_seeds_02/first.xml create mode 100644 bench_horn_mcmc/s_seeds_03/config create mode 100644 bench_horn_mcmc/s_seeds_03/first.xml create mode 100644 bench_horn_mcmc/s_seeds_04/config create mode 100644 bench_horn_mcmc/s_seeds_04/first.xml create mode 100644 bench_horn_mcmc/s_seeds_05/config create mode 100644 bench_horn_mcmc/s_seeds_05/first.xml create mode 100644 bench_horn_mcmc/s_seeds_06/config create mode 100644 bench_horn_mcmc/s_seeds_06/first.xml create mode 100644 bench_horn_mcmc/s_seeds_09/config create mode 100644 bench_horn_mcmc/s_seeds_09/first.xml create mode 100644 bench_horn_mcmc/s_seeds_10/config create mode 100644 bench_horn_mcmc/s_seeds_10/first.xml create mode 100644 bench_horn_mcmc/s_triv_01/config create mode 100644 bench_horn_mcmc/s_triv_01/first.xml create mode 100644 bench_horn_mcmc/s_triv_03/config create mode 100644 bench_horn_mcmc/s_triv_03/first.xml create mode 100644 bench_horn_mcmc/s_triv_04/config create mode 100644 bench_horn_mcmc/s_triv_04/first.xml create mode 100644 bench_horn_mcmc/s_triv_09/config create mode 100644 bench_horn_mcmc/s_triv_09/first.xml create mode 100644 bench_horn_mcmc/s_triv_11/config create mode 100644 bench_horn_mcmc/s_triv_11/first.xml create mode 100644 bench_horn_mcmc/s_triv_12/config create mode 100644 bench_horn_mcmc/s_triv_12/first.xml create mode 100644 bench_horn_mcmc/s_triv_13/config create mode 100644 bench_horn_mcmc/s_triv_13/first.xml create mode 100644 bench_horn_mcmc/s_triv_15/config create mode 100644 bench_horn_mcmc/s_triv_15/first.xml create mode 100644 bench_horn_mcmc/sn_1024/config create mode 100644 bench_horn_mcmc/sn_1024/first.xml create mode 100644 bench_horn_mcmc/sn_2048/config create mode 100644 bench_horn_mcmc/sn_2048/first.xml create mode 100644 bench_horn_mcmc/sn_4096/config create mode 100644 bench_horn_mcmc/sn_4096/first.xml create mode 100644 bench_horn_mcmc/sn_8192/config create mode 100644 bench_horn_mcmc/sn_8192/first.xml create mode 100644 bench_horn_mcmc/w1/config create mode 100644 bench_horn_mcmc/w1/first.xml diff --git a/bench_horn_mcmc/abdu_04/config b/bench_horn_mcmc/abdu_04/config new file mode 100644 index 000000000..7f5bac4ff --- /dev/null +++ b/bench_horn_mcmc/abdu_04/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +7 +-3 -2 -1 0 1 2 3 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/abdu_04/first.xml b/bench_horn_mcmc/abdu_04/first.xml new file mode 100644 index 000000000..c8d94a456 --- /dev/null +++ b/bench_horn_mcmc/abdu_04/first.xml @@ -0,0 +1,140 @@ + + + + + 4 + inv + + + + x + x1 + a + a1 + b + b1 + len + + + + x + a + b + len + + + + + x + 0 + + + + + a + 0 + + + + + b + 0 + + + + + len + 0 + + + + + + + x + a + b + len + + + x1 + a1 + b1 + len + + + + + x1 + + x + 1 + + + + + + + + a1 + + a + 1 + + + + + + b1 + + b + 2 + + + + + + + + a1 + + a + 2 + + + + + + b1 + + b + 1 + + + + + + + + + + x + a + b + len + + + + + a + b + + + 3 + x + + + + + + diff --git a/bench_horn_mcmc/bhmr2007_true-unreach-call/config b/bench_horn_mcmc/bhmr2007_true-unreach-call/config new file mode 100644 index 000000000..7f5bac4ff --- /dev/null +++ b/bench_horn_mcmc/bhmr2007_true-unreach-call/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +7 +-3 -2 -1 0 1 2 3 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/bhmr2007_true-unreach-call/first.xml b/bench_horn_mcmc/bhmr2007_true-unreach-call/first.xml new file mode 100644 index 000000000..85f90a019 --- /dev/null +++ b/bench_horn_mcmc/bhmr2007_true-unreach-call/first.xml @@ -0,0 +1,152 @@ + + + + + 4 + inv + + + + x + x1 + a + a1 + b + b1 + len + + + + x + a + b + len + + + + + x + 0 + + + + + a + 0 + + + + + b + 0 + + + + + len + 0 + + + + + + + x + a + b + len + + + x1 + a1 + b1 + len + + + + + x + len + + + + + x1 + + x + 1 + + + + + + + + a1 + + a + 1 + + + + + + b1 + + b + 2 + + + + + + + + a1 + + a + 2 + + + + + + b1 + + b + 1 + + + + + + + + + + x + a + b + len + + + + + x + len + + + + + a + b + + + 3 + len + + + + + + diff --git a/bench_horn_mcmc/bouncy_three_counters_merged/config b/bench_horn_mcmc/bouncy_three_counters_merged/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/bouncy_three_counters_merged/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/bouncy_three_counters_merged/first.xml b/bench_horn_mcmc/bouncy_three_counters_merged/first.xml new file mode 100644 index 000000000..94de71e00 --- /dev/null +++ b/bench_horn_mcmc/bouncy_three_counters_merged/first.xml @@ -0,0 +1,194 @@ + + + + + 4 + itp1 + + + + count1 + count2 + count3 + count4 + count5 + count6 + z1 + z2 + + + + count1 + count3 + count5 + z1 + + + + + count1 + count3 + + + + + count1 + count5 + + + + + count3 + 0 + + + + + z1 + count1 + + + + + + + count1 + count3 + count5 + z1 + + + count2 + count4 + count6 + z2 + + + + + + + count2 + + count1 + 1 + + + + + + count4 + count3 + + + + + count6 + count5 + + + + + z2 + + z1 + 1 + + + + + + + + count4 + + count3 + 1 + + + + + + count2 + count1 + + + + + count6 + count5 + + + + + z2 + + z1 + 1 + + + + + + + + count5 + + count5 + 1 + + + + + + count2 + count1 + + + + + count4 + count3 + + + + + z2 + + z1 + 1 + + + + + + + + + + count1 + count3 + count5 + z1 + + + + + count1 + count3 + + + + + count1 + count5 + + + + z1 + count1 + + + + + diff --git a/bench_horn_mcmc/const_mod_1/config b/bench_horn_mcmc/const_mod_1/config new file mode 100644 index 000000000..d6adcb786 --- /dev/null +++ b/bench_horn_mcmc/const_mod_1/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +5 +-2 -1 0 1 2 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/const_mod_1/first.xml b/bench_horn_mcmc/const_mod_1/first.xml new file mode 100644 index 000000000..bb087298b --- /dev/null +++ b/bench_horn_mcmc/const_mod_1/first.xml @@ -0,0 +1,60 @@ + + + + + 1 + inv + + + + i + i1 + + + + i + + + + + i + 0 + + + + + + + i + + + i1 + + + + + i1 + + i + 2 + + + + + + + + i + + + + + i + 2 + + 0 + + + + + diff --git a/bench_horn_mcmc/const_mod_2/config b/bench_horn_mcmc/const_mod_2/config new file mode 100644 index 000000000..2faa508aa --- /dev/null +++ b/bench_horn_mcmc/const_mod_2/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +5 +-23468 -1 0 1 23468 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/const_mod_2/first.xml b/bench_horn_mcmc/const_mod_2/first.xml new file mode 100644 index 000000000..198bde68b --- /dev/null +++ b/bench_horn_mcmc/const_mod_2/first.xml @@ -0,0 +1,60 @@ + + + + + 1 + inv + + + + i + i1 + + + + i + + + + + i + 0 + + + + + + + i + + + i1 + + + + + i1 + + i + 23468 + + + + + + + + i + + + + + i + 23468 + + 0 + + + + + diff --git a/bench_horn_mcmc/count_by_2_modif_true-unreach-call_true-termination/config b/bench_horn_mcmc/count_by_2_modif_true-unreach-call_true-termination/config new file mode 100644 index 000000000..cadd0dfc2 --- /dev/null +++ b/bench_horn_mcmc/count_by_2_modif_true-unreach-call_true-termination/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +7 +-256 -2 -1 0 1 2 256 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/count_by_2_modif_true-unreach-call_true-termination/first.xml b/bench_horn_mcmc/count_by_2_modif_true-unreach-call_true-termination/first.xml new file mode 100644 index 000000000..961e8e9bb --- /dev/null +++ b/bench_horn_mcmc/count_by_2_modif_true-unreach-call_true-termination/first.xml @@ -0,0 +1,101 @@ + + + + + 3 + itp + + + + i + i_ + c + c_ + LRG + + + + i + c + LRG + + + + + i + 0 + + + + + c + 0 + + + + + LRG + 256 + + + + + + + i_ + c_ + LRG + + + i + c + LRG + + + + + i_ + LRG + + + + + i + + i_ + 2 + + + + + + c + + c_ + 1 + + + + + + + + i + c + LRG + + + + + i + LRG + + + + i + LRG + + + + + diff --git a/bench_horn_mcmc/dillig04/config b/bench_horn_mcmc/dillig04/config new file mode 100644 index 000000000..d766f41ce --- /dev/null +++ b/bench_horn_mcmc/dillig04/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +5 +-50 -1 0 1 50 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/dillig04/first.xml b/bench_horn_mcmc/dillig04/first.xml new file mode 100644 index 000000000..748ffed9e --- /dev/null +++ b/bench_horn_mcmc/dillig04/first.xml @@ -0,0 +1,82 @@ + + + + + 2 + inv + + + + x0 + x1 + y0 + y1 + + + + x1 + y1 + + + + + x1 + -50 + + + + + + + x0 + y0 + + + x1 + y1 + + + + + x0 + 0 + + + + + x1 + + x0 + y0 + + + + + + y1 + + y0 + 1 + + + + + + + + x1 + y1 + + + + x1 + 0 + + + y1 + 0 + + + + + diff --git a/bench_horn_mcmc/dillig13/config b/bench_horn_mcmc/dillig13/config new file mode 100644 index 000000000..c4c7864e8 --- /dev/null +++ b/bench_horn_mcmc/dillig13/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +7 +-4 -2 -1 0 1 2 4 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/dillig13/first.xml b/bench_horn_mcmc/dillig13/first.xml new file mode 100644 index 000000000..88bf102bb --- /dev/null +++ b/bench_horn_mcmc/dillig13/first.xml @@ -0,0 +1,124 @@ + + + + + 3 + inv + + + + x0 + x1 + y0 + y1 + flag + + + + x1 + y1 + flag + + + + + x1 + 2 + + + + + y1 + 0 + + + + + + + x0 + y0 + flag + + + x1 + y1 + flag + + + + + + + flag + 0 + + + + + x1 + + x0 + 4 + + + + + + y1 + y0 + + + + + + flag + 0 + + + + x1 + + x0 + 2 + + + + + + y1 + + y0 + 1 + + + + + + + + + + x1 + y1 + flag + + + + y1 + 0 + + + x1 + + 2 + + 2 + y1 + + + + + + + diff --git a/bench_horn_mcmc/dillig14/config b/bench_horn_mcmc/dillig14/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/dillig14/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/dillig14/first.xml b/bench_horn_mcmc/dillig14/first.xml new file mode 100644 index 000000000..3b4fd6d9f --- /dev/null +++ b/bench_horn_mcmc/dillig14/first.xml @@ -0,0 +1,121 @@ + + + + + 3 + inv + + + + z0 + z1 + x0 + x1 + y0 + y1 + + + + x1 + y1 + z1 + + + + + z1 + 0 + + + + + x1 + 0 + + + + + y1 + 1 + + + + + + + x0 + y0 + z0 + + + x1 + y1 + z0 + + + + + y0 + z0 + + + + + y1 + + y0 + 1 + + + + + + + x1 + + x0 + 1 + + + + + + x1 + + x0 + 1 + + + + + + + + + x1 + y1 + z1 + + + + + y1 + z1 + + + + + x1 + + z1 + + + + x1 + z1 + + + + + + diff --git a/bench_horn_mcmc/dillig15/config b/bench_horn_mcmc/dillig15/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/dillig15/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/dillig15/first.xml b/bench_horn_mcmc/dillig15/first.xml new file mode 100644 index 000000000..c5407afe2 --- /dev/null +++ b/bench_horn_mcmc/dillig15/first.xml @@ -0,0 +1,107 @@ + + + + + 3 + itp + + + + j + k + n + j1 + k1 + n1 + + + + j + k + n + + + + + n + 1 + + + + + k + n + + + + + j + 0 + + + + + + + j + k + n + + + j1 + k1 + n + + + + + j + + n + 1 + + + + + + j1 + + j + 1 + + + + + + k1 + + k + 1 + + + + + + + + j + k + n + + + + + j + n + + + + + k + -1 + + + + + + diff --git a/bench_horn_mcmc/dillig16/config b/bench_horn_mcmc/dillig16/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/dillig16/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/dillig16/first.xml b/bench_horn_mcmc/dillig16/first.xml new file mode 100644 index 000000000..3b8e83085 --- /dev/null +++ b/bench_horn_mcmc/dillig16/first.xml @@ -0,0 +1,106 @@ + + + + + 4 + inv + + + + z0 + z1 + x0 + x1 + y0 + y1 + w0 + w1 + + + + x1 + y1 + z1 + w1 + + + + + z1 + x1 + + + + + y1 + w1 + + + + + + + x0 + y0 + z0 + w0 + + + x1 + y1 + z0 + w0 + + + + x0 + 0 + + + + x1 + + x0 + 1 + + + + + + y1 + + y0 + 1 + + + + + + + + x1 + y1 + z1 + w1 + + + + + x1 + 0 + + + + + z1 + w1 + + + + y1 + 0 + + + + + diff --git a/bench_horn_mcmc/dillig37/config b/bench_horn_mcmc/dillig37/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/dillig37/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/dillig37/first.xml b/bench_horn_mcmc/dillig37/first.xml new file mode 100644 index 000000000..992c7e061 --- /dev/null +++ b/bench_horn_mcmc/dillig37/first.xml @@ -0,0 +1,112 @@ + + + + + 3 + inv + + + + x0 + x1 + y0 + y1 + n + + + + x1 + y1 + n + + + + + x1 + 0 + + + + + y1 + 0 + + + + + n + 0 + + + + + + + x0 + y0 + n + + + x1 + y1 + n + + + + + x0 + n + + + + + + y1 + x0 + + + + + y1 + y0 + + + + + + x1 + + x0 + 1 + + + + + + + + x1 + y1 + n + + + + + x1 + n + + + + + 0 + y1 + + + y1 + n + + + + + + diff --git a/bench_horn_mcmc/dillig41/config b/bench_horn_mcmc/dillig41/config new file mode 100644 index 000000000..d6adcb786 --- /dev/null +++ b/bench_horn_mcmc/dillig41/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +5 +-2 -1 0 1 2 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/dillig41/first.xml b/bench_horn_mcmc/dillig41/first.xml new file mode 100644 index 000000000..542753861 --- /dev/null +++ b/bench_horn_mcmc/dillig41/first.xml @@ -0,0 +1,108 @@ + + + + + 3 + inv + + + + x0 + x1 + y0 + y1 + n + + + + x1 + y1 + n + + + + + x1 + 0 + + + + + y1 + 0 + + + + + n + 0 + + + + + + + x0 + y0 + n + + + x1 + y1 + n + + + + + x0 + n + + + + + x1 + + x0 + 1 + + + + + + y1 + + y0 + x1 + + + + + + + + x1 + y1 + n + + + + + x1 + n + + + + + 1 + x1 + y1 + + + 2 + n + + + + + + diff --git a/bench_horn_mcmc/dillig43/config b/bench_horn_mcmc/dillig43/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/dillig43/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/dillig43/first.xml b/bench_horn_mcmc/dillig43/first.xml new file mode 100644 index 000000000..18692ab6d --- /dev/null +++ b/bench_horn_mcmc/dillig43/first.xml @@ -0,0 +1,78 @@ + + + + + 3 + inv + + + + x0 + x1 + y0 + y1 + n + + + + x1 + y1 + n + + + + + n + y1 + + + + x1 + y1 + + + + + + x0 + y0 + n + + + x0 + y1 + n + + + + + x0 + 0 + + + + + y1 + + y0 + x0 + + + + + + + + x1 + y1 + n + + + + y1 + n + + + + + diff --git a/bench_horn_mcmc/ex14/config b/bench_horn_mcmc/ex14/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/ex14/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/ex14/first.xml b/bench_horn_mcmc/ex14/first.xml new file mode 100644 index 000000000..a2f3d350a --- /dev/null +++ b/bench_horn_mcmc/ex14/first.xml @@ -0,0 +1,108 @@ + + + + + 3 + itp + + + + x + x1 + y + y1 + n + + + + x + y + n + + + + + x + 1 + + + + + + + x + y + n + + + x1 + y1 + n + + + + + x + n + + + + + y1 + + n + x + + + + + + x1 + + x + 1 + + + + + + + + x + y + n + + + + + x + n + + + + + y1 + + n + x + + + + + + + y1 + 0 + + + + + y1 + n + + + + + + + diff --git a/bench_horn_mcmc/ex7/config b/bench_horn_mcmc/ex7/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/ex7/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/ex7/first.xml b/bench_horn_mcmc/ex7/first.xml new file mode 100644 index 000000000..d294db72f --- /dev/null +++ b/bench_horn_mcmc/ex7/first.xml @@ -0,0 +1,120 @@ + + + + + 4 + itp + + + + x + x1 + y + y1 + i + i1 + len + + + + x + y + i + len + + + + + x + 0 + + + + + y + 0 + + + + + y + x + + + + + len + x + + + + + i + 0 + + + + + + + x + y + i + len + + + x1 + y + i1 + len + + + + + i + y + + + + + i1 + + i + 1 + + + + + + + + x + y + i + len + + + + + i + y + + + + + + i + 0 + + + + + i + len + + + + + + + diff --git a/bench_horn_mcmc/fig9/config b/bench_horn_mcmc/fig9/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/fig9/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/fig9/first.xml b/bench_horn_mcmc/fig9/first.xml new file mode 100644 index 000000000..8ab759ded --- /dev/null +++ b/bench_horn_mcmc/fig9/first.xml @@ -0,0 +1,77 @@ + + + + + 2 + itp + + + + x + x1 + y + y1 + + + + x + y + + + + + x + 0 + + + + + y + 0 + + + + + + + x + y + + + x + y1 + + + + + y + 0 + + + + + y1 + + y + x + + + + + + + + x + y + + + + + y + 0 + + + + + + diff --git a/bench_horn_mcmc/hhk2008_true-unreach-call/config b/bench_horn_mcmc/hhk2008_true-unreach-call/config new file mode 100644 index 000000000..3a13bfd83 --- /dev/null +++ b/bench_horn_mcmc/hhk2008_true-unreach-call/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +5 +-10000 -1 0 1 10000 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/hhk2008_true-unreach-call/first.xml b/bench_horn_mcmc/hhk2008_true-unreach-call/first.xml new file mode 100644 index 000000000..fbc69c2b7 --- /dev/null +++ b/bench_horn_mcmc/hhk2008_true-unreach-call/first.xml @@ -0,0 +1,123 @@ + + + + + 4 + inv + + + + x0 + x1 + y0 + y1 + res0 + res1 + cnt0 + cnt1 + + + + x1 + y1 + res1 + cnt1 + + + + + x1 + 10000 + + + + + 0 + y1 + + + + + y1 + 10000 + + + + + res1 + x1 + + + + + cnt1 + y1 + + + + + + + x0 + y0 + res0 + cnt0 + + + x0 + y0 + res1 + cnt1 + + + + + cnt0 + 0 + + + + + cnt1 + + cnt0 + 1 + + + + + + res1 + + res0 + 1 + + + + + + + + x1 + y1 + res1 + cnt1 + + + + + cnt1 + 0 + + + + res1 + + x1 + y1 + + + + + + diff --git a/bench_horn_mcmc/menlo_park_term_orig/config b/bench_horn_mcmc/menlo_park_term_orig/config new file mode 100644 index 000000000..aeb1643fc --- /dev/null +++ b/bench_horn_mcmc/menlo_park_term_orig/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +5 +-100 -1 0 1 100 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/menlo_park_term_orig/first.xml b/bench_horn_mcmc/menlo_park_term_orig/first.xml new file mode 100644 index 000000000..f7a4194ee --- /dev/null +++ b/bench_horn_mcmc/menlo_park_term_orig/first.xml @@ -0,0 +1,133 @@ + + + + + 4 + inv + + + + x + x1 + y + y1 + z + z1 + i + i1 + + + + x + y + z + i + + + + + y + 100 + + + + + z + 1 + + + + + x + 0 + + + + + i + x + + + + + + + x + y + z + i + + + x1 + y1 + z1 + i1 + + + + + x + 0 + + + + + x1 + + x + y + + + + + + y1 + + y + z + + + + + + z1 + + z + + + + + + i1 + + i + 1 + + + + + + + + x + y + z + i + + + + + x + 0 + + + + + i + 0 + + + + + + diff --git a/bench_horn_mcmc/menlo_park_term_simpl_1/config b/bench_horn_mcmc/menlo_park_term_simpl_1/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/menlo_park_term_simpl_1/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/menlo_park_term_simpl_1/first.xml b/bench_horn_mcmc/menlo_park_term_simpl_1/first.xml new file mode 100644 index 000000000..e143e4ef5 --- /dev/null +++ b/bench_horn_mcmc/menlo_park_term_simpl_1/first.xml @@ -0,0 +1,130 @@ + + + + + 4 + inv + + + + x + x1 + y + y1 + z + z1 + i + i1 + + + + x + y + z + i + + + + + y + 0 + + + + + z + 1 + + + + + x + 0 + + + + + i + x + + + + + + + x + y + z + i + + + x1 + y1 + z1 + i1 + + + + + x + 0 + + + + + x1 + + x + y + + + + + + y1 + y + + + + + z1 + + z + + + + + + i1 + + i + 1 + + + + + + + + x + y + z + i + + + + + x + 0 + + + + + i + 0 + + + + + + diff --git a/bench_horn_mcmc/menlo_park_term_simpl_2/config b/bench_horn_mcmc/menlo_park_term_simpl_2/config new file mode 100644 index 000000000..d6adcb786 --- /dev/null +++ b/bench_horn_mcmc/menlo_park_term_simpl_2/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +5 +-2 -1 0 1 2 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/menlo_park_term_simpl_2/first.xml b/bench_horn_mcmc/menlo_park_term_simpl_2/first.xml new file mode 100644 index 000000000..3df8dd785 --- /dev/null +++ b/bench_horn_mcmc/menlo_park_term_simpl_2/first.xml @@ -0,0 +1,142 @@ + + + + + 4 + inv + + + + x + x1 + y + y1 + z + z1 + i + i1 + + + + x + y + z + i + + + + + y + 1 + + + + + + y + 2 + + 0 + + + + + z + 1 + + + + + x + 0 + + + + + i + x + + + + + + + x + y + z + i + + + x1 + y1 + z1 + i1 + + + + + x + 0 + + + + + x1 + + x + y + + + + + + y1 + + y + z + + + + + + z1 + + z + + + + + + i1 + + i + 1 + + + + + + + + x + y + z + i + + + + + x + 0 + + + + + i + 0 + + + + + + diff --git a/bench_horn_mcmc/nonlin_count_by_k_true-unreach-call_true-termination/config b/bench_horn_mcmc/nonlin_count_by_k_true-unreach-call_true-termination/config new file mode 100644 index 000000000..c851ea2e0 --- /dev/null +++ b/bench_horn_mcmc/nonlin_count_by_k_true-unreach-call_true-termination/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +5 +-10 -1 0 1 10 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/nonlin_count_by_k_true-unreach-call_true-termination/first.xml b/bench_horn_mcmc/nonlin_count_by_k_true-unreach-call_true-termination/first.xml new file mode 100644 index 000000000..8fd051849 --- /dev/null +++ b/bench_horn_mcmc/nonlin_count_by_k_true-unreach-call_true-termination/first.xml @@ -0,0 +1,104 @@ + + + + + 3 + itp + + + + i + i_ + k + LRG + + + + i + k + LRG + + + + + 0 + k + + + + + k + 10 + + + + + LRG + 0 + + + + + i + 0 + + + + + + + i_ + k + LRG + + + i + k + LRG + + + + + i_ + + LRG + k + + + + + + i + + i_ + k + + + + + + + + i + k + LRG + + + + i + + LRG + k + + + + i + + LRG + k + + + + + + diff --git a/bench_horn_mcmc/s_mutants_01/config b/bench_horn_mcmc/s_mutants_01/config new file mode 100644 index 000000000..9e1e5f219 --- /dev/null +++ b/bench_horn_mcmc/s_mutants_01/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +9 +-112 -32 -25 -1 0 1 25 32 112 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/s_mutants_01/first.xml b/bench_horn_mcmc/s_mutants_01/first.xml new file mode 100644 index 000000000..d166e335d --- /dev/null +++ b/bench_horn_mcmc/s_mutants_01/first.xml @@ -0,0 +1,78 @@ + + + + + 2 + inv + + + + x + x1 + i + i1 + + + + x + i + + + + + x + 32 + + + + + i + 25 + + + + + + + x + i + + + x1 + i1 + + + + + i1 + + i + 112 + + + + + + x1 + + x + i1 + + + + + + + + x + i + + + + x + 0 + + + + + diff --git a/bench_horn_mcmc/s_mutants_02/config b/bench_horn_mcmc/s_mutants_02/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/s_mutants_02/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/s_mutants_02/first.xml b/bench_horn_mcmc/s_mutants_02/first.xml new file mode 100644 index 000000000..e00a7b456 --- /dev/null +++ b/bench_horn_mcmc/s_mutants_02/first.xml @@ -0,0 +1,122 @@ + + + + + 4 + itp + + + + x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + + + + x1 + x3 + x5 + x7 + + + + + x1 + 0 + + + + + x3 + 0 + + + + + x5 + 0 + + + + + x7 + 0 + + + + + + + x1 + x3 + x5 + x7 + + + x2 + x4 + x6 + x8 + + + + + x2 + + x1 + 1 + + + + + + x4 + + x3 + x2 + + + + + + x6 + + x5 + x4 + + + + + + x8 + + x7 + x6 + + + + + + + + x1 + x3 + x5 + x7 + + + + x7 + 0 + + + + + diff --git a/bench_horn_mcmc/s_mutants_03/config b/bench_horn_mcmc/s_mutants_03/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/s_mutants_03/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/s_mutants_03/first.xml b/bench_horn_mcmc/s_mutants_03/first.xml new file mode 100644 index 000000000..407294ef1 --- /dev/null +++ b/bench_horn_mcmc/s_mutants_03/first.xml @@ -0,0 +1,94 @@ + + + + + 3 + itp + + + + x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + + + + x1 + x3 + x5 + + + + + x1 + 0 + + + + + x3 + 0 + + + + + x5 + 0 + + + + + + + x1 + x3 + x5 + + + x2 + x4 + x6 + + + + + x2 + + x1 + 1 + + + + + + x4 + + x3 + 1 + + + + + + + + x1 + x3 + x5 + + + + x5 + 0 + + + + + diff --git a/bench_horn_mcmc/s_mutants_04/config b/bench_horn_mcmc/s_mutants_04/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/s_mutants_04/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/s_mutants_04/first.xml b/bench_horn_mcmc/s_mutants_04/first.xml new file mode 100644 index 000000000..a2737b1bb --- /dev/null +++ b/bench_horn_mcmc/s_mutants_04/first.xml @@ -0,0 +1,90 @@ + + + + + 2 + itp + + + + x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + + + + x1 + x3 + + + + + x1 + 0 + + + + + x3 + 0 + + + + + + + x1 + x3 + + + x2 + x4 + + + + + x2 + + x1 + 1 + + + + + + x4 + + x3 + 1 + + + + + + + + x1 + x3 + + + + + x1 + 0 + + + + x3 + 0 + + + + + diff --git a/bench_horn_mcmc/s_mutants_05/config b/bench_horn_mcmc/s_mutants_05/config new file mode 100644 index 000000000..26b53fd9c --- /dev/null +++ b/bench_horn_mcmc/s_mutants_05/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +9 +-2000 -1000 -2 -1 0 1 2 1000 2000 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/s_mutants_05/first.xml b/bench_horn_mcmc/s_mutants_05/first.xml new file mode 100644 index 000000000..02b15b410 --- /dev/null +++ b/bench_horn_mcmc/s_mutants_05/first.xml @@ -0,0 +1,90 @@ + + + + + 2 + itp + + + + x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + + + + x1 + x3 + + + + + x1 + 0 + + + + + x3 + x1 + + + + + + + x1 + x3 + + + x2 + x4 + + + + + x2 + + x1 + 1 + + + + + + x4 + + x3 + 2 + + + + + + + + x1 + x3 + + + + + x1 + 1000 + + + + x3 + 2000 + + + + + diff --git a/bench_horn_mcmc/s_mutants_06/config b/bench_horn_mcmc/s_mutants_06/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/s_mutants_06/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/s_mutants_06/first.xml b/bench_horn_mcmc/s_mutants_06/first.xml new file mode 100644 index 000000000..0bd25c46b --- /dev/null +++ b/bench_horn_mcmc/s_mutants_06/first.xml @@ -0,0 +1,99 @@ + + + + + 3 + inv + + + + x + x1 + y + y1 + i + i1 + + + + x + y + i + + + + + x + 0 + + + + + y + 0 + + + + + i + 0 + + + + + + + x + y + i + + + x1 + y1 + i1 + + + + + i1 + + i + 1 + + + + + + x1 + + x + i1 + + + + + + y1 + + y + i1 + + + + + + + + x + y + i + + + + x + y + + + + + diff --git a/bench_horn_mcmc/s_mutants_07/config b/bench_horn_mcmc/s_mutants_07/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/s_mutants_07/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/s_mutants_07/first.xml b/bench_horn_mcmc/s_mutants_07/first.xml new file mode 100644 index 000000000..3c6d34f72 --- /dev/null +++ b/bench_horn_mcmc/s_mutants_07/first.xml @@ -0,0 +1,128 @@ + + + + + 4 + inv + + + + x + x1 + y + y1 + i + i1 + j + j1 + nondet1 + nondet2 + + + + x + y + i + j + + + + + x + 0 + + + + + y + 0 + + + + + i + 0 + + + + + j + 0 + + + + + + + x + y + i + j + + + x1 + y1 + i1 + j1 + + + + + i1 + + i + nondet1 + + + + + + j1 + + j + nondet2 + + + + + + x1 + + x + nondet1 + + + + + + y1 + + y + nondet2 + + + + + + + + x + y + i + j + + + + + i + j + + + + x + y + + + + + diff --git a/bench_horn_mcmc/s_mutants_09/config b/bench_horn_mcmc/s_mutants_09/config new file mode 100644 index 000000000..77f9398ee --- /dev/null +++ b/bench_horn_mcmc/s_mutants_09/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +5 +-3 -1 0 1 3 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/s_mutants_09/first.xml b/bench_horn_mcmc/s_mutants_09/first.xml new file mode 100644 index 000000000..3c3934b67 --- /dev/null +++ b/bench_horn_mcmc/s_mutants_09/first.xml @@ -0,0 +1,79 @@ + + + + + 2 + inv + + + + x1 + x2 + x3 + x4 + + + + x1 + x3 + + + + + x1 + 1 + + + + + + + x1 + x3 + + + x2 + x4 + + + + + x2 + + x1 + x1 + + + + + + x4 + x1 + + + + + + + x1 + x3 + + + + x1 + + + 3 + x3 + + x3 + + + + x1 + 1 + + + + + diff --git a/bench_horn_mcmc/s_mutants_10/config b/bench_horn_mcmc/s_mutants_10/config new file mode 100644 index 000000000..5b2b4e618 --- /dev/null +++ b/bench_horn_mcmc/s_mutants_10/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +7 +-878 -602 -1 0 1 602 878 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/s_mutants_10/first.xml b/bench_horn_mcmc/s_mutants_10/first.xml new file mode 100644 index 000000000..d362e69ed --- /dev/null +++ b/bench_horn_mcmc/s_mutants_10/first.xml @@ -0,0 +1,76 @@ + + + + + 2 + inv + + + + x1 + x2 + x3 + x4 + + + + x1 + x3 + + + + + + x1 + 878 + + + x3 + 602 + + + + + + + + x1 + x3 + + + x2 + x4 + + + + + x3 + x1 + + + + + x4 + x2 + + + + + + + x1 + x3 + + + + x1 + 0 + + + x3 + 0 + + + + + diff --git a/bench_horn_mcmc/s_mutants_11/config b/bench_horn_mcmc/s_mutants_11/config new file mode 100644 index 000000000..4e805f7a2 --- /dev/null +++ b/bench_horn_mcmc/s_mutants_11/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +7 +-1000 -500 -1 0 1 500 1000 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/s_mutants_11/first.xml b/bench_horn_mcmc/s_mutants_11/first.xml new file mode 100644 index 000000000..721863513 --- /dev/null +++ b/bench_horn_mcmc/s_mutants_11/first.xml @@ -0,0 +1,107 @@ + + + + + 3 + itp + + + + x1 + x2 + x3 + x4 + x5 + x6 + + + + x1 + x3 + x5 + + + + + x1 + 1 + + + + + x3 + 1 + + + + + x5 + 1 + + + + + + + x1 + x3 + x5 + + + x2 + x4 + x6 + + + + + x2 + + x1 + 1 + + + + + + x4 + + x1 + x1 + + + + + + x6 + + x1 + x1 + x1 + + + + + + + + x1 + x3 + x5 + + + + + x5 + x3 + + 500 + + + x1 + 1000 + + + + + diff --git a/bench_horn_mcmc/s_mutants_12/config b/bench_horn_mcmc/s_mutants_12/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/s_mutants_12/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/s_mutants_12/first.xml b/bench_horn_mcmc/s_mutants_12/first.xml new file mode 100644 index 000000000..622bfd7ed --- /dev/null +++ b/bench_horn_mcmc/s_mutants_12/first.xml @@ -0,0 +1,186 @@ + + + + + 6 + inv + + + + x + x1 + i + i1 + j + j1 + k + k1 + l + l1 + m + m1 + + + + x + i + j + k + l + m + + + + + x + 1 + + + + + i + 1 + + + + + j + 1 + + + + + k + 1 + + + + + l + 1 + + + + + m + 1 + + + + + + + x + i + j + k + l + m + + + x1 + i1 + j1 + k1 + l1 + m1 + + + + + x1 + + x + i + j + k + l + m + + + + + + i1 + + x + i + j + k + l + m + + + + + + j1 + + x + i + j + k + l + m + + + + + + k1 + + x + i + j + k + l + m + + + + + + l1 + + x + i + j + k + l + m + + + + + + m1 + + x + i + j + k + l + m + + + + + + + + x + i + j + k + l + m + + + + x + 1 + + + + + diff --git a/bench_horn_mcmc/s_mutants_13/config b/bench_horn_mcmc/s_mutants_13/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/s_mutants_13/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/s_mutants_13/first.xml b/bench_horn_mcmc/s_mutants_13/first.xml new file mode 100644 index 000000000..ec11e1c57 --- /dev/null +++ b/bench_horn_mcmc/s_mutants_13/first.xml @@ -0,0 +1,194 @@ + + + + + 6 + inv + + + + x + x1 + i + i1 + j + j1 + k + k1 + l + l1 + m + m1 + + + + x + i + j + k + l + m + + + + + x + 1 + + + + + i + 1 + + + + + j + 1 + + + + + k + 1 + + + + + l + 1 + + + + + m + 1 + + + + + + + x + i + j + k + l + m + + + x1 + i1 + j1 + k1 + l1 + m1 + + + + + x1 + + x + i + j + k + l + m + + + + + + i1 + + x + i + j + k + l + m + + + + + + j1 + + x + i + j + k + l + m + + + + + + k1 + + x + i + j + k + l + m + + + + + + l1 + + x + i + j + k + l + m + + + + + + m1 + + x + i + j + k + l + m + + + + + + + + x + i + j + k + l + m + + + + + x + i + j + + + k + l + m + + + + + + diff --git a/bench_horn_mcmc/s_mutants_14/config b/bench_horn_mcmc/s_mutants_14/config new file mode 100644 index 000000000..af4ec01b1 --- /dev/null +++ b/bench_horn_mcmc/s_mutants_14/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +5 +-5 -1 0 1 5 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/s_mutants_14/first.xml b/bench_horn_mcmc/s_mutants_14/first.xml new file mode 100644 index 000000000..215c06808 --- /dev/null +++ b/bench_horn_mcmc/s_mutants_14/first.xml @@ -0,0 +1,195 @@ + + + + + 6 + inv + + + + x + x1 + i + i1 + j + j1 + k + k1 + l + l1 + m + m1 + + + + x + i + j + k + l + m + + + + + x + 1 + + + + + i + 1 + + + + + j + 1 + + + + + k + 1 + + + + + l + 1 + + + + + m + 1 + + + + + + + x + i + j + k + l + m + + + x1 + i1 + j1 + k1 + l1 + m1 + + + + + x1 + + x + i + j + k + l + m + + + + + + i1 + + x + i + j + k + l + m + + + + + + j1 + + x + i + j + k + l + m + + + + + + k1 + + x + i + j + k + l + m + + + + + + l1 + + x + i + j + k + l + m + + + + + + m1 + + x + i + j + k + l + m + + + + + + + + x + i + j + k + l + m + + + + + x + i + j + k + l + + + 5 + m + + + + + + diff --git a/bench_horn_mcmc/s_mutants_15/config b/bench_horn_mcmc/s_mutants_15/config new file mode 100644 index 000000000..c4c7864e8 --- /dev/null +++ b/bench_horn_mcmc/s_mutants_15/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +7 +-4 -2 -1 0 1 2 4 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/s_mutants_15/first.xml b/bench_horn_mcmc/s_mutants_15/first.xml new file mode 100644 index 000000000..90e0765f1 --- /dev/null +++ b/bench_horn_mcmc/s_mutants_15/first.xml @@ -0,0 +1,195 @@ + + + + + 6 + inv + + + + x + x1 + i + i1 + j + j1 + k + k1 + l + l1 + m + m1 + + + + x + i + j + k + l + m + + + + + x + 1 + + + + + i + 1 + + + + + j + 1 + + + + + k + 1 + + + + + l + 1 + + + + + m + 1 + + + + + + + x + i + j + k + l + m + + + x1 + i1 + j1 + k1 + l1 + m1 + + + + + x1 + + x + i + j + k + l + m + + + + + + i1 + + x + i + j + k + l + m + + + + + + j1 + + x + i + j + k + l + m + + + + + + k1 + + x + i + j + k + l + m + + + + + + l1 + + x + i + j + k + l + m + + + + + + m1 + + x + i + j + k + l + m + + + + + + + + x + i + j + k + l + m + + + + + 2 + + x + i + + + + 4 + m + + + + + + diff --git a/bench_horn_mcmc/s_mutants_16/config b/bench_horn_mcmc/s_mutants_16/config new file mode 100644 index 000000000..19a8c4c7e --- /dev/null +++ b/bench_horn_mcmc/s_mutants_16/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +11 +-212 -200 -5 -3 -1 0 1 3 5 200 212 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/s_mutants_16/first.xml b/bench_horn_mcmc/s_mutants_16/first.xml new file mode 100644 index 000000000..388ae63a7 --- /dev/null +++ b/bench_horn_mcmc/s_mutants_16/first.xml @@ -0,0 +1,110 @@ + + + + + 3 + itp + + + + x1 + x2 + x3 + x4 + y + + + + x1 + x3 + y + + + + + x1 + 0 + + + + + y + 0 + + + + + y + 5 + + + + + x3 + + 3 + y + + + + + + + + x1 + x3 + y + + + x2 + x4 + y + + + + + x1 + 200 + + + + + x2 + + x1 + 1 + + + + + + x4 + + x3 + 1 + + + + + + + + x1 + x3 + y + + + + + x3 + 3 + + + x3 + 212 + + + + + + diff --git a/bench_horn_mcmc/s_mutants_17/config b/bench_horn_mcmc/s_mutants_17/config new file mode 100644 index 000000000..6e8e5a887 --- /dev/null +++ b/bench_horn_mcmc/s_mutants_17/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +11 +-1012 -1000 -5 -3 -1 0 1 3 5 1000 1012 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/s_mutants_17/first.xml b/bench_horn_mcmc/s_mutants_17/first.xml new file mode 100644 index 000000000..2c2f869ea --- /dev/null +++ b/bench_horn_mcmc/s_mutants_17/first.xml @@ -0,0 +1,110 @@ + + + + + 3 + itp + + + + x1 + x2 + x3 + x4 + y + + + + x1 + x3 + y + + + + + x1 + 0 + + + + + y + 0 + + + + + y + 5 + + + + + x3 + + 3 + y + + + + + + + + x1 + x3 + y + + + x2 + x4 + y + + + + + x1 + 1000 + + + + + x2 + + x1 + 1 + + + + + + x4 + + x3 + 1 + + + + + + + + x1 + x3 + y + + + + + x3 + 3 + + + x3 + 1012 + + + + + + diff --git a/bench_horn_mcmc/s_mutants_21/config b/bench_horn_mcmc/s_mutants_21/config new file mode 100644 index 000000000..c9ae1bb24 --- /dev/null +++ b/bench_horn_mcmc/s_mutants_21/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +7 +-78 -10 -1 0 1 10 78 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/s_mutants_21/first.xml b/bench_horn_mcmc/s_mutants_21/first.xml new file mode 100644 index 000000000..a064246f7 --- /dev/null +++ b/bench_horn_mcmc/s_mutants_21/first.xml @@ -0,0 +1,143 @@ + + + + + 3 + itp + + + + x0 + x1 + x2 + x3 + x4 + x5 + x6 + x9 + + + + x1 + x3 + x5 + + + + + x1 + 0 + + + + + x3 + 0 + + + + + x5 + + 10 + x9 + + + + + + x9 + 0 + + + + + x9 + 10 + + + + + + + x1 + x3 + x5 + + + x2 + x4 + x6 + + + + + + + x2 + + x1 + 1 + + + + + + x4 + + x3 + 1 + + + + + + + + x2 + + x1 + 1 + + + + + + x4 + + x3 + 1 + + + + + + + + x6 + + x5 + x2 + x4 + + + + + + + + x1 + x3 + x5 + + + + + x5 + 78 + + + + + + diff --git a/bench_horn_mcmc/s_mutants_22/config b/bench_horn_mcmc/s_mutants_22/config new file mode 100644 index 000000000..827fa1a2f --- /dev/null +++ b/bench_horn_mcmc/s_mutants_22/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +7 +-77 -2 -1 0 1 2 77 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/s_mutants_22/first.xml b/bench_horn_mcmc/s_mutants_22/first.xml new file mode 100644 index 000000000..5d40ad30b --- /dev/null +++ b/bench_horn_mcmc/s_mutants_22/first.xml @@ -0,0 +1,131 @@ + + + + + 3 + itp + + + + x0 + x1 + x2 + x3 + x4 + x5 + x6 + x9 + + + + x1 + x3 + x5 + + + + + x1 + 0 + + + + + x3 + 0 + + + + + x5 + + 2 + x9 + + + + + + + + x1 + x3 + x5 + + + x2 + x4 + x6 + + + + + + + x2 + + x1 + 1 + + + + + + x4 + + x3 + 1 + + + + + + + + x2 + + x1 + 1 + + + + + + x4 + + x3 + 1 + + + + + + + + x6 + + x5 + x2 + x4 + + + + + + + + x1 + x3 + x5 + + + + + x5 + 77 + + + + + + diff --git a/bench_horn_mcmc/s_mutants_23/config b/bench_horn_mcmc/s_mutants_23/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/s_mutants_23/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/s_mutants_23/first.xml b/bench_horn_mcmc/s_mutants_23/first.xml new file mode 100644 index 000000000..8143a8d58 --- /dev/null +++ b/bench_horn_mcmc/s_mutants_23/first.xml @@ -0,0 +1,128 @@ + + + + + 3 + itp + + + + x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + + + + x1 + x3 + x5 + + + + + x1 + 0 + + + + + x3 + 0 + + + + + x5 + 0 + + + + + + + x1 + x3 + x5 + + + x2 + x4 + x6 + + + + + + + x2 + + x1 + 1 + + + + + + x4 + + x3 + 1 + + + + + + + + x2 + + x1 + 1 + + + + + + x4 + + x3 + 1 + + + + + + + + x6 + + x5 + x2 + x4 + + + + + + + + x1 + x3 + x5 + + + + x5 + 0 + + + + + diff --git a/bench_horn_mcmc/s_mutants_24/config b/bench_horn_mcmc/s_mutants_24/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/s_mutants_24/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/s_mutants_24/first.xml b/bench_horn_mcmc/s_mutants_24/first.xml new file mode 100644 index 000000000..20b628e05 --- /dev/null +++ b/bench_horn_mcmc/s_mutants_24/first.xml @@ -0,0 +1,112 @@ + + + + + 4 + itp + + + + i1 + i1p + i2 + i2p + N1 + N2 + + + + i1 + i2 + N1 + N2 + + + + + N1 + N2 + + + + + i1 + N1 + + + + + i2 + 0 + + + + + + + i1 + i2 + N1 + N2 + + + i1p + i2p + N1 + N2 + + + + + i1 + 0 + + + + + i2 + N1 + + + + + i1p + + i1 + 1 + + + + + + i2p + + i2 + 1 + + + + + + + + i1 + i2 + N1 + N2 + + + + + i2 + N1 + + + i1 + 0 + + + + + + diff --git a/bench_horn_mcmc/s_seeds_01/config b/bench_horn_mcmc/s_seeds_01/config new file mode 100644 index 000000000..0be7a655d --- /dev/null +++ b/bench_horn_mcmc/s_seeds_01/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +7 +-66 -55 -1 0 1 55 66 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/s_seeds_01/first.xml b/bench_horn_mcmc/s_seeds_01/first.xml new file mode 100644 index 000000000..05d9749f5 --- /dev/null +++ b/bench_horn_mcmc/s_seeds_01/first.xml @@ -0,0 +1,82 @@ + + + + + 2 + itp + + + + m + m1 + i + i1 + b + + + + m + i + + + + + m + 0 + + + + + i + 0 + + + + + + + m + i + + + m1 + i1 + + + + + i1 + + i + 55 + + + + + + m1 + + m + 66 + + + + + + + + m + i + + + + + m + i + + 0 + + + + + diff --git a/bench_horn_mcmc/s_seeds_02/config b/bench_horn_mcmc/s_seeds_02/config new file mode 100644 index 000000000..d6adcb786 --- /dev/null +++ b/bench_horn_mcmc/s_seeds_02/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +5 +-2 -1 0 1 2 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/s_seeds_02/first.xml b/bench_horn_mcmc/s_seeds_02/first.xml new file mode 100644 index 000000000..2ee4b0774 --- /dev/null +++ b/bench_horn_mcmc/s_seeds_02/first.xml @@ -0,0 +1,159 @@ + + + + + 5 + itp + + + + x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + + + + x1 + x2 + x3 + x4 + x5 + + + + + x1 + 2 + + + + + x2 + 2 + + + + + x3 + 2 + + + + + x4 + 2 + + + + + x5 + 2 + + + + + + + x1 + x3 + x5 + x7 + x9 + + + x2 + x4 + x6 + x8 + x0 + + + + + x2 + + x1 + 1 + + + + + + x4 + + x3 + 1 + + + + + + x6 + + x5 + 1 + + + + + + x8 + + x7 + 1 + + + + + + x0 + + x9 + 1 + + + + + + + + x1 + x3 + x5 + x7 + x9 + + + + + x1 + 0 + + + x3 + 0 + + + x5 + 0 + + + x7 + 0 + + + x9 + 0 + + + + + + diff --git a/bench_horn_mcmc/s_seeds_03/config b/bench_horn_mcmc/s_seeds_03/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/s_seeds_03/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/s_seeds_03/first.xml b/bench_horn_mcmc/s_seeds_03/first.xml new file mode 100644 index 000000000..c1074a7ae --- /dev/null +++ b/bench_horn_mcmc/s_seeds_03/first.xml @@ -0,0 +1,90 @@ + + + + + 2 + itp + + + + x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + + + + x1 + x3 + + + + + x1 + 0 + + + + + x3 + 0 + + + + + + + x1 + x3 + + + x2 + x4 + + + + + x2 + + x1 + 1 + + + + + + x4 + + x3 + 1 + + + + + + + + x1 + x3 + + + + + x1 + 0 + + + x3 + 0 + + + + + + diff --git a/bench_horn_mcmc/s_seeds_04/config b/bench_horn_mcmc/s_seeds_04/config new file mode 100644 index 000000000..65ea94857 --- /dev/null +++ b/bench_horn_mcmc/s_seeds_04/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +5 +-1000 -1 0 1 1000 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/s_seeds_04/first.xml b/bench_horn_mcmc/s_seeds_04/first.xml new file mode 100644 index 000000000..d144c09ea --- /dev/null +++ b/bench_horn_mcmc/s_seeds_04/first.xml @@ -0,0 +1,84 @@ + + + + + 2 + itp + + + + m + m1 + i + i1 + b + + + + m + i + + + + + m + 0 + + + + + i + 0 + + + + + + + m + i + + + m1 + i1 + + + + + i1 + + i + + + + + + m1 + + m + 1 + + + + + + + + m + i + + + + + m + 1000 + + + + i + 0 + + + + + diff --git a/bench_horn_mcmc/s_seeds_05/config b/bench_horn_mcmc/s_seeds_05/config new file mode 100644 index 000000000..65ea94857 --- /dev/null +++ b/bench_horn_mcmc/s_seeds_05/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +5 +-1000 -1 0 1 1000 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/s_seeds_05/first.xml b/bench_horn_mcmc/s_seeds_05/first.xml new file mode 100644 index 000000000..269fbb305 --- /dev/null +++ b/bench_horn_mcmc/s_seeds_05/first.xml @@ -0,0 +1,90 @@ + + + + + 2 + itp + + + + x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + + + + x1 + x3 + + + + + x1 + 0 + + + + + x3 + x1 + + + + + + + x1 + x3 + + + x2 + x4 + + + + + x2 + + x1 + 1 + + + + + + x4 + + x3 + 1 + + + + + + + + x1 + x3 + + + + + x1 + 1000 + + + + x3 + 1000 + + + + + diff --git a/bench_horn_mcmc/s_seeds_06/config b/bench_horn_mcmc/s_seeds_06/config new file mode 100644 index 000000000..6b16ce1f5 --- /dev/null +++ b/bench_horn_mcmc/s_seeds_06/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +7 +-8 -7 -1 0 1 7 8 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/s_seeds_06/first.xml b/bench_horn_mcmc/s_seeds_06/first.xml new file mode 100644 index 000000000..130e0f394 --- /dev/null +++ b/bench_horn_mcmc/s_seeds_06/first.xml @@ -0,0 +1,117 @@ + + + + + 3 + inv + + + + x + x1 + y + y1 + i + i1 + + + + x + y + i + + + + + x + 0 + + + + + y + 0 + + + + + i + 0 + + + + + + + x + y + i + + + x1 + y1 + i1 + + + + + i1 + + i + 1 + + + + + + x1 + + x + i1 + + + + + + y1 + + y + i1 + + + + + + + + x + y + i + + + + + 0 + + x + + y + + 8 + i + 7 + + + + + + + x + + y + + + + + + diff --git a/bench_horn_mcmc/s_seeds_09/config b/bench_horn_mcmc/s_seeds_09/config new file mode 100644 index 000000000..6ffdd1752 --- /dev/null +++ b/bench_horn_mcmc/s_seeds_09/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +9 +-81 -80 -2 -1 0 1 2 80 81 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/s_seeds_09/first.xml b/bench_horn_mcmc/s_seeds_09/first.xml new file mode 100644 index 000000000..f896d8b16 --- /dev/null +++ b/bench_horn_mcmc/s_seeds_09/first.xml @@ -0,0 +1,91 @@ + + + + + 2 + itp + + + + m + m1 + i + i1 + b + + + + m + i + + + + + m + 2 + + + + + i + 1 + + + + + + + m + i + + + m1 + i1 + + + + + m + i + + + + + m1 + + m + 1 + + + + + + i1 + + i + 1 + + + + + + + + m + i + + + + + i + 80 + + + + m + 81 + + + + + diff --git a/bench_horn_mcmc/s_seeds_10/config b/bench_horn_mcmc/s_seeds_10/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/s_seeds_10/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/s_seeds_10/first.xml b/bench_horn_mcmc/s_seeds_10/first.xml new file mode 100644 index 000000000..4f5e651c9 --- /dev/null +++ b/bench_horn_mcmc/s_seeds_10/first.xml @@ -0,0 +1,59 @@ + + + + + 1 + itp + + + + m + m1 + i + i1 + b + + + + i + + + + + i + 0 + + + + + + + i + + + i1 + + + + + i1 + + i + + + + + + + + i + + + + i + 0 + + + + + diff --git a/bench_horn_mcmc/s_triv_01/config b/bench_horn_mcmc/s_triv_01/config new file mode 100644 index 000000000..c7f0041c9 --- /dev/null +++ b/bench_horn_mcmc/s_triv_01/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +5 +-2452 -1 0 1 2452 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/s_triv_01/first.xml b/bench_horn_mcmc/s_triv_01/first.xml new file mode 100644 index 000000000..13b7c4d34 --- /dev/null +++ b/bench_horn_mcmc/s_triv_01/first.xml @@ -0,0 +1,63 @@ + + + + + 2 + inv + + + + x + x1 + y + y1 + + + + x + x + + + + + x + 2452 + + + + + + + x + y + + + x1 + y + + + + + x1 + + x + 1 + + + + + + + + y + y + + + + y + 2452 + + + + + diff --git a/bench_horn_mcmc/s_triv_03/config b/bench_horn_mcmc/s_triv_03/config new file mode 100644 index 000000000..c7f0041c9 --- /dev/null +++ b/bench_horn_mcmc/s_triv_03/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +5 +-2452 -1 0 1 2452 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/s_triv_03/first.xml b/bench_horn_mcmc/s_triv_03/first.xml new file mode 100644 index 000000000..5f5bc226d --- /dev/null +++ b/bench_horn_mcmc/s_triv_03/first.xml @@ -0,0 +1,63 @@ + + + + + 2 + inv + + + + x + x1 + y + y1 + + + + x + x + + + + + x + 2452 + + + + + + + x + y + + + x1 + x1 + + + + + x1 + + x + y + + + + + + + + x + y + + + + x + y + + + + + diff --git a/bench_horn_mcmc/s_triv_04/config b/bench_horn_mcmc/s_triv_04/config new file mode 100644 index 000000000..c7f0041c9 --- /dev/null +++ b/bench_horn_mcmc/s_triv_04/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +5 +-2452 -1 0 1 2452 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/s_triv_04/first.xml b/bench_horn_mcmc/s_triv_04/first.xml new file mode 100644 index 000000000..b94564056 --- /dev/null +++ b/bench_horn_mcmc/s_triv_04/first.xml @@ -0,0 +1,63 @@ + + + + + 2 + inv + + + + x + x1 + y + y1 + + + + x + x + + + + + x + 2452 + + + + + + + x + x + + + x1 + x1 + + + + + x1 + + x + 1 + + + + + + + + x + y + + + + x + y + + + + + diff --git a/bench_horn_mcmc/s_triv_09/config b/bench_horn_mcmc/s_triv_09/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/s_triv_09/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/s_triv_09/first.xml b/bench_horn_mcmc/s_triv_09/first.xml new file mode 100644 index 000000000..0924eadbe --- /dev/null +++ b/bench_horn_mcmc/s_triv_09/first.xml @@ -0,0 +1,71 @@ + + + + + 2 + inv + + + + x + x1 + y + y1 + + + + x + y + + + + + y + + x + + + + + + + + x + y + + + x1 + y1 + + + + + x1 + + x + + + + + + y1 + + y + + + + + + + + true + y + + + + y + + + + + diff --git a/bench_horn_mcmc/s_triv_11/config b/bench_horn_mcmc/s_triv_11/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/s_triv_11/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/s_triv_11/first.xml b/bench_horn_mcmc/s_triv_11/first.xml new file mode 100644 index 000000000..01b17aeee --- /dev/null +++ b/bench_horn_mcmc/s_triv_11/first.xml @@ -0,0 +1,74 @@ + + + + + 2 + inv + + + + x + x1 + y + y1 + + + + x + y + + + + + y + + x + + + + + + + + x + y + + + x1 + y1 + + + + + x1 + + y + + + + + + y1 + + x + + + + + + + + x + y + + + + x + + + y + + + + + diff --git a/bench_horn_mcmc/s_triv_12/config b/bench_horn_mcmc/s_triv_12/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/s_triv_12/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/s_triv_12/first.xml b/bench_horn_mcmc/s_triv_12/first.xml new file mode 100644 index 000000000..126fedaa5 --- /dev/null +++ b/bench_horn_mcmc/s_triv_12/first.xml @@ -0,0 +1,114 @@ + + + + + 4 + inv + + + + x + x1 + y + y1 + z + z1 + v + v1 + + + + x + y + z + v + + + + + x + + y + + + + + + z + + v + + + + + + + + x + y + z + v + + + x1 + y1 + z1 + v1 + + + + + x1 + + x + + + + + + y1 + + y + + + + + + z1 + + z + + + + + + v1 + + v + + + + + + + + x + y + z + v + + + + + y + z + + + + x + v + + + + + diff --git a/bench_horn_mcmc/s_triv_13/config b/bench_horn_mcmc/s_triv_13/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/s_triv_13/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/s_triv_13/first.xml b/bench_horn_mcmc/s_triv_13/first.xml new file mode 100644 index 000000000..979c59e1e --- /dev/null +++ b/bench_horn_mcmc/s_triv_13/first.xml @@ -0,0 +1,69 @@ + + + + + 2 + inv + + + + x + x1 + y + y1 + + + + x + y + + + + x + + + + x + + y + 0 + + + + + + + + x + y + + + x1 + y1 + + + + + y1 + + y + 1 + + + + + + + + x + y + + + + y + 0 + + + + + diff --git a/bench_horn_mcmc/s_triv_15/config b/bench_horn_mcmc/s_triv_15/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/s_triv_15/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/s_triv_15/first.xml b/bench_horn_mcmc/s_triv_15/first.xml new file mode 100644 index 000000000..a10123559 --- /dev/null +++ b/bench_horn_mcmc/s_triv_15/first.xml @@ -0,0 +1,69 @@ + + + + + 2 + inv + + + + x + x1 + y + y1 + + + + x + y + + + + + y + 0 + + + + + x + + y + 0 + + + + + + + + x + y + + + x + y1 + + + + + y1 + + y + 1 + + + + + + + + x + y + + + x + + + + diff --git a/bench_horn_mcmc/sn_1024/config b/bench_horn_mcmc/sn_1024/config new file mode 100644 index 000000000..1b06d1fb2 --- /dev/null +++ b/bench_horn_mcmc/sn_1024/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +2049 +-1024 -1023 -1022 -1021 -1020 -1019 -1018 -1017 -1016 -1015 -1014 -1013 -1012 -1011 -1010 -1009 -1008 -1007 -1006 -1005 -1004 -1003 -1002 -1001 -1000 -999 -998 -997 -996 -995 -994 -993 -992 -991 -990 -989 -988 -987 -986 -985 -984 -983 -982 -981 -980 -979 -978 -977 -976 -975 -974 -973 -972 -971 -970 -969 -968 -967 -966 -965 -964 -963 -962 -961 -960 -959 -958 -957 -956 -955 -954 -953 -952 -951 -950 -949 -948 -947 -946 -945 -944 -943 -942 -941 -940 -939 -938 -937 -936 -935 -934 -933 -932 -931 -930 -929 -928 -927 -926 -925 -924 -923 -922 -921 -920 -919 -918 -917 -916 -915 -914 -913 -912 -911 -910 -909 -908 -907 -906 -905 -904 -903 -902 -901 -900 -899 -898 -897 -896 -895 -894 -893 -892 -891 -890 -889 -888 -887 -886 -885 -884 -883 -882 -881 -880 -879 -878 -877 -876 -875 -874 -873 -872 -871 -870 -869 -868 -867 -866 -865 -864 -863 -862 -861 -860 -859 -858 -857 -856 -855 -854 -853 -852 -851 -850 -849 -848 -847 -846 -845 -844 -843 -842 -841 -840 -839 -838 -837 -836 -835 -834 -833 -832 -831 -830 -829 -828 -827 -826 -825 -824 -823 -822 -821 -820 -819 -818 -817 -816 -815 -814 -813 -812 -811 -810 -809 -808 -807 -806 -805 -804 -803 -802 -801 -800 -799 -798 -797 -796 -795 -794 -793 -792 -791 -790 -789 -788 -787 -786 -785 -784 -783 -782 -781 -780 -779 -778 -777 -776 -775 -774 -773 -772 -771 -770 -769 -768 -767 -766 -765 -764 -763 -762 -761 -760 -759 -758 -757 -756 -755 -754 -753 -752 -751 -750 -749 -748 -747 -746 -745 -744 -743 -742 -741 -740 -739 -738 -737 -736 -735 -734 -733 -732 -731 -730 -729 -728 -727 -726 -725 -724 -723 -722 -721 -720 -719 -718 -717 -716 -715 -714 -713 -712 -711 -710 -709 -708 -707 -706 -705 -704 -703 -702 -701 -700 -699 -698 -697 -696 -695 -694 -693 -692 -691 -690 -689 -688 -687 -686 -685 -684 -683 -682 -681 -680 -679 -678 -677 -676 -675 -674 -673 -672 -671 -670 -669 -668 -667 -666 -665 -664 -663 -662 -661 -660 -659 -658 -657 -656 -655 -654 -653 -652 -651 -650 -649 -648 -647 -646 -645 -644 -643 -642 -641 -640 -639 -638 -637 -636 -635 -634 -633 -632 -631 -630 -629 -628 -627 -626 -625 -624 -623 -622 -621 -620 -619 -618 -617 -616 -615 -614 -613 -612 -611 -610 -609 -608 -607 -606 -605 -604 -603 -602 -601 -600 -599 -598 -597 -596 -595 -594 -593 -592 -591 -590 -589 -588 -587 -586 -585 -584 -583 -582 -581 -580 -579 -578 -577 -576 -575 -574 -573 -572 -571 -570 -569 -568 -567 -566 -565 -564 -563 -562 -561 -560 -559 -558 -557 -556 -555 -554 -553 -552 -551 -550 -549 -548 -547 -546 -545 -544 -543 -542 -541 -540 -539 -538 -537 -536 -535 -534 -533 -532 -531 -530 -529 -528 -527 -526 -525 -524 -523 -522 -521 -520 -519 -518 -517 -516 -515 -514 -513 -512 -511 -510 -509 -508 -507 -506 -505 -504 -503 -502 -501 -500 -499 -498 -497 -496 -495 -494 -493 -492 -491 -490 -489 -488 -487 -486 -485 -484 -483 -482 -481 -480 -479 -478 -477 -476 -475 -474 -473 -472 -471 -470 -469 -468 -467 -466 -465 -464 -463 -462 -461 -460 -459 -458 -457 -456 -455 -454 -453 -452 -451 -450 -449 -448 -447 -446 -445 -444 -443 -442 -441 -440 -439 -438 -437 -436 -435 -434 -433 -432 -431 -430 -429 -428 -427 -426 -425 -424 -423 -422 -421 -420 -419 -418 -417 -416 -415 -414 -413 -412 -411 -410 -409 -408 -407 -406 -405 -404 -403 -402 -401 -400 -399 -398 -397 -396 -395 -394 -393 -392 -391 -390 -389 -388 -387 -386 -385 -384 -383 -382 -381 -380 -379 -378 -377 -376 -375 -374 -373 -372 -371 -370 -369 -368 -367 -366 -365 -364 -363 -362 -361 -360 -359 -358 -357 -356 -355 -354 -353 -352 -351 -350 -349 -348 -347 -346 -345 -344 -343 -342 -341 -340 -339 -338 -337 -336 -335 -334 -333 -332 -331 -330 -329 -328 -327 -326 -325 -324 -323 -322 -321 -320 -319 -318 -317 -316 -315 -314 -313 -312 -311 -310 -309 -308 -307 -306 -305 -304 -303 -302 -301 -300 -299 -298 -297 -296 -295 -294 -293 -292 -291 -290 -289 -288 -287 -286 -285 -284 -283 -282 -281 -280 -279 -278 -277 -276 -275 -274 -273 -272 -271 -270 -269 -268 -267 -266 -265 -264 -263 -262 -261 -260 -259 -258 -257 -256 -255 -254 -253 -252 -251 -250 -249 -248 -247 -246 -245 -244 -243 -242 -241 -240 -239 -238 -237 -236 -235 -234 -233 -232 -231 -230 -229 -228 -227 -226 -225 -224 -223 -222 -221 -220 -219 -218 -217 -216 -215 -214 -213 -212 -211 -210 -209 -208 -207 -206 -205 -204 -203 -202 -201 -200 -199 -198 -197 -196 -195 -194 -193 -192 -191 -190 -189 -188 -187 -186 -185 -184 -183 -182 -181 -180 -179 -178 -177 -176 -175 -174 -173 -172 -171 -170 -169 -168 -167 -166 -165 -164 -163 -162 -161 -160 -159 -158 -157 -156 -155 -154 -153 -152 -151 -150 -149 -148 -147 -146 -145 -144 -143 -142 -141 -140 -139 -138 -137 -136 -135 -134 -133 -132 -131 -130 -129 -128 -127 -126 -125 -124 -123 -122 -121 -120 -119 -118 -117 -116 -115 -114 -113 -112 -111 -110 -109 -108 -107 -106 -105 -104 -103 -102 -101 -100 -99 -98 -97 -96 -95 -94 -93 -92 -91 -90 -89 -88 -87 -86 -85 -84 -83 -82 -81 -80 -79 -78 -77 -76 -75 -74 -73 -72 -71 -70 -69 -68 -67 -66 -65 -64 -63 -62 -61 -60 -59 -58 -57 -56 -55 -54 -53 -52 -51 -50 -49 -48 -47 -46 -45 -44 -43 -42 -41 -40 -39 -38 -37 -36 -35 -34 -33 -32 -31 -30 -29 -28 -27 -26 -25 -24 -23 -22 -21 -20 -19 -18 -17 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/sn_1024/first.xml b/bench_horn_mcmc/sn_1024/first.xml new file mode 100644 index 000000000..ccf8e1e21 --- /dev/null +++ b/bench_horn_mcmc/sn_1024/first.xml @@ -0,0 +1,6197 @@ + + + + + 1 + itp + + + + x + x1 + + + + x + + + + + + x + 1 + + + + + x + 2 + + + + + x + 3 + + + + + x + 4 + + + + + x + 5 + + + + + x + 6 + + + + + x + 7 + + + + + x + 8 + + + + + x + 9 + + + + + x + 10 + + + + + x + 11 + + + + + x + 12 + + + + + x + 13 + + + + + x + 14 + + + + + x + 15 + + + + + x + 16 + + + + + x + 17 + + + + + x + 18 + + + + + x + 19 + + + + + x + 20 + + + + + x + 21 + + + + + x + 22 + + + + + x + 23 + + + + + x + 24 + + + + + x + 25 + + + + + x + 26 + + + + + x + 27 + + + + + x + 28 + + + + + x + 29 + + + + + x + 30 + + + + + x + 31 + + + + + x + 32 + + + + + x + 33 + + + + + x + 34 + + + + + x + 35 + + + + + x + 36 + + + + + x + 37 + + + + + x + 38 + + + + + x + 39 + + + + + x + 40 + + + + + x + 41 + + + + + x + 42 + + + + + x + 43 + + + + + x + 44 + + + + + x + 45 + + + + + x + 46 + + + + + x + 47 + + + + + x + 48 + + + + + x + 49 + + + + + x + 50 + + + + + x + 51 + + + + + x + 52 + + + + + x + 53 + + + + + x + 54 + + + + + x + 55 + + + + + x + 56 + + + + + x + 57 + + + + + x + 58 + + + + + x + 59 + + + + + x + 60 + + + + + x + 61 + + + + + x + 62 + + + + + x + 63 + + + + + x + 64 + + + + + x + 65 + + + + + x + 66 + + + + + x + 67 + + + + + x + 68 + + + + + x + 69 + + + + + x + 70 + + + + + x + 71 + + + + + x + 72 + + + + + x + 73 + + + + + x + 74 + + + + + x + 75 + + + + + x + 76 + + + + + x + 77 + + + + + x + 78 + + + + + x + 79 + + + + + x + 80 + + + + + x + 81 + + + + + x + 82 + + + + + x + 83 + + + + + x + 84 + + + + + x + 85 + + + + + x + 86 + + + + + x + 87 + + + + + x + 88 + + + + + x + 89 + + + + + x + 90 + + + + + x + 91 + + + + + x + 92 + + + + + x + 93 + + + + + x + 94 + + + + + x + 95 + + + + + x + 96 + + + + + x + 97 + + + + + x + 98 + + + + + x + 99 + + + + + x + 100 + + + + + x + 101 + + + + + x + 102 + + + + + x + 103 + + + + + x + 104 + + + + + x + 105 + + + + + x + 106 + + + + + x + 107 + + + + + x + 108 + + + + + x + 109 + + + + + x + 110 + + + + + x + 111 + + + + + x + 112 + + + + + x + 113 + + + + + x + 114 + + + + + x + 115 + + + + + x + 116 + + + + + x + 117 + + + + + x + 118 + + + + + x + 119 + + + + + x + 120 + + + + + x + 121 + + + + + x + 122 + + + + + x + 123 + + + + + x + 124 + + + + + x + 125 + + + + + x + 126 + + + + + x + 127 + + + + + x + 128 + + + + + x + 129 + + + + + x + 130 + + + + + x + 131 + + + + + x + 132 + + + + + x + 133 + + + + + x + 134 + + + + + x + 135 + + + + + x + 136 + + + + + x + 137 + + + + + x + 138 + + + + + x + 139 + + + + + x + 140 + + + + + x + 141 + + + + + x + 142 + + + + + x + 143 + + + + + x + 144 + + + + + x + 145 + + + + + x + 146 + + + + + x + 147 + + + + + x + 148 + + + + + x + 149 + + + + + x + 150 + + + + + x + 151 + + + + + x + 152 + + + + + x + 153 + + + + + x + 154 + + + + + x + 155 + + + + + x + 156 + + + + + x + 157 + + + + + x + 158 + + + + + x + 159 + + + + + x + 160 + + + + + x + 161 + + + + + x + 162 + + + + + x + 163 + + + + + x + 164 + + + + + x + 165 + + + + + x + 166 + + + + + x + 167 + + + + + x + 168 + + + + + x + 169 + + + + + x + 170 + + + + + x + 171 + + + + + x + 172 + + + + + x + 173 + + + + + x + 174 + + + + + x + 175 + + + + + x + 176 + + + + + x + 177 + + + + + x + 178 + + + + + x + 179 + + + + + x + 180 + + + + + x + 181 + + + + + x + 182 + + + + + x + 183 + + + + + x + 184 + + + + + x + 185 + + + + + x + 186 + + + + + x + 187 + + + + + x + 188 + + + + + x + 189 + + + + + x + 190 + + + + + x + 191 + + + + + x + 192 + + + + + x + 193 + + + + + x + 194 + + + + + x + 195 + + + + + x + 196 + + + + + x + 197 + + + + + x + 198 + + + + + x + 199 + + + + + x + 200 + + + + + x + 201 + + + + + x + 202 + + + + + x + 203 + + + + + x + 204 + + + + + x + 205 + + + + + x + 206 + + + + + x + 207 + + + + + x + 208 + + + + + x + 209 + + + + + x + 210 + + + + + x + 211 + + + + + x + 212 + + + + + x + 213 + + + + + x + 214 + + + + + x + 215 + + + + + x + 216 + + + + + x + 217 + + + + + x + 218 + + + + + x + 219 + + + + + x + 220 + + + + + x + 221 + + + + + x + 222 + + + + + x + 223 + + + + + x + 224 + + + + + x + 225 + + + + + x + 226 + + + + + x + 227 + + + + + x + 228 + + + + + x + 229 + + + + + x + 230 + + + + + x + 231 + + + + + x + 232 + + + + + x + 233 + + + + + x + 234 + + + + + x + 235 + + + + + x + 236 + + + + + x + 237 + + + + + x + 238 + + + + + x + 239 + + + + + x + 240 + + + + + x + 241 + + + + + x + 242 + + + + + x + 243 + + + + + x + 244 + + + + + x + 245 + + + + + x + 246 + + + + + x + 247 + + + + + x + 248 + + + + + x + 249 + + + + + x + 250 + + + + + x + 251 + + + + + x + 252 + + + + + x + 253 + + + + + x + 254 + + + + + x + 255 + + + + + x + 256 + + + + + x + 257 + + + + + x + 258 + + + + + x + 259 + + + + + x + 260 + + + + + x + 261 + + + + + x + 262 + + + + + x + 263 + + + + + x + 264 + + + + + x + 265 + + + + + x + 266 + + + + + x + 267 + + + + + x + 268 + + + + + x + 269 + + + + + x + 270 + + + + + x + 271 + + + + + x + 272 + + + + + x + 273 + + + + + x + 274 + + + + + x + 275 + + + + + x + 276 + + + + + x + 277 + + + + + x + 278 + + + + + x + 279 + + + + + x + 280 + + + + + x + 281 + + + + + x + 282 + + + + + x + 283 + + + + + x + 284 + + + + + x + 285 + + + + + x + 286 + + + + + x + 287 + + + + + x + 288 + + + + + x + 289 + + + + + x + 290 + + + + + x + 291 + + + + + x + 292 + + + + + x + 293 + + + + + x + 294 + + + + + x + 295 + + + + + x + 296 + + + + + x + 297 + + + + + x + 298 + + + + + x + 299 + + + + + x + 300 + + + + + x + 301 + + + + + x + 302 + + + + + x + 303 + + + + + x + 304 + + + + + x + 305 + + + + + x + 306 + + + + + x + 307 + + + + + x + 308 + + + + + x + 309 + + + + + x + 310 + + + + + x + 311 + + + + + x + 312 + + + + + x + 313 + + + + + x + 314 + + + + + x + 315 + + + + + x + 316 + + + + + x + 317 + + + + + x + 318 + + + + + x + 319 + + + + + x + 320 + + + + + x + 321 + + + + + x + 322 + + + + + x + 323 + + + + + x + 324 + + + + + x + 325 + + + + + x + 326 + + + + + x + 327 + + + + + x + 328 + + + + + x + 329 + + + + + x + 330 + + + + + x + 331 + + + + + x + 332 + + + + + x + 333 + + + + + x + 334 + + + + + x + 335 + + + + + x + 336 + + + + + x + 337 + + + + + x + 338 + + + + + x + 339 + + + + + x + 340 + + + + + x + 341 + + + + + x + 342 + + + + + x + 343 + + + + + x + 344 + + + + + x + 345 + + + + + x + 346 + + + + + x + 347 + + + + + x + 348 + + + + + x + 349 + + + + + x + 350 + + + + + x + 351 + + + + + x + 352 + + + + + x + 353 + + + + + x + 354 + + + + + x + 355 + + + + + x + 356 + + + + + x + 357 + + + + + x + 358 + + + + + x + 359 + + + + + x + 360 + + + + + x + 361 + + + + + x + 362 + + + + + x + 363 + + + + + x + 364 + + + + + x + 365 + + + + + x + 366 + + + + + x + 367 + + + + + x + 368 + + + + + x + 369 + + + + + x + 370 + + + + + x + 371 + + + + + x + 372 + + + + + x + 373 + + + + + x + 374 + + + + + x + 375 + + + + + x + 376 + + + + + x + 377 + + + + + x + 378 + + + + + x + 379 + + + + + x + 380 + + + + + x + 381 + + + + + x + 382 + + + + + x + 383 + + + + + x + 384 + + + + + x + 385 + + + + + x + 386 + + + + + x + 387 + + + + + x + 388 + + + + + x + 389 + + + + + x + 390 + + + + + x + 391 + + + + + x + 392 + + + + + x + 393 + + + + + x + 394 + + + + + x + 395 + + + + + x + 396 + + + + + x + 397 + + + + + x + 398 + + + + + x + 399 + + + + + x + 400 + + + + + x + 401 + + + + + x + 402 + + + + + x + 403 + + + + + x + 404 + + + + + x + 405 + + + + + x + 406 + + + + + x + 407 + + + + + x + 408 + + + + + x + 409 + + + + + x + 410 + + + + + x + 411 + + + + + x + 412 + + + + + x + 413 + + + + + x + 414 + + + + + x + 415 + + + + + x + 416 + + + + + x + 417 + + + + + x + 418 + + + + + x + 419 + + + + + x + 420 + + + + + x + 421 + + + + + x + 422 + + + + + x + 423 + + + + + x + 424 + + + + + x + 425 + + + + + x + 426 + + + + + x + 427 + + + + + x + 428 + + + + + x + 429 + + + + + x + 430 + + + + + x + 431 + + + + + x + 432 + + + + + x + 433 + + + + + x + 434 + + + + + x + 435 + + + + + x + 436 + + + + + x + 437 + + + + + x + 438 + + + + + x + 439 + + + + + x + 440 + + + + + x + 441 + + + + + x + 442 + + + + + x + 443 + + + + + x + 444 + + + + + x + 445 + + + + + x + 446 + + + + + x + 447 + + + + + x + 448 + + + + + x + 449 + + + + + x + 450 + + + + + x + 451 + + + + + x + 452 + + + + + x + 453 + + + + + x + 454 + + + + + x + 455 + + + + + x + 456 + + + + + x + 457 + + + + + x + 458 + + + + + x + 459 + + + + + x + 460 + + + + + x + 461 + + + + + x + 462 + + + + + x + 463 + + + + + x + 464 + + + + + x + 465 + + + + + x + 466 + + + + + x + 467 + + + + + x + 468 + + + + + x + 469 + + + + + x + 470 + + + + + x + 471 + + + + + x + 472 + + + + + x + 473 + + + + + x + 474 + + + + + x + 475 + + + + + x + 476 + + + + + x + 477 + + + + + x + 478 + + + + + x + 479 + + + + + x + 480 + + + + + x + 481 + + + + + x + 482 + + + + + x + 483 + + + + + x + 484 + + + + + x + 485 + + + + + x + 486 + + + + + x + 487 + + + + + x + 488 + + + + + x + 489 + + + + + x + 490 + + + + + x + 491 + + + + + x + 492 + + + + + x + 493 + + + + + x + 494 + + + + + x + 495 + + + + + x + 496 + + + + + x + 497 + + + + + x + 498 + + + + + x + 499 + + + + + x + 500 + + + + + x + 501 + + + + + x + 502 + + + + + x + 503 + + + + + x + 504 + + + + + x + 505 + + + + + x + 506 + + + + + x + 507 + + + + + x + 508 + + + + + x + 509 + + + + + x + 510 + + + + + x + 511 + + + + + x + 512 + + + + + x + 513 + + + + + x + 514 + + + + + x + 515 + + + + + x + 516 + + + + + x + 517 + + + + + x + 518 + + + + + x + 519 + + + + + x + 520 + + + + + x + 521 + + + + + x + 522 + + + + + x + 523 + + + + + x + 524 + + + + + x + 525 + + + + + x + 526 + + + + + x + 527 + + + + + x + 528 + + + + + x + 529 + + + + + x + 530 + + + + + x + 531 + + + + + x + 532 + + + + + x + 533 + + + + + x + 534 + + + + + x + 535 + + + + + x + 536 + + + + + x + 537 + + + + + x + 538 + + + + + x + 539 + + + + + x + 540 + + + + + x + 541 + + + + + x + 542 + + + + + x + 543 + + + + + x + 544 + + + + + x + 545 + + + + + x + 546 + + + + + x + 547 + + + + + x + 548 + + + + + x + 549 + + + + + x + 550 + + + + + x + 551 + + + + + x + 552 + + + + + x + 553 + + + + + x + 554 + + + + + x + 555 + + + + + x + 556 + + + + + x + 557 + + + + + x + 558 + + + + + x + 559 + + + + + x + 560 + + + + + x + 561 + + + + + x + 562 + + + + + x + 563 + + + + + x + 564 + + + + + x + 565 + + + + + x + 566 + + + + + x + 567 + + + + + x + 568 + + + + + x + 569 + + + + + x + 570 + + + + + x + 571 + + + + + x + 572 + + + + + x + 573 + + + + + x + 574 + + + + + x + 575 + + + + + x + 576 + + + + + x + 577 + + + + + x + 578 + + + + + x + 579 + + + + + x + 580 + + + + + x + 581 + + + + + x + 582 + + + + + x + 583 + + + + + x + 584 + + + + + x + 585 + + + + + x + 586 + + + + + x + 587 + + + + + x + 588 + + + + + x + 589 + + + + + x + 590 + + + + + x + 591 + + + + + x + 592 + + + + + x + 593 + + + + + x + 594 + + + + + x + 595 + + + + + x + 596 + + + + + x + 597 + + + + + x + 598 + + + + + x + 599 + + + + + x + 600 + + + + + x + 601 + + + + + x + 602 + + + + + x + 603 + + + + + x + 604 + + + + + x + 605 + + + + + x + 606 + + + + + x + 607 + + + + + x + 608 + + + + + x + 609 + + + + + x + 610 + + + + + x + 611 + + + + + x + 612 + + + + + x + 613 + + + + + x + 614 + + + + + x + 615 + + + + + x + 616 + + + + + x + 617 + + + + + x + 618 + + + + + x + 619 + + + + + x + 620 + + + + + x + 621 + + + + + x + 622 + + + + + x + 623 + + + + + x + 624 + + + + + x + 625 + + + + + x + 626 + + + + + x + 627 + + + + + x + 628 + + + + + x + 629 + + + + + x + 630 + + + + + x + 631 + + + + + x + 632 + + + + + x + 633 + + + + + x + 634 + + + + + x + 635 + + + + + x + 636 + + + + + x + 637 + + + + + x + 638 + + + + + x + 639 + + + + + x + 640 + + + + + x + 641 + + + + + x + 642 + + + + + x + 643 + + + + + x + 644 + + + + + x + 645 + + + + + x + 646 + + + + + x + 647 + + + + + x + 648 + + + + + x + 649 + + + + + x + 650 + + + + + x + 651 + + + + + x + 652 + + + + + x + 653 + + + + + x + 654 + + + + + x + 655 + + + + + x + 656 + + + + + x + 657 + + + + + x + 658 + + + + + x + 659 + + + + + x + 660 + + + + + x + 661 + + + + + x + 662 + + + + + x + 663 + + + + + x + 664 + + + + + x + 665 + + + + + x + 666 + + + + + x + 667 + + + + + x + 668 + + + + + x + 669 + + + + + x + 670 + + + + + x + 671 + + + + + x + 672 + + + + + x + 673 + + + + + x + 674 + + + + + x + 675 + + + + + x + 676 + + + + + x + 677 + + + + + x + 678 + + + + + x + 679 + + + + + x + 680 + + + + + x + 681 + + + + + x + 682 + + + + + x + 683 + + + + + x + 684 + + + + + x + 685 + + + + + x + 686 + + + + + x + 687 + + + + + x + 688 + + + + + x + 689 + + + + + x + 690 + + + + + x + 691 + + + + + x + 692 + + + + + x + 693 + + + + + x + 694 + + + + + x + 695 + + + + + x + 696 + + + + + x + 697 + + + + + x + 698 + + + + + x + 699 + + + + + x + 700 + + + + + x + 701 + + + + + x + 702 + + + + + x + 703 + + + + + x + 704 + + + + + x + 705 + + + + + x + 706 + + + + + x + 707 + + + + + x + 708 + + + + + x + 709 + + + + + x + 710 + + + + + x + 711 + + + + + x + 712 + + + + + x + 713 + + + + + x + 714 + + + + + x + 715 + + + + + x + 716 + + + + + x + 717 + + + + + x + 718 + + + + + x + 719 + + + + + x + 720 + + + + + x + 721 + + + + + x + 722 + + + + + x + 723 + + + + + x + 724 + + + + + x + 725 + + + + + x + 726 + + + + + x + 727 + + + + + x + 728 + + + + + x + 729 + + + + + x + 730 + + + + + x + 731 + + + + + x + 732 + + + + + x + 733 + + + + + x + 734 + + + + + x + 735 + + + + + x + 736 + + + + + x + 737 + + + + + x + 738 + + + + + x + 739 + + + + + x + 740 + + + + + x + 741 + + + + + x + 742 + + + + + x + 743 + + + + + x + 744 + + + + + x + 745 + + + + + x + 746 + + + + + x + 747 + + + + + x + 748 + + + + + x + 749 + + + + + x + 750 + + + + + x + 751 + + + + + x + 752 + + + + + x + 753 + + + + + x + 754 + + + + + x + 755 + + + + + x + 756 + + + + + x + 757 + + + + + x + 758 + + + + + x + 759 + + + + + x + 760 + + + + + x + 761 + + + + + x + 762 + + + + + x + 763 + + + + + x + 764 + + + + + x + 765 + + + + + x + 766 + + + + + x + 767 + + + + + x + 768 + + + + + x + 769 + + + + + x + 770 + + + + + x + 771 + + + + + x + 772 + + + + + x + 773 + + + + + x + 774 + + + + + x + 775 + + + + + x + 776 + + + + + x + 777 + + + + + x + 778 + + + + + x + 779 + + + + + x + 780 + + + + + x + 781 + + + + + x + 782 + + + + + x + 783 + + + + + x + 784 + + + + + x + 785 + + + + + x + 786 + + + + + x + 787 + + + + + x + 788 + + + + + x + 789 + + + + + x + 790 + + + + + x + 791 + + + + + x + 792 + + + + + x + 793 + + + + + x + 794 + + + + + x + 795 + + + + + x + 796 + + + + + x + 797 + + + + + x + 798 + + + + + x + 799 + + + + + x + 800 + + + + + x + 801 + + + + + x + 802 + + + + + x + 803 + + + + + x + 804 + + + + + x + 805 + + + + + x + 806 + + + + + x + 807 + + + + + x + 808 + + + + + x + 809 + + + + + x + 810 + + + + + x + 811 + + + + + x + 812 + + + + + x + 813 + + + + + x + 814 + + + + + x + 815 + + + + + x + 816 + + + + + x + 817 + + + + + x + 818 + + + + + x + 819 + + + + + x + 820 + + + + + x + 821 + + + + + x + 822 + + + + + x + 823 + + + + + x + 824 + + + + + x + 825 + + + + + x + 826 + + + + + x + 827 + + + + + x + 828 + + + + + x + 829 + + + + + x + 830 + + + + + x + 831 + + + + + x + 832 + + + + + x + 833 + + + + + x + 834 + + + + + x + 835 + + + + + x + 836 + + + + + x + 837 + + + + + x + 838 + + + + + x + 839 + + + + + x + 840 + + + + + x + 841 + + + + + x + 842 + + + + + x + 843 + + + + + x + 844 + + + + + x + 845 + + + + + x + 846 + + + + + x + 847 + + + + + x + 848 + + + + + x + 849 + + + + + x + 850 + + + + + x + 851 + + + + + x + 852 + + + + + x + 853 + + + + + x + 854 + + + + + x + 855 + + + + + x + 856 + + + + + x + 857 + + + + + x + 858 + + + + + x + 859 + + + + + x + 860 + + + + + x + 861 + + + + + x + 862 + + + + + x + 863 + + + + + x + 864 + + + + + x + 865 + + + + + x + 866 + + + + + x + 867 + + + + + x + 868 + + + + + x + 869 + + + + + x + 870 + + + + + x + 871 + + + + + x + 872 + + + + + x + 873 + + + + + x + 874 + + + + + x + 875 + + + + + x + 876 + + + + + x + 877 + + + + + x + 878 + + + + + x + 879 + + + + + x + 880 + + + + + x + 881 + + + + + x + 882 + + + + + x + 883 + + + + + x + 884 + + + + + x + 885 + + + + + x + 886 + + + + + x + 887 + + + + + x + 888 + + + + + x + 889 + + + + + x + 890 + + + + + x + 891 + + + + + x + 892 + + + + + x + 893 + + + + + x + 894 + + + + + x + 895 + + + + + x + 896 + + + + + x + 897 + + + + + x + 898 + + + + + x + 899 + + + + + x + 900 + + + + + x + 901 + + + + + x + 902 + + + + + x + 903 + + + + + x + 904 + + + + + x + 905 + + + + + x + 906 + + + + + x + 907 + + + + + x + 908 + + + + + x + 909 + + + + + x + 910 + + + + + x + 911 + + + + + x + 912 + + + + + x + 913 + + + + + x + 914 + + + + + x + 915 + + + + + x + 916 + + + + + x + 917 + + + + + x + 918 + + + + + x + 919 + + + + + x + 920 + + + + + x + 921 + + + + + x + 922 + + + + + x + 923 + + + + + x + 924 + + + + + x + 925 + + + + + x + 926 + + + + + x + 927 + + + + + x + 928 + + + + + x + 929 + + + + + x + 930 + + + + + x + 931 + + + + + x + 932 + + + + + x + 933 + + + + + x + 934 + + + + + x + 935 + + + + + x + 936 + + + + + x + 937 + + + + + x + 938 + + + + + x + 939 + + + + + x + 940 + + + + + x + 941 + + + + + x + 942 + + + + + x + 943 + + + + + x + 944 + + + + + x + 945 + + + + + x + 946 + + + + + x + 947 + + + + + x + 948 + + + + + x + 949 + + + + + x + 950 + + + + + x + 951 + + + + + x + 952 + + + + + x + 953 + + + + + x + 954 + + + + + x + 955 + + + + + x + 956 + + + + + x + 957 + + + + + x + 958 + + + + + x + 959 + + + + + x + 960 + + + + + x + 961 + + + + + x + 962 + + + + + x + 963 + + + + + x + 964 + + + + + x + 965 + + + + + x + 966 + + + + + x + 967 + + + + + x + 968 + + + + + x + 969 + + + + + x + 970 + + + + + x + 971 + + + + + x + 972 + + + + + x + 973 + + + + + x + 974 + + + + + x + 975 + + + + + x + 976 + + + + + x + 977 + + + + + x + 978 + + + + + x + 979 + + + + + x + 980 + + + + + x + 981 + + + + + x + 982 + + + + + x + 983 + + + + + x + 984 + + + + + x + 985 + + + + + x + 986 + + + + + x + 987 + + + + + x + 988 + + + + + x + 989 + + + + + x + 990 + + + + + x + 991 + + + + + x + 992 + + + + + x + 993 + + + + + x + 994 + + + + + x + 995 + + + + + x + 996 + + + + + x + 997 + + + + + x + 998 + + + + + x + 999 + + + + + x + 1000 + + + + + x + 1001 + + + + + x + 1002 + + + + + x + 1003 + + + + + x + 1004 + + + + + x + 1005 + + + + + x + 1006 + + + + + x + 1007 + + + + + x + 1008 + + + + + x + 1009 + + + + + x + 1010 + + + + + x + 1011 + + + + + x + 1012 + + + + + x + 1013 + + + + + x + 1014 + + + + + x + 1015 + + + + + x + 1016 + + + + + x + 1017 + + + + + x + 1018 + + + + + x + 1019 + + + + + x + 1020 + + + + + x + 1021 + + + + + x + 1022 + + + + + x + 1023 + + + + + x + 1024 + + + + + + + + x + + + x1 + + + + + x1 + + x + 1 + + + + + + + + x + + + + x + 0 + + + + + diff --git a/bench_horn_mcmc/sn_2048/config b/bench_horn_mcmc/sn_2048/config new file mode 100644 index 000000000..649f88219 --- /dev/null +++ b/bench_horn_mcmc/sn_2048/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +4097 +-2048 -2047 -2046 -2045 -2044 -2043 -2042 -2041 -2040 -2039 -2038 -2037 -2036 -2035 -2034 -2033 -2032 -2031 -2030 -2029 -2028 -2027 -2026 -2025 -2024 -2023 -2022 -2021 -2020 -2019 -2018 -2017 -2016 -2015 -2014 -2013 -2012 -2011 -2010 -2009 -2008 -2007 -2006 -2005 -2004 -2003 -2002 -2001 -2000 -1999 -1998 -1997 -1996 -1995 -1994 -1993 -1992 -1991 -1990 -1989 -1988 -1987 -1986 -1985 -1984 -1983 -1982 -1981 -1980 -1979 -1978 -1977 -1976 -1975 -1974 -1973 -1972 -1971 -1970 -1969 -1968 -1967 -1966 -1965 -1964 -1963 -1962 -1961 -1960 -1959 -1958 -1957 -1956 -1955 -1954 -1953 -1952 -1951 -1950 -1949 -1948 -1947 -1946 -1945 -1944 -1943 -1942 -1941 -1940 -1939 -1938 -1937 -1936 -1935 -1934 -1933 -1932 -1931 -1930 -1929 -1928 -1927 -1926 -1925 -1924 -1923 -1922 -1921 -1920 -1919 -1918 -1917 -1916 -1915 -1914 -1913 -1912 -1911 -1910 -1909 -1908 -1907 -1906 -1905 -1904 -1903 -1902 -1901 -1900 -1899 -1898 -1897 -1896 -1895 -1894 -1893 -1892 -1891 -1890 -1889 -1888 -1887 -1886 -1885 -1884 -1883 -1882 -1881 -1880 -1879 -1878 -1877 -1876 -1875 -1874 -1873 -1872 -1871 -1870 -1869 -1868 -1867 -1866 -1865 -1864 -1863 -1862 -1861 -1860 -1859 -1858 -1857 -1856 -1855 -1854 -1853 -1852 -1851 -1850 -1849 -1848 -1847 -1846 -1845 -1844 -1843 -1842 -1841 -1840 -1839 -1838 -1837 -1836 -1835 -1834 -1833 -1832 -1831 -1830 -1829 -1828 -1827 -1826 -1825 -1824 -1823 -1822 -1821 -1820 -1819 -1818 -1817 -1816 -1815 -1814 -1813 -1812 -1811 -1810 -1809 -1808 -1807 -1806 -1805 -1804 -1803 -1802 -1801 -1800 -1799 -1798 -1797 -1796 -1795 -1794 -1793 -1792 -1791 -1790 -1789 -1788 -1787 -1786 -1785 -1784 -1783 -1782 -1781 -1780 -1779 -1778 -1777 -1776 -1775 -1774 -1773 -1772 -1771 -1770 -1769 -1768 -1767 -1766 -1765 -1764 -1763 -1762 -1761 -1760 -1759 -1758 -1757 -1756 -1755 -1754 -1753 -1752 -1751 -1750 -1749 -1748 -1747 -1746 -1745 -1744 -1743 -1742 -1741 -1740 -1739 -1738 -1737 -1736 -1735 -1734 -1733 -1732 -1731 -1730 -1729 -1728 -1727 -1726 -1725 -1724 -1723 -1722 -1721 -1720 -1719 -1718 -1717 -1716 -1715 -1714 -1713 -1712 -1711 -1710 -1709 -1708 -1707 -1706 -1705 -1704 -1703 -1702 -1701 -1700 -1699 -1698 -1697 -1696 -1695 -1694 -1693 -1692 -1691 -1690 -1689 -1688 -1687 -1686 -1685 -1684 -1683 -1682 -1681 -1680 -1679 -1678 -1677 -1676 -1675 -1674 -1673 -1672 -1671 -1670 -1669 -1668 -1667 -1666 -1665 -1664 -1663 -1662 -1661 -1660 -1659 -1658 -1657 -1656 -1655 -1654 -1653 -1652 -1651 -1650 -1649 -1648 -1647 -1646 -1645 -1644 -1643 -1642 -1641 -1640 -1639 -1638 -1637 -1636 -1635 -1634 -1633 -1632 -1631 -1630 -1629 -1628 -1627 -1626 -1625 -1624 -1623 -1622 -1621 -1620 -1619 -1618 -1617 -1616 -1615 -1614 -1613 -1612 -1611 -1610 -1609 -1608 -1607 -1606 -1605 -1604 -1603 -1602 -1601 -1600 -1599 -1598 -1597 -1596 -1595 -1594 -1593 -1592 -1591 -1590 -1589 -1588 -1587 -1586 -1585 -1584 -1583 -1582 -1581 -1580 -1579 -1578 -1577 -1576 -1575 -1574 -1573 -1572 -1571 -1570 -1569 -1568 -1567 -1566 -1565 -1564 -1563 -1562 -1561 -1560 -1559 -1558 -1557 -1556 -1555 -1554 -1553 -1552 -1551 -1550 -1549 -1548 -1547 -1546 -1545 -1544 -1543 -1542 -1541 -1540 -1539 -1538 -1537 -1536 -1535 -1534 -1533 -1532 -1531 -1530 -1529 -1528 -1527 -1526 -1525 -1524 -1523 -1522 -1521 -1520 -1519 -1518 -1517 -1516 -1515 -1514 -1513 -1512 -1511 -1510 -1509 -1508 -1507 -1506 -1505 -1504 -1503 -1502 -1501 -1500 -1499 -1498 -1497 -1496 -1495 -1494 -1493 -1492 -1491 -1490 -1489 -1488 -1487 -1486 -1485 -1484 -1483 -1482 -1481 -1480 -1479 -1478 -1477 -1476 -1475 -1474 -1473 -1472 -1471 -1470 -1469 -1468 -1467 -1466 -1465 -1464 -1463 -1462 -1461 -1460 -1459 -1458 -1457 -1456 -1455 -1454 -1453 -1452 -1451 -1450 -1449 -1448 -1447 -1446 -1445 -1444 -1443 -1442 -1441 -1440 -1439 -1438 -1437 -1436 -1435 -1434 -1433 -1432 -1431 -1430 -1429 -1428 -1427 -1426 -1425 -1424 -1423 -1422 -1421 -1420 -1419 -1418 -1417 -1416 -1415 -1414 -1413 -1412 -1411 -1410 -1409 -1408 -1407 -1406 -1405 -1404 -1403 -1402 -1401 -1400 -1399 -1398 -1397 -1396 -1395 -1394 -1393 -1392 -1391 -1390 -1389 -1388 -1387 -1386 -1385 -1384 -1383 -1382 -1381 -1380 -1379 -1378 -1377 -1376 -1375 -1374 -1373 -1372 -1371 -1370 -1369 -1368 -1367 -1366 -1365 -1364 -1363 -1362 -1361 -1360 -1359 -1358 -1357 -1356 -1355 -1354 -1353 -1352 -1351 -1350 -1349 -1348 -1347 -1346 -1345 -1344 -1343 -1342 -1341 -1340 -1339 -1338 -1337 -1336 -1335 -1334 -1333 -1332 -1331 -1330 -1329 -1328 -1327 -1326 -1325 -1324 -1323 -1322 -1321 -1320 -1319 -1318 -1317 -1316 -1315 -1314 -1313 -1312 -1311 -1310 -1309 -1308 -1307 -1306 -1305 -1304 -1303 -1302 -1301 -1300 -1299 -1298 -1297 -1296 -1295 -1294 -1293 -1292 -1291 -1290 -1289 -1288 -1287 -1286 -1285 -1284 -1283 -1282 -1281 -1280 -1279 -1278 -1277 -1276 -1275 -1274 -1273 -1272 -1271 -1270 -1269 -1268 -1267 -1266 -1265 -1264 -1263 -1262 -1261 -1260 -1259 -1258 -1257 -1256 -1255 -1254 -1253 -1252 -1251 -1250 -1249 -1248 -1247 -1246 -1245 -1244 -1243 -1242 -1241 -1240 -1239 -1238 -1237 -1236 -1235 -1234 -1233 -1232 -1231 -1230 -1229 -1228 -1227 -1226 -1225 -1224 -1223 -1222 -1221 -1220 -1219 -1218 -1217 -1216 -1215 -1214 -1213 -1212 -1211 -1210 -1209 -1208 -1207 -1206 -1205 -1204 -1203 -1202 -1201 -1200 -1199 -1198 -1197 -1196 -1195 -1194 -1193 -1192 -1191 -1190 -1189 -1188 -1187 -1186 -1185 -1184 -1183 -1182 -1181 -1180 -1179 -1178 -1177 -1176 -1175 -1174 -1173 -1172 -1171 -1170 -1169 -1168 -1167 -1166 -1165 -1164 -1163 -1162 -1161 -1160 -1159 -1158 -1157 -1156 -1155 -1154 -1153 -1152 -1151 -1150 -1149 -1148 -1147 -1146 -1145 -1144 -1143 -1142 -1141 -1140 -1139 -1138 -1137 -1136 -1135 -1134 -1133 -1132 -1131 -1130 -1129 -1128 -1127 -1126 -1125 -1124 -1123 -1122 -1121 -1120 -1119 -1118 -1117 -1116 -1115 -1114 -1113 -1112 -1111 -1110 -1109 -1108 -1107 -1106 -1105 -1104 -1103 -1102 -1101 -1100 -1099 -1098 -1097 -1096 -1095 -1094 -1093 -1092 -1091 -1090 -1089 -1088 -1087 -1086 -1085 -1084 -1083 -1082 -1081 -1080 -1079 -1078 -1077 -1076 -1075 -1074 -1073 -1072 -1071 -1070 -1069 -1068 -1067 -1066 -1065 -1064 -1063 -1062 -1061 -1060 -1059 -1058 -1057 -1056 -1055 -1054 -1053 -1052 -1051 -1050 -1049 -1048 -1047 -1046 -1045 -1044 -1043 -1042 -1041 -1040 -1039 -1038 -1037 -1036 -1035 -1034 -1033 -1032 -1031 -1030 -1029 -1028 -1027 -1026 -1025 -1024 -1023 -1022 -1021 -1020 -1019 -1018 -1017 -1016 -1015 -1014 -1013 -1012 -1011 -1010 -1009 -1008 -1007 -1006 -1005 -1004 -1003 -1002 -1001 -1000 -999 -998 -997 -996 -995 -994 -993 -992 -991 -990 -989 -988 -987 -986 -985 -984 -983 -982 -981 -980 -979 -978 -977 -976 -975 -974 -973 -972 -971 -970 -969 -968 -967 -966 -965 -964 -963 -962 -961 -960 -959 -958 -957 -956 -955 -954 -953 -952 -951 -950 -949 -948 -947 -946 -945 -944 -943 -942 -941 -940 -939 -938 -937 -936 -935 -934 -933 -932 -931 -930 -929 -928 -927 -926 -925 -924 -923 -922 -921 -920 -919 -918 -917 -916 -915 -914 -913 -912 -911 -910 -909 -908 -907 -906 -905 -904 -903 -902 -901 -900 -899 -898 -897 -896 -895 -894 -893 -892 -891 -890 -889 -888 -887 -886 -885 -884 -883 -882 -881 -880 -879 -878 -877 -876 -875 -874 -873 -872 -871 -870 -869 -868 -867 -866 -865 -864 -863 -862 -861 -860 -859 -858 -857 -856 -855 -854 -853 -852 -851 -850 -849 -848 -847 -846 -845 -844 -843 -842 -841 -840 -839 -838 -837 -836 -835 -834 -833 -832 -831 -830 -829 -828 -827 -826 -825 -824 -823 -822 -821 -820 -819 -818 -817 -816 -815 -814 -813 -812 -811 -810 -809 -808 -807 -806 -805 -804 -803 -802 -801 -800 -799 -798 -797 -796 -795 -794 -793 -792 -791 -790 -789 -788 -787 -786 -785 -784 -783 -782 -781 -780 -779 -778 -777 -776 -775 -774 -773 -772 -771 -770 -769 -768 -767 -766 -765 -764 -763 -762 -761 -760 -759 -758 -757 -756 -755 -754 -753 -752 -751 -750 -749 -748 -747 -746 -745 -744 -743 -742 -741 -740 -739 -738 -737 -736 -735 -734 -733 -732 -731 -730 -729 -728 -727 -726 -725 -724 -723 -722 -721 -720 -719 -718 -717 -716 -715 -714 -713 -712 -711 -710 -709 -708 -707 -706 -705 -704 -703 -702 -701 -700 -699 -698 -697 -696 -695 -694 -693 -692 -691 -690 -689 -688 -687 -686 -685 -684 -683 -682 -681 -680 -679 -678 -677 -676 -675 -674 -673 -672 -671 -670 -669 -668 -667 -666 -665 -664 -663 -662 -661 -660 -659 -658 -657 -656 -655 -654 -653 -652 -651 -650 -649 -648 -647 -646 -645 -644 -643 -642 -641 -640 -639 -638 -637 -636 -635 -634 -633 -632 -631 -630 -629 -628 -627 -626 -625 -624 -623 -622 -621 -620 -619 -618 -617 -616 -615 -614 -613 -612 -611 -610 -609 -608 -607 -606 -605 -604 -603 -602 -601 -600 -599 -598 -597 -596 -595 -594 -593 -592 -591 -590 -589 -588 -587 -586 -585 -584 -583 -582 -581 -580 -579 -578 -577 -576 -575 -574 -573 -572 -571 -570 -569 -568 -567 -566 -565 -564 -563 -562 -561 -560 -559 -558 -557 -556 -555 -554 -553 -552 -551 -550 -549 -548 -547 -546 -545 -544 -543 -542 -541 -540 -539 -538 -537 -536 -535 -534 -533 -532 -531 -530 -529 -528 -527 -526 -525 -524 -523 -522 -521 -520 -519 -518 -517 -516 -515 -514 -513 -512 -511 -510 -509 -508 -507 -506 -505 -504 -503 -502 -501 -500 -499 -498 -497 -496 -495 -494 -493 -492 -491 -490 -489 -488 -487 -486 -485 -484 -483 -482 -481 -480 -479 -478 -477 -476 -475 -474 -473 -472 -471 -470 -469 -468 -467 -466 -465 -464 -463 -462 -461 -460 -459 -458 -457 -456 -455 -454 -453 -452 -451 -450 -449 -448 -447 -446 -445 -444 -443 -442 -441 -440 -439 -438 -437 -436 -435 -434 -433 -432 -431 -430 -429 -428 -427 -426 -425 -424 -423 -422 -421 -420 -419 -418 -417 -416 -415 -414 -413 -412 -411 -410 -409 -408 -407 -406 -405 -404 -403 -402 -401 -400 -399 -398 -397 -396 -395 -394 -393 -392 -391 -390 -389 -388 -387 -386 -385 -384 -383 -382 -381 -380 -379 -378 -377 -376 -375 -374 -373 -372 -371 -370 -369 -368 -367 -366 -365 -364 -363 -362 -361 -360 -359 -358 -357 -356 -355 -354 -353 -352 -351 -350 -349 -348 -347 -346 -345 -344 -343 -342 -341 -340 -339 -338 -337 -336 -335 -334 -333 -332 -331 -330 -329 -328 -327 -326 -325 -324 -323 -322 -321 -320 -319 -318 -317 -316 -315 -314 -313 -312 -311 -310 -309 -308 -307 -306 -305 -304 -303 -302 -301 -300 -299 -298 -297 -296 -295 -294 -293 -292 -291 -290 -289 -288 -287 -286 -285 -284 -283 -282 -281 -280 -279 -278 -277 -276 -275 -274 -273 -272 -271 -270 -269 -268 -267 -266 -265 -264 -263 -262 -261 -260 -259 -258 -257 -256 -255 -254 -253 -252 -251 -250 -249 -248 -247 -246 -245 -244 -243 -242 -241 -240 -239 -238 -237 -236 -235 -234 -233 -232 -231 -230 -229 -228 -227 -226 -225 -224 -223 -222 -221 -220 -219 -218 -217 -216 -215 -214 -213 -212 -211 -210 -209 -208 -207 -206 -205 -204 -203 -202 -201 -200 -199 -198 -197 -196 -195 -194 -193 -192 -191 -190 -189 -188 -187 -186 -185 -184 -183 -182 -181 -180 -179 -178 -177 -176 -175 -174 -173 -172 -171 -170 -169 -168 -167 -166 -165 -164 -163 -162 -161 -160 -159 -158 -157 -156 -155 -154 -153 -152 -151 -150 -149 -148 -147 -146 -145 -144 -143 -142 -141 -140 -139 -138 -137 -136 -135 -134 -133 -132 -131 -130 -129 -128 -127 -126 -125 -124 -123 -122 -121 -120 -119 -118 -117 -116 -115 -114 -113 -112 -111 -110 -109 -108 -107 -106 -105 -104 -103 -102 -101 -100 -99 -98 -97 -96 -95 -94 -93 -92 -91 -90 -89 -88 -87 -86 -85 -84 -83 -82 -81 -80 -79 -78 -77 -76 -75 -74 -73 -72 -71 -70 -69 -68 -67 -66 -65 -64 -63 -62 -61 -60 -59 -58 -57 -56 -55 -54 -53 -52 -51 -50 -49 -48 -47 -46 -45 -44 -43 -42 -41 -40 -39 -38 -37 -36 -35 -34 -33 -32 -31 -30 -29 -28 -27 -26 -25 -24 -23 -22 -21 -20 -19 -18 -17 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/sn_2048/first.xml b/bench_horn_mcmc/sn_2048/first.xml new file mode 100644 index 000000000..e547522f1 --- /dev/null +++ b/bench_horn_mcmc/sn_2048/first.xml @@ -0,0 +1,12341 @@ + + + + + 1 + itp + + + + x + x1 + + + + x + + + + + + x + 1 + + + + + x + 2 + + + + + x + 3 + + + + + x + 4 + + + + + x + 5 + + + + + x + 6 + + + + + x + 7 + + + + + x + 8 + + + + + x + 9 + + + + + x + 10 + + + + + x + 11 + + + + + x + 12 + + + + + x + 13 + + + + + x + 14 + + + + + x + 15 + + + + + x + 16 + + + + + x + 17 + + + + + x + 18 + + + + + x + 19 + + + + + x + 20 + + + + + x + 21 + + + + + x + 22 + + + + + x + 23 + + + + + x + 24 + + + + + x + 25 + + + + + x + 26 + + + + + x + 27 + + + + + x + 28 + + + + + x + 29 + + + + + x + 30 + + + + + x + 31 + + + + + x + 32 + + + + + x + 33 + + + + + x + 34 + + + + + x + 35 + + + + + x + 36 + + + + + x + 37 + + + + + x + 38 + + + + + x + 39 + + + + + x + 40 + + + + + x + 41 + + + + + x + 42 + + + + + x + 43 + + + + + x + 44 + + + + + x + 45 + + + + + x + 46 + + + + + x + 47 + + + + + x + 48 + + + + + x + 49 + + + + + x + 50 + + + + + x + 51 + + + + + x + 52 + + + + + x + 53 + + + + + x + 54 + + + + + x + 55 + + + + + x + 56 + + + + + x + 57 + + + + + x + 58 + + + + + x + 59 + + + + + x + 60 + + + + + x + 61 + + + + + x + 62 + + + + + x + 63 + + + + + x + 64 + + + + + x + 65 + + + + + x + 66 + + + + + x + 67 + + + + + x + 68 + + + + + x + 69 + + + + + x + 70 + + + + + x + 71 + + + + + x + 72 + + + + + x + 73 + + + + + x + 74 + + + + + x + 75 + + + + + x + 76 + + + + + x + 77 + + + + + x + 78 + + + + + x + 79 + + + + + x + 80 + + + + + x + 81 + + + + + x + 82 + + + + + x + 83 + + + + + x + 84 + + + + + x + 85 + + + + + x + 86 + + + + + x + 87 + + + + + x + 88 + + + + + x + 89 + + + + + x + 90 + + + + + x + 91 + + + + + x + 92 + + + + + x + 93 + + + + + x + 94 + + + + + x + 95 + + + + + x + 96 + + + + + x + 97 + + + + + x + 98 + + + + + x + 99 + + + + + x + 100 + + + + + x + 101 + + + + + x + 102 + + + + + x + 103 + + + + + x + 104 + + + + + x + 105 + + + + + x + 106 + + + + + x + 107 + + + + + x + 108 + + + + + x + 109 + + + + + x + 110 + + + + + x + 111 + + + + + x + 112 + + + + + x + 113 + + + + + x + 114 + + + + + x + 115 + + + + + x + 116 + + + + + x + 117 + + + + + x + 118 + + + + + x + 119 + + + + + x + 120 + + + + + x + 121 + + + + + x + 122 + + + + + x + 123 + + + + + x + 124 + + + + + x + 125 + + + + + x + 126 + + + + + x + 127 + + + + + x + 128 + + + + + x + 129 + + + + + x + 130 + + + + + x + 131 + + + + + x + 132 + + + + + x + 133 + + + + + x + 134 + + + + + x + 135 + + + + + x + 136 + + + + + x + 137 + + + + + x + 138 + + + + + x + 139 + + + + + x + 140 + + + + + x + 141 + + + + + x + 142 + + + + + x + 143 + + + + + x + 144 + + + + + x + 145 + + + + + x + 146 + + + + + x + 147 + + + + + x + 148 + + + + + x + 149 + + + + + x + 150 + + + + + x + 151 + + + + + x + 152 + + + + + x + 153 + + + + + x + 154 + + + + + x + 155 + + + + + x + 156 + + + + + x + 157 + + + + + x + 158 + + + + + x + 159 + + + + + x + 160 + + + + + x + 161 + + + + + x + 162 + + + + + x + 163 + + + + + x + 164 + + + + + x + 165 + + + + + x + 166 + + + + + x + 167 + + + + + x + 168 + + + + + x + 169 + + + + + x + 170 + + + + + x + 171 + + + + + x + 172 + + + + + x + 173 + + + + + x + 174 + + + + + x + 175 + + + + + x + 176 + + + + + x + 177 + + + + + x + 178 + + + + + x + 179 + + + + + x + 180 + + + + + x + 181 + + + + + x + 182 + + + + + x + 183 + + + + + x + 184 + + + + + x + 185 + + + + + x + 186 + + + + + x + 187 + + + + + x + 188 + + + + + x + 189 + + + + + x + 190 + + + + + x + 191 + + + + + x + 192 + + + + + x + 193 + + + + + x + 194 + + + + + x + 195 + + + + + x + 196 + + + + + x + 197 + + + + + x + 198 + + + + + x + 199 + + + + + x + 200 + + + + + x + 201 + + + + + x + 202 + + + + + x + 203 + + + + + x + 204 + + + + + x + 205 + + + + + x + 206 + + + + + x + 207 + + + + + x + 208 + + + + + x + 209 + + + + + x + 210 + + + + + x + 211 + + + + + x + 212 + + + + + x + 213 + + + + + x + 214 + + + + + x + 215 + + + + + x + 216 + + + + + x + 217 + + + + + x + 218 + + + + + x + 219 + + + + + x + 220 + + + + + x + 221 + + + + + x + 222 + + + + + x + 223 + + + + + x + 224 + + + + + x + 225 + + + + + x + 226 + + + + + x + 227 + + + + + x + 228 + + + + + x + 229 + + + + + x + 230 + + + + + x + 231 + + + + + x + 232 + + + + + x + 233 + + + + + x + 234 + + + + + x + 235 + + + + + x + 236 + + + + + x + 237 + + + + + x + 238 + + + + + x + 239 + + + + + x + 240 + + + + + x + 241 + + + + + x + 242 + + + + + x + 243 + + + + + x + 244 + + + + + x + 245 + + + + + x + 246 + + + + + x + 247 + + + + + x + 248 + + + + + x + 249 + + + + + x + 250 + + + + + x + 251 + + + + + x + 252 + + + + + x + 253 + + + + + x + 254 + + + + + x + 255 + + + + + x + 256 + + + + + x + 257 + + + + + x + 258 + + + + + x + 259 + + + + + x + 260 + + + + + x + 261 + + + + + x + 262 + + + + + x + 263 + + + + + x + 264 + + + + + x + 265 + + + + + x + 266 + + + + + x + 267 + + + + + x + 268 + + + + + x + 269 + + + + + x + 270 + + + + + x + 271 + + + + + x + 272 + + + + + x + 273 + + + + + x + 274 + + + + + x + 275 + + + + + x + 276 + + + + + x + 277 + + + + + x + 278 + + + + + x + 279 + + + + + x + 280 + + + + + x + 281 + + + + + x + 282 + + + + + x + 283 + + + + + x + 284 + + + + + x + 285 + + + + + x + 286 + + + + + x + 287 + + + + + x + 288 + + + + + x + 289 + + + + + x + 290 + + + + + x + 291 + + + + + x + 292 + + + + + x + 293 + + + + + x + 294 + + + + + x + 295 + + + + + x + 296 + + + + + x + 297 + + + + + x + 298 + + + + + x + 299 + + + + + x + 300 + + + + + x + 301 + + + + + x + 302 + + + + + x + 303 + + + + + x + 304 + + + + + x + 305 + + + + + x + 306 + + + + + x + 307 + + + + + x + 308 + + + + + x + 309 + + + + + x + 310 + + + + + x + 311 + + + + + x + 312 + + + + + x + 313 + + + + + x + 314 + + + + + x + 315 + + + + + x + 316 + + + + + x + 317 + + + + + x + 318 + + + + + x + 319 + + + + + x + 320 + + + + + x + 321 + + + + + x + 322 + + + + + x + 323 + + + + + x + 324 + + + + + x + 325 + + + + + x + 326 + + + + + x + 327 + + + + + x + 328 + + + + + x + 329 + + + + + x + 330 + + + + + x + 331 + + + + + x + 332 + + + + + x + 333 + + + + + x + 334 + + + + + x + 335 + + + + + x + 336 + + + + + x + 337 + + + + + x + 338 + + + + + x + 339 + + + + + x + 340 + + + + + x + 341 + + + + + x + 342 + + + + + x + 343 + + + + + x + 344 + + + + + x + 345 + + + + + x + 346 + + + + + x + 347 + + + + + x + 348 + + + + + x + 349 + + + + + x + 350 + + + + + x + 351 + + + + + x + 352 + + + + + x + 353 + + + + + x + 354 + + + + + x + 355 + + + + + x + 356 + + + + + x + 357 + + + + + x + 358 + + + + + x + 359 + + + + + x + 360 + + + + + x + 361 + + + + + x + 362 + + + + + x + 363 + + + + + x + 364 + + + + + x + 365 + + + + + x + 366 + + + + + x + 367 + + + + + x + 368 + + + + + x + 369 + + + + + x + 370 + + + + + x + 371 + + + + + x + 372 + + + + + x + 373 + + + + + x + 374 + + + + + x + 375 + + + + + x + 376 + + + + + x + 377 + + + + + x + 378 + + + + + x + 379 + + + + + x + 380 + + + + + x + 381 + + + + + x + 382 + + + + + x + 383 + + + + + x + 384 + + + + + x + 385 + + + + + x + 386 + + + + + x + 387 + + + + + x + 388 + + + + + x + 389 + + + + + x + 390 + + + + + x + 391 + + + + + x + 392 + + + + + x + 393 + + + + + x + 394 + + + + + x + 395 + + + + + x + 396 + + + + + x + 397 + + + + + x + 398 + + + + + x + 399 + + + + + x + 400 + + + + + x + 401 + + + + + x + 402 + + + + + x + 403 + + + + + x + 404 + + + + + x + 405 + + + + + x + 406 + + + + + x + 407 + + + + + x + 408 + + + + + x + 409 + + + + + x + 410 + + + + + x + 411 + + + + + x + 412 + + + + + x + 413 + + + + + x + 414 + + + + + x + 415 + + + + + x + 416 + + + + + x + 417 + + + + + x + 418 + + + + + x + 419 + + + + + x + 420 + + + + + x + 421 + + + + + x + 422 + + + + + x + 423 + + + + + x + 424 + + + + + x + 425 + + + + + x + 426 + + + + + x + 427 + + + + + x + 428 + + + + + x + 429 + + + + + x + 430 + + + + + x + 431 + + + + + x + 432 + + + + + x + 433 + + + + + x + 434 + + + + + x + 435 + + + + + x + 436 + + + + + x + 437 + + + + + x + 438 + + + + + x + 439 + + + + + x + 440 + + + + + x + 441 + + + + + x + 442 + + + + + x + 443 + + + + + x + 444 + + + + + x + 445 + + + + + x + 446 + + + + + x + 447 + + + + + x + 448 + + + + + x + 449 + + + + + x + 450 + + + + + x + 451 + + + + + x + 452 + + + + + x + 453 + + + + + x + 454 + + + + + x + 455 + + + + + x + 456 + + + + + x + 457 + + + + + x + 458 + + + + + x + 459 + + + + + x + 460 + + + + + x + 461 + + + + + x + 462 + + + + + x + 463 + + + + + x + 464 + + + + + x + 465 + + + + + x + 466 + + + + + x + 467 + + + + + x + 468 + + + + + x + 469 + + + + + x + 470 + + + + + x + 471 + + + + + x + 472 + + + + + x + 473 + + + + + x + 474 + + + + + x + 475 + + + + + x + 476 + + + + + x + 477 + + + + + x + 478 + + + + + x + 479 + + + + + x + 480 + + + + + x + 481 + + + + + x + 482 + + + + + x + 483 + + + + + x + 484 + + + + + x + 485 + + + + + x + 486 + + + + + x + 487 + + + + + x + 488 + + + + + x + 489 + + + + + x + 490 + + + + + x + 491 + + + + + x + 492 + + + + + x + 493 + + + + + x + 494 + + + + + x + 495 + + + + + x + 496 + + + + + x + 497 + + + + + x + 498 + + + + + x + 499 + + + + + x + 500 + + + + + x + 501 + + + + + x + 502 + + + + + x + 503 + + + + + x + 504 + + + + + x + 505 + + + + + x + 506 + + + + + x + 507 + + + + + x + 508 + + + + + x + 509 + + + + + x + 510 + + + + + x + 511 + + + + + x + 512 + + + + + x + 513 + + + + + x + 514 + + + + + x + 515 + + + + + x + 516 + + + + + x + 517 + + + + + x + 518 + + + + + x + 519 + + + + + x + 520 + + + + + x + 521 + + + + + x + 522 + + + + + x + 523 + + + + + x + 524 + + + + + x + 525 + + + + + x + 526 + + + + + x + 527 + + + + + x + 528 + + + + + x + 529 + + + + + x + 530 + + + + + x + 531 + + + + + x + 532 + + + + + x + 533 + + + + + x + 534 + + + + + x + 535 + + + + + x + 536 + + + + + x + 537 + + + + + x + 538 + + + + + x + 539 + + + + + x + 540 + + + + + x + 541 + + + + + x + 542 + + + + + x + 543 + + + + + x + 544 + + + + + x + 545 + + + + + x + 546 + + + + + x + 547 + + + + + x + 548 + + + + + x + 549 + + + + + x + 550 + + + + + x + 551 + + + + + x + 552 + + + + + x + 553 + + + + + x + 554 + + + + + x + 555 + + + + + x + 556 + + + + + x + 557 + + + + + x + 558 + + + + + x + 559 + + + + + x + 560 + + + + + x + 561 + + + + + x + 562 + + + + + x + 563 + + + + + x + 564 + + + + + x + 565 + + + + + x + 566 + + + + + x + 567 + + + + + x + 568 + + + + + x + 569 + + + + + x + 570 + + + + + x + 571 + + + + + x + 572 + + + + + x + 573 + + + + + x + 574 + + + + + x + 575 + + + + + x + 576 + + + + + x + 577 + + + + + x + 578 + + + + + x + 579 + + + + + x + 580 + + + + + x + 581 + + + + + x + 582 + + + + + x + 583 + + + + + x + 584 + + + + + x + 585 + + + + + x + 586 + + + + + x + 587 + + + + + x + 588 + + + + + x + 589 + + + + + x + 590 + + + + + x + 591 + + + + + x + 592 + + + + + x + 593 + + + + + x + 594 + + + + + x + 595 + + + + + x + 596 + + + + + x + 597 + + + + + x + 598 + + + + + x + 599 + + + + + x + 600 + + + + + x + 601 + + + + + x + 602 + + + + + x + 603 + + + + + x + 604 + + + + + x + 605 + + + + + x + 606 + + + + + x + 607 + + + + + x + 608 + + + + + x + 609 + + + + + x + 610 + + + + + x + 611 + + + + + x + 612 + + + + + x + 613 + + + + + x + 614 + + + + + x + 615 + + + + + x + 616 + + + + + x + 617 + + + + + x + 618 + + + + + x + 619 + + + + + x + 620 + + + + + x + 621 + + + + + x + 622 + + + + + x + 623 + + + + + x + 624 + + + + + x + 625 + + + + + x + 626 + + + + + x + 627 + + + + + x + 628 + + + + + x + 629 + + + + + x + 630 + + + + + x + 631 + + + + + x + 632 + + + + + x + 633 + + + + + x + 634 + + + + + x + 635 + + + + + x + 636 + + + + + x + 637 + + + + + x + 638 + + + + + x + 639 + + + + + x + 640 + + + + + x + 641 + + + + + x + 642 + + + + + x + 643 + + + + + x + 644 + + + + + x + 645 + + + + + x + 646 + + + + + x + 647 + + + + + x + 648 + + + + + x + 649 + + + + + x + 650 + + + + + x + 651 + + + + + x + 652 + + + + + x + 653 + + + + + x + 654 + + + + + x + 655 + + + + + x + 656 + + + + + x + 657 + + + + + x + 658 + + + + + x + 659 + + + + + x + 660 + + + + + x + 661 + + + + + x + 662 + + + + + x + 663 + + + + + x + 664 + + + + + x + 665 + + + + + x + 666 + + + + + x + 667 + + + + + x + 668 + + + + + x + 669 + + + + + x + 670 + + + + + x + 671 + + + + + x + 672 + + + + + x + 673 + + + + + x + 674 + + + + + x + 675 + + + + + x + 676 + + + + + x + 677 + + + + + x + 678 + + + + + x + 679 + + + + + x + 680 + + + + + x + 681 + + + + + x + 682 + + + + + x + 683 + + + + + x + 684 + + + + + x + 685 + + + + + x + 686 + + + + + x + 687 + + + + + x + 688 + + + + + x + 689 + + + + + x + 690 + + + + + x + 691 + + + + + x + 692 + + + + + x + 693 + + + + + x + 694 + + + + + x + 695 + + + + + x + 696 + + + + + x + 697 + + + + + x + 698 + + + + + x + 699 + + + + + x + 700 + + + + + x + 701 + + + + + x + 702 + + + + + x + 703 + + + + + x + 704 + + + + + x + 705 + + + + + x + 706 + + + + + x + 707 + + + + + x + 708 + + + + + x + 709 + + + + + x + 710 + + + + + x + 711 + + + + + x + 712 + + + + + x + 713 + + + + + x + 714 + + + + + x + 715 + + + + + x + 716 + + + + + x + 717 + + + + + x + 718 + + + + + x + 719 + + + + + x + 720 + + + + + x + 721 + + + + + x + 722 + + + + + x + 723 + + + + + x + 724 + + + + + x + 725 + + + + + x + 726 + + + + + x + 727 + + + + + x + 728 + + + + + x + 729 + + + + + x + 730 + + + + + x + 731 + + + + + x + 732 + + + + + x + 733 + + + + + x + 734 + + + + + x + 735 + + + + + x + 736 + + + + + x + 737 + + + + + x + 738 + + + + + x + 739 + + + + + x + 740 + + + + + x + 741 + + + + + x + 742 + + + + + x + 743 + + + + + x + 744 + + + + + x + 745 + + + + + x + 746 + + + + + x + 747 + + + + + x + 748 + + + + + x + 749 + + + + + x + 750 + + + + + x + 751 + + + + + x + 752 + + + + + x + 753 + + + + + x + 754 + + + + + x + 755 + + + + + x + 756 + + + + + x + 757 + + + + + x + 758 + + + + + x + 759 + + + + + x + 760 + + + + + x + 761 + + + + + x + 762 + + + + + x + 763 + + + + + x + 764 + + + + + x + 765 + + + + + x + 766 + + + + + x + 767 + + + + + x + 768 + + + + + x + 769 + + + + + x + 770 + + + + + x + 771 + + + + + x + 772 + + + + + x + 773 + + + + + x + 774 + + + + + x + 775 + + + + + x + 776 + + + + + x + 777 + + + + + x + 778 + + + + + x + 779 + + + + + x + 780 + + + + + x + 781 + + + + + x + 782 + + + + + x + 783 + + + + + x + 784 + + + + + x + 785 + + + + + x + 786 + + + + + x + 787 + + + + + x + 788 + + + + + x + 789 + + + + + x + 790 + + + + + x + 791 + + + + + x + 792 + + + + + x + 793 + + + + + x + 794 + + + + + x + 795 + + + + + x + 796 + + + + + x + 797 + + + + + x + 798 + + + + + x + 799 + + + + + x + 800 + + + + + x + 801 + + + + + x + 802 + + + + + x + 803 + + + + + x + 804 + + + + + x + 805 + + + + + x + 806 + + + + + x + 807 + + + + + x + 808 + + + + + x + 809 + + + + + x + 810 + + + + + x + 811 + + + + + x + 812 + + + + + x + 813 + + + + + x + 814 + + + + + x + 815 + + + + + x + 816 + + + + + x + 817 + + + + + x + 818 + + + + + x + 819 + + + + + x + 820 + + + + + x + 821 + + + + + x + 822 + + + + + x + 823 + + + + + x + 824 + + + + + x + 825 + + + + + x + 826 + + + + + x + 827 + + + + + x + 828 + + + + + x + 829 + + + + + x + 830 + + + + + x + 831 + + + + + x + 832 + + + + + x + 833 + + + + + x + 834 + + + + + x + 835 + + + + + x + 836 + + + + + x + 837 + + + + + x + 838 + + + + + x + 839 + + + + + x + 840 + + + + + x + 841 + + + + + x + 842 + + + + + x + 843 + + + + + x + 844 + + + + + x + 845 + + + + + x + 846 + + + + + x + 847 + + + + + x + 848 + + + + + x + 849 + + + + + x + 850 + + + + + x + 851 + + + + + x + 852 + + + + + x + 853 + + + + + x + 854 + + + + + x + 855 + + + + + x + 856 + + + + + x + 857 + + + + + x + 858 + + + + + x + 859 + + + + + x + 860 + + + + + x + 861 + + + + + x + 862 + + + + + x + 863 + + + + + x + 864 + + + + + x + 865 + + + + + x + 866 + + + + + x + 867 + + + + + x + 868 + + + + + x + 869 + + + + + x + 870 + + + + + x + 871 + + + + + x + 872 + + + + + x + 873 + + + + + x + 874 + + + + + x + 875 + + + + + x + 876 + + + + + x + 877 + + + + + x + 878 + + + + + x + 879 + + + + + x + 880 + + + + + x + 881 + + + + + x + 882 + + + + + x + 883 + + + + + x + 884 + + + + + x + 885 + + + + + x + 886 + + + + + x + 887 + + + + + x + 888 + + + + + x + 889 + + + + + x + 890 + + + + + x + 891 + + + + + x + 892 + + + + + x + 893 + + + + + x + 894 + + + + + x + 895 + + + + + x + 896 + + + + + x + 897 + + + + + x + 898 + + + + + x + 899 + + + + + x + 900 + + + + + x + 901 + + + + + x + 902 + + + + + x + 903 + + + + + x + 904 + + + + + x + 905 + + + + + x + 906 + + + + + x + 907 + + + + + x + 908 + + + + + x + 909 + + + + + x + 910 + + + + + x + 911 + + + + + x + 912 + + + + + x + 913 + + + + + x + 914 + + + + + x + 915 + + + + + x + 916 + + + + + x + 917 + + + + + x + 918 + + + + + x + 919 + + + + + x + 920 + + + + + x + 921 + + + + + x + 922 + + + + + x + 923 + + + + + x + 924 + + + + + x + 925 + + + + + x + 926 + + + + + x + 927 + + + + + x + 928 + + + + + x + 929 + + + + + x + 930 + + + + + x + 931 + + + + + x + 932 + + + + + x + 933 + + + + + x + 934 + + + + + x + 935 + + + + + x + 936 + + + + + x + 937 + + + + + x + 938 + + + + + x + 939 + + + + + x + 940 + + + + + x + 941 + + + + + x + 942 + + + + + x + 943 + + + + + x + 944 + + + + + x + 945 + + + + + x + 946 + + + + + x + 947 + + + + + x + 948 + + + + + x + 949 + + + + + x + 950 + + + + + x + 951 + + + + + x + 952 + + + + + x + 953 + + + + + x + 954 + + + + + x + 955 + + + + + x + 956 + + + + + x + 957 + + + + + x + 958 + + + + + x + 959 + + + + + x + 960 + + + + + x + 961 + + + + + x + 962 + + + + + x + 963 + + + + + x + 964 + + + + + x + 965 + + + + + x + 966 + + + + + x + 967 + + + + + x + 968 + + + + + x + 969 + + + + + x + 970 + + + + + x + 971 + + + + + x + 972 + + + + + x + 973 + + + + + x + 974 + + + + + x + 975 + + + + + x + 976 + + + + + x + 977 + + + + + x + 978 + + + + + x + 979 + + + + + x + 980 + + + + + x + 981 + + + + + x + 982 + + + + + x + 983 + + + + + x + 984 + + + + + x + 985 + + + + + x + 986 + + + + + x + 987 + + + + + x + 988 + + + + + x + 989 + + + + + x + 990 + + + + + x + 991 + + + + + x + 992 + + + + + x + 993 + + + + + x + 994 + + + + + x + 995 + + + + + x + 996 + + + + + x + 997 + + + + + x + 998 + + + + + x + 999 + + + + + x + 1000 + + + + + x + 1001 + + + + + x + 1002 + + + + + x + 1003 + + + + + x + 1004 + + + + + x + 1005 + + + + + x + 1006 + + + + + x + 1007 + + + + + x + 1008 + + + + + x + 1009 + + + + + x + 1010 + + + + + x + 1011 + + + + + x + 1012 + + + + + x + 1013 + + + + + x + 1014 + + + + + x + 1015 + + + + + x + 1016 + + + + + x + 1017 + + + + + x + 1018 + + + + + x + 1019 + + + + + x + 1020 + + + + + x + 1021 + + + + + x + 1022 + + + + + x + 1023 + + + + + x + 1024 + + + + + x + 1025 + + + + + x + 1026 + + + + + x + 1027 + + + + + x + 1028 + + + + + x + 1029 + + + + + x + 1030 + + + + + x + 1031 + + + + + x + 1032 + + + + + x + 1033 + + + + + x + 1034 + + + + + x + 1035 + + + + + x + 1036 + + + + + x + 1037 + + + + + x + 1038 + + + + + x + 1039 + + + + + x + 1040 + + + + + x + 1041 + + + + + x + 1042 + + + + + x + 1043 + + + + + x + 1044 + + + + + x + 1045 + + + + + x + 1046 + + + + + x + 1047 + + + + + x + 1048 + + + + + x + 1049 + + + + + x + 1050 + + + + + x + 1051 + + + + + x + 1052 + + + + + x + 1053 + + + + + x + 1054 + + + + + x + 1055 + + + + + x + 1056 + + + + + x + 1057 + + + + + x + 1058 + + + + + x + 1059 + + + + + x + 1060 + + + + + x + 1061 + + + + + x + 1062 + + + + + x + 1063 + + + + + x + 1064 + + + + + x + 1065 + + + + + x + 1066 + + + + + x + 1067 + + + + + x + 1068 + + + + + x + 1069 + + + + + x + 1070 + + + + + x + 1071 + + + + + x + 1072 + + + + + x + 1073 + + + + + x + 1074 + + + + + x + 1075 + + + + + x + 1076 + + + + + x + 1077 + + + + + x + 1078 + + + + + x + 1079 + + + + + x + 1080 + + + + + x + 1081 + + + + + x + 1082 + + + + + x + 1083 + + + + + x + 1084 + + + + + x + 1085 + + + + + x + 1086 + + + + + x + 1087 + + + + + x + 1088 + + + + + x + 1089 + + + + + x + 1090 + + + + + x + 1091 + + + + + x + 1092 + + + + + x + 1093 + + + + + x + 1094 + + + + + x + 1095 + + + + + x + 1096 + + + + + x + 1097 + + + + + x + 1098 + + + + + x + 1099 + + + + + x + 1100 + + + + + x + 1101 + + + + + x + 1102 + + + + + x + 1103 + + + + + x + 1104 + + + + + x + 1105 + + + + + x + 1106 + + + + + x + 1107 + + + + + x + 1108 + + + + + x + 1109 + + + + + x + 1110 + + + + + x + 1111 + + + + + x + 1112 + + + + + x + 1113 + + + + + x + 1114 + + + + + x + 1115 + + + + + x + 1116 + + + + + x + 1117 + + + + + x + 1118 + + + + + x + 1119 + + + + + x + 1120 + + + + + x + 1121 + + + + + x + 1122 + + + + + x + 1123 + + + + + x + 1124 + + + + + x + 1125 + + + + + x + 1126 + + + + + x + 1127 + + + + + x + 1128 + + + + + x + 1129 + + + + + x + 1130 + + + + + x + 1131 + + + + + x + 1132 + + + + + x + 1133 + + + + + x + 1134 + + + + + x + 1135 + + + + + x + 1136 + + + + + x + 1137 + + + + + x + 1138 + + + + + x + 1139 + + + + + x + 1140 + + + + + x + 1141 + + + + + x + 1142 + + + + + x + 1143 + + + + + x + 1144 + + + + + x + 1145 + + + + + x + 1146 + + + + + x + 1147 + + + + + x + 1148 + + + + + x + 1149 + + + + + x + 1150 + + + + + x + 1151 + + + + + x + 1152 + + + + + x + 1153 + + + + + x + 1154 + + + + + x + 1155 + + + + + x + 1156 + + + + + x + 1157 + + + + + x + 1158 + + + + + x + 1159 + + + + + x + 1160 + + + + + x + 1161 + + + + + x + 1162 + + + + + x + 1163 + + + + + x + 1164 + + + + + x + 1165 + + + + + x + 1166 + + + + + x + 1167 + + + + + x + 1168 + + + + + x + 1169 + + + + + x + 1170 + + + + + x + 1171 + + + + + x + 1172 + + + + + x + 1173 + + + + + x + 1174 + + + + + x + 1175 + + + + + x + 1176 + + + + + x + 1177 + + + + + x + 1178 + + + + + x + 1179 + + + + + x + 1180 + + + + + x + 1181 + + + + + x + 1182 + + + + + x + 1183 + + + + + x + 1184 + + + + + x + 1185 + + + + + x + 1186 + + + + + x + 1187 + + + + + x + 1188 + + + + + x + 1189 + + + + + x + 1190 + + + + + x + 1191 + + + + + x + 1192 + + + + + x + 1193 + + + + + x + 1194 + + + + + x + 1195 + + + + + x + 1196 + + + + + x + 1197 + + + + + x + 1198 + + + + + x + 1199 + + + + + x + 1200 + + + + + x + 1201 + + + + + x + 1202 + + + + + x + 1203 + + + + + x + 1204 + + + + + x + 1205 + + + + + x + 1206 + + + + + x + 1207 + + + + + x + 1208 + + + + + x + 1209 + + + + + x + 1210 + + + + + x + 1211 + + + + + x + 1212 + + + + + x + 1213 + + + + + x + 1214 + + + + + x + 1215 + + + + + x + 1216 + + + + + x + 1217 + + + + + x + 1218 + + + + + x + 1219 + + + + + x + 1220 + + + + + x + 1221 + + + + + x + 1222 + + + + + x + 1223 + + + + + x + 1224 + + + + + x + 1225 + + + + + x + 1226 + + + + + x + 1227 + + + + + x + 1228 + + + + + x + 1229 + + + + + x + 1230 + + + + + x + 1231 + + + + + x + 1232 + + + + + x + 1233 + + + + + x + 1234 + + + + + x + 1235 + + + + + x + 1236 + + + + + x + 1237 + + + + + x + 1238 + + + + + x + 1239 + + + + + x + 1240 + + + + + x + 1241 + + + + + x + 1242 + + + + + x + 1243 + + + + + x + 1244 + + + + + x + 1245 + + + + + x + 1246 + + + + + x + 1247 + + + + + x + 1248 + + + + + x + 1249 + + + + + x + 1250 + + + + + x + 1251 + + + + + x + 1252 + + + + + x + 1253 + + + + + x + 1254 + + + + + x + 1255 + + + + + x + 1256 + + + + + x + 1257 + + + + + x + 1258 + + + + + x + 1259 + + + + + x + 1260 + + + + + x + 1261 + + + + + x + 1262 + + + + + x + 1263 + + + + + x + 1264 + + + + + x + 1265 + + + + + x + 1266 + + + + + x + 1267 + + + + + x + 1268 + + + + + x + 1269 + + + + + x + 1270 + + + + + x + 1271 + + + + + x + 1272 + + + + + x + 1273 + + + + + x + 1274 + + + + + x + 1275 + + + + + x + 1276 + + + + + x + 1277 + + + + + x + 1278 + + + + + x + 1279 + + + + + x + 1280 + + + + + x + 1281 + + + + + x + 1282 + + + + + x + 1283 + + + + + x + 1284 + + + + + x + 1285 + + + + + x + 1286 + + + + + x + 1287 + + + + + x + 1288 + + + + + x + 1289 + + + + + x + 1290 + + + + + x + 1291 + + + + + x + 1292 + + + + + x + 1293 + + + + + x + 1294 + + + + + x + 1295 + + + + + x + 1296 + + + + + x + 1297 + + + + + x + 1298 + + + + + x + 1299 + + + + + x + 1300 + + + + + x + 1301 + + + + + x + 1302 + + + + + x + 1303 + + + + + x + 1304 + + + + + x + 1305 + + + + + x + 1306 + + + + + x + 1307 + + + + + x + 1308 + + + + + x + 1309 + + + + + x + 1310 + + + + + x + 1311 + + + + + x + 1312 + + + + + x + 1313 + + + + + x + 1314 + + + + + x + 1315 + + + + + x + 1316 + + + + + x + 1317 + + + + + x + 1318 + + + + + x + 1319 + + + + + x + 1320 + + + + + x + 1321 + + + + + x + 1322 + + + + + x + 1323 + + + + + x + 1324 + + + + + x + 1325 + + + + + x + 1326 + + + + + x + 1327 + + + + + x + 1328 + + + + + x + 1329 + + + + + x + 1330 + + + + + x + 1331 + + + + + x + 1332 + + + + + x + 1333 + + + + + x + 1334 + + + + + x + 1335 + + + + + x + 1336 + + + + + x + 1337 + + + + + x + 1338 + + + + + x + 1339 + + + + + x + 1340 + + + + + x + 1341 + + + + + x + 1342 + + + + + x + 1343 + + + + + x + 1344 + + + + + x + 1345 + + + + + x + 1346 + + + + + x + 1347 + + + + + x + 1348 + + + + + x + 1349 + + + + + x + 1350 + + + + + x + 1351 + + + + + x + 1352 + + + + + x + 1353 + + + + + x + 1354 + + + + + x + 1355 + + + + + x + 1356 + + + + + x + 1357 + + + + + x + 1358 + + + + + x + 1359 + + + + + x + 1360 + + + + + x + 1361 + + + + + x + 1362 + + + + + x + 1363 + + + + + x + 1364 + + + + + x + 1365 + + + + + x + 1366 + + + + + x + 1367 + + + + + x + 1368 + + + + + x + 1369 + + + + + x + 1370 + + + + + x + 1371 + + + + + x + 1372 + + + + + x + 1373 + + + + + x + 1374 + + + + + x + 1375 + + + + + x + 1376 + + + + + x + 1377 + + + + + x + 1378 + + + + + x + 1379 + + + + + x + 1380 + + + + + x + 1381 + + + + + x + 1382 + + + + + x + 1383 + + + + + x + 1384 + + + + + x + 1385 + + + + + x + 1386 + + + + + x + 1387 + + + + + x + 1388 + + + + + x + 1389 + + + + + x + 1390 + + + + + x + 1391 + + + + + x + 1392 + + + + + x + 1393 + + + + + x + 1394 + + + + + x + 1395 + + + + + x + 1396 + + + + + x + 1397 + + + + + x + 1398 + + + + + x + 1399 + + + + + x + 1400 + + + + + x + 1401 + + + + + x + 1402 + + + + + x + 1403 + + + + + x + 1404 + + + + + x + 1405 + + + + + x + 1406 + + + + + x + 1407 + + + + + x + 1408 + + + + + x + 1409 + + + + + x + 1410 + + + + + x + 1411 + + + + + x + 1412 + + + + + x + 1413 + + + + + x + 1414 + + + + + x + 1415 + + + + + x + 1416 + + + + + x + 1417 + + + + + x + 1418 + + + + + x + 1419 + + + + + x + 1420 + + + + + x + 1421 + + + + + x + 1422 + + + + + x + 1423 + + + + + x + 1424 + + + + + x + 1425 + + + + + x + 1426 + + + + + x + 1427 + + + + + x + 1428 + + + + + x + 1429 + + + + + x + 1430 + + + + + x + 1431 + + + + + x + 1432 + + + + + x + 1433 + + + + + x + 1434 + + + + + x + 1435 + + + + + x + 1436 + + + + + x + 1437 + + + + + x + 1438 + + + + + x + 1439 + + + + + x + 1440 + + + + + x + 1441 + + + + + x + 1442 + + + + + x + 1443 + + + + + x + 1444 + + + + + x + 1445 + + + + + x + 1446 + + + + + x + 1447 + + + + + x + 1448 + + + + + x + 1449 + + + + + x + 1450 + + + + + x + 1451 + + + + + x + 1452 + + + + + x + 1453 + + + + + x + 1454 + + + + + x + 1455 + + + + + x + 1456 + + + + + x + 1457 + + + + + x + 1458 + + + + + x + 1459 + + + + + x + 1460 + + + + + x + 1461 + + + + + x + 1462 + + + + + x + 1463 + + + + + x + 1464 + + + + + x + 1465 + + + + + x + 1466 + + + + + x + 1467 + + + + + x + 1468 + + + + + x + 1469 + + + + + x + 1470 + + + + + x + 1471 + + + + + x + 1472 + + + + + x + 1473 + + + + + x + 1474 + + + + + x + 1475 + + + + + x + 1476 + + + + + x + 1477 + + + + + x + 1478 + + + + + x + 1479 + + + + + x + 1480 + + + + + x + 1481 + + + + + x + 1482 + + + + + x + 1483 + + + + + x + 1484 + + + + + x + 1485 + + + + + x + 1486 + + + + + x + 1487 + + + + + x + 1488 + + + + + x + 1489 + + + + + x + 1490 + + + + + x + 1491 + + + + + x + 1492 + + + + + x + 1493 + + + + + x + 1494 + + + + + x + 1495 + + + + + x + 1496 + + + + + x + 1497 + + + + + x + 1498 + + + + + x + 1499 + + + + + x + 1500 + + + + + x + 1501 + + + + + x + 1502 + + + + + x + 1503 + + + + + x + 1504 + + + + + x + 1505 + + + + + x + 1506 + + + + + x + 1507 + + + + + x + 1508 + + + + + x + 1509 + + + + + x + 1510 + + + + + x + 1511 + + + + + x + 1512 + + + + + x + 1513 + + + + + x + 1514 + + + + + x + 1515 + + + + + x + 1516 + + + + + x + 1517 + + + + + x + 1518 + + + + + x + 1519 + + + + + x + 1520 + + + + + x + 1521 + + + + + x + 1522 + + + + + x + 1523 + + + + + x + 1524 + + + + + x + 1525 + + + + + x + 1526 + + + + + x + 1527 + + + + + x + 1528 + + + + + x + 1529 + + + + + x + 1530 + + + + + x + 1531 + + + + + x + 1532 + + + + + x + 1533 + + + + + x + 1534 + + + + + x + 1535 + + + + + x + 1536 + + + + + x + 1537 + + + + + x + 1538 + + + + + x + 1539 + + + + + x + 1540 + + + + + x + 1541 + + + + + x + 1542 + + + + + x + 1543 + + + + + x + 1544 + + + + + x + 1545 + + + + + x + 1546 + + + + + x + 1547 + + + + + x + 1548 + + + + + x + 1549 + + + + + x + 1550 + + + + + x + 1551 + + + + + x + 1552 + + + + + x + 1553 + + + + + x + 1554 + + + + + x + 1555 + + + + + x + 1556 + + + + + x + 1557 + + + + + x + 1558 + + + + + x + 1559 + + + + + x + 1560 + + + + + x + 1561 + + + + + x + 1562 + + + + + x + 1563 + + + + + x + 1564 + + + + + x + 1565 + + + + + x + 1566 + + + + + x + 1567 + + + + + x + 1568 + + + + + x + 1569 + + + + + x + 1570 + + + + + x + 1571 + + + + + x + 1572 + + + + + x + 1573 + + + + + x + 1574 + + + + + x + 1575 + + + + + x + 1576 + + + + + x + 1577 + + + + + x + 1578 + + + + + x + 1579 + + + + + x + 1580 + + + + + x + 1581 + + + + + x + 1582 + + + + + x + 1583 + + + + + x + 1584 + + + + + x + 1585 + + + + + x + 1586 + + + + + x + 1587 + + + + + x + 1588 + + + + + x + 1589 + + + + + x + 1590 + + + + + x + 1591 + + + + + x + 1592 + + + + + x + 1593 + + + + + x + 1594 + + + + + x + 1595 + + + + + x + 1596 + + + + + x + 1597 + + + + + x + 1598 + + + + + x + 1599 + + + + + x + 1600 + + + + + x + 1601 + + + + + x + 1602 + + + + + x + 1603 + + + + + x + 1604 + + + + + x + 1605 + + + + + x + 1606 + + + + + x + 1607 + + + + + x + 1608 + + + + + x + 1609 + + + + + x + 1610 + + + + + x + 1611 + + + + + x + 1612 + + + + + x + 1613 + + + + + x + 1614 + + + + + x + 1615 + + + + + x + 1616 + + + + + x + 1617 + + + + + x + 1618 + + + + + x + 1619 + + + + + x + 1620 + + + + + x + 1621 + + + + + x + 1622 + + + + + x + 1623 + + + + + x + 1624 + + + + + x + 1625 + + + + + x + 1626 + + + + + x + 1627 + + + + + x + 1628 + + + + + x + 1629 + + + + + x + 1630 + + + + + x + 1631 + + + + + x + 1632 + + + + + x + 1633 + + + + + x + 1634 + + + + + x + 1635 + + + + + x + 1636 + + + + + x + 1637 + + + + + x + 1638 + + + + + x + 1639 + + + + + x + 1640 + + + + + x + 1641 + + + + + x + 1642 + + + + + x + 1643 + + + + + x + 1644 + + + + + x + 1645 + + + + + x + 1646 + + + + + x + 1647 + + + + + x + 1648 + + + + + x + 1649 + + + + + x + 1650 + + + + + x + 1651 + + + + + x + 1652 + + + + + x + 1653 + + + + + x + 1654 + + + + + x + 1655 + + + + + x + 1656 + + + + + x + 1657 + + + + + x + 1658 + + + + + x + 1659 + + + + + x + 1660 + + + + + x + 1661 + + + + + x + 1662 + + + + + x + 1663 + + + + + x + 1664 + + + + + x + 1665 + + + + + x + 1666 + + + + + x + 1667 + + + + + x + 1668 + + + + + x + 1669 + + + + + x + 1670 + + + + + x + 1671 + + + + + x + 1672 + + + + + x + 1673 + + + + + x + 1674 + + + + + x + 1675 + + + + + x + 1676 + + + + + x + 1677 + + + + + x + 1678 + + + + + x + 1679 + + + + + x + 1680 + + + + + x + 1681 + + + + + x + 1682 + + + + + x + 1683 + + + + + x + 1684 + + + + + x + 1685 + + + + + x + 1686 + + + + + x + 1687 + + + + + x + 1688 + + + + + x + 1689 + + + + + x + 1690 + + + + + x + 1691 + + + + + x + 1692 + + + + + x + 1693 + + + + + x + 1694 + + + + + x + 1695 + + + + + x + 1696 + + + + + x + 1697 + + + + + x + 1698 + + + + + x + 1699 + + + + + x + 1700 + + + + + x + 1701 + + + + + x + 1702 + + + + + x + 1703 + + + + + x + 1704 + + + + + x + 1705 + + + + + x + 1706 + + + + + x + 1707 + + + + + x + 1708 + + + + + x + 1709 + + + + + x + 1710 + + + + + x + 1711 + + + + + x + 1712 + + + + + x + 1713 + + + + + x + 1714 + + + + + x + 1715 + + + + + x + 1716 + + + + + x + 1717 + + + + + x + 1718 + + + + + x + 1719 + + + + + x + 1720 + + + + + x + 1721 + + + + + x + 1722 + + + + + x + 1723 + + + + + x + 1724 + + + + + x + 1725 + + + + + x + 1726 + + + + + x + 1727 + + + + + x + 1728 + + + + + x + 1729 + + + + + x + 1730 + + + + + x + 1731 + + + + + x + 1732 + + + + + x + 1733 + + + + + x + 1734 + + + + + x + 1735 + + + + + x + 1736 + + + + + x + 1737 + + + + + x + 1738 + + + + + x + 1739 + + + + + x + 1740 + + + + + x + 1741 + + + + + x + 1742 + + + + + x + 1743 + + + + + x + 1744 + + + + + x + 1745 + + + + + x + 1746 + + + + + x + 1747 + + + + + x + 1748 + + + + + x + 1749 + + + + + x + 1750 + + + + + x + 1751 + + + + + x + 1752 + + + + + x + 1753 + + + + + x + 1754 + + + + + x + 1755 + + + + + x + 1756 + + + + + x + 1757 + + + + + x + 1758 + + + + + x + 1759 + + + + + x + 1760 + + + + + x + 1761 + + + + + x + 1762 + + + + + x + 1763 + + + + + x + 1764 + + + + + x + 1765 + + + + + x + 1766 + + + + + x + 1767 + + + + + x + 1768 + + + + + x + 1769 + + + + + x + 1770 + + + + + x + 1771 + + + + + x + 1772 + + + + + x + 1773 + + + + + x + 1774 + + + + + x + 1775 + + + + + x + 1776 + + + + + x + 1777 + + + + + x + 1778 + + + + + x + 1779 + + + + + x + 1780 + + + + + x + 1781 + + + + + x + 1782 + + + + + x + 1783 + + + + + x + 1784 + + + + + x + 1785 + + + + + x + 1786 + + + + + x + 1787 + + + + + x + 1788 + + + + + x + 1789 + + + + + x + 1790 + + + + + x + 1791 + + + + + x + 1792 + + + + + x + 1793 + + + + + x + 1794 + + + + + x + 1795 + + + + + x + 1796 + + + + + x + 1797 + + + + + x + 1798 + + + + + x + 1799 + + + + + x + 1800 + + + + + x + 1801 + + + + + x + 1802 + + + + + x + 1803 + + + + + x + 1804 + + + + + x + 1805 + + + + + x + 1806 + + + + + x + 1807 + + + + + x + 1808 + + + + + x + 1809 + + + + + x + 1810 + + + + + x + 1811 + + + + + x + 1812 + + + + + x + 1813 + + + + + x + 1814 + + + + + x + 1815 + + + + + x + 1816 + + + + + x + 1817 + + + + + x + 1818 + + + + + x + 1819 + + + + + x + 1820 + + + + + x + 1821 + + + + + x + 1822 + + + + + x + 1823 + + + + + x + 1824 + + + + + x + 1825 + + + + + x + 1826 + + + + + x + 1827 + + + + + x + 1828 + + + + + x + 1829 + + + + + x + 1830 + + + + + x + 1831 + + + + + x + 1832 + + + + + x + 1833 + + + + + x + 1834 + + + + + x + 1835 + + + + + x + 1836 + + + + + x + 1837 + + + + + x + 1838 + + + + + x + 1839 + + + + + x + 1840 + + + + + x + 1841 + + + + + x + 1842 + + + + + x + 1843 + + + + + x + 1844 + + + + + x + 1845 + + + + + x + 1846 + + + + + x + 1847 + + + + + x + 1848 + + + + + x + 1849 + + + + + x + 1850 + + + + + x + 1851 + + + + + x + 1852 + + + + + x + 1853 + + + + + x + 1854 + + + + + x + 1855 + + + + + x + 1856 + + + + + x + 1857 + + + + + x + 1858 + + + + + x + 1859 + + + + + x + 1860 + + + + + x + 1861 + + + + + x + 1862 + + + + + x + 1863 + + + + + x + 1864 + + + + + x + 1865 + + + + + x + 1866 + + + + + x + 1867 + + + + + x + 1868 + + + + + x + 1869 + + + + + x + 1870 + + + + + x + 1871 + + + + + x + 1872 + + + + + x + 1873 + + + + + x + 1874 + + + + + x + 1875 + + + + + x + 1876 + + + + + x + 1877 + + + + + x + 1878 + + + + + x + 1879 + + + + + x + 1880 + + + + + x + 1881 + + + + + x + 1882 + + + + + x + 1883 + + + + + x + 1884 + + + + + x + 1885 + + + + + x + 1886 + + + + + x + 1887 + + + + + x + 1888 + + + + + x + 1889 + + + + + x + 1890 + + + + + x + 1891 + + + + + x + 1892 + + + + + x + 1893 + + + + + x + 1894 + + + + + x + 1895 + + + + + x + 1896 + + + + + x + 1897 + + + + + x + 1898 + + + + + x + 1899 + + + + + x + 1900 + + + + + x + 1901 + + + + + x + 1902 + + + + + x + 1903 + + + + + x + 1904 + + + + + x + 1905 + + + + + x + 1906 + + + + + x + 1907 + + + + + x + 1908 + + + + + x + 1909 + + + + + x + 1910 + + + + + x + 1911 + + + + + x + 1912 + + + + + x + 1913 + + + + + x + 1914 + + + + + x + 1915 + + + + + x + 1916 + + + + + x + 1917 + + + + + x + 1918 + + + + + x + 1919 + + + + + x + 1920 + + + + + x + 1921 + + + + + x + 1922 + + + + + x + 1923 + + + + + x + 1924 + + + + + x + 1925 + + + + + x + 1926 + + + + + x + 1927 + + + + + x + 1928 + + + + + x + 1929 + + + + + x + 1930 + + + + + x + 1931 + + + + + x + 1932 + + + + + x + 1933 + + + + + x + 1934 + + + + + x + 1935 + + + + + x + 1936 + + + + + x + 1937 + + + + + x + 1938 + + + + + x + 1939 + + + + + x + 1940 + + + + + x + 1941 + + + + + x + 1942 + + + + + x + 1943 + + + + + x + 1944 + + + + + x + 1945 + + + + + x + 1946 + + + + + x + 1947 + + + + + x + 1948 + + + + + x + 1949 + + + + + x + 1950 + + + + + x + 1951 + + + + + x + 1952 + + + + + x + 1953 + + + + + x + 1954 + + + + + x + 1955 + + + + + x + 1956 + + + + + x + 1957 + + + + + x + 1958 + + + + + x + 1959 + + + + + x + 1960 + + + + + x + 1961 + + + + + x + 1962 + + + + + x + 1963 + + + + + x + 1964 + + + + + x + 1965 + + + + + x + 1966 + + + + + x + 1967 + + + + + x + 1968 + + + + + x + 1969 + + + + + x + 1970 + + + + + x + 1971 + + + + + x + 1972 + + + + + x + 1973 + + + + + x + 1974 + + + + + x + 1975 + + + + + x + 1976 + + + + + x + 1977 + + + + + x + 1978 + + + + + x + 1979 + + + + + x + 1980 + + + + + x + 1981 + + + + + x + 1982 + + + + + x + 1983 + + + + + x + 1984 + + + + + x + 1985 + + + + + x + 1986 + + + + + x + 1987 + + + + + x + 1988 + + + + + x + 1989 + + + + + x + 1990 + + + + + x + 1991 + + + + + x + 1992 + + + + + x + 1993 + + + + + x + 1994 + + + + + x + 1995 + + + + + x + 1996 + + + + + x + 1997 + + + + + x + 1998 + + + + + x + 1999 + + + + + x + 2000 + + + + + x + 2001 + + + + + x + 2002 + + + + + x + 2003 + + + + + x + 2004 + + + + + x + 2005 + + + + + x + 2006 + + + + + x + 2007 + + + + + x + 2008 + + + + + x + 2009 + + + + + x + 2010 + + + + + x + 2011 + + + + + x + 2012 + + + + + x + 2013 + + + + + x + 2014 + + + + + x + 2015 + + + + + x + 2016 + + + + + x + 2017 + + + + + x + 2018 + + + + + x + 2019 + + + + + x + 2020 + + + + + x + 2021 + + + + + x + 2022 + + + + + x + 2023 + + + + + x + 2024 + + + + + x + 2025 + + + + + x + 2026 + + + + + x + 2027 + + + + + x + 2028 + + + + + x + 2029 + + + + + x + 2030 + + + + + x + 2031 + + + + + x + 2032 + + + + + x + 2033 + + + + + x + 2034 + + + + + x + 2035 + + + + + x + 2036 + + + + + x + 2037 + + + + + x + 2038 + + + + + x + 2039 + + + + + x + 2040 + + + + + x + 2041 + + + + + x + 2042 + + + + + x + 2043 + + + + + x + 2044 + + + + + x + 2045 + + + + + x + 2046 + + + + + x + 2047 + + + + + x + 2048 + + + + + + + + x + + + x1 + + + + + x1 + + x + 1 + + + + + + + + x + + + + x + 0 + + + + + diff --git a/bench_horn_mcmc/sn_4096/config b/bench_horn_mcmc/sn_4096/config new file mode 100644 index 000000000..892379dc4 --- /dev/null +++ b/bench_horn_mcmc/sn_4096/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +8193 +-4096 -4095 -4094 -4093 -4092 -4091 -4090 -4089 -4088 -4087 -4086 -4085 -4084 -4083 -4082 -4081 -4080 -4079 -4078 -4077 -4076 -4075 -4074 -4073 -4072 -4071 -4070 -4069 -4068 -4067 -4066 -4065 -4064 -4063 -4062 -4061 -4060 -4059 -4058 -4057 -4056 -4055 -4054 -4053 -4052 -4051 -4050 -4049 -4048 -4047 -4046 -4045 -4044 -4043 -4042 -4041 -4040 -4039 -4038 -4037 -4036 -4035 -4034 -4033 -4032 -4031 -4030 -4029 -4028 -4027 -4026 -4025 -4024 -4023 -4022 -4021 -4020 -4019 -4018 -4017 -4016 -4015 -4014 -4013 -4012 -4011 -4010 -4009 -4008 -4007 -4006 -4005 -4004 -4003 -4002 -4001 -4000 -3999 -3998 -3997 -3996 -3995 -3994 -3993 -3992 -3991 -3990 -3989 -3988 -3987 -3986 -3985 -3984 -3983 -3982 -3981 -3980 -3979 -3978 -3977 -3976 -3975 -3974 -3973 -3972 -3971 -3970 -3969 -3968 -3967 -3966 -3965 -3964 -3963 -3962 -3961 -3960 -3959 -3958 -3957 -3956 -3955 -3954 -3953 -3952 -3951 -3950 -3949 -3948 -3947 -3946 -3945 -3944 -3943 -3942 -3941 -3940 -3939 -3938 -3937 -3936 -3935 -3934 -3933 -3932 -3931 -3930 -3929 -3928 -3927 -3926 -3925 -3924 -3923 -3922 -3921 -3920 -3919 -3918 -3917 -3916 -3915 -3914 -3913 -3912 -3911 -3910 -3909 -3908 -3907 -3906 -3905 -3904 -3903 -3902 -3901 -3900 -3899 -3898 -3897 -3896 -3895 -3894 -3893 -3892 -3891 -3890 -3889 -3888 -3887 -3886 -3885 -3884 -3883 -3882 -3881 -3880 -3879 -3878 -3877 -3876 -3875 -3874 -3873 -3872 -3871 -3870 -3869 -3868 -3867 -3866 -3865 -3864 -3863 -3862 -3861 -3860 -3859 -3858 -3857 -3856 -3855 -3854 -3853 -3852 -3851 -3850 -3849 -3848 -3847 -3846 -3845 -3844 -3843 -3842 -3841 -3840 -3839 -3838 -3837 -3836 -3835 -3834 -3833 -3832 -3831 -3830 -3829 -3828 -3827 -3826 -3825 -3824 -3823 -3822 -3821 -3820 -3819 -3818 -3817 -3816 -3815 -3814 -3813 -3812 -3811 -3810 -3809 -3808 -3807 -3806 -3805 -3804 -3803 -3802 -3801 -3800 -3799 -3798 -3797 -3796 -3795 -3794 -3793 -3792 -3791 -3790 -3789 -3788 -3787 -3786 -3785 -3784 -3783 -3782 -3781 -3780 -3779 -3778 -3777 -3776 -3775 -3774 -3773 -3772 -3771 -3770 -3769 -3768 -3767 -3766 -3765 -3764 -3763 -3762 -3761 -3760 -3759 -3758 -3757 -3756 -3755 -3754 -3753 -3752 -3751 -3750 -3749 -3748 -3747 -3746 -3745 -3744 -3743 -3742 -3741 -3740 -3739 -3738 -3737 -3736 -3735 -3734 -3733 -3732 -3731 -3730 -3729 -3728 -3727 -3726 -3725 -3724 -3723 -3722 -3721 -3720 -3719 -3718 -3717 -3716 -3715 -3714 -3713 -3712 -3711 -3710 -3709 -3708 -3707 -3706 -3705 -3704 -3703 -3702 -3701 -3700 -3699 -3698 -3697 -3696 -3695 -3694 -3693 -3692 -3691 -3690 -3689 -3688 -3687 -3686 -3685 -3684 -3683 -3682 -3681 -3680 -3679 -3678 -3677 -3676 -3675 -3674 -3673 -3672 -3671 -3670 -3669 -3668 -3667 -3666 -3665 -3664 -3663 -3662 -3661 -3660 -3659 -3658 -3657 -3656 -3655 -3654 -3653 -3652 -3651 -3650 -3649 -3648 -3647 -3646 -3645 -3644 -3643 -3642 -3641 -3640 -3639 -3638 -3637 -3636 -3635 -3634 -3633 -3632 -3631 -3630 -3629 -3628 -3627 -3626 -3625 -3624 -3623 -3622 -3621 -3620 -3619 -3618 -3617 -3616 -3615 -3614 -3613 -3612 -3611 -3610 -3609 -3608 -3607 -3606 -3605 -3604 -3603 -3602 -3601 -3600 -3599 -3598 -3597 -3596 -3595 -3594 -3593 -3592 -3591 -3590 -3589 -3588 -3587 -3586 -3585 -3584 -3583 -3582 -3581 -3580 -3579 -3578 -3577 -3576 -3575 -3574 -3573 -3572 -3571 -3570 -3569 -3568 -3567 -3566 -3565 -3564 -3563 -3562 -3561 -3560 -3559 -3558 -3557 -3556 -3555 -3554 -3553 -3552 -3551 -3550 -3549 -3548 -3547 -3546 -3545 -3544 -3543 -3542 -3541 -3540 -3539 -3538 -3537 -3536 -3535 -3534 -3533 -3532 -3531 -3530 -3529 -3528 -3527 -3526 -3525 -3524 -3523 -3522 -3521 -3520 -3519 -3518 -3517 -3516 -3515 -3514 -3513 -3512 -3511 -3510 -3509 -3508 -3507 -3506 -3505 -3504 -3503 -3502 -3501 -3500 -3499 -3498 -3497 -3496 -3495 -3494 -3493 -3492 -3491 -3490 -3489 -3488 -3487 -3486 -3485 -3484 -3483 -3482 -3481 -3480 -3479 -3478 -3477 -3476 -3475 -3474 -3473 -3472 -3471 -3470 -3469 -3468 -3467 -3466 -3465 -3464 -3463 -3462 -3461 -3460 -3459 -3458 -3457 -3456 -3455 -3454 -3453 -3452 -3451 -3450 -3449 -3448 -3447 -3446 -3445 -3444 -3443 -3442 -3441 -3440 -3439 -3438 -3437 -3436 -3435 -3434 -3433 -3432 -3431 -3430 -3429 -3428 -3427 -3426 -3425 -3424 -3423 -3422 -3421 -3420 -3419 -3418 -3417 -3416 -3415 -3414 -3413 -3412 -3411 -3410 -3409 -3408 -3407 -3406 -3405 -3404 -3403 -3402 -3401 -3400 -3399 -3398 -3397 -3396 -3395 -3394 -3393 -3392 -3391 -3390 -3389 -3388 -3387 -3386 -3385 -3384 -3383 -3382 -3381 -3380 -3379 -3378 -3377 -3376 -3375 -3374 -3373 -3372 -3371 -3370 -3369 -3368 -3367 -3366 -3365 -3364 -3363 -3362 -3361 -3360 -3359 -3358 -3357 -3356 -3355 -3354 -3353 -3352 -3351 -3350 -3349 -3348 -3347 -3346 -3345 -3344 -3343 -3342 -3341 -3340 -3339 -3338 -3337 -3336 -3335 -3334 -3333 -3332 -3331 -3330 -3329 -3328 -3327 -3326 -3325 -3324 -3323 -3322 -3321 -3320 -3319 -3318 -3317 -3316 -3315 -3314 -3313 -3312 -3311 -3310 -3309 -3308 -3307 -3306 -3305 -3304 -3303 -3302 -3301 -3300 -3299 -3298 -3297 -3296 -3295 -3294 -3293 -3292 -3291 -3290 -3289 -3288 -3287 -3286 -3285 -3284 -3283 -3282 -3281 -3280 -3279 -3278 -3277 -3276 -3275 -3274 -3273 -3272 -3271 -3270 -3269 -3268 -3267 -3266 -3265 -3264 -3263 -3262 -3261 -3260 -3259 -3258 -3257 -3256 -3255 -3254 -3253 -3252 -3251 -3250 -3249 -3248 -3247 -3246 -3245 -3244 -3243 -3242 -3241 -3240 -3239 -3238 -3237 -3236 -3235 -3234 -3233 -3232 -3231 -3230 -3229 -3228 -3227 -3226 -3225 -3224 -3223 -3222 -3221 -3220 -3219 -3218 -3217 -3216 -3215 -3214 -3213 -3212 -3211 -3210 -3209 -3208 -3207 -3206 -3205 -3204 -3203 -3202 -3201 -3200 -3199 -3198 -3197 -3196 -3195 -3194 -3193 -3192 -3191 -3190 -3189 -3188 -3187 -3186 -3185 -3184 -3183 -3182 -3181 -3180 -3179 -3178 -3177 -3176 -3175 -3174 -3173 -3172 -3171 -3170 -3169 -3168 -3167 -3166 -3165 -3164 -3163 -3162 -3161 -3160 -3159 -3158 -3157 -3156 -3155 -3154 -3153 -3152 -3151 -3150 -3149 -3148 -3147 -3146 -3145 -3144 -3143 -3142 -3141 -3140 -3139 -3138 -3137 -3136 -3135 -3134 -3133 -3132 -3131 -3130 -3129 -3128 -3127 -3126 -3125 -3124 -3123 -3122 -3121 -3120 -3119 -3118 -3117 -3116 -3115 -3114 -3113 -3112 -3111 -3110 -3109 -3108 -3107 -3106 -3105 -3104 -3103 -3102 -3101 -3100 -3099 -3098 -3097 -3096 -3095 -3094 -3093 -3092 -3091 -3090 -3089 -3088 -3087 -3086 -3085 -3084 -3083 -3082 -3081 -3080 -3079 -3078 -3077 -3076 -3075 -3074 -3073 -3072 -3071 -3070 -3069 -3068 -3067 -3066 -3065 -3064 -3063 -3062 -3061 -3060 -3059 -3058 -3057 -3056 -3055 -3054 -3053 -3052 -3051 -3050 -3049 -3048 -3047 -3046 -3045 -3044 -3043 -3042 -3041 -3040 -3039 -3038 -3037 -3036 -3035 -3034 -3033 -3032 -3031 -3030 -3029 -3028 -3027 -3026 -3025 -3024 -3023 -3022 -3021 -3020 -3019 -3018 -3017 -3016 -3015 -3014 -3013 -3012 -3011 -3010 -3009 -3008 -3007 -3006 -3005 -3004 -3003 -3002 -3001 -3000 -2999 -2998 -2997 -2996 -2995 -2994 -2993 -2992 -2991 -2990 -2989 -2988 -2987 -2986 -2985 -2984 -2983 -2982 -2981 -2980 -2979 -2978 -2977 -2976 -2975 -2974 -2973 -2972 -2971 -2970 -2969 -2968 -2967 -2966 -2965 -2964 -2963 -2962 -2961 -2960 -2959 -2958 -2957 -2956 -2955 -2954 -2953 -2952 -2951 -2950 -2949 -2948 -2947 -2946 -2945 -2944 -2943 -2942 -2941 -2940 -2939 -2938 -2937 -2936 -2935 -2934 -2933 -2932 -2931 -2930 -2929 -2928 -2927 -2926 -2925 -2924 -2923 -2922 -2921 -2920 -2919 -2918 -2917 -2916 -2915 -2914 -2913 -2912 -2911 -2910 -2909 -2908 -2907 -2906 -2905 -2904 -2903 -2902 -2901 -2900 -2899 -2898 -2897 -2896 -2895 -2894 -2893 -2892 -2891 -2890 -2889 -2888 -2887 -2886 -2885 -2884 -2883 -2882 -2881 -2880 -2879 -2878 -2877 -2876 -2875 -2874 -2873 -2872 -2871 -2870 -2869 -2868 -2867 -2866 -2865 -2864 -2863 -2862 -2861 -2860 -2859 -2858 -2857 -2856 -2855 -2854 -2853 -2852 -2851 -2850 -2849 -2848 -2847 -2846 -2845 -2844 -2843 -2842 -2841 -2840 -2839 -2838 -2837 -2836 -2835 -2834 -2833 -2832 -2831 -2830 -2829 -2828 -2827 -2826 -2825 -2824 -2823 -2822 -2821 -2820 -2819 -2818 -2817 -2816 -2815 -2814 -2813 -2812 -2811 -2810 -2809 -2808 -2807 -2806 -2805 -2804 -2803 -2802 -2801 -2800 -2799 -2798 -2797 -2796 -2795 -2794 -2793 -2792 -2791 -2790 -2789 -2788 -2787 -2786 -2785 -2784 -2783 -2782 -2781 -2780 -2779 -2778 -2777 -2776 -2775 -2774 -2773 -2772 -2771 -2770 -2769 -2768 -2767 -2766 -2765 -2764 -2763 -2762 -2761 -2760 -2759 -2758 -2757 -2756 -2755 -2754 -2753 -2752 -2751 -2750 -2749 -2748 -2747 -2746 -2745 -2744 -2743 -2742 -2741 -2740 -2739 -2738 -2737 -2736 -2735 -2734 -2733 -2732 -2731 -2730 -2729 -2728 -2727 -2726 -2725 -2724 -2723 -2722 -2721 -2720 -2719 -2718 -2717 -2716 -2715 -2714 -2713 -2712 -2711 -2710 -2709 -2708 -2707 -2706 -2705 -2704 -2703 -2702 -2701 -2700 -2699 -2698 -2697 -2696 -2695 -2694 -2693 -2692 -2691 -2690 -2689 -2688 -2687 -2686 -2685 -2684 -2683 -2682 -2681 -2680 -2679 -2678 -2677 -2676 -2675 -2674 -2673 -2672 -2671 -2670 -2669 -2668 -2667 -2666 -2665 -2664 -2663 -2662 -2661 -2660 -2659 -2658 -2657 -2656 -2655 -2654 -2653 -2652 -2651 -2650 -2649 -2648 -2647 -2646 -2645 -2644 -2643 -2642 -2641 -2640 -2639 -2638 -2637 -2636 -2635 -2634 -2633 -2632 -2631 -2630 -2629 -2628 -2627 -2626 -2625 -2624 -2623 -2622 -2621 -2620 -2619 -2618 -2617 -2616 -2615 -2614 -2613 -2612 -2611 -2610 -2609 -2608 -2607 -2606 -2605 -2604 -2603 -2602 -2601 -2600 -2599 -2598 -2597 -2596 -2595 -2594 -2593 -2592 -2591 -2590 -2589 -2588 -2587 -2586 -2585 -2584 -2583 -2582 -2581 -2580 -2579 -2578 -2577 -2576 -2575 -2574 -2573 -2572 -2571 -2570 -2569 -2568 -2567 -2566 -2565 -2564 -2563 -2562 -2561 -2560 -2559 -2558 -2557 -2556 -2555 -2554 -2553 -2552 -2551 -2550 -2549 -2548 -2547 -2546 -2545 -2544 -2543 -2542 -2541 -2540 -2539 -2538 -2537 -2536 -2535 -2534 -2533 -2532 -2531 -2530 -2529 -2528 -2527 -2526 -2525 -2524 -2523 -2522 -2521 -2520 -2519 -2518 -2517 -2516 -2515 -2514 -2513 -2512 -2511 -2510 -2509 -2508 -2507 -2506 -2505 -2504 -2503 -2502 -2501 -2500 -2499 -2498 -2497 -2496 -2495 -2494 -2493 -2492 -2491 -2490 -2489 -2488 -2487 -2486 -2485 -2484 -2483 -2482 -2481 -2480 -2479 -2478 -2477 -2476 -2475 -2474 -2473 -2472 -2471 -2470 -2469 -2468 -2467 -2466 -2465 -2464 -2463 -2462 -2461 -2460 -2459 -2458 -2457 -2456 -2455 -2454 -2453 -2452 -2451 -2450 -2449 -2448 -2447 -2446 -2445 -2444 -2443 -2442 -2441 -2440 -2439 -2438 -2437 -2436 -2435 -2434 -2433 -2432 -2431 -2430 -2429 -2428 -2427 -2426 -2425 -2424 -2423 -2422 -2421 -2420 -2419 -2418 -2417 -2416 -2415 -2414 -2413 -2412 -2411 -2410 -2409 -2408 -2407 -2406 -2405 -2404 -2403 -2402 -2401 -2400 -2399 -2398 -2397 -2396 -2395 -2394 -2393 -2392 -2391 -2390 -2389 -2388 -2387 -2386 -2385 -2384 -2383 -2382 -2381 -2380 -2379 -2378 -2377 -2376 -2375 -2374 -2373 -2372 -2371 -2370 -2369 -2368 -2367 -2366 -2365 -2364 -2363 -2362 -2361 -2360 -2359 -2358 -2357 -2356 -2355 -2354 -2353 -2352 -2351 -2350 -2349 -2348 -2347 -2346 -2345 -2344 -2343 -2342 -2341 -2340 -2339 -2338 -2337 -2336 -2335 -2334 -2333 -2332 -2331 -2330 -2329 -2328 -2327 -2326 -2325 -2324 -2323 -2322 -2321 -2320 -2319 -2318 -2317 -2316 -2315 -2314 -2313 -2312 -2311 -2310 -2309 -2308 -2307 -2306 -2305 -2304 -2303 -2302 -2301 -2300 -2299 -2298 -2297 -2296 -2295 -2294 -2293 -2292 -2291 -2290 -2289 -2288 -2287 -2286 -2285 -2284 -2283 -2282 -2281 -2280 -2279 -2278 -2277 -2276 -2275 -2274 -2273 -2272 -2271 -2270 -2269 -2268 -2267 -2266 -2265 -2264 -2263 -2262 -2261 -2260 -2259 -2258 -2257 -2256 -2255 -2254 -2253 -2252 -2251 -2250 -2249 -2248 -2247 -2246 -2245 -2244 -2243 -2242 -2241 -2240 -2239 -2238 -2237 -2236 -2235 -2234 -2233 -2232 -2231 -2230 -2229 -2228 -2227 -2226 -2225 -2224 -2223 -2222 -2221 -2220 -2219 -2218 -2217 -2216 -2215 -2214 -2213 -2212 -2211 -2210 -2209 -2208 -2207 -2206 -2205 -2204 -2203 -2202 -2201 -2200 -2199 -2198 -2197 -2196 -2195 -2194 -2193 -2192 -2191 -2190 -2189 -2188 -2187 -2186 -2185 -2184 -2183 -2182 -2181 -2180 -2179 -2178 -2177 -2176 -2175 -2174 -2173 -2172 -2171 -2170 -2169 -2168 -2167 -2166 -2165 -2164 -2163 -2162 -2161 -2160 -2159 -2158 -2157 -2156 -2155 -2154 -2153 -2152 -2151 -2150 -2149 -2148 -2147 -2146 -2145 -2144 -2143 -2142 -2141 -2140 -2139 -2138 -2137 -2136 -2135 -2134 -2133 -2132 -2131 -2130 -2129 -2128 -2127 -2126 -2125 -2124 -2123 -2122 -2121 -2120 -2119 -2118 -2117 -2116 -2115 -2114 -2113 -2112 -2111 -2110 -2109 -2108 -2107 -2106 -2105 -2104 -2103 -2102 -2101 -2100 -2099 -2098 -2097 -2096 -2095 -2094 -2093 -2092 -2091 -2090 -2089 -2088 -2087 -2086 -2085 -2084 -2083 -2082 -2081 -2080 -2079 -2078 -2077 -2076 -2075 -2074 -2073 -2072 -2071 -2070 -2069 -2068 -2067 -2066 -2065 -2064 -2063 -2062 -2061 -2060 -2059 -2058 -2057 -2056 -2055 -2054 -2053 -2052 -2051 -2050 -2049 -2048 -2047 -2046 -2045 -2044 -2043 -2042 -2041 -2040 -2039 -2038 -2037 -2036 -2035 -2034 -2033 -2032 -2031 -2030 -2029 -2028 -2027 -2026 -2025 -2024 -2023 -2022 -2021 -2020 -2019 -2018 -2017 -2016 -2015 -2014 -2013 -2012 -2011 -2010 -2009 -2008 -2007 -2006 -2005 -2004 -2003 -2002 -2001 -2000 -1999 -1998 -1997 -1996 -1995 -1994 -1993 -1992 -1991 -1990 -1989 -1988 -1987 -1986 -1985 -1984 -1983 -1982 -1981 -1980 -1979 -1978 -1977 -1976 -1975 -1974 -1973 -1972 -1971 -1970 -1969 -1968 -1967 -1966 -1965 -1964 -1963 -1962 -1961 -1960 -1959 -1958 -1957 -1956 -1955 -1954 -1953 -1952 -1951 -1950 -1949 -1948 -1947 -1946 -1945 -1944 -1943 -1942 -1941 -1940 -1939 -1938 -1937 -1936 -1935 -1934 -1933 -1932 -1931 -1930 -1929 -1928 -1927 -1926 -1925 -1924 -1923 -1922 -1921 -1920 -1919 -1918 -1917 -1916 -1915 -1914 -1913 -1912 -1911 -1910 -1909 -1908 -1907 -1906 -1905 -1904 -1903 -1902 -1901 -1900 -1899 -1898 -1897 -1896 -1895 -1894 -1893 -1892 -1891 -1890 -1889 -1888 -1887 -1886 -1885 -1884 -1883 -1882 -1881 -1880 -1879 -1878 -1877 -1876 -1875 -1874 -1873 -1872 -1871 -1870 -1869 -1868 -1867 -1866 -1865 -1864 -1863 -1862 -1861 -1860 -1859 -1858 -1857 -1856 -1855 -1854 -1853 -1852 -1851 -1850 -1849 -1848 -1847 -1846 -1845 -1844 -1843 -1842 -1841 -1840 -1839 -1838 -1837 -1836 -1835 -1834 -1833 -1832 -1831 -1830 -1829 -1828 -1827 -1826 -1825 -1824 -1823 -1822 -1821 -1820 -1819 -1818 -1817 -1816 -1815 -1814 -1813 -1812 -1811 -1810 -1809 -1808 -1807 -1806 -1805 -1804 -1803 -1802 -1801 -1800 -1799 -1798 -1797 -1796 -1795 -1794 -1793 -1792 -1791 -1790 -1789 -1788 -1787 -1786 -1785 -1784 -1783 -1782 -1781 -1780 -1779 -1778 -1777 -1776 -1775 -1774 -1773 -1772 -1771 -1770 -1769 -1768 -1767 -1766 -1765 -1764 -1763 -1762 -1761 -1760 -1759 -1758 -1757 -1756 -1755 -1754 -1753 -1752 -1751 -1750 -1749 -1748 -1747 -1746 -1745 -1744 -1743 -1742 -1741 -1740 -1739 -1738 -1737 -1736 -1735 -1734 -1733 -1732 -1731 -1730 -1729 -1728 -1727 -1726 -1725 -1724 -1723 -1722 -1721 -1720 -1719 -1718 -1717 -1716 -1715 -1714 -1713 -1712 -1711 -1710 -1709 -1708 -1707 -1706 -1705 -1704 -1703 -1702 -1701 -1700 -1699 -1698 -1697 -1696 -1695 -1694 -1693 -1692 -1691 -1690 -1689 -1688 -1687 -1686 -1685 -1684 -1683 -1682 -1681 -1680 -1679 -1678 -1677 -1676 -1675 -1674 -1673 -1672 -1671 -1670 -1669 -1668 -1667 -1666 -1665 -1664 -1663 -1662 -1661 -1660 -1659 -1658 -1657 -1656 -1655 -1654 -1653 -1652 -1651 -1650 -1649 -1648 -1647 -1646 -1645 -1644 -1643 -1642 -1641 -1640 -1639 -1638 -1637 -1636 -1635 -1634 -1633 -1632 -1631 -1630 -1629 -1628 -1627 -1626 -1625 -1624 -1623 -1622 -1621 -1620 -1619 -1618 -1617 -1616 -1615 -1614 -1613 -1612 -1611 -1610 -1609 -1608 -1607 -1606 -1605 -1604 -1603 -1602 -1601 -1600 -1599 -1598 -1597 -1596 -1595 -1594 -1593 -1592 -1591 -1590 -1589 -1588 -1587 -1586 -1585 -1584 -1583 -1582 -1581 -1580 -1579 -1578 -1577 -1576 -1575 -1574 -1573 -1572 -1571 -1570 -1569 -1568 -1567 -1566 -1565 -1564 -1563 -1562 -1561 -1560 -1559 -1558 -1557 -1556 -1555 -1554 -1553 -1552 -1551 -1550 -1549 -1548 -1547 -1546 -1545 -1544 -1543 -1542 -1541 -1540 -1539 -1538 -1537 -1536 -1535 -1534 -1533 -1532 -1531 -1530 -1529 -1528 -1527 -1526 -1525 -1524 -1523 -1522 -1521 -1520 -1519 -1518 -1517 -1516 -1515 -1514 -1513 -1512 -1511 -1510 -1509 -1508 -1507 -1506 -1505 -1504 -1503 -1502 -1501 -1500 -1499 -1498 -1497 -1496 -1495 -1494 -1493 -1492 -1491 -1490 -1489 -1488 -1487 -1486 -1485 -1484 -1483 -1482 -1481 -1480 -1479 -1478 -1477 -1476 -1475 -1474 -1473 -1472 -1471 -1470 -1469 -1468 -1467 -1466 -1465 -1464 -1463 -1462 -1461 -1460 -1459 -1458 -1457 -1456 -1455 -1454 -1453 -1452 -1451 -1450 -1449 -1448 -1447 -1446 -1445 -1444 -1443 -1442 -1441 -1440 -1439 -1438 -1437 -1436 -1435 -1434 -1433 -1432 -1431 -1430 -1429 -1428 -1427 -1426 -1425 -1424 -1423 -1422 -1421 -1420 -1419 -1418 -1417 -1416 -1415 -1414 -1413 -1412 -1411 -1410 -1409 -1408 -1407 -1406 -1405 -1404 -1403 -1402 -1401 -1400 -1399 -1398 -1397 -1396 -1395 -1394 -1393 -1392 -1391 -1390 -1389 -1388 -1387 -1386 -1385 -1384 -1383 -1382 -1381 -1380 -1379 -1378 -1377 -1376 -1375 -1374 -1373 -1372 -1371 -1370 -1369 -1368 -1367 -1366 -1365 -1364 -1363 -1362 -1361 -1360 -1359 -1358 -1357 -1356 -1355 -1354 -1353 -1352 -1351 -1350 -1349 -1348 -1347 -1346 -1345 -1344 -1343 -1342 -1341 -1340 -1339 -1338 -1337 -1336 -1335 -1334 -1333 -1332 -1331 -1330 -1329 -1328 -1327 -1326 -1325 -1324 -1323 -1322 -1321 -1320 -1319 -1318 -1317 -1316 -1315 -1314 -1313 -1312 -1311 -1310 -1309 -1308 -1307 -1306 -1305 -1304 -1303 -1302 -1301 -1300 -1299 -1298 -1297 -1296 -1295 -1294 -1293 -1292 -1291 -1290 -1289 -1288 -1287 -1286 -1285 -1284 -1283 -1282 -1281 -1280 -1279 -1278 -1277 -1276 -1275 -1274 -1273 -1272 -1271 -1270 -1269 -1268 -1267 -1266 -1265 -1264 -1263 -1262 -1261 -1260 -1259 -1258 -1257 -1256 -1255 -1254 -1253 -1252 -1251 -1250 -1249 -1248 -1247 -1246 -1245 -1244 -1243 -1242 -1241 -1240 -1239 -1238 -1237 -1236 -1235 -1234 -1233 -1232 -1231 -1230 -1229 -1228 -1227 -1226 -1225 -1224 -1223 -1222 -1221 -1220 -1219 -1218 -1217 -1216 -1215 -1214 -1213 -1212 -1211 -1210 -1209 -1208 -1207 -1206 -1205 -1204 -1203 -1202 -1201 -1200 -1199 -1198 -1197 -1196 -1195 -1194 -1193 -1192 -1191 -1190 -1189 -1188 -1187 -1186 -1185 -1184 -1183 -1182 -1181 -1180 -1179 -1178 -1177 -1176 -1175 -1174 -1173 -1172 -1171 -1170 -1169 -1168 -1167 -1166 -1165 -1164 -1163 -1162 -1161 -1160 -1159 -1158 -1157 -1156 -1155 -1154 -1153 -1152 -1151 -1150 -1149 -1148 -1147 -1146 -1145 -1144 -1143 -1142 -1141 -1140 -1139 -1138 -1137 -1136 -1135 -1134 -1133 -1132 -1131 -1130 -1129 -1128 -1127 -1126 -1125 -1124 -1123 -1122 -1121 -1120 -1119 -1118 -1117 -1116 -1115 -1114 -1113 -1112 -1111 -1110 -1109 -1108 -1107 -1106 -1105 -1104 -1103 -1102 -1101 -1100 -1099 -1098 -1097 -1096 -1095 -1094 -1093 -1092 -1091 -1090 -1089 -1088 -1087 -1086 -1085 -1084 -1083 -1082 -1081 -1080 -1079 -1078 -1077 -1076 -1075 -1074 -1073 -1072 -1071 -1070 -1069 -1068 -1067 -1066 -1065 -1064 -1063 -1062 -1061 -1060 -1059 -1058 -1057 -1056 -1055 -1054 -1053 -1052 -1051 -1050 -1049 -1048 -1047 -1046 -1045 -1044 -1043 -1042 -1041 -1040 -1039 -1038 -1037 -1036 -1035 -1034 -1033 -1032 -1031 -1030 -1029 -1028 -1027 -1026 -1025 -1024 -1023 -1022 -1021 -1020 -1019 -1018 -1017 -1016 -1015 -1014 -1013 -1012 -1011 -1010 -1009 -1008 -1007 -1006 -1005 -1004 -1003 -1002 -1001 -1000 -999 -998 -997 -996 -995 -994 -993 -992 -991 -990 -989 -988 -987 -986 -985 -984 -983 -982 -981 -980 -979 -978 -977 -976 -975 -974 -973 -972 -971 -970 -969 -968 -967 -966 -965 -964 -963 -962 -961 -960 -959 -958 -957 -956 -955 -954 -953 -952 -951 -950 -949 -948 -947 -946 -945 -944 -943 -942 -941 -940 -939 -938 -937 -936 -935 -934 -933 -932 -931 -930 -929 -928 -927 -926 -925 -924 -923 -922 -921 -920 -919 -918 -917 -916 -915 -914 -913 -912 -911 -910 -909 -908 -907 -906 -905 -904 -903 -902 -901 -900 -899 -898 -897 -896 -895 -894 -893 -892 -891 -890 -889 -888 -887 -886 -885 -884 -883 -882 -881 -880 -879 -878 -877 -876 -875 -874 -873 -872 -871 -870 -869 -868 -867 -866 -865 -864 -863 -862 -861 -860 -859 -858 -857 -856 -855 -854 -853 -852 -851 -850 -849 -848 -847 -846 -845 -844 -843 -842 -841 -840 -839 -838 -837 -836 -835 -834 -833 -832 -831 -830 -829 -828 -827 -826 -825 -824 -823 -822 -821 -820 -819 -818 -817 -816 -815 -814 -813 -812 -811 -810 -809 -808 -807 -806 -805 -804 -803 -802 -801 -800 -799 -798 -797 -796 -795 -794 -793 -792 -791 -790 -789 -788 -787 -786 -785 -784 -783 -782 -781 -780 -779 -778 -777 -776 -775 -774 -773 -772 -771 -770 -769 -768 -767 -766 -765 -764 -763 -762 -761 -760 -759 -758 -757 -756 -755 -754 -753 -752 -751 -750 -749 -748 -747 -746 -745 -744 -743 -742 -741 -740 -739 -738 -737 -736 -735 -734 -733 -732 -731 -730 -729 -728 -727 -726 -725 -724 -723 -722 -721 -720 -719 -718 -717 -716 -715 -714 -713 -712 -711 -710 -709 -708 -707 -706 -705 -704 -703 -702 -701 -700 -699 -698 -697 -696 -695 -694 -693 -692 -691 -690 -689 -688 -687 -686 -685 -684 -683 -682 -681 -680 -679 -678 -677 -676 -675 -674 -673 -672 -671 -670 -669 -668 -667 -666 -665 -664 -663 -662 -661 -660 -659 -658 -657 -656 -655 -654 -653 -652 -651 -650 -649 -648 -647 -646 -645 -644 -643 -642 -641 -640 -639 -638 -637 -636 -635 -634 -633 -632 -631 -630 -629 -628 -627 -626 -625 -624 -623 -622 -621 -620 -619 -618 -617 -616 -615 -614 -613 -612 -611 -610 -609 -608 -607 -606 -605 -604 -603 -602 -601 -600 -599 -598 -597 -596 -595 -594 -593 -592 -591 -590 -589 -588 -587 -586 -585 -584 -583 -582 -581 -580 -579 -578 -577 -576 -575 -574 -573 -572 -571 -570 -569 -568 -567 -566 -565 -564 -563 -562 -561 -560 -559 -558 -557 -556 -555 -554 -553 -552 -551 -550 -549 -548 -547 -546 -545 -544 -543 -542 -541 -540 -539 -538 -537 -536 -535 -534 -533 -532 -531 -530 -529 -528 -527 -526 -525 -524 -523 -522 -521 -520 -519 -518 -517 -516 -515 -514 -513 -512 -511 -510 -509 -508 -507 -506 -505 -504 -503 -502 -501 -500 -499 -498 -497 -496 -495 -494 -493 -492 -491 -490 -489 -488 -487 -486 -485 -484 -483 -482 -481 -480 -479 -478 -477 -476 -475 -474 -473 -472 -471 -470 -469 -468 -467 -466 -465 -464 -463 -462 -461 -460 -459 -458 -457 -456 -455 -454 -453 -452 -451 -450 -449 -448 -447 -446 -445 -444 -443 -442 -441 -440 -439 -438 -437 -436 -435 -434 -433 -432 -431 -430 -429 -428 -427 -426 -425 -424 -423 -422 -421 -420 -419 -418 -417 -416 -415 -414 -413 -412 -411 -410 -409 -408 -407 -406 -405 -404 -403 -402 -401 -400 -399 -398 -397 -396 -395 -394 -393 -392 -391 -390 -389 -388 -387 -386 -385 -384 -383 -382 -381 -380 -379 -378 -377 -376 -375 -374 -373 -372 -371 -370 -369 -368 -367 -366 -365 -364 -363 -362 -361 -360 -359 -358 -357 -356 -355 -354 -353 -352 -351 -350 -349 -348 -347 -346 -345 -344 -343 -342 -341 -340 -339 -338 -337 -336 -335 -334 -333 -332 -331 -330 -329 -328 -327 -326 -325 -324 -323 -322 -321 -320 -319 -318 -317 -316 -315 -314 -313 -312 -311 -310 -309 -308 -307 -306 -305 -304 -303 -302 -301 -300 -299 -298 -297 -296 -295 -294 -293 -292 -291 -290 -289 -288 -287 -286 -285 -284 -283 -282 -281 -280 -279 -278 -277 -276 -275 -274 -273 -272 -271 -270 -269 -268 -267 -266 -265 -264 -263 -262 -261 -260 -259 -258 -257 -256 -255 -254 -253 -252 -251 -250 -249 -248 -247 -246 -245 -244 -243 -242 -241 -240 -239 -238 -237 -236 -235 -234 -233 -232 -231 -230 -229 -228 -227 -226 -225 -224 -223 -222 -221 -220 -219 -218 -217 -216 -215 -214 -213 -212 -211 -210 -209 -208 -207 -206 -205 -204 -203 -202 -201 -200 -199 -198 -197 -196 -195 -194 -193 -192 -191 -190 -189 -188 -187 -186 -185 -184 -183 -182 -181 -180 -179 -178 -177 -176 -175 -174 -173 -172 -171 -170 -169 -168 -167 -166 -165 -164 -163 -162 -161 -160 -159 -158 -157 -156 -155 -154 -153 -152 -151 -150 -149 -148 -147 -146 -145 -144 -143 -142 -141 -140 -139 -138 -137 -136 -135 -134 -133 -132 -131 -130 -129 -128 -127 -126 -125 -124 -123 -122 -121 -120 -119 -118 -117 -116 -115 -114 -113 -112 -111 -110 -109 -108 -107 -106 -105 -104 -103 -102 -101 -100 -99 -98 -97 -96 -95 -94 -93 -92 -91 -90 -89 -88 -87 -86 -85 -84 -83 -82 -81 -80 -79 -78 -77 -76 -75 -74 -73 -72 -71 -70 -69 -68 -67 -66 -65 -64 -63 -62 -61 -60 -59 -58 -57 -56 -55 -54 -53 -52 -51 -50 -49 -48 -47 -46 -45 -44 -43 -42 -41 -40 -39 -38 -37 -36 -35 -34 -33 -32 -31 -30 -29 -28 -27 -26 -25 -24 -23 -22 -21 -20 -19 -18 -17 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/sn_4096/first.xml b/bench_horn_mcmc/sn_4096/first.xml new file mode 100644 index 000000000..65060a2c1 --- /dev/null +++ b/bench_horn_mcmc/sn_4096/first.xml @@ -0,0 +1,24635 @@ + + + + + 1 + itp + + + + x + x1 + + + + x + + + + + + x + 1 + + + + + x + 2 + + + + + x + 3 + + + + + x + 4 + + + + + x + 5 + + + + + x + 6 + + + + + x + 7 + + + + + x + 8 + + + + + x + 9 + + + + + x + 10 + + + + + x + 11 + + + + + x + 12 + + + + + x + 13 + + + + + x + 14 + + + + + x + 15 + + + + + x + 16 + + + + + x + 17 + + + + + x + 18 + + + + + x + 19 + + + + + x + 20 + + + + + x + 21 + + + + + x + 22 + + + + + x + 23 + + + + + x + 24 + + + + + x + 25 + + + + + x + 26 + + + + + x + 27 + + + + + x + 28 + + + + + x + 29 + + + + + x + 30 + + + + + x + 31 + + + + + x + 32 + + + + + x + 33 + + + + + x + 34 + + + + + x + 35 + + + + + x + 36 + + + + + x + 37 + + + + + x + 38 + + + + + x + 39 + + + + + x + 40 + + + + + x + 41 + + + + + x + 42 + + + + + x + 43 + + + + + x + 44 + + + + + x + 45 + + + + + x + 46 + + + + + x + 47 + + + + + x + 48 + + + + + x + 49 + + + + + x + 50 + + + + + x + 51 + + + + + x + 52 + + + + + x + 53 + + + + + x + 54 + + + + + x + 55 + + + + + x + 56 + + + + + x + 57 + + + + + x + 58 + + + + + x + 59 + + + + + x + 60 + + + + + x + 61 + + + + + x + 62 + + + + + x + 63 + + + + + x + 64 + + + + + x + 65 + + + + + x + 66 + + + + + x + 67 + + + + + x + 68 + + + + + x + 69 + + + + + x + 70 + + + + + x + 71 + + + + + x + 72 + + + + + x + 73 + + + + + x + 74 + + + + + x + 75 + + + + + x + 76 + + + + + x + 77 + + + + + x + 78 + + + + + x + 79 + + + + + x + 80 + + + + + x + 81 + + + + + x + 82 + + + + + x + 83 + + + + + x + 84 + + + + + x + 85 + + + + + x + 86 + + + + + x + 87 + + + + + x + 88 + + + + + x + 89 + + + + + x + 90 + + + + + x + 91 + + + + + x + 92 + + + + + x + 93 + + + + + x + 94 + + + + + x + 95 + + + + + x + 96 + + + + + x + 97 + + + + + x + 98 + + + + + x + 99 + + + + + x + 100 + + + + + x + 101 + + + + + x + 102 + + + + + x + 103 + + + + + x + 104 + + + + + x + 105 + + + + + x + 106 + + + + + x + 107 + + + + + x + 108 + + + + + x + 109 + + + + + x + 110 + + + + + x + 111 + + + + + x + 112 + + + + + x + 113 + + + + + x + 114 + + + + + x + 115 + + + + + x + 116 + + + + + x + 117 + + + + + x + 118 + + + + + x + 119 + + + + + x + 120 + + + + + x + 121 + + + + + x + 122 + + + + + x + 123 + + + + + x + 124 + + + + + x + 125 + + + + + x + 126 + + + + + x + 127 + + + + + x + 128 + + + + + x + 129 + + + + + x + 130 + + + + + x + 131 + + + + + x + 132 + + + + + x + 133 + + + + + x + 134 + + + + + x + 135 + + + + + x + 136 + + + + + x + 137 + + + + + x + 138 + + + + + x + 139 + + + + + x + 140 + + + + + x + 141 + + + + + x + 142 + + + + + x + 143 + + + + + x + 144 + + + + + x + 145 + + + + + x + 146 + + + + + x + 147 + + + + + x + 148 + + + + + x + 149 + + + + + x + 150 + + + + + x + 151 + + + + + x + 152 + + + + + x + 153 + + + + + x + 154 + + + + + x + 155 + + + + + x + 156 + + + + + x + 157 + + + + + x + 158 + + + + + x + 159 + + + + + x + 160 + + + + + x + 161 + + + + + x + 162 + + + + + x + 163 + + + + + x + 164 + + + + + x + 165 + + + + + x + 166 + + + + + x + 167 + + + + + x + 168 + + + + + x + 169 + + + + + x + 170 + + + + + x + 171 + + + + + x + 172 + + + + + x + 173 + + + + + x + 174 + + + + + x + 175 + + + + + x + 176 + + + + + x + 177 + + + + + x + 178 + + + + + x + 179 + + + + + x + 180 + + + + + x + 181 + + + + + x + 182 + + + + + x + 183 + + + + + x + 184 + + + + + x + 185 + + + + + x + 186 + + + + + x + 187 + + + + + x + 188 + + + + + x + 189 + + + + + x + 190 + + + + + x + 191 + + + + + x + 192 + + + + + x + 193 + + + + + x + 194 + + + + + x + 195 + + + + + x + 196 + + + + + x + 197 + + + + + x + 198 + + + + + x + 199 + + + + + x + 200 + + + + + x + 201 + + + + + x + 202 + + + + + x + 203 + + + + + x + 204 + + + + + x + 205 + + + + + x + 206 + + + + + x + 207 + + + + + x + 208 + + + + + x + 209 + + + + + x + 210 + + + + + x + 211 + + + + + x + 212 + + + + + x + 213 + + + + + x + 214 + + + + + x + 215 + + + + + x + 216 + + + + + x + 217 + + + + + x + 218 + + + + + x + 219 + + + + + x + 220 + + + + + x + 221 + + + + + x + 222 + + + + + x + 223 + + + + + x + 224 + + + + + x + 225 + + + + + x + 226 + + + + + x + 227 + + + + + x + 228 + + + + + x + 229 + + + + + x + 230 + + + + + x + 231 + + + + + x + 232 + + + + + x + 233 + + + + + x + 234 + + + + + x + 235 + + + + + x + 236 + + + + + x + 237 + + + + + x + 238 + + + + + x + 239 + + + + + x + 240 + + + + + x + 241 + + + + + x + 242 + + + + + x + 243 + + + + + x + 244 + + + + + x + 245 + + + + + x + 246 + + + + + x + 247 + + + + + x + 248 + + + + + x + 249 + + + + + x + 250 + + + + + x + 251 + + + + + x + 252 + + + + + x + 253 + + + + + x + 254 + + + + + x + 255 + + + + + x + 256 + + + + + x + 257 + + + + + x + 258 + + + + + x + 259 + + + + + x + 260 + + + + + x + 261 + + + + + x + 262 + + + + + x + 263 + + + + + x + 264 + + + + + x + 265 + + + + + x + 266 + + + + + x + 267 + + + + + x + 268 + + + + + x + 269 + + + + + x + 270 + + + + + x + 271 + + + + + x + 272 + + + + + x + 273 + + + + + x + 274 + + + + + x + 275 + + + + + x + 276 + + + + + x + 277 + + + + + x + 278 + + + + + x + 279 + + + + + x + 280 + + + + + x + 281 + + + + + x + 282 + + + + + x + 283 + + + + + x + 284 + + + + + x + 285 + + + + + x + 286 + + + + + x + 287 + + + + + x + 288 + + + + + x + 289 + + + + + x + 290 + + + + + x + 291 + + + + + x + 292 + + + + + x + 293 + + + + + x + 294 + + + + + x + 295 + + + + + x + 296 + + + + + x + 297 + + + + + x + 298 + + + + + x + 299 + + + + + x + 300 + + + + + x + 301 + + + + + x + 302 + + + + + x + 303 + + + + + x + 304 + + + + + x + 305 + + + + + x + 306 + + + + + x + 307 + + + + + x + 308 + + + + + x + 309 + + + + + x + 310 + + + + + x + 311 + + + + + x + 312 + + + + + x + 313 + + + + + x + 314 + + + + + x + 315 + + + + + x + 316 + + + + + x + 317 + + + + + x + 318 + + + + + x + 319 + + + + + x + 320 + + + + + x + 321 + + + + + x + 322 + + + + + x + 323 + + + + + x + 324 + + + + + x + 325 + + + + + x + 326 + + + + + x + 327 + + + + + x + 328 + + + + + x + 329 + + + + + x + 330 + + + + + x + 331 + + + + + x + 332 + + + + + x + 333 + + + + + x + 334 + + + + + x + 335 + + + + + x + 336 + + + + + x + 337 + + + + + x + 338 + + + + + x + 339 + + + + + x + 340 + + + + + x + 341 + + + + + x + 342 + + + + + x + 343 + + + + + x + 344 + + + + + x + 345 + + + + + x + 346 + + + + + x + 347 + + + + + x + 348 + + + + + x + 349 + + + + + x + 350 + + + + + x + 351 + + + + + x + 352 + + + + + x + 353 + + + + + x + 354 + + + + + x + 355 + + + + + x + 356 + + + + + x + 357 + + + + + x + 358 + + + + + x + 359 + + + + + x + 360 + + + + + x + 361 + + + + + x + 362 + + + + + x + 363 + + + + + x + 364 + + + + + x + 365 + + + + + x + 366 + + + + + x + 367 + + + + + x + 368 + + + + + x + 369 + + + + + x + 370 + + + + + x + 371 + + + + + x + 372 + + + + + x + 373 + + + + + x + 374 + + + + + x + 375 + + + + + x + 376 + + + + + x + 377 + + + + + x + 378 + + + + + x + 379 + + + + + x + 380 + + + + + x + 381 + + + + + x + 382 + + + + + x + 383 + + + + + x + 384 + + + + + x + 385 + + + + + x + 386 + + + + + x + 387 + + + + + x + 388 + + + + + x + 389 + + + + + x + 390 + + + + + x + 391 + + + + + x + 392 + + + + + x + 393 + + + + + x + 394 + + + + + x + 395 + + + + + x + 396 + + + + + x + 397 + + + + + x + 398 + + + + + x + 399 + + + + + x + 400 + + + + + x + 401 + + + + + x + 402 + + + + + x + 403 + + + + + x + 404 + + + + + x + 405 + + + + + x + 406 + + + + + x + 407 + + + + + x + 408 + + + + + x + 409 + + + + + x + 410 + + + + + x + 411 + + + + + x + 412 + + + + + x + 413 + + + + + x + 414 + + + + + x + 415 + + + + + x + 416 + + + + + x + 417 + + + + + x + 418 + + + + + x + 419 + + + + + x + 420 + + + + + x + 421 + + + + + x + 422 + + + + + x + 423 + + + + + x + 424 + + + + + x + 425 + + + + + x + 426 + + + + + x + 427 + + + + + x + 428 + + + + + x + 429 + + + + + x + 430 + + + + + x + 431 + + + + + x + 432 + + + + + x + 433 + + + + + x + 434 + + + + + x + 435 + + + + + x + 436 + + + + + x + 437 + + + + + x + 438 + + + + + x + 439 + + + + + x + 440 + + + + + x + 441 + + + + + x + 442 + + + + + x + 443 + + + + + x + 444 + + + + + x + 445 + + + + + x + 446 + + + + + x + 447 + + + + + x + 448 + + + + + x + 449 + + + + + x + 450 + + + + + x + 451 + + + + + x + 452 + + + + + x + 453 + + + + + x + 454 + + + + + x + 455 + + + + + x + 456 + + + + + x + 457 + + + + + x + 458 + + + + + x + 459 + + + + + x + 460 + + + + + x + 461 + + + + + x + 462 + + + + + x + 463 + + + + + x + 464 + + + + + x + 465 + + + + + x + 466 + + + + + x + 467 + + + + + x + 468 + + + + + x + 469 + + + + + x + 470 + + + + + x + 471 + + + + + x + 472 + + + + + x + 473 + + + + + x + 474 + + + + + x + 475 + + + + + x + 476 + + + + + x + 477 + + + + + x + 478 + + + + + x + 479 + + + + + x + 480 + + + + + x + 481 + + + + + x + 482 + + + + + x + 483 + + + + + x + 484 + + + + + x + 485 + + + + + x + 486 + + + + + x + 487 + + + + + x + 488 + + + + + x + 489 + + + + + x + 490 + + + + + x + 491 + + + + + x + 492 + + + + + x + 493 + + + + + x + 494 + + + + + x + 495 + + + + + x + 496 + + + + + x + 497 + + + + + x + 498 + + + + + x + 499 + + + + + x + 500 + + + + + x + 501 + + + + + x + 502 + + + + + x + 503 + + + + + x + 504 + + + + + x + 505 + + + + + x + 506 + + + + + x + 507 + + + + + x + 508 + + + + + x + 509 + + + + + x + 510 + + + + + x + 511 + + + + + x + 512 + + + + + x + 513 + + + + + x + 514 + + + + + x + 515 + + + + + x + 516 + + + + + x + 517 + + + + + x + 518 + + + + + x + 519 + + + + + x + 520 + + + + + x + 521 + + + + + x + 522 + + + + + x + 523 + + + + + x + 524 + + + + + x + 525 + + + + + x + 526 + + + + + x + 527 + + + + + x + 528 + + + + + x + 529 + + + + + x + 530 + + + + + x + 531 + + + + + x + 532 + + + + + x + 533 + + + + + x + 534 + + + + + x + 535 + + + + + x + 536 + + + + + x + 537 + + + + + x + 538 + + + + + x + 539 + + + + + x + 540 + + + + + x + 541 + + + + + x + 542 + + + + + x + 543 + + + + + x + 544 + + + + + x + 545 + + + + + x + 546 + + + + + x + 547 + + + + + x + 548 + + + + + x + 549 + + + + + x + 550 + + + + + x + 551 + + + + + x + 552 + + + + + x + 553 + + + + + x + 554 + + + + + x + 555 + + + + + x + 556 + + + + + x + 557 + + + + + x + 558 + + + + + x + 559 + + + + + x + 560 + + + + + x + 561 + + + + + x + 562 + + + + + x + 563 + + + + + x + 564 + + + + + x + 565 + + + + + x + 566 + + + + + x + 567 + + + + + x + 568 + + + + + x + 569 + + + + + x + 570 + + + + + x + 571 + + + + + x + 572 + + + + + x + 573 + + + + + x + 574 + + + + + x + 575 + + + + + x + 576 + + + + + x + 577 + + + + + x + 578 + + + + + x + 579 + + + + + x + 580 + + + + + x + 581 + + + + + x + 582 + + + + + x + 583 + + + + + x + 584 + + + + + x + 585 + + + + + x + 586 + + + + + x + 587 + + + + + x + 588 + + + + + x + 589 + + + + + x + 590 + + + + + x + 591 + + + + + x + 592 + + + + + x + 593 + + + + + x + 594 + + + + + x + 595 + + + + + x + 596 + + + + + x + 597 + + + + + x + 598 + + + + + x + 599 + + + + + x + 600 + + + + + x + 601 + + + + + x + 602 + + + + + x + 603 + + + + + x + 604 + + + + + x + 605 + + + + + x + 606 + + + + + x + 607 + + + + + x + 608 + + + + + x + 609 + + + + + x + 610 + + + + + x + 611 + + + + + x + 612 + + + + + x + 613 + + + + + x + 614 + + + + + x + 615 + + + + + x + 616 + + + + + x + 617 + + + + + x + 618 + + + + + x + 619 + + + + + x + 620 + + + + + x + 621 + + + + + x + 622 + + + + + x + 623 + + + + + x + 624 + + + + + x + 625 + + + + + x + 626 + + + + + x + 627 + + + + + x + 628 + + + + + x + 629 + + + + + x + 630 + + + + + x + 631 + + + + + x + 632 + + + + + x + 633 + + + + + x + 634 + + + + + x + 635 + + + + + x + 636 + + + + + x + 637 + + + + + x + 638 + + + + + x + 639 + + + + + x + 640 + + + + + x + 641 + + + + + x + 642 + + + + + x + 643 + + + + + x + 644 + + + + + x + 645 + + + + + x + 646 + + + + + x + 647 + + + + + x + 648 + + + + + x + 649 + + + + + x + 650 + + + + + x + 651 + + + + + x + 652 + + + + + x + 653 + + + + + x + 654 + + + + + x + 655 + + + + + x + 656 + + + + + x + 657 + + + + + x + 658 + + + + + x + 659 + + + + + x + 660 + + + + + x + 661 + + + + + x + 662 + + + + + x + 663 + + + + + x + 664 + + + + + x + 665 + + + + + x + 666 + + + + + x + 667 + + + + + x + 668 + + + + + x + 669 + + + + + x + 670 + + + + + x + 671 + + + + + x + 672 + + + + + x + 673 + + + + + x + 674 + + + + + x + 675 + + + + + x + 676 + + + + + x + 677 + + + + + x + 678 + + + + + x + 679 + + + + + x + 680 + + + + + x + 681 + + + + + x + 682 + + + + + x + 683 + + + + + x + 684 + + + + + x + 685 + + + + + x + 686 + + + + + x + 687 + + + + + x + 688 + + + + + x + 689 + + + + + x + 690 + + + + + x + 691 + + + + + x + 692 + + + + + x + 693 + + + + + x + 694 + + + + + x + 695 + + + + + x + 696 + + + + + x + 697 + + + + + x + 698 + + + + + x + 699 + + + + + x + 700 + + + + + x + 701 + + + + + x + 702 + + + + + x + 703 + + + + + x + 704 + + + + + x + 705 + + + + + x + 706 + + + + + x + 707 + + + + + x + 708 + + + + + x + 709 + + + + + x + 710 + + + + + x + 711 + + + + + x + 712 + + + + + x + 713 + + + + + x + 714 + + + + + x + 715 + + + + + x + 716 + + + + + x + 717 + + + + + x + 718 + + + + + x + 719 + + + + + x + 720 + + + + + x + 721 + + + + + x + 722 + + + + + x + 723 + + + + + x + 724 + + + + + x + 725 + + + + + x + 726 + + + + + x + 727 + + + + + x + 728 + + + + + x + 729 + + + + + x + 730 + + + + + x + 731 + + + + + x + 732 + + + + + x + 733 + + + + + x + 734 + + + + + x + 735 + + + + + x + 736 + + + + + x + 737 + + + + + x + 738 + + + + + x + 739 + + + + + x + 740 + + + + + x + 741 + + + + + x + 742 + + + + + x + 743 + + + + + x + 744 + + + + + x + 745 + + + + + x + 746 + + + + + x + 747 + + + + + x + 748 + + + + + x + 749 + + + + + x + 750 + + + + + x + 751 + + + + + x + 752 + + + + + x + 753 + + + + + x + 754 + + + + + x + 755 + + + + + x + 756 + + + + + x + 757 + + + + + x + 758 + + + + + x + 759 + + + + + x + 760 + + + + + x + 761 + + + + + x + 762 + + + + + x + 763 + + + + + x + 764 + + + + + x + 765 + + + + + x + 766 + + + + + x + 767 + + + + + x + 768 + + + + + x + 769 + + + + + x + 770 + + + + + x + 771 + + + + + x + 772 + + + + + x + 773 + + + + + x + 774 + + + + + x + 775 + + + + + x + 776 + + + + + x + 777 + + + + + x + 778 + + + + + x + 779 + + + + + x + 780 + + + + + x + 781 + + + + + x + 782 + + + + + x + 783 + + + + + x + 784 + + + + + x + 785 + + + + + x + 786 + + + + + x + 787 + + + + + x + 788 + + + + + x + 789 + + + + + x + 790 + + + + + x + 791 + + + + + x + 792 + + + + + x + 793 + + + + + x + 794 + + + + + x + 795 + + + + + x + 796 + + + + + x + 797 + + + + + x + 798 + + + + + x + 799 + + + + + x + 800 + + + + + x + 801 + + + + + x + 802 + + + + + x + 803 + + + + + x + 804 + + + + + x + 805 + + + + + x + 806 + + + + + x + 807 + + + + + x + 808 + + + + + x + 809 + + + + + x + 810 + + + + + x + 811 + + + + + x + 812 + + + + + x + 813 + + + + + x + 814 + + + + + x + 815 + + + + + x + 816 + + + + + x + 817 + + + + + x + 818 + + + + + x + 819 + + + + + x + 820 + + + + + x + 821 + + + + + x + 822 + + + + + x + 823 + + + + + x + 824 + + + + + x + 825 + + + + + x + 826 + + + + + x + 827 + + + + + x + 828 + + + + + x + 829 + + + + + x + 830 + + + + + x + 831 + + + + + x + 832 + + + + + x + 833 + + + + + x + 834 + + + + + x + 835 + + + + + x + 836 + + + + + x + 837 + + + + + x + 838 + + + + + x + 839 + + + + + x + 840 + + + + + x + 841 + + + + + x + 842 + + + + + x + 843 + + + + + x + 844 + + + + + x + 845 + + + + + x + 846 + + + + + x + 847 + + + + + x + 848 + + + + + x + 849 + + + + + x + 850 + + + + + x + 851 + + + + + x + 852 + + + + + x + 853 + + + + + x + 854 + + + + + x + 855 + + + + + x + 856 + + + + + x + 857 + + + + + x + 858 + + + + + x + 859 + + + + + x + 860 + + + + + x + 861 + + + + + x + 862 + + + + + x + 863 + + + + + x + 864 + + + + + x + 865 + + + + + x + 866 + + + + + x + 867 + + + + + x + 868 + + + + + x + 869 + + + + + x + 870 + + + + + x + 871 + + + + + x + 872 + + + + + x + 873 + + + + + x + 874 + + + + + x + 875 + + + + + x + 876 + + + + + x + 877 + + + + + x + 878 + + + + + x + 879 + + + + + x + 880 + + + + + x + 881 + + + + + x + 882 + + + + + x + 883 + + + + + x + 884 + + + + + x + 885 + + + + + x + 886 + + + + + x + 887 + + + + + x + 888 + + + + + x + 889 + + + + + x + 890 + + + + + x + 891 + + + + + x + 892 + + + + + x + 893 + + + + + x + 894 + + + + + x + 895 + + + + + x + 896 + + + + + x + 897 + + + + + x + 898 + + + + + x + 899 + + + + + x + 900 + + + + + x + 901 + + + + + x + 902 + + + + + x + 903 + + + + + x + 904 + + + + + x + 905 + + + + + x + 906 + + + + + x + 907 + + + + + x + 908 + + + + + x + 909 + + + + + x + 910 + + + + + x + 911 + + + + + x + 912 + + + + + x + 913 + + + + + x + 914 + + + + + x + 915 + + + + + x + 916 + + + + + x + 917 + + + + + x + 918 + + + + + x + 919 + + + + + x + 920 + + + + + x + 921 + + + + + x + 922 + + + + + x + 923 + + + + + x + 924 + + + + + x + 925 + + + + + x + 926 + + + + + x + 927 + + + + + x + 928 + + + + + x + 929 + + + + + x + 930 + + + + + x + 931 + + + + + x + 932 + + + + + x + 933 + + + + + x + 934 + + + + + x + 935 + + + + + x + 936 + + + + + x + 937 + + + + + x + 938 + + + + + x + 939 + + + + + x + 940 + + + + + x + 941 + + + + + x + 942 + + + + + x + 943 + + + + + x + 944 + + + + + x + 945 + + + + + x + 946 + + + + + x + 947 + + + + + x + 948 + + + + + x + 949 + + + + + x + 950 + + + + + x + 951 + + + + + x + 952 + + + + + x + 953 + + + + + x + 954 + + + + + x + 955 + + + + + x + 956 + + + + + x + 957 + + + + + x + 958 + + + + + x + 959 + + + + + x + 960 + + + + + x + 961 + + + + + x + 962 + + + + + x + 963 + + + + + x + 964 + + + + + x + 965 + + + + + x + 966 + + + + + x + 967 + + + + + x + 968 + + + + + x + 969 + + + + + x + 970 + + + + + x + 971 + + + + + x + 972 + + + + + x + 973 + + + + + x + 974 + + + + + x + 975 + + + + + x + 976 + + + + + x + 977 + + + + + x + 978 + + + + + x + 979 + + + + + x + 980 + + + + + x + 981 + + + + + x + 982 + + + + + x + 983 + + + + + x + 984 + + + + + x + 985 + + + + + x + 986 + + + + + x + 987 + + + + + x + 988 + + + + + x + 989 + + + + + x + 990 + + + + + x + 991 + + + + + x + 992 + + + + + x + 993 + + + + + x + 994 + + + + + x + 995 + + + + + x + 996 + + + + + x + 997 + + + + + x + 998 + + + + + x + 999 + + + + + x + 1000 + + + + + x + 1001 + + + + + x + 1002 + + + + + x + 1003 + + + + + x + 1004 + + + + + x + 1005 + + + + + x + 1006 + + + + + x + 1007 + + + + + x + 1008 + + + + + x + 1009 + + + + + x + 1010 + + + + + x + 1011 + + + + + x + 1012 + + + + + x + 1013 + + + + + x + 1014 + + + + + x + 1015 + + + + + x + 1016 + + + + + x + 1017 + + + + + x + 1018 + + + + + x + 1019 + + + + + x + 1020 + + + + + x + 1021 + + + + + x + 1022 + + + + + x + 1023 + + + + + x + 1024 + + + + + x + 1025 + + + + + x + 1026 + + + + + x + 1027 + + + + + x + 1028 + + + + + x + 1029 + + + + + x + 1030 + + + + + x + 1031 + + + + + x + 1032 + + + + + x + 1033 + + + + + x + 1034 + + + + + x + 1035 + + + + + x + 1036 + + + + + x + 1037 + + + + + x + 1038 + + + + + x + 1039 + + + + + x + 1040 + + + + + x + 1041 + + + + + x + 1042 + + + + + x + 1043 + + + + + x + 1044 + + + + + x + 1045 + + + + + x + 1046 + + + + + x + 1047 + + + + + x + 1048 + + + + + x + 1049 + + + + + x + 1050 + + + + + x + 1051 + + + + + x + 1052 + + + + + x + 1053 + + + + + x + 1054 + + + + + x + 1055 + + + + + x + 1056 + + + + + x + 1057 + + + + + x + 1058 + + + + + x + 1059 + + + + + x + 1060 + + + + + x + 1061 + + + + + x + 1062 + + + + + x + 1063 + + + + + x + 1064 + + + + + x + 1065 + + + + + x + 1066 + + + + + x + 1067 + + + + + x + 1068 + + + + + x + 1069 + + + + + x + 1070 + + + + + x + 1071 + + + + + x + 1072 + + + + + x + 1073 + + + + + x + 1074 + + + + + x + 1075 + + + + + x + 1076 + + + + + x + 1077 + + + + + x + 1078 + + + + + x + 1079 + + + + + x + 1080 + + + + + x + 1081 + + + + + x + 1082 + + + + + x + 1083 + + + + + x + 1084 + + + + + x + 1085 + + + + + x + 1086 + + + + + x + 1087 + + + + + x + 1088 + + + + + x + 1089 + + + + + x + 1090 + + + + + x + 1091 + + + + + x + 1092 + + + + + x + 1093 + + + + + x + 1094 + + + + + x + 1095 + + + + + x + 1096 + + + + + x + 1097 + + + + + x + 1098 + + + + + x + 1099 + + + + + x + 1100 + + + + + x + 1101 + + + + + x + 1102 + + + + + x + 1103 + + + + + x + 1104 + + + + + x + 1105 + + + + + x + 1106 + + + + + x + 1107 + + + + + x + 1108 + + + + + x + 1109 + + + + + x + 1110 + + + + + x + 1111 + + + + + x + 1112 + + + + + x + 1113 + + + + + x + 1114 + + + + + x + 1115 + + + + + x + 1116 + + + + + x + 1117 + + + + + x + 1118 + + + + + x + 1119 + + + + + x + 1120 + + + + + x + 1121 + + + + + x + 1122 + + + + + x + 1123 + + + + + x + 1124 + + + + + x + 1125 + + + + + x + 1126 + + + + + x + 1127 + + + + + x + 1128 + + + + + x + 1129 + + + + + x + 1130 + + + + + x + 1131 + + + + + x + 1132 + + + + + x + 1133 + + + + + x + 1134 + + + + + x + 1135 + + + + + x + 1136 + + + + + x + 1137 + + + + + x + 1138 + + + + + x + 1139 + + + + + x + 1140 + + + + + x + 1141 + + + + + x + 1142 + + + + + x + 1143 + + + + + x + 1144 + + + + + x + 1145 + + + + + x + 1146 + + + + + x + 1147 + + + + + x + 1148 + + + + + x + 1149 + + + + + x + 1150 + + + + + x + 1151 + + + + + x + 1152 + + + + + x + 1153 + + + + + x + 1154 + + + + + x + 1155 + + + + + x + 1156 + + + + + x + 1157 + + + + + x + 1158 + + + + + x + 1159 + + + + + x + 1160 + + + + + x + 1161 + + + + + x + 1162 + + + + + x + 1163 + + + + + x + 1164 + + + + + x + 1165 + + + + + x + 1166 + + + + + x + 1167 + + + + + x + 1168 + + + + + x + 1169 + + + + + x + 1170 + + + + + x + 1171 + + + + + x + 1172 + + + + + x + 1173 + + + + + x + 1174 + + + + + x + 1175 + + + + + x + 1176 + + + + + x + 1177 + + + + + x + 1178 + + + + + x + 1179 + + + + + x + 1180 + + + + + x + 1181 + + + + + x + 1182 + + + + + x + 1183 + + + + + x + 1184 + + + + + x + 1185 + + + + + x + 1186 + + + + + x + 1187 + + + + + x + 1188 + + + + + x + 1189 + + + + + x + 1190 + + + + + x + 1191 + + + + + x + 1192 + + + + + x + 1193 + + + + + x + 1194 + + + + + x + 1195 + + + + + x + 1196 + + + + + x + 1197 + + + + + x + 1198 + + + + + x + 1199 + + + + + x + 1200 + + + + + x + 1201 + + + + + x + 1202 + + + + + x + 1203 + + + + + x + 1204 + + + + + x + 1205 + + + + + x + 1206 + + + + + x + 1207 + + + + + x + 1208 + + + + + x + 1209 + + + + + x + 1210 + + + + + x + 1211 + + + + + x + 1212 + + + + + x + 1213 + + + + + x + 1214 + + + + + x + 1215 + + + + + x + 1216 + + + + + x + 1217 + + + + + x + 1218 + + + + + x + 1219 + + + + + x + 1220 + + + + + x + 1221 + + + + + x + 1222 + + + + + x + 1223 + + + + + x + 1224 + + + + + x + 1225 + + + + + x + 1226 + + + + + x + 1227 + + + + + x + 1228 + + + + + x + 1229 + + + + + x + 1230 + + + + + x + 1231 + + + + + x + 1232 + + + + + x + 1233 + + + + + x + 1234 + + + + + x + 1235 + + + + + x + 1236 + + + + + x + 1237 + + + + + x + 1238 + + + + + x + 1239 + + + + + x + 1240 + + + + + x + 1241 + + + + + x + 1242 + + + + + x + 1243 + + + + + x + 1244 + + + + + x + 1245 + + + + + x + 1246 + + + + + x + 1247 + + + + + x + 1248 + + + + + x + 1249 + + + + + x + 1250 + + + + + x + 1251 + + + + + x + 1252 + + + + + x + 1253 + + + + + x + 1254 + + + + + x + 1255 + + + + + x + 1256 + + + + + x + 1257 + + + + + x + 1258 + + + + + x + 1259 + + + + + x + 1260 + + + + + x + 1261 + + + + + x + 1262 + + + + + x + 1263 + + + + + x + 1264 + + + + + x + 1265 + + + + + x + 1266 + + + + + x + 1267 + + + + + x + 1268 + + + + + x + 1269 + + + + + x + 1270 + + + + + x + 1271 + + + + + x + 1272 + + + + + x + 1273 + + + + + x + 1274 + + + + + x + 1275 + + + + + x + 1276 + + + + + x + 1277 + + + + + x + 1278 + + + + + x + 1279 + + + + + x + 1280 + + + + + x + 1281 + + + + + x + 1282 + + + + + x + 1283 + + + + + x + 1284 + + + + + x + 1285 + + + + + x + 1286 + + + + + x + 1287 + + + + + x + 1288 + + + + + x + 1289 + + + + + x + 1290 + + + + + x + 1291 + + + + + x + 1292 + + + + + x + 1293 + + + + + x + 1294 + + + + + x + 1295 + + + + + x + 1296 + + + + + x + 1297 + + + + + x + 1298 + + + + + x + 1299 + + + + + x + 1300 + + + + + x + 1301 + + + + + x + 1302 + + + + + x + 1303 + + + + + x + 1304 + + + + + x + 1305 + + + + + x + 1306 + + + + + x + 1307 + + + + + x + 1308 + + + + + x + 1309 + + + + + x + 1310 + + + + + x + 1311 + + + + + x + 1312 + + + + + x + 1313 + + + + + x + 1314 + + + + + x + 1315 + + + + + x + 1316 + + + + + x + 1317 + + + + + x + 1318 + + + + + x + 1319 + + + + + x + 1320 + + + + + x + 1321 + + + + + x + 1322 + + + + + x + 1323 + + + + + x + 1324 + + + + + x + 1325 + + + + + x + 1326 + + + + + x + 1327 + + + + + x + 1328 + + + + + x + 1329 + + + + + x + 1330 + + + + + x + 1331 + + + + + x + 1332 + + + + + x + 1333 + + + + + x + 1334 + + + + + x + 1335 + + + + + x + 1336 + + + + + x + 1337 + + + + + x + 1338 + + + + + x + 1339 + + + + + x + 1340 + + + + + x + 1341 + + + + + x + 1342 + + + + + x + 1343 + + + + + x + 1344 + + + + + x + 1345 + + + + + x + 1346 + + + + + x + 1347 + + + + + x + 1348 + + + + + x + 1349 + + + + + x + 1350 + + + + + x + 1351 + + + + + x + 1352 + + + + + x + 1353 + + + + + x + 1354 + + + + + x + 1355 + + + + + x + 1356 + + + + + x + 1357 + + + + + x + 1358 + + + + + x + 1359 + + + + + x + 1360 + + + + + x + 1361 + + + + + x + 1362 + + + + + x + 1363 + + + + + x + 1364 + + + + + x + 1365 + + + + + x + 1366 + + + + + x + 1367 + + + + + x + 1368 + + + + + x + 1369 + + + + + x + 1370 + + + + + x + 1371 + + + + + x + 1372 + + + + + x + 1373 + + + + + x + 1374 + + + + + x + 1375 + + + + + x + 1376 + + + + + x + 1377 + + + + + x + 1378 + + + + + x + 1379 + + + + + x + 1380 + + + + + x + 1381 + + + + + x + 1382 + + + + + x + 1383 + + + + + x + 1384 + + + + + x + 1385 + + + + + x + 1386 + + + + + x + 1387 + + + + + x + 1388 + + + + + x + 1389 + + + + + x + 1390 + + + + + x + 1391 + + + + + x + 1392 + + + + + x + 1393 + + + + + x + 1394 + + + + + x + 1395 + + + + + x + 1396 + + + + + x + 1397 + + + + + x + 1398 + + + + + x + 1399 + + + + + x + 1400 + + + + + x + 1401 + + + + + x + 1402 + + + + + x + 1403 + + + + + x + 1404 + + + + + x + 1405 + + + + + x + 1406 + + + + + x + 1407 + + + + + x + 1408 + + + + + x + 1409 + + + + + x + 1410 + + + + + x + 1411 + + + + + x + 1412 + + + + + x + 1413 + + + + + x + 1414 + + + + + x + 1415 + + + + + x + 1416 + + + + + x + 1417 + + + + + x + 1418 + + + + + x + 1419 + + + + + x + 1420 + + + + + x + 1421 + + + + + x + 1422 + + + + + x + 1423 + + + + + x + 1424 + + + + + x + 1425 + + + + + x + 1426 + + + + + x + 1427 + + + + + x + 1428 + + + + + x + 1429 + + + + + x + 1430 + + + + + x + 1431 + + + + + x + 1432 + + + + + x + 1433 + + + + + x + 1434 + + + + + x + 1435 + + + + + x + 1436 + + + + + x + 1437 + + + + + x + 1438 + + + + + x + 1439 + + + + + x + 1440 + + + + + x + 1441 + + + + + x + 1442 + + + + + x + 1443 + + + + + x + 1444 + + + + + x + 1445 + + + + + x + 1446 + + + + + x + 1447 + + + + + x + 1448 + + + + + x + 1449 + + + + + x + 1450 + + + + + x + 1451 + + + + + x + 1452 + + + + + x + 1453 + + + + + x + 1454 + + + + + x + 1455 + + + + + x + 1456 + + + + + x + 1457 + + + + + x + 1458 + + + + + x + 1459 + + + + + x + 1460 + + + + + x + 1461 + + + + + x + 1462 + + + + + x + 1463 + + + + + x + 1464 + + + + + x + 1465 + + + + + x + 1466 + + + + + x + 1467 + + + + + x + 1468 + + + + + x + 1469 + + + + + x + 1470 + + + + + x + 1471 + + + + + x + 1472 + + + + + x + 1473 + + + + + x + 1474 + + + + + x + 1475 + + + + + x + 1476 + + + + + x + 1477 + + + + + x + 1478 + + + + + x + 1479 + + + + + x + 1480 + + + + + x + 1481 + + + + + x + 1482 + + + + + x + 1483 + + + + + x + 1484 + + + + + x + 1485 + + + + + x + 1486 + + + + + x + 1487 + + + + + x + 1488 + + + + + x + 1489 + + + + + x + 1490 + + + + + x + 1491 + + + + + x + 1492 + + + + + x + 1493 + + + + + x + 1494 + + + + + x + 1495 + + + + + x + 1496 + + + + + x + 1497 + + + + + x + 1498 + + + + + x + 1499 + + + + + x + 1500 + + + + + x + 1501 + + + + + x + 1502 + + + + + x + 1503 + + + + + x + 1504 + + + + + x + 1505 + + + + + x + 1506 + + + + + x + 1507 + + + + + x + 1508 + + + + + x + 1509 + + + + + x + 1510 + + + + + x + 1511 + + + + + x + 1512 + + + + + x + 1513 + + + + + x + 1514 + + + + + x + 1515 + + + + + x + 1516 + + + + + x + 1517 + + + + + x + 1518 + + + + + x + 1519 + + + + + x + 1520 + + + + + x + 1521 + + + + + x + 1522 + + + + + x + 1523 + + + + + x + 1524 + + + + + x + 1525 + + + + + x + 1526 + + + + + x + 1527 + + + + + x + 1528 + + + + + x + 1529 + + + + + x + 1530 + + + + + x + 1531 + + + + + x + 1532 + + + + + x + 1533 + + + + + x + 1534 + + + + + x + 1535 + + + + + x + 1536 + + + + + x + 1537 + + + + + x + 1538 + + + + + x + 1539 + + + + + x + 1540 + + + + + x + 1541 + + + + + x + 1542 + + + + + x + 1543 + + + + + x + 1544 + + + + + x + 1545 + + + + + x + 1546 + + + + + x + 1547 + + + + + x + 1548 + + + + + x + 1549 + + + + + x + 1550 + + + + + x + 1551 + + + + + x + 1552 + + + + + x + 1553 + + + + + x + 1554 + + + + + x + 1555 + + + + + x + 1556 + + + + + x + 1557 + + + + + x + 1558 + + + + + x + 1559 + + + + + x + 1560 + + + + + x + 1561 + + + + + x + 1562 + + + + + x + 1563 + + + + + x + 1564 + + + + + x + 1565 + + + + + x + 1566 + + + + + x + 1567 + + + + + x + 1568 + + + + + x + 1569 + + + + + x + 1570 + + + + + x + 1571 + + + + + x + 1572 + + + + + x + 1573 + + + + + x + 1574 + + + + + x + 1575 + + + + + x + 1576 + + + + + x + 1577 + + + + + x + 1578 + + + + + x + 1579 + + + + + x + 1580 + + + + + x + 1581 + + + + + x + 1582 + + + + + x + 1583 + + + + + x + 1584 + + + + + x + 1585 + + + + + x + 1586 + + + + + x + 1587 + + + + + x + 1588 + + + + + x + 1589 + + + + + x + 1590 + + + + + x + 1591 + + + + + x + 1592 + + + + + x + 1593 + + + + + x + 1594 + + + + + x + 1595 + + + + + x + 1596 + + + + + x + 1597 + + + + + x + 1598 + + + + + x + 1599 + + + + + x + 1600 + + + + + x + 1601 + + + + + x + 1602 + + + + + x + 1603 + + + + + x + 1604 + + + + + x + 1605 + + + + + x + 1606 + + + + + x + 1607 + + + + + x + 1608 + + + + + x + 1609 + + + + + x + 1610 + + + + + x + 1611 + + + + + x + 1612 + + + + + x + 1613 + + + + + x + 1614 + + + + + x + 1615 + + + + + x + 1616 + + + + + x + 1617 + + + + + x + 1618 + + + + + x + 1619 + + + + + x + 1620 + + + + + x + 1621 + + + + + x + 1622 + + + + + x + 1623 + + + + + x + 1624 + + + + + x + 1625 + + + + + x + 1626 + + + + + x + 1627 + + + + + x + 1628 + + + + + x + 1629 + + + + + x + 1630 + + + + + x + 1631 + + + + + x + 1632 + + + + + x + 1633 + + + + + x + 1634 + + + + + x + 1635 + + + + + x + 1636 + + + + + x + 1637 + + + + + x + 1638 + + + + + x + 1639 + + + + + x + 1640 + + + + + x + 1641 + + + + + x + 1642 + + + + + x + 1643 + + + + + x + 1644 + + + + + x + 1645 + + + + + x + 1646 + + + + + x + 1647 + + + + + x + 1648 + + + + + x + 1649 + + + + + x + 1650 + + + + + x + 1651 + + + + + x + 1652 + + + + + x + 1653 + + + + + x + 1654 + + + + + x + 1655 + + + + + x + 1656 + + + + + x + 1657 + + + + + x + 1658 + + + + + x + 1659 + + + + + x + 1660 + + + + + x + 1661 + + + + + x + 1662 + + + + + x + 1663 + + + + + x + 1664 + + + + + x + 1665 + + + + + x + 1666 + + + + + x + 1667 + + + + + x + 1668 + + + + + x + 1669 + + + + + x + 1670 + + + + + x + 1671 + + + + + x + 1672 + + + + + x + 1673 + + + + + x + 1674 + + + + + x + 1675 + + + + + x + 1676 + + + + + x + 1677 + + + + + x + 1678 + + + + + x + 1679 + + + + + x + 1680 + + + + + x + 1681 + + + + + x + 1682 + + + + + x + 1683 + + + + + x + 1684 + + + + + x + 1685 + + + + + x + 1686 + + + + + x + 1687 + + + + + x + 1688 + + + + + x + 1689 + + + + + x + 1690 + + + + + x + 1691 + + + + + x + 1692 + + + + + x + 1693 + + + + + x + 1694 + + + + + x + 1695 + + + + + x + 1696 + + + + + x + 1697 + + + + + x + 1698 + + + + + x + 1699 + + + + + x + 1700 + + + + + x + 1701 + + + + + x + 1702 + + + + + x + 1703 + + + + + x + 1704 + + + + + x + 1705 + + + + + x + 1706 + + + + + x + 1707 + + + + + x + 1708 + + + + + x + 1709 + + + + + x + 1710 + + + + + x + 1711 + + + + + x + 1712 + + + + + x + 1713 + + + + + x + 1714 + + + + + x + 1715 + + + + + x + 1716 + + + + + x + 1717 + + + + + x + 1718 + + + + + x + 1719 + + + + + x + 1720 + + + + + x + 1721 + + + + + x + 1722 + + + + + x + 1723 + + + + + x + 1724 + + + + + x + 1725 + + + + + x + 1726 + + + + + x + 1727 + + + + + x + 1728 + + + + + x + 1729 + + + + + x + 1730 + + + + + x + 1731 + + + + + x + 1732 + + + + + x + 1733 + + + + + x + 1734 + + + + + x + 1735 + + + + + x + 1736 + + + + + x + 1737 + + + + + x + 1738 + + + + + x + 1739 + + + + + x + 1740 + + + + + x + 1741 + + + + + x + 1742 + + + + + x + 1743 + + + + + x + 1744 + + + + + x + 1745 + + + + + x + 1746 + + + + + x + 1747 + + + + + x + 1748 + + + + + x + 1749 + + + + + x + 1750 + + + + + x + 1751 + + + + + x + 1752 + + + + + x + 1753 + + + + + x + 1754 + + + + + x + 1755 + + + + + x + 1756 + + + + + x + 1757 + + + + + x + 1758 + + + + + x + 1759 + + + + + x + 1760 + + + + + x + 1761 + + + + + x + 1762 + + + + + x + 1763 + + + + + x + 1764 + + + + + x + 1765 + + + + + x + 1766 + + + + + x + 1767 + + + + + x + 1768 + + + + + x + 1769 + + + + + x + 1770 + + + + + x + 1771 + + + + + x + 1772 + + + + + x + 1773 + + + + + x + 1774 + + + + + x + 1775 + + + + + x + 1776 + + + + + x + 1777 + + + + + x + 1778 + + + + + x + 1779 + + + + + x + 1780 + + + + + x + 1781 + + + + + x + 1782 + + + + + x + 1783 + + + + + x + 1784 + + + + + x + 1785 + + + + + x + 1786 + + + + + x + 1787 + + + + + x + 1788 + + + + + x + 1789 + + + + + x + 1790 + + + + + x + 1791 + + + + + x + 1792 + + + + + x + 1793 + + + + + x + 1794 + + + + + x + 1795 + + + + + x + 1796 + + + + + x + 1797 + + + + + x + 1798 + + + + + x + 1799 + + + + + x + 1800 + + + + + x + 1801 + + + + + x + 1802 + + + + + x + 1803 + + + + + x + 1804 + + + + + x + 1805 + + + + + x + 1806 + + + + + x + 1807 + + + + + x + 1808 + + + + + x + 1809 + + + + + x + 1810 + + + + + x + 1811 + + + + + x + 1812 + + + + + x + 1813 + + + + + x + 1814 + + + + + x + 1815 + + + + + x + 1816 + + + + + x + 1817 + + + + + x + 1818 + + + + + x + 1819 + + + + + x + 1820 + + + + + x + 1821 + + + + + x + 1822 + + + + + x + 1823 + + + + + x + 1824 + + + + + x + 1825 + + + + + x + 1826 + + + + + x + 1827 + + + + + x + 1828 + + + + + x + 1829 + + + + + x + 1830 + + + + + x + 1831 + + + + + x + 1832 + + + + + x + 1833 + + + + + x + 1834 + + + + + x + 1835 + + + + + x + 1836 + + + + + x + 1837 + + + + + x + 1838 + + + + + x + 1839 + + + + + x + 1840 + + + + + x + 1841 + + + + + x + 1842 + + + + + x + 1843 + + + + + x + 1844 + + + + + x + 1845 + + + + + x + 1846 + + + + + x + 1847 + + + + + x + 1848 + + + + + x + 1849 + + + + + x + 1850 + + + + + x + 1851 + + + + + x + 1852 + + + + + x + 1853 + + + + + x + 1854 + + + + + x + 1855 + + + + + x + 1856 + + + + + x + 1857 + + + + + x + 1858 + + + + + x + 1859 + + + + + x + 1860 + + + + + x + 1861 + + + + + x + 1862 + + + + + x + 1863 + + + + + x + 1864 + + + + + x + 1865 + + + + + x + 1866 + + + + + x + 1867 + + + + + x + 1868 + + + + + x + 1869 + + + + + x + 1870 + + + + + x + 1871 + + + + + x + 1872 + + + + + x + 1873 + + + + + x + 1874 + + + + + x + 1875 + + + + + x + 1876 + + + + + x + 1877 + + + + + x + 1878 + + + + + x + 1879 + + + + + x + 1880 + + + + + x + 1881 + + + + + x + 1882 + + + + + x + 1883 + + + + + x + 1884 + + + + + x + 1885 + + + + + x + 1886 + + + + + x + 1887 + + + + + x + 1888 + + + + + x + 1889 + + + + + x + 1890 + + + + + x + 1891 + + + + + x + 1892 + + + + + x + 1893 + + + + + x + 1894 + + + + + x + 1895 + + + + + x + 1896 + + + + + x + 1897 + + + + + x + 1898 + + + + + x + 1899 + + + + + x + 1900 + + + + + x + 1901 + + + + + x + 1902 + + + + + x + 1903 + + + + + x + 1904 + + + + + x + 1905 + + + + + x + 1906 + + + + + x + 1907 + + + + + x + 1908 + + + + + x + 1909 + + + + + x + 1910 + + + + + x + 1911 + + + + + x + 1912 + + + + + x + 1913 + + + + + x + 1914 + + + + + x + 1915 + + + + + x + 1916 + + + + + x + 1917 + + + + + x + 1918 + + + + + x + 1919 + + + + + x + 1920 + + + + + x + 1921 + + + + + x + 1922 + + + + + x + 1923 + + + + + x + 1924 + + + + + x + 1925 + + + + + x + 1926 + + + + + x + 1927 + + + + + x + 1928 + + + + + x + 1929 + + + + + x + 1930 + + + + + x + 1931 + + + + + x + 1932 + + + + + x + 1933 + + + + + x + 1934 + + + + + x + 1935 + + + + + x + 1936 + + + + + x + 1937 + + + + + x + 1938 + + + + + x + 1939 + + + + + x + 1940 + + + + + x + 1941 + + + + + x + 1942 + + + + + x + 1943 + + + + + x + 1944 + + + + + x + 1945 + + + + + x + 1946 + + + + + x + 1947 + + + + + x + 1948 + + + + + x + 1949 + + + + + x + 1950 + + + + + x + 1951 + + + + + x + 1952 + + + + + x + 1953 + + + + + x + 1954 + + + + + x + 1955 + + + + + x + 1956 + + + + + x + 1957 + + + + + x + 1958 + + + + + x + 1959 + + + + + x + 1960 + + + + + x + 1961 + + + + + x + 1962 + + + + + x + 1963 + + + + + x + 1964 + + + + + x + 1965 + + + + + x + 1966 + + + + + x + 1967 + + + + + x + 1968 + + + + + x + 1969 + + + + + x + 1970 + + + + + x + 1971 + + + + + x + 1972 + + + + + x + 1973 + + + + + x + 1974 + + + + + x + 1975 + + + + + x + 1976 + + + + + x + 1977 + + + + + x + 1978 + + + + + x + 1979 + + + + + x + 1980 + + + + + x + 1981 + + + + + x + 1982 + + + + + x + 1983 + + + + + x + 1984 + + + + + x + 1985 + + + + + x + 1986 + + + + + x + 1987 + + + + + x + 1988 + + + + + x + 1989 + + + + + x + 1990 + + + + + x + 1991 + + + + + x + 1992 + + + + + x + 1993 + + + + + x + 1994 + + + + + x + 1995 + + + + + x + 1996 + + + + + x + 1997 + + + + + x + 1998 + + + + + x + 1999 + + + + + x + 2000 + + + + + x + 2001 + + + + + x + 2002 + + + + + x + 2003 + + + + + x + 2004 + + + + + x + 2005 + + + + + x + 2006 + + + + + x + 2007 + + + + + x + 2008 + + + + + x + 2009 + + + + + x + 2010 + + + + + x + 2011 + + + + + x + 2012 + + + + + x + 2013 + + + + + x + 2014 + + + + + x + 2015 + + + + + x + 2016 + + + + + x + 2017 + + + + + x + 2018 + + + + + x + 2019 + + + + + x + 2020 + + + + + x + 2021 + + + + + x + 2022 + + + + + x + 2023 + + + + + x + 2024 + + + + + x + 2025 + + + + + x + 2026 + + + + + x + 2027 + + + + + x + 2028 + + + + + x + 2029 + + + + + x + 2030 + + + + + x + 2031 + + + + + x + 2032 + + + + + x + 2033 + + + + + x + 2034 + + + + + x + 2035 + + + + + x + 2036 + + + + + x + 2037 + + + + + x + 2038 + + + + + x + 2039 + + + + + x + 2040 + + + + + x + 2041 + + + + + x + 2042 + + + + + x + 2043 + + + + + x + 2044 + + + + + x + 2045 + + + + + x + 2046 + + + + + x + 2047 + + + + + x + 2048 + + + + + x + 2049 + + + + + x + 2050 + + + + + x + 2051 + + + + + x + 2052 + + + + + x + 2053 + + + + + x + 2054 + + + + + x + 2055 + + + + + x + 2056 + + + + + x + 2057 + + + + + x + 2058 + + + + + x + 2059 + + + + + x + 2060 + + + + + x + 2061 + + + + + x + 2062 + + + + + x + 2063 + + + + + x + 2064 + + + + + x + 2065 + + + + + x + 2066 + + + + + x + 2067 + + + + + x + 2068 + + + + + x + 2069 + + + + + x + 2070 + + + + + x + 2071 + + + + + x + 2072 + + + + + x + 2073 + + + + + x + 2074 + + + + + x + 2075 + + + + + x + 2076 + + + + + x + 2077 + + + + + x + 2078 + + + + + x + 2079 + + + + + x + 2080 + + + + + x + 2081 + + + + + x + 2082 + + + + + x + 2083 + + + + + x + 2084 + + + + + x + 2085 + + + + + x + 2086 + + + + + x + 2087 + + + + + x + 2088 + + + + + x + 2089 + + + + + x + 2090 + + + + + x + 2091 + + + + + x + 2092 + + + + + x + 2093 + + + + + x + 2094 + + + + + x + 2095 + + + + + x + 2096 + + + + + x + 2097 + + + + + x + 2098 + + + + + x + 2099 + + + + + x + 2100 + + + + + x + 2101 + + + + + x + 2102 + + + + + x + 2103 + + + + + x + 2104 + + + + + x + 2105 + + + + + x + 2106 + + + + + x + 2107 + + + + + x + 2108 + + + + + x + 2109 + + + + + x + 2110 + + + + + x + 2111 + + + + + x + 2112 + + + + + x + 2113 + + + + + x + 2114 + + + + + x + 2115 + + + + + x + 2116 + + + + + x + 2117 + + + + + x + 2118 + + + + + x + 2119 + + + + + x + 2120 + + + + + x + 2121 + + + + + x + 2122 + + + + + x + 2123 + + + + + x + 2124 + + + + + x + 2125 + + + + + x + 2126 + + + + + x + 2127 + + + + + x + 2128 + + + + + x + 2129 + + + + + x + 2130 + + + + + x + 2131 + + + + + x + 2132 + + + + + x + 2133 + + + + + x + 2134 + + + + + x + 2135 + + + + + x + 2136 + + + + + x + 2137 + + + + + x + 2138 + + + + + x + 2139 + + + + + x + 2140 + + + + + x + 2141 + + + + + x + 2142 + + + + + x + 2143 + + + + + x + 2144 + + + + + x + 2145 + + + + + x + 2146 + + + + + x + 2147 + + + + + x + 2148 + + + + + x + 2149 + + + + + x + 2150 + + + + + x + 2151 + + + + + x + 2152 + + + + + x + 2153 + + + + + x + 2154 + + + + + x + 2155 + + + + + x + 2156 + + + + + x + 2157 + + + + + x + 2158 + + + + + x + 2159 + + + + + x + 2160 + + + + + x + 2161 + + + + + x + 2162 + + + + + x + 2163 + + + + + x + 2164 + + + + + x + 2165 + + + + + x + 2166 + + + + + x + 2167 + + + + + x + 2168 + + + + + x + 2169 + + + + + x + 2170 + + + + + x + 2171 + + + + + x + 2172 + + + + + x + 2173 + + + + + x + 2174 + + + + + x + 2175 + + + + + x + 2176 + + + + + x + 2177 + + + + + x + 2178 + + + + + x + 2179 + + + + + x + 2180 + + + + + x + 2181 + + + + + x + 2182 + + + + + x + 2183 + + + + + x + 2184 + + + + + x + 2185 + + + + + x + 2186 + + + + + x + 2187 + + + + + x + 2188 + + + + + x + 2189 + + + + + x + 2190 + + + + + x + 2191 + + + + + x + 2192 + + + + + x + 2193 + + + + + x + 2194 + + + + + x + 2195 + + + + + x + 2196 + + + + + x + 2197 + + + + + x + 2198 + + + + + x + 2199 + + + + + x + 2200 + + + + + x + 2201 + + + + + x + 2202 + + + + + x + 2203 + + + + + x + 2204 + + + + + x + 2205 + + + + + x + 2206 + + + + + x + 2207 + + + + + x + 2208 + + + + + x + 2209 + + + + + x + 2210 + + + + + x + 2211 + + + + + x + 2212 + + + + + x + 2213 + + + + + x + 2214 + + + + + x + 2215 + + + + + x + 2216 + + + + + x + 2217 + + + + + x + 2218 + + + + + x + 2219 + + + + + x + 2220 + + + + + x + 2221 + + + + + x + 2222 + + + + + x + 2223 + + + + + x + 2224 + + + + + x + 2225 + + + + + x + 2226 + + + + + x + 2227 + + + + + x + 2228 + + + + + x + 2229 + + + + + x + 2230 + + + + + x + 2231 + + + + + x + 2232 + + + + + x + 2233 + + + + + x + 2234 + + + + + x + 2235 + + + + + x + 2236 + + + + + x + 2237 + + + + + x + 2238 + + + + + x + 2239 + + + + + x + 2240 + + + + + x + 2241 + + + + + x + 2242 + + + + + x + 2243 + + + + + x + 2244 + + + + + x + 2245 + + + + + x + 2246 + + + + + x + 2247 + + + + + x + 2248 + + + + + x + 2249 + + + + + x + 2250 + + + + + x + 2251 + + + + + x + 2252 + + + + + x + 2253 + + + + + x + 2254 + + + + + x + 2255 + + + + + x + 2256 + + + + + x + 2257 + + + + + x + 2258 + + + + + x + 2259 + + + + + x + 2260 + + + + + x + 2261 + + + + + x + 2262 + + + + + x + 2263 + + + + + x + 2264 + + + + + x + 2265 + + + + + x + 2266 + + + + + x + 2267 + + + + + x + 2268 + + + + + x + 2269 + + + + + x + 2270 + + + + + x + 2271 + + + + + x + 2272 + + + + + x + 2273 + + + + + x + 2274 + + + + + x + 2275 + + + + + x + 2276 + + + + + x + 2277 + + + + + x + 2278 + + + + + x + 2279 + + + + + x + 2280 + + + + + x + 2281 + + + + + x + 2282 + + + + + x + 2283 + + + + + x + 2284 + + + + + x + 2285 + + + + + x + 2286 + + + + + x + 2287 + + + + + x + 2288 + + + + + x + 2289 + + + + + x + 2290 + + + + + x + 2291 + + + + + x + 2292 + + + + + x + 2293 + + + + + x + 2294 + + + + + x + 2295 + + + + + x + 2296 + + + + + x + 2297 + + + + + x + 2298 + + + + + x + 2299 + + + + + x + 2300 + + + + + x + 2301 + + + + + x + 2302 + + + + + x + 2303 + + + + + x + 2304 + + + + + x + 2305 + + + + + x + 2306 + + + + + x + 2307 + + + + + x + 2308 + + + + + x + 2309 + + + + + x + 2310 + + + + + x + 2311 + + + + + x + 2312 + + + + + x + 2313 + + + + + x + 2314 + + + + + x + 2315 + + + + + x + 2316 + + + + + x + 2317 + + + + + x + 2318 + + + + + x + 2319 + + + + + x + 2320 + + + + + x + 2321 + + + + + x + 2322 + + + + + x + 2323 + + + + + x + 2324 + + + + + x + 2325 + + + + + x + 2326 + + + + + x + 2327 + + + + + x + 2328 + + + + + x + 2329 + + + + + x + 2330 + + + + + x + 2331 + + + + + x + 2332 + + + + + x + 2333 + + + + + x + 2334 + + + + + x + 2335 + + + + + x + 2336 + + + + + x + 2337 + + + + + x + 2338 + + + + + x + 2339 + + + + + x + 2340 + + + + + x + 2341 + + + + + x + 2342 + + + + + x + 2343 + + + + + x + 2344 + + + + + x + 2345 + + + + + x + 2346 + + + + + x + 2347 + + + + + x + 2348 + + + + + x + 2349 + + + + + x + 2350 + + + + + x + 2351 + + + + + x + 2352 + + + + + x + 2353 + + + + + x + 2354 + + + + + x + 2355 + + + + + x + 2356 + + + + + x + 2357 + + + + + x + 2358 + + + + + x + 2359 + + + + + x + 2360 + + + + + x + 2361 + + + + + x + 2362 + + + + + x + 2363 + + + + + x + 2364 + + + + + x + 2365 + + + + + x + 2366 + + + + + x + 2367 + + + + + x + 2368 + + + + + x + 2369 + + + + + x + 2370 + + + + + x + 2371 + + + + + x + 2372 + + + + + x + 2373 + + + + + x + 2374 + + + + + x + 2375 + + + + + x + 2376 + + + + + x + 2377 + + + + + x + 2378 + + + + + x + 2379 + + + + + x + 2380 + + + + + x + 2381 + + + + + x + 2382 + + + + + x + 2383 + + + + + x + 2384 + + + + + x + 2385 + + + + + x + 2386 + + + + + x + 2387 + + + + + x + 2388 + + + + + x + 2389 + + + + + x + 2390 + + + + + x + 2391 + + + + + x + 2392 + + + + + x + 2393 + + + + + x + 2394 + + + + + x + 2395 + + + + + x + 2396 + + + + + x + 2397 + + + + + x + 2398 + + + + + x + 2399 + + + + + x + 2400 + + + + + x + 2401 + + + + + x + 2402 + + + + + x + 2403 + + + + + x + 2404 + + + + + x + 2405 + + + + + x + 2406 + + + + + x + 2407 + + + + + x + 2408 + + + + + x + 2409 + + + + + x + 2410 + + + + + x + 2411 + + + + + x + 2412 + + + + + x + 2413 + + + + + x + 2414 + + + + + x + 2415 + + + + + x + 2416 + + + + + x + 2417 + + + + + x + 2418 + + + + + x + 2419 + + + + + x + 2420 + + + + + x + 2421 + + + + + x + 2422 + + + + + x + 2423 + + + + + x + 2424 + + + + + x + 2425 + + + + + x + 2426 + + + + + x + 2427 + + + + + x + 2428 + + + + + x + 2429 + + + + + x + 2430 + + + + + x + 2431 + + + + + x + 2432 + + + + + x + 2433 + + + + + x + 2434 + + + + + x + 2435 + + + + + x + 2436 + + + + + x + 2437 + + + + + x + 2438 + + + + + x + 2439 + + + + + x + 2440 + + + + + x + 2441 + + + + + x + 2442 + + + + + x + 2443 + + + + + x + 2444 + + + + + x + 2445 + + + + + x + 2446 + + + + + x + 2447 + + + + + x + 2448 + + + + + x + 2449 + + + + + x + 2450 + + + + + x + 2451 + + + + + x + 2452 + + + + + x + 2453 + + + + + x + 2454 + + + + + x + 2455 + + + + + x + 2456 + + + + + x + 2457 + + + + + x + 2458 + + + + + x + 2459 + + + + + x + 2460 + + + + + x + 2461 + + + + + x + 2462 + + + + + x + 2463 + + + + + x + 2464 + + + + + x + 2465 + + + + + x + 2466 + + + + + x + 2467 + + + + + x + 2468 + + + + + x + 2469 + + + + + x + 2470 + + + + + x + 2471 + + + + + x + 2472 + + + + + x + 2473 + + + + + x + 2474 + + + + + x + 2475 + + + + + x + 2476 + + + + + x + 2477 + + + + + x + 2478 + + + + + x + 2479 + + + + + x + 2480 + + + + + x + 2481 + + + + + x + 2482 + + + + + x + 2483 + + + + + x + 2484 + + + + + x + 2485 + + + + + x + 2486 + + + + + x + 2487 + + + + + x + 2488 + + + + + x + 2489 + + + + + x + 2490 + + + + + x + 2491 + + + + + x + 2492 + + + + + x + 2493 + + + + + x + 2494 + + + + + x + 2495 + + + + + x + 2496 + + + + + x + 2497 + + + + + x + 2498 + + + + + x + 2499 + + + + + x + 2500 + + + + + x + 2501 + + + + + x + 2502 + + + + + x + 2503 + + + + + x + 2504 + + + + + x + 2505 + + + + + x + 2506 + + + + + x + 2507 + + + + + x + 2508 + + + + + x + 2509 + + + + + x + 2510 + + + + + x + 2511 + + + + + x + 2512 + + + + + x + 2513 + + + + + x + 2514 + + + + + x + 2515 + + + + + x + 2516 + + + + + x + 2517 + + + + + x + 2518 + + + + + x + 2519 + + + + + x + 2520 + + + + + x + 2521 + + + + + x + 2522 + + + + + x + 2523 + + + + + x + 2524 + + + + + x + 2525 + + + + + x + 2526 + + + + + x + 2527 + + + + + x + 2528 + + + + + x + 2529 + + + + + x + 2530 + + + + + x + 2531 + + + + + x + 2532 + + + + + x + 2533 + + + + + x + 2534 + + + + + x + 2535 + + + + + x + 2536 + + + + + x + 2537 + + + + + x + 2538 + + + + + x + 2539 + + + + + x + 2540 + + + + + x + 2541 + + + + + x + 2542 + + + + + x + 2543 + + + + + x + 2544 + + + + + x + 2545 + + + + + x + 2546 + + + + + x + 2547 + + + + + x + 2548 + + + + + x + 2549 + + + + + x + 2550 + + + + + x + 2551 + + + + + x + 2552 + + + + + x + 2553 + + + + + x + 2554 + + + + + x + 2555 + + + + + x + 2556 + + + + + x + 2557 + + + + + x + 2558 + + + + + x + 2559 + + + + + x + 2560 + + + + + x + 2561 + + + + + x + 2562 + + + + + x + 2563 + + + + + x + 2564 + + + + + x + 2565 + + + + + x + 2566 + + + + + x + 2567 + + + + + x + 2568 + + + + + x + 2569 + + + + + x + 2570 + + + + + x + 2571 + + + + + x + 2572 + + + + + x + 2573 + + + + + x + 2574 + + + + + x + 2575 + + + + + x + 2576 + + + + + x + 2577 + + + + + x + 2578 + + + + + x + 2579 + + + + + x + 2580 + + + + + x + 2581 + + + + + x + 2582 + + + + + x + 2583 + + + + + x + 2584 + + + + + x + 2585 + + + + + x + 2586 + + + + + x + 2587 + + + + + x + 2588 + + + + + x + 2589 + + + + + x + 2590 + + + + + x + 2591 + + + + + x + 2592 + + + + + x + 2593 + + + + + x + 2594 + + + + + x + 2595 + + + + + x + 2596 + + + + + x + 2597 + + + + + x + 2598 + + + + + x + 2599 + + + + + x + 2600 + + + + + x + 2601 + + + + + x + 2602 + + + + + x + 2603 + + + + + x + 2604 + + + + + x + 2605 + + + + + x + 2606 + + + + + x + 2607 + + + + + x + 2608 + + + + + x + 2609 + + + + + x + 2610 + + + + + x + 2611 + + + + + x + 2612 + + + + + x + 2613 + + + + + x + 2614 + + + + + x + 2615 + + + + + x + 2616 + + + + + x + 2617 + + + + + x + 2618 + + + + + x + 2619 + + + + + x + 2620 + + + + + x + 2621 + + + + + x + 2622 + + + + + x + 2623 + + + + + x + 2624 + + + + + x + 2625 + + + + + x + 2626 + + + + + x + 2627 + + + + + x + 2628 + + + + + x + 2629 + + + + + x + 2630 + + + + + x + 2631 + + + + + x + 2632 + + + + + x + 2633 + + + + + x + 2634 + + + + + x + 2635 + + + + + x + 2636 + + + + + x + 2637 + + + + + x + 2638 + + + + + x + 2639 + + + + + x + 2640 + + + + + x + 2641 + + + + + x + 2642 + + + + + x + 2643 + + + + + x + 2644 + + + + + x + 2645 + + + + + x + 2646 + + + + + x + 2647 + + + + + x + 2648 + + + + + x + 2649 + + + + + x + 2650 + + + + + x + 2651 + + + + + x + 2652 + + + + + x + 2653 + + + + + x + 2654 + + + + + x + 2655 + + + + + x + 2656 + + + + + x + 2657 + + + + + x + 2658 + + + + + x + 2659 + + + + + x + 2660 + + + + + x + 2661 + + + + + x + 2662 + + + + + x + 2663 + + + + + x + 2664 + + + + + x + 2665 + + + + + x + 2666 + + + + + x + 2667 + + + + + x + 2668 + + + + + x + 2669 + + + + + x + 2670 + + + + + x + 2671 + + + + + x + 2672 + + + + + x + 2673 + + + + + x + 2674 + + + + + x + 2675 + + + + + x + 2676 + + + + + x + 2677 + + + + + x + 2678 + + + + + x + 2679 + + + + + x + 2680 + + + + + x + 2681 + + + + + x + 2682 + + + + + x + 2683 + + + + + x + 2684 + + + + + x + 2685 + + + + + x + 2686 + + + + + x + 2687 + + + + + x + 2688 + + + + + x + 2689 + + + + + x + 2690 + + + + + x + 2691 + + + + + x + 2692 + + + + + x + 2693 + + + + + x + 2694 + + + + + x + 2695 + + + + + x + 2696 + + + + + x + 2697 + + + + + x + 2698 + + + + + x + 2699 + + + + + x + 2700 + + + + + x + 2701 + + + + + x + 2702 + + + + + x + 2703 + + + + + x + 2704 + + + + + x + 2705 + + + + + x + 2706 + + + + + x + 2707 + + + + + x + 2708 + + + + + x + 2709 + + + + + x + 2710 + + + + + x + 2711 + + + + + x + 2712 + + + + + x + 2713 + + + + + x + 2714 + + + + + x + 2715 + + + + + x + 2716 + + + + + x + 2717 + + + + + x + 2718 + + + + + x + 2719 + + + + + x + 2720 + + + + + x + 2721 + + + + + x + 2722 + + + + + x + 2723 + + + + + x + 2724 + + + + + x + 2725 + + + + + x + 2726 + + + + + x + 2727 + + + + + x + 2728 + + + + + x + 2729 + + + + + x + 2730 + + + + + x + 2731 + + + + + x + 2732 + + + + + x + 2733 + + + + + x + 2734 + + + + + x + 2735 + + + + + x + 2736 + + + + + x + 2737 + + + + + x + 2738 + + + + + x + 2739 + + + + + x + 2740 + + + + + x + 2741 + + + + + x + 2742 + + + + + x + 2743 + + + + + x + 2744 + + + + + x + 2745 + + + + + x + 2746 + + + + + x + 2747 + + + + + x + 2748 + + + + + x + 2749 + + + + + x + 2750 + + + + + x + 2751 + + + + + x + 2752 + + + + + x + 2753 + + + + + x + 2754 + + + + + x + 2755 + + + + + x + 2756 + + + + + x + 2757 + + + + + x + 2758 + + + + + x + 2759 + + + + + x + 2760 + + + + + x + 2761 + + + + + x + 2762 + + + + + x + 2763 + + + + + x + 2764 + + + + + x + 2765 + + + + + x + 2766 + + + + + x + 2767 + + + + + x + 2768 + + + + + x + 2769 + + + + + x + 2770 + + + + + x + 2771 + + + + + x + 2772 + + + + + x + 2773 + + + + + x + 2774 + + + + + x + 2775 + + + + + x + 2776 + + + + + x + 2777 + + + + + x + 2778 + + + + + x + 2779 + + + + + x + 2780 + + + + + x + 2781 + + + + + x + 2782 + + + + + x + 2783 + + + + + x + 2784 + + + + + x + 2785 + + + + + x + 2786 + + + + + x + 2787 + + + + + x + 2788 + + + + + x + 2789 + + + + + x + 2790 + + + + + x + 2791 + + + + + x + 2792 + + + + + x + 2793 + + + + + x + 2794 + + + + + x + 2795 + + + + + x + 2796 + + + + + x + 2797 + + + + + x + 2798 + + + + + x + 2799 + + + + + x + 2800 + + + + + x + 2801 + + + + + x + 2802 + + + + + x + 2803 + + + + + x + 2804 + + + + + x + 2805 + + + + + x + 2806 + + + + + x + 2807 + + + + + x + 2808 + + + + + x + 2809 + + + + + x + 2810 + + + + + x + 2811 + + + + + x + 2812 + + + + + x + 2813 + + + + + x + 2814 + + + + + x + 2815 + + + + + x + 2816 + + + + + x + 2817 + + + + + x + 2818 + + + + + x + 2819 + + + + + x + 2820 + + + + + x + 2821 + + + + + x + 2822 + + + + + x + 2823 + + + + + x + 2824 + + + + + x + 2825 + + + + + x + 2826 + + + + + x + 2827 + + + + + x + 2828 + + + + + x + 2829 + + + + + x + 2830 + + + + + x + 2831 + + + + + x + 2832 + + + + + x + 2833 + + + + + x + 2834 + + + + + x + 2835 + + + + + x + 2836 + + + + + x + 2837 + + + + + x + 2838 + + + + + x + 2839 + + + + + x + 2840 + + + + + x + 2841 + + + + + x + 2842 + + + + + x + 2843 + + + + + x + 2844 + + + + + x + 2845 + + + + + x + 2846 + + + + + x + 2847 + + + + + x + 2848 + + + + + x + 2849 + + + + + x + 2850 + + + + + x + 2851 + + + + + x + 2852 + + + + + x + 2853 + + + + + x + 2854 + + + + + x + 2855 + + + + + x + 2856 + + + + + x + 2857 + + + + + x + 2858 + + + + + x + 2859 + + + + + x + 2860 + + + + + x + 2861 + + + + + x + 2862 + + + + + x + 2863 + + + + + x + 2864 + + + + + x + 2865 + + + + + x + 2866 + + + + + x + 2867 + + + + + x + 2868 + + + + + x + 2869 + + + + + x + 2870 + + + + + x + 2871 + + + + + x + 2872 + + + + + x + 2873 + + + + + x + 2874 + + + + + x + 2875 + + + + + x + 2876 + + + + + x + 2877 + + + + + x + 2878 + + + + + x + 2879 + + + + + x + 2880 + + + + + x + 2881 + + + + + x + 2882 + + + + + x + 2883 + + + + + x + 2884 + + + + + x + 2885 + + + + + x + 2886 + + + + + x + 2887 + + + + + x + 2888 + + + + + x + 2889 + + + + + x + 2890 + + + + + x + 2891 + + + + + x + 2892 + + + + + x + 2893 + + + + + x + 2894 + + + + + x + 2895 + + + + + x + 2896 + + + + + x + 2897 + + + + + x + 2898 + + + + + x + 2899 + + + + + x + 2900 + + + + + x + 2901 + + + + + x + 2902 + + + + + x + 2903 + + + + + x + 2904 + + + + + x + 2905 + + + + + x + 2906 + + + + + x + 2907 + + + + + x + 2908 + + + + + x + 2909 + + + + + x + 2910 + + + + + x + 2911 + + + + + x + 2912 + + + + + x + 2913 + + + + + x + 2914 + + + + + x + 2915 + + + + + x + 2916 + + + + + x + 2917 + + + + + x + 2918 + + + + + x + 2919 + + + + + x + 2920 + + + + + x + 2921 + + + + + x + 2922 + + + + + x + 2923 + + + + + x + 2924 + + + + + x + 2925 + + + + + x + 2926 + + + + + x + 2927 + + + + + x + 2928 + + + + + x + 2929 + + + + + x + 2930 + + + + + x + 2931 + + + + + x + 2932 + + + + + x + 2933 + + + + + x + 2934 + + + + + x + 2935 + + + + + x + 2936 + + + + + x + 2937 + + + + + x + 2938 + + + + + x + 2939 + + + + + x + 2940 + + + + + x + 2941 + + + + + x + 2942 + + + + + x + 2943 + + + + + x + 2944 + + + + + x + 2945 + + + + + x + 2946 + + + + + x + 2947 + + + + + x + 2948 + + + + + x + 2949 + + + + + x + 2950 + + + + + x + 2951 + + + + + x + 2952 + + + + + x + 2953 + + + + + x + 2954 + + + + + x + 2955 + + + + + x + 2956 + + + + + x + 2957 + + + + + x + 2958 + + + + + x + 2959 + + + + + x + 2960 + + + + + x + 2961 + + + + + x + 2962 + + + + + x + 2963 + + + + + x + 2964 + + + + + x + 2965 + + + + + x + 2966 + + + + + x + 2967 + + + + + x + 2968 + + + + + x + 2969 + + + + + x + 2970 + + + + + x + 2971 + + + + + x + 2972 + + + + + x + 2973 + + + + + x + 2974 + + + + + x + 2975 + + + + + x + 2976 + + + + + x + 2977 + + + + + x + 2978 + + + + + x + 2979 + + + + + x + 2980 + + + + + x + 2981 + + + + + x + 2982 + + + + + x + 2983 + + + + + x + 2984 + + + + + x + 2985 + + + + + x + 2986 + + + + + x + 2987 + + + + + x + 2988 + + + + + x + 2989 + + + + + x + 2990 + + + + + x + 2991 + + + + + x + 2992 + + + + + x + 2993 + + + + + x + 2994 + + + + + x + 2995 + + + + + x + 2996 + + + + + x + 2997 + + + + + x + 2998 + + + + + x + 2999 + + + + + x + 3000 + + + + + x + 3001 + + + + + x + 3002 + + + + + x + 3003 + + + + + x + 3004 + + + + + x + 3005 + + + + + x + 3006 + + + + + x + 3007 + + + + + x + 3008 + + + + + x + 3009 + + + + + x + 3010 + + + + + x + 3011 + + + + + x + 3012 + + + + + x + 3013 + + + + + x + 3014 + + + + + x + 3015 + + + + + x + 3016 + + + + + x + 3017 + + + + + x + 3018 + + + + + x + 3019 + + + + + x + 3020 + + + + + x + 3021 + + + + + x + 3022 + + + + + x + 3023 + + + + + x + 3024 + + + + + x + 3025 + + + + + x + 3026 + + + + + x + 3027 + + + + + x + 3028 + + + + + x + 3029 + + + + + x + 3030 + + + + + x + 3031 + + + + + x + 3032 + + + + + x + 3033 + + + + + x + 3034 + + + + + x + 3035 + + + + + x + 3036 + + + + + x + 3037 + + + + + x + 3038 + + + + + x + 3039 + + + + + x + 3040 + + + + + x + 3041 + + + + + x + 3042 + + + + + x + 3043 + + + + + x + 3044 + + + + + x + 3045 + + + + + x + 3046 + + + + + x + 3047 + + + + + x + 3048 + + + + + x + 3049 + + + + + x + 3050 + + + + + x + 3051 + + + + + x + 3052 + + + + + x + 3053 + + + + + x + 3054 + + + + + x + 3055 + + + + + x + 3056 + + + + + x + 3057 + + + + + x + 3058 + + + + + x + 3059 + + + + + x + 3060 + + + + + x + 3061 + + + + + x + 3062 + + + + + x + 3063 + + + + + x + 3064 + + + + + x + 3065 + + + + + x + 3066 + + + + + x + 3067 + + + + + x + 3068 + + + + + x + 3069 + + + + + x + 3070 + + + + + x + 3071 + + + + + x + 3072 + + + + + x + 3073 + + + + + x + 3074 + + + + + x + 3075 + + + + + x + 3076 + + + + + x + 3077 + + + + + x + 3078 + + + + + x + 3079 + + + + + x + 3080 + + + + + x + 3081 + + + + + x + 3082 + + + + + x + 3083 + + + + + x + 3084 + + + + + x + 3085 + + + + + x + 3086 + + + + + x + 3087 + + + + + x + 3088 + + + + + x + 3089 + + + + + x + 3090 + + + + + x + 3091 + + + + + x + 3092 + + + + + x + 3093 + + + + + x + 3094 + + + + + x + 3095 + + + + + x + 3096 + + + + + x + 3097 + + + + + x + 3098 + + + + + x + 3099 + + + + + x + 3100 + + + + + x + 3101 + + + + + x + 3102 + + + + + x + 3103 + + + + + x + 3104 + + + + + x + 3105 + + + + + x + 3106 + + + + + x + 3107 + + + + + x + 3108 + + + + + x + 3109 + + + + + x + 3110 + + + + + x + 3111 + + + + + x + 3112 + + + + + x + 3113 + + + + + x + 3114 + + + + + x + 3115 + + + + + x + 3116 + + + + + x + 3117 + + + + + x + 3118 + + + + + x + 3119 + + + + + x + 3120 + + + + + x + 3121 + + + + + x + 3122 + + + + + x + 3123 + + + + + x + 3124 + + + + + x + 3125 + + + + + x + 3126 + + + + + x + 3127 + + + + + x + 3128 + + + + + x + 3129 + + + + + x + 3130 + + + + + x + 3131 + + + + + x + 3132 + + + + + x + 3133 + + + + + x + 3134 + + + + + x + 3135 + + + + + x + 3136 + + + + + x + 3137 + + + + + x + 3138 + + + + + x + 3139 + + + + + x + 3140 + + + + + x + 3141 + + + + + x + 3142 + + + + + x + 3143 + + + + + x + 3144 + + + + + x + 3145 + + + + + x + 3146 + + + + + x + 3147 + + + + + x + 3148 + + + + + x + 3149 + + + + + x + 3150 + + + + + x + 3151 + + + + + x + 3152 + + + + + x + 3153 + + + + + x + 3154 + + + + + x + 3155 + + + + + x + 3156 + + + + + x + 3157 + + + + + x + 3158 + + + + + x + 3159 + + + + + x + 3160 + + + + + x + 3161 + + + + + x + 3162 + + + + + x + 3163 + + + + + x + 3164 + + + + + x + 3165 + + + + + x + 3166 + + + + + x + 3167 + + + + + x + 3168 + + + + + x + 3169 + + + + + x + 3170 + + + + + x + 3171 + + + + + x + 3172 + + + + + x + 3173 + + + + + x + 3174 + + + + + x + 3175 + + + + + x + 3176 + + + + + x + 3177 + + + + + x + 3178 + + + + + x + 3179 + + + + + x + 3180 + + + + + x + 3181 + + + + + x + 3182 + + + + + x + 3183 + + + + + x + 3184 + + + + + x + 3185 + + + + + x + 3186 + + + + + x + 3187 + + + + + x + 3188 + + + + + x + 3189 + + + + + x + 3190 + + + + + x + 3191 + + + + + x + 3192 + + + + + x + 3193 + + + + + x + 3194 + + + + + x + 3195 + + + + + x + 3196 + + + + + x + 3197 + + + + + x + 3198 + + + + + x + 3199 + + + + + x + 3200 + + + + + x + 3201 + + + + + x + 3202 + + + + + x + 3203 + + + + + x + 3204 + + + + + x + 3205 + + + + + x + 3206 + + + + + x + 3207 + + + + + x + 3208 + + + + + x + 3209 + + + + + x + 3210 + + + + + x + 3211 + + + + + x + 3212 + + + + + x + 3213 + + + + + x + 3214 + + + + + x + 3215 + + + + + x + 3216 + + + + + x + 3217 + + + + + x + 3218 + + + + + x + 3219 + + + + + x + 3220 + + + + + x + 3221 + + + + + x + 3222 + + + + + x + 3223 + + + + + x + 3224 + + + + + x + 3225 + + + + + x + 3226 + + + + + x + 3227 + + + + + x + 3228 + + + + + x + 3229 + + + + + x + 3230 + + + + + x + 3231 + + + + + x + 3232 + + + + + x + 3233 + + + + + x + 3234 + + + + + x + 3235 + + + + + x + 3236 + + + + + x + 3237 + + + + + x + 3238 + + + + + x + 3239 + + + + + x + 3240 + + + + + x + 3241 + + + + + x + 3242 + + + + + x + 3243 + + + + + x + 3244 + + + + + x + 3245 + + + + + x + 3246 + + + + + x + 3247 + + + + + x + 3248 + + + + + x + 3249 + + + + + x + 3250 + + + + + x + 3251 + + + + + x + 3252 + + + + + x + 3253 + + + + + x + 3254 + + + + + x + 3255 + + + + + x + 3256 + + + + + x + 3257 + + + + + x + 3258 + + + + + x + 3259 + + + + + x + 3260 + + + + + x + 3261 + + + + + x + 3262 + + + + + x + 3263 + + + + + x + 3264 + + + + + x + 3265 + + + + + x + 3266 + + + + + x + 3267 + + + + + x + 3268 + + + + + x + 3269 + + + + + x + 3270 + + + + + x + 3271 + + + + + x + 3272 + + + + + x + 3273 + + + + + x + 3274 + + + + + x + 3275 + + + + + x + 3276 + + + + + x + 3277 + + + + + x + 3278 + + + + + x + 3279 + + + + + x + 3280 + + + + + x + 3281 + + + + + x + 3282 + + + + + x + 3283 + + + + + x + 3284 + + + + + x + 3285 + + + + + x + 3286 + + + + + x + 3287 + + + + + x + 3288 + + + + + x + 3289 + + + + + x + 3290 + + + + + x + 3291 + + + + + x + 3292 + + + + + x + 3293 + + + + + x + 3294 + + + + + x + 3295 + + + + + x + 3296 + + + + + x + 3297 + + + + + x + 3298 + + + + + x + 3299 + + + + + x + 3300 + + + + + x + 3301 + + + + + x + 3302 + + + + + x + 3303 + + + + + x + 3304 + + + + + x + 3305 + + + + + x + 3306 + + + + + x + 3307 + + + + + x + 3308 + + + + + x + 3309 + + + + + x + 3310 + + + + + x + 3311 + + + + + x + 3312 + + + + + x + 3313 + + + + + x + 3314 + + + + + x + 3315 + + + + + x + 3316 + + + + + x + 3317 + + + + + x + 3318 + + + + + x + 3319 + + + + + x + 3320 + + + + + x + 3321 + + + + + x + 3322 + + + + + x + 3323 + + + + + x + 3324 + + + + + x + 3325 + + + + + x + 3326 + + + + + x + 3327 + + + + + x + 3328 + + + + + x + 3329 + + + + + x + 3330 + + + + + x + 3331 + + + + + x + 3332 + + + + + x + 3333 + + + + + x + 3334 + + + + + x + 3335 + + + + + x + 3336 + + + + + x + 3337 + + + + + x + 3338 + + + + + x + 3339 + + + + + x + 3340 + + + + + x + 3341 + + + + + x + 3342 + + + + + x + 3343 + + + + + x + 3344 + + + + + x + 3345 + + + + + x + 3346 + + + + + x + 3347 + + + + + x + 3348 + + + + + x + 3349 + + + + + x + 3350 + + + + + x + 3351 + + + + + x + 3352 + + + + + x + 3353 + + + + + x + 3354 + + + + + x + 3355 + + + + + x + 3356 + + + + + x + 3357 + + + + + x + 3358 + + + + + x + 3359 + + + + + x + 3360 + + + + + x + 3361 + + + + + x + 3362 + + + + + x + 3363 + + + + + x + 3364 + + + + + x + 3365 + + + + + x + 3366 + + + + + x + 3367 + + + + + x + 3368 + + + + + x + 3369 + + + + + x + 3370 + + + + + x + 3371 + + + + + x + 3372 + + + + + x + 3373 + + + + + x + 3374 + + + + + x + 3375 + + + + + x + 3376 + + + + + x + 3377 + + + + + x + 3378 + + + + + x + 3379 + + + + + x + 3380 + + + + + x + 3381 + + + + + x + 3382 + + + + + x + 3383 + + + + + x + 3384 + + + + + x + 3385 + + + + + x + 3386 + + + + + x + 3387 + + + + + x + 3388 + + + + + x + 3389 + + + + + x + 3390 + + + + + x + 3391 + + + + + x + 3392 + + + + + x + 3393 + + + + + x + 3394 + + + + + x + 3395 + + + + + x + 3396 + + + + + x + 3397 + + + + + x + 3398 + + + + + x + 3399 + + + + + x + 3400 + + + + + x + 3401 + + + + + x + 3402 + + + + + x + 3403 + + + + + x + 3404 + + + + + x + 3405 + + + + + x + 3406 + + + + + x + 3407 + + + + + x + 3408 + + + + + x + 3409 + + + + + x + 3410 + + + + + x + 3411 + + + + + x + 3412 + + + + + x + 3413 + + + + + x + 3414 + + + + + x + 3415 + + + + + x + 3416 + + + + + x + 3417 + + + + + x + 3418 + + + + + x + 3419 + + + + + x + 3420 + + + + + x + 3421 + + + + + x + 3422 + + + + + x + 3423 + + + + + x + 3424 + + + + + x + 3425 + + + + + x + 3426 + + + + + x + 3427 + + + + + x + 3428 + + + + + x + 3429 + + + + + x + 3430 + + + + + x + 3431 + + + + + x + 3432 + + + + + x + 3433 + + + + + x + 3434 + + + + + x + 3435 + + + + + x + 3436 + + + + + x + 3437 + + + + + x + 3438 + + + + + x + 3439 + + + + + x + 3440 + + + + + x + 3441 + + + + + x + 3442 + + + + + x + 3443 + + + + + x + 3444 + + + + + x + 3445 + + + + + x + 3446 + + + + + x + 3447 + + + + + x + 3448 + + + + + x + 3449 + + + + + x + 3450 + + + + + x + 3451 + + + + + x + 3452 + + + + + x + 3453 + + + + + x + 3454 + + + + + x + 3455 + + + + + x + 3456 + + + + + x + 3457 + + + + + x + 3458 + + + + + x + 3459 + + + + + x + 3460 + + + + + x + 3461 + + + + + x + 3462 + + + + + x + 3463 + + + + + x + 3464 + + + + + x + 3465 + + + + + x + 3466 + + + + + x + 3467 + + + + + x + 3468 + + + + + x + 3469 + + + + + x + 3470 + + + + + x + 3471 + + + + + x + 3472 + + + + + x + 3473 + + + + + x + 3474 + + + + + x + 3475 + + + + + x + 3476 + + + + + x + 3477 + + + + + x + 3478 + + + + + x + 3479 + + + + + x + 3480 + + + + + x + 3481 + + + + + x + 3482 + + + + + x + 3483 + + + + + x + 3484 + + + + + x + 3485 + + + + + x + 3486 + + + + + x + 3487 + + + + + x + 3488 + + + + + x + 3489 + + + + + x + 3490 + + + + + x + 3491 + + + + + x + 3492 + + + + + x + 3493 + + + + + x + 3494 + + + + + x + 3495 + + + + + x + 3496 + + + + + x + 3497 + + + + + x + 3498 + + + + + x + 3499 + + + + + x + 3500 + + + + + x + 3501 + + + + + x + 3502 + + + + + x + 3503 + + + + + x + 3504 + + + + + x + 3505 + + + + + x + 3506 + + + + + x + 3507 + + + + + x + 3508 + + + + + x + 3509 + + + + + x + 3510 + + + + + x + 3511 + + + + + x + 3512 + + + + + x + 3513 + + + + + x + 3514 + + + + + x + 3515 + + + + + x + 3516 + + + + + x + 3517 + + + + + x + 3518 + + + + + x + 3519 + + + + + x + 3520 + + + + + x + 3521 + + + + + x + 3522 + + + + + x + 3523 + + + + + x + 3524 + + + + + x + 3525 + + + + + x + 3526 + + + + + x + 3527 + + + + + x + 3528 + + + + + x + 3529 + + + + + x + 3530 + + + + + x + 3531 + + + + + x + 3532 + + + + + x + 3533 + + + + + x + 3534 + + + + + x + 3535 + + + + + x + 3536 + + + + + x + 3537 + + + + + x + 3538 + + + + + x + 3539 + + + + + x + 3540 + + + + + x + 3541 + + + + + x + 3542 + + + + + x + 3543 + + + + + x + 3544 + + + + + x + 3545 + + + + + x + 3546 + + + + + x + 3547 + + + + + x + 3548 + + + + + x + 3549 + + + + + x + 3550 + + + + + x + 3551 + + + + + x + 3552 + + + + + x + 3553 + + + + + x + 3554 + + + + + x + 3555 + + + + + x + 3556 + + + + + x + 3557 + + + + + x + 3558 + + + + + x + 3559 + + + + + x + 3560 + + + + + x + 3561 + + + + + x + 3562 + + + + + x + 3563 + + + + + x + 3564 + + + + + x + 3565 + + + + + x + 3566 + + + + + x + 3567 + + + + + x + 3568 + + + + + x + 3569 + + + + + x + 3570 + + + + + x + 3571 + + + + + x + 3572 + + + + + x + 3573 + + + + + x + 3574 + + + + + x + 3575 + + + + + x + 3576 + + + + + x + 3577 + + + + + x + 3578 + + + + + x + 3579 + + + + + x + 3580 + + + + + x + 3581 + + + + + x + 3582 + + + + + x + 3583 + + + + + x + 3584 + + + + + x + 3585 + + + + + x + 3586 + + + + + x + 3587 + + + + + x + 3588 + + + + + x + 3589 + + + + + x + 3590 + + + + + x + 3591 + + + + + x + 3592 + + + + + x + 3593 + + + + + x + 3594 + + + + + x + 3595 + + + + + x + 3596 + + + + + x + 3597 + + + + + x + 3598 + + + + + x + 3599 + + + + + x + 3600 + + + + + x + 3601 + + + + + x + 3602 + + + + + x + 3603 + + + + + x + 3604 + + + + + x + 3605 + + + + + x + 3606 + + + + + x + 3607 + + + + + x + 3608 + + + + + x + 3609 + + + + + x + 3610 + + + + + x + 3611 + + + + + x + 3612 + + + + + x + 3613 + + + + + x + 3614 + + + + + x + 3615 + + + + + x + 3616 + + + + + x + 3617 + + + + + x + 3618 + + + + + x + 3619 + + + + + x + 3620 + + + + + x + 3621 + + + + + x + 3622 + + + + + x + 3623 + + + + + x + 3624 + + + + + x + 3625 + + + + + x + 3626 + + + + + x + 3627 + + + + + x + 3628 + + + + + x + 3629 + + + + + x + 3630 + + + + + x + 3631 + + + + + x + 3632 + + + + + x + 3633 + + + + + x + 3634 + + + + + x + 3635 + + + + + x + 3636 + + + + + x + 3637 + + + + + x + 3638 + + + + + x + 3639 + + + + + x + 3640 + + + + + x + 3641 + + + + + x + 3642 + + + + + x + 3643 + + + + + x + 3644 + + + + + x + 3645 + + + + + x + 3646 + + + + + x + 3647 + + + + + x + 3648 + + + + + x + 3649 + + + + + x + 3650 + + + + + x + 3651 + + + + + x + 3652 + + + + + x + 3653 + + + + + x + 3654 + + + + + x + 3655 + + + + + x + 3656 + + + + + x + 3657 + + + + + x + 3658 + + + + + x + 3659 + + + + + x + 3660 + + + + + x + 3661 + + + + + x + 3662 + + + + + x + 3663 + + + + + x + 3664 + + + + + x + 3665 + + + + + x + 3666 + + + + + x + 3667 + + + + + x + 3668 + + + + + x + 3669 + + + + + x + 3670 + + + + + x + 3671 + + + + + x + 3672 + + + + + x + 3673 + + + + + x + 3674 + + + + + x + 3675 + + + + + x + 3676 + + + + + x + 3677 + + + + + x + 3678 + + + + + x + 3679 + + + + + x + 3680 + + + + + x + 3681 + + + + + x + 3682 + + + + + x + 3683 + + + + + x + 3684 + + + + + x + 3685 + + + + + x + 3686 + + + + + x + 3687 + + + + + x + 3688 + + + + + x + 3689 + + + + + x + 3690 + + + + + x + 3691 + + + + + x + 3692 + + + + + x + 3693 + + + + + x + 3694 + + + + + x + 3695 + + + + + x + 3696 + + + + + x + 3697 + + + + + x + 3698 + + + + + x + 3699 + + + + + x + 3700 + + + + + x + 3701 + + + + + x + 3702 + + + + + x + 3703 + + + + + x + 3704 + + + + + x + 3705 + + + + + x + 3706 + + + + + x + 3707 + + + + + x + 3708 + + + + + x + 3709 + + + + + x + 3710 + + + + + x + 3711 + + + + + x + 3712 + + + + + x + 3713 + + + + + x + 3714 + + + + + x + 3715 + + + + + x + 3716 + + + + + x + 3717 + + + + + x + 3718 + + + + + x + 3719 + + + + + x + 3720 + + + + + x + 3721 + + + + + x + 3722 + + + + + x + 3723 + + + + + x + 3724 + + + + + x + 3725 + + + + + x + 3726 + + + + + x + 3727 + + + + + x + 3728 + + + + + x + 3729 + + + + + x + 3730 + + + + + x + 3731 + + + + + x + 3732 + + + + + x + 3733 + + + + + x + 3734 + + + + + x + 3735 + + + + + x + 3736 + + + + + x + 3737 + + + + + x + 3738 + + + + + x + 3739 + + + + + x + 3740 + + + + + x + 3741 + + + + + x + 3742 + + + + + x + 3743 + + + + + x + 3744 + + + + + x + 3745 + + + + + x + 3746 + + + + + x + 3747 + + + + + x + 3748 + + + + + x + 3749 + + + + + x + 3750 + + + + + x + 3751 + + + + + x + 3752 + + + + + x + 3753 + + + + + x + 3754 + + + + + x + 3755 + + + + + x + 3756 + + + + + x + 3757 + + + + + x + 3758 + + + + + x + 3759 + + + + + x + 3760 + + + + + x + 3761 + + + + + x + 3762 + + + + + x + 3763 + + + + + x + 3764 + + + + + x + 3765 + + + + + x + 3766 + + + + + x + 3767 + + + + + x + 3768 + + + + + x + 3769 + + + + + x + 3770 + + + + + x + 3771 + + + + + x + 3772 + + + + + x + 3773 + + + + + x + 3774 + + + + + x + 3775 + + + + + x + 3776 + + + + + x + 3777 + + + + + x + 3778 + + + + + x + 3779 + + + + + x + 3780 + + + + + x + 3781 + + + + + x + 3782 + + + + + x + 3783 + + + + + x + 3784 + + + + + x + 3785 + + + + + x + 3786 + + + + + x + 3787 + + + + + x + 3788 + + + + + x + 3789 + + + + + x + 3790 + + + + + x + 3791 + + + + + x + 3792 + + + + + x + 3793 + + + + + x + 3794 + + + + + x + 3795 + + + + + x + 3796 + + + + + x + 3797 + + + + + x + 3798 + + + + + x + 3799 + + + + + x + 3800 + + + + + x + 3801 + + + + + x + 3802 + + + + + x + 3803 + + + + + x + 3804 + + + + + x + 3805 + + + + + x + 3806 + + + + + x + 3807 + + + + + x + 3808 + + + + + x + 3809 + + + + + x + 3810 + + + + + x + 3811 + + + + + x + 3812 + + + + + x + 3813 + + + + + x + 3814 + + + + + x + 3815 + + + + + x + 3816 + + + + + x + 3817 + + + + + x + 3818 + + + + + x + 3819 + + + + + x + 3820 + + + + + x + 3821 + + + + + x + 3822 + + + + + x + 3823 + + + + + x + 3824 + + + + + x + 3825 + + + + + x + 3826 + + + + + x + 3827 + + + + + x + 3828 + + + + + x + 3829 + + + + + x + 3830 + + + + + x + 3831 + + + + + x + 3832 + + + + + x + 3833 + + + + + x + 3834 + + + + + x + 3835 + + + + + x + 3836 + + + + + x + 3837 + + + + + x + 3838 + + + + + x + 3839 + + + + + x + 3840 + + + + + x + 3841 + + + + + x + 3842 + + + + + x + 3843 + + + + + x + 3844 + + + + + x + 3845 + + + + + x + 3846 + + + + + x + 3847 + + + + + x + 3848 + + + + + x + 3849 + + + + + x + 3850 + + + + + x + 3851 + + + + + x + 3852 + + + + + x + 3853 + + + + + x + 3854 + + + + + x + 3855 + + + + + x + 3856 + + + + + x + 3857 + + + + + x + 3858 + + + + + x + 3859 + + + + + x + 3860 + + + + + x + 3861 + + + + + x + 3862 + + + + + x + 3863 + + + + + x + 3864 + + + + + x + 3865 + + + + + x + 3866 + + + + + x + 3867 + + + + + x + 3868 + + + + + x + 3869 + + + + + x + 3870 + + + + + x + 3871 + + + + + x + 3872 + + + + + x + 3873 + + + + + x + 3874 + + + + + x + 3875 + + + + + x + 3876 + + + + + x + 3877 + + + + + x + 3878 + + + + + x + 3879 + + + + + x + 3880 + + + + + x + 3881 + + + + + x + 3882 + + + + + x + 3883 + + + + + x + 3884 + + + + + x + 3885 + + + + + x + 3886 + + + + + x + 3887 + + + + + x + 3888 + + + + + x + 3889 + + + + + x + 3890 + + + + + x + 3891 + + + + + x + 3892 + + + + + x + 3893 + + + + + x + 3894 + + + + + x + 3895 + + + + + x + 3896 + + + + + x + 3897 + + + + + x + 3898 + + + + + x + 3899 + + + + + x + 3900 + + + + + x + 3901 + + + + + x + 3902 + + + + + x + 3903 + + + + + x + 3904 + + + + + x + 3905 + + + + + x + 3906 + + + + + x + 3907 + + + + + x + 3908 + + + + + x + 3909 + + + + + x + 3910 + + + + + x + 3911 + + + + + x + 3912 + + + + + x + 3913 + + + + + x + 3914 + + + + + x + 3915 + + + + + x + 3916 + + + + + x + 3917 + + + + + x + 3918 + + + + + x + 3919 + + + + + x + 3920 + + + + + x + 3921 + + + + + x + 3922 + + + + + x + 3923 + + + + + x + 3924 + + + + + x + 3925 + + + + + x + 3926 + + + + + x + 3927 + + + + + x + 3928 + + + + + x + 3929 + + + + + x + 3930 + + + + + x + 3931 + + + + + x + 3932 + + + + + x + 3933 + + + + + x + 3934 + + + + + x + 3935 + + + + + x + 3936 + + + + + x + 3937 + + + + + x + 3938 + + + + + x + 3939 + + + + + x + 3940 + + + + + x + 3941 + + + + + x + 3942 + + + + + x + 3943 + + + + + x + 3944 + + + + + x + 3945 + + + + + x + 3946 + + + + + x + 3947 + + + + + x + 3948 + + + + + x + 3949 + + + + + x + 3950 + + + + + x + 3951 + + + + + x + 3952 + + + + + x + 3953 + + + + + x + 3954 + + + + + x + 3955 + + + + + x + 3956 + + + + + x + 3957 + + + + + x + 3958 + + + + + x + 3959 + + + + + x + 3960 + + + + + x + 3961 + + + + + x + 3962 + + + + + x + 3963 + + + + + x + 3964 + + + + + x + 3965 + + + + + x + 3966 + + + + + x + 3967 + + + + + x + 3968 + + + + + x + 3969 + + + + + x + 3970 + + + + + x + 3971 + + + + + x + 3972 + + + + + x + 3973 + + + + + x + 3974 + + + + + x + 3975 + + + + + x + 3976 + + + + + x + 3977 + + + + + x + 3978 + + + + + x + 3979 + + + + + x + 3980 + + + + + x + 3981 + + + + + x + 3982 + + + + + x + 3983 + + + + + x + 3984 + + + + + x + 3985 + + + + + x + 3986 + + + + + x + 3987 + + + + + x + 3988 + + + + + x + 3989 + + + + + x + 3990 + + + + + x + 3991 + + + + + x + 3992 + + + + + x + 3993 + + + + + x + 3994 + + + + + x + 3995 + + + + + x + 3996 + + + + + x + 3997 + + + + + x + 3998 + + + + + x + 3999 + + + + + x + 4000 + + + + + x + 4001 + + + + + x + 4002 + + + + + x + 4003 + + + + + x + 4004 + + + + + x + 4005 + + + + + x + 4006 + + + + + x + 4007 + + + + + x + 4008 + + + + + x + 4009 + + + + + x + 4010 + + + + + x + 4011 + + + + + x + 4012 + + + + + x + 4013 + + + + + x + 4014 + + + + + x + 4015 + + + + + x + 4016 + + + + + x + 4017 + + + + + x + 4018 + + + + + x + 4019 + + + + + x + 4020 + + + + + x + 4021 + + + + + x + 4022 + + + + + x + 4023 + + + + + x + 4024 + + + + + x + 4025 + + + + + x + 4026 + + + + + x + 4027 + + + + + x + 4028 + + + + + x + 4029 + + + + + x + 4030 + + + + + x + 4031 + + + + + x + 4032 + + + + + x + 4033 + + + + + x + 4034 + + + + + x + 4035 + + + + + x + 4036 + + + + + x + 4037 + + + + + x + 4038 + + + + + x + 4039 + + + + + x + 4040 + + + + + x + 4041 + + + + + x + 4042 + + + + + x + 4043 + + + + + x + 4044 + + + + + x + 4045 + + + + + x + 4046 + + + + + x + 4047 + + + + + x + 4048 + + + + + x + 4049 + + + + + x + 4050 + + + + + x + 4051 + + + + + x + 4052 + + + + + x + 4053 + + + + + x + 4054 + + + + + x + 4055 + + + + + x + 4056 + + + + + x + 4057 + + + + + x + 4058 + + + + + x + 4059 + + + + + x + 4060 + + + + + x + 4061 + + + + + x + 4062 + + + + + x + 4063 + + + + + x + 4064 + + + + + x + 4065 + + + + + x + 4066 + + + + + x + 4067 + + + + + x + 4068 + + + + + x + 4069 + + + + + x + 4070 + + + + + x + 4071 + + + + + x + 4072 + + + + + x + 4073 + + + + + x + 4074 + + + + + x + 4075 + + + + + x + 4076 + + + + + x + 4077 + + + + + x + 4078 + + + + + x + 4079 + + + + + x + 4080 + + + + + x + 4081 + + + + + x + 4082 + + + + + x + 4083 + + + + + x + 4084 + + + + + x + 4085 + + + + + x + 4086 + + + + + x + 4087 + + + + + x + 4088 + + + + + x + 4089 + + + + + x + 4090 + + + + + x + 4091 + + + + + x + 4092 + + + + + x + 4093 + + + + + x + 4094 + + + + + x + 4095 + + + + + x + 4096 + + + + + + + + x + + + x1 + + + + + x1 + + x + + 4 + + x + 1 + + + + + + + + + + x + + + + x + 0 + + + + + diff --git a/bench_horn_mcmc/sn_8192/config b/bench_horn_mcmc/sn_8192/config new file mode 100644 index 000000000..7d6db6322 --- /dev/null +++ b/bench_horn_mcmc/sn_8192/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +16385 +-8192 -8191 -8190 -8189 -8188 -8187 -8186 -8185 -8184 -8183 -8182 -8181 -8180 -8179 -8178 -8177 -8176 -8175 -8174 -8173 -8172 -8171 -8170 -8169 -8168 -8167 -8166 -8165 -8164 -8163 -8162 -8161 -8160 -8159 -8158 -8157 -8156 -8155 -8154 -8153 -8152 -8151 -8150 -8149 -8148 -8147 -8146 -8145 -8144 -8143 -8142 -8141 -8140 -8139 -8138 -8137 -8136 -8135 -8134 -8133 -8132 -8131 -8130 -8129 -8128 -8127 -8126 -8125 -8124 -8123 -8122 -8121 -8120 -8119 -8118 -8117 -8116 -8115 -8114 -8113 -8112 -8111 -8110 -8109 -8108 -8107 -8106 -8105 -8104 -8103 -8102 -8101 -8100 -8099 -8098 -8097 -8096 -8095 -8094 -8093 -8092 -8091 -8090 -8089 -8088 -8087 -8086 -8085 -8084 -8083 -8082 -8081 -8080 -8079 -8078 -8077 -8076 -8075 -8074 -8073 -8072 -8071 -8070 -8069 -8068 -8067 -8066 -8065 -8064 -8063 -8062 -8061 -8060 -8059 -8058 -8057 -8056 -8055 -8054 -8053 -8052 -8051 -8050 -8049 -8048 -8047 -8046 -8045 -8044 -8043 -8042 -8041 -8040 -8039 -8038 -8037 -8036 -8035 -8034 -8033 -8032 -8031 -8030 -8029 -8028 -8027 -8026 -8025 -8024 -8023 -8022 -8021 -8020 -8019 -8018 -8017 -8016 -8015 -8014 -8013 -8012 -8011 -8010 -8009 -8008 -8007 -8006 -8005 -8004 -8003 -8002 -8001 -8000 -7999 -7998 -7997 -7996 -7995 -7994 -7993 -7992 -7991 -7990 -7989 -7988 -7987 -7986 -7985 -7984 -7983 -7982 -7981 -7980 -7979 -7978 -7977 -7976 -7975 -7974 -7973 -7972 -7971 -7970 -7969 -7968 -7967 -7966 -7965 -7964 -7963 -7962 -7961 -7960 -7959 -7958 -7957 -7956 -7955 -7954 -7953 -7952 -7951 -7950 -7949 -7948 -7947 -7946 -7945 -7944 -7943 -7942 -7941 -7940 -7939 -7938 -7937 -7936 -7935 -7934 -7933 -7932 -7931 -7930 -7929 -7928 -7927 -7926 -7925 -7924 -7923 -7922 -7921 -7920 -7919 -7918 -7917 -7916 -7915 -7914 -7913 -7912 -7911 -7910 -7909 -7908 -7907 -7906 -7905 -7904 -7903 -7902 -7901 -7900 -7899 -7898 -7897 -7896 -7895 -7894 -7893 -7892 -7891 -7890 -7889 -7888 -7887 -7886 -7885 -7884 -7883 -7882 -7881 -7880 -7879 -7878 -7877 -7876 -7875 -7874 -7873 -7872 -7871 -7870 -7869 -7868 -7867 -7866 -7865 -7864 -7863 -7862 -7861 -7860 -7859 -7858 -7857 -7856 -7855 -7854 -7853 -7852 -7851 -7850 -7849 -7848 -7847 -7846 -7845 -7844 -7843 -7842 -7841 -7840 -7839 -7838 -7837 -7836 -7835 -7834 -7833 -7832 -7831 -7830 -7829 -7828 -7827 -7826 -7825 -7824 -7823 -7822 -7821 -7820 -7819 -7818 -7817 -7816 -7815 -7814 -7813 -7812 -7811 -7810 -7809 -7808 -7807 -7806 -7805 -7804 -7803 -7802 -7801 -7800 -7799 -7798 -7797 -7796 -7795 -7794 -7793 -7792 -7791 -7790 -7789 -7788 -7787 -7786 -7785 -7784 -7783 -7782 -7781 -7780 -7779 -7778 -7777 -7776 -7775 -7774 -7773 -7772 -7771 -7770 -7769 -7768 -7767 -7766 -7765 -7764 -7763 -7762 -7761 -7760 -7759 -7758 -7757 -7756 -7755 -7754 -7753 -7752 -7751 -7750 -7749 -7748 -7747 -7746 -7745 -7744 -7743 -7742 -7741 -7740 -7739 -7738 -7737 -7736 -7735 -7734 -7733 -7732 -7731 -7730 -7729 -7728 -7727 -7726 -7725 -7724 -7723 -7722 -7721 -7720 -7719 -7718 -7717 -7716 -7715 -7714 -7713 -7712 -7711 -7710 -7709 -7708 -7707 -7706 -7705 -7704 -7703 -7702 -7701 -7700 -7699 -7698 -7697 -7696 -7695 -7694 -7693 -7692 -7691 -7690 -7689 -7688 -7687 -7686 -7685 -7684 -7683 -7682 -7681 -7680 -7679 -7678 -7677 -7676 -7675 -7674 -7673 -7672 -7671 -7670 -7669 -7668 -7667 -7666 -7665 -7664 -7663 -7662 -7661 -7660 -7659 -7658 -7657 -7656 -7655 -7654 -7653 -7652 -7651 -7650 -7649 -7648 -7647 -7646 -7645 -7644 -7643 -7642 -7641 -7640 -7639 -7638 -7637 -7636 -7635 -7634 -7633 -7632 -7631 -7630 -7629 -7628 -7627 -7626 -7625 -7624 -7623 -7622 -7621 -7620 -7619 -7618 -7617 -7616 -7615 -7614 -7613 -7612 -7611 -7610 -7609 -7608 -7607 -7606 -7605 -7604 -7603 -7602 -7601 -7600 -7599 -7598 -7597 -7596 -7595 -7594 -7593 -7592 -7591 -7590 -7589 -7588 -7587 -7586 -7585 -7584 -7583 -7582 -7581 -7580 -7579 -7578 -7577 -7576 -7575 -7574 -7573 -7572 -7571 -7570 -7569 -7568 -7567 -7566 -7565 -7564 -7563 -7562 -7561 -7560 -7559 -7558 -7557 -7556 -7555 -7554 -7553 -7552 -7551 -7550 -7549 -7548 -7547 -7546 -7545 -7544 -7543 -7542 -7541 -7540 -7539 -7538 -7537 -7536 -7535 -7534 -7533 -7532 -7531 -7530 -7529 -7528 -7527 -7526 -7525 -7524 -7523 -7522 -7521 -7520 -7519 -7518 -7517 -7516 -7515 -7514 -7513 -7512 -7511 -7510 -7509 -7508 -7507 -7506 -7505 -7504 -7503 -7502 -7501 -7500 -7499 -7498 -7497 -7496 -7495 -7494 -7493 -7492 -7491 -7490 -7489 -7488 -7487 -7486 -7485 -7484 -7483 -7482 -7481 -7480 -7479 -7478 -7477 -7476 -7475 -7474 -7473 -7472 -7471 -7470 -7469 -7468 -7467 -7466 -7465 -7464 -7463 -7462 -7461 -7460 -7459 -7458 -7457 -7456 -7455 -7454 -7453 -7452 -7451 -7450 -7449 -7448 -7447 -7446 -7445 -7444 -7443 -7442 -7441 -7440 -7439 -7438 -7437 -7436 -7435 -7434 -7433 -7432 -7431 -7430 -7429 -7428 -7427 -7426 -7425 -7424 -7423 -7422 -7421 -7420 -7419 -7418 -7417 -7416 -7415 -7414 -7413 -7412 -7411 -7410 -7409 -7408 -7407 -7406 -7405 -7404 -7403 -7402 -7401 -7400 -7399 -7398 -7397 -7396 -7395 -7394 -7393 -7392 -7391 -7390 -7389 -7388 -7387 -7386 -7385 -7384 -7383 -7382 -7381 -7380 -7379 -7378 -7377 -7376 -7375 -7374 -7373 -7372 -7371 -7370 -7369 -7368 -7367 -7366 -7365 -7364 -7363 -7362 -7361 -7360 -7359 -7358 -7357 -7356 -7355 -7354 -7353 -7352 -7351 -7350 -7349 -7348 -7347 -7346 -7345 -7344 -7343 -7342 -7341 -7340 -7339 -7338 -7337 -7336 -7335 -7334 -7333 -7332 -7331 -7330 -7329 -7328 -7327 -7326 -7325 -7324 -7323 -7322 -7321 -7320 -7319 -7318 -7317 -7316 -7315 -7314 -7313 -7312 -7311 -7310 -7309 -7308 -7307 -7306 -7305 -7304 -7303 -7302 -7301 -7300 -7299 -7298 -7297 -7296 -7295 -7294 -7293 -7292 -7291 -7290 -7289 -7288 -7287 -7286 -7285 -7284 -7283 -7282 -7281 -7280 -7279 -7278 -7277 -7276 -7275 -7274 -7273 -7272 -7271 -7270 -7269 -7268 -7267 -7266 -7265 -7264 -7263 -7262 -7261 -7260 -7259 -7258 -7257 -7256 -7255 -7254 -7253 -7252 -7251 -7250 -7249 -7248 -7247 -7246 -7245 -7244 -7243 -7242 -7241 -7240 -7239 -7238 -7237 -7236 -7235 -7234 -7233 -7232 -7231 -7230 -7229 -7228 -7227 -7226 -7225 -7224 -7223 -7222 -7221 -7220 -7219 -7218 -7217 -7216 -7215 -7214 -7213 -7212 -7211 -7210 -7209 -7208 -7207 -7206 -7205 -7204 -7203 -7202 -7201 -7200 -7199 -7198 -7197 -7196 -7195 -7194 -7193 -7192 -7191 -7190 -7189 -7188 -7187 -7186 -7185 -7184 -7183 -7182 -7181 -7180 -7179 -7178 -7177 -7176 -7175 -7174 -7173 -7172 -7171 -7170 -7169 -7168 -7167 -7166 -7165 -7164 -7163 -7162 -7161 -7160 -7159 -7158 -7157 -7156 -7155 -7154 -7153 -7152 -7151 -7150 -7149 -7148 -7147 -7146 -7145 -7144 -7143 -7142 -7141 -7140 -7139 -7138 -7137 -7136 -7135 -7134 -7133 -7132 -7131 -7130 -7129 -7128 -7127 -7126 -7125 -7124 -7123 -7122 -7121 -7120 -7119 -7118 -7117 -7116 -7115 -7114 -7113 -7112 -7111 -7110 -7109 -7108 -7107 -7106 -7105 -7104 -7103 -7102 -7101 -7100 -7099 -7098 -7097 -7096 -7095 -7094 -7093 -7092 -7091 -7090 -7089 -7088 -7087 -7086 -7085 -7084 -7083 -7082 -7081 -7080 -7079 -7078 -7077 -7076 -7075 -7074 -7073 -7072 -7071 -7070 -7069 -7068 -7067 -7066 -7065 -7064 -7063 -7062 -7061 -7060 -7059 -7058 -7057 -7056 -7055 -7054 -7053 -7052 -7051 -7050 -7049 -7048 -7047 -7046 -7045 -7044 -7043 -7042 -7041 -7040 -7039 -7038 -7037 -7036 -7035 -7034 -7033 -7032 -7031 -7030 -7029 -7028 -7027 -7026 -7025 -7024 -7023 -7022 -7021 -7020 -7019 -7018 -7017 -7016 -7015 -7014 -7013 -7012 -7011 -7010 -7009 -7008 -7007 -7006 -7005 -7004 -7003 -7002 -7001 -7000 -6999 -6998 -6997 -6996 -6995 -6994 -6993 -6992 -6991 -6990 -6989 -6988 -6987 -6986 -6985 -6984 -6983 -6982 -6981 -6980 -6979 -6978 -6977 -6976 -6975 -6974 -6973 -6972 -6971 -6970 -6969 -6968 -6967 -6966 -6965 -6964 -6963 -6962 -6961 -6960 -6959 -6958 -6957 -6956 -6955 -6954 -6953 -6952 -6951 -6950 -6949 -6948 -6947 -6946 -6945 -6944 -6943 -6942 -6941 -6940 -6939 -6938 -6937 -6936 -6935 -6934 -6933 -6932 -6931 -6930 -6929 -6928 -6927 -6926 -6925 -6924 -6923 -6922 -6921 -6920 -6919 -6918 -6917 -6916 -6915 -6914 -6913 -6912 -6911 -6910 -6909 -6908 -6907 -6906 -6905 -6904 -6903 -6902 -6901 -6900 -6899 -6898 -6897 -6896 -6895 -6894 -6893 -6892 -6891 -6890 -6889 -6888 -6887 -6886 -6885 -6884 -6883 -6882 -6881 -6880 -6879 -6878 -6877 -6876 -6875 -6874 -6873 -6872 -6871 -6870 -6869 -6868 -6867 -6866 -6865 -6864 -6863 -6862 -6861 -6860 -6859 -6858 -6857 -6856 -6855 -6854 -6853 -6852 -6851 -6850 -6849 -6848 -6847 -6846 -6845 -6844 -6843 -6842 -6841 -6840 -6839 -6838 -6837 -6836 -6835 -6834 -6833 -6832 -6831 -6830 -6829 -6828 -6827 -6826 -6825 -6824 -6823 -6822 -6821 -6820 -6819 -6818 -6817 -6816 -6815 -6814 -6813 -6812 -6811 -6810 -6809 -6808 -6807 -6806 -6805 -6804 -6803 -6802 -6801 -6800 -6799 -6798 -6797 -6796 -6795 -6794 -6793 -6792 -6791 -6790 -6789 -6788 -6787 -6786 -6785 -6784 -6783 -6782 -6781 -6780 -6779 -6778 -6777 -6776 -6775 -6774 -6773 -6772 -6771 -6770 -6769 -6768 -6767 -6766 -6765 -6764 -6763 -6762 -6761 -6760 -6759 -6758 -6757 -6756 -6755 -6754 -6753 -6752 -6751 -6750 -6749 -6748 -6747 -6746 -6745 -6744 -6743 -6742 -6741 -6740 -6739 -6738 -6737 -6736 -6735 -6734 -6733 -6732 -6731 -6730 -6729 -6728 -6727 -6726 -6725 -6724 -6723 -6722 -6721 -6720 -6719 -6718 -6717 -6716 -6715 -6714 -6713 -6712 -6711 -6710 -6709 -6708 -6707 -6706 -6705 -6704 -6703 -6702 -6701 -6700 -6699 -6698 -6697 -6696 -6695 -6694 -6693 -6692 -6691 -6690 -6689 -6688 -6687 -6686 -6685 -6684 -6683 -6682 -6681 -6680 -6679 -6678 -6677 -6676 -6675 -6674 -6673 -6672 -6671 -6670 -6669 -6668 -6667 -6666 -6665 -6664 -6663 -6662 -6661 -6660 -6659 -6658 -6657 -6656 -6655 -6654 -6653 -6652 -6651 -6650 -6649 -6648 -6647 -6646 -6645 -6644 -6643 -6642 -6641 -6640 -6639 -6638 -6637 -6636 -6635 -6634 -6633 -6632 -6631 -6630 -6629 -6628 -6627 -6626 -6625 -6624 -6623 -6622 -6621 -6620 -6619 -6618 -6617 -6616 -6615 -6614 -6613 -6612 -6611 -6610 -6609 -6608 -6607 -6606 -6605 -6604 -6603 -6602 -6601 -6600 -6599 -6598 -6597 -6596 -6595 -6594 -6593 -6592 -6591 -6590 -6589 -6588 -6587 -6586 -6585 -6584 -6583 -6582 -6581 -6580 -6579 -6578 -6577 -6576 -6575 -6574 -6573 -6572 -6571 -6570 -6569 -6568 -6567 -6566 -6565 -6564 -6563 -6562 -6561 -6560 -6559 -6558 -6557 -6556 -6555 -6554 -6553 -6552 -6551 -6550 -6549 -6548 -6547 -6546 -6545 -6544 -6543 -6542 -6541 -6540 -6539 -6538 -6537 -6536 -6535 -6534 -6533 -6532 -6531 -6530 -6529 -6528 -6527 -6526 -6525 -6524 -6523 -6522 -6521 -6520 -6519 -6518 -6517 -6516 -6515 -6514 -6513 -6512 -6511 -6510 -6509 -6508 -6507 -6506 -6505 -6504 -6503 -6502 -6501 -6500 -6499 -6498 -6497 -6496 -6495 -6494 -6493 -6492 -6491 -6490 -6489 -6488 -6487 -6486 -6485 -6484 -6483 -6482 -6481 -6480 -6479 -6478 -6477 -6476 -6475 -6474 -6473 -6472 -6471 -6470 -6469 -6468 -6467 -6466 -6465 -6464 -6463 -6462 -6461 -6460 -6459 -6458 -6457 -6456 -6455 -6454 -6453 -6452 -6451 -6450 -6449 -6448 -6447 -6446 -6445 -6444 -6443 -6442 -6441 -6440 -6439 -6438 -6437 -6436 -6435 -6434 -6433 -6432 -6431 -6430 -6429 -6428 -6427 -6426 -6425 -6424 -6423 -6422 -6421 -6420 -6419 -6418 -6417 -6416 -6415 -6414 -6413 -6412 -6411 -6410 -6409 -6408 -6407 -6406 -6405 -6404 -6403 -6402 -6401 -6400 -6399 -6398 -6397 -6396 -6395 -6394 -6393 -6392 -6391 -6390 -6389 -6388 -6387 -6386 -6385 -6384 -6383 -6382 -6381 -6380 -6379 -6378 -6377 -6376 -6375 -6374 -6373 -6372 -6371 -6370 -6369 -6368 -6367 -6366 -6365 -6364 -6363 -6362 -6361 -6360 -6359 -6358 -6357 -6356 -6355 -6354 -6353 -6352 -6351 -6350 -6349 -6348 -6347 -6346 -6345 -6344 -6343 -6342 -6341 -6340 -6339 -6338 -6337 -6336 -6335 -6334 -6333 -6332 -6331 -6330 -6329 -6328 -6327 -6326 -6325 -6324 -6323 -6322 -6321 -6320 -6319 -6318 -6317 -6316 -6315 -6314 -6313 -6312 -6311 -6310 -6309 -6308 -6307 -6306 -6305 -6304 -6303 -6302 -6301 -6300 -6299 -6298 -6297 -6296 -6295 -6294 -6293 -6292 -6291 -6290 -6289 -6288 -6287 -6286 -6285 -6284 -6283 -6282 -6281 -6280 -6279 -6278 -6277 -6276 -6275 -6274 -6273 -6272 -6271 -6270 -6269 -6268 -6267 -6266 -6265 -6264 -6263 -6262 -6261 -6260 -6259 -6258 -6257 -6256 -6255 -6254 -6253 -6252 -6251 -6250 -6249 -6248 -6247 -6246 -6245 -6244 -6243 -6242 -6241 -6240 -6239 -6238 -6237 -6236 -6235 -6234 -6233 -6232 -6231 -6230 -6229 -6228 -6227 -6226 -6225 -6224 -6223 -6222 -6221 -6220 -6219 -6218 -6217 -6216 -6215 -6214 -6213 -6212 -6211 -6210 -6209 -6208 -6207 -6206 -6205 -6204 -6203 -6202 -6201 -6200 -6199 -6198 -6197 -6196 -6195 -6194 -6193 -6192 -6191 -6190 -6189 -6188 -6187 -6186 -6185 -6184 -6183 -6182 -6181 -6180 -6179 -6178 -6177 -6176 -6175 -6174 -6173 -6172 -6171 -6170 -6169 -6168 -6167 -6166 -6165 -6164 -6163 -6162 -6161 -6160 -6159 -6158 -6157 -6156 -6155 -6154 -6153 -6152 -6151 -6150 -6149 -6148 -6147 -6146 -6145 -6144 -6143 -6142 -6141 -6140 -6139 -6138 -6137 -6136 -6135 -6134 -6133 -6132 -6131 -6130 -6129 -6128 -6127 -6126 -6125 -6124 -6123 -6122 -6121 -6120 -6119 -6118 -6117 -6116 -6115 -6114 -6113 -6112 -6111 -6110 -6109 -6108 -6107 -6106 -6105 -6104 -6103 -6102 -6101 -6100 -6099 -6098 -6097 -6096 -6095 -6094 -6093 -6092 -6091 -6090 -6089 -6088 -6087 -6086 -6085 -6084 -6083 -6082 -6081 -6080 -6079 -6078 -6077 -6076 -6075 -6074 -6073 -6072 -6071 -6070 -6069 -6068 -6067 -6066 -6065 -6064 -6063 -6062 -6061 -6060 -6059 -6058 -6057 -6056 -6055 -6054 -6053 -6052 -6051 -6050 -6049 -6048 -6047 -6046 -6045 -6044 -6043 -6042 -6041 -6040 -6039 -6038 -6037 -6036 -6035 -6034 -6033 -6032 -6031 -6030 -6029 -6028 -6027 -6026 -6025 -6024 -6023 -6022 -6021 -6020 -6019 -6018 -6017 -6016 -6015 -6014 -6013 -6012 -6011 -6010 -6009 -6008 -6007 -6006 -6005 -6004 -6003 -6002 -6001 -6000 -5999 -5998 -5997 -5996 -5995 -5994 -5993 -5992 -5991 -5990 -5989 -5988 -5987 -5986 -5985 -5984 -5983 -5982 -5981 -5980 -5979 -5978 -5977 -5976 -5975 -5974 -5973 -5972 -5971 -5970 -5969 -5968 -5967 -5966 -5965 -5964 -5963 -5962 -5961 -5960 -5959 -5958 -5957 -5956 -5955 -5954 -5953 -5952 -5951 -5950 -5949 -5948 -5947 -5946 -5945 -5944 -5943 -5942 -5941 -5940 -5939 -5938 -5937 -5936 -5935 -5934 -5933 -5932 -5931 -5930 -5929 -5928 -5927 -5926 -5925 -5924 -5923 -5922 -5921 -5920 -5919 -5918 -5917 -5916 -5915 -5914 -5913 -5912 -5911 -5910 -5909 -5908 -5907 -5906 -5905 -5904 -5903 -5902 -5901 -5900 -5899 -5898 -5897 -5896 -5895 -5894 -5893 -5892 -5891 -5890 -5889 -5888 -5887 -5886 -5885 -5884 -5883 -5882 -5881 -5880 -5879 -5878 -5877 -5876 -5875 -5874 -5873 -5872 -5871 -5870 -5869 -5868 -5867 -5866 -5865 -5864 -5863 -5862 -5861 -5860 -5859 -5858 -5857 -5856 -5855 -5854 -5853 -5852 -5851 -5850 -5849 -5848 -5847 -5846 -5845 -5844 -5843 -5842 -5841 -5840 -5839 -5838 -5837 -5836 -5835 -5834 -5833 -5832 -5831 -5830 -5829 -5828 -5827 -5826 -5825 -5824 -5823 -5822 -5821 -5820 -5819 -5818 -5817 -5816 -5815 -5814 -5813 -5812 -5811 -5810 -5809 -5808 -5807 -5806 -5805 -5804 -5803 -5802 -5801 -5800 -5799 -5798 -5797 -5796 -5795 -5794 -5793 -5792 -5791 -5790 -5789 -5788 -5787 -5786 -5785 -5784 -5783 -5782 -5781 -5780 -5779 -5778 -5777 -5776 -5775 -5774 -5773 -5772 -5771 -5770 -5769 -5768 -5767 -5766 -5765 -5764 -5763 -5762 -5761 -5760 -5759 -5758 -5757 -5756 -5755 -5754 -5753 -5752 -5751 -5750 -5749 -5748 -5747 -5746 -5745 -5744 -5743 -5742 -5741 -5740 -5739 -5738 -5737 -5736 -5735 -5734 -5733 -5732 -5731 -5730 -5729 -5728 -5727 -5726 -5725 -5724 -5723 -5722 -5721 -5720 -5719 -5718 -5717 -5716 -5715 -5714 -5713 -5712 -5711 -5710 -5709 -5708 -5707 -5706 -5705 -5704 -5703 -5702 -5701 -5700 -5699 -5698 -5697 -5696 -5695 -5694 -5693 -5692 -5691 -5690 -5689 -5688 -5687 -5686 -5685 -5684 -5683 -5682 -5681 -5680 -5679 -5678 -5677 -5676 -5675 -5674 -5673 -5672 -5671 -5670 -5669 -5668 -5667 -5666 -5665 -5664 -5663 -5662 -5661 -5660 -5659 -5658 -5657 -5656 -5655 -5654 -5653 -5652 -5651 -5650 -5649 -5648 -5647 -5646 -5645 -5644 -5643 -5642 -5641 -5640 -5639 -5638 -5637 -5636 -5635 -5634 -5633 -5632 -5631 -5630 -5629 -5628 -5627 -5626 -5625 -5624 -5623 -5622 -5621 -5620 -5619 -5618 -5617 -5616 -5615 -5614 -5613 -5612 -5611 -5610 -5609 -5608 -5607 -5606 -5605 -5604 -5603 -5602 -5601 -5600 -5599 -5598 -5597 -5596 -5595 -5594 -5593 -5592 -5591 -5590 -5589 -5588 -5587 -5586 -5585 -5584 -5583 -5582 -5581 -5580 -5579 -5578 -5577 -5576 -5575 -5574 -5573 -5572 -5571 -5570 -5569 -5568 -5567 -5566 -5565 -5564 -5563 -5562 -5561 -5560 -5559 -5558 -5557 -5556 -5555 -5554 -5553 -5552 -5551 -5550 -5549 -5548 -5547 -5546 -5545 -5544 -5543 -5542 -5541 -5540 -5539 -5538 -5537 -5536 -5535 -5534 -5533 -5532 -5531 -5530 -5529 -5528 -5527 -5526 -5525 -5524 -5523 -5522 -5521 -5520 -5519 -5518 -5517 -5516 -5515 -5514 -5513 -5512 -5511 -5510 -5509 -5508 -5507 -5506 -5505 -5504 -5503 -5502 -5501 -5500 -5499 -5498 -5497 -5496 -5495 -5494 -5493 -5492 -5491 -5490 -5489 -5488 -5487 -5486 -5485 -5484 -5483 -5482 -5481 -5480 -5479 -5478 -5477 -5476 -5475 -5474 -5473 -5472 -5471 -5470 -5469 -5468 -5467 -5466 -5465 -5464 -5463 -5462 -5461 -5460 -5459 -5458 -5457 -5456 -5455 -5454 -5453 -5452 -5451 -5450 -5449 -5448 -5447 -5446 -5445 -5444 -5443 -5442 -5441 -5440 -5439 -5438 -5437 -5436 -5435 -5434 -5433 -5432 -5431 -5430 -5429 -5428 -5427 -5426 -5425 -5424 -5423 -5422 -5421 -5420 -5419 -5418 -5417 -5416 -5415 -5414 -5413 -5412 -5411 -5410 -5409 -5408 -5407 -5406 -5405 -5404 -5403 -5402 -5401 -5400 -5399 -5398 -5397 -5396 -5395 -5394 -5393 -5392 -5391 -5390 -5389 -5388 -5387 -5386 -5385 -5384 -5383 -5382 -5381 -5380 -5379 -5378 -5377 -5376 -5375 -5374 -5373 -5372 -5371 -5370 -5369 -5368 -5367 -5366 -5365 -5364 -5363 -5362 -5361 -5360 -5359 -5358 -5357 -5356 -5355 -5354 -5353 -5352 -5351 -5350 -5349 -5348 -5347 -5346 -5345 -5344 -5343 -5342 -5341 -5340 -5339 -5338 -5337 -5336 -5335 -5334 -5333 -5332 -5331 -5330 -5329 -5328 -5327 -5326 -5325 -5324 -5323 -5322 -5321 -5320 -5319 -5318 -5317 -5316 -5315 -5314 -5313 -5312 -5311 -5310 -5309 -5308 -5307 -5306 -5305 -5304 -5303 -5302 -5301 -5300 -5299 -5298 -5297 -5296 -5295 -5294 -5293 -5292 -5291 -5290 -5289 -5288 -5287 -5286 -5285 -5284 -5283 -5282 -5281 -5280 -5279 -5278 -5277 -5276 -5275 -5274 -5273 -5272 -5271 -5270 -5269 -5268 -5267 -5266 -5265 -5264 -5263 -5262 -5261 -5260 -5259 -5258 -5257 -5256 -5255 -5254 -5253 -5252 -5251 -5250 -5249 -5248 -5247 -5246 -5245 -5244 -5243 -5242 -5241 -5240 -5239 -5238 -5237 -5236 -5235 -5234 -5233 -5232 -5231 -5230 -5229 -5228 -5227 -5226 -5225 -5224 -5223 -5222 -5221 -5220 -5219 -5218 -5217 -5216 -5215 -5214 -5213 -5212 -5211 -5210 -5209 -5208 -5207 -5206 -5205 -5204 -5203 -5202 -5201 -5200 -5199 -5198 -5197 -5196 -5195 -5194 -5193 -5192 -5191 -5190 -5189 -5188 -5187 -5186 -5185 -5184 -5183 -5182 -5181 -5180 -5179 -5178 -5177 -5176 -5175 -5174 -5173 -5172 -5171 -5170 -5169 -5168 -5167 -5166 -5165 -5164 -5163 -5162 -5161 -5160 -5159 -5158 -5157 -5156 -5155 -5154 -5153 -5152 -5151 -5150 -5149 -5148 -5147 -5146 -5145 -5144 -5143 -5142 -5141 -5140 -5139 -5138 -5137 -5136 -5135 -5134 -5133 -5132 -5131 -5130 -5129 -5128 -5127 -5126 -5125 -5124 -5123 -5122 -5121 -5120 -5119 -5118 -5117 -5116 -5115 -5114 -5113 -5112 -5111 -5110 -5109 -5108 -5107 -5106 -5105 -5104 -5103 -5102 -5101 -5100 -5099 -5098 -5097 -5096 -5095 -5094 -5093 -5092 -5091 -5090 -5089 -5088 -5087 -5086 -5085 -5084 -5083 -5082 -5081 -5080 -5079 -5078 -5077 -5076 -5075 -5074 -5073 -5072 -5071 -5070 -5069 -5068 -5067 -5066 -5065 -5064 -5063 -5062 -5061 -5060 -5059 -5058 -5057 -5056 -5055 -5054 -5053 -5052 -5051 -5050 -5049 -5048 -5047 -5046 -5045 -5044 -5043 -5042 -5041 -5040 -5039 -5038 -5037 -5036 -5035 -5034 -5033 -5032 -5031 -5030 -5029 -5028 -5027 -5026 -5025 -5024 -5023 -5022 -5021 -5020 -5019 -5018 -5017 -5016 -5015 -5014 -5013 -5012 -5011 -5010 -5009 -5008 -5007 -5006 -5005 -5004 -5003 -5002 -5001 -5000 -4999 -4998 -4997 -4996 -4995 -4994 -4993 -4992 -4991 -4990 -4989 -4988 -4987 -4986 -4985 -4984 -4983 -4982 -4981 -4980 -4979 -4978 -4977 -4976 -4975 -4974 -4973 -4972 -4971 -4970 -4969 -4968 -4967 -4966 -4965 -4964 -4963 -4962 -4961 -4960 -4959 -4958 -4957 -4956 -4955 -4954 -4953 -4952 -4951 -4950 -4949 -4948 -4947 -4946 -4945 -4944 -4943 -4942 -4941 -4940 -4939 -4938 -4937 -4936 -4935 -4934 -4933 -4932 -4931 -4930 -4929 -4928 -4927 -4926 -4925 -4924 -4923 -4922 -4921 -4920 -4919 -4918 -4917 -4916 -4915 -4914 -4913 -4912 -4911 -4910 -4909 -4908 -4907 -4906 -4905 -4904 -4903 -4902 -4901 -4900 -4899 -4898 -4897 -4896 -4895 -4894 -4893 -4892 -4891 -4890 -4889 -4888 -4887 -4886 -4885 -4884 -4883 -4882 -4881 -4880 -4879 -4878 -4877 -4876 -4875 -4874 -4873 -4872 -4871 -4870 -4869 -4868 -4867 -4866 -4865 -4864 -4863 -4862 -4861 -4860 -4859 -4858 -4857 -4856 -4855 -4854 -4853 -4852 -4851 -4850 -4849 -4848 -4847 -4846 -4845 -4844 -4843 -4842 -4841 -4840 -4839 -4838 -4837 -4836 -4835 -4834 -4833 -4832 -4831 -4830 -4829 -4828 -4827 -4826 -4825 -4824 -4823 -4822 -4821 -4820 -4819 -4818 -4817 -4816 -4815 -4814 -4813 -4812 -4811 -4810 -4809 -4808 -4807 -4806 -4805 -4804 -4803 -4802 -4801 -4800 -4799 -4798 -4797 -4796 -4795 -4794 -4793 -4792 -4791 -4790 -4789 -4788 -4787 -4786 -4785 -4784 -4783 -4782 -4781 -4780 -4779 -4778 -4777 -4776 -4775 -4774 -4773 -4772 -4771 -4770 -4769 -4768 -4767 -4766 -4765 -4764 -4763 -4762 -4761 -4760 -4759 -4758 -4757 -4756 -4755 -4754 -4753 -4752 -4751 -4750 -4749 -4748 -4747 -4746 -4745 -4744 -4743 -4742 -4741 -4740 -4739 -4738 -4737 -4736 -4735 -4734 -4733 -4732 -4731 -4730 -4729 -4728 -4727 -4726 -4725 -4724 -4723 -4722 -4721 -4720 -4719 -4718 -4717 -4716 -4715 -4714 -4713 -4712 -4711 -4710 -4709 -4708 -4707 -4706 -4705 -4704 -4703 -4702 -4701 -4700 -4699 -4698 -4697 -4696 -4695 -4694 -4693 -4692 -4691 -4690 -4689 -4688 -4687 -4686 -4685 -4684 -4683 -4682 -4681 -4680 -4679 -4678 -4677 -4676 -4675 -4674 -4673 -4672 -4671 -4670 -4669 -4668 -4667 -4666 -4665 -4664 -4663 -4662 -4661 -4660 -4659 -4658 -4657 -4656 -4655 -4654 -4653 -4652 -4651 -4650 -4649 -4648 -4647 -4646 -4645 -4644 -4643 -4642 -4641 -4640 -4639 -4638 -4637 -4636 -4635 -4634 -4633 -4632 -4631 -4630 -4629 -4628 -4627 -4626 -4625 -4624 -4623 -4622 -4621 -4620 -4619 -4618 -4617 -4616 -4615 -4614 -4613 -4612 -4611 -4610 -4609 -4608 -4607 -4606 -4605 -4604 -4603 -4602 -4601 -4600 -4599 -4598 -4597 -4596 -4595 -4594 -4593 -4592 -4591 -4590 -4589 -4588 -4587 -4586 -4585 -4584 -4583 -4582 -4581 -4580 -4579 -4578 -4577 -4576 -4575 -4574 -4573 -4572 -4571 -4570 -4569 -4568 -4567 -4566 -4565 -4564 -4563 -4562 -4561 -4560 -4559 -4558 -4557 -4556 -4555 -4554 -4553 -4552 -4551 -4550 -4549 -4548 -4547 -4546 -4545 -4544 -4543 -4542 -4541 -4540 -4539 -4538 -4537 -4536 -4535 -4534 -4533 -4532 -4531 -4530 -4529 -4528 -4527 -4526 -4525 -4524 -4523 -4522 -4521 -4520 -4519 -4518 -4517 -4516 -4515 -4514 -4513 -4512 -4511 -4510 -4509 -4508 -4507 -4506 -4505 -4504 -4503 -4502 -4501 -4500 -4499 -4498 -4497 -4496 -4495 -4494 -4493 -4492 -4491 -4490 -4489 -4488 -4487 -4486 -4485 -4484 -4483 -4482 -4481 -4480 -4479 -4478 -4477 -4476 -4475 -4474 -4473 -4472 -4471 -4470 -4469 -4468 -4467 -4466 -4465 -4464 -4463 -4462 -4461 -4460 -4459 -4458 -4457 -4456 -4455 -4454 -4453 -4452 -4451 -4450 -4449 -4448 -4447 -4446 -4445 -4444 -4443 -4442 -4441 -4440 -4439 -4438 -4437 -4436 -4435 -4434 -4433 -4432 -4431 -4430 -4429 -4428 -4427 -4426 -4425 -4424 -4423 -4422 -4421 -4420 -4419 -4418 -4417 -4416 -4415 -4414 -4413 -4412 -4411 -4410 -4409 -4408 -4407 -4406 -4405 -4404 -4403 -4402 -4401 -4400 -4399 -4398 -4397 -4396 -4395 -4394 -4393 -4392 -4391 -4390 -4389 -4388 -4387 -4386 -4385 -4384 -4383 -4382 -4381 -4380 -4379 -4378 -4377 -4376 -4375 -4374 -4373 -4372 -4371 -4370 -4369 -4368 -4367 -4366 -4365 -4364 -4363 -4362 -4361 -4360 -4359 -4358 -4357 -4356 -4355 -4354 -4353 -4352 -4351 -4350 -4349 -4348 -4347 -4346 -4345 -4344 -4343 -4342 -4341 -4340 -4339 -4338 -4337 -4336 -4335 -4334 -4333 -4332 -4331 -4330 -4329 -4328 -4327 -4326 -4325 -4324 -4323 -4322 -4321 -4320 -4319 -4318 -4317 -4316 -4315 -4314 -4313 -4312 -4311 -4310 -4309 -4308 -4307 -4306 -4305 -4304 -4303 -4302 -4301 -4300 -4299 -4298 -4297 -4296 -4295 -4294 -4293 -4292 -4291 -4290 -4289 -4288 -4287 -4286 -4285 -4284 -4283 -4282 -4281 -4280 -4279 -4278 -4277 -4276 -4275 -4274 -4273 -4272 -4271 -4270 -4269 -4268 -4267 -4266 -4265 -4264 -4263 -4262 -4261 -4260 -4259 -4258 -4257 -4256 -4255 -4254 -4253 -4252 -4251 -4250 -4249 -4248 -4247 -4246 -4245 -4244 -4243 -4242 -4241 -4240 -4239 -4238 -4237 -4236 -4235 -4234 -4233 -4232 -4231 -4230 -4229 -4228 -4227 -4226 -4225 -4224 -4223 -4222 -4221 -4220 -4219 -4218 -4217 -4216 -4215 -4214 -4213 -4212 -4211 -4210 -4209 -4208 -4207 -4206 -4205 -4204 -4203 -4202 -4201 -4200 -4199 -4198 -4197 -4196 -4195 -4194 -4193 -4192 -4191 -4190 -4189 -4188 -4187 -4186 -4185 -4184 -4183 -4182 -4181 -4180 -4179 -4178 -4177 -4176 -4175 -4174 -4173 -4172 -4171 -4170 -4169 -4168 -4167 -4166 -4165 -4164 -4163 -4162 -4161 -4160 -4159 -4158 -4157 -4156 -4155 -4154 -4153 -4152 -4151 -4150 -4149 -4148 -4147 -4146 -4145 -4144 -4143 -4142 -4141 -4140 -4139 -4138 -4137 -4136 -4135 -4134 -4133 -4132 -4131 -4130 -4129 -4128 -4127 -4126 -4125 -4124 -4123 -4122 -4121 -4120 -4119 -4118 -4117 -4116 -4115 -4114 -4113 -4112 -4111 -4110 -4109 -4108 -4107 -4106 -4105 -4104 -4103 -4102 -4101 -4100 -4099 -4098 -4097 -4096 -4095 -4094 -4093 -4092 -4091 -4090 -4089 -4088 -4087 -4086 -4085 -4084 -4083 -4082 -4081 -4080 -4079 -4078 -4077 -4076 -4075 -4074 -4073 -4072 -4071 -4070 -4069 -4068 -4067 -4066 -4065 -4064 -4063 -4062 -4061 -4060 -4059 -4058 -4057 -4056 -4055 -4054 -4053 -4052 -4051 -4050 -4049 -4048 -4047 -4046 -4045 -4044 -4043 -4042 -4041 -4040 -4039 -4038 -4037 -4036 -4035 -4034 -4033 -4032 -4031 -4030 -4029 -4028 -4027 -4026 -4025 -4024 -4023 -4022 -4021 -4020 -4019 -4018 -4017 -4016 -4015 -4014 -4013 -4012 -4011 -4010 -4009 -4008 -4007 -4006 -4005 -4004 -4003 -4002 -4001 -4000 -3999 -3998 -3997 -3996 -3995 -3994 -3993 -3992 -3991 -3990 -3989 -3988 -3987 -3986 -3985 -3984 -3983 -3982 -3981 -3980 -3979 -3978 -3977 -3976 -3975 -3974 -3973 -3972 -3971 -3970 -3969 -3968 -3967 -3966 -3965 -3964 -3963 -3962 -3961 -3960 -3959 -3958 -3957 -3956 -3955 -3954 -3953 -3952 -3951 -3950 -3949 -3948 -3947 -3946 -3945 -3944 -3943 -3942 -3941 -3940 -3939 -3938 -3937 -3936 -3935 -3934 -3933 -3932 -3931 -3930 -3929 -3928 -3927 -3926 -3925 -3924 -3923 -3922 -3921 -3920 -3919 -3918 -3917 -3916 -3915 -3914 -3913 -3912 -3911 -3910 -3909 -3908 -3907 -3906 -3905 -3904 -3903 -3902 -3901 -3900 -3899 -3898 -3897 -3896 -3895 -3894 -3893 -3892 -3891 -3890 -3889 -3888 -3887 -3886 -3885 -3884 -3883 -3882 -3881 -3880 -3879 -3878 -3877 -3876 -3875 -3874 -3873 -3872 -3871 -3870 -3869 -3868 -3867 -3866 -3865 -3864 -3863 -3862 -3861 -3860 -3859 -3858 -3857 -3856 -3855 -3854 -3853 -3852 -3851 -3850 -3849 -3848 -3847 -3846 -3845 -3844 -3843 -3842 -3841 -3840 -3839 -3838 -3837 -3836 -3835 -3834 -3833 -3832 -3831 -3830 -3829 -3828 -3827 -3826 -3825 -3824 -3823 -3822 -3821 -3820 -3819 -3818 -3817 -3816 -3815 -3814 -3813 -3812 -3811 -3810 -3809 -3808 -3807 -3806 -3805 -3804 -3803 -3802 -3801 -3800 -3799 -3798 -3797 -3796 -3795 -3794 -3793 -3792 -3791 -3790 -3789 -3788 -3787 -3786 -3785 -3784 -3783 -3782 -3781 -3780 -3779 -3778 -3777 -3776 -3775 -3774 -3773 -3772 -3771 -3770 -3769 -3768 -3767 -3766 -3765 -3764 -3763 -3762 -3761 -3760 -3759 -3758 -3757 -3756 -3755 -3754 -3753 -3752 -3751 -3750 -3749 -3748 -3747 -3746 -3745 -3744 -3743 -3742 -3741 -3740 -3739 -3738 -3737 -3736 -3735 -3734 -3733 -3732 -3731 -3730 -3729 -3728 -3727 -3726 -3725 -3724 -3723 -3722 -3721 -3720 -3719 -3718 -3717 -3716 -3715 -3714 -3713 -3712 -3711 -3710 -3709 -3708 -3707 -3706 -3705 -3704 -3703 -3702 -3701 -3700 -3699 -3698 -3697 -3696 -3695 -3694 -3693 -3692 -3691 -3690 -3689 -3688 -3687 -3686 -3685 -3684 -3683 -3682 -3681 -3680 -3679 -3678 -3677 -3676 -3675 -3674 -3673 -3672 -3671 -3670 -3669 -3668 -3667 -3666 -3665 -3664 -3663 -3662 -3661 -3660 -3659 -3658 -3657 -3656 -3655 -3654 -3653 -3652 -3651 -3650 -3649 -3648 -3647 -3646 -3645 -3644 -3643 -3642 -3641 -3640 -3639 -3638 -3637 -3636 -3635 -3634 -3633 -3632 -3631 -3630 -3629 -3628 -3627 -3626 -3625 -3624 -3623 -3622 -3621 -3620 -3619 -3618 -3617 -3616 -3615 -3614 -3613 -3612 -3611 -3610 -3609 -3608 -3607 -3606 -3605 -3604 -3603 -3602 -3601 -3600 -3599 -3598 -3597 -3596 -3595 -3594 -3593 -3592 -3591 -3590 -3589 -3588 -3587 -3586 -3585 -3584 -3583 -3582 -3581 -3580 -3579 -3578 -3577 -3576 -3575 -3574 -3573 -3572 -3571 -3570 -3569 -3568 -3567 -3566 -3565 -3564 -3563 -3562 -3561 -3560 -3559 -3558 -3557 -3556 -3555 -3554 -3553 -3552 -3551 -3550 -3549 -3548 -3547 -3546 -3545 -3544 -3543 -3542 -3541 -3540 -3539 -3538 -3537 -3536 -3535 -3534 -3533 -3532 -3531 -3530 -3529 -3528 -3527 -3526 -3525 -3524 -3523 -3522 -3521 -3520 -3519 -3518 -3517 -3516 -3515 -3514 -3513 -3512 -3511 -3510 -3509 -3508 -3507 -3506 -3505 -3504 -3503 -3502 -3501 -3500 -3499 -3498 -3497 -3496 -3495 -3494 -3493 -3492 -3491 -3490 -3489 -3488 -3487 -3486 -3485 -3484 -3483 -3482 -3481 -3480 -3479 -3478 -3477 -3476 -3475 -3474 -3473 -3472 -3471 -3470 -3469 -3468 -3467 -3466 -3465 -3464 -3463 -3462 -3461 -3460 -3459 -3458 -3457 -3456 -3455 -3454 -3453 -3452 -3451 -3450 -3449 -3448 -3447 -3446 -3445 -3444 -3443 -3442 -3441 -3440 -3439 -3438 -3437 -3436 -3435 -3434 -3433 -3432 -3431 -3430 -3429 -3428 -3427 -3426 -3425 -3424 -3423 -3422 -3421 -3420 -3419 -3418 -3417 -3416 -3415 -3414 -3413 -3412 -3411 -3410 -3409 -3408 -3407 -3406 -3405 -3404 -3403 -3402 -3401 -3400 -3399 -3398 -3397 -3396 -3395 -3394 -3393 -3392 -3391 -3390 -3389 -3388 -3387 -3386 -3385 -3384 -3383 -3382 -3381 -3380 -3379 -3378 -3377 -3376 -3375 -3374 -3373 -3372 -3371 -3370 -3369 -3368 -3367 -3366 -3365 -3364 -3363 -3362 -3361 -3360 -3359 -3358 -3357 -3356 -3355 -3354 -3353 -3352 -3351 -3350 -3349 -3348 -3347 -3346 -3345 -3344 -3343 -3342 -3341 -3340 -3339 -3338 -3337 -3336 -3335 -3334 -3333 -3332 -3331 -3330 -3329 -3328 -3327 -3326 -3325 -3324 -3323 -3322 -3321 -3320 -3319 -3318 -3317 -3316 -3315 -3314 -3313 -3312 -3311 -3310 -3309 -3308 -3307 -3306 -3305 -3304 -3303 -3302 -3301 -3300 -3299 -3298 -3297 -3296 -3295 -3294 -3293 -3292 -3291 -3290 -3289 -3288 -3287 -3286 -3285 -3284 -3283 -3282 -3281 -3280 -3279 -3278 -3277 -3276 -3275 -3274 -3273 -3272 -3271 -3270 -3269 -3268 -3267 -3266 -3265 -3264 -3263 -3262 -3261 -3260 -3259 -3258 -3257 -3256 -3255 -3254 -3253 -3252 -3251 -3250 -3249 -3248 -3247 -3246 -3245 -3244 -3243 -3242 -3241 -3240 -3239 -3238 -3237 -3236 -3235 -3234 -3233 -3232 -3231 -3230 -3229 -3228 -3227 -3226 -3225 -3224 -3223 -3222 -3221 -3220 -3219 -3218 -3217 -3216 -3215 -3214 -3213 -3212 -3211 -3210 -3209 -3208 -3207 -3206 -3205 -3204 -3203 -3202 -3201 -3200 -3199 -3198 -3197 -3196 -3195 -3194 -3193 -3192 -3191 -3190 -3189 -3188 -3187 -3186 -3185 -3184 -3183 -3182 -3181 -3180 -3179 -3178 -3177 -3176 -3175 -3174 -3173 -3172 -3171 -3170 -3169 -3168 -3167 -3166 -3165 -3164 -3163 -3162 -3161 -3160 -3159 -3158 -3157 -3156 -3155 -3154 -3153 -3152 -3151 -3150 -3149 -3148 -3147 -3146 -3145 -3144 -3143 -3142 -3141 -3140 -3139 -3138 -3137 -3136 -3135 -3134 -3133 -3132 -3131 -3130 -3129 -3128 -3127 -3126 -3125 -3124 -3123 -3122 -3121 -3120 -3119 -3118 -3117 -3116 -3115 -3114 -3113 -3112 -3111 -3110 -3109 -3108 -3107 -3106 -3105 -3104 -3103 -3102 -3101 -3100 -3099 -3098 -3097 -3096 -3095 -3094 -3093 -3092 -3091 -3090 -3089 -3088 -3087 -3086 -3085 -3084 -3083 -3082 -3081 -3080 -3079 -3078 -3077 -3076 -3075 -3074 -3073 -3072 -3071 -3070 -3069 -3068 -3067 -3066 -3065 -3064 -3063 -3062 -3061 -3060 -3059 -3058 -3057 -3056 -3055 -3054 -3053 -3052 -3051 -3050 -3049 -3048 -3047 -3046 -3045 -3044 -3043 -3042 -3041 -3040 -3039 -3038 -3037 -3036 -3035 -3034 -3033 -3032 -3031 -3030 -3029 -3028 -3027 -3026 -3025 -3024 -3023 -3022 -3021 -3020 -3019 -3018 -3017 -3016 -3015 -3014 -3013 -3012 -3011 -3010 -3009 -3008 -3007 -3006 -3005 -3004 -3003 -3002 -3001 -3000 -2999 -2998 -2997 -2996 -2995 -2994 -2993 -2992 -2991 -2990 -2989 -2988 -2987 -2986 -2985 -2984 -2983 -2982 -2981 -2980 -2979 -2978 -2977 -2976 -2975 -2974 -2973 -2972 -2971 -2970 -2969 -2968 -2967 -2966 -2965 -2964 -2963 -2962 -2961 -2960 -2959 -2958 -2957 -2956 -2955 -2954 -2953 -2952 -2951 -2950 -2949 -2948 -2947 -2946 -2945 -2944 -2943 -2942 -2941 -2940 -2939 -2938 -2937 -2936 -2935 -2934 -2933 -2932 -2931 -2930 -2929 -2928 -2927 -2926 -2925 -2924 -2923 -2922 -2921 -2920 -2919 -2918 -2917 -2916 -2915 -2914 -2913 -2912 -2911 -2910 -2909 -2908 -2907 -2906 -2905 -2904 -2903 -2902 -2901 -2900 -2899 -2898 -2897 -2896 -2895 -2894 -2893 -2892 -2891 -2890 -2889 -2888 -2887 -2886 -2885 -2884 -2883 -2882 -2881 -2880 -2879 -2878 -2877 -2876 -2875 -2874 -2873 -2872 -2871 -2870 -2869 -2868 -2867 -2866 -2865 -2864 -2863 -2862 -2861 -2860 -2859 -2858 -2857 -2856 -2855 -2854 -2853 -2852 -2851 -2850 -2849 -2848 -2847 -2846 -2845 -2844 -2843 -2842 -2841 -2840 -2839 -2838 -2837 -2836 -2835 -2834 -2833 -2832 -2831 -2830 -2829 -2828 -2827 -2826 -2825 -2824 -2823 -2822 -2821 -2820 -2819 -2818 -2817 -2816 -2815 -2814 -2813 -2812 -2811 -2810 -2809 -2808 -2807 -2806 -2805 -2804 -2803 -2802 -2801 -2800 -2799 -2798 -2797 -2796 -2795 -2794 -2793 -2792 -2791 -2790 -2789 -2788 -2787 -2786 -2785 -2784 -2783 -2782 -2781 -2780 -2779 -2778 -2777 -2776 -2775 -2774 -2773 -2772 -2771 -2770 -2769 -2768 -2767 -2766 -2765 -2764 -2763 -2762 -2761 -2760 -2759 -2758 -2757 -2756 -2755 -2754 -2753 -2752 -2751 -2750 -2749 -2748 -2747 -2746 -2745 -2744 -2743 -2742 -2741 -2740 -2739 -2738 -2737 -2736 -2735 -2734 -2733 -2732 -2731 -2730 -2729 -2728 -2727 -2726 -2725 -2724 -2723 -2722 -2721 -2720 -2719 -2718 -2717 -2716 -2715 -2714 -2713 -2712 -2711 -2710 -2709 -2708 -2707 -2706 -2705 -2704 -2703 -2702 -2701 -2700 -2699 -2698 -2697 -2696 -2695 -2694 -2693 -2692 -2691 -2690 -2689 -2688 -2687 -2686 -2685 -2684 -2683 -2682 -2681 -2680 -2679 -2678 -2677 -2676 -2675 -2674 -2673 -2672 -2671 -2670 -2669 -2668 -2667 -2666 -2665 -2664 -2663 -2662 -2661 -2660 -2659 -2658 -2657 -2656 -2655 -2654 -2653 -2652 -2651 -2650 -2649 -2648 -2647 -2646 -2645 -2644 -2643 -2642 -2641 -2640 -2639 -2638 -2637 -2636 -2635 -2634 -2633 -2632 -2631 -2630 -2629 -2628 -2627 -2626 -2625 -2624 -2623 -2622 -2621 -2620 -2619 -2618 -2617 -2616 -2615 -2614 -2613 -2612 -2611 -2610 -2609 -2608 -2607 -2606 -2605 -2604 -2603 -2602 -2601 -2600 -2599 -2598 -2597 -2596 -2595 -2594 -2593 -2592 -2591 -2590 -2589 -2588 -2587 -2586 -2585 -2584 -2583 -2582 -2581 -2580 -2579 -2578 -2577 -2576 -2575 -2574 -2573 -2572 -2571 -2570 -2569 -2568 -2567 -2566 -2565 -2564 -2563 -2562 -2561 -2560 -2559 -2558 -2557 -2556 -2555 -2554 -2553 -2552 -2551 -2550 -2549 -2548 -2547 -2546 -2545 -2544 -2543 -2542 -2541 -2540 -2539 -2538 -2537 -2536 -2535 -2534 -2533 -2532 -2531 -2530 -2529 -2528 -2527 -2526 -2525 -2524 -2523 -2522 -2521 -2520 -2519 -2518 -2517 -2516 -2515 -2514 -2513 -2512 -2511 -2510 -2509 -2508 -2507 -2506 -2505 -2504 -2503 -2502 -2501 -2500 -2499 -2498 -2497 -2496 -2495 -2494 -2493 -2492 -2491 -2490 -2489 -2488 -2487 -2486 -2485 -2484 -2483 -2482 -2481 -2480 -2479 -2478 -2477 -2476 -2475 -2474 -2473 -2472 -2471 -2470 -2469 -2468 -2467 -2466 -2465 -2464 -2463 -2462 -2461 -2460 -2459 -2458 -2457 -2456 -2455 -2454 -2453 -2452 -2451 -2450 -2449 -2448 -2447 -2446 -2445 -2444 -2443 -2442 -2441 -2440 -2439 -2438 -2437 -2436 -2435 -2434 -2433 -2432 -2431 -2430 -2429 -2428 -2427 -2426 -2425 -2424 -2423 -2422 -2421 -2420 -2419 -2418 -2417 -2416 -2415 -2414 -2413 -2412 -2411 -2410 -2409 -2408 -2407 -2406 -2405 -2404 -2403 -2402 -2401 -2400 -2399 -2398 -2397 -2396 -2395 -2394 -2393 -2392 -2391 -2390 -2389 -2388 -2387 -2386 -2385 -2384 -2383 -2382 -2381 -2380 -2379 -2378 -2377 -2376 -2375 -2374 -2373 -2372 -2371 -2370 -2369 -2368 -2367 -2366 -2365 -2364 -2363 -2362 -2361 -2360 -2359 -2358 -2357 -2356 -2355 -2354 -2353 -2352 -2351 -2350 -2349 -2348 -2347 -2346 -2345 -2344 -2343 -2342 -2341 -2340 -2339 -2338 -2337 -2336 -2335 -2334 -2333 -2332 -2331 -2330 -2329 -2328 -2327 -2326 -2325 -2324 -2323 -2322 -2321 -2320 -2319 -2318 -2317 -2316 -2315 -2314 -2313 -2312 -2311 -2310 -2309 -2308 -2307 -2306 -2305 -2304 -2303 -2302 -2301 -2300 -2299 -2298 -2297 -2296 -2295 -2294 -2293 -2292 -2291 -2290 -2289 -2288 -2287 -2286 -2285 -2284 -2283 -2282 -2281 -2280 -2279 -2278 -2277 -2276 -2275 -2274 -2273 -2272 -2271 -2270 -2269 -2268 -2267 -2266 -2265 -2264 -2263 -2262 -2261 -2260 -2259 -2258 -2257 -2256 -2255 -2254 -2253 -2252 -2251 -2250 -2249 -2248 -2247 -2246 -2245 -2244 -2243 -2242 -2241 -2240 -2239 -2238 -2237 -2236 -2235 -2234 -2233 -2232 -2231 -2230 -2229 -2228 -2227 -2226 -2225 -2224 -2223 -2222 -2221 -2220 -2219 -2218 -2217 -2216 -2215 -2214 -2213 -2212 -2211 -2210 -2209 -2208 -2207 -2206 -2205 -2204 -2203 -2202 -2201 -2200 -2199 -2198 -2197 -2196 -2195 -2194 -2193 -2192 -2191 -2190 -2189 -2188 -2187 -2186 -2185 -2184 -2183 -2182 -2181 -2180 -2179 -2178 -2177 -2176 -2175 -2174 -2173 -2172 -2171 -2170 -2169 -2168 -2167 -2166 -2165 -2164 -2163 -2162 -2161 -2160 -2159 -2158 -2157 -2156 -2155 -2154 -2153 -2152 -2151 -2150 -2149 -2148 -2147 -2146 -2145 -2144 -2143 -2142 -2141 -2140 -2139 -2138 -2137 -2136 -2135 -2134 -2133 -2132 -2131 -2130 -2129 -2128 -2127 -2126 -2125 -2124 -2123 -2122 -2121 -2120 -2119 -2118 -2117 -2116 -2115 -2114 -2113 -2112 -2111 -2110 -2109 -2108 -2107 -2106 -2105 -2104 -2103 -2102 -2101 -2100 -2099 -2098 -2097 -2096 -2095 -2094 -2093 -2092 -2091 -2090 -2089 -2088 -2087 -2086 -2085 -2084 -2083 -2082 -2081 -2080 -2079 -2078 -2077 -2076 -2075 -2074 -2073 -2072 -2071 -2070 -2069 -2068 -2067 -2066 -2065 -2064 -2063 -2062 -2061 -2060 -2059 -2058 -2057 -2056 -2055 -2054 -2053 -2052 -2051 -2050 -2049 -2048 -2047 -2046 -2045 -2044 -2043 -2042 -2041 -2040 -2039 -2038 -2037 -2036 -2035 -2034 -2033 -2032 -2031 -2030 -2029 -2028 -2027 -2026 -2025 -2024 -2023 -2022 -2021 -2020 -2019 -2018 -2017 -2016 -2015 -2014 -2013 -2012 -2011 -2010 -2009 -2008 -2007 -2006 -2005 -2004 -2003 -2002 -2001 -2000 -1999 -1998 -1997 -1996 -1995 -1994 -1993 -1992 -1991 -1990 -1989 -1988 -1987 -1986 -1985 -1984 -1983 -1982 -1981 -1980 -1979 -1978 -1977 -1976 -1975 -1974 -1973 -1972 -1971 -1970 -1969 -1968 -1967 -1966 -1965 -1964 -1963 -1962 -1961 -1960 -1959 -1958 -1957 -1956 -1955 -1954 -1953 -1952 -1951 -1950 -1949 -1948 -1947 -1946 -1945 -1944 -1943 -1942 -1941 -1940 -1939 -1938 -1937 -1936 -1935 -1934 -1933 -1932 -1931 -1930 -1929 -1928 -1927 -1926 -1925 -1924 -1923 -1922 -1921 -1920 -1919 -1918 -1917 -1916 -1915 -1914 -1913 -1912 -1911 -1910 -1909 -1908 -1907 -1906 -1905 -1904 -1903 -1902 -1901 -1900 -1899 -1898 -1897 -1896 -1895 -1894 -1893 -1892 -1891 -1890 -1889 -1888 -1887 -1886 -1885 -1884 -1883 -1882 -1881 -1880 -1879 -1878 -1877 -1876 -1875 -1874 -1873 -1872 -1871 -1870 -1869 -1868 -1867 -1866 -1865 -1864 -1863 -1862 -1861 -1860 -1859 -1858 -1857 -1856 -1855 -1854 -1853 -1852 -1851 -1850 -1849 -1848 -1847 -1846 -1845 -1844 -1843 -1842 -1841 -1840 -1839 -1838 -1837 -1836 -1835 -1834 -1833 -1832 -1831 -1830 -1829 -1828 -1827 -1826 -1825 -1824 -1823 -1822 -1821 -1820 -1819 -1818 -1817 -1816 -1815 -1814 -1813 -1812 -1811 -1810 -1809 -1808 -1807 -1806 -1805 -1804 -1803 -1802 -1801 -1800 -1799 -1798 -1797 -1796 -1795 -1794 -1793 -1792 -1791 -1790 -1789 -1788 -1787 -1786 -1785 -1784 -1783 -1782 -1781 -1780 -1779 -1778 -1777 -1776 -1775 -1774 -1773 -1772 -1771 -1770 -1769 -1768 -1767 -1766 -1765 -1764 -1763 -1762 -1761 -1760 -1759 -1758 -1757 -1756 -1755 -1754 -1753 -1752 -1751 -1750 -1749 -1748 -1747 -1746 -1745 -1744 -1743 -1742 -1741 -1740 -1739 -1738 -1737 -1736 -1735 -1734 -1733 -1732 -1731 -1730 -1729 -1728 -1727 -1726 -1725 -1724 -1723 -1722 -1721 -1720 -1719 -1718 -1717 -1716 -1715 -1714 -1713 -1712 -1711 -1710 -1709 -1708 -1707 -1706 -1705 -1704 -1703 -1702 -1701 -1700 -1699 -1698 -1697 -1696 -1695 -1694 -1693 -1692 -1691 -1690 -1689 -1688 -1687 -1686 -1685 -1684 -1683 -1682 -1681 -1680 -1679 -1678 -1677 -1676 -1675 -1674 -1673 -1672 -1671 -1670 -1669 -1668 -1667 -1666 -1665 -1664 -1663 -1662 -1661 -1660 -1659 -1658 -1657 -1656 -1655 -1654 -1653 -1652 -1651 -1650 -1649 -1648 -1647 -1646 -1645 -1644 -1643 -1642 -1641 -1640 -1639 -1638 -1637 -1636 -1635 -1634 -1633 -1632 -1631 -1630 -1629 -1628 -1627 -1626 -1625 -1624 -1623 -1622 -1621 -1620 -1619 -1618 -1617 -1616 -1615 -1614 -1613 -1612 -1611 -1610 -1609 -1608 -1607 -1606 -1605 -1604 -1603 -1602 -1601 -1600 -1599 -1598 -1597 -1596 -1595 -1594 -1593 -1592 -1591 -1590 -1589 -1588 -1587 -1586 -1585 -1584 -1583 -1582 -1581 -1580 -1579 -1578 -1577 -1576 -1575 -1574 -1573 -1572 -1571 -1570 -1569 -1568 -1567 -1566 -1565 -1564 -1563 -1562 -1561 -1560 -1559 -1558 -1557 -1556 -1555 -1554 -1553 -1552 -1551 -1550 -1549 -1548 -1547 -1546 -1545 -1544 -1543 -1542 -1541 -1540 -1539 -1538 -1537 -1536 -1535 -1534 -1533 -1532 -1531 -1530 -1529 -1528 -1527 -1526 -1525 -1524 -1523 -1522 -1521 -1520 -1519 -1518 -1517 -1516 -1515 -1514 -1513 -1512 -1511 -1510 -1509 -1508 -1507 -1506 -1505 -1504 -1503 -1502 -1501 -1500 -1499 -1498 -1497 -1496 -1495 -1494 -1493 -1492 -1491 -1490 -1489 -1488 -1487 -1486 -1485 -1484 -1483 -1482 -1481 -1480 -1479 -1478 -1477 -1476 -1475 -1474 -1473 -1472 -1471 -1470 -1469 -1468 -1467 -1466 -1465 -1464 -1463 -1462 -1461 -1460 -1459 -1458 -1457 -1456 -1455 -1454 -1453 -1452 -1451 -1450 -1449 -1448 -1447 -1446 -1445 -1444 -1443 -1442 -1441 -1440 -1439 -1438 -1437 -1436 -1435 -1434 -1433 -1432 -1431 -1430 -1429 -1428 -1427 -1426 -1425 -1424 -1423 -1422 -1421 -1420 -1419 -1418 -1417 -1416 -1415 -1414 -1413 -1412 -1411 -1410 -1409 -1408 -1407 -1406 -1405 -1404 -1403 -1402 -1401 -1400 -1399 -1398 -1397 -1396 -1395 -1394 -1393 -1392 -1391 -1390 -1389 -1388 -1387 -1386 -1385 -1384 -1383 -1382 -1381 -1380 -1379 -1378 -1377 -1376 -1375 -1374 -1373 -1372 -1371 -1370 -1369 -1368 -1367 -1366 -1365 -1364 -1363 -1362 -1361 -1360 -1359 -1358 -1357 -1356 -1355 -1354 -1353 -1352 -1351 -1350 -1349 -1348 -1347 -1346 -1345 -1344 -1343 -1342 -1341 -1340 -1339 -1338 -1337 -1336 -1335 -1334 -1333 -1332 -1331 -1330 -1329 -1328 -1327 -1326 -1325 -1324 -1323 -1322 -1321 -1320 -1319 -1318 -1317 -1316 -1315 -1314 -1313 -1312 -1311 -1310 -1309 -1308 -1307 -1306 -1305 -1304 -1303 -1302 -1301 -1300 -1299 -1298 -1297 -1296 -1295 -1294 -1293 -1292 -1291 -1290 -1289 -1288 -1287 -1286 -1285 -1284 -1283 -1282 -1281 -1280 -1279 -1278 -1277 -1276 -1275 -1274 -1273 -1272 -1271 -1270 -1269 -1268 -1267 -1266 -1265 -1264 -1263 -1262 -1261 -1260 -1259 -1258 -1257 -1256 -1255 -1254 -1253 -1252 -1251 -1250 -1249 -1248 -1247 -1246 -1245 -1244 -1243 -1242 -1241 -1240 -1239 -1238 -1237 -1236 -1235 -1234 -1233 -1232 -1231 -1230 -1229 -1228 -1227 -1226 -1225 -1224 -1223 -1222 -1221 -1220 -1219 -1218 -1217 -1216 -1215 -1214 -1213 -1212 -1211 -1210 -1209 -1208 -1207 -1206 -1205 -1204 -1203 -1202 -1201 -1200 -1199 -1198 -1197 -1196 -1195 -1194 -1193 -1192 -1191 -1190 -1189 -1188 -1187 -1186 -1185 -1184 -1183 -1182 -1181 -1180 -1179 -1178 -1177 -1176 -1175 -1174 -1173 -1172 -1171 -1170 -1169 -1168 -1167 -1166 -1165 -1164 -1163 -1162 -1161 -1160 -1159 -1158 -1157 -1156 -1155 -1154 -1153 -1152 -1151 -1150 -1149 -1148 -1147 -1146 -1145 -1144 -1143 -1142 -1141 -1140 -1139 -1138 -1137 -1136 -1135 -1134 -1133 -1132 -1131 -1130 -1129 -1128 -1127 -1126 -1125 -1124 -1123 -1122 -1121 -1120 -1119 -1118 -1117 -1116 -1115 -1114 -1113 -1112 -1111 -1110 -1109 -1108 -1107 -1106 -1105 -1104 -1103 -1102 -1101 -1100 -1099 -1098 -1097 -1096 -1095 -1094 -1093 -1092 -1091 -1090 -1089 -1088 -1087 -1086 -1085 -1084 -1083 -1082 -1081 -1080 -1079 -1078 -1077 -1076 -1075 -1074 -1073 -1072 -1071 -1070 -1069 -1068 -1067 -1066 -1065 -1064 -1063 -1062 -1061 -1060 -1059 -1058 -1057 -1056 -1055 -1054 -1053 -1052 -1051 -1050 -1049 -1048 -1047 -1046 -1045 -1044 -1043 -1042 -1041 -1040 -1039 -1038 -1037 -1036 -1035 -1034 -1033 -1032 -1031 -1030 -1029 -1028 -1027 -1026 -1025 -1024 -1023 -1022 -1021 -1020 -1019 -1018 -1017 -1016 -1015 -1014 -1013 -1012 -1011 -1010 -1009 -1008 -1007 -1006 -1005 -1004 -1003 -1002 -1001 -1000 -999 -998 -997 -996 -995 -994 -993 -992 -991 -990 -989 -988 -987 -986 -985 -984 -983 -982 -981 -980 -979 -978 -977 -976 -975 -974 -973 -972 -971 -970 -969 -968 -967 -966 -965 -964 -963 -962 -961 -960 -959 -958 -957 -956 -955 -954 -953 -952 -951 -950 -949 -948 -947 -946 -945 -944 -943 -942 -941 -940 -939 -938 -937 -936 -935 -934 -933 -932 -931 -930 -929 -928 -927 -926 -925 -924 -923 -922 -921 -920 -919 -918 -917 -916 -915 -914 -913 -912 -911 -910 -909 -908 -907 -906 -905 -904 -903 -902 -901 -900 -899 -898 -897 -896 -895 -894 -893 -892 -891 -890 -889 -888 -887 -886 -885 -884 -883 -882 -881 -880 -879 -878 -877 -876 -875 -874 -873 -872 -871 -870 -869 -868 -867 -866 -865 -864 -863 -862 -861 -860 -859 -858 -857 -856 -855 -854 -853 -852 -851 -850 -849 -848 -847 -846 -845 -844 -843 -842 -841 -840 -839 -838 -837 -836 -835 -834 -833 -832 -831 -830 -829 -828 -827 -826 -825 -824 -823 -822 -821 -820 -819 -818 -817 -816 -815 -814 -813 -812 -811 -810 -809 -808 -807 -806 -805 -804 -803 -802 -801 -800 -799 -798 -797 -796 -795 -794 -793 -792 -791 -790 -789 -788 -787 -786 -785 -784 -783 -782 -781 -780 -779 -778 -777 -776 -775 -774 -773 -772 -771 -770 -769 -768 -767 -766 -765 -764 -763 -762 -761 -760 -759 -758 -757 -756 -755 -754 -753 -752 -751 -750 -749 -748 -747 -746 -745 -744 -743 -742 -741 -740 -739 -738 -737 -736 -735 -734 -733 -732 -731 -730 -729 -728 -727 -726 -725 -724 -723 -722 -721 -720 -719 -718 -717 -716 -715 -714 -713 -712 -711 -710 -709 -708 -707 -706 -705 -704 -703 -702 -701 -700 -699 -698 -697 -696 -695 -694 -693 -692 -691 -690 -689 -688 -687 -686 -685 -684 -683 -682 -681 -680 -679 -678 -677 -676 -675 -674 -673 -672 -671 -670 -669 -668 -667 -666 -665 -664 -663 -662 -661 -660 -659 -658 -657 -656 -655 -654 -653 -652 -651 -650 -649 -648 -647 -646 -645 -644 -643 -642 -641 -640 -639 -638 -637 -636 -635 -634 -633 -632 -631 -630 -629 -628 -627 -626 -625 -624 -623 -622 -621 -620 -619 -618 -617 -616 -615 -614 -613 -612 -611 -610 -609 -608 -607 -606 -605 -604 -603 -602 -601 -600 -599 -598 -597 -596 -595 -594 -593 -592 -591 -590 -589 -588 -587 -586 -585 -584 -583 -582 -581 -580 -579 -578 -577 -576 -575 -574 -573 -572 -571 -570 -569 -568 -567 -566 -565 -564 -563 -562 -561 -560 -559 -558 -557 -556 -555 -554 -553 -552 -551 -550 -549 -548 -547 -546 -545 -544 -543 -542 -541 -540 -539 -538 -537 -536 -535 -534 -533 -532 -531 -530 -529 -528 -527 -526 -525 -524 -523 -522 -521 -520 -519 -518 -517 -516 -515 -514 -513 -512 -511 -510 -509 -508 -507 -506 -505 -504 -503 -502 -501 -500 -499 -498 -497 -496 -495 -494 -493 -492 -491 -490 -489 -488 -487 -486 -485 -484 -483 -482 -481 -480 -479 -478 -477 -476 -475 -474 -473 -472 -471 -470 -469 -468 -467 -466 -465 -464 -463 -462 -461 -460 -459 -458 -457 -456 -455 -454 -453 -452 -451 -450 -449 -448 -447 -446 -445 -444 -443 -442 -441 -440 -439 -438 -437 -436 -435 -434 -433 -432 -431 -430 -429 -428 -427 -426 -425 -424 -423 -422 -421 -420 -419 -418 -417 -416 -415 -414 -413 -412 -411 -410 -409 -408 -407 -406 -405 -404 -403 -402 -401 -400 -399 -398 -397 -396 -395 -394 -393 -392 -391 -390 -389 -388 -387 -386 -385 -384 -383 -382 -381 -380 -379 -378 -377 -376 -375 -374 -373 -372 -371 -370 -369 -368 -367 -366 -365 -364 -363 -362 -361 -360 -359 -358 -357 -356 -355 -354 -353 -352 -351 -350 -349 -348 -347 -346 -345 -344 -343 -342 -341 -340 -339 -338 -337 -336 -335 -334 -333 -332 -331 -330 -329 -328 -327 -326 -325 -324 -323 -322 -321 -320 -319 -318 -317 -316 -315 -314 -313 -312 -311 -310 -309 -308 -307 -306 -305 -304 -303 -302 -301 -300 -299 -298 -297 -296 -295 -294 -293 -292 -291 -290 -289 -288 -287 -286 -285 -284 -283 -282 -281 -280 -279 -278 -277 -276 -275 -274 -273 -272 -271 -270 -269 -268 -267 -266 -265 -264 -263 -262 -261 -260 -259 -258 -257 -256 -255 -254 -253 -252 -251 -250 -249 -248 -247 -246 -245 -244 -243 -242 -241 -240 -239 -238 -237 -236 -235 -234 -233 -232 -231 -230 -229 -228 -227 -226 -225 -224 -223 -222 -221 -220 -219 -218 -217 -216 -215 -214 -213 -212 -211 -210 -209 -208 -207 -206 -205 -204 -203 -202 -201 -200 -199 -198 -197 -196 -195 -194 -193 -192 -191 -190 -189 -188 -187 -186 -185 -184 -183 -182 -181 -180 -179 -178 -177 -176 -175 -174 -173 -172 -171 -170 -169 -168 -167 -166 -165 -164 -163 -162 -161 -160 -159 -158 -157 -156 -155 -154 -153 -152 -151 -150 -149 -148 -147 -146 -145 -144 -143 -142 -141 -140 -139 -138 -137 -136 -135 -134 -133 -132 -131 -130 -129 -128 -127 -126 -125 -124 -123 -122 -121 -120 -119 -118 -117 -116 -115 -114 -113 -112 -111 -110 -109 -108 -107 -106 -105 -104 -103 -102 -101 -100 -99 -98 -97 -96 -95 -94 -93 -92 -91 -90 -89 -88 -87 -86 -85 -84 -83 -82 -81 -80 -79 -78 -77 -76 -75 -74 -73 -72 -71 -70 -69 -68 -67 -66 -65 -64 -63 -62 -61 -60 -59 -58 -57 -56 -55 -54 -53 -52 -51 -50 -49 -48 -47 -46 -45 -44 -43 -42 -41 -40 -39 -38 -37 -36 -35 -34 -33 -32 -31 -30 -29 -28 -27 -26 -25 -24 -23 -22 -21 -20 -19 -18 -17 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 6164 6165 6166 6167 6168 6169 6170 6171 6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218 6219 6220 6221 6222 6223 6224 6225 6226 6227 6228 6229 6230 6231 6232 6233 6234 6235 6236 6237 6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 6249 6250 6251 6252 6253 6254 6255 6256 6257 6258 6259 6260 6261 6262 6263 6264 6265 6266 6267 6268 6269 6270 6271 6272 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 6290 6291 6292 6293 6294 6295 6296 6297 6298 6299 6300 6301 6302 6303 6304 6305 6306 6307 6308 6309 6310 6311 6312 6313 6314 6315 6316 6317 6318 6319 6320 6321 6322 6323 6324 6325 6326 6327 6328 6329 6330 6331 6332 6333 6334 6335 6336 6337 6338 6339 6340 6341 6342 6343 6344 6345 6346 6347 6348 6349 6350 6351 6352 6353 6354 6355 6356 6357 6358 6359 6360 6361 6362 6363 6364 6365 6366 6367 6368 6369 6370 6371 6372 6373 6374 6375 6376 6377 6378 6379 6380 6381 6382 6383 6384 6385 6386 6387 6388 6389 6390 6391 6392 6393 6394 6395 6396 6397 6398 6399 6400 6401 6402 6403 6404 6405 6406 6407 6408 6409 6410 6411 6412 6413 6414 6415 6416 6417 6418 6419 6420 6421 6422 6423 6424 6425 6426 6427 6428 6429 6430 6431 6432 6433 6434 6435 6436 6437 6438 6439 6440 6441 6442 6443 6444 6445 6446 6447 6448 6449 6450 6451 6452 6453 6454 6455 6456 6457 6458 6459 6460 6461 6462 6463 6464 6465 6466 6467 6468 6469 6470 6471 6472 6473 6474 6475 6476 6477 6478 6479 6480 6481 6482 6483 6484 6485 6486 6487 6488 6489 6490 6491 6492 6493 6494 6495 6496 6497 6498 6499 6500 6501 6502 6503 6504 6505 6506 6507 6508 6509 6510 6511 6512 6513 6514 6515 6516 6517 6518 6519 6520 6521 6522 6523 6524 6525 6526 6527 6528 6529 6530 6531 6532 6533 6534 6535 6536 6537 6538 6539 6540 6541 6542 6543 6544 6545 6546 6547 6548 6549 6550 6551 6552 6553 6554 6555 6556 6557 6558 6559 6560 6561 6562 6563 6564 6565 6566 6567 6568 6569 6570 6571 6572 6573 6574 6575 6576 6577 6578 6579 6580 6581 6582 6583 6584 6585 6586 6587 6588 6589 6590 6591 6592 6593 6594 6595 6596 6597 6598 6599 6600 6601 6602 6603 6604 6605 6606 6607 6608 6609 6610 6611 6612 6613 6614 6615 6616 6617 6618 6619 6620 6621 6622 6623 6624 6625 6626 6627 6628 6629 6630 6631 6632 6633 6634 6635 6636 6637 6638 6639 6640 6641 6642 6643 6644 6645 6646 6647 6648 6649 6650 6651 6652 6653 6654 6655 6656 6657 6658 6659 6660 6661 6662 6663 6664 6665 6666 6667 6668 6669 6670 6671 6672 6673 6674 6675 6676 6677 6678 6679 6680 6681 6682 6683 6684 6685 6686 6687 6688 6689 6690 6691 6692 6693 6694 6695 6696 6697 6698 6699 6700 6701 6702 6703 6704 6705 6706 6707 6708 6709 6710 6711 6712 6713 6714 6715 6716 6717 6718 6719 6720 6721 6722 6723 6724 6725 6726 6727 6728 6729 6730 6731 6732 6733 6734 6735 6736 6737 6738 6739 6740 6741 6742 6743 6744 6745 6746 6747 6748 6749 6750 6751 6752 6753 6754 6755 6756 6757 6758 6759 6760 6761 6762 6763 6764 6765 6766 6767 6768 6769 6770 6771 6772 6773 6774 6775 6776 6777 6778 6779 6780 6781 6782 6783 6784 6785 6786 6787 6788 6789 6790 6791 6792 6793 6794 6795 6796 6797 6798 6799 6800 6801 6802 6803 6804 6805 6806 6807 6808 6809 6810 6811 6812 6813 6814 6815 6816 6817 6818 6819 6820 6821 6822 6823 6824 6825 6826 6827 6828 6829 6830 6831 6832 6833 6834 6835 6836 6837 6838 6839 6840 6841 6842 6843 6844 6845 6846 6847 6848 6849 6850 6851 6852 6853 6854 6855 6856 6857 6858 6859 6860 6861 6862 6863 6864 6865 6866 6867 6868 6869 6870 6871 6872 6873 6874 6875 6876 6877 6878 6879 6880 6881 6882 6883 6884 6885 6886 6887 6888 6889 6890 6891 6892 6893 6894 6895 6896 6897 6898 6899 6900 6901 6902 6903 6904 6905 6906 6907 6908 6909 6910 6911 6912 6913 6914 6915 6916 6917 6918 6919 6920 6921 6922 6923 6924 6925 6926 6927 6928 6929 6930 6931 6932 6933 6934 6935 6936 6937 6938 6939 6940 6941 6942 6943 6944 6945 6946 6947 6948 6949 6950 6951 6952 6953 6954 6955 6956 6957 6958 6959 6960 6961 6962 6963 6964 6965 6966 6967 6968 6969 6970 6971 6972 6973 6974 6975 6976 6977 6978 6979 6980 6981 6982 6983 6984 6985 6986 6987 6988 6989 6990 6991 6992 6993 6994 6995 6996 6997 6998 6999 7000 7001 7002 7003 7004 7005 7006 7007 7008 7009 7010 7011 7012 7013 7014 7015 7016 7017 7018 7019 7020 7021 7022 7023 7024 7025 7026 7027 7028 7029 7030 7031 7032 7033 7034 7035 7036 7037 7038 7039 7040 7041 7042 7043 7044 7045 7046 7047 7048 7049 7050 7051 7052 7053 7054 7055 7056 7057 7058 7059 7060 7061 7062 7063 7064 7065 7066 7067 7068 7069 7070 7071 7072 7073 7074 7075 7076 7077 7078 7079 7080 7081 7082 7083 7084 7085 7086 7087 7088 7089 7090 7091 7092 7093 7094 7095 7096 7097 7098 7099 7100 7101 7102 7103 7104 7105 7106 7107 7108 7109 7110 7111 7112 7113 7114 7115 7116 7117 7118 7119 7120 7121 7122 7123 7124 7125 7126 7127 7128 7129 7130 7131 7132 7133 7134 7135 7136 7137 7138 7139 7140 7141 7142 7143 7144 7145 7146 7147 7148 7149 7150 7151 7152 7153 7154 7155 7156 7157 7158 7159 7160 7161 7162 7163 7164 7165 7166 7167 7168 7169 7170 7171 7172 7173 7174 7175 7176 7177 7178 7179 7180 7181 7182 7183 7184 7185 7186 7187 7188 7189 7190 7191 7192 7193 7194 7195 7196 7197 7198 7199 7200 7201 7202 7203 7204 7205 7206 7207 7208 7209 7210 7211 7212 7213 7214 7215 7216 7217 7218 7219 7220 7221 7222 7223 7224 7225 7226 7227 7228 7229 7230 7231 7232 7233 7234 7235 7236 7237 7238 7239 7240 7241 7242 7243 7244 7245 7246 7247 7248 7249 7250 7251 7252 7253 7254 7255 7256 7257 7258 7259 7260 7261 7262 7263 7264 7265 7266 7267 7268 7269 7270 7271 7272 7273 7274 7275 7276 7277 7278 7279 7280 7281 7282 7283 7284 7285 7286 7287 7288 7289 7290 7291 7292 7293 7294 7295 7296 7297 7298 7299 7300 7301 7302 7303 7304 7305 7306 7307 7308 7309 7310 7311 7312 7313 7314 7315 7316 7317 7318 7319 7320 7321 7322 7323 7324 7325 7326 7327 7328 7329 7330 7331 7332 7333 7334 7335 7336 7337 7338 7339 7340 7341 7342 7343 7344 7345 7346 7347 7348 7349 7350 7351 7352 7353 7354 7355 7356 7357 7358 7359 7360 7361 7362 7363 7364 7365 7366 7367 7368 7369 7370 7371 7372 7373 7374 7375 7376 7377 7378 7379 7380 7381 7382 7383 7384 7385 7386 7387 7388 7389 7390 7391 7392 7393 7394 7395 7396 7397 7398 7399 7400 7401 7402 7403 7404 7405 7406 7407 7408 7409 7410 7411 7412 7413 7414 7415 7416 7417 7418 7419 7420 7421 7422 7423 7424 7425 7426 7427 7428 7429 7430 7431 7432 7433 7434 7435 7436 7437 7438 7439 7440 7441 7442 7443 7444 7445 7446 7447 7448 7449 7450 7451 7452 7453 7454 7455 7456 7457 7458 7459 7460 7461 7462 7463 7464 7465 7466 7467 7468 7469 7470 7471 7472 7473 7474 7475 7476 7477 7478 7479 7480 7481 7482 7483 7484 7485 7486 7487 7488 7489 7490 7491 7492 7493 7494 7495 7496 7497 7498 7499 7500 7501 7502 7503 7504 7505 7506 7507 7508 7509 7510 7511 7512 7513 7514 7515 7516 7517 7518 7519 7520 7521 7522 7523 7524 7525 7526 7527 7528 7529 7530 7531 7532 7533 7534 7535 7536 7537 7538 7539 7540 7541 7542 7543 7544 7545 7546 7547 7548 7549 7550 7551 7552 7553 7554 7555 7556 7557 7558 7559 7560 7561 7562 7563 7564 7565 7566 7567 7568 7569 7570 7571 7572 7573 7574 7575 7576 7577 7578 7579 7580 7581 7582 7583 7584 7585 7586 7587 7588 7589 7590 7591 7592 7593 7594 7595 7596 7597 7598 7599 7600 7601 7602 7603 7604 7605 7606 7607 7608 7609 7610 7611 7612 7613 7614 7615 7616 7617 7618 7619 7620 7621 7622 7623 7624 7625 7626 7627 7628 7629 7630 7631 7632 7633 7634 7635 7636 7637 7638 7639 7640 7641 7642 7643 7644 7645 7646 7647 7648 7649 7650 7651 7652 7653 7654 7655 7656 7657 7658 7659 7660 7661 7662 7663 7664 7665 7666 7667 7668 7669 7670 7671 7672 7673 7674 7675 7676 7677 7678 7679 7680 7681 7682 7683 7684 7685 7686 7687 7688 7689 7690 7691 7692 7693 7694 7695 7696 7697 7698 7699 7700 7701 7702 7703 7704 7705 7706 7707 7708 7709 7710 7711 7712 7713 7714 7715 7716 7717 7718 7719 7720 7721 7722 7723 7724 7725 7726 7727 7728 7729 7730 7731 7732 7733 7734 7735 7736 7737 7738 7739 7740 7741 7742 7743 7744 7745 7746 7747 7748 7749 7750 7751 7752 7753 7754 7755 7756 7757 7758 7759 7760 7761 7762 7763 7764 7765 7766 7767 7768 7769 7770 7771 7772 7773 7774 7775 7776 7777 7778 7779 7780 7781 7782 7783 7784 7785 7786 7787 7788 7789 7790 7791 7792 7793 7794 7795 7796 7797 7798 7799 7800 7801 7802 7803 7804 7805 7806 7807 7808 7809 7810 7811 7812 7813 7814 7815 7816 7817 7818 7819 7820 7821 7822 7823 7824 7825 7826 7827 7828 7829 7830 7831 7832 7833 7834 7835 7836 7837 7838 7839 7840 7841 7842 7843 7844 7845 7846 7847 7848 7849 7850 7851 7852 7853 7854 7855 7856 7857 7858 7859 7860 7861 7862 7863 7864 7865 7866 7867 7868 7869 7870 7871 7872 7873 7874 7875 7876 7877 7878 7879 7880 7881 7882 7883 7884 7885 7886 7887 7888 7889 7890 7891 7892 7893 7894 7895 7896 7897 7898 7899 7900 7901 7902 7903 7904 7905 7906 7907 7908 7909 7910 7911 7912 7913 7914 7915 7916 7917 7918 7919 7920 7921 7922 7923 7924 7925 7926 7927 7928 7929 7930 7931 7932 7933 7934 7935 7936 7937 7938 7939 7940 7941 7942 7943 7944 7945 7946 7947 7948 7949 7950 7951 7952 7953 7954 7955 7956 7957 7958 7959 7960 7961 7962 7963 7964 7965 7966 7967 7968 7969 7970 7971 7972 7973 7974 7975 7976 7977 7978 7979 7980 7981 7982 7983 7984 7985 7986 7987 7988 7989 7990 7991 7992 7993 7994 7995 7996 7997 7998 7999 8000 8001 8002 8003 8004 8005 8006 8007 8008 8009 8010 8011 8012 8013 8014 8015 8016 8017 8018 8019 8020 8021 8022 8023 8024 8025 8026 8027 8028 8029 8030 8031 8032 8033 8034 8035 8036 8037 8038 8039 8040 8041 8042 8043 8044 8045 8046 8047 8048 8049 8050 8051 8052 8053 8054 8055 8056 8057 8058 8059 8060 8061 8062 8063 8064 8065 8066 8067 8068 8069 8070 8071 8072 8073 8074 8075 8076 8077 8078 8079 8080 8081 8082 8083 8084 8085 8086 8087 8088 8089 8090 8091 8092 8093 8094 8095 8096 8097 8098 8099 8100 8101 8102 8103 8104 8105 8106 8107 8108 8109 8110 8111 8112 8113 8114 8115 8116 8117 8118 8119 8120 8121 8122 8123 8124 8125 8126 8127 8128 8129 8130 8131 8132 8133 8134 8135 8136 8137 8138 8139 8140 8141 8142 8143 8144 8145 8146 8147 8148 8149 8150 8151 8152 8153 8154 8155 8156 8157 8158 8159 8160 8161 8162 8163 8164 8165 8166 8167 8168 8169 8170 8171 8172 8173 8174 8175 8176 8177 8178 8179 8180 8181 8182 8183 8184 8185 8186 8187 8188 8189 8190 8191 8192 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/sn_8192/first.xml b/bench_horn_mcmc/sn_8192/first.xml new file mode 100644 index 000000000..9db40934f --- /dev/null +++ b/bench_horn_mcmc/sn_8192/first.xml @@ -0,0 +1,49205 @@ + + + + + 1 + itp + + + + x + x1 + + + + x + + + + + + x + 1 + + + + + x + 2 + + + + + x + 3 + + + + + x + 4 + + + + + x + 5 + + + + + x + 6 + + + + + x + 7 + + + + + x + 8 + + + + + x + 9 + + + + + x + 10 + + + + + x + 11 + + + + + x + 12 + + + + + x + 13 + + + + + x + 14 + + + + + x + 15 + + + + + x + 16 + + + + + x + 17 + + + + + x + 18 + + + + + x + 19 + + + + + x + 20 + + + + + x + 21 + + + + + x + 22 + + + + + x + 23 + + + + + x + 24 + + + + + x + 25 + + + + + x + 26 + + + + + x + 27 + + + + + x + 28 + + + + + x + 29 + + + + + x + 30 + + + + + x + 31 + + + + + x + 32 + + + + + x + 33 + + + + + x + 34 + + + + + x + 35 + + + + + x + 36 + + + + + x + 37 + + + + + x + 38 + + + + + x + 39 + + + + + x + 40 + + + + + x + 41 + + + + + x + 42 + + + + + x + 43 + + + + + x + 44 + + + + + x + 45 + + + + + x + 46 + + + + + x + 47 + + + + + x + 48 + + + + + x + 49 + + + + + x + 50 + + + + + x + 51 + + + + + x + 52 + + + + + x + 53 + + + + + x + 54 + + + + + x + 55 + + + + + x + 56 + + + + + x + 57 + + + + + x + 58 + + + + + x + 59 + + + + + x + 60 + + + + + x + 61 + + + + + x + 62 + + + + + x + 63 + + + + + x + 64 + + + + + x + 65 + + + + + x + 66 + + + + + x + 67 + + + + + x + 68 + + + + + x + 69 + + + + + x + 70 + + + + + x + 71 + + + + + x + 72 + + + + + x + 73 + + + + + x + 74 + + + + + x + 75 + + + + + x + 76 + + + + + x + 77 + + + + + x + 78 + + + + + x + 79 + + + + + x + 80 + + + + + x + 81 + + + + + x + 82 + + + + + x + 83 + + + + + x + 84 + + + + + x + 85 + + + + + x + 86 + + + + + x + 87 + + + + + x + 88 + + + + + x + 89 + + + + + x + 90 + + + + + x + 91 + + + + + x + 92 + + + + + x + 93 + + + + + x + 94 + + + + + x + 95 + + + + + x + 96 + + + + + x + 97 + + + + + x + 98 + + + + + x + 99 + + + + + x + 100 + + + + + x + 101 + + + + + x + 102 + + + + + x + 103 + + + + + x + 104 + + + + + x + 105 + + + + + x + 106 + + + + + x + 107 + + + + + x + 108 + + + + + x + 109 + + + + + x + 110 + + + + + x + 111 + + + + + x + 112 + + + + + x + 113 + + + + + x + 114 + + + + + x + 115 + + + + + x + 116 + + + + + x + 117 + + + + + x + 118 + + + + + x + 119 + + + + + x + 120 + + + + + x + 121 + + + + + x + 122 + + + + + x + 123 + + + + + x + 124 + + + + + x + 125 + + + + + x + 126 + + + + + x + 127 + + + + + x + 128 + + + + + x + 129 + + + + + x + 130 + + + + + x + 131 + + + + + x + 132 + + + + + x + 133 + + + + + x + 134 + + + + + x + 135 + + + + + x + 136 + + + + + x + 137 + + + + + x + 138 + + + + + x + 139 + + + + + x + 140 + + + + + x + 141 + + + + + x + 142 + + + + + x + 143 + + + + + x + 144 + + + + + x + 145 + + + + + x + 146 + + + + + x + 147 + + + + + x + 148 + + + + + x + 149 + + + + + x + 150 + + + + + x + 151 + + + + + x + 152 + + + + + x + 153 + + + + + x + 154 + + + + + x + 155 + + + + + x + 156 + + + + + x + 157 + + + + + x + 158 + + + + + x + 159 + + + + + x + 160 + + + + + x + 161 + + + + + x + 162 + + + + + x + 163 + + + + + x + 164 + + + + + x + 165 + + + + + x + 166 + + + + + x + 167 + + + + + x + 168 + + + + + x + 169 + + + + + x + 170 + + + + + x + 171 + + + + + x + 172 + + + + + x + 173 + + + + + x + 174 + + + + + x + 175 + + + + + x + 176 + + + + + x + 177 + + + + + x + 178 + + + + + x + 179 + + + + + x + 180 + + + + + x + 181 + + + + + x + 182 + + + + + x + 183 + + + + + x + 184 + + + + + x + 185 + + + + + x + 186 + + + + + x + 187 + + + + + x + 188 + + + + + x + 189 + + + + + x + 190 + + + + + x + 191 + + + + + x + 192 + + + + + x + 193 + + + + + x + 194 + + + + + x + 195 + + + + + x + 196 + + + + + x + 197 + + + + + x + 198 + + + + + x + 199 + + + + + x + 200 + + + + + x + 201 + + + + + x + 202 + + + + + x + 203 + + + + + x + 204 + + + + + x + 205 + + + + + x + 206 + + + + + x + 207 + + + + + x + 208 + + + + + x + 209 + + + + + x + 210 + + + + + x + 211 + + + + + x + 212 + + + + + x + 213 + + + + + x + 214 + + + + + x + 215 + + + + + x + 216 + + + + + x + 217 + + + + + x + 218 + + + + + x + 219 + + + + + x + 220 + + + + + x + 221 + + + + + x + 222 + + + + + x + 223 + + + + + x + 224 + + + + + x + 225 + + + + + x + 226 + + + + + x + 227 + + + + + x + 228 + + + + + x + 229 + + + + + x + 230 + + + + + x + 231 + + + + + x + 232 + + + + + x + 233 + + + + + x + 234 + + + + + x + 235 + + + + + x + 236 + + + + + x + 237 + + + + + x + 238 + + + + + x + 239 + + + + + x + 240 + + + + + x + 241 + + + + + x + 242 + + + + + x + 243 + + + + + x + 244 + + + + + x + 245 + + + + + x + 246 + + + + + x + 247 + + + + + x + 248 + + + + + x + 249 + + + + + x + 250 + + + + + x + 251 + + + + + x + 252 + + + + + x + 253 + + + + + x + 254 + + + + + x + 255 + + + + + x + 256 + + + + + x + 257 + + + + + x + 258 + + + + + x + 259 + + + + + x + 260 + + + + + x + 261 + + + + + x + 262 + + + + + x + 263 + + + + + x + 264 + + + + + x + 265 + + + + + x + 266 + + + + + x + 267 + + + + + x + 268 + + + + + x + 269 + + + + + x + 270 + + + + + x + 271 + + + + + x + 272 + + + + + x + 273 + + + + + x + 274 + + + + + x + 275 + + + + + x + 276 + + + + + x + 277 + + + + + x + 278 + + + + + x + 279 + + + + + x + 280 + + + + + x + 281 + + + + + x + 282 + + + + + x + 283 + + + + + x + 284 + + + + + x + 285 + + + + + x + 286 + + + + + x + 287 + + + + + x + 288 + + + + + x + 289 + + + + + x + 290 + + + + + x + 291 + + + + + x + 292 + + + + + x + 293 + + + + + x + 294 + + + + + x + 295 + + + + + x + 296 + + + + + x + 297 + + + + + x + 298 + + + + + x + 299 + + + + + x + 300 + + + + + x + 301 + + + + + x + 302 + + + + + x + 303 + + + + + x + 304 + + + + + x + 305 + + + + + x + 306 + + + + + x + 307 + + + + + x + 308 + + + + + x + 309 + + + + + x + 310 + + + + + x + 311 + + + + + x + 312 + + + + + x + 313 + + + + + x + 314 + + + + + x + 315 + + + + + x + 316 + + + + + x + 317 + + + + + x + 318 + + + + + x + 319 + + + + + x + 320 + + + + + x + 321 + + + + + x + 322 + + + + + x + 323 + + + + + x + 324 + + + + + x + 325 + + + + + x + 326 + + + + + x + 327 + + + + + x + 328 + + + + + x + 329 + + + + + x + 330 + + + + + x + 331 + + + + + x + 332 + + + + + x + 333 + + + + + x + 334 + + + + + x + 335 + + + + + x + 336 + + + + + x + 337 + + + + + x + 338 + + + + + x + 339 + + + + + x + 340 + + + + + x + 341 + + + + + x + 342 + + + + + x + 343 + + + + + x + 344 + + + + + x + 345 + + + + + x + 346 + + + + + x + 347 + + + + + x + 348 + + + + + x + 349 + + + + + x + 350 + + + + + x + 351 + + + + + x + 352 + + + + + x + 353 + + + + + x + 354 + + + + + x + 355 + + + + + x + 356 + + + + + x + 357 + + + + + x + 358 + + + + + x + 359 + + + + + x + 360 + + + + + x + 361 + + + + + x + 362 + + + + + x + 363 + + + + + x + 364 + + + + + x + 365 + + + + + x + 366 + + + + + x + 367 + + + + + x + 368 + + + + + x + 369 + + + + + x + 370 + + + + + x + 371 + + + + + x + 372 + + + + + x + 373 + + + + + x + 374 + + + + + x + 375 + + + + + x + 376 + + + + + x + 377 + + + + + x + 378 + + + + + x + 379 + + + + + x + 380 + + + + + x + 381 + + + + + x + 382 + + + + + x + 383 + + + + + x + 384 + + + + + x + 385 + + + + + x + 386 + + + + + x + 387 + + + + + x + 388 + + + + + x + 389 + + + + + x + 390 + + + + + x + 391 + + + + + x + 392 + + + + + x + 393 + + + + + x + 394 + + + + + x + 395 + + + + + x + 396 + + + + + x + 397 + + + + + x + 398 + + + + + x + 399 + + + + + x + 400 + + + + + x + 401 + + + + + x + 402 + + + + + x + 403 + + + + + x + 404 + + + + + x + 405 + + + + + x + 406 + + + + + x + 407 + + + + + x + 408 + + + + + x + 409 + + + + + x + 410 + + + + + x + 411 + + + + + x + 412 + + + + + x + 413 + + + + + x + 414 + + + + + x + 415 + + + + + x + 416 + + + + + x + 417 + + + + + x + 418 + + + + + x + 419 + + + + + x + 420 + + + + + x + 421 + + + + + x + 422 + + + + + x + 423 + + + + + x + 424 + + + + + x + 425 + + + + + x + 426 + + + + + x + 427 + + + + + x + 428 + + + + + x + 429 + + + + + x + 430 + + + + + x + 431 + + + + + x + 432 + + + + + x + 433 + + + + + x + 434 + + + + + x + 435 + + + + + x + 436 + + + + + x + 437 + + + + + x + 438 + + + + + x + 439 + + + + + x + 440 + + + + + x + 441 + + + + + x + 442 + + + + + x + 443 + + + + + x + 444 + + + + + x + 445 + + + + + x + 446 + + + + + x + 447 + + + + + x + 448 + + + + + x + 449 + + + + + x + 450 + + + + + x + 451 + + + + + x + 452 + + + + + x + 453 + + + + + x + 454 + + + + + x + 455 + + + + + x + 456 + + + + + x + 457 + + + + + x + 458 + + + + + x + 459 + + + + + x + 460 + + + + + x + 461 + + + + + x + 462 + + + + + x + 463 + + + + + x + 464 + + + + + x + 465 + + + + + x + 466 + + + + + x + 467 + + + + + x + 468 + + + + + x + 469 + + + + + x + 470 + + + + + x + 471 + + + + + x + 472 + + + + + x + 473 + + + + + x + 474 + + + + + x + 475 + + + + + x + 476 + + + + + x + 477 + + + + + x + 478 + + + + + x + 479 + + + + + x + 480 + + + + + x + 481 + + + + + x + 482 + + + + + x + 483 + + + + + x + 484 + + + + + x + 485 + + + + + x + 486 + + + + + x + 487 + + + + + x + 488 + + + + + x + 489 + + + + + x + 490 + + + + + x + 491 + + + + + x + 492 + + + + + x + 493 + + + + + x + 494 + + + + + x + 495 + + + + + x + 496 + + + + + x + 497 + + + + + x + 498 + + + + + x + 499 + + + + + x + 500 + + + + + x + 501 + + + + + x + 502 + + + + + x + 503 + + + + + x + 504 + + + + + x + 505 + + + + + x + 506 + + + + + x + 507 + + + + + x + 508 + + + + + x + 509 + + + + + x + 510 + + + + + x + 511 + + + + + x + 512 + + + + + x + 513 + + + + + x + 514 + + + + + x + 515 + + + + + x + 516 + + + + + x + 517 + + + + + x + 518 + + + + + x + 519 + + + + + x + 520 + + + + + x + 521 + + + + + x + 522 + + + + + x + 523 + + + + + x + 524 + + + + + x + 525 + + + + + x + 526 + + + + + x + 527 + + + + + x + 528 + + + + + x + 529 + + + + + x + 530 + + + + + x + 531 + + + + + x + 532 + + + + + x + 533 + + + + + x + 534 + + + + + x + 535 + + + + + x + 536 + + + + + x + 537 + + + + + x + 538 + + + + + x + 539 + + + + + x + 540 + + + + + x + 541 + + + + + x + 542 + + + + + x + 543 + + + + + x + 544 + + + + + x + 545 + + + + + x + 546 + + + + + x + 547 + + + + + x + 548 + + + + + x + 549 + + + + + x + 550 + + + + + x + 551 + + + + + x + 552 + + + + + x + 553 + + + + + x + 554 + + + + + x + 555 + + + + + x + 556 + + + + + x + 557 + + + + + x + 558 + + + + + x + 559 + + + + + x + 560 + + + + + x + 561 + + + + + x + 562 + + + + + x + 563 + + + + + x + 564 + + + + + x + 565 + + + + + x + 566 + + + + + x + 567 + + + + + x + 568 + + + + + x + 569 + + + + + x + 570 + + + + + x + 571 + + + + + x + 572 + + + + + x + 573 + + + + + x + 574 + + + + + x + 575 + + + + + x + 576 + + + + + x + 577 + + + + + x + 578 + + + + + x + 579 + + + + + x + 580 + + + + + x + 581 + + + + + x + 582 + + + + + x + 583 + + + + + x + 584 + + + + + x + 585 + + + + + x + 586 + + + + + x + 587 + + + + + x + 588 + + + + + x + 589 + + + + + x + 590 + + + + + x + 591 + + + + + x + 592 + + + + + x + 593 + + + + + x + 594 + + + + + x + 595 + + + + + x + 596 + + + + + x + 597 + + + + + x + 598 + + + + + x + 599 + + + + + x + 600 + + + + + x + 601 + + + + + x + 602 + + + + + x + 603 + + + + + x + 604 + + + + + x + 605 + + + + + x + 606 + + + + + x + 607 + + + + + x + 608 + + + + + x + 609 + + + + + x + 610 + + + + + x + 611 + + + + + x + 612 + + + + + x + 613 + + + + + x + 614 + + + + + x + 615 + + + + + x + 616 + + + + + x + 617 + + + + + x + 618 + + + + + x + 619 + + + + + x + 620 + + + + + x + 621 + + + + + x + 622 + + + + + x + 623 + + + + + x + 624 + + + + + x + 625 + + + + + x + 626 + + + + + x + 627 + + + + + x + 628 + + + + + x + 629 + + + + + x + 630 + + + + + x + 631 + + + + + x + 632 + + + + + x + 633 + + + + + x + 634 + + + + + x + 635 + + + + + x + 636 + + + + + x + 637 + + + + + x + 638 + + + + + x + 639 + + + + + x + 640 + + + + + x + 641 + + + + + x + 642 + + + + + x + 643 + + + + + x + 644 + + + + + x + 645 + + + + + x + 646 + + + + + x + 647 + + + + + x + 648 + + + + + x + 649 + + + + + x + 650 + + + + + x + 651 + + + + + x + 652 + + + + + x + 653 + + + + + x + 654 + + + + + x + 655 + + + + + x + 656 + + + + + x + 657 + + + + + x + 658 + + + + + x + 659 + + + + + x + 660 + + + + + x + 661 + + + + + x + 662 + + + + + x + 663 + + + + + x + 664 + + + + + x + 665 + + + + + x + 666 + + + + + x + 667 + + + + + x + 668 + + + + + x + 669 + + + + + x + 670 + + + + + x + 671 + + + + + x + 672 + + + + + x + 673 + + + + + x + 674 + + + + + x + 675 + + + + + x + 676 + + + + + x + 677 + + + + + x + 678 + + + + + x + 679 + + + + + x + 680 + + + + + x + 681 + + + + + x + 682 + + + + + x + 683 + + + + + x + 684 + + + + + x + 685 + + + + + x + 686 + + + + + x + 687 + + + + + x + 688 + + + + + x + 689 + + + + + x + 690 + + + + + x + 691 + + + + + x + 692 + + + + + x + 693 + + + + + x + 694 + + + + + x + 695 + + + + + x + 696 + + + + + x + 697 + + + + + x + 698 + + + + + x + 699 + + + + + x + 700 + + + + + x + 701 + + + + + x + 702 + + + + + x + 703 + + + + + x + 704 + + + + + x + 705 + + + + + x + 706 + + + + + x + 707 + + + + + x + 708 + + + + + x + 709 + + + + + x + 710 + + + + + x + 711 + + + + + x + 712 + + + + + x + 713 + + + + + x + 714 + + + + + x + 715 + + + + + x + 716 + + + + + x + 717 + + + + + x + 718 + + + + + x + 719 + + + + + x + 720 + + + + + x + 721 + + + + + x + 722 + + + + + x + 723 + + + + + x + 724 + + + + + x + 725 + + + + + x + 726 + + + + + x + 727 + + + + + x + 728 + + + + + x + 729 + + + + + x + 730 + + + + + x + 731 + + + + + x + 732 + + + + + x + 733 + + + + + x + 734 + + + + + x + 735 + + + + + x + 736 + + + + + x + 737 + + + + + x + 738 + + + + + x + 739 + + + + + x + 740 + + + + + x + 741 + + + + + x + 742 + + + + + x + 743 + + + + + x + 744 + + + + + x + 745 + + + + + x + 746 + + + + + x + 747 + + + + + x + 748 + + + + + x + 749 + + + + + x + 750 + + + + + x + 751 + + + + + x + 752 + + + + + x + 753 + + + + + x + 754 + + + + + x + 755 + + + + + x + 756 + + + + + x + 757 + + + + + x + 758 + + + + + x + 759 + + + + + x + 760 + + + + + x + 761 + + + + + x + 762 + + + + + x + 763 + + + + + x + 764 + + + + + x + 765 + + + + + x + 766 + + + + + x + 767 + + + + + x + 768 + + + + + x + 769 + + + + + x + 770 + + + + + x + 771 + + + + + x + 772 + + + + + x + 773 + + + + + x + 774 + + + + + x + 775 + + + + + x + 776 + + + + + x + 777 + + + + + x + 778 + + + + + x + 779 + + + + + x + 780 + + + + + x + 781 + + + + + x + 782 + + + + + x + 783 + + + + + x + 784 + + + + + x + 785 + + + + + x + 786 + + + + + x + 787 + + + + + x + 788 + + + + + x + 789 + + + + + x + 790 + + + + + x + 791 + + + + + x + 792 + + + + + x + 793 + + + + + x + 794 + + + + + x + 795 + + + + + x + 796 + + + + + x + 797 + + + + + x + 798 + + + + + x + 799 + + + + + x + 800 + + + + + x + 801 + + + + + x + 802 + + + + + x + 803 + + + + + x + 804 + + + + + x + 805 + + + + + x + 806 + + + + + x + 807 + + + + + x + 808 + + + + + x + 809 + + + + + x + 810 + + + + + x + 811 + + + + + x + 812 + + + + + x + 813 + + + + + x + 814 + + + + + x + 815 + + + + + x + 816 + + + + + x + 817 + + + + + x + 818 + + + + + x + 819 + + + + + x + 820 + + + + + x + 821 + + + + + x + 822 + + + + + x + 823 + + + + + x + 824 + + + + + x + 825 + + + + + x + 826 + + + + + x + 827 + + + + + x + 828 + + + + + x + 829 + + + + + x + 830 + + + + + x + 831 + + + + + x + 832 + + + + + x + 833 + + + + + x + 834 + + + + + x + 835 + + + + + x + 836 + + + + + x + 837 + + + + + x + 838 + + + + + x + 839 + + + + + x + 840 + + + + + x + 841 + + + + + x + 842 + + + + + x + 843 + + + + + x + 844 + + + + + x + 845 + + + + + x + 846 + + + + + x + 847 + + + + + x + 848 + + + + + x + 849 + + + + + x + 850 + + + + + x + 851 + + + + + x + 852 + + + + + x + 853 + + + + + x + 854 + + + + + x + 855 + + + + + x + 856 + + + + + x + 857 + + + + + x + 858 + + + + + x + 859 + + + + + x + 860 + + + + + x + 861 + + + + + x + 862 + + + + + x + 863 + + + + + x + 864 + + + + + x + 865 + + + + + x + 866 + + + + + x + 867 + + + + + x + 868 + + + + + x + 869 + + + + + x + 870 + + + + + x + 871 + + + + + x + 872 + + + + + x + 873 + + + + + x + 874 + + + + + x + 875 + + + + + x + 876 + + + + + x + 877 + + + + + x + 878 + + + + + x + 879 + + + + + x + 880 + + + + + x + 881 + + + + + x + 882 + + + + + x + 883 + + + + + x + 884 + + + + + x + 885 + + + + + x + 886 + + + + + x + 887 + + + + + x + 888 + + + + + x + 889 + + + + + x + 890 + + + + + x + 891 + + + + + x + 892 + + + + + x + 893 + + + + + x + 894 + + + + + x + 895 + + + + + x + 896 + + + + + x + 897 + + + + + x + 898 + + + + + x + 899 + + + + + x + 900 + + + + + x + 901 + + + + + x + 902 + + + + + x + 903 + + + + + x + 904 + + + + + x + 905 + + + + + x + 906 + + + + + x + 907 + + + + + x + 908 + + + + + x + 909 + + + + + x + 910 + + + + + x + 911 + + + + + x + 912 + + + + + x + 913 + + + + + x + 914 + + + + + x + 915 + + + + + x + 916 + + + + + x + 917 + + + + + x + 918 + + + + + x + 919 + + + + + x + 920 + + + + + x + 921 + + + + + x + 922 + + + + + x + 923 + + + + + x + 924 + + + + + x + 925 + + + + + x + 926 + + + + + x + 927 + + + + + x + 928 + + + + + x + 929 + + + + + x + 930 + + + + + x + 931 + + + + + x + 932 + + + + + x + 933 + + + + + x + 934 + + + + + x + 935 + + + + + x + 936 + + + + + x + 937 + + + + + x + 938 + + + + + x + 939 + + + + + x + 940 + + + + + x + 941 + + + + + x + 942 + + + + + x + 943 + + + + + x + 944 + + + + + x + 945 + + + + + x + 946 + + + + + x + 947 + + + + + x + 948 + + + + + x + 949 + + + + + x + 950 + + + + + x + 951 + + + + + x + 952 + + + + + x + 953 + + + + + x + 954 + + + + + x + 955 + + + + + x + 956 + + + + + x + 957 + + + + + x + 958 + + + + + x + 959 + + + + + x + 960 + + + + + x + 961 + + + + + x + 962 + + + + + x + 963 + + + + + x + 964 + + + + + x + 965 + + + + + x + 966 + + + + + x + 967 + + + + + x + 968 + + + + + x + 969 + + + + + x + 970 + + + + + x + 971 + + + + + x + 972 + + + + + x + 973 + + + + + x + 974 + + + + + x + 975 + + + + + x + 976 + + + + + x + 977 + + + + + x + 978 + + + + + x + 979 + + + + + x + 980 + + + + + x + 981 + + + + + x + 982 + + + + + x + 983 + + + + + x + 984 + + + + + x + 985 + + + + + x + 986 + + + + + x + 987 + + + + + x + 988 + + + + + x + 989 + + + + + x + 990 + + + + + x + 991 + + + + + x + 992 + + + + + x + 993 + + + + + x + 994 + + + + + x + 995 + + + + + x + 996 + + + + + x + 997 + + + + + x + 998 + + + + + x + 999 + + + + + x + 1000 + + + + + x + 1001 + + + + + x + 1002 + + + + + x + 1003 + + + + + x + 1004 + + + + + x + 1005 + + + + + x + 1006 + + + + + x + 1007 + + + + + x + 1008 + + + + + x + 1009 + + + + + x + 1010 + + + + + x + 1011 + + + + + x + 1012 + + + + + x + 1013 + + + + + x + 1014 + + + + + x + 1015 + + + + + x + 1016 + + + + + x + 1017 + + + + + x + 1018 + + + + + x + 1019 + + + + + x + 1020 + + + + + x + 1021 + + + + + x + 1022 + + + + + x + 1023 + + + + + x + 1024 + + + + + x + 1025 + + + + + x + 1026 + + + + + x + 1027 + + + + + x + 1028 + + + + + x + 1029 + + + + + x + 1030 + + + + + x + 1031 + + + + + x + 1032 + + + + + x + 1033 + + + + + x + 1034 + + + + + x + 1035 + + + + + x + 1036 + + + + + x + 1037 + + + + + x + 1038 + + + + + x + 1039 + + + + + x + 1040 + + + + + x + 1041 + + + + + x + 1042 + + + + + x + 1043 + + + + + x + 1044 + + + + + x + 1045 + + + + + x + 1046 + + + + + x + 1047 + + + + + x + 1048 + + + + + x + 1049 + + + + + x + 1050 + + + + + x + 1051 + + + + + x + 1052 + + + + + x + 1053 + + + + + x + 1054 + + + + + x + 1055 + + + + + x + 1056 + + + + + x + 1057 + + + + + x + 1058 + + + + + x + 1059 + + + + + x + 1060 + + + + + x + 1061 + + + + + x + 1062 + + + + + x + 1063 + + + + + x + 1064 + + + + + x + 1065 + + + + + x + 1066 + + + + + x + 1067 + + + + + x + 1068 + + + + + x + 1069 + + + + + x + 1070 + + + + + x + 1071 + + + + + x + 1072 + + + + + x + 1073 + + + + + x + 1074 + + + + + x + 1075 + + + + + x + 1076 + + + + + x + 1077 + + + + + x + 1078 + + + + + x + 1079 + + + + + x + 1080 + + + + + x + 1081 + + + + + x + 1082 + + + + + x + 1083 + + + + + x + 1084 + + + + + x + 1085 + + + + + x + 1086 + + + + + x + 1087 + + + + + x + 1088 + + + + + x + 1089 + + + + + x + 1090 + + + + + x + 1091 + + + + + x + 1092 + + + + + x + 1093 + + + + + x + 1094 + + + + + x + 1095 + + + + + x + 1096 + + + + + x + 1097 + + + + + x + 1098 + + + + + x + 1099 + + + + + x + 1100 + + + + + x + 1101 + + + + + x + 1102 + + + + + x + 1103 + + + + + x + 1104 + + + + + x + 1105 + + + + + x + 1106 + + + + + x + 1107 + + + + + x + 1108 + + + + + x + 1109 + + + + + x + 1110 + + + + + x + 1111 + + + + + x + 1112 + + + + + x + 1113 + + + + + x + 1114 + + + + + x + 1115 + + + + + x + 1116 + + + + + x + 1117 + + + + + x + 1118 + + + + + x + 1119 + + + + + x + 1120 + + + + + x + 1121 + + + + + x + 1122 + + + + + x + 1123 + + + + + x + 1124 + + + + + x + 1125 + + + + + x + 1126 + + + + + x + 1127 + + + + + x + 1128 + + + + + x + 1129 + + + + + x + 1130 + + + + + x + 1131 + + + + + x + 1132 + + + + + x + 1133 + + + + + x + 1134 + + + + + x + 1135 + + + + + x + 1136 + + + + + x + 1137 + + + + + x + 1138 + + + + + x + 1139 + + + + + x + 1140 + + + + + x + 1141 + + + + + x + 1142 + + + + + x + 1143 + + + + + x + 1144 + + + + + x + 1145 + + + + + x + 1146 + + + + + x + 1147 + + + + + x + 1148 + + + + + x + 1149 + + + + + x + 1150 + + + + + x + 1151 + + + + + x + 1152 + + + + + x + 1153 + + + + + x + 1154 + + + + + x + 1155 + + + + + x + 1156 + + + + + x + 1157 + + + + + x + 1158 + + + + + x + 1159 + + + + + x + 1160 + + + + + x + 1161 + + + + + x + 1162 + + + + + x + 1163 + + + + + x + 1164 + + + + + x + 1165 + + + + + x + 1166 + + + + + x + 1167 + + + + + x + 1168 + + + + + x + 1169 + + + + + x + 1170 + + + + + x + 1171 + + + + + x + 1172 + + + + + x + 1173 + + + + + x + 1174 + + + + + x + 1175 + + + + + x + 1176 + + + + + x + 1177 + + + + + x + 1178 + + + + + x + 1179 + + + + + x + 1180 + + + + + x + 1181 + + + + + x + 1182 + + + + + x + 1183 + + + + + x + 1184 + + + + + x + 1185 + + + + + x + 1186 + + + + + x + 1187 + + + + + x + 1188 + + + + + x + 1189 + + + + + x + 1190 + + + + + x + 1191 + + + + + x + 1192 + + + + + x + 1193 + + + + + x + 1194 + + + + + x + 1195 + + + + + x + 1196 + + + + + x + 1197 + + + + + x + 1198 + + + + + x + 1199 + + + + + x + 1200 + + + + + x + 1201 + + + + + x + 1202 + + + + + x + 1203 + + + + + x + 1204 + + + + + x + 1205 + + + + + x + 1206 + + + + + x + 1207 + + + + + x + 1208 + + + + + x + 1209 + + + + + x + 1210 + + + + + x + 1211 + + + + + x + 1212 + + + + + x + 1213 + + + + + x + 1214 + + + + + x + 1215 + + + + + x + 1216 + + + + + x + 1217 + + + + + x + 1218 + + + + + x + 1219 + + + + + x + 1220 + + + + + x + 1221 + + + + + x + 1222 + + + + + x + 1223 + + + + + x + 1224 + + + + + x + 1225 + + + + + x + 1226 + + + + + x + 1227 + + + + + x + 1228 + + + + + x + 1229 + + + + + x + 1230 + + + + + x + 1231 + + + + + x + 1232 + + + + + x + 1233 + + + + + x + 1234 + + + + + x + 1235 + + + + + x + 1236 + + + + + x + 1237 + + + + + x + 1238 + + + + + x + 1239 + + + + + x + 1240 + + + + + x + 1241 + + + + + x + 1242 + + + + + x + 1243 + + + + + x + 1244 + + + + + x + 1245 + + + + + x + 1246 + + + + + x + 1247 + + + + + x + 1248 + + + + + x + 1249 + + + + + x + 1250 + + + + + x + 1251 + + + + + x + 1252 + + + + + x + 1253 + + + + + x + 1254 + + + + + x + 1255 + + + + + x + 1256 + + + + + x + 1257 + + + + + x + 1258 + + + + + x + 1259 + + + + + x + 1260 + + + + + x + 1261 + + + + + x + 1262 + + + + + x + 1263 + + + + + x + 1264 + + + + + x + 1265 + + + + + x + 1266 + + + + + x + 1267 + + + + + x + 1268 + + + + + x + 1269 + + + + + x + 1270 + + + + + x + 1271 + + + + + x + 1272 + + + + + x + 1273 + + + + + x + 1274 + + + + + x + 1275 + + + + + x + 1276 + + + + + x + 1277 + + + + + x + 1278 + + + + + x + 1279 + + + + + x + 1280 + + + + + x + 1281 + + + + + x + 1282 + + + + + x + 1283 + + + + + x + 1284 + + + + + x + 1285 + + + + + x + 1286 + + + + + x + 1287 + + + + + x + 1288 + + + + + x + 1289 + + + + + x + 1290 + + + + + x + 1291 + + + + + x + 1292 + + + + + x + 1293 + + + + + x + 1294 + + + + + x + 1295 + + + + + x + 1296 + + + + + x + 1297 + + + + + x + 1298 + + + + + x + 1299 + + + + + x + 1300 + + + + + x + 1301 + + + + + x + 1302 + + + + + x + 1303 + + + + + x + 1304 + + + + + x + 1305 + + + + + x + 1306 + + + + + x + 1307 + + + + + x + 1308 + + + + + x + 1309 + + + + + x + 1310 + + + + + x + 1311 + + + + + x + 1312 + + + + + x + 1313 + + + + + x + 1314 + + + + + x + 1315 + + + + + x + 1316 + + + + + x + 1317 + + + + + x + 1318 + + + + + x + 1319 + + + + + x + 1320 + + + + + x + 1321 + + + + + x + 1322 + + + + + x + 1323 + + + + + x + 1324 + + + + + x + 1325 + + + + + x + 1326 + + + + + x + 1327 + + + + + x + 1328 + + + + + x + 1329 + + + + + x + 1330 + + + + + x + 1331 + + + + + x + 1332 + + + + + x + 1333 + + + + + x + 1334 + + + + + x + 1335 + + + + + x + 1336 + + + + + x + 1337 + + + + + x + 1338 + + + + + x + 1339 + + + + + x + 1340 + + + + + x + 1341 + + + + + x + 1342 + + + + + x + 1343 + + + + + x + 1344 + + + + + x + 1345 + + + + + x + 1346 + + + + + x + 1347 + + + + + x + 1348 + + + + + x + 1349 + + + + + x + 1350 + + + + + x + 1351 + + + + + x + 1352 + + + + + x + 1353 + + + + + x + 1354 + + + + + x + 1355 + + + + + x + 1356 + + + + + x + 1357 + + + + + x + 1358 + + + + + x + 1359 + + + + + x + 1360 + + + + + x + 1361 + + + + + x + 1362 + + + + + x + 1363 + + + + + x + 1364 + + + + + x + 1365 + + + + + x + 1366 + + + + + x + 1367 + + + + + x + 1368 + + + + + x + 1369 + + + + + x + 1370 + + + + + x + 1371 + + + + + x + 1372 + + + + + x + 1373 + + + + + x + 1374 + + + + + x + 1375 + + + + + x + 1376 + + + + + x + 1377 + + + + + x + 1378 + + + + + x + 1379 + + + + + x + 1380 + + + + + x + 1381 + + + + + x + 1382 + + + + + x + 1383 + + + + + x + 1384 + + + + + x + 1385 + + + + + x + 1386 + + + + + x + 1387 + + + + + x + 1388 + + + + + x + 1389 + + + + + x + 1390 + + + + + x + 1391 + + + + + x + 1392 + + + + + x + 1393 + + + + + x + 1394 + + + + + x + 1395 + + + + + x + 1396 + + + + + x + 1397 + + + + + x + 1398 + + + + + x + 1399 + + + + + x + 1400 + + + + + x + 1401 + + + + + x + 1402 + + + + + x + 1403 + + + + + x + 1404 + + + + + x + 1405 + + + + + x + 1406 + + + + + x + 1407 + + + + + x + 1408 + + + + + x + 1409 + + + + + x + 1410 + + + + + x + 1411 + + + + + x + 1412 + + + + + x + 1413 + + + + + x + 1414 + + + + + x + 1415 + + + + + x + 1416 + + + + + x + 1417 + + + + + x + 1418 + + + + + x + 1419 + + + + + x + 1420 + + + + + x + 1421 + + + + + x + 1422 + + + + + x + 1423 + + + + + x + 1424 + + + + + x + 1425 + + + + + x + 1426 + + + + + x + 1427 + + + + + x + 1428 + + + + + x + 1429 + + + + + x + 1430 + + + + + x + 1431 + + + + + x + 1432 + + + + + x + 1433 + + + + + x + 1434 + + + + + x + 1435 + + + + + x + 1436 + + + + + x + 1437 + + + + + x + 1438 + + + + + x + 1439 + + + + + x + 1440 + + + + + x + 1441 + + + + + x + 1442 + + + + + x + 1443 + + + + + x + 1444 + + + + + x + 1445 + + + + + x + 1446 + + + + + x + 1447 + + + + + x + 1448 + + + + + x + 1449 + + + + + x + 1450 + + + + + x + 1451 + + + + + x + 1452 + + + + + x + 1453 + + + + + x + 1454 + + + + + x + 1455 + + + + + x + 1456 + + + + + x + 1457 + + + + + x + 1458 + + + + + x + 1459 + + + + + x + 1460 + + + + + x + 1461 + + + + + x + 1462 + + + + + x + 1463 + + + + + x + 1464 + + + + + x + 1465 + + + + + x + 1466 + + + + + x + 1467 + + + + + x + 1468 + + + + + x + 1469 + + + + + x + 1470 + + + + + x + 1471 + + + + + x + 1472 + + + + + x + 1473 + + + + + x + 1474 + + + + + x + 1475 + + + + + x + 1476 + + + + + x + 1477 + + + + + x + 1478 + + + + + x + 1479 + + + + + x + 1480 + + + + + x + 1481 + + + + + x + 1482 + + + + + x + 1483 + + + + + x + 1484 + + + + + x + 1485 + + + + + x + 1486 + + + + + x + 1487 + + + + + x + 1488 + + + + + x + 1489 + + + + + x + 1490 + + + + + x + 1491 + + + + + x + 1492 + + + + + x + 1493 + + + + + x + 1494 + + + + + x + 1495 + + + + + x + 1496 + + + + + x + 1497 + + + + + x + 1498 + + + + + x + 1499 + + + + + x + 1500 + + + + + x + 1501 + + + + + x + 1502 + + + + + x + 1503 + + + + + x + 1504 + + + + + x + 1505 + + + + + x + 1506 + + + + + x + 1507 + + + + + x + 1508 + + + + + x + 1509 + + + + + x + 1510 + + + + + x + 1511 + + + + + x + 1512 + + + + + x + 1513 + + + + + x + 1514 + + + + + x + 1515 + + + + + x + 1516 + + + + + x + 1517 + + + + + x + 1518 + + + + + x + 1519 + + + + + x + 1520 + + + + + x + 1521 + + + + + x + 1522 + + + + + x + 1523 + + + + + x + 1524 + + + + + x + 1525 + + + + + x + 1526 + + + + + x + 1527 + + + + + x + 1528 + + + + + x + 1529 + + + + + x + 1530 + + + + + x + 1531 + + + + + x + 1532 + + + + + x + 1533 + + + + + x + 1534 + + + + + x + 1535 + + + + + x + 1536 + + + + + x + 1537 + + + + + x + 1538 + + + + + x + 1539 + + + + + x + 1540 + + + + + x + 1541 + + + + + x + 1542 + + + + + x + 1543 + + + + + x + 1544 + + + + + x + 1545 + + + + + x + 1546 + + + + + x + 1547 + + + + + x + 1548 + + + + + x + 1549 + + + + + x + 1550 + + + + + x + 1551 + + + + + x + 1552 + + + + + x + 1553 + + + + + x + 1554 + + + + + x + 1555 + + + + + x + 1556 + + + + + x + 1557 + + + + + x + 1558 + + + + + x + 1559 + + + + + x + 1560 + + + + + x + 1561 + + + + + x + 1562 + + + + + x + 1563 + + + + + x + 1564 + + + + + x + 1565 + + + + + x + 1566 + + + + + x + 1567 + + + + + x + 1568 + + + + + x + 1569 + + + + + x + 1570 + + + + + x + 1571 + + + + + x + 1572 + + + + + x + 1573 + + + + + x + 1574 + + + + + x + 1575 + + + + + x + 1576 + + + + + x + 1577 + + + + + x + 1578 + + + + + x + 1579 + + + + + x + 1580 + + + + + x + 1581 + + + + + x + 1582 + + + + + x + 1583 + + + + + x + 1584 + + + + + x + 1585 + + + + + x + 1586 + + + + + x + 1587 + + + + + x + 1588 + + + + + x + 1589 + + + + + x + 1590 + + + + + x + 1591 + + + + + x + 1592 + + + + + x + 1593 + + + + + x + 1594 + + + + + x + 1595 + + + + + x + 1596 + + + + + x + 1597 + + + + + x + 1598 + + + + + x + 1599 + + + + + x + 1600 + + + + + x + 1601 + + + + + x + 1602 + + + + + x + 1603 + + + + + x + 1604 + + + + + x + 1605 + + + + + x + 1606 + + + + + x + 1607 + + + + + x + 1608 + + + + + x + 1609 + + + + + x + 1610 + + + + + x + 1611 + + + + + x + 1612 + + + + + x + 1613 + + + + + x + 1614 + + + + + x + 1615 + + + + + x + 1616 + + + + + x + 1617 + + + + + x + 1618 + + + + + x + 1619 + + + + + x + 1620 + + + + + x + 1621 + + + + + x + 1622 + + + + + x + 1623 + + + + + x + 1624 + + + + + x + 1625 + + + + + x + 1626 + + + + + x + 1627 + + + + + x + 1628 + + + + + x + 1629 + + + + + x + 1630 + + + + + x + 1631 + + + + + x + 1632 + + + + + x + 1633 + + + + + x + 1634 + + + + + x + 1635 + + + + + x + 1636 + + + + + x + 1637 + + + + + x + 1638 + + + + + x + 1639 + + + + + x + 1640 + + + + + x + 1641 + + + + + x + 1642 + + + + + x + 1643 + + + + + x + 1644 + + + + + x + 1645 + + + + + x + 1646 + + + + + x + 1647 + + + + + x + 1648 + + + + + x + 1649 + + + + + x + 1650 + + + + + x + 1651 + + + + + x + 1652 + + + + + x + 1653 + + + + + x + 1654 + + + + + x + 1655 + + + + + x + 1656 + + + + + x + 1657 + + + + + x + 1658 + + + + + x + 1659 + + + + + x + 1660 + + + + + x + 1661 + + + + + x + 1662 + + + + + x + 1663 + + + + + x + 1664 + + + + + x + 1665 + + + + + x + 1666 + + + + + x + 1667 + + + + + x + 1668 + + + + + x + 1669 + + + + + x + 1670 + + + + + x + 1671 + + + + + x + 1672 + + + + + x + 1673 + + + + + x + 1674 + + + + + x + 1675 + + + + + x + 1676 + + + + + x + 1677 + + + + + x + 1678 + + + + + x + 1679 + + + + + x + 1680 + + + + + x + 1681 + + + + + x + 1682 + + + + + x + 1683 + + + + + x + 1684 + + + + + x + 1685 + + + + + x + 1686 + + + + + x + 1687 + + + + + x + 1688 + + + + + x + 1689 + + + + + x + 1690 + + + + + x + 1691 + + + + + x + 1692 + + + + + x + 1693 + + + + + x + 1694 + + + + + x + 1695 + + + + + x + 1696 + + + + + x + 1697 + + + + + x + 1698 + + + + + x + 1699 + + + + + x + 1700 + + + + + x + 1701 + + + + + x + 1702 + + + + + x + 1703 + + + + + x + 1704 + + + + + x + 1705 + + + + + x + 1706 + + + + + x + 1707 + + + + + x + 1708 + + + + + x + 1709 + + + + + x + 1710 + + + + + x + 1711 + + + + + x + 1712 + + + + + x + 1713 + + + + + x + 1714 + + + + + x + 1715 + + + + + x + 1716 + + + + + x + 1717 + + + + + x + 1718 + + + + + x + 1719 + + + + + x + 1720 + + + + + x + 1721 + + + + + x + 1722 + + + + + x + 1723 + + + + + x + 1724 + + + + + x + 1725 + + + + + x + 1726 + + + + + x + 1727 + + + + + x + 1728 + + + + + x + 1729 + + + + + x + 1730 + + + + + x + 1731 + + + + + x + 1732 + + + + + x + 1733 + + + + + x + 1734 + + + + + x + 1735 + + + + + x + 1736 + + + + + x + 1737 + + + + + x + 1738 + + + + + x + 1739 + + + + + x + 1740 + + + + + x + 1741 + + + + + x + 1742 + + + + + x + 1743 + + + + + x + 1744 + + + + + x + 1745 + + + + + x + 1746 + + + + + x + 1747 + + + + + x + 1748 + + + + + x + 1749 + + + + + x + 1750 + + + + + x + 1751 + + + + + x + 1752 + + + + + x + 1753 + + + + + x + 1754 + + + + + x + 1755 + + + + + x + 1756 + + + + + x + 1757 + + + + + x + 1758 + + + + + x + 1759 + + + + + x + 1760 + + + + + x + 1761 + + + + + x + 1762 + + + + + x + 1763 + + + + + x + 1764 + + + + + x + 1765 + + + + + x + 1766 + + + + + x + 1767 + + + + + x + 1768 + + + + + x + 1769 + + + + + x + 1770 + + + + + x + 1771 + + + + + x + 1772 + + + + + x + 1773 + + + + + x + 1774 + + + + + x + 1775 + + + + + x + 1776 + + + + + x + 1777 + + + + + x + 1778 + + + + + x + 1779 + + + + + x + 1780 + + + + + x + 1781 + + + + + x + 1782 + + + + + x + 1783 + + + + + x + 1784 + + + + + x + 1785 + + + + + x + 1786 + + + + + x + 1787 + + + + + x + 1788 + + + + + x + 1789 + + + + + x + 1790 + + + + + x + 1791 + + + + + x + 1792 + + + + + x + 1793 + + + + + x + 1794 + + + + + x + 1795 + + + + + x + 1796 + + + + + x + 1797 + + + + + x + 1798 + + + + + x + 1799 + + + + + x + 1800 + + + + + x + 1801 + + + + + x + 1802 + + + + + x + 1803 + + + + + x + 1804 + + + + + x + 1805 + + + + + x + 1806 + + + + + x + 1807 + + + + + x + 1808 + + + + + x + 1809 + + + + + x + 1810 + + + + + x + 1811 + + + + + x + 1812 + + + + + x + 1813 + + + + + x + 1814 + + + + + x + 1815 + + + + + x + 1816 + + + + + x + 1817 + + + + + x + 1818 + + + + + x + 1819 + + + + + x + 1820 + + + + + x + 1821 + + + + + x + 1822 + + + + + x + 1823 + + + + + x + 1824 + + + + + x + 1825 + + + + + x + 1826 + + + + + x + 1827 + + + + + x + 1828 + + + + + x + 1829 + + + + + x + 1830 + + + + + x + 1831 + + + + + x + 1832 + + + + + x + 1833 + + + + + x + 1834 + + + + + x + 1835 + + + + + x + 1836 + + + + + x + 1837 + + + + + x + 1838 + + + + + x + 1839 + + + + + x + 1840 + + + + + x + 1841 + + + + + x + 1842 + + + + + x + 1843 + + + + + x + 1844 + + + + + x + 1845 + + + + + x + 1846 + + + + + x + 1847 + + + + + x + 1848 + + + + + x + 1849 + + + + + x + 1850 + + + + + x + 1851 + + + + + x + 1852 + + + + + x + 1853 + + + + + x + 1854 + + + + + x + 1855 + + + + + x + 1856 + + + + + x + 1857 + + + + + x + 1858 + + + + + x + 1859 + + + + + x + 1860 + + + + + x + 1861 + + + + + x + 1862 + + + + + x + 1863 + + + + + x + 1864 + + + + + x + 1865 + + + + + x + 1866 + + + + + x + 1867 + + + + + x + 1868 + + + + + x + 1869 + + + + + x + 1870 + + + + + x + 1871 + + + + + x + 1872 + + + + + x + 1873 + + + + + x + 1874 + + + + + x + 1875 + + + + + x + 1876 + + + + + x + 1877 + + + + + x + 1878 + + + + + x + 1879 + + + + + x + 1880 + + + + + x + 1881 + + + + + x + 1882 + + + + + x + 1883 + + + + + x + 1884 + + + + + x + 1885 + + + + + x + 1886 + + + + + x + 1887 + + + + + x + 1888 + + + + + x + 1889 + + + + + x + 1890 + + + + + x + 1891 + + + + + x + 1892 + + + + + x + 1893 + + + + + x + 1894 + + + + + x + 1895 + + + + + x + 1896 + + + + + x + 1897 + + + + + x + 1898 + + + + + x + 1899 + + + + + x + 1900 + + + + + x + 1901 + + + + + x + 1902 + + + + + x + 1903 + + + + + x + 1904 + + + + + x + 1905 + + + + + x + 1906 + + + + + x + 1907 + + + + + x + 1908 + + + + + x + 1909 + + + + + x + 1910 + + + + + x + 1911 + + + + + x + 1912 + + + + + x + 1913 + + + + + x + 1914 + + + + + x + 1915 + + + + + x + 1916 + + + + + x + 1917 + + + + + x + 1918 + + + + + x + 1919 + + + + + x + 1920 + + + + + x + 1921 + + + + + x + 1922 + + + + + x + 1923 + + + + + x + 1924 + + + + + x + 1925 + + + + + x + 1926 + + + + + x + 1927 + + + + + x + 1928 + + + + + x + 1929 + + + + + x + 1930 + + + + + x + 1931 + + + + + x + 1932 + + + + + x + 1933 + + + + + x + 1934 + + + + + x + 1935 + + + + + x + 1936 + + + + + x + 1937 + + + + + x + 1938 + + + + + x + 1939 + + + + + x + 1940 + + + + + x + 1941 + + + + + x + 1942 + + + + + x + 1943 + + + + + x + 1944 + + + + + x + 1945 + + + + + x + 1946 + + + + + x + 1947 + + + + + x + 1948 + + + + + x + 1949 + + + + + x + 1950 + + + + + x + 1951 + + + + + x + 1952 + + + + + x + 1953 + + + + + x + 1954 + + + + + x + 1955 + + + + + x + 1956 + + + + + x + 1957 + + + + + x + 1958 + + + + + x + 1959 + + + + + x + 1960 + + + + + x + 1961 + + + + + x + 1962 + + + + + x + 1963 + + + + + x + 1964 + + + + + x + 1965 + + + + + x + 1966 + + + + + x + 1967 + + + + + x + 1968 + + + + + x + 1969 + + + + + x + 1970 + + + + + x + 1971 + + + + + x + 1972 + + + + + x + 1973 + + + + + x + 1974 + + + + + x + 1975 + + + + + x + 1976 + + + + + x + 1977 + + + + + x + 1978 + + + + + x + 1979 + + + + + x + 1980 + + + + + x + 1981 + + + + + x + 1982 + + + + + x + 1983 + + + + + x + 1984 + + + + + x + 1985 + + + + + x + 1986 + + + + + x + 1987 + + + + + x + 1988 + + + + + x + 1989 + + + + + x + 1990 + + + + + x + 1991 + + + + + x + 1992 + + + + + x + 1993 + + + + + x + 1994 + + + + + x + 1995 + + + + + x + 1996 + + + + + x + 1997 + + + + + x + 1998 + + + + + x + 1999 + + + + + x + 2000 + + + + + x + 2001 + + + + + x + 2002 + + + + + x + 2003 + + + + + x + 2004 + + + + + x + 2005 + + + + + x + 2006 + + + + + x + 2007 + + + + + x + 2008 + + + + + x + 2009 + + + + + x + 2010 + + + + + x + 2011 + + + + + x + 2012 + + + + + x + 2013 + + + + + x + 2014 + + + + + x + 2015 + + + + + x + 2016 + + + + + x + 2017 + + + + + x + 2018 + + + + + x + 2019 + + + + + x + 2020 + + + + + x + 2021 + + + + + x + 2022 + + + + + x + 2023 + + + + + x + 2024 + + + + + x + 2025 + + + + + x + 2026 + + + + + x + 2027 + + + + + x + 2028 + + + + + x + 2029 + + + + + x + 2030 + + + + + x + 2031 + + + + + x + 2032 + + + + + x + 2033 + + + + + x + 2034 + + + + + x + 2035 + + + + + x + 2036 + + + + + x + 2037 + + + + + x + 2038 + + + + + x + 2039 + + + + + x + 2040 + + + + + x + 2041 + + + + + x + 2042 + + + + + x + 2043 + + + + + x + 2044 + + + + + x + 2045 + + + + + x + 2046 + + + + + x + 2047 + + + + + x + 2048 + + + + + x + 2049 + + + + + x + 2050 + + + + + x + 2051 + + + + + x + 2052 + + + + + x + 2053 + + + + + x + 2054 + + + + + x + 2055 + + + + + x + 2056 + + + + + x + 2057 + + + + + x + 2058 + + + + + x + 2059 + + + + + x + 2060 + + + + + x + 2061 + + + + + x + 2062 + + + + + x + 2063 + + + + + x + 2064 + + + + + x + 2065 + + + + + x + 2066 + + + + + x + 2067 + + + + + x + 2068 + + + + + x + 2069 + + + + + x + 2070 + + + + + x + 2071 + + + + + x + 2072 + + + + + x + 2073 + + + + + x + 2074 + + + + + x + 2075 + + + + + x + 2076 + + + + + x + 2077 + + + + + x + 2078 + + + + + x + 2079 + + + + + x + 2080 + + + + + x + 2081 + + + + + x + 2082 + + + + + x + 2083 + + + + + x + 2084 + + + + + x + 2085 + + + + + x + 2086 + + + + + x + 2087 + + + + + x + 2088 + + + + + x + 2089 + + + + + x + 2090 + + + + + x + 2091 + + + + + x + 2092 + + + + + x + 2093 + + + + + x + 2094 + + + + + x + 2095 + + + + + x + 2096 + + + + + x + 2097 + + + + + x + 2098 + + + + + x + 2099 + + + + + x + 2100 + + + + + x + 2101 + + + + + x + 2102 + + + + + x + 2103 + + + + + x + 2104 + + + + + x + 2105 + + + + + x + 2106 + + + + + x + 2107 + + + + + x + 2108 + + + + + x + 2109 + + + + + x + 2110 + + + + + x + 2111 + + + + + x + 2112 + + + + + x + 2113 + + + + + x + 2114 + + + + + x + 2115 + + + + + x + 2116 + + + + + x + 2117 + + + + + x + 2118 + + + + + x + 2119 + + + + + x + 2120 + + + + + x + 2121 + + + + + x + 2122 + + + + + x + 2123 + + + + + x + 2124 + + + + + x + 2125 + + + + + x + 2126 + + + + + x + 2127 + + + + + x + 2128 + + + + + x + 2129 + + + + + x + 2130 + + + + + x + 2131 + + + + + x + 2132 + + + + + x + 2133 + + + + + x + 2134 + + + + + x + 2135 + + + + + x + 2136 + + + + + x + 2137 + + + + + x + 2138 + + + + + x + 2139 + + + + + x + 2140 + + + + + x + 2141 + + + + + x + 2142 + + + + + x + 2143 + + + + + x + 2144 + + + + + x + 2145 + + + + + x + 2146 + + + + + x + 2147 + + + + + x + 2148 + + + + + x + 2149 + + + + + x + 2150 + + + + + x + 2151 + + + + + x + 2152 + + + + + x + 2153 + + + + + x + 2154 + + + + + x + 2155 + + + + + x + 2156 + + + + + x + 2157 + + + + + x + 2158 + + + + + x + 2159 + + + + + x + 2160 + + + + + x + 2161 + + + + + x + 2162 + + + + + x + 2163 + + + + + x + 2164 + + + + + x + 2165 + + + + + x + 2166 + + + + + x + 2167 + + + + + x + 2168 + + + + + x + 2169 + + + + + x + 2170 + + + + + x + 2171 + + + + + x + 2172 + + + + + x + 2173 + + + + + x + 2174 + + + + + x + 2175 + + + + + x + 2176 + + + + + x + 2177 + + + + + x + 2178 + + + + + x + 2179 + + + + + x + 2180 + + + + + x + 2181 + + + + + x + 2182 + + + + + x + 2183 + + + + + x + 2184 + + + + + x + 2185 + + + + + x + 2186 + + + + + x + 2187 + + + + + x + 2188 + + + + + x + 2189 + + + + + x + 2190 + + + + + x + 2191 + + + + + x + 2192 + + + + + x + 2193 + + + + + x + 2194 + + + + + x + 2195 + + + + + x + 2196 + + + + + x + 2197 + + + + + x + 2198 + + + + + x + 2199 + + + + + x + 2200 + + + + + x + 2201 + + + + + x + 2202 + + + + + x + 2203 + + + + + x + 2204 + + + + + x + 2205 + + + + + x + 2206 + + + + + x + 2207 + + + + + x + 2208 + + + + + x + 2209 + + + + + x + 2210 + + + + + x + 2211 + + + + + x + 2212 + + + + + x + 2213 + + + + + x + 2214 + + + + + x + 2215 + + + + + x + 2216 + + + + + x + 2217 + + + + + x + 2218 + + + + + x + 2219 + + + + + x + 2220 + + + + + x + 2221 + + + + + x + 2222 + + + + + x + 2223 + + + + + x + 2224 + + + + + x + 2225 + + + + + x + 2226 + + + + + x + 2227 + + + + + x + 2228 + + + + + x + 2229 + + + + + x + 2230 + + + + + x + 2231 + + + + + x + 2232 + + + + + x + 2233 + + + + + x + 2234 + + + + + x + 2235 + + + + + x + 2236 + + + + + x + 2237 + + + + + x + 2238 + + + + + x + 2239 + + + + + x + 2240 + + + + + x + 2241 + + + + + x + 2242 + + + + + x + 2243 + + + + + x + 2244 + + + + + x + 2245 + + + + + x + 2246 + + + + + x + 2247 + + + + + x + 2248 + + + + + x + 2249 + + + + + x + 2250 + + + + + x + 2251 + + + + + x + 2252 + + + + + x + 2253 + + + + + x + 2254 + + + + + x + 2255 + + + + + x + 2256 + + + + + x + 2257 + + + + + x + 2258 + + + + + x + 2259 + + + + + x + 2260 + + + + + x + 2261 + + + + + x + 2262 + + + + + x + 2263 + + + + + x + 2264 + + + + + x + 2265 + + + + + x + 2266 + + + + + x + 2267 + + + + + x + 2268 + + + + + x + 2269 + + + + + x + 2270 + + + + + x + 2271 + + + + + x + 2272 + + + + + x + 2273 + + + + + x + 2274 + + + + + x + 2275 + + + + + x + 2276 + + + + + x + 2277 + + + + + x + 2278 + + + + + x + 2279 + + + + + x + 2280 + + + + + x + 2281 + + + + + x + 2282 + + + + + x + 2283 + + + + + x + 2284 + + + + + x + 2285 + + + + + x + 2286 + + + + + x + 2287 + + + + + x + 2288 + + + + + x + 2289 + + + + + x + 2290 + + + + + x + 2291 + + + + + x + 2292 + + + + + x + 2293 + + + + + x + 2294 + + + + + x + 2295 + + + + + x + 2296 + + + + + x + 2297 + + + + + x + 2298 + + + + + x + 2299 + + + + + x + 2300 + + + + + x + 2301 + + + + + x + 2302 + + + + + x + 2303 + + + + + x + 2304 + + + + + x + 2305 + + + + + x + 2306 + + + + + x + 2307 + + + + + x + 2308 + + + + + x + 2309 + + + + + x + 2310 + + + + + x + 2311 + + + + + x + 2312 + + + + + x + 2313 + + + + + x + 2314 + + + + + x + 2315 + + + + + x + 2316 + + + + + x + 2317 + + + + + x + 2318 + + + + + x + 2319 + + + + + x + 2320 + + + + + x + 2321 + + + + + x + 2322 + + + + + x + 2323 + + + + + x + 2324 + + + + + x + 2325 + + + + + x + 2326 + + + + + x + 2327 + + + + + x + 2328 + + + + + x + 2329 + + + + + x + 2330 + + + + + x + 2331 + + + + + x + 2332 + + + + + x + 2333 + + + + + x + 2334 + + + + + x + 2335 + + + + + x + 2336 + + + + + x + 2337 + + + + + x + 2338 + + + + + x + 2339 + + + + + x + 2340 + + + + + x + 2341 + + + + + x + 2342 + + + + + x + 2343 + + + + + x + 2344 + + + + + x + 2345 + + + + + x + 2346 + + + + + x + 2347 + + + + + x + 2348 + + + + + x + 2349 + + + + + x + 2350 + + + + + x + 2351 + + + + + x + 2352 + + + + + x + 2353 + + + + + x + 2354 + + + + + x + 2355 + + + + + x + 2356 + + + + + x + 2357 + + + + + x + 2358 + + + + + x + 2359 + + + + + x + 2360 + + + + + x + 2361 + + + + + x + 2362 + + + + + x + 2363 + + + + + x + 2364 + + + + + x + 2365 + + + + + x + 2366 + + + + + x + 2367 + + + + + x + 2368 + + + + + x + 2369 + + + + + x + 2370 + + + + + x + 2371 + + + + + x + 2372 + + + + + x + 2373 + + + + + x + 2374 + + + + + x + 2375 + + + + + x + 2376 + + + + + x + 2377 + + + + + x + 2378 + + + + + x + 2379 + + + + + x + 2380 + + + + + x + 2381 + + + + + x + 2382 + + + + + x + 2383 + + + + + x + 2384 + + + + + x + 2385 + + + + + x + 2386 + + + + + x + 2387 + + + + + x + 2388 + + + + + x + 2389 + + + + + x + 2390 + + + + + x + 2391 + + + + + x + 2392 + + + + + x + 2393 + + + + + x + 2394 + + + + + x + 2395 + + + + + x + 2396 + + + + + x + 2397 + + + + + x + 2398 + + + + + x + 2399 + + + + + x + 2400 + + + + + x + 2401 + + + + + x + 2402 + + + + + x + 2403 + + + + + x + 2404 + + + + + x + 2405 + + + + + x + 2406 + + + + + x + 2407 + + + + + x + 2408 + + + + + x + 2409 + + + + + x + 2410 + + + + + x + 2411 + + + + + x + 2412 + + + + + x + 2413 + + + + + x + 2414 + + + + + x + 2415 + + + + + x + 2416 + + + + + x + 2417 + + + + + x + 2418 + + + + + x + 2419 + + + + + x + 2420 + + + + + x + 2421 + + + + + x + 2422 + + + + + x + 2423 + + + + + x + 2424 + + + + + x + 2425 + + + + + x + 2426 + + + + + x + 2427 + + + + + x + 2428 + + + + + x + 2429 + + + + + x + 2430 + + + + + x + 2431 + + + + + x + 2432 + + + + + x + 2433 + + + + + x + 2434 + + + + + x + 2435 + + + + + x + 2436 + + + + + x + 2437 + + + + + x + 2438 + + + + + x + 2439 + + + + + x + 2440 + + + + + x + 2441 + + + + + x + 2442 + + + + + x + 2443 + + + + + x + 2444 + + + + + x + 2445 + + + + + x + 2446 + + + + + x + 2447 + + + + + x + 2448 + + + + + x + 2449 + + + + + x + 2450 + + + + + x + 2451 + + + + + x + 2452 + + + + + x + 2453 + + + + + x + 2454 + + + + + x + 2455 + + + + + x + 2456 + + + + + x + 2457 + + + + + x + 2458 + + + + + x + 2459 + + + + + x + 2460 + + + + + x + 2461 + + + + + x + 2462 + + + + + x + 2463 + + + + + x + 2464 + + + + + x + 2465 + + + + + x + 2466 + + + + + x + 2467 + + + + + x + 2468 + + + + + x + 2469 + + + + + x + 2470 + + + + + x + 2471 + + + + + x + 2472 + + + + + x + 2473 + + + + + x + 2474 + + + + + x + 2475 + + + + + x + 2476 + + + + + x + 2477 + + + + + x + 2478 + + + + + x + 2479 + + + + + x + 2480 + + + + + x + 2481 + + + + + x + 2482 + + + + + x + 2483 + + + + + x + 2484 + + + + + x + 2485 + + + + + x + 2486 + + + + + x + 2487 + + + + + x + 2488 + + + + + x + 2489 + + + + + x + 2490 + + + + + x + 2491 + + + + + x + 2492 + + + + + x + 2493 + + + + + x + 2494 + + + + + x + 2495 + + + + + x + 2496 + + + + + x + 2497 + + + + + x + 2498 + + + + + x + 2499 + + + + + x + 2500 + + + + + x + 2501 + + + + + x + 2502 + + + + + x + 2503 + + + + + x + 2504 + + + + + x + 2505 + + + + + x + 2506 + + + + + x + 2507 + + + + + x + 2508 + + + + + x + 2509 + + + + + x + 2510 + + + + + x + 2511 + + + + + x + 2512 + + + + + x + 2513 + + + + + x + 2514 + + + + + x + 2515 + + + + + x + 2516 + + + + + x + 2517 + + + + + x + 2518 + + + + + x + 2519 + + + + + x + 2520 + + + + + x + 2521 + + + + + x + 2522 + + + + + x + 2523 + + + + + x + 2524 + + + + + x + 2525 + + + + + x + 2526 + + + + + x + 2527 + + + + + x + 2528 + + + + + x + 2529 + + + + + x + 2530 + + + + + x + 2531 + + + + + x + 2532 + + + + + x + 2533 + + + + + x + 2534 + + + + + x + 2535 + + + + + x + 2536 + + + + + x + 2537 + + + + + x + 2538 + + + + + x + 2539 + + + + + x + 2540 + + + + + x + 2541 + + + + + x + 2542 + + + + + x + 2543 + + + + + x + 2544 + + + + + x + 2545 + + + + + x + 2546 + + + + + x + 2547 + + + + + x + 2548 + + + + + x + 2549 + + + + + x + 2550 + + + + + x + 2551 + + + + + x + 2552 + + + + + x + 2553 + + + + + x + 2554 + + + + + x + 2555 + + + + + x + 2556 + + + + + x + 2557 + + + + + x + 2558 + + + + + x + 2559 + + + + + x + 2560 + + + + + x + 2561 + + + + + x + 2562 + + + + + x + 2563 + + + + + x + 2564 + + + + + x + 2565 + + + + + x + 2566 + + + + + x + 2567 + + + + + x + 2568 + + + + + x + 2569 + + + + + x + 2570 + + + + + x + 2571 + + + + + x + 2572 + + + + + x + 2573 + + + + + x + 2574 + + + + + x + 2575 + + + + + x + 2576 + + + + + x + 2577 + + + + + x + 2578 + + + + + x + 2579 + + + + + x + 2580 + + + + + x + 2581 + + + + + x + 2582 + + + + + x + 2583 + + + + + x + 2584 + + + + + x + 2585 + + + + + x + 2586 + + + + + x + 2587 + + + + + x + 2588 + + + + + x + 2589 + + + + + x + 2590 + + + + + x + 2591 + + + + + x + 2592 + + + + + x + 2593 + + + + + x + 2594 + + + + + x + 2595 + + + + + x + 2596 + + + + + x + 2597 + + + + + x + 2598 + + + + + x + 2599 + + + + + x + 2600 + + + + + x + 2601 + + + + + x + 2602 + + + + + x + 2603 + + + + + x + 2604 + + + + + x + 2605 + + + + + x + 2606 + + + + + x + 2607 + + + + + x + 2608 + + + + + x + 2609 + + + + + x + 2610 + + + + + x + 2611 + + + + + x + 2612 + + + + + x + 2613 + + + + + x + 2614 + + + + + x + 2615 + + + + + x + 2616 + + + + + x + 2617 + + + + + x + 2618 + + + + + x + 2619 + + + + + x + 2620 + + + + + x + 2621 + + + + + x + 2622 + + + + + x + 2623 + + + + + x + 2624 + + + + + x + 2625 + + + + + x + 2626 + + + + + x + 2627 + + + + + x + 2628 + + + + + x + 2629 + + + + + x + 2630 + + + + + x + 2631 + + + + + x + 2632 + + + + + x + 2633 + + + + + x + 2634 + + + + + x + 2635 + + + + + x + 2636 + + + + + x + 2637 + + + + + x + 2638 + + + + + x + 2639 + + + + + x + 2640 + + + + + x + 2641 + + + + + x + 2642 + + + + + x + 2643 + + + + + x + 2644 + + + + + x + 2645 + + + + + x + 2646 + + + + + x + 2647 + + + + + x + 2648 + + + + + x + 2649 + + + + + x + 2650 + + + + + x + 2651 + + + + + x + 2652 + + + + + x + 2653 + + + + + x + 2654 + + + + + x + 2655 + + + + + x + 2656 + + + + + x + 2657 + + + + + x + 2658 + + + + + x + 2659 + + + + + x + 2660 + + + + + x + 2661 + + + + + x + 2662 + + + + + x + 2663 + + + + + x + 2664 + + + + + x + 2665 + + + + + x + 2666 + + + + + x + 2667 + + + + + x + 2668 + + + + + x + 2669 + + + + + x + 2670 + + + + + x + 2671 + + + + + x + 2672 + + + + + x + 2673 + + + + + x + 2674 + + + + + x + 2675 + + + + + x + 2676 + + + + + x + 2677 + + + + + x + 2678 + + + + + x + 2679 + + + + + x + 2680 + + + + + x + 2681 + + + + + x + 2682 + + + + + x + 2683 + + + + + x + 2684 + + + + + x + 2685 + + + + + x + 2686 + + + + + x + 2687 + + + + + x + 2688 + + + + + x + 2689 + + + + + x + 2690 + + + + + x + 2691 + + + + + x + 2692 + + + + + x + 2693 + + + + + x + 2694 + + + + + x + 2695 + + + + + x + 2696 + + + + + x + 2697 + + + + + x + 2698 + + + + + x + 2699 + + + + + x + 2700 + + + + + x + 2701 + + + + + x + 2702 + + + + + x + 2703 + + + + + x + 2704 + + + + + x + 2705 + + + + + x + 2706 + + + + + x + 2707 + + + + + x + 2708 + + + + + x + 2709 + + + + + x + 2710 + + + + + x + 2711 + + + + + x + 2712 + + + + + x + 2713 + + + + + x + 2714 + + + + + x + 2715 + + + + + x + 2716 + + + + + x + 2717 + + + + + x + 2718 + + + + + x + 2719 + + + + + x + 2720 + + + + + x + 2721 + + + + + x + 2722 + + + + + x + 2723 + + + + + x + 2724 + + + + + x + 2725 + + + + + x + 2726 + + + + + x + 2727 + + + + + x + 2728 + + + + + x + 2729 + + + + + x + 2730 + + + + + x + 2731 + + + + + x + 2732 + + + + + x + 2733 + + + + + x + 2734 + + + + + x + 2735 + + + + + x + 2736 + + + + + x + 2737 + + + + + x + 2738 + + + + + x + 2739 + + + + + x + 2740 + + + + + x + 2741 + + + + + x + 2742 + + + + + x + 2743 + + + + + x + 2744 + + + + + x + 2745 + + + + + x + 2746 + + + + + x + 2747 + + + + + x + 2748 + + + + + x + 2749 + + + + + x + 2750 + + + + + x + 2751 + + + + + x + 2752 + + + + + x + 2753 + + + + + x + 2754 + + + + + x + 2755 + + + + + x + 2756 + + + + + x + 2757 + + + + + x + 2758 + + + + + x + 2759 + + + + + x + 2760 + + + + + x + 2761 + + + + + x + 2762 + + + + + x + 2763 + + + + + x + 2764 + + + + + x + 2765 + + + + + x + 2766 + + + + + x + 2767 + + + + + x + 2768 + + + + + x + 2769 + + + + + x + 2770 + + + + + x + 2771 + + + + + x + 2772 + + + + + x + 2773 + + + + + x + 2774 + + + + + x + 2775 + + + + + x + 2776 + + + + + x + 2777 + + + + + x + 2778 + + + + + x + 2779 + + + + + x + 2780 + + + + + x + 2781 + + + + + x + 2782 + + + + + x + 2783 + + + + + x + 2784 + + + + + x + 2785 + + + + + x + 2786 + + + + + x + 2787 + + + + + x + 2788 + + + + + x + 2789 + + + + + x + 2790 + + + + + x + 2791 + + + + + x + 2792 + + + + + x + 2793 + + + + + x + 2794 + + + + + x + 2795 + + + + + x + 2796 + + + + + x + 2797 + + + + + x + 2798 + + + + + x + 2799 + + + + + x + 2800 + + + + + x + 2801 + + + + + x + 2802 + + + + + x + 2803 + + + + + x + 2804 + + + + + x + 2805 + + + + + x + 2806 + + + + + x + 2807 + + + + + x + 2808 + + + + + x + 2809 + + + + + x + 2810 + + + + + x + 2811 + + + + + x + 2812 + + + + + x + 2813 + + + + + x + 2814 + + + + + x + 2815 + + + + + x + 2816 + + + + + x + 2817 + + + + + x + 2818 + + + + + x + 2819 + + + + + x + 2820 + + + + + x + 2821 + + + + + x + 2822 + + + + + x + 2823 + + + + + x + 2824 + + + + + x + 2825 + + + + + x + 2826 + + + + + x + 2827 + + + + + x + 2828 + + + + + x + 2829 + + + + + x + 2830 + + + + + x + 2831 + + + + + x + 2832 + + + + + x + 2833 + + + + + x + 2834 + + + + + x + 2835 + + + + + x + 2836 + + + + + x + 2837 + + + + + x + 2838 + + + + + x + 2839 + + + + + x + 2840 + + + + + x + 2841 + + + + + x + 2842 + + + + + x + 2843 + + + + + x + 2844 + + + + + x + 2845 + + + + + x + 2846 + + + + + x + 2847 + + + + + x + 2848 + + + + + x + 2849 + + + + + x + 2850 + + + + + x + 2851 + + + + + x + 2852 + + + + + x + 2853 + + + + + x + 2854 + + + + + x + 2855 + + + + + x + 2856 + + + + + x + 2857 + + + + + x + 2858 + + + + + x + 2859 + + + + + x + 2860 + + + + + x + 2861 + + + + + x + 2862 + + + + + x + 2863 + + + + + x + 2864 + + + + + x + 2865 + + + + + x + 2866 + + + + + x + 2867 + + + + + x + 2868 + + + + + x + 2869 + + + + + x + 2870 + + + + + x + 2871 + + + + + x + 2872 + + + + + x + 2873 + + + + + x + 2874 + + + + + x + 2875 + + + + + x + 2876 + + + + + x + 2877 + + + + + x + 2878 + + + + + x + 2879 + + + + + x + 2880 + + + + + x + 2881 + + + + + x + 2882 + + + + + x + 2883 + + + + + x + 2884 + + + + + x + 2885 + + + + + x + 2886 + + + + + x + 2887 + + + + + x + 2888 + + + + + x + 2889 + + + + + x + 2890 + + + + + x + 2891 + + + + + x + 2892 + + + + + x + 2893 + + + + + x + 2894 + + + + + x + 2895 + + + + + x + 2896 + + + + + x + 2897 + + + + + x + 2898 + + + + + x + 2899 + + + + + x + 2900 + + + + + x + 2901 + + + + + x + 2902 + + + + + x + 2903 + + + + + x + 2904 + + + + + x + 2905 + + + + + x + 2906 + + + + + x + 2907 + + + + + x + 2908 + + + + + x + 2909 + + + + + x + 2910 + + + + + x + 2911 + + + + + x + 2912 + + + + + x + 2913 + + + + + x + 2914 + + + + + x + 2915 + + + + + x + 2916 + + + + + x + 2917 + + + + + x + 2918 + + + + + x + 2919 + + + + + x + 2920 + + + + + x + 2921 + + + + + x + 2922 + + + + + x + 2923 + + + + + x + 2924 + + + + + x + 2925 + + + + + x + 2926 + + + + + x + 2927 + + + + + x + 2928 + + + + + x + 2929 + + + + + x + 2930 + + + + + x + 2931 + + + + + x + 2932 + + + + + x + 2933 + + + + + x + 2934 + + + + + x + 2935 + + + + + x + 2936 + + + + + x + 2937 + + + + + x + 2938 + + + + + x + 2939 + + + + + x + 2940 + + + + + x + 2941 + + + + + x + 2942 + + + + + x + 2943 + + + + + x + 2944 + + + + + x + 2945 + + + + + x + 2946 + + + + + x + 2947 + + + + + x + 2948 + + + + + x + 2949 + + + + + x + 2950 + + + + + x + 2951 + + + + + x + 2952 + + + + + x + 2953 + + + + + x + 2954 + + + + + x + 2955 + + + + + x + 2956 + + + + + x + 2957 + + + + + x + 2958 + + + + + x + 2959 + + + + + x + 2960 + + + + + x + 2961 + + + + + x + 2962 + + + + + x + 2963 + + + + + x + 2964 + + + + + x + 2965 + + + + + x + 2966 + + + + + x + 2967 + + + + + x + 2968 + + + + + x + 2969 + + + + + x + 2970 + + + + + x + 2971 + + + + + x + 2972 + + + + + x + 2973 + + + + + x + 2974 + + + + + x + 2975 + + + + + x + 2976 + + + + + x + 2977 + + + + + x + 2978 + + + + + x + 2979 + + + + + x + 2980 + + + + + x + 2981 + + + + + x + 2982 + + + + + x + 2983 + + + + + x + 2984 + + + + + x + 2985 + + + + + x + 2986 + + + + + x + 2987 + + + + + x + 2988 + + + + + x + 2989 + + + + + x + 2990 + + + + + x + 2991 + + + + + x + 2992 + + + + + x + 2993 + + + + + x + 2994 + + + + + x + 2995 + + + + + x + 2996 + + + + + x + 2997 + + + + + x + 2998 + + + + + x + 2999 + + + + + x + 3000 + + + + + x + 3001 + + + + + x + 3002 + + + + + x + 3003 + + + + + x + 3004 + + + + + x + 3005 + + + + + x + 3006 + + + + + x + 3007 + + + + + x + 3008 + + + + + x + 3009 + + + + + x + 3010 + + + + + x + 3011 + + + + + x + 3012 + + + + + x + 3013 + + + + + x + 3014 + + + + + x + 3015 + + + + + x + 3016 + + + + + x + 3017 + + + + + x + 3018 + + + + + x + 3019 + + + + + x + 3020 + + + + + x + 3021 + + + + + x + 3022 + + + + + x + 3023 + + + + + x + 3024 + + + + + x + 3025 + + + + + x + 3026 + + + + + x + 3027 + + + + + x + 3028 + + + + + x + 3029 + + + + + x + 3030 + + + + + x + 3031 + + + + + x + 3032 + + + + + x + 3033 + + + + + x + 3034 + + + + + x + 3035 + + + + + x + 3036 + + + + + x + 3037 + + + + + x + 3038 + + + + + x + 3039 + + + + + x + 3040 + + + + + x + 3041 + + + + + x + 3042 + + + + + x + 3043 + + + + + x + 3044 + + + + + x + 3045 + + + + + x + 3046 + + + + + x + 3047 + + + + + x + 3048 + + + + + x + 3049 + + + + + x + 3050 + + + + + x + 3051 + + + + + x + 3052 + + + + + x + 3053 + + + + + x + 3054 + + + + + x + 3055 + + + + + x + 3056 + + + + + x + 3057 + + + + + x + 3058 + + + + + x + 3059 + + + + + x + 3060 + + + + + x + 3061 + + + + + x + 3062 + + + + + x + 3063 + + + + + x + 3064 + + + + + x + 3065 + + + + + x + 3066 + + + + + x + 3067 + + + + + x + 3068 + + + + + x + 3069 + + + + + x + 3070 + + + + + x + 3071 + + + + + x + 3072 + + + + + x + 3073 + + + + + x + 3074 + + + + + x + 3075 + + + + + x + 3076 + + + + + x + 3077 + + + + + x + 3078 + + + + + x + 3079 + + + + + x + 3080 + + + + + x + 3081 + + + + + x + 3082 + + + + + x + 3083 + + + + + x + 3084 + + + + + x + 3085 + + + + + x + 3086 + + + + + x + 3087 + + + + + x + 3088 + + + + + x + 3089 + + + + + x + 3090 + + + + + x + 3091 + + + + + x + 3092 + + + + + x + 3093 + + + + + x + 3094 + + + + + x + 3095 + + + + + x + 3096 + + + + + x + 3097 + + + + + x + 3098 + + + + + x + 3099 + + + + + x + 3100 + + + + + x + 3101 + + + + + x + 3102 + + + + + x + 3103 + + + + + x + 3104 + + + + + x + 3105 + + + + + x + 3106 + + + + + x + 3107 + + + + + x + 3108 + + + + + x + 3109 + + + + + x + 3110 + + + + + x + 3111 + + + + + x + 3112 + + + + + x + 3113 + + + + + x + 3114 + + + + + x + 3115 + + + + + x + 3116 + + + + + x + 3117 + + + + + x + 3118 + + + + + x + 3119 + + + + + x + 3120 + + + + + x + 3121 + + + + + x + 3122 + + + + + x + 3123 + + + + + x + 3124 + + + + + x + 3125 + + + + + x + 3126 + + + + + x + 3127 + + + + + x + 3128 + + + + + x + 3129 + + + + + x + 3130 + + + + + x + 3131 + + + + + x + 3132 + + + + + x + 3133 + + + + + x + 3134 + + + + + x + 3135 + + + + + x + 3136 + + + + + x + 3137 + + + + + x + 3138 + + + + + x + 3139 + + + + + x + 3140 + + + + + x + 3141 + + + + + x + 3142 + + + + + x + 3143 + + + + + x + 3144 + + + + + x + 3145 + + + + + x + 3146 + + + + + x + 3147 + + + + + x + 3148 + + + + + x + 3149 + + + + + x + 3150 + + + + + x + 3151 + + + + + x + 3152 + + + + + x + 3153 + + + + + x + 3154 + + + + + x + 3155 + + + + + x + 3156 + + + + + x + 3157 + + + + + x + 3158 + + + + + x + 3159 + + + + + x + 3160 + + + + + x + 3161 + + + + + x + 3162 + + + + + x + 3163 + + + + + x + 3164 + + + + + x + 3165 + + + + + x + 3166 + + + + + x + 3167 + + + + + x + 3168 + + + + + x + 3169 + + + + + x + 3170 + + + + + x + 3171 + + + + + x + 3172 + + + + + x + 3173 + + + + + x + 3174 + + + + + x + 3175 + + + + + x + 3176 + + + + + x + 3177 + + + + + x + 3178 + + + + + x + 3179 + + + + + x + 3180 + + + + + x + 3181 + + + + + x + 3182 + + + + + x + 3183 + + + + + x + 3184 + + + + + x + 3185 + + + + + x + 3186 + + + + + x + 3187 + + + + + x + 3188 + + + + + x + 3189 + + + + + x + 3190 + + + + + x + 3191 + + + + + x + 3192 + + + + + x + 3193 + + + + + x + 3194 + + + + + x + 3195 + + + + + x + 3196 + + + + + x + 3197 + + + + + x + 3198 + + + + + x + 3199 + + + + + x + 3200 + + + + + x + 3201 + + + + + x + 3202 + + + + + x + 3203 + + + + + x + 3204 + + + + + x + 3205 + + + + + x + 3206 + + + + + x + 3207 + + + + + x + 3208 + + + + + x + 3209 + + + + + x + 3210 + + + + + x + 3211 + + + + + x + 3212 + + + + + x + 3213 + + + + + x + 3214 + + + + + x + 3215 + + + + + x + 3216 + + + + + x + 3217 + + + + + x + 3218 + + + + + x + 3219 + + + + + x + 3220 + + + + + x + 3221 + + + + + x + 3222 + + + + + x + 3223 + + + + + x + 3224 + + + + + x + 3225 + + + + + x + 3226 + + + + + x + 3227 + + + + + x + 3228 + + + + + x + 3229 + + + + + x + 3230 + + + + + x + 3231 + + + + + x + 3232 + + + + + x + 3233 + + + + + x + 3234 + + + + + x + 3235 + + + + + x + 3236 + + + + + x + 3237 + + + + + x + 3238 + + + + + x + 3239 + + + + + x + 3240 + + + + + x + 3241 + + + + + x + 3242 + + + + + x + 3243 + + + + + x + 3244 + + + + + x + 3245 + + + + + x + 3246 + + + + + x + 3247 + + + + + x + 3248 + + + + + x + 3249 + + + + + x + 3250 + + + + + x + 3251 + + + + + x + 3252 + + + + + x + 3253 + + + + + x + 3254 + + + + + x + 3255 + + + + + x + 3256 + + + + + x + 3257 + + + + + x + 3258 + + + + + x + 3259 + + + + + x + 3260 + + + + + x + 3261 + + + + + x + 3262 + + + + + x + 3263 + + + + + x + 3264 + + + + + x + 3265 + + + + + x + 3266 + + + + + x + 3267 + + + + + x + 3268 + + + + + x + 3269 + + + + + x + 3270 + + + + + x + 3271 + + + + + x + 3272 + + + + + x + 3273 + + + + + x + 3274 + + + + + x + 3275 + + + + + x + 3276 + + + + + x + 3277 + + + + + x + 3278 + + + + + x + 3279 + + + + + x + 3280 + + + + + x + 3281 + + + + + x + 3282 + + + + + x + 3283 + + + + + x + 3284 + + + + + x + 3285 + + + + + x + 3286 + + + + + x + 3287 + + + + + x + 3288 + + + + + x + 3289 + + + + + x + 3290 + + + + + x + 3291 + + + + + x + 3292 + + + + + x + 3293 + + + + + x + 3294 + + + + + x + 3295 + + + + + x + 3296 + + + + + x + 3297 + + + + + x + 3298 + + + + + x + 3299 + + + + + x + 3300 + + + + + x + 3301 + + + + + x + 3302 + + + + + x + 3303 + + + + + x + 3304 + + + + + x + 3305 + + + + + x + 3306 + + + + + x + 3307 + + + + + x + 3308 + + + + + x + 3309 + + + + + x + 3310 + + + + + x + 3311 + + + + + x + 3312 + + + + + x + 3313 + + + + + x + 3314 + + + + + x + 3315 + + + + + x + 3316 + + + + + x + 3317 + + + + + x + 3318 + + + + + x + 3319 + + + + + x + 3320 + + + + + x + 3321 + + + + + x + 3322 + + + + + x + 3323 + + + + + x + 3324 + + + + + x + 3325 + + + + + x + 3326 + + + + + x + 3327 + + + + + x + 3328 + + + + + x + 3329 + + + + + x + 3330 + + + + + x + 3331 + + + + + x + 3332 + + + + + x + 3333 + + + + + x + 3334 + + + + + x + 3335 + + + + + x + 3336 + + + + + x + 3337 + + + + + x + 3338 + + + + + x + 3339 + + + + + x + 3340 + + + + + x + 3341 + + + + + x + 3342 + + + + + x + 3343 + + + + + x + 3344 + + + + + x + 3345 + + + + + x + 3346 + + + + + x + 3347 + + + + + x + 3348 + + + + + x + 3349 + + + + + x + 3350 + + + + + x + 3351 + + + + + x + 3352 + + + + + x + 3353 + + + + + x + 3354 + + + + + x + 3355 + + + + + x + 3356 + + + + + x + 3357 + + + + + x + 3358 + + + + + x + 3359 + + + + + x + 3360 + + + + + x + 3361 + + + + + x + 3362 + + + + + x + 3363 + + + + + x + 3364 + + + + + x + 3365 + + + + + x + 3366 + + + + + x + 3367 + + + + + x + 3368 + + + + + x + 3369 + + + + + x + 3370 + + + + + x + 3371 + + + + + x + 3372 + + + + + x + 3373 + + + + + x + 3374 + + + + + x + 3375 + + + + + x + 3376 + + + + + x + 3377 + + + + + x + 3378 + + + + + x + 3379 + + + + + x + 3380 + + + + + x + 3381 + + + + + x + 3382 + + + + + x + 3383 + + + + + x + 3384 + + + + + x + 3385 + + + + + x + 3386 + + + + + x + 3387 + + + + + x + 3388 + + + + + x + 3389 + + + + + x + 3390 + + + + + x + 3391 + + + + + x + 3392 + + + + + x + 3393 + + + + + x + 3394 + + + + + x + 3395 + + + + + x + 3396 + + + + + x + 3397 + + + + + x + 3398 + + + + + x + 3399 + + + + + x + 3400 + + + + + x + 3401 + + + + + x + 3402 + + + + + x + 3403 + + + + + x + 3404 + + + + + x + 3405 + + + + + x + 3406 + + + + + x + 3407 + + + + + x + 3408 + + + + + x + 3409 + + + + + x + 3410 + + + + + x + 3411 + + + + + x + 3412 + + + + + x + 3413 + + + + + x + 3414 + + + + + x + 3415 + + + + + x + 3416 + + + + + x + 3417 + + + + + x + 3418 + + + + + x + 3419 + + + + + x + 3420 + + + + + x + 3421 + + + + + x + 3422 + + + + + x + 3423 + + + + + x + 3424 + + + + + x + 3425 + + + + + x + 3426 + + + + + x + 3427 + + + + + x + 3428 + + + + + x + 3429 + + + + + x + 3430 + + + + + x + 3431 + + + + + x + 3432 + + + + + x + 3433 + + + + + x + 3434 + + + + + x + 3435 + + + + + x + 3436 + + + + + x + 3437 + + + + + x + 3438 + + + + + x + 3439 + + + + + x + 3440 + + + + + x + 3441 + + + + + x + 3442 + + + + + x + 3443 + + + + + x + 3444 + + + + + x + 3445 + + + + + x + 3446 + + + + + x + 3447 + + + + + x + 3448 + + + + + x + 3449 + + + + + x + 3450 + + + + + x + 3451 + + + + + x + 3452 + + + + + x + 3453 + + + + + x + 3454 + + + + + x + 3455 + + + + + x + 3456 + + + + + x + 3457 + + + + + x + 3458 + + + + + x + 3459 + + + + + x + 3460 + + + + + x + 3461 + + + + + x + 3462 + + + + + x + 3463 + + + + + x + 3464 + + + + + x + 3465 + + + + + x + 3466 + + + + + x + 3467 + + + + + x + 3468 + + + + + x + 3469 + + + + + x + 3470 + + + + + x + 3471 + + + + + x + 3472 + + + + + x + 3473 + + + + + x + 3474 + + + + + x + 3475 + + + + + x + 3476 + + + + + x + 3477 + + + + + x + 3478 + + + + + x + 3479 + + + + + x + 3480 + + + + + x + 3481 + + + + + x + 3482 + + + + + x + 3483 + + + + + x + 3484 + + + + + x + 3485 + + + + + x + 3486 + + + + + x + 3487 + + + + + x + 3488 + + + + + x + 3489 + + + + + x + 3490 + + + + + x + 3491 + + + + + x + 3492 + + + + + x + 3493 + + + + + x + 3494 + + + + + x + 3495 + + + + + x + 3496 + + + + + x + 3497 + + + + + x + 3498 + + + + + x + 3499 + + + + + x + 3500 + + + + + x + 3501 + + + + + x + 3502 + + + + + x + 3503 + + + + + x + 3504 + + + + + x + 3505 + + + + + x + 3506 + + + + + x + 3507 + + + + + x + 3508 + + + + + x + 3509 + + + + + x + 3510 + + + + + x + 3511 + + + + + x + 3512 + + + + + x + 3513 + + + + + x + 3514 + + + + + x + 3515 + + + + + x + 3516 + + + + + x + 3517 + + + + + x + 3518 + + + + + x + 3519 + + + + + x + 3520 + + + + + x + 3521 + + + + + x + 3522 + + + + + x + 3523 + + + + + x + 3524 + + + + + x + 3525 + + + + + x + 3526 + + + + + x + 3527 + + + + + x + 3528 + + + + + x + 3529 + + + + + x + 3530 + + + + + x + 3531 + + + + + x + 3532 + + + + + x + 3533 + + + + + x + 3534 + + + + + x + 3535 + + + + + x + 3536 + + + + + x + 3537 + + + + + x + 3538 + + + + + x + 3539 + + + + + x + 3540 + + + + + x + 3541 + + + + + x + 3542 + + + + + x + 3543 + + + + + x + 3544 + + + + + x + 3545 + + + + + x + 3546 + + + + + x + 3547 + + + + + x + 3548 + + + + + x + 3549 + + + + + x + 3550 + + + + + x + 3551 + + + + + x + 3552 + + + + + x + 3553 + + + + + x + 3554 + + + + + x + 3555 + + + + + x + 3556 + + + + + x + 3557 + + + + + x + 3558 + + + + + x + 3559 + + + + + x + 3560 + + + + + x + 3561 + + + + + x + 3562 + + + + + x + 3563 + + + + + x + 3564 + + + + + x + 3565 + + + + + x + 3566 + + + + + x + 3567 + + + + + x + 3568 + + + + + x + 3569 + + + + + x + 3570 + + + + + x + 3571 + + + + + x + 3572 + + + + + x + 3573 + + + + + x + 3574 + + + + + x + 3575 + + + + + x + 3576 + + + + + x + 3577 + + + + + x + 3578 + + + + + x + 3579 + + + + + x + 3580 + + + + + x + 3581 + + + + + x + 3582 + + + + + x + 3583 + + + + + x + 3584 + + + + + x + 3585 + + + + + x + 3586 + + + + + x + 3587 + + + + + x + 3588 + + + + + x + 3589 + + + + + x + 3590 + + + + + x + 3591 + + + + + x + 3592 + + + + + x + 3593 + + + + + x + 3594 + + + + + x + 3595 + + + + + x + 3596 + + + + + x + 3597 + + + + + x + 3598 + + + + + x + 3599 + + + + + x + 3600 + + + + + x + 3601 + + + + + x + 3602 + + + + + x + 3603 + + + + + x + 3604 + + + + + x + 3605 + + + + + x + 3606 + + + + + x + 3607 + + + + + x + 3608 + + + + + x + 3609 + + + + + x + 3610 + + + + + x + 3611 + + + + + x + 3612 + + + + + x + 3613 + + + + + x + 3614 + + + + + x + 3615 + + + + + x + 3616 + + + + + x + 3617 + + + + + x + 3618 + + + + + x + 3619 + + + + + x + 3620 + + + + + x + 3621 + + + + + x + 3622 + + + + + x + 3623 + + + + + x + 3624 + + + + + x + 3625 + + + + + x + 3626 + + + + + x + 3627 + + + + + x + 3628 + + + + + x + 3629 + + + + + x + 3630 + + + + + x + 3631 + + + + + x + 3632 + + + + + x + 3633 + + + + + x + 3634 + + + + + x + 3635 + + + + + x + 3636 + + + + + x + 3637 + + + + + x + 3638 + + + + + x + 3639 + + + + + x + 3640 + + + + + x + 3641 + + + + + x + 3642 + + + + + x + 3643 + + + + + x + 3644 + + + + + x + 3645 + + + + + x + 3646 + + + + + x + 3647 + + + + + x + 3648 + + + + + x + 3649 + + + + + x + 3650 + + + + + x + 3651 + + + + + x + 3652 + + + + + x + 3653 + + + + + x + 3654 + + + + + x + 3655 + + + + + x + 3656 + + + + + x + 3657 + + + + + x + 3658 + + + + + x + 3659 + + + + + x + 3660 + + + + + x + 3661 + + + + + x + 3662 + + + + + x + 3663 + + + + + x + 3664 + + + + + x + 3665 + + + + + x + 3666 + + + + + x + 3667 + + + + + x + 3668 + + + + + x + 3669 + + + + + x + 3670 + + + + + x + 3671 + + + + + x + 3672 + + + + + x + 3673 + + + + + x + 3674 + + + + + x + 3675 + + + + + x + 3676 + + + + + x + 3677 + + + + + x + 3678 + + + + + x + 3679 + + + + + x + 3680 + + + + + x + 3681 + + + + + x + 3682 + + + + + x + 3683 + + + + + x + 3684 + + + + + x + 3685 + + + + + x + 3686 + + + + + x + 3687 + + + + + x + 3688 + + + + + x + 3689 + + + + + x + 3690 + + + + + x + 3691 + + + + + x + 3692 + + + + + x + 3693 + + + + + x + 3694 + + + + + x + 3695 + + + + + x + 3696 + + + + + x + 3697 + + + + + x + 3698 + + + + + x + 3699 + + + + + x + 3700 + + + + + x + 3701 + + + + + x + 3702 + + + + + x + 3703 + + + + + x + 3704 + + + + + x + 3705 + + + + + x + 3706 + + + + + x + 3707 + + + + + x + 3708 + + + + + x + 3709 + + + + + x + 3710 + + + + + x + 3711 + + + + + x + 3712 + + + + + x + 3713 + + + + + x + 3714 + + + + + x + 3715 + + + + + x + 3716 + + + + + x + 3717 + + + + + x + 3718 + + + + + x + 3719 + + + + + x + 3720 + + + + + x + 3721 + + + + + x + 3722 + + + + + x + 3723 + + + + + x + 3724 + + + + + x + 3725 + + + + + x + 3726 + + + + + x + 3727 + + + + + x + 3728 + + + + + x + 3729 + + + + + x + 3730 + + + + + x + 3731 + + + + + x + 3732 + + + + + x + 3733 + + + + + x + 3734 + + + + + x + 3735 + + + + + x + 3736 + + + + + x + 3737 + + + + + x + 3738 + + + + + x + 3739 + + + + + x + 3740 + + + + + x + 3741 + + + + + x + 3742 + + + + + x + 3743 + + + + + x + 3744 + + + + + x + 3745 + + + + + x + 3746 + + + + + x + 3747 + + + + + x + 3748 + + + + + x + 3749 + + + + + x + 3750 + + + + + x + 3751 + + + + + x + 3752 + + + + + x + 3753 + + + + + x + 3754 + + + + + x + 3755 + + + + + x + 3756 + + + + + x + 3757 + + + + + x + 3758 + + + + + x + 3759 + + + + + x + 3760 + + + + + x + 3761 + + + + + x + 3762 + + + + + x + 3763 + + + + + x + 3764 + + + + + x + 3765 + + + + + x + 3766 + + + + + x + 3767 + + + + + x + 3768 + + + + + x + 3769 + + + + + x + 3770 + + + + + x + 3771 + + + + + x + 3772 + + + + + x + 3773 + + + + + x + 3774 + + + + + x + 3775 + + + + + x + 3776 + + + + + x + 3777 + + + + + x + 3778 + + + + + x + 3779 + + + + + x + 3780 + + + + + x + 3781 + + + + + x + 3782 + + + + + x + 3783 + + + + + x + 3784 + + + + + x + 3785 + + + + + x + 3786 + + + + + x + 3787 + + + + + x + 3788 + + + + + x + 3789 + + + + + x + 3790 + + + + + x + 3791 + + + + + x + 3792 + + + + + x + 3793 + + + + + x + 3794 + + + + + x + 3795 + + + + + x + 3796 + + + + + x + 3797 + + + + + x + 3798 + + + + + x + 3799 + + + + + x + 3800 + + + + + x + 3801 + + + + + x + 3802 + + + + + x + 3803 + + + + + x + 3804 + + + + + x + 3805 + + + + + x + 3806 + + + + + x + 3807 + + + + + x + 3808 + + + + + x + 3809 + + + + + x + 3810 + + + + + x + 3811 + + + + + x + 3812 + + + + + x + 3813 + + + + + x + 3814 + + + + + x + 3815 + + + + + x + 3816 + + + + + x + 3817 + + + + + x + 3818 + + + + + x + 3819 + + + + + x + 3820 + + + + + x + 3821 + + + + + x + 3822 + + + + + x + 3823 + + + + + x + 3824 + + + + + x + 3825 + + + + + x + 3826 + + + + + x + 3827 + + + + + x + 3828 + + + + + x + 3829 + + + + + x + 3830 + + + + + x + 3831 + + + + + x + 3832 + + + + + x + 3833 + + + + + x + 3834 + + + + + x + 3835 + + + + + x + 3836 + + + + + x + 3837 + + + + + x + 3838 + + + + + x + 3839 + + + + + x + 3840 + + + + + x + 3841 + + + + + x + 3842 + + + + + x + 3843 + + + + + x + 3844 + + + + + x + 3845 + + + + + x + 3846 + + + + + x + 3847 + + + + + x + 3848 + + + + + x + 3849 + + + + + x + 3850 + + + + + x + 3851 + + + + + x + 3852 + + + + + x + 3853 + + + + + x + 3854 + + + + + x + 3855 + + + + + x + 3856 + + + + + x + 3857 + + + + + x + 3858 + + + + + x + 3859 + + + + + x + 3860 + + + + + x + 3861 + + + + + x + 3862 + + + + + x + 3863 + + + + + x + 3864 + + + + + x + 3865 + + + + + x + 3866 + + + + + x + 3867 + + + + + x + 3868 + + + + + x + 3869 + + + + + x + 3870 + + + + + x + 3871 + + + + + x + 3872 + + + + + x + 3873 + + + + + x + 3874 + + + + + x + 3875 + + + + + x + 3876 + + + + + x + 3877 + + + + + x + 3878 + + + + + x + 3879 + + + + + x + 3880 + + + + + x + 3881 + + + + + x + 3882 + + + + + x + 3883 + + + + + x + 3884 + + + + + x + 3885 + + + + + x + 3886 + + + + + x + 3887 + + + + + x + 3888 + + + + + x + 3889 + + + + + x + 3890 + + + + + x + 3891 + + + + + x + 3892 + + + + + x + 3893 + + + + + x + 3894 + + + + + x + 3895 + + + + + x + 3896 + + + + + x + 3897 + + + + + x + 3898 + + + + + x + 3899 + + + + + x + 3900 + + + + + x + 3901 + + + + + x + 3902 + + + + + x + 3903 + + + + + x + 3904 + + + + + x + 3905 + + + + + x + 3906 + + + + + x + 3907 + + + + + x + 3908 + + + + + x + 3909 + + + + + x + 3910 + + + + + x + 3911 + + + + + x + 3912 + + + + + x + 3913 + + + + + x + 3914 + + + + + x + 3915 + + + + + x + 3916 + + + + + x + 3917 + + + + + x + 3918 + + + + + x + 3919 + + + + + x + 3920 + + + + + x + 3921 + + + + + x + 3922 + + + + + x + 3923 + + + + + x + 3924 + + + + + x + 3925 + + + + + x + 3926 + + + + + x + 3927 + + + + + x + 3928 + + + + + x + 3929 + + + + + x + 3930 + + + + + x + 3931 + + + + + x + 3932 + + + + + x + 3933 + + + + + x + 3934 + + + + + x + 3935 + + + + + x + 3936 + + + + + x + 3937 + + + + + x + 3938 + + + + + x + 3939 + + + + + x + 3940 + + + + + x + 3941 + + + + + x + 3942 + + + + + x + 3943 + + + + + x + 3944 + + + + + x + 3945 + + + + + x + 3946 + + + + + x + 3947 + + + + + x + 3948 + + + + + x + 3949 + + + + + x + 3950 + + + + + x + 3951 + + + + + x + 3952 + + + + + x + 3953 + + + + + x + 3954 + + + + + x + 3955 + + + + + x + 3956 + + + + + x + 3957 + + + + + x + 3958 + + + + + x + 3959 + + + + + x + 3960 + + + + + x + 3961 + + + + + x + 3962 + + + + + x + 3963 + + + + + x + 3964 + + + + + x + 3965 + + + + + x + 3966 + + + + + x + 3967 + + + + + x + 3968 + + + + + x + 3969 + + + + + x + 3970 + + + + + x + 3971 + + + + + x + 3972 + + + + + x + 3973 + + + + + x + 3974 + + + + + x + 3975 + + + + + x + 3976 + + + + + x + 3977 + + + + + x + 3978 + + + + + x + 3979 + + + + + x + 3980 + + + + + x + 3981 + + + + + x + 3982 + + + + + x + 3983 + + + + + x + 3984 + + + + + x + 3985 + + + + + x + 3986 + + + + + x + 3987 + + + + + x + 3988 + + + + + x + 3989 + + + + + x + 3990 + + + + + x + 3991 + + + + + x + 3992 + + + + + x + 3993 + + + + + x + 3994 + + + + + x + 3995 + + + + + x + 3996 + + + + + x + 3997 + + + + + x + 3998 + + + + + x + 3999 + + + + + x + 4000 + + + + + x + 4001 + + + + + x + 4002 + + + + + x + 4003 + + + + + x + 4004 + + + + + x + 4005 + + + + + x + 4006 + + + + + x + 4007 + + + + + x + 4008 + + + + + x + 4009 + + + + + x + 4010 + + + + + x + 4011 + + + + + x + 4012 + + + + + x + 4013 + + + + + x + 4014 + + + + + x + 4015 + + + + + x + 4016 + + + + + x + 4017 + + + + + x + 4018 + + + + + x + 4019 + + + + + x + 4020 + + + + + x + 4021 + + + + + x + 4022 + + + + + x + 4023 + + + + + x + 4024 + + + + + x + 4025 + + + + + x + 4026 + + + + + x + 4027 + + + + + x + 4028 + + + + + x + 4029 + + + + + x + 4030 + + + + + x + 4031 + + + + + x + 4032 + + + + + x + 4033 + + + + + x + 4034 + + + + + x + 4035 + + + + + x + 4036 + + + + + x + 4037 + + + + + x + 4038 + + + + + x + 4039 + + + + + x + 4040 + + + + + x + 4041 + + + + + x + 4042 + + + + + x + 4043 + + + + + x + 4044 + + + + + x + 4045 + + + + + x + 4046 + + + + + x + 4047 + + + + + x + 4048 + + + + + x + 4049 + + + + + x + 4050 + + + + + x + 4051 + + + + + x + 4052 + + + + + x + 4053 + + + + + x + 4054 + + + + + x + 4055 + + + + + x + 4056 + + + + + x + 4057 + + + + + x + 4058 + + + + + x + 4059 + + + + + x + 4060 + + + + + x + 4061 + + + + + x + 4062 + + + + + x + 4063 + + + + + x + 4064 + + + + + x + 4065 + + + + + x + 4066 + + + + + x + 4067 + + + + + x + 4068 + + + + + x + 4069 + + + + + x + 4070 + + + + + x + 4071 + + + + + x + 4072 + + + + + x + 4073 + + + + + x + 4074 + + + + + x + 4075 + + + + + x + 4076 + + + + + x + 4077 + + + + + x + 4078 + + + + + x + 4079 + + + + + x + 4080 + + + + + x + 4081 + + + + + x + 4082 + + + + + x + 4083 + + + + + x + 4084 + + + + + x + 4085 + + + + + x + 4086 + + + + + x + 4087 + + + + + x + 4088 + + + + + x + 4089 + + + + + x + 4090 + + + + + x + 4091 + + + + + x + 4092 + + + + + x + 4093 + + + + + x + 4094 + + + + + x + 4095 + + + + + x + 4096 + + + + + x + 4097 + + + + + x + 4098 + + + + + x + 4099 + + + + + x + 4100 + + + + + x + 4101 + + + + + x + 4102 + + + + + x + 4103 + + + + + x + 4104 + + + + + x + 4105 + + + + + x + 4106 + + + + + x + 4107 + + + + + x + 4108 + + + + + x + 4109 + + + + + x + 4110 + + + + + x + 4111 + + + + + x + 4112 + + + + + x + 4113 + + + + + x + 4114 + + + + + x + 4115 + + + + + x + 4116 + + + + + x + 4117 + + + + + x + 4118 + + + + + x + 4119 + + + + + x + 4120 + + + + + x + 4121 + + + + + x + 4122 + + + + + x + 4123 + + + + + x + 4124 + + + + + x + 4125 + + + + + x + 4126 + + + + + x + 4127 + + + + + x + 4128 + + + + + x + 4129 + + + + + x + 4130 + + + + + x + 4131 + + + + + x + 4132 + + + + + x + 4133 + + + + + x + 4134 + + + + + x + 4135 + + + + + x + 4136 + + + + + x + 4137 + + + + + x + 4138 + + + + + x + 4139 + + + + + x + 4140 + + + + + x + 4141 + + + + + x + 4142 + + + + + x + 4143 + + + + + x + 4144 + + + + + x + 4145 + + + + + x + 4146 + + + + + x + 4147 + + + + + x + 4148 + + + + + x + 4149 + + + + + x + 4150 + + + + + x + 4151 + + + + + x + 4152 + + + + + x + 4153 + + + + + x + 4154 + + + + + x + 4155 + + + + + x + 4156 + + + + + x + 4157 + + + + + x + 4158 + + + + + x + 4159 + + + + + x + 4160 + + + + + x + 4161 + + + + + x + 4162 + + + + + x + 4163 + + + + + x + 4164 + + + + + x + 4165 + + + + + x + 4166 + + + + + x + 4167 + + + + + x + 4168 + + + + + x + 4169 + + + + + x + 4170 + + + + + x + 4171 + + + + + x + 4172 + + + + + x + 4173 + + + + + x + 4174 + + + + + x + 4175 + + + + + x + 4176 + + + + + x + 4177 + + + + + x + 4178 + + + + + x + 4179 + + + + + x + 4180 + + + + + x + 4181 + + + + + x + 4182 + + + + + x + 4183 + + + + + x + 4184 + + + + + x + 4185 + + + + + x + 4186 + + + + + x + 4187 + + + + + x + 4188 + + + + + x + 4189 + + + + + x + 4190 + + + + + x + 4191 + + + + + x + 4192 + + + + + x + 4193 + + + + + x + 4194 + + + + + x + 4195 + + + + + x + 4196 + + + + + x + 4197 + + + + + x + 4198 + + + + + x + 4199 + + + + + x + 4200 + + + + + x + 4201 + + + + + x + 4202 + + + + + x + 4203 + + + + + x + 4204 + + + + + x + 4205 + + + + + x + 4206 + + + + + x + 4207 + + + + + x + 4208 + + + + + x + 4209 + + + + + x + 4210 + + + + + x + 4211 + + + + + x + 4212 + + + + + x + 4213 + + + + + x + 4214 + + + + + x + 4215 + + + + + x + 4216 + + + + + x + 4217 + + + + + x + 4218 + + + + + x + 4219 + + + + + x + 4220 + + + + + x + 4221 + + + + + x + 4222 + + + + + x + 4223 + + + + + x + 4224 + + + + + x + 4225 + + + + + x + 4226 + + + + + x + 4227 + + + + + x + 4228 + + + + + x + 4229 + + + + + x + 4230 + + + + + x + 4231 + + + + + x + 4232 + + + + + x + 4233 + + + + + x + 4234 + + + + + x + 4235 + + + + + x + 4236 + + + + + x + 4237 + + + + + x + 4238 + + + + + x + 4239 + + + + + x + 4240 + + + + + x + 4241 + + + + + x + 4242 + + + + + x + 4243 + + + + + x + 4244 + + + + + x + 4245 + + + + + x + 4246 + + + + + x + 4247 + + + + + x + 4248 + + + + + x + 4249 + + + + + x + 4250 + + + + + x + 4251 + + + + + x + 4252 + + + + + x + 4253 + + + + + x + 4254 + + + + + x + 4255 + + + + + x + 4256 + + + + + x + 4257 + + + + + x + 4258 + + + + + x + 4259 + + + + + x + 4260 + + + + + x + 4261 + + + + + x + 4262 + + + + + x + 4263 + + + + + x + 4264 + + + + + x + 4265 + + + + + x + 4266 + + + + + x + 4267 + + + + + x + 4268 + + + + + x + 4269 + + + + + x + 4270 + + + + + x + 4271 + + + + + x + 4272 + + + + + x + 4273 + + + + + x + 4274 + + + + + x + 4275 + + + + + x + 4276 + + + + + x + 4277 + + + + + x + 4278 + + + + + x + 4279 + + + + + x + 4280 + + + + + x + 4281 + + + + + x + 4282 + + + + + x + 4283 + + + + + x + 4284 + + + + + x + 4285 + + + + + x + 4286 + + + + + x + 4287 + + + + + x + 4288 + + + + + x + 4289 + + + + + x + 4290 + + + + + x + 4291 + + + + + x + 4292 + + + + + x + 4293 + + + + + x + 4294 + + + + + x + 4295 + + + + + x + 4296 + + + + + x + 4297 + + + + + x + 4298 + + + + + x + 4299 + + + + + x + 4300 + + + + + x + 4301 + + + + + x + 4302 + + + + + x + 4303 + + + + + x + 4304 + + + + + x + 4305 + + + + + x + 4306 + + + + + x + 4307 + + + + + x + 4308 + + + + + x + 4309 + + + + + x + 4310 + + + + + x + 4311 + + + + + x + 4312 + + + + + x + 4313 + + + + + x + 4314 + + + + + x + 4315 + + + + + x + 4316 + + + + + x + 4317 + + + + + x + 4318 + + + + + x + 4319 + + + + + x + 4320 + + + + + x + 4321 + + + + + x + 4322 + + + + + x + 4323 + + + + + x + 4324 + + + + + x + 4325 + + + + + x + 4326 + + + + + x + 4327 + + + + + x + 4328 + + + + + x + 4329 + + + + + x + 4330 + + + + + x + 4331 + + + + + x + 4332 + + + + + x + 4333 + + + + + x + 4334 + + + + + x + 4335 + + + + + x + 4336 + + + + + x + 4337 + + + + + x + 4338 + + + + + x + 4339 + + + + + x + 4340 + + + + + x + 4341 + + + + + x + 4342 + + + + + x + 4343 + + + + + x + 4344 + + + + + x + 4345 + + + + + x + 4346 + + + + + x + 4347 + + + + + x + 4348 + + + + + x + 4349 + + + + + x + 4350 + + + + + x + 4351 + + + + + x + 4352 + + + + + x + 4353 + + + + + x + 4354 + + + + + x + 4355 + + + + + x + 4356 + + + + + x + 4357 + + + + + x + 4358 + + + + + x + 4359 + + + + + x + 4360 + + + + + x + 4361 + + + + + x + 4362 + + + + + x + 4363 + + + + + x + 4364 + + + + + x + 4365 + + + + + x + 4366 + + + + + x + 4367 + + + + + x + 4368 + + + + + x + 4369 + + + + + x + 4370 + + + + + x + 4371 + + + + + x + 4372 + + + + + x + 4373 + + + + + x + 4374 + + + + + x + 4375 + + + + + x + 4376 + + + + + x + 4377 + + + + + x + 4378 + + + + + x + 4379 + + + + + x + 4380 + + + + + x + 4381 + + + + + x + 4382 + + + + + x + 4383 + + + + + x + 4384 + + + + + x + 4385 + + + + + x + 4386 + + + + + x + 4387 + + + + + x + 4388 + + + + + x + 4389 + + + + + x + 4390 + + + + + x + 4391 + + + + + x + 4392 + + + + + x + 4393 + + + + + x + 4394 + + + + + x + 4395 + + + + + x + 4396 + + + + + x + 4397 + + + + + x + 4398 + + + + + x + 4399 + + + + + x + 4400 + + + + + x + 4401 + + + + + x + 4402 + + + + + x + 4403 + + + + + x + 4404 + + + + + x + 4405 + + + + + x + 4406 + + + + + x + 4407 + + + + + x + 4408 + + + + + x + 4409 + + + + + x + 4410 + + + + + x + 4411 + + + + + x + 4412 + + + + + x + 4413 + + + + + x + 4414 + + + + + x + 4415 + + + + + x + 4416 + + + + + x + 4417 + + + + + x + 4418 + + + + + x + 4419 + + + + + x + 4420 + + + + + x + 4421 + + + + + x + 4422 + + + + + x + 4423 + + + + + x + 4424 + + + + + x + 4425 + + + + + x + 4426 + + + + + x + 4427 + + + + + x + 4428 + + + + + x + 4429 + + + + + x + 4430 + + + + + x + 4431 + + + + + x + 4432 + + + + + x + 4433 + + + + + x + 4434 + + + + + x + 4435 + + + + + x + 4436 + + + + + x + 4437 + + + + + x + 4438 + + + + + x + 4439 + + + + + x + 4440 + + + + + x + 4441 + + + + + x + 4442 + + + + + x + 4443 + + + + + x + 4444 + + + + + x + 4445 + + + + + x + 4446 + + + + + x + 4447 + + + + + x + 4448 + + + + + x + 4449 + + + + + x + 4450 + + + + + x + 4451 + + + + + x + 4452 + + + + + x + 4453 + + + + + x + 4454 + + + + + x + 4455 + + + + + x + 4456 + + + + + x + 4457 + + + + + x + 4458 + + + + + x + 4459 + + + + + x + 4460 + + + + + x + 4461 + + + + + x + 4462 + + + + + x + 4463 + + + + + x + 4464 + + + + + x + 4465 + + + + + x + 4466 + + + + + x + 4467 + + + + + x + 4468 + + + + + x + 4469 + + + + + x + 4470 + + + + + x + 4471 + + + + + x + 4472 + + + + + x + 4473 + + + + + x + 4474 + + + + + x + 4475 + + + + + x + 4476 + + + + + x + 4477 + + + + + x + 4478 + + + + + x + 4479 + + + + + x + 4480 + + + + + x + 4481 + + + + + x + 4482 + + + + + x + 4483 + + + + + x + 4484 + + + + + x + 4485 + + + + + x + 4486 + + + + + x + 4487 + + + + + x + 4488 + + + + + x + 4489 + + + + + x + 4490 + + + + + x + 4491 + + + + + x + 4492 + + + + + x + 4493 + + + + + x + 4494 + + + + + x + 4495 + + + + + x + 4496 + + + + + x + 4497 + + + + + x + 4498 + + + + + x + 4499 + + + + + x + 4500 + + + + + x + 4501 + + + + + x + 4502 + + + + + x + 4503 + + + + + x + 4504 + + + + + x + 4505 + + + + + x + 4506 + + + + + x + 4507 + + + + + x + 4508 + + + + + x + 4509 + + + + + x + 4510 + + + + + x + 4511 + + + + + x + 4512 + + + + + x + 4513 + + + + + x + 4514 + + + + + x + 4515 + + + + + x + 4516 + + + + + x + 4517 + + + + + x + 4518 + + + + + x + 4519 + + + + + x + 4520 + + + + + x + 4521 + + + + + x + 4522 + + + + + x + 4523 + + + + + x + 4524 + + + + + x + 4525 + + + + + x + 4526 + + + + + x + 4527 + + + + + x + 4528 + + + + + x + 4529 + + + + + x + 4530 + + + + + x + 4531 + + + + + x + 4532 + + + + + x + 4533 + + + + + x + 4534 + + + + + x + 4535 + + + + + x + 4536 + + + + + x + 4537 + + + + + x + 4538 + + + + + x + 4539 + + + + + x + 4540 + + + + + x + 4541 + + + + + x + 4542 + + + + + x + 4543 + + + + + x + 4544 + + + + + x + 4545 + + + + + x + 4546 + + + + + x + 4547 + + + + + x + 4548 + + + + + x + 4549 + + + + + x + 4550 + + + + + x + 4551 + + + + + x + 4552 + + + + + x + 4553 + + + + + x + 4554 + + + + + x + 4555 + + + + + x + 4556 + + + + + x + 4557 + + + + + x + 4558 + + + + + x + 4559 + + + + + x + 4560 + + + + + x + 4561 + + + + + x + 4562 + + + + + x + 4563 + + + + + x + 4564 + + + + + x + 4565 + + + + + x + 4566 + + + + + x + 4567 + + + + + x + 4568 + + + + + x + 4569 + + + + + x + 4570 + + + + + x + 4571 + + + + + x + 4572 + + + + + x + 4573 + + + + + x + 4574 + + + + + x + 4575 + + + + + x + 4576 + + + + + x + 4577 + + + + + x + 4578 + + + + + x + 4579 + + + + + x + 4580 + + + + + x + 4581 + + + + + x + 4582 + + + + + x + 4583 + + + + + x + 4584 + + + + + x + 4585 + + + + + x + 4586 + + + + + x + 4587 + + + + + x + 4588 + + + + + x + 4589 + + + + + x + 4590 + + + + + x + 4591 + + + + + x + 4592 + + + + + x + 4593 + + + + + x + 4594 + + + + + x + 4595 + + + + + x + 4596 + + + + + x + 4597 + + + + + x + 4598 + + + + + x + 4599 + + + + + x + 4600 + + + + + x + 4601 + + + + + x + 4602 + + + + + x + 4603 + + + + + x + 4604 + + + + + x + 4605 + + + + + x + 4606 + + + + + x + 4607 + + + + + x + 4608 + + + + + x + 4609 + + + + + x + 4610 + + + + + x + 4611 + + + + + x + 4612 + + + + + x + 4613 + + + + + x + 4614 + + + + + x + 4615 + + + + + x + 4616 + + + + + x + 4617 + + + + + x + 4618 + + + + + x + 4619 + + + + + x + 4620 + + + + + x + 4621 + + + + + x + 4622 + + + + + x + 4623 + + + + + x + 4624 + + + + + x + 4625 + + + + + x + 4626 + + + + + x + 4627 + + + + + x + 4628 + + + + + x + 4629 + + + + + x + 4630 + + + + + x + 4631 + + + + + x + 4632 + + + + + x + 4633 + + + + + x + 4634 + + + + + x + 4635 + + + + + x + 4636 + + + + + x + 4637 + + + + + x + 4638 + + + + + x + 4639 + + + + + x + 4640 + + + + + x + 4641 + + + + + x + 4642 + + + + + x + 4643 + + + + + x + 4644 + + + + + x + 4645 + + + + + x + 4646 + + + + + x + 4647 + + + + + x + 4648 + + + + + x + 4649 + + + + + x + 4650 + + + + + x + 4651 + + + + + x + 4652 + + + + + x + 4653 + + + + + x + 4654 + + + + + x + 4655 + + + + + x + 4656 + + + + + x + 4657 + + + + + x + 4658 + + + + + x + 4659 + + + + + x + 4660 + + + + + x + 4661 + + + + + x + 4662 + + + + + x + 4663 + + + + + x + 4664 + + + + + x + 4665 + + + + + x + 4666 + + + + + x + 4667 + + + + + x + 4668 + + + + + x + 4669 + + + + + x + 4670 + + + + + x + 4671 + + + + + x + 4672 + + + + + x + 4673 + + + + + x + 4674 + + + + + x + 4675 + + + + + x + 4676 + + + + + x + 4677 + + + + + x + 4678 + + + + + x + 4679 + + + + + x + 4680 + + + + + x + 4681 + + + + + x + 4682 + + + + + x + 4683 + + + + + x + 4684 + + + + + x + 4685 + + + + + x + 4686 + + + + + x + 4687 + + + + + x + 4688 + + + + + x + 4689 + + + + + x + 4690 + + + + + x + 4691 + + + + + x + 4692 + + + + + x + 4693 + + + + + x + 4694 + + + + + x + 4695 + + + + + x + 4696 + + + + + x + 4697 + + + + + x + 4698 + + + + + x + 4699 + + + + + x + 4700 + + + + + x + 4701 + + + + + x + 4702 + + + + + x + 4703 + + + + + x + 4704 + + + + + x + 4705 + + + + + x + 4706 + + + + + x + 4707 + + + + + x + 4708 + + + + + x + 4709 + + + + + x + 4710 + + + + + x + 4711 + + + + + x + 4712 + + + + + x + 4713 + + + + + x + 4714 + + + + + x + 4715 + + + + + x + 4716 + + + + + x + 4717 + + + + + x + 4718 + + + + + x + 4719 + + + + + x + 4720 + + + + + x + 4721 + + + + + x + 4722 + + + + + x + 4723 + + + + + x + 4724 + + + + + x + 4725 + + + + + x + 4726 + + + + + x + 4727 + + + + + x + 4728 + + + + + x + 4729 + + + + + x + 4730 + + + + + x + 4731 + + + + + x + 4732 + + + + + x + 4733 + + + + + x + 4734 + + + + + x + 4735 + + + + + x + 4736 + + + + + x + 4737 + + + + + x + 4738 + + + + + x + 4739 + + + + + x + 4740 + + + + + x + 4741 + + + + + x + 4742 + + + + + x + 4743 + + + + + x + 4744 + + + + + x + 4745 + + + + + x + 4746 + + + + + x + 4747 + + + + + x + 4748 + + + + + x + 4749 + + + + + x + 4750 + + + + + x + 4751 + + + + + x + 4752 + + + + + x + 4753 + + + + + x + 4754 + + + + + x + 4755 + + + + + x + 4756 + + + + + x + 4757 + + + + + x + 4758 + + + + + x + 4759 + + + + + x + 4760 + + + + + x + 4761 + + + + + x + 4762 + + + + + x + 4763 + + + + + x + 4764 + + + + + x + 4765 + + + + + x + 4766 + + + + + x + 4767 + + + + + x + 4768 + + + + + x + 4769 + + + + + x + 4770 + + + + + x + 4771 + + + + + x + 4772 + + + + + x + 4773 + + + + + x + 4774 + + + + + x + 4775 + + + + + x + 4776 + + + + + x + 4777 + + + + + x + 4778 + + + + + x + 4779 + + + + + x + 4780 + + + + + x + 4781 + + + + + x + 4782 + + + + + x + 4783 + + + + + x + 4784 + + + + + x + 4785 + + + + + x + 4786 + + + + + x + 4787 + + + + + x + 4788 + + + + + x + 4789 + + + + + x + 4790 + + + + + x + 4791 + + + + + x + 4792 + + + + + x + 4793 + + + + + x + 4794 + + + + + x + 4795 + + + + + x + 4796 + + + + + x + 4797 + + + + + x + 4798 + + + + + x + 4799 + + + + + x + 4800 + + + + + x + 4801 + + + + + x + 4802 + + + + + x + 4803 + + + + + x + 4804 + + + + + x + 4805 + + + + + x + 4806 + + + + + x + 4807 + + + + + x + 4808 + + + + + x + 4809 + + + + + x + 4810 + + + + + x + 4811 + + + + + x + 4812 + + + + + x + 4813 + + + + + x + 4814 + + + + + x + 4815 + + + + + x + 4816 + + + + + x + 4817 + + + + + x + 4818 + + + + + x + 4819 + + + + + x + 4820 + + + + + x + 4821 + + + + + x + 4822 + + + + + x + 4823 + + + + + x + 4824 + + + + + x + 4825 + + + + + x + 4826 + + + + + x + 4827 + + + + + x + 4828 + + + + + x + 4829 + + + + + x + 4830 + + + + + x + 4831 + + + + + x + 4832 + + + + + x + 4833 + + + + + x + 4834 + + + + + x + 4835 + + + + + x + 4836 + + + + + x + 4837 + + + + + x + 4838 + + + + + x + 4839 + + + + + x + 4840 + + + + + x + 4841 + + + + + x + 4842 + + + + + x + 4843 + + + + + x + 4844 + + + + + x + 4845 + + + + + x + 4846 + + + + + x + 4847 + + + + + x + 4848 + + + + + x + 4849 + + + + + x + 4850 + + + + + x + 4851 + + + + + x + 4852 + + + + + x + 4853 + + + + + x + 4854 + + + + + x + 4855 + + + + + x + 4856 + + + + + x + 4857 + + + + + x + 4858 + + + + + x + 4859 + + + + + x + 4860 + + + + + x + 4861 + + + + + x + 4862 + + + + + x + 4863 + + + + + x + 4864 + + + + + x + 4865 + + + + + x + 4866 + + + + + x + 4867 + + + + + x + 4868 + + + + + x + 4869 + + + + + x + 4870 + + + + + x + 4871 + + + + + x + 4872 + + + + + x + 4873 + + + + + x + 4874 + + + + + x + 4875 + + + + + x + 4876 + + + + + x + 4877 + + + + + x + 4878 + + + + + x + 4879 + + + + + x + 4880 + + + + + x + 4881 + + + + + x + 4882 + + + + + x + 4883 + + + + + x + 4884 + + + + + x + 4885 + + + + + x + 4886 + + + + + x + 4887 + + + + + x + 4888 + + + + + x + 4889 + + + + + x + 4890 + + + + + x + 4891 + + + + + x + 4892 + + + + + x + 4893 + + + + + x + 4894 + + + + + x + 4895 + + + + + x + 4896 + + + + + x + 4897 + + + + + x + 4898 + + + + + x + 4899 + + + + + x + 4900 + + + + + x + 4901 + + + + + x + 4902 + + + + + x + 4903 + + + + + x + 4904 + + + + + x + 4905 + + + + + x + 4906 + + + + + x + 4907 + + + + + x + 4908 + + + + + x + 4909 + + + + + x + 4910 + + + + + x + 4911 + + + + + x + 4912 + + + + + x + 4913 + + + + + x + 4914 + + + + + x + 4915 + + + + + x + 4916 + + + + + x + 4917 + + + + + x + 4918 + + + + + x + 4919 + + + + + x + 4920 + + + + + x + 4921 + + + + + x + 4922 + + + + + x + 4923 + + + + + x + 4924 + + + + + x + 4925 + + + + + x + 4926 + + + + + x + 4927 + + + + + x + 4928 + + + + + x + 4929 + + + + + x + 4930 + + + + + x + 4931 + + + + + x + 4932 + + + + + x + 4933 + + + + + x + 4934 + + + + + x + 4935 + + + + + x + 4936 + + + + + x + 4937 + + + + + x + 4938 + + + + + x + 4939 + + + + + x + 4940 + + + + + x + 4941 + + + + + x + 4942 + + + + + x + 4943 + + + + + x + 4944 + + + + + x + 4945 + + + + + x + 4946 + + + + + x + 4947 + + + + + x + 4948 + + + + + x + 4949 + + + + + x + 4950 + + + + + x + 4951 + + + + + x + 4952 + + + + + x + 4953 + + + + + x + 4954 + + + + + x + 4955 + + + + + x + 4956 + + + + + x + 4957 + + + + + x + 4958 + + + + + x + 4959 + + + + + x + 4960 + + + + + x + 4961 + + + + + x + 4962 + + + + + x + 4963 + + + + + x + 4964 + + + + + x + 4965 + + + + + x + 4966 + + + + + x + 4967 + + + + + x + 4968 + + + + + x + 4969 + + + + + x + 4970 + + + + + x + 4971 + + + + + x + 4972 + + + + + x + 4973 + + + + + x + 4974 + + + + + x + 4975 + + + + + x + 4976 + + + + + x + 4977 + + + + + x + 4978 + + + + + x + 4979 + + + + + x + 4980 + + + + + x + 4981 + + + + + x + 4982 + + + + + x + 4983 + + + + + x + 4984 + + + + + x + 4985 + + + + + x + 4986 + + + + + x + 4987 + + + + + x + 4988 + + + + + x + 4989 + + + + + x + 4990 + + + + + x + 4991 + + + + + x + 4992 + + + + + x + 4993 + + + + + x + 4994 + + + + + x + 4995 + + + + + x + 4996 + + + + + x + 4997 + + + + + x + 4998 + + + + + x + 4999 + + + + + x + 5000 + + + + + x + 5001 + + + + + x + 5002 + + + + + x + 5003 + + + + + x + 5004 + + + + + x + 5005 + + + + + x + 5006 + + + + + x + 5007 + + + + + x + 5008 + + + + + x + 5009 + + + + + x + 5010 + + + + + x + 5011 + + + + + x + 5012 + + + + + x + 5013 + + + + + x + 5014 + + + + + x + 5015 + + + + + x + 5016 + + + + + x + 5017 + + + + + x + 5018 + + + + + x + 5019 + + + + + x + 5020 + + + + + x + 5021 + + + + + x + 5022 + + + + + x + 5023 + + + + + x + 5024 + + + + + x + 5025 + + + + + x + 5026 + + + + + x + 5027 + + + + + x + 5028 + + + + + x + 5029 + + + + + x + 5030 + + + + + x + 5031 + + + + + x + 5032 + + + + + x + 5033 + + + + + x + 5034 + + + + + x + 5035 + + + + + x + 5036 + + + + + x + 5037 + + + + + x + 5038 + + + + + x + 5039 + + + + + x + 5040 + + + + + x + 5041 + + + + + x + 5042 + + + + + x + 5043 + + + + + x + 5044 + + + + + x + 5045 + + + + + x + 5046 + + + + + x + 5047 + + + + + x + 5048 + + + + + x + 5049 + + + + + x + 5050 + + + + + x + 5051 + + + + + x + 5052 + + + + + x + 5053 + + + + + x + 5054 + + + + + x + 5055 + + + + + x + 5056 + + + + + x + 5057 + + + + + x + 5058 + + + + + x + 5059 + + + + + x + 5060 + + + + + x + 5061 + + + + + x + 5062 + + + + + x + 5063 + + + + + x + 5064 + + + + + x + 5065 + + + + + x + 5066 + + + + + x + 5067 + + + + + x + 5068 + + + + + x + 5069 + + + + + x + 5070 + + + + + x + 5071 + + + + + x + 5072 + + + + + x + 5073 + + + + + x + 5074 + + + + + x + 5075 + + + + + x + 5076 + + + + + x + 5077 + + + + + x + 5078 + + + + + x + 5079 + + + + + x + 5080 + + + + + x + 5081 + + + + + x + 5082 + + + + + x + 5083 + + + + + x + 5084 + + + + + x + 5085 + + + + + x + 5086 + + + + + x + 5087 + + + + + x + 5088 + + + + + x + 5089 + + + + + x + 5090 + + + + + x + 5091 + + + + + x + 5092 + + + + + x + 5093 + + + + + x + 5094 + + + + + x + 5095 + + + + + x + 5096 + + + + + x + 5097 + + + + + x + 5098 + + + + + x + 5099 + + + + + x + 5100 + + + + + x + 5101 + + + + + x + 5102 + + + + + x + 5103 + + + + + x + 5104 + + + + + x + 5105 + + + + + x + 5106 + + + + + x + 5107 + + + + + x + 5108 + + + + + x + 5109 + + + + + x + 5110 + + + + + x + 5111 + + + + + x + 5112 + + + + + x + 5113 + + + + + x + 5114 + + + + + x + 5115 + + + + + x + 5116 + + + + + x + 5117 + + + + + x + 5118 + + + + + x + 5119 + + + + + x + 5120 + + + + + x + 5121 + + + + + x + 5122 + + + + + x + 5123 + + + + + x + 5124 + + + + + x + 5125 + + + + + x + 5126 + + + + + x + 5127 + + + + + x + 5128 + + + + + x + 5129 + + + + + x + 5130 + + + + + x + 5131 + + + + + x + 5132 + + + + + x + 5133 + + + + + x + 5134 + + + + + x + 5135 + + + + + x + 5136 + + + + + x + 5137 + + + + + x + 5138 + + + + + x + 5139 + + + + + x + 5140 + + + + + x + 5141 + + + + + x + 5142 + + + + + x + 5143 + + + + + x + 5144 + + + + + x + 5145 + + + + + x + 5146 + + + + + x + 5147 + + + + + x + 5148 + + + + + x + 5149 + + + + + x + 5150 + + + + + x + 5151 + + + + + x + 5152 + + + + + x + 5153 + + + + + x + 5154 + + + + + x + 5155 + + + + + x + 5156 + + + + + x + 5157 + + + + + x + 5158 + + + + + x + 5159 + + + + + x + 5160 + + + + + x + 5161 + + + + + x + 5162 + + + + + x + 5163 + + + + + x + 5164 + + + + + x + 5165 + + + + + x + 5166 + + + + + x + 5167 + + + + + x + 5168 + + + + + x + 5169 + + + + + x + 5170 + + + + + x + 5171 + + + + + x + 5172 + + + + + x + 5173 + + + + + x + 5174 + + + + + x + 5175 + + + + + x + 5176 + + + + + x + 5177 + + + + + x + 5178 + + + + + x + 5179 + + + + + x + 5180 + + + + + x + 5181 + + + + + x + 5182 + + + + + x + 5183 + + + + + x + 5184 + + + + + x + 5185 + + + + + x + 5186 + + + + + x + 5187 + + + + + x + 5188 + + + + + x + 5189 + + + + + x + 5190 + + + + + x + 5191 + + + + + x + 5192 + + + + + x + 5193 + + + + + x + 5194 + + + + + x + 5195 + + + + + x + 5196 + + + + + x + 5197 + + + + + x + 5198 + + + + + x + 5199 + + + + + x + 5200 + + + + + x + 5201 + + + + + x + 5202 + + + + + x + 5203 + + + + + x + 5204 + + + + + x + 5205 + + + + + x + 5206 + + + + + x + 5207 + + + + + x + 5208 + + + + + x + 5209 + + + + + x + 5210 + + + + + x + 5211 + + + + + x + 5212 + + + + + x + 5213 + + + + + x + 5214 + + + + + x + 5215 + + + + + x + 5216 + + + + + x + 5217 + + + + + x + 5218 + + + + + x + 5219 + + + + + x + 5220 + + + + + x + 5221 + + + + + x + 5222 + + + + + x + 5223 + + + + + x + 5224 + + + + + x + 5225 + + + + + x + 5226 + + + + + x + 5227 + + + + + x + 5228 + + + + + x + 5229 + + + + + x + 5230 + + + + + x + 5231 + + + + + x + 5232 + + + + + x + 5233 + + + + + x + 5234 + + + + + x + 5235 + + + + + x + 5236 + + + + + x + 5237 + + + + + x + 5238 + + + + + x + 5239 + + + + + x + 5240 + + + + + x + 5241 + + + + + x + 5242 + + + + + x + 5243 + + + + + x + 5244 + + + + + x + 5245 + + + + + x + 5246 + + + + + x + 5247 + + + + + x + 5248 + + + + + x + 5249 + + + + + x + 5250 + + + + + x + 5251 + + + + + x + 5252 + + + + + x + 5253 + + + + + x + 5254 + + + + + x + 5255 + + + + + x + 5256 + + + + + x + 5257 + + + + + x + 5258 + + + + + x + 5259 + + + + + x + 5260 + + + + + x + 5261 + + + + + x + 5262 + + + + + x + 5263 + + + + + x + 5264 + + + + + x + 5265 + + + + + x + 5266 + + + + + x + 5267 + + + + + x + 5268 + + + + + x + 5269 + + + + + x + 5270 + + + + + x + 5271 + + + + + x + 5272 + + + + + x + 5273 + + + + + x + 5274 + + + + + x + 5275 + + + + + x + 5276 + + + + + x + 5277 + + + + + x + 5278 + + + + + x + 5279 + + + + + x + 5280 + + + + + x + 5281 + + + + + x + 5282 + + + + + x + 5283 + + + + + x + 5284 + + + + + x + 5285 + + + + + x + 5286 + + + + + x + 5287 + + + + + x + 5288 + + + + + x + 5289 + + + + + x + 5290 + + + + + x + 5291 + + + + + x + 5292 + + + + + x + 5293 + + + + + x + 5294 + + + + + x + 5295 + + + + + x + 5296 + + + + + x + 5297 + + + + + x + 5298 + + + + + x + 5299 + + + + + x + 5300 + + + + + x + 5301 + + + + + x + 5302 + + + + + x + 5303 + + + + + x + 5304 + + + + + x + 5305 + + + + + x + 5306 + + + + + x + 5307 + + + + + x + 5308 + + + + + x + 5309 + + + + + x + 5310 + + + + + x + 5311 + + + + + x + 5312 + + + + + x + 5313 + + + + + x + 5314 + + + + + x + 5315 + + + + + x + 5316 + + + + + x + 5317 + + + + + x + 5318 + + + + + x + 5319 + + + + + x + 5320 + + + + + x + 5321 + + + + + x + 5322 + + + + + x + 5323 + + + + + x + 5324 + + + + + x + 5325 + + + + + x + 5326 + + + + + x + 5327 + + + + + x + 5328 + + + + + x + 5329 + + + + + x + 5330 + + + + + x + 5331 + + + + + x + 5332 + + + + + x + 5333 + + + + + x + 5334 + + + + + x + 5335 + + + + + x + 5336 + + + + + x + 5337 + + + + + x + 5338 + + + + + x + 5339 + + + + + x + 5340 + + + + + x + 5341 + + + + + x + 5342 + + + + + x + 5343 + + + + + x + 5344 + + + + + x + 5345 + + + + + x + 5346 + + + + + x + 5347 + + + + + x + 5348 + + + + + x + 5349 + + + + + x + 5350 + + + + + x + 5351 + + + + + x + 5352 + + + + + x + 5353 + + + + + x + 5354 + + + + + x + 5355 + + + + + x + 5356 + + + + + x + 5357 + + + + + x + 5358 + + + + + x + 5359 + + + + + x + 5360 + + + + + x + 5361 + + + + + x + 5362 + + + + + x + 5363 + + + + + x + 5364 + + + + + x + 5365 + + + + + x + 5366 + + + + + x + 5367 + + + + + x + 5368 + + + + + x + 5369 + + + + + x + 5370 + + + + + x + 5371 + + + + + x + 5372 + + + + + x + 5373 + + + + + x + 5374 + + + + + x + 5375 + + + + + x + 5376 + + + + + x + 5377 + + + + + x + 5378 + + + + + x + 5379 + + + + + x + 5380 + + + + + x + 5381 + + + + + x + 5382 + + + + + x + 5383 + + + + + x + 5384 + + + + + x + 5385 + + + + + x + 5386 + + + + + x + 5387 + + + + + x + 5388 + + + + + x + 5389 + + + + + x + 5390 + + + + + x + 5391 + + + + + x + 5392 + + + + + x + 5393 + + + + + x + 5394 + + + + + x + 5395 + + + + + x + 5396 + + + + + x + 5397 + + + + + x + 5398 + + + + + x + 5399 + + + + + x + 5400 + + + + + x + 5401 + + + + + x + 5402 + + + + + x + 5403 + + + + + x + 5404 + + + + + x + 5405 + + + + + x + 5406 + + + + + x + 5407 + + + + + x + 5408 + + + + + x + 5409 + + + + + x + 5410 + + + + + x + 5411 + + + + + x + 5412 + + + + + x + 5413 + + + + + x + 5414 + + + + + x + 5415 + + + + + x + 5416 + + + + + x + 5417 + + + + + x + 5418 + + + + + x + 5419 + + + + + x + 5420 + + + + + x + 5421 + + + + + x + 5422 + + + + + x + 5423 + + + + + x + 5424 + + + + + x + 5425 + + + + + x + 5426 + + + + + x + 5427 + + + + + x + 5428 + + + + + x + 5429 + + + + + x + 5430 + + + + + x + 5431 + + + + + x + 5432 + + + + + x + 5433 + + + + + x + 5434 + + + + + x + 5435 + + + + + x + 5436 + + + + + x + 5437 + + + + + x + 5438 + + + + + x + 5439 + + + + + x + 5440 + + + + + x + 5441 + + + + + x + 5442 + + + + + x + 5443 + + + + + x + 5444 + + + + + x + 5445 + + + + + x + 5446 + + + + + x + 5447 + + + + + x + 5448 + + + + + x + 5449 + + + + + x + 5450 + + + + + x + 5451 + + + + + x + 5452 + + + + + x + 5453 + + + + + x + 5454 + + + + + x + 5455 + + + + + x + 5456 + + + + + x + 5457 + + + + + x + 5458 + + + + + x + 5459 + + + + + x + 5460 + + + + + x + 5461 + + + + + x + 5462 + + + + + x + 5463 + + + + + x + 5464 + + + + + x + 5465 + + + + + x + 5466 + + + + + x + 5467 + + + + + x + 5468 + + + + + x + 5469 + + + + + x + 5470 + + + + + x + 5471 + + + + + x + 5472 + + + + + x + 5473 + + + + + x + 5474 + + + + + x + 5475 + + + + + x + 5476 + + + + + x + 5477 + + + + + x + 5478 + + + + + x + 5479 + + + + + x + 5480 + + + + + x + 5481 + + + + + x + 5482 + + + + + x + 5483 + + + + + x + 5484 + + + + + x + 5485 + + + + + x + 5486 + + + + + x + 5487 + + + + + x + 5488 + + + + + x + 5489 + + + + + x + 5490 + + + + + x + 5491 + + + + + x + 5492 + + + + + x + 5493 + + + + + x + 5494 + + + + + x + 5495 + + + + + x + 5496 + + + + + x + 5497 + + + + + x + 5498 + + + + + x + 5499 + + + + + x + 5500 + + + + + x + 5501 + + + + + x + 5502 + + + + + x + 5503 + + + + + x + 5504 + + + + + x + 5505 + + + + + x + 5506 + + + + + x + 5507 + + + + + x + 5508 + + + + + x + 5509 + + + + + x + 5510 + + + + + x + 5511 + + + + + x + 5512 + + + + + x + 5513 + + + + + x + 5514 + + + + + x + 5515 + + + + + x + 5516 + + + + + x + 5517 + + + + + x + 5518 + + + + + x + 5519 + + + + + x + 5520 + + + + + x + 5521 + + + + + x + 5522 + + + + + x + 5523 + + + + + x + 5524 + + + + + x + 5525 + + + + + x + 5526 + + + + + x + 5527 + + + + + x + 5528 + + + + + x + 5529 + + + + + x + 5530 + + + + + x + 5531 + + + + + x + 5532 + + + + + x + 5533 + + + + + x + 5534 + + + + + x + 5535 + + + + + x + 5536 + + + + + x + 5537 + + + + + x + 5538 + + + + + x + 5539 + + + + + x + 5540 + + + + + x + 5541 + + + + + x + 5542 + + + + + x + 5543 + + + + + x + 5544 + + + + + x + 5545 + + + + + x + 5546 + + + + + x + 5547 + + + + + x + 5548 + + + + + x + 5549 + + + + + x + 5550 + + + + + x + 5551 + + + + + x + 5552 + + + + + x + 5553 + + + + + x + 5554 + + + + + x + 5555 + + + + + x + 5556 + + + + + x + 5557 + + + + + x + 5558 + + + + + x + 5559 + + + + + x + 5560 + + + + + x + 5561 + + + + + x + 5562 + + + + + x + 5563 + + + + + x + 5564 + + + + + x + 5565 + + + + + x + 5566 + + + + + x + 5567 + + + + + x + 5568 + + + + + x + 5569 + + + + + x + 5570 + + + + + x + 5571 + + + + + x + 5572 + + + + + x + 5573 + + + + + x + 5574 + + + + + x + 5575 + + + + + x + 5576 + + + + + x + 5577 + + + + + x + 5578 + + + + + x + 5579 + + + + + x + 5580 + + + + + x + 5581 + + + + + x + 5582 + + + + + x + 5583 + + + + + x + 5584 + + + + + x + 5585 + + + + + x + 5586 + + + + + x + 5587 + + + + + x + 5588 + + + + + x + 5589 + + + + + x + 5590 + + + + + x + 5591 + + + + + x + 5592 + + + + + x + 5593 + + + + + x + 5594 + + + + + x + 5595 + + + + + x + 5596 + + + + + x + 5597 + + + + + x + 5598 + + + + + x + 5599 + + + + + x + 5600 + + + + + x + 5601 + + + + + x + 5602 + + + + + x + 5603 + + + + + x + 5604 + + + + + x + 5605 + + + + + x + 5606 + + + + + x + 5607 + + + + + x + 5608 + + + + + x + 5609 + + + + + x + 5610 + + + + + x + 5611 + + + + + x + 5612 + + + + + x + 5613 + + + + + x + 5614 + + + + + x + 5615 + + + + + x + 5616 + + + + + x + 5617 + + + + + x + 5618 + + + + + x + 5619 + + + + + x + 5620 + + + + + x + 5621 + + + + + x + 5622 + + + + + x + 5623 + + + + + x + 5624 + + + + + x + 5625 + + + + + x + 5626 + + + + + x + 5627 + + + + + x + 5628 + + + + + x + 5629 + + + + + x + 5630 + + + + + x + 5631 + + + + + x + 5632 + + + + + x + 5633 + + + + + x + 5634 + + + + + x + 5635 + + + + + x + 5636 + + + + + x + 5637 + + + + + x + 5638 + + + + + x + 5639 + + + + + x + 5640 + + + + + x + 5641 + + + + + x + 5642 + + + + + x + 5643 + + + + + x + 5644 + + + + + x + 5645 + + + + + x + 5646 + + + + + x + 5647 + + + + + x + 5648 + + + + + x + 5649 + + + + + x + 5650 + + + + + x + 5651 + + + + + x + 5652 + + + + + x + 5653 + + + + + x + 5654 + + + + + x + 5655 + + + + + x + 5656 + + + + + x + 5657 + + + + + x + 5658 + + + + + x + 5659 + + + + + x + 5660 + + + + + x + 5661 + + + + + x + 5662 + + + + + x + 5663 + + + + + x + 5664 + + + + + x + 5665 + + + + + x + 5666 + + + + + x + 5667 + + + + + x + 5668 + + + + + x + 5669 + + + + + x + 5670 + + + + + x + 5671 + + + + + x + 5672 + + + + + x + 5673 + + + + + x + 5674 + + + + + x + 5675 + + + + + x + 5676 + + + + + x + 5677 + + + + + x + 5678 + + + + + x + 5679 + + + + + x + 5680 + + + + + x + 5681 + + + + + x + 5682 + + + + + x + 5683 + + + + + x + 5684 + + + + + x + 5685 + + + + + x + 5686 + + + + + x + 5687 + + + + + x + 5688 + + + + + x + 5689 + + + + + x + 5690 + + + + + x + 5691 + + + + + x + 5692 + + + + + x + 5693 + + + + + x + 5694 + + + + + x + 5695 + + + + + x + 5696 + + + + + x + 5697 + + + + + x + 5698 + + + + + x + 5699 + + + + + x + 5700 + + + + + x + 5701 + + + + + x + 5702 + + + + + x + 5703 + + + + + x + 5704 + + + + + x + 5705 + + + + + x + 5706 + + + + + x + 5707 + + + + + x + 5708 + + + + + x + 5709 + + + + + x + 5710 + + + + + x + 5711 + + + + + x + 5712 + + + + + x + 5713 + + + + + x + 5714 + + + + + x + 5715 + + + + + x + 5716 + + + + + x + 5717 + + + + + x + 5718 + + + + + x + 5719 + + + + + x + 5720 + + + + + x + 5721 + + + + + x + 5722 + + + + + x + 5723 + + + + + x + 5724 + + + + + x + 5725 + + + + + x + 5726 + + + + + x + 5727 + + + + + x + 5728 + + + + + x + 5729 + + + + + x + 5730 + + + + + x + 5731 + + + + + x + 5732 + + + + + x + 5733 + + + + + x + 5734 + + + + + x + 5735 + + + + + x + 5736 + + + + + x + 5737 + + + + + x + 5738 + + + + + x + 5739 + + + + + x + 5740 + + + + + x + 5741 + + + + + x + 5742 + + + + + x + 5743 + + + + + x + 5744 + + + + + x + 5745 + + + + + x + 5746 + + + + + x + 5747 + + + + + x + 5748 + + + + + x + 5749 + + + + + x + 5750 + + + + + x + 5751 + + + + + x + 5752 + + + + + x + 5753 + + + + + x + 5754 + + + + + x + 5755 + + + + + x + 5756 + + + + + x + 5757 + + + + + x + 5758 + + + + + x + 5759 + + + + + x + 5760 + + + + + x + 5761 + + + + + x + 5762 + + + + + x + 5763 + + + + + x + 5764 + + + + + x + 5765 + + + + + x + 5766 + + + + + x + 5767 + + + + + x + 5768 + + + + + x + 5769 + + + + + x + 5770 + + + + + x + 5771 + + + + + x + 5772 + + + + + x + 5773 + + + + + x + 5774 + + + + + x + 5775 + + + + + x + 5776 + + + + + x + 5777 + + + + + x + 5778 + + + + + x + 5779 + + + + + x + 5780 + + + + + x + 5781 + + + + + x + 5782 + + + + + x + 5783 + + + + + x + 5784 + + + + + x + 5785 + + + + + x + 5786 + + + + + x + 5787 + + + + + x + 5788 + + + + + x + 5789 + + + + + x + 5790 + + + + + x + 5791 + + + + + x + 5792 + + + + + x + 5793 + + + + + x + 5794 + + + + + x + 5795 + + + + + x + 5796 + + + + + x + 5797 + + + + + x + 5798 + + + + + x + 5799 + + + + + x + 5800 + + + + + x + 5801 + + + + + x + 5802 + + + + + x + 5803 + + + + + x + 5804 + + + + + x + 5805 + + + + + x + 5806 + + + + + x + 5807 + + + + + x + 5808 + + + + + x + 5809 + + + + + x + 5810 + + + + + x + 5811 + + + + + x + 5812 + + + + + x + 5813 + + + + + x + 5814 + + + + + x + 5815 + + + + + x + 5816 + + + + + x + 5817 + + + + + x + 5818 + + + + + x + 5819 + + + + + x + 5820 + + + + + x + 5821 + + + + + x + 5822 + + + + + x + 5823 + + + + + x + 5824 + + + + + x + 5825 + + + + + x + 5826 + + + + + x + 5827 + + + + + x + 5828 + + + + + x + 5829 + + + + + x + 5830 + + + + + x + 5831 + + + + + x + 5832 + + + + + x + 5833 + + + + + x + 5834 + + + + + x + 5835 + + + + + x + 5836 + + + + + x + 5837 + + + + + x + 5838 + + + + + x + 5839 + + + + + x + 5840 + + + + + x + 5841 + + + + + x + 5842 + + + + + x + 5843 + + + + + x + 5844 + + + + + x + 5845 + + + + + x + 5846 + + + + + x + 5847 + + + + + x + 5848 + + + + + x + 5849 + + + + + x + 5850 + + + + + x + 5851 + + + + + x + 5852 + + + + + x + 5853 + + + + + x + 5854 + + + + + x + 5855 + + + + + x + 5856 + + + + + x + 5857 + + + + + x + 5858 + + + + + x + 5859 + + + + + x + 5860 + + + + + x + 5861 + + + + + x + 5862 + + + + + x + 5863 + + + + + x + 5864 + + + + + x + 5865 + + + + + x + 5866 + + + + + x + 5867 + + + + + x + 5868 + + + + + x + 5869 + + + + + x + 5870 + + + + + x + 5871 + + + + + x + 5872 + + + + + x + 5873 + + + + + x + 5874 + + + + + x + 5875 + + + + + x + 5876 + + + + + x + 5877 + + + + + x + 5878 + + + + + x + 5879 + + + + + x + 5880 + + + + + x + 5881 + + + + + x + 5882 + + + + + x + 5883 + + + + + x + 5884 + + + + + x + 5885 + + + + + x + 5886 + + + + + x + 5887 + + + + + x + 5888 + + + + + x + 5889 + + + + + x + 5890 + + + + + x + 5891 + + + + + x + 5892 + + + + + x + 5893 + + + + + x + 5894 + + + + + x + 5895 + + + + + x + 5896 + + + + + x + 5897 + + + + + x + 5898 + + + + + x + 5899 + + + + + x + 5900 + + + + + x + 5901 + + + + + x + 5902 + + + + + x + 5903 + + + + + x + 5904 + + + + + x + 5905 + + + + + x + 5906 + + + + + x + 5907 + + + + + x + 5908 + + + + + x + 5909 + + + + + x + 5910 + + + + + x + 5911 + + + + + x + 5912 + + + + + x + 5913 + + + + + x + 5914 + + + + + x + 5915 + + + + + x + 5916 + + + + + x + 5917 + + + + + x + 5918 + + + + + x + 5919 + + + + + x + 5920 + + + + + x + 5921 + + + + + x + 5922 + + + + + x + 5923 + + + + + x + 5924 + + + + + x + 5925 + + + + + x + 5926 + + + + + x + 5927 + + + + + x + 5928 + + + + + x + 5929 + + + + + x + 5930 + + + + + x + 5931 + + + + + x + 5932 + + + + + x + 5933 + + + + + x + 5934 + + + + + x + 5935 + + + + + x + 5936 + + + + + x + 5937 + + + + + x + 5938 + + + + + x + 5939 + + + + + x + 5940 + + + + + x + 5941 + + + + + x + 5942 + + + + + x + 5943 + + + + + x + 5944 + + + + + x + 5945 + + + + + x + 5946 + + + + + x + 5947 + + + + + x + 5948 + + + + + x + 5949 + + + + + x + 5950 + + + + + x + 5951 + + + + + x + 5952 + + + + + x + 5953 + + + + + x + 5954 + + + + + x + 5955 + + + + + x + 5956 + + + + + x + 5957 + + + + + x + 5958 + + + + + x + 5959 + + + + + x + 5960 + + + + + x + 5961 + + + + + x + 5962 + + + + + x + 5963 + + + + + x + 5964 + + + + + x + 5965 + + + + + x + 5966 + + + + + x + 5967 + + + + + x + 5968 + + + + + x + 5969 + + + + + x + 5970 + + + + + x + 5971 + + + + + x + 5972 + + + + + x + 5973 + + + + + x + 5974 + + + + + x + 5975 + + + + + x + 5976 + + + + + x + 5977 + + + + + x + 5978 + + + + + x + 5979 + + + + + x + 5980 + + + + + x + 5981 + + + + + x + 5982 + + + + + x + 5983 + + + + + x + 5984 + + + + + x + 5985 + + + + + x + 5986 + + + + + x + 5987 + + + + + x + 5988 + + + + + x + 5989 + + + + + x + 5990 + + + + + x + 5991 + + + + + x + 5992 + + + + + x + 5993 + + + + + x + 5994 + + + + + x + 5995 + + + + + x + 5996 + + + + + x + 5997 + + + + + x + 5998 + + + + + x + 5999 + + + + + x + 6000 + + + + + x + 6001 + + + + + x + 6002 + + + + + x + 6003 + + + + + x + 6004 + + + + + x + 6005 + + + + + x + 6006 + + + + + x + 6007 + + + + + x + 6008 + + + + + x + 6009 + + + + + x + 6010 + + + + + x + 6011 + + + + + x + 6012 + + + + + x + 6013 + + + + + x + 6014 + + + + + x + 6015 + + + + + x + 6016 + + + + + x + 6017 + + + + + x + 6018 + + + + + x + 6019 + + + + + x + 6020 + + + + + x + 6021 + + + + + x + 6022 + + + + + x + 6023 + + + + + x + 6024 + + + + + x + 6025 + + + + + x + 6026 + + + + + x + 6027 + + + + + x + 6028 + + + + + x + 6029 + + + + + x + 6030 + + + + + x + 6031 + + + + + x + 6032 + + + + + x + 6033 + + + + + x + 6034 + + + + + x + 6035 + + + + + x + 6036 + + + + + x + 6037 + + + + + x + 6038 + + + + + x + 6039 + + + + + x + 6040 + + + + + x + 6041 + + + + + x + 6042 + + + + + x + 6043 + + + + + x + 6044 + + + + + x + 6045 + + + + + x + 6046 + + + + + x + 6047 + + + + + x + 6048 + + + + + x + 6049 + + + + + x + 6050 + + + + + x + 6051 + + + + + x + 6052 + + + + + x + 6053 + + + + + x + 6054 + + + + + x + 6055 + + + + + x + 6056 + + + + + x + 6057 + + + + + x + 6058 + + + + + x + 6059 + + + + + x + 6060 + + + + + x + 6061 + + + + + x + 6062 + + + + + x + 6063 + + + + + x + 6064 + + + + + x + 6065 + + + + + x + 6066 + + + + + x + 6067 + + + + + x + 6068 + + + + + x + 6069 + + + + + x + 6070 + + + + + x + 6071 + + + + + x + 6072 + + + + + x + 6073 + + + + + x + 6074 + + + + + x + 6075 + + + + + x + 6076 + + + + + x + 6077 + + + + + x + 6078 + + + + + x + 6079 + + + + + x + 6080 + + + + + x + 6081 + + + + + x + 6082 + + + + + x + 6083 + + + + + x + 6084 + + + + + x + 6085 + + + + + x + 6086 + + + + + x + 6087 + + + + + x + 6088 + + + + + x + 6089 + + + + + x + 6090 + + + + + x + 6091 + + + + + x + 6092 + + + + + x + 6093 + + + + + x + 6094 + + + + + x + 6095 + + + + + x + 6096 + + + + + x + 6097 + + + + + x + 6098 + + + + + x + 6099 + + + + + x + 6100 + + + + + x + 6101 + + + + + x + 6102 + + + + + x + 6103 + + + + + x + 6104 + + + + + x + 6105 + + + + + x + 6106 + + + + + x + 6107 + + + + + x + 6108 + + + + + x + 6109 + + + + + x + 6110 + + + + + x + 6111 + + + + + x + 6112 + + + + + x + 6113 + + + + + x + 6114 + + + + + x + 6115 + + + + + x + 6116 + + + + + x + 6117 + + + + + x + 6118 + + + + + x + 6119 + + + + + x + 6120 + + + + + x + 6121 + + + + + x + 6122 + + + + + x + 6123 + + + + + x + 6124 + + + + + x + 6125 + + + + + x + 6126 + + + + + x + 6127 + + + + + x + 6128 + + + + + x + 6129 + + + + + x + 6130 + + + + + x + 6131 + + + + + x + 6132 + + + + + x + 6133 + + + + + x + 6134 + + + + + x + 6135 + + + + + x + 6136 + + + + + x + 6137 + + + + + x + 6138 + + + + + x + 6139 + + + + + x + 6140 + + + + + x + 6141 + + + + + x + 6142 + + + + + x + 6143 + + + + + x + 6144 + + + + + x + 6145 + + + + + x + 6146 + + + + + x + 6147 + + + + + x + 6148 + + + + + x + 6149 + + + + + x + 6150 + + + + + x + 6151 + + + + + x + 6152 + + + + + x + 6153 + + + + + x + 6154 + + + + + x + 6155 + + + + + x + 6156 + + + + + x + 6157 + + + + + x + 6158 + + + + + x + 6159 + + + + + x + 6160 + + + + + x + 6161 + + + + + x + 6162 + + + + + x + 6163 + + + + + x + 6164 + + + + + x + 6165 + + + + + x + 6166 + + + + + x + 6167 + + + + + x + 6168 + + + + + x + 6169 + + + + + x + 6170 + + + + + x + 6171 + + + + + x + 6172 + + + + + x + 6173 + + + + + x + 6174 + + + + + x + 6175 + + + + + x + 6176 + + + + + x + 6177 + + + + + x + 6178 + + + + + x + 6179 + + + + + x + 6180 + + + + + x + 6181 + + + + + x + 6182 + + + + + x + 6183 + + + + + x + 6184 + + + + + x + 6185 + + + + + x + 6186 + + + + + x + 6187 + + + + + x + 6188 + + + + + x + 6189 + + + + + x + 6190 + + + + + x + 6191 + + + + + x + 6192 + + + + + x + 6193 + + + + + x + 6194 + + + + + x + 6195 + + + + + x + 6196 + + + + + x + 6197 + + + + + x + 6198 + + + + + x + 6199 + + + + + x + 6200 + + + + + x + 6201 + + + + + x + 6202 + + + + + x + 6203 + + + + + x + 6204 + + + + + x + 6205 + + + + + x + 6206 + + + + + x + 6207 + + + + + x + 6208 + + + + + x + 6209 + + + + + x + 6210 + + + + + x + 6211 + + + + + x + 6212 + + + + + x + 6213 + + + + + x + 6214 + + + + + x + 6215 + + + + + x + 6216 + + + + + x + 6217 + + + + + x + 6218 + + + + + x + 6219 + + + + + x + 6220 + + + + + x + 6221 + + + + + x + 6222 + + + + + x + 6223 + + + + + x + 6224 + + + + + x + 6225 + + + + + x + 6226 + + + + + x + 6227 + + + + + x + 6228 + + + + + x + 6229 + + + + + x + 6230 + + + + + x + 6231 + + + + + x + 6232 + + + + + x + 6233 + + + + + x + 6234 + + + + + x + 6235 + + + + + x + 6236 + + + + + x + 6237 + + + + + x + 6238 + + + + + x + 6239 + + + + + x + 6240 + + + + + x + 6241 + + + + + x + 6242 + + + + + x + 6243 + + + + + x + 6244 + + + + + x + 6245 + + + + + x + 6246 + + + + + x + 6247 + + + + + x + 6248 + + + + + x + 6249 + + + + + x + 6250 + + + + + x + 6251 + + + + + x + 6252 + + + + + x + 6253 + + + + + x + 6254 + + + + + x + 6255 + + + + + x + 6256 + + + + + x + 6257 + + + + + x + 6258 + + + + + x + 6259 + + + + + x + 6260 + + + + + x + 6261 + + + + + x + 6262 + + + + + x + 6263 + + + + + x + 6264 + + + + + x + 6265 + + + + + x + 6266 + + + + + x + 6267 + + + + + x + 6268 + + + + + x + 6269 + + + + + x + 6270 + + + + + x + 6271 + + + + + x + 6272 + + + + + x + 6273 + + + + + x + 6274 + + + + + x + 6275 + + + + + x + 6276 + + + + + x + 6277 + + + + + x + 6278 + + + + + x + 6279 + + + + + x + 6280 + + + + + x + 6281 + + + + + x + 6282 + + + + + x + 6283 + + + + + x + 6284 + + + + + x + 6285 + + + + + x + 6286 + + + + + x + 6287 + + + + + x + 6288 + + + + + x + 6289 + + + + + x + 6290 + + + + + x + 6291 + + + + + x + 6292 + + + + + x + 6293 + + + + + x + 6294 + + + + + x + 6295 + + + + + x + 6296 + + + + + x + 6297 + + + + + x + 6298 + + + + + x + 6299 + + + + + x + 6300 + + + + + x + 6301 + + + + + x + 6302 + + + + + x + 6303 + + + + + x + 6304 + + + + + x + 6305 + + + + + x + 6306 + + + + + x + 6307 + + + + + x + 6308 + + + + + x + 6309 + + + + + x + 6310 + + + + + x + 6311 + + + + + x + 6312 + + + + + x + 6313 + + + + + x + 6314 + + + + + x + 6315 + + + + + x + 6316 + + + + + x + 6317 + + + + + x + 6318 + + + + + x + 6319 + + + + + x + 6320 + + + + + x + 6321 + + + + + x + 6322 + + + + + x + 6323 + + + + + x + 6324 + + + + + x + 6325 + + + + + x + 6326 + + + + + x + 6327 + + + + + x + 6328 + + + + + x + 6329 + + + + + x + 6330 + + + + + x + 6331 + + + + + x + 6332 + + + + + x + 6333 + + + + + x + 6334 + + + + + x + 6335 + + + + + x + 6336 + + + + + x + 6337 + + + + + x + 6338 + + + + + x + 6339 + + + + + x + 6340 + + + + + x + 6341 + + + + + x + 6342 + + + + + x + 6343 + + + + + x + 6344 + + + + + x + 6345 + + + + + x + 6346 + + + + + x + 6347 + + + + + x + 6348 + + + + + x + 6349 + + + + + x + 6350 + + + + + x + 6351 + + + + + x + 6352 + + + + + x + 6353 + + + + + x + 6354 + + + + + x + 6355 + + + + + x + 6356 + + + + + x + 6357 + + + + + x + 6358 + + + + + x + 6359 + + + + + x + 6360 + + + + + x + 6361 + + + + + x + 6362 + + + + + x + 6363 + + + + + x + 6364 + + + + + x + 6365 + + + + + x + 6366 + + + + + x + 6367 + + + + + x + 6368 + + + + + x + 6369 + + + + + x + 6370 + + + + + x + 6371 + + + + + x + 6372 + + + + + x + 6373 + + + + + x + 6374 + + + + + x + 6375 + + + + + x + 6376 + + + + + x + 6377 + + + + + x + 6378 + + + + + x + 6379 + + + + + x + 6380 + + + + + x + 6381 + + + + + x + 6382 + + + + + x + 6383 + + + + + x + 6384 + + + + + x + 6385 + + + + + x + 6386 + + + + + x + 6387 + + + + + x + 6388 + + + + + x + 6389 + + + + + x + 6390 + + + + + x + 6391 + + + + + x + 6392 + + + + + x + 6393 + + + + + x + 6394 + + + + + x + 6395 + + + + + x + 6396 + + + + + x + 6397 + + + + + x + 6398 + + + + + x + 6399 + + + + + x + 6400 + + + + + x + 6401 + + + + + x + 6402 + + + + + x + 6403 + + + + + x + 6404 + + + + + x + 6405 + + + + + x + 6406 + + + + + x + 6407 + + + + + x + 6408 + + + + + x + 6409 + + + + + x + 6410 + + + + + x + 6411 + + + + + x + 6412 + + + + + x + 6413 + + + + + x + 6414 + + + + + x + 6415 + + + + + x + 6416 + + + + + x + 6417 + + + + + x + 6418 + + + + + x + 6419 + + + + + x + 6420 + + + + + x + 6421 + + + + + x + 6422 + + + + + x + 6423 + + + + + x + 6424 + + + + + x + 6425 + + + + + x + 6426 + + + + + x + 6427 + + + + + x + 6428 + + + + + x + 6429 + + + + + x + 6430 + + + + + x + 6431 + + + + + x + 6432 + + + + + x + 6433 + + + + + x + 6434 + + + + + x + 6435 + + + + + x + 6436 + + + + + x + 6437 + + + + + x + 6438 + + + + + x + 6439 + + + + + x + 6440 + + + + + x + 6441 + + + + + x + 6442 + + + + + x + 6443 + + + + + x + 6444 + + + + + x + 6445 + + + + + x + 6446 + + + + + x + 6447 + + + + + x + 6448 + + + + + x + 6449 + + + + + x + 6450 + + + + + x + 6451 + + + + + x + 6452 + + + + + x + 6453 + + + + + x + 6454 + + + + + x + 6455 + + + + + x + 6456 + + + + + x + 6457 + + + + + x + 6458 + + + + + x + 6459 + + + + + x + 6460 + + + + + x + 6461 + + + + + x + 6462 + + + + + x + 6463 + + + + + x + 6464 + + + + + x + 6465 + + + + + x + 6466 + + + + + x + 6467 + + + + + x + 6468 + + + + + x + 6469 + + + + + x + 6470 + + + + + x + 6471 + + + + + x + 6472 + + + + + x + 6473 + + + + + x + 6474 + + + + + x + 6475 + + + + + x + 6476 + + + + + x + 6477 + + + + + x + 6478 + + + + + x + 6479 + + + + + x + 6480 + + + + + x + 6481 + + + + + x + 6482 + + + + + x + 6483 + + + + + x + 6484 + + + + + x + 6485 + + + + + x + 6486 + + + + + x + 6487 + + + + + x + 6488 + + + + + x + 6489 + + + + + x + 6490 + + + + + x + 6491 + + + + + x + 6492 + + + + + x + 6493 + + + + + x + 6494 + + + + + x + 6495 + + + + + x + 6496 + + + + + x + 6497 + + + + + x + 6498 + + + + + x + 6499 + + + + + x + 6500 + + + + + x + 6501 + + + + + x + 6502 + + + + + x + 6503 + + + + + x + 6504 + + + + + x + 6505 + + + + + x + 6506 + + + + + x + 6507 + + + + + x + 6508 + + + + + x + 6509 + + + + + x + 6510 + + + + + x + 6511 + + + + + x + 6512 + + + + + x + 6513 + + + + + x + 6514 + + + + + x + 6515 + + + + + x + 6516 + + + + + x + 6517 + + + + + x + 6518 + + + + + x + 6519 + + + + + x + 6520 + + + + + x + 6521 + + + + + x + 6522 + + + + + x + 6523 + + + + + x + 6524 + + + + + x + 6525 + + + + + x + 6526 + + + + + x + 6527 + + + + + x + 6528 + + + + + x + 6529 + + + + + x + 6530 + + + + + x + 6531 + + + + + x + 6532 + + + + + x + 6533 + + + + + x + 6534 + + + + + x + 6535 + + + + + x + 6536 + + + + + x + 6537 + + + + + x + 6538 + + + + + x + 6539 + + + + + x + 6540 + + + + + x + 6541 + + + + + x + 6542 + + + + + x + 6543 + + + + + x + 6544 + + + + + x + 6545 + + + + + x + 6546 + + + + + x + 6547 + + + + + x + 6548 + + + + + x + 6549 + + + + + x + 6550 + + + + + x + 6551 + + + + + x + 6552 + + + + + x + 6553 + + + + + x + 6554 + + + + + x + 6555 + + + + + x + 6556 + + + + + x + 6557 + + + + + x + 6558 + + + + + x + 6559 + + + + + x + 6560 + + + + + x + 6561 + + + + + x + 6562 + + + + + x + 6563 + + + + + x + 6564 + + + + + x + 6565 + + + + + x + 6566 + + + + + x + 6567 + + + + + x + 6568 + + + + + x + 6569 + + + + + x + 6570 + + + + + x + 6571 + + + + + x + 6572 + + + + + x + 6573 + + + + + x + 6574 + + + + + x + 6575 + + + + + x + 6576 + + + + + x + 6577 + + + + + x + 6578 + + + + + x + 6579 + + + + + x + 6580 + + + + + x + 6581 + + + + + x + 6582 + + + + + x + 6583 + + + + + x + 6584 + + + + + x + 6585 + + + + + x + 6586 + + + + + x + 6587 + + + + + x + 6588 + + + + + x + 6589 + + + + + x + 6590 + + + + + x + 6591 + + + + + x + 6592 + + + + + x + 6593 + + + + + x + 6594 + + + + + x + 6595 + + + + + x + 6596 + + + + + x + 6597 + + + + + x + 6598 + + + + + x + 6599 + + + + + x + 6600 + + + + + x + 6601 + + + + + x + 6602 + + + + + x + 6603 + + + + + x + 6604 + + + + + x + 6605 + + + + + x + 6606 + + + + + x + 6607 + + + + + x + 6608 + + + + + x + 6609 + + + + + x + 6610 + + + + + x + 6611 + + + + + x + 6612 + + + + + x + 6613 + + + + + x + 6614 + + + + + x + 6615 + + + + + x + 6616 + + + + + x + 6617 + + + + + x + 6618 + + + + + x + 6619 + + + + + x + 6620 + + + + + x + 6621 + + + + + x + 6622 + + + + + x + 6623 + + + + + x + 6624 + + + + + x + 6625 + + + + + x + 6626 + + + + + x + 6627 + + + + + x + 6628 + + + + + x + 6629 + + + + + x + 6630 + + + + + x + 6631 + + + + + x + 6632 + + + + + x + 6633 + + + + + x + 6634 + + + + + x + 6635 + + + + + x + 6636 + + + + + x + 6637 + + + + + x + 6638 + + + + + x + 6639 + + + + + x + 6640 + + + + + x + 6641 + + + + + x + 6642 + + + + + x + 6643 + + + + + x + 6644 + + + + + x + 6645 + + + + + x + 6646 + + + + + x + 6647 + + + + + x + 6648 + + + + + x + 6649 + + + + + x + 6650 + + + + + x + 6651 + + + + + x + 6652 + + + + + x + 6653 + + + + + x + 6654 + + + + + x + 6655 + + + + + x + 6656 + + + + + x + 6657 + + + + + x + 6658 + + + + + x + 6659 + + + + + x + 6660 + + + + + x + 6661 + + + + + x + 6662 + + + + + x + 6663 + + + + + x + 6664 + + + + + x + 6665 + + + + + x + 6666 + + + + + x + 6667 + + + + + x + 6668 + + + + + x + 6669 + + + + + x + 6670 + + + + + x + 6671 + + + + + x + 6672 + + + + + x + 6673 + + + + + x + 6674 + + + + + x + 6675 + + + + + x + 6676 + + + + + x + 6677 + + + + + x + 6678 + + + + + x + 6679 + + + + + x + 6680 + + + + + x + 6681 + + + + + x + 6682 + + + + + x + 6683 + + + + + x + 6684 + + + + + x + 6685 + + + + + x + 6686 + + + + + x + 6687 + + + + + x + 6688 + + + + + x + 6689 + + + + + x + 6690 + + + + + x + 6691 + + + + + x + 6692 + + + + + x + 6693 + + + + + x + 6694 + + + + + x + 6695 + + + + + x + 6696 + + + + + x + 6697 + + + + + x + 6698 + + + + + x + 6699 + + + + + x + 6700 + + + + + x + 6701 + + + + + x + 6702 + + + + + x + 6703 + + + + + x + 6704 + + + + + x + 6705 + + + + + x + 6706 + + + + + x + 6707 + + + + + x + 6708 + + + + + x + 6709 + + + + + x + 6710 + + + + + x + 6711 + + + + + x + 6712 + + + + + x + 6713 + + + + + x + 6714 + + + + + x + 6715 + + + + + x + 6716 + + + + + x + 6717 + + + + + x + 6718 + + + + + x + 6719 + + + + + x + 6720 + + + + + x + 6721 + + + + + x + 6722 + + + + + x + 6723 + + + + + x + 6724 + + + + + x + 6725 + + + + + x + 6726 + + + + + x + 6727 + + + + + x + 6728 + + + + + x + 6729 + + + + + x + 6730 + + + + + x + 6731 + + + + + x + 6732 + + + + + x + 6733 + + + + + x + 6734 + + + + + x + 6735 + + + + + x + 6736 + + + + + x + 6737 + + + + + x + 6738 + + + + + x + 6739 + + + + + x + 6740 + + + + + x + 6741 + + + + + x + 6742 + + + + + x + 6743 + + + + + x + 6744 + + + + + x + 6745 + + + + + x + 6746 + + + + + x + 6747 + + + + + x + 6748 + + + + + x + 6749 + + + + + x + 6750 + + + + + x + 6751 + + + + + x + 6752 + + + + + x + 6753 + + + + + x + 6754 + + + + + x + 6755 + + + + + x + 6756 + + + + + x + 6757 + + + + + x + 6758 + + + + + x + 6759 + + + + + x + 6760 + + + + + x + 6761 + + + + + x + 6762 + + + + + x + 6763 + + + + + x + 6764 + + + + + x + 6765 + + + + + x + 6766 + + + + + x + 6767 + + + + + x + 6768 + + + + + x + 6769 + + + + + x + 6770 + + + + + x + 6771 + + + + + x + 6772 + + + + + x + 6773 + + + + + x + 6774 + + + + + x + 6775 + + + + + x + 6776 + + + + + x + 6777 + + + + + x + 6778 + + + + + x + 6779 + + + + + x + 6780 + + + + + x + 6781 + + + + + x + 6782 + + + + + x + 6783 + + + + + x + 6784 + + + + + x + 6785 + + + + + x + 6786 + + + + + x + 6787 + + + + + x + 6788 + + + + + x + 6789 + + + + + x + 6790 + + + + + x + 6791 + + + + + x + 6792 + + + + + x + 6793 + + + + + x + 6794 + + + + + x + 6795 + + + + + x + 6796 + + + + + x + 6797 + + + + + x + 6798 + + + + + x + 6799 + + + + + x + 6800 + + + + + x + 6801 + + + + + x + 6802 + + + + + x + 6803 + + + + + x + 6804 + + + + + x + 6805 + + + + + x + 6806 + + + + + x + 6807 + + + + + x + 6808 + + + + + x + 6809 + + + + + x + 6810 + + + + + x + 6811 + + + + + x + 6812 + + + + + x + 6813 + + + + + x + 6814 + + + + + x + 6815 + + + + + x + 6816 + + + + + x + 6817 + + + + + x + 6818 + + + + + x + 6819 + + + + + x + 6820 + + + + + x + 6821 + + + + + x + 6822 + + + + + x + 6823 + + + + + x + 6824 + + + + + x + 6825 + + + + + x + 6826 + + + + + x + 6827 + + + + + x + 6828 + + + + + x + 6829 + + + + + x + 6830 + + + + + x + 6831 + + + + + x + 6832 + + + + + x + 6833 + + + + + x + 6834 + + + + + x + 6835 + + + + + x + 6836 + + + + + x + 6837 + + + + + x + 6838 + + + + + x + 6839 + + + + + x + 6840 + + + + + x + 6841 + + + + + x + 6842 + + + + + x + 6843 + + + + + x + 6844 + + + + + x + 6845 + + + + + x + 6846 + + + + + x + 6847 + + + + + x + 6848 + + + + + x + 6849 + + + + + x + 6850 + + + + + x + 6851 + + + + + x + 6852 + + + + + x + 6853 + + + + + x + 6854 + + + + + x + 6855 + + + + + x + 6856 + + + + + x + 6857 + + + + + x + 6858 + + + + + x + 6859 + + + + + x + 6860 + + + + + x + 6861 + + + + + x + 6862 + + + + + x + 6863 + + + + + x + 6864 + + + + + x + 6865 + + + + + x + 6866 + + + + + x + 6867 + + + + + x + 6868 + + + + + x + 6869 + + + + + x + 6870 + + + + + x + 6871 + + + + + x + 6872 + + + + + x + 6873 + + + + + x + 6874 + + + + + x + 6875 + + + + + x + 6876 + + + + + x + 6877 + + + + + x + 6878 + + + + + x + 6879 + + + + + x + 6880 + + + + + x + 6881 + + + + + x + 6882 + + + + + x + 6883 + + + + + x + 6884 + + + + + x + 6885 + + + + + x + 6886 + + + + + x + 6887 + + + + + x + 6888 + + + + + x + 6889 + + + + + x + 6890 + + + + + x + 6891 + + + + + x + 6892 + + + + + x + 6893 + + + + + x + 6894 + + + + + x + 6895 + + + + + x + 6896 + + + + + x + 6897 + + + + + x + 6898 + + + + + x + 6899 + + + + + x + 6900 + + + + + x + 6901 + + + + + x + 6902 + + + + + x + 6903 + + + + + x + 6904 + + + + + x + 6905 + + + + + x + 6906 + + + + + x + 6907 + + + + + x + 6908 + + + + + x + 6909 + + + + + x + 6910 + + + + + x + 6911 + + + + + x + 6912 + + + + + x + 6913 + + + + + x + 6914 + + + + + x + 6915 + + + + + x + 6916 + + + + + x + 6917 + + + + + x + 6918 + + + + + x + 6919 + + + + + x + 6920 + + + + + x + 6921 + + + + + x + 6922 + + + + + x + 6923 + + + + + x + 6924 + + + + + x + 6925 + + + + + x + 6926 + + + + + x + 6927 + + + + + x + 6928 + + + + + x + 6929 + + + + + x + 6930 + + + + + x + 6931 + + + + + x + 6932 + + + + + x + 6933 + + + + + x + 6934 + + + + + x + 6935 + + + + + x + 6936 + + + + + x + 6937 + + + + + x + 6938 + + + + + x + 6939 + + + + + x + 6940 + + + + + x + 6941 + + + + + x + 6942 + + + + + x + 6943 + + + + + x + 6944 + + + + + x + 6945 + + + + + x + 6946 + + + + + x + 6947 + + + + + x + 6948 + + + + + x + 6949 + + + + + x + 6950 + + + + + x + 6951 + + + + + x + 6952 + + + + + x + 6953 + + + + + x + 6954 + + + + + x + 6955 + + + + + x + 6956 + + + + + x + 6957 + + + + + x + 6958 + + + + + x + 6959 + + + + + x + 6960 + + + + + x + 6961 + + + + + x + 6962 + + + + + x + 6963 + + + + + x + 6964 + + + + + x + 6965 + + + + + x + 6966 + + + + + x + 6967 + + + + + x + 6968 + + + + + x + 6969 + + + + + x + 6970 + + + + + x + 6971 + + + + + x + 6972 + + + + + x + 6973 + + + + + x + 6974 + + + + + x + 6975 + + + + + x + 6976 + + + + + x + 6977 + + + + + x + 6978 + + + + + x + 6979 + + + + + x + 6980 + + + + + x + 6981 + + + + + x + 6982 + + + + + x + 6983 + + + + + x + 6984 + + + + + x + 6985 + + + + + x + 6986 + + + + + x + 6987 + + + + + x + 6988 + + + + + x + 6989 + + + + + x + 6990 + + + + + x + 6991 + + + + + x + 6992 + + + + + x + 6993 + + + + + x + 6994 + + + + + x + 6995 + + + + + x + 6996 + + + + + x + 6997 + + + + + x + 6998 + + + + + x + 6999 + + + + + x + 7000 + + + + + x + 7001 + + + + + x + 7002 + + + + + x + 7003 + + + + + x + 7004 + + + + + x + 7005 + + + + + x + 7006 + + + + + x + 7007 + + + + + x + 7008 + + + + + x + 7009 + + + + + x + 7010 + + + + + x + 7011 + + + + + x + 7012 + + + + + x + 7013 + + + + + x + 7014 + + + + + x + 7015 + + + + + x + 7016 + + + + + x + 7017 + + + + + x + 7018 + + + + + x + 7019 + + + + + x + 7020 + + + + + x + 7021 + + + + + x + 7022 + + + + + x + 7023 + + + + + x + 7024 + + + + + x + 7025 + + + + + x + 7026 + + + + + x + 7027 + + + + + x + 7028 + + + + + x + 7029 + + + + + x + 7030 + + + + + x + 7031 + + + + + x + 7032 + + + + + x + 7033 + + + + + x + 7034 + + + + + x + 7035 + + + + + x + 7036 + + + + + x + 7037 + + + + + x + 7038 + + + + + x + 7039 + + + + + x + 7040 + + + + + x + 7041 + + + + + x + 7042 + + + + + x + 7043 + + + + + x + 7044 + + + + + x + 7045 + + + + + x + 7046 + + + + + x + 7047 + + + + + x + 7048 + + + + + x + 7049 + + + + + x + 7050 + + + + + x + 7051 + + + + + x + 7052 + + + + + x + 7053 + + + + + x + 7054 + + + + + x + 7055 + + + + + x + 7056 + + + + + x + 7057 + + + + + x + 7058 + + + + + x + 7059 + + + + + x + 7060 + + + + + x + 7061 + + + + + x + 7062 + + + + + x + 7063 + + + + + x + 7064 + + + + + x + 7065 + + + + + x + 7066 + + + + + x + 7067 + + + + + x + 7068 + + + + + x + 7069 + + + + + x + 7070 + + + + + x + 7071 + + + + + x + 7072 + + + + + x + 7073 + + + + + x + 7074 + + + + + x + 7075 + + + + + x + 7076 + + + + + x + 7077 + + + + + x + 7078 + + + + + x + 7079 + + + + + x + 7080 + + + + + x + 7081 + + + + + x + 7082 + + + + + x + 7083 + + + + + x + 7084 + + + + + x + 7085 + + + + + x + 7086 + + + + + x + 7087 + + + + + x + 7088 + + + + + x + 7089 + + + + + x + 7090 + + + + + x + 7091 + + + + + x + 7092 + + + + + x + 7093 + + + + + x + 7094 + + + + + x + 7095 + + + + + x + 7096 + + + + + x + 7097 + + + + + x + 7098 + + + + + x + 7099 + + + + + x + 7100 + + + + + x + 7101 + + + + + x + 7102 + + + + + x + 7103 + + + + + x + 7104 + + + + + x + 7105 + + + + + x + 7106 + + + + + x + 7107 + + + + + x + 7108 + + + + + x + 7109 + + + + + x + 7110 + + + + + x + 7111 + + + + + x + 7112 + + + + + x + 7113 + + + + + x + 7114 + + + + + x + 7115 + + + + + x + 7116 + + + + + x + 7117 + + + + + x + 7118 + + + + + x + 7119 + + + + + x + 7120 + + + + + x + 7121 + + + + + x + 7122 + + + + + x + 7123 + + + + + x + 7124 + + + + + x + 7125 + + + + + x + 7126 + + + + + x + 7127 + + + + + x + 7128 + + + + + x + 7129 + + + + + x + 7130 + + + + + x + 7131 + + + + + x + 7132 + + + + + x + 7133 + + + + + x + 7134 + + + + + x + 7135 + + + + + x + 7136 + + + + + x + 7137 + + + + + x + 7138 + + + + + x + 7139 + + + + + x + 7140 + + + + + x + 7141 + + + + + x + 7142 + + + + + x + 7143 + + + + + x + 7144 + + + + + x + 7145 + + + + + x + 7146 + + + + + x + 7147 + + + + + x + 7148 + + + + + x + 7149 + + + + + x + 7150 + + + + + x + 7151 + + + + + x + 7152 + + + + + x + 7153 + + + + + x + 7154 + + + + + x + 7155 + + + + + x + 7156 + + + + + x + 7157 + + + + + x + 7158 + + + + + x + 7159 + + + + + x + 7160 + + + + + x + 7161 + + + + + x + 7162 + + + + + x + 7163 + + + + + x + 7164 + + + + + x + 7165 + + + + + x + 7166 + + + + + x + 7167 + + + + + x + 7168 + + + + + x + 7169 + + + + + x + 7170 + + + + + x + 7171 + + + + + x + 7172 + + + + + x + 7173 + + + + + x + 7174 + + + + + x + 7175 + + + + + x + 7176 + + + + + x + 7177 + + + + + x + 7178 + + + + + x + 7179 + + + + + x + 7180 + + + + + x + 7181 + + + + + x + 7182 + + + + + x + 7183 + + + + + x + 7184 + + + + + x + 7185 + + + + + x + 7186 + + + + + x + 7187 + + + + + x + 7188 + + + + + x + 7189 + + + + + x + 7190 + + + + + x + 7191 + + + + + x + 7192 + + + + + x + 7193 + + + + + x + 7194 + + + + + x + 7195 + + + + + x + 7196 + + + + + x + 7197 + + + + + x + 7198 + + + + + x + 7199 + + + + + x + 7200 + + + + + x + 7201 + + + + + x + 7202 + + + + + x + 7203 + + + + + x + 7204 + + + + + x + 7205 + + + + + x + 7206 + + + + + x + 7207 + + + + + x + 7208 + + + + + x + 7209 + + + + + x + 7210 + + + + + x + 7211 + + + + + x + 7212 + + + + + x + 7213 + + + + + x + 7214 + + + + + x + 7215 + + + + + x + 7216 + + + + + x + 7217 + + + + + x + 7218 + + + + + x + 7219 + + + + + x + 7220 + + + + + x + 7221 + + + + + x + 7222 + + + + + x + 7223 + + + + + x + 7224 + + + + + x + 7225 + + + + + x + 7226 + + + + + x + 7227 + + + + + x + 7228 + + + + + x + 7229 + + + + + x + 7230 + + + + + x + 7231 + + + + + x + 7232 + + + + + x + 7233 + + + + + x + 7234 + + + + + x + 7235 + + + + + x + 7236 + + + + + x + 7237 + + + + + x + 7238 + + + + + x + 7239 + + + + + x + 7240 + + + + + x + 7241 + + + + + x + 7242 + + + + + x + 7243 + + + + + x + 7244 + + + + + x + 7245 + + + + + x + 7246 + + + + + x + 7247 + + + + + x + 7248 + + + + + x + 7249 + + + + + x + 7250 + + + + + x + 7251 + + + + + x + 7252 + + + + + x + 7253 + + + + + x + 7254 + + + + + x + 7255 + + + + + x + 7256 + + + + + x + 7257 + + + + + x + 7258 + + + + + x + 7259 + + + + + x + 7260 + + + + + x + 7261 + + + + + x + 7262 + + + + + x + 7263 + + + + + x + 7264 + + + + + x + 7265 + + + + + x + 7266 + + + + + x + 7267 + + + + + x + 7268 + + + + + x + 7269 + + + + + x + 7270 + + + + + x + 7271 + + + + + x + 7272 + + + + + x + 7273 + + + + + x + 7274 + + + + + x + 7275 + + + + + x + 7276 + + + + + x + 7277 + + + + + x + 7278 + + + + + x + 7279 + + + + + x + 7280 + + + + + x + 7281 + + + + + x + 7282 + + + + + x + 7283 + + + + + x + 7284 + + + + + x + 7285 + + + + + x + 7286 + + + + + x + 7287 + + + + + x + 7288 + + + + + x + 7289 + + + + + x + 7290 + + + + + x + 7291 + + + + + x + 7292 + + + + + x + 7293 + + + + + x + 7294 + + + + + x + 7295 + + + + + x + 7296 + + + + + x + 7297 + + + + + x + 7298 + + + + + x + 7299 + + + + + x + 7300 + + + + + x + 7301 + + + + + x + 7302 + + + + + x + 7303 + + + + + x + 7304 + + + + + x + 7305 + + + + + x + 7306 + + + + + x + 7307 + + + + + x + 7308 + + + + + x + 7309 + + + + + x + 7310 + + + + + x + 7311 + + + + + x + 7312 + + + + + x + 7313 + + + + + x + 7314 + + + + + x + 7315 + + + + + x + 7316 + + + + + x + 7317 + + + + + x + 7318 + + + + + x + 7319 + + + + + x + 7320 + + + + + x + 7321 + + + + + x + 7322 + + + + + x + 7323 + + + + + x + 7324 + + + + + x + 7325 + + + + + x + 7326 + + + + + x + 7327 + + + + + x + 7328 + + + + + x + 7329 + + + + + x + 7330 + + + + + x + 7331 + + + + + x + 7332 + + + + + x + 7333 + + + + + x + 7334 + + + + + x + 7335 + + + + + x + 7336 + + + + + x + 7337 + + + + + x + 7338 + + + + + x + 7339 + + + + + x + 7340 + + + + + x + 7341 + + + + + x + 7342 + + + + + x + 7343 + + + + + x + 7344 + + + + + x + 7345 + + + + + x + 7346 + + + + + x + 7347 + + + + + x + 7348 + + + + + x + 7349 + + + + + x + 7350 + + + + + x + 7351 + + + + + x + 7352 + + + + + x + 7353 + + + + + x + 7354 + + + + + x + 7355 + + + + + x + 7356 + + + + + x + 7357 + + + + + x + 7358 + + + + + x + 7359 + + + + + x + 7360 + + + + + x + 7361 + + + + + x + 7362 + + + + + x + 7363 + + + + + x + 7364 + + + + + x + 7365 + + + + + x + 7366 + + + + + x + 7367 + + + + + x + 7368 + + + + + x + 7369 + + + + + x + 7370 + + + + + x + 7371 + + + + + x + 7372 + + + + + x + 7373 + + + + + x + 7374 + + + + + x + 7375 + + + + + x + 7376 + + + + + x + 7377 + + + + + x + 7378 + + + + + x + 7379 + + + + + x + 7380 + + + + + x + 7381 + + + + + x + 7382 + + + + + x + 7383 + + + + + x + 7384 + + + + + x + 7385 + + + + + x + 7386 + + + + + x + 7387 + + + + + x + 7388 + + + + + x + 7389 + + + + + x + 7390 + + + + + x + 7391 + + + + + x + 7392 + + + + + x + 7393 + + + + + x + 7394 + + + + + x + 7395 + + + + + x + 7396 + + + + + x + 7397 + + + + + x + 7398 + + + + + x + 7399 + + + + + x + 7400 + + + + + x + 7401 + + + + + x + 7402 + + + + + x + 7403 + + + + + x + 7404 + + + + + x + 7405 + + + + + x + 7406 + + + + + x + 7407 + + + + + x + 7408 + + + + + x + 7409 + + + + + x + 7410 + + + + + x + 7411 + + + + + x + 7412 + + + + + x + 7413 + + + + + x + 7414 + + + + + x + 7415 + + + + + x + 7416 + + + + + x + 7417 + + + + + x + 7418 + + + + + x + 7419 + + + + + x + 7420 + + + + + x + 7421 + + + + + x + 7422 + + + + + x + 7423 + + + + + x + 7424 + + + + + x + 7425 + + + + + x + 7426 + + + + + x + 7427 + + + + + x + 7428 + + + + + x + 7429 + + + + + x + 7430 + + + + + x + 7431 + + + + + x + 7432 + + + + + x + 7433 + + + + + x + 7434 + + + + + x + 7435 + + + + + x + 7436 + + + + + x + 7437 + + + + + x + 7438 + + + + + x + 7439 + + + + + x + 7440 + + + + + x + 7441 + + + + + x + 7442 + + + + + x + 7443 + + + + + x + 7444 + + + + + x + 7445 + + + + + x + 7446 + + + + + x + 7447 + + + + + x + 7448 + + + + + x + 7449 + + + + + x + 7450 + + + + + x + 7451 + + + + + x + 7452 + + + + + x + 7453 + + + + + x + 7454 + + + + + x + 7455 + + + + + x + 7456 + + + + + x + 7457 + + + + + x + 7458 + + + + + x + 7459 + + + + + x + 7460 + + + + + x + 7461 + + + + + x + 7462 + + + + + x + 7463 + + + + + x + 7464 + + + + + x + 7465 + + + + + x + 7466 + + + + + x + 7467 + + + + + x + 7468 + + + + + x + 7469 + + + + + x + 7470 + + + + + x + 7471 + + + + + x + 7472 + + + + + x + 7473 + + + + + x + 7474 + + + + + x + 7475 + + + + + x + 7476 + + + + + x + 7477 + + + + + x + 7478 + + + + + x + 7479 + + + + + x + 7480 + + + + + x + 7481 + + + + + x + 7482 + + + + + x + 7483 + + + + + x + 7484 + + + + + x + 7485 + + + + + x + 7486 + + + + + x + 7487 + + + + + x + 7488 + + + + + x + 7489 + + + + + x + 7490 + + + + + x + 7491 + + + + + x + 7492 + + + + + x + 7493 + + + + + x + 7494 + + + + + x + 7495 + + + + + x + 7496 + + + + + x + 7497 + + + + + x + 7498 + + + + + x + 7499 + + + + + x + 7500 + + + + + x + 7501 + + + + + x + 7502 + + + + + x + 7503 + + + + + x + 7504 + + + + + x + 7505 + + + + + x + 7506 + + + + + x + 7507 + + + + + x + 7508 + + + + + x + 7509 + + + + + x + 7510 + + + + + x + 7511 + + + + + x + 7512 + + + + + x + 7513 + + + + + x + 7514 + + + + + x + 7515 + + + + + x + 7516 + + + + + x + 7517 + + + + + x + 7518 + + + + + x + 7519 + + + + + x + 7520 + + + + + x + 7521 + + + + + x + 7522 + + + + + x + 7523 + + + + + x + 7524 + + + + + x + 7525 + + + + + x + 7526 + + + + + x + 7527 + + + + + x + 7528 + + + + + x + 7529 + + + + + x + 7530 + + + + + x + 7531 + + + + + x + 7532 + + + + + x + 7533 + + + + + x + 7534 + + + + + x + 7535 + + + + + x + 7536 + + + + + x + 7537 + + + + + x + 7538 + + + + + x + 7539 + + + + + x + 7540 + + + + + x + 7541 + + + + + x + 7542 + + + + + x + 7543 + + + + + x + 7544 + + + + + x + 7545 + + + + + x + 7546 + + + + + x + 7547 + + + + + x + 7548 + + + + + x + 7549 + + + + + x + 7550 + + + + + x + 7551 + + + + + x + 7552 + + + + + x + 7553 + + + + + x + 7554 + + + + + x + 7555 + + + + + x + 7556 + + + + + x + 7557 + + + + + x + 7558 + + + + + x + 7559 + + + + + x + 7560 + + + + + x + 7561 + + + + + x + 7562 + + + + + x + 7563 + + + + + x + 7564 + + + + + x + 7565 + + + + + x + 7566 + + + + + x + 7567 + + + + + x + 7568 + + + + + x + 7569 + + + + + x + 7570 + + + + + x + 7571 + + + + + x + 7572 + + + + + x + 7573 + + + + + x + 7574 + + + + + x + 7575 + + + + + x + 7576 + + + + + x + 7577 + + + + + x + 7578 + + + + + x + 7579 + + + + + x + 7580 + + + + + x + 7581 + + + + + x + 7582 + + + + + x + 7583 + + + + + x + 7584 + + + + + x + 7585 + + + + + x + 7586 + + + + + x + 7587 + + + + + x + 7588 + + + + + x + 7589 + + + + + x + 7590 + + + + + x + 7591 + + + + + x + 7592 + + + + + x + 7593 + + + + + x + 7594 + + + + + x + 7595 + + + + + x + 7596 + + + + + x + 7597 + + + + + x + 7598 + + + + + x + 7599 + + + + + x + 7600 + + + + + x + 7601 + + + + + x + 7602 + + + + + x + 7603 + + + + + x + 7604 + + + + + x + 7605 + + + + + x + 7606 + + + + + x + 7607 + + + + + x + 7608 + + + + + x + 7609 + + + + + x + 7610 + + + + + x + 7611 + + + + + x + 7612 + + + + + x + 7613 + + + + + x + 7614 + + + + + x + 7615 + + + + + x + 7616 + + + + + x + 7617 + + + + + x + 7618 + + + + + x + 7619 + + + + + x + 7620 + + + + + x + 7621 + + + + + x + 7622 + + + + + x + 7623 + + + + + x + 7624 + + + + + x + 7625 + + + + + x + 7626 + + + + + x + 7627 + + + + + x + 7628 + + + + + x + 7629 + + + + + x + 7630 + + + + + x + 7631 + + + + + x + 7632 + + + + + x + 7633 + + + + + x + 7634 + + + + + x + 7635 + + + + + x + 7636 + + + + + x + 7637 + + + + + x + 7638 + + + + + x + 7639 + + + + + x + 7640 + + + + + x + 7641 + + + + + x + 7642 + + + + + x + 7643 + + + + + x + 7644 + + + + + x + 7645 + + + + + x + 7646 + + + + + x + 7647 + + + + + x + 7648 + + + + + x + 7649 + + + + + x + 7650 + + + + + x + 7651 + + + + + x + 7652 + + + + + x + 7653 + + + + + x + 7654 + + + + + x + 7655 + + + + + x + 7656 + + + + + x + 7657 + + + + + x + 7658 + + + + + x + 7659 + + + + + x + 7660 + + + + + x + 7661 + + + + + x + 7662 + + + + + x + 7663 + + + + + x + 7664 + + + + + x + 7665 + + + + + x + 7666 + + + + + x + 7667 + + + + + x + 7668 + + + + + x + 7669 + + + + + x + 7670 + + + + + x + 7671 + + + + + x + 7672 + + + + + x + 7673 + + + + + x + 7674 + + + + + x + 7675 + + + + + x + 7676 + + + + + x + 7677 + + + + + x + 7678 + + + + + x + 7679 + + + + + x + 7680 + + + + + x + 7681 + + + + + x + 7682 + + + + + x + 7683 + + + + + x + 7684 + + + + + x + 7685 + + + + + x + 7686 + + + + + x + 7687 + + + + + x + 7688 + + + + + x + 7689 + + + + + x + 7690 + + + + + x + 7691 + + + + + x + 7692 + + + + + x + 7693 + + + + + x + 7694 + + + + + x + 7695 + + + + + x + 7696 + + + + + x + 7697 + + + + + x + 7698 + + + + + x + 7699 + + + + + x + 7700 + + + + + x + 7701 + + + + + x + 7702 + + + + + x + 7703 + + + + + x + 7704 + + + + + x + 7705 + + + + + x + 7706 + + + + + x + 7707 + + + + + x + 7708 + + + + + x + 7709 + + + + + x + 7710 + + + + + x + 7711 + + + + + x + 7712 + + + + + x + 7713 + + + + + x + 7714 + + + + + x + 7715 + + + + + x + 7716 + + + + + x + 7717 + + + + + x + 7718 + + + + + x + 7719 + + + + + x + 7720 + + + + + x + 7721 + + + + + x + 7722 + + + + + x + 7723 + + + + + x + 7724 + + + + + x + 7725 + + + + + x + 7726 + + + + + x + 7727 + + + + + x + 7728 + + + + + x + 7729 + + + + + x + 7730 + + + + + x + 7731 + + + + + x + 7732 + + + + + x + 7733 + + + + + x + 7734 + + + + + x + 7735 + + + + + x + 7736 + + + + + x + 7737 + + + + + x + 7738 + + + + + x + 7739 + + + + + x + 7740 + + + + + x + 7741 + + + + + x + 7742 + + + + + x + 7743 + + + + + x + 7744 + + + + + x + 7745 + + + + + x + 7746 + + + + + x + 7747 + + + + + x + 7748 + + + + + x + 7749 + + + + + x + 7750 + + + + + x + 7751 + + + + + x + 7752 + + + + + x + 7753 + + + + + x + 7754 + + + + + x + 7755 + + + + + x + 7756 + + + + + x + 7757 + + + + + x + 7758 + + + + + x + 7759 + + + + + x + 7760 + + + + + x + 7761 + + + + + x + 7762 + + + + + x + 7763 + + + + + x + 7764 + + + + + x + 7765 + + + + + x + 7766 + + + + + x + 7767 + + + + + x + 7768 + + + + + x + 7769 + + + + + x + 7770 + + + + + x + 7771 + + + + + x + 7772 + + + + + x + 7773 + + + + + x + 7774 + + + + + x + 7775 + + + + + x + 7776 + + + + + x + 7777 + + + + + x + 7778 + + + + + x + 7779 + + + + + x + 7780 + + + + + x + 7781 + + + + + x + 7782 + + + + + x + 7783 + + + + + x + 7784 + + + + + x + 7785 + + + + + x + 7786 + + + + + x + 7787 + + + + + x + 7788 + + + + + x + 7789 + + + + + x + 7790 + + + + + x + 7791 + + + + + x + 7792 + + + + + x + 7793 + + + + + x + 7794 + + + + + x + 7795 + + + + + x + 7796 + + + + + x + 7797 + + + + + x + 7798 + + + + + x + 7799 + + + + + x + 7800 + + + + + x + 7801 + + + + + x + 7802 + + + + + x + 7803 + + + + + x + 7804 + + + + + x + 7805 + + + + + x + 7806 + + + + + x + 7807 + + + + + x + 7808 + + + + + x + 7809 + + + + + x + 7810 + + + + + x + 7811 + + + + + x + 7812 + + + + + x + 7813 + + + + + x + 7814 + + + + + x + 7815 + + + + + x + 7816 + + + + + x + 7817 + + + + + x + 7818 + + + + + x + 7819 + + + + + x + 7820 + + + + + x + 7821 + + + + + x + 7822 + + + + + x + 7823 + + + + + x + 7824 + + + + + x + 7825 + + + + + x + 7826 + + + + + x + 7827 + + + + + x + 7828 + + + + + x + 7829 + + + + + x + 7830 + + + + + x + 7831 + + + + + x + 7832 + + + + + x + 7833 + + + + + x + 7834 + + + + + x + 7835 + + + + + x + 7836 + + + + + x + 7837 + + + + + x + 7838 + + + + + x + 7839 + + + + + x + 7840 + + + + + x + 7841 + + + + + x + 7842 + + + + + x + 7843 + + + + + x + 7844 + + + + + x + 7845 + + + + + x + 7846 + + + + + x + 7847 + + + + + x + 7848 + + + + + x + 7849 + + + + + x + 7850 + + + + + x + 7851 + + + + + x + 7852 + + + + + x + 7853 + + + + + x + 7854 + + + + + x + 7855 + + + + + x + 7856 + + + + + x + 7857 + + + + + x + 7858 + + + + + x + 7859 + + + + + x + 7860 + + + + + x + 7861 + + + + + x + 7862 + + + + + x + 7863 + + + + + x + 7864 + + + + + x + 7865 + + + + + x + 7866 + + + + + x + 7867 + + + + + x + 7868 + + + + + x + 7869 + + + + + x + 7870 + + + + + x + 7871 + + + + + x + 7872 + + + + + x + 7873 + + + + + x + 7874 + + + + + x + 7875 + + + + + x + 7876 + + + + + x + 7877 + + + + + x + 7878 + + + + + x + 7879 + + + + + x + 7880 + + + + + x + 7881 + + + + + x + 7882 + + + + + x + 7883 + + + + + x + 7884 + + + + + x + 7885 + + + + + x + 7886 + + + + + x + 7887 + + + + + x + 7888 + + + + + x + 7889 + + + + + x + 7890 + + + + + x + 7891 + + + + + x + 7892 + + + + + x + 7893 + + + + + x + 7894 + + + + + x + 7895 + + + + + x + 7896 + + + + + x + 7897 + + + + + x + 7898 + + + + + x + 7899 + + + + + x + 7900 + + + + + x + 7901 + + + + + x + 7902 + + + + + x + 7903 + + + + + x + 7904 + + + + + x + 7905 + + + + + x + 7906 + + + + + x + 7907 + + + + + x + 7908 + + + + + x + 7909 + + + + + x + 7910 + + + + + x + 7911 + + + + + x + 7912 + + + + + x + 7913 + + + + + x + 7914 + + + + + x + 7915 + + + + + x + 7916 + + + + + x + 7917 + + + + + x + 7918 + + + + + x + 7919 + + + + + x + 7920 + + + + + x + 7921 + + + + + x + 7922 + + + + + x + 7923 + + + + + x + 7924 + + + + + x + 7925 + + + + + x + 7926 + + + + + x + 7927 + + + + + x + 7928 + + + + + x + 7929 + + + + + x + 7930 + + + + + x + 7931 + + + + + x + 7932 + + + + + x + 7933 + + + + + x + 7934 + + + + + x + 7935 + + + + + x + 7936 + + + + + x + 7937 + + + + + x + 7938 + + + + + x + 7939 + + + + + x + 7940 + + + + + x + 7941 + + + + + x + 7942 + + + + + x + 7943 + + + + + x + 7944 + + + + + x + 7945 + + + + + x + 7946 + + + + + x + 7947 + + + + + x + 7948 + + + + + x + 7949 + + + + + x + 7950 + + + + + x + 7951 + + + + + x + 7952 + + + + + x + 7953 + + + + + x + 7954 + + + + + x + 7955 + + + + + x + 7956 + + + + + x + 7957 + + + + + x + 7958 + + + + + x + 7959 + + + + + x + 7960 + + + + + x + 7961 + + + + + x + 7962 + + + + + x + 7963 + + + + + x + 7964 + + + + + x + 7965 + + + + + x + 7966 + + + + + x + 7967 + + + + + x + 7968 + + + + + x + 7969 + + + + + x + 7970 + + + + + x + 7971 + + + + + x + 7972 + + + + + x + 7973 + + + + + x + 7974 + + + + + x + 7975 + + + + + x + 7976 + + + + + x + 7977 + + + + + x + 7978 + + + + + x + 7979 + + + + + x + 7980 + + + + + x + 7981 + + + + + x + 7982 + + + + + x + 7983 + + + + + x + 7984 + + + + + x + 7985 + + + + + x + 7986 + + + + + x + 7987 + + + + + x + 7988 + + + + + x + 7989 + + + + + x + 7990 + + + + + x + 7991 + + + + + x + 7992 + + + + + x + 7993 + + + + + x + 7994 + + + + + x + 7995 + + + + + x + 7996 + + + + + x + 7997 + + + + + x + 7998 + + + + + x + 7999 + + + + + x + 8000 + + + + + x + 8001 + + + + + x + 8002 + + + + + x + 8003 + + + + + x + 8004 + + + + + x + 8005 + + + + + x + 8006 + + + + + x + 8007 + + + + + x + 8008 + + + + + x + 8009 + + + + + x + 8010 + + + + + x + 8011 + + + + + x + 8012 + + + + + x + 8013 + + + + + x + 8014 + + + + + x + 8015 + + + + + x + 8016 + + + + + x + 8017 + + + + + x + 8018 + + + + + x + 8019 + + + + + x + 8020 + + + + + x + 8021 + + + + + x + 8022 + + + + + x + 8023 + + + + + x + 8024 + + + + + x + 8025 + + + + + x + 8026 + + + + + x + 8027 + + + + + x + 8028 + + + + + x + 8029 + + + + + x + 8030 + + + + + x + 8031 + + + + + x + 8032 + + + + + x + 8033 + + + + + x + 8034 + + + + + x + 8035 + + + + + x + 8036 + + + + + x + 8037 + + + + + x + 8038 + + + + + x + 8039 + + + + + x + 8040 + + + + + x + 8041 + + + + + x + 8042 + + + + + x + 8043 + + + + + x + 8044 + + + + + x + 8045 + + + + + x + 8046 + + + + + x + 8047 + + + + + x + 8048 + + + + + x + 8049 + + + + + x + 8050 + + + + + x + 8051 + + + + + x + 8052 + + + + + x + 8053 + + + + + x + 8054 + + + + + x + 8055 + + + + + x + 8056 + + + + + x + 8057 + + + + + x + 8058 + + + + + x + 8059 + + + + + x + 8060 + + + + + x + 8061 + + + + + x + 8062 + + + + + x + 8063 + + + + + x + 8064 + + + + + x + 8065 + + + + + x + 8066 + + + + + x + 8067 + + + + + x + 8068 + + + + + x + 8069 + + + + + x + 8070 + + + + + x + 8071 + + + + + x + 8072 + + + + + x + 8073 + + + + + x + 8074 + + + + + x + 8075 + + + + + x + 8076 + + + + + x + 8077 + + + + + x + 8078 + + + + + x + 8079 + + + + + x + 8080 + + + + + x + 8081 + + + + + x + 8082 + + + + + x + 8083 + + + + + x + 8084 + + + + + x + 8085 + + + + + x + 8086 + + + + + x + 8087 + + + + + x + 8088 + + + + + x + 8089 + + + + + x + 8090 + + + + + x + 8091 + + + + + x + 8092 + + + + + x + 8093 + + + + + x + 8094 + + + + + x + 8095 + + + + + x + 8096 + + + + + x + 8097 + + + + + x + 8098 + + + + + x + 8099 + + + + + x + 8100 + + + + + x + 8101 + + + + + x + 8102 + + + + + x + 8103 + + + + + x + 8104 + + + + + x + 8105 + + + + + x + 8106 + + + + + x + 8107 + + + + + x + 8108 + + + + + x + 8109 + + + + + x + 8110 + + + + + x + 8111 + + + + + x + 8112 + + + + + x + 8113 + + + + + x + 8114 + + + + + x + 8115 + + + + + x + 8116 + + + + + x + 8117 + + + + + x + 8118 + + + + + x + 8119 + + + + + x + 8120 + + + + + x + 8121 + + + + + x + 8122 + + + + + x + 8123 + + + + + x + 8124 + + + + + x + 8125 + + + + + x + 8126 + + + + + x + 8127 + + + + + x + 8128 + + + + + x + 8129 + + + + + x + 8130 + + + + + x + 8131 + + + + + x + 8132 + + + + + x + 8133 + + + + + x + 8134 + + + + + x + 8135 + + + + + x + 8136 + + + + + x + 8137 + + + + + x + 8138 + + + + + x + 8139 + + + + + x + 8140 + + + + + x + 8141 + + + + + x + 8142 + + + + + x + 8143 + + + + + x + 8144 + + + + + x + 8145 + + + + + x + 8146 + + + + + x + 8147 + + + + + x + 8148 + + + + + x + 8149 + + + + + x + 8150 + + + + + x + 8151 + + + + + x + 8152 + + + + + x + 8153 + + + + + x + 8154 + + + + + x + 8155 + + + + + x + 8156 + + + + + x + 8157 + + + + + x + 8158 + + + + + x + 8159 + + + + + x + 8160 + + + + + x + 8161 + + + + + x + 8162 + + + + + x + 8163 + + + + + x + 8164 + + + + + x + 8165 + + + + + x + 8166 + + + + + x + 8167 + + + + + x + 8168 + + + + + x + 8169 + + + + + x + 8170 + + + + + x + 8171 + + + + + x + 8172 + + + + + x + 8173 + + + + + x + 8174 + + + + + x + 8175 + + + + + x + 8176 + + + + + x + 8177 + + + + + x + 8178 + + + + + x + 8179 + + + + + x + 8180 + + + + + x + 8181 + + + + + x + 8182 + + + + + x + 8183 + + + + + x + 8184 + + + + + x + 8185 + + + + + x + 8186 + + + + + x + 8187 + + + + + x + 8188 + + + + + x + 8189 + + + + + x + 8190 + + + + + x + 8191 + + + + + x + 8192 + + + + + + + + x + + + x1 + + + + + x1 + + x + 1 + + + + + + + + x + + + + x + 0 + + + + + diff --git a/bench_horn_mcmc/w1/config b/bench_horn_mcmc/w1/config new file mode 100644 index 000000000..313978702 --- /dev/null +++ b/bench_horn_mcmc/w1/config @@ -0,0 +1,12 @@ +DISJUNCTS +10 +CONJUNCTS +10 +COEFFICIENT BAG +3 +-1 0 1 +IMMEDIATE BAG +3 +-1 0 1 +NOP PERCENT +90 diff --git a/bench_horn_mcmc/w1/first.xml b/bench_horn_mcmc/w1/first.xml new file mode 100644 index 000000000..ca148d667 --- /dev/null +++ b/bench_horn_mcmc/w1/first.xml @@ -0,0 +1,80 @@ + + + + + 2 + itp + + + + x + x1 + n + + + + x + n + + + + + n + 0 + + + + + x + 0 + + + + + + + x + n + + + x1 + n + + + + + x + n + + + + + x1 + + x + 1 + + + + + + + + x + n + + + + + x + n + + + + x + n + + + + + diff --git a/tools/deep_bench/scripts/mcmcify/mcmcify.py b/tools/deep_bench/scripts/mcmcify/mcmcify.py index 260dc8dd9..8ab91a7b8 100755 --- a/tools/deep_bench/scripts/mcmcify/mcmcify.py +++ b/tools/deep_bench/scripts/mcmcify/mcmcify.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python2 from __future__ import print_function import os import sys From 92370f7c521370dc4df73662473905393f846936 Mon Sep 17 00:00:00 2001 From: Sam Kaufman Date: Wed, 21 Feb 2018 19:18:41 -0500 Subject: [PATCH 059/236] Moved to 3 trials with 1min timeout --- tools/deep_bench/linux/benchmark-freqhorn.py | 3 ++- tools/deep_bench/linux/run-freqhorn-benchmarks.sh | 2 +- .../ansible/roles/benchscripts/files/benchmark-others.py | 5 +++-- tools/deep_bench/windows/run-other-benchmarks.sh | 2 +- 4 files changed, 7 insertions(+), 5 deletions(-) diff --git a/tools/deep_bench/linux/benchmark-freqhorn.py b/tools/deep_bench/linux/benchmark-freqhorn.py index ded7bcbca..722315c10 100755 --- a/tools/deep_bench/linux/benchmark-freqhorn.py +++ b/tools/deep_bench/linux/benchmark-freqhorn.py @@ -12,6 +12,7 @@ from itertools import product, izip +ONE_MIN = 1 * 60 # in seconds SUCCESS_ITERS_RE = re.compile(r'\s*\-+>\s+Success after (.*) iterations\s*') ELAPSED_RE = re.compile(r'\s*elapsed: (.*)s\s*') PROCS_TO_TRY = [1, 4] @@ -30,7 +31,7 @@ def name_only(path): return os.path.splitext(os.path.split(path)[1])[0].lower() -def run_deephorn(example_path, proc_cnt, aggprune, logs_dir_path, timeout=600): +def run_deephorn(example_path, proc_cnt, aggprune, logs_dir_path, timeout=ONE_MIN): aggprune_arg = "0" if aggprune: aggprune_arg = "1" diff --git a/tools/deep_bench/linux/run-freqhorn-benchmarks.sh b/tools/deep_bench/linux/run-freqhorn-benchmarks.sh index 0252d7351..2bc255acb 100755 --- a/tools/deep_bench/linux/run-freqhorn-benchmarks.sh +++ b/tools/deep_bench/linux/run-freqhorn-benchmarks.sh @@ -57,7 +57,7 @@ BENCH_MPIRUN=/usr/bin/mpirun parallel \ "./benchmark-freqhorn.py -v -i 1 --logdir /home/ubuntu/out/benchlogs -o /home/ubuntu/out/ --hyper {2} /home/ubuntu/aeval/bench_horn/{1}.smt2 &> /home/ubuntu/out/std.log ; " \ "cd /home/ubuntu ; " \ "tar -zcf out-{1}-{2}-i{3}.tar.gz out/ ;" \ - ::: 2,agg_on 2,agg_off 5,agg_on 5,agg_off ::: {0..9} + ::: 2,agg_on 2,agg_off 5,agg_on 5,agg_off ::: {0..2} # Remove the disabling of StrictHostKeyChecking mv ~/.ssh/config.backup ~/.ssh/config diff --git a/tools/deep_bench/windows/ansible/roles/benchscripts/files/benchmark-others.py b/tools/deep_bench/windows/ansible/roles/benchscripts/files/benchmark-others.py index 8681d5a62..d7f1530af 100755 --- a/tools/deep_bench/windows/ansible/roles/benchscripts/files/benchmark-others.py +++ b/tools/deep_bench/windows/ansible/roles/benchscripts/files/benchmark-others.py @@ -12,7 +12,7 @@ from collections import defaultdict -TEN_MINS = 10*60 # in seconds +ONE_MIN = 1 * 60 # in seconds TOTAL_TIME_RE = re.compile(r'\s*[tT]otal [tT]ime:?\s+([\.0-9]*)\s*') BOOGIE_RESULTS_RE = re.compile(r'\s*Boogie program verifier finished with [^0]\d* verified, 0 errors.*') @@ -257,7 +257,8 @@ def main(): if args.verbose: print("Running %s on %s" % (n, name_only(b))) try: - fn_result = fn(b, args.logdir, verbose=args.verbose, timeout=TEN_MINS) + fn_result = fn(b, args.logdir, verbose=args.verbose, + timeout=ONE_MIN) except subprocess32.CalledProcessError: traceback.print_exc() break diff --git a/tools/deep_bench/windows/run-other-benchmarks.sh b/tools/deep_bench/windows/run-other-benchmarks.sh index 824a6dbfb..2ffe4940d 100755 --- a/tools/deep_bench/windows/run-other-benchmarks.sh +++ b/tools/deep_bench/windows/run-other-benchmarks.sh @@ -25,7 +25,7 @@ find ../../../bench_horn/*.smt2 -exec basename {} .smt2 \; | parallel \ "MCMC_ROOT=/cygdrive/c/MCMC ICE_ROOT=/cygdrive/c/ICE MCMC_BENCH=/cygdrive/c/bench_horn_mcmc ICE_BENCH=/cygdrive/c/bench_horn_ice /cygdrive/c/benchmark-others.py --logdir out/ -o out/times.json --{2} 1 {1} &> out/std.log ; " \ "cd ~ ; " \ "tar -zcf out-{1}-{2}-i{3}.tar.gz out/ ;" \ - ::: mcmc ice z3 ::: {0..9} + ::: mcmc ice z3 ::: {0..2} # Remove the disabling of StrictHostKeyChecking mv ~/.ssh/config.backup ~/.ssh/config From aa58b7a03835aa9929d327145ec14c9f66634fbe Mon Sep 17 00:00:00 2001 From: Sam Kaufman Date: Wed, 21 Feb 2018 23:41:50 -0500 Subject: [PATCH 060/236] Some new ICE benchmarks --- bench_horn_ice/bhmr2007_true-unreach-call.bpl | 24 ++++++++++++++ bench_horn_ice/cegar1.bpl | 17 ++++++++++ bench_horn_ice/cegar2.bpl | 28 ++++++++++++++++ bench_horn_ice/countud.bpl | 16 ++++++++++ bench_horn_ice/css2003_true-unreach-call.bpl | 19 +++++++++++ bench_horn_ice/fig3.bpl | 32 +++++++++++++++++++ bench_horn_ice/fig9.bpl | 14 ++++++++ bench_horn_ice/hhk2008_true-unreach-call.bpl | 22 +++++++++++++ bench_horn_ice/n_c11.bpl | 23 +++++++++++++ bench_horn_ice/phases_true-unreach-call1.bpl | 28 ++++++++++++++++ bench_horn_ice/trex3.bpl | 29 +++++++++++++++++ bench_horn_ice/w1.bpl | 17 ++++++++++ bench_horn_ice/w2.bpl | 17 ++++++++++ 13 files changed, 286 insertions(+) create mode 100644 bench_horn_ice/bhmr2007_true-unreach-call.bpl create mode 100644 bench_horn_ice/cegar1.bpl create mode 100644 bench_horn_ice/cegar2.bpl create mode 100644 bench_horn_ice/countud.bpl create mode 100644 bench_horn_ice/css2003_true-unreach-call.bpl create mode 100644 bench_horn_ice/fig3.bpl create mode 100644 bench_horn_ice/fig9.bpl create mode 100644 bench_horn_ice/hhk2008_true-unreach-call.bpl create mode 100644 bench_horn_ice/n_c11.bpl create mode 100644 bench_horn_ice/phases_true-unreach-call1.bpl create mode 100644 bench_horn_ice/trex3.bpl create mode 100644 bench_horn_ice/w1.bpl create mode 100644 bench_horn_ice/w2.bpl diff --git a/bench_horn_ice/bhmr2007_true-unreach-call.bpl b/bench_horn_ice/bhmr2007_true-unreach-call.bpl new file mode 100644 index 000000000..30ff0bd10 --- /dev/null +++ b/bench_horn_ice/bhmr2007_true-unreach-call.bpl @@ -0,0 +1,24 @@ +// c/loop-lit/bhmr2007_true-unreach-call.c + +procedure main() { + var i,n,a,b: int; + i := 0; + a := 0; + b := 0; + //n = __VERIFIER_nondet_int(); + assume(n >= 0); + while (i < n) + // invariant a + b == 3*i && i <= n; + { + if (*) { + a := a + 1; + b := b + 2; + } else { + a := a + 2; + b := b + 1; + } + i := i + 1; + } + assert(a + b == 3*n); + +} diff --git a/bench_horn_ice/cegar1.bpl b/bench_horn_ice/cegar1.bpl new file mode 100644 index 000000000..08584a8b0 --- /dev/null +++ b/bench_horn_ice/cegar1.bpl @@ -0,0 +1,17 @@ +procedure main() +{ + var x, y, x0, y0: int; + + assume (0 <= x0 && x0 <= 2 && 0 <= y0 && y0 <= 2); + + x := x0; + y := y0; + + while (*) + // invariant (x - y <= 2 && y - x <= 2); + { + x := x + 2; + y := y + 2; + } + assert(!((x == 4) && (y == 0))); +} diff --git a/bench_horn_ice/cegar2.bpl b/bench_horn_ice/cegar2.bpl new file mode 100644 index 000000000..5567ca6d2 --- /dev/null +++ b/bench_horn_ice/cegar2.bpl @@ -0,0 +1,28 @@ +// ../ice-benchmarks/single/cegar2.c + +// NOTE: In contract to the smt2, this cegar2 bounds the +// postcondition to cases with non-zero iterations. + +procedure main() { + var N, x, m, input : int; + + x := 0; + m := 0; + + while (x < N) + //invariant m >= 0 && ((N>0) ==> x <= N) && (m == 0 || m < x) && x >= 0; + { + + havoc input; + if( input != 0) { + + m := x; + } + + x := x + 1; + + } + + assert((N>0) ==> ((0 <= m) && (m < N))); +} + diff --git a/bench_horn_ice/countud.bpl b/bench_horn_ice/countud.bpl new file mode 100644 index 000000000..b44d8d573 --- /dev/null +++ b/bench_horn_ice/countud.bpl @@ -0,0 +1,16 @@ +procedure main() +{ + var n, x, y: int; + assume (n >= 0) && (x >= 0) && (y >= 0); + + x := n; + y := 0; + + while(x > 0) + // invariant (x + y == n) && x >= 0; + { + x := x - 1; + y := y + 1; + } + assert(y==n); +} diff --git a/bench_horn_ice/css2003_true-unreach-call.bpl b/bench_horn_ice/css2003_true-unreach-call.bpl new file mode 100644 index 000000000..0730fa8db --- /dev/null +++ b/bench_horn_ice/css2003_true-unreach-call.bpl @@ -0,0 +1,19 @@ +// c/loop-lit/css2003_true-unreach-call.c + +procedure main() { + var LARGE_INT: int; + var i,j,k: int; + LARGE_INT := 1000; + i := 1; + j := 1; + //k = __VERIFIER_nondet_int(); + assume(0 <= k && k <= 1); + while (i < LARGE_INT) + // invariant 1 <= i + k && i + k <= 2 && i >= 1; + { + i := i + 1; + j := j + k; + k := k - 1; + assert(1 <= i + k && i + k <= 2 && i >= 1); + } +} diff --git a/bench_horn_ice/fig3.bpl b/bench_horn_ice/fig3.bpl new file mode 100644 index 000000000..c5bc6172c --- /dev/null +++ b/bench_horn_ice/fig3.bpl @@ -0,0 +1,32 @@ +function {:existential true} b0(x:int, y:int, lock:int): bool; + +var y: int; + +procedure main() +modifies y; +{ + var x, lock: int; + lock := 0; + + lock := 1; + x := y; + if (*) + { + lock := 0; + y := y + 1; + } + + while (x != y) + invariant b0(x, y, lock); + { + lock := 1; + x := y; + if (*) + { + lock := 0; + y := y + 1; + } + } + assert lock == 1; +} + diff --git a/bench_horn_ice/fig9.bpl b/bench_horn_ice/fig9.bpl new file mode 100644 index 000000000..e9ff898db --- /dev/null +++ b/bench_horn_ice/fig9.bpl @@ -0,0 +1,14 @@ +procedure main() +{ + var x, y : int; + x := 0; + y := 0; + + while(y >= 0) + // invariant y == 0 && x == 0; + { + y := y + x; + } + + assert(0 == 1); +} diff --git a/bench_horn_ice/hhk2008_true-unreach-call.bpl b/bench_horn_ice/hhk2008_true-unreach-call.bpl new file mode 100644 index 000000000..903306917 --- /dev/null +++ b/bench_horn_ice/hhk2008_true-unreach-call.bpl @@ -0,0 +1,22 @@ +// c/loop-lit/hhk2008_true-unreach-call.c + +procedure main() +{ + var a,b: int; + var res,cnt: int; + + assume (a <= 10000); + assume (0 <= b && b <= 10000); + + res := a; + cnt := b; + + while (cnt > 0) + // invariant res == a + b - cnt && cnt >= 0; + { + cnt := cnt - 1; + res := res + 1; + } + + assert (res == a + b); +} diff --git a/bench_horn_ice/n_c11.bpl b/bench_horn_ice/n_c11.bpl new file mode 100644 index 000000000..6f0db95a1 --- /dev/null +++ b/bench_horn_ice/n_c11.bpl @@ -0,0 +1,23 @@ +// ../ice-benchmarks/single/n_c11.c + +procedure main() +{ + var len, i: int; + var a: [int]int; + len := 0; + + while ( * ) + // invariant len <= 4 && len >= 0; + { + if (len == 4) + { + len := 0; + } + if (len < 0 || len > 5) + { + assert false; + } + len := len + 1; + } +} + diff --git a/bench_horn_ice/phases_true-unreach-call1.bpl b/bench_horn_ice/phases_true-unreach-call1.bpl new file mode 100644 index 000000000..a8f70f001 --- /dev/null +++ b/bench_horn_ice/phases_true-unreach-call1.bpl @@ -0,0 +1,28 @@ +// c/loop-acceleration/phases_true-unreach-call1.c + +procedure main() { + var tmp1: int; + var tmp2: int; + var x: int; + var LRG1: int; + var LRG2: int; + + x := 0; + LRG1 := 2 * tmp1; + LRG2 := (2 * tmp2) + 1; + + assume 0 < LRG1; + assume LRG1 < LRG2; + + while (x < LRG2) //0x0fffffff + // invariant x >= LRG1 ==> (x mod 2 == 0) ; + { + if (x < LRG1) { // 0xfff0 + x := x + 1; + } else { + x := x + 2; + } + } + + assert(0 == (x mod 2)); +} diff --git a/bench_horn_ice/trex3.bpl b/bench_horn_ice/trex3.bpl new file mode 100644 index 000000000..5dc54d994 --- /dev/null +++ b/bench_horn_ice/trex3.bpl @@ -0,0 +1,29 @@ +procedure main() +{ + var d1, d2, d3, x1, x2, x3: int; + var c1, c2: int; + + assume (x1 >= 0) && (x2 >= 0) && (x3 >= 0); + + d1 := 1; + d2 := 1; + d3 := 1; + + while(x1 > 0 && x2 > 0 && x3 > 0) + // invariant x1 >= 0 && x2 >= 0 && x3 >= 0 && d1 == 1 && d2 == 1 && d3 == 1; + { + if (c1 != 0) + { + x1 := x1 - d1; + } + else if (c2 != 0) + { + x2 := x2 - d2; + } + else + { + x3 := x3 - d3; + } + } + assert(x1 == 0 || x2 == 0 || x3 == 0); +} diff --git a/bench_horn_ice/w1.bpl b/bench_horn_ice/w1.bpl new file mode 100644 index 000000000..16c87ec38 --- /dev/null +++ b/bench_horn_ice/w1.bpl @@ -0,0 +1,17 @@ +procedure main() +{ + var x, n : int; + + assume n >= 0; + + x := 0; + + while (x < n) + // invariant x <= n; + { + x := x + 1; + } + + assert(x == n); + +} diff --git a/bench_horn_ice/w2.bpl b/bench_horn_ice/w2.bpl new file mode 100644 index 000000000..63d83fe66 --- /dev/null +++ b/bench_horn_ice/w2.bpl @@ -0,0 +1,17 @@ +procedure main() { + var x, n : int; + assume n > 0; + x := 0; + + while ( 0 == 0 ) + // invariant x <= n; + { + if ( * ) { + x := x + 1; + if (x >= n ) { + break; + } + } + } + assert(x == n); +} From 9764d3a63226eb4ef4dc369e11b1c15170022b99 Mon Sep 17 00:00:00 2001 From: Sam Kaufman Date: Thu, 22 Feb 2018 00:40:28 -0500 Subject: [PATCH 061/236] Convenience script for comparing benchmark presence between algos. --- tools/deep_bench/scripts/benchsistency.py | 61 +++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100755 tools/deep_bench/scripts/benchsistency.py diff --git a/tools/deep_bench/scripts/benchsistency.py b/tools/deep_bench/scripts/benchsistency.py new file mode 100755 index 000000000..e4d11851f --- /dev/null +++ b/tools/deep_bench/scripts/benchsistency.py @@ -0,0 +1,61 @@ +#!/usr/bin/env python +from __future__ import print_function +import os +from tabulate import tabulate + + +STD_SMT2_BENCH_DIR = "bench_horn" +STD_ICE_BENCH_DIR = "bench_horn_ice" +STD_MCMC_BENCH_DIR = "bench_horn_mcmc" +STD_ALL = [STD_SMT2_BENCH_DIR, STD_ICE_BENCH_DIR, STD_MCMC_BENCH_DIR] + + +class MissingRootException(Exception): + pass + + +def plausible_root(path): + for dirname in STD_ALL: + if os.path.isdir(os.path.join(path, dirname)): + return True + return False + + +def list_benchmarks(path): + tail = os.path.split(path)[1].lower() + for entry in os.listdir(path): + if tail == STD_SMT2_BENCH_DIR: + name, ext = os.path.splitext(entry) + if ext == '.smt2': + yield name + elif tail == STD_ICE_BENCH_DIR: + name, ext = os.path.splitext(entry) + if ext == '.bpl': + yield name + elif tail == STD_MCMC_BENCH_DIR: + if os.path.isdir(path): + yield entry + else: + raise ValueError("%s is of unrecognized typed" % tail) + + +def main(): + root = os.getcwd() + while not plausible_root(root): + new_root = os.path.split(root)[0] + if new_root == root: + raise MissingRootException("didn't find benchmarks dirs above cwd") + root = new_root + + found = dict((dirname, set(list_benchmarks(os.path.join(root, dirname)))) + for dirname in STD_ALL) + all_benchs = set.union(*found.values()) + + sorted_keys = list(sorted(found.keys())) + table = [[b] + [u'\u2713' if b in found[a] else '' for a in sorted_keys] + for b in all_benchs] + print(tabulate(table, headers=[]+sorted_keys)) + + +if __name__ == '__main__': + main() \ No newline at end of file From 0cdd530106c458a568c0e83efce962e5037e5bd8 Mon Sep 17 00:00:00 2001 From: Sam Kaufman Date: Thu, 22 Feb 2018 10:14:19 -0500 Subject: [PATCH 062/236] Resolved renamed benchmarks for MCMC --- .../const_false-unreach-call1.c/config | 12 - .../const_false-unreach-call1.c/first.xml | 99 - .../config | 12 - .../first.xml | 70 - .../config | 12 - .../first.xml | 98 - .../config | 12 - .../first.xml | 104 - .../config | 12 - .../first.xml | 133 - bench_horn_mcmc/nonlin_minus/config | 12 - bench_horn_mcmc/nonlin_minus/first.xml | 98 - bench_horn_mcmc/nonlin_mod/config | 12 - bench_horn_mcmc/nonlin_mod/first.xml | 71 - .../config | 0 .../first.xml | 0 .../config | 0 .../first.xml | 0 .../config | 0 .../first.xml | 0 .../config | 0 .../first.xml | 0 .../config | 0 .../first.xml | 0 .../config | 0 .../first.xml | 0 bench_horn_mcmc/s_mutants_01/config | 4 +- bench_horn_mcmc/s_mutants_07/config | 4 +- .../config | 0 .../first.xml | 0 bench_horn_mcmc/s_mutants_09/config | 4 +- bench_horn_mcmc/s_mutants_10/config | 4 +- bench_horn_mcmc/s_mutants_11/config | 4 +- bench_horn_mcmc/s_mutants_12/config | 4 +- bench_horn_mcmc/s_mutants_13/config | 4 +- bench_horn_mcmc/s_mutants_14/config | 4 +- bench_horn_mcmc/s_mutants_15/config | 4 +- bench_horn_mcmc/samples_only_01/config | 12 - bench_horn_mcmc/samples_only_01/first.xml | 82 - bench_horn_mcmc/samples_only_02/config | 12 - bench_horn_mcmc/samples_only_02/first.xml | 159 - bench_horn_mcmc/samples_only_03/config | 12 - bench_horn_mcmc/samples_only_03/first.xml | 90 - bench_horn_mcmc/samples_only_04/config | 12 - bench_horn_mcmc/samples_only_04/first.xml | 128 - bench_horn_mcmc/samples_only_05/config | 12 - bench_horn_mcmc/samples_only_05/first.xml | 90 - bench_horn_mcmc/samples_only_06/config | 12 - bench_horn_mcmc/samples_only_06/first.xml | 117 - bench_horn_mcmc/samples_only_07/config | 12 - bench_horn_mcmc/samples_only_07/first.xml | 87 - bench_horn_mcmc/samples_only_08/config | 12 - bench_horn_mcmc/samples_only_08/first.xml | 137 - bench_horn_mcmc/samples_search_01/config | 12 - bench_horn_mcmc/samples_search_01/first.xml | 78 - bench_horn_mcmc/samples_search_02/config | 12 - bench_horn_mcmc/samples_search_02/first.xml | 122 - bench_horn_mcmc/samples_search_03/config | 12 - bench_horn_mcmc/samples_search_03/first.xml | 94 - bench_horn_mcmc/samples_search_04/config | 12 - bench_horn_mcmc/samples_search_04/first.xml | 90 - bench_horn_mcmc/samples_search_05/config | 12 - bench_horn_mcmc/samples_search_05/first.xml | 90 - bench_horn_mcmc/samples_search_06/config | 12 - bench_horn_mcmc/samples_search_06/first.xml | 99 - bench_horn_mcmc/samples_search_07/config | 12 - bench_horn_mcmc/samples_search_07/first.xml | 128 - bench_horn_mcmc/samples_search_09/config | 12 - bench_horn_mcmc/samples_search_09/first.xml | 82 - bench_horn_mcmc/samples_search_10/config | 12 - bench_horn_mcmc/samples_search_10/first.xml | 76 - bench_horn_mcmc/samples_search_11/config | 12 - bench_horn_mcmc/samples_search_11/first.xml | 107 - bench_horn_mcmc/samples_search_12/config | 12 - bench_horn_mcmc/samples_search_12/first.xml | 186 - bench_horn_mcmc/samples_search_13/config | 12 - bench_horn_mcmc/samples_search_13/first.xml | 194 - bench_horn_mcmc/samples_search_14/config | 12 - bench_horn_mcmc/samples_search_14/first.xml | 195 - bench_horn_mcmc/samples_search_15/config | 12 - bench_horn_mcmc/samples_search_15/first.xml | 195 - .../samples_shrink_big_numbers_1024/config | 12 - .../samples_shrink_big_numbers_1024/first.xml | 6197 -- .../samples_shrink_big_numbers_2048/config | 12 - .../samples_shrink_big_numbers_2048/first.xml | 12341 ---- .../samples_shrink_big_numbers_4096/config | 12 - .../samples_shrink_big_numbers_4096/first.xml | 24635 -------- .../samples_shrink_big_numbers_8192/config | 12 - .../samples_shrink_big_numbers_8192/first.xml | 49205 ---------------- tools/deep_bench/scripts/benchsistency.py | 16 +- 90 files changed, 27 insertions(+), 96098 deletions(-) delete mode 100644 bench_horn_mcmc/const_false-unreach-call1.c/config delete mode 100644 bench_horn_mcmc/const_false-unreach-call1.c/first.xml delete mode 100644 bench_horn_mcmc/count_by_1_true-unreach-call_true-termination.c/config delete mode 100644 bench_horn_mcmc/count_by_1_true-unreach-call_true-termination.c/first.xml delete mode 100644 bench_horn_mcmc/count_by_k_true-unreach-call_true-termination_bound/config delete mode 100644 bench_horn_mcmc/count_by_k_true-unreach-call_true-termination_bound/first.xml delete mode 100644 bench_horn_mcmc/count_by_k_true-unreach-call_true-termination_unbound/config delete mode 100644 bench_horn_mcmc/count_by_k_true-unreach-call_true-termination_unbound/first.xml delete mode 100644 bench_horn_mcmc/count_by_nondet_true-unreach-call_true-termination/config delete mode 100644 bench_horn_mcmc/count_by_nondet_true-unreach-call_true-termination/first.xml delete mode 100755 bench_horn_mcmc/nonlin_minus/config delete mode 100755 bench_horn_mcmc/nonlin_minus/first.xml delete mode 100755 bench_horn_mcmc/nonlin_mod/config delete mode 100755 bench_horn_mcmc/nonlin_mod/first.xml rename bench_horn_mcmc/{samples_search_disj_ite_01 => s_disj_ite_01}/config (100%) rename bench_horn_mcmc/{samples_search_disj_ite_01 => s_disj_ite_01}/first.xml (100%) rename bench_horn_mcmc/{samples_search_disj_ite_02 => s_disj_ite_02}/config (100%) rename bench_horn_mcmc/{samples_search_disj_ite_02 => s_disj_ite_02}/first.xml (100%) rename bench_horn_mcmc/{samples_search_disj_ite_03 => s_disj_ite_03}/config (100%) rename bench_horn_mcmc/{samples_search_disj_ite_03 => s_disj_ite_03}/first.xml (100%) rename bench_horn_mcmc/{samples_search_disj_ite_04 => s_disj_ite_04}/config (100%) rename bench_horn_mcmc/{samples_search_disj_ite_04 => s_disj_ite_04}/first.xml (100%) rename bench_horn_mcmc/{samples_search_disj_ite_05 => s_disj_ite_05}/config (100%) rename bench_horn_mcmc/{samples_search_disj_ite_05 => s_disj_ite_05}/first.xml (100%) rename bench_horn_mcmc/{samples_search_disj_ite_06 => s_disj_ite_06}/config (100%) rename bench_horn_mcmc/{samples_search_disj_ite_06 => s_disj_ite_06}/first.xml (100%) rename bench_horn_mcmc/{samples_search_08 => s_mutants_08}/config (100%) rename bench_horn_mcmc/{samples_search_08 => s_mutants_08}/first.xml (100%) delete mode 100644 bench_horn_mcmc/samples_only_01/config delete mode 100644 bench_horn_mcmc/samples_only_01/first.xml delete mode 100644 bench_horn_mcmc/samples_only_02/config delete mode 100644 bench_horn_mcmc/samples_only_02/first.xml delete mode 100644 bench_horn_mcmc/samples_only_03/config delete mode 100644 bench_horn_mcmc/samples_only_03/first.xml delete mode 100644 bench_horn_mcmc/samples_only_04/config delete mode 100644 bench_horn_mcmc/samples_only_04/first.xml delete mode 100644 bench_horn_mcmc/samples_only_05/config delete mode 100644 bench_horn_mcmc/samples_only_05/first.xml delete mode 100644 bench_horn_mcmc/samples_only_06/config delete mode 100644 bench_horn_mcmc/samples_only_06/first.xml delete mode 100644 bench_horn_mcmc/samples_only_07/config delete mode 100644 bench_horn_mcmc/samples_only_07/first.xml delete mode 100644 bench_horn_mcmc/samples_only_08/config delete mode 100644 bench_horn_mcmc/samples_only_08/first.xml delete mode 100644 bench_horn_mcmc/samples_search_01/config delete mode 100644 bench_horn_mcmc/samples_search_01/first.xml delete mode 100644 bench_horn_mcmc/samples_search_02/config delete mode 100644 bench_horn_mcmc/samples_search_02/first.xml delete mode 100644 bench_horn_mcmc/samples_search_03/config delete mode 100644 bench_horn_mcmc/samples_search_03/first.xml delete mode 100644 bench_horn_mcmc/samples_search_04/config delete mode 100644 bench_horn_mcmc/samples_search_04/first.xml delete mode 100644 bench_horn_mcmc/samples_search_05/config delete mode 100644 bench_horn_mcmc/samples_search_05/first.xml delete mode 100644 bench_horn_mcmc/samples_search_06/config delete mode 100644 bench_horn_mcmc/samples_search_06/first.xml delete mode 100644 bench_horn_mcmc/samples_search_07/config delete mode 100644 bench_horn_mcmc/samples_search_07/first.xml delete mode 100644 bench_horn_mcmc/samples_search_09/config delete mode 100644 bench_horn_mcmc/samples_search_09/first.xml delete mode 100644 bench_horn_mcmc/samples_search_10/config delete mode 100644 bench_horn_mcmc/samples_search_10/first.xml delete mode 100644 bench_horn_mcmc/samples_search_11/config delete mode 100644 bench_horn_mcmc/samples_search_11/first.xml delete mode 100644 bench_horn_mcmc/samples_search_12/config delete mode 100644 bench_horn_mcmc/samples_search_12/first.xml delete mode 100644 bench_horn_mcmc/samples_search_13/config delete mode 100644 bench_horn_mcmc/samples_search_13/first.xml delete mode 100644 bench_horn_mcmc/samples_search_14/config delete mode 100644 bench_horn_mcmc/samples_search_14/first.xml delete mode 100644 bench_horn_mcmc/samples_search_15/config delete mode 100644 bench_horn_mcmc/samples_search_15/first.xml delete mode 100644 bench_horn_mcmc/samples_shrink_big_numbers_1024/config delete mode 100644 bench_horn_mcmc/samples_shrink_big_numbers_1024/first.xml delete mode 100644 bench_horn_mcmc/samples_shrink_big_numbers_2048/config delete mode 100644 bench_horn_mcmc/samples_shrink_big_numbers_2048/first.xml delete mode 100644 bench_horn_mcmc/samples_shrink_big_numbers_4096/config delete mode 100644 bench_horn_mcmc/samples_shrink_big_numbers_4096/first.xml delete mode 100644 bench_horn_mcmc/samples_shrink_big_numbers_8192/config delete mode 100644 bench_horn_mcmc/samples_shrink_big_numbers_8192/first.xml diff --git a/bench_horn_mcmc/const_false-unreach-call1.c/config b/bench_horn_mcmc/const_false-unreach-call1.c/config deleted file mode 100644 index 3d057dd12..000000000 --- a/bench_horn_mcmc/const_false-unreach-call1.c/config +++ /dev/null @@ -1,12 +0,0 @@ -DISJUNCTS -10 -CONJUNCTS -10 -COEFFICIENT BAG -3 --1 0 1 -IMMEDIATE BAG -5 --1024 -1 0 1 1024 -NOP PERCENT -90 diff --git a/bench_horn_mcmc/const_false-unreach-call1.c/first.xml b/bench_horn_mcmc/const_false-unreach-call1.c/first.xml deleted file mode 100644 index 5f95ad577..000000000 --- a/bench_horn_mcmc/const_false-unreach-call1.c/first.xml +++ /dev/null @@ -1,99 +0,0 @@ - - - - - 2 - itp - - - - x - x_ - y - y_ - - - - y - x - - - - - y - 0 - - - - - x - 1 - - - - - - - y_ - x_ - - - y - x - - - - - y_ - 0 - - - - - y_ - 1024 - - - - - y - - 1 - y_ - - - - - - x - 0 - - - - - - - y_ - x_ - - - - - y_ - 0 - - - - - y_ - 1024 - - - - x_ - 1 - - - - - diff --git a/bench_horn_mcmc/count_by_1_true-unreach-call_true-termination.c/config b/bench_horn_mcmc/count_by_1_true-unreach-call_true-termination.c/config deleted file mode 100644 index 3a13bfd83..000000000 --- a/bench_horn_mcmc/count_by_1_true-unreach-call_true-termination.c/config +++ /dev/null @@ -1,12 +0,0 @@ -DISJUNCTS -10 -CONJUNCTS -10 -COEFFICIENT BAG -3 --1 0 1 -IMMEDIATE BAG -5 --10000 -1 0 1 10000 -NOP PERCENT -90 diff --git a/bench_horn_mcmc/count_by_1_true-unreach-call_true-termination.c/first.xml b/bench_horn_mcmc/count_by_1_true-unreach-call_true-termination.c/first.xml deleted file mode 100644 index e236c4376..000000000 --- a/bench_horn_mcmc/count_by_1_true-unreach-call_true-termination.c/first.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - - - 2 - itp - - - - i - i_ - LRG - - - - i - LRG - - - - - i - 0 - - - - - - - i_ - LRG - - - i - LRG - - - - - i_ - LRG - - - - - i - - 1 - i_ - - - - - - - - LRG - LRG - - - - - LRG - 10000 - - - - - - diff --git a/bench_horn_mcmc/count_by_k_true-unreach-call_true-termination_bound/config b/bench_horn_mcmc/count_by_k_true-unreach-call_true-termination_bound/config deleted file mode 100644 index 313978702..000000000 --- a/bench_horn_mcmc/count_by_k_true-unreach-call_true-termination_bound/config +++ /dev/null @@ -1,12 +0,0 @@ -DISJUNCTS -10 -CONJUNCTS -10 -COEFFICIENT BAG -3 --1 0 1 -IMMEDIATE BAG -3 --1 0 1 -NOP PERCENT -90 diff --git a/bench_horn_mcmc/count_by_k_true-unreach-call_true-termination_bound/first.xml b/bench_horn_mcmc/count_by_k_true-unreach-call_true-termination_bound/first.xml deleted file mode 100644 index 7130ce607..000000000 --- a/bench_horn_mcmc/count_by_k_true-unreach-call_true-termination_bound/first.xml +++ /dev/null @@ -1,98 +0,0 @@ - - - - - 3 - itp - - - - i - i_ - k - LRG - - - - i - k - LRG - - - - - 0 - k - - - - - LRG - 0 - - - - - i - 0 - - - - - - - i_ - k - LRG - - - i - k - LRG - - - - - i_ - - LRG - k - - - - - - i - - i_ - k - - - - - - - - i - k - LRG - - - - i - - LRG - k - - - - i - - LRG - k - - - - - - diff --git a/bench_horn_mcmc/count_by_k_true-unreach-call_true-termination_unbound/config b/bench_horn_mcmc/count_by_k_true-unreach-call_true-termination_unbound/config deleted file mode 100644 index c851ea2e0..000000000 --- a/bench_horn_mcmc/count_by_k_true-unreach-call_true-termination_unbound/config +++ /dev/null @@ -1,12 +0,0 @@ -DISJUNCTS -10 -CONJUNCTS -10 -COEFFICIENT BAG -3 --1 0 1 -IMMEDIATE BAG -5 --10 -1 0 1 10 -NOP PERCENT -90 diff --git a/bench_horn_mcmc/count_by_k_true-unreach-call_true-termination_unbound/first.xml b/bench_horn_mcmc/count_by_k_true-unreach-call_true-termination_unbound/first.xml deleted file mode 100644 index 8fd051849..000000000 --- a/bench_horn_mcmc/count_by_k_true-unreach-call_true-termination_unbound/first.xml +++ /dev/null @@ -1,104 +0,0 @@ - - - - - 3 - itp - - - - i - i_ - k - LRG - - - - i - k - LRG - - - - - 0 - k - - - - - k - 10 - - - - - LRG - 0 - - - - - i - 0 - - - - - - - i_ - k - LRG - - - i - k - LRG - - - - - i_ - - LRG - k - - - - - - i - - i_ - k - - - - - - - - i - k - LRG - - - - i - - LRG - k - - - - i - - LRG - k - - - - - - diff --git a/bench_horn_mcmc/count_by_nondet_true-unreach-call_true-termination/config b/bench_horn_mcmc/count_by_nondet_true-unreach-call_true-termination/config deleted file mode 100644 index 3cacd38ac..000000000 --- a/bench_horn_mcmc/count_by_nondet_true-unreach-call_true-termination/config +++ /dev/null @@ -1,12 +0,0 @@ -DISJUNCTS -10 -CONJUNCTS -10 -COEFFICIENT BAG -3 --1 0 1 -IMMEDIATE BAG -5 --256 -1 0 1 256 -NOP PERCENT -90 diff --git a/bench_horn_mcmc/count_by_nondet_true-unreach-call_true-termination/first.xml b/bench_horn_mcmc/count_by_nondet_true-unreach-call_true-termination/first.xml deleted file mode 100644 index 5e2daa737..000000000 --- a/bench_horn_mcmc/count_by_nondet_true-unreach-call_true-termination/first.xml +++ /dev/null @@ -1,133 +0,0 @@ - - - - - 3 - itp - - - - i - i_ - k - k_ - j - LRG - - - - i - k - LRG - - - - - i - 0 - - - - - k - 0 - - - - - i - LRG - - - - - - - i_ - k_ - LRG - - - i - k - LRG - - - - LRG - i - - - LRG - - i - i_ - - - - - i - - i_ - 1 - - - - - - k - - 1 - k_ - - - - - - - - i - k - LRG - - - - - LRG - - k - 1 - - - - - - 1 - j - - - - - j - LRG - - - - - LRG - - j - i - - - - - - LRG - 256 - - - - - - diff --git a/bench_horn_mcmc/nonlin_minus/config b/bench_horn_mcmc/nonlin_minus/config deleted file mode 100755 index 313978702..000000000 --- a/bench_horn_mcmc/nonlin_minus/config +++ /dev/null @@ -1,12 +0,0 @@ -DISJUNCTS -10 -CONJUNCTS -10 -COEFFICIENT BAG -3 --1 0 1 -IMMEDIATE BAG -3 --1 0 1 -NOP PERCENT -90 diff --git a/bench_horn_mcmc/nonlin_minus/first.xml b/bench_horn_mcmc/nonlin_minus/first.xml deleted file mode 100755 index 45dcc0248..000000000 --- a/bench_horn_mcmc/nonlin_minus/first.xml +++ /dev/null @@ -1,98 +0,0 @@ - - - - - 3 - inv - - - - a - a2 - n - n2 - b - - - - a - b - n - - - - - a - 0 - - - - - b - 0 - - - - - n - - a - b - - - - - - - - a - b - n - - - a2 - b - n2 - - - - - n2 - - n - b - - - - - - a2 - - a - 1 - - - - - - - - a - b - n - - - - - n - 0 - - - - a - 0 - - - - - diff --git a/bench_horn_mcmc/nonlin_mod/config b/bench_horn_mcmc/nonlin_mod/config deleted file mode 100755 index 313978702..000000000 --- a/bench_horn_mcmc/nonlin_mod/config +++ /dev/null @@ -1,12 +0,0 @@ -DISJUNCTS -10 -CONJUNCTS -10 -COEFFICIENT BAG -3 --1 0 1 -IMMEDIATE BAG -3 --1 0 1 -NOP PERCENT -90 diff --git a/bench_horn_mcmc/nonlin_mod/first.xml b/bench_horn_mcmc/nonlin_mod/first.xml deleted file mode 100755 index f7e939e36..000000000 --- a/bench_horn_mcmc/nonlin_mod/first.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - - - 2 - inv - - - - a - b - a1 - - - - a - b - - - - - b - 0 - - - - - b - a - - - - - - - a - b - - - a1 - b - - - - - a1 - - a - b - - - - - - - - a - b - - - - 0 - - a - b - - - - - - diff --git a/bench_horn_mcmc/samples_search_disj_ite_01/config b/bench_horn_mcmc/s_disj_ite_01/config similarity index 100% rename from bench_horn_mcmc/samples_search_disj_ite_01/config rename to bench_horn_mcmc/s_disj_ite_01/config diff --git a/bench_horn_mcmc/samples_search_disj_ite_01/first.xml b/bench_horn_mcmc/s_disj_ite_01/first.xml similarity index 100% rename from bench_horn_mcmc/samples_search_disj_ite_01/first.xml rename to bench_horn_mcmc/s_disj_ite_01/first.xml diff --git a/bench_horn_mcmc/samples_search_disj_ite_02/config b/bench_horn_mcmc/s_disj_ite_02/config similarity index 100% rename from bench_horn_mcmc/samples_search_disj_ite_02/config rename to bench_horn_mcmc/s_disj_ite_02/config diff --git a/bench_horn_mcmc/samples_search_disj_ite_02/first.xml b/bench_horn_mcmc/s_disj_ite_02/first.xml similarity index 100% rename from bench_horn_mcmc/samples_search_disj_ite_02/first.xml rename to bench_horn_mcmc/s_disj_ite_02/first.xml diff --git a/bench_horn_mcmc/samples_search_disj_ite_03/config b/bench_horn_mcmc/s_disj_ite_03/config similarity index 100% rename from bench_horn_mcmc/samples_search_disj_ite_03/config rename to bench_horn_mcmc/s_disj_ite_03/config diff --git a/bench_horn_mcmc/samples_search_disj_ite_03/first.xml b/bench_horn_mcmc/s_disj_ite_03/first.xml similarity index 100% rename from bench_horn_mcmc/samples_search_disj_ite_03/first.xml rename to bench_horn_mcmc/s_disj_ite_03/first.xml diff --git a/bench_horn_mcmc/samples_search_disj_ite_04/config b/bench_horn_mcmc/s_disj_ite_04/config similarity index 100% rename from bench_horn_mcmc/samples_search_disj_ite_04/config rename to bench_horn_mcmc/s_disj_ite_04/config diff --git a/bench_horn_mcmc/samples_search_disj_ite_04/first.xml b/bench_horn_mcmc/s_disj_ite_04/first.xml similarity index 100% rename from bench_horn_mcmc/samples_search_disj_ite_04/first.xml rename to bench_horn_mcmc/s_disj_ite_04/first.xml diff --git a/bench_horn_mcmc/samples_search_disj_ite_05/config b/bench_horn_mcmc/s_disj_ite_05/config similarity index 100% rename from bench_horn_mcmc/samples_search_disj_ite_05/config rename to bench_horn_mcmc/s_disj_ite_05/config diff --git a/bench_horn_mcmc/samples_search_disj_ite_05/first.xml b/bench_horn_mcmc/s_disj_ite_05/first.xml similarity index 100% rename from bench_horn_mcmc/samples_search_disj_ite_05/first.xml rename to bench_horn_mcmc/s_disj_ite_05/first.xml diff --git a/bench_horn_mcmc/samples_search_disj_ite_06/config b/bench_horn_mcmc/s_disj_ite_06/config similarity index 100% rename from bench_horn_mcmc/samples_search_disj_ite_06/config rename to bench_horn_mcmc/s_disj_ite_06/config diff --git a/bench_horn_mcmc/samples_search_disj_ite_06/first.xml b/bench_horn_mcmc/s_disj_ite_06/first.xml similarity index 100% rename from bench_horn_mcmc/samples_search_disj_ite_06/first.xml rename to bench_horn_mcmc/s_disj_ite_06/first.xml diff --git a/bench_horn_mcmc/s_mutants_01/config b/bench_horn_mcmc/s_mutants_01/config index 9e1e5f219..a6bc2751e 100644 --- a/bench_horn_mcmc/s_mutants_01/config +++ b/bench_horn_mcmc/s_mutants_01/config @@ -6,7 +6,7 @@ COEFFICIENT BAG 3 -1 0 1 IMMEDIATE BAG -9 --112 -32 -25 -1 0 1 25 32 112 +7 +-112 -32 -25 0 25 32 112 NOP PERCENT 90 diff --git a/bench_horn_mcmc/s_mutants_07/config b/bench_horn_mcmc/s_mutants_07/config index 313978702..c06731ecb 100644 --- a/bench_horn_mcmc/s_mutants_07/config +++ b/bench_horn_mcmc/s_mutants_07/config @@ -6,7 +6,7 @@ COEFFICIENT BAG 3 -1 0 1 IMMEDIATE BAG -3 --1 0 1 +1 +0 NOP PERCENT 90 diff --git a/bench_horn_mcmc/samples_search_08/config b/bench_horn_mcmc/s_mutants_08/config similarity index 100% rename from bench_horn_mcmc/samples_search_08/config rename to bench_horn_mcmc/s_mutants_08/config diff --git a/bench_horn_mcmc/samples_search_08/first.xml b/bench_horn_mcmc/s_mutants_08/first.xml similarity index 100% rename from bench_horn_mcmc/samples_search_08/first.xml rename to bench_horn_mcmc/s_mutants_08/first.xml diff --git a/bench_horn_mcmc/s_mutants_09/config b/bench_horn_mcmc/s_mutants_09/config index 77f9398ee..12a268ac3 100644 --- a/bench_horn_mcmc/s_mutants_09/config +++ b/bench_horn_mcmc/s_mutants_09/config @@ -6,7 +6,7 @@ COEFFICIENT BAG 3 -1 0 1 IMMEDIATE BAG -5 --3 -1 0 1 3 +2 +-1 1 NOP PERCENT 90 diff --git a/bench_horn_mcmc/s_mutants_10/config b/bench_horn_mcmc/s_mutants_10/config index 5b2b4e618..2099276ec 100644 --- a/bench_horn_mcmc/s_mutants_10/config +++ b/bench_horn_mcmc/s_mutants_10/config @@ -6,7 +6,7 @@ COEFFICIENT BAG 3 -1 0 1 IMMEDIATE BAG -7 --878 -602 -1 0 1 602 878 +5 +-878 -602 0 602 878 NOP PERCENT 90 diff --git a/bench_horn_mcmc/s_mutants_11/config b/bench_horn_mcmc/s_mutants_11/config index 4e805f7a2..ee1a2da97 100644 --- a/bench_horn_mcmc/s_mutants_11/config +++ b/bench_horn_mcmc/s_mutants_11/config @@ -6,7 +6,7 @@ COEFFICIENT BAG 3 -1 0 1 IMMEDIATE BAG -7 --1000 -500 -1 0 1 500 1000 +6 +-1000 -500 -1 1 500 1000 NOP PERCENT 90 diff --git a/bench_horn_mcmc/s_mutants_12/config b/bench_horn_mcmc/s_mutants_12/config index 313978702..12a268ac3 100644 --- a/bench_horn_mcmc/s_mutants_12/config +++ b/bench_horn_mcmc/s_mutants_12/config @@ -6,7 +6,7 @@ COEFFICIENT BAG 3 -1 0 1 IMMEDIATE BAG -3 --1 0 1 +2 +-1 1 NOP PERCENT 90 diff --git a/bench_horn_mcmc/s_mutants_13/config b/bench_horn_mcmc/s_mutants_13/config index 313978702..12a268ac3 100644 --- a/bench_horn_mcmc/s_mutants_13/config +++ b/bench_horn_mcmc/s_mutants_13/config @@ -6,7 +6,7 @@ COEFFICIENT BAG 3 -1 0 1 IMMEDIATE BAG -3 --1 0 1 +2 +-1 1 NOP PERCENT 90 diff --git a/bench_horn_mcmc/s_mutants_14/config b/bench_horn_mcmc/s_mutants_14/config index af4ec01b1..0ef675755 100644 --- a/bench_horn_mcmc/s_mutants_14/config +++ b/bench_horn_mcmc/s_mutants_14/config @@ -6,7 +6,7 @@ COEFFICIENT BAG 3 -1 0 1 IMMEDIATE BAG -5 --5 -1 0 1 5 +4 +-5 -1 1 5 NOP PERCENT 90 diff --git a/bench_horn_mcmc/s_mutants_15/config b/bench_horn_mcmc/s_mutants_15/config index c4c7864e8..eabddeadf 100644 --- a/bench_horn_mcmc/s_mutants_15/config +++ b/bench_horn_mcmc/s_mutants_15/config @@ -6,7 +6,7 @@ COEFFICIENT BAG 3 -1 0 1 IMMEDIATE BAG -7 --4 -2 -1 0 1 2 4 +6 +-4 -2 -1 1 2 4 NOP PERCENT 90 diff --git a/bench_horn_mcmc/samples_only_01/config b/bench_horn_mcmc/samples_only_01/config deleted file mode 100644 index 9d1c6fe7d..000000000 --- a/bench_horn_mcmc/samples_only_01/config +++ /dev/null @@ -1,12 +0,0 @@ -DISJUNCTS -10 -CONJUNCTS -10 -COEFFICIENT BAG -3 --1 0 1 -IMMEDIATE BAG -5 --66 -55 0 55 66 -NOP PERCENT -90 diff --git a/bench_horn_mcmc/samples_only_01/first.xml b/bench_horn_mcmc/samples_only_01/first.xml deleted file mode 100644 index 05d9749f5..000000000 --- a/bench_horn_mcmc/samples_only_01/first.xml +++ /dev/null @@ -1,82 +0,0 @@ - - - - - 2 - itp - - - - m - m1 - i - i1 - b - - - - m - i - - - - - m - 0 - - - - - i - 0 - - - - - - - m - i - - - m1 - i1 - - - - - i1 - - i - 55 - - - - - - m1 - - m - 66 - - - - - - - - m - i - - - - - m - i - - 0 - - - - - diff --git a/bench_horn_mcmc/samples_only_02/config b/bench_horn_mcmc/samples_only_02/config deleted file mode 100644 index d6adcb786..000000000 --- a/bench_horn_mcmc/samples_only_02/config +++ /dev/null @@ -1,12 +0,0 @@ -DISJUNCTS -10 -CONJUNCTS -10 -COEFFICIENT BAG -3 --1 0 1 -IMMEDIATE BAG -5 --2 -1 0 1 2 -NOP PERCENT -90 diff --git a/bench_horn_mcmc/samples_only_02/first.xml b/bench_horn_mcmc/samples_only_02/first.xml deleted file mode 100644 index 2ee4b0774..000000000 --- a/bench_horn_mcmc/samples_only_02/first.xml +++ /dev/null @@ -1,159 +0,0 @@ - - - - - 5 - itp - - - - x0 - x1 - x2 - x3 - x4 - x5 - x6 - x7 - x8 - x9 - - - - x1 - x2 - x3 - x4 - x5 - - - - - x1 - 2 - - - - - x2 - 2 - - - - - x3 - 2 - - - - - x4 - 2 - - - - - x5 - 2 - - - - - - - x1 - x3 - x5 - x7 - x9 - - - x2 - x4 - x6 - x8 - x0 - - - - - x2 - - x1 - 1 - - - - - - x4 - - x3 - 1 - - - - - - x6 - - x5 - 1 - - - - - - x8 - - x7 - 1 - - - - - - x0 - - x9 - 1 - - - - - - - - x1 - x3 - x5 - x7 - x9 - - - - - x1 - 0 - - - x3 - 0 - - - x5 - 0 - - - x7 - 0 - - - x9 - 0 - - - - - - diff --git a/bench_horn_mcmc/samples_only_03/config b/bench_horn_mcmc/samples_only_03/config deleted file mode 100644 index 313978702..000000000 --- a/bench_horn_mcmc/samples_only_03/config +++ /dev/null @@ -1,12 +0,0 @@ -DISJUNCTS -10 -CONJUNCTS -10 -COEFFICIENT BAG -3 --1 0 1 -IMMEDIATE BAG -3 --1 0 1 -NOP PERCENT -90 diff --git a/bench_horn_mcmc/samples_only_03/first.xml b/bench_horn_mcmc/samples_only_03/first.xml deleted file mode 100644 index c1074a7ae..000000000 --- a/bench_horn_mcmc/samples_only_03/first.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - - - 2 - itp - - - - x0 - x1 - x2 - x3 - x4 - x5 - x6 - x7 - x8 - x9 - - - - x1 - x3 - - - - - x1 - 0 - - - - - x3 - 0 - - - - - - - x1 - x3 - - - x2 - x4 - - - - - x2 - - x1 - 1 - - - - - - x4 - - x3 - 1 - - - - - - - - x1 - x3 - - - - - x1 - 0 - - - x3 - 0 - - - - - - diff --git a/bench_horn_mcmc/samples_only_04/config b/bench_horn_mcmc/samples_only_04/config deleted file mode 100644 index 313978702..000000000 --- a/bench_horn_mcmc/samples_only_04/config +++ /dev/null @@ -1,12 +0,0 @@ -DISJUNCTS -10 -CONJUNCTS -10 -COEFFICIENT BAG -3 --1 0 1 -IMMEDIATE BAG -3 --1 0 1 -NOP PERCENT -90 diff --git a/bench_horn_mcmc/samples_only_04/first.xml b/bench_horn_mcmc/samples_only_04/first.xml deleted file mode 100644 index 8143a8d58..000000000 --- a/bench_horn_mcmc/samples_only_04/first.xml +++ /dev/null @@ -1,128 +0,0 @@ - - - - - 3 - itp - - - - x0 - x1 - x2 - x3 - x4 - x5 - x6 - x7 - x8 - x9 - - - - x1 - x3 - x5 - - - - - x1 - 0 - - - - - x3 - 0 - - - - - x5 - 0 - - - - - - - x1 - x3 - x5 - - - x2 - x4 - x6 - - - - - - - x2 - - x1 - 1 - - - - - - x4 - - x3 - 1 - - - - - - - - x2 - - x1 - 1 - - - - - - x4 - - x3 - 1 - - - - - - - - x6 - - x5 - x2 - x4 - - - - - - - - x1 - x3 - x5 - - - - x5 - 0 - - - - - diff --git a/bench_horn_mcmc/samples_only_05/config b/bench_horn_mcmc/samples_only_05/config deleted file mode 100644 index 65ea94857..000000000 --- a/bench_horn_mcmc/samples_only_05/config +++ /dev/null @@ -1,12 +0,0 @@ -DISJUNCTS -10 -CONJUNCTS -10 -COEFFICIENT BAG -3 --1 0 1 -IMMEDIATE BAG -5 --1000 -1 0 1 1000 -NOP PERCENT -90 diff --git a/bench_horn_mcmc/samples_only_05/first.xml b/bench_horn_mcmc/samples_only_05/first.xml deleted file mode 100644 index 269fbb305..000000000 --- a/bench_horn_mcmc/samples_only_05/first.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - - - 2 - itp - - - - x0 - x1 - x2 - x3 - x4 - x5 - x6 - x7 - x8 - x9 - - - - x1 - x3 - - - - - x1 - 0 - - - - - x3 - x1 - - - - - - - x1 - x3 - - - x2 - x4 - - - - - x2 - - x1 - 1 - - - - - - x4 - - x3 - 1 - - - - - - - - x1 - x3 - - - - - x1 - 1000 - - - - x3 - 1000 - - - - - diff --git a/bench_horn_mcmc/samples_only_06/config b/bench_horn_mcmc/samples_only_06/config deleted file mode 100644 index 6b16ce1f5..000000000 --- a/bench_horn_mcmc/samples_only_06/config +++ /dev/null @@ -1,12 +0,0 @@ -DISJUNCTS -10 -CONJUNCTS -10 -COEFFICIENT BAG -3 --1 0 1 -IMMEDIATE BAG -7 --8 -7 -1 0 1 7 8 -NOP PERCENT -90 diff --git a/bench_horn_mcmc/samples_only_06/first.xml b/bench_horn_mcmc/samples_only_06/first.xml deleted file mode 100644 index 130e0f394..000000000 --- a/bench_horn_mcmc/samples_only_06/first.xml +++ /dev/null @@ -1,117 +0,0 @@ - - - - - 3 - inv - - - - x - x1 - y - y1 - i - i1 - - - - x - y - i - - - - - x - 0 - - - - - y - 0 - - - - - i - 0 - - - - - - - x - y - i - - - x1 - y1 - i1 - - - - - i1 - - i - 1 - - - - - - x1 - - x - i1 - - - - - - y1 - - y - i1 - - - - - - - - x - y - i - - - - - 0 - - x - - y - - 8 - i - 7 - - - - - - - x - - y - - - - - - diff --git a/bench_horn_mcmc/samples_only_07/config b/bench_horn_mcmc/samples_only_07/config deleted file mode 100644 index c851ea2e0..000000000 --- a/bench_horn_mcmc/samples_only_07/config +++ /dev/null @@ -1,12 +0,0 @@ -DISJUNCTS -10 -CONJUNCTS -10 -COEFFICIENT BAG -3 --1 0 1 -IMMEDIATE BAG -5 --10 -1 0 1 10 -NOP PERCENT -90 diff --git a/bench_horn_mcmc/samples_only_07/first.xml b/bench_horn_mcmc/samples_only_07/first.xml deleted file mode 100644 index 26b82da4d..000000000 --- a/bench_horn_mcmc/samples_only_07/first.xml +++ /dev/null @@ -1,87 +0,0 @@ - - - - - 1 - itp - - - - x0 - x1 - x2 - x3 - x4 - x5 - x6 - x7 - x8 - x9 - - - - x3 - - - - - x3 - 0 - - - - - - - x3 - - - x4 - - - - - - - x3 - 10 - - - - - x4 - 0 - - - - - - x3 - 10 - - - - x4 - - x3 - 1 - - - - - - - - - - x3 - - - - x3 - 10 - - - - - diff --git a/bench_horn_mcmc/samples_only_08/config b/bench_horn_mcmc/samples_only_08/config deleted file mode 100644 index dea192feb..000000000 --- a/bench_horn_mcmc/samples_only_08/config +++ /dev/null @@ -1,12 +0,0 @@ -DISJUNCTS -10 -CONJUNCTS -10 -COEFFICIENT BAG -3 --1 0 1 -IMMEDIATE BAG -7 --100 -5 -1 0 1 5 100 -NOP PERCENT -90 diff --git a/bench_horn_mcmc/samples_only_08/first.xml b/bench_horn_mcmc/samples_only_08/first.xml deleted file mode 100644 index bd58f14ab..000000000 --- a/bench_horn_mcmc/samples_only_08/first.xml +++ /dev/null @@ -1,137 +0,0 @@ - - - - - 2 - inv - - - - x0 - x1 - x2 - x3 - x4 - x5 - x6 - x7 - x8 - x9 - - - - x1 - x3 - - - - - x1 - 0 - - - - - x3 - 100 - - - - - - - x1 - x3 - - - x2 - x4 - - - - - x2 - - x1 - 1 - - - - - - - - - - x2 - 0 - - - - - x3 - 0 - - - - - - - x2 - 0 - - - - - x3 - 5 - - - - - - - x4 - x2 - - - - - - - x2 - 0 - - - x3 - 0 - - - - - x2 - 0 - - - x3 - 5 - - - - - - - - - x1 - x3 - - - - x3 - 0 - - - - - diff --git a/bench_horn_mcmc/samples_search_01/config b/bench_horn_mcmc/samples_search_01/config deleted file mode 100644 index a6bc2751e..000000000 --- a/bench_horn_mcmc/samples_search_01/config +++ /dev/null @@ -1,12 +0,0 @@ -DISJUNCTS -10 -CONJUNCTS -10 -COEFFICIENT BAG -3 --1 0 1 -IMMEDIATE BAG -7 --112 -32 -25 0 25 32 112 -NOP PERCENT -90 diff --git a/bench_horn_mcmc/samples_search_01/first.xml b/bench_horn_mcmc/samples_search_01/first.xml deleted file mode 100644 index d166e335d..000000000 --- a/bench_horn_mcmc/samples_search_01/first.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - - - 2 - inv - - - - x - x1 - i - i1 - - - - x - i - - - - - x - 32 - - - - - i - 25 - - - - - - - x - i - - - x1 - i1 - - - - - i1 - - i - 112 - - - - - - x1 - - x - i1 - - - - - - - - x - i - - - - x - 0 - - - - - diff --git a/bench_horn_mcmc/samples_search_02/config b/bench_horn_mcmc/samples_search_02/config deleted file mode 100644 index 313978702..000000000 --- a/bench_horn_mcmc/samples_search_02/config +++ /dev/null @@ -1,12 +0,0 @@ -DISJUNCTS -10 -CONJUNCTS -10 -COEFFICIENT BAG -3 --1 0 1 -IMMEDIATE BAG -3 --1 0 1 -NOP PERCENT -90 diff --git a/bench_horn_mcmc/samples_search_02/first.xml b/bench_horn_mcmc/samples_search_02/first.xml deleted file mode 100644 index e00a7b456..000000000 --- a/bench_horn_mcmc/samples_search_02/first.xml +++ /dev/null @@ -1,122 +0,0 @@ - - - - - 4 - itp - - - - x0 - x1 - x2 - x3 - x4 - x5 - x6 - x7 - x8 - x9 - - - - x1 - x3 - x5 - x7 - - - - - x1 - 0 - - - - - x3 - 0 - - - - - x5 - 0 - - - - - x7 - 0 - - - - - - - x1 - x3 - x5 - x7 - - - x2 - x4 - x6 - x8 - - - - - x2 - - x1 - 1 - - - - - - x4 - - x3 - x2 - - - - - - x6 - - x5 - x4 - - - - - - x8 - - x7 - x6 - - - - - - - - x1 - x3 - x5 - x7 - - - - x7 - 0 - - - - - diff --git a/bench_horn_mcmc/samples_search_03/config b/bench_horn_mcmc/samples_search_03/config deleted file mode 100644 index 313978702..000000000 --- a/bench_horn_mcmc/samples_search_03/config +++ /dev/null @@ -1,12 +0,0 @@ -DISJUNCTS -10 -CONJUNCTS -10 -COEFFICIENT BAG -3 --1 0 1 -IMMEDIATE BAG -3 --1 0 1 -NOP PERCENT -90 diff --git a/bench_horn_mcmc/samples_search_03/first.xml b/bench_horn_mcmc/samples_search_03/first.xml deleted file mode 100644 index 407294ef1..000000000 --- a/bench_horn_mcmc/samples_search_03/first.xml +++ /dev/null @@ -1,94 +0,0 @@ - - - - - 3 - itp - - - - x0 - x1 - x2 - x3 - x4 - x5 - x6 - x7 - x8 - x9 - - - - x1 - x3 - x5 - - - - - x1 - 0 - - - - - x3 - 0 - - - - - x5 - 0 - - - - - - - x1 - x3 - x5 - - - x2 - x4 - x6 - - - - - x2 - - x1 - 1 - - - - - - x4 - - x3 - 1 - - - - - - - - x1 - x3 - x5 - - - - x5 - 0 - - - - - diff --git a/bench_horn_mcmc/samples_search_04/config b/bench_horn_mcmc/samples_search_04/config deleted file mode 100644 index 313978702..000000000 --- a/bench_horn_mcmc/samples_search_04/config +++ /dev/null @@ -1,12 +0,0 @@ -DISJUNCTS -10 -CONJUNCTS -10 -COEFFICIENT BAG -3 --1 0 1 -IMMEDIATE BAG -3 --1 0 1 -NOP PERCENT -90 diff --git a/bench_horn_mcmc/samples_search_04/first.xml b/bench_horn_mcmc/samples_search_04/first.xml deleted file mode 100644 index a2737b1bb..000000000 --- a/bench_horn_mcmc/samples_search_04/first.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - - - 2 - itp - - - - x0 - x1 - x2 - x3 - x4 - x5 - x6 - x7 - x8 - x9 - - - - x1 - x3 - - - - - x1 - 0 - - - - - x3 - 0 - - - - - - - x1 - x3 - - - x2 - x4 - - - - - x2 - - x1 - 1 - - - - - - x4 - - x3 - 1 - - - - - - - - x1 - x3 - - - - - x1 - 0 - - - - x3 - 0 - - - - - diff --git a/bench_horn_mcmc/samples_search_05/config b/bench_horn_mcmc/samples_search_05/config deleted file mode 100644 index 26b53fd9c..000000000 --- a/bench_horn_mcmc/samples_search_05/config +++ /dev/null @@ -1,12 +0,0 @@ -DISJUNCTS -10 -CONJUNCTS -10 -COEFFICIENT BAG -3 --1 0 1 -IMMEDIATE BAG -9 --2000 -1000 -2 -1 0 1 2 1000 2000 -NOP PERCENT -90 diff --git a/bench_horn_mcmc/samples_search_05/first.xml b/bench_horn_mcmc/samples_search_05/first.xml deleted file mode 100644 index 02b15b410..000000000 --- a/bench_horn_mcmc/samples_search_05/first.xml +++ /dev/null @@ -1,90 +0,0 @@ - - - - - 2 - itp - - - - x0 - x1 - x2 - x3 - x4 - x5 - x6 - x7 - x8 - x9 - - - - x1 - x3 - - - - - x1 - 0 - - - - - x3 - x1 - - - - - - - x1 - x3 - - - x2 - x4 - - - - - x2 - - x1 - 1 - - - - - - x4 - - x3 - 2 - - - - - - - - x1 - x3 - - - - - x1 - 1000 - - - - x3 - 2000 - - - - - diff --git a/bench_horn_mcmc/samples_search_06/config b/bench_horn_mcmc/samples_search_06/config deleted file mode 100644 index 313978702..000000000 --- a/bench_horn_mcmc/samples_search_06/config +++ /dev/null @@ -1,12 +0,0 @@ -DISJUNCTS -10 -CONJUNCTS -10 -COEFFICIENT BAG -3 --1 0 1 -IMMEDIATE BAG -3 --1 0 1 -NOP PERCENT -90 diff --git a/bench_horn_mcmc/samples_search_06/first.xml b/bench_horn_mcmc/samples_search_06/first.xml deleted file mode 100644 index 0bd25c46b..000000000 --- a/bench_horn_mcmc/samples_search_06/first.xml +++ /dev/null @@ -1,99 +0,0 @@ - - - - - 3 - inv - - - - x - x1 - y - y1 - i - i1 - - - - x - y - i - - - - - x - 0 - - - - - y - 0 - - - - - i - 0 - - - - - - - x - y - i - - - x1 - y1 - i1 - - - - - i1 - - i - 1 - - - - - - x1 - - x - i1 - - - - - - y1 - - y - i1 - - - - - - - - x - y - i - - - - x - y - - - - - diff --git a/bench_horn_mcmc/samples_search_07/config b/bench_horn_mcmc/samples_search_07/config deleted file mode 100644 index c06731ecb..000000000 --- a/bench_horn_mcmc/samples_search_07/config +++ /dev/null @@ -1,12 +0,0 @@ -DISJUNCTS -10 -CONJUNCTS -10 -COEFFICIENT BAG -3 --1 0 1 -IMMEDIATE BAG -1 -0 -NOP PERCENT -90 diff --git a/bench_horn_mcmc/samples_search_07/first.xml b/bench_horn_mcmc/samples_search_07/first.xml deleted file mode 100644 index 3c6d34f72..000000000 --- a/bench_horn_mcmc/samples_search_07/first.xml +++ /dev/null @@ -1,128 +0,0 @@ - - - - - 4 - inv - - - - x - x1 - y - y1 - i - i1 - j - j1 - nondet1 - nondet2 - - - - x - y - i - j - - - - - x - 0 - - - - - y - 0 - - - - - i - 0 - - - - - j - 0 - - - - - - - x - y - i - j - - - x1 - y1 - i1 - j1 - - - - - i1 - - i - nondet1 - - - - - - j1 - - j - nondet2 - - - - - - x1 - - x - nondet1 - - - - - - y1 - - y - nondet2 - - - - - - - - x - y - i - j - - - - - i - j - - - - x - y - - - - - diff --git a/bench_horn_mcmc/samples_search_09/config b/bench_horn_mcmc/samples_search_09/config deleted file mode 100644 index 12a268ac3..000000000 --- a/bench_horn_mcmc/samples_search_09/config +++ /dev/null @@ -1,12 +0,0 @@ -DISJUNCTS -10 -CONJUNCTS -10 -COEFFICIENT BAG -3 --1 0 1 -IMMEDIATE BAG -2 --1 1 -NOP PERCENT -90 diff --git a/bench_horn_mcmc/samples_search_09/first.xml b/bench_horn_mcmc/samples_search_09/first.xml deleted file mode 100644 index 453e892f1..000000000 --- a/bench_horn_mcmc/samples_search_09/first.xml +++ /dev/null @@ -1,82 +0,0 @@ - - - - - 2 - inv - - - - x1 - x2 - x3 - x4 - - - - x1 - x3 - - - - - x1 - 1 - - - - - - - x1 - x3 - - - x2 - x4 - - - - - x2 - - x1 - x1 - - - - - - x4 - x1 - - - - - - - x1 - x3 - - - - x1 - - - - x3 - x3 - - x3 - - x3 - - - - x1 - 1 - - - - - diff --git a/bench_horn_mcmc/samples_search_10/config b/bench_horn_mcmc/samples_search_10/config deleted file mode 100644 index 2099276ec..000000000 --- a/bench_horn_mcmc/samples_search_10/config +++ /dev/null @@ -1,12 +0,0 @@ -DISJUNCTS -10 -CONJUNCTS -10 -COEFFICIENT BAG -3 --1 0 1 -IMMEDIATE BAG -5 --878 -602 0 602 878 -NOP PERCENT -90 diff --git a/bench_horn_mcmc/samples_search_10/first.xml b/bench_horn_mcmc/samples_search_10/first.xml deleted file mode 100644 index d362e69ed..000000000 --- a/bench_horn_mcmc/samples_search_10/first.xml +++ /dev/null @@ -1,76 +0,0 @@ - - - - - 2 - inv - - - - x1 - x2 - x3 - x4 - - - - x1 - x3 - - - - - - x1 - 878 - - - x3 - 602 - - - - - - - - x1 - x3 - - - x2 - x4 - - - - - x3 - x1 - - - - - x4 - x2 - - - - - - - x1 - x3 - - - - x1 - 0 - - - x3 - 0 - - - - - diff --git a/bench_horn_mcmc/samples_search_11/config b/bench_horn_mcmc/samples_search_11/config deleted file mode 100644 index ee1a2da97..000000000 --- a/bench_horn_mcmc/samples_search_11/config +++ /dev/null @@ -1,12 +0,0 @@ -DISJUNCTS -10 -CONJUNCTS -10 -COEFFICIENT BAG -3 --1 0 1 -IMMEDIATE BAG -6 --1000 -500 -1 1 500 1000 -NOP PERCENT -90 diff --git a/bench_horn_mcmc/samples_search_11/first.xml b/bench_horn_mcmc/samples_search_11/first.xml deleted file mode 100644 index 721863513..000000000 --- a/bench_horn_mcmc/samples_search_11/first.xml +++ /dev/null @@ -1,107 +0,0 @@ - - - - - 3 - itp - - - - x1 - x2 - x3 - x4 - x5 - x6 - - - - x1 - x3 - x5 - - - - - x1 - 1 - - - - - x3 - 1 - - - - - x5 - 1 - - - - - - - x1 - x3 - x5 - - - x2 - x4 - x6 - - - - - x2 - - x1 - 1 - - - - - - x4 - - x1 - x1 - - - - - - x6 - - x1 - x1 - x1 - - - - - - - - x1 - x3 - x5 - - - - - x5 - x3 - - 500 - - - x1 - 1000 - - - - - diff --git a/bench_horn_mcmc/samples_search_12/config b/bench_horn_mcmc/samples_search_12/config deleted file mode 100644 index 12a268ac3..000000000 --- a/bench_horn_mcmc/samples_search_12/config +++ /dev/null @@ -1,12 +0,0 @@ -DISJUNCTS -10 -CONJUNCTS -10 -COEFFICIENT BAG -3 --1 0 1 -IMMEDIATE BAG -2 --1 1 -NOP PERCENT -90 diff --git a/bench_horn_mcmc/samples_search_12/first.xml b/bench_horn_mcmc/samples_search_12/first.xml deleted file mode 100644 index 622bfd7ed..000000000 --- a/bench_horn_mcmc/samples_search_12/first.xml +++ /dev/null @@ -1,186 +0,0 @@ - - - - - 6 - inv - - - - x - x1 - i - i1 - j - j1 - k - k1 - l - l1 - m - m1 - - - - x - i - j - k - l - m - - - - - x - 1 - - - - - i - 1 - - - - - j - 1 - - - - - k - 1 - - - - - l - 1 - - - - - m - 1 - - - - - - - x - i - j - k - l - m - - - x1 - i1 - j1 - k1 - l1 - m1 - - - - - x1 - - x - i - j - k - l - m - - - - - - i1 - - x - i - j - k - l - m - - - - - - j1 - - x - i - j - k - l - m - - - - - - k1 - - x - i - j - k - l - m - - - - - - l1 - - x - i - j - k - l - m - - - - - - m1 - - x - i - j - k - l - m - - - - - - - - x - i - j - k - l - m - - - - x - 1 - - - - - diff --git a/bench_horn_mcmc/samples_search_13/config b/bench_horn_mcmc/samples_search_13/config deleted file mode 100644 index 12a268ac3..000000000 --- a/bench_horn_mcmc/samples_search_13/config +++ /dev/null @@ -1,12 +0,0 @@ -DISJUNCTS -10 -CONJUNCTS -10 -COEFFICIENT BAG -3 --1 0 1 -IMMEDIATE BAG -2 --1 1 -NOP PERCENT -90 diff --git a/bench_horn_mcmc/samples_search_13/first.xml b/bench_horn_mcmc/samples_search_13/first.xml deleted file mode 100644 index ec11e1c57..000000000 --- a/bench_horn_mcmc/samples_search_13/first.xml +++ /dev/null @@ -1,194 +0,0 @@ - - - - - 6 - inv - - - - x - x1 - i - i1 - j - j1 - k - k1 - l - l1 - m - m1 - - - - x - i - j - k - l - m - - - - - x - 1 - - - - - i - 1 - - - - - j - 1 - - - - - k - 1 - - - - - l - 1 - - - - - m - 1 - - - - - - - x - i - j - k - l - m - - - x1 - i1 - j1 - k1 - l1 - m1 - - - - - x1 - - x - i - j - k - l - m - - - - - - i1 - - x - i - j - k - l - m - - - - - - j1 - - x - i - j - k - l - m - - - - - - k1 - - x - i - j - k - l - m - - - - - - l1 - - x - i - j - k - l - m - - - - - - m1 - - x - i - j - k - l - m - - - - - - - - x - i - j - k - l - m - - - - - x - i - j - - - k - l - m - - - - - - diff --git a/bench_horn_mcmc/samples_search_14/config b/bench_horn_mcmc/samples_search_14/config deleted file mode 100644 index 0ef675755..000000000 --- a/bench_horn_mcmc/samples_search_14/config +++ /dev/null @@ -1,12 +0,0 @@ -DISJUNCTS -10 -CONJUNCTS -10 -COEFFICIENT BAG -3 --1 0 1 -IMMEDIATE BAG -4 --5 -1 1 5 -NOP PERCENT -90 diff --git a/bench_horn_mcmc/samples_search_14/first.xml b/bench_horn_mcmc/samples_search_14/first.xml deleted file mode 100644 index 215c06808..000000000 --- a/bench_horn_mcmc/samples_search_14/first.xml +++ /dev/null @@ -1,195 +0,0 @@ - - - - - 6 - inv - - - - x - x1 - i - i1 - j - j1 - k - k1 - l - l1 - m - m1 - - - - x - i - j - k - l - m - - - - - x - 1 - - - - - i - 1 - - - - - j - 1 - - - - - k - 1 - - - - - l - 1 - - - - - m - 1 - - - - - - - x - i - j - k - l - m - - - x1 - i1 - j1 - k1 - l1 - m1 - - - - - x1 - - x - i - j - k - l - m - - - - - - i1 - - x - i - j - k - l - m - - - - - - j1 - - x - i - j - k - l - m - - - - - - k1 - - x - i - j - k - l - m - - - - - - l1 - - x - i - j - k - l - m - - - - - - m1 - - x - i - j - k - l - m - - - - - - - - x - i - j - k - l - m - - - - - x - i - j - k - l - - - 5 - m - - - - - - diff --git a/bench_horn_mcmc/samples_search_15/config b/bench_horn_mcmc/samples_search_15/config deleted file mode 100644 index eabddeadf..000000000 --- a/bench_horn_mcmc/samples_search_15/config +++ /dev/null @@ -1,12 +0,0 @@ -DISJUNCTS -10 -CONJUNCTS -10 -COEFFICIENT BAG -3 --1 0 1 -IMMEDIATE BAG -6 --4 -2 -1 1 2 4 -NOP PERCENT -90 diff --git a/bench_horn_mcmc/samples_search_15/first.xml b/bench_horn_mcmc/samples_search_15/first.xml deleted file mode 100644 index 90e0765f1..000000000 --- a/bench_horn_mcmc/samples_search_15/first.xml +++ /dev/null @@ -1,195 +0,0 @@ - - - - - 6 - inv - - - - x - x1 - i - i1 - j - j1 - k - k1 - l - l1 - m - m1 - - - - x - i - j - k - l - m - - - - - x - 1 - - - - - i - 1 - - - - - j - 1 - - - - - k - 1 - - - - - l - 1 - - - - - m - 1 - - - - - - - x - i - j - k - l - m - - - x1 - i1 - j1 - k1 - l1 - m1 - - - - - x1 - - x - i - j - k - l - m - - - - - - i1 - - x - i - j - k - l - m - - - - - - j1 - - x - i - j - k - l - m - - - - - - k1 - - x - i - j - k - l - m - - - - - - l1 - - x - i - j - k - l - m - - - - - - m1 - - x - i - j - k - l - m - - - - - - - - x - i - j - k - l - m - - - - - 2 - - x - i - - - - 4 - m - - - - - - diff --git a/bench_horn_mcmc/samples_shrink_big_numbers_1024/config b/bench_horn_mcmc/samples_shrink_big_numbers_1024/config deleted file mode 100644 index 1b06d1fb2..000000000 --- a/bench_horn_mcmc/samples_shrink_big_numbers_1024/config +++ /dev/null @@ -1,12 +0,0 @@ -DISJUNCTS -10 -CONJUNCTS -10 -COEFFICIENT BAG -3 --1 0 1 -IMMEDIATE BAG -2049 --1024 -1023 -1022 -1021 -1020 -1019 -1018 -1017 -1016 -1015 -1014 -1013 -1012 -1011 -1010 -1009 -1008 -1007 -1006 -1005 -1004 -1003 -1002 -1001 -1000 -999 -998 -997 -996 -995 -994 -993 -992 -991 -990 -989 -988 -987 -986 -985 -984 -983 -982 -981 -980 -979 -978 -977 -976 -975 -974 -973 -972 -971 -970 -969 -968 -967 -966 -965 -964 -963 -962 -961 -960 -959 -958 -957 -956 -955 -954 -953 -952 -951 -950 -949 -948 -947 -946 -945 -944 -943 -942 -941 -940 -939 -938 -937 -936 -935 -934 -933 -932 -931 -930 -929 -928 -927 -926 -925 -924 -923 -922 -921 -920 -919 -918 -917 -916 -915 -914 -913 -912 -911 -910 -909 -908 -907 -906 -905 -904 -903 -902 -901 -900 -899 -898 -897 -896 -895 -894 -893 -892 -891 -890 -889 -888 -887 -886 -885 -884 -883 -882 -881 -880 -879 -878 -877 -876 -875 -874 -873 -872 -871 -870 -869 -868 -867 -866 -865 -864 -863 -862 -861 -860 -859 -858 -857 -856 -855 -854 -853 -852 -851 -850 -849 -848 -847 -846 -845 -844 -843 -842 -841 -840 -839 -838 -837 -836 -835 -834 -833 -832 -831 -830 -829 -828 -827 -826 -825 -824 -823 -822 -821 -820 -819 -818 -817 -816 -815 -814 -813 -812 -811 -810 -809 -808 -807 -806 -805 -804 -803 -802 -801 -800 -799 -798 -797 -796 -795 -794 -793 -792 -791 -790 -789 -788 -787 -786 -785 -784 -783 -782 -781 -780 -779 -778 -777 -776 -775 -774 -773 -772 -771 -770 -769 -768 -767 -766 -765 -764 -763 -762 -761 -760 -759 -758 -757 -756 -755 -754 -753 -752 -751 -750 -749 -748 -747 -746 -745 -744 -743 -742 -741 -740 -739 -738 -737 -736 -735 -734 -733 -732 -731 -730 -729 -728 -727 -726 -725 -724 -723 -722 -721 -720 -719 -718 -717 -716 -715 -714 -713 -712 -711 -710 -709 -708 -707 -706 -705 -704 -703 -702 -701 -700 -699 -698 -697 -696 -695 -694 -693 -692 -691 -690 -689 -688 -687 -686 -685 -684 -683 -682 -681 -680 -679 -678 -677 -676 -675 -674 -673 -672 -671 -670 -669 -668 -667 -666 -665 -664 -663 -662 -661 -660 -659 -658 -657 -656 -655 -654 -653 -652 -651 -650 -649 -648 -647 -646 -645 -644 -643 -642 -641 -640 -639 -638 -637 -636 -635 -634 -633 -632 -631 -630 -629 -628 -627 -626 -625 -624 -623 -622 -621 -620 -619 -618 -617 -616 -615 -614 -613 -612 -611 -610 -609 -608 -607 -606 -605 -604 -603 -602 -601 -600 -599 -598 -597 -596 -595 -594 -593 -592 -591 -590 -589 -588 -587 -586 -585 -584 -583 -582 -581 -580 -579 -578 -577 -576 -575 -574 -573 -572 -571 -570 -569 -568 -567 -566 -565 -564 -563 -562 -561 -560 -559 -558 -557 -556 -555 -554 -553 -552 -551 -550 -549 -548 -547 -546 -545 -544 -543 -542 -541 -540 -539 -538 -537 -536 -535 -534 -533 -532 -531 -530 -529 -528 -527 -526 -525 -524 -523 -522 -521 -520 -519 -518 -517 -516 -515 -514 -513 -512 -511 -510 -509 -508 -507 -506 -505 -504 -503 -502 -501 -500 -499 -498 -497 -496 -495 -494 -493 -492 -491 -490 -489 -488 -487 -486 -485 -484 -483 -482 -481 -480 -479 -478 -477 -476 -475 -474 -473 -472 -471 -470 -469 -468 -467 -466 -465 -464 -463 -462 -461 -460 -459 -458 -457 -456 -455 -454 -453 -452 -451 -450 -449 -448 -447 -446 -445 -444 -443 -442 -441 -440 -439 -438 -437 -436 -435 -434 -433 -432 -431 -430 -429 -428 -427 -426 -425 -424 -423 -422 -421 -420 -419 -418 -417 -416 -415 -414 -413 -412 -411 -410 -409 -408 -407 -406 -405 -404 -403 -402 -401 -400 -399 -398 -397 -396 -395 -394 -393 -392 -391 -390 -389 -388 -387 -386 -385 -384 -383 -382 -381 -380 -379 -378 -377 -376 -375 -374 -373 -372 -371 -370 -369 -368 -367 -366 -365 -364 -363 -362 -361 -360 -359 -358 -357 -356 -355 -354 -353 -352 -351 -350 -349 -348 -347 -346 -345 -344 -343 -342 -341 -340 -339 -338 -337 -336 -335 -334 -333 -332 -331 -330 -329 -328 -327 -326 -325 -324 -323 -322 -321 -320 -319 -318 -317 -316 -315 -314 -313 -312 -311 -310 -309 -308 -307 -306 -305 -304 -303 -302 -301 -300 -299 -298 -297 -296 -295 -294 -293 -292 -291 -290 -289 -288 -287 -286 -285 -284 -283 -282 -281 -280 -279 -278 -277 -276 -275 -274 -273 -272 -271 -270 -269 -268 -267 -266 -265 -264 -263 -262 -261 -260 -259 -258 -257 -256 -255 -254 -253 -252 -251 -250 -249 -248 -247 -246 -245 -244 -243 -242 -241 -240 -239 -238 -237 -236 -235 -234 -233 -232 -231 -230 -229 -228 -227 -226 -225 -224 -223 -222 -221 -220 -219 -218 -217 -216 -215 -214 -213 -212 -211 -210 -209 -208 -207 -206 -205 -204 -203 -202 -201 -200 -199 -198 -197 -196 -195 -194 -193 -192 -191 -190 -189 -188 -187 -186 -185 -184 -183 -182 -181 -180 -179 -178 -177 -176 -175 -174 -173 -172 -171 -170 -169 -168 -167 -166 -165 -164 -163 -162 -161 -160 -159 -158 -157 -156 -155 -154 -153 -152 -151 -150 -149 -148 -147 -146 -145 -144 -143 -142 -141 -140 -139 -138 -137 -136 -135 -134 -133 -132 -131 -130 -129 -128 -127 -126 -125 -124 -123 -122 -121 -120 -119 -118 -117 -116 -115 -114 -113 -112 -111 -110 -109 -108 -107 -106 -105 -104 -103 -102 -101 -100 -99 -98 -97 -96 -95 -94 -93 -92 -91 -90 -89 -88 -87 -86 -85 -84 -83 -82 -81 -80 -79 -78 -77 -76 -75 -74 -73 -72 -71 -70 -69 -68 -67 -66 -65 -64 -63 -62 -61 -60 -59 -58 -57 -56 -55 -54 -53 -52 -51 -50 -49 -48 -47 -46 -45 -44 -43 -42 -41 -40 -39 -38 -37 -36 -35 -34 -33 -32 -31 -30 -29 -28 -27 -26 -25 -24 -23 -22 -21 -20 -19 -18 -17 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 -NOP PERCENT -90 diff --git a/bench_horn_mcmc/samples_shrink_big_numbers_1024/first.xml b/bench_horn_mcmc/samples_shrink_big_numbers_1024/first.xml deleted file mode 100644 index ccf8e1e21..000000000 --- a/bench_horn_mcmc/samples_shrink_big_numbers_1024/first.xml +++ /dev/null @@ -1,6197 +0,0 @@ - - - - - 1 - itp - - - - x - x1 - - - - x - - - - - - x - 1 - - - - - x - 2 - - - - - x - 3 - - - - - x - 4 - - - - - x - 5 - - - - - x - 6 - - - - - x - 7 - - - - - x - 8 - - - - - x - 9 - - - - - x - 10 - - - - - x - 11 - - - - - x - 12 - - - - - x - 13 - - - - - x - 14 - - - - - x - 15 - - - - - x - 16 - - - - - x - 17 - - - - - x - 18 - - - - - x - 19 - - - - - x - 20 - - - - - x - 21 - - - - - x - 22 - - - - - x - 23 - - - - - x - 24 - - - - - x - 25 - - - - - x - 26 - - - - - x - 27 - - - - - x - 28 - - - - - x - 29 - - - - - x - 30 - - - - - x - 31 - - - - - x - 32 - - - - - x - 33 - - - - - x - 34 - - - - - x - 35 - - - - - x - 36 - - - - - x - 37 - - - - - x - 38 - - - - - x - 39 - - - - - x - 40 - - - - - x - 41 - - - - - x - 42 - - - - - x - 43 - - - - - x - 44 - - - - - x - 45 - - - - - x - 46 - - - - - x - 47 - - - - - x - 48 - - - - - x - 49 - - - - - x - 50 - - - - - x - 51 - - - - - x - 52 - - - - - x - 53 - - - - - x - 54 - - - - - x - 55 - - - - - x - 56 - - - - - x - 57 - - - - - x - 58 - - - - - x - 59 - - - - - x - 60 - - - - - x - 61 - - - - - x - 62 - - - - - x - 63 - - - - - x - 64 - - - - - x - 65 - - - - - x - 66 - - - - - x - 67 - - - - - x - 68 - - - - - x - 69 - - - - - x - 70 - - - - - x - 71 - - - - - x - 72 - - - - - x - 73 - - - - - x - 74 - - - - - x - 75 - - - - - x - 76 - - - - - x - 77 - - - - - x - 78 - - - - - x - 79 - - - - - x - 80 - - - - - x - 81 - - - - - x - 82 - - - - - x - 83 - - - - - x - 84 - - - - - x - 85 - - - - - x - 86 - - - - - x - 87 - - - - - x - 88 - - - - - x - 89 - - - - - x - 90 - - - - - x - 91 - - - - - x - 92 - - - - - x - 93 - - - - - x - 94 - - - - - x - 95 - - - - - x - 96 - - - - - x - 97 - - - - - x - 98 - - - - - x - 99 - - - - - x - 100 - - - - - x - 101 - - - - - x - 102 - - - - - x - 103 - - - - - x - 104 - - - - - x - 105 - - - - - x - 106 - - - - - x - 107 - - - - - x - 108 - - - - - x - 109 - - - - - x - 110 - - - - - x - 111 - - - - - x - 112 - - - - - x - 113 - - - - - x - 114 - - - - - x - 115 - - - - - x - 116 - - - - - x - 117 - - - - - x - 118 - - - - - x - 119 - - - - - x - 120 - - - - - x - 121 - - - - - x - 122 - - - - - x - 123 - - - - - x - 124 - - - - - x - 125 - - - - - x - 126 - - - - - x - 127 - - - - - x - 128 - - - - - x - 129 - - - - - x - 130 - - - - - x - 131 - - - - - x - 132 - - - - - x - 133 - - - - - x - 134 - - - - - x - 135 - - - - - x - 136 - - - - - x - 137 - - - - - x - 138 - - - - - x - 139 - - - - - x - 140 - - - - - x - 141 - - - - - x - 142 - - - - - x - 143 - - - - - x - 144 - - - - - x - 145 - - - - - x - 146 - - - - - x - 147 - - - - - x - 148 - - - - - x - 149 - - - - - x - 150 - - - - - x - 151 - - - - - x - 152 - - - - - x - 153 - - - - - x - 154 - - - - - x - 155 - - - - - x - 156 - - - - - x - 157 - - - - - x - 158 - - - - - x - 159 - - - - - x - 160 - - - - - x - 161 - - - - - x - 162 - - - - - x - 163 - - - - - x - 164 - - - - - x - 165 - - - - - x - 166 - - - - - x - 167 - - - - - x - 168 - - - - - x - 169 - - - - - x - 170 - - - - - x - 171 - - - - - x - 172 - - - - - x - 173 - - - - - x - 174 - - - - - x - 175 - - - - - x - 176 - - - - - x - 177 - - - - - x - 178 - - - - - x - 179 - - - - - x - 180 - - - - - x - 181 - - - - - x - 182 - - - - - x - 183 - - - - - x - 184 - - - - - x - 185 - - - - - x - 186 - - - - - x - 187 - - - - - x - 188 - - - - - x - 189 - - - - - x - 190 - - - - - x - 191 - - - - - x - 192 - - - - - x - 193 - - - - - x - 194 - - - - - x - 195 - - - - - x - 196 - - - - - x - 197 - - - - - x - 198 - - - - - x - 199 - - - - - x - 200 - - - - - x - 201 - - - - - x - 202 - - - - - x - 203 - - - - - x - 204 - - - - - x - 205 - - - - - x - 206 - - - - - x - 207 - - - - - x - 208 - - - - - x - 209 - - - - - x - 210 - - - - - x - 211 - - - - - x - 212 - - - - - x - 213 - - - - - x - 214 - - - - - x - 215 - - - - - x - 216 - - - - - x - 217 - - - - - x - 218 - - - - - x - 219 - - - - - x - 220 - - - - - x - 221 - - - - - x - 222 - - - - - x - 223 - - - - - x - 224 - - - - - x - 225 - - - - - x - 226 - - - - - x - 227 - - - - - x - 228 - - - - - x - 229 - - - - - x - 230 - - - - - x - 231 - - - - - x - 232 - - - - - x - 233 - - - - - x - 234 - - - - - x - 235 - - - - - x - 236 - - - - - x - 237 - - - - - x - 238 - - - - - x - 239 - - - - - x - 240 - - - - - x - 241 - - - - - x - 242 - - - - - x - 243 - - - - - x - 244 - - - - - x - 245 - - - - - x - 246 - - - - - x - 247 - - - - - x - 248 - - - - - x - 249 - - - - - x - 250 - - - - - x - 251 - - - - - x - 252 - - - - - x - 253 - - - - - x - 254 - - - - - x - 255 - - - - - x - 256 - - - - - x - 257 - - - - - x - 258 - - - - - x - 259 - - - - - x - 260 - - - - - x - 261 - - - - - x - 262 - - - - - x - 263 - - - - - x - 264 - - - - - x - 265 - - - - - x - 266 - - - - - x - 267 - - - - - x - 268 - - - - - x - 269 - - - - - x - 270 - - - - - x - 271 - - - - - x - 272 - - - - - x - 273 - - - - - x - 274 - - - - - x - 275 - - - - - x - 276 - - - - - x - 277 - - - - - x - 278 - - - - - x - 279 - - - - - x - 280 - - - - - x - 281 - - - - - x - 282 - - - - - x - 283 - - - - - x - 284 - - - - - x - 285 - - - - - x - 286 - - - - - x - 287 - - - - - x - 288 - - - - - x - 289 - - - - - x - 290 - - - - - x - 291 - - - - - x - 292 - - - - - x - 293 - - - - - x - 294 - - - - - x - 295 - - - - - x - 296 - - - - - x - 297 - - - - - x - 298 - - - - - x - 299 - - - - - x - 300 - - - - - x - 301 - - - - - x - 302 - - - - - x - 303 - - - - - x - 304 - - - - - x - 305 - - - - - x - 306 - - - - - x - 307 - - - - - x - 308 - - - - - x - 309 - - - - - x - 310 - - - - - x - 311 - - - - - x - 312 - - - - - x - 313 - - - - - x - 314 - - - - - x - 315 - - - - - x - 316 - - - - - x - 317 - - - - - x - 318 - - - - - x - 319 - - - - - x - 320 - - - - - x - 321 - - - - - x - 322 - - - - - x - 323 - - - - - x - 324 - - - - - x - 325 - - - - - x - 326 - - - - - x - 327 - - - - - x - 328 - - - - - x - 329 - - - - - x - 330 - - - - - x - 331 - - - - - x - 332 - - - - - x - 333 - - - - - x - 334 - - - - - x - 335 - - - - - x - 336 - - - - - x - 337 - - - - - x - 338 - - - - - x - 339 - - - - - x - 340 - - - - - x - 341 - - - - - x - 342 - - - - - x - 343 - - - - - x - 344 - - - - - x - 345 - - - - - x - 346 - - - - - x - 347 - - - - - x - 348 - - - - - x - 349 - - - - - x - 350 - - - - - x - 351 - - - - - x - 352 - - - - - x - 353 - - - - - x - 354 - - - - - x - 355 - - - - - x - 356 - - - - - x - 357 - - - - - x - 358 - - - - - x - 359 - - - - - x - 360 - - - - - x - 361 - - - - - x - 362 - - - - - x - 363 - - - - - x - 364 - - - - - x - 365 - - - - - x - 366 - - - - - x - 367 - - - - - x - 368 - - - - - x - 369 - - - - - x - 370 - - - - - x - 371 - - - - - x - 372 - - - - - x - 373 - - - - - x - 374 - - - - - x - 375 - - - - - x - 376 - - - - - x - 377 - - - - - x - 378 - - - - - x - 379 - - - - - x - 380 - - - - - x - 381 - - - - - x - 382 - - - - - x - 383 - - - - - x - 384 - - - - - x - 385 - - - - - x - 386 - - - - - x - 387 - - - - - x - 388 - - - - - x - 389 - - - - - x - 390 - - - - - x - 391 - - - - - x - 392 - - - - - x - 393 - - - - - x - 394 - - - - - x - 395 - - - - - x - 396 - - - - - x - 397 - - - - - x - 398 - - - - - x - 399 - - - - - x - 400 - - - - - x - 401 - - - - - x - 402 - - - - - x - 403 - - - - - x - 404 - - - - - x - 405 - - - - - x - 406 - - - - - x - 407 - - - - - x - 408 - - - - - x - 409 - - - - - x - 410 - - - - - x - 411 - - - - - x - 412 - - - - - x - 413 - - - - - x - 414 - - - - - x - 415 - - - - - x - 416 - - - - - x - 417 - - - - - x - 418 - - - - - x - 419 - - - - - x - 420 - - - - - x - 421 - - - - - x - 422 - - - - - x - 423 - - - - - x - 424 - - - - - x - 425 - - - - - x - 426 - - - - - x - 427 - - - - - x - 428 - - - - - x - 429 - - - - - x - 430 - - - - - x - 431 - - - - - x - 432 - - - - - x - 433 - - - - - x - 434 - - - - - x - 435 - - - - - x - 436 - - - - - x - 437 - - - - - x - 438 - - - - - x - 439 - - - - - x - 440 - - - - - x - 441 - - - - - x - 442 - - - - - x - 443 - - - - - x - 444 - - - - - x - 445 - - - - - x - 446 - - - - - x - 447 - - - - - x - 448 - - - - - x - 449 - - - - - x - 450 - - - - - x - 451 - - - - - x - 452 - - - - - x - 453 - - - - - x - 454 - - - - - x - 455 - - - - - x - 456 - - - - - x - 457 - - - - - x - 458 - - - - - x - 459 - - - - - x - 460 - - - - - x - 461 - - - - - x - 462 - - - - - x - 463 - - - - - x - 464 - - - - - x - 465 - - - - - x - 466 - - - - - x - 467 - - - - - x - 468 - - - - - x - 469 - - - - - x - 470 - - - - - x - 471 - - - - - x - 472 - - - - - x - 473 - - - - - x - 474 - - - - - x - 475 - - - - - x - 476 - - - - - x - 477 - - - - - x - 478 - - - - - x - 479 - - - - - x - 480 - - - - - x - 481 - - - - - x - 482 - - - - - x - 483 - - - - - x - 484 - - - - - x - 485 - - - - - x - 486 - - - - - x - 487 - - - - - x - 488 - - - - - x - 489 - - - - - x - 490 - - - - - x - 491 - - - - - x - 492 - - - - - x - 493 - - - - - x - 494 - - - - - x - 495 - - - - - x - 496 - - - - - x - 497 - - - - - x - 498 - - - - - x - 499 - - - - - x - 500 - - - - - x - 501 - - - - - x - 502 - - - - - x - 503 - - - - - x - 504 - - - - - x - 505 - - - - - x - 506 - - - - - x - 507 - - - - - x - 508 - - - - - x - 509 - - - - - x - 510 - - - - - x - 511 - - - - - x - 512 - - - - - x - 513 - - - - - x - 514 - - - - - x - 515 - - - - - x - 516 - - - - - x - 517 - - - - - x - 518 - - - - - x - 519 - - - - - x - 520 - - - - - x - 521 - - - - - x - 522 - - - - - x - 523 - - - - - x - 524 - - - - - x - 525 - - - - - x - 526 - - - - - x - 527 - - - - - x - 528 - - - - - x - 529 - - - - - x - 530 - - - - - x - 531 - - - - - x - 532 - - - - - x - 533 - - - - - x - 534 - - - - - x - 535 - - - - - x - 536 - - - - - x - 537 - - - - - x - 538 - - - - - x - 539 - - - - - x - 540 - - - - - x - 541 - - - - - x - 542 - - - - - x - 543 - - - - - x - 544 - - - - - x - 545 - - - - - x - 546 - - - - - x - 547 - - - - - x - 548 - - - - - x - 549 - - - - - x - 550 - - - - - x - 551 - - - - - x - 552 - - - - - x - 553 - - - - - x - 554 - - - - - x - 555 - - - - - x - 556 - - - - - x - 557 - - - - - x - 558 - - - - - x - 559 - - - - - x - 560 - - - - - x - 561 - - - - - x - 562 - - - - - x - 563 - - - - - x - 564 - - - - - x - 565 - - - - - x - 566 - - - - - x - 567 - - - - - x - 568 - - - - - x - 569 - - - - - x - 570 - - - - - x - 571 - - - - - x - 572 - - - - - x - 573 - - - - - x - 574 - - - - - x - 575 - - - - - x - 576 - - - - - x - 577 - - - - - x - 578 - - - - - x - 579 - - - - - x - 580 - - - - - x - 581 - - - - - x - 582 - - - - - x - 583 - - - - - x - 584 - - - - - x - 585 - - - - - x - 586 - - - - - x - 587 - - - - - x - 588 - - - - - x - 589 - - - - - x - 590 - - - - - x - 591 - - - - - x - 592 - - - - - x - 593 - - - - - x - 594 - - - - - x - 595 - - - - - x - 596 - - - - - x - 597 - - - - - x - 598 - - - - - x - 599 - - - - - x - 600 - - - - - x - 601 - - - - - x - 602 - - - - - x - 603 - - - - - x - 604 - - - - - x - 605 - - - - - x - 606 - - - - - x - 607 - - - - - x - 608 - - - - - x - 609 - - - - - x - 610 - - - - - x - 611 - - - - - x - 612 - - - - - x - 613 - - - - - x - 614 - - - - - x - 615 - - - - - x - 616 - - - - - x - 617 - - - - - x - 618 - - - - - x - 619 - - - - - x - 620 - - - - - x - 621 - - - - - x - 622 - - - - - x - 623 - - - - - x - 624 - - - - - x - 625 - - - - - x - 626 - - - - - x - 627 - - - - - x - 628 - - - - - x - 629 - - - - - x - 630 - - - - - x - 631 - - - - - x - 632 - - - - - x - 633 - - - - - x - 634 - - - - - x - 635 - - - - - x - 636 - - - - - x - 637 - - - - - x - 638 - - - - - x - 639 - - - - - x - 640 - - - - - x - 641 - - - - - x - 642 - - - - - x - 643 - - - - - x - 644 - - - - - x - 645 - - - - - x - 646 - - - - - x - 647 - - - - - x - 648 - - - - - x - 649 - - - - - x - 650 - - - - - x - 651 - - - - - x - 652 - - - - - x - 653 - - - - - x - 654 - - - - - x - 655 - - - - - x - 656 - - - - - x - 657 - - - - - x - 658 - - - - - x - 659 - - - - - x - 660 - - - - - x - 661 - - - - - x - 662 - - - - - x - 663 - - - - - x - 664 - - - - - x - 665 - - - - - x - 666 - - - - - x - 667 - - - - - x - 668 - - - - - x - 669 - - - - - x - 670 - - - - - x - 671 - - - - - x - 672 - - - - - x - 673 - - - - - x - 674 - - - - - x - 675 - - - - - x - 676 - - - - - x - 677 - - - - - x - 678 - - - - - x - 679 - - - - - x - 680 - - - - - x - 681 - - - - - x - 682 - - - - - x - 683 - - - - - x - 684 - - - - - x - 685 - - - - - x - 686 - - - - - x - 687 - - - - - x - 688 - - - - - x - 689 - - - - - x - 690 - - - - - x - 691 - - - - - x - 692 - - - - - x - 693 - - - - - x - 694 - - - - - x - 695 - - - - - x - 696 - - - - - x - 697 - - - - - x - 698 - - - - - x - 699 - - - - - x - 700 - - - - - x - 701 - - - - - x - 702 - - - - - x - 703 - - - - - x - 704 - - - - - x - 705 - - - - - x - 706 - - - - - x - 707 - - - - - x - 708 - - - - - x - 709 - - - - - x - 710 - - - - - x - 711 - - - - - x - 712 - - - - - x - 713 - - - - - x - 714 - - - - - x - 715 - - - - - x - 716 - - - - - x - 717 - - - - - x - 718 - - - - - x - 719 - - - - - x - 720 - - - - - x - 721 - - - - - x - 722 - - - - - x - 723 - - - - - x - 724 - - - - - x - 725 - - - - - x - 726 - - - - - x - 727 - - - - - x - 728 - - - - - x - 729 - - - - - x - 730 - - - - - x - 731 - - - - - x - 732 - - - - - x - 733 - - - - - x - 734 - - - - - x - 735 - - - - - x - 736 - - - - - x - 737 - - - - - x - 738 - - - - - x - 739 - - - - - x - 740 - - - - - x - 741 - - - - - x - 742 - - - - - x - 743 - - - - - x - 744 - - - - - x - 745 - - - - - x - 746 - - - - - x - 747 - - - - - x - 748 - - - - - x - 749 - - - - - x - 750 - - - - - x - 751 - - - - - x - 752 - - - - - x - 753 - - - - - x - 754 - - - - - x - 755 - - - - - x - 756 - - - - - x - 757 - - - - - x - 758 - - - - - x - 759 - - - - - x - 760 - - - - - x - 761 - - - - - x - 762 - - - - - x - 763 - - - - - x - 764 - - - - - x - 765 - - - - - x - 766 - - - - - x - 767 - - - - - x - 768 - - - - - x - 769 - - - - - x - 770 - - - - - x - 771 - - - - - x - 772 - - - - - x - 773 - - - - - x - 774 - - - - - x - 775 - - - - - x - 776 - - - - - x - 777 - - - - - x - 778 - - - - - x - 779 - - - - - x - 780 - - - - - x - 781 - - - - - x - 782 - - - - - x - 783 - - - - - x - 784 - - - - - x - 785 - - - - - x - 786 - - - - - x - 787 - - - - - x - 788 - - - - - x - 789 - - - - - x - 790 - - - - - x - 791 - - - - - x - 792 - - - - - x - 793 - - - - - x - 794 - - - - - x - 795 - - - - - x - 796 - - - - - x - 797 - - - - - x - 798 - - - - - x - 799 - - - - - x - 800 - - - - - x - 801 - - - - - x - 802 - - - - - x - 803 - - - - - x - 804 - - - - - x - 805 - - - - - x - 806 - - - - - x - 807 - - - - - x - 808 - - - - - x - 809 - - - - - x - 810 - - - - - x - 811 - - - - - x - 812 - - - - - x - 813 - - - - - x - 814 - - - - - x - 815 - - - - - x - 816 - - - - - x - 817 - - - - - x - 818 - - - - - x - 819 - - - - - x - 820 - - - - - x - 821 - - - - - x - 822 - - - - - x - 823 - - - - - x - 824 - - - - - x - 825 - - - - - x - 826 - - - - - x - 827 - - - - - x - 828 - - - - - x - 829 - - - - - x - 830 - - - - - x - 831 - - - - - x - 832 - - - - - x - 833 - - - - - x - 834 - - - - - x - 835 - - - - - x - 836 - - - - - x - 837 - - - - - x - 838 - - - - - x - 839 - - - - - x - 840 - - - - - x - 841 - - - - - x - 842 - - - - - x - 843 - - - - - x - 844 - - - - - x - 845 - - - - - x - 846 - - - - - x - 847 - - - - - x - 848 - - - - - x - 849 - - - - - x - 850 - - - - - x - 851 - - - - - x - 852 - - - - - x - 853 - - - - - x - 854 - - - - - x - 855 - - - - - x - 856 - - - - - x - 857 - - - - - x - 858 - - - - - x - 859 - - - - - x - 860 - - - - - x - 861 - - - - - x - 862 - - - - - x - 863 - - - - - x - 864 - - - - - x - 865 - - - - - x - 866 - - - - - x - 867 - - - - - x - 868 - - - - - x - 869 - - - - - x - 870 - - - - - x - 871 - - - - - x - 872 - - - - - x - 873 - - - - - x - 874 - - - - - x - 875 - - - - - x - 876 - - - - - x - 877 - - - - - x - 878 - - - - - x - 879 - - - - - x - 880 - - - - - x - 881 - - - - - x - 882 - - - - - x - 883 - - - - - x - 884 - - - - - x - 885 - - - - - x - 886 - - - - - x - 887 - - - - - x - 888 - - - - - x - 889 - - - - - x - 890 - - - - - x - 891 - - - - - x - 892 - - - - - x - 893 - - - - - x - 894 - - - - - x - 895 - - - - - x - 896 - - - - - x - 897 - - - - - x - 898 - - - - - x - 899 - - - - - x - 900 - - - - - x - 901 - - - - - x - 902 - - - - - x - 903 - - - - - x - 904 - - - - - x - 905 - - - - - x - 906 - - - - - x - 907 - - - - - x - 908 - - - - - x - 909 - - - - - x - 910 - - - - - x - 911 - - - - - x - 912 - - - - - x - 913 - - - - - x - 914 - - - - - x - 915 - - - - - x - 916 - - - - - x - 917 - - - - - x - 918 - - - - - x - 919 - - - - - x - 920 - - - - - x - 921 - - - - - x - 922 - - - - - x - 923 - - - - - x - 924 - - - - - x - 925 - - - - - x - 926 - - - - - x - 927 - - - - - x - 928 - - - - - x - 929 - - - - - x - 930 - - - - - x - 931 - - - - - x - 932 - - - - - x - 933 - - - - - x - 934 - - - - - x - 935 - - - - - x - 936 - - - - - x - 937 - - - - - x - 938 - - - - - x - 939 - - - - - x - 940 - - - - - x - 941 - - - - - x - 942 - - - - - x - 943 - - - - - x - 944 - - - - - x - 945 - - - - - x - 946 - - - - - x - 947 - - - - - x - 948 - - - - - x - 949 - - - - - x - 950 - - - - - x - 951 - - - - - x - 952 - - - - - x - 953 - - - - - x - 954 - - - - - x - 955 - - - - - x - 956 - - - - - x - 957 - - - - - x - 958 - - - - - x - 959 - - - - - x - 960 - - - - - x - 961 - - - - - x - 962 - - - - - x - 963 - - - - - x - 964 - - - - - x - 965 - - - - - x - 966 - - - - - x - 967 - - - - - x - 968 - - - - - x - 969 - - - - - x - 970 - - - - - x - 971 - - - - - x - 972 - - - - - x - 973 - - - - - x - 974 - - - - - x - 975 - - - - - x - 976 - - - - - x - 977 - - - - - x - 978 - - - - - x - 979 - - - - - x - 980 - - - - - x - 981 - - - - - x - 982 - - - - - x - 983 - - - - - x - 984 - - - - - x - 985 - - - - - x - 986 - - - - - x - 987 - - - - - x - 988 - - - - - x - 989 - - - - - x - 990 - - - - - x - 991 - - - - - x - 992 - - - - - x - 993 - - - - - x - 994 - - - - - x - 995 - - - - - x - 996 - - - - - x - 997 - - - - - x - 998 - - - - - x - 999 - - - - - x - 1000 - - - - - x - 1001 - - - - - x - 1002 - - - - - x - 1003 - - - - - x - 1004 - - - - - x - 1005 - - - - - x - 1006 - - - - - x - 1007 - - - - - x - 1008 - - - - - x - 1009 - - - - - x - 1010 - - - - - x - 1011 - - - - - x - 1012 - - - - - x - 1013 - - - - - x - 1014 - - - - - x - 1015 - - - - - x - 1016 - - - - - x - 1017 - - - - - x - 1018 - - - - - x - 1019 - - - - - x - 1020 - - - - - x - 1021 - - - - - x - 1022 - - - - - x - 1023 - - - - - x - 1024 - - - - - - - - x - - - x1 - - - - - x1 - - x - 1 - - - - - - - - x - - - - x - 0 - - - - - diff --git a/bench_horn_mcmc/samples_shrink_big_numbers_2048/config b/bench_horn_mcmc/samples_shrink_big_numbers_2048/config deleted file mode 100644 index 649f88219..000000000 --- a/bench_horn_mcmc/samples_shrink_big_numbers_2048/config +++ /dev/null @@ -1,12 +0,0 @@ -DISJUNCTS -10 -CONJUNCTS -10 -COEFFICIENT BAG -3 --1 0 1 -IMMEDIATE BAG -4097 --2048 -2047 -2046 -2045 -2044 -2043 -2042 -2041 -2040 -2039 -2038 -2037 -2036 -2035 -2034 -2033 -2032 -2031 -2030 -2029 -2028 -2027 -2026 -2025 -2024 -2023 -2022 -2021 -2020 -2019 -2018 -2017 -2016 -2015 -2014 -2013 -2012 -2011 -2010 -2009 -2008 -2007 -2006 -2005 -2004 -2003 -2002 -2001 -2000 -1999 -1998 -1997 -1996 -1995 -1994 -1993 -1992 -1991 -1990 -1989 -1988 -1987 -1986 -1985 -1984 -1983 -1982 -1981 -1980 -1979 -1978 -1977 -1976 -1975 -1974 -1973 -1972 -1971 -1970 -1969 -1968 -1967 -1966 -1965 -1964 -1963 -1962 -1961 -1960 -1959 -1958 -1957 -1956 -1955 -1954 -1953 -1952 -1951 -1950 -1949 -1948 -1947 -1946 -1945 -1944 -1943 -1942 -1941 -1940 -1939 -1938 -1937 -1936 -1935 -1934 -1933 -1932 -1931 -1930 -1929 -1928 -1927 -1926 -1925 -1924 -1923 -1922 -1921 -1920 -1919 -1918 -1917 -1916 -1915 -1914 -1913 -1912 -1911 -1910 -1909 -1908 -1907 -1906 -1905 -1904 -1903 -1902 -1901 -1900 -1899 -1898 -1897 -1896 -1895 -1894 -1893 -1892 -1891 -1890 -1889 -1888 -1887 -1886 -1885 -1884 -1883 -1882 -1881 -1880 -1879 -1878 -1877 -1876 -1875 -1874 -1873 -1872 -1871 -1870 -1869 -1868 -1867 -1866 -1865 -1864 -1863 -1862 -1861 -1860 -1859 -1858 -1857 -1856 -1855 -1854 -1853 -1852 -1851 -1850 -1849 -1848 -1847 -1846 -1845 -1844 -1843 -1842 -1841 -1840 -1839 -1838 -1837 -1836 -1835 -1834 -1833 -1832 -1831 -1830 -1829 -1828 -1827 -1826 -1825 -1824 -1823 -1822 -1821 -1820 -1819 -1818 -1817 -1816 -1815 -1814 -1813 -1812 -1811 -1810 -1809 -1808 -1807 -1806 -1805 -1804 -1803 -1802 -1801 -1800 -1799 -1798 -1797 -1796 -1795 -1794 -1793 -1792 -1791 -1790 -1789 -1788 -1787 -1786 -1785 -1784 -1783 -1782 -1781 -1780 -1779 -1778 -1777 -1776 -1775 -1774 -1773 -1772 -1771 -1770 -1769 -1768 -1767 -1766 -1765 -1764 -1763 -1762 -1761 -1760 -1759 -1758 -1757 -1756 -1755 -1754 -1753 -1752 -1751 -1750 -1749 -1748 -1747 -1746 -1745 -1744 -1743 -1742 -1741 -1740 -1739 -1738 -1737 -1736 -1735 -1734 -1733 -1732 -1731 -1730 -1729 -1728 -1727 -1726 -1725 -1724 -1723 -1722 -1721 -1720 -1719 -1718 -1717 -1716 -1715 -1714 -1713 -1712 -1711 -1710 -1709 -1708 -1707 -1706 -1705 -1704 -1703 -1702 -1701 -1700 -1699 -1698 -1697 -1696 -1695 -1694 -1693 -1692 -1691 -1690 -1689 -1688 -1687 -1686 -1685 -1684 -1683 -1682 -1681 -1680 -1679 -1678 -1677 -1676 -1675 -1674 -1673 -1672 -1671 -1670 -1669 -1668 -1667 -1666 -1665 -1664 -1663 -1662 -1661 -1660 -1659 -1658 -1657 -1656 -1655 -1654 -1653 -1652 -1651 -1650 -1649 -1648 -1647 -1646 -1645 -1644 -1643 -1642 -1641 -1640 -1639 -1638 -1637 -1636 -1635 -1634 -1633 -1632 -1631 -1630 -1629 -1628 -1627 -1626 -1625 -1624 -1623 -1622 -1621 -1620 -1619 -1618 -1617 -1616 -1615 -1614 -1613 -1612 -1611 -1610 -1609 -1608 -1607 -1606 -1605 -1604 -1603 -1602 -1601 -1600 -1599 -1598 -1597 -1596 -1595 -1594 -1593 -1592 -1591 -1590 -1589 -1588 -1587 -1586 -1585 -1584 -1583 -1582 -1581 -1580 -1579 -1578 -1577 -1576 -1575 -1574 -1573 -1572 -1571 -1570 -1569 -1568 -1567 -1566 -1565 -1564 -1563 -1562 -1561 -1560 -1559 -1558 -1557 -1556 -1555 -1554 -1553 -1552 -1551 -1550 -1549 -1548 -1547 -1546 -1545 -1544 -1543 -1542 -1541 -1540 -1539 -1538 -1537 -1536 -1535 -1534 -1533 -1532 -1531 -1530 -1529 -1528 -1527 -1526 -1525 -1524 -1523 -1522 -1521 -1520 -1519 -1518 -1517 -1516 -1515 -1514 -1513 -1512 -1511 -1510 -1509 -1508 -1507 -1506 -1505 -1504 -1503 -1502 -1501 -1500 -1499 -1498 -1497 -1496 -1495 -1494 -1493 -1492 -1491 -1490 -1489 -1488 -1487 -1486 -1485 -1484 -1483 -1482 -1481 -1480 -1479 -1478 -1477 -1476 -1475 -1474 -1473 -1472 -1471 -1470 -1469 -1468 -1467 -1466 -1465 -1464 -1463 -1462 -1461 -1460 -1459 -1458 -1457 -1456 -1455 -1454 -1453 -1452 -1451 -1450 -1449 -1448 -1447 -1446 -1445 -1444 -1443 -1442 -1441 -1440 -1439 -1438 -1437 -1436 -1435 -1434 -1433 -1432 -1431 -1430 -1429 -1428 -1427 -1426 -1425 -1424 -1423 -1422 -1421 -1420 -1419 -1418 -1417 -1416 -1415 -1414 -1413 -1412 -1411 -1410 -1409 -1408 -1407 -1406 -1405 -1404 -1403 -1402 -1401 -1400 -1399 -1398 -1397 -1396 -1395 -1394 -1393 -1392 -1391 -1390 -1389 -1388 -1387 -1386 -1385 -1384 -1383 -1382 -1381 -1380 -1379 -1378 -1377 -1376 -1375 -1374 -1373 -1372 -1371 -1370 -1369 -1368 -1367 -1366 -1365 -1364 -1363 -1362 -1361 -1360 -1359 -1358 -1357 -1356 -1355 -1354 -1353 -1352 -1351 -1350 -1349 -1348 -1347 -1346 -1345 -1344 -1343 -1342 -1341 -1340 -1339 -1338 -1337 -1336 -1335 -1334 -1333 -1332 -1331 -1330 -1329 -1328 -1327 -1326 -1325 -1324 -1323 -1322 -1321 -1320 -1319 -1318 -1317 -1316 -1315 -1314 -1313 -1312 -1311 -1310 -1309 -1308 -1307 -1306 -1305 -1304 -1303 -1302 -1301 -1300 -1299 -1298 -1297 -1296 -1295 -1294 -1293 -1292 -1291 -1290 -1289 -1288 -1287 -1286 -1285 -1284 -1283 -1282 -1281 -1280 -1279 -1278 -1277 -1276 -1275 -1274 -1273 -1272 -1271 -1270 -1269 -1268 -1267 -1266 -1265 -1264 -1263 -1262 -1261 -1260 -1259 -1258 -1257 -1256 -1255 -1254 -1253 -1252 -1251 -1250 -1249 -1248 -1247 -1246 -1245 -1244 -1243 -1242 -1241 -1240 -1239 -1238 -1237 -1236 -1235 -1234 -1233 -1232 -1231 -1230 -1229 -1228 -1227 -1226 -1225 -1224 -1223 -1222 -1221 -1220 -1219 -1218 -1217 -1216 -1215 -1214 -1213 -1212 -1211 -1210 -1209 -1208 -1207 -1206 -1205 -1204 -1203 -1202 -1201 -1200 -1199 -1198 -1197 -1196 -1195 -1194 -1193 -1192 -1191 -1190 -1189 -1188 -1187 -1186 -1185 -1184 -1183 -1182 -1181 -1180 -1179 -1178 -1177 -1176 -1175 -1174 -1173 -1172 -1171 -1170 -1169 -1168 -1167 -1166 -1165 -1164 -1163 -1162 -1161 -1160 -1159 -1158 -1157 -1156 -1155 -1154 -1153 -1152 -1151 -1150 -1149 -1148 -1147 -1146 -1145 -1144 -1143 -1142 -1141 -1140 -1139 -1138 -1137 -1136 -1135 -1134 -1133 -1132 -1131 -1130 -1129 -1128 -1127 -1126 -1125 -1124 -1123 -1122 -1121 -1120 -1119 -1118 -1117 -1116 -1115 -1114 -1113 -1112 -1111 -1110 -1109 -1108 -1107 -1106 -1105 -1104 -1103 -1102 -1101 -1100 -1099 -1098 -1097 -1096 -1095 -1094 -1093 -1092 -1091 -1090 -1089 -1088 -1087 -1086 -1085 -1084 -1083 -1082 -1081 -1080 -1079 -1078 -1077 -1076 -1075 -1074 -1073 -1072 -1071 -1070 -1069 -1068 -1067 -1066 -1065 -1064 -1063 -1062 -1061 -1060 -1059 -1058 -1057 -1056 -1055 -1054 -1053 -1052 -1051 -1050 -1049 -1048 -1047 -1046 -1045 -1044 -1043 -1042 -1041 -1040 -1039 -1038 -1037 -1036 -1035 -1034 -1033 -1032 -1031 -1030 -1029 -1028 -1027 -1026 -1025 -1024 -1023 -1022 -1021 -1020 -1019 -1018 -1017 -1016 -1015 -1014 -1013 -1012 -1011 -1010 -1009 -1008 -1007 -1006 -1005 -1004 -1003 -1002 -1001 -1000 -999 -998 -997 -996 -995 -994 -993 -992 -991 -990 -989 -988 -987 -986 -985 -984 -983 -982 -981 -980 -979 -978 -977 -976 -975 -974 -973 -972 -971 -970 -969 -968 -967 -966 -965 -964 -963 -962 -961 -960 -959 -958 -957 -956 -955 -954 -953 -952 -951 -950 -949 -948 -947 -946 -945 -944 -943 -942 -941 -940 -939 -938 -937 -936 -935 -934 -933 -932 -931 -930 -929 -928 -927 -926 -925 -924 -923 -922 -921 -920 -919 -918 -917 -916 -915 -914 -913 -912 -911 -910 -909 -908 -907 -906 -905 -904 -903 -902 -901 -900 -899 -898 -897 -896 -895 -894 -893 -892 -891 -890 -889 -888 -887 -886 -885 -884 -883 -882 -881 -880 -879 -878 -877 -876 -875 -874 -873 -872 -871 -870 -869 -868 -867 -866 -865 -864 -863 -862 -861 -860 -859 -858 -857 -856 -855 -854 -853 -852 -851 -850 -849 -848 -847 -846 -845 -844 -843 -842 -841 -840 -839 -838 -837 -836 -835 -834 -833 -832 -831 -830 -829 -828 -827 -826 -825 -824 -823 -822 -821 -820 -819 -818 -817 -816 -815 -814 -813 -812 -811 -810 -809 -808 -807 -806 -805 -804 -803 -802 -801 -800 -799 -798 -797 -796 -795 -794 -793 -792 -791 -790 -789 -788 -787 -786 -785 -784 -783 -782 -781 -780 -779 -778 -777 -776 -775 -774 -773 -772 -771 -770 -769 -768 -767 -766 -765 -764 -763 -762 -761 -760 -759 -758 -757 -756 -755 -754 -753 -752 -751 -750 -749 -748 -747 -746 -745 -744 -743 -742 -741 -740 -739 -738 -737 -736 -735 -734 -733 -732 -731 -730 -729 -728 -727 -726 -725 -724 -723 -722 -721 -720 -719 -718 -717 -716 -715 -714 -713 -712 -711 -710 -709 -708 -707 -706 -705 -704 -703 -702 -701 -700 -699 -698 -697 -696 -695 -694 -693 -692 -691 -690 -689 -688 -687 -686 -685 -684 -683 -682 -681 -680 -679 -678 -677 -676 -675 -674 -673 -672 -671 -670 -669 -668 -667 -666 -665 -664 -663 -662 -661 -660 -659 -658 -657 -656 -655 -654 -653 -652 -651 -650 -649 -648 -647 -646 -645 -644 -643 -642 -641 -640 -639 -638 -637 -636 -635 -634 -633 -632 -631 -630 -629 -628 -627 -626 -625 -624 -623 -622 -621 -620 -619 -618 -617 -616 -615 -614 -613 -612 -611 -610 -609 -608 -607 -606 -605 -604 -603 -602 -601 -600 -599 -598 -597 -596 -595 -594 -593 -592 -591 -590 -589 -588 -587 -586 -585 -584 -583 -582 -581 -580 -579 -578 -577 -576 -575 -574 -573 -572 -571 -570 -569 -568 -567 -566 -565 -564 -563 -562 -561 -560 -559 -558 -557 -556 -555 -554 -553 -552 -551 -550 -549 -548 -547 -546 -545 -544 -543 -542 -541 -540 -539 -538 -537 -536 -535 -534 -533 -532 -531 -530 -529 -528 -527 -526 -525 -524 -523 -522 -521 -520 -519 -518 -517 -516 -515 -514 -513 -512 -511 -510 -509 -508 -507 -506 -505 -504 -503 -502 -501 -500 -499 -498 -497 -496 -495 -494 -493 -492 -491 -490 -489 -488 -487 -486 -485 -484 -483 -482 -481 -480 -479 -478 -477 -476 -475 -474 -473 -472 -471 -470 -469 -468 -467 -466 -465 -464 -463 -462 -461 -460 -459 -458 -457 -456 -455 -454 -453 -452 -451 -450 -449 -448 -447 -446 -445 -444 -443 -442 -441 -440 -439 -438 -437 -436 -435 -434 -433 -432 -431 -430 -429 -428 -427 -426 -425 -424 -423 -422 -421 -420 -419 -418 -417 -416 -415 -414 -413 -412 -411 -410 -409 -408 -407 -406 -405 -404 -403 -402 -401 -400 -399 -398 -397 -396 -395 -394 -393 -392 -391 -390 -389 -388 -387 -386 -385 -384 -383 -382 -381 -380 -379 -378 -377 -376 -375 -374 -373 -372 -371 -370 -369 -368 -367 -366 -365 -364 -363 -362 -361 -360 -359 -358 -357 -356 -355 -354 -353 -352 -351 -350 -349 -348 -347 -346 -345 -344 -343 -342 -341 -340 -339 -338 -337 -336 -335 -334 -333 -332 -331 -330 -329 -328 -327 -326 -325 -324 -323 -322 -321 -320 -319 -318 -317 -316 -315 -314 -313 -312 -311 -310 -309 -308 -307 -306 -305 -304 -303 -302 -301 -300 -299 -298 -297 -296 -295 -294 -293 -292 -291 -290 -289 -288 -287 -286 -285 -284 -283 -282 -281 -280 -279 -278 -277 -276 -275 -274 -273 -272 -271 -270 -269 -268 -267 -266 -265 -264 -263 -262 -261 -260 -259 -258 -257 -256 -255 -254 -253 -252 -251 -250 -249 -248 -247 -246 -245 -244 -243 -242 -241 -240 -239 -238 -237 -236 -235 -234 -233 -232 -231 -230 -229 -228 -227 -226 -225 -224 -223 -222 -221 -220 -219 -218 -217 -216 -215 -214 -213 -212 -211 -210 -209 -208 -207 -206 -205 -204 -203 -202 -201 -200 -199 -198 -197 -196 -195 -194 -193 -192 -191 -190 -189 -188 -187 -186 -185 -184 -183 -182 -181 -180 -179 -178 -177 -176 -175 -174 -173 -172 -171 -170 -169 -168 -167 -166 -165 -164 -163 -162 -161 -160 -159 -158 -157 -156 -155 -154 -153 -152 -151 -150 -149 -148 -147 -146 -145 -144 -143 -142 -141 -140 -139 -138 -137 -136 -135 -134 -133 -132 -131 -130 -129 -128 -127 -126 -125 -124 -123 -122 -121 -120 -119 -118 -117 -116 -115 -114 -113 -112 -111 -110 -109 -108 -107 -106 -105 -104 -103 -102 -101 -100 -99 -98 -97 -96 -95 -94 -93 -92 -91 -90 -89 -88 -87 -86 -85 -84 -83 -82 -81 -80 -79 -78 -77 -76 -75 -74 -73 -72 -71 -70 -69 -68 -67 -66 -65 -64 -63 -62 -61 -60 -59 -58 -57 -56 -55 -54 -53 -52 -51 -50 -49 -48 -47 -46 -45 -44 -43 -42 -41 -40 -39 -38 -37 -36 -35 -34 -33 -32 -31 -30 -29 -28 -27 -26 -25 -24 -23 -22 -21 -20 -19 -18 -17 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 -NOP PERCENT -90 diff --git a/bench_horn_mcmc/samples_shrink_big_numbers_2048/first.xml b/bench_horn_mcmc/samples_shrink_big_numbers_2048/first.xml deleted file mode 100644 index e547522f1..000000000 --- a/bench_horn_mcmc/samples_shrink_big_numbers_2048/first.xml +++ /dev/null @@ -1,12341 +0,0 @@ - - - - - 1 - itp - - - - x - x1 - - - - x - - - - - - x - 1 - - - - - x - 2 - - - - - x - 3 - - - - - x - 4 - - - - - x - 5 - - - - - x - 6 - - - - - x - 7 - - - - - x - 8 - - - - - x - 9 - - - - - x - 10 - - - - - x - 11 - - - - - x - 12 - - - - - x - 13 - - - - - x - 14 - - - - - x - 15 - - - - - x - 16 - - - - - x - 17 - - - - - x - 18 - - - - - x - 19 - - - - - x - 20 - - - - - x - 21 - - - - - x - 22 - - - - - x - 23 - - - - - x - 24 - - - - - x - 25 - - - - - x - 26 - - - - - x - 27 - - - - - x - 28 - - - - - x - 29 - - - - - x - 30 - - - - - x - 31 - - - - - x - 32 - - - - - x - 33 - - - - - x - 34 - - - - - x - 35 - - - - - x - 36 - - - - - x - 37 - - - - - x - 38 - - - - - x - 39 - - - - - x - 40 - - - - - x - 41 - - - - - x - 42 - - - - - x - 43 - - - - - x - 44 - - - - - x - 45 - - - - - x - 46 - - - - - x - 47 - - - - - x - 48 - - - - - x - 49 - - - - - x - 50 - - - - - x - 51 - - - - - x - 52 - - - - - x - 53 - - - - - x - 54 - - - - - x - 55 - - - - - x - 56 - - - - - x - 57 - - - - - x - 58 - - - - - x - 59 - - - - - x - 60 - - - - - x - 61 - - - - - x - 62 - - - - - x - 63 - - - - - x - 64 - - - - - x - 65 - - - - - x - 66 - - - - - x - 67 - - - - - x - 68 - - - - - x - 69 - - - - - x - 70 - - - - - x - 71 - - - - - x - 72 - - - - - x - 73 - - - - - x - 74 - - - - - x - 75 - - - - - x - 76 - - - - - x - 77 - - - - - x - 78 - - - - - x - 79 - - - - - x - 80 - - - - - x - 81 - - - - - x - 82 - - - - - x - 83 - - - - - x - 84 - - - - - x - 85 - - - - - x - 86 - - - - - x - 87 - - - - - x - 88 - - - - - x - 89 - - - - - x - 90 - - - - - x - 91 - - - - - x - 92 - - - - - x - 93 - - - - - x - 94 - - - - - x - 95 - - - - - x - 96 - - - - - x - 97 - - - - - x - 98 - - - - - x - 99 - - - - - x - 100 - - - - - x - 101 - - - - - x - 102 - - - - - x - 103 - - - - - x - 104 - - - - - x - 105 - - - - - x - 106 - - - - - x - 107 - - - - - x - 108 - - - - - x - 109 - - - - - x - 110 - - - - - x - 111 - - - - - x - 112 - - - - - x - 113 - - - - - x - 114 - - - - - x - 115 - - - - - x - 116 - - - - - x - 117 - - - - - x - 118 - - - - - x - 119 - - - - - x - 120 - - - - - x - 121 - - - - - x - 122 - - - - - x - 123 - - - - - x - 124 - - - - - x - 125 - - - - - x - 126 - - - - - x - 127 - - - - - x - 128 - - - - - x - 129 - - - - - x - 130 - - - - - x - 131 - - - - - x - 132 - - - - - x - 133 - - - - - x - 134 - - - - - x - 135 - - - - - x - 136 - - - - - x - 137 - - - - - x - 138 - - - - - x - 139 - - - - - x - 140 - - - - - x - 141 - - - - - x - 142 - - - - - x - 143 - - - - - x - 144 - - - - - x - 145 - - - - - x - 146 - - - - - x - 147 - - - - - x - 148 - - - - - x - 149 - - - - - x - 150 - - - - - x - 151 - - - - - x - 152 - - - - - x - 153 - - - - - x - 154 - - - - - x - 155 - - - - - x - 156 - - - - - x - 157 - - - - - x - 158 - - - - - x - 159 - - - - - x - 160 - - - - - x - 161 - - - - - x - 162 - - - - - x - 163 - - - - - x - 164 - - - - - x - 165 - - - - - x - 166 - - - - - x - 167 - - - - - x - 168 - - - - - x - 169 - - - - - x - 170 - - - - - x - 171 - - - - - x - 172 - - - - - x - 173 - - - - - x - 174 - - - - - x - 175 - - - - - x - 176 - - - - - x - 177 - - - - - x - 178 - - - - - x - 179 - - - - - x - 180 - - - - - x - 181 - - - - - x - 182 - - - - - x - 183 - - - - - x - 184 - - - - - x - 185 - - - - - x - 186 - - - - - x - 187 - - - - - x - 188 - - - - - x - 189 - - - - - x - 190 - - - - - x - 191 - - - - - x - 192 - - - - - x - 193 - - - - - x - 194 - - - - - x - 195 - - - - - x - 196 - - - - - x - 197 - - - - - x - 198 - - - - - x - 199 - - - - - x - 200 - - - - - x - 201 - - - - - x - 202 - - - - - x - 203 - - - - - x - 204 - - - - - x - 205 - - - - - x - 206 - - - - - x - 207 - - - - - x - 208 - - - - - x - 209 - - - - - x - 210 - - - - - x - 211 - - - - - x - 212 - - - - - x - 213 - - - - - x - 214 - - - - - x - 215 - - - - - x - 216 - - - - - x - 217 - - - - - x - 218 - - - - - x - 219 - - - - - x - 220 - - - - - x - 221 - - - - - x - 222 - - - - - x - 223 - - - - - x - 224 - - - - - x - 225 - - - - - x - 226 - - - - - x - 227 - - - - - x - 228 - - - - - x - 229 - - - - - x - 230 - - - - - x - 231 - - - - - x - 232 - - - - - x - 233 - - - - - x - 234 - - - - - x - 235 - - - - - x - 236 - - - - - x - 237 - - - - - x - 238 - - - - - x - 239 - - - - - x - 240 - - - - - x - 241 - - - - - x - 242 - - - - - x - 243 - - - - - x - 244 - - - - - x - 245 - - - - - x - 246 - - - - - x - 247 - - - - - x - 248 - - - - - x - 249 - - - - - x - 250 - - - - - x - 251 - - - - - x - 252 - - - - - x - 253 - - - - - x - 254 - - - - - x - 255 - - - - - x - 256 - - - - - x - 257 - - - - - x - 258 - - - - - x - 259 - - - - - x - 260 - - - - - x - 261 - - - - - x - 262 - - - - - x - 263 - - - - - x - 264 - - - - - x - 265 - - - - - x - 266 - - - - - x - 267 - - - - - x - 268 - - - - - x - 269 - - - - - x - 270 - - - - - x - 271 - - - - - x - 272 - - - - - x - 273 - - - - - x - 274 - - - - - x - 275 - - - - - x - 276 - - - - - x - 277 - - - - - x - 278 - - - - - x - 279 - - - - - x - 280 - - - - - x - 281 - - - - - x - 282 - - - - - x - 283 - - - - - x - 284 - - - - - x - 285 - - - - - x - 286 - - - - - x - 287 - - - - - x - 288 - - - - - x - 289 - - - - - x - 290 - - - - - x - 291 - - - - - x - 292 - - - - - x - 293 - - - - - x - 294 - - - - - x - 295 - - - - - x - 296 - - - - - x - 297 - - - - - x - 298 - - - - - x - 299 - - - - - x - 300 - - - - - x - 301 - - - - - x - 302 - - - - - x - 303 - - - - - x - 304 - - - - - x - 305 - - - - - x - 306 - - - - - x - 307 - - - - - x - 308 - - - - - x - 309 - - - - - x - 310 - - - - - x - 311 - - - - - x - 312 - - - - - x - 313 - - - - - x - 314 - - - - - x - 315 - - - - - x - 316 - - - - - x - 317 - - - - - x - 318 - - - - - x - 319 - - - - - x - 320 - - - - - x - 321 - - - - - x - 322 - - - - - x - 323 - - - - - x - 324 - - - - - x - 325 - - - - - x - 326 - - - - - x - 327 - - - - - x - 328 - - - - - x - 329 - - - - - x - 330 - - - - - x - 331 - - - - - x - 332 - - - - - x - 333 - - - - - x - 334 - - - - - x - 335 - - - - - x - 336 - - - - - x - 337 - - - - - x - 338 - - - - - x - 339 - - - - - x - 340 - - - - - x - 341 - - - - - x - 342 - - - - - x - 343 - - - - - x - 344 - - - - - x - 345 - - - - - x - 346 - - - - - x - 347 - - - - - x - 348 - - - - - x - 349 - - - - - x - 350 - - - - - x - 351 - - - - - x - 352 - - - - - x - 353 - - - - - x - 354 - - - - - x - 355 - - - - - x - 356 - - - - - x - 357 - - - - - x - 358 - - - - - x - 359 - - - - - x - 360 - - - - - x - 361 - - - - - x - 362 - - - - - x - 363 - - - - - x - 364 - - - - - x - 365 - - - - - x - 366 - - - - - x - 367 - - - - - x - 368 - - - - - x - 369 - - - - - x - 370 - - - - - x - 371 - - - - - x - 372 - - - - - x - 373 - - - - - x - 374 - - - - - x - 375 - - - - - x - 376 - - - - - x - 377 - - - - - x - 378 - - - - - x - 379 - - - - - x - 380 - - - - - x - 381 - - - - - x - 382 - - - - - x - 383 - - - - - x - 384 - - - - - x - 385 - - - - - x - 386 - - - - - x - 387 - - - - - x - 388 - - - - - x - 389 - - - - - x - 390 - - - - - x - 391 - - - - - x - 392 - - - - - x - 393 - - - - - x - 394 - - - - - x - 395 - - - - - x - 396 - - - - - x - 397 - - - - - x - 398 - - - - - x - 399 - - - - - x - 400 - - - - - x - 401 - - - - - x - 402 - - - - - x - 403 - - - - - x - 404 - - - - - x - 405 - - - - - x - 406 - - - - - x - 407 - - - - - x - 408 - - - - - x - 409 - - - - - x - 410 - - - - - x - 411 - - - - - x - 412 - - - - - x - 413 - - - - - x - 414 - - - - - x - 415 - - - - - x - 416 - - - - - x - 417 - - - - - x - 418 - - - - - x - 419 - - - - - x - 420 - - - - - x - 421 - - - - - x - 422 - - - - - x - 423 - - - - - x - 424 - - - - - x - 425 - - - - - x - 426 - - - - - x - 427 - - - - - x - 428 - - - - - x - 429 - - - - - x - 430 - - - - - x - 431 - - - - - x - 432 - - - - - x - 433 - - - - - x - 434 - - - - - x - 435 - - - - - x - 436 - - - - - x - 437 - - - - - x - 438 - - - - - x - 439 - - - - - x - 440 - - - - - x - 441 - - - - - x - 442 - - - - - x - 443 - - - - - x - 444 - - - - - x - 445 - - - - - x - 446 - - - - - x - 447 - - - - - x - 448 - - - - - x - 449 - - - - - x - 450 - - - - - x - 451 - - - - - x - 452 - - - - - x - 453 - - - - - x - 454 - - - - - x - 455 - - - - - x - 456 - - - - - x - 457 - - - - - x - 458 - - - - - x - 459 - - - - - x - 460 - - - - - x - 461 - - - - - x - 462 - - - - - x - 463 - - - - - x - 464 - - - - - x - 465 - - - - - x - 466 - - - - - x - 467 - - - - - x - 468 - - - - - x - 469 - - - - - x - 470 - - - - - x - 471 - - - - - x - 472 - - - - - x - 473 - - - - - x - 474 - - - - - x - 475 - - - - - x - 476 - - - - - x - 477 - - - - - x - 478 - - - - - x - 479 - - - - - x - 480 - - - - - x - 481 - - - - - x - 482 - - - - - x - 483 - - - - - x - 484 - - - - - x - 485 - - - - - x - 486 - - - - - x - 487 - - - - - x - 488 - - - - - x - 489 - - - - - x - 490 - - - - - x - 491 - - - - - x - 492 - - - - - x - 493 - - - - - x - 494 - - - - - x - 495 - - - - - x - 496 - - - - - x - 497 - - - - - x - 498 - - - - - x - 499 - - - - - x - 500 - - - - - x - 501 - - - - - x - 502 - - - - - x - 503 - - - - - x - 504 - - - - - x - 505 - - - - - x - 506 - - - - - x - 507 - - - - - x - 508 - - - - - x - 509 - - - - - x - 510 - - - - - x - 511 - - - - - x - 512 - - - - - x - 513 - - - - - x - 514 - - - - - x - 515 - - - - - x - 516 - - - - - x - 517 - - - - - x - 518 - - - - - x - 519 - - - - - x - 520 - - - - - x - 521 - - - - - x - 522 - - - - - x - 523 - - - - - x - 524 - - - - - x - 525 - - - - - x - 526 - - - - - x - 527 - - - - - x - 528 - - - - - x - 529 - - - - - x - 530 - - - - - x - 531 - - - - - x - 532 - - - - - x - 533 - - - - - x - 534 - - - - - x - 535 - - - - - x - 536 - - - - - x - 537 - - - - - x - 538 - - - - - x - 539 - - - - - x - 540 - - - - - x - 541 - - - - - x - 542 - - - - - x - 543 - - - - - x - 544 - - - - - x - 545 - - - - - x - 546 - - - - - x - 547 - - - - - x - 548 - - - - - x - 549 - - - - - x - 550 - - - - - x - 551 - - - - - x - 552 - - - - - x - 553 - - - - - x - 554 - - - - - x - 555 - - - - - x - 556 - - - - - x - 557 - - - - - x - 558 - - - - - x - 559 - - - - - x - 560 - - - - - x - 561 - - - - - x - 562 - - - - - x - 563 - - - - - x - 564 - - - - - x - 565 - - - - - x - 566 - - - - - x - 567 - - - - - x - 568 - - - - - x - 569 - - - - - x - 570 - - - - - x - 571 - - - - - x - 572 - - - - - x - 573 - - - - - x - 574 - - - - - x - 575 - - - - - x - 576 - - - - - x - 577 - - - - - x - 578 - - - - - x - 579 - - - - - x - 580 - - - - - x - 581 - - - - - x - 582 - - - - - x - 583 - - - - - x - 584 - - - - - x - 585 - - - - - x - 586 - - - - - x - 587 - - - - - x - 588 - - - - - x - 589 - - - - - x - 590 - - - - - x - 591 - - - - - x - 592 - - - - - x - 593 - - - - - x - 594 - - - - - x - 595 - - - - - x - 596 - - - - - x - 597 - - - - - x - 598 - - - - - x - 599 - - - - - x - 600 - - - - - x - 601 - - - - - x - 602 - - - - - x - 603 - - - - - x - 604 - - - - - x - 605 - - - - - x - 606 - - - - - x - 607 - - - - - x - 608 - - - - - x - 609 - - - - - x - 610 - - - - - x - 611 - - - - - x - 612 - - - - - x - 613 - - - - - x - 614 - - - - - x - 615 - - - - - x - 616 - - - - - x - 617 - - - - - x - 618 - - - - - x - 619 - - - - - x - 620 - - - - - x - 621 - - - - - x - 622 - - - - - x - 623 - - - - - x - 624 - - - - - x - 625 - - - - - x - 626 - - - - - x - 627 - - - - - x - 628 - - - - - x - 629 - - - - - x - 630 - - - - - x - 631 - - - - - x - 632 - - - - - x - 633 - - - - - x - 634 - - - - - x - 635 - - - - - x - 636 - - - - - x - 637 - - - - - x - 638 - - - - - x - 639 - - - - - x - 640 - - - - - x - 641 - - - - - x - 642 - - - - - x - 643 - - - - - x - 644 - - - - - x - 645 - - - - - x - 646 - - - - - x - 647 - - - - - x - 648 - - - - - x - 649 - - - - - x - 650 - - - - - x - 651 - - - - - x - 652 - - - - - x - 653 - - - - - x - 654 - - - - - x - 655 - - - - - x - 656 - - - - - x - 657 - - - - - x - 658 - - - - - x - 659 - - - - - x - 660 - - - - - x - 661 - - - - - x - 662 - - - - - x - 663 - - - - - x - 664 - - - - - x - 665 - - - - - x - 666 - - - - - x - 667 - - - - - x - 668 - - - - - x - 669 - - - - - x - 670 - - - - - x - 671 - - - - - x - 672 - - - - - x - 673 - - - - - x - 674 - - - - - x - 675 - - - - - x - 676 - - - - - x - 677 - - - - - x - 678 - - - - - x - 679 - - - - - x - 680 - - - - - x - 681 - - - - - x - 682 - - - - - x - 683 - - - - - x - 684 - - - - - x - 685 - - - - - x - 686 - - - - - x - 687 - - - - - x - 688 - - - - - x - 689 - - - - - x - 690 - - - - - x - 691 - - - - - x - 692 - - - - - x - 693 - - - - - x - 694 - - - - - x - 695 - - - - - x - 696 - - - - - x - 697 - - - - - x - 698 - - - - - x - 699 - - - - - x - 700 - - - - - x - 701 - - - - - x - 702 - - - - - x - 703 - - - - - x - 704 - - - - - x - 705 - - - - - x - 706 - - - - - x - 707 - - - - - x - 708 - - - - - x - 709 - - - - - x - 710 - - - - - x - 711 - - - - - x - 712 - - - - - x - 713 - - - - - x - 714 - - - - - x - 715 - - - - - x - 716 - - - - - x - 717 - - - - - x - 718 - - - - - x - 719 - - - - - x - 720 - - - - - x - 721 - - - - - x - 722 - - - - - x - 723 - - - - - x - 724 - - - - - x - 725 - - - - - x - 726 - - - - - x - 727 - - - - - x - 728 - - - - - x - 729 - - - - - x - 730 - - - - - x - 731 - - - - - x - 732 - - - - - x - 733 - - - - - x - 734 - - - - - x - 735 - - - - - x - 736 - - - - - x - 737 - - - - - x - 738 - - - - - x - 739 - - - - - x - 740 - - - - - x - 741 - - - - - x - 742 - - - - - x - 743 - - - - - x - 744 - - - - - x - 745 - - - - - x - 746 - - - - - x - 747 - - - - - x - 748 - - - - - x - 749 - - - - - x - 750 - - - - - x - 751 - - - - - x - 752 - - - - - x - 753 - - - - - x - 754 - - - - - x - 755 - - - - - x - 756 - - - - - x - 757 - - - - - x - 758 - - - - - x - 759 - - - - - x - 760 - - - - - x - 761 - - - - - x - 762 - - - - - x - 763 - - - - - x - 764 - - - - - x - 765 - - - - - x - 766 - - - - - x - 767 - - - - - x - 768 - - - - - x - 769 - - - - - x - 770 - - - - - x - 771 - - - - - x - 772 - - - - - x - 773 - - - - - x - 774 - - - - - x - 775 - - - - - x - 776 - - - - - x - 777 - - - - - x - 778 - - - - - x - 779 - - - - - x - 780 - - - - - x - 781 - - - - - x - 782 - - - - - x - 783 - - - - - x - 784 - - - - - x - 785 - - - - - x - 786 - - - - - x - 787 - - - - - x - 788 - - - - - x - 789 - - - - - x - 790 - - - - - x - 791 - - - - - x - 792 - - - - - x - 793 - - - - - x - 794 - - - - - x - 795 - - - - - x - 796 - - - - - x - 797 - - - - - x - 798 - - - - - x - 799 - - - - - x - 800 - - - - - x - 801 - - - - - x - 802 - - - - - x - 803 - - - - - x - 804 - - - - - x - 805 - - - - - x - 806 - - - - - x - 807 - - - - - x - 808 - - - - - x - 809 - - - - - x - 810 - - - - - x - 811 - - - - - x - 812 - - - - - x - 813 - - - - - x - 814 - - - - - x - 815 - - - - - x - 816 - - - - - x - 817 - - - - - x - 818 - - - - - x - 819 - - - - - x - 820 - - - - - x - 821 - - - - - x - 822 - - - - - x - 823 - - - - - x - 824 - - - - - x - 825 - - - - - x - 826 - - - - - x - 827 - - - - - x - 828 - - - - - x - 829 - - - - - x - 830 - - - - - x - 831 - - - - - x - 832 - - - - - x - 833 - - - - - x - 834 - - - - - x - 835 - - - - - x - 836 - - - - - x - 837 - - - - - x - 838 - - - - - x - 839 - - - - - x - 840 - - - - - x - 841 - - - - - x - 842 - - - - - x - 843 - - - - - x - 844 - - - - - x - 845 - - - - - x - 846 - - - - - x - 847 - - - - - x - 848 - - - - - x - 849 - - - - - x - 850 - - - - - x - 851 - - - - - x - 852 - - - - - x - 853 - - - - - x - 854 - - - - - x - 855 - - - - - x - 856 - - - - - x - 857 - - - - - x - 858 - - - - - x - 859 - - - - - x - 860 - - - - - x - 861 - - - - - x - 862 - - - - - x - 863 - - - - - x - 864 - - - - - x - 865 - - - - - x - 866 - - - - - x - 867 - - - - - x - 868 - - - - - x - 869 - - - - - x - 870 - - - - - x - 871 - - - - - x - 872 - - - - - x - 873 - - - - - x - 874 - - - - - x - 875 - - - - - x - 876 - - - - - x - 877 - - - - - x - 878 - - - - - x - 879 - - - - - x - 880 - - - - - x - 881 - - - - - x - 882 - - - - - x - 883 - - - - - x - 884 - - - - - x - 885 - - - - - x - 886 - - - - - x - 887 - - - - - x - 888 - - - - - x - 889 - - - - - x - 890 - - - - - x - 891 - - - - - x - 892 - - - - - x - 893 - - - - - x - 894 - - - - - x - 895 - - - - - x - 896 - - - - - x - 897 - - - - - x - 898 - - - - - x - 899 - - - - - x - 900 - - - - - x - 901 - - - - - x - 902 - - - - - x - 903 - - - - - x - 904 - - - - - x - 905 - - - - - x - 906 - - - - - x - 907 - - - - - x - 908 - - - - - x - 909 - - - - - x - 910 - - - - - x - 911 - - - - - x - 912 - - - - - x - 913 - - - - - x - 914 - - - - - x - 915 - - - - - x - 916 - - - - - x - 917 - - - - - x - 918 - - - - - x - 919 - - - - - x - 920 - - - - - x - 921 - - - - - x - 922 - - - - - x - 923 - - - - - x - 924 - - - - - x - 925 - - - - - x - 926 - - - - - x - 927 - - - - - x - 928 - - - - - x - 929 - - - - - x - 930 - - - - - x - 931 - - - - - x - 932 - - - - - x - 933 - - - - - x - 934 - - - - - x - 935 - - - - - x - 936 - - - - - x - 937 - - - - - x - 938 - - - - - x - 939 - - - - - x - 940 - - - - - x - 941 - - - - - x - 942 - - - - - x - 943 - - - - - x - 944 - - - - - x - 945 - - - - - x - 946 - - - - - x - 947 - - - - - x - 948 - - - - - x - 949 - - - - - x - 950 - - - - - x - 951 - - - - - x - 952 - - - - - x - 953 - - - - - x - 954 - - - - - x - 955 - - - - - x - 956 - - - - - x - 957 - - - - - x - 958 - - - - - x - 959 - - - - - x - 960 - - - - - x - 961 - - - - - x - 962 - - - - - x - 963 - - - - - x - 964 - - - - - x - 965 - - - - - x - 966 - - - - - x - 967 - - - - - x - 968 - - - - - x - 969 - - - - - x - 970 - - - - - x - 971 - - - - - x - 972 - - - - - x - 973 - - - - - x - 974 - - - - - x - 975 - - - - - x - 976 - - - - - x - 977 - - - - - x - 978 - - - - - x - 979 - - - - - x - 980 - - - - - x - 981 - - - - - x - 982 - - - - - x - 983 - - - - - x - 984 - - - - - x - 985 - - - - - x - 986 - - - - - x - 987 - - - - - x - 988 - - - - - x - 989 - - - - - x - 990 - - - - - x - 991 - - - - - x - 992 - - - - - x - 993 - - - - - x - 994 - - - - - x - 995 - - - - - x - 996 - - - - - x - 997 - - - - - x - 998 - - - - - x - 999 - - - - - x - 1000 - - - - - x - 1001 - - - - - x - 1002 - - - - - x - 1003 - - - - - x - 1004 - - - - - x - 1005 - - - - - x - 1006 - - - - - x - 1007 - - - - - x - 1008 - - - - - x - 1009 - - - - - x - 1010 - - - - - x - 1011 - - - - - x - 1012 - - - - - x - 1013 - - - - - x - 1014 - - - - - x - 1015 - - - - - x - 1016 - - - - - x - 1017 - - - - - x - 1018 - - - - - x - 1019 - - - - - x - 1020 - - - - - x - 1021 - - - - - x - 1022 - - - - - x - 1023 - - - - - x - 1024 - - - - - x - 1025 - - - - - x - 1026 - - - - - x - 1027 - - - - - x - 1028 - - - - - x - 1029 - - - - - x - 1030 - - - - - x - 1031 - - - - - x - 1032 - - - - - x - 1033 - - - - - x - 1034 - - - - - x - 1035 - - - - - x - 1036 - - - - - x - 1037 - - - - - x - 1038 - - - - - x - 1039 - - - - - x - 1040 - - - - - x - 1041 - - - - - x - 1042 - - - - - x - 1043 - - - - - x - 1044 - - - - - x - 1045 - - - - - x - 1046 - - - - - x - 1047 - - - - - x - 1048 - - - - - x - 1049 - - - - - x - 1050 - - - - - x - 1051 - - - - - x - 1052 - - - - - x - 1053 - - - - - x - 1054 - - - - - x - 1055 - - - - - x - 1056 - - - - - x - 1057 - - - - - x - 1058 - - - - - x - 1059 - - - - - x - 1060 - - - - - x - 1061 - - - - - x - 1062 - - - - - x - 1063 - - - - - x - 1064 - - - - - x - 1065 - - - - - x - 1066 - - - - - x - 1067 - - - - - x - 1068 - - - - - x - 1069 - - - - - x - 1070 - - - - - x - 1071 - - - - - x - 1072 - - - - - x - 1073 - - - - - x - 1074 - - - - - x - 1075 - - - - - x - 1076 - - - - - x - 1077 - - - - - x - 1078 - - - - - x - 1079 - - - - - x - 1080 - - - - - x - 1081 - - - - - x - 1082 - - - - - x - 1083 - - - - - x - 1084 - - - - - x - 1085 - - - - - x - 1086 - - - - - x - 1087 - - - - - x - 1088 - - - - - x - 1089 - - - - - x - 1090 - - - - - x - 1091 - - - - - x - 1092 - - - - - x - 1093 - - - - - x - 1094 - - - - - x - 1095 - - - - - x - 1096 - - - - - x - 1097 - - - - - x - 1098 - - - - - x - 1099 - - - - - x - 1100 - - - - - x - 1101 - - - - - x - 1102 - - - - - x - 1103 - - - - - x - 1104 - - - - - x - 1105 - - - - - x - 1106 - - - - - x - 1107 - - - - - x - 1108 - - - - - x - 1109 - - - - - x - 1110 - - - - - x - 1111 - - - - - x - 1112 - - - - - x - 1113 - - - - - x - 1114 - - - - - x - 1115 - - - - - x - 1116 - - - - - x - 1117 - - - - - x - 1118 - - - - - x - 1119 - - - - - x - 1120 - - - - - x - 1121 - - - - - x - 1122 - - - - - x - 1123 - - - - - x - 1124 - - - - - x - 1125 - - - - - x - 1126 - - - - - x - 1127 - - - - - x - 1128 - - - - - x - 1129 - - - - - x - 1130 - - - - - x - 1131 - - - - - x - 1132 - - - - - x - 1133 - - - - - x - 1134 - - - - - x - 1135 - - - - - x - 1136 - - - - - x - 1137 - - - - - x - 1138 - - - - - x - 1139 - - - - - x - 1140 - - - - - x - 1141 - - - - - x - 1142 - - - - - x - 1143 - - - - - x - 1144 - - - - - x - 1145 - - - - - x - 1146 - - - - - x - 1147 - - - - - x - 1148 - - - - - x - 1149 - - - - - x - 1150 - - - - - x - 1151 - - - - - x - 1152 - - - - - x - 1153 - - - - - x - 1154 - - - - - x - 1155 - - - - - x - 1156 - - - - - x - 1157 - - - - - x - 1158 - - - - - x - 1159 - - - - - x - 1160 - - - - - x - 1161 - - - - - x - 1162 - - - - - x - 1163 - - - - - x - 1164 - - - - - x - 1165 - - - - - x - 1166 - - - - - x - 1167 - - - - - x - 1168 - - - - - x - 1169 - - - - - x - 1170 - - - - - x - 1171 - - - - - x - 1172 - - - - - x - 1173 - - - - - x - 1174 - - - - - x - 1175 - - - - - x - 1176 - - - - - x - 1177 - - - - - x - 1178 - - - - - x - 1179 - - - - - x - 1180 - - - - - x - 1181 - - - - - x - 1182 - - - - - x - 1183 - - - - - x - 1184 - - - - - x - 1185 - - - - - x - 1186 - - - - - x - 1187 - - - - - x - 1188 - - - - - x - 1189 - - - - - x - 1190 - - - - - x - 1191 - - - - - x - 1192 - - - - - x - 1193 - - - - - x - 1194 - - - - - x - 1195 - - - - - x - 1196 - - - - - x - 1197 - - - - - x - 1198 - - - - - x - 1199 - - - - - x - 1200 - - - - - x - 1201 - - - - - x - 1202 - - - - - x - 1203 - - - - - x - 1204 - - - - - x - 1205 - - - - - x - 1206 - - - - - x - 1207 - - - - - x - 1208 - - - - - x - 1209 - - - - - x - 1210 - - - - - x - 1211 - - - - - x - 1212 - - - - - x - 1213 - - - - - x - 1214 - - - - - x - 1215 - - - - - x - 1216 - - - - - x - 1217 - - - - - x - 1218 - - - - - x - 1219 - - - - - x - 1220 - - - - - x - 1221 - - - - - x - 1222 - - - - - x - 1223 - - - - - x - 1224 - - - - - x - 1225 - - - - - x - 1226 - - - - - x - 1227 - - - - - x - 1228 - - - - - x - 1229 - - - - - x - 1230 - - - - - x - 1231 - - - - - x - 1232 - - - - - x - 1233 - - - - - x - 1234 - - - - - x - 1235 - - - - - x - 1236 - - - - - x - 1237 - - - - - x - 1238 - - - - - x - 1239 - - - - - x - 1240 - - - - - x - 1241 - - - - - x - 1242 - - - - - x - 1243 - - - - - x - 1244 - - - - - x - 1245 - - - - - x - 1246 - - - - - x - 1247 - - - - - x - 1248 - - - - - x - 1249 - - - - - x - 1250 - - - - - x - 1251 - - - - - x - 1252 - - - - - x - 1253 - - - - - x - 1254 - - - - - x - 1255 - - - - - x - 1256 - - - - - x - 1257 - - - - - x - 1258 - - - - - x - 1259 - - - - - x - 1260 - - - - - x - 1261 - - - - - x - 1262 - - - - - x - 1263 - - - - - x - 1264 - - - - - x - 1265 - - - - - x - 1266 - - - - - x - 1267 - - - - - x - 1268 - - - - - x - 1269 - - - - - x - 1270 - - - - - x - 1271 - - - - - x - 1272 - - - - - x - 1273 - - - - - x - 1274 - - - - - x - 1275 - - - - - x - 1276 - - - - - x - 1277 - - - - - x - 1278 - - - - - x - 1279 - - - - - x - 1280 - - - - - x - 1281 - - - - - x - 1282 - - - - - x - 1283 - - - - - x - 1284 - - - - - x - 1285 - - - - - x - 1286 - - - - - x - 1287 - - - - - x - 1288 - - - - - x - 1289 - - - - - x - 1290 - - - - - x - 1291 - - - - - x - 1292 - - - - - x - 1293 - - - - - x - 1294 - - - - - x - 1295 - - - - - x - 1296 - - - - - x - 1297 - - - - - x - 1298 - - - - - x - 1299 - - - - - x - 1300 - - - - - x - 1301 - - - - - x - 1302 - - - - - x - 1303 - - - - - x - 1304 - - - - - x - 1305 - - - - - x - 1306 - - - - - x - 1307 - - - - - x - 1308 - - - - - x - 1309 - - - - - x - 1310 - - - - - x - 1311 - - - - - x - 1312 - - - - - x - 1313 - - - - - x - 1314 - - - - - x - 1315 - - - - - x - 1316 - - - - - x - 1317 - - - - - x - 1318 - - - - - x - 1319 - - - - - x - 1320 - - - - - x - 1321 - - - - - x - 1322 - - - - - x - 1323 - - - - - x - 1324 - - - - - x - 1325 - - - - - x - 1326 - - - - - x - 1327 - - - - - x - 1328 - - - - - x - 1329 - - - - - x - 1330 - - - - - x - 1331 - - - - - x - 1332 - - - - - x - 1333 - - - - - x - 1334 - - - - - x - 1335 - - - - - x - 1336 - - - - - x - 1337 - - - - - x - 1338 - - - - - x - 1339 - - - - - x - 1340 - - - - - x - 1341 - - - - - x - 1342 - - - - - x - 1343 - - - - - x - 1344 - - - - - x - 1345 - - - - - x - 1346 - - - - - x - 1347 - - - - - x - 1348 - - - - - x - 1349 - - - - - x - 1350 - - - - - x - 1351 - - - - - x - 1352 - - - - - x - 1353 - - - - - x - 1354 - - - - - x - 1355 - - - - - x - 1356 - - - - - x - 1357 - - - - - x - 1358 - - - - - x - 1359 - - - - - x - 1360 - - - - - x - 1361 - - - - - x - 1362 - - - - - x - 1363 - - - - - x - 1364 - - - - - x - 1365 - - - - - x - 1366 - - - - - x - 1367 - - - - - x - 1368 - - - - - x - 1369 - - - - - x - 1370 - - - - - x - 1371 - - - - - x - 1372 - - - - - x - 1373 - - - - - x - 1374 - - - - - x - 1375 - - - - - x - 1376 - - - - - x - 1377 - - - - - x - 1378 - - - - - x - 1379 - - - - - x - 1380 - - - - - x - 1381 - - - - - x - 1382 - - - - - x - 1383 - - - - - x - 1384 - - - - - x - 1385 - - - - - x - 1386 - - - - - x - 1387 - - - - - x - 1388 - - - - - x - 1389 - - - - - x - 1390 - - - - - x - 1391 - - - - - x - 1392 - - - - - x - 1393 - - - - - x - 1394 - - - - - x - 1395 - - - - - x - 1396 - - - - - x - 1397 - - - - - x - 1398 - - - - - x - 1399 - - - - - x - 1400 - - - - - x - 1401 - - - - - x - 1402 - - - - - x - 1403 - - - - - x - 1404 - - - - - x - 1405 - - - - - x - 1406 - - - - - x - 1407 - - - - - x - 1408 - - - - - x - 1409 - - - - - x - 1410 - - - - - x - 1411 - - - - - x - 1412 - - - - - x - 1413 - - - - - x - 1414 - - - - - x - 1415 - - - - - x - 1416 - - - - - x - 1417 - - - - - x - 1418 - - - - - x - 1419 - - - - - x - 1420 - - - - - x - 1421 - - - - - x - 1422 - - - - - x - 1423 - - - - - x - 1424 - - - - - x - 1425 - - - - - x - 1426 - - - - - x - 1427 - - - - - x - 1428 - - - - - x - 1429 - - - - - x - 1430 - - - - - x - 1431 - - - - - x - 1432 - - - - - x - 1433 - - - - - x - 1434 - - - - - x - 1435 - - - - - x - 1436 - - - - - x - 1437 - - - - - x - 1438 - - - - - x - 1439 - - - - - x - 1440 - - - - - x - 1441 - - - - - x - 1442 - - - - - x - 1443 - - - - - x - 1444 - - - - - x - 1445 - - - - - x - 1446 - - - - - x - 1447 - - - - - x - 1448 - - - - - x - 1449 - - - - - x - 1450 - - - - - x - 1451 - - - - - x - 1452 - - - - - x - 1453 - - - - - x - 1454 - - - - - x - 1455 - - - - - x - 1456 - - - - - x - 1457 - - - - - x - 1458 - - - - - x - 1459 - - - - - x - 1460 - - - - - x - 1461 - - - - - x - 1462 - - - - - x - 1463 - - - - - x - 1464 - - - - - x - 1465 - - - - - x - 1466 - - - - - x - 1467 - - - - - x - 1468 - - - - - x - 1469 - - - - - x - 1470 - - - - - x - 1471 - - - - - x - 1472 - - - - - x - 1473 - - - - - x - 1474 - - - - - x - 1475 - - - - - x - 1476 - - - - - x - 1477 - - - - - x - 1478 - - - - - x - 1479 - - - - - x - 1480 - - - - - x - 1481 - - - - - x - 1482 - - - - - x - 1483 - - - - - x - 1484 - - - - - x - 1485 - - - - - x - 1486 - - - - - x - 1487 - - - - - x - 1488 - - - - - x - 1489 - - - - - x - 1490 - - - - - x - 1491 - - - - - x - 1492 - - - - - x - 1493 - - - - - x - 1494 - - - - - x - 1495 - - - - - x - 1496 - - - - - x - 1497 - - - - - x - 1498 - - - - - x - 1499 - - - - - x - 1500 - - - - - x - 1501 - - - - - x - 1502 - - - - - x - 1503 - - - - - x - 1504 - - - - - x - 1505 - - - - - x - 1506 - - - - - x - 1507 - - - - - x - 1508 - - - - - x - 1509 - - - - - x - 1510 - - - - - x - 1511 - - - - - x - 1512 - - - - - x - 1513 - - - - - x - 1514 - - - - - x - 1515 - - - - - x - 1516 - - - - - x - 1517 - - - - - x - 1518 - - - - - x - 1519 - - - - - x - 1520 - - - - - x - 1521 - - - - - x - 1522 - - - - - x - 1523 - - - - - x - 1524 - - - - - x - 1525 - - - - - x - 1526 - - - - - x - 1527 - - - - - x - 1528 - - - - - x - 1529 - - - - - x - 1530 - - - - - x - 1531 - - - - - x - 1532 - - - - - x - 1533 - - - - - x - 1534 - - - - - x - 1535 - - - - - x - 1536 - - - - - x - 1537 - - - - - x - 1538 - - - - - x - 1539 - - - - - x - 1540 - - - - - x - 1541 - - - - - x - 1542 - - - - - x - 1543 - - - - - x - 1544 - - - - - x - 1545 - - - - - x - 1546 - - - - - x - 1547 - - - - - x - 1548 - - - - - x - 1549 - - - - - x - 1550 - - - - - x - 1551 - - - - - x - 1552 - - - - - x - 1553 - - - - - x - 1554 - - - - - x - 1555 - - - - - x - 1556 - - - - - x - 1557 - - - - - x - 1558 - - - - - x - 1559 - - - - - x - 1560 - - - - - x - 1561 - - - - - x - 1562 - - - - - x - 1563 - - - - - x - 1564 - - - - - x - 1565 - - - - - x - 1566 - - - - - x - 1567 - - - - - x - 1568 - - - - - x - 1569 - - - - - x - 1570 - - - - - x - 1571 - - - - - x - 1572 - - - - - x - 1573 - - - - - x - 1574 - - - - - x - 1575 - - - - - x - 1576 - - - - - x - 1577 - - - - - x - 1578 - - - - - x - 1579 - - - - - x - 1580 - - - - - x - 1581 - - - - - x - 1582 - - - - - x - 1583 - - - - - x - 1584 - - - - - x - 1585 - - - - - x - 1586 - - - - - x - 1587 - - - - - x - 1588 - - - - - x - 1589 - - - - - x - 1590 - - - - - x - 1591 - - - - - x - 1592 - - - - - x - 1593 - - - - - x - 1594 - - - - - x - 1595 - - - - - x - 1596 - - - - - x - 1597 - - - - - x - 1598 - - - - - x - 1599 - - - - - x - 1600 - - - - - x - 1601 - - - - - x - 1602 - - - - - x - 1603 - - - - - x - 1604 - - - - - x - 1605 - - - - - x - 1606 - - - - - x - 1607 - - - - - x - 1608 - - - - - x - 1609 - - - - - x - 1610 - - - - - x - 1611 - - - - - x - 1612 - - - - - x - 1613 - - - - - x - 1614 - - - - - x - 1615 - - - - - x - 1616 - - - - - x - 1617 - - - - - x - 1618 - - - - - x - 1619 - - - - - x - 1620 - - - - - x - 1621 - - - - - x - 1622 - - - - - x - 1623 - - - - - x - 1624 - - - - - x - 1625 - - - - - x - 1626 - - - - - x - 1627 - - - - - x - 1628 - - - - - x - 1629 - - - - - x - 1630 - - - - - x - 1631 - - - - - x - 1632 - - - - - x - 1633 - - - - - x - 1634 - - - - - x - 1635 - - - - - x - 1636 - - - - - x - 1637 - - - - - x - 1638 - - - - - x - 1639 - - - - - x - 1640 - - - - - x - 1641 - - - - - x - 1642 - - - - - x - 1643 - - - - - x - 1644 - - - - - x - 1645 - - - - - x - 1646 - - - - - x - 1647 - - - - - x - 1648 - - - - - x - 1649 - - - - - x - 1650 - - - - - x - 1651 - - - - - x - 1652 - - - - - x - 1653 - - - - - x - 1654 - - - - - x - 1655 - - - - - x - 1656 - - - - - x - 1657 - - - - - x - 1658 - - - - - x - 1659 - - - - - x - 1660 - - - - - x - 1661 - - - - - x - 1662 - - - - - x - 1663 - - - - - x - 1664 - - - - - x - 1665 - - - - - x - 1666 - - - - - x - 1667 - - - - - x - 1668 - - - - - x - 1669 - - - - - x - 1670 - - - - - x - 1671 - - - - - x - 1672 - - - - - x - 1673 - - - - - x - 1674 - - - - - x - 1675 - - - - - x - 1676 - - - - - x - 1677 - - - - - x - 1678 - - - - - x - 1679 - - - - - x - 1680 - - - - - x - 1681 - - - - - x - 1682 - - - - - x - 1683 - - - - - x - 1684 - - - - - x - 1685 - - - - - x - 1686 - - - - - x - 1687 - - - - - x - 1688 - - - - - x - 1689 - - - - - x - 1690 - - - - - x - 1691 - - - - - x - 1692 - - - - - x - 1693 - - - - - x - 1694 - - - - - x - 1695 - - - - - x - 1696 - - - - - x - 1697 - - - - - x - 1698 - - - - - x - 1699 - - - - - x - 1700 - - - - - x - 1701 - - - - - x - 1702 - - - - - x - 1703 - - - - - x - 1704 - - - - - x - 1705 - - - - - x - 1706 - - - - - x - 1707 - - - - - x - 1708 - - - - - x - 1709 - - - - - x - 1710 - - - - - x - 1711 - - - - - x - 1712 - - - - - x - 1713 - - - - - x - 1714 - - - - - x - 1715 - - - - - x - 1716 - - - - - x - 1717 - - - - - x - 1718 - - - - - x - 1719 - - - - - x - 1720 - - - - - x - 1721 - - - - - x - 1722 - - - - - x - 1723 - - - - - x - 1724 - - - - - x - 1725 - - - - - x - 1726 - - - - - x - 1727 - - - - - x - 1728 - - - - - x - 1729 - - - - - x - 1730 - - - - - x - 1731 - - - - - x - 1732 - - - - - x - 1733 - - - - - x - 1734 - - - - - x - 1735 - - - - - x - 1736 - - - - - x - 1737 - - - - - x - 1738 - - - - - x - 1739 - - - - - x - 1740 - - - - - x - 1741 - - - - - x - 1742 - - - - - x - 1743 - - - - - x - 1744 - - - - - x - 1745 - - - - - x - 1746 - - - - - x - 1747 - - - - - x - 1748 - - - - - x - 1749 - - - - - x - 1750 - - - - - x - 1751 - - - - - x - 1752 - - - - - x - 1753 - - - - - x - 1754 - - - - - x - 1755 - - - - - x - 1756 - - - - - x - 1757 - - - - - x - 1758 - - - - - x - 1759 - - - - - x - 1760 - - - - - x - 1761 - - - - - x - 1762 - - - - - x - 1763 - - - - - x - 1764 - - - - - x - 1765 - - - - - x - 1766 - - - - - x - 1767 - - - - - x - 1768 - - - - - x - 1769 - - - - - x - 1770 - - - - - x - 1771 - - - - - x - 1772 - - - - - x - 1773 - - - - - x - 1774 - - - - - x - 1775 - - - - - x - 1776 - - - - - x - 1777 - - - - - x - 1778 - - - - - x - 1779 - - - - - x - 1780 - - - - - x - 1781 - - - - - x - 1782 - - - - - x - 1783 - - - - - x - 1784 - - - - - x - 1785 - - - - - x - 1786 - - - - - x - 1787 - - - - - x - 1788 - - - - - x - 1789 - - - - - x - 1790 - - - - - x - 1791 - - - - - x - 1792 - - - - - x - 1793 - - - - - x - 1794 - - - - - x - 1795 - - - - - x - 1796 - - - - - x - 1797 - - - - - x - 1798 - - - - - x - 1799 - - - - - x - 1800 - - - - - x - 1801 - - - - - x - 1802 - - - - - x - 1803 - - - - - x - 1804 - - - - - x - 1805 - - - - - x - 1806 - - - - - x - 1807 - - - - - x - 1808 - - - - - x - 1809 - - - - - x - 1810 - - - - - x - 1811 - - - - - x - 1812 - - - - - x - 1813 - - - - - x - 1814 - - - - - x - 1815 - - - - - x - 1816 - - - - - x - 1817 - - - - - x - 1818 - - - - - x - 1819 - - - - - x - 1820 - - - - - x - 1821 - - - - - x - 1822 - - - - - x - 1823 - - - - - x - 1824 - - - - - x - 1825 - - - - - x - 1826 - - - - - x - 1827 - - - - - x - 1828 - - - - - x - 1829 - - - - - x - 1830 - - - - - x - 1831 - - - - - x - 1832 - - - - - x - 1833 - - - - - x - 1834 - - - - - x - 1835 - - - - - x - 1836 - - - - - x - 1837 - - - - - x - 1838 - - - - - x - 1839 - - - - - x - 1840 - - - - - x - 1841 - - - - - x - 1842 - - - - - x - 1843 - - - - - x - 1844 - - - - - x - 1845 - - - - - x - 1846 - - - - - x - 1847 - - - - - x - 1848 - - - - - x - 1849 - - - - - x - 1850 - - - - - x - 1851 - - - - - x - 1852 - - - - - x - 1853 - - - - - x - 1854 - - - - - x - 1855 - - - - - x - 1856 - - - - - x - 1857 - - - - - x - 1858 - - - - - x - 1859 - - - - - x - 1860 - - - - - x - 1861 - - - - - x - 1862 - - - - - x - 1863 - - - - - x - 1864 - - - - - x - 1865 - - - - - x - 1866 - - - - - x - 1867 - - - - - x - 1868 - - - - - x - 1869 - - - - - x - 1870 - - - - - x - 1871 - - - - - x - 1872 - - - - - x - 1873 - - - - - x - 1874 - - - - - x - 1875 - - - - - x - 1876 - - - - - x - 1877 - - - - - x - 1878 - - - - - x - 1879 - - - - - x - 1880 - - - - - x - 1881 - - - - - x - 1882 - - - - - x - 1883 - - - - - x - 1884 - - - - - x - 1885 - - - - - x - 1886 - - - - - x - 1887 - - - - - x - 1888 - - - - - x - 1889 - - - - - x - 1890 - - - - - x - 1891 - - - - - x - 1892 - - - - - x - 1893 - - - - - x - 1894 - - - - - x - 1895 - - - - - x - 1896 - - - - - x - 1897 - - - - - x - 1898 - - - - - x - 1899 - - - - - x - 1900 - - - - - x - 1901 - - - - - x - 1902 - - - - - x - 1903 - - - - - x - 1904 - - - - - x - 1905 - - - - - x - 1906 - - - - - x - 1907 - - - - - x - 1908 - - - - - x - 1909 - - - - - x - 1910 - - - - - x - 1911 - - - - - x - 1912 - - - - - x - 1913 - - - - - x - 1914 - - - - - x - 1915 - - - - - x - 1916 - - - - - x - 1917 - - - - - x - 1918 - - - - - x - 1919 - - - - - x - 1920 - - - - - x - 1921 - - - - - x - 1922 - - - - - x - 1923 - - - - - x - 1924 - - - - - x - 1925 - - - - - x - 1926 - - - - - x - 1927 - - - - - x - 1928 - - - - - x - 1929 - - - - - x - 1930 - - - - - x - 1931 - - - - - x - 1932 - - - - - x - 1933 - - - - - x - 1934 - - - - - x - 1935 - - - - - x - 1936 - - - - - x - 1937 - - - - - x - 1938 - - - - - x - 1939 - - - - - x - 1940 - - - - - x - 1941 - - - - - x - 1942 - - - - - x - 1943 - - - - - x - 1944 - - - - - x - 1945 - - - - - x - 1946 - - - - - x - 1947 - - - - - x - 1948 - - - - - x - 1949 - - - - - x - 1950 - - - - - x - 1951 - - - - - x - 1952 - - - - - x - 1953 - - - - - x - 1954 - - - - - x - 1955 - - - - - x - 1956 - - - - - x - 1957 - - - - - x - 1958 - - - - - x - 1959 - - - - - x - 1960 - - - - - x - 1961 - - - - - x - 1962 - - - - - x - 1963 - - - - - x - 1964 - - - - - x - 1965 - - - - - x - 1966 - - - - - x - 1967 - - - - - x - 1968 - - - - - x - 1969 - - - - - x - 1970 - - - - - x - 1971 - - - - - x - 1972 - - - - - x - 1973 - - - - - x - 1974 - - - - - x - 1975 - - - - - x - 1976 - - - - - x - 1977 - - - - - x - 1978 - - - - - x - 1979 - - - - - x - 1980 - - - - - x - 1981 - - - - - x - 1982 - - - - - x - 1983 - - - - - x - 1984 - - - - - x - 1985 - - - - - x - 1986 - - - - - x - 1987 - - - - - x - 1988 - - - - - x - 1989 - - - - - x - 1990 - - - - - x - 1991 - - - - - x - 1992 - - - - - x - 1993 - - - - - x - 1994 - - - - - x - 1995 - - - - - x - 1996 - - - - - x - 1997 - - - - - x - 1998 - - - - - x - 1999 - - - - - x - 2000 - - - - - x - 2001 - - - - - x - 2002 - - - - - x - 2003 - - - - - x - 2004 - - - - - x - 2005 - - - - - x - 2006 - - - - - x - 2007 - - - - - x - 2008 - - - - - x - 2009 - - - - - x - 2010 - - - - - x - 2011 - - - - - x - 2012 - - - - - x - 2013 - - - - - x - 2014 - - - - - x - 2015 - - - - - x - 2016 - - - - - x - 2017 - - - - - x - 2018 - - - - - x - 2019 - - - - - x - 2020 - - - - - x - 2021 - - - - - x - 2022 - - - - - x - 2023 - - - - - x - 2024 - - - - - x - 2025 - - - - - x - 2026 - - - - - x - 2027 - - - - - x - 2028 - - - - - x - 2029 - - - - - x - 2030 - - - - - x - 2031 - - - - - x - 2032 - - - - - x - 2033 - - - - - x - 2034 - - - - - x - 2035 - - - - - x - 2036 - - - - - x - 2037 - - - - - x - 2038 - - - - - x - 2039 - - - - - x - 2040 - - - - - x - 2041 - - - - - x - 2042 - - - - - x - 2043 - - - - - x - 2044 - - - - - x - 2045 - - - - - x - 2046 - - - - - x - 2047 - - - - - x - 2048 - - - - - - - - x - - - x1 - - - - - x1 - - x - 1 - - - - - - - - x - - - - x - 0 - - - - - diff --git a/bench_horn_mcmc/samples_shrink_big_numbers_4096/config b/bench_horn_mcmc/samples_shrink_big_numbers_4096/config deleted file mode 100644 index 892379dc4..000000000 --- a/bench_horn_mcmc/samples_shrink_big_numbers_4096/config +++ /dev/null @@ -1,12 +0,0 @@ -DISJUNCTS -10 -CONJUNCTS -10 -COEFFICIENT BAG -3 --1 0 1 -IMMEDIATE BAG -8193 --4096 -4095 -4094 -4093 -4092 -4091 -4090 -4089 -4088 -4087 -4086 -4085 -4084 -4083 -4082 -4081 -4080 -4079 -4078 -4077 -4076 -4075 -4074 -4073 -4072 -4071 -4070 -4069 -4068 -4067 -4066 -4065 -4064 -4063 -4062 -4061 -4060 -4059 -4058 -4057 -4056 -4055 -4054 -4053 -4052 -4051 -4050 -4049 -4048 -4047 -4046 -4045 -4044 -4043 -4042 -4041 -4040 -4039 -4038 -4037 -4036 -4035 -4034 -4033 -4032 -4031 -4030 -4029 -4028 -4027 -4026 -4025 -4024 -4023 -4022 -4021 -4020 -4019 -4018 -4017 -4016 -4015 -4014 -4013 -4012 -4011 -4010 -4009 -4008 -4007 -4006 -4005 -4004 -4003 -4002 -4001 -4000 -3999 -3998 -3997 -3996 -3995 -3994 -3993 -3992 -3991 -3990 -3989 -3988 -3987 -3986 -3985 -3984 -3983 -3982 -3981 -3980 -3979 -3978 -3977 -3976 -3975 -3974 -3973 -3972 -3971 -3970 -3969 -3968 -3967 -3966 -3965 -3964 -3963 -3962 -3961 -3960 -3959 -3958 -3957 -3956 -3955 -3954 -3953 -3952 -3951 -3950 -3949 -3948 -3947 -3946 -3945 -3944 -3943 -3942 -3941 -3940 -3939 -3938 -3937 -3936 -3935 -3934 -3933 -3932 -3931 -3930 -3929 -3928 -3927 -3926 -3925 -3924 -3923 -3922 -3921 -3920 -3919 -3918 -3917 -3916 -3915 -3914 -3913 -3912 -3911 -3910 -3909 -3908 -3907 -3906 -3905 -3904 -3903 -3902 -3901 -3900 -3899 -3898 -3897 -3896 -3895 -3894 -3893 -3892 -3891 -3890 -3889 -3888 -3887 -3886 -3885 -3884 -3883 -3882 -3881 -3880 -3879 -3878 -3877 -3876 -3875 -3874 -3873 -3872 -3871 -3870 -3869 -3868 -3867 -3866 -3865 -3864 -3863 -3862 -3861 -3860 -3859 -3858 -3857 -3856 -3855 -3854 -3853 -3852 -3851 -3850 -3849 -3848 -3847 -3846 -3845 -3844 -3843 -3842 -3841 -3840 -3839 -3838 -3837 -3836 -3835 -3834 -3833 -3832 -3831 -3830 -3829 -3828 -3827 -3826 -3825 -3824 -3823 -3822 -3821 -3820 -3819 -3818 -3817 -3816 -3815 -3814 -3813 -3812 -3811 -3810 -3809 -3808 -3807 -3806 -3805 -3804 -3803 -3802 -3801 -3800 -3799 -3798 -3797 -3796 -3795 -3794 -3793 -3792 -3791 -3790 -3789 -3788 -3787 -3786 -3785 -3784 -3783 -3782 -3781 -3780 -3779 -3778 -3777 -3776 -3775 -3774 -3773 -3772 -3771 -3770 -3769 -3768 -3767 -3766 -3765 -3764 -3763 -3762 -3761 -3760 -3759 -3758 -3757 -3756 -3755 -3754 -3753 -3752 -3751 -3750 -3749 -3748 -3747 -3746 -3745 -3744 -3743 -3742 -3741 -3740 -3739 -3738 -3737 -3736 -3735 -3734 -3733 -3732 -3731 -3730 -3729 -3728 -3727 -3726 -3725 -3724 -3723 -3722 -3721 -3720 -3719 -3718 -3717 -3716 -3715 -3714 -3713 -3712 -3711 -3710 -3709 -3708 -3707 -3706 -3705 -3704 -3703 -3702 -3701 -3700 -3699 -3698 -3697 -3696 -3695 -3694 -3693 -3692 -3691 -3690 -3689 -3688 -3687 -3686 -3685 -3684 -3683 -3682 -3681 -3680 -3679 -3678 -3677 -3676 -3675 -3674 -3673 -3672 -3671 -3670 -3669 -3668 -3667 -3666 -3665 -3664 -3663 -3662 -3661 -3660 -3659 -3658 -3657 -3656 -3655 -3654 -3653 -3652 -3651 -3650 -3649 -3648 -3647 -3646 -3645 -3644 -3643 -3642 -3641 -3640 -3639 -3638 -3637 -3636 -3635 -3634 -3633 -3632 -3631 -3630 -3629 -3628 -3627 -3626 -3625 -3624 -3623 -3622 -3621 -3620 -3619 -3618 -3617 -3616 -3615 -3614 -3613 -3612 -3611 -3610 -3609 -3608 -3607 -3606 -3605 -3604 -3603 -3602 -3601 -3600 -3599 -3598 -3597 -3596 -3595 -3594 -3593 -3592 -3591 -3590 -3589 -3588 -3587 -3586 -3585 -3584 -3583 -3582 -3581 -3580 -3579 -3578 -3577 -3576 -3575 -3574 -3573 -3572 -3571 -3570 -3569 -3568 -3567 -3566 -3565 -3564 -3563 -3562 -3561 -3560 -3559 -3558 -3557 -3556 -3555 -3554 -3553 -3552 -3551 -3550 -3549 -3548 -3547 -3546 -3545 -3544 -3543 -3542 -3541 -3540 -3539 -3538 -3537 -3536 -3535 -3534 -3533 -3532 -3531 -3530 -3529 -3528 -3527 -3526 -3525 -3524 -3523 -3522 -3521 -3520 -3519 -3518 -3517 -3516 -3515 -3514 -3513 -3512 -3511 -3510 -3509 -3508 -3507 -3506 -3505 -3504 -3503 -3502 -3501 -3500 -3499 -3498 -3497 -3496 -3495 -3494 -3493 -3492 -3491 -3490 -3489 -3488 -3487 -3486 -3485 -3484 -3483 -3482 -3481 -3480 -3479 -3478 -3477 -3476 -3475 -3474 -3473 -3472 -3471 -3470 -3469 -3468 -3467 -3466 -3465 -3464 -3463 -3462 -3461 -3460 -3459 -3458 -3457 -3456 -3455 -3454 -3453 -3452 -3451 -3450 -3449 -3448 -3447 -3446 -3445 -3444 -3443 -3442 -3441 -3440 -3439 -3438 -3437 -3436 -3435 -3434 -3433 -3432 -3431 -3430 -3429 -3428 -3427 -3426 -3425 -3424 -3423 -3422 -3421 -3420 -3419 -3418 -3417 -3416 -3415 -3414 -3413 -3412 -3411 -3410 -3409 -3408 -3407 -3406 -3405 -3404 -3403 -3402 -3401 -3400 -3399 -3398 -3397 -3396 -3395 -3394 -3393 -3392 -3391 -3390 -3389 -3388 -3387 -3386 -3385 -3384 -3383 -3382 -3381 -3380 -3379 -3378 -3377 -3376 -3375 -3374 -3373 -3372 -3371 -3370 -3369 -3368 -3367 -3366 -3365 -3364 -3363 -3362 -3361 -3360 -3359 -3358 -3357 -3356 -3355 -3354 -3353 -3352 -3351 -3350 -3349 -3348 -3347 -3346 -3345 -3344 -3343 -3342 -3341 -3340 -3339 -3338 -3337 -3336 -3335 -3334 -3333 -3332 -3331 -3330 -3329 -3328 -3327 -3326 -3325 -3324 -3323 -3322 -3321 -3320 -3319 -3318 -3317 -3316 -3315 -3314 -3313 -3312 -3311 -3310 -3309 -3308 -3307 -3306 -3305 -3304 -3303 -3302 -3301 -3300 -3299 -3298 -3297 -3296 -3295 -3294 -3293 -3292 -3291 -3290 -3289 -3288 -3287 -3286 -3285 -3284 -3283 -3282 -3281 -3280 -3279 -3278 -3277 -3276 -3275 -3274 -3273 -3272 -3271 -3270 -3269 -3268 -3267 -3266 -3265 -3264 -3263 -3262 -3261 -3260 -3259 -3258 -3257 -3256 -3255 -3254 -3253 -3252 -3251 -3250 -3249 -3248 -3247 -3246 -3245 -3244 -3243 -3242 -3241 -3240 -3239 -3238 -3237 -3236 -3235 -3234 -3233 -3232 -3231 -3230 -3229 -3228 -3227 -3226 -3225 -3224 -3223 -3222 -3221 -3220 -3219 -3218 -3217 -3216 -3215 -3214 -3213 -3212 -3211 -3210 -3209 -3208 -3207 -3206 -3205 -3204 -3203 -3202 -3201 -3200 -3199 -3198 -3197 -3196 -3195 -3194 -3193 -3192 -3191 -3190 -3189 -3188 -3187 -3186 -3185 -3184 -3183 -3182 -3181 -3180 -3179 -3178 -3177 -3176 -3175 -3174 -3173 -3172 -3171 -3170 -3169 -3168 -3167 -3166 -3165 -3164 -3163 -3162 -3161 -3160 -3159 -3158 -3157 -3156 -3155 -3154 -3153 -3152 -3151 -3150 -3149 -3148 -3147 -3146 -3145 -3144 -3143 -3142 -3141 -3140 -3139 -3138 -3137 -3136 -3135 -3134 -3133 -3132 -3131 -3130 -3129 -3128 -3127 -3126 -3125 -3124 -3123 -3122 -3121 -3120 -3119 -3118 -3117 -3116 -3115 -3114 -3113 -3112 -3111 -3110 -3109 -3108 -3107 -3106 -3105 -3104 -3103 -3102 -3101 -3100 -3099 -3098 -3097 -3096 -3095 -3094 -3093 -3092 -3091 -3090 -3089 -3088 -3087 -3086 -3085 -3084 -3083 -3082 -3081 -3080 -3079 -3078 -3077 -3076 -3075 -3074 -3073 -3072 -3071 -3070 -3069 -3068 -3067 -3066 -3065 -3064 -3063 -3062 -3061 -3060 -3059 -3058 -3057 -3056 -3055 -3054 -3053 -3052 -3051 -3050 -3049 -3048 -3047 -3046 -3045 -3044 -3043 -3042 -3041 -3040 -3039 -3038 -3037 -3036 -3035 -3034 -3033 -3032 -3031 -3030 -3029 -3028 -3027 -3026 -3025 -3024 -3023 -3022 -3021 -3020 -3019 -3018 -3017 -3016 -3015 -3014 -3013 -3012 -3011 -3010 -3009 -3008 -3007 -3006 -3005 -3004 -3003 -3002 -3001 -3000 -2999 -2998 -2997 -2996 -2995 -2994 -2993 -2992 -2991 -2990 -2989 -2988 -2987 -2986 -2985 -2984 -2983 -2982 -2981 -2980 -2979 -2978 -2977 -2976 -2975 -2974 -2973 -2972 -2971 -2970 -2969 -2968 -2967 -2966 -2965 -2964 -2963 -2962 -2961 -2960 -2959 -2958 -2957 -2956 -2955 -2954 -2953 -2952 -2951 -2950 -2949 -2948 -2947 -2946 -2945 -2944 -2943 -2942 -2941 -2940 -2939 -2938 -2937 -2936 -2935 -2934 -2933 -2932 -2931 -2930 -2929 -2928 -2927 -2926 -2925 -2924 -2923 -2922 -2921 -2920 -2919 -2918 -2917 -2916 -2915 -2914 -2913 -2912 -2911 -2910 -2909 -2908 -2907 -2906 -2905 -2904 -2903 -2902 -2901 -2900 -2899 -2898 -2897 -2896 -2895 -2894 -2893 -2892 -2891 -2890 -2889 -2888 -2887 -2886 -2885 -2884 -2883 -2882 -2881 -2880 -2879 -2878 -2877 -2876 -2875 -2874 -2873 -2872 -2871 -2870 -2869 -2868 -2867 -2866 -2865 -2864 -2863 -2862 -2861 -2860 -2859 -2858 -2857 -2856 -2855 -2854 -2853 -2852 -2851 -2850 -2849 -2848 -2847 -2846 -2845 -2844 -2843 -2842 -2841 -2840 -2839 -2838 -2837 -2836 -2835 -2834 -2833 -2832 -2831 -2830 -2829 -2828 -2827 -2826 -2825 -2824 -2823 -2822 -2821 -2820 -2819 -2818 -2817 -2816 -2815 -2814 -2813 -2812 -2811 -2810 -2809 -2808 -2807 -2806 -2805 -2804 -2803 -2802 -2801 -2800 -2799 -2798 -2797 -2796 -2795 -2794 -2793 -2792 -2791 -2790 -2789 -2788 -2787 -2786 -2785 -2784 -2783 -2782 -2781 -2780 -2779 -2778 -2777 -2776 -2775 -2774 -2773 -2772 -2771 -2770 -2769 -2768 -2767 -2766 -2765 -2764 -2763 -2762 -2761 -2760 -2759 -2758 -2757 -2756 -2755 -2754 -2753 -2752 -2751 -2750 -2749 -2748 -2747 -2746 -2745 -2744 -2743 -2742 -2741 -2740 -2739 -2738 -2737 -2736 -2735 -2734 -2733 -2732 -2731 -2730 -2729 -2728 -2727 -2726 -2725 -2724 -2723 -2722 -2721 -2720 -2719 -2718 -2717 -2716 -2715 -2714 -2713 -2712 -2711 -2710 -2709 -2708 -2707 -2706 -2705 -2704 -2703 -2702 -2701 -2700 -2699 -2698 -2697 -2696 -2695 -2694 -2693 -2692 -2691 -2690 -2689 -2688 -2687 -2686 -2685 -2684 -2683 -2682 -2681 -2680 -2679 -2678 -2677 -2676 -2675 -2674 -2673 -2672 -2671 -2670 -2669 -2668 -2667 -2666 -2665 -2664 -2663 -2662 -2661 -2660 -2659 -2658 -2657 -2656 -2655 -2654 -2653 -2652 -2651 -2650 -2649 -2648 -2647 -2646 -2645 -2644 -2643 -2642 -2641 -2640 -2639 -2638 -2637 -2636 -2635 -2634 -2633 -2632 -2631 -2630 -2629 -2628 -2627 -2626 -2625 -2624 -2623 -2622 -2621 -2620 -2619 -2618 -2617 -2616 -2615 -2614 -2613 -2612 -2611 -2610 -2609 -2608 -2607 -2606 -2605 -2604 -2603 -2602 -2601 -2600 -2599 -2598 -2597 -2596 -2595 -2594 -2593 -2592 -2591 -2590 -2589 -2588 -2587 -2586 -2585 -2584 -2583 -2582 -2581 -2580 -2579 -2578 -2577 -2576 -2575 -2574 -2573 -2572 -2571 -2570 -2569 -2568 -2567 -2566 -2565 -2564 -2563 -2562 -2561 -2560 -2559 -2558 -2557 -2556 -2555 -2554 -2553 -2552 -2551 -2550 -2549 -2548 -2547 -2546 -2545 -2544 -2543 -2542 -2541 -2540 -2539 -2538 -2537 -2536 -2535 -2534 -2533 -2532 -2531 -2530 -2529 -2528 -2527 -2526 -2525 -2524 -2523 -2522 -2521 -2520 -2519 -2518 -2517 -2516 -2515 -2514 -2513 -2512 -2511 -2510 -2509 -2508 -2507 -2506 -2505 -2504 -2503 -2502 -2501 -2500 -2499 -2498 -2497 -2496 -2495 -2494 -2493 -2492 -2491 -2490 -2489 -2488 -2487 -2486 -2485 -2484 -2483 -2482 -2481 -2480 -2479 -2478 -2477 -2476 -2475 -2474 -2473 -2472 -2471 -2470 -2469 -2468 -2467 -2466 -2465 -2464 -2463 -2462 -2461 -2460 -2459 -2458 -2457 -2456 -2455 -2454 -2453 -2452 -2451 -2450 -2449 -2448 -2447 -2446 -2445 -2444 -2443 -2442 -2441 -2440 -2439 -2438 -2437 -2436 -2435 -2434 -2433 -2432 -2431 -2430 -2429 -2428 -2427 -2426 -2425 -2424 -2423 -2422 -2421 -2420 -2419 -2418 -2417 -2416 -2415 -2414 -2413 -2412 -2411 -2410 -2409 -2408 -2407 -2406 -2405 -2404 -2403 -2402 -2401 -2400 -2399 -2398 -2397 -2396 -2395 -2394 -2393 -2392 -2391 -2390 -2389 -2388 -2387 -2386 -2385 -2384 -2383 -2382 -2381 -2380 -2379 -2378 -2377 -2376 -2375 -2374 -2373 -2372 -2371 -2370 -2369 -2368 -2367 -2366 -2365 -2364 -2363 -2362 -2361 -2360 -2359 -2358 -2357 -2356 -2355 -2354 -2353 -2352 -2351 -2350 -2349 -2348 -2347 -2346 -2345 -2344 -2343 -2342 -2341 -2340 -2339 -2338 -2337 -2336 -2335 -2334 -2333 -2332 -2331 -2330 -2329 -2328 -2327 -2326 -2325 -2324 -2323 -2322 -2321 -2320 -2319 -2318 -2317 -2316 -2315 -2314 -2313 -2312 -2311 -2310 -2309 -2308 -2307 -2306 -2305 -2304 -2303 -2302 -2301 -2300 -2299 -2298 -2297 -2296 -2295 -2294 -2293 -2292 -2291 -2290 -2289 -2288 -2287 -2286 -2285 -2284 -2283 -2282 -2281 -2280 -2279 -2278 -2277 -2276 -2275 -2274 -2273 -2272 -2271 -2270 -2269 -2268 -2267 -2266 -2265 -2264 -2263 -2262 -2261 -2260 -2259 -2258 -2257 -2256 -2255 -2254 -2253 -2252 -2251 -2250 -2249 -2248 -2247 -2246 -2245 -2244 -2243 -2242 -2241 -2240 -2239 -2238 -2237 -2236 -2235 -2234 -2233 -2232 -2231 -2230 -2229 -2228 -2227 -2226 -2225 -2224 -2223 -2222 -2221 -2220 -2219 -2218 -2217 -2216 -2215 -2214 -2213 -2212 -2211 -2210 -2209 -2208 -2207 -2206 -2205 -2204 -2203 -2202 -2201 -2200 -2199 -2198 -2197 -2196 -2195 -2194 -2193 -2192 -2191 -2190 -2189 -2188 -2187 -2186 -2185 -2184 -2183 -2182 -2181 -2180 -2179 -2178 -2177 -2176 -2175 -2174 -2173 -2172 -2171 -2170 -2169 -2168 -2167 -2166 -2165 -2164 -2163 -2162 -2161 -2160 -2159 -2158 -2157 -2156 -2155 -2154 -2153 -2152 -2151 -2150 -2149 -2148 -2147 -2146 -2145 -2144 -2143 -2142 -2141 -2140 -2139 -2138 -2137 -2136 -2135 -2134 -2133 -2132 -2131 -2130 -2129 -2128 -2127 -2126 -2125 -2124 -2123 -2122 -2121 -2120 -2119 -2118 -2117 -2116 -2115 -2114 -2113 -2112 -2111 -2110 -2109 -2108 -2107 -2106 -2105 -2104 -2103 -2102 -2101 -2100 -2099 -2098 -2097 -2096 -2095 -2094 -2093 -2092 -2091 -2090 -2089 -2088 -2087 -2086 -2085 -2084 -2083 -2082 -2081 -2080 -2079 -2078 -2077 -2076 -2075 -2074 -2073 -2072 -2071 -2070 -2069 -2068 -2067 -2066 -2065 -2064 -2063 -2062 -2061 -2060 -2059 -2058 -2057 -2056 -2055 -2054 -2053 -2052 -2051 -2050 -2049 -2048 -2047 -2046 -2045 -2044 -2043 -2042 -2041 -2040 -2039 -2038 -2037 -2036 -2035 -2034 -2033 -2032 -2031 -2030 -2029 -2028 -2027 -2026 -2025 -2024 -2023 -2022 -2021 -2020 -2019 -2018 -2017 -2016 -2015 -2014 -2013 -2012 -2011 -2010 -2009 -2008 -2007 -2006 -2005 -2004 -2003 -2002 -2001 -2000 -1999 -1998 -1997 -1996 -1995 -1994 -1993 -1992 -1991 -1990 -1989 -1988 -1987 -1986 -1985 -1984 -1983 -1982 -1981 -1980 -1979 -1978 -1977 -1976 -1975 -1974 -1973 -1972 -1971 -1970 -1969 -1968 -1967 -1966 -1965 -1964 -1963 -1962 -1961 -1960 -1959 -1958 -1957 -1956 -1955 -1954 -1953 -1952 -1951 -1950 -1949 -1948 -1947 -1946 -1945 -1944 -1943 -1942 -1941 -1940 -1939 -1938 -1937 -1936 -1935 -1934 -1933 -1932 -1931 -1930 -1929 -1928 -1927 -1926 -1925 -1924 -1923 -1922 -1921 -1920 -1919 -1918 -1917 -1916 -1915 -1914 -1913 -1912 -1911 -1910 -1909 -1908 -1907 -1906 -1905 -1904 -1903 -1902 -1901 -1900 -1899 -1898 -1897 -1896 -1895 -1894 -1893 -1892 -1891 -1890 -1889 -1888 -1887 -1886 -1885 -1884 -1883 -1882 -1881 -1880 -1879 -1878 -1877 -1876 -1875 -1874 -1873 -1872 -1871 -1870 -1869 -1868 -1867 -1866 -1865 -1864 -1863 -1862 -1861 -1860 -1859 -1858 -1857 -1856 -1855 -1854 -1853 -1852 -1851 -1850 -1849 -1848 -1847 -1846 -1845 -1844 -1843 -1842 -1841 -1840 -1839 -1838 -1837 -1836 -1835 -1834 -1833 -1832 -1831 -1830 -1829 -1828 -1827 -1826 -1825 -1824 -1823 -1822 -1821 -1820 -1819 -1818 -1817 -1816 -1815 -1814 -1813 -1812 -1811 -1810 -1809 -1808 -1807 -1806 -1805 -1804 -1803 -1802 -1801 -1800 -1799 -1798 -1797 -1796 -1795 -1794 -1793 -1792 -1791 -1790 -1789 -1788 -1787 -1786 -1785 -1784 -1783 -1782 -1781 -1780 -1779 -1778 -1777 -1776 -1775 -1774 -1773 -1772 -1771 -1770 -1769 -1768 -1767 -1766 -1765 -1764 -1763 -1762 -1761 -1760 -1759 -1758 -1757 -1756 -1755 -1754 -1753 -1752 -1751 -1750 -1749 -1748 -1747 -1746 -1745 -1744 -1743 -1742 -1741 -1740 -1739 -1738 -1737 -1736 -1735 -1734 -1733 -1732 -1731 -1730 -1729 -1728 -1727 -1726 -1725 -1724 -1723 -1722 -1721 -1720 -1719 -1718 -1717 -1716 -1715 -1714 -1713 -1712 -1711 -1710 -1709 -1708 -1707 -1706 -1705 -1704 -1703 -1702 -1701 -1700 -1699 -1698 -1697 -1696 -1695 -1694 -1693 -1692 -1691 -1690 -1689 -1688 -1687 -1686 -1685 -1684 -1683 -1682 -1681 -1680 -1679 -1678 -1677 -1676 -1675 -1674 -1673 -1672 -1671 -1670 -1669 -1668 -1667 -1666 -1665 -1664 -1663 -1662 -1661 -1660 -1659 -1658 -1657 -1656 -1655 -1654 -1653 -1652 -1651 -1650 -1649 -1648 -1647 -1646 -1645 -1644 -1643 -1642 -1641 -1640 -1639 -1638 -1637 -1636 -1635 -1634 -1633 -1632 -1631 -1630 -1629 -1628 -1627 -1626 -1625 -1624 -1623 -1622 -1621 -1620 -1619 -1618 -1617 -1616 -1615 -1614 -1613 -1612 -1611 -1610 -1609 -1608 -1607 -1606 -1605 -1604 -1603 -1602 -1601 -1600 -1599 -1598 -1597 -1596 -1595 -1594 -1593 -1592 -1591 -1590 -1589 -1588 -1587 -1586 -1585 -1584 -1583 -1582 -1581 -1580 -1579 -1578 -1577 -1576 -1575 -1574 -1573 -1572 -1571 -1570 -1569 -1568 -1567 -1566 -1565 -1564 -1563 -1562 -1561 -1560 -1559 -1558 -1557 -1556 -1555 -1554 -1553 -1552 -1551 -1550 -1549 -1548 -1547 -1546 -1545 -1544 -1543 -1542 -1541 -1540 -1539 -1538 -1537 -1536 -1535 -1534 -1533 -1532 -1531 -1530 -1529 -1528 -1527 -1526 -1525 -1524 -1523 -1522 -1521 -1520 -1519 -1518 -1517 -1516 -1515 -1514 -1513 -1512 -1511 -1510 -1509 -1508 -1507 -1506 -1505 -1504 -1503 -1502 -1501 -1500 -1499 -1498 -1497 -1496 -1495 -1494 -1493 -1492 -1491 -1490 -1489 -1488 -1487 -1486 -1485 -1484 -1483 -1482 -1481 -1480 -1479 -1478 -1477 -1476 -1475 -1474 -1473 -1472 -1471 -1470 -1469 -1468 -1467 -1466 -1465 -1464 -1463 -1462 -1461 -1460 -1459 -1458 -1457 -1456 -1455 -1454 -1453 -1452 -1451 -1450 -1449 -1448 -1447 -1446 -1445 -1444 -1443 -1442 -1441 -1440 -1439 -1438 -1437 -1436 -1435 -1434 -1433 -1432 -1431 -1430 -1429 -1428 -1427 -1426 -1425 -1424 -1423 -1422 -1421 -1420 -1419 -1418 -1417 -1416 -1415 -1414 -1413 -1412 -1411 -1410 -1409 -1408 -1407 -1406 -1405 -1404 -1403 -1402 -1401 -1400 -1399 -1398 -1397 -1396 -1395 -1394 -1393 -1392 -1391 -1390 -1389 -1388 -1387 -1386 -1385 -1384 -1383 -1382 -1381 -1380 -1379 -1378 -1377 -1376 -1375 -1374 -1373 -1372 -1371 -1370 -1369 -1368 -1367 -1366 -1365 -1364 -1363 -1362 -1361 -1360 -1359 -1358 -1357 -1356 -1355 -1354 -1353 -1352 -1351 -1350 -1349 -1348 -1347 -1346 -1345 -1344 -1343 -1342 -1341 -1340 -1339 -1338 -1337 -1336 -1335 -1334 -1333 -1332 -1331 -1330 -1329 -1328 -1327 -1326 -1325 -1324 -1323 -1322 -1321 -1320 -1319 -1318 -1317 -1316 -1315 -1314 -1313 -1312 -1311 -1310 -1309 -1308 -1307 -1306 -1305 -1304 -1303 -1302 -1301 -1300 -1299 -1298 -1297 -1296 -1295 -1294 -1293 -1292 -1291 -1290 -1289 -1288 -1287 -1286 -1285 -1284 -1283 -1282 -1281 -1280 -1279 -1278 -1277 -1276 -1275 -1274 -1273 -1272 -1271 -1270 -1269 -1268 -1267 -1266 -1265 -1264 -1263 -1262 -1261 -1260 -1259 -1258 -1257 -1256 -1255 -1254 -1253 -1252 -1251 -1250 -1249 -1248 -1247 -1246 -1245 -1244 -1243 -1242 -1241 -1240 -1239 -1238 -1237 -1236 -1235 -1234 -1233 -1232 -1231 -1230 -1229 -1228 -1227 -1226 -1225 -1224 -1223 -1222 -1221 -1220 -1219 -1218 -1217 -1216 -1215 -1214 -1213 -1212 -1211 -1210 -1209 -1208 -1207 -1206 -1205 -1204 -1203 -1202 -1201 -1200 -1199 -1198 -1197 -1196 -1195 -1194 -1193 -1192 -1191 -1190 -1189 -1188 -1187 -1186 -1185 -1184 -1183 -1182 -1181 -1180 -1179 -1178 -1177 -1176 -1175 -1174 -1173 -1172 -1171 -1170 -1169 -1168 -1167 -1166 -1165 -1164 -1163 -1162 -1161 -1160 -1159 -1158 -1157 -1156 -1155 -1154 -1153 -1152 -1151 -1150 -1149 -1148 -1147 -1146 -1145 -1144 -1143 -1142 -1141 -1140 -1139 -1138 -1137 -1136 -1135 -1134 -1133 -1132 -1131 -1130 -1129 -1128 -1127 -1126 -1125 -1124 -1123 -1122 -1121 -1120 -1119 -1118 -1117 -1116 -1115 -1114 -1113 -1112 -1111 -1110 -1109 -1108 -1107 -1106 -1105 -1104 -1103 -1102 -1101 -1100 -1099 -1098 -1097 -1096 -1095 -1094 -1093 -1092 -1091 -1090 -1089 -1088 -1087 -1086 -1085 -1084 -1083 -1082 -1081 -1080 -1079 -1078 -1077 -1076 -1075 -1074 -1073 -1072 -1071 -1070 -1069 -1068 -1067 -1066 -1065 -1064 -1063 -1062 -1061 -1060 -1059 -1058 -1057 -1056 -1055 -1054 -1053 -1052 -1051 -1050 -1049 -1048 -1047 -1046 -1045 -1044 -1043 -1042 -1041 -1040 -1039 -1038 -1037 -1036 -1035 -1034 -1033 -1032 -1031 -1030 -1029 -1028 -1027 -1026 -1025 -1024 -1023 -1022 -1021 -1020 -1019 -1018 -1017 -1016 -1015 -1014 -1013 -1012 -1011 -1010 -1009 -1008 -1007 -1006 -1005 -1004 -1003 -1002 -1001 -1000 -999 -998 -997 -996 -995 -994 -993 -992 -991 -990 -989 -988 -987 -986 -985 -984 -983 -982 -981 -980 -979 -978 -977 -976 -975 -974 -973 -972 -971 -970 -969 -968 -967 -966 -965 -964 -963 -962 -961 -960 -959 -958 -957 -956 -955 -954 -953 -952 -951 -950 -949 -948 -947 -946 -945 -944 -943 -942 -941 -940 -939 -938 -937 -936 -935 -934 -933 -932 -931 -930 -929 -928 -927 -926 -925 -924 -923 -922 -921 -920 -919 -918 -917 -916 -915 -914 -913 -912 -911 -910 -909 -908 -907 -906 -905 -904 -903 -902 -901 -900 -899 -898 -897 -896 -895 -894 -893 -892 -891 -890 -889 -888 -887 -886 -885 -884 -883 -882 -881 -880 -879 -878 -877 -876 -875 -874 -873 -872 -871 -870 -869 -868 -867 -866 -865 -864 -863 -862 -861 -860 -859 -858 -857 -856 -855 -854 -853 -852 -851 -850 -849 -848 -847 -846 -845 -844 -843 -842 -841 -840 -839 -838 -837 -836 -835 -834 -833 -832 -831 -830 -829 -828 -827 -826 -825 -824 -823 -822 -821 -820 -819 -818 -817 -816 -815 -814 -813 -812 -811 -810 -809 -808 -807 -806 -805 -804 -803 -802 -801 -800 -799 -798 -797 -796 -795 -794 -793 -792 -791 -790 -789 -788 -787 -786 -785 -784 -783 -782 -781 -780 -779 -778 -777 -776 -775 -774 -773 -772 -771 -770 -769 -768 -767 -766 -765 -764 -763 -762 -761 -760 -759 -758 -757 -756 -755 -754 -753 -752 -751 -750 -749 -748 -747 -746 -745 -744 -743 -742 -741 -740 -739 -738 -737 -736 -735 -734 -733 -732 -731 -730 -729 -728 -727 -726 -725 -724 -723 -722 -721 -720 -719 -718 -717 -716 -715 -714 -713 -712 -711 -710 -709 -708 -707 -706 -705 -704 -703 -702 -701 -700 -699 -698 -697 -696 -695 -694 -693 -692 -691 -690 -689 -688 -687 -686 -685 -684 -683 -682 -681 -680 -679 -678 -677 -676 -675 -674 -673 -672 -671 -670 -669 -668 -667 -666 -665 -664 -663 -662 -661 -660 -659 -658 -657 -656 -655 -654 -653 -652 -651 -650 -649 -648 -647 -646 -645 -644 -643 -642 -641 -640 -639 -638 -637 -636 -635 -634 -633 -632 -631 -630 -629 -628 -627 -626 -625 -624 -623 -622 -621 -620 -619 -618 -617 -616 -615 -614 -613 -612 -611 -610 -609 -608 -607 -606 -605 -604 -603 -602 -601 -600 -599 -598 -597 -596 -595 -594 -593 -592 -591 -590 -589 -588 -587 -586 -585 -584 -583 -582 -581 -580 -579 -578 -577 -576 -575 -574 -573 -572 -571 -570 -569 -568 -567 -566 -565 -564 -563 -562 -561 -560 -559 -558 -557 -556 -555 -554 -553 -552 -551 -550 -549 -548 -547 -546 -545 -544 -543 -542 -541 -540 -539 -538 -537 -536 -535 -534 -533 -532 -531 -530 -529 -528 -527 -526 -525 -524 -523 -522 -521 -520 -519 -518 -517 -516 -515 -514 -513 -512 -511 -510 -509 -508 -507 -506 -505 -504 -503 -502 -501 -500 -499 -498 -497 -496 -495 -494 -493 -492 -491 -490 -489 -488 -487 -486 -485 -484 -483 -482 -481 -480 -479 -478 -477 -476 -475 -474 -473 -472 -471 -470 -469 -468 -467 -466 -465 -464 -463 -462 -461 -460 -459 -458 -457 -456 -455 -454 -453 -452 -451 -450 -449 -448 -447 -446 -445 -444 -443 -442 -441 -440 -439 -438 -437 -436 -435 -434 -433 -432 -431 -430 -429 -428 -427 -426 -425 -424 -423 -422 -421 -420 -419 -418 -417 -416 -415 -414 -413 -412 -411 -410 -409 -408 -407 -406 -405 -404 -403 -402 -401 -400 -399 -398 -397 -396 -395 -394 -393 -392 -391 -390 -389 -388 -387 -386 -385 -384 -383 -382 -381 -380 -379 -378 -377 -376 -375 -374 -373 -372 -371 -370 -369 -368 -367 -366 -365 -364 -363 -362 -361 -360 -359 -358 -357 -356 -355 -354 -353 -352 -351 -350 -349 -348 -347 -346 -345 -344 -343 -342 -341 -340 -339 -338 -337 -336 -335 -334 -333 -332 -331 -330 -329 -328 -327 -326 -325 -324 -323 -322 -321 -320 -319 -318 -317 -316 -315 -314 -313 -312 -311 -310 -309 -308 -307 -306 -305 -304 -303 -302 -301 -300 -299 -298 -297 -296 -295 -294 -293 -292 -291 -290 -289 -288 -287 -286 -285 -284 -283 -282 -281 -280 -279 -278 -277 -276 -275 -274 -273 -272 -271 -270 -269 -268 -267 -266 -265 -264 -263 -262 -261 -260 -259 -258 -257 -256 -255 -254 -253 -252 -251 -250 -249 -248 -247 -246 -245 -244 -243 -242 -241 -240 -239 -238 -237 -236 -235 -234 -233 -232 -231 -230 -229 -228 -227 -226 -225 -224 -223 -222 -221 -220 -219 -218 -217 -216 -215 -214 -213 -212 -211 -210 -209 -208 -207 -206 -205 -204 -203 -202 -201 -200 -199 -198 -197 -196 -195 -194 -193 -192 -191 -190 -189 -188 -187 -186 -185 -184 -183 -182 -181 -180 -179 -178 -177 -176 -175 -174 -173 -172 -171 -170 -169 -168 -167 -166 -165 -164 -163 -162 -161 -160 -159 -158 -157 -156 -155 -154 -153 -152 -151 -150 -149 -148 -147 -146 -145 -144 -143 -142 -141 -140 -139 -138 -137 -136 -135 -134 -133 -132 -131 -130 -129 -128 -127 -126 -125 -124 -123 -122 -121 -120 -119 -118 -117 -116 -115 -114 -113 -112 -111 -110 -109 -108 -107 -106 -105 -104 -103 -102 -101 -100 -99 -98 -97 -96 -95 -94 -93 -92 -91 -90 -89 -88 -87 -86 -85 -84 -83 -82 -81 -80 -79 -78 -77 -76 -75 -74 -73 -72 -71 -70 -69 -68 -67 -66 -65 -64 -63 -62 -61 -60 -59 -58 -57 -56 -55 -54 -53 -52 -51 -50 -49 -48 -47 -46 -45 -44 -43 -42 -41 -40 -39 -38 -37 -36 -35 -34 -33 -32 -31 -30 -29 -28 -27 -26 -25 -24 -23 -22 -21 -20 -19 -18 -17 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 -NOP PERCENT -90 diff --git a/bench_horn_mcmc/samples_shrink_big_numbers_4096/first.xml b/bench_horn_mcmc/samples_shrink_big_numbers_4096/first.xml deleted file mode 100644 index 65060a2c1..000000000 --- a/bench_horn_mcmc/samples_shrink_big_numbers_4096/first.xml +++ /dev/null @@ -1,24635 +0,0 @@ - - - - - 1 - itp - - - - x - x1 - - - - x - - - - - - x - 1 - - - - - x - 2 - - - - - x - 3 - - - - - x - 4 - - - - - x - 5 - - - - - x - 6 - - - - - x - 7 - - - - - x - 8 - - - - - x - 9 - - - - - x - 10 - - - - - x - 11 - - - - - x - 12 - - - - - x - 13 - - - - - x - 14 - - - - - x - 15 - - - - - x - 16 - - - - - x - 17 - - - - - x - 18 - - - - - x - 19 - - - - - x - 20 - - - - - x - 21 - - - - - x - 22 - - - - - x - 23 - - - - - x - 24 - - - - - x - 25 - - - - - x - 26 - - - - - x - 27 - - - - - x - 28 - - - - - x - 29 - - - - - x - 30 - - - - - x - 31 - - - - - x - 32 - - - - - x - 33 - - - - - x - 34 - - - - - x - 35 - - - - - x - 36 - - - - - x - 37 - - - - - x - 38 - - - - - x - 39 - - - - - x - 40 - - - - - x - 41 - - - - - x - 42 - - - - - x - 43 - - - - - x - 44 - - - - - x - 45 - - - - - x - 46 - - - - - x - 47 - - - - - x - 48 - - - - - x - 49 - - - - - x - 50 - - - - - x - 51 - - - - - x - 52 - - - - - x - 53 - - - - - x - 54 - - - - - x - 55 - - - - - x - 56 - - - - - x - 57 - - - - - x - 58 - - - - - x - 59 - - - - - x - 60 - - - - - x - 61 - - - - - x - 62 - - - - - x - 63 - - - - - x - 64 - - - - - x - 65 - - - - - x - 66 - - - - - x - 67 - - - - - x - 68 - - - - - x - 69 - - - - - x - 70 - - - - - x - 71 - - - - - x - 72 - - - - - x - 73 - - - - - x - 74 - - - - - x - 75 - - - - - x - 76 - - - - - x - 77 - - - - - x - 78 - - - - - x - 79 - - - - - x - 80 - - - - - x - 81 - - - - - x - 82 - - - - - x - 83 - - - - - x - 84 - - - - - x - 85 - - - - - x - 86 - - - - - x - 87 - - - - - x - 88 - - - - - x - 89 - - - - - x - 90 - - - - - x - 91 - - - - - x - 92 - - - - - x - 93 - - - - - x - 94 - - - - - x - 95 - - - - - x - 96 - - - - - x - 97 - - - - - x - 98 - - - - - x - 99 - - - - - x - 100 - - - - - x - 101 - - - - - x - 102 - - - - - x - 103 - - - - - x - 104 - - - - - x - 105 - - - - - x - 106 - - - - - x - 107 - - - - - x - 108 - - - - - x - 109 - - - - - x - 110 - - - - - x - 111 - - - - - x - 112 - - - - - x - 113 - - - - - x - 114 - - - - - x - 115 - - - - - x - 116 - - - - - x - 117 - - - - - x - 118 - - - - - x - 119 - - - - - x - 120 - - - - - x - 121 - - - - - x - 122 - - - - - x - 123 - - - - - x - 124 - - - - - x - 125 - - - - - x - 126 - - - - - x - 127 - - - - - x - 128 - - - - - x - 129 - - - - - x - 130 - - - - - x - 131 - - - - - x - 132 - - - - - x - 133 - - - - - x - 134 - - - - - x - 135 - - - - - x - 136 - - - - - x - 137 - - - - - x - 138 - - - - - x - 139 - - - - - x - 140 - - - - - x - 141 - - - - - x - 142 - - - - - x - 143 - - - - - x - 144 - - - - - x - 145 - - - - - x - 146 - - - - - x - 147 - - - - - x - 148 - - - - - x - 149 - - - - - x - 150 - - - - - x - 151 - - - - - x - 152 - - - - - x - 153 - - - - - x - 154 - - - - - x - 155 - - - - - x - 156 - - - - - x - 157 - - - - - x - 158 - - - - - x - 159 - - - - - x - 160 - - - - - x - 161 - - - - - x - 162 - - - - - x - 163 - - - - - x - 164 - - - - - x - 165 - - - - - x - 166 - - - - - x - 167 - - - - - x - 168 - - - - - x - 169 - - - - - x - 170 - - - - - x - 171 - - - - - x - 172 - - - - - x - 173 - - - - - x - 174 - - - - - x - 175 - - - - - x - 176 - - - - - x - 177 - - - - - x - 178 - - - - - x - 179 - - - - - x - 180 - - - - - x - 181 - - - - - x - 182 - - - - - x - 183 - - - - - x - 184 - - - - - x - 185 - - - - - x - 186 - - - - - x - 187 - - - - - x - 188 - - - - - x - 189 - - - - - x - 190 - - - - - x - 191 - - - - - x - 192 - - - - - x - 193 - - - - - x - 194 - - - - - x - 195 - - - - - x - 196 - - - - - x - 197 - - - - - x - 198 - - - - - x - 199 - - - - - x - 200 - - - - - x - 201 - - - - - x - 202 - - - - - x - 203 - - - - - x - 204 - - - - - x - 205 - - - - - x - 206 - - - - - x - 207 - - - - - x - 208 - - - - - x - 209 - - - - - x - 210 - - - - - x - 211 - - - - - x - 212 - - - - - x - 213 - - - - - x - 214 - - - - - x - 215 - - - - - x - 216 - - - - - x - 217 - - - - - x - 218 - - - - - x - 219 - - - - - x - 220 - - - - - x - 221 - - - - - x - 222 - - - - - x - 223 - - - - - x - 224 - - - - - x - 225 - - - - - x - 226 - - - - - x - 227 - - - - - x - 228 - - - - - x - 229 - - - - - x - 230 - - - - - x - 231 - - - - - x - 232 - - - - - x - 233 - - - - - x - 234 - - - - - x - 235 - - - - - x - 236 - - - - - x - 237 - - - - - x - 238 - - - - - x - 239 - - - - - x - 240 - - - - - x - 241 - - - - - x - 242 - - - - - x - 243 - - - - - x - 244 - - - - - x - 245 - - - - - x - 246 - - - - - x - 247 - - - - - x - 248 - - - - - x - 249 - - - - - x - 250 - - - - - x - 251 - - - - - x - 252 - - - - - x - 253 - - - - - x - 254 - - - - - x - 255 - - - - - x - 256 - - - - - x - 257 - - - - - x - 258 - - - - - x - 259 - - - - - x - 260 - - - - - x - 261 - - - - - x - 262 - - - - - x - 263 - - - - - x - 264 - - - - - x - 265 - - - - - x - 266 - - - - - x - 267 - - - - - x - 268 - - - - - x - 269 - - - - - x - 270 - - - - - x - 271 - - - - - x - 272 - - - - - x - 273 - - - - - x - 274 - - - - - x - 275 - - - - - x - 276 - - - - - x - 277 - - - - - x - 278 - - - - - x - 279 - - - - - x - 280 - - - - - x - 281 - - - - - x - 282 - - - - - x - 283 - - - - - x - 284 - - - - - x - 285 - - - - - x - 286 - - - - - x - 287 - - - - - x - 288 - - - - - x - 289 - - - - - x - 290 - - - - - x - 291 - - - - - x - 292 - - - - - x - 293 - - - - - x - 294 - - - - - x - 295 - - - - - x - 296 - - - - - x - 297 - - - - - x - 298 - - - - - x - 299 - - - - - x - 300 - - - - - x - 301 - - - - - x - 302 - - - - - x - 303 - - - - - x - 304 - - - - - x - 305 - - - - - x - 306 - - - - - x - 307 - - - - - x - 308 - - - - - x - 309 - - - - - x - 310 - - - - - x - 311 - - - - - x - 312 - - - - - x - 313 - - - - - x - 314 - - - - - x - 315 - - - - - x - 316 - - - - - x - 317 - - - - - x - 318 - - - - - x - 319 - - - - - x - 320 - - - - - x - 321 - - - - - x - 322 - - - - - x - 323 - - - - - x - 324 - - - - - x - 325 - - - - - x - 326 - - - - - x - 327 - - - - - x - 328 - - - - - x - 329 - - - - - x - 330 - - - - - x - 331 - - - - - x - 332 - - - - - x - 333 - - - - - x - 334 - - - - - x - 335 - - - - - x - 336 - - - - - x - 337 - - - - - x - 338 - - - - - x - 339 - - - - - x - 340 - - - - - x - 341 - - - - - x - 342 - - - - - x - 343 - - - - - x - 344 - - - - - x - 345 - - - - - x - 346 - - - - - x - 347 - - - - - x - 348 - - - - - x - 349 - - - - - x - 350 - - - - - x - 351 - - - - - x - 352 - - - - - x - 353 - - - - - x - 354 - - - - - x - 355 - - - - - x - 356 - - - - - x - 357 - - - - - x - 358 - - - - - x - 359 - - - - - x - 360 - - - - - x - 361 - - - - - x - 362 - - - - - x - 363 - - - - - x - 364 - - - - - x - 365 - - - - - x - 366 - - - - - x - 367 - - - - - x - 368 - - - - - x - 369 - - - - - x - 370 - - - - - x - 371 - - - - - x - 372 - - - - - x - 373 - - - - - x - 374 - - - - - x - 375 - - - - - x - 376 - - - - - x - 377 - - - - - x - 378 - - - - - x - 379 - - - - - x - 380 - - - - - x - 381 - - - - - x - 382 - - - - - x - 383 - - - - - x - 384 - - - - - x - 385 - - - - - x - 386 - - - - - x - 387 - - - - - x - 388 - - - - - x - 389 - - - - - x - 390 - - - - - x - 391 - - - - - x - 392 - - - - - x - 393 - - - - - x - 394 - - - - - x - 395 - - - - - x - 396 - - - - - x - 397 - - - - - x - 398 - - - - - x - 399 - - - - - x - 400 - - - - - x - 401 - - - - - x - 402 - - - - - x - 403 - - - - - x - 404 - - - - - x - 405 - - - - - x - 406 - - - - - x - 407 - - - - - x - 408 - - - - - x - 409 - - - - - x - 410 - - - - - x - 411 - - - - - x - 412 - - - - - x - 413 - - - - - x - 414 - - - - - x - 415 - - - - - x - 416 - - - - - x - 417 - - - - - x - 418 - - - - - x - 419 - - - - - x - 420 - - - - - x - 421 - - - - - x - 422 - - - - - x - 423 - - - - - x - 424 - - - - - x - 425 - - - - - x - 426 - - - - - x - 427 - - - - - x - 428 - - - - - x - 429 - - - - - x - 430 - - - - - x - 431 - - - - - x - 432 - - - - - x - 433 - - - - - x - 434 - - - - - x - 435 - - - - - x - 436 - - - - - x - 437 - - - - - x - 438 - - - - - x - 439 - - - - - x - 440 - - - - - x - 441 - - - - - x - 442 - - - - - x - 443 - - - - - x - 444 - - - - - x - 445 - - - - - x - 446 - - - - - x - 447 - - - - - x - 448 - - - - - x - 449 - - - - - x - 450 - - - - - x - 451 - - - - - x - 452 - - - - - x - 453 - - - - - x - 454 - - - - - x - 455 - - - - - x - 456 - - - - - x - 457 - - - - - x - 458 - - - - - x - 459 - - - - - x - 460 - - - - - x - 461 - - - - - x - 462 - - - - - x - 463 - - - - - x - 464 - - - - - x - 465 - - - - - x - 466 - - - - - x - 467 - - - - - x - 468 - - - - - x - 469 - - - - - x - 470 - - - - - x - 471 - - - - - x - 472 - - - - - x - 473 - - - - - x - 474 - - - - - x - 475 - - - - - x - 476 - - - - - x - 477 - - - - - x - 478 - - - - - x - 479 - - - - - x - 480 - - - - - x - 481 - - - - - x - 482 - - - - - x - 483 - - - - - x - 484 - - - - - x - 485 - - - - - x - 486 - - - - - x - 487 - - - - - x - 488 - - - - - x - 489 - - - - - x - 490 - - - - - x - 491 - - - - - x - 492 - - - - - x - 493 - - - - - x - 494 - - - - - x - 495 - - - - - x - 496 - - - - - x - 497 - - - - - x - 498 - - - - - x - 499 - - - - - x - 500 - - - - - x - 501 - - - - - x - 502 - - - - - x - 503 - - - - - x - 504 - - - - - x - 505 - - - - - x - 506 - - - - - x - 507 - - - - - x - 508 - - - - - x - 509 - - - - - x - 510 - - - - - x - 511 - - - - - x - 512 - - - - - x - 513 - - - - - x - 514 - - - - - x - 515 - - - - - x - 516 - - - - - x - 517 - - - - - x - 518 - - - - - x - 519 - - - - - x - 520 - - - - - x - 521 - - - - - x - 522 - - - - - x - 523 - - - - - x - 524 - - - - - x - 525 - - - - - x - 526 - - - - - x - 527 - - - - - x - 528 - - - - - x - 529 - - - - - x - 530 - - - - - x - 531 - - - - - x - 532 - - - - - x - 533 - - - - - x - 534 - - - - - x - 535 - - - - - x - 536 - - - - - x - 537 - - - - - x - 538 - - - - - x - 539 - - - - - x - 540 - - - - - x - 541 - - - - - x - 542 - - - - - x - 543 - - - - - x - 544 - - - - - x - 545 - - - - - x - 546 - - - - - x - 547 - - - - - x - 548 - - - - - x - 549 - - - - - x - 550 - - - - - x - 551 - - - - - x - 552 - - - - - x - 553 - - - - - x - 554 - - - - - x - 555 - - - - - x - 556 - - - - - x - 557 - - - - - x - 558 - - - - - x - 559 - - - - - x - 560 - - - - - x - 561 - - - - - x - 562 - - - - - x - 563 - - - - - x - 564 - - - - - x - 565 - - - - - x - 566 - - - - - x - 567 - - - - - x - 568 - - - - - x - 569 - - - - - x - 570 - - - - - x - 571 - - - - - x - 572 - - - - - x - 573 - - - - - x - 574 - - - - - x - 575 - - - - - x - 576 - - - - - x - 577 - - - - - x - 578 - - - - - x - 579 - - - - - x - 580 - - - - - x - 581 - - - - - x - 582 - - - - - x - 583 - - - - - x - 584 - - - - - x - 585 - - - - - x - 586 - - - - - x - 587 - - - - - x - 588 - - - - - x - 589 - - - - - x - 590 - - - - - x - 591 - - - - - x - 592 - - - - - x - 593 - - - - - x - 594 - - - - - x - 595 - - - - - x - 596 - - - - - x - 597 - - - - - x - 598 - - - - - x - 599 - - - - - x - 600 - - - - - x - 601 - - - - - x - 602 - - - - - x - 603 - - - - - x - 604 - - - - - x - 605 - - - - - x - 606 - - - - - x - 607 - - - - - x - 608 - - - - - x - 609 - - - - - x - 610 - - - - - x - 611 - - - - - x - 612 - - - - - x - 613 - - - - - x - 614 - - - - - x - 615 - - - - - x - 616 - - - - - x - 617 - - - - - x - 618 - - - - - x - 619 - - - - - x - 620 - - - - - x - 621 - - - - - x - 622 - - - - - x - 623 - - - - - x - 624 - - - - - x - 625 - - - - - x - 626 - - - - - x - 627 - - - - - x - 628 - - - - - x - 629 - - - - - x - 630 - - - - - x - 631 - - - - - x - 632 - - - - - x - 633 - - - - - x - 634 - - - - - x - 635 - - - - - x - 636 - - - - - x - 637 - - - - - x - 638 - - - - - x - 639 - - - - - x - 640 - - - - - x - 641 - - - - - x - 642 - - - - - x - 643 - - - - - x - 644 - - - - - x - 645 - - - - - x - 646 - - - - - x - 647 - - - - - x - 648 - - - - - x - 649 - - - - - x - 650 - - - - - x - 651 - - - - - x - 652 - - - - - x - 653 - - - - - x - 654 - - - - - x - 655 - - - - - x - 656 - - - - - x - 657 - - - - - x - 658 - - - - - x - 659 - - - - - x - 660 - - - - - x - 661 - - - - - x - 662 - - - - - x - 663 - - - - - x - 664 - - - - - x - 665 - - - - - x - 666 - - - - - x - 667 - - - - - x - 668 - - - - - x - 669 - - - - - x - 670 - - - - - x - 671 - - - - - x - 672 - - - - - x - 673 - - - - - x - 674 - - - - - x - 675 - - - - - x - 676 - - - - - x - 677 - - - - - x - 678 - - - - - x - 679 - - - - - x - 680 - - - - - x - 681 - - - - - x - 682 - - - - - x - 683 - - - - - x - 684 - - - - - x - 685 - - - - - x - 686 - - - - - x - 687 - - - - - x - 688 - - - - - x - 689 - - - - - x - 690 - - - - - x - 691 - - - - - x - 692 - - - - - x - 693 - - - - - x - 694 - - - - - x - 695 - - - - - x - 696 - - - - - x - 697 - - - - - x - 698 - - - - - x - 699 - - - - - x - 700 - - - - - x - 701 - - - - - x - 702 - - - - - x - 703 - - - - - x - 704 - - - - - x - 705 - - - - - x - 706 - - - - - x - 707 - - - - - x - 708 - - - - - x - 709 - - - - - x - 710 - - - - - x - 711 - - - - - x - 712 - - - - - x - 713 - - - - - x - 714 - - - - - x - 715 - - - - - x - 716 - - - - - x - 717 - - - - - x - 718 - - - - - x - 719 - - - - - x - 720 - - - - - x - 721 - - - - - x - 722 - - - - - x - 723 - - - - - x - 724 - - - - - x - 725 - - - - - x - 726 - - - - - x - 727 - - - - - x - 728 - - - - - x - 729 - - - - - x - 730 - - - - - x - 731 - - - - - x - 732 - - - - - x - 733 - - - - - x - 734 - - - - - x - 735 - - - - - x - 736 - - - - - x - 737 - - - - - x - 738 - - - - - x - 739 - - - - - x - 740 - - - - - x - 741 - - - - - x - 742 - - - - - x - 743 - - - - - x - 744 - - - - - x - 745 - - - - - x - 746 - - - - - x - 747 - - - - - x - 748 - - - - - x - 749 - - - - - x - 750 - - - - - x - 751 - - - - - x - 752 - - - - - x - 753 - - - - - x - 754 - - - - - x - 755 - - - - - x - 756 - - - - - x - 757 - - - - - x - 758 - - - - - x - 759 - - - - - x - 760 - - - - - x - 761 - - - - - x - 762 - - - - - x - 763 - - - - - x - 764 - - - - - x - 765 - - - - - x - 766 - - - - - x - 767 - - - - - x - 768 - - - - - x - 769 - - - - - x - 770 - - - - - x - 771 - - - - - x - 772 - - - - - x - 773 - - - - - x - 774 - - - - - x - 775 - - - - - x - 776 - - - - - x - 777 - - - - - x - 778 - - - - - x - 779 - - - - - x - 780 - - - - - x - 781 - - - - - x - 782 - - - - - x - 783 - - - - - x - 784 - - - - - x - 785 - - - - - x - 786 - - - - - x - 787 - - - - - x - 788 - - - - - x - 789 - - - - - x - 790 - - - - - x - 791 - - - - - x - 792 - - - - - x - 793 - - - - - x - 794 - - - - - x - 795 - - - - - x - 796 - - - - - x - 797 - - - - - x - 798 - - - - - x - 799 - - - - - x - 800 - - - - - x - 801 - - - - - x - 802 - - - - - x - 803 - - - - - x - 804 - - - - - x - 805 - - - - - x - 806 - - - - - x - 807 - - - - - x - 808 - - - - - x - 809 - - - - - x - 810 - - - - - x - 811 - - - - - x - 812 - - - - - x - 813 - - - - - x - 814 - - - - - x - 815 - - - - - x - 816 - - - - - x - 817 - - - - - x - 818 - - - - - x - 819 - - - - - x - 820 - - - - - x - 821 - - - - - x - 822 - - - - - x - 823 - - - - - x - 824 - - - - - x - 825 - - - - - x - 826 - - - - - x - 827 - - - - - x - 828 - - - - - x - 829 - - - - - x - 830 - - - - - x - 831 - - - - - x - 832 - - - - - x - 833 - - - - - x - 834 - - - - - x - 835 - - - - - x - 836 - - - - - x - 837 - - - - - x - 838 - - - - - x - 839 - - - - - x - 840 - - - - - x - 841 - - - - - x - 842 - - - - - x - 843 - - - - - x - 844 - - - - - x - 845 - - - - - x - 846 - - - - - x - 847 - - - - - x - 848 - - - - - x - 849 - - - - - x - 850 - - - - - x - 851 - - - - - x - 852 - - - - - x - 853 - - - - - x - 854 - - - - - x - 855 - - - - - x - 856 - - - - - x - 857 - - - - - x - 858 - - - - - x - 859 - - - - - x - 860 - - - - - x - 861 - - - - - x - 862 - - - - - x - 863 - - - - - x - 864 - - - - - x - 865 - - - - - x - 866 - - - - - x - 867 - - - - - x - 868 - - - - - x - 869 - - - - - x - 870 - - - - - x - 871 - - - - - x - 872 - - - - - x - 873 - - - - - x - 874 - - - - - x - 875 - - - - - x - 876 - - - - - x - 877 - - - - - x - 878 - - - - - x - 879 - - - - - x - 880 - - - - - x - 881 - - - - - x - 882 - - - - - x - 883 - - - - - x - 884 - - - - - x - 885 - - - - - x - 886 - - - - - x - 887 - - - - - x - 888 - - - - - x - 889 - - - - - x - 890 - - - - - x - 891 - - - - - x - 892 - - - - - x - 893 - - - - - x - 894 - - - - - x - 895 - - - - - x - 896 - - - - - x - 897 - - - - - x - 898 - - - - - x - 899 - - - - - x - 900 - - - - - x - 901 - - - - - x - 902 - - - - - x - 903 - - - - - x - 904 - - - - - x - 905 - - - - - x - 906 - - - - - x - 907 - - - - - x - 908 - - - - - x - 909 - - - - - x - 910 - - - - - x - 911 - - - - - x - 912 - - - - - x - 913 - - - - - x - 914 - - - - - x - 915 - - - - - x - 916 - - - - - x - 917 - - - - - x - 918 - - - - - x - 919 - - - - - x - 920 - - - - - x - 921 - - - - - x - 922 - - - - - x - 923 - - - - - x - 924 - - - - - x - 925 - - - - - x - 926 - - - - - x - 927 - - - - - x - 928 - - - - - x - 929 - - - - - x - 930 - - - - - x - 931 - - - - - x - 932 - - - - - x - 933 - - - - - x - 934 - - - - - x - 935 - - - - - x - 936 - - - - - x - 937 - - - - - x - 938 - - - - - x - 939 - - - - - x - 940 - - - - - x - 941 - - - - - x - 942 - - - - - x - 943 - - - - - x - 944 - - - - - x - 945 - - - - - x - 946 - - - - - x - 947 - - - - - x - 948 - - - - - x - 949 - - - - - x - 950 - - - - - x - 951 - - - - - x - 952 - - - - - x - 953 - - - - - x - 954 - - - - - x - 955 - - - - - x - 956 - - - - - x - 957 - - - - - x - 958 - - - - - x - 959 - - - - - x - 960 - - - - - x - 961 - - - - - x - 962 - - - - - x - 963 - - - - - x - 964 - - - - - x - 965 - - - - - x - 966 - - - - - x - 967 - - - - - x - 968 - - - - - x - 969 - - - - - x - 970 - - - - - x - 971 - - - - - x - 972 - - - - - x - 973 - - - - - x - 974 - - - - - x - 975 - - - - - x - 976 - - - - - x - 977 - - - - - x - 978 - - - - - x - 979 - - - - - x - 980 - - - - - x - 981 - - - - - x - 982 - - - - - x - 983 - - - - - x - 984 - - - - - x - 985 - - - - - x - 986 - - - - - x - 987 - - - - - x - 988 - - - - - x - 989 - - - - - x - 990 - - - - - x - 991 - - - - - x - 992 - - - - - x - 993 - - - - - x - 994 - - - - - x - 995 - - - - - x - 996 - - - - - x - 997 - - - - - x - 998 - - - - - x - 999 - - - - - x - 1000 - - - - - x - 1001 - - - - - x - 1002 - - - - - x - 1003 - - - - - x - 1004 - - - - - x - 1005 - - - - - x - 1006 - - - - - x - 1007 - - - - - x - 1008 - - - - - x - 1009 - - - - - x - 1010 - - - - - x - 1011 - - - - - x - 1012 - - - - - x - 1013 - - - - - x - 1014 - - - - - x - 1015 - - - - - x - 1016 - - - - - x - 1017 - - - - - x - 1018 - - - - - x - 1019 - - - - - x - 1020 - - - - - x - 1021 - - - - - x - 1022 - - - - - x - 1023 - - - - - x - 1024 - - - - - x - 1025 - - - - - x - 1026 - - - - - x - 1027 - - - - - x - 1028 - - - - - x - 1029 - - - - - x - 1030 - - - - - x - 1031 - - - - - x - 1032 - - - - - x - 1033 - - - - - x - 1034 - - - - - x - 1035 - - - - - x - 1036 - - - - - x - 1037 - - - - - x - 1038 - - - - - x - 1039 - - - - - x - 1040 - - - - - x - 1041 - - - - - x - 1042 - - - - - x - 1043 - - - - - x - 1044 - - - - - x - 1045 - - - - - x - 1046 - - - - - x - 1047 - - - - - x - 1048 - - - - - x - 1049 - - - - - x - 1050 - - - - - x - 1051 - - - - - x - 1052 - - - - - x - 1053 - - - - - x - 1054 - - - - - x - 1055 - - - - - x - 1056 - - - - - x - 1057 - - - - - x - 1058 - - - - - x - 1059 - - - - - x - 1060 - - - - - x - 1061 - - - - - x - 1062 - - - - - x - 1063 - - - - - x - 1064 - - - - - x - 1065 - - - - - x - 1066 - - - - - x - 1067 - - - - - x - 1068 - - - - - x - 1069 - - - - - x - 1070 - - - - - x - 1071 - - - - - x - 1072 - - - - - x - 1073 - - - - - x - 1074 - - - - - x - 1075 - - - - - x - 1076 - - - - - x - 1077 - - - - - x - 1078 - - - - - x - 1079 - - - - - x - 1080 - - - - - x - 1081 - - - - - x - 1082 - - - - - x - 1083 - - - - - x - 1084 - - - - - x - 1085 - - - - - x - 1086 - - - - - x - 1087 - - - - - x - 1088 - - - - - x - 1089 - - - - - x - 1090 - - - - - x - 1091 - - - - - x - 1092 - - - - - x - 1093 - - - - - x - 1094 - - - - - x - 1095 - - - - - x - 1096 - - - - - x - 1097 - - - - - x - 1098 - - - - - x - 1099 - - - - - x - 1100 - - - - - x - 1101 - - - - - x - 1102 - - - - - x - 1103 - - - - - x - 1104 - - - - - x - 1105 - - - - - x - 1106 - - - - - x - 1107 - - - - - x - 1108 - - - - - x - 1109 - - - - - x - 1110 - - - - - x - 1111 - - - - - x - 1112 - - - - - x - 1113 - - - - - x - 1114 - - - - - x - 1115 - - - - - x - 1116 - - - - - x - 1117 - - - - - x - 1118 - - - - - x - 1119 - - - - - x - 1120 - - - - - x - 1121 - - - - - x - 1122 - - - - - x - 1123 - - - - - x - 1124 - - - - - x - 1125 - - - - - x - 1126 - - - - - x - 1127 - - - - - x - 1128 - - - - - x - 1129 - - - - - x - 1130 - - - - - x - 1131 - - - - - x - 1132 - - - - - x - 1133 - - - - - x - 1134 - - - - - x - 1135 - - - - - x - 1136 - - - - - x - 1137 - - - - - x - 1138 - - - - - x - 1139 - - - - - x - 1140 - - - - - x - 1141 - - - - - x - 1142 - - - - - x - 1143 - - - - - x - 1144 - - - - - x - 1145 - - - - - x - 1146 - - - - - x - 1147 - - - - - x - 1148 - - - - - x - 1149 - - - - - x - 1150 - - - - - x - 1151 - - - - - x - 1152 - - - - - x - 1153 - - - - - x - 1154 - - - - - x - 1155 - - - - - x - 1156 - - - - - x - 1157 - - - - - x - 1158 - - - - - x - 1159 - - - - - x - 1160 - - - - - x - 1161 - - - - - x - 1162 - - - - - x - 1163 - - - - - x - 1164 - - - - - x - 1165 - - - - - x - 1166 - - - - - x - 1167 - - - - - x - 1168 - - - - - x - 1169 - - - - - x - 1170 - - - - - x - 1171 - - - - - x - 1172 - - - - - x - 1173 - - - - - x - 1174 - - - - - x - 1175 - - - - - x - 1176 - - - - - x - 1177 - - - - - x - 1178 - - - - - x - 1179 - - - - - x - 1180 - - - - - x - 1181 - - - - - x - 1182 - - - - - x - 1183 - - - - - x - 1184 - - - - - x - 1185 - - - - - x - 1186 - - - - - x - 1187 - - - - - x - 1188 - - - - - x - 1189 - - - - - x - 1190 - - - - - x - 1191 - - - - - x - 1192 - - - - - x - 1193 - - - - - x - 1194 - - - - - x - 1195 - - - - - x - 1196 - - - - - x - 1197 - - - - - x - 1198 - - - - - x - 1199 - - - - - x - 1200 - - - - - x - 1201 - - - - - x - 1202 - - - - - x - 1203 - - - - - x - 1204 - - - - - x - 1205 - - - - - x - 1206 - - - - - x - 1207 - - - - - x - 1208 - - - - - x - 1209 - - - - - x - 1210 - - - - - x - 1211 - - - - - x - 1212 - - - - - x - 1213 - - - - - x - 1214 - - - - - x - 1215 - - - - - x - 1216 - - - - - x - 1217 - - - - - x - 1218 - - - - - x - 1219 - - - - - x - 1220 - - - - - x - 1221 - - - - - x - 1222 - - - - - x - 1223 - - - - - x - 1224 - - - - - x - 1225 - - - - - x - 1226 - - - - - x - 1227 - - - - - x - 1228 - - - - - x - 1229 - - - - - x - 1230 - - - - - x - 1231 - - - - - x - 1232 - - - - - x - 1233 - - - - - x - 1234 - - - - - x - 1235 - - - - - x - 1236 - - - - - x - 1237 - - - - - x - 1238 - - - - - x - 1239 - - - - - x - 1240 - - - - - x - 1241 - - - - - x - 1242 - - - - - x - 1243 - - - - - x - 1244 - - - - - x - 1245 - - - - - x - 1246 - - - - - x - 1247 - - - - - x - 1248 - - - - - x - 1249 - - - - - x - 1250 - - - - - x - 1251 - - - - - x - 1252 - - - - - x - 1253 - - - - - x - 1254 - - - - - x - 1255 - - - - - x - 1256 - - - - - x - 1257 - - - - - x - 1258 - - - - - x - 1259 - - - - - x - 1260 - - - - - x - 1261 - - - - - x - 1262 - - - - - x - 1263 - - - - - x - 1264 - - - - - x - 1265 - - - - - x - 1266 - - - - - x - 1267 - - - - - x - 1268 - - - - - x - 1269 - - - - - x - 1270 - - - - - x - 1271 - - - - - x - 1272 - - - - - x - 1273 - - - - - x - 1274 - - - - - x - 1275 - - - - - x - 1276 - - - - - x - 1277 - - - - - x - 1278 - - - - - x - 1279 - - - - - x - 1280 - - - - - x - 1281 - - - - - x - 1282 - - - - - x - 1283 - - - - - x - 1284 - - - - - x - 1285 - - - - - x - 1286 - - - - - x - 1287 - - - - - x - 1288 - - - - - x - 1289 - - - - - x - 1290 - - - - - x - 1291 - - - - - x - 1292 - - - - - x - 1293 - - - - - x - 1294 - - - - - x - 1295 - - - - - x - 1296 - - - - - x - 1297 - - - - - x - 1298 - - - - - x - 1299 - - - - - x - 1300 - - - - - x - 1301 - - - - - x - 1302 - - - - - x - 1303 - - - - - x - 1304 - - - - - x - 1305 - - - - - x - 1306 - - - - - x - 1307 - - - - - x - 1308 - - - - - x - 1309 - - - - - x - 1310 - - - - - x - 1311 - - - - - x - 1312 - - - - - x - 1313 - - - - - x - 1314 - - - - - x - 1315 - - - - - x - 1316 - - - - - x - 1317 - - - - - x - 1318 - - - - - x - 1319 - - - - - x - 1320 - - - - - x - 1321 - - - - - x - 1322 - - - - - x - 1323 - - - - - x - 1324 - - - - - x - 1325 - - - - - x - 1326 - - - - - x - 1327 - - - - - x - 1328 - - - - - x - 1329 - - - - - x - 1330 - - - - - x - 1331 - - - - - x - 1332 - - - - - x - 1333 - - - - - x - 1334 - - - - - x - 1335 - - - - - x - 1336 - - - - - x - 1337 - - - - - x - 1338 - - - - - x - 1339 - - - - - x - 1340 - - - - - x - 1341 - - - - - x - 1342 - - - - - x - 1343 - - - - - x - 1344 - - - - - x - 1345 - - - - - x - 1346 - - - - - x - 1347 - - - - - x - 1348 - - - - - x - 1349 - - - - - x - 1350 - - - - - x - 1351 - - - - - x - 1352 - - - - - x - 1353 - - - - - x - 1354 - - - - - x - 1355 - - - - - x - 1356 - - - - - x - 1357 - - - - - x - 1358 - - - - - x - 1359 - - - - - x - 1360 - - - - - x - 1361 - - - - - x - 1362 - - - - - x - 1363 - - - - - x - 1364 - - - - - x - 1365 - - - - - x - 1366 - - - - - x - 1367 - - - - - x - 1368 - - - - - x - 1369 - - - - - x - 1370 - - - - - x - 1371 - - - - - x - 1372 - - - - - x - 1373 - - - - - x - 1374 - - - - - x - 1375 - - - - - x - 1376 - - - - - x - 1377 - - - - - x - 1378 - - - - - x - 1379 - - - - - x - 1380 - - - - - x - 1381 - - - - - x - 1382 - - - - - x - 1383 - - - - - x - 1384 - - - - - x - 1385 - - - - - x - 1386 - - - - - x - 1387 - - - - - x - 1388 - - - - - x - 1389 - - - - - x - 1390 - - - - - x - 1391 - - - - - x - 1392 - - - - - x - 1393 - - - - - x - 1394 - - - - - x - 1395 - - - - - x - 1396 - - - - - x - 1397 - - - - - x - 1398 - - - - - x - 1399 - - - - - x - 1400 - - - - - x - 1401 - - - - - x - 1402 - - - - - x - 1403 - - - - - x - 1404 - - - - - x - 1405 - - - - - x - 1406 - - - - - x - 1407 - - - - - x - 1408 - - - - - x - 1409 - - - - - x - 1410 - - - - - x - 1411 - - - - - x - 1412 - - - - - x - 1413 - - - - - x - 1414 - - - - - x - 1415 - - - - - x - 1416 - - - - - x - 1417 - - - - - x - 1418 - - - - - x - 1419 - - - - - x - 1420 - - - - - x - 1421 - - - - - x - 1422 - - - - - x - 1423 - - - - - x - 1424 - - - - - x - 1425 - - - - - x - 1426 - - - - - x - 1427 - - - - - x - 1428 - - - - - x - 1429 - - - - - x - 1430 - - - - - x - 1431 - - - - - x - 1432 - - - - - x - 1433 - - - - - x - 1434 - - - - - x - 1435 - - - - - x - 1436 - - - - - x - 1437 - - - - - x - 1438 - - - - - x - 1439 - - - - - x - 1440 - - - - - x - 1441 - - - - - x - 1442 - - - - - x - 1443 - - - - - x - 1444 - - - - - x - 1445 - - - - - x - 1446 - - - - - x - 1447 - - - - - x - 1448 - - - - - x - 1449 - - - - - x - 1450 - - - - - x - 1451 - - - - - x - 1452 - - - - - x - 1453 - - - - - x - 1454 - - - - - x - 1455 - - - - - x - 1456 - - - - - x - 1457 - - - - - x - 1458 - - - - - x - 1459 - - - - - x - 1460 - - - - - x - 1461 - - - - - x - 1462 - - - - - x - 1463 - - - - - x - 1464 - - - - - x - 1465 - - - - - x - 1466 - - - - - x - 1467 - - - - - x - 1468 - - - - - x - 1469 - - - - - x - 1470 - - - - - x - 1471 - - - - - x - 1472 - - - - - x - 1473 - - - - - x - 1474 - - - - - x - 1475 - - - - - x - 1476 - - - - - x - 1477 - - - - - x - 1478 - - - - - x - 1479 - - - - - x - 1480 - - - - - x - 1481 - - - - - x - 1482 - - - - - x - 1483 - - - - - x - 1484 - - - - - x - 1485 - - - - - x - 1486 - - - - - x - 1487 - - - - - x - 1488 - - - - - x - 1489 - - - - - x - 1490 - - - - - x - 1491 - - - - - x - 1492 - - - - - x - 1493 - - - - - x - 1494 - - - - - x - 1495 - - - - - x - 1496 - - - - - x - 1497 - - - - - x - 1498 - - - - - x - 1499 - - - - - x - 1500 - - - - - x - 1501 - - - - - x - 1502 - - - - - x - 1503 - - - - - x - 1504 - - - - - x - 1505 - - - - - x - 1506 - - - - - x - 1507 - - - - - x - 1508 - - - - - x - 1509 - - - - - x - 1510 - - - - - x - 1511 - - - - - x - 1512 - - - - - x - 1513 - - - - - x - 1514 - - - - - x - 1515 - - - - - x - 1516 - - - - - x - 1517 - - - - - x - 1518 - - - - - x - 1519 - - - - - x - 1520 - - - - - x - 1521 - - - - - x - 1522 - - - - - x - 1523 - - - - - x - 1524 - - - - - x - 1525 - - - - - x - 1526 - - - - - x - 1527 - - - - - x - 1528 - - - - - x - 1529 - - - - - x - 1530 - - - - - x - 1531 - - - - - x - 1532 - - - - - x - 1533 - - - - - x - 1534 - - - - - x - 1535 - - - - - x - 1536 - - - - - x - 1537 - - - - - x - 1538 - - - - - x - 1539 - - - - - x - 1540 - - - - - x - 1541 - - - - - x - 1542 - - - - - x - 1543 - - - - - x - 1544 - - - - - x - 1545 - - - - - x - 1546 - - - - - x - 1547 - - - - - x - 1548 - - - - - x - 1549 - - - - - x - 1550 - - - - - x - 1551 - - - - - x - 1552 - - - - - x - 1553 - - - - - x - 1554 - - - - - x - 1555 - - - - - x - 1556 - - - - - x - 1557 - - - - - x - 1558 - - - - - x - 1559 - - - - - x - 1560 - - - - - x - 1561 - - - - - x - 1562 - - - - - x - 1563 - - - - - x - 1564 - - - - - x - 1565 - - - - - x - 1566 - - - - - x - 1567 - - - - - x - 1568 - - - - - x - 1569 - - - - - x - 1570 - - - - - x - 1571 - - - - - x - 1572 - - - - - x - 1573 - - - - - x - 1574 - - - - - x - 1575 - - - - - x - 1576 - - - - - x - 1577 - - - - - x - 1578 - - - - - x - 1579 - - - - - x - 1580 - - - - - x - 1581 - - - - - x - 1582 - - - - - x - 1583 - - - - - x - 1584 - - - - - x - 1585 - - - - - x - 1586 - - - - - x - 1587 - - - - - x - 1588 - - - - - x - 1589 - - - - - x - 1590 - - - - - x - 1591 - - - - - x - 1592 - - - - - x - 1593 - - - - - x - 1594 - - - - - x - 1595 - - - - - x - 1596 - - - - - x - 1597 - - - - - x - 1598 - - - - - x - 1599 - - - - - x - 1600 - - - - - x - 1601 - - - - - x - 1602 - - - - - x - 1603 - - - - - x - 1604 - - - - - x - 1605 - - - - - x - 1606 - - - - - x - 1607 - - - - - x - 1608 - - - - - x - 1609 - - - - - x - 1610 - - - - - x - 1611 - - - - - x - 1612 - - - - - x - 1613 - - - - - x - 1614 - - - - - x - 1615 - - - - - x - 1616 - - - - - x - 1617 - - - - - x - 1618 - - - - - x - 1619 - - - - - x - 1620 - - - - - x - 1621 - - - - - x - 1622 - - - - - x - 1623 - - - - - x - 1624 - - - - - x - 1625 - - - - - x - 1626 - - - - - x - 1627 - - - - - x - 1628 - - - - - x - 1629 - - - - - x - 1630 - - - - - x - 1631 - - - - - x - 1632 - - - - - x - 1633 - - - - - x - 1634 - - - - - x - 1635 - - - - - x - 1636 - - - - - x - 1637 - - - - - x - 1638 - - - - - x - 1639 - - - - - x - 1640 - - - - - x - 1641 - - - - - x - 1642 - - - - - x - 1643 - - - - - x - 1644 - - - - - x - 1645 - - - - - x - 1646 - - - - - x - 1647 - - - - - x - 1648 - - - - - x - 1649 - - - - - x - 1650 - - - - - x - 1651 - - - - - x - 1652 - - - - - x - 1653 - - - - - x - 1654 - - - - - x - 1655 - - - - - x - 1656 - - - - - x - 1657 - - - - - x - 1658 - - - - - x - 1659 - - - - - x - 1660 - - - - - x - 1661 - - - - - x - 1662 - - - - - x - 1663 - - - - - x - 1664 - - - - - x - 1665 - - - - - x - 1666 - - - - - x - 1667 - - - - - x - 1668 - - - - - x - 1669 - - - - - x - 1670 - - - - - x - 1671 - - - - - x - 1672 - - - - - x - 1673 - - - - - x - 1674 - - - - - x - 1675 - - - - - x - 1676 - - - - - x - 1677 - - - - - x - 1678 - - - - - x - 1679 - - - - - x - 1680 - - - - - x - 1681 - - - - - x - 1682 - - - - - x - 1683 - - - - - x - 1684 - - - - - x - 1685 - - - - - x - 1686 - - - - - x - 1687 - - - - - x - 1688 - - - - - x - 1689 - - - - - x - 1690 - - - - - x - 1691 - - - - - x - 1692 - - - - - x - 1693 - - - - - x - 1694 - - - - - x - 1695 - - - - - x - 1696 - - - - - x - 1697 - - - - - x - 1698 - - - - - x - 1699 - - - - - x - 1700 - - - - - x - 1701 - - - - - x - 1702 - - - - - x - 1703 - - - - - x - 1704 - - - - - x - 1705 - - - - - x - 1706 - - - - - x - 1707 - - - - - x - 1708 - - - - - x - 1709 - - - - - x - 1710 - - - - - x - 1711 - - - - - x - 1712 - - - - - x - 1713 - - - - - x - 1714 - - - - - x - 1715 - - - - - x - 1716 - - - - - x - 1717 - - - - - x - 1718 - - - - - x - 1719 - - - - - x - 1720 - - - - - x - 1721 - - - - - x - 1722 - - - - - x - 1723 - - - - - x - 1724 - - - - - x - 1725 - - - - - x - 1726 - - - - - x - 1727 - - - - - x - 1728 - - - - - x - 1729 - - - - - x - 1730 - - - - - x - 1731 - - - - - x - 1732 - - - - - x - 1733 - - - - - x - 1734 - - - - - x - 1735 - - - - - x - 1736 - - - - - x - 1737 - - - - - x - 1738 - - - - - x - 1739 - - - - - x - 1740 - - - - - x - 1741 - - - - - x - 1742 - - - - - x - 1743 - - - - - x - 1744 - - - - - x - 1745 - - - - - x - 1746 - - - - - x - 1747 - - - - - x - 1748 - - - - - x - 1749 - - - - - x - 1750 - - - - - x - 1751 - - - - - x - 1752 - - - - - x - 1753 - - - - - x - 1754 - - - - - x - 1755 - - - - - x - 1756 - - - - - x - 1757 - - - - - x - 1758 - - - - - x - 1759 - - - - - x - 1760 - - - - - x - 1761 - - - - - x - 1762 - - - - - x - 1763 - - - - - x - 1764 - - - - - x - 1765 - - - - - x - 1766 - - - - - x - 1767 - - - - - x - 1768 - - - - - x - 1769 - - - - - x - 1770 - - - - - x - 1771 - - - - - x - 1772 - - - - - x - 1773 - - - - - x - 1774 - - - - - x - 1775 - - - - - x - 1776 - - - - - x - 1777 - - - - - x - 1778 - - - - - x - 1779 - - - - - x - 1780 - - - - - x - 1781 - - - - - x - 1782 - - - - - x - 1783 - - - - - x - 1784 - - - - - x - 1785 - - - - - x - 1786 - - - - - x - 1787 - - - - - x - 1788 - - - - - x - 1789 - - - - - x - 1790 - - - - - x - 1791 - - - - - x - 1792 - - - - - x - 1793 - - - - - x - 1794 - - - - - x - 1795 - - - - - x - 1796 - - - - - x - 1797 - - - - - x - 1798 - - - - - x - 1799 - - - - - x - 1800 - - - - - x - 1801 - - - - - x - 1802 - - - - - x - 1803 - - - - - x - 1804 - - - - - x - 1805 - - - - - x - 1806 - - - - - x - 1807 - - - - - x - 1808 - - - - - x - 1809 - - - - - x - 1810 - - - - - x - 1811 - - - - - x - 1812 - - - - - x - 1813 - - - - - x - 1814 - - - - - x - 1815 - - - - - x - 1816 - - - - - x - 1817 - - - - - x - 1818 - - - - - x - 1819 - - - - - x - 1820 - - - - - x - 1821 - - - - - x - 1822 - - - - - x - 1823 - - - - - x - 1824 - - - - - x - 1825 - - - - - x - 1826 - - - - - x - 1827 - - - - - x - 1828 - - - - - x - 1829 - - - - - x - 1830 - - - - - x - 1831 - - - - - x - 1832 - - - - - x - 1833 - - - - - x - 1834 - - - - - x - 1835 - - - - - x - 1836 - - - - - x - 1837 - - - - - x - 1838 - - - - - x - 1839 - - - - - x - 1840 - - - - - x - 1841 - - - - - x - 1842 - - - - - x - 1843 - - - - - x - 1844 - - - - - x - 1845 - - - - - x - 1846 - - - - - x - 1847 - - - - - x - 1848 - - - - - x - 1849 - - - - - x - 1850 - - - - - x - 1851 - - - - - x - 1852 - - - - - x - 1853 - - - - - x - 1854 - - - - - x - 1855 - - - - - x - 1856 - - - - - x - 1857 - - - - - x - 1858 - - - - - x - 1859 - - - - - x - 1860 - - - - - x - 1861 - - - - - x - 1862 - - - - - x - 1863 - - - - - x - 1864 - - - - - x - 1865 - - - - - x - 1866 - - - - - x - 1867 - - - - - x - 1868 - - - - - x - 1869 - - - - - x - 1870 - - - - - x - 1871 - - - - - x - 1872 - - - - - x - 1873 - - - - - x - 1874 - - - - - x - 1875 - - - - - x - 1876 - - - - - x - 1877 - - - - - x - 1878 - - - - - x - 1879 - - - - - x - 1880 - - - - - x - 1881 - - - - - x - 1882 - - - - - x - 1883 - - - - - x - 1884 - - - - - x - 1885 - - - - - x - 1886 - - - - - x - 1887 - - - - - x - 1888 - - - - - x - 1889 - - - - - x - 1890 - - - - - x - 1891 - - - - - x - 1892 - - - - - x - 1893 - - - - - x - 1894 - - - - - x - 1895 - - - - - x - 1896 - - - - - x - 1897 - - - - - x - 1898 - - - - - x - 1899 - - - - - x - 1900 - - - - - x - 1901 - - - - - x - 1902 - - - - - x - 1903 - - - - - x - 1904 - - - - - x - 1905 - - - - - x - 1906 - - - - - x - 1907 - - - - - x - 1908 - - - - - x - 1909 - - - - - x - 1910 - - - - - x - 1911 - - - - - x - 1912 - - - - - x - 1913 - - - - - x - 1914 - - - - - x - 1915 - - - - - x - 1916 - - - - - x - 1917 - - - - - x - 1918 - - - - - x - 1919 - - - - - x - 1920 - - - - - x - 1921 - - - - - x - 1922 - - - - - x - 1923 - - - - - x - 1924 - - - - - x - 1925 - - - - - x - 1926 - - - - - x - 1927 - - - - - x - 1928 - - - - - x - 1929 - - - - - x - 1930 - - - - - x - 1931 - - - - - x - 1932 - - - - - x - 1933 - - - - - x - 1934 - - - - - x - 1935 - - - - - x - 1936 - - - - - x - 1937 - - - - - x - 1938 - - - - - x - 1939 - - - - - x - 1940 - - - - - x - 1941 - - - - - x - 1942 - - - - - x - 1943 - - - - - x - 1944 - - - - - x - 1945 - - - - - x - 1946 - - - - - x - 1947 - - - - - x - 1948 - - - - - x - 1949 - - - - - x - 1950 - - - - - x - 1951 - - - - - x - 1952 - - - - - x - 1953 - - - - - x - 1954 - - - - - x - 1955 - - - - - x - 1956 - - - - - x - 1957 - - - - - x - 1958 - - - - - x - 1959 - - - - - x - 1960 - - - - - x - 1961 - - - - - x - 1962 - - - - - x - 1963 - - - - - x - 1964 - - - - - x - 1965 - - - - - x - 1966 - - - - - x - 1967 - - - - - x - 1968 - - - - - x - 1969 - - - - - x - 1970 - - - - - x - 1971 - - - - - x - 1972 - - - - - x - 1973 - - - - - x - 1974 - - - - - x - 1975 - - - - - x - 1976 - - - - - x - 1977 - - - - - x - 1978 - - - - - x - 1979 - - - - - x - 1980 - - - - - x - 1981 - - - - - x - 1982 - - - - - x - 1983 - - - - - x - 1984 - - - - - x - 1985 - - - - - x - 1986 - - - - - x - 1987 - - - - - x - 1988 - - - - - x - 1989 - - - - - x - 1990 - - - - - x - 1991 - - - - - x - 1992 - - - - - x - 1993 - - - - - x - 1994 - - - - - x - 1995 - - - - - x - 1996 - - - - - x - 1997 - - - - - x - 1998 - - - - - x - 1999 - - - - - x - 2000 - - - - - x - 2001 - - - - - x - 2002 - - - - - x - 2003 - - - - - x - 2004 - - - - - x - 2005 - - - - - x - 2006 - - - - - x - 2007 - - - - - x - 2008 - - - - - x - 2009 - - - - - x - 2010 - - - - - x - 2011 - - - - - x - 2012 - - - - - x - 2013 - - - - - x - 2014 - - - - - x - 2015 - - - - - x - 2016 - - - - - x - 2017 - - - - - x - 2018 - - - - - x - 2019 - - - - - x - 2020 - - - - - x - 2021 - - - - - x - 2022 - - - - - x - 2023 - - - - - x - 2024 - - - - - x - 2025 - - - - - x - 2026 - - - - - x - 2027 - - - - - x - 2028 - - - - - x - 2029 - - - - - x - 2030 - - - - - x - 2031 - - - - - x - 2032 - - - - - x - 2033 - - - - - x - 2034 - - - - - x - 2035 - - - - - x - 2036 - - - - - x - 2037 - - - - - x - 2038 - - - - - x - 2039 - - - - - x - 2040 - - - - - x - 2041 - - - - - x - 2042 - - - - - x - 2043 - - - - - x - 2044 - - - - - x - 2045 - - - - - x - 2046 - - - - - x - 2047 - - - - - x - 2048 - - - - - x - 2049 - - - - - x - 2050 - - - - - x - 2051 - - - - - x - 2052 - - - - - x - 2053 - - - - - x - 2054 - - - - - x - 2055 - - - - - x - 2056 - - - - - x - 2057 - - - - - x - 2058 - - - - - x - 2059 - - - - - x - 2060 - - - - - x - 2061 - - - - - x - 2062 - - - - - x - 2063 - - - - - x - 2064 - - - - - x - 2065 - - - - - x - 2066 - - - - - x - 2067 - - - - - x - 2068 - - - - - x - 2069 - - - - - x - 2070 - - - - - x - 2071 - - - - - x - 2072 - - - - - x - 2073 - - - - - x - 2074 - - - - - x - 2075 - - - - - x - 2076 - - - - - x - 2077 - - - - - x - 2078 - - - - - x - 2079 - - - - - x - 2080 - - - - - x - 2081 - - - - - x - 2082 - - - - - x - 2083 - - - - - x - 2084 - - - - - x - 2085 - - - - - x - 2086 - - - - - x - 2087 - - - - - x - 2088 - - - - - x - 2089 - - - - - x - 2090 - - - - - x - 2091 - - - - - x - 2092 - - - - - x - 2093 - - - - - x - 2094 - - - - - x - 2095 - - - - - x - 2096 - - - - - x - 2097 - - - - - x - 2098 - - - - - x - 2099 - - - - - x - 2100 - - - - - x - 2101 - - - - - x - 2102 - - - - - x - 2103 - - - - - x - 2104 - - - - - x - 2105 - - - - - x - 2106 - - - - - x - 2107 - - - - - x - 2108 - - - - - x - 2109 - - - - - x - 2110 - - - - - x - 2111 - - - - - x - 2112 - - - - - x - 2113 - - - - - x - 2114 - - - - - x - 2115 - - - - - x - 2116 - - - - - x - 2117 - - - - - x - 2118 - - - - - x - 2119 - - - - - x - 2120 - - - - - x - 2121 - - - - - x - 2122 - - - - - x - 2123 - - - - - x - 2124 - - - - - x - 2125 - - - - - x - 2126 - - - - - x - 2127 - - - - - x - 2128 - - - - - x - 2129 - - - - - x - 2130 - - - - - x - 2131 - - - - - x - 2132 - - - - - x - 2133 - - - - - x - 2134 - - - - - x - 2135 - - - - - x - 2136 - - - - - x - 2137 - - - - - x - 2138 - - - - - x - 2139 - - - - - x - 2140 - - - - - x - 2141 - - - - - x - 2142 - - - - - x - 2143 - - - - - x - 2144 - - - - - x - 2145 - - - - - x - 2146 - - - - - x - 2147 - - - - - x - 2148 - - - - - x - 2149 - - - - - x - 2150 - - - - - x - 2151 - - - - - x - 2152 - - - - - x - 2153 - - - - - x - 2154 - - - - - x - 2155 - - - - - x - 2156 - - - - - x - 2157 - - - - - x - 2158 - - - - - x - 2159 - - - - - x - 2160 - - - - - x - 2161 - - - - - x - 2162 - - - - - x - 2163 - - - - - x - 2164 - - - - - x - 2165 - - - - - x - 2166 - - - - - x - 2167 - - - - - x - 2168 - - - - - x - 2169 - - - - - x - 2170 - - - - - x - 2171 - - - - - x - 2172 - - - - - x - 2173 - - - - - x - 2174 - - - - - x - 2175 - - - - - x - 2176 - - - - - x - 2177 - - - - - x - 2178 - - - - - x - 2179 - - - - - x - 2180 - - - - - x - 2181 - - - - - x - 2182 - - - - - x - 2183 - - - - - x - 2184 - - - - - x - 2185 - - - - - x - 2186 - - - - - x - 2187 - - - - - x - 2188 - - - - - x - 2189 - - - - - x - 2190 - - - - - x - 2191 - - - - - x - 2192 - - - - - x - 2193 - - - - - x - 2194 - - - - - x - 2195 - - - - - x - 2196 - - - - - x - 2197 - - - - - x - 2198 - - - - - x - 2199 - - - - - x - 2200 - - - - - x - 2201 - - - - - x - 2202 - - - - - x - 2203 - - - - - x - 2204 - - - - - x - 2205 - - - - - x - 2206 - - - - - x - 2207 - - - - - x - 2208 - - - - - x - 2209 - - - - - x - 2210 - - - - - x - 2211 - - - - - x - 2212 - - - - - x - 2213 - - - - - x - 2214 - - - - - x - 2215 - - - - - x - 2216 - - - - - x - 2217 - - - - - x - 2218 - - - - - x - 2219 - - - - - x - 2220 - - - - - x - 2221 - - - - - x - 2222 - - - - - x - 2223 - - - - - x - 2224 - - - - - x - 2225 - - - - - x - 2226 - - - - - x - 2227 - - - - - x - 2228 - - - - - x - 2229 - - - - - x - 2230 - - - - - x - 2231 - - - - - x - 2232 - - - - - x - 2233 - - - - - x - 2234 - - - - - x - 2235 - - - - - x - 2236 - - - - - x - 2237 - - - - - x - 2238 - - - - - x - 2239 - - - - - x - 2240 - - - - - x - 2241 - - - - - x - 2242 - - - - - x - 2243 - - - - - x - 2244 - - - - - x - 2245 - - - - - x - 2246 - - - - - x - 2247 - - - - - x - 2248 - - - - - x - 2249 - - - - - x - 2250 - - - - - x - 2251 - - - - - x - 2252 - - - - - x - 2253 - - - - - x - 2254 - - - - - x - 2255 - - - - - x - 2256 - - - - - x - 2257 - - - - - x - 2258 - - - - - x - 2259 - - - - - x - 2260 - - - - - x - 2261 - - - - - x - 2262 - - - - - x - 2263 - - - - - x - 2264 - - - - - x - 2265 - - - - - x - 2266 - - - - - x - 2267 - - - - - x - 2268 - - - - - x - 2269 - - - - - x - 2270 - - - - - x - 2271 - - - - - x - 2272 - - - - - x - 2273 - - - - - x - 2274 - - - - - x - 2275 - - - - - x - 2276 - - - - - x - 2277 - - - - - x - 2278 - - - - - x - 2279 - - - - - x - 2280 - - - - - x - 2281 - - - - - x - 2282 - - - - - x - 2283 - - - - - x - 2284 - - - - - x - 2285 - - - - - x - 2286 - - - - - x - 2287 - - - - - x - 2288 - - - - - x - 2289 - - - - - x - 2290 - - - - - x - 2291 - - - - - x - 2292 - - - - - x - 2293 - - - - - x - 2294 - - - - - x - 2295 - - - - - x - 2296 - - - - - x - 2297 - - - - - x - 2298 - - - - - x - 2299 - - - - - x - 2300 - - - - - x - 2301 - - - - - x - 2302 - - - - - x - 2303 - - - - - x - 2304 - - - - - x - 2305 - - - - - x - 2306 - - - - - x - 2307 - - - - - x - 2308 - - - - - x - 2309 - - - - - x - 2310 - - - - - x - 2311 - - - - - x - 2312 - - - - - x - 2313 - - - - - x - 2314 - - - - - x - 2315 - - - - - x - 2316 - - - - - x - 2317 - - - - - x - 2318 - - - - - x - 2319 - - - - - x - 2320 - - - - - x - 2321 - - - - - x - 2322 - - - - - x - 2323 - - - - - x - 2324 - - - - - x - 2325 - - - - - x - 2326 - - - - - x - 2327 - - - - - x - 2328 - - - - - x - 2329 - - - - - x - 2330 - - - - - x - 2331 - - - - - x - 2332 - - - - - x - 2333 - - - - - x - 2334 - - - - - x - 2335 - - - - - x - 2336 - - - - - x - 2337 - - - - - x - 2338 - - - - - x - 2339 - - - - - x - 2340 - - - - - x - 2341 - - - - - x - 2342 - - - - - x - 2343 - - - - - x - 2344 - - - - - x - 2345 - - - - - x - 2346 - - - - - x - 2347 - - - - - x - 2348 - - - - - x - 2349 - - - - - x - 2350 - - - - - x - 2351 - - - - - x - 2352 - - - - - x - 2353 - - - - - x - 2354 - - - - - x - 2355 - - - - - x - 2356 - - - - - x - 2357 - - - - - x - 2358 - - - - - x - 2359 - - - - - x - 2360 - - - - - x - 2361 - - - - - x - 2362 - - - - - x - 2363 - - - - - x - 2364 - - - - - x - 2365 - - - - - x - 2366 - - - - - x - 2367 - - - - - x - 2368 - - - - - x - 2369 - - - - - x - 2370 - - - - - x - 2371 - - - - - x - 2372 - - - - - x - 2373 - - - - - x - 2374 - - - - - x - 2375 - - - - - x - 2376 - - - - - x - 2377 - - - - - x - 2378 - - - - - x - 2379 - - - - - x - 2380 - - - - - x - 2381 - - - - - x - 2382 - - - - - x - 2383 - - - - - x - 2384 - - - - - x - 2385 - - - - - x - 2386 - - - - - x - 2387 - - - - - x - 2388 - - - - - x - 2389 - - - - - x - 2390 - - - - - x - 2391 - - - - - x - 2392 - - - - - x - 2393 - - - - - x - 2394 - - - - - x - 2395 - - - - - x - 2396 - - - - - x - 2397 - - - - - x - 2398 - - - - - x - 2399 - - - - - x - 2400 - - - - - x - 2401 - - - - - x - 2402 - - - - - x - 2403 - - - - - x - 2404 - - - - - x - 2405 - - - - - x - 2406 - - - - - x - 2407 - - - - - x - 2408 - - - - - x - 2409 - - - - - x - 2410 - - - - - x - 2411 - - - - - x - 2412 - - - - - x - 2413 - - - - - x - 2414 - - - - - x - 2415 - - - - - x - 2416 - - - - - x - 2417 - - - - - x - 2418 - - - - - x - 2419 - - - - - x - 2420 - - - - - x - 2421 - - - - - x - 2422 - - - - - x - 2423 - - - - - x - 2424 - - - - - x - 2425 - - - - - x - 2426 - - - - - x - 2427 - - - - - x - 2428 - - - - - x - 2429 - - - - - x - 2430 - - - - - x - 2431 - - - - - x - 2432 - - - - - x - 2433 - - - - - x - 2434 - - - - - x - 2435 - - - - - x - 2436 - - - - - x - 2437 - - - - - x - 2438 - - - - - x - 2439 - - - - - x - 2440 - - - - - x - 2441 - - - - - x - 2442 - - - - - x - 2443 - - - - - x - 2444 - - - - - x - 2445 - - - - - x - 2446 - - - - - x - 2447 - - - - - x - 2448 - - - - - x - 2449 - - - - - x - 2450 - - - - - x - 2451 - - - - - x - 2452 - - - - - x - 2453 - - - - - x - 2454 - - - - - x - 2455 - - - - - x - 2456 - - - - - x - 2457 - - - - - x - 2458 - - - - - x - 2459 - - - - - x - 2460 - - - - - x - 2461 - - - - - x - 2462 - - - - - x - 2463 - - - - - x - 2464 - - - - - x - 2465 - - - - - x - 2466 - - - - - x - 2467 - - - - - x - 2468 - - - - - x - 2469 - - - - - x - 2470 - - - - - x - 2471 - - - - - x - 2472 - - - - - x - 2473 - - - - - x - 2474 - - - - - x - 2475 - - - - - x - 2476 - - - - - x - 2477 - - - - - x - 2478 - - - - - x - 2479 - - - - - x - 2480 - - - - - x - 2481 - - - - - x - 2482 - - - - - x - 2483 - - - - - x - 2484 - - - - - x - 2485 - - - - - x - 2486 - - - - - x - 2487 - - - - - x - 2488 - - - - - x - 2489 - - - - - x - 2490 - - - - - x - 2491 - - - - - x - 2492 - - - - - x - 2493 - - - - - x - 2494 - - - - - x - 2495 - - - - - x - 2496 - - - - - x - 2497 - - - - - x - 2498 - - - - - x - 2499 - - - - - x - 2500 - - - - - x - 2501 - - - - - x - 2502 - - - - - x - 2503 - - - - - x - 2504 - - - - - x - 2505 - - - - - x - 2506 - - - - - x - 2507 - - - - - x - 2508 - - - - - x - 2509 - - - - - x - 2510 - - - - - x - 2511 - - - - - x - 2512 - - - - - x - 2513 - - - - - x - 2514 - - - - - x - 2515 - - - - - x - 2516 - - - - - x - 2517 - - - - - x - 2518 - - - - - x - 2519 - - - - - x - 2520 - - - - - x - 2521 - - - - - x - 2522 - - - - - x - 2523 - - - - - x - 2524 - - - - - x - 2525 - - - - - x - 2526 - - - - - x - 2527 - - - - - x - 2528 - - - - - x - 2529 - - - - - x - 2530 - - - - - x - 2531 - - - - - x - 2532 - - - - - x - 2533 - - - - - x - 2534 - - - - - x - 2535 - - - - - x - 2536 - - - - - x - 2537 - - - - - x - 2538 - - - - - x - 2539 - - - - - x - 2540 - - - - - x - 2541 - - - - - x - 2542 - - - - - x - 2543 - - - - - x - 2544 - - - - - x - 2545 - - - - - x - 2546 - - - - - x - 2547 - - - - - x - 2548 - - - - - x - 2549 - - - - - x - 2550 - - - - - x - 2551 - - - - - x - 2552 - - - - - x - 2553 - - - - - x - 2554 - - - - - x - 2555 - - - - - x - 2556 - - - - - x - 2557 - - - - - x - 2558 - - - - - x - 2559 - - - - - x - 2560 - - - - - x - 2561 - - - - - x - 2562 - - - - - x - 2563 - - - - - x - 2564 - - - - - x - 2565 - - - - - x - 2566 - - - - - x - 2567 - - - - - x - 2568 - - - - - x - 2569 - - - - - x - 2570 - - - - - x - 2571 - - - - - x - 2572 - - - - - x - 2573 - - - - - x - 2574 - - - - - x - 2575 - - - - - x - 2576 - - - - - x - 2577 - - - - - x - 2578 - - - - - x - 2579 - - - - - x - 2580 - - - - - x - 2581 - - - - - x - 2582 - - - - - x - 2583 - - - - - x - 2584 - - - - - x - 2585 - - - - - x - 2586 - - - - - x - 2587 - - - - - x - 2588 - - - - - x - 2589 - - - - - x - 2590 - - - - - x - 2591 - - - - - x - 2592 - - - - - x - 2593 - - - - - x - 2594 - - - - - x - 2595 - - - - - x - 2596 - - - - - x - 2597 - - - - - x - 2598 - - - - - x - 2599 - - - - - x - 2600 - - - - - x - 2601 - - - - - x - 2602 - - - - - x - 2603 - - - - - x - 2604 - - - - - x - 2605 - - - - - x - 2606 - - - - - x - 2607 - - - - - x - 2608 - - - - - x - 2609 - - - - - x - 2610 - - - - - x - 2611 - - - - - x - 2612 - - - - - x - 2613 - - - - - x - 2614 - - - - - x - 2615 - - - - - x - 2616 - - - - - x - 2617 - - - - - x - 2618 - - - - - x - 2619 - - - - - x - 2620 - - - - - x - 2621 - - - - - x - 2622 - - - - - x - 2623 - - - - - x - 2624 - - - - - x - 2625 - - - - - x - 2626 - - - - - x - 2627 - - - - - x - 2628 - - - - - x - 2629 - - - - - x - 2630 - - - - - x - 2631 - - - - - x - 2632 - - - - - x - 2633 - - - - - x - 2634 - - - - - x - 2635 - - - - - x - 2636 - - - - - x - 2637 - - - - - x - 2638 - - - - - x - 2639 - - - - - x - 2640 - - - - - x - 2641 - - - - - x - 2642 - - - - - x - 2643 - - - - - x - 2644 - - - - - x - 2645 - - - - - x - 2646 - - - - - x - 2647 - - - - - x - 2648 - - - - - x - 2649 - - - - - x - 2650 - - - - - x - 2651 - - - - - x - 2652 - - - - - x - 2653 - - - - - x - 2654 - - - - - x - 2655 - - - - - x - 2656 - - - - - x - 2657 - - - - - x - 2658 - - - - - x - 2659 - - - - - x - 2660 - - - - - x - 2661 - - - - - x - 2662 - - - - - x - 2663 - - - - - x - 2664 - - - - - x - 2665 - - - - - x - 2666 - - - - - x - 2667 - - - - - x - 2668 - - - - - x - 2669 - - - - - x - 2670 - - - - - x - 2671 - - - - - x - 2672 - - - - - x - 2673 - - - - - x - 2674 - - - - - x - 2675 - - - - - x - 2676 - - - - - x - 2677 - - - - - x - 2678 - - - - - x - 2679 - - - - - x - 2680 - - - - - x - 2681 - - - - - x - 2682 - - - - - x - 2683 - - - - - x - 2684 - - - - - x - 2685 - - - - - x - 2686 - - - - - x - 2687 - - - - - x - 2688 - - - - - x - 2689 - - - - - x - 2690 - - - - - x - 2691 - - - - - x - 2692 - - - - - x - 2693 - - - - - x - 2694 - - - - - x - 2695 - - - - - x - 2696 - - - - - x - 2697 - - - - - x - 2698 - - - - - x - 2699 - - - - - x - 2700 - - - - - x - 2701 - - - - - x - 2702 - - - - - x - 2703 - - - - - x - 2704 - - - - - x - 2705 - - - - - x - 2706 - - - - - x - 2707 - - - - - x - 2708 - - - - - x - 2709 - - - - - x - 2710 - - - - - x - 2711 - - - - - x - 2712 - - - - - x - 2713 - - - - - x - 2714 - - - - - x - 2715 - - - - - x - 2716 - - - - - x - 2717 - - - - - x - 2718 - - - - - x - 2719 - - - - - x - 2720 - - - - - x - 2721 - - - - - x - 2722 - - - - - x - 2723 - - - - - x - 2724 - - - - - x - 2725 - - - - - x - 2726 - - - - - x - 2727 - - - - - x - 2728 - - - - - x - 2729 - - - - - x - 2730 - - - - - x - 2731 - - - - - x - 2732 - - - - - x - 2733 - - - - - x - 2734 - - - - - x - 2735 - - - - - x - 2736 - - - - - x - 2737 - - - - - x - 2738 - - - - - x - 2739 - - - - - x - 2740 - - - - - x - 2741 - - - - - x - 2742 - - - - - x - 2743 - - - - - x - 2744 - - - - - x - 2745 - - - - - x - 2746 - - - - - x - 2747 - - - - - x - 2748 - - - - - x - 2749 - - - - - x - 2750 - - - - - x - 2751 - - - - - x - 2752 - - - - - x - 2753 - - - - - x - 2754 - - - - - x - 2755 - - - - - x - 2756 - - - - - x - 2757 - - - - - x - 2758 - - - - - x - 2759 - - - - - x - 2760 - - - - - x - 2761 - - - - - x - 2762 - - - - - x - 2763 - - - - - x - 2764 - - - - - x - 2765 - - - - - x - 2766 - - - - - x - 2767 - - - - - x - 2768 - - - - - x - 2769 - - - - - x - 2770 - - - - - x - 2771 - - - - - x - 2772 - - - - - x - 2773 - - - - - x - 2774 - - - - - x - 2775 - - - - - x - 2776 - - - - - x - 2777 - - - - - x - 2778 - - - - - x - 2779 - - - - - x - 2780 - - - - - x - 2781 - - - - - x - 2782 - - - - - x - 2783 - - - - - x - 2784 - - - - - x - 2785 - - - - - x - 2786 - - - - - x - 2787 - - - - - x - 2788 - - - - - x - 2789 - - - - - x - 2790 - - - - - x - 2791 - - - - - x - 2792 - - - - - x - 2793 - - - - - x - 2794 - - - - - x - 2795 - - - - - x - 2796 - - - - - x - 2797 - - - - - x - 2798 - - - - - x - 2799 - - - - - x - 2800 - - - - - x - 2801 - - - - - x - 2802 - - - - - x - 2803 - - - - - x - 2804 - - - - - x - 2805 - - - - - x - 2806 - - - - - x - 2807 - - - - - x - 2808 - - - - - x - 2809 - - - - - x - 2810 - - - - - x - 2811 - - - - - x - 2812 - - - - - x - 2813 - - - - - x - 2814 - - - - - x - 2815 - - - - - x - 2816 - - - - - x - 2817 - - - - - x - 2818 - - - - - x - 2819 - - - - - x - 2820 - - - - - x - 2821 - - - - - x - 2822 - - - - - x - 2823 - - - - - x - 2824 - - - - - x - 2825 - - - - - x - 2826 - - - - - x - 2827 - - - - - x - 2828 - - - - - x - 2829 - - - - - x - 2830 - - - - - x - 2831 - - - - - x - 2832 - - - - - x - 2833 - - - - - x - 2834 - - - - - x - 2835 - - - - - x - 2836 - - - - - x - 2837 - - - - - x - 2838 - - - - - x - 2839 - - - - - x - 2840 - - - - - x - 2841 - - - - - x - 2842 - - - - - x - 2843 - - - - - x - 2844 - - - - - x - 2845 - - - - - x - 2846 - - - - - x - 2847 - - - - - x - 2848 - - - - - x - 2849 - - - - - x - 2850 - - - - - x - 2851 - - - - - x - 2852 - - - - - x - 2853 - - - - - x - 2854 - - - - - x - 2855 - - - - - x - 2856 - - - - - x - 2857 - - - - - x - 2858 - - - - - x - 2859 - - - - - x - 2860 - - - - - x - 2861 - - - - - x - 2862 - - - - - x - 2863 - - - - - x - 2864 - - - - - x - 2865 - - - - - x - 2866 - - - - - x - 2867 - - - - - x - 2868 - - - - - x - 2869 - - - - - x - 2870 - - - - - x - 2871 - - - - - x - 2872 - - - - - x - 2873 - - - - - x - 2874 - - - - - x - 2875 - - - - - x - 2876 - - - - - x - 2877 - - - - - x - 2878 - - - - - x - 2879 - - - - - x - 2880 - - - - - x - 2881 - - - - - x - 2882 - - - - - x - 2883 - - - - - x - 2884 - - - - - x - 2885 - - - - - x - 2886 - - - - - x - 2887 - - - - - x - 2888 - - - - - x - 2889 - - - - - x - 2890 - - - - - x - 2891 - - - - - x - 2892 - - - - - x - 2893 - - - - - x - 2894 - - - - - x - 2895 - - - - - x - 2896 - - - - - x - 2897 - - - - - x - 2898 - - - - - x - 2899 - - - - - x - 2900 - - - - - x - 2901 - - - - - x - 2902 - - - - - x - 2903 - - - - - x - 2904 - - - - - x - 2905 - - - - - x - 2906 - - - - - x - 2907 - - - - - x - 2908 - - - - - x - 2909 - - - - - x - 2910 - - - - - x - 2911 - - - - - x - 2912 - - - - - x - 2913 - - - - - x - 2914 - - - - - x - 2915 - - - - - x - 2916 - - - - - x - 2917 - - - - - x - 2918 - - - - - x - 2919 - - - - - x - 2920 - - - - - x - 2921 - - - - - x - 2922 - - - - - x - 2923 - - - - - x - 2924 - - - - - x - 2925 - - - - - x - 2926 - - - - - x - 2927 - - - - - x - 2928 - - - - - x - 2929 - - - - - x - 2930 - - - - - x - 2931 - - - - - x - 2932 - - - - - x - 2933 - - - - - x - 2934 - - - - - x - 2935 - - - - - x - 2936 - - - - - x - 2937 - - - - - x - 2938 - - - - - x - 2939 - - - - - x - 2940 - - - - - x - 2941 - - - - - x - 2942 - - - - - x - 2943 - - - - - x - 2944 - - - - - x - 2945 - - - - - x - 2946 - - - - - x - 2947 - - - - - x - 2948 - - - - - x - 2949 - - - - - x - 2950 - - - - - x - 2951 - - - - - x - 2952 - - - - - x - 2953 - - - - - x - 2954 - - - - - x - 2955 - - - - - x - 2956 - - - - - x - 2957 - - - - - x - 2958 - - - - - x - 2959 - - - - - x - 2960 - - - - - x - 2961 - - - - - x - 2962 - - - - - x - 2963 - - - - - x - 2964 - - - - - x - 2965 - - - - - x - 2966 - - - - - x - 2967 - - - - - x - 2968 - - - - - x - 2969 - - - - - x - 2970 - - - - - x - 2971 - - - - - x - 2972 - - - - - x - 2973 - - - - - x - 2974 - - - - - x - 2975 - - - - - x - 2976 - - - - - x - 2977 - - - - - x - 2978 - - - - - x - 2979 - - - - - x - 2980 - - - - - x - 2981 - - - - - x - 2982 - - - - - x - 2983 - - - - - x - 2984 - - - - - x - 2985 - - - - - x - 2986 - - - - - x - 2987 - - - - - x - 2988 - - - - - x - 2989 - - - - - x - 2990 - - - - - x - 2991 - - - - - x - 2992 - - - - - x - 2993 - - - - - x - 2994 - - - - - x - 2995 - - - - - x - 2996 - - - - - x - 2997 - - - - - x - 2998 - - - - - x - 2999 - - - - - x - 3000 - - - - - x - 3001 - - - - - x - 3002 - - - - - x - 3003 - - - - - x - 3004 - - - - - x - 3005 - - - - - x - 3006 - - - - - x - 3007 - - - - - x - 3008 - - - - - x - 3009 - - - - - x - 3010 - - - - - x - 3011 - - - - - x - 3012 - - - - - x - 3013 - - - - - x - 3014 - - - - - x - 3015 - - - - - x - 3016 - - - - - x - 3017 - - - - - x - 3018 - - - - - x - 3019 - - - - - x - 3020 - - - - - x - 3021 - - - - - x - 3022 - - - - - x - 3023 - - - - - x - 3024 - - - - - x - 3025 - - - - - x - 3026 - - - - - x - 3027 - - - - - x - 3028 - - - - - x - 3029 - - - - - x - 3030 - - - - - x - 3031 - - - - - x - 3032 - - - - - x - 3033 - - - - - x - 3034 - - - - - x - 3035 - - - - - x - 3036 - - - - - x - 3037 - - - - - x - 3038 - - - - - x - 3039 - - - - - x - 3040 - - - - - x - 3041 - - - - - x - 3042 - - - - - x - 3043 - - - - - x - 3044 - - - - - x - 3045 - - - - - x - 3046 - - - - - x - 3047 - - - - - x - 3048 - - - - - x - 3049 - - - - - x - 3050 - - - - - x - 3051 - - - - - x - 3052 - - - - - x - 3053 - - - - - x - 3054 - - - - - x - 3055 - - - - - x - 3056 - - - - - x - 3057 - - - - - x - 3058 - - - - - x - 3059 - - - - - x - 3060 - - - - - x - 3061 - - - - - x - 3062 - - - - - x - 3063 - - - - - x - 3064 - - - - - x - 3065 - - - - - x - 3066 - - - - - x - 3067 - - - - - x - 3068 - - - - - x - 3069 - - - - - x - 3070 - - - - - x - 3071 - - - - - x - 3072 - - - - - x - 3073 - - - - - x - 3074 - - - - - x - 3075 - - - - - x - 3076 - - - - - x - 3077 - - - - - x - 3078 - - - - - x - 3079 - - - - - x - 3080 - - - - - x - 3081 - - - - - x - 3082 - - - - - x - 3083 - - - - - x - 3084 - - - - - x - 3085 - - - - - x - 3086 - - - - - x - 3087 - - - - - x - 3088 - - - - - x - 3089 - - - - - x - 3090 - - - - - x - 3091 - - - - - x - 3092 - - - - - x - 3093 - - - - - x - 3094 - - - - - x - 3095 - - - - - x - 3096 - - - - - x - 3097 - - - - - x - 3098 - - - - - x - 3099 - - - - - x - 3100 - - - - - x - 3101 - - - - - x - 3102 - - - - - x - 3103 - - - - - x - 3104 - - - - - x - 3105 - - - - - x - 3106 - - - - - x - 3107 - - - - - x - 3108 - - - - - x - 3109 - - - - - x - 3110 - - - - - x - 3111 - - - - - x - 3112 - - - - - x - 3113 - - - - - x - 3114 - - - - - x - 3115 - - - - - x - 3116 - - - - - x - 3117 - - - - - x - 3118 - - - - - x - 3119 - - - - - x - 3120 - - - - - x - 3121 - - - - - x - 3122 - - - - - x - 3123 - - - - - x - 3124 - - - - - x - 3125 - - - - - x - 3126 - - - - - x - 3127 - - - - - x - 3128 - - - - - x - 3129 - - - - - x - 3130 - - - - - x - 3131 - - - - - x - 3132 - - - - - x - 3133 - - - - - x - 3134 - - - - - x - 3135 - - - - - x - 3136 - - - - - x - 3137 - - - - - x - 3138 - - - - - x - 3139 - - - - - x - 3140 - - - - - x - 3141 - - - - - x - 3142 - - - - - x - 3143 - - - - - x - 3144 - - - - - x - 3145 - - - - - x - 3146 - - - - - x - 3147 - - - - - x - 3148 - - - - - x - 3149 - - - - - x - 3150 - - - - - x - 3151 - - - - - x - 3152 - - - - - x - 3153 - - - - - x - 3154 - - - - - x - 3155 - - - - - x - 3156 - - - - - x - 3157 - - - - - x - 3158 - - - - - x - 3159 - - - - - x - 3160 - - - - - x - 3161 - - - - - x - 3162 - - - - - x - 3163 - - - - - x - 3164 - - - - - x - 3165 - - - - - x - 3166 - - - - - x - 3167 - - - - - x - 3168 - - - - - x - 3169 - - - - - x - 3170 - - - - - x - 3171 - - - - - x - 3172 - - - - - x - 3173 - - - - - x - 3174 - - - - - x - 3175 - - - - - x - 3176 - - - - - x - 3177 - - - - - x - 3178 - - - - - x - 3179 - - - - - x - 3180 - - - - - x - 3181 - - - - - x - 3182 - - - - - x - 3183 - - - - - x - 3184 - - - - - x - 3185 - - - - - x - 3186 - - - - - x - 3187 - - - - - x - 3188 - - - - - x - 3189 - - - - - x - 3190 - - - - - x - 3191 - - - - - x - 3192 - - - - - x - 3193 - - - - - x - 3194 - - - - - x - 3195 - - - - - x - 3196 - - - - - x - 3197 - - - - - x - 3198 - - - - - x - 3199 - - - - - x - 3200 - - - - - x - 3201 - - - - - x - 3202 - - - - - x - 3203 - - - - - x - 3204 - - - - - x - 3205 - - - - - x - 3206 - - - - - x - 3207 - - - - - x - 3208 - - - - - x - 3209 - - - - - x - 3210 - - - - - x - 3211 - - - - - x - 3212 - - - - - x - 3213 - - - - - x - 3214 - - - - - x - 3215 - - - - - x - 3216 - - - - - x - 3217 - - - - - x - 3218 - - - - - x - 3219 - - - - - x - 3220 - - - - - x - 3221 - - - - - x - 3222 - - - - - x - 3223 - - - - - x - 3224 - - - - - x - 3225 - - - - - x - 3226 - - - - - x - 3227 - - - - - x - 3228 - - - - - x - 3229 - - - - - x - 3230 - - - - - x - 3231 - - - - - x - 3232 - - - - - x - 3233 - - - - - x - 3234 - - - - - x - 3235 - - - - - x - 3236 - - - - - x - 3237 - - - - - x - 3238 - - - - - x - 3239 - - - - - x - 3240 - - - - - x - 3241 - - - - - x - 3242 - - - - - x - 3243 - - - - - x - 3244 - - - - - x - 3245 - - - - - x - 3246 - - - - - x - 3247 - - - - - x - 3248 - - - - - x - 3249 - - - - - x - 3250 - - - - - x - 3251 - - - - - x - 3252 - - - - - x - 3253 - - - - - x - 3254 - - - - - x - 3255 - - - - - x - 3256 - - - - - x - 3257 - - - - - x - 3258 - - - - - x - 3259 - - - - - x - 3260 - - - - - x - 3261 - - - - - x - 3262 - - - - - x - 3263 - - - - - x - 3264 - - - - - x - 3265 - - - - - x - 3266 - - - - - x - 3267 - - - - - x - 3268 - - - - - x - 3269 - - - - - x - 3270 - - - - - x - 3271 - - - - - x - 3272 - - - - - x - 3273 - - - - - x - 3274 - - - - - x - 3275 - - - - - x - 3276 - - - - - x - 3277 - - - - - x - 3278 - - - - - x - 3279 - - - - - x - 3280 - - - - - x - 3281 - - - - - x - 3282 - - - - - x - 3283 - - - - - x - 3284 - - - - - x - 3285 - - - - - x - 3286 - - - - - x - 3287 - - - - - x - 3288 - - - - - x - 3289 - - - - - x - 3290 - - - - - x - 3291 - - - - - x - 3292 - - - - - x - 3293 - - - - - x - 3294 - - - - - x - 3295 - - - - - x - 3296 - - - - - x - 3297 - - - - - x - 3298 - - - - - x - 3299 - - - - - x - 3300 - - - - - x - 3301 - - - - - x - 3302 - - - - - x - 3303 - - - - - x - 3304 - - - - - x - 3305 - - - - - x - 3306 - - - - - x - 3307 - - - - - x - 3308 - - - - - x - 3309 - - - - - x - 3310 - - - - - x - 3311 - - - - - x - 3312 - - - - - x - 3313 - - - - - x - 3314 - - - - - x - 3315 - - - - - x - 3316 - - - - - x - 3317 - - - - - x - 3318 - - - - - x - 3319 - - - - - x - 3320 - - - - - x - 3321 - - - - - x - 3322 - - - - - x - 3323 - - - - - x - 3324 - - - - - x - 3325 - - - - - x - 3326 - - - - - x - 3327 - - - - - x - 3328 - - - - - x - 3329 - - - - - x - 3330 - - - - - x - 3331 - - - - - x - 3332 - - - - - x - 3333 - - - - - x - 3334 - - - - - x - 3335 - - - - - x - 3336 - - - - - x - 3337 - - - - - x - 3338 - - - - - x - 3339 - - - - - x - 3340 - - - - - x - 3341 - - - - - x - 3342 - - - - - x - 3343 - - - - - x - 3344 - - - - - x - 3345 - - - - - x - 3346 - - - - - x - 3347 - - - - - x - 3348 - - - - - x - 3349 - - - - - x - 3350 - - - - - x - 3351 - - - - - x - 3352 - - - - - x - 3353 - - - - - x - 3354 - - - - - x - 3355 - - - - - x - 3356 - - - - - x - 3357 - - - - - x - 3358 - - - - - x - 3359 - - - - - x - 3360 - - - - - x - 3361 - - - - - x - 3362 - - - - - x - 3363 - - - - - x - 3364 - - - - - x - 3365 - - - - - x - 3366 - - - - - x - 3367 - - - - - x - 3368 - - - - - x - 3369 - - - - - x - 3370 - - - - - x - 3371 - - - - - x - 3372 - - - - - x - 3373 - - - - - x - 3374 - - - - - x - 3375 - - - - - x - 3376 - - - - - x - 3377 - - - - - x - 3378 - - - - - x - 3379 - - - - - x - 3380 - - - - - x - 3381 - - - - - x - 3382 - - - - - x - 3383 - - - - - x - 3384 - - - - - x - 3385 - - - - - x - 3386 - - - - - x - 3387 - - - - - x - 3388 - - - - - x - 3389 - - - - - x - 3390 - - - - - x - 3391 - - - - - x - 3392 - - - - - x - 3393 - - - - - x - 3394 - - - - - x - 3395 - - - - - x - 3396 - - - - - x - 3397 - - - - - x - 3398 - - - - - x - 3399 - - - - - x - 3400 - - - - - x - 3401 - - - - - x - 3402 - - - - - x - 3403 - - - - - x - 3404 - - - - - x - 3405 - - - - - x - 3406 - - - - - x - 3407 - - - - - x - 3408 - - - - - x - 3409 - - - - - x - 3410 - - - - - x - 3411 - - - - - x - 3412 - - - - - x - 3413 - - - - - x - 3414 - - - - - x - 3415 - - - - - x - 3416 - - - - - x - 3417 - - - - - x - 3418 - - - - - x - 3419 - - - - - x - 3420 - - - - - x - 3421 - - - - - x - 3422 - - - - - x - 3423 - - - - - x - 3424 - - - - - x - 3425 - - - - - x - 3426 - - - - - x - 3427 - - - - - x - 3428 - - - - - x - 3429 - - - - - x - 3430 - - - - - x - 3431 - - - - - x - 3432 - - - - - x - 3433 - - - - - x - 3434 - - - - - x - 3435 - - - - - x - 3436 - - - - - x - 3437 - - - - - x - 3438 - - - - - x - 3439 - - - - - x - 3440 - - - - - x - 3441 - - - - - x - 3442 - - - - - x - 3443 - - - - - x - 3444 - - - - - x - 3445 - - - - - x - 3446 - - - - - x - 3447 - - - - - x - 3448 - - - - - x - 3449 - - - - - x - 3450 - - - - - x - 3451 - - - - - x - 3452 - - - - - x - 3453 - - - - - x - 3454 - - - - - x - 3455 - - - - - x - 3456 - - - - - x - 3457 - - - - - x - 3458 - - - - - x - 3459 - - - - - x - 3460 - - - - - x - 3461 - - - - - x - 3462 - - - - - x - 3463 - - - - - x - 3464 - - - - - x - 3465 - - - - - x - 3466 - - - - - x - 3467 - - - - - x - 3468 - - - - - x - 3469 - - - - - x - 3470 - - - - - x - 3471 - - - - - x - 3472 - - - - - x - 3473 - - - - - x - 3474 - - - - - x - 3475 - - - - - x - 3476 - - - - - x - 3477 - - - - - x - 3478 - - - - - x - 3479 - - - - - x - 3480 - - - - - x - 3481 - - - - - x - 3482 - - - - - x - 3483 - - - - - x - 3484 - - - - - x - 3485 - - - - - x - 3486 - - - - - x - 3487 - - - - - x - 3488 - - - - - x - 3489 - - - - - x - 3490 - - - - - x - 3491 - - - - - x - 3492 - - - - - x - 3493 - - - - - x - 3494 - - - - - x - 3495 - - - - - x - 3496 - - - - - x - 3497 - - - - - x - 3498 - - - - - x - 3499 - - - - - x - 3500 - - - - - x - 3501 - - - - - x - 3502 - - - - - x - 3503 - - - - - x - 3504 - - - - - x - 3505 - - - - - x - 3506 - - - - - x - 3507 - - - - - x - 3508 - - - - - x - 3509 - - - - - x - 3510 - - - - - x - 3511 - - - - - x - 3512 - - - - - x - 3513 - - - - - x - 3514 - - - - - x - 3515 - - - - - x - 3516 - - - - - x - 3517 - - - - - x - 3518 - - - - - x - 3519 - - - - - x - 3520 - - - - - x - 3521 - - - - - x - 3522 - - - - - x - 3523 - - - - - x - 3524 - - - - - x - 3525 - - - - - x - 3526 - - - - - x - 3527 - - - - - x - 3528 - - - - - x - 3529 - - - - - x - 3530 - - - - - x - 3531 - - - - - x - 3532 - - - - - x - 3533 - - - - - x - 3534 - - - - - x - 3535 - - - - - x - 3536 - - - - - x - 3537 - - - - - x - 3538 - - - - - x - 3539 - - - - - x - 3540 - - - - - x - 3541 - - - - - x - 3542 - - - - - x - 3543 - - - - - x - 3544 - - - - - x - 3545 - - - - - x - 3546 - - - - - x - 3547 - - - - - x - 3548 - - - - - x - 3549 - - - - - x - 3550 - - - - - x - 3551 - - - - - x - 3552 - - - - - x - 3553 - - - - - x - 3554 - - - - - x - 3555 - - - - - x - 3556 - - - - - x - 3557 - - - - - x - 3558 - - - - - x - 3559 - - - - - x - 3560 - - - - - x - 3561 - - - - - x - 3562 - - - - - x - 3563 - - - - - x - 3564 - - - - - x - 3565 - - - - - x - 3566 - - - - - x - 3567 - - - - - x - 3568 - - - - - x - 3569 - - - - - x - 3570 - - - - - x - 3571 - - - - - x - 3572 - - - - - x - 3573 - - - - - x - 3574 - - - - - x - 3575 - - - - - x - 3576 - - - - - x - 3577 - - - - - x - 3578 - - - - - x - 3579 - - - - - x - 3580 - - - - - x - 3581 - - - - - x - 3582 - - - - - x - 3583 - - - - - x - 3584 - - - - - x - 3585 - - - - - x - 3586 - - - - - x - 3587 - - - - - x - 3588 - - - - - x - 3589 - - - - - x - 3590 - - - - - x - 3591 - - - - - x - 3592 - - - - - x - 3593 - - - - - x - 3594 - - - - - x - 3595 - - - - - x - 3596 - - - - - x - 3597 - - - - - x - 3598 - - - - - x - 3599 - - - - - x - 3600 - - - - - x - 3601 - - - - - x - 3602 - - - - - x - 3603 - - - - - x - 3604 - - - - - x - 3605 - - - - - x - 3606 - - - - - x - 3607 - - - - - x - 3608 - - - - - x - 3609 - - - - - x - 3610 - - - - - x - 3611 - - - - - x - 3612 - - - - - x - 3613 - - - - - x - 3614 - - - - - x - 3615 - - - - - x - 3616 - - - - - x - 3617 - - - - - x - 3618 - - - - - x - 3619 - - - - - x - 3620 - - - - - x - 3621 - - - - - x - 3622 - - - - - x - 3623 - - - - - x - 3624 - - - - - x - 3625 - - - - - x - 3626 - - - - - x - 3627 - - - - - x - 3628 - - - - - x - 3629 - - - - - x - 3630 - - - - - x - 3631 - - - - - x - 3632 - - - - - x - 3633 - - - - - x - 3634 - - - - - x - 3635 - - - - - x - 3636 - - - - - x - 3637 - - - - - x - 3638 - - - - - x - 3639 - - - - - x - 3640 - - - - - x - 3641 - - - - - x - 3642 - - - - - x - 3643 - - - - - x - 3644 - - - - - x - 3645 - - - - - x - 3646 - - - - - x - 3647 - - - - - x - 3648 - - - - - x - 3649 - - - - - x - 3650 - - - - - x - 3651 - - - - - x - 3652 - - - - - x - 3653 - - - - - x - 3654 - - - - - x - 3655 - - - - - x - 3656 - - - - - x - 3657 - - - - - x - 3658 - - - - - x - 3659 - - - - - x - 3660 - - - - - x - 3661 - - - - - x - 3662 - - - - - x - 3663 - - - - - x - 3664 - - - - - x - 3665 - - - - - x - 3666 - - - - - x - 3667 - - - - - x - 3668 - - - - - x - 3669 - - - - - x - 3670 - - - - - x - 3671 - - - - - x - 3672 - - - - - x - 3673 - - - - - x - 3674 - - - - - x - 3675 - - - - - x - 3676 - - - - - x - 3677 - - - - - x - 3678 - - - - - x - 3679 - - - - - x - 3680 - - - - - x - 3681 - - - - - x - 3682 - - - - - x - 3683 - - - - - x - 3684 - - - - - x - 3685 - - - - - x - 3686 - - - - - x - 3687 - - - - - x - 3688 - - - - - x - 3689 - - - - - x - 3690 - - - - - x - 3691 - - - - - x - 3692 - - - - - x - 3693 - - - - - x - 3694 - - - - - x - 3695 - - - - - x - 3696 - - - - - x - 3697 - - - - - x - 3698 - - - - - x - 3699 - - - - - x - 3700 - - - - - x - 3701 - - - - - x - 3702 - - - - - x - 3703 - - - - - x - 3704 - - - - - x - 3705 - - - - - x - 3706 - - - - - x - 3707 - - - - - x - 3708 - - - - - x - 3709 - - - - - x - 3710 - - - - - x - 3711 - - - - - x - 3712 - - - - - x - 3713 - - - - - x - 3714 - - - - - x - 3715 - - - - - x - 3716 - - - - - x - 3717 - - - - - x - 3718 - - - - - x - 3719 - - - - - x - 3720 - - - - - x - 3721 - - - - - x - 3722 - - - - - x - 3723 - - - - - x - 3724 - - - - - x - 3725 - - - - - x - 3726 - - - - - x - 3727 - - - - - x - 3728 - - - - - x - 3729 - - - - - x - 3730 - - - - - x - 3731 - - - - - x - 3732 - - - - - x - 3733 - - - - - x - 3734 - - - - - x - 3735 - - - - - x - 3736 - - - - - x - 3737 - - - - - x - 3738 - - - - - x - 3739 - - - - - x - 3740 - - - - - x - 3741 - - - - - x - 3742 - - - - - x - 3743 - - - - - x - 3744 - - - - - x - 3745 - - - - - x - 3746 - - - - - x - 3747 - - - - - x - 3748 - - - - - x - 3749 - - - - - x - 3750 - - - - - x - 3751 - - - - - x - 3752 - - - - - x - 3753 - - - - - x - 3754 - - - - - x - 3755 - - - - - x - 3756 - - - - - x - 3757 - - - - - x - 3758 - - - - - x - 3759 - - - - - x - 3760 - - - - - x - 3761 - - - - - x - 3762 - - - - - x - 3763 - - - - - x - 3764 - - - - - x - 3765 - - - - - x - 3766 - - - - - x - 3767 - - - - - x - 3768 - - - - - x - 3769 - - - - - x - 3770 - - - - - x - 3771 - - - - - x - 3772 - - - - - x - 3773 - - - - - x - 3774 - - - - - x - 3775 - - - - - x - 3776 - - - - - x - 3777 - - - - - x - 3778 - - - - - x - 3779 - - - - - x - 3780 - - - - - x - 3781 - - - - - x - 3782 - - - - - x - 3783 - - - - - x - 3784 - - - - - x - 3785 - - - - - x - 3786 - - - - - x - 3787 - - - - - x - 3788 - - - - - x - 3789 - - - - - x - 3790 - - - - - x - 3791 - - - - - x - 3792 - - - - - x - 3793 - - - - - x - 3794 - - - - - x - 3795 - - - - - x - 3796 - - - - - x - 3797 - - - - - x - 3798 - - - - - x - 3799 - - - - - x - 3800 - - - - - x - 3801 - - - - - x - 3802 - - - - - x - 3803 - - - - - x - 3804 - - - - - x - 3805 - - - - - x - 3806 - - - - - x - 3807 - - - - - x - 3808 - - - - - x - 3809 - - - - - x - 3810 - - - - - x - 3811 - - - - - x - 3812 - - - - - x - 3813 - - - - - x - 3814 - - - - - x - 3815 - - - - - x - 3816 - - - - - x - 3817 - - - - - x - 3818 - - - - - x - 3819 - - - - - x - 3820 - - - - - x - 3821 - - - - - x - 3822 - - - - - x - 3823 - - - - - x - 3824 - - - - - x - 3825 - - - - - x - 3826 - - - - - x - 3827 - - - - - x - 3828 - - - - - x - 3829 - - - - - x - 3830 - - - - - x - 3831 - - - - - x - 3832 - - - - - x - 3833 - - - - - x - 3834 - - - - - x - 3835 - - - - - x - 3836 - - - - - x - 3837 - - - - - x - 3838 - - - - - x - 3839 - - - - - x - 3840 - - - - - x - 3841 - - - - - x - 3842 - - - - - x - 3843 - - - - - x - 3844 - - - - - x - 3845 - - - - - x - 3846 - - - - - x - 3847 - - - - - x - 3848 - - - - - x - 3849 - - - - - x - 3850 - - - - - x - 3851 - - - - - x - 3852 - - - - - x - 3853 - - - - - x - 3854 - - - - - x - 3855 - - - - - x - 3856 - - - - - x - 3857 - - - - - x - 3858 - - - - - x - 3859 - - - - - x - 3860 - - - - - x - 3861 - - - - - x - 3862 - - - - - x - 3863 - - - - - x - 3864 - - - - - x - 3865 - - - - - x - 3866 - - - - - x - 3867 - - - - - x - 3868 - - - - - x - 3869 - - - - - x - 3870 - - - - - x - 3871 - - - - - x - 3872 - - - - - x - 3873 - - - - - x - 3874 - - - - - x - 3875 - - - - - x - 3876 - - - - - x - 3877 - - - - - x - 3878 - - - - - x - 3879 - - - - - x - 3880 - - - - - x - 3881 - - - - - x - 3882 - - - - - x - 3883 - - - - - x - 3884 - - - - - x - 3885 - - - - - x - 3886 - - - - - x - 3887 - - - - - x - 3888 - - - - - x - 3889 - - - - - x - 3890 - - - - - x - 3891 - - - - - x - 3892 - - - - - x - 3893 - - - - - x - 3894 - - - - - x - 3895 - - - - - x - 3896 - - - - - x - 3897 - - - - - x - 3898 - - - - - x - 3899 - - - - - x - 3900 - - - - - x - 3901 - - - - - x - 3902 - - - - - x - 3903 - - - - - x - 3904 - - - - - x - 3905 - - - - - x - 3906 - - - - - x - 3907 - - - - - x - 3908 - - - - - x - 3909 - - - - - x - 3910 - - - - - x - 3911 - - - - - x - 3912 - - - - - x - 3913 - - - - - x - 3914 - - - - - x - 3915 - - - - - x - 3916 - - - - - x - 3917 - - - - - x - 3918 - - - - - x - 3919 - - - - - x - 3920 - - - - - x - 3921 - - - - - x - 3922 - - - - - x - 3923 - - - - - x - 3924 - - - - - x - 3925 - - - - - x - 3926 - - - - - x - 3927 - - - - - x - 3928 - - - - - x - 3929 - - - - - x - 3930 - - - - - x - 3931 - - - - - x - 3932 - - - - - x - 3933 - - - - - x - 3934 - - - - - x - 3935 - - - - - x - 3936 - - - - - x - 3937 - - - - - x - 3938 - - - - - x - 3939 - - - - - x - 3940 - - - - - x - 3941 - - - - - x - 3942 - - - - - x - 3943 - - - - - x - 3944 - - - - - x - 3945 - - - - - x - 3946 - - - - - x - 3947 - - - - - x - 3948 - - - - - x - 3949 - - - - - x - 3950 - - - - - x - 3951 - - - - - x - 3952 - - - - - x - 3953 - - - - - x - 3954 - - - - - x - 3955 - - - - - x - 3956 - - - - - x - 3957 - - - - - x - 3958 - - - - - x - 3959 - - - - - x - 3960 - - - - - x - 3961 - - - - - x - 3962 - - - - - x - 3963 - - - - - x - 3964 - - - - - x - 3965 - - - - - x - 3966 - - - - - x - 3967 - - - - - x - 3968 - - - - - x - 3969 - - - - - x - 3970 - - - - - x - 3971 - - - - - x - 3972 - - - - - x - 3973 - - - - - x - 3974 - - - - - x - 3975 - - - - - x - 3976 - - - - - x - 3977 - - - - - x - 3978 - - - - - x - 3979 - - - - - x - 3980 - - - - - x - 3981 - - - - - x - 3982 - - - - - x - 3983 - - - - - x - 3984 - - - - - x - 3985 - - - - - x - 3986 - - - - - x - 3987 - - - - - x - 3988 - - - - - x - 3989 - - - - - x - 3990 - - - - - x - 3991 - - - - - x - 3992 - - - - - x - 3993 - - - - - x - 3994 - - - - - x - 3995 - - - - - x - 3996 - - - - - x - 3997 - - - - - x - 3998 - - - - - x - 3999 - - - - - x - 4000 - - - - - x - 4001 - - - - - x - 4002 - - - - - x - 4003 - - - - - x - 4004 - - - - - x - 4005 - - - - - x - 4006 - - - - - x - 4007 - - - - - x - 4008 - - - - - x - 4009 - - - - - x - 4010 - - - - - x - 4011 - - - - - x - 4012 - - - - - x - 4013 - - - - - x - 4014 - - - - - x - 4015 - - - - - x - 4016 - - - - - x - 4017 - - - - - x - 4018 - - - - - x - 4019 - - - - - x - 4020 - - - - - x - 4021 - - - - - x - 4022 - - - - - x - 4023 - - - - - x - 4024 - - - - - x - 4025 - - - - - x - 4026 - - - - - x - 4027 - - - - - x - 4028 - - - - - x - 4029 - - - - - x - 4030 - - - - - x - 4031 - - - - - x - 4032 - - - - - x - 4033 - - - - - x - 4034 - - - - - x - 4035 - - - - - x - 4036 - - - - - x - 4037 - - - - - x - 4038 - - - - - x - 4039 - - - - - x - 4040 - - - - - x - 4041 - - - - - x - 4042 - - - - - x - 4043 - - - - - x - 4044 - - - - - x - 4045 - - - - - x - 4046 - - - - - x - 4047 - - - - - x - 4048 - - - - - x - 4049 - - - - - x - 4050 - - - - - x - 4051 - - - - - x - 4052 - - - - - x - 4053 - - - - - x - 4054 - - - - - x - 4055 - - - - - x - 4056 - - - - - x - 4057 - - - - - x - 4058 - - - - - x - 4059 - - - - - x - 4060 - - - - - x - 4061 - - - - - x - 4062 - - - - - x - 4063 - - - - - x - 4064 - - - - - x - 4065 - - - - - x - 4066 - - - - - x - 4067 - - - - - x - 4068 - - - - - x - 4069 - - - - - x - 4070 - - - - - x - 4071 - - - - - x - 4072 - - - - - x - 4073 - - - - - x - 4074 - - - - - x - 4075 - - - - - x - 4076 - - - - - x - 4077 - - - - - x - 4078 - - - - - x - 4079 - - - - - x - 4080 - - - - - x - 4081 - - - - - x - 4082 - - - - - x - 4083 - - - - - x - 4084 - - - - - x - 4085 - - - - - x - 4086 - - - - - x - 4087 - - - - - x - 4088 - - - - - x - 4089 - - - - - x - 4090 - - - - - x - 4091 - - - - - x - 4092 - - - - - x - 4093 - - - - - x - 4094 - - - - - x - 4095 - - - - - x - 4096 - - - - - - - - x - - - x1 - - - - - x1 - - x - - 4 - - x - 1 - - - - - - - - - - x - - - - x - 0 - - - - - diff --git a/bench_horn_mcmc/samples_shrink_big_numbers_8192/config b/bench_horn_mcmc/samples_shrink_big_numbers_8192/config deleted file mode 100644 index 7d6db6322..000000000 --- a/bench_horn_mcmc/samples_shrink_big_numbers_8192/config +++ /dev/null @@ -1,12 +0,0 @@ -DISJUNCTS -10 -CONJUNCTS -10 -COEFFICIENT BAG -3 --1 0 1 -IMMEDIATE BAG -16385 --8192 -8191 -8190 -8189 -8188 -8187 -8186 -8185 -8184 -8183 -8182 -8181 -8180 -8179 -8178 -8177 -8176 -8175 -8174 -8173 -8172 -8171 -8170 -8169 -8168 -8167 -8166 -8165 -8164 -8163 -8162 -8161 -8160 -8159 -8158 -8157 -8156 -8155 -8154 -8153 -8152 -8151 -8150 -8149 -8148 -8147 -8146 -8145 -8144 -8143 -8142 -8141 -8140 -8139 -8138 -8137 -8136 -8135 -8134 -8133 -8132 -8131 -8130 -8129 -8128 -8127 -8126 -8125 -8124 -8123 -8122 -8121 -8120 -8119 -8118 -8117 -8116 -8115 -8114 -8113 -8112 -8111 -8110 -8109 -8108 -8107 -8106 -8105 -8104 -8103 -8102 -8101 -8100 -8099 -8098 -8097 -8096 -8095 -8094 -8093 -8092 -8091 -8090 -8089 -8088 -8087 -8086 -8085 -8084 -8083 -8082 -8081 -8080 -8079 -8078 -8077 -8076 -8075 -8074 -8073 -8072 -8071 -8070 -8069 -8068 -8067 -8066 -8065 -8064 -8063 -8062 -8061 -8060 -8059 -8058 -8057 -8056 -8055 -8054 -8053 -8052 -8051 -8050 -8049 -8048 -8047 -8046 -8045 -8044 -8043 -8042 -8041 -8040 -8039 -8038 -8037 -8036 -8035 -8034 -8033 -8032 -8031 -8030 -8029 -8028 -8027 -8026 -8025 -8024 -8023 -8022 -8021 -8020 -8019 -8018 -8017 -8016 -8015 -8014 -8013 -8012 -8011 -8010 -8009 -8008 -8007 -8006 -8005 -8004 -8003 -8002 -8001 -8000 -7999 -7998 -7997 -7996 -7995 -7994 -7993 -7992 -7991 -7990 -7989 -7988 -7987 -7986 -7985 -7984 -7983 -7982 -7981 -7980 -7979 -7978 -7977 -7976 -7975 -7974 -7973 -7972 -7971 -7970 -7969 -7968 -7967 -7966 -7965 -7964 -7963 -7962 -7961 -7960 -7959 -7958 -7957 -7956 -7955 -7954 -7953 -7952 -7951 -7950 -7949 -7948 -7947 -7946 -7945 -7944 -7943 -7942 -7941 -7940 -7939 -7938 -7937 -7936 -7935 -7934 -7933 -7932 -7931 -7930 -7929 -7928 -7927 -7926 -7925 -7924 -7923 -7922 -7921 -7920 -7919 -7918 -7917 -7916 -7915 -7914 -7913 -7912 -7911 -7910 -7909 -7908 -7907 -7906 -7905 -7904 -7903 -7902 -7901 -7900 -7899 -7898 -7897 -7896 -7895 -7894 -7893 -7892 -7891 -7890 -7889 -7888 -7887 -7886 -7885 -7884 -7883 -7882 -7881 -7880 -7879 -7878 -7877 -7876 -7875 -7874 -7873 -7872 -7871 -7870 -7869 -7868 -7867 -7866 -7865 -7864 -7863 -7862 -7861 -7860 -7859 -7858 -7857 -7856 -7855 -7854 -7853 -7852 -7851 -7850 -7849 -7848 -7847 -7846 -7845 -7844 -7843 -7842 -7841 -7840 -7839 -7838 -7837 -7836 -7835 -7834 -7833 -7832 -7831 -7830 -7829 -7828 -7827 -7826 -7825 -7824 -7823 -7822 -7821 -7820 -7819 -7818 -7817 -7816 -7815 -7814 -7813 -7812 -7811 -7810 -7809 -7808 -7807 -7806 -7805 -7804 -7803 -7802 -7801 -7800 -7799 -7798 -7797 -7796 -7795 -7794 -7793 -7792 -7791 -7790 -7789 -7788 -7787 -7786 -7785 -7784 -7783 -7782 -7781 -7780 -7779 -7778 -7777 -7776 -7775 -7774 -7773 -7772 -7771 -7770 -7769 -7768 -7767 -7766 -7765 -7764 -7763 -7762 -7761 -7760 -7759 -7758 -7757 -7756 -7755 -7754 -7753 -7752 -7751 -7750 -7749 -7748 -7747 -7746 -7745 -7744 -7743 -7742 -7741 -7740 -7739 -7738 -7737 -7736 -7735 -7734 -7733 -7732 -7731 -7730 -7729 -7728 -7727 -7726 -7725 -7724 -7723 -7722 -7721 -7720 -7719 -7718 -7717 -7716 -7715 -7714 -7713 -7712 -7711 -7710 -7709 -7708 -7707 -7706 -7705 -7704 -7703 -7702 -7701 -7700 -7699 -7698 -7697 -7696 -7695 -7694 -7693 -7692 -7691 -7690 -7689 -7688 -7687 -7686 -7685 -7684 -7683 -7682 -7681 -7680 -7679 -7678 -7677 -7676 -7675 -7674 -7673 -7672 -7671 -7670 -7669 -7668 -7667 -7666 -7665 -7664 -7663 -7662 -7661 -7660 -7659 -7658 -7657 -7656 -7655 -7654 -7653 -7652 -7651 -7650 -7649 -7648 -7647 -7646 -7645 -7644 -7643 -7642 -7641 -7640 -7639 -7638 -7637 -7636 -7635 -7634 -7633 -7632 -7631 -7630 -7629 -7628 -7627 -7626 -7625 -7624 -7623 -7622 -7621 -7620 -7619 -7618 -7617 -7616 -7615 -7614 -7613 -7612 -7611 -7610 -7609 -7608 -7607 -7606 -7605 -7604 -7603 -7602 -7601 -7600 -7599 -7598 -7597 -7596 -7595 -7594 -7593 -7592 -7591 -7590 -7589 -7588 -7587 -7586 -7585 -7584 -7583 -7582 -7581 -7580 -7579 -7578 -7577 -7576 -7575 -7574 -7573 -7572 -7571 -7570 -7569 -7568 -7567 -7566 -7565 -7564 -7563 -7562 -7561 -7560 -7559 -7558 -7557 -7556 -7555 -7554 -7553 -7552 -7551 -7550 -7549 -7548 -7547 -7546 -7545 -7544 -7543 -7542 -7541 -7540 -7539 -7538 -7537 -7536 -7535 -7534 -7533 -7532 -7531 -7530 -7529 -7528 -7527 -7526 -7525 -7524 -7523 -7522 -7521 -7520 -7519 -7518 -7517 -7516 -7515 -7514 -7513 -7512 -7511 -7510 -7509 -7508 -7507 -7506 -7505 -7504 -7503 -7502 -7501 -7500 -7499 -7498 -7497 -7496 -7495 -7494 -7493 -7492 -7491 -7490 -7489 -7488 -7487 -7486 -7485 -7484 -7483 -7482 -7481 -7480 -7479 -7478 -7477 -7476 -7475 -7474 -7473 -7472 -7471 -7470 -7469 -7468 -7467 -7466 -7465 -7464 -7463 -7462 -7461 -7460 -7459 -7458 -7457 -7456 -7455 -7454 -7453 -7452 -7451 -7450 -7449 -7448 -7447 -7446 -7445 -7444 -7443 -7442 -7441 -7440 -7439 -7438 -7437 -7436 -7435 -7434 -7433 -7432 -7431 -7430 -7429 -7428 -7427 -7426 -7425 -7424 -7423 -7422 -7421 -7420 -7419 -7418 -7417 -7416 -7415 -7414 -7413 -7412 -7411 -7410 -7409 -7408 -7407 -7406 -7405 -7404 -7403 -7402 -7401 -7400 -7399 -7398 -7397 -7396 -7395 -7394 -7393 -7392 -7391 -7390 -7389 -7388 -7387 -7386 -7385 -7384 -7383 -7382 -7381 -7380 -7379 -7378 -7377 -7376 -7375 -7374 -7373 -7372 -7371 -7370 -7369 -7368 -7367 -7366 -7365 -7364 -7363 -7362 -7361 -7360 -7359 -7358 -7357 -7356 -7355 -7354 -7353 -7352 -7351 -7350 -7349 -7348 -7347 -7346 -7345 -7344 -7343 -7342 -7341 -7340 -7339 -7338 -7337 -7336 -7335 -7334 -7333 -7332 -7331 -7330 -7329 -7328 -7327 -7326 -7325 -7324 -7323 -7322 -7321 -7320 -7319 -7318 -7317 -7316 -7315 -7314 -7313 -7312 -7311 -7310 -7309 -7308 -7307 -7306 -7305 -7304 -7303 -7302 -7301 -7300 -7299 -7298 -7297 -7296 -7295 -7294 -7293 -7292 -7291 -7290 -7289 -7288 -7287 -7286 -7285 -7284 -7283 -7282 -7281 -7280 -7279 -7278 -7277 -7276 -7275 -7274 -7273 -7272 -7271 -7270 -7269 -7268 -7267 -7266 -7265 -7264 -7263 -7262 -7261 -7260 -7259 -7258 -7257 -7256 -7255 -7254 -7253 -7252 -7251 -7250 -7249 -7248 -7247 -7246 -7245 -7244 -7243 -7242 -7241 -7240 -7239 -7238 -7237 -7236 -7235 -7234 -7233 -7232 -7231 -7230 -7229 -7228 -7227 -7226 -7225 -7224 -7223 -7222 -7221 -7220 -7219 -7218 -7217 -7216 -7215 -7214 -7213 -7212 -7211 -7210 -7209 -7208 -7207 -7206 -7205 -7204 -7203 -7202 -7201 -7200 -7199 -7198 -7197 -7196 -7195 -7194 -7193 -7192 -7191 -7190 -7189 -7188 -7187 -7186 -7185 -7184 -7183 -7182 -7181 -7180 -7179 -7178 -7177 -7176 -7175 -7174 -7173 -7172 -7171 -7170 -7169 -7168 -7167 -7166 -7165 -7164 -7163 -7162 -7161 -7160 -7159 -7158 -7157 -7156 -7155 -7154 -7153 -7152 -7151 -7150 -7149 -7148 -7147 -7146 -7145 -7144 -7143 -7142 -7141 -7140 -7139 -7138 -7137 -7136 -7135 -7134 -7133 -7132 -7131 -7130 -7129 -7128 -7127 -7126 -7125 -7124 -7123 -7122 -7121 -7120 -7119 -7118 -7117 -7116 -7115 -7114 -7113 -7112 -7111 -7110 -7109 -7108 -7107 -7106 -7105 -7104 -7103 -7102 -7101 -7100 -7099 -7098 -7097 -7096 -7095 -7094 -7093 -7092 -7091 -7090 -7089 -7088 -7087 -7086 -7085 -7084 -7083 -7082 -7081 -7080 -7079 -7078 -7077 -7076 -7075 -7074 -7073 -7072 -7071 -7070 -7069 -7068 -7067 -7066 -7065 -7064 -7063 -7062 -7061 -7060 -7059 -7058 -7057 -7056 -7055 -7054 -7053 -7052 -7051 -7050 -7049 -7048 -7047 -7046 -7045 -7044 -7043 -7042 -7041 -7040 -7039 -7038 -7037 -7036 -7035 -7034 -7033 -7032 -7031 -7030 -7029 -7028 -7027 -7026 -7025 -7024 -7023 -7022 -7021 -7020 -7019 -7018 -7017 -7016 -7015 -7014 -7013 -7012 -7011 -7010 -7009 -7008 -7007 -7006 -7005 -7004 -7003 -7002 -7001 -7000 -6999 -6998 -6997 -6996 -6995 -6994 -6993 -6992 -6991 -6990 -6989 -6988 -6987 -6986 -6985 -6984 -6983 -6982 -6981 -6980 -6979 -6978 -6977 -6976 -6975 -6974 -6973 -6972 -6971 -6970 -6969 -6968 -6967 -6966 -6965 -6964 -6963 -6962 -6961 -6960 -6959 -6958 -6957 -6956 -6955 -6954 -6953 -6952 -6951 -6950 -6949 -6948 -6947 -6946 -6945 -6944 -6943 -6942 -6941 -6940 -6939 -6938 -6937 -6936 -6935 -6934 -6933 -6932 -6931 -6930 -6929 -6928 -6927 -6926 -6925 -6924 -6923 -6922 -6921 -6920 -6919 -6918 -6917 -6916 -6915 -6914 -6913 -6912 -6911 -6910 -6909 -6908 -6907 -6906 -6905 -6904 -6903 -6902 -6901 -6900 -6899 -6898 -6897 -6896 -6895 -6894 -6893 -6892 -6891 -6890 -6889 -6888 -6887 -6886 -6885 -6884 -6883 -6882 -6881 -6880 -6879 -6878 -6877 -6876 -6875 -6874 -6873 -6872 -6871 -6870 -6869 -6868 -6867 -6866 -6865 -6864 -6863 -6862 -6861 -6860 -6859 -6858 -6857 -6856 -6855 -6854 -6853 -6852 -6851 -6850 -6849 -6848 -6847 -6846 -6845 -6844 -6843 -6842 -6841 -6840 -6839 -6838 -6837 -6836 -6835 -6834 -6833 -6832 -6831 -6830 -6829 -6828 -6827 -6826 -6825 -6824 -6823 -6822 -6821 -6820 -6819 -6818 -6817 -6816 -6815 -6814 -6813 -6812 -6811 -6810 -6809 -6808 -6807 -6806 -6805 -6804 -6803 -6802 -6801 -6800 -6799 -6798 -6797 -6796 -6795 -6794 -6793 -6792 -6791 -6790 -6789 -6788 -6787 -6786 -6785 -6784 -6783 -6782 -6781 -6780 -6779 -6778 -6777 -6776 -6775 -6774 -6773 -6772 -6771 -6770 -6769 -6768 -6767 -6766 -6765 -6764 -6763 -6762 -6761 -6760 -6759 -6758 -6757 -6756 -6755 -6754 -6753 -6752 -6751 -6750 -6749 -6748 -6747 -6746 -6745 -6744 -6743 -6742 -6741 -6740 -6739 -6738 -6737 -6736 -6735 -6734 -6733 -6732 -6731 -6730 -6729 -6728 -6727 -6726 -6725 -6724 -6723 -6722 -6721 -6720 -6719 -6718 -6717 -6716 -6715 -6714 -6713 -6712 -6711 -6710 -6709 -6708 -6707 -6706 -6705 -6704 -6703 -6702 -6701 -6700 -6699 -6698 -6697 -6696 -6695 -6694 -6693 -6692 -6691 -6690 -6689 -6688 -6687 -6686 -6685 -6684 -6683 -6682 -6681 -6680 -6679 -6678 -6677 -6676 -6675 -6674 -6673 -6672 -6671 -6670 -6669 -6668 -6667 -6666 -6665 -6664 -6663 -6662 -6661 -6660 -6659 -6658 -6657 -6656 -6655 -6654 -6653 -6652 -6651 -6650 -6649 -6648 -6647 -6646 -6645 -6644 -6643 -6642 -6641 -6640 -6639 -6638 -6637 -6636 -6635 -6634 -6633 -6632 -6631 -6630 -6629 -6628 -6627 -6626 -6625 -6624 -6623 -6622 -6621 -6620 -6619 -6618 -6617 -6616 -6615 -6614 -6613 -6612 -6611 -6610 -6609 -6608 -6607 -6606 -6605 -6604 -6603 -6602 -6601 -6600 -6599 -6598 -6597 -6596 -6595 -6594 -6593 -6592 -6591 -6590 -6589 -6588 -6587 -6586 -6585 -6584 -6583 -6582 -6581 -6580 -6579 -6578 -6577 -6576 -6575 -6574 -6573 -6572 -6571 -6570 -6569 -6568 -6567 -6566 -6565 -6564 -6563 -6562 -6561 -6560 -6559 -6558 -6557 -6556 -6555 -6554 -6553 -6552 -6551 -6550 -6549 -6548 -6547 -6546 -6545 -6544 -6543 -6542 -6541 -6540 -6539 -6538 -6537 -6536 -6535 -6534 -6533 -6532 -6531 -6530 -6529 -6528 -6527 -6526 -6525 -6524 -6523 -6522 -6521 -6520 -6519 -6518 -6517 -6516 -6515 -6514 -6513 -6512 -6511 -6510 -6509 -6508 -6507 -6506 -6505 -6504 -6503 -6502 -6501 -6500 -6499 -6498 -6497 -6496 -6495 -6494 -6493 -6492 -6491 -6490 -6489 -6488 -6487 -6486 -6485 -6484 -6483 -6482 -6481 -6480 -6479 -6478 -6477 -6476 -6475 -6474 -6473 -6472 -6471 -6470 -6469 -6468 -6467 -6466 -6465 -6464 -6463 -6462 -6461 -6460 -6459 -6458 -6457 -6456 -6455 -6454 -6453 -6452 -6451 -6450 -6449 -6448 -6447 -6446 -6445 -6444 -6443 -6442 -6441 -6440 -6439 -6438 -6437 -6436 -6435 -6434 -6433 -6432 -6431 -6430 -6429 -6428 -6427 -6426 -6425 -6424 -6423 -6422 -6421 -6420 -6419 -6418 -6417 -6416 -6415 -6414 -6413 -6412 -6411 -6410 -6409 -6408 -6407 -6406 -6405 -6404 -6403 -6402 -6401 -6400 -6399 -6398 -6397 -6396 -6395 -6394 -6393 -6392 -6391 -6390 -6389 -6388 -6387 -6386 -6385 -6384 -6383 -6382 -6381 -6380 -6379 -6378 -6377 -6376 -6375 -6374 -6373 -6372 -6371 -6370 -6369 -6368 -6367 -6366 -6365 -6364 -6363 -6362 -6361 -6360 -6359 -6358 -6357 -6356 -6355 -6354 -6353 -6352 -6351 -6350 -6349 -6348 -6347 -6346 -6345 -6344 -6343 -6342 -6341 -6340 -6339 -6338 -6337 -6336 -6335 -6334 -6333 -6332 -6331 -6330 -6329 -6328 -6327 -6326 -6325 -6324 -6323 -6322 -6321 -6320 -6319 -6318 -6317 -6316 -6315 -6314 -6313 -6312 -6311 -6310 -6309 -6308 -6307 -6306 -6305 -6304 -6303 -6302 -6301 -6300 -6299 -6298 -6297 -6296 -6295 -6294 -6293 -6292 -6291 -6290 -6289 -6288 -6287 -6286 -6285 -6284 -6283 -6282 -6281 -6280 -6279 -6278 -6277 -6276 -6275 -6274 -6273 -6272 -6271 -6270 -6269 -6268 -6267 -6266 -6265 -6264 -6263 -6262 -6261 -6260 -6259 -6258 -6257 -6256 -6255 -6254 -6253 -6252 -6251 -6250 -6249 -6248 -6247 -6246 -6245 -6244 -6243 -6242 -6241 -6240 -6239 -6238 -6237 -6236 -6235 -6234 -6233 -6232 -6231 -6230 -6229 -6228 -6227 -6226 -6225 -6224 -6223 -6222 -6221 -6220 -6219 -6218 -6217 -6216 -6215 -6214 -6213 -6212 -6211 -6210 -6209 -6208 -6207 -6206 -6205 -6204 -6203 -6202 -6201 -6200 -6199 -6198 -6197 -6196 -6195 -6194 -6193 -6192 -6191 -6190 -6189 -6188 -6187 -6186 -6185 -6184 -6183 -6182 -6181 -6180 -6179 -6178 -6177 -6176 -6175 -6174 -6173 -6172 -6171 -6170 -6169 -6168 -6167 -6166 -6165 -6164 -6163 -6162 -6161 -6160 -6159 -6158 -6157 -6156 -6155 -6154 -6153 -6152 -6151 -6150 -6149 -6148 -6147 -6146 -6145 -6144 -6143 -6142 -6141 -6140 -6139 -6138 -6137 -6136 -6135 -6134 -6133 -6132 -6131 -6130 -6129 -6128 -6127 -6126 -6125 -6124 -6123 -6122 -6121 -6120 -6119 -6118 -6117 -6116 -6115 -6114 -6113 -6112 -6111 -6110 -6109 -6108 -6107 -6106 -6105 -6104 -6103 -6102 -6101 -6100 -6099 -6098 -6097 -6096 -6095 -6094 -6093 -6092 -6091 -6090 -6089 -6088 -6087 -6086 -6085 -6084 -6083 -6082 -6081 -6080 -6079 -6078 -6077 -6076 -6075 -6074 -6073 -6072 -6071 -6070 -6069 -6068 -6067 -6066 -6065 -6064 -6063 -6062 -6061 -6060 -6059 -6058 -6057 -6056 -6055 -6054 -6053 -6052 -6051 -6050 -6049 -6048 -6047 -6046 -6045 -6044 -6043 -6042 -6041 -6040 -6039 -6038 -6037 -6036 -6035 -6034 -6033 -6032 -6031 -6030 -6029 -6028 -6027 -6026 -6025 -6024 -6023 -6022 -6021 -6020 -6019 -6018 -6017 -6016 -6015 -6014 -6013 -6012 -6011 -6010 -6009 -6008 -6007 -6006 -6005 -6004 -6003 -6002 -6001 -6000 -5999 -5998 -5997 -5996 -5995 -5994 -5993 -5992 -5991 -5990 -5989 -5988 -5987 -5986 -5985 -5984 -5983 -5982 -5981 -5980 -5979 -5978 -5977 -5976 -5975 -5974 -5973 -5972 -5971 -5970 -5969 -5968 -5967 -5966 -5965 -5964 -5963 -5962 -5961 -5960 -5959 -5958 -5957 -5956 -5955 -5954 -5953 -5952 -5951 -5950 -5949 -5948 -5947 -5946 -5945 -5944 -5943 -5942 -5941 -5940 -5939 -5938 -5937 -5936 -5935 -5934 -5933 -5932 -5931 -5930 -5929 -5928 -5927 -5926 -5925 -5924 -5923 -5922 -5921 -5920 -5919 -5918 -5917 -5916 -5915 -5914 -5913 -5912 -5911 -5910 -5909 -5908 -5907 -5906 -5905 -5904 -5903 -5902 -5901 -5900 -5899 -5898 -5897 -5896 -5895 -5894 -5893 -5892 -5891 -5890 -5889 -5888 -5887 -5886 -5885 -5884 -5883 -5882 -5881 -5880 -5879 -5878 -5877 -5876 -5875 -5874 -5873 -5872 -5871 -5870 -5869 -5868 -5867 -5866 -5865 -5864 -5863 -5862 -5861 -5860 -5859 -5858 -5857 -5856 -5855 -5854 -5853 -5852 -5851 -5850 -5849 -5848 -5847 -5846 -5845 -5844 -5843 -5842 -5841 -5840 -5839 -5838 -5837 -5836 -5835 -5834 -5833 -5832 -5831 -5830 -5829 -5828 -5827 -5826 -5825 -5824 -5823 -5822 -5821 -5820 -5819 -5818 -5817 -5816 -5815 -5814 -5813 -5812 -5811 -5810 -5809 -5808 -5807 -5806 -5805 -5804 -5803 -5802 -5801 -5800 -5799 -5798 -5797 -5796 -5795 -5794 -5793 -5792 -5791 -5790 -5789 -5788 -5787 -5786 -5785 -5784 -5783 -5782 -5781 -5780 -5779 -5778 -5777 -5776 -5775 -5774 -5773 -5772 -5771 -5770 -5769 -5768 -5767 -5766 -5765 -5764 -5763 -5762 -5761 -5760 -5759 -5758 -5757 -5756 -5755 -5754 -5753 -5752 -5751 -5750 -5749 -5748 -5747 -5746 -5745 -5744 -5743 -5742 -5741 -5740 -5739 -5738 -5737 -5736 -5735 -5734 -5733 -5732 -5731 -5730 -5729 -5728 -5727 -5726 -5725 -5724 -5723 -5722 -5721 -5720 -5719 -5718 -5717 -5716 -5715 -5714 -5713 -5712 -5711 -5710 -5709 -5708 -5707 -5706 -5705 -5704 -5703 -5702 -5701 -5700 -5699 -5698 -5697 -5696 -5695 -5694 -5693 -5692 -5691 -5690 -5689 -5688 -5687 -5686 -5685 -5684 -5683 -5682 -5681 -5680 -5679 -5678 -5677 -5676 -5675 -5674 -5673 -5672 -5671 -5670 -5669 -5668 -5667 -5666 -5665 -5664 -5663 -5662 -5661 -5660 -5659 -5658 -5657 -5656 -5655 -5654 -5653 -5652 -5651 -5650 -5649 -5648 -5647 -5646 -5645 -5644 -5643 -5642 -5641 -5640 -5639 -5638 -5637 -5636 -5635 -5634 -5633 -5632 -5631 -5630 -5629 -5628 -5627 -5626 -5625 -5624 -5623 -5622 -5621 -5620 -5619 -5618 -5617 -5616 -5615 -5614 -5613 -5612 -5611 -5610 -5609 -5608 -5607 -5606 -5605 -5604 -5603 -5602 -5601 -5600 -5599 -5598 -5597 -5596 -5595 -5594 -5593 -5592 -5591 -5590 -5589 -5588 -5587 -5586 -5585 -5584 -5583 -5582 -5581 -5580 -5579 -5578 -5577 -5576 -5575 -5574 -5573 -5572 -5571 -5570 -5569 -5568 -5567 -5566 -5565 -5564 -5563 -5562 -5561 -5560 -5559 -5558 -5557 -5556 -5555 -5554 -5553 -5552 -5551 -5550 -5549 -5548 -5547 -5546 -5545 -5544 -5543 -5542 -5541 -5540 -5539 -5538 -5537 -5536 -5535 -5534 -5533 -5532 -5531 -5530 -5529 -5528 -5527 -5526 -5525 -5524 -5523 -5522 -5521 -5520 -5519 -5518 -5517 -5516 -5515 -5514 -5513 -5512 -5511 -5510 -5509 -5508 -5507 -5506 -5505 -5504 -5503 -5502 -5501 -5500 -5499 -5498 -5497 -5496 -5495 -5494 -5493 -5492 -5491 -5490 -5489 -5488 -5487 -5486 -5485 -5484 -5483 -5482 -5481 -5480 -5479 -5478 -5477 -5476 -5475 -5474 -5473 -5472 -5471 -5470 -5469 -5468 -5467 -5466 -5465 -5464 -5463 -5462 -5461 -5460 -5459 -5458 -5457 -5456 -5455 -5454 -5453 -5452 -5451 -5450 -5449 -5448 -5447 -5446 -5445 -5444 -5443 -5442 -5441 -5440 -5439 -5438 -5437 -5436 -5435 -5434 -5433 -5432 -5431 -5430 -5429 -5428 -5427 -5426 -5425 -5424 -5423 -5422 -5421 -5420 -5419 -5418 -5417 -5416 -5415 -5414 -5413 -5412 -5411 -5410 -5409 -5408 -5407 -5406 -5405 -5404 -5403 -5402 -5401 -5400 -5399 -5398 -5397 -5396 -5395 -5394 -5393 -5392 -5391 -5390 -5389 -5388 -5387 -5386 -5385 -5384 -5383 -5382 -5381 -5380 -5379 -5378 -5377 -5376 -5375 -5374 -5373 -5372 -5371 -5370 -5369 -5368 -5367 -5366 -5365 -5364 -5363 -5362 -5361 -5360 -5359 -5358 -5357 -5356 -5355 -5354 -5353 -5352 -5351 -5350 -5349 -5348 -5347 -5346 -5345 -5344 -5343 -5342 -5341 -5340 -5339 -5338 -5337 -5336 -5335 -5334 -5333 -5332 -5331 -5330 -5329 -5328 -5327 -5326 -5325 -5324 -5323 -5322 -5321 -5320 -5319 -5318 -5317 -5316 -5315 -5314 -5313 -5312 -5311 -5310 -5309 -5308 -5307 -5306 -5305 -5304 -5303 -5302 -5301 -5300 -5299 -5298 -5297 -5296 -5295 -5294 -5293 -5292 -5291 -5290 -5289 -5288 -5287 -5286 -5285 -5284 -5283 -5282 -5281 -5280 -5279 -5278 -5277 -5276 -5275 -5274 -5273 -5272 -5271 -5270 -5269 -5268 -5267 -5266 -5265 -5264 -5263 -5262 -5261 -5260 -5259 -5258 -5257 -5256 -5255 -5254 -5253 -5252 -5251 -5250 -5249 -5248 -5247 -5246 -5245 -5244 -5243 -5242 -5241 -5240 -5239 -5238 -5237 -5236 -5235 -5234 -5233 -5232 -5231 -5230 -5229 -5228 -5227 -5226 -5225 -5224 -5223 -5222 -5221 -5220 -5219 -5218 -5217 -5216 -5215 -5214 -5213 -5212 -5211 -5210 -5209 -5208 -5207 -5206 -5205 -5204 -5203 -5202 -5201 -5200 -5199 -5198 -5197 -5196 -5195 -5194 -5193 -5192 -5191 -5190 -5189 -5188 -5187 -5186 -5185 -5184 -5183 -5182 -5181 -5180 -5179 -5178 -5177 -5176 -5175 -5174 -5173 -5172 -5171 -5170 -5169 -5168 -5167 -5166 -5165 -5164 -5163 -5162 -5161 -5160 -5159 -5158 -5157 -5156 -5155 -5154 -5153 -5152 -5151 -5150 -5149 -5148 -5147 -5146 -5145 -5144 -5143 -5142 -5141 -5140 -5139 -5138 -5137 -5136 -5135 -5134 -5133 -5132 -5131 -5130 -5129 -5128 -5127 -5126 -5125 -5124 -5123 -5122 -5121 -5120 -5119 -5118 -5117 -5116 -5115 -5114 -5113 -5112 -5111 -5110 -5109 -5108 -5107 -5106 -5105 -5104 -5103 -5102 -5101 -5100 -5099 -5098 -5097 -5096 -5095 -5094 -5093 -5092 -5091 -5090 -5089 -5088 -5087 -5086 -5085 -5084 -5083 -5082 -5081 -5080 -5079 -5078 -5077 -5076 -5075 -5074 -5073 -5072 -5071 -5070 -5069 -5068 -5067 -5066 -5065 -5064 -5063 -5062 -5061 -5060 -5059 -5058 -5057 -5056 -5055 -5054 -5053 -5052 -5051 -5050 -5049 -5048 -5047 -5046 -5045 -5044 -5043 -5042 -5041 -5040 -5039 -5038 -5037 -5036 -5035 -5034 -5033 -5032 -5031 -5030 -5029 -5028 -5027 -5026 -5025 -5024 -5023 -5022 -5021 -5020 -5019 -5018 -5017 -5016 -5015 -5014 -5013 -5012 -5011 -5010 -5009 -5008 -5007 -5006 -5005 -5004 -5003 -5002 -5001 -5000 -4999 -4998 -4997 -4996 -4995 -4994 -4993 -4992 -4991 -4990 -4989 -4988 -4987 -4986 -4985 -4984 -4983 -4982 -4981 -4980 -4979 -4978 -4977 -4976 -4975 -4974 -4973 -4972 -4971 -4970 -4969 -4968 -4967 -4966 -4965 -4964 -4963 -4962 -4961 -4960 -4959 -4958 -4957 -4956 -4955 -4954 -4953 -4952 -4951 -4950 -4949 -4948 -4947 -4946 -4945 -4944 -4943 -4942 -4941 -4940 -4939 -4938 -4937 -4936 -4935 -4934 -4933 -4932 -4931 -4930 -4929 -4928 -4927 -4926 -4925 -4924 -4923 -4922 -4921 -4920 -4919 -4918 -4917 -4916 -4915 -4914 -4913 -4912 -4911 -4910 -4909 -4908 -4907 -4906 -4905 -4904 -4903 -4902 -4901 -4900 -4899 -4898 -4897 -4896 -4895 -4894 -4893 -4892 -4891 -4890 -4889 -4888 -4887 -4886 -4885 -4884 -4883 -4882 -4881 -4880 -4879 -4878 -4877 -4876 -4875 -4874 -4873 -4872 -4871 -4870 -4869 -4868 -4867 -4866 -4865 -4864 -4863 -4862 -4861 -4860 -4859 -4858 -4857 -4856 -4855 -4854 -4853 -4852 -4851 -4850 -4849 -4848 -4847 -4846 -4845 -4844 -4843 -4842 -4841 -4840 -4839 -4838 -4837 -4836 -4835 -4834 -4833 -4832 -4831 -4830 -4829 -4828 -4827 -4826 -4825 -4824 -4823 -4822 -4821 -4820 -4819 -4818 -4817 -4816 -4815 -4814 -4813 -4812 -4811 -4810 -4809 -4808 -4807 -4806 -4805 -4804 -4803 -4802 -4801 -4800 -4799 -4798 -4797 -4796 -4795 -4794 -4793 -4792 -4791 -4790 -4789 -4788 -4787 -4786 -4785 -4784 -4783 -4782 -4781 -4780 -4779 -4778 -4777 -4776 -4775 -4774 -4773 -4772 -4771 -4770 -4769 -4768 -4767 -4766 -4765 -4764 -4763 -4762 -4761 -4760 -4759 -4758 -4757 -4756 -4755 -4754 -4753 -4752 -4751 -4750 -4749 -4748 -4747 -4746 -4745 -4744 -4743 -4742 -4741 -4740 -4739 -4738 -4737 -4736 -4735 -4734 -4733 -4732 -4731 -4730 -4729 -4728 -4727 -4726 -4725 -4724 -4723 -4722 -4721 -4720 -4719 -4718 -4717 -4716 -4715 -4714 -4713 -4712 -4711 -4710 -4709 -4708 -4707 -4706 -4705 -4704 -4703 -4702 -4701 -4700 -4699 -4698 -4697 -4696 -4695 -4694 -4693 -4692 -4691 -4690 -4689 -4688 -4687 -4686 -4685 -4684 -4683 -4682 -4681 -4680 -4679 -4678 -4677 -4676 -4675 -4674 -4673 -4672 -4671 -4670 -4669 -4668 -4667 -4666 -4665 -4664 -4663 -4662 -4661 -4660 -4659 -4658 -4657 -4656 -4655 -4654 -4653 -4652 -4651 -4650 -4649 -4648 -4647 -4646 -4645 -4644 -4643 -4642 -4641 -4640 -4639 -4638 -4637 -4636 -4635 -4634 -4633 -4632 -4631 -4630 -4629 -4628 -4627 -4626 -4625 -4624 -4623 -4622 -4621 -4620 -4619 -4618 -4617 -4616 -4615 -4614 -4613 -4612 -4611 -4610 -4609 -4608 -4607 -4606 -4605 -4604 -4603 -4602 -4601 -4600 -4599 -4598 -4597 -4596 -4595 -4594 -4593 -4592 -4591 -4590 -4589 -4588 -4587 -4586 -4585 -4584 -4583 -4582 -4581 -4580 -4579 -4578 -4577 -4576 -4575 -4574 -4573 -4572 -4571 -4570 -4569 -4568 -4567 -4566 -4565 -4564 -4563 -4562 -4561 -4560 -4559 -4558 -4557 -4556 -4555 -4554 -4553 -4552 -4551 -4550 -4549 -4548 -4547 -4546 -4545 -4544 -4543 -4542 -4541 -4540 -4539 -4538 -4537 -4536 -4535 -4534 -4533 -4532 -4531 -4530 -4529 -4528 -4527 -4526 -4525 -4524 -4523 -4522 -4521 -4520 -4519 -4518 -4517 -4516 -4515 -4514 -4513 -4512 -4511 -4510 -4509 -4508 -4507 -4506 -4505 -4504 -4503 -4502 -4501 -4500 -4499 -4498 -4497 -4496 -4495 -4494 -4493 -4492 -4491 -4490 -4489 -4488 -4487 -4486 -4485 -4484 -4483 -4482 -4481 -4480 -4479 -4478 -4477 -4476 -4475 -4474 -4473 -4472 -4471 -4470 -4469 -4468 -4467 -4466 -4465 -4464 -4463 -4462 -4461 -4460 -4459 -4458 -4457 -4456 -4455 -4454 -4453 -4452 -4451 -4450 -4449 -4448 -4447 -4446 -4445 -4444 -4443 -4442 -4441 -4440 -4439 -4438 -4437 -4436 -4435 -4434 -4433 -4432 -4431 -4430 -4429 -4428 -4427 -4426 -4425 -4424 -4423 -4422 -4421 -4420 -4419 -4418 -4417 -4416 -4415 -4414 -4413 -4412 -4411 -4410 -4409 -4408 -4407 -4406 -4405 -4404 -4403 -4402 -4401 -4400 -4399 -4398 -4397 -4396 -4395 -4394 -4393 -4392 -4391 -4390 -4389 -4388 -4387 -4386 -4385 -4384 -4383 -4382 -4381 -4380 -4379 -4378 -4377 -4376 -4375 -4374 -4373 -4372 -4371 -4370 -4369 -4368 -4367 -4366 -4365 -4364 -4363 -4362 -4361 -4360 -4359 -4358 -4357 -4356 -4355 -4354 -4353 -4352 -4351 -4350 -4349 -4348 -4347 -4346 -4345 -4344 -4343 -4342 -4341 -4340 -4339 -4338 -4337 -4336 -4335 -4334 -4333 -4332 -4331 -4330 -4329 -4328 -4327 -4326 -4325 -4324 -4323 -4322 -4321 -4320 -4319 -4318 -4317 -4316 -4315 -4314 -4313 -4312 -4311 -4310 -4309 -4308 -4307 -4306 -4305 -4304 -4303 -4302 -4301 -4300 -4299 -4298 -4297 -4296 -4295 -4294 -4293 -4292 -4291 -4290 -4289 -4288 -4287 -4286 -4285 -4284 -4283 -4282 -4281 -4280 -4279 -4278 -4277 -4276 -4275 -4274 -4273 -4272 -4271 -4270 -4269 -4268 -4267 -4266 -4265 -4264 -4263 -4262 -4261 -4260 -4259 -4258 -4257 -4256 -4255 -4254 -4253 -4252 -4251 -4250 -4249 -4248 -4247 -4246 -4245 -4244 -4243 -4242 -4241 -4240 -4239 -4238 -4237 -4236 -4235 -4234 -4233 -4232 -4231 -4230 -4229 -4228 -4227 -4226 -4225 -4224 -4223 -4222 -4221 -4220 -4219 -4218 -4217 -4216 -4215 -4214 -4213 -4212 -4211 -4210 -4209 -4208 -4207 -4206 -4205 -4204 -4203 -4202 -4201 -4200 -4199 -4198 -4197 -4196 -4195 -4194 -4193 -4192 -4191 -4190 -4189 -4188 -4187 -4186 -4185 -4184 -4183 -4182 -4181 -4180 -4179 -4178 -4177 -4176 -4175 -4174 -4173 -4172 -4171 -4170 -4169 -4168 -4167 -4166 -4165 -4164 -4163 -4162 -4161 -4160 -4159 -4158 -4157 -4156 -4155 -4154 -4153 -4152 -4151 -4150 -4149 -4148 -4147 -4146 -4145 -4144 -4143 -4142 -4141 -4140 -4139 -4138 -4137 -4136 -4135 -4134 -4133 -4132 -4131 -4130 -4129 -4128 -4127 -4126 -4125 -4124 -4123 -4122 -4121 -4120 -4119 -4118 -4117 -4116 -4115 -4114 -4113 -4112 -4111 -4110 -4109 -4108 -4107 -4106 -4105 -4104 -4103 -4102 -4101 -4100 -4099 -4098 -4097 -4096 -4095 -4094 -4093 -4092 -4091 -4090 -4089 -4088 -4087 -4086 -4085 -4084 -4083 -4082 -4081 -4080 -4079 -4078 -4077 -4076 -4075 -4074 -4073 -4072 -4071 -4070 -4069 -4068 -4067 -4066 -4065 -4064 -4063 -4062 -4061 -4060 -4059 -4058 -4057 -4056 -4055 -4054 -4053 -4052 -4051 -4050 -4049 -4048 -4047 -4046 -4045 -4044 -4043 -4042 -4041 -4040 -4039 -4038 -4037 -4036 -4035 -4034 -4033 -4032 -4031 -4030 -4029 -4028 -4027 -4026 -4025 -4024 -4023 -4022 -4021 -4020 -4019 -4018 -4017 -4016 -4015 -4014 -4013 -4012 -4011 -4010 -4009 -4008 -4007 -4006 -4005 -4004 -4003 -4002 -4001 -4000 -3999 -3998 -3997 -3996 -3995 -3994 -3993 -3992 -3991 -3990 -3989 -3988 -3987 -3986 -3985 -3984 -3983 -3982 -3981 -3980 -3979 -3978 -3977 -3976 -3975 -3974 -3973 -3972 -3971 -3970 -3969 -3968 -3967 -3966 -3965 -3964 -3963 -3962 -3961 -3960 -3959 -3958 -3957 -3956 -3955 -3954 -3953 -3952 -3951 -3950 -3949 -3948 -3947 -3946 -3945 -3944 -3943 -3942 -3941 -3940 -3939 -3938 -3937 -3936 -3935 -3934 -3933 -3932 -3931 -3930 -3929 -3928 -3927 -3926 -3925 -3924 -3923 -3922 -3921 -3920 -3919 -3918 -3917 -3916 -3915 -3914 -3913 -3912 -3911 -3910 -3909 -3908 -3907 -3906 -3905 -3904 -3903 -3902 -3901 -3900 -3899 -3898 -3897 -3896 -3895 -3894 -3893 -3892 -3891 -3890 -3889 -3888 -3887 -3886 -3885 -3884 -3883 -3882 -3881 -3880 -3879 -3878 -3877 -3876 -3875 -3874 -3873 -3872 -3871 -3870 -3869 -3868 -3867 -3866 -3865 -3864 -3863 -3862 -3861 -3860 -3859 -3858 -3857 -3856 -3855 -3854 -3853 -3852 -3851 -3850 -3849 -3848 -3847 -3846 -3845 -3844 -3843 -3842 -3841 -3840 -3839 -3838 -3837 -3836 -3835 -3834 -3833 -3832 -3831 -3830 -3829 -3828 -3827 -3826 -3825 -3824 -3823 -3822 -3821 -3820 -3819 -3818 -3817 -3816 -3815 -3814 -3813 -3812 -3811 -3810 -3809 -3808 -3807 -3806 -3805 -3804 -3803 -3802 -3801 -3800 -3799 -3798 -3797 -3796 -3795 -3794 -3793 -3792 -3791 -3790 -3789 -3788 -3787 -3786 -3785 -3784 -3783 -3782 -3781 -3780 -3779 -3778 -3777 -3776 -3775 -3774 -3773 -3772 -3771 -3770 -3769 -3768 -3767 -3766 -3765 -3764 -3763 -3762 -3761 -3760 -3759 -3758 -3757 -3756 -3755 -3754 -3753 -3752 -3751 -3750 -3749 -3748 -3747 -3746 -3745 -3744 -3743 -3742 -3741 -3740 -3739 -3738 -3737 -3736 -3735 -3734 -3733 -3732 -3731 -3730 -3729 -3728 -3727 -3726 -3725 -3724 -3723 -3722 -3721 -3720 -3719 -3718 -3717 -3716 -3715 -3714 -3713 -3712 -3711 -3710 -3709 -3708 -3707 -3706 -3705 -3704 -3703 -3702 -3701 -3700 -3699 -3698 -3697 -3696 -3695 -3694 -3693 -3692 -3691 -3690 -3689 -3688 -3687 -3686 -3685 -3684 -3683 -3682 -3681 -3680 -3679 -3678 -3677 -3676 -3675 -3674 -3673 -3672 -3671 -3670 -3669 -3668 -3667 -3666 -3665 -3664 -3663 -3662 -3661 -3660 -3659 -3658 -3657 -3656 -3655 -3654 -3653 -3652 -3651 -3650 -3649 -3648 -3647 -3646 -3645 -3644 -3643 -3642 -3641 -3640 -3639 -3638 -3637 -3636 -3635 -3634 -3633 -3632 -3631 -3630 -3629 -3628 -3627 -3626 -3625 -3624 -3623 -3622 -3621 -3620 -3619 -3618 -3617 -3616 -3615 -3614 -3613 -3612 -3611 -3610 -3609 -3608 -3607 -3606 -3605 -3604 -3603 -3602 -3601 -3600 -3599 -3598 -3597 -3596 -3595 -3594 -3593 -3592 -3591 -3590 -3589 -3588 -3587 -3586 -3585 -3584 -3583 -3582 -3581 -3580 -3579 -3578 -3577 -3576 -3575 -3574 -3573 -3572 -3571 -3570 -3569 -3568 -3567 -3566 -3565 -3564 -3563 -3562 -3561 -3560 -3559 -3558 -3557 -3556 -3555 -3554 -3553 -3552 -3551 -3550 -3549 -3548 -3547 -3546 -3545 -3544 -3543 -3542 -3541 -3540 -3539 -3538 -3537 -3536 -3535 -3534 -3533 -3532 -3531 -3530 -3529 -3528 -3527 -3526 -3525 -3524 -3523 -3522 -3521 -3520 -3519 -3518 -3517 -3516 -3515 -3514 -3513 -3512 -3511 -3510 -3509 -3508 -3507 -3506 -3505 -3504 -3503 -3502 -3501 -3500 -3499 -3498 -3497 -3496 -3495 -3494 -3493 -3492 -3491 -3490 -3489 -3488 -3487 -3486 -3485 -3484 -3483 -3482 -3481 -3480 -3479 -3478 -3477 -3476 -3475 -3474 -3473 -3472 -3471 -3470 -3469 -3468 -3467 -3466 -3465 -3464 -3463 -3462 -3461 -3460 -3459 -3458 -3457 -3456 -3455 -3454 -3453 -3452 -3451 -3450 -3449 -3448 -3447 -3446 -3445 -3444 -3443 -3442 -3441 -3440 -3439 -3438 -3437 -3436 -3435 -3434 -3433 -3432 -3431 -3430 -3429 -3428 -3427 -3426 -3425 -3424 -3423 -3422 -3421 -3420 -3419 -3418 -3417 -3416 -3415 -3414 -3413 -3412 -3411 -3410 -3409 -3408 -3407 -3406 -3405 -3404 -3403 -3402 -3401 -3400 -3399 -3398 -3397 -3396 -3395 -3394 -3393 -3392 -3391 -3390 -3389 -3388 -3387 -3386 -3385 -3384 -3383 -3382 -3381 -3380 -3379 -3378 -3377 -3376 -3375 -3374 -3373 -3372 -3371 -3370 -3369 -3368 -3367 -3366 -3365 -3364 -3363 -3362 -3361 -3360 -3359 -3358 -3357 -3356 -3355 -3354 -3353 -3352 -3351 -3350 -3349 -3348 -3347 -3346 -3345 -3344 -3343 -3342 -3341 -3340 -3339 -3338 -3337 -3336 -3335 -3334 -3333 -3332 -3331 -3330 -3329 -3328 -3327 -3326 -3325 -3324 -3323 -3322 -3321 -3320 -3319 -3318 -3317 -3316 -3315 -3314 -3313 -3312 -3311 -3310 -3309 -3308 -3307 -3306 -3305 -3304 -3303 -3302 -3301 -3300 -3299 -3298 -3297 -3296 -3295 -3294 -3293 -3292 -3291 -3290 -3289 -3288 -3287 -3286 -3285 -3284 -3283 -3282 -3281 -3280 -3279 -3278 -3277 -3276 -3275 -3274 -3273 -3272 -3271 -3270 -3269 -3268 -3267 -3266 -3265 -3264 -3263 -3262 -3261 -3260 -3259 -3258 -3257 -3256 -3255 -3254 -3253 -3252 -3251 -3250 -3249 -3248 -3247 -3246 -3245 -3244 -3243 -3242 -3241 -3240 -3239 -3238 -3237 -3236 -3235 -3234 -3233 -3232 -3231 -3230 -3229 -3228 -3227 -3226 -3225 -3224 -3223 -3222 -3221 -3220 -3219 -3218 -3217 -3216 -3215 -3214 -3213 -3212 -3211 -3210 -3209 -3208 -3207 -3206 -3205 -3204 -3203 -3202 -3201 -3200 -3199 -3198 -3197 -3196 -3195 -3194 -3193 -3192 -3191 -3190 -3189 -3188 -3187 -3186 -3185 -3184 -3183 -3182 -3181 -3180 -3179 -3178 -3177 -3176 -3175 -3174 -3173 -3172 -3171 -3170 -3169 -3168 -3167 -3166 -3165 -3164 -3163 -3162 -3161 -3160 -3159 -3158 -3157 -3156 -3155 -3154 -3153 -3152 -3151 -3150 -3149 -3148 -3147 -3146 -3145 -3144 -3143 -3142 -3141 -3140 -3139 -3138 -3137 -3136 -3135 -3134 -3133 -3132 -3131 -3130 -3129 -3128 -3127 -3126 -3125 -3124 -3123 -3122 -3121 -3120 -3119 -3118 -3117 -3116 -3115 -3114 -3113 -3112 -3111 -3110 -3109 -3108 -3107 -3106 -3105 -3104 -3103 -3102 -3101 -3100 -3099 -3098 -3097 -3096 -3095 -3094 -3093 -3092 -3091 -3090 -3089 -3088 -3087 -3086 -3085 -3084 -3083 -3082 -3081 -3080 -3079 -3078 -3077 -3076 -3075 -3074 -3073 -3072 -3071 -3070 -3069 -3068 -3067 -3066 -3065 -3064 -3063 -3062 -3061 -3060 -3059 -3058 -3057 -3056 -3055 -3054 -3053 -3052 -3051 -3050 -3049 -3048 -3047 -3046 -3045 -3044 -3043 -3042 -3041 -3040 -3039 -3038 -3037 -3036 -3035 -3034 -3033 -3032 -3031 -3030 -3029 -3028 -3027 -3026 -3025 -3024 -3023 -3022 -3021 -3020 -3019 -3018 -3017 -3016 -3015 -3014 -3013 -3012 -3011 -3010 -3009 -3008 -3007 -3006 -3005 -3004 -3003 -3002 -3001 -3000 -2999 -2998 -2997 -2996 -2995 -2994 -2993 -2992 -2991 -2990 -2989 -2988 -2987 -2986 -2985 -2984 -2983 -2982 -2981 -2980 -2979 -2978 -2977 -2976 -2975 -2974 -2973 -2972 -2971 -2970 -2969 -2968 -2967 -2966 -2965 -2964 -2963 -2962 -2961 -2960 -2959 -2958 -2957 -2956 -2955 -2954 -2953 -2952 -2951 -2950 -2949 -2948 -2947 -2946 -2945 -2944 -2943 -2942 -2941 -2940 -2939 -2938 -2937 -2936 -2935 -2934 -2933 -2932 -2931 -2930 -2929 -2928 -2927 -2926 -2925 -2924 -2923 -2922 -2921 -2920 -2919 -2918 -2917 -2916 -2915 -2914 -2913 -2912 -2911 -2910 -2909 -2908 -2907 -2906 -2905 -2904 -2903 -2902 -2901 -2900 -2899 -2898 -2897 -2896 -2895 -2894 -2893 -2892 -2891 -2890 -2889 -2888 -2887 -2886 -2885 -2884 -2883 -2882 -2881 -2880 -2879 -2878 -2877 -2876 -2875 -2874 -2873 -2872 -2871 -2870 -2869 -2868 -2867 -2866 -2865 -2864 -2863 -2862 -2861 -2860 -2859 -2858 -2857 -2856 -2855 -2854 -2853 -2852 -2851 -2850 -2849 -2848 -2847 -2846 -2845 -2844 -2843 -2842 -2841 -2840 -2839 -2838 -2837 -2836 -2835 -2834 -2833 -2832 -2831 -2830 -2829 -2828 -2827 -2826 -2825 -2824 -2823 -2822 -2821 -2820 -2819 -2818 -2817 -2816 -2815 -2814 -2813 -2812 -2811 -2810 -2809 -2808 -2807 -2806 -2805 -2804 -2803 -2802 -2801 -2800 -2799 -2798 -2797 -2796 -2795 -2794 -2793 -2792 -2791 -2790 -2789 -2788 -2787 -2786 -2785 -2784 -2783 -2782 -2781 -2780 -2779 -2778 -2777 -2776 -2775 -2774 -2773 -2772 -2771 -2770 -2769 -2768 -2767 -2766 -2765 -2764 -2763 -2762 -2761 -2760 -2759 -2758 -2757 -2756 -2755 -2754 -2753 -2752 -2751 -2750 -2749 -2748 -2747 -2746 -2745 -2744 -2743 -2742 -2741 -2740 -2739 -2738 -2737 -2736 -2735 -2734 -2733 -2732 -2731 -2730 -2729 -2728 -2727 -2726 -2725 -2724 -2723 -2722 -2721 -2720 -2719 -2718 -2717 -2716 -2715 -2714 -2713 -2712 -2711 -2710 -2709 -2708 -2707 -2706 -2705 -2704 -2703 -2702 -2701 -2700 -2699 -2698 -2697 -2696 -2695 -2694 -2693 -2692 -2691 -2690 -2689 -2688 -2687 -2686 -2685 -2684 -2683 -2682 -2681 -2680 -2679 -2678 -2677 -2676 -2675 -2674 -2673 -2672 -2671 -2670 -2669 -2668 -2667 -2666 -2665 -2664 -2663 -2662 -2661 -2660 -2659 -2658 -2657 -2656 -2655 -2654 -2653 -2652 -2651 -2650 -2649 -2648 -2647 -2646 -2645 -2644 -2643 -2642 -2641 -2640 -2639 -2638 -2637 -2636 -2635 -2634 -2633 -2632 -2631 -2630 -2629 -2628 -2627 -2626 -2625 -2624 -2623 -2622 -2621 -2620 -2619 -2618 -2617 -2616 -2615 -2614 -2613 -2612 -2611 -2610 -2609 -2608 -2607 -2606 -2605 -2604 -2603 -2602 -2601 -2600 -2599 -2598 -2597 -2596 -2595 -2594 -2593 -2592 -2591 -2590 -2589 -2588 -2587 -2586 -2585 -2584 -2583 -2582 -2581 -2580 -2579 -2578 -2577 -2576 -2575 -2574 -2573 -2572 -2571 -2570 -2569 -2568 -2567 -2566 -2565 -2564 -2563 -2562 -2561 -2560 -2559 -2558 -2557 -2556 -2555 -2554 -2553 -2552 -2551 -2550 -2549 -2548 -2547 -2546 -2545 -2544 -2543 -2542 -2541 -2540 -2539 -2538 -2537 -2536 -2535 -2534 -2533 -2532 -2531 -2530 -2529 -2528 -2527 -2526 -2525 -2524 -2523 -2522 -2521 -2520 -2519 -2518 -2517 -2516 -2515 -2514 -2513 -2512 -2511 -2510 -2509 -2508 -2507 -2506 -2505 -2504 -2503 -2502 -2501 -2500 -2499 -2498 -2497 -2496 -2495 -2494 -2493 -2492 -2491 -2490 -2489 -2488 -2487 -2486 -2485 -2484 -2483 -2482 -2481 -2480 -2479 -2478 -2477 -2476 -2475 -2474 -2473 -2472 -2471 -2470 -2469 -2468 -2467 -2466 -2465 -2464 -2463 -2462 -2461 -2460 -2459 -2458 -2457 -2456 -2455 -2454 -2453 -2452 -2451 -2450 -2449 -2448 -2447 -2446 -2445 -2444 -2443 -2442 -2441 -2440 -2439 -2438 -2437 -2436 -2435 -2434 -2433 -2432 -2431 -2430 -2429 -2428 -2427 -2426 -2425 -2424 -2423 -2422 -2421 -2420 -2419 -2418 -2417 -2416 -2415 -2414 -2413 -2412 -2411 -2410 -2409 -2408 -2407 -2406 -2405 -2404 -2403 -2402 -2401 -2400 -2399 -2398 -2397 -2396 -2395 -2394 -2393 -2392 -2391 -2390 -2389 -2388 -2387 -2386 -2385 -2384 -2383 -2382 -2381 -2380 -2379 -2378 -2377 -2376 -2375 -2374 -2373 -2372 -2371 -2370 -2369 -2368 -2367 -2366 -2365 -2364 -2363 -2362 -2361 -2360 -2359 -2358 -2357 -2356 -2355 -2354 -2353 -2352 -2351 -2350 -2349 -2348 -2347 -2346 -2345 -2344 -2343 -2342 -2341 -2340 -2339 -2338 -2337 -2336 -2335 -2334 -2333 -2332 -2331 -2330 -2329 -2328 -2327 -2326 -2325 -2324 -2323 -2322 -2321 -2320 -2319 -2318 -2317 -2316 -2315 -2314 -2313 -2312 -2311 -2310 -2309 -2308 -2307 -2306 -2305 -2304 -2303 -2302 -2301 -2300 -2299 -2298 -2297 -2296 -2295 -2294 -2293 -2292 -2291 -2290 -2289 -2288 -2287 -2286 -2285 -2284 -2283 -2282 -2281 -2280 -2279 -2278 -2277 -2276 -2275 -2274 -2273 -2272 -2271 -2270 -2269 -2268 -2267 -2266 -2265 -2264 -2263 -2262 -2261 -2260 -2259 -2258 -2257 -2256 -2255 -2254 -2253 -2252 -2251 -2250 -2249 -2248 -2247 -2246 -2245 -2244 -2243 -2242 -2241 -2240 -2239 -2238 -2237 -2236 -2235 -2234 -2233 -2232 -2231 -2230 -2229 -2228 -2227 -2226 -2225 -2224 -2223 -2222 -2221 -2220 -2219 -2218 -2217 -2216 -2215 -2214 -2213 -2212 -2211 -2210 -2209 -2208 -2207 -2206 -2205 -2204 -2203 -2202 -2201 -2200 -2199 -2198 -2197 -2196 -2195 -2194 -2193 -2192 -2191 -2190 -2189 -2188 -2187 -2186 -2185 -2184 -2183 -2182 -2181 -2180 -2179 -2178 -2177 -2176 -2175 -2174 -2173 -2172 -2171 -2170 -2169 -2168 -2167 -2166 -2165 -2164 -2163 -2162 -2161 -2160 -2159 -2158 -2157 -2156 -2155 -2154 -2153 -2152 -2151 -2150 -2149 -2148 -2147 -2146 -2145 -2144 -2143 -2142 -2141 -2140 -2139 -2138 -2137 -2136 -2135 -2134 -2133 -2132 -2131 -2130 -2129 -2128 -2127 -2126 -2125 -2124 -2123 -2122 -2121 -2120 -2119 -2118 -2117 -2116 -2115 -2114 -2113 -2112 -2111 -2110 -2109 -2108 -2107 -2106 -2105 -2104 -2103 -2102 -2101 -2100 -2099 -2098 -2097 -2096 -2095 -2094 -2093 -2092 -2091 -2090 -2089 -2088 -2087 -2086 -2085 -2084 -2083 -2082 -2081 -2080 -2079 -2078 -2077 -2076 -2075 -2074 -2073 -2072 -2071 -2070 -2069 -2068 -2067 -2066 -2065 -2064 -2063 -2062 -2061 -2060 -2059 -2058 -2057 -2056 -2055 -2054 -2053 -2052 -2051 -2050 -2049 -2048 -2047 -2046 -2045 -2044 -2043 -2042 -2041 -2040 -2039 -2038 -2037 -2036 -2035 -2034 -2033 -2032 -2031 -2030 -2029 -2028 -2027 -2026 -2025 -2024 -2023 -2022 -2021 -2020 -2019 -2018 -2017 -2016 -2015 -2014 -2013 -2012 -2011 -2010 -2009 -2008 -2007 -2006 -2005 -2004 -2003 -2002 -2001 -2000 -1999 -1998 -1997 -1996 -1995 -1994 -1993 -1992 -1991 -1990 -1989 -1988 -1987 -1986 -1985 -1984 -1983 -1982 -1981 -1980 -1979 -1978 -1977 -1976 -1975 -1974 -1973 -1972 -1971 -1970 -1969 -1968 -1967 -1966 -1965 -1964 -1963 -1962 -1961 -1960 -1959 -1958 -1957 -1956 -1955 -1954 -1953 -1952 -1951 -1950 -1949 -1948 -1947 -1946 -1945 -1944 -1943 -1942 -1941 -1940 -1939 -1938 -1937 -1936 -1935 -1934 -1933 -1932 -1931 -1930 -1929 -1928 -1927 -1926 -1925 -1924 -1923 -1922 -1921 -1920 -1919 -1918 -1917 -1916 -1915 -1914 -1913 -1912 -1911 -1910 -1909 -1908 -1907 -1906 -1905 -1904 -1903 -1902 -1901 -1900 -1899 -1898 -1897 -1896 -1895 -1894 -1893 -1892 -1891 -1890 -1889 -1888 -1887 -1886 -1885 -1884 -1883 -1882 -1881 -1880 -1879 -1878 -1877 -1876 -1875 -1874 -1873 -1872 -1871 -1870 -1869 -1868 -1867 -1866 -1865 -1864 -1863 -1862 -1861 -1860 -1859 -1858 -1857 -1856 -1855 -1854 -1853 -1852 -1851 -1850 -1849 -1848 -1847 -1846 -1845 -1844 -1843 -1842 -1841 -1840 -1839 -1838 -1837 -1836 -1835 -1834 -1833 -1832 -1831 -1830 -1829 -1828 -1827 -1826 -1825 -1824 -1823 -1822 -1821 -1820 -1819 -1818 -1817 -1816 -1815 -1814 -1813 -1812 -1811 -1810 -1809 -1808 -1807 -1806 -1805 -1804 -1803 -1802 -1801 -1800 -1799 -1798 -1797 -1796 -1795 -1794 -1793 -1792 -1791 -1790 -1789 -1788 -1787 -1786 -1785 -1784 -1783 -1782 -1781 -1780 -1779 -1778 -1777 -1776 -1775 -1774 -1773 -1772 -1771 -1770 -1769 -1768 -1767 -1766 -1765 -1764 -1763 -1762 -1761 -1760 -1759 -1758 -1757 -1756 -1755 -1754 -1753 -1752 -1751 -1750 -1749 -1748 -1747 -1746 -1745 -1744 -1743 -1742 -1741 -1740 -1739 -1738 -1737 -1736 -1735 -1734 -1733 -1732 -1731 -1730 -1729 -1728 -1727 -1726 -1725 -1724 -1723 -1722 -1721 -1720 -1719 -1718 -1717 -1716 -1715 -1714 -1713 -1712 -1711 -1710 -1709 -1708 -1707 -1706 -1705 -1704 -1703 -1702 -1701 -1700 -1699 -1698 -1697 -1696 -1695 -1694 -1693 -1692 -1691 -1690 -1689 -1688 -1687 -1686 -1685 -1684 -1683 -1682 -1681 -1680 -1679 -1678 -1677 -1676 -1675 -1674 -1673 -1672 -1671 -1670 -1669 -1668 -1667 -1666 -1665 -1664 -1663 -1662 -1661 -1660 -1659 -1658 -1657 -1656 -1655 -1654 -1653 -1652 -1651 -1650 -1649 -1648 -1647 -1646 -1645 -1644 -1643 -1642 -1641 -1640 -1639 -1638 -1637 -1636 -1635 -1634 -1633 -1632 -1631 -1630 -1629 -1628 -1627 -1626 -1625 -1624 -1623 -1622 -1621 -1620 -1619 -1618 -1617 -1616 -1615 -1614 -1613 -1612 -1611 -1610 -1609 -1608 -1607 -1606 -1605 -1604 -1603 -1602 -1601 -1600 -1599 -1598 -1597 -1596 -1595 -1594 -1593 -1592 -1591 -1590 -1589 -1588 -1587 -1586 -1585 -1584 -1583 -1582 -1581 -1580 -1579 -1578 -1577 -1576 -1575 -1574 -1573 -1572 -1571 -1570 -1569 -1568 -1567 -1566 -1565 -1564 -1563 -1562 -1561 -1560 -1559 -1558 -1557 -1556 -1555 -1554 -1553 -1552 -1551 -1550 -1549 -1548 -1547 -1546 -1545 -1544 -1543 -1542 -1541 -1540 -1539 -1538 -1537 -1536 -1535 -1534 -1533 -1532 -1531 -1530 -1529 -1528 -1527 -1526 -1525 -1524 -1523 -1522 -1521 -1520 -1519 -1518 -1517 -1516 -1515 -1514 -1513 -1512 -1511 -1510 -1509 -1508 -1507 -1506 -1505 -1504 -1503 -1502 -1501 -1500 -1499 -1498 -1497 -1496 -1495 -1494 -1493 -1492 -1491 -1490 -1489 -1488 -1487 -1486 -1485 -1484 -1483 -1482 -1481 -1480 -1479 -1478 -1477 -1476 -1475 -1474 -1473 -1472 -1471 -1470 -1469 -1468 -1467 -1466 -1465 -1464 -1463 -1462 -1461 -1460 -1459 -1458 -1457 -1456 -1455 -1454 -1453 -1452 -1451 -1450 -1449 -1448 -1447 -1446 -1445 -1444 -1443 -1442 -1441 -1440 -1439 -1438 -1437 -1436 -1435 -1434 -1433 -1432 -1431 -1430 -1429 -1428 -1427 -1426 -1425 -1424 -1423 -1422 -1421 -1420 -1419 -1418 -1417 -1416 -1415 -1414 -1413 -1412 -1411 -1410 -1409 -1408 -1407 -1406 -1405 -1404 -1403 -1402 -1401 -1400 -1399 -1398 -1397 -1396 -1395 -1394 -1393 -1392 -1391 -1390 -1389 -1388 -1387 -1386 -1385 -1384 -1383 -1382 -1381 -1380 -1379 -1378 -1377 -1376 -1375 -1374 -1373 -1372 -1371 -1370 -1369 -1368 -1367 -1366 -1365 -1364 -1363 -1362 -1361 -1360 -1359 -1358 -1357 -1356 -1355 -1354 -1353 -1352 -1351 -1350 -1349 -1348 -1347 -1346 -1345 -1344 -1343 -1342 -1341 -1340 -1339 -1338 -1337 -1336 -1335 -1334 -1333 -1332 -1331 -1330 -1329 -1328 -1327 -1326 -1325 -1324 -1323 -1322 -1321 -1320 -1319 -1318 -1317 -1316 -1315 -1314 -1313 -1312 -1311 -1310 -1309 -1308 -1307 -1306 -1305 -1304 -1303 -1302 -1301 -1300 -1299 -1298 -1297 -1296 -1295 -1294 -1293 -1292 -1291 -1290 -1289 -1288 -1287 -1286 -1285 -1284 -1283 -1282 -1281 -1280 -1279 -1278 -1277 -1276 -1275 -1274 -1273 -1272 -1271 -1270 -1269 -1268 -1267 -1266 -1265 -1264 -1263 -1262 -1261 -1260 -1259 -1258 -1257 -1256 -1255 -1254 -1253 -1252 -1251 -1250 -1249 -1248 -1247 -1246 -1245 -1244 -1243 -1242 -1241 -1240 -1239 -1238 -1237 -1236 -1235 -1234 -1233 -1232 -1231 -1230 -1229 -1228 -1227 -1226 -1225 -1224 -1223 -1222 -1221 -1220 -1219 -1218 -1217 -1216 -1215 -1214 -1213 -1212 -1211 -1210 -1209 -1208 -1207 -1206 -1205 -1204 -1203 -1202 -1201 -1200 -1199 -1198 -1197 -1196 -1195 -1194 -1193 -1192 -1191 -1190 -1189 -1188 -1187 -1186 -1185 -1184 -1183 -1182 -1181 -1180 -1179 -1178 -1177 -1176 -1175 -1174 -1173 -1172 -1171 -1170 -1169 -1168 -1167 -1166 -1165 -1164 -1163 -1162 -1161 -1160 -1159 -1158 -1157 -1156 -1155 -1154 -1153 -1152 -1151 -1150 -1149 -1148 -1147 -1146 -1145 -1144 -1143 -1142 -1141 -1140 -1139 -1138 -1137 -1136 -1135 -1134 -1133 -1132 -1131 -1130 -1129 -1128 -1127 -1126 -1125 -1124 -1123 -1122 -1121 -1120 -1119 -1118 -1117 -1116 -1115 -1114 -1113 -1112 -1111 -1110 -1109 -1108 -1107 -1106 -1105 -1104 -1103 -1102 -1101 -1100 -1099 -1098 -1097 -1096 -1095 -1094 -1093 -1092 -1091 -1090 -1089 -1088 -1087 -1086 -1085 -1084 -1083 -1082 -1081 -1080 -1079 -1078 -1077 -1076 -1075 -1074 -1073 -1072 -1071 -1070 -1069 -1068 -1067 -1066 -1065 -1064 -1063 -1062 -1061 -1060 -1059 -1058 -1057 -1056 -1055 -1054 -1053 -1052 -1051 -1050 -1049 -1048 -1047 -1046 -1045 -1044 -1043 -1042 -1041 -1040 -1039 -1038 -1037 -1036 -1035 -1034 -1033 -1032 -1031 -1030 -1029 -1028 -1027 -1026 -1025 -1024 -1023 -1022 -1021 -1020 -1019 -1018 -1017 -1016 -1015 -1014 -1013 -1012 -1011 -1010 -1009 -1008 -1007 -1006 -1005 -1004 -1003 -1002 -1001 -1000 -999 -998 -997 -996 -995 -994 -993 -992 -991 -990 -989 -988 -987 -986 -985 -984 -983 -982 -981 -980 -979 -978 -977 -976 -975 -974 -973 -972 -971 -970 -969 -968 -967 -966 -965 -964 -963 -962 -961 -960 -959 -958 -957 -956 -955 -954 -953 -952 -951 -950 -949 -948 -947 -946 -945 -944 -943 -942 -941 -940 -939 -938 -937 -936 -935 -934 -933 -932 -931 -930 -929 -928 -927 -926 -925 -924 -923 -922 -921 -920 -919 -918 -917 -916 -915 -914 -913 -912 -911 -910 -909 -908 -907 -906 -905 -904 -903 -902 -901 -900 -899 -898 -897 -896 -895 -894 -893 -892 -891 -890 -889 -888 -887 -886 -885 -884 -883 -882 -881 -880 -879 -878 -877 -876 -875 -874 -873 -872 -871 -870 -869 -868 -867 -866 -865 -864 -863 -862 -861 -860 -859 -858 -857 -856 -855 -854 -853 -852 -851 -850 -849 -848 -847 -846 -845 -844 -843 -842 -841 -840 -839 -838 -837 -836 -835 -834 -833 -832 -831 -830 -829 -828 -827 -826 -825 -824 -823 -822 -821 -820 -819 -818 -817 -816 -815 -814 -813 -812 -811 -810 -809 -808 -807 -806 -805 -804 -803 -802 -801 -800 -799 -798 -797 -796 -795 -794 -793 -792 -791 -790 -789 -788 -787 -786 -785 -784 -783 -782 -781 -780 -779 -778 -777 -776 -775 -774 -773 -772 -771 -770 -769 -768 -767 -766 -765 -764 -763 -762 -761 -760 -759 -758 -757 -756 -755 -754 -753 -752 -751 -750 -749 -748 -747 -746 -745 -744 -743 -742 -741 -740 -739 -738 -737 -736 -735 -734 -733 -732 -731 -730 -729 -728 -727 -726 -725 -724 -723 -722 -721 -720 -719 -718 -717 -716 -715 -714 -713 -712 -711 -710 -709 -708 -707 -706 -705 -704 -703 -702 -701 -700 -699 -698 -697 -696 -695 -694 -693 -692 -691 -690 -689 -688 -687 -686 -685 -684 -683 -682 -681 -680 -679 -678 -677 -676 -675 -674 -673 -672 -671 -670 -669 -668 -667 -666 -665 -664 -663 -662 -661 -660 -659 -658 -657 -656 -655 -654 -653 -652 -651 -650 -649 -648 -647 -646 -645 -644 -643 -642 -641 -640 -639 -638 -637 -636 -635 -634 -633 -632 -631 -630 -629 -628 -627 -626 -625 -624 -623 -622 -621 -620 -619 -618 -617 -616 -615 -614 -613 -612 -611 -610 -609 -608 -607 -606 -605 -604 -603 -602 -601 -600 -599 -598 -597 -596 -595 -594 -593 -592 -591 -590 -589 -588 -587 -586 -585 -584 -583 -582 -581 -580 -579 -578 -577 -576 -575 -574 -573 -572 -571 -570 -569 -568 -567 -566 -565 -564 -563 -562 -561 -560 -559 -558 -557 -556 -555 -554 -553 -552 -551 -550 -549 -548 -547 -546 -545 -544 -543 -542 -541 -540 -539 -538 -537 -536 -535 -534 -533 -532 -531 -530 -529 -528 -527 -526 -525 -524 -523 -522 -521 -520 -519 -518 -517 -516 -515 -514 -513 -512 -511 -510 -509 -508 -507 -506 -505 -504 -503 -502 -501 -500 -499 -498 -497 -496 -495 -494 -493 -492 -491 -490 -489 -488 -487 -486 -485 -484 -483 -482 -481 -480 -479 -478 -477 -476 -475 -474 -473 -472 -471 -470 -469 -468 -467 -466 -465 -464 -463 -462 -461 -460 -459 -458 -457 -456 -455 -454 -453 -452 -451 -450 -449 -448 -447 -446 -445 -444 -443 -442 -441 -440 -439 -438 -437 -436 -435 -434 -433 -432 -431 -430 -429 -428 -427 -426 -425 -424 -423 -422 -421 -420 -419 -418 -417 -416 -415 -414 -413 -412 -411 -410 -409 -408 -407 -406 -405 -404 -403 -402 -401 -400 -399 -398 -397 -396 -395 -394 -393 -392 -391 -390 -389 -388 -387 -386 -385 -384 -383 -382 -381 -380 -379 -378 -377 -376 -375 -374 -373 -372 -371 -370 -369 -368 -367 -366 -365 -364 -363 -362 -361 -360 -359 -358 -357 -356 -355 -354 -353 -352 -351 -350 -349 -348 -347 -346 -345 -344 -343 -342 -341 -340 -339 -338 -337 -336 -335 -334 -333 -332 -331 -330 -329 -328 -327 -326 -325 -324 -323 -322 -321 -320 -319 -318 -317 -316 -315 -314 -313 -312 -311 -310 -309 -308 -307 -306 -305 -304 -303 -302 -301 -300 -299 -298 -297 -296 -295 -294 -293 -292 -291 -290 -289 -288 -287 -286 -285 -284 -283 -282 -281 -280 -279 -278 -277 -276 -275 -274 -273 -272 -271 -270 -269 -268 -267 -266 -265 -264 -263 -262 -261 -260 -259 -258 -257 -256 -255 -254 -253 -252 -251 -250 -249 -248 -247 -246 -245 -244 -243 -242 -241 -240 -239 -238 -237 -236 -235 -234 -233 -232 -231 -230 -229 -228 -227 -226 -225 -224 -223 -222 -221 -220 -219 -218 -217 -216 -215 -214 -213 -212 -211 -210 -209 -208 -207 -206 -205 -204 -203 -202 -201 -200 -199 -198 -197 -196 -195 -194 -193 -192 -191 -190 -189 -188 -187 -186 -185 -184 -183 -182 -181 -180 -179 -178 -177 -176 -175 -174 -173 -172 -171 -170 -169 -168 -167 -166 -165 -164 -163 -162 -161 -160 -159 -158 -157 -156 -155 -154 -153 -152 -151 -150 -149 -148 -147 -146 -145 -144 -143 -142 -141 -140 -139 -138 -137 -136 -135 -134 -133 -132 -131 -130 -129 -128 -127 -126 -125 -124 -123 -122 -121 -120 -119 -118 -117 -116 -115 -114 -113 -112 -111 -110 -109 -108 -107 -106 -105 -104 -103 -102 -101 -100 -99 -98 -97 -96 -95 -94 -93 -92 -91 -90 -89 -88 -87 -86 -85 -84 -83 -82 -81 -80 -79 -78 -77 -76 -75 -74 -73 -72 -71 -70 -69 -68 -67 -66 -65 -64 -63 -62 -61 -60 -59 -58 -57 -56 -55 -54 -53 -52 -51 -50 -49 -48 -47 -46 -45 -44 -43 -42 -41 -40 -39 -38 -37 -36 -35 -34 -33 -32 -31 -30 -29 -28 -27 -26 -25 -24 -23 -22 -21 -20 -19 -18 -17 -16 -15 -14 -13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 1801 1802 1803 1804 1805 1806 1807 1808 1809 1810 1811 1812 1813 1814 1815 1816 1817 1818 1819 1820 1821 1822 1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833 1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844 1845 1846 1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993 1994 1995 1996 1997 1998 1999 2000 2001 2002 2003 2004 2005 2006 2007 2008 2009 2010 2011 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040 2041 2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061 2062 2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093 2094 2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119 2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 2187 2188 2189 2190 2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207 2208 2209 2210 2211 2212 2213 2214 2215 2216 2217 2218 2219 2220 2221 2222 2223 2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234 2235 2236 2237 2238 2239 2240 2241 2242 2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253 2254 2255 2256 2257 2258 2259 2260 2261 2262 2263 2264 2265 2266 2267 2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279 2280 2281 2282 2283 2284 2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295 2296 2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308 2309 2310 2311 2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323 2324 2325 2326 2327 2328 2329 2330 2331 2332 2333 2334 2335 2336 2337 2338 2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372 2373 2374 2375 2376 2377 2378 2379 2380 2381 2382 2383 2384 2385 2386 2387 2388 2389 2390 2391 2392 2393 2394 2395 2396 2397 2398 2399 2400 2401 2402 2403 2404 2405 2406 2407 2408 2409 2410 2411 2412 2413 2414 2415 2416 2417 2418 2419 2420 2421 2422 2423 2424 2425 2426 2427 2428 2429 2430 2431 2432 2433 2434 2435 2436 2437 2438 2439 2440 2441 2442 2443 2444 2445 2446 2447 2448 2449 2450 2451 2452 2453 2454 2455 2456 2457 2458 2459 2460 2461 2462 2463 2464 2465 2466 2467 2468 2469 2470 2471 2472 2473 2474 2475 2476 2477 2478 2479 2480 2481 2482 2483 2484 2485 2486 2487 2488 2489 2490 2491 2492 2493 2494 2495 2496 2497 2498 2499 2500 2501 2502 2503 2504 2505 2506 2507 2508 2509 2510 2511 2512 2513 2514 2515 2516 2517 2518 2519 2520 2521 2522 2523 2524 2525 2526 2527 2528 2529 2530 2531 2532 2533 2534 2535 2536 2537 2538 2539 2540 2541 2542 2543 2544 2545 2546 2547 2548 2549 2550 2551 2552 2553 2554 2555 2556 2557 2558 2559 2560 2561 2562 2563 2564 2565 2566 2567 2568 2569 2570 2571 2572 2573 2574 2575 2576 2577 2578 2579 2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603 2604 2605 2606 2607 2608 2609 2610 2611 2612 2613 2614 2615 2616 2617 2618 2619 2620 2621 2622 2623 2624 2625 2626 2627 2628 2629 2630 2631 2632 2633 2634 2635 2636 2637 2638 2639 2640 2641 2642 2643 2644 2645 2646 2647 2648 2649 2650 2651 2652 2653 2654 2655 2656 2657 2658 2659 2660 2661 2662 2663 2664 2665 2666 2667 2668 2669 2670 2671 2672 2673 2674 2675 2676 2677 2678 2679 2680 2681 2682 2683 2684 2685 2686 2687 2688 2689 2690 2691 2692 2693 2694 2695 2696 2697 2698 2699 2700 2701 2702 2703 2704 2705 2706 2707 2708 2709 2710 2711 2712 2713 2714 2715 2716 2717 2718 2719 2720 2721 2722 2723 2724 2725 2726 2727 2728 2729 2730 2731 2732 2733 2734 2735 2736 2737 2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762 2763 2764 2765 2766 2767 2768 2769 2770 2771 2772 2773 2774 2775 2776 2777 2778 2779 2780 2781 2782 2783 2784 2785 2786 2787 2788 2789 2790 2791 2792 2793 2794 2795 2796 2797 2798 2799 2800 2801 2802 2803 2804 2805 2806 2807 2808 2809 2810 2811 2812 2813 2814 2815 2816 2817 2818 2819 2820 2821 2822 2823 2824 2825 2826 2827 2828 2829 2830 2831 2832 2833 2834 2835 2836 2837 2838 2839 2840 2841 2842 2843 2844 2845 2846 2847 2848 2849 2850 2851 2852 2853 2854 2855 2856 2857 2858 2859 2860 2861 2862 2863 2864 2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878 2879 2880 2881 2882 2883 2884 2885 2886 2887 2888 2889 2890 2891 2892 2893 2894 2895 2896 2897 2898 2899 2900 2901 2902 2903 2904 2905 2906 2907 2908 2909 2910 2911 2912 2913 2914 2915 2916 2917 2918 2919 2920 2921 2922 2923 2924 2925 2926 2927 2928 2929 2930 2931 2932 2933 2934 2935 2936 2937 2938 2939 2940 2941 2942 2943 2944 2945 2946 2947 2948 2949 2950 2951 2952 2953 2954 2955 2956 2957 2958 2959 2960 2961 2962 2963 2964 2965 2966 2967 2968 2969 2970 2971 2972 2973 2974 2975 2976 2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991 2992 2993 2994 2995 2996 2997 2998 2999 3000 3001 3002 3003 3004 3005 3006 3007 3008 3009 3010 3011 3012 3013 3014 3015 3016 3017 3018 3019 3020 3021 3022 3023 3024 3025 3026 3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042 3043 3044 3045 3046 3047 3048 3049 3050 3051 3052 3053 3054 3055 3056 3057 3058 3059 3060 3061 3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075 3076 3077 3078 3079 3080 3081 3082 3083 3084 3085 3086 3087 3088 3089 3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100 3101 3102 3103 3104 3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120 3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131 3132 3133 3134 3135 3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148 3149 3150 3151 3152 3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163 3164 3165 3166 3167 3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183 3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198 3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209 3210 3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221 3222 3223 3224 3225 3226 3227 3228 3229 3230 3231 3232 3233 3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246 3247 3248 3249 3250 3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264 3265 3266 3267 3268 3269 3270 3271 3272 3273 3274 3275 3276 3277 3278 3279 3280 3281 3282 3283 3284 3285 3286 3287 3288 3289 3290 3291 3292 3293 3294 3295 3296 3297 3298 3299 3300 3301 3302 3303 3304 3305 3306 3307 3308 3309 3310 3311 3312 3313 3314 3315 3316 3317 3318 3319 3320 3321 3322 3323 3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338 3339 3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351 3352 3353 3354 3355 3356 3357 3358 3359 3360 3361 3362 3363 3364 3365 3366 3367 3368 3369 3370 3371 3372 3373 3374 3375 3376 3377 3378 3379 3380 3381 3382 3383 3384 3385 3386 3387 3388 3389 3390 3391 3392 3393 3394 3395 3396 3397 3398 3399 3400 3401 3402 3403 3404 3405 3406 3407 3408 3409 3410 3411 3412 3413 3414 3415 3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426 3427 3428 3429 3430 3431 3432 3433 3434 3435 3436 3437 3438 3439 3440 3441 3442 3443 3444 3445 3446 3447 3448 3449 3450 3451 3452 3453 3454 3455 3456 3457 3458 3459 3460 3461 3462 3463 3464 3465 3466 3467 3468 3469 3470 3471 3472 3473 3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528 3529 3530 3531 3532 3533 3534 3535 3536 3537 3538 3539 3540 3541 3542 3543 3544 3545 3546 3547 3548 3549 3550 3551 3552 3553 3554 3555 3556 3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568 3569 3570 3571 3572 3573 3574 3575 3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593 3594 3595 3596 3597 3598 3599 3600 3601 3602 3603 3604 3605 3606 3607 3608 3609 3610 3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623 3624 3625 3626 3627 3628 3629 3630 3631 3632 3633 3634 3635 3636 3637 3638 3639 3640 3641 3642 3643 3644 3645 3646 3647 3648 3649 3650 3651 3652 3653 3654 3655 3656 3657 3658 3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670 3671 3672 3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695 3696 3697 3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708 3709 3710 3711 3712 3713 3714 3715 3716 3717 3718 3719 3720 3721 3722 3723 3724 3725 3726 3727 3728 3729 3730 3731 3732 3733 3734 3735 3736 3737 3738 3739 3740 3741 3742 3743 3744 3745 3746 3747 3748 3749 3750 3751 3752 3753 3754 3755 3756 3757 3758 3759 3760 3761 3762 3763 3764 3765 3766 3767 3768 3769 3770 3771 3772 3773 3774 3775 3776 3777 3778 3779 3780 3781 3782 3783 3784 3785 3786 3787 3788 3789 3790 3791 3792 3793 3794 3795 3796 3797 3798 3799 3800 3801 3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813 3814 3815 3816 3817 3818 3819 3820 3821 3822 3823 3824 3825 3826 3827 3828 3829 3830 3831 3832 3833 3834 3835 3836 3837 3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851 3852 3853 3854 3855 3856 3857 3858 3859 3860 3861 3862 3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876 3877 3878 3879 3880 3881 3882 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3946 3947 3948 3949 3950 3951 3952 3953 3954 3955 3956 3957 3958 3959 3960 3961 3962 3963 3964 3965 3966 3967 3968 3969 3970 3971 3972 3973 3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998 3999 4000 4001 4002 4003 4004 4005 4006 4007 4008 4009 4010 4011 4012 4013 4014 4015 4016 4017 4018 4019 4020 4021 4022 4023 4024 4025 4026 4027 4028 4029 4030 4031 4032 4033 4034 4035 4036 4037 4038 4039 4040 4041 4042 4043 4044 4045 4046 4047 4048 4049 4050 4051 4052 4053 4054 4055 4056 4057 4058 4059 4060 4061 4062 4063 4064 4065 4066 4067 4068 4069 4070 4071 4072 4073 4074 4075 4076 4077 4078 4079 4080 4081 4082 4083 4084 4085 4086 4087 4088 4089 4090 4091 4092 4093 4094 4095 4096 4097 4098 4099 4100 4101 4102 4103 4104 4105 4106 4107 4108 4109 4110 4111 4112 4113 4114 4115 4116 4117 4118 4119 4120 4121 4122 4123 4124 4125 4126 4127 4128 4129 4130 4131 4132 4133 4134 4135 4136 4137 4138 4139 4140 4141 4142 4143 4144 4145 4146 4147 4148 4149 4150 4151 4152 4153 4154 4155 4156 4157 4158 4159 4160 4161 4162 4163 4164 4165 4166 4167 4168 4169 4170 4171 4172 4173 4174 4175 4176 4177 4178 4179 4180 4181 4182 4183 4184 4185 4186 4187 4188 4189 4190 4191 4192 4193 4194 4195 4196 4197 4198 4199 4200 4201 4202 4203 4204 4205 4206 4207 4208 4209 4210 4211 4212 4213 4214 4215 4216 4217 4218 4219 4220 4221 4222 4223 4224 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4236 4237 4238 4239 4240 4241 4242 4243 4244 4245 4246 4247 4248 4249 4250 4251 4252 4253 4254 4255 4256 4257 4258 4259 4260 4261 4262 4263 4264 4265 4266 4267 4268 4269 4270 4271 4272 4273 4274 4275 4276 4277 4278 4279 4280 4281 4282 4283 4284 4285 4286 4287 4288 4289 4290 4291 4292 4293 4294 4295 4296 4297 4298 4299 4300 4301 4302 4303 4304 4305 4306 4307 4308 4309 4310 4311 4312 4313 4314 4315 4316 4317 4318 4319 4320 4321 4322 4323 4324 4325 4326 4327 4328 4329 4330 4331 4332 4333 4334 4335 4336 4337 4338 4339 4340 4341 4342 4343 4344 4345 4346 4347 4348 4349 4350 4351 4352 4353 4354 4355 4356 4357 4358 4359 4360 4361 4362 4363 4364 4365 4366 4367 4368 4369 4370 4371 4372 4373 4374 4375 4376 4377 4378 4379 4380 4381 4382 4383 4384 4385 4386 4387 4388 4389 4390 4391 4392 4393 4394 4395 4396 4397 4398 4399 4400 4401 4402 4403 4404 4405 4406 4407 4408 4409 4410 4411 4412 4413 4414 4415 4416 4417 4418 4419 4420 4421 4422 4423 4424 4425 4426 4427 4428 4429 4430 4431 4432 4433 4434 4435 4436 4437 4438 4439 4440 4441 4442 4443 4444 4445 4446 4447 4448 4449 4450 4451 4452 4453 4454 4455 4456 4457 4458 4459 4460 4461 4462 4463 4464 4465 4466 4467 4468 4469 4470 4471 4472 4473 4474 4475 4476 4477 4478 4479 4480 4481 4482 4483 4484 4485 4486 4487 4488 4489 4490 4491 4492 4493 4494 4495 4496 4497 4498 4499 4500 4501 4502 4503 4504 4505 4506 4507 4508 4509 4510 4511 4512 4513 4514 4515 4516 4517 4518 4519 4520 4521 4522 4523 4524 4525 4526 4527 4528 4529 4530 4531 4532 4533 4534 4535 4536 4537 4538 4539 4540 4541 4542 4543 4544 4545 4546 4547 4548 4549 4550 4551 4552 4553 4554 4555 4556 4557 4558 4559 4560 4561 4562 4563 4564 4565 4566 4567 4568 4569 4570 4571 4572 4573 4574 4575 4576 4577 4578 4579 4580 4581 4582 4583 4584 4585 4586 4587 4588 4589 4590 4591 4592 4593 4594 4595 4596 4597 4598 4599 4600 4601 4602 4603 4604 4605 4606 4607 4608 4609 4610 4611 4612 4613 4614 4615 4616 4617 4618 4619 4620 4621 4622 4623 4624 4625 4626 4627 4628 4629 4630 4631 4632 4633 4634 4635 4636 4637 4638 4639 4640 4641 4642 4643 4644 4645 4646 4647 4648 4649 4650 4651 4652 4653 4654 4655 4656 4657 4658 4659 4660 4661 4662 4663 4664 4665 4666 4667 4668 4669 4670 4671 4672 4673 4674 4675 4676 4677 4678 4679 4680 4681 4682 4683 4684 4685 4686 4687 4688 4689 4690 4691 4692 4693 4694 4695 4696 4697 4698 4699 4700 4701 4702 4703 4704 4705 4706 4707 4708 4709 4710 4711 4712 4713 4714 4715 4716 4717 4718 4719 4720 4721 4722 4723 4724 4725 4726 4727 4728 4729 4730 4731 4732 4733 4734 4735 4736 4737 4738 4739 4740 4741 4742 4743 4744 4745 4746 4747 4748 4749 4750 4751 4752 4753 4754 4755 4756 4757 4758 4759 4760 4761 4762 4763 4764 4765 4766 4767 4768 4769 4770 4771 4772 4773 4774 4775 4776 4777 4778 4779 4780 4781 4782 4783 4784 4785 4786 4787 4788 4789 4790 4791 4792 4793 4794 4795 4796 4797 4798 4799 4800 4801 4802 4803 4804 4805 4806 4807 4808 4809 4810 4811 4812 4813 4814 4815 4816 4817 4818 4819 4820 4821 4822 4823 4824 4825 4826 4827 4828 4829 4830 4831 4832 4833 4834 4835 4836 4837 4838 4839 4840 4841 4842 4843 4844 4845 4846 4847 4848 4849 4850 4851 4852 4853 4854 4855 4856 4857 4858 4859 4860 4861 4862 4863 4864 4865 4866 4867 4868 4869 4870 4871 4872 4873 4874 4875 4876 4877 4878 4879 4880 4881 4882 4883 4884 4885 4886 4887 4888 4889 4890 4891 4892 4893 4894 4895 4896 4897 4898 4899 4900 4901 4902 4903 4904 4905 4906 4907 4908 4909 4910 4911 4912 4913 4914 4915 4916 4917 4918 4919 4920 4921 4922 4923 4924 4925 4926 4927 4928 4929 4930 4931 4932 4933 4934 4935 4936 4937 4938 4939 4940 4941 4942 4943 4944 4945 4946 4947 4948 4949 4950 4951 4952 4953 4954 4955 4956 4957 4958 4959 4960 4961 4962 4963 4964 4965 4966 4967 4968 4969 4970 4971 4972 4973 4974 4975 4976 4977 4978 4979 4980 4981 4982 4983 4984 4985 4986 4987 4988 4989 4990 4991 4992 4993 4994 4995 4996 4997 4998 4999 5000 5001 5002 5003 5004 5005 5006 5007 5008 5009 5010 5011 5012 5013 5014 5015 5016 5017 5018 5019 5020 5021 5022 5023 5024 5025 5026 5027 5028 5029 5030 5031 5032 5033 5034 5035 5036 5037 5038 5039 5040 5041 5042 5043 5044 5045 5046 5047 5048 5049 5050 5051 5052 5053 5054 5055 5056 5057 5058 5059 5060 5061 5062 5063 5064 5065 5066 5067 5068 5069 5070 5071 5072 5073 5074 5075 5076 5077 5078 5079 5080 5081 5082 5083 5084 5085 5086 5087 5088 5089 5090 5091 5092 5093 5094 5095 5096 5097 5098 5099 5100 5101 5102 5103 5104 5105 5106 5107 5108 5109 5110 5111 5112 5113 5114 5115 5116 5117 5118 5119 5120 5121 5122 5123 5124 5125 5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139 5140 5141 5142 5143 5144 5145 5146 5147 5148 5149 5150 5151 5152 5153 5154 5155 5156 5157 5158 5159 5160 5161 5162 5163 5164 5165 5166 5167 5168 5169 5170 5171 5172 5173 5174 5175 5176 5177 5178 5179 5180 5181 5182 5183 5184 5185 5186 5187 5188 5189 5190 5191 5192 5193 5194 5195 5196 5197 5198 5199 5200 5201 5202 5203 5204 5205 5206 5207 5208 5209 5210 5211 5212 5213 5214 5215 5216 5217 5218 5219 5220 5221 5222 5223 5224 5225 5226 5227 5228 5229 5230 5231 5232 5233 5234 5235 5236 5237 5238 5239 5240 5241 5242 5243 5244 5245 5246 5247 5248 5249 5250 5251 5252 5253 5254 5255 5256 5257 5258 5259 5260 5261 5262 5263 5264 5265 5266 5267 5268 5269 5270 5271 5272 5273 5274 5275 5276 5277 5278 5279 5280 5281 5282 5283 5284 5285 5286 5287 5288 5289 5290 5291 5292 5293 5294 5295 5296 5297 5298 5299 5300 5301 5302 5303 5304 5305 5306 5307 5308 5309 5310 5311 5312 5313 5314 5315 5316 5317 5318 5319 5320 5321 5322 5323 5324 5325 5326 5327 5328 5329 5330 5331 5332 5333 5334 5335 5336 5337 5338 5339 5340 5341 5342 5343 5344 5345 5346 5347 5348 5349 5350 5351 5352 5353 5354 5355 5356 5357 5358 5359 5360 5361 5362 5363 5364 5365 5366 5367 5368 5369 5370 5371 5372 5373 5374 5375 5376 5377 5378 5379 5380 5381 5382 5383 5384 5385 5386 5387 5388 5389 5390 5391 5392 5393 5394 5395 5396 5397 5398 5399 5400 5401 5402 5403 5404 5405 5406 5407 5408 5409 5410 5411 5412 5413 5414 5415 5416 5417 5418 5419 5420 5421 5422 5423 5424 5425 5426 5427 5428 5429 5430 5431 5432 5433 5434 5435 5436 5437 5438 5439 5440 5441 5442 5443 5444 5445 5446 5447 5448 5449 5450 5451 5452 5453 5454 5455 5456 5457 5458 5459 5460 5461 5462 5463 5464 5465 5466 5467 5468 5469 5470 5471 5472 5473 5474 5475 5476 5477 5478 5479 5480 5481 5482 5483 5484 5485 5486 5487 5488 5489 5490 5491 5492 5493 5494 5495 5496 5497 5498 5499 5500 5501 5502 5503 5504 5505 5506 5507 5508 5509 5510 5511 5512 5513 5514 5515 5516 5517 5518 5519 5520 5521 5522 5523 5524 5525 5526 5527 5528 5529 5530 5531 5532 5533 5534 5535 5536 5537 5538 5539 5540 5541 5542 5543 5544 5545 5546 5547 5548 5549 5550 5551 5552 5553 5554 5555 5556 5557 5558 5559 5560 5561 5562 5563 5564 5565 5566 5567 5568 5569 5570 5571 5572 5573 5574 5575 5576 5577 5578 5579 5580 5581 5582 5583 5584 5585 5586 5587 5588 5589 5590 5591 5592 5593 5594 5595 5596 5597 5598 5599 5600 5601 5602 5603 5604 5605 5606 5607 5608 5609 5610 5611 5612 5613 5614 5615 5616 5617 5618 5619 5620 5621 5622 5623 5624 5625 5626 5627 5628 5629 5630 5631 5632 5633 5634 5635 5636 5637 5638 5639 5640 5641 5642 5643 5644 5645 5646 5647 5648 5649 5650 5651 5652 5653 5654 5655 5656 5657 5658 5659 5660 5661 5662 5663 5664 5665 5666 5667 5668 5669 5670 5671 5672 5673 5674 5675 5676 5677 5678 5679 5680 5681 5682 5683 5684 5685 5686 5687 5688 5689 5690 5691 5692 5693 5694 5695 5696 5697 5698 5699 5700 5701 5702 5703 5704 5705 5706 5707 5708 5709 5710 5711 5712 5713 5714 5715 5716 5717 5718 5719 5720 5721 5722 5723 5724 5725 5726 5727 5728 5729 5730 5731 5732 5733 5734 5735 5736 5737 5738 5739 5740 5741 5742 5743 5744 5745 5746 5747 5748 5749 5750 5751 5752 5753 5754 5755 5756 5757 5758 5759 5760 5761 5762 5763 5764 5765 5766 5767 5768 5769 5770 5771 5772 5773 5774 5775 5776 5777 5778 5779 5780 5781 5782 5783 5784 5785 5786 5787 5788 5789 5790 5791 5792 5793 5794 5795 5796 5797 5798 5799 5800 5801 5802 5803 5804 5805 5806 5807 5808 5809 5810 5811 5812 5813 5814 5815 5816 5817 5818 5819 5820 5821 5822 5823 5824 5825 5826 5827 5828 5829 5830 5831 5832 5833 5834 5835 5836 5837 5838 5839 5840 5841 5842 5843 5844 5845 5846 5847 5848 5849 5850 5851 5852 5853 5854 5855 5856 5857 5858 5859 5860 5861 5862 5863 5864 5865 5866 5867 5868 5869 5870 5871 5872 5873 5874 5875 5876 5877 5878 5879 5880 5881 5882 5883 5884 5885 5886 5887 5888 5889 5890 5891 5892 5893 5894 5895 5896 5897 5898 5899 5900 5901 5902 5903 5904 5905 5906 5907 5908 5909 5910 5911 5912 5913 5914 5915 5916 5917 5918 5919 5920 5921 5922 5923 5924 5925 5926 5927 5928 5929 5930 5931 5932 5933 5934 5935 5936 5937 5938 5939 5940 5941 5942 5943 5944 5945 5946 5947 5948 5949 5950 5951 5952 5953 5954 5955 5956 5957 5958 5959 5960 5961 5962 5963 5964 5965 5966 5967 5968 5969 5970 5971 5972 5973 5974 5975 5976 5977 5978 5979 5980 5981 5982 5983 5984 5985 5986 5987 5988 5989 5990 5991 5992 5993 5994 5995 5996 5997 5998 5999 6000 6001 6002 6003 6004 6005 6006 6007 6008 6009 6010 6011 6012 6013 6014 6015 6016 6017 6018 6019 6020 6021 6022 6023 6024 6025 6026 6027 6028 6029 6030 6031 6032 6033 6034 6035 6036 6037 6038 6039 6040 6041 6042 6043 6044 6045 6046 6047 6048 6049 6050 6051 6052 6053 6054 6055 6056 6057 6058 6059 6060 6061 6062 6063 6064 6065 6066 6067 6068 6069 6070 6071 6072 6073 6074 6075 6076 6077 6078 6079 6080 6081 6082 6083 6084 6085 6086 6087 6088 6089 6090 6091 6092 6093 6094 6095 6096 6097 6098 6099 6100 6101 6102 6103 6104 6105 6106 6107 6108 6109 6110 6111 6112 6113 6114 6115 6116 6117 6118 6119 6120 6121 6122 6123 6124 6125 6126 6127 6128 6129 6130 6131 6132 6133 6134 6135 6136 6137 6138 6139 6140 6141 6142 6143 6144 6145 6146 6147 6148 6149 6150 6151 6152 6153 6154 6155 6156 6157 6158 6159 6160 6161 6162 6163 6164 6165 6166 6167 6168 6169 6170 6171 6172 6173 6174 6175 6176 6177 6178 6179 6180 6181 6182 6183 6184 6185 6186 6187 6188 6189 6190 6191 6192 6193 6194 6195 6196 6197 6198 6199 6200 6201 6202 6203 6204 6205 6206 6207 6208 6209 6210 6211 6212 6213 6214 6215 6216 6217 6218 6219 6220 6221 6222 6223 6224 6225 6226 6227 6228 6229 6230 6231 6232 6233 6234 6235 6236 6237 6238 6239 6240 6241 6242 6243 6244 6245 6246 6247 6248 6249 6250 6251 6252 6253 6254 6255 6256 6257 6258 6259 6260 6261 6262 6263 6264 6265 6266 6267 6268 6269 6270 6271 6272 6273 6274 6275 6276 6277 6278 6279 6280 6281 6282 6283 6284 6285 6286 6287 6288 6289 6290 6291 6292 6293 6294 6295 6296 6297 6298 6299 6300 6301 6302 6303 6304 6305 6306 6307 6308 6309 6310 6311 6312 6313 6314 6315 6316 6317 6318 6319 6320 6321 6322 6323 6324 6325 6326 6327 6328 6329 6330 6331 6332 6333 6334 6335 6336 6337 6338 6339 6340 6341 6342 6343 6344 6345 6346 6347 6348 6349 6350 6351 6352 6353 6354 6355 6356 6357 6358 6359 6360 6361 6362 6363 6364 6365 6366 6367 6368 6369 6370 6371 6372 6373 6374 6375 6376 6377 6378 6379 6380 6381 6382 6383 6384 6385 6386 6387 6388 6389 6390 6391 6392 6393 6394 6395 6396 6397 6398 6399 6400 6401 6402 6403 6404 6405 6406 6407 6408 6409 6410 6411 6412 6413 6414 6415 6416 6417 6418 6419 6420 6421 6422 6423 6424 6425 6426 6427 6428 6429 6430 6431 6432 6433 6434 6435 6436 6437 6438 6439 6440 6441 6442 6443 6444 6445 6446 6447 6448 6449 6450 6451 6452 6453 6454 6455 6456 6457 6458 6459 6460 6461 6462 6463 6464 6465 6466 6467 6468 6469 6470 6471 6472 6473 6474 6475 6476 6477 6478 6479 6480 6481 6482 6483 6484 6485 6486 6487 6488 6489 6490 6491 6492 6493 6494 6495 6496 6497 6498 6499 6500 6501 6502 6503 6504 6505 6506 6507 6508 6509 6510 6511 6512 6513 6514 6515 6516 6517 6518 6519 6520 6521 6522 6523 6524 6525 6526 6527 6528 6529 6530 6531 6532 6533 6534 6535 6536 6537 6538 6539 6540 6541 6542 6543 6544 6545 6546 6547 6548 6549 6550 6551 6552 6553 6554 6555 6556 6557 6558 6559 6560 6561 6562 6563 6564 6565 6566 6567 6568 6569 6570 6571 6572 6573 6574 6575 6576 6577 6578 6579 6580 6581 6582 6583 6584 6585 6586 6587 6588 6589 6590 6591 6592 6593 6594 6595 6596 6597 6598 6599 6600 6601 6602 6603 6604 6605 6606 6607 6608 6609 6610 6611 6612 6613 6614 6615 6616 6617 6618 6619 6620 6621 6622 6623 6624 6625 6626 6627 6628 6629 6630 6631 6632 6633 6634 6635 6636 6637 6638 6639 6640 6641 6642 6643 6644 6645 6646 6647 6648 6649 6650 6651 6652 6653 6654 6655 6656 6657 6658 6659 6660 6661 6662 6663 6664 6665 6666 6667 6668 6669 6670 6671 6672 6673 6674 6675 6676 6677 6678 6679 6680 6681 6682 6683 6684 6685 6686 6687 6688 6689 6690 6691 6692 6693 6694 6695 6696 6697 6698 6699 6700 6701 6702 6703 6704 6705 6706 6707 6708 6709 6710 6711 6712 6713 6714 6715 6716 6717 6718 6719 6720 6721 6722 6723 6724 6725 6726 6727 6728 6729 6730 6731 6732 6733 6734 6735 6736 6737 6738 6739 6740 6741 6742 6743 6744 6745 6746 6747 6748 6749 6750 6751 6752 6753 6754 6755 6756 6757 6758 6759 6760 6761 6762 6763 6764 6765 6766 6767 6768 6769 6770 6771 6772 6773 6774 6775 6776 6777 6778 6779 6780 6781 6782 6783 6784 6785 6786 6787 6788 6789 6790 6791 6792 6793 6794 6795 6796 6797 6798 6799 6800 6801 6802 6803 6804 6805 6806 6807 6808 6809 6810 6811 6812 6813 6814 6815 6816 6817 6818 6819 6820 6821 6822 6823 6824 6825 6826 6827 6828 6829 6830 6831 6832 6833 6834 6835 6836 6837 6838 6839 6840 6841 6842 6843 6844 6845 6846 6847 6848 6849 6850 6851 6852 6853 6854 6855 6856 6857 6858 6859 6860 6861 6862 6863 6864 6865 6866 6867 6868 6869 6870 6871 6872 6873 6874 6875 6876 6877 6878 6879 6880 6881 6882 6883 6884 6885 6886 6887 6888 6889 6890 6891 6892 6893 6894 6895 6896 6897 6898 6899 6900 6901 6902 6903 6904 6905 6906 6907 6908 6909 6910 6911 6912 6913 6914 6915 6916 6917 6918 6919 6920 6921 6922 6923 6924 6925 6926 6927 6928 6929 6930 6931 6932 6933 6934 6935 6936 6937 6938 6939 6940 6941 6942 6943 6944 6945 6946 6947 6948 6949 6950 6951 6952 6953 6954 6955 6956 6957 6958 6959 6960 6961 6962 6963 6964 6965 6966 6967 6968 6969 6970 6971 6972 6973 6974 6975 6976 6977 6978 6979 6980 6981 6982 6983 6984 6985 6986 6987 6988 6989 6990 6991 6992 6993 6994 6995 6996 6997 6998 6999 7000 7001 7002 7003 7004 7005 7006 7007 7008 7009 7010 7011 7012 7013 7014 7015 7016 7017 7018 7019 7020 7021 7022 7023 7024 7025 7026 7027 7028 7029 7030 7031 7032 7033 7034 7035 7036 7037 7038 7039 7040 7041 7042 7043 7044 7045 7046 7047 7048 7049 7050 7051 7052 7053 7054 7055 7056 7057 7058 7059 7060 7061 7062 7063 7064 7065 7066 7067 7068 7069 7070 7071 7072 7073 7074 7075 7076 7077 7078 7079 7080 7081 7082 7083 7084 7085 7086 7087 7088 7089 7090 7091 7092 7093 7094 7095 7096 7097 7098 7099 7100 7101 7102 7103 7104 7105 7106 7107 7108 7109 7110 7111 7112 7113 7114 7115 7116 7117 7118 7119 7120 7121 7122 7123 7124 7125 7126 7127 7128 7129 7130 7131 7132 7133 7134 7135 7136 7137 7138 7139 7140 7141 7142 7143 7144 7145 7146 7147 7148 7149 7150 7151 7152 7153 7154 7155 7156 7157 7158 7159 7160 7161 7162 7163 7164 7165 7166 7167 7168 7169 7170 7171 7172 7173 7174 7175 7176 7177 7178 7179 7180 7181 7182 7183 7184 7185 7186 7187 7188 7189 7190 7191 7192 7193 7194 7195 7196 7197 7198 7199 7200 7201 7202 7203 7204 7205 7206 7207 7208 7209 7210 7211 7212 7213 7214 7215 7216 7217 7218 7219 7220 7221 7222 7223 7224 7225 7226 7227 7228 7229 7230 7231 7232 7233 7234 7235 7236 7237 7238 7239 7240 7241 7242 7243 7244 7245 7246 7247 7248 7249 7250 7251 7252 7253 7254 7255 7256 7257 7258 7259 7260 7261 7262 7263 7264 7265 7266 7267 7268 7269 7270 7271 7272 7273 7274 7275 7276 7277 7278 7279 7280 7281 7282 7283 7284 7285 7286 7287 7288 7289 7290 7291 7292 7293 7294 7295 7296 7297 7298 7299 7300 7301 7302 7303 7304 7305 7306 7307 7308 7309 7310 7311 7312 7313 7314 7315 7316 7317 7318 7319 7320 7321 7322 7323 7324 7325 7326 7327 7328 7329 7330 7331 7332 7333 7334 7335 7336 7337 7338 7339 7340 7341 7342 7343 7344 7345 7346 7347 7348 7349 7350 7351 7352 7353 7354 7355 7356 7357 7358 7359 7360 7361 7362 7363 7364 7365 7366 7367 7368 7369 7370 7371 7372 7373 7374 7375 7376 7377 7378 7379 7380 7381 7382 7383 7384 7385 7386 7387 7388 7389 7390 7391 7392 7393 7394 7395 7396 7397 7398 7399 7400 7401 7402 7403 7404 7405 7406 7407 7408 7409 7410 7411 7412 7413 7414 7415 7416 7417 7418 7419 7420 7421 7422 7423 7424 7425 7426 7427 7428 7429 7430 7431 7432 7433 7434 7435 7436 7437 7438 7439 7440 7441 7442 7443 7444 7445 7446 7447 7448 7449 7450 7451 7452 7453 7454 7455 7456 7457 7458 7459 7460 7461 7462 7463 7464 7465 7466 7467 7468 7469 7470 7471 7472 7473 7474 7475 7476 7477 7478 7479 7480 7481 7482 7483 7484 7485 7486 7487 7488 7489 7490 7491 7492 7493 7494 7495 7496 7497 7498 7499 7500 7501 7502 7503 7504 7505 7506 7507 7508 7509 7510 7511 7512 7513 7514 7515 7516 7517 7518 7519 7520 7521 7522 7523 7524 7525 7526 7527 7528 7529 7530 7531 7532 7533 7534 7535 7536 7537 7538 7539 7540 7541 7542 7543 7544 7545 7546 7547 7548 7549 7550 7551 7552 7553 7554 7555 7556 7557 7558 7559 7560 7561 7562 7563 7564 7565 7566 7567 7568 7569 7570 7571 7572 7573 7574 7575 7576 7577 7578 7579 7580 7581 7582 7583 7584 7585 7586 7587 7588 7589 7590 7591 7592 7593 7594 7595 7596 7597 7598 7599 7600 7601 7602 7603 7604 7605 7606 7607 7608 7609 7610 7611 7612 7613 7614 7615 7616 7617 7618 7619 7620 7621 7622 7623 7624 7625 7626 7627 7628 7629 7630 7631 7632 7633 7634 7635 7636 7637 7638 7639 7640 7641 7642 7643 7644 7645 7646 7647 7648 7649 7650 7651 7652 7653 7654 7655 7656 7657 7658 7659 7660 7661 7662 7663 7664 7665 7666 7667 7668 7669 7670 7671 7672 7673 7674 7675 7676 7677 7678 7679 7680 7681 7682 7683 7684 7685 7686 7687 7688 7689 7690 7691 7692 7693 7694 7695 7696 7697 7698 7699 7700 7701 7702 7703 7704 7705 7706 7707 7708 7709 7710 7711 7712 7713 7714 7715 7716 7717 7718 7719 7720 7721 7722 7723 7724 7725 7726 7727 7728 7729 7730 7731 7732 7733 7734 7735 7736 7737 7738 7739 7740 7741 7742 7743 7744 7745 7746 7747 7748 7749 7750 7751 7752 7753 7754 7755 7756 7757 7758 7759 7760 7761 7762 7763 7764 7765 7766 7767 7768 7769 7770 7771 7772 7773 7774 7775 7776 7777 7778 7779 7780 7781 7782 7783 7784 7785 7786 7787 7788 7789 7790 7791 7792 7793 7794 7795 7796 7797 7798 7799 7800 7801 7802 7803 7804 7805 7806 7807 7808 7809 7810 7811 7812 7813 7814 7815 7816 7817 7818 7819 7820 7821 7822 7823 7824 7825 7826 7827 7828 7829 7830 7831 7832 7833 7834 7835 7836 7837 7838 7839 7840 7841 7842 7843 7844 7845 7846 7847 7848 7849 7850 7851 7852 7853 7854 7855 7856 7857 7858 7859 7860 7861 7862 7863 7864 7865 7866 7867 7868 7869 7870 7871 7872 7873 7874 7875 7876 7877 7878 7879 7880 7881 7882 7883 7884 7885 7886 7887 7888 7889 7890 7891 7892 7893 7894 7895 7896 7897 7898 7899 7900 7901 7902 7903 7904 7905 7906 7907 7908 7909 7910 7911 7912 7913 7914 7915 7916 7917 7918 7919 7920 7921 7922 7923 7924 7925 7926 7927 7928 7929 7930 7931 7932 7933 7934 7935 7936 7937 7938 7939 7940 7941 7942 7943 7944 7945 7946 7947 7948 7949 7950 7951 7952 7953 7954 7955 7956 7957 7958 7959 7960 7961 7962 7963 7964 7965 7966 7967 7968 7969 7970 7971 7972 7973 7974 7975 7976 7977 7978 7979 7980 7981 7982 7983 7984 7985 7986 7987 7988 7989 7990 7991 7992 7993 7994 7995 7996 7997 7998 7999 8000 8001 8002 8003 8004 8005 8006 8007 8008 8009 8010 8011 8012 8013 8014 8015 8016 8017 8018 8019 8020 8021 8022 8023 8024 8025 8026 8027 8028 8029 8030 8031 8032 8033 8034 8035 8036 8037 8038 8039 8040 8041 8042 8043 8044 8045 8046 8047 8048 8049 8050 8051 8052 8053 8054 8055 8056 8057 8058 8059 8060 8061 8062 8063 8064 8065 8066 8067 8068 8069 8070 8071 8072 8073 8074 8075 8076 8077 8078 8079 8080 8081 8082 8083 8084 8085 8086 8087 8088 8089 8090 8091 8092 8093 8094 8095 8096 8097 8098 8099 8100 8101 8102 8103 8104 8105 8106 8107 8108 8109 8110 8111 8112 8113 8114 8115 8116 8117 8118 8119 8120 8121 8122 8123 8124 8125 8126 8127 8128 8129 8130 8131 8132 8133 8134 8135 8136 8137 8138 8139 8140 8141 8142 8143 8144 8145 8146 8147 8148 8149 8150 8151 8152 8153 8154 8155 8156 8157 8158 8159 8160 8161 8162 8163 8164 8165 8166 8167 8168 8169 8170 8171 8172 8173 8174 8175 8176 8177 8178 8179 8180 8181 8182 8183 8184 8185 8186 8187 8188 8189 8190 8191 8192 -NOP PERCENT -90 diff --git a/bench_horn_mcmc/samples_shrink_big_numbers_8192/first.xml b/bench_horn_mcmc/samples_shrink_big_numbers_8192/first.xml deleted file mode 100644 index 9db40934f..000000000 --- a/bench_horn_mcmc/samples_shrink_big_numbers_8192/first.xml +++ /dev/null @@ -1,49205 +0,0 @@ - - - - - 1 - itp - - - - x - x1 - - - - x - - - - - - x - 1 - - - - - x - 2 - - - - - x - 3 - - - - - x - 4 - - - - - x - 5 - - - - - x - 6 - - - - - x - 7 - - - - - x - 8 - - - - - x - 9 - - - - - x - 10 - - - - - x - 11 - - - - - x - 12 - - - - - x - 13 - - - - - x - 14 - - - - - x - 15 - - - - - x - 16 - - - - - x - 17 - - - - - x - 18 - - - - - x - 19 - - - - - x - 20 - - - - - x - 21 - - - - - x - 22 - - - - - x - 23 - - - - - x - 24 - - - - - x - 25 - - - - - x - 26 - - - - - x - 27 - - - - - x - 28 - - - - - x - 29 - - - - - x - 30 - - - - - x - 31 - - - - - x - 32 - - - - - x - 33 - - - - - x - 34 - - - - - x - 35 - - - - - x - 36 - - - - - x - 37 - - - - - x - 38 - - - - - x - 39 - - - - - x - 40 - - - - - x - 41 - - - - - x - 42 - - - - - x - 43 - - - - - x - 44 - - - - - x - 45 - - - - - x - 46 - - - - - x - 47 - - - - - x - 48 - - - - - x - 49 - - - - - x - 50 - - - - - x - 51 - - - - - x - 52 - - - - - x - 53 - - - - - x - 54 - - - - - x - 55 - - - - - x - 56 - - - - - x - 57 - - - - - x - 58 - - - - - x - 59 - - - - - x - 60 - - - - - x - 61 - - - - - x - 62 - - - - - x - 63 - - - - - x - 64 - - - - - x - 65 - - - - - x - 66 - - - - - x - 67 - - - - - x - 68 - - - - - x - 69 - - - - - x - 70 - - - - - x - 71 - - - - - x - 72 - - - - - x - 73 - - - - - x - 74 - - - - - x - 75 - - - - - x - 76 - - - - - x - 77 - - - - - x - 78 - - - - - x - 79 - - - - - x - 80 - - - - - x - 81 - - - - - x - 82 - - - - - x - 83 - - - - - x - 84 - - - - - x - 85 - - - - - x - 86 - - - - - x - 87 - - - - - x - 88 - - - - - x - 89 - - - - - x - 90 - - - - - x - 91 - - - - - x - 92 - - - - - x - 93 - - - - - x - 94 - - - - - x - 95 - - - - - x - 96 - - - - - x - 97 - - - - - x - 98 - - - - - x - 99 - - - - - x - 100 - - - - - x - 101 - - - - - x - 102 - - - - - x - 103 - - - - - x - 104 - - - - - x - 105 - - - - - x - 106 - - - - - x - 107 - - - - - x - 108 - - - - - x - 109 - - - - - x - 110 - - - - - x - 111 - - - - - x - 112 - - - - - x - 113 - - - - - x - 114 - - - - - x - 115 - - - - - x - 116 - - - - - x - 117 - - - - - x - 118 - - - - - x - 119 - - - - - x - 120 - - - - - x - 121 - - - - - x - 122 - - - - - x - 123 - - - - - x - 124 - - - - - x - 125 - - - - - x - 126 - - - - - x - 127 - - - - - x - 128 - - - - - x - 129 - - - - - x - 130 - - - - - x - 131 - - - - - x - 132 - - - - - x - 133 - - - - - x - 134 - - - - - x - 135 - - - - - x - 136 - - - - - x - 137 - - - - - x - 138 - - - - - x - 139 - - - - - x - 140 - - - - - x - 141 - - - - - x - 142 - - - - - x - 143 - - - - - x - 144 - - - - - x - 145 - - - - - x - 146 - - - - - x - 147 - - - - - x - 148 - - - - - x - 149 - - - - - x - 150 - - - - - x - 151 - - - - - x - 152 - - - - - x - 153 - - - - - x - 154 - - - - - x - 155 - - - - - x - 156 - - - - - x - 157 - - - - - x - 158 - - - - - x - 159 - - - - - x - 160 - - - - - x - 161 - - - - - x - 162 - - - - - x - 163 - - - - - x - 164 - - - - - x - 165 - - - - - x - 166 - - - - - x - 167 - - - - - x - 168 - - - - - x - 169 - - - - - x - 170 - - - - - x - 171 - - - - - x - 172 - - - - - x - 173 - - - - - x - 174 - - - - - x - 175 - - - - - x - 176 - - - - - x - 177 - - - - - x - 178 - - - - - x - 179 - - - - - x - 180 - - - - - x - 181 - - - - - x - 182 - - - - - x - 183 - - - - - x - 184 - - - - - x - 185 - - - - - x - 186 - - - - - x - 187 - - - - - x - 188 - - - - - x - 189 - - - - - x - 190 - - - - - x - 191 - - - - - x - 192 - - - - - x - 193 - - - - - x - 194 - - - - - x - 195 - - - - - x - 196 - - - - - x - 197 - - - - - x - 198 - - - - - x - 199 - - - - - x - 200 - - - - - x - 201 - - - - - x - 202 - - - - - x - 203 - - - - - x - 204 - - - - - x - 205 - - - - - x - 206 - - - - - x - 207 - - - - - x - 208 - - - - - x - 209 - - - - - x - 210 - - - - - x - 211 - - - - - x - 212 - - - - - x - 213 - - - - - x - 214 - - - - - x - 215 - - - - - x - 216 - - - - - x - 217 - - - - - x - 218 - - - - - x - 219 - - - - - x - 220 - - - - - x - 221 - - - - - x - 222 - - - - - x - 223 - - - - - x - 224 - - - - - x - 225 - - - - - x - 226 - - - - - x - 227 - - - - - x - 228 - - - - - x - 229 - - - - - x - 230 - - - - - x - 231 - - - - - x - 232 - - - - - x - 233 - - - - - x - 234 - - - - - x - 235 - - - - - x - 236 - - - - - x - 237 - - - - - x - 238 - - - - - x - 239 - - - - - x - 240 - - - - - x - 241 - - - - - x - 242 - - - - - x - 243 - - - - - x - 244 - - - - - x - 245 - - - - - x - 246 - - - - - x - 247 - - - - - x - 248 - - - - - x - 249 - - - - - x - 250 - - - - - x - 251 - - - - - x - 252 - - - - - x - 253 - - - - - x - 254 - - - - - x - 255 - - - - - x - 256 - - - - - x - 257 - - - - - x - 258 - - - - - x - 259 - - - - - x - 260 - - - - - x - 261 - - - - - x - 262 - - - - - x - 263 - - - - - x - 264 - - - - - x - 265 - - - - - x - 266 - - - - - x - 267 - - - - - x - 268 - - - - - x - 269 - - - - - x - 270 - - - - - x - 271 - - - - - x - 272 - - - - - x - 273 - - - - - x - 274 - - - - - x - 275 - - - - - x - 276 - - - - - x - 277 - - - - - x - 278 - - - - - x - 279 - - - - - x - 280 - - - - - x - 281 - - - - - x - 282 - - - - - x - 283 - - - - - x - 284 - - - - - x - 285 - - - - - x - 286 - - - - - x - 287 - - - - - x - 288 - - - - - x - 289 - - - - - x - 290 - - - - - x - 291 - - - - - x - 292 - - - - - x - 293 - - - - - x - 294 - - - - - x - 295 - - - - - x - 296 - - - - - x - 297 - - - - - x - 298 - - - - - x - 299 - - - - - x - 300 - - - - - x - 301 - - - - - x - 302 - - - - - x - 303 - - - - - x - 304 - - - - - x - 305 - - - - - x - 306 - - - - - x - 307 - - - - - x - 308 - - - - - x - 309 - - - - - x - 310 - - - - - x - 311 - - - - - x - 312 - - - - - x - 313 - - - - - x - 314 - - - - - x - 315 - - - - - x - 316 - - - - - x - 317 - - - - - x - 318 - - - - - x - 319 - - - - - x - 320 - - - - - x - 321 - - - - - x - 322 - - - - - x - 323 - - - - - x - 324 - - - - - x - 325 - - - - - x - 326 - - - - - x - 327 - - - - - x - 328 - - - - - x - 329 - - - - - x - 330 - - - - - x - 331 - - - - - x - 332 - - - - - x - 333 - - - - - x - 334 - - - - - x - 335 - - - - - x - 336 - - - - - x - 337 - - - - - x - 338 - - - - - x - 339 - - - - - x - 340 - - - - - x - 341 - - - - - x - 342 - - - - - x - 343 - - - - - x - 344 - - - - - x - 345 - - - - - x - 346 - - - - - x - 347 - - - - - x - 348 - - - - - x - 349 - - - - - x - 350 - - - - - x - 351 - - - - - x - 352 - - - - - x - 353 - - - - - x - 354 - - - - - x - 355 - - - - - x - 356 - - - - - x - 357 - - - - - x - 358 - - - - - x - 359 - - - - - x - 360 - - - - - x - 361 - - - - - x - 362 - - - - - x - 363 - - - - - x - 364 - - - - - x - 365 - - - - - x - 366 - - - - - x - 367 - - - - - x - 368 - - - - - x - 369 - - - - - x - 370 - - - - - x - 371 - - - - - x - 372 - - - - - x - 373 - - - - - x - 374 - - - - - x - 375 - - - - - x - 376 - - - - - x - 377 - - - - - x - 378 - - - - - x - 379 - - - - - x - 380 - - - - - x - 381 - - - - - x - 382 - - - - - x - 383 - - - - - x - 384 - - - - - x - 385 - - - - - x - 386 - - - - - x - 387 - - - - - x - 388 - - - - - x - 389 - - - - - x - 390 - - - - - x - 391 - - - - - x - 392 - - - - - x - 393 - - - - - x - 394 - - - - - x - 395 - - - - - x - 396 - - - - - x - 397 - - - - - x - 398 - - - - - x - 399 - - - - - x - 400 - - - - - x - 401 - - - - - x - 402 - - - - - x - 403 - - - - - x - 404 - - - - - x - 405 - - - - - x - 406 - - - - - x - 407 - - - - - x - 408 - - - - - x - 409 - - - - - x - 410 - - - - - x - 411 - - - - - x - 412 - - - - - x - 413 - - - - - x - 414 - - - - - x - 415 - - - - - x - 416 - - - - - x - 417 - - - - - x - 418 - - - - - x - 419 - - - - - x - 420 - - - - - x - 421 - - - - - x - 422 - - - - - x - 423 - - - - - x - 424 - - - - - x - 425 - - - - - x - 426 - - - - - x - 427 - - - - - x - 428 - - - - - x - 429 - - - - - x - 430 - - - - - x - 431 - - - - - x - 432 - - - - - x - 433 - - - - - x - 434 - - - - - x - 435 - - - - - x - 436 - - - - - x - 437 - - - - - x - 438 - - - - - x - 439 - - - - - x - 440 - - - - - x - 441 - - - - - x - 442 - - - - - x - 443 - - - - - x - 444 - - - - - x - 445 - - - - - x - 446 - - - - - x - 447 - - - - - x - 448 - - - - - x - 449 - - - - - x - 450 - - - - - x - 451 - - - - - x - 452 - - - - - x - 453 - - - - - x - 454 - - - - - x - 455 - - - - - x - 456 - - - - - x - 457 - - - - - x - 458 - - - - - x - 459 - - - - - x - 460 - - - - - x - 461 - - - - - x - 462 - - - - - x - 463 - - - - - x - 464 - - - - - x - 465 - - - - - x - 466 - - - - - x - 467 - - - - - x - 468 - - - - - x - 469 - - - - - x - 470 - - - - - x - 471 - - - - - x - 472 - - - - - x - 473 - - - - - x - 474 - - - - - x - 475 - - - - - x - 476 - - - - - x - 477 - - - - - x - 478 - - - - - x - 479 - - - - - x - 480 - - - - - x - 481 - - - - - x - 482 - - - - - x - 483 - - - - - x - 484 - - - - - x - 485 - - - - - x - 486 - - - - - x - 487 - - - - - x - 488 - - - - - x - 489 - - - - - x - 490 - - - - - x - 491 - - - - - x - 492 - - - - - x - 493 - - - - - x - 494 - - - - - x - 495 - - - - - x - 496 - - - - - x - 497 - - - - - x - 498 - - - - - x - 499 - - - - - x - 500 - - - - - x - 501 - - - - - x - 502 - - - - - x - 503 - - - - - x - 504 - - - - - x - 505 - - - - - x - 506 - - - - - x - 507 - - - - - x - 508 - - - - - x - 509 - - - - - x - 510 - - - - - x - 511 - - - - - x - 512 - - - - - x - 513 - - - - - x - 514 - - - - - x - 515 - - - - - x - 516 - - - - - x - 517 - - - - - x - 518 - - - - - x - 519 - - - - - x - 520 - - - - - x - 521 - - - - - x - 522 - - - - - x - 523 - - - - - x - 524 - - - - - x - 525 - - - - - x - 526 - - - - - x - 527 - - - - - x - 528 - - - - - x - 529 - - - - - x - 530 - - - - - x - 531 - - - - - x - 532 - - - - - x - 533 - - - - - x - 534 - - - - - x - 535 - - - - - x - 536 - - - - - x - 537 - - - - - x - 538 - - - - - x - 539 - - - - - x - 540 - - - - - x - 541 - - - - - x - 542 - - - - - x - 543 - - - - - x - 544 - - - - - x - 545 - - - - - x - 546 - - - - - x - 547 - - - - - x - 548 - - - - - x - 549 - - - - - x - 550 - - - - - x - 551 - - - - - x - 552 - - - - - x - 553 - - - - - x - 554 - - - - - x - 555 - - - - - x - 556 - - - - - x - 557 - - - - - x - 558 - - - - - x - 559 - - - - - x - 560 - - - - - x - 561 - - - - - x - 562 - - - - - x - 563 - - - - - x - 564 - - - - - x - 565 - - - - - x - 566 - - - - - x - 567 - - - - - x - 568 - - - - - x - 569 - - - - - x - 570 - - - - - x - 571 - - - - - x - 572 - - - - - x - 573 - - - - - x - 574 - - - - - x - 575 - - - - - x - 576 - - - - - x - 577 - - - - - x - 578 - - - - - x - 579 - - - - - x - 580 - - - - - x - 581 - - - - - x - 582 - - - - - x - 583 - - - - - x - 584 - - - - - x - 585 - - - - - x - 586 - - - - - x - 587 - - - - - x - 588 - - - - - x - 589 - - - - - x - 590 - - - - - x - 591 - - - - - x - 592 - - - - - x - 593 - - - - - x - 594 - - - - - x - 595 - - - - - x - 596 - - - - - x - 597 - - - - - x - 598 - - - - - x - 599 - - - - - x - 600 - - - - - x - 601 - - - - - x - 602 - - - - - x - 603 - - - - - x - 604 - - - - - x - 605 - - - - - x - 606 - - - - - x - 607 - - - - - x - 608 - - - - - x - 609 - - - - - x - 610 - - - - - x - 611 - - - - - x - 612 - - - - - x - 613 - - - - - x - 614 - - - - - x - 615 - - - - - x - 616 - - - - - x - 617 - - - - - x - 618 - - - - - x - 619 - - - - - x - 620 - - - - - x - 621 - - - - - x - 622 - - - - - x - 623 - - - - - x - 624 - - - - - x - 625 - - - - - x - 626 - - - - - x - 627 - - - - - x - 628 - - - - - x - 629 - - - - - x - 630 - - - - - x - 631 - - - - - x - 632 - - - - - x - 633 - - - - - x - 634 - - - - - x - 635 - - - - - x - 636 - - - - - x - 637 - - - - - x - 638 - - - - - x - 639 - - - - - x - 640 - - - - - x - 641 - - - - - x - 642 - - - - - x - 643 - - - - - x - 644 - - - - - x - 645 - - - - - x - 646 - - - - - x - 647 - - - - - x - 648 - - - - - x - 649 - - - - - x - 650 - - - - - x - 651 - - - - - x - 652 - - - - - x - 653 - - - - - x - 654 - - - - - x - 655 - - - - - x - 656 - - - - - x - 657 - - - - - x - 658 - - - - - x - 659 - - - - - x - 660 - - - - - x - 661 - - - - - x - 662 - - - - - x - 663 - - - - - x - 664 - - - - - x - 665 - - - - - x - 666 - - - - - x - 667 - - - - - x - 668 - - - - - x - 669 - - - - - x - 670 - - - - - x - 671 - - - - - x - 672 - - - - - x - 673 - - - - - x - 674 - - - - - x - 675 - - - - - x - 676 - - - - - x - 677 - - - - - x - 678 - - - - - x - 679 - - - - - x - 680 - - - - - x - 681 - - - - - x - 682 - - - - - x - 683 - - - - - x - 684 - - - - - x - 685 - - - - - x - 686 - - - - - x - 687 - - - - - x - 688 - - - - - x - 689 - - - - - x - 690 - - - - - x - 691 - - - - - x - 692 - - - - - x - 693 - - - - - x - 694 - - - - - x - 695 - - - - - x - 696 - - - - - x - 697 - - - - - x - 698 - - - - - x - 699 - - - - - x - 700 - - - - - x - 701 - - - - - x - 702 - - - - - x - 703 - - - - - x - 704 - - - - - x - 705 - - - - - x - 706 - - - - - x - 707 - - - - - x - 708 - - - - - x - 709 - - - - - x - 710 - - - - - x - 711 - - - - - x - 712 - - - - - x - 713 - - - - - x - 714 - - - - - x - 715 - - - - - x - 716 - - - - - x - 717 - - - - - x - 718 - - - - - x - 719 - - - - - x - 720 - - - - - x - 721 - - - - - x - 722 - - - - - x - 723 - - - - - x - 724 - - - - - x - 725 - - - - - x - 726 - - - - - x - 727 - - - - - x - 728 - - - - - x - 729 - - - - - x - 730 - - - - - x - 731 - - - - - x - 732 - - - - - x - 733 - - - - - x - 734 - - - - - x - 735 - - - - - x - 736 - - - - - x - 737 - - - - - x - 738 - - - - - x - 739 - - - - - x - 740 - - - - - x - 741 - - - - - x - 742 - - - - - x - 743 - - - - - x - 744 - - - - - x - 745 - - - - - x - 746 - - - - - x - 747 - - - - - x - 748 - - - - - x - 749 - - - - - x - 750 - - - - - x - 751 - - - - - x - 752 - - - - - x - 753 - - - - - x - 754 - - - - - x - 755 - - - - - x - 756 - - - - - x - 757 - - - - - x - 758 - - - - - x - 759 - - - - - x - 760 - - - - - x - 761 - - - - - x - 762 - - - - - x - 763 - - - - - x - 764 - - - - - x - 765 - - - - - x - 766 - - - - - x - 767 - - - - - x - 768 - - - - - x - 769 - - - - - x - 770 - - - - - x - 771 - - - - - x - 772 - - - - - x - 773 - - - - - x - 774 - - - - - x - 775 - - - - - x - 776 - - - - - x - 777 - - - - - x - 778 - - - - - x - 779 - - - - - x - 780 - - - - - x - 781 - - - - - x - 782 - - - - - x - 783 - - - - - x - 784 - - - - - x - 785 - - - - - x - 786 - - - - - x - 787 - - - - - x - 788 - - - - - x - 789 - - - - - x - 790 - - - - - x - 791 - - - - - x - 792 - - - - - x - 793 - - - - - x - 794 - - - - - x - 795 - - - - - x - 796 - - - - - x - 797 - - - - - x - 798 - - - - - x - 799 - - - - - x - 800 - - - - - x - 801 - - - - - x - 802 - - - - - x - 803 - - - - - x - 804 - - - - - x - 805 - - - - - x - 806 - - - - - x - 807 - - - - - x - 808 - - - - - x - 809 - - - - - x - 810 - - - - - x - 811 - - - - - x - 812 - - - - - x - 813 - - - - - x - 814 - - - - - x - 815 - - - - - x - 816 - - - - - x - 817 - - - - - x - 818 - - - - - x - 819 - - - - - x - 820 - - - - - x - 821 - - - - - x - 822 - - - - - x - 823 - - - - - x - 824 - - - - - x - 825 - - - - - x - 826 - - - - - x - 827 - - - - - x - 828 - - - - - x - 829 - - - - - x - 830 - - - - - x - 831 - - - - - x - 832 - - - - - x - 833 - - - - - x - 834 - - - - - x - 835 - - - - - x - 836 - - - - - x - 837 - - - - - x - 838 - - - - - x - 839 - - - - - x - 840 - - - - - x - 841 - - - - - x - 842 - - - - - x - 843 - - - - - x - 844 - - - - - x - 845 - - - - - x - 846 - - - - - x - 847 - - - - - x - 848 - - - - - x - 849 - - - - - x - 850 - - - - - x - 851 - - - - - x - 852 - - - - - x - 853 - - - - - x - 854 - - - - - x - 855 - - - - - x - 856 - - - - - x - 857 - - - - - x - 858 - - - - - x - 859 - - - - - x - 860 - - - - - x - 861 - - - - - x - 862 - - - - - x - 863 - - - - - x - 864 - - - - - x - 865 - - - - - x - 866 - - - - - x - 867 - - - - - x - 868 - - - - - x - 869 - - - - - x - 870 - - - - - x - 871 - - - - - x - 872 - - - - - x - 873 - - - - - x - 874 - - - - - x - 875 - - - - - x - 876 - - - - - x - 877 - - - - - x - 878 - - - - - x - 879 - - - - - x - 880 - - - - - x - 881 - - - - - x - 882 - - - - - x - 883 - - - - - x - 884 - - - - - x - 885 - - - - - x - 886 - - - - - x - 887 - - - - - x - 888 - - - - - x - 889 - - - - - x - 890 - - - - - x - 891 - - - - - x - 892 - - - - - x - 893 - - - - - x - 894 - - - - - x - 895 - - - - - x - 896 - - - - - x - 897 - - - - - x - 898 - - - - - x - 899 - - - - - x - 900 - - - - - x - 901 - - - - - x - 902 - - - - - x - 903 - - - - - x - 904 - - - - - x - 905 - - - - - x - 906 - - - - - x - 907 - - - - - x - 908 - - - - - x - 909 - - - - - x - 910 - - - - - x - 911 - - - - - x - 912 - - - - - x - 913 - - - - - x - 914 - - - - - x - 915 - - - - - x - 916 - - - - - x - 917 - - - - - x - 918 - - - - - x - 919 - - - - - x - 920 - - - - - x - 921 - - - - - x - 922 - - - - - x - 923 - - - - - x - 924 - - - - - x - 925 - - - - - x - 926 - - - - - x - 927 - - - - - x - 928 - - - - - x - 929 - - - - - x - 930 - - - - - x - 931 - - - - - x - 932 - - - - - x - 933 - - - - - x - 934 - - - - - x - 935 - - - - - x - 936 - - - - - x - 937 - - - - - x - 938 - - - - - x - 939 - - - - - x - 940 - - - - - x - 941 - - - - - x - 942 - - - - - x - 943 - - - - - x - 944 - - - - - x - 945 - - - - - x - 946 - - - - - x - 947 - - - - - x - 948 - - - - - x - 949 - - - - - x - 950 - - - - - x - 951 - - - - - x - 952 - - - - - x - 953 - - - - - x - 954 - - - - - x - 955 - - - - - x - 956 - - - - - x - 957 - - - - - x - 958 - - - - - x - 959 - - - - - x - 960 - - - - - x - 961 - - - - - x - 962 - - - - - x - 963 - - - - - x - 964 - - - - - x - 965 - - - - - x - 966 - - - - - x - 967 - - - - - x - 968 - - - - - x - 969 - - - - - x - 970 - - - - - x - 971 - - - - - x - 972 - - - - - x - 973 - - - - - x - 974 - - - - - x - 975 - - - - - x - 976 - - - - - x - 977 - - - - - x - 978 - - - - - x - 979 - - - - - x - 980 - - - - - x - 981 - - - - - x - 982 - - - - - x - 983 - - - - - x - 984 - - - - - x - 985 - - - - - x - 986 - - - - - x - 987 - - - - - x - 988 - - - - - x - 989 - - - - - x - 990 - - - - - x - 991 - - - - - x - 992 - - - - - x - 993 - - - - - x - 994 - - - - - x - 995 - - - - - x - 996 - - - - - x - 997 - - - - - x - 998 - - - - - x - 999 - - - - - x - 1000 - - - - - x - 1001 - - - - - x - 1002 - - - - - x - 1003 - - - - - x - 1004 - - - - - x - 1005 - - - - - x - 1006 - - - - - x - 1007 - - - - - x - 1008 - - - - - x - 1009 - - - - - x - 1010 - - - - - x - 1011 - - - - - x - 1012 - - - - - x - 1013 - - - - - x - 1014 - - - - - x - 1015 - - - - - x - 1016 - - - - - x - 1017 - - - - - x - 1018 - - - - - x - 1019 - - - - - x - 1020 - - - - - x - 1021 - - - - - x - 1022 - - - - - x - 1023 - - - - - x - 1024 - - - - - x - 1025 - - - - - x - 1026 - - - - - x - 1027 - - - - - x - 1028 - - - - - x - 1029 - - - - - x - 1030 - - - - - x - 1031 - - - - - x - 1032 - - - - - x - 1033 - - - - - x - 1034 - - - - - x - 1035 - - - - - x - 1036 - - - - - x - 1037 - - - - - x - 1038 - - - - - x - 1039 - - - - - x - 1040 - - - - - x - 1041 - - - - - x - 1042 - - - - - x - 1043 - - - - - x - 1044 - - - - - x - 1045 - - - - - x - 1046 - - - - - x - 1047 - - - - - x - 1048 - - - - - x - 1049 - - - - - x - 1050 - - - - - x - 1051 - - - - - x - 1052 - - - - - x - 1053 - - - - - x - 1054 - - - - - x - 1055 - - - - - x - 1056 - - - - - x - 1057 - - - - - x - 1058 - - - - - x - 1059 - - - - - x - 1060 - - - - - x - 1061 - - - - - x - 1062 - - - - - x - 1063 - - - - - x - 1064 - - - - - x - 1065 - - - - - x - 1066 - - - - - x - 1067 - - - - - x - 1068 - - - - - x - 1069 - - - - - x - 1070 - - - - - x - 1071 - - - - - x - 1072 - - - - - x - 1073 - - - - - x - 1074 - - - - - x - 1075 - - - - - x - 1076 - - - - - x - 1077 - - - - - x - 1078 - - - - - x - 1079 - - - - - x - 1080 - - - - - x - 1081 - - - - - x - 1082 - - - - - x - 1083 - - - - - x - 1084 - - - - - x - 1085 - - - - - x - 1086 - - - - - x - 1087 - - - - - x - 1088 - - - - - x - 1089 - - - - - x - 1090 - - - - - x - 1091 - - - - - x - 1092 - - - - - x - 1093 - - - - - x - 1094 - - - - - x - 1095 - - - - - x - 1096 - - - - - x - 1097 - - - - - x - 1098 - - - - - x - 1099 - - - - - x - 1100 - - - - - x - 1101 - - - - - x - 1102 - - - - - x - 1103 - - - - - x - 1104 - - - - - x - 1105 - - - - - x - 1106 - - - - - x - 1107 - - - - - x - 1108 - - - - - x - 1109 - - - - - x - 1110 - - - - - x - 1111 - - - - - x - 1112 - - - - - x - 1113 - - - - - x - 1114 - - - - - x - 1115 - - - - - x - 1116 - - - - - x - 1117 - - - - - x - 1118 - - - - - x - 1119 - - - - - x - 1120 - - - - - x - 1121 - - - - - x - 1122 - - - - - x - 1123 - - - - - x - 1124 - - - - - x - 1125 - - - - - x - 1126 - - - - - x - 1127 - - - - - x - 1128 - - - - - x - 1129 - - - - - x - 1130 - - - - - x - 1131 - - - - - x - 1132 - - - - - x - 1133 - - - - - x - 1134 - - - - - x - 1135 - - - - - x - 1136 - - - - - x - 1137 - - - - - x - 1138 - - - - - x - 1139 - - - - - x - 1140 - - - - - x - 1141 - - - - - x - 1142 - - - - - x - 1143 - - - - - x - 1144 - - - - - x - 1145 - - - - - x - 1146 - - - - - x - 1147 - - - - - x - 1148 - - - - - x - 1149 - - - - - x - 1150 - - - - - x - 1151 - - - - - x - 1152 - - - - - x - 1153 - - - - - x - 1154 - - - - - x - 1155 - - - - - x - 1156 - - - - - x - 1157 - - - - - x - 1158 - - - - - x - 1159 - - - - - x - 1160 - - - - - x - 1161 - - - - - x - 1162 - - - - - x - 1163 - - - - - x - 1164 - - - - - x - 1165 - - - - - x - 1166 - - - - - x - 1167 - - - - - x - 1168 - - - - - x - 1169 - - - - - x - 1170 - - - - - x - 1171 - - - - - x - 1172 - - - - - x - 1173 - - - - - x - 1174 - - - - - x - 1175 - - - - - x - 1176 - - - - - x - 1177 - - - - - x - 1178 - - - - - x - 1179 - - - - - x - 1180 - - - - - x - 1181 - - - - - x - 1182 - - - - - x - 1183 - - - - - x - 1184 - - - - - x - 1185 - - - - - x - 1186 - - - - - x - 1187 - - - - - x - 1188 - - - - - x - 1189 - - - - - x - 1190 - - - - - x - 1191 - - - - - x - 1192 - - - - - x - 1193 - - - - - x - 1194 - - - - - x - 1195 - - - - - x - 1196 - - - - - x - 1197 - - - - - x - 1198 - - - - - x - 1199 - - - - - x - 1200 - - - - - x - 1201 - - - - - x - 1202 - - - - - x - 1203 - - - - - x - 1204 - - - - - x - 1205 - - - - - x - 1206 - - - - - x - 1207 - - - - - x - 1208 - - - - - x - 1209 - - - - - x - 1210 - - - - - x - 1211 - - - - - x - 1212 - - - - - x - 1213 - - - - - x - 1214 - - - - - x - 1215 - - - - - x - 1216 - - - - - x - 1217 - - - - - x - 1218 - - - - - x - 1219 - - - - - x - 1220 - - - - - x - 1221 - - - - - x - 1222 - - - - - x - 1223 - - - - - x - 1224 - - - - - x - 1225 - - - - - x - 1226 - - - - - x - 1227 - - - - - x - 1228 - - - - - x - 1229 - - - - - x - 1230 - - - - - x - 1231 - - - - - x - 1232 - - - - - x - 1233 - - - - - x - 1234 - - - - - x - 1235 - - - - - x - 1236 - - - - - x - 1237 - - - - - x - 1238 - - - - - x - 1239 - - - - - x - 1240 - - - - - x - 1241 - - - - - x - 1242 - - - - - x - 1243 - - - - - x - 1244 - - - - - x - 1245 - - - - - x - 1246 - - - - - x - 1247 - - - - - x - 1248 - - - - - x - 1249 - - - - - x - 1250 - - - - - x - 1251 - - - - - x - 1252 - - - - - x - 1253 - - - - - x - 1254 - - - - - x - 1255 - - - - - x - 1256 - - - - - x - 1257 - - - - - x - 1258 - - - - - x - 1259 - - - - - x - 1260 - - - - - x - 1261 - - - - - x - 1262 - - - - - x - 1263 - - - - - x - 1264 - - - - - x - 1265 - - - - - x - 1266 - - - - - x - 1267 - - - - - x - 1268 - - - - - x - 1269 - - - - - x - 1270 - - - - - x - 1271 - - - - - x - 1272 - - - - - x - 1273 - - - - - x - 1274 - - - - - x - 1275 - - - - - x - 1276 - - - - - x - 1277 - - - - - x - 1278 - - - - - x - 1279 - - - - - x - 1280 - - - - - x - 1281 - - - - - x - 1282 - - - - - x - 1283 - - - - - x - 1284 - - - - - x - 1285 - - - - - x - 1286 - - - - - x - 1287 - - - - - x - 1288 - - - - - x - 1289 - - - - - x - 1290 - - - - - x - 1291 - - - - - x - 1292 - - - - - x - 1293 - - - - - x - 1294 - - - - - x - 1295 - - - - - x - 1296 - - - - - x - 1297 - - - - - x - 1298 - - - - - x - 1299 - - - - - x - 1300 - - - - - x - 1301 - - - - - x - 1302 - - - - - x - 1303 - - - - - x - 1304 - - - - - x - 1305 - - - - - x - 1306 - - - - - x - 1307 - - - - - x - 1308 - - - - - x - 1309 - - - - - x - 1310 - - - - - x - 1311 - - - - - x - 1312 - - - - - x - 1313 - - - - - x - 1314 - - - - - x - 1315 - - - - - x - 1316 - - - - - x - 1317 - - - - - x - 1318 - - - - - x - 1319 - - - - - x - 1320 - - - - - x - 1321 - - - - - x - 1322 - - - - - x - 1323 - - - - - x - 1324 - - - - - x - 1325 - - - - - x - 1326 - - - - - x - 1327 - - - - - x - 1328 - - - - - x - 1329 - - - - - x - 1330 - - - - - x - 1331 - - - - - x - 1332 - - - - - x - 1333 - - - - - x - 1334 - - - - - x - 1335 - - - - - x - 1336 - - - - - x - 1337 - - - - - x - 1338 - - - - - x - 1339 - - - - - x - 1340 - - - - - x - 1341 - - - - - x - 1342 - - - - - x - 1343 - - - - - x - 1344 - - - - - x - 1345 - - - - - x - 1346 - - - - - x - 1347 - - - - - x - 1348 - - - - - x - 1349 - - - - - x - 1350 - - - - - x - 1351 - - - - - x - 1352 - - - - - x - 1353 - - - - - x - 1354 - - - - - x - 1355 - - - - - x - 1356 - - - - - x - 1357 - - - - - x - 1358 - - - - - x - 1359 - - - - - x - 1360 - - - - - x - 1361 - - - - - x - 1362 - - - - - x - 1363 - - - - - x - 1364 - - - - - x - 1365 - - - - - x - 1366 - - - - - x - 1367 - - - - - x - 1368 - - - - - x - 1369 - - - - - x - 1370 - - - - - x - 1371 - - - - - x - 1372 - - - - - x - 1373 - - - - - x - 1374 - - - - - x - 1375 - - - - - x - 1376 - - - - - x - 1377 - - - - - x - 1378 - - - - - x - 1379 - - - - - x - 1380 - - - - - x - 1381 - - - - - x - 1382 - - - - - x - 1383 - - - - - x - 1384 - - - - - x - 1385 - - - - - x - 1386 - - - - - x - 1387 - - - - - x - 1388 - - - - - x - 1389 - - - - - x - 1390 - - - - - x - 1391 - - - - - x - 1392 - - - - - x - 1393 - - - - - x - 1394 - - - - - x - 1395 - - - - - x - 1396 - - - - - x - 1397 - - - - - x - 1398 - - - - - x - 1399 - - - - - x - 1400 - - - - - x - 1401 - - - - - x - 1402 - - - - - x - 1403 - - - - - x - 1404 - - - - - x - 1405 - - - - - x - 1406 - - - - - x - 1407 - - - - - x - 1408 - - - - - x - 1409 - - - - - x - 1410 - - - - - x - 1411 - - - - - x - 1412 - - - - - x - 1413 - - - - - x - 1414 - - - - - x - 1415 - - - - - x - 1416 - - - - - x - 1417 - - - - - x - 1418 - - - - - x - 1419 - - - - - x - 1420 - - - - - x - 1421 - - - - - x - 1422 - - - - - x - 1423 - - - - - x - 1424 - - - - - x - 1425 - - - - - x - 1426 - - - - - x - 1427 - - - - - x - 1428 - - - - - x - 1429 - - - - - x - 1430 - - - - - x - 1431 - - - - - x - 1432 - - - - - x - 1433 - - - - - x - 1434 - - - - - x - 1435 - - - - - x - 1436 - - - - - x - 1437 - - - - - x - 1438 - - - - - x - 1439 - - - - - x - 1440 - - - - - x - 1441 - - - - - x - 1442 - - - - - x - 1443 - - - - - x - 1444 - - - - - x - 1445 - - - - - x - 1446 - - - - - x - 1447 - - - - - x - 1448 - - - - - x - 1449 - - - - - x - 1450 - - - - - x - 1451 - - - - - x - 1452 - - - - - x - 1453 - - - - - x - 1454 - - - - - x - 1455 - - - - - x - 1456 - - - - - x - 1457 - - - - - x - 1458 - - - - - x - 1459 - - - - - x - 1460 - - - - - x - 1461 - - - - - x - 1462 - - - - - x - 1463 - - - - - x - 1464 - - - - - x - 1465 - - - - - x - 1466 - - - - - x - 1467 - - - - - x - 1468 - - - - - x - 1469 - - - - - x - 1470 - - - - - x - 1471 - - - - - x - 1472 - - - - - x - 1473 - - - - - x - 1474 - - - - - x - 1475 - - - - - x - 1476 - - - - - x - 1477 - - - - - x - 1478 - - - - - x - 1479 - - - - - x - 1480 - - - - - x - 1481 - - - - - x - 1482 - - - - - x - 1483 - - - - - x - 1484 - - - - - x - 1485 - - - - - x - 1486 - - - - - x - 1487 - - - - - x - 1488 - - - - - x - 1489 - - - - - x - 1490 - - - - - x - 1491 - - - - - x - 1492 - - - - - x - 1493 - - - - - x - 1494 - - - - - x - 1495 - - - - - x - 1496 - - - - - x - 1497 - - - - - x - 1498 - - - - - x - 1499 - - - - - x - 1500 - - - - - x - 1501 - - - - - x - 1502 - - - - - x - 1503 - - - - - x - 1504 - - - - - x - 1505 - - - - - x - 1506 - - - - - x - 1507 - - - - - x - 1508 - - - - - x - 1509 - - - - - x - 1510 - - - - - x - 1511 - - - - - x - 1512 - - - - - x - 1513 - - - - - x - 1514 - - - - - x - 1515 - - - - - x - 1516 - - - - - x - 1517 - - - - - x - 1518 - - - - - x - 1519 - - - - - x - 1520 - - - - - x - 1521 - - - - - x - 1522 - - - - - x - 1523 - - - - - x - 1524 - - - - - x - 1525 - - - - - x - 1526 - - - - - x - 1527 - - - - - x - 1528 - - - - - x - 1529 - - - - - x - 1530 - - - - - x - 1531 - - - - - x - 1532 - - - - - x - 1533 - - - - - x - 1534 - - - - - x - 1535 - - - - - x - 1536 - - - - - x - 1537 - - - - - x - 1538 - - - - - x - 1539 - - - - - x - 1540 - - - - - x - 1541 - - - - - x - 1542 - - - - - x - 1543 - - - - - x - 1544 - - - - - x - 1545 - - - - - x - 1546 - - - - - x - 1547 - - - - - x - 1548 - - - - - x - 1549 - - - - - x - 1550 - - - - - x - 1551 - - - - - x - 1552 - - - - - x - 1553 - - - - - x - 1554 - - - - - x - 1555 - - - - - x - 1556 - - - - - x - 1557 - - - - - x - 1558 - - - - - x - 1559 - - - - - x - 1560 - - - - - x - 1561 - - - - - x - 1562 - - - - - x - 1563 - - - - - x - 1564 - - - - - x - 1565 - - - - - x - 1566 - - - - - x - 1567 - - - - - x - 1568 - - - - - x - 1569 - - - - - x - 1570 - - - - - x - 1571 - - - - - x - 1572 - - - - - x - 1573 - - - - - x - 1574 - - - - - x - 1575 - - - - - x - 1576 - - - - - x - 1577 - - - - - x - 1578 - - - - - x - 1579 - - - - - x - 1580 - - - - - x - 1581 - - - - - x - 1582 - - - - - x - 1583 - - - - - x - 1584 - - - - - x - 1585 - - - - - x - 1586 - - - - - x - 1587 - - - - - x - 1588 - - - - - x - 1589 - - - - - x - 1590 - - - - - x - 1591 - - - - - x - 1592 - - - - - x - 1593 - - - - - x - 1594 - - - - - x - 1595 - - - - - x - 1596 - - - - - x - 1597 - - - - - x - 1598 - - - - - x - 1599 - - - - - x - 1600 - - - - - x - 1601 - - - - - x - 1602 - - - - - x - 1603 - - - - - x - 1604 - - - - - x - 1605 - - - - - x - 1606 - - - - - x - 1607 - - - - - x - 1608 - - - - - x - 1609 - - - - - x - 1610 - - - - - x - 1611 - - - - - x - 1612 - - - - - x - 1613 - - - - - x - 1614 - - - - - x - 1615 - - - - - x - 1616 - - - - - x - 1617 - - - - - x - 1618 - - - - - x - 1619 - - - - - x - 1620 - - - - - x - 1621 - - - - - x - 1622 - - - - - x - 1623 - - - - - x - 1624 - - - - - x - 1625 - - - - - x - 1626 - - - - - x - 1627 - - - - - x - 1628 - - - - - x - 1629 - - - - - x - 1630 - - - - - x - 1631 - - - - - x - 1632 - - - - - x - 1633 - - - - - x - 1634 - - - - - x - 1635 - - - - - x - 1636 - - - - - x - 1637 - - - - - x - 1638 - - - - - x - 1639 - - - - - x - 1640 - - - - - x - 1641 - - - - - x - 1642 - - - - - x - 1643 - - - - - x - 1644 - - - - - x - 1645 - - - - - x - 1646 - - - - - x - 1647 - - - - - x - 1648 - - - - - x - 1649 - - - - - x - 1650 - - - - - x - 1651 - - - - - x - 1652 - - - - - x - 1653 - - - - - x - 1654 - - - - - x - 1655 - - - - - x - 1656 - - - - - x - 1657 - - - - - x - 1658 - - - - - x - 1659 - - - - - x - 1660 - - - - - x - 1661 - - - - - x - 1662 - - - - - x - 1663 - - - - - x - 1664 - - - - - x - 1665 - - - - - x - 1666 - - - - - x - 1667 - - - - - x - 1668 - - - - - x - 1669 - - - - - x - 1670 - - - - - x - 1671 - - - - - x - 1672 - - - - - x - 1673 - - - - - x - 1674 - - - - - x - 1675 - - - - - x - 1676 - - - - - x - 1677 - - - - - x - 1678 - - - - - x - 1679 - - - - - x - 1680 - - - - - x - 1681 - - - - - x - 1682 - - - - - x - 1683 - - - - - x - 1684 - - - - - x - 1685 - - - - - x - 1686 - - - - - x - 1687 - - - - - x - 1688 - - - - - x - 1689 - - - - - x - 1690 - - - - - x - 1691 - - - - - x - 1692 - - - - - x - 1693 - - - - - x - 1694 - - - - - x - 1695 - - - - - x - 1696 - - - - - x - 1697 - - - - - x - 1698 - - - - - x - 1699 - - - - - x - 1700 - - - - - x - 1701 - - - - - x - 1702 - - - - - x - 1703 - - - - - x - 1704 - - - - - x - 1705 - - - - - x - 1706 - - - - - x - 1707 - - - - - x - 1708 - - - - - x - 1709 - - - - - x - 1710 - - - - - x - 1711 - - - - - x - 1712 - - - - - x - 1713 - - - - - x - 1714 - - - - - x - 1715 - - - - - x - 1716 - - - - - x - 1717 - - - - - x - 1718 - - - - - x - 1719 - - - - - x - 1720 - - - - - x - 1721 - - - - - x - 1722 - - - - - x - 1723 - - - - - x - 1724 - - - - - x - 1725 - - - - - x - 1726 - - - - - x - 1727 - - - - - x - 1728 - - - - - x - 1729 - - - - - x - 1730 - - - - - x - 1731 - - - - - x - 1732 - - - - - x - 1733 - - - - - x - 1734 - - - - - x - 1735 - - - - - x - 1736 - - - - - x - 1737 - - - - - x - 1738 - - - - - x - 1739 - - - - - x - 1740 - - - - - x - 1741 - - - - - x - 1742 - - - - - x - 1743 - - - - - x - 1744 - - - - - x - 1745 - - - - - x - 1746 - - - - - x - 1747 - - - - - x - 1748 - - - - - x - 1749 - - - - - x - 1750 - - - - - x - 1751 - - - - - x - 1752 - - - - - x - 1753 - - - - - x - 1754 - - - - - x - 1755 - - - - - x - 1756 - - - - - x - 1757 - - - - - x - 1758 - - - - - x - 1759 - - - - - x - 1760 - - - - - x - 1761 - - - - - x - 1762 - - - - - x - 1763 - - - - - x - 1764 - - - - - x - 1765 - - - - - x - 1766 - - - - - x - 1767 - - - - - x - 1768 - - - - - x - 1769 - - - - - x - 1770 - - - - - x - 1771 - - - - - x - 1772 - - - - - x - 1773 - - - - - x - 1774 - - - - - x - 1775 - - - - - x - 1776 - - - - - x - 1777 - - - - - x - 1778 - - - - - x - 1779 - - - - - x - 1780 - - - - - x - 1781 - - - - - x - 1782 - - - - - x - 1783 - - - - - x - 1784 - - - - - x - 1785 - - - - - x - 1786 - - - - - x - 1787 - - - - - x - 1788 - - - - - x - 1789 - - - - - x - 1790 - - - - - x - 1791 - - - - - x - 1792 - - - - - x - 1793 - - - - - x - 1794 - - - - - x - 1795 - - - - - x - 1796 - - - - - x - 1797 - - - - - x - 1798 - - - - - x - 1799 - - - - - x - 1800 - - - - - x - 1801 - - - - - x - 1802 - - - - - x - 1803 - - - - - x - 1804 - - - - - x - 1805 - - - - - x - 1806 - - - - - x - 1807 - - - - - x - 1808 - - - - - x - 1809 - - - - - x - 1810 - - - - - x - 1811 - - - - - x - 1812 - - - - - x - 1813 - - - - - x - 1814 - - - - - x - 1815 - - - - - x - 1816 - - - - - x - 1817 - - - - - x - 1818 - - - - - x - 1819 - - - - - x - 1820 - - - - - x - 1821 - - - - - x - 1822 - - - - - x - 1823 - - - - - x - 1824 - - - - - x - 1825 - - - - - x - 1826 - - - - - x - 1827 - - - - - x - 1828 - - - - - x - 1829 - - - - - x - 1830 - - - - - x - 1831 - - - - - x - 1832 - - - - - x - 1833 - - - - - x - 1834 - - - - - x - 1835 - - - - - x - 1836 - - - - - x - 1837 - - - - - x - 1838 - - - - - x - 1839 - - - - - x - 1840 - - - - - x - 1841 - - - - - x - 1842 - - - - - x - 1843 - - - - - x - 1844 - - - - - x - 1845 - - - - - x - 1846 - - - - - x - 1847 - - - - - x - 1848 - - - - - x - 1849 - - - - - x - 1850 - - - - - x - 1851 - - - - - x - 1852 - - - - - x - 1853 - - - - - x - 1854 - - - - - x - 1855 - - - - - x - 1856 - - - - - x - 1857 - - - - - x - 1858 - - - - - x - 1859 - - - - - x - 1860 - - - - - x - 1861 - - - - - x - 1862 - - - - - x - 1863 - - - - - x - 1864 - - - - - x - 1865 - - - - - x - 1866 - - - - - x - 1867 - - - - - x - 1868 - - - - - x - 1869 - - - - - x - 1870 - - - - - x - 1871 - - - - - x - 1872 - - - - - x - 1873 - - - - - x - 1874 - - - - - x - 1875 - - - - - x - 1876 - - - - - x - 1877 - - - - - x - 1878 - - - - - x - 1879 - - - - - x - 1880 - - - - - x - 1881 - - - - - x - 1882 - - - - - x - 1883 - - - - - x - 1884 - - - - - x - 1885 - - - - - x - 1886 - - - - - x - 1887 - - - - - x - 1888 - - - - - x - 1889 - - - - - x - 1890 - - - - - x - 1891 - - - - - x - 1892 - - - - - x - 1893 - - - - - x - 1894 - - - - - x - 1895 - - - - - x - 1896 - - - - - x - 1897 - - - - - x - 1898 - - - - - x - 1899 - - - - - x - 1900 - - - - - x - 1901 - - - - - x - 1902 - - - - - x - 1903 - - - - - x - 1904 - - - - - x - 1905 - - - - - x - 1906 - - - - - x - 1907 - - - - - x - 1908 - - - - - x - 1909 - - - - - x - 1910 - - - - - x - 1911 - - - - - x - 1912 - - - - - x - 1913 - - - - - x - 1914 - - - - - x - 1915 - - - - - x - 1916 - - - - - x - 1917 - - - - - x - 1918 - - - - - x - 1919 - - - - - x - 1920 - - - - - x - 1921 - - - - - x - 1922 - - - - - x - 1923 - - - - - x - 1924 - - - - - x - 1925 - - - - - x - 1926 - - - - - x - 1927 - - - - - x - 1928 - - - - - x - 1929 - - - - - x - 1930 - - - - - x - 1931 - - - - - x - 1932 - - - - - x - 1933 - - - - - x - 1934 - - - - - x - 1935 - - - - - x - 1936 - - - - - x - 1937 - - - - - x - 1938 - - - - - x - 1939 - - - - - x - 1940 - - - - - x - 1941 - - - - - x - 1942 - - - - - x - 1943 - - - - - x - 1944 - - - - - x - 1945 - - - - - x - 1946 - - - - - x - 1947 - - - - - x - 1948 - - - - - x - 1949 - - - - - x - 1950 - - - - - x - 1951 - - - - - x - 1952 - - - - - x - 1953 - - - - - x - 1954 - - - - - x - 1955 - - - - - x - 1956 - - - - - x - 1957 - - - - - x - 1958 - - - - - x - 1959 - - - - - x - 1960 - - - - - x - 1961 - - - - - x - 1962 - - - - - x - 1963 - - - - - x - 1964 - - - - - x - 1965 - - - - - x - 1966 - - - - - x - 1967 - - - - - x - 1968 - - - - - x - 1969 - - - - - x - 1970 - - - - - x - 1971 - - - - - x - 1972 - - - - - x - 1973 - - - - - x - 1974 - - - - - x - 1975 - - - - - x - 1976 - - - - - x - 1977 - - - - - x - 1978 - - - - - x - 1979 - - - - - x - 1980 - - - - - x - 1981 - - - - - x - 1982 - - - - - x - 1983 - - - - - x - 1984 - - - - - x - 1985 - - - - - x - 1986 - - - - - x - 1987 - - - - - x - 1988 - - - - - x - 1989 - - - - - x - 1990 - - - - - x - 1991 - - - - - x - 1992 - - - - - x - 1993 - - - - - x - 1994 - - - - - x - 1995 - - - - - x - 1996 - - - - - x - 1997 - - - - - x - 1998 - - - - - x - 1999 - - - - - x - 2000 - - - - - x - 2001 - - - - - x - 2002 - - - - - x - 2003 - - - - - x - 2004 - - - - - x - 2005 - - - - - x - 2006 - - - - - x - 2007 - - - - - x - 2008 - - - - - x - 2009 - - - - - x - 2010 - - - - - x - 2011 - - - - - x - 2012 - - - - - x - 2013 - - - - - x - 2014 - - - - - x - 2015 - - - - - x - 2016 - - - - - x - 2017 - - - - - x - 2018 - - - - - x - 2019 - - - - - x - 2020 - - - - - x - 2021 - - - - - x - 2022 - - - - - x - 2023 - - - - - x - 2024 - - - - - x - 2025 - - - - - x - 2026 - - - - - x - 2027 - - - - - x - 2028 - - - - - x - 2029 - - - - - x - 2030 - - - - - x - 2031 - - - - - x - 2032 - - - - - x - 2033 - - - - - x - 2034 - - - - - x - 2035 - - - - - x - 2036 - - - - - x - 2037 - - - - - x - 2038 - - - - - x - 2039 - - - - - x - 2040 - - - - - x - 2041 - - - - - x - 2042 - - - - - x - 2043 - - - - - x - 2044 - - - - - x - 2045 - - - - - x - 2046 - - - - - x - 2047 - - - - - x - 2048 - - - - - x - 2049 - - - - - x - 2050 - - - - - x - 2051 - - - - - x - 2052 - - - - - x - 2053 - - - - - x - 2054 - - - - - x - 2055 - - - - - x - 2056 - - - - - x - 2057 - - - - - x - 2058 - - - - - x - 2059 - - - - - x - 2060 - - - - - x - 2061 - - - - - x - 2062 - - - - - x - 2063 - - - - - x - 2064 - - - - - x - 2065 - - - - - x - 2066 - - - - - x - 2067 - - - - - x - 2068 - - - - - x - 2069 - - - - - x - 2070 - - - - - x - 2071 - - - - - x - 2072 - - - - - x - 2073 - - - - - x - 2074 - - - - - x - 2075 - - - - - x - 2076 - - - - - x - 2077 - - - - - x - 2078 - - - - - x - 2079 - - - - - x - 2080 - - - - - x - 2081 - - - - - x - 2082 - - - - - x - 2083 - - - - - x - 2084 - - - - - x - 2085 - - - - - x - 2086 - - - - - x - 2087 - - - - - x - 2088 - - - - - x - 2089 - - - - - x - 2090 - - - - - x - 2091 - - - - - x - 2092 - - - - - x - 2093 - - - - - x - 2094 - - - - - x - 2095 - - - - - x - 2096 - - - - - x - 2097 - - - - - x - 2098 - - - - - x - 2099 - - - - - x - 2100 - - - - - x - 2101 - - - - - x - 2102 - - - - - x - 2103 - - - - - x - 2104 - - - - - x - 2105 - - - - - x - 2106 - - - - - x - 2107 - - - - - x - 2108 - - - - - x - 2109 - - - - - x - 2110 - - - - - x - 2111 - - - - - x - 2112 - - - - - x - 2113 - - - - - x - 2114 - - - - - x - 2115 - - - - - x - 2116 - - - - - x - 2117 - - - - - x - 2118 - - - - - x - 2119 - - - - - x - 2120 - - - - - x - 2121 - - - - - x - 2122 - - - - - x - 2123 - - - - - x - 2124 - - - - - x - 2125 - - - - - x - 2126 - - - - - x - 2127 - - - - - x - 2128 - - - - - x - 2129 - - - - - x - 2130 - - - - - x - 2131 - - - - - x - 2132 - - - - - x - 2133 - - - - - x - 2134 - - - - - x - 2135 - - - - - x - 2136 - - - - - x - 2137 - - - - - x - 2138 - - - - - x - 2139 - - - - - x - 2140 - - - - - x - 2141 - - - - - x - 2142 - - - - - x - 2143 - - - - - x - 2144 - - - - - x - 2145 - - - - - x - 2146 - - - - - x - 2147 - - - - - x - 2148 - - - - - x - 2149 - - - - - x - 2150 - - - - - x - 2151 - - - - - x - 2152 - - - - - x - 2153 - - - - - x - 2154 - - - - - x - 2155 - - - - - x - 2156 - - - - - x - 2157 - - - - - x - 2158 - - - - - x - 2159 - - - - - x - 2160 - - - - - x - 2161 - - - - - x - 2162 - - - - - x - 2163 - - - - - x - 2164 - - - - - x - 2165 - - - - - x - 2166 - - - - - x - 2167 - - - - - x - 2168 - - - - - x - 2169 - - - - - x - 2170 - - - - - x - 2171 - - - - - x - 2172 - - - - - x - 2173 - - - - - x - 2174 - - - - - x - 2175 - - - - - x - 2176 - - - - - x - 2177 - - - - - x - 2178 - - - - - x - 2179 - - - - - x - 2180 - - - - - x - 2181 - - - - - x - 2182 - - - - - x - 2183 - - - - - x - 2184 - - - - - x - 2185 - - - - - x - 2186 - - - - - x - 2187 - - - - - x - 2188 - - - - - x - 2189 - - - - - x - 2190 - - - - - x - 2191 - - - - - x - 2192 - - - - - x - 2193 - - - - - x - 2194 - - - - - x - 2195 - - - - - x - 2196 - - - - - x - 2197 - - - - - x - 2198 - - - - - x - 2199 - - - - - x - 2200 - - - - - x - 2201 - - - - - x - 2202 - - - - - x - 2203 - - - - - x - 2204 - - - - - x - 2205 - - - - - x - 2206 - - - - - x - 2207 - - - - - x - 2208 - - - - - x - 2209 - - - - - x - 2210 - - - - - x - 2211 - - - - - x - 2212 - - - - - x - 2213 - - - - - x - 2214 - - - - - x - 2215 - - - - - x - 2216 - - - - - x - 2217 - - - - - x - 2218 - - - - - x - 2219 - - - - - x - 2220 - - - - - x - 2221 - - - - - x - 2222 - - - - - x - 2223 - - - - - x - 2224 - - - - - x - 2225 - - - - - x - 2226 - - - - - x - 2227 - - - - - x - 2228 - - - - - x - 2229 - - - - - x - 2230 - - - - - x - 2231 - - - - - x - 2232 - - - - - x - 2233 - - - - - x - 2234 - - - - - x - 2235 - - - - - x - 2236 - - - - - x - 2237 - - - - - x - 2238 - - - - - x - 2239 - - - - - x - 2240 - - - - - x - 2241 - - - - - x - 2242 - - - - - x - 2243 - - - - - x - 2244 - - - - - x - 2245 - - - - - x - 2246 - - - - - x - 2247 - - - - - x - 2248 - - - - - x - 2249 - - - - - x - 2250 - - - - - x - 2251 - - - - - x - 2252 - - - - - x - 2253 - - - - - x - 2254 - - - - - x - 2255 - - - - - x - 2256 - - - - - x - 2257 - - - - - x - 2258 - - - - - x - 2259 - - - - - x - 2260 - - - - - x - 2261 - - - - - x - 2262 - - - - - x - 2263 - - - - - x - 2264 - - - - - x - 2265 - - - - - x - 2266 - - - - - x - 2267 - - - - - x - 2268 - - - - - x - 2269 - - - - - x - 2270 - - - - - x - 2271 - - - - - x - 2272 - - - - - x - 2273 - - - - - x - 2274 - - - - - x - 2275 - - - - - x - 2276 - - - - - x - 2277 - - - - - x - 2278 - - - - - x - 2279 - - - - - x - 2280 - - - - - x - 2281 - - - - - x - 2282 - - - - - x - 2283 - - - - - x - 2284 - - - - - x - 2285 - - - - - x - 2286 - - - - - x - 2287 - - - - - x - 2288 - - - - - x - 2289 - - - - - x - 2290 - - - - - x - 2291 - - - - - x - 2292 - - - - - x - 2293 - - - - - x - 2294 - - - - - x - 2295 - - - - - x - 2296 - - - - - x - 2297 - - - - - x - 2298 - - - - - x - 2299 - - - - - x - 2300 - - - - - x - 2301 - - - - - x - 2302 - - - - - x - 2303 - - - - - x - 2304 - - - - - x - 2305 - - - - - x - 2306 - - - - - x - 2307 - - - - - x - 2308 - - - - - x - 2309 - - - - - x - 2310 - - - - - x - 2311 - - - - - x - 2312 - - - - - x - 2313 - - - - - x - 2314 - - - - - x - 2315 - - - - - x - 2316 - - - - - x - 2317 - - - - - x - 2318 - - - - - x - 2319 - - - - - x - 2320 - - - - - x - 2321 - - - - - x - 2322 - - - - - x - 2323 - - - - - x - 2324 - - - - - x - 2325 - - - - - x - 2326 - - - - - x - 2327 - - - - - x - 2328 - - - - - x - 2329 - - - - - x - 2330 - - - - - x - 2331 - - - - - x - 2332 - - - - - x - 2333 - - - - - x - 2334 - - - - - x - 2335 - - - - - x - 2336 - - - - - x - 2337 - - - - - x - 2338 - - - - - x - 2339 - - - - - x - 2340 - - - - - x - 2341 - - - - - x - 2342 - - - - - x - 2343 - - - - - x - 2344 - - - - - x - 2345 - - - - - x - 2346 - - - - - x - 2347 - - - - - x - 2348 - - - - - x - 2349 - - - - - x - 2350 - - - - - x - 2351 - - - - - x - 2352 - - - - - x - 2353 - - - - - x - 2354 - - - - - x - 2355 - - - - - x - 2356 - - - - - x - 2357 - - - - - x - 2358 - - - - - x - 2359 - - - - - x - 2360 - - - - - x - 2361 - - - - - x - 2362 - - - - - x - 2363 - - - - - x - 2364 - - - - - x - 2365 - - - - - x - 2366 - - - - - x - 2367 - - - - - x - 2368 - - - - - x - 2369 - - - - - x - 2370 - - - - - x - 2371 - - - - - x - 2372 - - - - - x - 2373 - - - - - x - 2374 - - - - - x - 2375 - - - - - x - 2376 - - - - - x - 2377 - - - - - x - 2378 - - - - - x - 2379 - - - - - x - 2380 - - - - - x - 2381 - - - - - x - 2382 - - - - - x - 2383 - - - - - x - 2384 - - - - - x - 2385 - - - - - x - 2386 - - - - - x - 2387 - - - - - x - 2388 - - - - - x - 2389 - - - - - x - 2390 - - - - - x - 2391 - - - - - x - 2392 - - - - - x - 2393 - - - - - x - 2394 - - - - - x - 2395 - - - - - x - 2396 - - - - - x - 2397 - - - - - x - 2398 - - - - - x - 2399 - - - - - x - 2400 - - - - - x - 2401 - - - - - x - 2402 - - - - - x - 2403 - - - - - x - 2404 - - - - - x - 2405 - - - - - x - 2406 - - - - - x - 2407 - - - - - x - 2408 - - - - - x - 2409 - - - - - x - 2410 - - - - - x - 2411 - - - - - x - 2412 - - - - - x - 2413 - - - - - x - 2414 - - - - - x - 2415 - - - - - x - 2416 - - - - - x - 2417 - - - - - x - 2418 - - - - - x - 2419 - - - - - x - 2420 - - - - - x - 2421 - - - - - x - 2422 - - - - - x - 2423 - - - - - x - 2424 - - - - - x - 2425 - - - - - x - 2426 - - - - - x - 2427 - - - - - x - 2428 - - - - - x - 2429 - - - - - x - 2430 - - - - - x - 2431 - - - - - x - 2432 - - - - - x - 2433 - - - - - x - 2434 - - - - - x - 2435 - - - - - x - 2436 - - - - - x - 2437 - - - - - x - 2438 - - - - - x - 2439 - - - - - x - 2440 - - - - - x - 2441 - - - - - x - 2442 - - - - - x - 2443 - - - - - x - 2444 - - - - - x - 2445 - - - - - x - 2446 - - - - - x - 2447 - - - - - x - 2448 - - - - - x - 2449 - - - - - x - 2450 - - - - - x - 2451 - - - - - x - 2452 - - - - - x - 2453 - - - - - x - 2454 - - - - - x - 2455 - - - - - x - 2456 - - - - - x - 2457 - - - - - x - 2458 - - - - - x - 2459 - - - - - x - 2460 - - - - - x - 2461 - - - - - x - 2462 - - - - - x - 2463 - - - - - x - 2464 - - - - - x - 2465 - - - - - x - 2466 - - - - - x - 2467 - - - - - x - 2468 - - - - - x - 2469 - - - - - x - 2470 - - - - - x - 2471 - - - - - x - 2472 - - - - - x - 2473 - - - - - x - 2474 - - - - - x - 2475 - - - - - x - 2476 - - - - - x - 2477 - - - - - x - 2478 - - - - - x - 2479 - - - - - x - 2480 - - - - - x - 2481 - - - - - x - 2482 - - - - - x - 2483 - - - - - x - 2484 - - - - - x - 2485 - - - - - x - 2486 - - - - - x - 2487 - - - - - x - 2488 - - - - - x - 2489 - - - - - x - 2490 - - - - - x - 2491 - - - - - x - 2492 - - - - - x - 2493 - - - - - x - 2494 - - - - - x - 2495 - - - - - x - 2496 - - - - - x - 2497 - - - - - x - 2498 - - - - - x - 2499 - - - - - x - 2500 - - - - - x - 2501 - - - - - x - 2502 - - - - - x - 2503 - - - - - x - 2504 - - - - - x - 2505 - - - - - x - 2506 - - - - - x - 2507 - - - - - x - 2508 - - - - - x - 2509 - - - - - x - 2510 - - - - - x - 2511 - - - - - x - 2512 - - - - - x - 2513 - - - - - x - 2514 - - - - - x - 2515 - - - - - x - 2516 - - - - - x - 2517 - - - - - x - 2518 - - - - - x - 2519 - - - - - x - 2520 - - - - - x - 2521 - - - - - x - 2522 - - - - - x - 2523 - - - - - x - 2524 - - - - - x - 2525 - - - - - x - 2526 - - - - - x - 2527 - - - - - x - 2528 - - - - - x - 2529 - - - - - x - 2530 - - - - - x - 2531 - - - - - x - 2532 - - - - - x - 2533 - - - - - x - 2534 - - - - - x - 2535 - - - - - x - 2536 - - - - - x - 2537 - - - - - x - 2538 - - - - - x - 2539 - - - - - x - 2540 - - - - - x - 2541 - - - - - x - 2542 - - - - - x - 2543 - - - - - x - 2544 - - - - - x - 2545 - - - - - x - 2546 - - - - - x - 2547 - - - - - x - 2548 - - - - - x - 2549 - - - - - x - 2550 - - - - - x - 2551 - - - - - x - 2552 - - - - - x - 2553 - - - - - x - 2554 - - - - - x - 2555 - - - - - x - 2556 - - - - - x - 2557 - - - - - x - 2558 - - - - - x - 2559 - - - - - x - 2560 - - - - - x - 2561 - - - - - x - 2562 - - - - - x - 2563 - - - - - x - 2564 - - - - - x - 2565 - - - - - x - 2566 - - - - - x - 2567 - - - - - x - 2568 - - - - - x - 2569 - - - - - x - 2570 - - - - - x - 2571 - - - - - x - 2572 - - - - - x - 2573 - - - - - x - 2574 - - - - - x - 2575 - - - - - x - 2576 - - - - - x - 2577 - - - - - x - 2578 - - - - - x - 2579 - - - - - x - 2580 - - - - - x - 2581 - - - - - x - 2582 - - - - - x - 2583 - - - - - x - 2584 - - - - - x - 2585 - - - - - x - 2586 - - - - - x - 2587 - - - - - x - 2588 - - - - - x - 2589 - - - - - x - 2590 - - - - - x - 2591 - - - - - x - 2592 - - - - - x - 2593 - - - - - x - 2594 - - - - - x - 2595 - - - - - x - 2596 - - - - - x - 2597 - - - - - x - 2598 - - - - - x - 2599 - - - - - x - 2600 - - - - - x - 2601 - - - - - x - 2602 - - - - - x - 2603 - - - - - x - 2604 - - - - - x - 2605 - - - - - x - 2606 - - - - - x - 2607 - - - - - x - 2608 - - - - - x - 2609 - - - - - x - 2610 - - - - - x - 2611 - - - - - x - 2612 - - - - - x - 2613 - - - - - x - 2614 - - - - - x - 2615 - - - - - x - 2616 - - - - - x - 2617 - - - - - x - 2618 - - - - - x - 2619 - - - - - x - 2620 - - - - - x - 2621 - - - - - x - 2622 - - - - - x - 2623 - - - - - x - 2624 - - - - - x - 2625 - - - - - x - 2626 - - - - - x - 2627 - - - - - x - 2628 - - - - - x - 2629 - - - - - x - 2630 - - - - - x - 2631 - - - - - x - 2632 - - - - - x - 2633 - - - - - x - 2634 - - - - - x - 2635 - - - - - x - 2636 - - - - - x - 2637 - - - - - x - 2638 - - - - - x - 2639 - - - - - x - 2640 - - - - - x - 2641 - - - - - x - 2642 - - - - - x - 2643 - - - - - x - 2644 - - - - - x - 2645 - - - - - x - 2646 - - - - - x - 2647 - - - - - x - 2648 - - - - - x - 2649 - - - - - x - 2650 - - - - - x - 2651 - - - - - x - 2652 - - - - - x - 2653 - - - - - x - 2654 - - - - - x - 2655 - - - - - x - 2656 - - - - - x - 2657 - - - - - x - 2658 - - - - - x - 2659 - - - - - x - 2660 - - - - - x - 2661 - - - - - x - 2662 - - - - - x - 2663 - - - - - x - 2664 - - - - - x - 2665 - - - - - x - 2666 - - - - - x - 2667 - - - - - x - 2668 - - - - - x - 2669 - - - - - x - 2670 - - - - - x - 2671 - - - - - x - 2672 - - - - - x - 2673 - - - - - x - 2674 - - - - - x - 2675 - - - - - x - 2676 - - - - - x - 2677 - - - - - x - 2678 - - - - - x - 2679 - - - - - x - 2680 - - - - - x - 2681 - - - - - x - 2682 - - - - - x - 2683 - - - - - x - 2684 - - - - - x - 2685 - - - - - x - 2686 - - - - - x - 2687 - - - - - x - 2688 - - - - - x - 2689 - - - - - x - 2690 - - - - - x - 2691 - - - - - x - 2692 - - - - - x - 2693 - - - - - x - 2694 - - - - - x - 2695 - - - - - x - 2696 - - - - - x - 2697 - - - - - x - 2698 - - - - - x - 2699 - - - - - x - 2700 - - - - - x - 2701 - - - - - x - 2702 - - - - - x - 2703 - - - - - x - 2704 - - - - - x - 2705 - - - - - x - 2706 - - - - - x - 2707 - - - - - x - 2708 - - - - - x - 2709 - - - - - x - 2710 - - - - - x - 2711 - - - - - x - 2712 - - - - - x - 2713 - - - - - x - 2714 - - - - - x - 2715 - - - - - x - 2716 - - - - - x - 2717 - - - - - x - 2718 - - - - - x - 2719 - - - - - x - 2720 - - - - - x - 2721 - - - - - x - 2722 - - - - - x - 2723 - - - - - x - 2724 - - - - - x - 2725 - - - - - x - 2726 - - - - - x - 2727 - - - - - x - 2728 - - - - - x - 2729 - - - - - x - 2730 - - - - - x - 2731 - - - - - x - 2732 - - - - - x - 2733 - - - - - x - 2734 - - - - - x - 2735 - - - - - x - 2736 - - - - - x - 2737 - - - - - x - 2738 - - - - - x - 2739 - - - - - x - 2740 - - - - - x - 2741 - - - - - x - 2742 - - - - - x - 2743 - - - - - x - 2744 - - - - - x - 2745 - - - - - x - 2746 - - - - - x - 2747 - - - - - x - 2748 - - - - - x - 2749 - - - - - x - 2750 - - - - - x - 2751 - - - - - x - 2752 - - - - - x - 2753 - - - - - x - 2754 - - - - - x - 2755 - - - - - x - 2756 - - - - - x - 2757 - - - - - x - 2758 - - - - - x - 2759 - - - - - x - 2760 - - - - - x - 2761 - - - - - x - 2762 - - - - - x - 2763 - - - - - x - 2764 - - - - - x - 2765 - - - - - x - 2766 - - - - - x - 2767 - - - - - x - 2768 - - - - - x - 2769 - - - - - x - 2770 - - - - - x - 2771 - - - - - x - 2772 - - - - - x - 2773 - - - - - x - 2774 - - - - - x - 2775 - - - - - x - 2776 - - - - - x - 2777 - - - - - x - 2778 - - - - - x - 2779 - - - - - x - 2780 - - - - - x - 2781 - - - - - x - 2782 - - - - - x - 2783 - - - - - x - 2784 - - - - - x - 2785 - - - - - x - 2786 - - - - - x - 2787 - - - - - x - 2788 - - - - - x - 2789 - - - - - x - 2790 - - - - - x - 2791 - - - - - x - 2792 - - - - - x - 2793 - - - - - x - 2794 - - - - - x - 2795 - - - - - x - 2796 - - - - - x - 2797 - - - - - x - 2798 - - - - - x - 2799 - - - - - x - 2800 - - - - - x - 2801 - - - - - x - 2802 - - - - - x - 2803 - - - - - x - 2804 - - - - - x - 2805 - - - - - x - 2806 - - - - - x - 2807 - - - - - x - 2808 - - - - - x - 2809 - - - - - x - 2810 - - - - - x - 2811 - - - - - x - 2812 - - - - - x - 2813 - - - - - x - 2814 - - - - - x - 2815 - - - - - x - 2816 - - - - - x - 2817 - - - - - x - 2818 - - - - - x - 2819 - - - - - x - 2820 - - - - - x - 2821 - - - - - x - 2822 - - - - - x - 2823 - - - - - x - 2824 - - - - - x - 2825 - - - - - x - 2826 - - - - - x - 2827 - - - - - x - 2828 - - - - - x - 2829 - - - - - x - 2830 - - - - - x - 2831 - - - - - x - 2832 - - - - - x - 2833 - - - - - x - 2834 - - - - - x - 2835 - - - - - x - 2836 - - - - - x - 2837 - - - - - x - 2838 - - - - - x - 2839 - - - - - x - 2840 - - - - - x - 2841 - - - - - x - 2842 - - - - - x - 2843 - - - - - x - 2844 - - - - - x - 2845 - - - - - x - 2846 - - - - - x - 2847 - - - - - x - 2848 - - - - - x - 2849 - - - - - x - 2850 - - - - - x - 2851 - - - - - x - 2852 - - - - - x - 2853 - - - - - x - 2854 - - - - - x - 2855 - - - - - x - 2856 - - - - - x - 2857 - - - - - x - 2858 - - - - - x - 2859 - - - - - x - 2860 - - - - - x - 2861 - - - - - x - 2862 - - - - - x - 2863 - - - - - x - 2864 - - - - - x - 2865 - - - - - x - 2866 - - - - - x - 2867 - - - - - x - 2868 - - - - - x - 2869 - - - - - x - 2870 - - - - - x - 2871 - - - - - x - 2872 - - - - - x - 2873 - - - - - x - 2874 - - - - - x - 2875 - - - - - x - 2876 - - - - - x - 2877 - - - - - x - 2878 - - - - - x - 2879 - - - - - x - 2880 - - - - - x - 2881 - - - - - x - 2882 - - - - - x - 2883 - - - - - x - 2884 - - - - - x - 2885 - - - - - x - 2886 - - - - - x - 2887 - - - - - x - 2888 - - - - - x - 2889 - - - - - x - 2890 - - - - - x - 2891 - - - - - x - 2892 - - - - - x - 2893 - - - - - x - 2894 - - - - - x - 2895 - - - - - x - 2896 - - - - - x - 2897 - - - - - x - 2898 - - - - - x - 2899 - - - - - x - 2900 - - - - - x - 2901 - - - - - x - 2902 - - - - - x - 2903 - - - - - x - 2904 - - - - - x - 2905 - - - - - x - 2906 - - - - - x - 2907 - - - - - x - 2908 - - - - - x - 2909 - - - - - x - 2910 - - - - - x - 2911 - - - - - x - 2912 - - - - - x - 2913 - - - - - x - 2914 - - - - - x - 2915 - - - - - x - 2916 - - - - - x - 2917 - - - - - x - 2918 - - - - - x - 2919 - - - - - x - 2920 - - - - - x - 2921 - - - - - x - 2922 - - - - - x - 2923 - - - - - x - 2924 - - - - - x - 2925 - - - - - x - 2926 - - - - - x - 2927 - - - - - x - 2928 - - - - - x - 2929 - - - - - x - 2930 - - - - - x - 2931 - - - - - x - 2932 - - - - - x - 2933 - - - - - x - 2934 - - - - - x - 2935 - - - - - x - 2936 - - - - - x - 2937 - - - - - x - 2938 - - - - - x - 2939 - - - - - x - 2940 - - - - - x - 2941 - - - - - x - 2942 - - - - - x - 2943 - - - - - x - 2944 - - - - - x - 2945 - - - - - x - 2946 - - - - - x - 2947 - - - - - x - 2948 - - - - - x - 2949 - - - - - x - 2950 - - - - - x - 2951 - - - - - x - 2952 - - - - - x - 2953 - - - - - x - 2954 - - - - - x - 2955 - - - - - x - 2956 - - - - - x - 2957 - - - - - x - 2958 - - - - - x - 2959 - - - - - x - 2960 - - - - - x - 2961 - - - - - x - 2962 - - - - - x - 2963 - - - - - x - 2964 - - - - - x - 2965 - - - - - x - 2966 - - - - - x - 2967 - - - - - x - 2968 - - - - - x - 2969 - - - - - x - 2970 - - - - - x - 2971 - - - - - x - 2972 - - - - - x - 2973 - - - - - x - 2974 - - - - - x - 2975 - - - - - x - 2976 - - - - - x - 2977 - - - - - x - 2978 - - - - - x - 2979 - - - - - x - 2980 - - - - - x - 2981 - - - - - x - 2982 - - - - - x - 2983 - - - - - x - 2984 - - - - - x - 2985 - - - - - x - 2986 - - - - - x - 2987 - - - - - x - 2988 - - - - - x - 2989 - - - - - x - 2990 - - - - - x - 2991 - - - - - x - 2992 - - - - - x - 2993 - - - - - x - 2994 - - - - - x - 2995 - - - - - x - 2996 - - - - - x - 2997 - - - - - x - 2998 - - - - - x - 2999 - - - - - x - 3000 - - - - - x - 3001 - - - - - x - 3002 - - - - - x - 3003 - - - - - x - 3004 - - - - - x - 3005 - - - - - x - 3006 - - - - - x - 3007 - - - - - x - 3008 - - - - - x - 3009 - - - - - x - 3010 - - - - - x - 3011 - - - - - x - 3012 - - - - - x - 3013 - - - - - x - 3014 - - - - - x - 3015 - - - - - x - 3016 - - - - - x - 3017 - - - - - x - 3018 - - - - - x - 3019 - - - - - x - 3020 - - - - - x - 3021 - - - - - x - 3022 - - - - - x - 3023 - - - - - x - 3024 - - - - - x - 3025 - - - - - x - 3026 - - - - - x - 3027 - - - - - x - 3028 - - - - - x - 3029 - - - - - x - 3030 - - - - - x - 3031 - - - - - x - 3032 - - - - - x - 3033 - - - - - x - 3034 - - - - - x - 3035 - - - - - x - 3036 - - - - - x - 3037 - - - - - x - 3038 - - - - - x - 3039 - - - - - x - 3040 - - - - - x - 3041 - - - - - x - 3042 - - - - - x - 3043 - - - - - x - 3044 - - - - - x - 3045 - - - - - x - 3046 - - - - - x - 3047 - - - - - x - 3048 - - - - - x - 3049 - - - - - x - 3050 - - - - - x - 3051 - - - - - x - 3052 - - - - - x - 3053 - - - - - x - 3054 - - - - - x - 3055 - - - - - x - 3056 - - - - - x - 3057 - - - - - x - 3058 - - - - - x - 3059 - - - - - x - 3060 - - - - - x - 3061 - - - - - x - 3062 - - - - - x - 3063 - - - - - x - 3064 - - - - - x - 3065 - - - - - x - 3066 - - - - - x - 3067 - - - - - x - 3068 - - - - - x - 3069 - - - - - x - 3070 - - - - - x - 3071 - - - - - x - 3072 - - - - - x - 3073 - - - - - x - 3074 - - - - - x - 3075 - - - - - x - 3076 - - - - - x - 3077 - - - - - x - 3078 - - - - - x - 3079 - - - - - x - 3080 - - - - - x - 3081 - - - - - x - 3082 - - - - - x - 3083 - - - - - x - 3084 - - - - - x - 3085 - - - - - x - 3086 - - - - - x - 3087 - - - - - x - 3088 - - - - - x - 3089 - - - - - x - 3090 - - - - - x - 3091 - - - - - x - 3092 - - - - - x - 3093 - - - - - x - 3094 - - - - - x - 3095 - - - - - x - 3096 - - - - - x - 3097 - - - - - x - 3098 - - - - - x - 3099 - - - - - x - 3100 - - - - - x - 3101 - - - - - x - 3102 - - - - - x - 3103 - - - - - x - 3104 - - - - - x - 3105 - - - - - x - 3106 - - - - - x - 3107 - - - - - x - 3108 - - - - - x - 3109 - - - - - x - 3110 - - - - - x - 3111 - - - - - x - 3112 - - - - - x - 3113 - - - - - x - 3114 - - - - - x - 3115 - - - - - x - 3116 - - - - - x - 3117 - - - - - x - 3118 - - - - - x - 3119 - - - - - x - 3120 - - - - - x - 3121 - - - - - x - 3122 - - - - - x - 3123 - - - - - x - 3124 - - - - - x - 3125 - - - - - x - 3126 - - - - - x - 3127 - - - - - x - 3128 - - - - - x - 3129 - - - - - x - 3130 - - - - - x - 3131 - - - - - x - 3132 - - - - - x - 3133 - - - - - x - 3134 - - - - - x - 3135 - - - - - x - 3136 - - - - - x - 3137 - - - - - x - 3138 - - - - - x - 3139 - - - - - x - 3140 - - - - - x - 3141 - - - - - x - 3142 - - - - - x - 3143 - - - - - x - 3144 - - - - - x - 3145 - - - - - x - 3146 - - - - - x - 3147 - - - - - x - 3148 - - - - - x - 3149 - - - - - x - 3150 - - - - - x - 3151 - - - - - x - 3152 - - - - - x - 3153 - - - - - x - 3154 - - - - - x - 3155 - - - - - x - 3156 - - - - - x - 3157 - - - - - x - 3158 - - - - - x - 3159 - - - - - x - 3160 - - - - - x - 3161 - - - - - x - 3162 - - - - - x - 3163 - - - - - x - 3164 - - - - - x - 3165 - - - - - x - 3166 - - - - - x - 3167 - - - - - x - 3168 - - - - - x - 3169 - - - - - x - 3170 - - - - - x - 3171 - - - - - x - 3172 - - - - - x - 3173 - - - - - x - 3174 - - - - - x - 3175 - - - - - x - 3176 - - - - - x - 3177 - - - - - x - 3178 - - - - - x - 3179 - - - - - x - 3180 - - - - - x - 3181 - - - - - x - 3182 - - - - - x - 3183 - - - - - x - 3184 - - - - - x - 3185 - - - - - x - 3186 - - - - - x - 3187 - - - - - x - 3188 - - - - - x - 3189 - - - - - x - 3190 - - - - - x - 3191 - - - - - x - 3192 - - - - - x - 3193 - - - - - x - 3194 - - - - - x - 3195 - - - - - x - 3196 - - - - - x - 3197 - - - - - x - 3198 - - - - - x - 3199 - - - - - x - 3200 - - - - - x - 3201 - - - - - x - 3202 - - - - - x - 3203 - - - - - x - 3204 - - - - - x - 3205 - - - - - x - 3206 - - - - - x - 3207 - - - - - x - 3208 - - - - - x - 3209 - - - - - x - 3210 - - - - - x - 3211 - - - - - x - 3212 - - - - - x - 3213 - - - - - x - 3214 - - - - - x - 3215 - - - - - x - 3216 - - - - - x - 3217 - - - - - x - 3218 - - - - - x - 3219 - - - - - x - 3220 - - - - - x - 3221 - - - - - x - 3222 - - - - - x - 3223 - - - - - x - 3224 - - - - - x - 3225 - - - - - x - 3226 - - - - - x - 3227 - - - - - x - 3228 - - - - - x - 3229 - - - - - x - 3230 - - - - - x - 3231 - - - - - x - 3232 - - - - - x - 3233 - - - - - x - 3234 - - - - - x - 3235 - - - - - x - 3236 - - - - - x - 3237 - - - - - x - 3238 - - - - - x - 3239 - - - - - x - 3240 - - - - - x - 3241 - - - - - x - 3242 - - - - - x - 3243 - - - - - x - 3244 - - - - - x - 3245 - - - - - x - 3246 - - - - - x - 3247 - - - - - x - 3248 - - - - - x - 3249 - - - - - x - 3250 - - - - - x - 3251 - - - - - x - 3252 - - - - - x - 3253 - - - - - x - 3254 - - - - - x - 3255 - - - - - x - 3256 - - - - - x - 3257 - - - - - x - 3258 - - - - - x - 3259 - - - - - x - 3260 - - - - - x - 3261 - - - - - x - 3262 - - - - - x - 3263 - - - - - x - 3264 - - - - - x - 3265 - - - - - x - 3266 - - - - - x - 3267 - - - - - x - 3268 - - - - - x - 3269 - - - - - x - 3270 - - - - - x - 3271 - - - - - x - 3272 - - - - - x - 3273 - - - - - x - 3274 - - - - - x - 3275 - - - - - x - 3276 - - - - - x - 3277 - - - - - x - 3278 - - - - - x - 3279 - - - - - x - 3280 - - - - - x - 3281 - - - - - x - 3282 - - - - - x - 3283 - - - - - x - 3284 - - - - - x - 3285 - - - - - x - 3286 - - - - - x - 3287 - - - - - x - 3288 - - - - - x - 3289 - - - - - x - 3290 - - - - - x - 3291 - - - - - x - 3292 - - - - - x - 3293 - - - - - x - 3294 - - - - - x - 3295 - - - - - x - 3296 - - - - - x - 3297 - - - - - x - 3298 - - - - - x - 3299 - - - - - x - 3300 - - - - - x - 3301 - - - - - x - 3302 - - - - - x - 3303 - - - - - x - 3304 - - - - - x - 3305 - - - - - x - 3306 - - - - - x - 3307 - - - - - x - 3308 - - - - - x - 3309 - - - - - x - 3310 - - - - - x - 3311 - - - - - x - 3312 - - - - - x - 3313 - - - - - x - 3314 - - - - - x - 3315 - - - - - x - 3316 - - - - - x - 3317 - - - - - x - 3318 - - - - - x - 3319 - - - - - x - 3320 - - - - - x - 3321 - - - - - x - 3322 - - - - - x - 3323 - - - - - x - 3324 - - - - - x - 3325 - - - - - x - 3326 - - - - - x - 3327 - - - - - x - 3328 - - - - - x - 3329 - - - - - x - 3330 - - - - - x - 3331 - - - - - x - 3332 - - - - - x - 3333 - - - - - x - 3334 - - - - - x - 3335 - - - - - x - 3336 - - - - - x - 3337 - - - - - x - 3338 - - - - - x - 3339 - - - - - x - 3340 - - - - - x - 3341 - - - - - x - 3342 - - - - - x - 3343 - - - - - x - 3344 - - - - - x - 3345 - - - - - x - 3346 - - - - - x - 3347 - - - - - x - 3348 - - - - - x - 3349 - - - - - x - 3350 - - - - - x - 3351 - - - - - x - 3352 - - - - - x - 3353 - - - - - x - 3354 - - - - - x - 3355 - - - - - x - 3356 - - - - - x - 3357 - - - - - x - 3358 - - - - - x - 3359 - - - - - x - 3360 - - - - - x - 3361 - - - - - x - 3362 - - - - - x - 3363 - - - - - x - 3364 - - - - - x - 3365 - - - - - x - 3366 - - - - - x - 3367 - - - - - x - 3368 - - - - - x - 3369 - - - - - x - 3370 - - - - - x - 3371 - - - - - x - 3372 - - - - - x - 3373 - - - - - x - 3374 - - - - - x - 3375 - - - - - x - 3376 - - - - - x - 3377 - - - - - x - 3378 - - - - - x - 3379 - - - - - x - 3380 - - - - - x - 3381 - - - - - x - 3382 - - - - - x - 3383 - - - - - x - 3384 - - - - - x - 3385 - - - - - x - 3386 - - - - - x - 3387 - - - - - x - 3388 - - - - - x - 3389 - - - - - x - 3390 - - - - - x - 3391 - - - - - x - 3392 - - - - - x - 3393 - - - - - x - 3394 - - - - - x - 3395 - - - - - x - 3396 - - - - - x - 3397 - - - - - x - 3398 - - - - - x - 3399 - - - - - x - 3400 - - - - - x - 3401 - - - - - x - 3402 - - - - - x - 3403 - - - - - x - 3404 - - - - - x - 3405 - - - - - x - 3406 - - - - - x - 3407 - - - - - x - 3408 - - - - - x - 3409 - - - - - x - 3410 - - - - - x - 3411 - - - - - x - 3412 - - - - - x - 3413 - - - - - x - 3414 - - - - - x - 3415 - - - - - x - 3416 - - - - - x - 3417 - - - - - x - 3418 - - - - - x - 3419 - - - - - x - 3420 - - - - - x - 3421 - - - - - x - 3422 - - - - - x - 3423 - - - - - x - 3424 - - - - - x - 3425 - - - - - x - 3426 - - - - - x - 3427 - - - - - x - 3428 - - - - - x - 3429 - - - - - x - 3430 - - - - - x - 3431 - - - - - x - 3432 - - - - - x - 3433 - - - - - x - 3434 - - - - - x - 3435 - - - - - x - 3436 - - - - - x - 3437 - - - - - x - 3438 - - - - - x - 3439 - - - - - x - 3440 - - - - - x - 3441 - - - - - x - 3442 - - - - - x - 3443 - - - - - x - 3444 - - - - - x - 3445 - - - - - x - 3446 - - - - - x - 3447 - - - - - x - 3448 - - - - - x - 3449 - - - - - x - 3450 - - - - - x - 3451 - - - - - x - 3452 - - - - - x - 3453 - - - - - x - 3454 - - - - - x - 3455 - - - - - x - 3456 - - - - - x - 3457 - - - - - x - 3458 - - - - - x - 3459 - - - - - x - 3460 - - - - - x - 3461 - - - - - x - 3462 - - - - - x - 3463 - - - - - x - 3464 - - - - - x - 3465 - - - - - x - 3466 - - - - - x - 3467 - - - - - x - 3468 - - - - - x - 3469 - - - - - x - 3470 - - - - - x - 3471 - - - - - x - 3472 - - - - - x - 3473 - - - - - x - 3474 - - - - - x - 3475 - - - - - x - 3476 - - - - - x - 3477 - - - - - x - 3478 - - - - - x - 3479 - - - - - x - 3480 - - - - - x - 3481 - - - - - x - 3482 - - - - - x - 3483 - - - - - x - 3484 - - - - - x - 3485 - - - - - x - 3486 - - - - - x - 3487 - - - - - x - 3488 - - - - - x - 3489 - - - - - x - 3490 - - - - - x - 3491 - - - - - x - 3492 - - - - - x - 3493 - - - - - x - 3494 - - - - - x - 3495 - - - - - x - 3496 - - - - - x - 3497 - - - - - x - 3498 - - - - - x - 3499 - - - - - x - 3500 - - - - - x - 3501 - - - - - x - 3502 - - - - - x - 3503 - - - - - x - 3504 - - - - - x - 3505 - - - - - x - 3506 - - - - - x - 3507 - - - - - x - 3508 - - - - - x - 3509 - - - - - x - 3510 - - - - - x - 3511 - - - - - x - 3512 - - - - - x - 3513 - - - - - x - 3514 - - - - - x - 3515 - - - - - x - 3516 - - - - - x - 3517 - - - - - x - 3518 - - - - - x - 3519 - - - - - x - 3520 - - - - - x - 3521 - - - - - x - 3522 - - - - - x - 3523 - - - - - x - 3524 - - - - - x - 3525 - - - - - x - 3526 - - - - - x - 3527 - - - - - x - 3528 - - - - - x - 3529 - - - - - x - 3530 - - - - - x - 3531 - - - - - x - 3532 - - - - - x - 3533 - - - - - x - 3534 - - - - - x - 3535 - - - - - x - 3536 - - - - - x - 3537 - - - - - x - 3538 - - - - - x - 3539 - - - - - x - 3540 - - - - - x - 3541 - - - - - x - 3542 - - - - - x - 3543 - - - - - x - 3544 - - - - - x - 3545 - - - - - x - 3546 - - - - - x - 3547 - - - - - x - 3548 - - - - - x - 3549 - - - - - x - 3550 - - - - - x - 3551 - - - - - x - 3552 - - - - - x - 3553 - - - - - x - 3554 - - - - - x - 3555 - - - - - x - 3556 - - - - - x - 3557 - - - - - x - 3558 - - - - - x - 3559 - - - - - x - 3560 - - - - - x - 3561 - - - - - x - 3562 - - - - - x - 3563 - - - - - x - 3564 - - - - - x - 3565 - - - - - x - 3566 - - - - - x - 3567 - - - - - x - 3568 - - - - - x - 3569 - - - - - x - 3570 - - - - - x - 3571 - - - - - x - 3572 - - - - - x - 3573 - - - - - x - 3574 - - - - - x - 3575 - - - - - x - 3576 - - - - - x - 3577 - - - - - x - 3578 - - - - - x - 3579 - - - - - x - 3580 - - - - - x - 3581 - - - - - x - 3582 - - - - - x - 3583 - - - - - x - 3584 - - - - - x - 3585 - - - - - x - 3586 - - - - - x - 3587 - - - - - x - 3588 - - - - - x - 3589 - - - - - x - 3590 - - - - - x - 3591 - - - - - x - 3592 - - - - - x - 3593 - - - - - x - 3594 - - - - - x - 3595 - - - - - x - 3596 - - - - - x - 3597 - - - - - x - 3598 - - - - - x - 3599 - - - - - x - 3600 - - - - - x - 3601 - - - - - x - 3602 - - - - - x - 3603 - - - - - x - 3604 - - - - - x - 3605 - - - - - x - 3606 - - - - - x - 3607 - - - - - x - 3608 - - - - - x - 3609 - - - - - x - 3610 - - - - - x - 3611 - - - - - x - 3612 - - - - - x - 3613 - - - - - x - 3614 - - - - - x - 3615 - - - - - x - 3616 - - - - - x - 3617 - - - - - x - 3618 - - - - - x - 3619 - - - - - x - 3620 - - - - - x - 3621 - - - - - x - 3622 - - - - - x - 3623 - - - - - x - 3624 - - - - - x - 3625 - - - - - x - 3626 - - - - - x - 3627 - - - - - x - 3628 - - - - - x - 3629 - - - - - x - 3630 - - - - - x - 3631 - - - - - x - 3632 - - - - - x - 3633 - - - - - x - 3634 - - - - - x - 3635 - - - - - x - 3636 - - - - - x - 3637 - - - - - x - 3638 - - - - - x - 3639 - - - - - x - 3640 - - - - - x - 3641 - - - - - x - 3642 - - - - - x - 3643 - - - - - x - 3644 - - - - - x - 3645 - - - - - x - 3646 - - - - - x - 3647 - - - - - x - 3648 - - - - - x - 3649 - - - - - x - 3650 - - - - - x - 3651 - - - - - x - 3652 - - - - - x - 3653 - - - - - x - 3654 - - - - - x - 3655 - - - - - x - 3656 - - - - - x - 3657 - - - - - x - 3658 - - - - - x - 3659 - - - - - x - 3660 - - - - - x - 3661 - - - - - x - 3662 - - - - - x - 3663 - - - - - x - 3664 - - - - - x - 3665 - - - - - x - 3666 - - - - - x - 3667 - - - - - x - 3668 - - - - - x - 3669 - - - - - x - 3670 - - - - - x - 3671 - - - - - x - 3672 - - - - - x - 3673 - - - - - x - 3674 - - - - - x - 3675 - - - - - x - 3676 - - - - - x - 3677 - - - - - x - 3678 - - - - - x - 3679 - - - - - x - 3680 - - - - - x - 3681 - - - - - x - 3682 - - - - - x - 3683 - - - - - x - 3684 - - - - - x - 3685 - - - - - x - 3686 - - - - - x - 3687 - - - - - x - 3688 - - - - - x - 3689 - - - - - x - 3690 - - - - - x - 3691 - - - - - x - 3692 - - - - - x - 3693 - - - - - x - 3694 - - - - - x - 3695 - - - - - x - 3696 - - - - - x - 3697 - - - - - x - 3698 - - - - - x - 3699 - - - - - x - 3700 - - - - - x - 3701 - - - - - x - 3702 - - - - - x - 3703 - - - - - x - 3704 - - - - - x - 3705 - - - - - x - 3706 - - - - - x - 3707 - - - - - x - 3708 - - - - - x - 3709 - - - - - x - 3710 - - - - - x - 3711 - - - - - x - 3712 - - - - - x - 3713 - - - - - x - 3714 - - - - - x - 3715 - - - - - x - 3716 - - - - - x - 3717 - - - - - x - 3718 - - - - - x - 3719 - - - - - x - 3720 - - - - - x - 3721 - - - - - x - 3722 - - - - - x - 3723 - - - - - x - 3724 - - - - - x - 3725 - - - - - x - 3726 - - - - - x - 3727 - - - - - x - 3728 - - - - - x - 3729 - - - - - x - 3730 - - - - - x - 3731 - - - - - x - 3732 - - - - - x - 3733 - - - - - x - 3734 - - - - - x - 3735 - - - - - x - 3736 - - - - - x - 3737 - - - - - x - 3738 - - - - - x - 3739 - - - - - x - 3740 - - - - - x - 3741 - - - - - x - 3742 - - - - - x - 3743 - - - - - x - 3744 - - - - - x - 3745 - - - - - x - 3746 - - - - - x - 3747 - - - - - x - 3748 - - - - - x - 3749 - - - - - x - 3750 - - - - - x - 3751 - - - - - x - 3752 - - - - - x - 3753 - - - - - x - 3754 - - - - - x - 3755 - - - - - x - 3756 - - - - - x - 3757 - - - - - x - 3758 - - - - - x - 3759 - - - - - x - 3760 - - - - - x - 3761 - - - - - x - 3762 - - - - - x - 3763 - - - - - x - 3764 - - - - - x - 3765 - - - - - x - 3766 - - - - - x - 3767 - - - - - x - 3768 - - - - - x - 3769 - - - - - x - 3770 - - - - - x - 3771 - - - - - x - 3772 - - - - - x - 3773 - - - - - x - 3774 - - - - - x - 3775 - - - - - x - 3776 - - - - - x - 3777 - - - - - x - 3778 - - - - - x - 3779 - - - - - x - 3780 - - - - - x - 3781 - - - - - x - 3782 - - - - - x - 3783 - - - - - x - 3784 - - - - - x - 3785 - - - - - x - 3786 - - - - - x - 3787 - - - - - x - 3788 - - - - - x - 3789 - - - - - x - 3790 - - - - - x - 3791 - - - - - x - 3792 - - - - - x - 3793 - - - - - x - 3794 - - - - - x - 3795 - - - - - x - 3796 - - - - - x - 3797 - - - - - x - 3798 - - - - - x - 3799 - - - - - x - 3800 - - - - - x - 3801 - - - - - x - 3802 - - - - - x - 3803 - - - - - x - 3804 - - - - - x - 3805 - - - - - x - 3806 - - - - - x - 3807 - - - - - x - 3808 - - - - - x - 3809 - - - - - x - 3810 - - - - - x - 3811 - - - - - x - 3812 - - - - - x - 3813 - - - - - x - 3814 - - - - - x - 3815 - - - - - x - 3816 - - - - - x - 3817 - - - - - x - 3818 - - - - - x - 3819 - - - - - x - 3820 - - - - - x - 3821 - - - - - x - 3822 - - - - - x - 3823 - - - - - x - 3824 - - - - - x - 3825 - - - - - x - 3826 - - - - - x - 3827 - - - - - x - 3828 - - - - - x - 3829 - - - - - x - 3830 - - - - - x - 3831 - - - - - x - 3832 - - - - - x - 3833 - - - - - x - 3834 - - - - - x - 3835 - - - - - x - 3836 - - - - - x - 3837 - - - - - x - 3838 - - - - - x - 3839 - - - - - x - 3840 - - - - - x - 3841 - - - - - x - 3842 - - - - - x - 3843 - - - - - x - 3844 - - - - - x - 3845 - - - - - x - 3846 - - - - - x - 3847 - - - - - x - 3848 - - - - - x - 3849 - - - - - x - 3850 - - - - - x - 3851 - - - - - x - 3852 - - - - - x - 3853 - - - - - x - 3854 - - - - - x - 3855 - - - - - x - 3856 - - - - - x - 3857 - - - - - x - 3858 - - - - - x - 3859 - - - - - x - 3860 - - - - - x - 3861 - - - - - x - 3862 - - - - - x - 3863 - - - - - x - 3864 - - - - - x - 3865 - - - - - x - 3866 - - - - - x - 3867 - - - - - x - 3868 - - - - - x - 3869 - - - - - x - 3870 - - - - - x - 3871 - - - - - x - 3872 - - - - - x - 3873 - - - - - x - 3874 - - - - - x - 3875 - - - - - x - 3876 - - - - - x - 3877 - - - - - x - 3878 - - - - - x - 3879 - - - - - x - 3880 - - - - - x - 3881 - - - - - x - 3882 - - - - - x - 3883 - - - - - x - 3884 - - - - - x - 3885 - - - - - x - 3886 - - - - - x - 3887 - - - - - x - 3888 - - - - - x - 3889 - - - - - x - 3890 - - - - - x - 3891 - - - - - x - 3892 - - - - - x - 3893 - - - - - x - 3894 - - - - - x - 3895 - - - - - x - 3896 - - - - - x - 3897 - - - - - x - 3898 - - - - - x - 3899 - - - - - x - 3900 - - - - - x - 3901 - - - - - x - 3902 - - - - - x - 3903 - - - - - x - 3904 - - - - - x - 3905 - - - - - x - 3906 - - - - - x - 3907 - - - - - x - 3908 - - - - - x - 3909 - - - - - x - 3910 - - - - - x - 3911 - - - - - x - 3912 - - - - - x - 3913 - - - - - x - 3914 - - - - - x - 3915 - - - - - x - 3916 - - - - - x - 3917 - - - - - x - 3918 - - - - - x - 3919 - - - - - x - 3920 - - - - - x - 3921 - - - - - x - 3922 - - - - - x - 3923 - - - - - x - 3924 - - - - - x - 3925 - - - - - x - 3926 - - - - - x - 3927 - - - - - x - 3928 - - - - - x - 3929 - - - - - x - 3930 - - - - - x - 3931 - - - - - x - 3932 - - - - - x - 3933 - - - - - x - 3934 - - - - - x - 3935 - - - - - x - 3936 - - - - - x - 3937 - - - - - x - 3938 - - - - - x - 3939 - - - - - x - 3940 - - - - - x - 3941 - - - - - x - 3942 - - - - - x - 3943 - - - - - x - 3944 - - - - - x - 3945 - - - - - x - 3946 - - - - - x - 3947 - - - - - x - 3948 - - - - - x - 3949 - - - - - x - 3950 - - - - - x - 3951 - - - - - x - 3952 - - - - - x - 3953 - - - - - x - 3954 - - - - - x - 3955 - - - - - x - 3956 - - - - - x - 3957 - - - - - x - 3958 - - - - - x - 3959 - - - - - x - 3960 - - - - - x - 3961 - - - - - x - 3962 - - - - - x - 3963 - - - - - x - 3964 - - - - - x - 3965 - - - - - x - 3966 - - - - - x - 3967 - - - - - x - 3968 - - - - - x - 3969 - - - - - x - 3970 - - - - - x - 3971 - - - - - x - 3972 - - - - - x - 3973 - - - - - x - 3974 - - - - - x - 3975 - - - - - x - 3976 - - - - - x - 3977 - - - - - x - 3978 - - - - - x - 3979 - - - - - x - 3980 - - - - - x - 3981 - - - - - x - 3982 - - - - - x - 3983 - - - - - x - 3984 - - - - - x - 3985 - - - - - x - 3986 - - - - - x - 3987 - - - - - x - 3988 - - - - - x - 3989 - - - - - x - 3990 - - - - - x - 3991 - - - - - x - 3992 - - - - - x - 3993 - - - - - x - 3994 - - - - - x - 3995 - - - - - x - 3996 - - - - - x - 3997 - - - - - x - 3998 - - - - - x - 3999 - - - - - x - 4000 - - - - - x - 4001 - - - - - x - 4002 - - - - - x - 4003 - - - - - x - 4004 - - - - - x - 4005 - - - - - x - 4006 - - - - - x - 4007 - - - - - x - 4008 - - - - - x - 4009 - - - - - x - 4010 - - - - - x - 4011 - - - - - x - 4012 - - - - - x - 4013 - - - - - x - 4014 - - - - - x - 4015 - - - - - x - 4016 - - - - - x - 4017 - - - - - x - 4018 - - - - - x - 4019 - - - - - x - 4020 - - - - - x - 4021 - - - - - x - 4022 - - - - - x - 4023 - - - - - x - 4024 - - - - - x - 4025 - - - - - x - 4026 - - - - - x - 4027 - - - - - x - 4028 - - - - - x - 4029 - - - - - x - 4030 - - - - - x - 4031 - - - - - x - 4032 - - - - - x - 4033 - - - - - x - 4034 - - - - - x - 4035 - - - - - x - 4036 - - - - - x - 4037 - - - - - x - 4038 - - - - - x - 4039 - - - - - x - 4040 - - - - - x - 4041 - - - - - x - 4042 - - - - - x - 4043 - - - - - x - 4044 - - - - - x - 4045 - - - - - x - 4046 - - - - - x - 4047 - - - - - x - 4048 - - - - - x - 4049 - - - - - x - 4050 - - - - - x - 4051 - - - - - x - 4052 - - - - - x - 4053 - - - - - x - 4054 - - - - - x - 4055 - - - - - x - 4056 - - - - - x - 4057 - - - - - x - 4058 - - - - - x - 4059 - - - - - x - 4060 - - - - - x - 4061 - - - - - x - 4062 - - - - - x - 4063 - - - - - x - 4064 - - - - - x - 4065 - - - - - x - 4066 - - - - - x - 4067 - - - - - x - 4068 - - - - - x - 4069 - - - - - x - 4070 - - - - - x - 4071 - - - - - x - 4072 - - - - - x - 4073 - - - - - x - 4074 - - - - - x - 4075 - - - - - x - 4076 - - - - - x - 4077 - - - - - x - 4078 - - - - - x - 4079 - - - - - x - 4080 - - - - - x - 4081 - - - - - x - 4082 - - - - - x - 4083 - - - - - x - 4084 - - - - - x - 4085 - - - - - x - 4086 - - - - - x - 4087 - - - - - x - 4088 - - - - - x - 4089 - - - - - x - 4090 - - - - - x - 4091 - - - - - x - 4092 - - - - - x - 4093 - - - - - x - 4094 - - - - - x - 4095 - - - - - x - 4096 - - - - - x - 4097 - - - - - x - 4098 - - - - - x - 4099 - - - - - x - 4100 - - - - - x - 4101 - - - - - x - 4102 - - - - - x - 4103 - - - - - x - 4104 - - - - - x - 4105 - - - - - x - 4106 - - - - - x - 4107 - - - - - x - 4108 - - - - - x - 4109 - - - - - x - 4110 - - - - - x - 4111 - - - - - x - 4112 - - - - - x - 4113 - - - - - x - 4114 - - - - - x - 4115 - - - - - x - 4116 - - - - - x - 4117 - - - - - x - 4118 - - - - - x - 4119 - - - - - x - 4120 - - - - - x - 4121 - - - - - x - 4122 - - - - - x - 4123 - - - - - x - 4124 - - - - - x - 4125 - - - - - x - 4126 - - - - - x - 4127 - - - - - x - 4128 - - - - - x - 4129 - - - - - x - 4130 - - - - - x - 4131 - - - - - x - 4132 - - - - - x - 4133 - - - - - x - 4134 - - - - - x - 4135 - - - - - x - 4136 - - - - - x - 4137 - - - - - x - 4138 - - - - - x - 4139 - - - - - x - 4140 - - - - - x - 4141 - - - - - x - 4142 - - - - - x - 4143 - - - - - x - 4144 - - - - - x - 4145 - - - - - x - 4146 - - - - - x - 4147 - - - - - x - 4148 - - - - - x - 4149 - - - - - x - 4150 - - - - - x - 4151 - - - - - x - 4152 - - - - - x - 4153 - - - - - x - 4154 - - - - - x - 4155 - - - - - x - 4156 - - - - - x - 4157 - - - - - x - 4158 - - - - - x - 4159 - - - - - x - 4160 - - - - - x - 4161 - - - - - x - 4162 - - - - - x - 4163 - - - - - x - 4164 - - - - - x - 4165 - - - - - x - 4166 - - - - - x - 4167 - - - - - x - 4168 - - - - - x - 4169 - - - - - x - 4170 - - - - - x - 4171 - - - - - x - 4172 - - - - - x - 4173 - - - - - x - 4174 - - - - - x - 4175 - - - - - x - 4176 - - - - - x - 4177 - - - - - x - 4178 - - - - - x - 4179 - - - - - x - 4180 - - - - - x - 4181 - - - - - x - 4182 - - - - - x - 4183 - - - - - x - 4184 - - - - - x - 4185 - - - - - x - 4186 - - - - - x - 4187 - - - - - x - 4188 - - - - - x - 4189 - - - - - x - 4190 - - - - - x - 4191 - - - - - x - 4192 - - - - - x - 4193 - - - - - x - 4194 - - - - - x - 4195 - - - - - x - 4196 - - - - - x - 4197 - - - - - x - 4198 - - - - - x - 4199 - - - - - x - 4200 - - - - - x - 4201 - - - - - x - 4202 - - - - - x - 4203 - - - - - x - 4204 - - - - - x - 4205 - - - - - x - 4206 - - - - - x - 4207 - - - - - x - 4208 - - - - - x - 4209 - - - - - x - 4210 - - - - - x - 4211 - - - - - x - 4212 - - - - - x - 4213 - - - - - x - 4214 - - - - - x - 4215 - - - - - x - 4216 - - - - - x - 4217 - - - - - x - 4218 - - - - - x - 4219 - - - - - x - 4220 - - - - - x - 4221 - - - - - x - 4222 - - - - - x - 4223 - - - - - x - 4224 - - - - - x - 4225 - - - - - x - 4226 - - - - - x - 4227 - - - - - x - 4228 - - - - - x - 4229 - - - - - x - 4230 - - - - - x - 4231 - - - - - x - 4232 - - - - - x - 4233 - - - - - x - 4234 - - - - - x - 4235 - - - - - x - 4236 - - - - - x - 4237 - - - - - x - 4238 - - - - - x - 4239 - - - - - x - 4240 - - - - - x - 4241 - - - - - x - 4242 - - - - - x - 4243 - - - - - x - 4244 - - - - - x - 4245 - - - - - x - 4246 - - - - - x - 4247 - - - - - x - 4248 - - - - - x - 4249 - - - - - x - 4250 - - - - - x - 4251 - - - - - x - 4252 - - - - - x - 4253 - - - - - x - 4254 - - - - - x - 4255 - - - - - x - 4256 - - - - - x - 4257 - - - - - x - 4258 - - - - - x - 4259 - - - - - x - 4260 - - - - - x - 4261 - - - - - x - 4262 - - - - - x - 4263 - - - - - x - 4264 - - - - - x - 4265 - - - - - x - 4266 - - - - - x - 4267 - - - - - x - 4268 - - - - - x - 4269 - - - - - x - 4270 - - - - - x - 4271 - - - - - x - 4272 - - - - - x - 4273 - - - - - x - 4274 - - - - - x - 4275 - - - - - x - 4276 - - - - - x - 4277 - - - - - x - 4278 - - - - - x - 4279 - - - - - x - 4280 - - - - - x - 4281 - - - - - x - 4282 - - - - - x - 4283 - - - - - x - 4284 - - - - - x - 4285 - - - - - x - 4286 - - - - - x - 4287 - - - - - x - 4288 - - - - - x - 4289 - - - - - x - 4290 - - - - - x - 4291 - - - - - x - 4292 - - - - - x - 4293 - - - - - x - 4294 - - - - - x - 4295 - - - - - x - 4296 - - - - - x - 4297 - - - - - x - 4298 - - - - - x - 4299 - - - - - x - 4300 - - - - - x - 4301 - - - - - x - 4302 - - - - - x - 4303 - - - - - x - 4304 - - - - - x - 4305 - - - - - x - 4306 - - - - - x - 4307 - - - - - x - 4308 - - - - - x - 4309 - - - - - x - 4310 - - - - - x - 4311 - - - - - x - 4312 - - - - - x - 4313 - - - - - x - 4314 - - - - - x - 4315 - - - - - x - 4316 - - - - - x - 4317 - - - - - x - 4318 - - - - - x - 4319 - - - - - x - 4320 - - - - - x - 4321 - - - - - x - 4322 - - - - - x - 4323 - - - - - x - 4324 - - - - - x - 4325 - - - - - x - 4326 - - - - - x - 4327 - - - - - x - 4328 - - - - - x - 4329 - - - - - x - 4330 - - - - - x - 4331 - - - - - x - 4332 - - - - - x - 4333 - - - - - x - 4334 - - - - - x - 4335 - - - - - x - 4336 - - - - - x - 4337 - - - - - x - 4338 - - - - - x - 4339 - - - - - x - 4340 - - - - - x - 4341 - - - - - x - 4342 - - - - - x - 4343 - - - - - x - 4344 - - - - - x - 4345 - - - - - x - 4346 - - - - - x - 4347 - - - - - x - 4348 - - - - - x - 4349 - - - - - x - 4350 - - - - - x - 4351 - - - - - x - 4352 - - - - - x - 4353 - - - - - x - 4354 - - - - - x - 4355 - - - - - x - 4356 - - - - - x - 4357 - - - - - x - 4358 - - - - - x - 4359 - - - - - x - 4360 - - - - - x - 4361 - - - - - x - 4362 - - - - - x - 4363 - - - - - x - 4364 - - - - - x - 4365 - - - - - x - 4366 - - - - - x - 4367 - - - - - x - 4368 - - - - - x - 4369 - - - - - x - 4370 - - - - - x - 4371 - - - - - x - 4372 - - - - - x - 4373 - - - - - x - 4374 - - - - - x - 4375 - - - - - x - 4376 - - - - - x - 4377 - - - - - x - 4378 - - - - - x - 4379 - - - - - x - 4380 - - - - - x - 4381 - - - - - x - 4382 - - - - - x - 4383 - - - - - x - 4384 - - - - - x - 4385 - - - - - x - 4386 - - - - - x - 4387 - - - - - x - 4388 - - - - - x - 4389 - - - - - x - 4390 - - - - - x - 4391 - - - - - x - 4392 - - - - - x - 4393 - - - - - x - 4394 - - - - - x - 4395 - - - - - x - 4396 - - - - - x - 4397 - - - - - x - 4398 - - - - - x - 4399 - - - - - x - 4400 - - - - - x - 4401 - - - - - x - 4402 - - - - - x - 4403 - - - - - x - 4404 - - - - - x - 4405 - - - - - x - 4406 - - - - - x - 4407 - - - - - x - 4408 - - - - - x - 4409 - - - - - x - 4410 - - - - - x - 4411 - - - - - x - 4412 - - - - - x - 4413 - - - - - x - 4414 - - - - - x - 4415 - - - - - x - 4416 - - - - - x - 4417 - - - - - x - 4418 - - - - - x - 4419 - - - - - x - 4420 - - - - - x - 4421 - - - - - x - 4422 - - - - - x - 4423 - - - - - x - 4424 - - - - - x - 4425 - - - - - x - 4426 - - - - - x - 4427 - - - - - x - 4428 - - - - - x - 4429 - - - - - x - 4430 - - - - - x - 4431 - - - - - x - 4432 - - - - - x - 4433 - - - - - x - 4434 - - - - - x - 4435 - - - - - x - 4436 - - - - - x - 4437 - - - - - x - 4438 - - - - - x - 4439 - - - - - x - 4440 - - - - - x - 4441 - - - - - x - 4442 - - - - - x - 4443 - - - - - x - 4444 - - - - - x - 4445 - - - - - x - 4446 - - - - - x - 4447 - - - - - x - 4448 - - - - - x - 4449 - - - - - x - 4450 - - - - - x - 4451 - - - - - x - 4452 - - - - - x - 4453 - - - - - x - 4454 - - - - - x - 4455 - - - - - x - 4456 - - - - - x - 4457 - - - - - x - 4458 - - - - - x - 4459 - - - - - x - 4460 - - - - - x - 4461 - - - - - x - 4462 - - - - - x - 4463 - - - - - x - 4464 - - - - - x - 4465 - - - - - x - 4466 - - - - - x - 4467 - - - - - x - 4468 - - - - - x - 4469 - - - - - x - 4470 - - - - - x - 4471 - - - - - x - 4472 - - - - - x - 4473 - - - - - x - 4474 - - - - - x - 4475 - - - - - x - 4476 - - - - - x - 4477 - - - - - x - 4478 - - - - - x - 4479 - - - - - x - 4480 - - - - - x - 4481 - - - - - x - 4482 - - - - - x - 4483 - - - - - x - 4484 - - - - - x - 4485 - - - - - x - 4486 - - - - - x - 4487 - - - - - x - 4488 - - - - - x - 4489 - - - - - x - 4490 - - - - - x - 4491 - - - - - x - 4492 - - - - - x - 4493 - - - - - x - 4494 - - - - - x - 4495 - - - - - x - 4496 - - - - - x - 4497 - - - - - x - 4498 - - - - - x - 4499 - - - - - x - 4500 - - - - - x - 4501 - - - - - x - 4502 - - - - - x - 4503 - - - - - x - 4504 - - - - - x - 4505 - - - - - x - 4506 - - - - - x - 4507 - - - - - x - 4508 - - - - - x - 4509 - - - - - x - 4510 - - - - - x - 4511 - - - - - x - 4512 - - - - - x - 4513 - - - - - x - 4514 - - - - - x - 4515 - - - - - x - 4516 - - - - - x - 4517 - - - - - x - 4518 - - - - - x - 4519 - - - - - x - 4520 - - - - - x - 4521 - - - - - x - 4522 - - - - - x - 4523 - - - - - x - 4524 - - - - - x - 4525 - - - - - x - 4526 - - - - - x - 4527 - - - - - x - 4528 - - - - - x - 4529 - - - - - x - 4530 - - - - - x - 4531 - - - - - x - 4532 - - - - - x - 4533 - - - - - x - 4534 - - - - - x - 4535 - - - - - x - 4536 - - - - - x - 4537 - - - - - x - 4538 - - - - - x - 4539 - - - - - x - 4540 - - - - - x - 4541 - - - - - x - 4542 - - - - - x - 4543 - - - - - x - 4544 - - - - - x - 4545 - - - - - x - 4546 - - - - - x - 4547 - - - - - x - 4548 - - - - - x - 4549 - - - - - x - 4550 - - - - - x - 4551 - - - - - x - 4552 - - - - - x - 4553 - - - - - x - 4554 - - - - - x - 4555 - - - - - x - 4556 - - - - - x - 4557 - - - - - x - 4558 - - - - - x - 4559 - - - - - x - 4560 - - - - - x - 4561 - - - - - x - 4562 - - - - - x - 4563 - - - - - x - 4564 - - - - - x - 4565 - - - - - x - 4566 - - - - - x - 4567 - - - - - x - 4568 - - - - - x - 4569 - - - - - x - 4570 - - - - - x - 4571 - - - - - x - 4572 - - - - - x - 4573 - - - - - x - 4574 - - - - - x - 4575 - - - - - x - 4576 - - - - - x - 4577 - - - - - x - 4578 - - - - - x - 4579 - - - - - x - 4580 - - - - - x - 4581 - - - - - x - 4582 - - - - - x - 4583 - - - - - x - 4584 - - - - - x - 4585 - - - - - x - 4586 - - - - - x - 4587 - - - - - x - 4588 - - - - - x - 4589 - - - - - x - 4590 - - - - - x - 4591 - - - - - x - 4592 - - - - - x - 4593 - - - - - x - 4594 - - - - - x - 4595 - - - - - x - 4596 - - - - - x - 4597 - - - - - x - 4598 - - - - - x - 4599 - - - - - x - 4600 - - - - - x - 4601 - - - - - x - 4602 - - - - - x - 4603 - - - - - x - 4604 - - - - - x - 4605 - - - - - x - 4606 - - - - - x - 4607 - - - - - x - 4608 - - - - - x - 4609 - - - - - x - 4610 - - - - - x - 4611 - - - - - x - 4612 - - - - - x - 4613 - - - - - x - 4614 - - - - - x - 4615 - - - - - x - 4616 - - - - - x - 4617 - - - - - x - 4618 - - - - - x - 4619 - - - - - x - 4620 - - - - - x - 4621 - - - - - x - 4622 - - - - - x - 4623 - - - - - x - 4624 - - - - - x - 4625 - - - - - x - 4626 - - - - - x - 4627 - - - - - x - 4628 - - - - - x - 4629 - - - - - x - 4630 - - - - - x - 4631 - - - - - x - 4632 - - - - - x - 4633 - - - - - x - 4634 - - - - - x - 4635 - - - - - x - 4636 - - - - - x - 4637 - - - - - x - 4638 - - - - - x - 4639 - - - - - x - 4640 - - - - - x - 4641 - - - - - x - 4642 - - - - - x - 4643 - - - - - x - 4644 - - - - - x - 4645 - - - - - x - 4646 - - - - - x - 4647 - - - - - x - 4648 - - - - - x - 4649 - - - - - x - 4650 - - - - - x - 4651 - - - - - x - 4652 - - - - - x - 4653 - - - - - x - 4654 - - - - - x - 4655 - - - - - x - 4656 - - - - - x - 4657 - - - - - x - 4658 - - - - - x - 4659 - - - - - x - 4660 - - - - - x - 4661 - - - - - x - 4662 - - - - - x - 4663 - - - - - x - 4664 - - - - - x - 4665 - - - - - x - 4666 - - - - - x - 4667 - - - - - x - 4668 - - - - - x - 4669 - - - - - x - 4670 - - - - - x - 4671 - - - - - x - 4672 - - - - - x - 4673 - - - - - x - 4674 - - - - - x - 4675 - - - - - x - 4676 - - - - - x - 4677 - - - - - x - 4678 - - - - - x - 4679 - - - - - x - 4680 - - - - - x - 4681 - - - - - x - 4682 - - - - - x - 4683 - - - - - x - 4684 - - - - - x - 4685 - - - - - x - 4686 - - - - - x - 4687 - - - - - x - 4688 - - - - - x - 4689 - - - - - x - 4690 - - - - - x - 4691 - - - - - x - 4692 - - - - - x - 4693 - - - - - x - 4694 - - - - - x - 4695 - - - - - x - 4696 - - - - - x - 4697 - - - - - x - 4698 - - - - - x - 4699 - - - - - x - 4700 - - - - - x - 4701 - - - - - x - 4702 - - - - - x - 4703 - - - - - x - 4704 - - - - - x - 4705 - - - - - x - 4706 - - - - - x - 4707 - - - - - x - 4708 - - - - - x - 4709 - - - - - x - 4710 - - - - - x - 4711 - - - - - x - 4712 - - - - - x - 4713 - - - - - x - 4714 - - - - - x - 4715 - - - - - x - 4716 - - - - - x - 4717 - - - - - x - 4718 - - - - - x - 4719 - - - - - x - 4720 - - - - - x - 4721 - - - - - x - 4722 - - - - - x - 4723 - - - - - x - 4724 - - - - - x - 4725 - - - - - x - 4726 - - - - - x - 4727 - - - - - x - 4728 - - - - - x - 4729 - - - - - x - 4730 - - - - - x - 4731 - - - - - x - 4732 - - - - - x - 4733 - - - - - x - 4734 - - - - - x - 4735 - - - - - x - 4736 - - - - - x - 4737 - - - - - x - 4738 - - - - - x - 4739 - - - - - x - 4740 - - - - - x - 4741 - - - - - x - 4742 - - - - - x - 4743 - - - - - x - 4744 - - - - - x - 4745 - - - - - x - 4746 - - - - - x - 4747 - - - - - x - 4748 - - - - - x - 4749 - - - - - x - 4750 - - - - - x - 4751 - - - - - x - 4752 - - - - - x - 4753 - - - - - x - 4754 - - - - - x - 4755 - - - - - x - 4756 - - - - - x - 4757 - - - - - x - 4758 - - - - - x - 4759 - - - - - x - 4760 - - - - - x - 4761 - - - - - x - 4762 - - - - - x - 4763 - - - - - x - 4764 - - - - - x - 4765 - - - - - x - 4766 - - - - - x - 4767 - - - - - x - 4768 - - - - - x - 4769 - - - - - x - 4770 - - - - - x - 4771 - - - - - x - 4772 - - - - - x - 4773 - - - - - x - 4774 - - - - - x - 4775 - - - - - x - 4776 - - - - - x - 4777 - - - - - x - 4778 - - - - - x - 4779 - - - - - x - 4780 - - - - - x - 4781 - - - - - x - 4782 - - - - - x - 4783 - - - - - x - 4784 - - - - - x - 4785 - - - - - x - 4786 - - - - - x - 4787 - - - - - x - 4788 - - - - - x - 4789 - - - - - x - 4790 - - - - - x - 4791 - - - - - x - 4792 - - - - - x - 4793 - - - - - x - 4794 - - - - - x - 4795 - - - - - x - 4796 - - - - - x - 4797 - - - - - x - 4798 - - - - - x - 4799 - - - - - x - 4800 - - - - - x - 4801 - - - - - x - 4802 - - - - - x - 4803 - - - - - x - 4804 - - - - - x - 4805 - - - - - x - 4806 - - - - - x - 4807 - - - - - x - 4808 - - - - - x - 4809 - - - - - x - 4810 - - - - - x - 4811 - - - - - x - 4812 - - - - - x - 4813 - - - - - x - 4814 - - - - - x - 4815 - - - - - x - 4816 - - - - - x - 4817 - - - - - x - 4818 - - - - - x - 4819 - - - - - x - 4820 - - - - - x - 4821 - - - - - x - 4822 - - - - - x - 4823 - - - - - x - 4824 - - - - - x - 4825 - - - - - x - 4826 - - - - - x - 4827 - - - - - x - 4828 - - - - - x - 4829 - - - - - x - 4830 - - - - - x - 4831 - - - - - x - 4832 - - - - - x - 4833 - - - - - x - 4834 - - - - - x - 4835 - - - - - x - 4836 - - - - - x - 4837 - - - - - x - 4838 - - - - - x - 4839 - - - - - x - 4840 - - - - - x - 4841 - - - - - x - 4842 - - - - - x - 4843 - - - - - x - 4844 - - - - - x - 4845 - - - - - x - 4846 - - - - - x - 4847 - - - - - x - 4848 - - - - - x - 4849 - - - - - x - 4850 - - - - - x - 4851 - - - - - x - 4852 - - - - - x - 4853 - - - - - x - 4854 - - - - - x - 4855 - - - - - x - 4856 - - - - - x - 4857 - - - - - x - 4858 - - - - - x - 4859 - - - - - x - 4860 - - - - - x - 4861 - - - - - x - 4862 - - - - - x - 4863 - - - - - x - 4864 - - - - - x - 4865 - - - - - x - 4866 - - - - - x - 4867 - - - - - x - 4868 - - - - - x - 4869 - - - - - x - 4870 - - - - - x - 4871 - - - - - x - 4872 - - - - - x - 4873 - - - - - x - 4874 - - - - - x - 4875 - - - - - x - 4876 - - - - - x - 4877 - - - - - x - 4878 - - - - - x - 4879 - - - - - x - 4880 - - - - - x - 4881 - - - - - x - 4882 - - - - - x - 4883 - - - - - x - 4884 - - - - - x - 4885 - - - - - x - 4886 - - - - - x - 4887 - - - - - x - 4888 - - - - - x - 4889 - - - - - x - 4890 - - - - - x - 4891 - - - - - x - 4892 - - - - - x - 4893 - - - - - x - 4894 - - - - - x - 4895 - - - - - x - 4896 - - - - - x - 4897 - - - - - x - 4898 - - - - - x - 4899 - - - - - x - 4900 - - - - - x - 4901 - - - - - x - 4902 - - - - - x - 4903 - - - - - x - 4904 - - - - - x - 4905 - - - - - x - 4906 - - - - - x - 4907 - - - - - x - 4908 - - - - - x - 4909 - - - - - x - 4910 - - - - - x - 4911 - - - - - x - 4912 - - - - - x - 4913 - - - - - x - 4914 - - - - - x - 4915 - - - - - x - 4916 - - - - - x - 4917 - - - - - x - 4918 - - - - - x - 4919 - - - - - x - 4920 - - - - - x - 4921 - - - - - x - 4922 - - - - - x - 4923 - - - - - x - 4924 - - - - - x - 4925 - - - - - x - 4926 - - - - - x - 4927 - - - - - x - 4928 - - - - - x - 4929 - - - - - x - 4930 - - - - - x - 4931 - - - - - x - 4932 - - - - - x - 4933 - - - - - x - 4934 - - - - - x - 4935 - - - - - x - 4936 - - - - - x - 4937 - - - - - x - 4938 - - - - - x - 4939 - - - - - x - 4940 - - - - - x - 4941 - - - - - x - 4942 - - - - - x - 4943 - - - - - x - 4944 - - - - - x - 4945 - - - - - x - 4946 - - - - - x - 4947 - - - - - x - 4948 - - - - - x - 4949 - - - - - x - 4950 - - - - - x - 4951 - - - - - x - 4952 - - - - - x - 4953 - - - - - x - 4954 - - - - - x - 4955 - - - - - x - 4956 - - - - - x - 4957 - - - - - x - 4958 - - - - - x - 4959 - - - - - x - 4960 - - - - - x - 4961 - - - - - x - 4962 - - - - - x - 4963 - - - - - x - 4964 - - - - - x - 4965 - - - - - x - 4966 - - - - - x - 4967 - - - - - x - 4968 - - - - - x - 4969 - - - - - x - 4970 - - - - - x - 4971 - - - - - x - 4972 - - - - - x - 4973 - - - - - x - 4974 - - - - - x - 4975 - - - - - x - 4976 - - - - - x - 4977 - - - - - x - 4978 - - - - - x - 4979 - - - - - x - 4980 - - - - - x - 4981 - - - - - x - 4982 - - - - - x - 4983 - - - - - x - 4984 - - - - - x - 4985 - - - - - x - 4986 - - - - - x - 4987 - - - - - x - 4988 - - - - - x - 4989 - - - - - x - 4990 - - - - - x - 4991 - - - - - x - 4992 - - - - - x - 4993 - - - - - x - 4994 - - - - - x - 4995 - - - - - x - 4996 - - - - - x - 4997 - - - - - x - 4998 - - - - - x - 4999 - - - - - x - 5000 - - - - - x - 5001 - - - - - x - 5002 - - - - - x - 5003 - - - - - x - 5004 - - - - - x - 5005 - - - - - x - 5006 - - - - - x - 5007 - - - - - x - 5008 - - - - - x - 5009 - - - - - x - 5010 - - - - - x - 5011 - - - - - x - 5012 - - - - - x - 5013 - - - - - x - 5014 - - - - - x - 5015 - - - - - x - 5016 - - - - - x - 5017 - - - - - x - 5018 - - - - - x - 5019 - - - - - x - 5020 - - - - - x - 5021 - - - - - x - 5022 - - - - - x - 5023 - - - - - x - 5024 - - - - - x - 5025 - - - - - x - 5026 - - - - - x - 5027 - - - - - x - 5028 - - - - - x - 5029 - - - - - x - 5030 - - - - - x - 5031 - - - - - x - 5032 - - - - - x - 5033 - - - - - x - 5034 - - - - - x - 5035 - - - - - x - 5036 - - - - - x - 5037 - - - - - x - 5038 - - - - - x - 5039 - - - - - x - 5040 - - - - - x - 5041 - - - - - x - 5042 - - - - - x - 5043 - - - - - x - 5044 - - - - - x - 5045 - - - - - x - 5046 - - - - - x - 5047 - - - - - x - 5048 - - - - - x - 5049 - - - - - x - 5050 - - - - - x - 5051 - - - - - x - 5052 - - - - - x - 5053 - - - - - x - 5054 - - - - - x - 5055 - - - - - x - 5056 - - - - - x - 5057 - - - - - x - 5058 - - - - - x - 5059 - - - - - x - 5060 - - - - - x - 5061 - - - - - x - 5062 - - - - - x - 5063 - - - - - x - 5064 - - - - - x - 5065 - - - - - x - 5066 - - - - - x - 5067 - - - - - x - 5068 - - - - - x - 5069 - - - - - x - 5070 - - - - - x - 5071 - - - - - x - 5072 - - - - - x - 5073 - - - - - x - 5074 - - - - - x - 5075 - - - - - x - 5076 - - - - - x - 5077 - - - - - x - 5078 - - - - - x - 5079 - - - - - x - 5080 - - - - - x - 5081 - - - - - x - 5082 - - - - - x - 5083 - - - - - x - 5084 - - - - - x - 5085 - - - - - x - 5086 - - - - - x - 5087 - - - - - x - 5088 - - - - - x - 5089 - - - - - x - 5090 - - - - - x - 5091 - - - - - x - 5092 - - - - - x - 5093 - - - - - x - 5094 - - - - - x - 5095 - - - - - x - 5096 - - - - - x - 5097 - - - - - x - 5098 - - - - - x - 5099 - - - - - x - 5100 - - - - - x - 5101 - - - - - x - 5102 - - - - - x - 5103 - - - - - x - 5104 - - - - - x - 5105 - - - - - x - 5106 - - - - - x - 5107 - - - - - x - 5108 - - - - - x - 5109 - - - - - x - 5110 - - - - - x - 5111 - - - - - x - 5112 - - - - - x - 5113 - - - - - x - 5114 - - - - - x - 5115 - - - - - x - 5116 - - - - - x - 5117 - - - - - x - 5118 - - - - - x - 5119 - - - - - x - 5120 - - - - - x - 5121 - - - - - x - 5122 - - - - - x - 5123 - - - - - x - 5124 - - - - - x - 5125 - - - - - x - 5126 - - - - - x - 5127 - - - - - x - 5128 - - - - - x - 5129 - - - - - x - 5130 - - - - - x - 5131 - - - - - x - 5132 - - - - - x - 5133 - - - - - x - 5134 - - - - - x - 5135 - - - - - x - 5136 - - - - - x - 5137 - - - - - x - 5138 - - - - - x - 5139 - - - - - x - 5140 - - - - - x - 5141 - - - - - x - 5142 - - - - - x - 5143 - - - - - x - 5144 - - - - - x - 5145 - - - - - x - 5146 - - - - - x - 5147 - - - - - x - 5148 - - - - - x - 5149 - - - - - x - 5150 - - - - - x - 5151 - - - - - x - 5152 - - - - - x - 5153 - - - - - x - 5154 - - - - - x - 5155 - - - - - x - 5156 - - - - - x - 5157 - - - - - x - 5158 - - - - - x - 5159 - - - - - x - 5160 - - - - - x - 5161 - - - - - x - 5162 - - - - - x - 5163 - - - - - x - 5164 - - - - - x - 5165 - - - - - x - 5166 - - - - - x - 5167 - - - - - x - 5168 - - - - - x - 5169 - - - - - x - 5170 - - - - - x - 5171 - - - - - x - 5172 - - - - - x - 5173 - - - - - x - 5174 - - - - - x - 5175 - - - - - x - 5176 - - - - - x - 5177 - - - - - x - 5178 - - - - - x - 5179 - - - - - x - 5180 - - - - - x - 5181 - - - - - x - 5182 - - - - - x - 5183 - - - - - x - 5184 - - - - - x - 5185 - - - - - x - 5186 - - - - - x - 5187 - - - - - x - 5188 - - - - - x - 5189 - - - - - x - 5190 - - - - - x - 5191 - - - - - x - 5192 - - - - - x - 5193 - - - - - x - 5194 - - - - - x - 5195 - - - - - x - 5196 - - - - - x - 5197 - - - - - x - 5198 - - - - - x - 5199 - - - - - x - 5200 - - - - - x - 5201 - - - - - x - 5202 - - - - - x - 5203 - - - - - x - 5204 - - - - - x - 5205 - - - - - x - 5206 - - - - - x - 5207 - - - - - x - 5208 - - - - - x - 5209 - - - - - x - 5210 - - - - - x - 5211 - - - - - x - 5212 - - - - - x - 5213 - - - - - x - 5214 - - - - - x - 5215 - - - - - x - 5216 - - - - - x - 5217 - - - - - x - 5218 - - - - - x - 5219 - - - - - x - 5220 - - - - - x - 5221 - - - - - x - 5222 - - - - - x - 5223 - - - - - x - 5224 - - - - - x - 5225 - - - - - x - 5226 - - - - - x - 5227 - - - - - x - 5228 - - - - - x - 5229 - - - - - x - 5230 - - - - - x - 5231 - - - - - x - 5232 - - - - - x - 5233 - - - - - x - 5234 - - - - - x - 5235 - - - - - x - 5236 - - - - - x - 5237 - - - - - x - 5238 - - - - - x - 5239 - - - - - x - 5240 - - - - - x - 5241 - - - - - x - 5242 - - - - - x - 5243 - - - - - x - 5244 - - - - - x - 5245 - - - - - x - 5246 - - - - - x - 5247 - - - - - x - 5248 - - - - - x - 5249 - - - - - x - 5250 - - - - - x - 5251 - - - - - x - 5252 - - - - - x - 5253 - - - - - x - 5254 - - - - - x - 5255 - - - - - x - 5256 - - - - - x - 5257 - - - - - x - 5258 - - - - - x - 5259 - - - - - x - 5260 - - - - - x - 5261 - - - - - x - 5262 - - - - - x - 5263 - - - - - x - 5264 - - - - - x - 5265 - - - - - x - 5266 - - - - - x - 5267 - - - - - x - 5268 - - - - - x - 5269 - - - - - x - 5270 - - - - - x - 5271 - - - - - x - 5272 - - - - - x - 5273 - - - - - x - 5274 - - - - - x - 5275 - - - - - x - 5276 - - - - - x - 5277 - - - - - x - 5278 - - - - - x - 5279 - - - - - x - 5280 - - - - - x - 5281 - - - - - x - 5282 - - - - - x - 5283 - - - - - x - 5284 - - - - - x - 5285 - - - - - x - 5286 - - - - - x - 5287 - - - - - x - 5288 - - - - - x - 5289 - - - - - x - 5290 - - - - - x - 5291 - - - - - x - 5292 - - - - - x - 5293 - - - - - x - 5294 - - - - - x - 5295 - - - - - x - 5296 - - - - - x - 5297 - - - - - x - 5298 - - - - - x - 5299 - - - - - x - 5300 - - - - - x - 5301 - - - - - x - 5302 - - - - - x - 5303 - - - - - x - 5304 - - - - - x - 5305 - - - - - x - 5306 - - - - - x - 5307 - - - - - x - 5308 - - - - - x - 5309 - - - - - x - 5310 - - - - - x - 5311 - - - - - x - 5312 - - - - - x - 5313 - - - - - x - 5314 - - - - - x - 5315 - - - - - x - 5316 - - - - - x - 5317 - - - - - x - 5318 - - - - - x - 5319 - - - - - x - 5320 - - - - - x - 5321 - - - - - x - 5322 - - - - - x - 5323 - - - - - x - 5324 - - - - - x - 5325 - - - - - x - 5326 - - - - - x - 5327 - - - - - x - 5328 - - - - - x - 5329 - - - - - x - 5330 - - - - - x - 5331 - - - - - x - 5332 - - - - - x - 5333 - - - - - x - 5334 - - - - - x - 5335 - - - - - x - 5336 - - - - - x - 5337 - - - - - x - 5338 - - - - - x - 5339 - - - - - x - 5340 - - - - - x - 5341 - - - - - x - 5342 - - - - - x - 5343 - - - - - x - 5344 - - - - - x - 5345 - - - - - x - 5346 - - - - - x - 5347 - - - - - x - 5348 - - - - - x - 5349 - - - - - x - 5350 - - - - - x - 5351 - - - - - x - 5352 - - - - - x - 5353 - - - - - x - 5354 - - - - - x - 5355 - - - - - x - 5356 - - - - - x - 5357 - - - - - x - 5358 - - - - - x - 5359 - - - - - x - 5360 - - - - - x - 5361 - - - - - x - 5362 - - - - - x - 5363 - - - - - x - 5364 - - - - - x - 5365 - - - - - x - 5366 - - - - - x - 5367 - - - - - x - 5368 - - - - - x - 5369 - - - - - x - 5370 - - - - - x - 5371 - - - - - x - 5372 - - - - - x - 5373 - - - - - x - 5374 - - - - - x - 5375 - - - - - x - 5376 - - - - - x - 5377 - - - - - x - 5378 - - - - - x - 5379 - - - - - x - 5380 - - - - - x - 5381 - - - - - x - 5382 - - - - - x - 5383 - - - - - x - 5384 - - - - - x - 5385 - - - - - x - 5386 - - - - - x - 5387 - - - - - x - 5388 - - - - - x - 5389 - - - - - x - 5390 - - - - - x - 5391 - - - - - x - 5392 - - - - - x - 5393 - - - - - x - 5394 - - - - - x - 5395 - - - - - x - 5396 - - - - - x - 5397 - - - - - x - 5398 - - - - - x - 5399 - - - - - x - 5400 - - - - - x - 5401 - - - - - x - 5402 - - - - - x - 5403 - - - - - x - 5404 - - - - - x - 5405 - - - - - x - 5406 - - - - - x - 5407 - - - - - x - 5408 - - - - - x - 5409 - - - - - x - 5410 - - - - - x - 5411 - - - - - x - 5412 - - - - - x - 5413 - - - - - x - 5414 - - - - - x - 5415 - - - - - x - 5416 - - - - - x - 5417 - - - - - x - 5418 - - - - - x - 5419 - - - - - x - 5420 - - - - - x - 5421 - - - - - x - 5422 - - - - - x - 5423 - - - - - x - 5424 - - - - - x - 5425 - - - - - x - 5426 - - - - - x - 5427 - - - - - x - 5428 - - - - - x - 5429 - - - - - x - 5430 - - - - - x - 5431 - - - - - x - 5432 - - - - - x - 5433 - - - - - x - 5434 - - - - - x - 5435 - - - - - x - 5436 - - - - - x - 5437 - - - - - x - 5438 - - - - - x - 5439 - - - - - x - 5440 - - - - - x - 5441 - - - - - x - 5442 - - - - - x - 5443 - - - - - x - 5444 - - - - - x - 5445 - - - - - x - 5446 - - - - - x - 5447 - - - - - x - 5448 - - - - - x - 5449 - - - - - x - 5450 - - - - - x - 5451 - - - - - x - 5452 - - - - - x - 5453 - - - - - x - 5454 - - - - - x - 5455 - - - - - x - 5456 - - - - - x - 5457 - - - - - x - 5458 - - - - - x - 5459 - - - - - x - 5460 - - - - - x - 5461 - - - - - x - 5462 - - - - - x - 5463 - - - - - x - 5464 - - - - - x - 5465 - - - - - x - 5466 - - - - - x - 5467 - - - - - x - 5468 - - - - - x - 5469 - - - - - x - 5470 - - - - - x - 5471 - - - - - x - 5472 - - - - - x - 5473 - - - - - x - 5474 - - - - - x - 5475 - - - - - x - 5476 - - - - - x - 5477 - - - - - x - 5478 - - - - - x - 5479 - - - - - x - 5480 - - - - - x - 5481 - - - - - x - 5482 - - - - - x - 5483 - - - - - x - 5484 - - - - - x - 5485 - - - - - x - 5486 - - - - - x - 5487 - - - - - x - 5488 - - - - - x - 5489 - - - - - x - 5490 - - - - - x - 5491 - - - - - x - 5492 - - - - - x - 5493 - - - - - x - 5494 - - - - - x - 5495 - - - - - x - 5496 - - - - - x - 5497 - - - - - x - 5498 - - - - - x - 5499 - - - - - x - 5500 - - - - - x - 5501 - - - - - x - 5502 - - - - - x - 5503 - - - - - x - 5504 - - - - - x - 5505 - - - - - x - 5506 - - - - - x - 5507 - - - - - x - 5508 - - - - - x - 5509 - - - - - x - 5510 - - - - - x - 5511 - - - - - x - 5512 - - - - - x - 5513 - - - - - x - 5514 - - - - - x - 5515 - - - - - x - 5516 - - - - - x - 5517 - - - - - x - 5518 - - - - - x - 5519 - - - - - x - 5520 - - - - - x - 5521 - - - - - x - 5522 - - - - - x - 5523 - - - - - x - 5524 - - - - - x - 5525 - - - - - x - 5526 - - - - - x - 5527 - - - - - x - 5528 - - - - - x - 5529 - - - - - x - 5530 - - - - - x - 5531 - - - - - x - 5532 - - - - - x - 5533 - - - - - x - 5534 - - - - - x - 5535 - - - - - x - 5536 - - - - - x - 5537 - - - - - x - 5538 - - - - - x - 5539 - - - - - x - 5540 - - - - - x - 5541 - - - - - x - 5542 - - - - - x - 5543 - - - - - x - 5544 - - - - - x - 5545 - - - - - x - 5546 - - - - - x - 5547 - - - - - x - 5548 - - - - - x - 5549 - - - - - x - 5550 - - - - - x - 5551 - - - - - x - 5552 - - - - - x - 5553 - - - - - x - 5554 - - - - - x - 5555 - - - - - x - 5556 - - - - - x - 5557 - - - - - x - 5558 - - - - - x - 5559 - - - - - x - 5560 - - - - - x - 5561 - - - - - x - 5562 - - - - - x - 5563 - - - - - x - 5564 - - - - - x - 5565 - - - - - x - 5566 - - - - - x - 5567 - - - - - x - 5568 - - - - - x - 5569 - - - - - x - 5570 - - - - - x - 5571 - - - - - x - 5572 - - - - - x - 5573 - - - - - x - 5574 - - - - - x - 5575 - - - - - x - 5576 - - - - - x - 5577 - - - - - x - 5578 - - - - - x - 5579 - - - - - x - 5580 - - - - - x - 5581 - - - - - x - 5582 - - - - - x - 5583 - - - - - x - 5584 - - - - - x - 5585 - - - - - x - 5586 - - - - - x - 5587 - - - - - x - 5588 - - - - - x - 5589 - - - - - x - 5590 - - - - - x - 5591 - - - - - x - 5592 - - - - - x - 5593 - - - - - x - 5594 - - - - - x - 5595 - - - - - x - 5596 - - - - - x - 5597 - - - - - x - 5598 - - - - - x - 5599 - - - - - x - 5600 - - - - - x - 5601 - - - - - x - 5602 - - - - - x - 5603 - - - - - x - 5604 - - - - - x - 5605 - - - - - x - 5606 - - - - - x - 5607 - - - - - x - 5608 - - - - - x - 5609 - - - - - x - 5610 - - - - - x - 5611 - - - - - x - 5612 - - - - - x - 5613 - - - - - x - 5614 - - - - - x - 5615 - - - - - x - 5616 - - - - - x - 5617 - - - - - x - 5618 - - - - - x - 5619 - - - - - x - 5620 - - - - - x - 5621 - - - - - x - 5622 - - - - - x - 5623 - - - - - x - 5624 - - - - - x - 5625 - - - - - x - 5626 - - - - - x - 5627 - - - - - x - 5628 - - - - - x - 5629 - - - - - x - 5630 - - - - - x - 5631 - - - - - x - 5632 - - - - - x - 5633 - - - - - x - 5634 - - - - - x - 5635 - - - - - x - 5636 - - - - - x - 5637 - - - - - x - 5638 - - - - - x - 5639 - - - - - x - 5640 - - - - - x - 5641 - - - - - x - 5642 - - - - - x - 5643 - - - - - x - 5644 - - - - - x - 5645 - - - - - x - 5646 - - - - - x - 5647 - - - - - x - 5648 - - - - - x - 5649 - - - - - x - 5650 - - - - - x - 5651 - - - - - x - 5652 - - - - - x - 5653 - - - - - x - 5654 - - - - - x - 5655 - - - - - x - 5656 - - - - - x - 5657 - - - - - x - 5658 - - - - - x - 5659 - - - - - x - 5660 - - - - - x - 5661 - - - - - x - 5662 - - - - - x - 5663 - - - - - x - 5664 - - - - - x - 5665 - - - - - x - 5666 - - - - - x - 5667 - - - - - x - 5668 - - - - - x - 5669 - - - - - x - 5670 - - - - - x - 5671 - - - - - x - 5672 - - - - - x - 5673 - - - - - x - 5674 - - - - - x - 5675 - - - - - x - 5676 - - - - - x - 5677 - - - - - x - 5678 - - - - - x - 5679 - - - - - x - 5680 - - - - - x - 5681 - - - - - x - 5682 - - - - - x - 5683 - - - - - x - 5684 - - - - - x - 5685 - - - - - x - 5686 - - - - - x - 5687 - - - - - x - 5688 - - - - - x - 5689 - - - - - x - 5690 - - - - - x - 5691 - - - - - x - 5692 - - - - - x - 5693 - - - - - x - 5694 - - - - - x - 5695 - - - - - x - 5696 - - - - - x - 5697 - - - - - x - 5698 - - - - - x - 5699 - - - - - x - 5700 - - - - - x - 5701 - - - - - x - 5702 - - - - - x - 5703 - - - - - x - 5704 - - - - - x - 5705 - - - - - x - 5706 - - - - - x - 5707 - - - - - x - 5708 - - - - - x - 5709 - - - - - x - 5710 - - - - - x - 5711 - - - - - x - 5712 - - - - - x - 5713 - - - - - x - 5714 - - - - - x - 5715 - - - - - x - 5716 - - - - - x - 5717 - - - - - x - 5718 - - - - - x - 5719 - - - - - x - 5720 - - - - - x - 5721 - - - - - x - 5722 - - - - - x - 5723 - - - - - x - 5724 - - - - - x - 5725 - - - - - x - 5726 - - - - - x - 5727 - - - - - x - 5728 - - - - - x - 5729 - - - - - x - 5730 - - - - - x - 5731 - - - - - x - 5732 - - - - - x - 5733 - - - - - x - 5734 - - - - - x - 5735 - - - - - x - 5736 - - - - - x - 5737 - - - - - x - 5738 - - - - - x - 5739 - - - - - x - 5740 - - - - - x - 5741 - - - - - x - 5742 - - - - - x - 5743 - - - - - x - 5744 - - - - - x - 5745 - - - - - x - 5746 - - - - - x - 5747 - - - - - x - 5748 - - - - - x - 5749 - - - - - x - 5750 - - - - - x - 5751 - - - - - x - 5752 - - - - - x - 5753 - - - - - x - 5754 - - - - - x - 5755 - - - - - x - 5756 - - - - - x - 5757 - - - - - x - 5758 - - - - - x - 5759 - - - - - x - 5760 - - - - - x - 5761 - - - - - x - 5762 - - - - - x - 5763 - - - - - x - 5764 - - - - - x - 5765 - - - - - x - 5766 - - - - - x - 5767 - - - - - x - 5768 - - - - - x - 5769 - - - - - x - 5770 - - - - - x - 5771 - - - - - x - 5772 - - - - - x - 5773 - - - - - x - 5774 - - - - - x - 5775 - - - - - x - 5776 - - - - - x - 5777 - - - - - x - 5778 - - - - - x - 5779 - - - - - x - 5780 - - - - - x - 5781 - - - - - x - 5782 - - - - - x - 5783 - - - - - x - 5784 - - - - - x - 5785 - - - - - x - 5786 - - - - - x - 5787 - - - - - x - 5788 - - - - - x - 5789 - - - - - x - 5790 - - - - - x - 5791 - - - - - x - 5792 - - - - - x - 5793 - - - - - x - 5794 - - - - - x - 5795 - - - - - x - 5796 - - - - - x - 5797 - - - - - x - 5798 - - - - - x - 5799 - - - - - x - 5800 - - - - - x - 5801 - - - - - x - 5802 - - - - - x - 5803 - - - - - x - 5804 - - - - - x - 5805 - - - - - x - 5806 - - - - - x - 5807 - - - - - x - 5808 - - - - - x - 5809 - - - - - x - 5810 - - - - - x - 5811 - - - - - x - 5812 - - - - - x - 5813 - - - - - x - 5814 - - - - - x - 5815 - - - - - x - 5816 - - - - - x - 5817 - - - - - x - 5818 - - - - - x - 5819 - - - - - x - 5820 - - - - - x - 5821 - - - - - x - 5822 - - - - - x - 5823 - - - - - x - 5824 - - - - - x - 5825 - - - - - x - 5826 - - - - - x - 5827 - - - - - x - 5828 - - - - - x - 5829 - - - - - x - 5830 - - - - - x - 5831 - - - - - x - 5832 - - - - - x - 5833 - - - - - x - 5834 - - - - - x - 5835 - - - - - x - 5836 - - - - - x - 5837 - - - - - x - 5838 - - - - - x - 5839 - - - - - x - 5840 - - - - - x - 5841 - - - - - x - 5842 - - - - - x - 5843 - - - - - x - 5844 - - - - - x - 5845 - - - - - x - 5846 - - - - - x - 5847 - - - - - x - 5848 - - - - - x - 5849 - - - - - x - 5850 - - - - - x - 5851 - - - - - x - 5852 - - - - - x - 5853 - - - - - x - 5854 - - - - - x - 5855 - - - - - x - 5856 - - - - - x - 5857 - - - - - x - 5858 - - - - - x - 5859 - - - - - x - 5860 - - - - - x - 5861 - - - - - x - 5862 - - - - - x - 5863 - - - - - x - 5864 - - - - - x - 5865 - - - - - x - 5866 - - - - - x - 5867 - - - - - x - 5868 - - - - - x - 5869 - - - - - x - 5870 - - - - - x - 5871 - - - - - x - 5872 - - - - - x - 5873 - - - - - x - 5874 - - - - - x - 5875 - - - - - x - 5876 - - - - - x - 5877 - - - - - x - 5878 - - - - - x - 5879 - - - - - x - 5880 - - - - - x - 5881 - - - - - x - 5882 - - - - - x - 5883 - - - - - x - 5884 - - - - - x - 5885 - - - - - x - 5886 - - - - - x - 5887 - - - - - x - 5888 - - - - - x - 5889 - - - - - x - 5890 - - - - - x - 5891 - - - - - x - 5892 - - - - - x - 5893 - - - - - x - 5894 - - - - - x - 5895 - - - - - x - 5896 - - - - - x - 5897 - - - - - x - 5898 - - - - - x - 5899 - - - - - x - 5900 - - - - - x - 5901 - - - - - x - 5902 - - - - - x - 5903 - - - - - x - 5904 - - - - - x - 5905 - - - - - x - 5906 - - - - - x - 5907 - - - - - x - 5908 - - - - - x - 5909 - - - - - x - 5910 - - - - - x - 5911 - - - - - x - 5912 - - - - - x - 5913 - - - - - x - 5914 - - - - - x - 5915 - - - - - x - 5916 - - - - - x - 5917 - - - - - x - 5918 - - - - - x - 5919 - - - - - x - 5920 - - - - - x - 5921 - - - - - x - 5922 - - - - - x - 5923 - - - - - x - 5924 - - - - - x - 5925 - - - - - x - 5926 - - - - - x - 5927 - - - - - x - 5928 - - - - - x - 5929 - - - - - x - 5930 - - - - - x - 5931 - - - - - x - 5932 - - - - - x - 5933 - - - - - x - 5934 - - - - - x - 5935 - - - - - x - 5936 - - - - - x - 5937 - - - - - x - 5938 - - - - - x - 5939 - - - - - x - 5940 - - - - - x - 5941 - - - - - x - 5942 - - - - - x - 5943 - - - - - x - 5944 - - - - - x - 5945 - - - - - x - 5946 - - - - - x - 5947 - - - - - x - 5948 - - - - - x - 5949 - - - - - x - 5950 - - - - - x - 5951 - - - - - x - 5952 - - - - - x - 5953 - - - - - x - 5954 - - - - - x - 5955 - - - - - x - 5956 - - - - - x - 5957 - - - - - x - 5958 - - - - - x - 5959 - - - - - x - 5960 - - - - - x - 5961 - - - - - x - 5962 - - - - - x - 5963 - - - - - x - 5964 - - - - - x - 5965 - - - - - x - 5966 - - - - - x - 5967 - - - - - x - 5968 - - - - - x - 5969 - - - - - x - 5970 - - - - - x - 5971 - - - - - x - 5972 - - - - - x - 5973 - - - - - x - 5974 - - - - - x - 5975 - - - - - x - 5976 - - - - - x - 5977 - - - - - x - 5978 - - - - - x - 5979 - - - - - x - 5980 - - - - - x - 5981 - - - - - x - 5982 - - - - - x - 5983 - - - - - x - 5984 - - - - - x - 5985 - - - - - x - 5986 - - - - - x - 5987 - - - - - x - 5988 - - - - - x - 5989 - - - - - x - 5990 - - - - - x - 5991 - - - - - x - 5992 - - - - - x - 5993 - - - - - x - 5994 - - - - - x - 5995 - - - - - x - 5996 - - - - - x - 5997 - - - - - x - 5998 - - - - - x - 5999 - - - - - x - 6000 - - - - - x - 6001 - - - - - x - 6002 - - - - - x - 6003 - - - - - x - 6004 - - - - - x - 6005 - - - - - x - 6006 - - - - - x - 6007 - - - - - x - 6008 - - - - - x - 6009 - - - - - x - 6010 - - - - - x - 6011 - - - - - x - 6012 - - - - - x - 6013 - - - - - x - 6014 - - - - - x - 6015 - - - - - x - 6016 - - - - - x - 6017 - - - - - x - 6018 - - - - - x - 6019 - - - - - x - 6020 - - - - - x - 6021 - - - - - x - 6022 - - - - - x - 6023 - - - - - x - 6024 - - - - - x - 6025 - - - - - x - 6026 - - - - - x - 6027 - - - - - x - 6028 - - - - - x - 6029 - - - - - x - 6030 - - - - - x - 6031 - - - - - x - 6032 - - - - - x - 6033 - - - - - x - 6034 - - - - - x - 6035 - - - - - x - 6036 - - - - - x - 6037 - - - - - x - 6038 - - - - - x - 6039 - - - - - x - 6040 - - - - - x - 6041 - - - - - x - 6042 - - - - - x - 6043 - - - - - x - 6044 - - - - - x - 6045 - - - - - x - 6046 - - - - - x - 6047 - - - - - x - 6048 - - - - - x - 6049 - - - - - x - 6050 - - - - - x - 6051 - - - - - x - 6052 - - - - - x - 6053 - - - - - x - 6054 - - - - - x - 6055 - - - - - x - 6056 - - - - - x - 6057 - - - - - x - 6058 - - - - - x - 6059 - - - - - x - 6060 - - - - - x - 6061 - - - - - x - 6062 - - - - - x - 6063 - - - - - x - 6064 - - - - - x - 6065 - - - - - x - 6066 - - - - - x - 6067 - - - - - x - 6068 - - - - - x - 6069 - - - - - x - 6070 - - - - - x - 6071 - - - - - x - 6072 - - - - - x - 6073 - - - - - x - 6074 - - - - - x - 6075 - - - - - x - 6076 - - - - - x - 6077 - - - - - x - 6078 - - - - - x - 6079 - - - - - x - 6080 - - - - - x - 6081 - - - - - x - 6082 - - - - - x - 6083 - - - - - x - 6084 - - - - - x - 6085 - - - - - x - 6086 - - - - - x - 6087 - - - - - x - 6088 - - - - - x - 6089 - - - - - x - 6090 - - - - - x - 6091 - - - - - x - 6092 - - - - - x - 6093 - - - - - x - 6094 - - - - - x - 6095 - - - - - x - 6096 - - - - - x - 6097 - - - - - x - 6098 - - - - - x - 6099 - - - - - x - 6100 - - - - - x - 6101 - - - - - x - 6102 - - - - - x - 6103 - - - - - x - 6104 - - - - - x - 6105 - - - - - x - 6106 - - - - - x - 6107 - - - - - x - 6108 - - - - - x - 6109 - - - - - x - 6110 - - - - - x - 6111 - - - - - x - 6112 - - - - - x - 6113 - - - - - x - 6114 - - - - - x - 6115 - - - - - x - 6116 - - - - - x - 6117 - - - - - x - 6118 - - - - - x - 6119 - - - - - x - 6120 - - - - - x - 6121 - - - - - x - 6122 - - - - - x - 6123 - - - - - x - 6124 - - - - - x - 6125 - - - - - x - 6126 - - - - - x - 6127 - - - - - x - 6128 - - - - - x - 6129 - - - - - x - 6130 - - - - - x - 6131 - - - - - x - 6132 - - - - - x - 6133 - - - - - x - 6134 - - - - - x - 6135 - - - - - x - 6136 - - - - - x - 6137 - - - - - x - 6138 - - - - - x - 6139 - - - - - x - 6140 - - - - - x - 6141 - - - - - x - 6142 - - - - - x - 6143 - - - - - x - 6144 - - - - - x - 6145 - - - - - x - 6146 - - - - - x - 6147 - - - - - x - 6148 - - - - - x - 6149 - - - - - x - 6150 - - - - - x - 6151 - - - - - x - 6152 - - - - - x - 6153 - - - - - x - 6154 - - - - - x - 6155 - - - - - x - 6156 - - - - - x - 6157 - - - - - x - 6158 - - - - - x - 6159 - - - - - x - 6160 - - - - - x - 6161 - - - - - x - 6162 - - - - - x - 6163 - - - - - x - 6164 - - - - - x - 6165 - - - - - x - 6166 - - - - - x - 6167 - - - - - x - 6168 - - - - - x - 6169 - - - - - x - 6170 - - - - - x - 6171 - - - - - x - 6172 - - - - - x - 6173 - - - - - x - 6174 - - - - - x - 6175 - - - - - x - 6176 - - - - - x - 6177 - - - - - x - 6178 - - - - - x - 6179 - - - - - x - 6180 - - - - - x - 6181 - - - - - x - 6182 - - - - - x - 6183 - - - - - x - 6184 - - - - - x - 6185 - - - - - x - 6186 - - - - - x - 6187 - - - - - x - 6188 - - - - - x - 6189 - - - - - x - 6190 - - - - - x - 6191 - - - - - x - 6192 - - - - - x - 6193 - - - - - x - 6194 - - - - - x - 6195 - - - - - x - 6196 - - - - - x - 6197 - - - - - x - 6198 - - - - - x - 6199 - - - - - x - 6200 - - - - - x - 6201 - - - - - x - 6202 - - - - - x - 6203 - - - - - x - 6204 - - - - - x - 6205 - - - - - x - 6206 - - - - - x - 6207 - - - - - x - 6208 - - - - - x - 6209 - - - - - x - 6210 - - - - - x - 6211 - - - - - x - 6212 - - - - - x - 6213 - - - - - x - 6214 - - - - - x - 6215 - - - - - x - 6216 - - - - - x - 6217 - - - - - x - 6218 - - - - - x - 6219 - - - - - x - 6220 - - - - - x - 6221 - - - - - x - 6222 - - - - - x - 6223 - - - - - x - 6224 - - - - - x - 6225 - - - - - x - 6226 - - - - - x - 6227 - - - - - x - 6228 - - - - - x - 6229 - - - - - x - 6230 - - - - - x - 6231 - - - - - x - 6232 - - - - - x - 6233 - - - - - x - 6234 - - - - - x - 6235 - - - - - x - 6236 - - - - - x - 6237 - - - - - x - 6238 - - - - - x - 6239 - - - - - x - 6240 - - - - - x - 6241 - - - - - x - 6242 - - - - - x - 6243 - - - - - x - 6244 - - - - - x - 6245 - - - - - x - 6246 - - - - - x - 6247 - - - - - x - 6248 - - - - - x - 6249 - - - - - x - 6250 - - - - - x - 6251 - - - - - x - 6252 - - - - - x - 6253 - - - - - x - 6254 - - - - - x - 6255 - - - - - x - 6256 - - - - - x - 6257 - - - - - x - 6258 - - - - - x - 6259 - - - - - x - 6260 - - - - - x - 6261 - - - - - x - 6262 - - - - - x - 6263 - - - - - x - 6264 - - - - - x - 6265 - - - - - x - 6266 - - - - - x - 6267 - - - - - x - 6268 - - - - - x - 6269 - - - - - x - 6270 - - - - - x - 6271 - - - - - x - 6272 - - - - - x - 6273 - - - - - x - 6274 - - - - - x - 6275 - - - - - x - 6276 - - - - - x - 6277 - - - - - x - 6278 - - - - - x - 6279 - - - - - x - 6280 - - - - - x - 6281 - - - - - x - 6282 - - - - - x - 6283 - - - - - x - 6284 - - - - - x - 6285 - - - - - x - 6286 - - - - - x - 6287 - - - - - x - 6288 - - - - - x - 6289 - - - - - x - 6290 - - - - - x - 6291 - - - - - x - 6292 - - - - - x - 6293 - - - - - x - 6294 - - - - - x - 6295 - - - - - x - 6296 - - - - - x - 6297 - - - - - x - 6298 - - - - - x - 6299 - - - - - x - 6300 - - - - - x - 6301 - - - - - x - 6302 - - - - - x - 6303 - - - - - x - 6304 - - - - - x - 6305 - - - - - x - 6306 - - - - - x - 6307 - - - - - x - 6308 - - - - - x - 6309 - - - - - x - 6310 - - - - - x - 6311 - - - - - x - 6312 - - - - - x - 6313 - - - - - x - 6314 - - - - - x - 6315 - - - - - x - 6316 - - - - - x - 6317 - - - - - x - 6318 - - - - - x - 6319 - - - - - x - 6320 - - - - - x - 6321 - - - - - x - 6322 - - - - - x - 6323 - - - - - x - 6324 - - - - - x - 6325 - - - - - x - 6326 - - - - - x - 6327 - - - - - x - 6328 - - - - - x - 6329 - - - - - x - 6330 - - - - - x - 6331 - - - - - x - 6332 - - - - - x - 6333 - - - - - x - 6334 - - - - - x - 6335 - - - - - x - 6336 - - - - - x - 6337 - - - - - x - 6338 - - - - - x - 6339 - - - - - x - 6340 - - - - - x - 6341 - - - - - x - 6342 - - - - - x - 6343 - - - - - x - 6344 - - - - - x - 6345 - - - - - x - 6346 - - - - - x - 6347 - - - - - x - 6348 - - - - - x - 6349 - - - - - x - 6350 - - - - - x - 6351 - - - - - x - 6352 - - - - - x - 6353 - - - - - x - 6354 - - - - - x - 6355 - - - - - x - 6356 - - - - - x - 6357 - - - - - x - 6358 - - - - - x - 6359 - - - - - x - 6360 - - - - - x - 6361 - - - - - x - 6362 - - - - - x - 6363 - - - - - x - 6364 - - - - - x - 6365 - - - - - x - 6366 - - - - - x - 6367 - - - - - x - 6368 - - - - - x - 6369 - - - - - x - 6370 - - - - - x - 6371 - - - - - x - 6372 - - - - - x - 6373 - - - - - x - 6374 - - - - - x - 6375 - - - - - x - 6376 - - - - - x - 6377 - - - - - x - 6378 - - - - - x - 6379 - - - - - x - 6380 - - - - - x - 6381 - - - - - x - 6382 - - - - - x - 6383 - - - - - x - 6384 - - - - - x - 6385 - - - - - x - 6386 - - - - - x - 6387 - - - - - x - 6388 - - - - - x - 6389 - - - - - x - 6390 - - - - - x - 6391 - - - - - x - 6392 - - - - - x - 6393 - - - - - x - 6394 - - - - - x - 6395 - - - - - x - 6396 - - - - - x - 6397 - - - - - x - 6398 - - - - - x - 6399 - - - - - x - 6400 - - - - - x - 6401 - - - - - x - 6402 - - - - - x - 6403 - - - - - x - 6404 - - - - - x - 6405 - - - - - x - 6406 - - - - - x - 6407 - - - - - x - 6408 - - - - - x - 6409 - - - - - x - 6410 - - - - - x - 6411 - - - - - x - 6412 - - - - - x - 6413 - - - - - x - 6414 - - - - - x - 6415 - - - - - x - 6416 - - - - - x - 6417 - - - - - x - 6418 - - - - - x - 6419 - - - - - x - 6420 - - - - - x - 6421 - - - - - x - 6422 - - - - - x - 6423 - - - - - x - 6424 - - - - - x - 6425 - - - - - x - 6426 - - - - - x - 6427 - - - - - x - 6428 - - - - - x - 6429 - - - - - x - 6430 - - - - - x - 6431 - - - - - x - 6432 - - - - - x - 6433 - - - - - x - 6434 - - - - - x - 6435 - - - - - x - 6436 - - - - - x - 6437 - - - - - x - 6438 - - - - - x - 6439 - - - - - x - 6440 - - - - - x - 6441 - - - - - x - 6442 - - - - - x - 6443 - - - - - x - 6444 - - - - - x - 6445 - - - - - x - 6446 - - - - - x - 6447 - - - - - x - 6448 - - - - - x - 6449 - - - - - x - 6450 - - - - - x - 6451 - - - - - x - 6452 - - - - - x - 6453 - - - - - x - 6454 - - - - - x - 6455 - - - - - x - 6456 - - - - - x - 6457 - - - - - x - 6458 - - - - - x - 6459 - - - - - x - 6460 - - - - - x - 6461 - - - - - x - 6462 - - - - - x - 6463 - - - - - x - 6464 - - - - - x - 6465 - - - - - x - 6466 - - - - - x - 6467 - - - - - x - 6468 - - - - - x - 6469 - - - - - x - 6470 - - - - - x - 6471 - - - - - x - 6472 - - - - - x - 6473 - - - - - x - 6474 - - - - - x - 6475 - - - - - x - 6476 - - - - - x - 6477 - - - - - x - 6478 - - - - - x - 6479 - - - - - x - 6480 - - - - - x - 6481 - - - - - x - 6482 - - - - - x - 6483 - - - - - x - 6484 - - - - - x - 6485 - - - - - x - 6486 - - - - - x - 6487 - - - - - x - 6488 - - - - - x - 6489 - - - - - x - 6490 - - - - - x - 6491 - - - - - x - 6492 - - - - - x - 6493 - - - - - x - 6494 - - - - - x - 6495 - - - - - x - 6496 - - - - - x - 6497 - - - - - x - 6498 - - - - - x - 6499 - - - - - x - 6500 - - - - - x - 6501 - - - - - x - 6502 - - - - - x - 6503 - - - - - x - 6504 - - - - - x - 6505 - - - - - x - 6506 - - - - - x - 6507 - - - - - x - 6508 - - - - - x - 6509 - - - - - x - 6510 - - - - - x - 6511 - - - - - x - 6512 - - - - - x - 6513 - - - - - x - 6514 - - - - - x - 6515 - - - - - x - 6516 - - - - - x - 6517 - - - - - x - 6518 - - - - - x - 6519 - - - - - x - 6520 - - - - - x - 6521 - - - - - x - 6522 - - - - - x - 6523 - - - - - x - 6524 - - - - - x - 6525 - - - - - x - 6526 - - - - - x - 6527 - - - - - x - 6528 - - - - - x - 6529 - - - - - x - 6530 - - - - - x - 6531 - - - - - x - 6532 - - - - - x - 6533 - - - - - x - 6534 - - - - - x - 6535 - - - - - x - 6536 - - - - - x - 6537 - - - - - x - 6538 - - - - - x - 6539 - - - - - x - 6540 - - - - - x - 6541 - - - - - x - 6542 - - - - - x - 6543 - - - - - x - 6544 - - - - - x - 6545 - - - - - x - 6546 - - - - - x - 6547 - - - - - x - 6548 - - - - - x - 6549 - - - - - x - 6550 - - - - - x - 6551 - - - - - x - 6552 - - - - - x - 6553 - - - - - x - 6554 - - - - - x - 6555 - - - - - x - 6556 - - - - - x - 6557 - - - - - x - 6558 - - - - - x - 6559 - - - - - x - 6560 - - - - - x - 6561 - - - - - x - 6562 - - - - - x - 6563 - - - - - x - 6564 - - - - - x - 6565 - - - - - x - 6566 - - - - - x - 6567 - - - - - x - 6568 - - - - - x - 6569 - - - - - x - 6570 - - - - - x - 6571 - - - - - x - 6572 - - - - - x - 6573 - - - - - x - 6574 - - - - - x - 6575 - - - - - x - 6576 - - - - - x - 6577 - - - - - x - 6578 - - - - - x - 6579 - - - - - x - 6580 - - - - - x - 6581 - - - - - x - 6582 - - - - - x - 6583 - - - - - x - 6584 - - - - - x - 6585 - - - - - x - 6586 - - - - - x - 6587 - - - - - x - 6588 - - - - - x - 6589 - - - - - x - 6590 - - - - - x - 6591 - - - - - x - 6592 - - - - - x - 6593 - - - - - x - 6594 - - - - - x - 6595 - - - - - x - 6596 - - - - - x - 6597 - - - - - x - 6598 - - - - - x - 6599 - - - - - x - 6600 - - - - - x - 6601 - - - - - x - 6602 - - - - - x - 6603 - - - - - x - 6604 - - - - - x - 6605 - - - - - x - 6606 - - - - - x - 6607 - - - - - x - 6608 - - - - - x - 6609 - - - - - x - 6610 - - - - - x - 6611 - - - - - x - 6612 - - - - - x - 6613 - - - - - x - 6614 - - - - - x - 6615 - - - - - x - 6616 - - - - - x - 6617 - - - - - x - 6618 - - - - - x - 6619 - - - - - x - 6620 - - - - - x - 6621 - - - - - x - 6622 - - - - - x - 6623 - - - - - x - 6624 - - - - - x - 6625 - - - - - x - 6626 - - - - - x - 6627 - - - - - x - 6628 - - - - - x - 6629 - - - - - x - 6630 - - - - - x - 6631 - - - - - x - 6632 - - - - - x - 6633 - - - - - x - 6634 - - - - - x - 6635 - - - - - x - 6636 - - - - - x - 6637 - - - - - x - 6638 - - - - - x - 6639 - - - - - x - 6640 - - - - - x - 6641 - - - - - x - 6642 - - - - - x - 6643 - - - - - x - 6644 - - - - - x - 6645 - - - - - x - 6646 - - - - - x - 6647 - - - - - x - 6648 - - - - - x - 6649 - - - - - x - 6650 - - - - - x - 6651 - - - - - x - 6652 - - - - - x - 6653 - - - - - x - 6654 - - - - - x - 6655 - - - - - x - 6656 - - - - - x - 6657 - - - - - x - 6658 - - - - - x - 6659 - - - - - x - 6660 - - - - - x - 6661 - - - - - x - 6662 - - - - - x - 6663 - - - - - x - 6664 - - - - - x - 6665 - - - - - x - 6666 - - - - - x - 6667 - - - - - x - 6668 - - - - - x - 6669 - - - - - x - 6670 - - - - - x - 6671 - - - - - x - 6672 - - - - - x - 6673 - - - - - x - 6674 - - - - - x - 6675 - - - - - x - 6676 - - - - - x - 6677 - - - - - x - 6678 - - - - - x - 6679 - - - - - x - 6680 - - - - - x - 6681 - - - - - x - 6682 - - - - - x - 6683 - - - - - x - 6684 - - - - - x - 6685 - - - - - x - 6686 - - - - - x - 6687 - - - - - x - 6688 - - - - - x - 6689 - - - - - x - 6690 - - - - - x - 6691 - - - - - x - 6692 - - - - - x - 6693 - - - - - x - 6694 - - - - - x - 6695 - - - - - x - 6696 - - - - - x - 6697 - - - - - x - 6698 - - - - - x - 6699 - - - - - x - 6700 - - - - - x - 6701 - - - - - x - 6702 - - - - - x - 6703 - - - - - x - 6704 - - - - - x - 6705 - - - - - x - 6706 - - - - - x - 6707 - - - - - x - 6708 - - - - - x - 6709 - - - - - x - 6710 - - - - - x - 6711 - - - - - x - 6712 - - - - - x - 6713 - - - - - x - 6714 - - - - - x - 6715 - - - - - x - 6716 - - - - - x - 6717 - - - - - x - 6718 - - - - - x - 6719 - - - - - x - 6720 - - - - - x - 6721 - - - - - x - 6722 - - - - - x - 6723 - - - - - x - 6724 - - - - - x - 6725 - - - - - x - 6726 - - - - - x - 6727 - - - - - x - 6728 - - - - - x - 6729 - - - - - x - 6730 - - - - - x - 6731 - - - - - x - 6732 - - - - - x - 6733 - - - - - x - 6734 - - - - - x - 6735 - - - - - x - 6736 - - - - - x - 6737 - - - - - x - 6738 - - - - - x - 6739 - - - - - x - 6740 - - - - - x - 6741 - - - - - x - 6742 - - - - - x - 6743 - - - - - x - 6744 - - - - - x - 6745 - - - - - x - 6746 - - - - - x - 6747 - - - - - x - 6748 - - - - - x - 6749 - - - - - x - 6750 - - - - - x - 6751 - - - - - x - 6752 - - - - - x - 6753 - - - - - x - 6754 - - - - - x - 6755 - - - - - x - 6756 - - - - - x - 6757 - - - - - x - 6758 - - - - - x - 6759 - - - - - x - 6760 - - - - - x - 6761 - - - - - x - 6762 - - - - - x - 6763 - - - - - x - 6764 - - - - - x - 6765 - - - - - x - 6766 - - - - - x - 6767 - - - - - x - 6768 - - - - - x - 6769 - - - - - x - 6770 - - - - - x - 6771 - - - - - x - 6772 - - - - - x - 6773 - - - - - x - 6774 - - - - - x - 6775 - - - - - x - 6776 - - - - - x - 6777 - - - - - x - 6778 - - - - - x - 6779 - - - - - x - 6780 - - - - - x - 6781 - - - - - x - 6782 - - - - - x - 6783 - - - - - x - 6784 - - - - - x - 6785 - - - - - x - 6786 - - - - - x - 6787 - - - - - x - 6788 - - - - - x - 6789 - - - - - x - 6790 - - - - - x - 6791 - - - - - x - 6792 - - - - - x - 6793 - - - - - x - 6794 - - - - - x - 6795 - - - - - x - 6796 - - - - - x - 6797 - - - - - x - 6798 - - - - - x - 6799 - - - - - x - 6800 - - - - - x - 6801 - - - - - x - 6802 - - - - - x - 6803 - - - - - x - 6804 - - - - - x - 6805 - - - - - x - 6806 - - - - - x - 6807 - - - - - x - 6808 - - - - - x - 6809 - - - - - x - 6810 - - - - - x - 6811 - - - - - x - 6812 - - - - - x - 6813 - - - - - x - 6814 - - - - - x - 6815 - - - - - x - 6816 - - - - - x - 6817 - - - - - x - 6818 - - - - - x - 6819 - - - - - x - 6820 - - - - - x - 6821 - - - - - x - 6822 - - - - - x - 6823 - - - - - x - 6824 - - - - - x - 6825 - - - - - x - 6826 - - - - - x - 6827 - - - - - x - 6828 - - - - - x - 6829 - - - - - x - 6830 - - - - - x - 6831 - - - - - x - 6832 - - - - - x - 6833 - - - - - x - 6834 - - - - - x - 6835 - - - - - x - 6836 - - - - - x - 6837 - - - - - x - 6838 - - - - - x - 6839 - - - - - x - 6840 - - - - - x - 6841 - - - - - x - 6842 - - - - - x - 6843 - - - - - x - 6844 - - - - - x - 6845 - - - - - x - 6846 - - - - - x - 6847 - - - - - x - 6848 - - - - - x - 6849 - - - - - x - 6850 - - - - - x - 6851 - - - - - x - 6852 - - - - - x - 6853 - - - - - x - 6854 - - - - - x - 6855 - - - - - x - 6856 - - - - - x - 6857 - - - - - x - 6858 - - - - - x - 6859 - - - - - x - 6860 - - - - - x - 6861 - - - - - x - 6862 - - - - - x - 6863 - - - - - x - 6864 - - - - - x - 6865 - - - - - x - 6866 - - - - - x - 6867 - - - - - x - 6868 - - - - - x - 6869 - - - - - x - 6870 - - - - - x - 6871 - - - - - x - 6872 - - - - - x - 6873 - - - - - x - 6874 - - - - - x - 6875 - - - - - x - 6876 - - - - - x - 6877 - - - - - x - 6878 - - - - - x - 6879 - - - - - x - 6880 - - - - - x - 6881 - - - - - x - 6882 - - - - - x - 6883 - - - - - x - 6884 - - - - - x - 6885 - - - - - x - 6886 - - - - - x - 6887 - - - - - x - 6888 - - - - - x - 6889 - - - - - x - 6890 - - - - - x - 6891 - - - - - x - 6892 - - - - - x - 6893 - - - - - x - 6894 - - - - - x - 6895 - - - - - x - 6896 - - - - - x - 6897 - - - - - x - 6898 - - - - - x - 6899 - - - - - x - 6900 - - - - - x - 6901 - - - - - x - 6902 - - - - - x - 6903 - - - - - x - 6904 - - - - - x - 6905 - - - - - x - 6906 - - - - - x - 6907 - - - - - x - 6908 - - - - - x - 6909 - - - - - x - 6910 - - - - - x - 6911 - - - - - x - 6912 - - - - - x - 6913 - - - - - x - 6914 - - - - - x - 6915 - - - - - x - 6916 - - - - - x - 6917 - - - - - x - 6918 - - - - - x - 6919 - - - - - x - 6920 - - - - - x - 6921 - - - - - x - 6922 - - - - - x - 6923 - - - - - x - 6924 - - - - - x - 6925 - - - - - x - 6926 - - - - - x - 6927 - - - - - x - 6928 - - - - - x - 6929 - - - - - x - 6930 - - - - - x - 6931 - - - - - x - 6932 - - - - - x - 6933 - - - - - x - 6934 - - - - - x - 6935 - - - - - x - 6936 - - - - - x - 6937 - - - - - x - 6938 - - - - - x - 6939 - - - - - x - 6940 - - - - - x - 6941 - - - - - x - 6942 - - - - - x - 6943 - - - - - x - 6944 - - - - - x - 6945 - - - - - x - 6946 - - - - - x - 6947 - - - - - x - 6948 - - - - - x - 6949 - - - - - x - 6950 - - - - - x - 6951 - - - - - x - 6952 - - - - - x - 6953 - - - - - x - 6954 - - - - - x - 6955 - - - - - x - 6956 - - - - - x - 6957 - - - - - x - 6958 - - - - - x - 6959 - - - - - x - 6960 - - - - - x - 6961 - - - - - x - 6962 - - - - - x - 6963 - - - - - x - 6964 - - - - - x - 6965 - - - - - x - 6966 - - - - - x - 6967 - - - - - x - 6968 - - - - - x - 6969 - - - - - x - 6970 - - - - - x - 6971 - - - - - x - 6972 - - - - - x - 6973 - - - - - x - 6974 - - - - - x - 6975 - - - - - x - 6976 - - - - - x - 6977 - - - - - x - 6978 - - - - - x - 6979 - - - - - x - 6980 - - - - - x - 6981 - - - - - x - 6982 - - - - - x - 6983 - - - - - x - 6984 - - - - - x - 6985 - - - - - x - 6986 - - - - - x - 6987 - - - - - x - 6988 - - - - - x - 6989 - - - - - x - 6990 - - - - - x - 6991 - - - - - x - 6992 - - - - - x - 6993 - - - - - x - 6994 - - - - - x - 6995 - - - - - x - 6996 - - - - - x - 6997 - - - - - x - 6998 - - - - - x - 6999 - - - - - x - 7000 - - - - - x - 7001 - - - - - x - 7002 - - - - - x - 7003 - - - - - x - 7004 - - - - - x - 7005 - - - - - x - 7006 - - - - - x - 7007 - - - - - x - 7008 - - - - - x - 7009 - - - - - x - 7010 - - - - - x - 7011 - - - - - x - 7012 - - - - - x - 7013 - - - - - x - 7014 - - - - - x - 7015 - - - - - x - 7016 - - - - - x - 7017 - - - - - x - 7018 - - - - - x - 7019 - - - - - x - 7020 - - - - - x - 7021 - - - - - x - 7022 - - - - - x - 7023 - - - - - x - 7024 - - - - - x - 7025 - - - - - x - 7026 - - - - - x - 7027 - - - - - x - 7028 - - - - - x - 7029 - - - - - x - 7030 - - - - - x - 7031 - - - - - x - 7032 - - - - - x - 7033 - - - - - x - 7034 - - - - - x - 7035 - - - - - x - 7036 - - - - - x - 7037 - - - - - x - 7038 - - - - - x - 7039 - - - - - x - 7040 - - - - - x - 7041 - - - - - x - 7042 - - - - - x - 7043 - - - - - x - 7044 - - - - - x - 7045 - - - - - x - 7046 - - - - - x - 7047 - - - - - x - 7048 - - - - - x - 7049 - - - - - x - 7050 - - - - - x - 7051 - - - - - x - 7052 - - - - - x - 7053 - - - - - x - 7054 - - - - - x - 7055 - - - - - x - 7056 - - - - - x - 7057 - - - - - x - 7058 - - - - - x - 7059 - - - - - x - 7060 - - - - - x - 7061 - - - - - x - 7062 - - - - - x - 7063 - - - - - x - 7064 - - - - - x - 7065 - - - - - x - 7066 - - - - - x - 7067 - - - - - x - 7068 - - - - - x - 7069 - - - - - x - 7070 - - - - - x - 7071 - - - - - x - 7072 - - - - - x - 7073 - - - - - x - 7074 - - - - - x - 7075 - - - - - x - 7076 - - - - - x - 7077 - - - - - x - 7078 - - - - - x - 7079 - - - - - x - 7080 - - - - - x - 7081 - - - - - x - 7082 - - - - - x - 7083 - - - - - x - 7084 - - - - - x - 7085 - - - - - x - 7086 - - - - - x - 7087 - - - - - x - 7088 - - - - - x - 7089 - - - - - x - 7090 - - - - - x - 7091 - - - - - x - 7092 - - - - - x - 7093 - - - - - x - 7094 - - - - - x - 7095 - - - - - x - 7096 - - - - - x - 7097 - - - - - x - 7098 - - - - - x - 7099 - - - - - x - 7100 - - - - - x - 7101 - - - - - x - 7102 - - - - - x - 7103 - - - - - x - 7104 - - - - - x - 7105 - - - - - x - 7106 - - - - - x - 7107 - - - - - x - 7108 - - - - - x - 7109 - - - - - x - 7110 - - - - - x - 7111 - - - - - x - 7112 - - - - - x - 7113 - - - - - x - 7114 - - - - - x - 7115 - - - - - x - 7116 - - - - - x - 7117 - - - - - x - 7118 - - - - - x - 7119 - - - - - x - 7120 - - - - - x - 7121 - - - - - x - 7122 - - - - - x - 7123 - - - - - x - 7124 - - - - - x - 7125 - - - - - x - 7126 - - - - - x - 7127 - - - - - x - 7128 - - - - - x - 7129 - - - - - x - 7130 - - - - - x - 7131 - - - - - x - 7132 - - - - - x - 7133 - - - - - x - 7134 - - - - - x - 7135 - - - - - x - 7136 - - - - - x - 7137 - - - - - x - 7138 - - - - - x - 7139 - - - - - x - 7140 - - - - - x - 7141 - - - - - x - 7142 - - - - - x - 7143 - - - - - x - 7144 - - - - - x - 7145 - - - - - x - 7146 - - - - - x - 7147 - - - - - x - 7148 - - - - - x - 7149 - - - - - x - 7150 - - - - - x - 7151 - - - - - x - 7152 - - - - - x - 7153 - - - - - x - 7154 - - - - - x - 7155 - - - - - x - 7156 - - - - - x - 7157 - - - - - x - 7158 - - - - - x - 7159 - - - - - x - 7160 - - - - - x - 7161 - - - - - x - 7162 - - - - - x - 7163 - - - - - x - 7164 - - - - - x - 7165 - - - - - x - 7166 - - - - - x - 7167 - - - - - x - 7168 - - - - - x - 7169 - - - - - x - 7170 - - - - - x - 7171 - - - - - x - 7172 - - - - - x - 7173 - - - - - x - 7174 - - - - - x - 7175 - - - - - x - 7176 - - - - - x - 7177 - - - - - x - 7178 - - - - - x - 7179 - - - - - x - 7180 - - - - - x - 7181 - - - - - x - 7182 - - - - - x - 7183 - - - - - x - 7184 - - - - - x - 7185 - - - - - x - 7186 - - - - - x - 7187 - - - - - x - 7188 - - - - - x - 7189 - - - - - x - 7190 - - - - - x - 7191 - - - - - x - 7192 - - - - - x - 7193 - - - - - x - 7194 - - - - - x - 7195 - - - - - x - 7196 - - - - - x - 7197 - - - - - x - 7198 - - - - - x - 7199 - - - - - x - 7200 - - - - - x - 7201 - - - - - x - 7202 - - - - - x - 7203 - - - - - x - 7204 - - - - - x - 7205 - - - - - x - 7206 - - - - - x - 7207 - - - - - x - 7208 - - - - - x - 7209 - - - - - x - 7210 - - - - - x - 7211 - - - - - x - 7212 - - - - - x - 7213 - - - - - x - 7214 - - - - - x - 7215 - - - - - x - 7216 - - - - - x - 7217 - - - - - x - 7218 - - - - - x - 7219 - - - - - x - 7220 - - - - - x - 7221 - - - - - x - 7222 - - - - - x - 7223 - - - - - x - 7224 - - - - - x - 7225 - - - - - x - 7226 - - - - - x - 7227 - - - - - x - 7228 - - - - - x - 7229 - - - - - x - 7230 - - - - - x - 7231 - - - - - x - 7232 - - - - - x - 7233 - - - - - x - 7234 - - - - - x - 7235 - - - - - x - 7236 - - - - - x - 7237 - - - - - x - 7238 - - - - - x - 7239 - - - - - x - 7240 - - - - - x - 7241 - - - - - x - 7242 - - - - - x - 7243 - - - - - x - 7244 - - - - - x - 7245 - - - - - x - 7246 - - - - - x - 7247 - - - - - x - 7248 - - - - - x - 7249 - - - - - x - 7250 - - - - - x - 7251 - - - - - x - 7252 - - - - - x - 7253 - - - - - x - 7254 - - - - - x - 7255 - - - - - x - 7256 - - - - - x - 7257 - - - - - x - 7258 - - - - - x - 7259 - - - - - x - 7260 - - - - - x - 7261 - - - - - x - 7262 - - - - - x - 7263 - - - - - x - 7264 - - - - - x - 7265 - - - - - x - 7266 - - - - - x - 7267 - - - - - x - 7268 - - - - - x - 7269 - - - - - x - 7270 - - - - - x - 7271 - - - - - x - 7272 - - - - - x - 7273 - - - - - x - 7274 - - - - - x - 7275 - - - - - x - 7276 - - - - - x - 7277 - - - - - x - 7278 - - - - - x - 7279 - - - - - x - 7280 - - - - - x - 7281 - - - - - x - 7282 - - - - - x - 7283 - - - - - x - 7284 - - - - - x - 7285 - - - - - x - 7286 - - - - - x - 7287 - - - - - x - 7288 - - - - - x - 7289 - - - - - x - 7290 - - - - - x - 7291 - - - - - x - 7292 - - - - - x - 7293 - - - - - x - 7294 - - - - - x - 7295 - - - - - x - 7296 - - - - - x - 7297 - - - - - x - 7298 - - - - - x - 7299 - - - - - x - 7300 - - - - - x - 7301 - - - - - x - 7302 - - - - - x - 7303 - - - - - x - 7304 - - - - - x - 7305 - - - - - x - 7306 - - - - - x - 7307 - - - - - x - 7308 - - - - - x - 7309 - - - - - x - 7310 - - - - - x - 7311 - - - - - x - 7312 - - - - - x - 7313 - - - - - x - 7314 - - - - - x - 7315 - - - - - x - 7316 - - - - - x - 7317 - - - - - x - 7318 - - - - - x - 7319 - - - - - x - 7320 - - - - - x - 7321 - - - - - x - 7322 - - - - - x - 7323 - - - - - x - 7324 - - - - - x - 7325 - - - - - x - 7326 - - - - - x - 7327 - - - - - x - 7328 - - - - - x - 7329 - - - - - x - 7330 - - - - - x - 7331 - - - - - x - 7332 - - - - - x - 7333 - - - - - x - 7334 - - - - - x - 7335 - - - - - x - 7336 - - - - - x - 7337 - - - - - x - 7338 - - - - - x - 7339 - - - - - x - 7340 - - - - - x - 7341 - - - - - x - 7342 - - - - - x - 7343 - - - - - x - 7344 - - - - - x - 7345 - - - - - x - 7346 - - - - - x - 7347 - - - - - x - 7348 - - - - - x - 7349 - - - - - x - 7350 - - - - - x - 7351 - - - - - x - 7352 - - - - - x - 7353 - - - - - x - 7354 - - - - - x - 7355 - - - - - x - 7356 - - - - - x - 7357 - - - - - x - 7358 - - - - - x - 7359 - - - - - x - 7360 - - - - - x - 7361 - - - - - x - 7362 - - - - - x - 7363 - - - - - x - 7364 - - - - - x - 7365 - - - - - x - 7366 - - - - - x - 7367 - - - - - x - 7368 - - - - - x - 7369 - - - - - x - 7370 - - - - - x - 7371 - - - - - x - 7372 - - - - - x - 7373 - - - - - x - 7374 - - - - - x - 7375 - - - - - x - 7376 - - - - - x - 7377 - - - - - x - 7378 - - - - - x - 7379 - - - - - x - 7380 - - - - - x - 7381 - - - - - x - 7382 - - - - - x - 7383 - - - - - x - 7384 - - - - - x - 7385 - - - - - x - 7386 - - - - - x - 7387 - - - - - x - 7388 - - - - - x - 7389 - - - - - x - 7390 - - - - - x - 7391 - - - - - x - 7392 - - - - - x - 7393 - - - - - x - 7394 - - - - - x - 7395 - - - - - x - 7396 - - - - - x - 7397 - - - - - x - 7398 - - - - - x - 7399 - - - - - x - 7400 - - - - - x - 7401 - - - - - x - 7402 - - - - - x - 7403 - - - - - x - 7404 - - - - - x - 7405 - - - - - x - 7406 - - - - - x - 7407 - - - - - x - 7408 - - - - - x - 7409 - - - - - x - 7410 - - - - - x - 7411 - - - - - x - 7412 - - - - - x - 7413 - - - - - x - 7414 - - - - - x - 7415 - - - - - x - 7416 - - - - - x - 7417 - - - - - x - 7418 - - - - - x - 7419 - - - - - x - 7420 - - - - - x - 7421 - - - - - x - 7422 - - - - - x - 7423 - - - - - x - 7424 - - - - - x - 7425 - - - - - x - 7426 - - - - - x - 7427 - - - - - x - 7428 - - - - - x - 7429 - - - - - x - 7430 - - - - - x - 7431 - - - - - x - 7432 - - - - - x - 7433 - - - - - x - 7434 - - - - - x - 7435 - - - - - x - 7436 - - - - - x - 7437 - - - - - x - 7438 - - - - - x - 7439 - - - - - x - 7440 - - - - - x - 7441 - - - - - x - 7442 - - - - - x - 7443 - - - - - x - 7444 - - - - - x - 7445 - - - - - x - 7446 - - - - - x - 7447 - - - - - x - 7448 - - - - - x - 7449 - - - - - x - 7450 - - - - - x - 7451 - - - - - x - 7452 - - - - - x - 7453 - - - - - x - 7454 - - - - - x - 7455 - - - - - x - 7456 - - - - - x - 7457 - - - - - x - 7458 - - - - - x - 7459 - - - - - x - 7460 - - - - - x - 7461 - - - - - x - 7462 - - - - - x - 7463 - - - - - x - 7464 - - - - - x - 7465 - - - - - x - 7466 - - - - - x - 7467 - - - - - x - 7468 - - - - - x - 7469 - - - - - x - 7470 - - - - - x - 7471 - - - - - x - 7472 - - - - - x - 7473 - - - - - x - 7474 - - - - - x - 7475 - - - - - x - 7476 - - - - - x - 7477 - - - - - x - 7478 - - - - - x - 7479 - - - - - x - 7480 - - - - - x - 7481 - - - - - x - 7482 - - - - - x - 7483 - - - - - x - 7484 - - - - - x - 7485 - - - - - x - 7486 - - - - - x - 7487 - - - - - x - 7488 - - - - - x - 7489 - - - - - x - 7490 - - - - - x - 7491 - - - - - x - 7492 - - - - - x - 7493 - - - - - x - 7494 - - - - - x - 7495 - - - - - x - 7496 - - - - - x - 7497 - - - - - x - 7498 - - - - - x - 7499 - - - - - x - 7500 - - - - - x - 7501 - - - - - x - 7502 - - - - - x - 7503 - - - - - x - 7504 - - - - - x - 7505 - - - - - x - 7506 - - - - - x - 7507 - - - - - x - 7508 - - - - - x - 7509 - - - - - x - 7510 - - - - - x - 7511 - - - - - x - 7512 - - - - - x - 7513 - - - - - x - 7514 - - - - - x - 7515 - - - - - x - 7516 - - - - - x - 7517 - - - - - x - 7518 - - - - - x - 7519 - - - - - x - 7520 - - - - - x - 7521 - - - - - x - 7522 - - - - - x - 7523 - - - - - x - 7524 - - - - - x - 7525 - - - - - x - 7526 - - - - - x - 7527 - - - - - x - 7528 - - - - - x - 7529 - - - - - x - 7530 - - - - - x - 7531 - - - - - x - 7532 - - - - - x - 7533 - - - - - x - 7534 - - - - - x - 7535 - - - - - x - 7536 - - - - - x - 7537 - - - - - x - 7538 - - - - - x - 7539 - - - - - x - 7540 - - - - - x - 7541 - - - - - x - 7542 - - - - - x - 7543 - - - - - x - 7544 - - - - - x - 7545 - - - - - x - 7546 - - - - - x - 7547 - - - - - x - 7548 - - - - - x - 7549 - - - - - x - 7550 - - - - - x - 7551 - - - - - x - 7552 - - - - - x - 7553 - - - - - x - 7554 - - - - - x - 7555 - - - - - x - 7556 - - - - - x - 7557 - - - - - x - 7558 - - - - - x - 7559 - - - - - x - 7560 - - - - - x - 7561 - - - - - x - 7562 - - - - - x - 7563 - - - - - x - 7564 - - - - - x - 7565 - - - - - x - 7566 - - - - - x - 7567 - - - - - x - 7568 - - - - - x - 7569 - - - - - x - 7570 - - - - - x - 7571 - - - - - x - 7572 - - - - - x - 7573 - - - - - x - 7574 - - - - - x - 7575 - - - - - x - 7576 - - - - - x - 7577 - - - - - x - 7578 - - - - - x - 7579 - - - - - x - 7580 - - - - - x - 7581 - - - - - x - 7582 - - - - - x - 7583 - - - - - x - 7584 - - - - - x - 7585 - - - - - x - 7586 - - - - - x - 7587 - - - - - x - 7588 - - - - - x - 7589 - - - - - x - 7590 - - - - - x - 7591 - - - - - x - 7592 - - - - - x - 7593 - - - - - x - 7594 - - - - - x - 7595 - - - - - x - 7596 - - - - - x - 7597 - - - - - x - 7598 - - - - - x - 7599 - - - - - x - 7600 - - - - - x - 7601 - - - - - x - 7602 - - - - - x - 7603 - - - - - x - 7604 - - - - - x - 7605 - - - - - x - 7606 - - - - - x - 7607 - - - - - x - 7608 - - - - - x - 7609 - - - - - x - 7610 - - - - - x - 7611 - - - - - x - 7612 - - - - - x - 7613 - - - - - x - 7614 - - - - - x - 7615 - - - - - x - 7616 - - - - - x - 7617 - - - - - x - 7618 - - - - - x - 7619 - - - - - x - 7620 - - - - - x - 7621 - - - - - x - 7622 - - - - - x - 7623 - - - - - x - 7624 - - - - - x - 7625 - - - - - x - 7626 - - - - - x - 7627 - - - - - x - 7628 - - - - - x - 7629 - - - - - x - 7630 - - - - - x - 7631 - - - - - x - 7632 - - - - - x - 7633 - - - - - x - 7634 - - - - - x - 7635 - - - - - x - 7636 - - - - - x - 7637 - - - - - x - 7638 - - - - - x - 7639 - - - - - x - 7640 - - - - - x - 7641 - - - - - x - 7642 - - - - - x - 7643 - - - - - x - 7644 - - - - - x - 7645 - - - - - x - 7646 - - - - - x - 7647 - - - - - x - 7648 - - - - - x - 7649 - - - - - x - 7650 - - - - - x - 7651 - - - - - x - 7652 - - - - - x - 7653 - - - - - x - 7654 - - - - - x - 7655 - - - - - x - 7656 - - - - - x - 7657 - - - - - x - 7658 - - - - - x - 7659 - - - - - x - 7660 - - - - - x - 7661 - - - - - x - 7662 - - - - - x - 7663 - - - - - x - 7664 - - - - - x - 7665 - - - - - x - 7666 - - - - - x - 7667 - - - - - x - 7668 - - - - - x - 7669 - - - - - x - 7670 - - - - - x - 7671 - - - - - x - 7672 - - - - - x - 7673 - - - - - x - 7674 - - - - - x - 7675 - - - - - x - 7676 - - - - - x - 7677 - - - - - x - 7678 - - - - - x - 7679 - - - - - x - 7680 - - - - - x - 7681 - - - - - x - 7682 - - - - - x - 7683 - - - - - x - 7684 - - - - - x - 7685 - - - - - x - 7686 - - - - - x - 7687 - - - - - x - 7688 - - - - - x - 7689 - - - - - x - 7690 - - - - - x - 7691 - - - - - x - 7692 - - - - - x - 7693 - - - - - x - 7694 - - - - - x - 7695 - - - - - x - 7696 - - - - - x - 7697 - - - - - x - 7698 - - - - - x - 7699 - - - - - x - 7700 - - - - - x - 7701 - - - - - x - 7702 - - - - - x - 7703 - - - - - x - 7704 - - - - - x - 7705 - - - - - x - 7706 - - - - - x - 7707 - - - - - x - 7708 - - - - - x - 7709 - - - - - x - 7710 - - - - - x - 7711 - - - - - x - 7712 - - - - - x - 7713 - - - - - x - 7714 - - - - - x - 7715 - - - - - x - 7716 - - - - - x - 7717 - - - - - x - 7718 - - - - - x - 7719 - - - - - x - 7720 - - - - - x - 7721 - - - - - x - 7722 - - - - - x - 7723 - - - - - x - 7724 - - - - - x - 7725 - - - - - x - 7726 - - - - - x - 7727 - - - - - x - 7728 - - - - - x - 7729 - - - - - x - 7730 - - - - - x - 7731 - - - - - x - 7732 - - - - - x - 7733 - - - - - x - 7734 - - - - - x - 7735 - - - - - x - 7736 - - - - - x - 7737 - - - - - x - 7738 - - - - - x - 7739 - - - - - x - 7740 - - - - - x - 7741 - - - - - x - 7742 - - - - - x - 7743 - - - - - x - 7744 - - - - - x - 7745 - - - - - x - 7746 - - - - - x - 7747 - - - - - x - 7748 - - - - - x - 7749 - - - - - x - 7750 - - - - - x - 7751 - - - - - x - 7752 - - - - - x - 7753 - - - - - x - 7754 - - - - - x - 7755 - - - - - x - 7756 - - - - - x - 7757 - - - - - x - 7758 - - - - - x - 7759 - - - - - x - 7760 - - - - - x - 7761 - - - - - x - 7762 - - - - - x - 7763 - - - - - x - 7764 - - - - - x - 7765 - - - - - x - 7766 - - - - - x - 7767 - - - - - x - 7768 - - - - - x - 7769 - - - - - x - 7770 - - - - - x - 7771 - - - - - x - 7772 - - - - - x - 7773 - - - - - x - 7774 - - - - - x - 7775 - - - - - x - 7776 - - - - - x - 7777 - - - - - x - 7778 - - - - - x - 7779 - - - - - x - 7780 - - - - - x - 7781 - - - - - x - 7782 - - - - - x - 7783 - - - - - x - 7784 - - - - - x - 7785 - - - - - x - 7786 - - - - - x - 7787 - - - - - x - 7788 - - - - - x - 7789 - - - - - x - 7790 - - - - - x - 7791 - - - - - x - 7792 - - - - - x - 7793 - - - - - x - 7794 - - - - - x - 7795 - - - - - x - 7796 - - - - - x - 7797 - - - - - x - 7798 - - - - - x - 7799 - - - - - x - 7800 - - - - - x - 7801 - - - - - x - 7802 - - - - - x - 7803 - - - - - x - 7804 - - - - - x - 7805 - - - - - x - 7806 - - - - - x - 7807 - - - - - x - 7808 - - - - - x - 7809 - - - - - x - 7810 - - - - - x - 7811 - - - - - x - 7812 - - - - - x - 7813 - - - - - x - 7814 - - - - - x - 7815 - - - - - x - 7816 - - - - - x - 7817 - - - - - x - 7818 - - - - - x - 7819 - - - - - x - 7820 - - - - - x - 7821 - - - - - x - 7822 - - - - - x - 7823 - - - - - x - 7824 - - - - - x - 7825 - - - - - x - 7826 - - - - - x - 7827 - - - - - x - 7828 - - - - - x - 7829 - - - - - x - 7830 - - - - - x - 7831 - - - - - x - 7832 - - - - - x - 7833 - - - - - x - 7834 - - - - - x - 7835 - - - - - x - 7836 - - - - - x - 7837 - - - - - x - 7838 - - - - - x - 7839 - - - - - x - 7840 - - - - - x - 7841 - - - - - x - 7842 - - - - - x - 7843 - - - - - x - 7844 - - - - - x - 7845 - - - - - x - 7846 - - - - - x - 7847 - - - - - x - 7848 - - - - - x - 7849 - - - - - x - 7850 - - - - - x - 7851 - - - - - x - 7852 - - - - - x - 7853 - - - - - x - 7854 - - - - - x - 7855 - - - - - x - 7856 - - - - - x - 7857 - - - - - x - 7858 - - - - - x - 7859 - - - - - x - 7860 - - - - - x - 7861 - - - - - x - 7862 - - - - - x - 7863 - - - - - x - 7864 - - - - - x - 7865 - - - - - x - 7866 - - - - - x - 7867 - - - - - x - 7868 - - - - - x - 7869 - - - - - x - 7870 - - - - - x - 7871 - - - - - x - 7872 - - - - - x - 7873 - - - - - x - 7874 - - - - - x - 7875 - - - - - x - 7876 - - - - - x - 7877 - - - - - x - 7878 - - - - - x - 7879 - - - - - x - 7880 - - - - - x - 7881 - - - - - x - 7882 - - - - - x - 7883 - - - - - x - 7884 - - - - - x - 7885 - - - - - x - 7886 - - - - - x - 7887 - - - - - x - 7888 - - - - - x - 7889 - - - - - x - 7890 - - - - - x - 7891 - - - - - x - 7892 - - - - - x - 7893 - - - - - x - 7894 - - - - - x - 7895 - - - - - x - 7896 - - - - - x - 7897 - - - - - x - 7898 - - - - - x - 7899 - - - - - x - 7900 - - - - - x - 7901 - - - - - x - 7902 - - - - - x - 7903 - - - - - x - 7904 - - - - - x - 7905 - - - - - x - 7906 - - - - - x - 7907 - - - - - x - 7908 - - - - - x - 7909 - - - - - x - 7910 - - - - - x - 7911 - - - - - x - 7912 - - - - - x - 7913 - - - - - x - 7914 - - - - - x - 7915 - - - - - x - 7916 - - - - - x - 7917 - - - - - x - 7918 - - - - - x - 7919 - - - - - x - 7920 - - - - - x - 7921 - - - - - x - 7922 - - - - - x - 7923 - - - - - x - 7924 - - - - - x - 7925 - - - - - x - 7926 - - - - - x - 7927 - - - - - x - 7928 - - - - - x - 7929 - - - - - x - 7930 - - - - - x - 7931 - - - - - x - 7932 - - - - - x - 7933 - - - - - x - 7934 - - - - - x - 7935 - - - - - x - 7936 - - - - - x - 7937 - - - - - x - 7938 - - - - - x - 7939 - - - - - x - 7940 - - - - - x - 7941 - - - - - x - 7942 - - - - - x - 7943 - - - - - x - 7944 - - - - - x - 7945 - - - - - x - 7946 - - - - - x - 7947 - - - - - x - 7948 - - - - - x - 7949 - - - - - x - 7950 - - - - - x - 7951 - - - - - x - 7952 - - - - - x - 7953 - - - - - x - 7954 - - - - - x - 7955 - - - - - x - 7956 - - - - - x - 7957 - - - - - x - 7958 - - - - - x - 7959 - - - - - x - 7960 - - - - - x - 7961 - - - - - x - 7962 - - - - - x - 7963 - - - - - x - 7964 - - - - - x - 7965 - - - - - x - 7966 - - - - - x - 7967 - - - - - x - 7968 - - - - - x - 7969 - - - - - x - 7970 - - - - - x - 7971 - - - - - x - 7972 - - - - - x - 7973 - - - - - x - 7974 - - - - - x - 7975 - - - - - x - 7976 - - - - - x - 7977 - - - - - x - 7978 - - - - - x - 7979 - - - - - x - 7980 - - - - - x - 7981 - - - - - x - 7982 - - - - - x - 7983 - - - - - x - 7984 - - - - - x - 7985 - - - - - x - 7986 - - - - - x - 7987 - - - - - x - 7988 - - - - - x - 7989 - - - - - x - 7990 - - - - - x - 7991 - - - - - x - 7992 - - - - - x - 7993 - - - - - x - 7994 - - - - - x - 7995 - - - - - x - 7996 - - - - - x - 7997 - - - - - x - 7998 - - - - - x - 7999 - - - - - x - 8000 - - - - - x - 8001 - - - - - x - 8002 - - - - - x - 8003 - - - - - x - 8004 - - - - - x - 8005 - - - - - x - 8006 - - - - - x - 8007 - - - - - x - 8008 - - - - - x - 8009 - - - - - x - 8010 - - - - - x - 8011 - - - - - x - 8012 - - - - - x - 8013 - - - - - x - 8014 - - - - - x - 8015 - - - - - x - 8016 - - - - - x - 8017 - - - - - x - 8018 - - - - - x - 8019 - - - - - x - 8020 - - - - - x - 8021 - - - - - x - 8022 - - - - - x - 8023 - - - - - x - 8024 - - - - - x - 8025 - - - - - x - 8026 - - - - - x - 8027 - - - - - x - 8028 - - - - - x - 8029 - - - - - x - 8030 - - - - - x - 8031 - - - - - x - 8032 - - - - - x - 8033 - - - - - x - 8034 - - - - - x - 8035 - - - - - x - 8036 - - - - - x - 8037 - - - - - x - 8038 - - - - - x - 8039 - - - - - x - 8040 - - - - - x - 8041 - - - - - x - 8042 - - - - - x - 8043 - - - - - x - 8044 - - - - - x - 8045 - - - - - x - 8046 - - - - - x - 8047 - - - - - x - 8048 - - - - - x - 8049 - - - - - x - 8050 - - - - - x - 8051 - - - - - x - 8052 - - - - - x - 8053 - - - - - x - 8054 - - - - - x - 8055 - - - - - x - 8056 - - - - - x - 8057 - - - - - x - 8058 - - - - - x - 8059 - - - - - x - 8060 - - - - - x - 8061 - - - - - x - 8062 - - - - - x - 8063 - - - - - x - 8064 - - - - - x - 8065 - - - - - x - 8066 - - - - - x - 8067 - - - - - x - 8068 - - - - - x - 8069 - - - - - x - 8070 - - - - - x - 8071 - - - - - x - 8072 - - - - - x - 8073 - - - - - x - 8074 - - - - - x - 8075 - - - - - x - 8076 - - - - - x - 8077 - - - - - x - 8078 - - - - - x - 8079 - - - - - x - 8080 - - - - - x - 8081 - - - - - x - 8082 - - - - - x - 8083 - - - - - x - 8084 - - - - - x - 8085 - - - - - x - 8086 - - - - - x - 8087 - - - - - x - 8088 - - - - - x - 8089 - - - - - x - 8090 - - - - - x - 8091 - - - - - x - 8092 - - - - - x - 8093 - - - - - x - 8094 - - - - - x - 8095 - - - - - x - 8096 - - - - - x - 8097 - - - - - x - 8098 - - - - - x - 8099 - - - - - x - 8100 - - - - - x - 8101 - - - - - x - 8102 - - - - - x - 8103 - - - - - x - 8104 - - - - - x - 8105 - - - - - x - 8106 - - - - - x - 8107 - - - - - x - 8108 - - - - - x - 8109 - - - - - x - 8110 - - - - - x - 8111 - - - - - x - 8112 - - - - - x - 8113 - - - - - x - 8114 - - - - - x - 8115 - - - - - x - 8116 - - - - - x - 8117 - - - - - x - 8118 - - - - - x - 8119 - - - - - x - 8120 - - - - - x - 8121 - - - - - x - 8122 - - - - - x - 8123 - - - - - x - 8124 - - - - - x - 8125 - - - - - x - 8126 - - - - - x - 8127 - - - - - x - 8128 - - - - - x - 8129 - - - - - x - 8130 - - - - - x - 8131 - - - - - x - 8132 - - - - - x - 8133 - - - - - x - 8134 - - - - - x - 8135 - - - - - x - 8136 - - - - - x - 8137 - - - - - x - 8138 - - - - - x - 8139 - - - - - x - 8140 - - - - - x - 8141 - - - - - x - 8142 - - - - - x - 8143 - - - - - x - 8144 - - - - - x - 8145 - - - - - x - 8146 - - - - - x - 8147 - - - - - x - 8148 - - - - - x - 8149 - - - - - x - 8150 - - - - - x - 8151 - - - - - x - 8152 - - - - - x - 8153 - - - - - x - 8154 - - - - - x - 8155 - - - - - x - 8156 - - - - - x - 8157 - - - - - x - 8158 - - - - - x - 8159 - - - - - x - 8160 - - - - - x - 8161 - - - - - x - 8162 - - - - - x - 8163 - - - - - x - 8164 - - - - - x - 8165 - - - - - x - 8166 - - - - - x - 8167 - - - - - x - 8168 - - - - - x - 8169 - - - - - x - 8170 - - - - - x - 8171 - - - - - x - 8172 - - - - - x - 8173 - - - - - x - 8174 - - - - - x - 8175 - - - - - x - 8176 - - - - - x - 8177 - - - - - x - 8178 - - - - - x - 8179 - - - - - x - 8180 - - - - - x - 8181 - - - - - x - 8182 - - - - - x - 8183 - - - - - x - 8184 - - - - - x - 8185 - - - - - x - 8186 - - - - - x - 8187 - - - - - x - 8188 - - - - - x - 8189 - - - - - x - 8190 - - - - - x - 8191 - - - - - x - 8192 - - - - - - - - x - - - x1 - - - - - x1 - - x - 1 - - - - - - - - x - - - - x - 0 - - - - - diff --git a/tools/deep_bench/scripts/benchsistency.py b/tools/deep_bench/scripts/benchsistency.py index e4d11851f..446e2c60c 100755 --- a/tools/deep_bench/scripts/benchsistency.py +++ b/tools/deep_bench/scripts/benchsistency.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python2 from __future__ import print_function import os from tabulate import tabulate @@ -22,21 +22,23 @@ def plausible_root(path): def list_benchmarks(path): - tail = os.path.split(path)[1].lower() + dirname = os.path.split(path)[1].lower() for entry in os.listdir(path): - if tail == STD_SMT2_BENCH_DIR: + if entry[0] == '.': + continue + if dirname == STD_SMT2_BENCH_DIR: name, ext = os.path.splitext(entry) if ext == '.smt2': yield name - elif tail == STD_ICE_BENCH_DIR: + elif dirname == STD_ICE_BENCH_DIR: name, ext = os.path.splitext(entry) if ext == '.bpl': yield name - elif tail == STD_MCMC_BENCH_DIR: + elif dirname == STD_MCMC_BENCH_DIR: if os.path.isdir(path): yield entry else: - raise ValueError("%s is of unrecognized typed" % tail) + raise ValueError("%s is of unrecognized typed" % dirname) def main(): @@ -53,7 +55,7 @@ def main(): sorted_keys = list(sorted(found.keys())) table = [[b] + [u'\u2713' if b in found[a] else '' for a in sorted_keys] - for b in all_benchs] + for b in sorted(all_benchs)] print(tabulate(table, headers=[]+sorted_keys)) From 18230fadba6c70a751a509fe69f6e76f44ae186b Mon Sep 17 00:00:00 2001 From: Sam Kaufman Date: Thu, 22 Feb 2018 13:14:01 -0500 Subject: [PATCH 063/236] dillig10 maps more closely to .c Bit harder. No longer inlines assumption about w0 being {0, 1} --- bench_horn/dillig10.smt2 | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bench_horn/dillig10.smt2 b/bench_horn/dillig10.smt2 index 60e6d47e7..cefa99fd4 100644 --- a/bench_horn/dillig10.smt2 +++ b/bench_horn/dillig10.smt2 @@ -16,8 +16,8 @@ (rule (=> (and (inv z0 x0 y0 w0) - (= x1 (ite (= w0 1) (+ x0 1) x0)) - (= w1 (ite (= w0 1) 0 w0)) + (= x1 (ite (= w0 0) x0 (+ x0 1))) + (= w1 (ite (= w0 0) w0 (- 1 w0))) (= y1 (ite (= z0 0) (+ y0 1) y0)) (= z1 (ite (= z0 0) 1 z0)) ) From 41227e652bbce5620d9d94d5973ebdd84df110db Mon Sep 17 00:00:00 2001 From: Sam Kaufman Date: Thu, 22 Feb 2018 13:27:08 -0500 Subject: [PATCH 064/236] dillig15 fix --- bench_horn/dillig15.smt2 | 2 +- bench_horn_ice/dillig10.bpl | 24 +++++++++++++++++ bench_horn_ice/dillig13.bpl | 23 ++++++++++++++++ bench_horn_ice/dillig14.bpl | 26 +++++++++++++++++++ ...samples_search_05.bpl => s_mutants_05.bpl} | 0 .../{samples_only_04.bpl => s_mutants_23.bpl} | 0 .../{samples_only_01.bpl => s_seeds_01.bpl} | 0 .../{samples_only_02.bpl => s_seeds_02.bpl} | 0 .../{samples_only_03.bpl => s_seeds_03.bpl} | 0 .../{samples_only_05.bpl => s_seeds_05.bpl} | 0 .../{samples_only_06.bpl => s_seeds_06.bpl} | 0 .../{samples_only_07.bpl => s_seeds_07.bpl} | 0 .../{samples_only_08.bpl => s_seeds_08.bpl} | 0 .../samples_multiple_inv_01.bpl | 0 .../samples_multiple_inv_02.bpl | 0 .../samples_multiple_inv_03.bpl | 0 .../samples_multiple_inv_04.bpl | 0 17 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 bench_horn_ice/dillig10.bpl create mode 100644 bench_horn_ice/dillig13.bpl create mode 100644 bench_horn_ice/dillig14.bpl rename bench_horn_ice/{samples_search_05.bpl => s_mutants_05.bpl} (100%) rename bench_horn_ice/{samples_only_04.bpl => s_mutants_23.bpl} (100%) rename bench_horn_ice/{samples_only_01.bpl => s_seeds_01.bpl} (100%) rename bench_horn_ice/{samples_only_02.bpl => s_seeds_02.bpl} (100%) rename bench_horn_ice/{samples_only_03.bpl => s_seeds_03.bpl} (100%) rename bench_horn_ice/{samples_only_05.bpl => s_seeds_05.bpl} (100%) rename bench_horn_ice/{samples_only_06.bpl => s_seeds_06.bpl} (100%) rename bench_horn_ice/{samples_only_07.bpl => s_seeds_07.bpl} (100%) rename bench_horn_ice/{samples_only_08.bpl => s_seeds_08.bpl} (100%) rename {bench_horn_ice => bench_horn_multiple_ice}/samples_multiple_inv_01.bpl (100%) rename {bench_horn_ice => bench_horn_multiple_ice}/samples_multiple_inv_02.bpl (100%) rename {bench_horn_ice => bench_horn_multiple_ice}/samples_multiple_inv_03.bpl (100%) rename {bench_horn_ice => bench_horn_multiple_ice}/samples_multiple_inv_04.bpl (100%) diff --git a/bench_horn/dillig15.smt2 b/bench_horn/dillig15.smt2 index 0b79192b5..7b8b15798 100644 --- a/bench_horn/dillig15.smt2 +++ b/bench_horn/dillig15.smt2 @@ -8,7 +8,7 @@ (declare-rel fail ()) -(rule (=> (and (>= n 1) (>= k n) (= j 0)) (itp j k n))) +(rule (=> (and (>= n 1) (> k n) (= j 0)) (itp j k n))) (rule (=> (and diff --git a/bench_horn_ice/dillig10.bpl b/bench_horn_ice/dillig10.bpl new file mode 100644 index 000000000..064745643 --- /dev/null +++ b/bench_horn_ice/dillig10.bpl @@ -0,0 +1,24 @@ +// dilig-benchmarks/single/10.c +procedure main() { + var w,z,x,y : int; + + w := 1; + z := 0; + x := 0; + y := 0; + + while(*) +// invariant x == y && w == 1-z; + { + if (w != 0) { + x := x + 1; + w := 1 - w; + } + + if (z == 0) { + y := y + 1; + z := 1 - z; + } + } + assert(x==y); +} diff --git a/bench_horn_ice/dillig13.bpl b/bench_horn_ice/dillig13.bpl new file mode 100644 index 000000000..02f53272d --- /dev/null +++ b/bench_horn_ice/dillig13.bpl @@ -0,0 +1,23 @@ +// dilig-benchmarks/single/13.c +/* + * Based on "Property-Directed Incremental Invariant Generation" by Bradley et al. + */ + +procedure main() { + var flag, j, k : int; + + j := 2; + k := 0; + + while(*) + //invariant ((flag != 0) ==> k == 0) && ((flag == 0) ==> (j == 2*k+2)); + { + if (flag != 0) { + j := j + 4; + } else { + j := j + 2; + k := k + 1; + } + } + assert(k != 0 ==> (j==2*k+2)); +} diff --git a/bench_horn_ice/dillig14.bpl b/bench_horn_ice/dillig14.bpl new file mode 100644 index 000000000..bf834141d --- /dev/null +++ b/bench_horn_ice/dillig14.bpl @@ -0,0 +1,26 @@ +// dilig-benchmarks/single/14.c +/* + * From "The Octagon Abstract Domain" HOSC 2006 by Mine. + */ + +procedure main() { + var a,j,m : int; + + a := 0; + j := 1; + + assume(m>0); + while (j <= m) + // invariant a < j && a > -j && m > 0 && j <= m+1 + { + if (*) { + a := a + 1; + } else { + a := a - 1; + } + j := j + 1; + } + + assert(a >= -m); + assert(a <= m); +} diff --git a/bench_horn_ice/samples_search_05.bpl b/bench_horn_ice/s_mutants_05.bpl similarity index 100% rename from bench_horn_ice/samples_search_05.bpl rename to bench_horn_ice/s_mutants_05.bpl diff --git a/bench_horn_ice/samples_only_04.bpl b/bench_horn_ice/s_mutants_23.bpl similarity index 100% rename from bench_horn_ice/samples_only_04.bpl rename to bench_horn_ice/s_mutants_23.bpl diff --git a/bench_horn_ice/samples_only_01.bpl b/bench_horn_ice/s_seeds_01.bpl similarity index 100% rename from bench_horn_ice/samples_only_01.bpl rename to bench_horn_ice/s_seeds_01.bpl diff --git a/bench_horn_ice/samples_only_02.bpl b/bench_horn_ice/s_seeds_02.bpl similarity index 100% rename from bench_horn_ice/samples_only_02.bpl rename to bench_horn_ice/s_seeds_02.bpl diff --git a/bench_horn_ice/samples_only_03.bpl b/bench_horn_ice/s_seeds_03.bpl similarity index 100% rename from bench_horn_ice/samples_only_03.bpl rename to bench_horn_ice/s_seeds_03.bpl diff --git a/bench_horn_ice/samples_only_05.bpl b/bench_horn_ice/s_seeds_05.bpl similarity index 100% rename from bench_horn_ice/samples_only_05.bpl rename to bench_horn_ice/s_seeds_05.bpl diff --git a/bench_horn_ice/samples_only_06.bpl b/bench_horn_ice/s_seeds_06.bpl similarity index 100% rename from bench_horn_ice/samples_only_06.bpl rename to bench_horn_ice/s_seeds_06.bpl diff --git a/bench_horn_ice/samples_only_07.bpl b/bench_horn_ice/s_seeds_07.bpl similarity index 100% rename from bench_horn_ice/samples_only_07.bpl rename to bench_horn_ice/s_seeds_07.bpl diff --git a/bench_horn_ice/samples_only_08.bpl b/bench_horn_ice/s_seeds_08.bpl similarity index 100% rename from bench_horn_ice/samples_only_08.bpl rename to bench_horn_ice/s_seeds_08.bpl diff --git a/bench_horn_ice/samples_multiple_inv_01.bpl b/bench_horn_multiple_ice/samples_multiple_inv_01.bpl similarity index 100% rename from bench_horn_ice/samples_multiple_inv_01.bpl rename to bench_horn_multiple_ice/samples_multiple_inv_01.bpl diff --git a/bench_horn_ice/samples_multiple_inv_02.bpl b/bench_horn_multiple_ice/samples_multiple_inv_02.bpl similarity index 100% rename from bench_horn_ice/samples_multiple_inv_02.bpl rename to bench_horn_multiple_ice/samples_multiple_inv_02.bpl diff --git a/bench_horn_ice/samples_multiple_inv_03.bpl b/bench_horn_multiple_ice/samples_multiple_inv_03.bpl similarity index 100% rename from bench_horn_ice/samples_multiple_inv_03.bpl rename to bench_horn_multiple_ice/samples_multiple_inv_03.bpl diff --git a/bench_horn_ice/samples_multiple_inv_04.bpl b/bench_horn_multiple_ice/samples_multiple_inv_04.bpl similarity index 100% rename from bench_horn_ice/samples_multiple_inv_04.bpl rename to bench_horn_multiple_ice/samples_multiple_inv_04.bpl From 3f32142a66b90af74f7ba4807eb07f58b7d27309 Mon Sep 17 00:00:00 2001 From: Sam Kaufman Date: Thu, 22 Feb 2018 14:57:25 -0500 Subject: [PATCH 065/236] A bunch more ICE/Boogie benchmarks --- bench_horn_ice/abdu_04.bpl | 22 ++++++++ bench_horn_ice/dillig01.bpl | 16 ++++++ bench_horn_ice/dillig02.bpl | 28 ++++++++++ bench_horn_ice/dillig04.bpl | 19 +++++++ bench_horn_ice/dillig05.bpl | 22 ++++++++ bench_horn_ice/dillig07.bpl | 24 ++++++++ bench_horn_ice/dillig08.bpl | 29 ++++++++++ bench_horn_ice/dillig15.bpl | 16 ++++++ bench_horn_ice/dillig16.bpl | 21 +++++++ bench_horn_ice/dillig18.bpl | 24 ++++++++ bench_horn_ice/dillig19.bpl | 18 ++++++ bench_horn_ice/dillig20-1.bpl | 30 ++++++++++ bench_horn_ice/dillig20-2.bpl | 30 ++++++++++ bench_horn_ice/dillig20-3.bpl | 30 ++++++++++ bench_horn_ice/dillig21.bpl | 33 +++++++++++ bench_horn_ice/dillig22.bpl | 23 ++++++++ bench_horn_ice/dillig37.bpl | 22 ++++++++ bench_horn_ice/dillig41.bpl | 33 +++++++++++ bench_horn_ice/dillig42.bpl | 56 +++++++++++++++++++ bench_horn_ice/dillig43.bpl | 27 +++++++++ bench_horn_ice/dillig44.bpl | 34 +++++++++++ bench_horn_ice/dillig46.bpl | 27 +++++++++ bench_horn_ice/formula22.bpl | 44 +++++++++++++++ bench_horn_ice/formula25.bpl | 44 +++++++++++++++ bench_horn_ice/formula27.bpl | 31 ++++++++++ bench_horn_ice/gj2007_true-unreach-call.bpl | 21 +++++++ bench_horn_ice/half_true_modif.bpl | 20 +++++++ bench_horn_ice/half_true_orig.bpl | 19 +++++++ ...arch_disj_ite_01.bpl => s_disj_ite_01.bpl} | 0 ...arch_disj_ite_02.bpl => s_disj_ite_02.bpl} | 0 ...arch_disj_ite_03.bpl => s_disj_ite_03.bpl} | 0 ...arch_disj_ite_04.bpl => s_disj_ite_04.bpl} | 0 ...arch_disj_ite_05.bpl => s_disj_ite_05.bpl} | 0 ...arch_disj_ite_06.bpl => s_disj_ite_06.bpl} | 0 ...samples_search_01.bpl => s_mutants_01.bpl} | 0 ...samples_search_02.bpl => s_mutants_02.bpl} | 0 ...samples_search_03.bpl => s_mutants_03.bpl} | 0 ...samples_search_04.bpl => s_mutants_04.bpl} | 0 ...samples_search_06.bpl => s_mutants_06.bpl} | 0 ...samples_search_07.bpl => s_mutants_07.bpl} | 0 ...samples_search_08.bpl => s_mutants_08.bpl} | 0 ...samples_search_09.bpl => s_mutants_09.bpl} | 0 ...samples_search_10.bpl => s_mutants_10.bpl} | 0 ...samples_search_11.bpl => s_mutants_11.bpl} | 0 ...samples_search_12.bpl => s_mutants_12.bpl} | 0 ...samples_search_13.bpl => s_mutants_13.bpl} | 0 ...samples_search_14.bpl => s_mutants_14.bpl} | 0 ...samples_search_15.bpl => s_mutants_15.bpl} | 0 ...hrink_big_numbers_1024.bpl => sn_1024.bpl} | 0 ...hrink_big_numbers_2048.bpl => sn_2048.bpl} | 0 ...hrink_big_numbers_4096.bpl => sn_4096.bpl} | 0 ...hrink_big_numbers_8192.bpl => sn_8192.bpl} | 0 52 files changed, 763 insertions(+) create mode 100644 bench_horn_ice/abdu_04.bpl create mode 100644 bench_horn_ice/dillig01.bpl create mode 100644 bench_horn_ice/dillig02.bpl create mode 100644 bench_horn_ice/dillig04.bpl create mode 100644 bench_horn_ice/dillig05.bpl create mode 100644 bench_horn_ice/dillig07.bpl create mode 100644 bench_horn_ice/dillig08.bpl create mode 100644 bench_horn_ice/dillig15.bpl create mode 100644 bench_horn_ice/dillig16.bpl create mode 100644 bench_horn_ice/dillig18.bpl create mode 100644 bench_horn_ice/dillig19.bpl create mode 100644 bench_horn_ice/dillig20-1.bpl create mode 100644 bench_horn_ice/dillig20-2.bpl create mode 100644 bench_horn_ice/dillig20-3.bpl create mode 100644 bench_horn_ice/dillig21.bpl create mode 100644 bench_horn_ice/dillig22.bpl create mode 100644 bench_horn_ice/dillig37.bpl create mode 100644 bench_horn_ice/dillig41.bpl create mode 100644 bench_horn_ice/dillig42.bpl create mode 100644 bench_horn_ice/dillig43.bpl create mode 100644 bench_horn_ice/dillig44.bpl create mode 100644 bench_horn_ice/dillig46.bpl create mode 100644 bench_horn_ice/formula22.bpl create mode 100644 bench_horn_ice/formula25.bpl create mode 100644 bench_horn_ice/formula27.bpl create mode 100644 bench_horn_ice/gj2007_true-unreach-call.bpl create mode 100644 bench_horn_ice/half_true_modif.bpl create mode 100644 bench_horn_ice/half_true_orig.bpl rename bench_horn_ice/{samples_search_disj_ite_01.bpl => s_disj_ite_01.bpl} (100%) rename bench_horn_ice/{samples_search_disj_ite_02.bpl => s_disj_ite_02.bpl} (100%) rename bench_horn_ice/{samples_search_disj_ite_03.bpl => s_disj_ite_03.bpl} (100%) rename bench_horn_ice/{samples_search_disj_ite_04.bpl => s_disj_ite_04.bpl} (100%) rename bench_horn_ice/{samples_search_disj_ite_05.bpl => s_disj_ite_05.bpl} (100%) rename bench_horn_ice/{samples_search_disj_ite_06.bpl => s_disj_ite_06.bpl} (100%) rename bench_horn_ice/{samples_search_01.bpl => s_mutants_01.bpl} (100%) rename bench_horn_ice/{samples_search_02.bpl => s_mutants_02.bpl} (100%) rename bench_horn_ice/{samples_search_03.bpl => s_mutants_03.bpl} (100%) rename bench_horn_ice/{samples_search_04.bpl => s_mutants_04.bpl} (100%) rename bench_horn_ice/{samples_search_06.bpl => s_mutants_06.bpl} (100%) rename bench_horn_ice/{samples_search_07.bpl => s_mutants_07.bpl} (100%) rename bench_horn_ice/{samples_search_08.bpl => s_mutants_08.bpl} (100%) rename bench_horn_ice/{samples_search_09.bpl => s_mutants_09.bpl} (100%) rename bench_horn_ice/{samples_search_10.bpl => s_mutants_10.bpl} (100%) rename bench_horn_ice/{samples_search_11.bpl => s_mutants_11.bpl} (100%) rename bench_horn_ice/{samples_search_12.bpl => s_mutants_12.bpl} (100%) rename bench_horn_ice/{samples_search_13.bpl => s_mutants_13.bpl} (100%) rename bench_horn_ice/{samples_search_14.bpl => s_mutants_14.bpl} (100%) rename bench_horn_ice/{samples_search_15.bpl => s_mutants_15.bpl} (100%) rename bench_horn_ice/{samples_shrink_big_numbers_1024.bpl => sn_1024.bpl} (100%) rename bench_horn_ice/{samples_shrink_big_numbers_2048.bpl => sn_2048.bpl} (100%) rename bench_horn_ice/{samples_shrink_big_numbers_4096.bpl => sn_4096.bpl} (100%) rename bench_horn_ice/{samples_shrink_big_numbers_8192.bpl => sn_8192.bpl} (100%) diff --git a/bench_horn_ice/abdu_04.bpl b/bench_horn_ice/abdu_04.bpl new file mode 100644 index 000000000..0f2978e60 --- /dev/null +++ b/bench_horn_ice/abdu_04.bpl @@ -0,0 +1,22 @@ +procedure main() +{ + var x, a, b, len: int; + + x := 0; + a := 0; + b := 0; + assume len >= 0; + + while (*) { + x := x + 1; + if (*) { + a := a + 1; + b := b + 2; + } else { + a := a + 2; + b := b + 1; + } + } + + assert((a + b) == (x * 3)); +} \ No newline at end of file diff --git a/bench_horn_ice/dillig01.bpl b/bench_horn_ice/dillig01.bpl new file mode 100644 index 000000000..4df9fb022 --- /dev/null +++ b/bench_horn_ice/dillig01.bpl @@ -0,0 +1,16 @@ +procedure run() +{ + var x, y, t1, t2, count, n: int; + x := 1; + y := 1; + + while (*) + // invariant x == y && x >= 1; + { + t1 := x; + t2 := y; + x := t1 + t2; + y := t1 + t2; + } + assert (y>=1); +} diff --git a/bench_horn_ice/dillig02.bpl b/bench_horn_ice/dillig02.bpl new file mode 100644 index 000000000..a8ac15cae --- /dev/null +++ b/bench_horn_ice/dillig02.bpl @@ -0,0 +1,28 @@ +procedure run(k0: int) +{ + var i, j, z, x, y, w, k: int; + + i := 1; + j := 0; + z := i - j; + x := 0; + y := 0; + w := 0; + k := k0; + + while(k > 0) + // invariant z - (z div 2)*2 == 1 && w - (w div 2)*2 == 0 && x == y; + { + z := z + x + y + w; + y := y + 1; + + if(z - (z div 2) * 2 == 1) + { + x := x + 1; + } + w := w + 2; + k := k - 1; + } + + assert(x==y); +} diff --git a/bench_horn_ice/dillig04.bpl b/bench_horn_ice/dillig04.bpl new file mode 100644 index 000000000..9adff30e9 --- /dev/null +++ b/bench_horn_ice/dillig04.bpl @@ -0,0 +1,19 @@ +// dilig-benchmarks/single/04.c +/* + * Taken from Gulwani PLDI'08: + * Program Analysis as Constraint Solving + */ + +procedure main() { + var x,y: int; + + x := -50; + + while( x < 0 ) + // invariant (y<=0) ==> x<0 ; + { + x := x+y; + y := y + 1; + } + assert(y>0); +} diff --git a/bench_horn_ice/dillig05.bpl b/bench_horn_ice/dillig05.bpl new file mode 100644 index 000000000..a20b1a111 --- /dev/null +++ b/bench_horn_ice/dillig05.bpl @@ -0,0 +1,22 @@ +procedure run(flag: int) +{ + var x, y, i, j: int; + x := 0; + y := 0; + j := 0; + i := 0; + + while(*) + // invariant x == y && ((flag != 0) ==> j == i) && ((flag == 0) ==> j == x+i); + { + x := x + 1; + y := y + 1; + i := i + x; + j := j + y; + + if(flag == 0) { + j := j + 1; + } + } + assert(j>=i); +} diff --git a/bench_horn_ice/dillig07.bpl b/bench_horn_ice/dillig07.bpl new file mode 100644 index 000000000..ab80b4f8b --- /dev/null +++ b/bench_horn_ice/dillig07.bpl @@ -0,0 +1,24 @@ +// dilig-benchmarks/single/07.c +/* + * From "Path Invariants" PLDI 07 by Beyer et al. + */ + +procedure main() { + + var i,n,a,b: int; + assume( n >= 0 ); + i := 0; a := 0; b := 0; + while( i < n ) + // invariant a+b==3*i && i <= n; + { + if(*) { + a := a+1; + b := b+2; + } else { + a := a+2; + b := b+1; + } + i := i+1; + } + assert( a+b == 3*n ); +} diff --git a/bench_horn_ice/dillig08.bpl b/bench_horn_ice/dillig08.bpl new file mode 100644 index 000000000..0dfb59a4a --- /dev/null +++ b/bench_horn_ice/dillig08.bpl @@ -0,0 +1,29 @@ +// dilig-benchmarks/single/08.c +/* + * Based on "Automatically refining abstract interpretations" fig.1 + */ + +procedure main() { + var x,y : int; + x := 0; + y := 0; + while(*) + //invariant (x>=1 ==> y >= 100); + { + if(*){ + x := x + 1; + y := y + 100; + } + else if (*){ + if (x >= 4) { + x := x + 1; + y := y + 1; + } + if (x < 0){ + y := y - 1; + } + } + + } + assert(x < 4 || y > 2); +} diff --git a/bench_horn_ice/dillig15.bpl b/bench_horn_ice/dillig15.bpl new file mode 100644 index 000000000..8aa02cd0b --- /dev/null +++ b/bench_horn_ice/dillig15.bpl @@ -0,0 +1,16 @@ +procedure run(n: int) { + var j, k: int; + + assume n > 0; + assume k > n; + + j := 0; + + while( j < n ) + // invariant j + k > n && j <= n; + { + j := j + 1; + k := k - 1; + } + assert k >= 0; +} diff --git a/bench_horn_ice/dillig16.bpl b/bench_horn_ice/dillig16.bpl new file mode 100644 index 000000000..d06f6c654 --- /dev/null +++ b/bench_horn_ice/dillig16.bpl @@ -0,0 +1,21 @@ +// ../dilig-benchmarks/single/16.c +/* + * From "A Practical and Complete Approach to Predicate Refinement" by McMillan TACAS'06 + */ + +procedure main() +{ + var i,j, x,y: int; + + x := i; + y := j; + + while(x!=0) + // invariant x-y == i-j; + { + x := x - 1; + y := y - 1; + } + assert((i==j) ==> y==0); +} + diff --git a/bench_horn_ice/dillig18.bpl b/bench_horn_ice/dillig18.bpl new file mode 100644 index 000000000..bc4bdebfb --- /dev/null +++ b/bench_horn_ice/dillig18.bpl @@ -0,0 +1,24 @@ +// dilig-benchmarks/single/18.c +/* + * Adapted from ex17.c in NECLA test suite + */ + +procedure main() { + var flag, a, b, j : int; + + j := 0; + b := 0; + + while(b < 100) + // invariant (flag != 0 ==> j == b) && b <= 100; + { + if (flag != 0) { + j := j +1; + } + + b := b + 1; + } + + + assert((flag != 0) ==> j==100); +} diff --git a/bench_horn_ice/dillig19.bpl b/bench_horn_ice/dillig19.bpl new file mode 100644 index 000000000..69794ecdc --- /dev/null +++ b/bench_horn_ice/dillig19.bpl @@ -0,0 +1,18 @@ +procedure run(n: int, m: int) +{ + var x,y: int; + assume n>=0; + assume m>=0; + assume m y == m) && (x > m ==> x == y) && n >= 0 && m >= 0 && m < n && x <= n; + { + x := x+1; + if(x>m) { + y := y+1; + } + } + assert y==n; +} diff --git a/bench_horn_ice/dillig20-1.bpl b/bench_horn_ice/dillig20-1.bpl new file mode 100644 index 000000000..a6e95f96e --- /dev/null +++ b/bench_horn_ice/dillig20-1.bpl @@ -0,0 +1,30 @@ +// dilig-benchmarks/single/20.c +procedure main() +{ + var x,y,k,j,i,n,m : int; + + assume((x+y)== k); + m := 0; + j := 0; + while(j= 0 && j >= 0 && (n>0 ==> m < n); + { + if(j==i) + { + x:=x+1; + y:=y-1; + }else + { + y:=y+1; + x:=x-1; + } + + if(*) { + m := j; + } + + j := j + 1; + } + + assert((x+y)== k); +} diff --git a/bench_horn_ice/dillig20-2.bpl b/bench_horn_ice/dillig20-2.bpl new file mode 100644 index 000000000..6b93c5baf --- /dev/null +++ b/bench_horn_ice/dillig20-2.bpl @@ -0,0 +1,30 @@ +// dilig-benchmarks/single/20.c +procedure main() +{ + var x,y,k,j,i,n,m : int; + + assume((x+y)== k); + m := 0; + j := 0; + while(j= 0 && j >= 0 && (n>0 ==> m < n); + { + if(j==i) + { + x:=x+1; + y:=y-1; + }else + { + y:=y+1; + x:=x-1; + } + + if(*) { + m := j; + } + + j := j + 1; + } + + assert ((n>0) ==> 0<=m); +} diff --git a/bench_horn_ice/dillig20-3.bpl b/bench_horn_ice/dillig20-3.bpl new file mode 100644 index 000000000..297bd1189 --- /dev/null +++ b/bench_horn_ice/dillig20-3.bpl @@ -0,0 +1,30 @@ +// dilig-benchmarks/single/20.c +procedure main() +{ + var x,y,k,j,i,n,m : int; + + assume((x+y)== k); + m := 0; + j := 0; + while(j= 0 && j >= 0 && (n>0 ==> m < n); + { + if(j==i) + { + x:=x+1; + y:=y-1; + }else + { + y:=y+1; + x:=x-1; + } + + if(*) { + m := j; + } + + j := j + 1; + } + + assert ((n>0) ==> m0); + assume(n<10); + + k := 0; + i := 0; + while( i < n ) + // invariant k >= 2000 * i && i <= n && c1 == 4000 && c2 == 2000 && i >= 0 && n > 0; + { + i := i + 1; + if(*) { + v := 0; + } else { + v := 1; + } + + if( v == 0 ) { + k := k + c1; + } else { + k := k + c2; + } + } + + assert(k>n); +} diff --git a/bench_horn_ice/dillig22.bpl b/bench_horn_ice/dillig22.bpl new file mode 100644 index 000000000..ca992794b --- /dev/null +++ b/bench_horn_ice/dillig22.bpl @@ -0,0 +1,23 @@ +// dilig-benchmarks/single/22.bpl +procedure main() +{ + var x,y,z,k : int; + x := 0; + y := 0; + z := 0; + k := 0; + + while(*) + // invariant x == y && y == z && (k mod 3 == 0); + { + if(k mod 3 == 0) { + x := x + 1; + } + y := y + 1; + z := z + 1; + k := x+y+z; + } + + assert(x==y); + assert(y==z); +} diff --git a/bench_horn_ice/dillig37.bpl b/bench_horn_ice/dillig37.bpl new file mode 100644 index 000000000..e59d00a3c --- /dev/null +++ b/bench_horn_ice/dillig37.bpl @@ -0,0 +1,22 @@ +// dilig-benchmarks/single/37.c +/* + * Taken from "Counterexample Driven Refinement for Abstract Interpretation" (TACAS'06) by Gulavani + */ + +procedure main() { + var x,m,n : int; + + x:= 0; + m:=0; + + while(x= 0 && (x > 0 ==> m < x) && m <= x && (n>0 ==> x <= n); + { + if(*) { + m := x; + } + x := x+1; + } + + assert(((n>0) ==> (0<=m && m=0); + /* + k := 1; + if(flag != 0) { + havoc k; + assume(k>=0); + } + */ + // Temporarily encoding above if as below assumes + // since we don't handle multiple loops yet, and after + // desugaring the loops the above if duplicates the loop. + assume (flag != 0 ==> k >= 0); + assume (flag == 0 ==> k == 1); + i := 0; + j := 0; + + while(i <= n) + // invariant j >= i && i>=0 && i <= n+1 && k >= 0; + { + i := i + 1; + j := j + i; + } + z := k + i + j; + assert(z > 2*n); +} + diff --git a/bench_horn_ice/dillig42.bpl b/bench_horn_ice/dillig42.bpl new file mode 100644 index 000000000..f604b063c --- /dev/null +++ b/bench_horn_ice/dillig42.bpl @@ -0,0 +1,56 @@ +// dilig-benchmarks/single/42.c +procedure main() +{ + var flag, x, y, a : int; + x := 1; + y := 1; + + /* + if(flag != 0) { + a := 0; + } else { + a := 1; + } + */ + // Encoding if as assume to avoid loop duplication in desugaring + assume(flag != 0 ==> a == 0); + assume(flag == 0 ==> a == 1); + + while(*) + // invariant (flag == 0 ==> (a mod 2 == 1 && (x+y) mod 2 == 0)) && (flag != 0 ==> (a mod 2 == 0 && (x + y) mod 2 == 0)); + { + if(flag != 0) + { + a := x+y; + x := x + 1; + } + else + { + a := x+y+1; + y := y + 1; + } + + if(a mod 2==1) { + y := y + 1; + } else { + x := x + 1; + } + } + + /* + * if(flag != 0) { + * a := a + 1; + * } + * + * assert(a mod 2==1); + */ + /* + * Encoding above as simple asserts + * to express postcondition directly after loop. + * This is an engineering limitation of the current + * hacky harness. + */ + assert (flag == 0 ==> (a mod 2 == 1)); + assert (flag != 0 ==> ((a + 1) mod 2 == 1)); +} + diff --git a/bench_horn_ice/dillig43.bpl b/bench_horn_ice/dillig43.bpl new file mode 100644 index 000000000..30cb3a57c --- /dev/null +++ b/bench_horn_ice/dillig43.bpl @@ -0,0 +1,27 @@ +// dilig-benchmarks/single/43.c +/* + * Based on ex16 from NECLA Static Analysis Benchmarks + */ + +procedure main() +{ + var x,y,i,t : int; + + i := 0; + t := y; + + if (x==y) { + return; + } + + while (*) + // invariant y >= t; + { + if (x > 0) { + y := y + x; + } + } + + assert(y>=t); +} + diff --git a/bench_horn_ice/dillig44.bpl b/bench_horn_ice/dillig44.bpl new file mode 100644 index 000000000..a1c904b21 --- /dev/null +++ b/bench_horn_ice/dillig44.bpl @@ -0,0 +1,34 @@ +// dilig-benchmarks/single/44.c +/* + * Adapted from ex20 from NECLA Static Analysis Benchmarks + */ +procedure main() +{ + var k, flag, i, j, n : int; + + i := 0; + j := 0; + + /* + if (flag == 1){ + n := 1; + } else { + n := 2; + } + */ + // Encoding if as assumes to avoid loop duplication due to desugaring + assume(flag == 1 ==> n == 1); + assume(flag != 1 ==> n == 2); + + i := 0; + + while (i <= k) + // invariant (flag == 1 ==> i == j) && (flag == 1 ==> n == 1); + { + i := i + 1; + j := j +n; + } + + assert(flag == 1 ==> j == i); +} + diff --git a/bench_horn_ice/dillig46.bpl b/bench_horn_ice/dillig46.bpl new file mode 100644 index 000000000..8eea9bb77 --- /dev/null +++ b/bench_horn_ice/dillig46.bpl @@ -0,0 +1,27 @@ +// dilig-benchmarks/single/46.c +procedure main() +{ + var w,z,x,y : int; + + w := 1; + z := 0; + x := 0; + y := 0; + + while(*) + // invariant x != 0 ==> (x == 1 && w mod 2 == 0); + { + if(w mod 2 == 1) { + x := x + 1; + w := w + 1; + } + if(z mod 2== 0) { + y := y + 1; + z := z + 1; + } + } + + assert(x<=1); +} + + diff --git a/bench_horn_ice/formula22.bpl b/bench_horn_ice/formula22.bpl new file mode 100644 index 000000000..6de597a3c --- /dev/null +++ b/bench_horn_ice/formula22.bpl @@ -0,0 +1,44 @@ +function {:existential true} b0(x1:int, x2:int, x3:int): bool; + +procedure main() +{ + + var x1, x2, x3, x4, x5, x6, x7, x8: int; + var x1', x2', x3', x4', x5', x6', x7', x8': int; + + x1 := 0; + x2 := 0; + x3 := 0; + x4 := 0; + x5 := 0; + x6 := 0; + x7 := 0; + x8 := 0; + + while(*) + invariant b0(x1, x2, x3); + { + havoc x1'; + havoc x2'; + havoc x3'; + havoc x4'; + havoc x5'; + havoc x6'; + havoc x7'; + havoc x8'; + + if(x1' <= x2' && (x2' >= 0 || x2' - x3' <= 2)) + { + x1 := x1'; + x2 := x2'; + x3 := x3'; + x4 := x4'; + x5 := x5'; + x6 := x6'; + x7 := x7'; + x8 := x8'; + } + } + assert(x1 <= x2 && (x2 >= 0 || x2 - x3 <= 2)); +} + diff --git a/bench_horn_ice/formula25.bpl b/bench_horn_ice/formula25.bpl new file mode 100644 index 000000000..8b9b17b27 --- /dev/null +++ b/bench_horn_ice/formula25.bpl @@ -0,0 +1,44 @@ +function {:existential true} b0(x1:int, x2:int, x3:int, x4: int): bool; + +procedure main() +{ + + var x1, x2, x3, x4, x5, x6, x7, x8: int; + var x1', x2', x3', x4', x5', x6', x7', x8': int; + + x1 := 0; + x2 := 0; + x3 := 0; + x4 := -1; + x5 := 0; + x6 := 0; + x7 := 0; + x8 := 0; + + while(*) + invariant b0(x1, x2, x3, x4); + { + havoc x1'; + havoc x2'; + havoc x3'; + havoc x4'; + havoc x5'; + havoc x6'; + havoc x7'; + havoc x8'; + + if(x1' <= 0 && x1' >= x4' + 1 && x2' == x3' && (x4' >= 0 || x4' <= x3')) + { + x1 := x1'; + x2 := x2'; + x3 := x3'; + x4 := x4'; + x5 := x5'; + x6 := x6'; + x7 := x7'; + x8 := x8'; + } + } + assert(x1 <= 0 && x1 >= x4 + 1 && x2 == x3 && (x4 >= 0 || x4 <= x3)); +} + diff --git a/bench_horn_ice/formula27.bpl b/bench_horn_ice/formula27.bpl new file mode 100644 index 000000000..9a69457f7 --- /dev/null +++ b/bench_horn_ice/formula27.bpl @@ -0,0 +1,31 @@ +procedure main() +{ + var x1,x2,x3,x4,x5: int; + var x1p,x2p,x3p,x4p,x5p: int; + + x1 := 0; + x2 := 0; + x3 := 0; + x4 := 0; + x5 := 0; + + while(*) + // invariant (0 <= x1 && x1 <= x4 + 1 && x2 == x3 && (x2 <= -1 || x4 <= x2 + 2) && x5 == 0); + { + havoc x1p; + havoc x2p; + havoc x3p; + havoc x4p; + havoc x5p; + + if (0 <= x1p && x1p <= x4p + 1 && x2p == x3p && (x2p <= -1 || x4p <= x2p + 2) && x5p == 0) + { + x1 := x1p; + x2 := x2p; + x3 := x3p; + x4 := x4p; + x5 := x5p; + } + } + assert(0 <= x1 && x1 <= x4 + 1 && x2 == x3 && (x2 <= -1 || x4 <= x2 + 2) && x5 == 0); +} diff --git a/bench_horn_ice/gj2007_true-unreach-call.bpl b/bench_horn_ice/gj2007_true-unreach-call.bpl new file mode 100644 index 000000000..4b1954f57 --- /dev/null +++ b/bench_horn_ice/gj2007_true-unreach-call.bpl @@ -0,0 +1,21 @@ +// c/loop-lit/gj2007_true-unreach-call.c + +procedure main() +{ + var x,y: int; + x := 0; + y := 50; + + while (x < 100) + // invariant (x < 50 ==> y == 50) && (x >= 50 ==> x == y) && x <= 100; + { + if (x < 50) { + x := x + 1; + } else { + x := x + 1; + y := y + 1; + } + } + + assert (y == 100); +} diff --git a/bench_horn_ice/half_true_modif.bpl b/bench_horn_ice/half_true_modif.bpl new file mode 100644 index 000000000..eea656b01 --- /dev/null +++ b/bench_horn_ice/half_true_modif.bpl @@ -0,0 +1,20 @@ +procedure main() { + var i, n, j, k, LARGE_INT: int; + i := 0; + n := 0; + j := 0; + assume(k <= LARGE_INT && k >= -LARGE_INT); + while (i < 2 * k) + // invariant (i mod 2 == 0 ==> 2 * n == i) && (i mod 2 == 1 ==> 2 * n - 1 == i) && (k >= 0 ==> i <= 2 * k); + { + if (j == 0) { + n := n + 1; + j := 1; + } else { + j := 0; + } + i := i + 1; + } + assert(k < 0 || n == k); +} + diff --git a/bench_horn_ice/half_true_orig.bpl b/bench_horn_ice/half_true_orig.bpl new file mode 100644 index 000000000..29d28b5cb --- /dev/null +++ b/bench_horn_ice/half_true_orig.bpl @@ -0,0 +1,19 @@ +// c/loop-new/half_true-unreach-call.c + +procedure main() { + var i,n,k,LARGE_INT: int; + i := 0; + n := 0; + //int k = __VERIFIER_nondet_int(); + assume(k <= LARGE_INT && k >= -LARGE_INT); + while (i < 2 * k) + // invariant (i mod 2 == 0 ==> 2 * n == i) && (i mod 2 == 1 ==> 2 * n - 1 == i) && (k >= 0 ==> i <= 2 * k); + { + if (i mod 2 == 0) { + n := n + 1; + } + i := i + 1; + } + assert(k < 0 || n == k); +} + diff --git a/bench_horn_ice/samples_search_disj_ite_01.bpl b/bench_horn_ice/s_disj_ite_01.bpl similarity index 100% rename from bench_horn_ice/samples_search_disj_ite_01.bpl rename to bench_horn_ice/s_disj_ite_01.bpl diff --git a/bench_horn_ice/samples_search_disj_ite_02.bpl b/bench_horn_ice/s_disj_ite_02.bpl similarity index 100% rename from bench_horn_ice/samples_search_disj_ite_02.bpl rename to bench_horn_ice/s_disj_ite_02.bpl diff --git a/bench_horn_ice/samples_search_disj_ite_03.bpl b/bench_horn_ice/s_disj_ite_03.bpl similarity index 100% rename from bench_horn_ice/samples_search_disj_ite_03.bpl rename to bench_horn_ice/s_disj_ite_03.bpl diff --git a/bench_horn_ice/samples_search_disj_ite_04.bpl b/bench_horn_ice/s_disj_ite_04.bpl similarity index 100% rename from bench_horn_ice/samples_search_disj_ite_04.bpl rename to bench_horn_ice/s_disj_ite_04.bpl diff --git a/bench_horn_ice/samples_search_disj_ite_05.bpl b/bench_horn_ice/s_disj_ite_05.bpl similarity index 100% rename from bench_horn_ice/samples_search_disj_ite_05.bpl rename to bench_horn_ice/s_disj_ite_05.bpl diff --git a/bench_horn_ice/samples_search_disj_ite_06.bpl b/bench_horn_ice/s_disj_ite_06.bpl similarity index 100% rename from bench_horn_ice/samples_search_disj_ite_06.bpl rename to bench_horn_ice/s_disj_ite_06.bpl diff --git a/bench_horn_ice/samples_search_01.bpl b/bench_horn_ice/s_mutants_01.bpl similarity index 100% rename from bench_horn_ice/samples_search_01.bpl rename to bench_horn_ice/s_mutants_01.bpl diff --git a/bench_horn_ice/samples_search_02.bpl b/bench_horn_ice/s_mutants_02.bpl similarity index 100% rename from bench_horn_ice/samples_search_02.bpl rename to bench_horn_ice/s_mutants_02.bpl diff --git a/bench_horn_ice/samples_search_03.bpl b/bench_horn_ice/s_mutants_03.bpl similarity index 100% rename from bench_horn_ice/samples_search_03.bpl rename to bench_horn_ice/s_mutants_03.bpl diff --git a/bench_horn_ice/samples_search_04.bpl b/bench_horn_ice/s_mutants_04.bpl similarity index 100% rename from bench_horn_ice/samples_search_04.bpl rename to bench_horn_ice/s_mutants_04.bpl diff --git a/bench_horn_ice/samples_search_06.bpl b/bench_horn_ice/s_mutants_06.bpl similarity index 100% rename from bench_horn_ice/samples_search_06.bpl rename to bench_horn_ice/s_mutants_06.bpl diff --git a/bench_horn_ice/samples_search_07.bpl b/bench_horn_ice/s_mutants_07.bpl similarity index 100% rename from bench_horn_ice/samples_search_07.bpl rename to bench_horn_ice/s_mutants_07.bpl diff --git a/bench_horn_ice/samples_search_08.bpl b/bench_horn_ice/s_mutants_08.bpl similarity index 100% rename from bench_horn_ice/samples_search_08.bpl rename to bench_horn_ice/s_mutants_08.bpl diff --git a/bench_horn_ice/samples_search_09.bpl b/bench_horn_ice/s_mutants_09.bpl similarity index 100% rename from bench_horn_ice/samples_search_09.bpl rename to bench_horn_ice/s_mutants_09.bpl diff --git a/bench_horn_ice/samples_search_10.bpl b/bench_horn_ice/s_mutants_10.bpl similarity index 100% rename from bench_horn_ice/samples_search_10.bpl rename to bench_horn_ice/s_mutants_10.bpl diff --git a/bench_horn_ice/samples_search_11.bpl b/bench_horn_ice/s_mutants_11.bpl similarity index 100% rename from bench_horn_ice/samples_search_11.bpl rename to bench_horn_ice/s_mutants_11.bpl diff --git a/bench_horn_ice/samples_search_12.bpl b/bench_horn_ice/s_mutants_12.bpl similarity index 100% rename from bench_horn_ice/samples_search_12.bpl rename to bench_horn_ice/s_mutants_12.bpl diff --git a/bench_horn_ice/samples_search_13.bpl b/bench_horn_ice/s_mutants_13.bpl similarity index 100% rename from bench_horn_ice/samples_search_13.bpl rename to bench_horn_ice/s_mutants_13.bpl diff --git a/bench_horn_ice/samples_search_14.bpl b/bench_horn_ice/s_mutants_14.bpl similarity index 100% rename from bench_horn_ice/samples_search_14.bpl rename to bench_horn_ice/s_mutants_14.bpl diff --git a/bench_horn_ice/samples_search_15.bpl b/bench_horn_ice/s_mutants_15.bpl similarity index 100% rename from bench_horn_ice/samples_search_15.bpl rename to bench_horn_ice/s_mutants_15.bpl diff --git a/bench_horn_ice/samples_shrink_big_numbers_1024.bpl b/bench_horn_ice/sn_1024.bpl similarity index 100% rename from bench_horn_ice/samples_shrink_big_numbers_1024.bpl rename to bench_horn_ice/sn_1024.bpl diff --git a/bench_horn_ice/samples_shrink_big_numbers_2048.bpl b/bench_horn_ice/sn_2048.bpl similarity index 100% rename from bench_horn_ice/samples_shrink_big_numbers_2048.bpl rename to bench_horn_ice/sn_2048.bpl diff --git a/bench_horn_ice/samples_shrink_big_numbers_4096.bpl b/bench_horn_ice/sn_4096.bpl similarity index 100% rename from bench_horn_ice/samples_shrink_big_numbers_4096.bpl rename to bench_horn_ice/sn_4096.bpl diff --git a/bench_horn_ice/samples_shrink_big_numbers_8192.bpl b/bench_horn_ice/sn_8192.bpl similarity index 100% rename from bench_horn_ice/samples_shrink_big_numbers_8192.bpl rename to bench_horn_ice/sn_8192.bpl From ade79a92a42d4bf5863c16545ec0f1899c7ff7a0 Mon Sep 17 00:00:00 2001 From: Sam Kaufman Date: Thu, 22 Feb 2018 14:57:37 -0500 Subject: [PATCH 066/236] bensistency.py: ASCII mode --- tools/deep_bench/scripts/benchsistency.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tools/deep_bench/scripts/benchsistency.py b/tools/deep_bench/scripts/benchsistency.py index 446e2c60c..7ec7eb5f5 100755 --- a/tools/deep_bench/scripts/benchsistency.py +++ b/tools/deep_bench/scripts/benchsistency.py @@ -1,6 +1,7 @@ #!/usr/bin/env python2 from __future__ import print_function import os +import sys from tabulate import tabulate @@ -52,9 +53,13 @@ def main(): found = dict((dirname, set(list_benchmarks(os.path.join(root, dirname)))) for dirname in STD_ALL) all_benchs = set.union(*found.values()) + + check = u'\u2713' + if "--ascii" in sys.argv: + check = 'Y' sorted_keys = list(sorted(found.keys())) - table = [[b] + [u'\u2713' if b in found[a] else '' for a in sorted_keys] + table = [[b] + [check if b in found[a] else '' for a in sorted_keys] for b in sorted(all_benchs)] print(tabulate(table, headers=[]+sorted_keys)) From d2191ed8ce67baaae6112433b7616311eb9873d2 Mon Sep 17 00:00:00 2001 From: Sam Kaufman Date: Thu, 22 Feb 2018 15:14:52 -0500 Subject: [PATCH 067/236] bouncy_three_counters_merged fix --- bench_horn/bouncy_three_counters_merged.smt2 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bench_horn/bouncy_three_counters_merged.smt2 b/bench_horn/bouncy_three_counters_merged.smt2 index 57faa6a69..ab6f31400 100644 --- a/bench_horn/bouncy_three_counters_merged.smt2 +++ b/bench_horn/bouncy_three_counters_merged.smt2 @@ -19,7 +19,7 @@ (or (and (= count2 (+ count1 1)) (= count4 count3) (= count6 count5) (= z2 (+ z1 1))) (and (= count4 (+ count3 1)) (= count2 count1) (= count6 count5) (= z2 (- z1 1))) - (and (= count5 (+ count5 1)) (= count2 count1) (= count4 count3) (= z2 (+ z1 1))) + (and (= count6 (+ count5 1)) (= count2 count1) (= count4 count3) (= z2 (+ z1 1))) ) ) (itp1 count2 count4 count6 z2) From 58e1b64031ae39327b17d8a6596c53e529ea501f Mon Sep 17 00:00:00 2001 From: Sam Kaufman Date: Thu, 22 Feb 2018 21:05:00 -0500 Subject: [PATCH 068/236] New Boogie/ICE benchmarks --- .../bouncy_three_counters_merged.bpl | 24 +++ bench_horn_ice/const_div_3.bpl | 12 ++ bench_horn_ice/const_div_4.bpl | 12 ++ bench_horn_ice/const_mod_1.bpl | 11 ++ bench_horn_ice/const_mod_2.bpl | 11 ++ bench_horn_ice/const_mod_3.bpl | 21 ++ ...ant_true-unreach-call_true-termination.bpl | 12 ++ ...dif_true-unreach-call_true-termination.bpl | 14 ++ ...y_2_true-unreach-call_true-termination.bpl | 12 ++ ...ue-unreach-call_true-termination_bound.bpl | 183 ----------------- ...-unreach-call_true-termination_unbound.bpl | 184 ------------------ bench_horn_ice/dillig03.bpl | 15 ++ bench_horn_ice/menlo_park_term_orig.bpl | 16 ++ bench_horn_ice/menlo_park_term_simpl_1.bpl | 15 ++ bench_horn_ice/menlo_park_term_simpl_2.bpl | 17 ++ bench_horn_ice/nonlin_minus.bpl | 184 ------------------ bench_horn_ice/nonlin_mod.bpl | 180 ----------------- bench_horn_ice/s_triv_01.bpl | 12 ++ bench_horn_ice/s_triv_02.bpl | 12 ++ bench_horn_ice/s_triv_03.bpl | 13 ++ bench_horn_ice/s_triv_04.bpl | 13 ++ bench_horn_ice/s_triv_05.bpl | 11 ++ bench_horn_ice/s_triv_06.bpl | 12 ++ bench_horn_ice/s_triv_07.bpl | 14 ++ bench_horn_ice/s_triv_08.bpl | 11 ++ bench_horn_ice/s_triv_09.bpl | 14 ++ bench_horn_ice/s_triv_10.bpl | 9 + bench_horn_ice/s_triv_11.bpl | 13 ++ bench_horn_ice/s_triv_12.bpl | 15 ++ bench_horn_ice/s_triv_13.bpl | 14 ++ bench_horn_ice/s_triv_14.bpl | 17 ++ bench_horn_ice/s_triv_15.bpl | 13 ++ 32 files changed, 385 insertions(+), 731 deletions(-) create mode 100644 bench_horn_ice/bouncy_three_counters_merged.bpl create mode 100644 bench_horn_ice/const_div_3.bpl create mode 100644 bench_horn_ice/const_div_4.bpl create mode 100644 bench_horn_ice/const_mod_1.bpl create mode 100644 bench_horn_ice/const_mod_2.bpl create mode 100644 bench_horn_ice/const_mod_3.bpl create mode 100644 bench_horn_ice/count_by_1_variant_true-unreach-call_true-termination.bpl create mode 100644 bench_horn_ice/count_by_2_modif_true-unreach-call_true-termination.bpl create mode 100644 bench_horn_ice/count_by_2_true-unreach-call_true-termination.bpl delete mode 100644 bench_horn_ice/count_by_k_true-unreach-call_true-termination_bound.bpl delete mode 100644 bench_horn_ice/count_by_k_true-unreach-call_true-termination_unbound.bpl create mode 100644 bench_horn_ice/dillig03.bpl create mode 100644 bench_horn_ice/menlo_park_term_orig.bpl create mode 100644 bench_horn_ice/menlo_park_term_simpl_1.bpl create mode 100644 bench_horn_ice/menlo_park_term_simpl_2.bpl delete mode 100755 bench_horn_ice/nonlin_minus.bpl delete mode 100755 bench_horn_ice/nonlin_mod.bpl create mode 100644 bench_horn_ice/s_triv_01.bpl create mode 100644 bench_horn_ice/s_triv_02.bpl create mode 100644 bench_horn_ice/s_triv_03.bpl create mode 100644 bench_horn_ice/s_triv_04.bpl create mode 100644 bench_horn_ice/s_triv_05.bpl create mode 100644 bench_horn_ice/s_triv_06.bpl create mode 100644 bench_horn_ice/s_triv_07.bpl create mode 100644 bench_horn_ice/s_triv_08.bpl create mode 100644 bench_horn_ice/s_triv_09.bpl create mode 100644 bench_horn_ice/s_triv_10.bpl create mode 100644 bench_horn_ice/s_triv_11.bpl create mode 100644 bench_horn_ice/s_triv_12.bpl create mode 100644 bench_horn_ice/s_triv_13.bpl create mode 100644 bench_horn_ice/s_triv_14.bpl create mode 100644 bench_horn_ice/s_triv_15.bpl diff --git a/bench_horn_ice/bouncy_three_counters_merged.bpl b/bench_horn_ice/bouncy_three_counters_merged.bpl new file mode 100644 index 000000000..c4841d984 --- /dev/null +++ b/bench_horn_ice/bouncy_three_counters_merged.bpl @@ -0,0 +1,24 @@ +procedure main() +{ + var c1, c3, c5, z: int; + + c1 := 0; + c3 := 0; + c5 := 0; + z := 0; + + while (*) { + if (*) { + c1 := c1 + 1; + z := z + 1; + } else if (*) { + c3 := c3 + 1; + z := z - 1; + } else { + c5 := c5 + 1; + z := z + 1; + } + } + + assert(c1 != c3 || c1 != c5 || c1 == z); +} \ No newline at end of file diff --git a/bench_horn_ice/const_div_3.bpl b/bench_horn_ice/const_div_3.bpl new file mode 100644 index 000000000..f8daf1a6a --- /dev/null +++ b/bench_horn_ice/const_div_3.bpl @@ -0,0 +1,12 @@ +procedure main() +{ + var x, y, i: int; + i := 50; + + while((x div 50) == y) { + assert (i >= 0); + x := x + 51; + y := y + 1; + i := i - 1; + } +} \ No newline at end of file diff --git a/bench_horn_ice/const_div_4.bpl b/bench_horn_ice/const_div_4.bpl new file mode 100644 index 000000000..37e839229 --- /dev/null +++ b/bench_horn_ice/const_div_4.bpl @@ -0,0 +1,12 @@ +procedure main() +{ + var x, y, i: int; + i := 100; + + while((x div 100) == y) { + assert (i >= 0); + x := x + 101; + y := y + 1; + i := i - 1; + } +} \ No newline at end of file diff --git a/bench_horn_ice/const_mod_1.bpl b/bench_horn_ice/const_mod_1.bpl new file mode 100644 index 000000000..ff721639e --- /dev/null +++ b/bench_horn_ice/const_mod_1.bpl @@ -0,0 +1,11 @@ +procedure main() +{ + var i: int; + i := 0; + + while (*) { + i := i + 2; + } + + assert((i mod 2) == 0); +} \ No newline at end of file diff --git a/bench_horn_ice/const_mod_2.bpl b/bench_horn_ice/const_mod_2.bpl new file mode 100644 index 000000000..7c56ec123 --- /dev/null +++ b/bench_horn_ice/const_mod_2.bpl @@ -0,0 +1,11 @@ +procedure main() +{ + var i: int; + i := 0; + + while (*) { + i := i + 23468; + } + + assert((i mod 23468) == 0); +} \ No newline at end of file diff --git a/bench_horn_ice/const_mod_3.bpl b/bench_horn_ice/const_mod_3.bpl new file mode 100644 index 000000000..2ec299efd --- /dev/null +++ b/bench_horn_ice/const_mod_3.bpl @@ -0,0 +1,21 @@ +procedure main() +{ + var i, j: int; + i := 0; + j := 0; + + while (*) { + i := i + 1; + if (j == 0) { + j := 1; + } else { + j := 0; + } + } + + if (j == 1) { + assert ((i mod 2) == 1); + } else { + assert ((i mod 2) == 0); + } +} \ No newline at end of file diff --git a/bench_horn_ice/count_by_1_variant_true-unreach-call_true-termination.bpl b/bench_horn_ice/count_by_1_variant_true-unreach-call_true-termination.bpl new file mode 100644 index 000000000..d3ecc6e06 --- /dev/null +++ b/bench_horn_ice/count_by_1_variant_true-unreach-call_true-termination.bpl @@ -0,0 +1,12 @@ +procedure main() +{ + var i, LRG: int; + i := 0; + assume i < LRG; + + while ((i + 1) < LRG) { + i := i + 1; + } + + assert (i <= LRG || LRG <= 10000); +} \ No newline at end of file diff --git a/bench_horn_ice/count_by_2_modif_true-unreach-call_true-termination.bpl b/bench_horn_ice/count_by_2_modif_true-unreach-call_true-termination.bpl new file mode 100644 index 000000000..404f5e509 --- /dev/null +++ b/bench_horn_ice/count_by_2_modif_true-unreach-call_true-termination.bpl @@ -0,0 +1,14 @@ +procedure main() +{ + var i, c, LRG: int; + i := 0; + c := 0; + LRG := 256; + + while (i < LRG) { + i := i + 2; + c := c + 1; + } + + assert (i == LRG); +} \ No newline at end of file diff --git a/bench_horn_ice/count_by_2_true-unreach-call_true-termination.bpl b/bench_horn_ice/count_by_2_true-unreach-call_true-termination.bpl new file mode 100644 index 000000000..4b67ad4d5 --- /dev/null +++ b/bench_horn_ice/count_by_2_true-unreach-call_true-termination.bpl @@ -0,0 +1,12 @@ +procedure main() +{ + var i, LRG: int; + i := 0; + LRG := 265; + + while (i < LRG) { + i := i + 2; + } + + assert (i == LRG); +} \ No newline at end of file diff --git a/bench_horn_ice/count_by_k_true-unreach-call_true-termination_bound.bpl b/bench_horn_ice/count_by_k_true-unreach-call_true-termination_bound.bpl deleted file mode 100644 index 44cba053e..000000000 --- a/bench_horn_ice/count_by_k_true-unreach-call_true-termination_bound.bpl +++ /dev/null @@ -1,183 +0,0 @@ -// SMACK-PRELUDE-BEGIN -procedure boogie_si_record_int(i: int); - -function {:existential true} b0(i:int, k:int, lrg:int): bool; - -// Integer arithmetic -function $add(p1:int, p2:int) returns (int) {p1 + p2} -function $sub(p1:int, p2:int) returns (int) {p1 - p2} -function $mul(p1:int, p2:int) returns (int) {p1 * p2} -function $sdiv(p1:int, p2:int) returns (int); -function $udiv(p1:int, p2:int) returns (int); -function $srem(p1:int, p2:int) returns (int); -function $urem(p1:int, p2:int) returns (int); -function $and(p1:int, p2:int) returns (int); -axiom $and(0,0) == 0; -axiom $and(0,1) == 0; -axiom $and(1,0) == 0; -axiom $and(1,1) == 1; -function $or(p1:int, p2:int) returns (int); -axiom $or(0,0) == 0; -axiom $or(0,1) == 1; -axiom $or(1,0) == 1; -axiom $or(1,1) == 1; -function $xor(p1:int, p2:int) returns (int); -axiom $xor(0,0) == 0; -axiom $xor(0,1) == 1; -axiom $xor(1,0) == 1; -axiom $xor(1,1) == 0; -function $lshr(p1:int, p2:int) returns (int); -function $ashr(p1:int, p2:int) returns (int); -function $shl(p1:int, p2:int) returns (int); -function $ult(p1:int, p2:int) returns (bool) {p1 < p2} -function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} -function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} -function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} -function $slt(p1:int, p2:int) returns (bool) {p1 < p2} -function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} -function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} -function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} -function $nand(p1:int, p2:int) returns (int); -function $max(p1:int, p2:int) returns (int); -function $min(p1:int, p2:int) returns (int); -function $umax(p1:int, p2:int) returns (int); -function $umin(p1:int, p2:int) returns (int); -function $i2b(i: int) returns (bool); -axiom (forall i:int :: $i2b(i) <==> i != 0); -axiom $i2b(0) == false; -function $b2i(b: bool) returns (int); -axiom $b2i(true) == 1; -axiom $b2i(false) == 0; - -// Floating point -type float; -function $fp(a:int) returns (float); -const $ffalse: float; -const $ftrue: float; -function $fadd(f1:float, f2:float) returns (float); -function $fsub(f1:float, f2:float) returns (float); -function $fmul(f1:float, f2:float) returns (float); -function $fdiv(f1:float, f2:float) returns (float); -function $frem(f1:float, f2:float) returns (float); -function $foeq(f1:float, f2:float) returns (bool); -function $foge(f1:float, f2:float) returns (bool); -function $fogt(f1:float, f2:float) returns (bool); -function $fole(f1:float, f2:float) returns (bool); -function $folt(f1:float, f2:float) returns (bool); -function $fone(f1:float, f2:float) returns (bool); -function $ford(f1:float, f2:float) returns (bool); -function $fueq(f1:float, f2:float) returns (bool); -function $fuge(f1:float, f2:float) returns (bool); -function $fugt(f1:float, f2:float) returns (bool); -function $fule(f1:float, f2:float) returns (bool); -function $fult(f1:float, f2:float) returns (bool); -function $fune(f1:float, f2:float) returns (bool); -function $funo(f1:float, f2:float) returns (bool); -function $fp2si(f:float) returns (int); -function $fp2ui(f:float) returns (int); -function $si2fp(i:int) returns (float); -function $ui2fp(i:int) returns (float); - -// Memory region declarations: 0 - -// SMACK Flat Memory Model - -function $ptr(obj:int, off:int) returns (int) {obj + off} -function $size(int) returns (int); -function $obj(int) returns (int); -function $off(ptr:int) returns (int) {ptr} - -var alloc: [int] bool; -var $CurrAddr:int; - -const unique $NULL: int; -axiom $NULL == 0; -const $UNDEF: int; - -function $pa(pointer: int, index: int, size: int) returns (int); -function $trunc(p: int) returns (int); -function $p2i(p: int) returns (int); -function $i2p(p: int) returns (int); -function $p2b(p: int) returns (bool); -function $b2p(b: bool) returns (int); - -axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); -axiom (forall p:int :: $trunc(p) == p); - -axiom $b2p(true) == 1; -axiom $b2p(false) == 0; -axiom (forall i:int :: $p2b(i) <==> i != 0); -axiom $p2b(0) == false; -axiom (forall i:int :: $p2i(i) == i); -axiom (forall i:int :: $i2p(i) == i); -procedure __SMACK_nondet() returns (p: int); -procedure __SMACK_nondetInt() returns (p: int); - -procedure $malloc(obj_size: int) returns (new: int); -modifies $CurrAddr, alloc; -requires obj_size > 0; -ensures 0 < old($CurrAddr); -ensures new == old($CurrAddr); -ensures $CurrAddr > old($CurrAddr) + obj_size; -ensures $size(new) == obj_size; -ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); -ensures alloc[new]; -ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); - -procedure $free(pointer: int); -modifies alloc; -requires alloc[pointer]; -requires $obj(pointer) == pointer; -ensures !alloc[pointer]; -ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); - -procedure $alloca(obj_size: int) returns (new: int); -modifies $CurrAddr, alloc; -requires obj_size > 0; -ensures 0 < old($CurrAddr); -ensures new == old($CurrAddr); -ensures $CurrAddr > old($CurrAddr) + obj_size; -ensures $size(new) == obj_size; -ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); -ensures alloc[new]; -ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); - -// SMACK-PRELUDE-END -// BEGIN SMACK-GENERATED CODE -const unique main: int; -axiom (main == -1024); -const unique __VERIFIER_assert: int; -axiom (__VERIFIER_assert == -2048); - -procedure main() - modifies alloc, $CurrAddr; -{ - var $i: int; - var $k: int; - var $LRG: int; -$bb0: - $i := 0; - assume $LRG >= 0; - assume 0 <= $k; - goto $bb1; -$bb1: - assert b0($i, $k, $LRG); - //$b := $sge($p, $p1); - if ($i < $mul($LRG, $k)) { - goto $bb2; - } else { - goto $bb3; - } -$bb2: - $i := $add($i, $k); - goto $bb1; -$bb3: - assert $i > $mul($LRG, $k); - return; -} - -procedure __VERIFIER_assert#1(p0: int) - returns ($r: int) ; - modifies alloc, $CurrAddr; - -// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/count_by_k_true-unreach-call_true-termination_unbound.bpl b/bench_horn_ice/count_by_k_true-unreach-call_true-termination_unbound.bpl deleted file mode 100644 index 846c06edc..000000000 --- a/bench_horn_ice/count_by_k_true-unreach-call_true-termination_unbound.bpl +++ /dev/null @@ -1,184 +0,0 @@ -// SMACK-PRELUDE-BEGIN -procedure boogie_si_record_int(i: int); - -function {:existential true} b0(i:int, k:int, lrg:int): bool; - -// Integer arithmetic -function $add(p1:int, p2:int) returns (int) {p1 + p2} -function $sub(p1:int, p2:int) returns (int) {p1 - p2} -function $mul(p1:int, p2:int) returns (int) {p1 * p2} -function $sdiv(p1:int, p2:int) returns (int); -function $udiv(p1:int, p2:int) returns (int); -function $srem(p1:int, p2:int) returns (int); -function $urem(p1:int, p2:int) returns (int); -function $and(p1:int, p2:int) returns (int); -axiom $and(0,0) == 0; -axiom $and(0,1) == 0; -axiom $and(1,0) == 0; -axiom $and(1,1) == 1; -function $or(p1:int, p2:int) returns (int); -axiom $or(0,0) == 0; -axiom $or(0,1) == 1; -axiom $or(1,0) == 1; -axiom $or(1,1) == 1; -function $xor(p1:int, p2:int) returns (int); -axiom $xor(0,0) == 0; -axiom $xor(0,1) == 1; -axiom $xor(1,0) == 1; -axiom $xor(1,1) == 0; -function $lshr(p1:int, p2:int) returns (int); -function $ashr(p1:int, p2:int) returns (int); -function $shl(p1:int, p2:int) returns (int); -function $ult(p1:int, p2:int) returns (bool) {p1 < p2} -function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} -function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} -function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} -function $slt(p1:int, p2:int) returns (bool) {p1 < p2} -function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} -function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} -function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} -function $nand(p1:int, p2:int) returns (int); -function $max(p1:int, p2:int) returns (int); -function $min(p1:int, p2:int) returns (int); -function $umax(p1:int, p2:int) returns (int); -function $umin(p1:int, p2:int) returns (int); -function $i2b(i: int) returns (bool); -axiom (forall i:int :: $i2b(i) <==> i != 0); -axiom $i2b(0) == false; -function $b2i(b: bool) returns (int); -axiom $b2i(true) == 1; -axiom $b2i(false) == 0; - -// Floating point -type float; -function $fp(a:int) returns (float); -const $ffalse: float; -const $ftrue: float; -function $fadd(f1:float, f2:float) returns (float); -function $fsub(f1:float, f2:float) returns (float); -function $fmul(f1:float, f2:float) returns (float); -function $fdiv(f1:float, f2:float) returns (float); -function $frem(f1:float, f2:float) returns (float); -function $foeq(f1:float, f2:float) returns (bool); -function $foge(f1:float, f2:float) returns (bool); -function $fogt(f1:float, f2:float) returns (bool); -function $fole(f1:float, f2:float) returns (bool); -function $folt(f1:float, f2:float) returns (bool); -function $fone(f1:float, f2:float) returns (bool); -function $ford(f1:float, f2:float) returns (bool); -function $fueq(f1:float, f2:float) returns (bool); -function $fuge(f1:float, f2:float) returns (bool); -function $fugt(f1:float, f2:float) returns (bool); -function $fule(f1:float, f2:float) returns (bool); -function $fult(f1:float, f2:float) returns (bool); -function $fune(f1:float, f2:float) returns (bool); -function $funo(f1:float, f2:float) returns (bool); -function $fp2si(f:float) returns (int); -function $fp2ui(f:float) returns (int); -function $si2fp(i:int) returns (float); -function $ui2fp(i:int) returns (float); - -// Memory region declarations: 0 - -// SMACK Flat Memory Model - -function $ptr(obj:int, off:int) returns (int) {obj + off} -function $size(int) returns (int); -function $obj(int) returns (int); -function $off(ptr:int) returns (int) {ptr} - -var alloc: [int] bool; -var $CurrAddr:int; - -const unique $NULL: int; -axiom $NULL == 0; -const $UNDEF: int; - -function $pa(pointer: int, index: int, size: int) returns (int); -function $trunc(p: int) returns (int); -function $p2i(p: int) returns (int); -function $i2p(p: int) returns (int); -function $p2b(p: int) returns (bool); -function $b2p(b: bool) returns (int); - -axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); -axiom (forall p:int :: $trunc(p) == p); - -axiom $b2p(true) == 1; -axiom $b2p(false) == 0; -axiom (forall i:int :: $p2b(i) <==> i != 0); -axiom $p2b(0) == false; -axiom (forall i:int :: $p2i(i) == i); -axiom (forall i:int :: $i2p(i) == i); -procedure __SMACK_nondet() returns (p: int); -procedure __SMACK_nondetInt() returns (p: int); - -procedure $malloc(obj_size: int) returns (new: int); -modifies $CurrAddr, alloc; -requires obj_size > 0; -ensures 0 < old($CurrAddr); -ensures new == old($CurrAddr); -ensures $CurrAddr > old($CurrAddr) + obj_size; -ensures $size(new) == obj_size; -ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); -ensures alloc[new]; -ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); - -procedure $free(pointer: int); -modifies alloc; -requires alloc[pointer]; -requires $obj(pointer) == pointer; -ensures !alloc[pointer]; -ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); - -procedure $alloca(obj_size: int) returns (new: int); -modifies $CurrAddr, alloc; -requires obj_size > 0; -ensures 0 < old($CurrAddr); -ensures new == old($CurrAddr); -ensures $CurrAddr > old($CurrAddr) + obj_size; -ensures $size(new) == obj_size; -ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); -ensures alloc[new]; -ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); - -// SMACK-PRELUDE-END -// BEGIN SMACK-GENERATED CODE -const unique main: int; -axiom (main == -1024); -const unique __VERIFIER_assert: int; -axiom (__VERIFIER_assert == -2048); - -procedure main() - modifies alloc, $CurrAddr; -{ - var $i: int; - var $k: int; - var $LRG: int; -$bb0: - $i := 0; - assume $LRG >= 0; - assume 0 <= $k; - assume $k <= 10; - goto $bb1; -$bb1: - assert b0($i, $k, $LRG); - //$b := $sge($p, $p1); - if ($i < $mul($LRG, $k)) { - goto $bb2; - } else { - goto $bb3; - } -$bb2: - $i := $add($i, $k); - goto $bb1; -$bb3: - assert $i > $mul($LRG, $k); - return; -} - -procedure __VERIFIER_assert#1(p0: int) - returns ($r: int) ; - modifies alloc, $CurrAddr; - -// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/dillig03.bpl b/bench_horn_ice/dillig03.bpl new file mode 100644 index 000000000..57415d461 --- /dev/null +++ b/bench_horn_ice/dillig03.bpl @@ -0,0 +1,15 @@ +procedure main() +{ + var x1, x3: int; + x1 := 1; + x3 := 1; + + while (*) { + if (*) { + x1 := x1 + 1; + } + x3 := x3 + x1: + } + + assert (x3 >= 1); +} \ No newline at end of file diff --git a/bench_horn_ice/menlo_park_term_orig.bpl b/bench_horn_ice/menlo_park_term_orig.bpl new file mode 100644 index 000000000..5a9840995 --- /dev/null +++ b/bench_horn_ice/menlo_park_term_orig.bpl @@ -0,0 +1,16 @@ +procedure main() +{ + var x, y, z, i: int; + y := 100; + z := 1; + assume x > 0; + assume i >= x; + + while (x > 0) { + assert (i >= 0); + x := x - y; + y := y - z; + z := -1 * z; + i := i - 1; + } +} \ No newline at end of file diff --git a/bench_horn_ice/menlo_park_term_simpl_1.bpl b/bench_horn_ice/menlo_park_term_simpl_1.bpl new file mode 100644 index 000000000..f4bfdce84 --- /dev/null +++ b/bench_horn_ice/menlo_park_term_simpl_1.bpl @@ -0,0 +1,15 @@ +procedure main() +{ + var x, y, z, i: int; + assume y > 0; + z := 1; + assume x > 0; + assume i >= x; + + while (x > 0) { + assert i >= 0; + x := x - y; + z := -1 * z; + i := i - 1; + } +} \ No newline at end of file diff --git a/bench_horn_ice/menlo_park_term_simpl_2.bpl b/bench_horn_ice/menlo_park_term_simpl_2.bpl new file mode 100644 index 000000000..2c4ef557e --- /dev/null +++ b/bench_horn_ice/menlo_park_term_simpl_2.bpl @@ -0,0 +1,17 @@ +procedure main() +{ + var x, y, z, i: int; + assume y > 1; + assume (y mod 2) == 0; + z := 1; + assume x > 0; + assume i >= x; + + while (x > 0) { + assert i >= 0; + x := x - y; + y := y - z; + z := -1 * z; + i := i - 1; + } +} \ No newline at end of file diff --git a/bench_horn_ice/nonlin_minus.bpl b/bench_horn_ice/nonlin_minus.bpl deleted file mode 100755 index ffbe00f16..000000000 --- a/bench_horn_ice/nonlin_minus.bpl +++ /dev/null @@ -1,184 +0,0 @@ -// SMACK-PRELUDE-BEGIN -procedure boogie_si_record_int(i: int); - -function {:existential true} b0(i:int, j:int, n:int): bool; - -// Integer arithmetic -function $add(p1:int, p2:int) returns (int) {p1 + p2} -function $sub(p1:int, p2:int) returns (int) {p1 - p2} -function $mul(p1:int, p2:int) returns (int) {p1 * p2} -function $sdiv(p1:int, p2:int) returns (int); -function $udiv(p1:int, p2:int) returns (int); -function $srem(p1:int, p2:int) returns (int); -function $urem(p1:int, p2:int) returns (int); -function $and(p1:int, p2:int) returns (int); -axiom $and(0,0) == 0; -axiom $and(0,1) == 0; -axiom $and(1,0) == 0; -axiom $and(1,1) == 1; -function $or(p1:int, p2:int) returns (int); -axiom $or(0,0) == 0; -axiom $or(0,1) == 1; -axiom $or(1,0) == 1; -axiom $or(1,1) == 1; -function $xor(p1:int, p2:int) returns (int); -axiom $xor(0,0) == 0; -axiom $xor(0,1) == 1; -axiom $xor(1,0) == 1; -axiom $xor(1,1) == 0; -function $lshr(p1:int, p2:int) returns (int); -function $ashr(p1:int, p2:int) returns (int); -function $shl(p1:int, p2:int) returns (int); -function $ult(p1:int, p2:int) returns (bool) {p1 < p2} -function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} -function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} -function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} -function $slt(p1:int, p2:int) returns (bool) {p1 < p2} -function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} -function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} -function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} -function $nand(p1:int, p2:int) returns (int); -function $max(p1:int, p2:int) returns (int); -function $min(p1:int, p2:int) returns (int); -function $umax(p1:int, p2:int) returns (int); -function $umin(p1:int, p2:int) returns (int); -function $i2b(i: int) returns (bool); -axiom (forall i:int :: $i2b(i) <==> i != 0); -axiom $i2b(0) == false; -function $b2i(b: bool) returns (int); -axiom $b2i(true) == 1; -axiom $b2i(false) == 0; - -// Floating point -type float; -function $fp(a:int) returns (float); -const $ffalse: float; -const $ftrue: float; -function $fadd(f1:float, f2:float) returns (float); -function $fsub(f1:float, f2:float) returns (float); -function $fmul(f1:float, f2:float) returns (float); -function $fdiv(f1:float, f2:float) returns (float); -function $frem(f1:float, f2:float) returns (float); -function $foeq(f1:float, f2:float) returns (bool); -function $foge(f1:float, f2:float) returns (bool); -function $fogt(f1:float, f2:float) returns (bool); -function $fole(f1:float, f2:float) returns (bool); -function $folt(f1:float, f2:float) returns (bool); -function $fone(f1:float, f2:float) returns (bool); -function $ford(f1:float, f2:float) returns (bool); -function $fueq(f1:float, f2:float) returns (bool); -function $fuge(f1:float, f2:float) returns (bool); -function $fugt(f1:float, f2:float) returns (bool); -function $fule(f1:float, f2:float) returns (bool); -function $fult(f1:float, f2:float) returns (bool); -function $fune(f1:float, f2:float) returns (bool); -function $funo(f1:float, f2:float) returns (bool); -function $fp2si(f:float) returns (int); -function $fp2ui(f:float) returns (int); -function $si2fp(i:int) returns (float); -function $ui2fp(i:int) returns (float); - -// Memory region declarations: 0 - -// SMACK Flat Memory Model - -function $ptr(obj:int, off:int) returns (int) {obj + off} -function $size(int) returns (int); -function $obj(int) returns (int); -function $off(ptr:int) returns (int) {ptr} - -var alloc: [int] bool; -var $CurrAddr:int; - -const unique $NULL: int; -axiom $NULL == 0; -const $UNDEF: int; - -function $pa(pointer: int, index: int, size: int) returns (int); -function $trunc(p: int) returns (int); -function $p2i(p: int) returns (int); -function $i2p(p: int) returns (int); -function $p2b(p: int) returns (bool); -function $b2p(b: bool) returns (int); - -axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); -axiom (forall p:int :: $trunc(p) == p); - -axiom $b2p(true) == 1; -axiom $b2p(false) == 0; -axiom (forall i:int :: $p2b(i) <==> i != 0); -axiom $p2b(0) == false; -axiom (forall i:int :: $p2i(i) == i); -axiom (forall i:int :: $i2p(i) == i); -procedure __SMACK_nondet() returns (p: int); -procedure __SMACK_nondetInt() returns (p: int); - -procedure $malloc(obj_size: int) returns (new: int); -modifies $CurrAddr, alloc; -requires obj_size > 0; -ensures 0 < old($CurrAddr); -ensures new == old($CurrAddr); -ensures $CurrAddr > old($CurrAddr) + obj_size; -ensures $size(new) == obj_size; -ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); -ensures alloc[new]; -ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); - -procedure $free(pointer: int); -modifies alloc; -requires alloc[pointer]; -requires $obj(pointer) == pointer; -ensures !alloc[pointer]; -ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); - -procedure $alloca(obj_size: int) returns (new: int); -modifies $CurrAddr, alloc; -requires obj_size > 0; -ensures 0 < old($CurrAddr); -ensures new == old($CurrAddr); -ensures $CurrAddr > old($CurrAddr) + obj_size; -ensures $size(new) == obj_size; -ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); -ensures alloc[new]; -ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); - -// SMACK-PRELUDE-END -// BEGIN SMACK-GENERATED CODE -const unique main: int; -axiom (main == -1024); -const unique __VERIFIER_assert: int; -axiom (__VERIFIER_assert == -2048); - - -procedure main() - modifies alloc, $CurrAddr; -{ - var $a: int; - var $b: int; - var $n: int; - var $n2: int; - var $a2: int; -$bb0: - assume $a > 0; - assume $b > 0; - $n := $mul($a, $b); - goto $bb1; -$bb1: - assert b0($a, $b, $n); - goto $bb2, $bb3; -$bb2: - $a2 := $sub($a, 1); - $n2 := $sub($n, $b); - $a := $a2; - $n := $n2; - goto $bb1; -$bb3: - assert ($n != 0) || ($a == 0); - return; -} - -procedure __VERIFIER_assert#1(p0: int) - returns ($r: int) ; - modifies alloc, $CurrAddr; - -// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/nonlin_mod.bpl b/bench_horn_ice/nonlin_mod.bpl deleted file mode 100755 index 853bb4291..000000000 --- a/bench_horn_ice/nonlin_mod.bpl +++ /dev/null @@ -1,180 +0,0 @@ -// SMACK-PRELUDE-BEGIN -procedure boogie_si_record_int(i: int); - -function {:existential true} b0(i:int, j:int): bool; - -// Integer arithmetic -function $add(p1:int, p2:int) returns (int) {p1 + p2} -function $sub(p1:int, p2:int) returns (int) {p1 - p2} -function $mul(p1:int, p2:int) returns (int) {p1 * p2} -function $sdiv(p1:int, p2:int) returns (int); -function $udiv(p1:int, p2:int) returns (int); -function $srem(p1:int, p2:int) returns (int); -function $urem(p1:int, p2:int) returns (int); -function $and(p1:int, p2:int) returns (int); -axiom $and(0,0) == 0; -axiom $and(0,1) == 0; -axiom $and(1,0) == 0; -axiom $and(1,1) == 1; -function $or(p1:int, p2:int) returns (int); -axiom $or(0,0) == 0; -axiom $or(0,1) == 1; -axiom $or(1,0) == 1; -axiom $or(1,1) == 1; -function $xor(p1:int, p2:int) returns (int); -axiom $xor(0,0) == 0; -axiom $xor(0,1) == 1; -axiom $xor(1,0) == 1; -axiom $xor(1,1) == 0; -function $lshr(p1:int, p2:int) returns (int); -function $ashr(p1:int, p2:int) returns (int); -function $shl(p1:int, p2:int) returns (int); -function $ult(p1:int, p2:int) returns (bool) {p1 < p2} -function $ugt(p1:int, p2:int) returns (bool) {p1 > p2} -function $ule(p1:int, p2:int) returns (bool) {p1 <= p2} -function $uge(p1:int, p2:int) returns (bool) {p1 >= p2} -function $slt(p1:int, p2:int) returns (bool) {p1 < p2} -function $sgt(p1:int, p2:int) returns (bool) {p1 > p2} -function $sle(p1:int, p2:int) returns (bool) {p1 <= p2} -function $sge(p1:int, p2:int) returns (bool) {p1 >= p2} -function $nand(p1:int, p2:int) returns (int); -function $max(p1:int, p2:int) returns (int); -function $min(p1:int, p2:int) returns (int); -function $umax(p1:int, p2:int) returns (int); -function $umin(p1:int, p2:int) returns (int); -function $i2b(i: int) returns (bool); -axiom (forall i:int :: $i2b(i) <==> i != 0); -axiom $i2b(0) == false; -function $b2i(b: bool) returns (int); -axiom $b2i(true) == 1; -axiom $b2i(false) == 0; - -// Floating point -type float; -function $fp(a:int) returns (float); -const $ffalse: float; -const $ftrue: float; -function $fadd(f1:float, f2:float) returns (float); -function $fsub(f1:float, f2:float) returns (float); -function $fmul(f1:float, f2:float) returns (float); -function $fdiv(f1:float, f2:float) returns (float); -function $frem(f1:float, f2:float) returns (float); -function $foeq(f1:float, f2:float) returns (bool); -function $foge(f1:float, f2:float) returns (bool); -function $fogt(f1:float, f2:float) returns (bool); -function $fole(f1:float, f2:float) returns (bool); -function $folt(f1:float, f2:float) returns (bool); -function $fone(f1:float, f2:float) returns (bool); -function $ford(f1:float, f2:float) returns (bool); -function $fueq(f1:float, f2:float) returns (bool); -function $fuge(f1:float, f2:float) returns (bool); -function $fugt(f1:float, f2:float) returns (bool); -function $fule(f1:float, f2:float) returns (bool); -function $fult(f1:float, f2:float) returns (bool); -function $fune(f1:float, f2:float) returns (bool); -function $funo(f1:float, f2:float) returns (bool); -function $fp2si(f:float) returns (int); -function $fp2ui(f:float) returns (int); -function $si2fp(i:int) returns (float); -function $ui2fp(i:int) returns (float); - -// Memory region declarations: 0 - -// SMACK Flat Memory Model - -function $ptr(obj:int, off:int) returns (int) {obj + off} -function $size(int) returns (int); -function $obj(int) returns (int); -function $off(ptr:int) returns (int) {ptr} - -var alloc: [int] bool; -var $CurrAddr:int; - -const unique $NULL: int; -axiom $NULL == 0; -const $UNDEF: int; - -function $pa(pointer: int, index: int, size: int) returns (int); -function $trunc(p: int) returns (int); -function $p2i(p: int) returns (int); -function $i2p(p: int) returns (int); -function $p2b(p: int) returns (bool); -function $b2p(b: bool) returns (int); - -axiom (forall p:int, i:int, s:int :: {$pa(p,i,s)} $pa(p,i,s) == p + i * s); -axiom (forall p:int :: $trunc(p) == p); - -axiom $b2p(true) == 1; -axiom $b2p(false) == 0; -axiom (forall i:int :: $p2b(i) <==> i != 0); -axiom $p2b(0) == false; -axiom (forall i:int :: $p2i(i) == i); -axiom (forall i:int :: $i2p(i) == i); -procedure __SMACK_nondet() returns (p: int); -procedure __SMACK_nondetInt() returns (p: int); - -procedure $malloc(obj_size: int) returns (new: int); -modifies $CurrAddr, alloc; -requires obj_size > 0; -ensures 0 < old($CurrAddr); -ensures new == old($CurrAddr); -ensures $CurrAddr > old($CurrAddr) + obj_size; -ensures $size(new) == obj_size; -ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); -ensures alloc[new]; -ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); - -procedure $free(pointer: int); -modifies alloc; -requires alloc[pointer]; -requires $obj(pointer) == pointer; -ensures !alloc[pointer]; -ensures (forall x:int :: {alloc[x]} x == pointer || old(alloc)[x] == alloc[x]); - -procedure $alloca(obj_size: int) returns (new: int); -modifies $CurrAddr, alloc; -requires obj_size > 0; -ensures 0 < old($CurrAddr); -ensures new == old($CurrAddr); -ensures $CurrAddr > old($CurrAddr) + obj_size; -ensures $size(new) == obj_size; -ensures (forall x:int :: new <= x && x < new + obj_size ==> $obj(x) == new); -ensures alloc[new]; -ensures (forall x:int :: {alloc[x]} x == new || old(alloc)[x] == alloc[x]); - -// SMACK-PRELUDE-END -// BEGIN SMACK-GENERATED CODE -const unique main: int; -axiom (main == -1024); -const unique __VERIFIER_assert: int; -axiom (__VERIFIER_assert == -2048); - - -procedure main() - modifies alloc, $CurrAddr; -{ - var $a: int; - var $b: int; - var $a1: int; - var $b1: int; -$bb0: - assume $b > 0; - assume $b == $a; - goto $bb1; -$bb1: - assert b0($a, $b); - goto $bb2, $bb3; -$bb2: - $a1 := $add($a, $b); - $a := $a1; - goto $bb1; -$bb3: - assert 0 == $sub($a, $mul($sdiv($a, $b), $b)); // mod - return; -} - -procedure __VERIFIER_assert#1(p0: int) - returns ($r: int) ; - modifies alloc, $CurrAddr; - -// END SMACK-GENERATED CODE diff --git a/bench_horn_ice/s_triv_01.bpl b/bench_horn_ice/s_triv_01.bpl new file mode 100644 index 000000000..a4c489456 --- /dev/null +++ b/bench_horn_ice/s_triv_01.bpl @@ -0,0 +1,12 @@ +procedure main() +{ + var x, y: int; + assume x < 2452; + assume x == y; + + while (*) { + x := x + 1; + } + + assert (y < 2452); +} \ No newline at end of file diff --git a/bench_horn_ice/s_triv_02.bpl b/bench_horn_ice/s_triv_02.bpl new file mode 100644 index 000000000..e07554fc2 --- /dev/null +++ b/bench_horn_ice/s_triv_02.bpl @@ -0,0 +1,12 @@ +procedure main() +{ + var x, y: int; + assume x == y; + + while (*) { + x := x + y; + y := x; + } + + assert (x == y); +} \ No newline at end of file diff --git a/bench_horn_ice/s_triv_03.bpl b/bench_horn_ice/s_triv_03.bpl new file mode 100644 index 000000000..6e0b2673e --- /dev/null +++ b/bench_horn_ice/s_triv_03.bpl @@ -0,0 +1,13 @@ +procedure main() +{ + var x, y: int; + assume x < 2452; + assume x == y; + + while (*) { + x := x + y; + y := x; + } + + assert (x == y); +} \ No newline at end of file diff --git a/bench_horn_ice/s_triv_04.bpl b/bench_horn_ice/s_triv_04.bpl new file mode 100644 index 000000000..0ed0af0fa --- /dev/null +++ b/bench_horn_ice/s_triv_04.bpl @@ -0,0 +1,13 @@ +procedure main() +{ + var x, y: int; + assume x < 2452; + assume x == y; + + while (*) { + x := x + 1; + y := x; + } + + assert (x == y); +} \ No newline at end of file diff --git a/bench_horn_ice/s_triv_05.bpl b/bench_horn_ice/s_triv_05.bpl new file mode 100644 index 000000000..866471a97 --- /dev/null +++ b/bench_horn_ice/s_triv_05.bpl @@ -0,0 +1,11 @@ +procedure main() +{ + var x, y: int; + y := 0; + + while (*) { + x := x + 1; + } + + assert (y == 0); +} \ No newline at end of file diff --git a/bench_horn_ice/s_triv_06.bpl b/bench_horn_ice/s_triv_06.bpl new file mode 100644 index 000000000..60b3f5182 --- /dev/null +++ b/bench_horn_ice/s_triv_06.bpl @@ -0,0 +1,12 @@ +procedure main() +{ + var x, y: int; + x := 0; + y := 0; + + while (*) { + x := x + 1; + } + + assert (y == 0); +} \ No newline at end of file diff --git a/bench_horn_ice/s_triv_07.bpl b/bench_horn_ice/s_triv_07.bpl new file mode 100644 index 000000000..bd8032f99 --- /dev/null +++ b/bench_horn_ice/s_triv_07.bpl @@ -0,0 +1,14 @@ +procedure main() +{ + var x, y: int; + x := 0; + y := 1; + + while (*) { + x := x + 1; + y := 0; + if (x == 1) { + assert (y == 0); + } + } +} \ No newline at end of file diff --git a/bench_horn_ice/s_triv_08.bpl b/bench_horn_ice/s_triv_08.bpl new file mode 100644 index 000000000..6b43956a2 --- /dev/null +++ b/bench_horn_ice/s_triv_08.bpl @@ -0,0 +1,11 @@ +procedure main() +{ + var x, y: int; + x := 0; + y := 0; + + // err… + // (rule (=> (inv 1 y) (inv x 1))) + + assert (x == y); +} \ No newline at end of file diff --git a/bench_horn_ice/s_triv_09.bpl b/bench_horn_ice/s_triv_09.bpl new file mode 100644 index 000000000..883e9e4e0 --- /dev/null +++ b/bench_horn_ice/s_triv_09.bpl @@ -0,0 +1,14 @@ +procedure main() +{ + var x, y: bool; + y := (!x); + + while (*) { + x := (!x); + y := (!y); + } + + if (x) { + assert (!y); + } +} \ No newline at end of file diff --git a/bench_horn_ice/s_triv_10.bpl b/bench_horn_ice/s_triv_10.bpl new file mode 100644 index 000000000..a1b778aab --- /dev/null +++ b/bench_horn_ice/s_triv_10.bpl @@ -0,0 +1,9 @@ +procedure main() +{ + var x: bool; + x := false; + while (*) { + x := x; + } + assert (!x); +} \ No newline at end of file diff --git a/bench_horn_ice/s_triv_11.bpl b/bench_horn_ice/s_triv_11.bpl new file mode 100644 index 000000000..cea68ee9d --- /dev/null +++ b/bench_horn_ice/s_triv_11.bpl @@ -0,0 +1,13 @@ +procedure main() +{ + var x, y, temp: bool; + y := !x; + + while (*) { + temp := x; + x := !y; + y := !temp; + } + + assert(!x || !y); +} \ No newline at end of file diff --git a/bench_horn_ice/s_triv_12.bpl b/bench_horn_ice/s_triv_12.bpl new file mode 100644 index 000000000..702ee6721 --- /dev/null +++ b/bench_horn_ice/s_triv_12.bpl @@ -0,0 +1,15 @@ +procedure main() +{ + var x, y, z, v: bool; + x := !y; + z := !v; + + while (*) { + x := !x; + y := !y; + z := !z; + v := !v; + } + + assert((y != z) || (x == v)); +} \ No newline at end of file diff --git a/bench_horn_ice/s_triv_13.bpl b/bench_horn_ice/s_triv_13.bpl new file mode 100644 index 000000000..c50a28824 --- /dev/null +++ b/bench_horn_ice/s_triv_13.bpl @@ -0,0 +1,14 @@ +procedure main() +{ + var x: bool; + var y: int; + + x := true; + assume x == (y == 0); + + while (*) { + y := y + 1; + } + + assert (y >= 0); +} \ No newline at end of file diff --git a/bench_horn_ice/s_triv_14.bpl b/bench_horn_ice/s_triv_14.bpl new file mode 100644 index 000000000..d06c503d9 --- /dev/null +++ b/bench_horn_ice/s_triv_14.bpl @@ -0,0 +1,17 @@ +procedure main() +{ + var x: bool; + var y: int; + y := 0; + + while (*) { + x := (0 == (y mod 2)); + if (x) { + y := y + 2; + } else { + y := y - 1; + } + } + + assert (y != 13621); +} \ No newline at end of file diff --git a/bench_horn_ice/s_triv_15.bpl b/bench_horn_ice/s_triv_15.bpl new file mode 100644 index 000000000..26414341b --- /dev/null +++ b/bench_horn_ice/s_triv_15.bpl @@ -0,0 +1,13 @@ +procedure main() +{ + var x: bool; + var y: int; + y := 0; + x := (y >= 0); + + while (*) { + y := y - 1; + } + + assert (x); +} \ No newline at end of file From 144b6638646f56cd103237fe441441717c49899d Mon Sep 17 00:00:00 2001 From: Sam Kaufman Date: Fri, 23 Feb 2018 11:35:10 -0500 Subject: [PATCH 069/236] More ICE/Boogie benchmarks --- bench_horn_ice/ex14.bpl | 11 ++++++++++ bench_horn_ice/ex7.bpl | 14 +++++++++++++ ...y_k_true-unreach-call_true-termination.bpl | 14 +++++++++++++ bench_horn_ice/s_mutants_16.bpl | 17 +++++++++++++++ bench_horn_ice/s_mutants_17.bpl | 17 +++++++++++++++ bench_horn_ice/s_mutants_21.bpl | 21 +++++++++++++++++++ bench_horn_ice/s_mutants_22.bpl | 20 ++++++++++++++++++ bench_horn_ice/s_mutants_24.bpl | 16 ++++++++++++++ bench_horn_ice/s_seeds_04.bpl | 13 ++++++++++++ bench_horn_ice/s_seeds_09.bpl | 15 +++++++++++++ bench_horn_ice/s_seeds_10.bpl | 9 ++++++++ 11 files changed, 167 insertions(+) create mode 100644 bench_horn_ice/ex14.bpl create mode 100644 bench_horn_ice/ex7.bpl create mode 100644 bench_horn_ice/nonlin_count_by_k_true-unreach-call_true-termination.bpl create mode 100644 bench_horn_ice/s_mutants_16.bpl create mode 100644 bench_horn_ice/s_mutants_17.bpl create mode 100644 bench_horn_ice/s_mutants_21.bpl create mode 100644 bench_horn_ice/s_mutants_22.bpl create mode 100644 bench_horn_ice/s_mutants_24.bpl create mode 100644 bench_horn_ice/s_seeds_04.bpl create mode 100644 bench_horn_ice/s_seeds_09.bpl create mode 100644 bench_horn_ice/s_seeds_10.bpl diff --git a/bench_horn_ice/ex14.bpl b/bench_horn_ice/ex14.bpl new file mode 100644 index 000000000..0075634d8 --- /dev/null +++ b/bench_horn_ice/ex14.bpl @@ -0,0 +1,11 @@ +procedure main() +{ + var x, y, n: int; + x := 1; + + while (x <= n) { + y := n - x; + assert(!((y < 0) || (y >= n))) + x := x + 1; + } +} \ No newline at end of file diff --git a/bench_horn_ice/ex7.bpl b/bench_horn_ice/ex7.bpl new file mode 100644 index 000000000..17caca962 --- /dev/null +++ b/bench_horn_ice/ex7.bpl @@ -0,0 +1,14 @@ +procedure main() +{ + var x, y, i, len: int; + assume x >= 0; + assume y >= 0; + assume y < x; + assume len == x; + assume i == 0; + + while (i < y) { + assert(!(i < 0 || i >= len)); + i := i + 1; + } +} \ No newline at end of file diff --git a/bench_horn_ice/nonlin_count_by_k_true-unreach-call_true-termination.bpl b/bench_horn_ice/nonlin_count_by_k_true-unreach-call_true-termination.bpl new file mode 100644 index 000000000..7d98f7c20 --- /dev/null +++ b/bench_horn_ice/nonlin_count_by_k_true-unreach-call_true-termination.bpl @@ -0,0 +1,14 @@ +procedure main() +{ + var i, k, LRG: int; + i := 0; + assume 0 <= k; + assume k <= 10; + assume LRG >= 0; + + while (i < (LRG * k)) { + i := i + k; + } + + assert i == (LRG * k); +} \ No newline at end of file diff --git a/bench_horn_ice/s_mutants_16.bpl b/bench_horn_ice/s_mutants_16.bpl new file mode 100644 index 000000000..05c6a2081 --- /dev/null +++ b/bench_horn_ice/s_mutants_16.bpl @@ -0,0 +1,17 @@ +procedure main() +{ + var x1, x3, y: int; + x1 := 0; + assume y > 0 && y < 5; + assume x3 == y * 3; + + while (1) { + assert x3 >= 3; + assert x3 <= 212; + if (x1 >= 200) { + break; + } + x1 := x1 + 1; + x3 := x3 + 1; + } +} \ No newline at end of file diff --git a/bench_horn_ice/s_mutants_17.bpl b/bench_horn_ice/s_mutants_17.bpl new file mode 100644 index 000000000..ec20c3662 --- /dev/null +++ b/bench_horn_ice/s_mutants_17.bpl @@ -0,0 +1,17 @@ +procedure main() +{ + var x1, x3, y: int; + x1 := 0; + assume y > 0 && y < 5; + assume x3 == y * 3; + + while (1) { + assert x3 >= 3; + assert x3 <= 1012; + if (x1 >= 1000) { + break; + } + x1 := x1 + 1; + x3 := x3 + 1; + } +} \ No newline at end of file diff --git a/bench_horn_ice/s_mutants_21.bpl b/bench_horn_ice/s_mutants_21.bpl new file mode 100644 index 000000000..42b4f84ff --- /dev/null +++ b/bench_horn_ice/s_mutants_21.bpl @@ -0,0 +1,21 @@ +procedure main() +{ + var x1, x3, x5: int; + x1 := 0; + x3 := 0; + assume x9 > 0 && x9 < 10; + assume x5 == 10 * x9; + + while (*) { + assert (x5 != 78); + + if (*) { + x1 := x1 + 1; + x3 := x3 - 1; + } else { + x1 := x1 - 1; + x3 := x3 + 1; + } + x5 := x5 + x1 + x3; + } +} \ No newline at end of file diff --git a/bench_horn_ice/s_mutants_22.bpl b/bench_horn_ice/s_mutants_22.bpl new file mode 100644 index 000000000..ce0255cae --- /dev/null +++ b/bench_horn_ice/s_mutants_22.bpl @@ -0,0 +1,20 @@ +procedure main() +{ + var x1, x3, x5, x9: int; + x1 := 0; + x3 := 0; + x5 := 2 * x9; + + while (*) { + assert (x5 != 77); + + if (*) { + x1 := x1 + 1; + x3 := x3 + 1; + } else { + x1 := x1 - 1; + x3 := x3 - 1; + } + x5 := x5 + x1 + x3; + } +} \ No newline at end of file diff --git a/bench_horn_ice/s_mutants_24.bpl b/bench_horn_ice/s_mutants_24.bpl new file mode 100644 index 000000000..4dab3c4d4 --- /dev/null +++ b/bench_horn_ice/s_mutants_24.bpl @@ -0,0 +1,16 @@ +procedure main() +{ + var N1, N2, i2: int; + assume N1 == N2; + assume i1 == N1; + assume i2 == 0; + + while (1) { + assert((i2 == N1) == (i1 == 0)); + if (!(i1 > 0 && i2 < N1)) { + break; + } + i1 := i1 - 1; + i2 := i2 + 1; + } +} \ No newline at end of file diff --git a/bench_horn_ice/s_seeds_04.bpl b/bench_horn_ice/s_seeds_04.bpl new file mode 100644 index 000000000..a86eac1cc --- /dev/null +++ b/bench_horn_ice/s_seeds_04.bpl @@ -0,0 +1,13 @@ +procedure main() +{ + var m, i, b: int; + m := 0; + i := 0; + + while (*) { + i := -1 * i; + m := m + 1; + } + + assert (m != 1000 || i >= 0); +} \ No newline at end of file diff --git a/bench_horn_ice/s_seeds_09.bpl b/bench_horn_ice/s_seeds_09.bpl new file mode 100644 index 000000000..a7d37ed55 --- /dev/null +++ b/bench_horn_ice/s_seeds_09.bpl @@ -0,0 +1,15 @@ +procedure main() +{ + var m, i: int; + m := 2; + i := 1; + + while (*) { + assert (i <= 80 || m > 81); + if (m <= i) { + break; + } + m := m + 1; + i := i + 1; + } +} \ No newline at end of file diff --git a/bench_horn_ice/s_seeds_10.bpl b/bench_horn_ice/s_seeds_10.bpl new file mode 100644 index 000000000..ec6afa3d9 --- /dev/null +++ b/bench_horn_ice/s_seeds_10.bpl @@ -0,0 +1,9 @@ +procedure main() +{ + var m, i, b: int; + i := 0; + while (*) { + assert (i == 0); + i := -1 * i; + } +} \ No newline at end of file From b83da8414fb1ce9adabb54c1d4b07ede81b1df44 Mon Sep 17 00:00:00 2001 From: Sam Kaufman Date: Fri, 23 Feb 2018 13:28:08 -0500 Subject: [PATCH 070/236] Added Windows AMI override --- tools/deep_bench/README.md | 1 + .../deep_bench/windows/terraform/win-cluster.tf | 16 +++++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/tools/deep_bench/README.md b/tools/deep_bench/README.md index 53fbd3ee9..802bc5aa6 100644 --- a/tools/deep_bench/README.md +++ b/tools/deep_bench/README.md @@ -1,6 +1,7 @@ # Running Benchmarks on an AWS Cluster - set the `AWS_REGION` environment variable (e.g. `us-west-1` or `us-east-1`) +- if built, set `TF_VAR_freqhorn_ami` to the ID of your FreqHorn AMI (the latest Windows 2012 AMI will be used otherwise) ## Development diff --git a/tools/deep_bench/windows/terraform/win-cluster.tf b/tools/deep_bench/windows/terraform/win-cluster.tf index 3a8ff1307..31ed914da 100644 --- a/tools/deep_bench/windows/terraform/win-cluster.tf +++ b/tools/deep_bench/windows/terraform/win-cluster.tf @@ -10,6 +10,10 @@ variable "instance_type" { default = "m4.xlarge" } +variable "freqhorn_ami" { + default = "" +} + provider "aws" {} data "http" "ip" { @@ -174,6 +178,16 @@ data "aws_ami" "windows2012" { } } +data "aws_ami" "freqhorn" { + most_recent = true + owners = ["self"] + + filter { + name = "name" + values = ["FreqHorn-Win-Benchmark-Image"] + } +} + # # Instances # @@ -195,7 +209,7 @@ resource "aws_spot_fleet_request" "fleet_req" { launch_specification { instance_type = "${var.instance_type}" - ami = "${data.aws_ami.windows2012.id}" + ami = "${var.freqhorn_ami != "" ? var.freqhorn_ami : data.aws_ami.windows2012.id}" subnet_id = "${aws_subnet.main.id}" vpc_security_group_ids = ["${aws_security_group.secgrp.id}"] associate_public_ip_address = true From 469db67666c625823136d92b355e969d36ba8099 Mon Sep 17 00:00:00 2001 From: Sam Kaufman Date: Tue, 27 Feb 2018 09:15:58 -0500 Subject: [PATCH 071/236] New analyses (minus charting) --- tools/deep_bench/README.md | 2 +- tools/deep_bench/linux/all-jobs.py | 50 +++ tools/deep_bench/linux/ansible/inventory | 9 + tools/deep_bench/linux/ansible/playbook.yml | 114 +++++++ tools/deep_bench/linux/benchmark-freqhorn.py | 180 ----------- tools/deep_bench/linux/packer/provision.sh | 20 -- tools/deep_bench/linux/packer/worker.json | 61 ++-- .../linux/run-freqhorn-benchmarks.sh | 26 +- tools/deep_bench/linux/start-cluster.sh | 20 ++ tools/deep_bench/linux/terraform/cluster.tf | 62 ++-- .../scripts/benchmark-supervisor.py | 298 ++++++++++++++++++ tools/deep_bench/windows/ansible/inventory | 4 +- tools/deep_bench/windows/ansible/playbook.yml | 4 +- .../benchscripts/files/benchmark-others.py | 293 ----------------- .../ansible/roles/benchscripts/tasks/main.yml | 40 +-- .../ansible/roles/spacer/tasks/main.yml | 4 +- .../windows/run-other-benchmarks.sh | 18 +- .../windows/terraform/win-cluster.tf | 17 +- 18 files changed, 612 insertions(+), 610 deletions(-) create mode 100755 tools/deep_bench/linux/all-jobs.py create mode 100644 tools/deep_bench/linux/ansible/inventory create mode 100644 tools/deep_bench/linux/ansible/playbook.yml delete mode 100755 tools/deep_bench/linux/benchmark-freqhorn.py delete mode 100755 tools/deep_bench/linux/packer/provision.sh create mode 100755 tools/deep_bench/linux/start-cluster.sh create mode 100755 tools/deep_bench/scripts/benchmark-supervisor.py delete mode 100755 tools/deep_bench/windows/ansible/roles/benchscripts/files/benchmark-others.py diff --git a/tools/deep_bench/README.md b/tools/deep_bench/README.md index 802bc5aa6..7e32a9a5b 100644 --- a/tools/deep_bench/README.md +++ b/tools/deep_bench/README.md @@ -1,7 +1,7 @@ # Running Benchmarks on an AWS Cluster - set the `AWS_REGION` environment variable (e.g. `us-west-1` or `us-east-1`) -- if built, set `TF_VAR_freqhorn_ami` to the ID of your FreqHorn AMI (the latest Windows 2012 AMI will be used otherwise) +- if built, set `TF_VAR_freqhorn_windows_ami` and/or `TF_VAR_freqhorn_linux_ami` to the ID of your FreqHorn AMI (the latest Ubuntu/Windows 2012 AMIs will be used otherwise) ## Development diff --git a/tools/deep_bench/linux/all-jobs.py b/tools/deep_bench/linux/all-jobs.py new file mode 100755 index 000000000..1a83047d2 --- /dev/null +++ b/tools/deep_bench/linux/all-jobs.py @@ -0,0 +1,50 @@ +#!/usr/bin/env python2 +from __future__ import print_function +from collections import namedtuple +import argparse +import glob +import os + + +AlgoConf = namedtuple('AlgoConf', 'iters hypers') + + +algo_confs = { + 'mcmc': AlgoConf(3, [None]), + 'ice': AlgoConf(3, [None]), + 'z3': AlgoConf(3, ['spacerhyp1', 'spacerhyp2']), + 'freqhorn': AlgoConf(3, ['v1', 'v1-eps', 'v1-eps-freqs', + 'v1-eps-freqs-aggp', 'aggp', 'aggp-itp3', + 'freqs-aggp', 'freqs-aggp']) +} + + +def smt2_names(): + benchnames = [os.path.splitext(os.path.split(x)[1])[0] + for x in glob.glob("../../../bench_horn/*.smt2")] + benchnames.sort() + return benchnames + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("ALGOS", type=str, nargs='+') + args = parser.parse_args() + + max_iters = max(algo_confs[x.lower()].iters for x in args.ALGOS) + + for i in range(max_iters): + for bench in smt2_names(): + for algo in args.ALGOS: + aconf = algo_confs[algo] + if i >= aconf.iters: + continue + for hyper in aconf.hypers: + hypflag = "" if hyper is None else "--hyper" + out = "%s ::: %s ::: %s ::: %s ::: %d" % \ + (hypflag, bench, algo, hyper, i) + print(out) + + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/tools/deep_bench/linux/ansible/inventory b/tools/deep_bench/linux/ansible/inventory new file mode 100644 index 000000000..eba7db279 --- /dev/null +++ b/tools/deep_bench/linux/ansible/inventory @@ -0,0 +1,9 @@ +[linux] + +[linux:vars] +ansible_user=ubuntu + +[linux:children] +tag_FreqHornPlatform_Linux + +[tag_FreqHornPlatform_Linux] diff --git a/tools/deep_bench/linux/ansible/playbook.yml b/tools/deep_bench/linux/ansible/playbook.yml new file mode 100644 index 000000000..e724cecbe --- /dev/null +++ b/tools/deep_bench/linux/ansible/playbook.yml @@ -0,0 +1,114 @@ +--- +- hosts: linux + gather_facts: no + pre_tasks: + - name: install Python 2 for Ansible + become: yes + raw: test -e /usr/bin/python || (apt update && apt install -y python-simplejson) + register: initpy + changed_when: initpy.stdout + - name: gather facts + setup: + tasks: + - name: remove gcc, g++, llvm/clang 3.6 & 3.7 + become: yes + apt: + name: "{{ item }}" + state: absent + autoremove: yes + with_items: + - gcc + - g++ + - clang-3.6 + - clang-3.7 + - llvm-3.6 + - llvm-3.6-dev + - llvm-3.7 + - llvm-3.7-dev + + - name: install basic packages + become: yes + apt: + name: "{{ item }}" + state: latest + cache_valid_time: 600 + autoremove: yes + with_items: + - clang-3.8 + - llvm-3.8 + - llvm-3.8-dev + - libboost-dev + - libboost-system-dev + - libboost-mpi-dev + - openmpi-common + - openmpi-bin + - subversion + - python-subprocess32 + - libgmp-dev + - libomp-dev + - cmake + - cmake-data + - htop + - awscli + - rsync + + - name: update 'cc' alternative to use clang + become: yes + alternatives: + name: cc + path: /usr/bin/clang-3.8 + + - name: update 'c++' alternative to use clang + become: yes + alternatives: + name: c++ + path: /usr/bin/clang++-3.8 + link: /usr/bin/c++ + + - name: sync entire source tree + synchronize: + src: ../../../../../ + dest: /home/ubuntu/aeval + mode: push + archive: no + checksum: yes + recursive: yes + perms: yes + owner: no + group: no + rsync_opts: + - "--exclude=build" + register: sync_info + + # - name: destroy 'build' directory + # file: + # path: /home/ubuntu/aeval/build + # state: absent + # when: sync_info.changed + + # - name: hack CMakeLists.txt so that it finds LLVM + # lineinfile: + # path: /home/ubuntu/aeval/CMakeLists.txt + # line: "find_package(LLVM REQUIRED CONFIG)" + # insertbefore: BOF + + - file: + path: /home/ubuntu/aeval/build + state: directory + mode: 0700 + + - name: Check if a `freqhorn` exists + stat: + path: /home/ubuntu/aeval/build/tools/deep/freqhorn + register: freqhorn_stat + + - name: build FreqHorn + shell: | + cd build && + cmake .. && + make && + make + args: + chdir: /home/ubuntu/aeval + creates: /home/ubuntu/aeval/build/tools/deep/freqhorn + when: sync_info.changed or freqhorn_stat.stat.exists == False diff --git a/tools/deep_bench/linux/benchmark-freqhorn.py b/tools/deep_bench/linux/benchmark-freqhorn.py deleted file mode 100755 index 722315c10..000000000 --- a/tools/deep_bench/linux/benchmark-freqhorn.py +++ /dev/null @@ -1,180 +0,0 @@ -#!/usr/bin/env python -from __future__ import print_function -import os -import re -import sys -import math -import json -import argparse -import tempfile -import subprocess32 -import traceback -from itertools import product, izip - - -ONE_MIN = 1 * 60 # in seconds -SUCCESS_ITERS_RE = re.compile(r'\s*\-+>\s+Success after (.*) iterations\s*') -ELAPSED_RE = re.compile(r'\s*elapsed: (.*)s\s*') -PROCS_TO_TRY = [1, 4] - - -class NoSuccessException(Exception): - pass - - -def name_only(path): - """Returns just the file name. - - >>> name_only("alpha/filename.txt") - "filename" - """ - return os.path.splitext(os.path.split(path)[1])[0].lower() - - -def run_deephorn(example_path, proc_cnt, aggprune, logs_dir_path, timeout=ONE_MIN): - aggprune_arg = "0" - if aggprune: - aggprune_arg = "1" - cmd = os.getenv("BENCH_MPIRUN", "/usr/bin/mpirun") - proc = subprocess32.Popen( - [cmd, "-mca", "btl", "^openib", "-n", str(proc_cnt), - "-output-filename", os.path.join(logs_dir_path, "log"), - "../../build/tools/deep/deephorn", "2000000", "1", "1", - aggprune_arg, example_path], - env={"TMPDIR": "/tmp", "PATH": os.getenv("PATH")}) - try: - retcode = proc.wait(timeout=timeout) - except subprocess32.TimeoutExpired: - # Make sure we clean up if FreqHorn hangs - proc.kill() - raise - if retcode != 0: - raise subprocess32.CalledProcessError(retcode, cmd) - - -def parse_log_dir_for_time(dirpath): - """Returns seconds if any log in `path` is successful. Raises otherwise.""" - iter_cnt, elapsed_time = None, float('Inf') - for filename in os.listdir(dirpath): - with open(os.path.join(dirpath, filename), 'r') as f: - for line in f.readlines()[-5:]: - elapsed_match = ELAPSED_RE.match(line) - iters_match = SUCCESS_ITERS_RE.match(line) - if elapsed_match: - elapsed_fnd = float(elapsed_match.group(1)) - elapsed_time = min(elapsed_time, elapsed_fnd) - if iters_match: - iters_fnd = int(iters_match.group(1)) - if iter_cnt is None or iters_fnd < iter_cnt: - iter_cnt = iters_fnd - if iter_cnt is not None and not math.isinf(elapsed_time): - return iter_cnt, elapsed_time - raise NoSuccessException("no success in " + dirpath) - - -def hyperps(): - return product(PROCS_TO_TRY, [True, False]) - - -def hyperp_names(): - for p, a in hyperps(): - aname = "agg_off" - if a: - aname = "agg_on" - yield str(p) + "," + aname - - -def main(): - parser = argparse.ArgumentParser() - parser.add_argument("SMTPATHS", nargs='+') - parser.add_argument('--hist', action='store_true', - help="show histogram of times (only one smt)") - parser.add_argument("-i", "--iters", default=100, type=int, - help="the number of times to run deephorn per pcnt") - parser.add_argument("-o", "--outdir", type=str, - help="path to directory to save times and/or histograms") - parser.add_argument("--logdir", type=str, - help="path to directory to save logs") - parser.add_argument("--hyper", type=str) - parser.add_argument("-v", "--verbose", action="store_true") - args = parser.parse_args() - - if args.hist and len(args.SMTPATHS) > 1: - print("--hist only compatible with a single path", file=sys.stderr) - return 1 - - if args.logdir and os.path.exists(args.logdir): - print("logdir already exists", file=sys.stderr) - return 2 - - if args.outdir and not os.path.exists(args.outdir): - os.makedirs(args.outdir) - - times = {s: {k: [] for k in hyperp_names()} for s in args.SMTPATHS} - iter_cnts = {s: {k: [] for k in hyperp_names()} for s in args.SMTPATHS} - unsuccess_cnts = {s: {k: 0 for k in hyperp_names()} for s in args.SMTPATHS} - try: - if args.logdir: - tmp_dir = args.logdir - else: - tmp_dir = tempfile.mkdtemp() - for iter_ in xrange(args.iters): - for spath in args.SMTPATHS: - for (pcnt, aggprune), hypername in izip(hyperps(), hyperp_names()): - if args.hyper and args.hyper != hypername: - continue - log_path = os.path.join(tmp_dir, name_only(spath), hypername, str(iter_)) - if args.verbose: - print("logs:", spath, "=", log_path) - os.makedirs(log_path) - - try: - run_deephorn(spath, pcnt, aggprune, log_path) - except subprocess32.TimeoutExpired: - print("Timeout expired; marking as fail", file=sys.stderr) - unsuccess_cnts[spath][hypername] += 1 - continue - except subprocess32.CalledProcessError: - traceback.print_exc() - continue - - try: - i, t = parse_log_dir_for_time(log_path) - times[spath][hypername].append(t) - iter_cnts[spath][hypername].append(i) - except NoSuccessException: - unsuccess_cnts[spath][hypername] += 1 - - # Checkpoint the times after each benchmark - if args.outdir: - with open(os.path.join(args.outdir, "times.json"), 'w') as f: - json.dump({'times': times, - 'iterCnts': iter_cnts, - 'unsuccessCnts': unsuccess_cnts}, f) - except KeyboardInterrupt: - pass - - # Print the times - for smtpath in times.iterkeys(): - subtime, subiters = times[smtpath], iter_cnts[smtpath] - asterisk = ":" - total_unsuc = sum(unsuccess_cnts[smtpath].values()) - if total_unsuc: - asterisk = " [unsuccessful " + str(total_unsuc) + "]:" - print(smtpath + asterisk) - for pcnt, t in subtime.iteritems(): - print("\t" + str(pcnt) + " process(es) took: " + str(sorted(t))) - for pcnt, t in subiters.iteritems(): - print("\t" + str(pcnt) + " process(es) iterated: " + str(sorted(t))) - - # Draw histogram - if args.hist: - import matplotlib.pyplot as plt - plt.hist(times.values()[0].values()) - plt.show() - - -if __name__ == '__main__': - ret = main() - if ret: - sys.exit(ret) diff --git a/tools/deep_bench/linux/packer/provision.sh b/tools/deep_bench/linux/packer/provision.sh deleted file mode 100755 index ad6fdb5e2..000000000 --- a/tools/deep_bench/linux/packer/provision.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/bash - -sudo apt-get update -sudo apt install -y cmake clang clang-c++ libboost-dev libboost-system-dev \ - libboost-mpi-dev openmpi-common openmpi-bin subversion htop \ - python-subprocess32 libgmp-dev libomp-dev awscli - -sudo update-alternatives --install /usr/bin/cc cc /usr/bin/clang 100 -sudo update-alternatives --install /usr/bin/c++ c++ /usr/bin/clang++ 100 - -# aeval will be copied from local -# git clone -b rnd-parallel https://github.com/grigoryfedyukovich/aeval.git /home/ubuntu/aeval -mkdir /home/ubuntu/out && -cd /home/ubuntu/aeval && -rm -rf build && -mkdir build && -cd build && -cmake .. && -make && -make diff --git a/tools/deep_bench/linux/packer/worker.json b/tools/deep_bench/linux/packer/worker.json index af9945729..99419438b 100644 --- a/tools/deep_bench/linux/packer/worker.json +++ b/tools/deep_bench/linux/packer/worker.json @@ -6,41 +6,36 @@ "aws_vpc_id": "", "aws_subnet_id": "" }, - "builders": [{ - "type": "amazon-ebs", - "access_key": "{{user `aws_access_key`}}", - "secret_key": "{{user `aws_secret_key`}}", - "region": "{{user `aws_region`}}", - "source_ami": "ami-80861296", - "instance_type": "m4.xlarge", - "ssh_username": "ubuntu", - "ami_name": "freqhorn-benchmark-worker {{timestamp}}", - "vpc_id": "{{user `aws_vpc_id`}}", - "subnet_id": "{{user `aws_subnet_id`}}", - "spot_price": 0.80, - "launch_block_device_mappings": [{ - "device_name": "/dev/sda1", - "volume_size": 13, - "delete_on_termination": true - }], - "tags": { - "Project": "FreqHorn" + "builders": [ + { + "type": "amazon-ebs", + "access_key": "{{user `aws_access_key`}}", + "secret_key": "{{user `aws_secret_key`}}", + "region": "{{user `aws_region`}}", + "source_ami": "ami-ee4eac93", + "instance_type": "m4.xlarge", + "ssh_username": "ubuntu", + "ami_name": "freqhorn-benchmark-worker {{timestamp}}", + "vpc_id": "{{user `aws_vpc_id`}}", + "subnet_id": "{{user `aws_subnet_id`}}", + "spot_price": 0.80, + "launch_block_device_mappings": [ + { + "device_name": "/dev/sda1", + "volume_size": 13, + "delete_on_termination": true + } + ], + "tags": { + "Project": "FreqHorn", + "FreqHornPlatform": "Windows" + } } - }], + ], "provisioners": [ { - "type": "shell", - "inline": ["mkdir /home/ubuntu/aeval"] - }, - { - "type": "file", - "source": "../../../", - "destination": "/home/ubuntu/aeval" - }, - { - "type": "shell", - "script": "provision.sh", - "pause_before": "30s" + "type": "ansible", + "playbook_file": "../ansible/playbook.yml" } ] -} +} \ No newline at end of file diff --git a/tools/deep_bench/linux/run-freqhorn-benchmarks.sh b/tools/deep_bench/linux/run-freqhorn-benchmarks.sh index 2bc255acb..84e2c61a0 100755 --- a/tools/deep_bench/linux/run-freqhorn-benchmarks.sh +++ b/tools/deep_bench/linux/run-freqhorn-benchmarks.sh @@ -1,16 +1,6 @@ #!/usr/bin/env bash -set -x - -cd terraform || exit 1 -terraform apply || exit 1 -cd .. - -echo "" -echo " Wait for the cluster to be up and running (not initializing)." -echo " Then hit Enter to continue." -echo "" -read +set -e # Get IP addresses cd terraform || exit 1 @@ -42,22 +32,20 @@ cp ~/.ssh/config ~/.ssh/config.backup # TODO: rsync & re-build (instead of prior update pass) # Run the jobs -find ../../bench_horn/*.smt2 -exec basename {} .smt2 \; | \ -BENCH_MPIRUN=/usr/bin/mpirun parallel \ +./all-jobs.py z3 | parallel \ --resume-failed \ --joblog ./clusterjobs.log \ - --return "out-{1}-{2}-i{3}.tar.gz" \ + --return "out-{2}-{3}--{4}--i{5}.tar.gz" \ --cleanup \ + --colsep ':::' \ -a - \ - --env BENCH_MPIRUN \ --sshlogin $HOSTS \ "rm -rf out && " \ "mkdir out && " \ - "cd /home/ubuntu/aeval/tools/deep_bench && " \ - "./benchmark-freqhorn.py -v -i 1 --logdir /home/ubuntu/out/benchlogs -o /home/ubuntu/out/ --hyper {2} /home/ubuntu/aeval/bench_horn/{1}.smt2 &> /home/ubuntu/out/std.log ; " \ + "cd /home/ubuntu/aeval/tools/deep_bench/scripts && " \ + "FREQHORN_ROOT=/home/ubuntu/aeval FREQHORN_BENCH=/home/ubuntu/aeval/bench_horn ./benchmark-supervisor.py -o /home/ubuntu/out {1} {4} {3} {2} &> /home/ubuntu/out/supervisor.std.log ; " \ "cd /home/ubuntu ; " \ - "tar -zcf out-{1}-{2}-i{3}.tar.gz out/ ;" \ - ::: 2,agg_on 2,agg_off 5,agg_on 5,agg_off ::: {0..2} + "tar -zcf out-{2}-{3}--{4}--i{5}.tar.gz out/ ;" # Remove the disabling of StrictHostKeyChecking mv ~/.ssh/config.backup ~/.ssh/config diff --git a/tools/deep_bench/linux/start-cluster.sh b/tools/deep_bench/linux/start-cluster.sh new file mode 100755 index 000000000..57c67da23 --- /dev/null +++ b/tools/deep_bench/linux/start-cluster.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +set -e + +export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES + +# Spin up cluster/wait for connection +if [[ $1 != "--provision" ]] +then + cd terraform + terraform apply + cd ../ansible + ansible -i ../../scripts/ec2-inv.py -i inventory linux -m wait_for_connection -a "timeout=900 sleep=3" +else + cd ansible +fi + +# Provision machines +ansible-playbook -i ../../scripts/ec2-inv.py -i inventory playbook.yml +cd .. diff --git a/tools/deep_bench/linux/terraform/cluster.tf b/tools/deep_bench/linux/terraform/cluster.tf index 77f8cf69c..1075d7dc4 100644 --- a/tools/deep_bench/linux/terraform/cluster.tf +++ b/tools/deep_bench/linux/terraform/cluster.tf @@ -1,10 +1,21 @@ variable "cluster_size" { - type = "int" - default = 20 + default = "20" +} + +variable "instance_type" { + default = "m4.xlarge" +} + +variable "freqhorn_linux_ami" { + default = "" } provider "aws" {} +data "http" "ip" { + url = "http://icanhazip.com" +} + # # Simple VPC for instance # @@ -12,18 +23,17 @@ resource "aws_vpc" "main" { cidr_block = "192.168.0.0/16" tags { - Name = "BenchmarkFreqHorn-VPC" + Name = "BenchmarkFreqHorn-Linux-VPC" } } resource "aws_subnet" "main" { vpc_id = "${aws_vpc.main.id}" - availability_zone = "us-east-1e" cidr_block = "192.168.1.0/24" map_public_ip_on_launch = true tags { - Name = "BenchmarkFreqHorn-Subnet" + Name = "BenchmarkFreqHorn-Linux-Subnet" } } @@ -31,7 +41,7 @@ resource "aws_internet_gateway" "igw" { vpc_id = "${aws_vpc.main.id}" tags { - Name = "BenchmarkFreqHorn-InternetGateway" + Name = "BenchmarkFreqHorn-Linux-InternetGateway" } } @@ -46,11 +56,15 @@ resource "aws_security_group" "secgrp" { description = "Allow inbound SSH" vpc_id = "${aws_vpc.main.id}" + # SSH from local IP ingress { - from_port = 22 - to_port = 22 - protocol = "tcp" - cidr_blocks = ["0.0.0.0/0"] + from_port = 22 + to_port = 22 + protocol = "tcp" + + cidr_blocks = [ + "${chomp(data.http.ip.body)}/32", + ] } egress { @@ -124,15 +138,21 @@ EOF } # -# Find the AMI we built with ../packer/worker.json +# Default AMI # -data "aws_ami" "worker" { + +data "aws_ami" "ubuntu16" { most_recent = true - owners = ["self"] + owners = ["099720109477"] + + filter { + name = "name" + values = ["ubuntu/images/hvm-ssd/ubuntu-xenial-16.04-amd64-server-*"] + } filter { - name = "tag:Project" - values = ["FreqHorn"] + name = "virtualization-type" + values = ["hvm"] } } @@ -144,21 +164,23 @@ resource "aws_spot_fleet_request" "fleet_req" { iam_fleet_role = "${aws_iam_role.iam_fleet_role.arn}" spot_price = "0.10" - target_capacity = "${vars.cluster_size}" + target_capacity = "${var.cluster_size}" terminate_instances_with_expiration = true launch_specification { - instance_type = "m4.xlarge" - ami = "${data.aws_ami.worker.id}" + instance_type = "${var.instance_type}" + ami = "${var.freqhorn_linux_ami != "" ? var.freqhorn_linux_ami : data.aws_ami.ubuntu16.id}" key_name = "deephornec2" subnet_id = "${aws_subnet.main.id}" vpc_security_group_ids = ["${aws_security_group.secgrp.id}"] associate_public_ip_address = true - placement_tenancy = "dedicated" + # non-dedicated because m4.xlarge doesn't supported that tenancy mode + # placement_tenancy = "dedicated" tags { - Project = "FreqHorn" + Project = "FreqHorn" + FreqHornPlatform = "Linux" } } } diff --git a/tools/deep_bench/scripts/benchmark-supervisor.py b/tools/deep_bench/scripts/benchmark-supervisor.py new file mode 100755 index 000000000..9f50e0272 --- /dev/null +++ b/tools/deep_bench/scripts/benchmark-supervisor.py @@ -0,0 +1,298 @@ +#!/usr/bin/env python2 +from __future__ import print_function +import os +import re +import sys +import glob +import json +import time +import argparse +import subprocess32 +import traceback +import tempfile +from functools import reduce +from collections import defaultdict, namedtuple +from datetime import datetime, tzinfo, timedelta + + +class simple_utc(tzinfo): + def tzname(self,**kwargs): + return "UTC" + def utcoffset(self, dt): + return timedelta(0) + + +ONE_MIN = 1 * 60 # in seconds +TOTAL_TIME_RE = re.compile(r'\s*[tT]otal [tT]ime:?\s+([\.0-9]*)\s*') +BOOGIE_RESULTS_RE = re.compile(r'\s*Boogie program verifier finished with [^0]\d* verified, 0 errors.*') +FREQHORN_V1_RE = re.compile(r'\s*\-+>\s*Success after (\d+) iterations\s*') +FREQHORN_V2_BOOT_RE = re.compile(r'\s*Success after (.+?\s+)?bootstrapping\s*') +FREQHORN_V2_SAMPLING_RE = re.compile(r'\s*Success after (.+?\s+)?sampling\s*') + +RunResult = namedtuple('RunResult', 'reported_time proc_time iters success_kind') + + +# TODO: Should actually check for explicit success, not just total time report +class NoSuccessException(Exception): + pass + + +def win_path(orig): + if 'SYSTEMDRIVE' in os.environ: + # we're in Cygwin + pfx = '/cygdrive/c' + assert orig.startswith(pfx) + return os.environ['SYSTEMDRIVE'] + orig[len(pfx):].replace("/", '\\') + else: + return orig + + +def subproc_check_output(*args, **kwargs): + """`subprocess32.check_output` but stdout/-err is always logged to disk. + + `logfile` keyword arg is a path to the log file. All other arguments, + keyword and otherwise, are passed through to `check_output`. + """ + if 'stderr' not in kwargs: + kwargs['stderr'] = subprocess32.STDOUT + + log_path = kwargs.pop('logfile', None) + if log_path: + fo = open(log_path, 'w') + else: + fo = open(os.devnull, 'w') + + output = '' + try: + output = subprocess32.check_output(*args, **kwargs) + except Exception as e: + if hasattr(e, 'output'): + output = e.output + raise + finally: + fo.write(output) + fo.close() + return output + + +def run_ice(bench_name, logfile, hyper, verbose=False, timeout=None): + """Returns ICE Boogie.exe on `bench_name`.""" + if hyper: + raise Exception("ICE doesn't accept hyperparameters") + + example_path = os.path.join(os.environ["ICE_BENCH"], bench_name + ".bpl") + assert os.path.isfile(example_path) + root = os.environ["ICE_ROOT"] + cmd = os.path.join(root, "Boogie", "Binaries", "Boogie.exe") + assert os.path.isfile(cmd) + + for cachepath in glob.glob(example_path + ".*"): + os.remove(cachepath) + + start = time.time() + output = subproc_check_output([cmd, "-nologo", "-noinfer", "-contractInfer", + "-mlHoudini:dt_penalty", "-printAssignment", + win_path(example_path)], + timeout=timeout, + cwd=os.path.join(root, "Boogie", "Binaries"), + logfile=logfile) + end = time.time() + + success, t = False, 0 + for line in output.splitlines()[-40:]: + if verbose: + print(line) + tm = TOTAL_TIME_RE.match(line) + if tm: + t = float(tm.group(1)) + sm = BOOGIE_RESULTS_RE.match(line) + if sm: + success = True + if success: + if t == 0: + raise Exception("couldn't find time") + return RunResult(t, proc_time=end-start, iters=None, success_kind=None) + else: + raise NoSuccessException("couldn't find '0 errors'") + + +def run_mcmc(bench_name, logfile, hyper, verbose=False, timeout=None): + if hyper: + raise Exception("ICE doesn't accept hyperparameters") + + example_dirpath = os.path.join(os.environ["MCMC_BENCH"], bench_name) + root = os.environ['MCMC_ROOT'] + cmd = os.path.join(root, "Release", "numerical.exe") + assert os.path.isfile(cmd) + + start = time.time() + output = subproc_check_output([cmd], cwd=example_dirpath, + timeout=timeout, + logfile=logfile) + end = time.time() + for line in output.splitlines()[-20:]: + if verbose: + print(" ---", line) + m = TOTAL_TIME_RE.match(line) + if m: + return RunResult(float(m.group(1)), end-start, None, None) + raise NoSuccessException("couldn't find 'Total time'") + + +def run_z3(bench_name, logfile, hyper, verbose=False, timeout=None): + if hyper == 'spacerhyp1': + hyp_args = "fixedpoint.xform.slice=false fixedpoint.xform.inline_linear=false fixedpoint.xform.inline_eager=false fixedpoint.xform.tail_simplifier_pve=false".split() + elif hyper == 'spacerhyp2': + hyp_args = "fixedpoint.xform.slice=false fixedpoint.xform.inline_linear=false fixedpoint.xform.inline_eager=false fixedpoint.xform.tail_simplifier_pve=false fixedpoint.engine=spacer fixedpoint.use_heavy_mev=true fixedpoint.pdr.flexible_trace=true fixedpoint.reset_obligation_queue=false fixedpoint.spacer.elim_aux=false fixedpoint.spacer.reach_dnf=false".split() + else: + raise ValueError("expected spacerhyp{1, 2} as `hyper`; got: " + repr(hyper)) + + example_path = os.path.join(os.environ["Z3_BENCH"], bench_name + '.smt2') + root = os.environ["Z3_ROOT"] + cmd = None + for cand in [os.path.join(root, "bin", "z3.exe"), os.path.join(root, "z3")]: + if os.path.isfile(cand): + cmd = cand + break + assert os.path.isfile(cmd) + + opts = [] + if timeout is not None: + opts.append("-T:" + str(int(timeout*1000))) + opts += hyp_args + start = time.time() + output = subproc_check_output([cmd] + opts + ['--', win_path(example_path)], + timeout=(timeout + 5), + logfile=logfile) + end = time.time() + + is_unsat, found_result = False, False + for line in output.splitlines()[-20:]: + if verbose: + print(" ---", line) + split_line = line.lower().split() + if 'sat' in split_line: + assert not found_result + is_unsat, found_result = False, True + if 'unsat' in split_line: + assert not found_result + is_unsat, found_result = True, True + if not found_result: + raise NoSuccessException("couldn't find 'sat' or 'unsat'") + if is_unsat: + return RunResult(end-start, end-start, None, None) + raise NoSuccessException("was 'sat'") + + +def run_freqhorn(bench_name, logfile, hyper, verbose=False, timeout=None): + # We just interpret FreqHorn's `hyper` as pass-through args, + # with the exception of `itp`, which is followed by an integer. + hyp_args = [['--itp', x[3:]] if x.startswith('itp') else ['--' + x] + for x in hyper.split('-')] + hyp_args = reduce(lambda a, b: a + b, hyp_args, []) # flatten + + example_path = os.path.join(os.environ['FREQHORN_BENCH'], bench_name + '.smt2') + root = os.environ["FREQHORN_ROOT"] + cmd = os.path.join(root, 'build', 'tools', 'deep', 'freqhorn') + start = time.time() + output = subproc_check_output([cmd] + hyp_args + [example_path], + timeout=(timeout), + logfile=logfile) + end = time.time() + + success, iters, v2_kind = False, None, None + for line in output.splitlines()[-20:]: + if verbose: + print(line) + if '--v1' in hyp_args: + m = FREQHORN_V1_RE.match(line) + if m: + assert not success + success, iters = True, int(m.group(1)) + else: + boot_m = FREQHORN_V2_BOOT_RE.match(line) + samp_m = FREQHORN_V2_SAMPLING_RE.match(line) + if boot_m: + assert not success + success, v2_kind = True, 'bootstrapping' + elif samp_m: + assert not success + success, v2_kind = True, 'sampling' + + if not success: + raise NoSuccessException("didn't find success token in output") + return RunResult(None, end-start, iters, v2_kind) + + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument("ALGO", type=str) + parser.add_argument("BENCHNAME", type=str) + parser.add_argument("-o", "--outdir", type=str, + help="path to directory to fill with results") + parser.add_argument('-v', "--verbose", action='store_true', + help="be noisier about what's going on") + parser.add_argument("--hyper", type=str, + help="a hyperparameter string for the algo.") + args = parser.parse_args() + + # Make the out/ directory + outdir = args.outdir + if not args.outdir: + outdir = tempfile.mkdtemp() + elif not os.path.exists(args.outdir): + os.makedirs(outdir, mode=0700) + + # Set up environment for right ALGO + if args.ALGO.upper() == 'MCMC': + fn = run_mcmc + elif args.ALGO.upper() == 'ICE': + fn = run_ice + elif args.ALGO.upper() == 'Z3': + fn = run_z3 + elif args.ALGO.upper() == 'FREQHORN': + fn = run_freqhorn + else: + raise Exception("unrecognized algo.: {}".format(args.ALGO)) + + # Begin building the result.json object + result_obj = { + 'algorithm': args.ALGO.upper(), + 'hyperparams': '', + 'startDate': datetime.utcnow().replace(tzinfo=simple_utc()).isoformat(), + 'benchmarkName': args.BENCHNAME + } + + # Run the benchmark + logpath = os.path.join(outdir, "out.log") + resultpath = os.path.join(outdir, 'result.json') + resultfile = open(resultpath, 'w') + try: + run_result = fn(args.BENCHNAME, logpath, args.hyper, + verbose=args.verbose, timeout=ONE_MIN) + except subprocess32.CalledProcessError: + traceback.print_exc() + return 2 + except subprocess32.TimeoutExpired: + if args.verbose: + print("Timed out") + result_obj['outcome'] = 'timeout' + json.dump(result_obj, resultfile) + except KeyboardInterrupt: + return 0 + else: + result_obj['outcome'] = 'success' + if run_result.reported_time: + result_obj['reportedTime'] = run_result.reported_time + result_obj['processTime'] = run_result.proc_time + json.dump(result_obj, resultfile) + finally: + resultfile.close() + if os.path.getsize(resultpath) == 0: + os.unlink(resultpath) + + +if __name__ == '__main__': + ret = main() + if ret: + sys.exit(ret) diff --git a/tools/deep_bench/windows/ansible/inventory b/tools/deep_bench/windows/ansible/inventory index 6a8247aa8..f1a37d3e9 100644 --- a/tools/deep_bench/windows/ansible/inventory +++ b/tools/deep_bench/windows/ansible/inventory @@ -1,9 +1,9 @@ [windows] [windows:children] -tag_Project_FreqHorn +tag_FreqHornPlatform_Windows localwin [localwin] -[tag_Project_FreqHorn] +[tag_FreqHornPlatform_Windows] diff --git a/tools/deep_bench/windows/ansible/playbook.yml b/tools/deep_bench/windows/ansible/playbook.yml index 465ff134f..27dcd5959 100644 --- a/tools/deep_bench/windows/ansible/playbook.yml +++ b/tools/deep_bench/windows/ansible/playbook.yml @@ -1,9 +1,9 @@ --- -- hosts: all +- hosts: windows roles: - base - cygwin-sshd - ice - mcmc - spacer - - benchscripts \ No newline at end of file + - benchscripts diff --git a/tools/deep_bench/windows/ansible/roles/benchscripts/files/benchmark-others.py b/tools/deep_bench/windows/ansible/roles/benchscripts/files/benchmark-others.py deleted file mode 100755 index d7f1530af..000000000 --- a/tools/deep_bench/windows/ansible/roles/benchscripts/files/benchmark-others.py +++ /dev/null @@ -1,293 +0,0 @@ -#!/usr/bin/env python -from __future__ import print_function -import os -import re -import sys -import glob -import json -import time -import argparse -import subprocess32 -import traceback -from collections import defaultdict - - -ONE_MIN = 1 * 60 # in seconds -TOTAL_TIME_RE = re.compile(r'\s*[tT]otal [tT]ime:?\s+([\.0-9]*)\s*') -BOOGIE_RESULTS_RE = re.compile(r'\s*Boogie program verifier finished with [^0]\d* verified, 0 errors.*') - - -# TODO: Should actually check for explicit success, not just total time report -class NoSuccessException(Exception): - pass - - -def getenv_or_raise(v): - r = os.getenv(v) - if r is None: - raise Exception("environment variable %s not set" % v) - return r - - -def windows_path(orig): - assert orig[:2] == '/c' - return "C:" + orig[2:].replace("/", '\\') - - -def subproc_check_output(*args, **kwargs): - log_path = kwargs.pop('logfile', None) - if log_path: - fo = open(log_path, 'w') - else: - fo = open(os.devnull, 'w') - - output = '' - try: - output = subprocess32.check_output(*args, **kwargs) - except Exception as e: - if hasattr(e, 'output'): - output = e.output - raise - finally: - fo.write(output) - fo.close() - return output - - -def run_ice(example_path, logdir, verbose=False, timeout=None): - """Returns ICE Boogie.exe on `example_path`. Returns runtime on success.""" - assert os.path.isfile(example_path) - root = getenv_or_raise("ICE_ROOT") - cmd = os.path.join(root, "Boogie", "Binaries", "Boogie.exe") - assert os.path.isfile(cmd) - - for cachepath in glob.glob(example_path + ".*"): - os.remove(cachepath) - - output = subproc_check_output([cmd, "-nologo", "-noinfer", "-contractInfer", - "-mlHoudini:dt_penalty", - "-printAssignment", windows_path(example_path)], - timeout=timeout, - cwd=os.path.join(root, "Boogie", "Binaries"), - logfile=os.path.join(logdir, "ice.log")) - - success, t = False, 0 - for line in output.splitlines()[-40:]: - if verbose: - print(line) - tm = TOTAL_TIME_RE.match(line) - if tm: - t = float(tm.group(1)) - sm = BOOGIE_RESULTS_RE.match(line) - if sm: - success = True - if success: - if t == 0: - raise NoSuccessException("couldn't find time") - return t - raise NoSuccessException("couldn't find '0 errors'") - - -def ice_benchmarks(): - root = getenv_or_raise("ICE_ROOT") - bench_root = os.getenv("ICE_BENCH") - if not bench_root: - bench_root = os.path.join(root, "benchmarks") - assert os.path.isdir(bench_root) - for root, dirs, files in os.walk(bench_root): - for f in files: - if os.path.splitext(f)[1].lower() == ".bpl": - yield os.path.join(root, f) - - -def run_mcmc(example_dirpath, logdir, verbose=False, timeout=None): - root = getenv_or_raise("MCMC_ROOT") - cmd = os.path.join(root, "Release", "numerical.exe") - assert os.path.isfile(cmd) - output = subproc_check_output([cmd], cwd=example_dirpath, - timeout=timeout, - logfile=os.path.join(logdir, "mcmc.log")) - for line in output.splitlines()[-20:]: - if verbose: - print(" ---", line) - m = TOTAL_TIME_RE.match(line) - if m: - return float(m.group(1)) - raise NoSuccessException("couldn't find 'Total time'") - - -def mcmc_benchmarks(): - # Gather all directories with .xml in 'em - root = getenv_or_raise("MCMC_ROOT") - bench_root = os.getenv("MCMC_BENCH") - if not bench_root: - bench_root = os.path.join(root, "benchmarks", "numerical") - assert os.path.isdir(bench_root) - for root, dirs, files in os.walk(bench_root): - for f in files: - if os.path.splitext(f)[1].lower() == ".xml": - yield root - break - - -def run_z3(example_path, logdir, verbose=False, timeout=None): - root = getenv_or_raise("Z3_ROOT") - cmd = os.path.join(root, "bin", "z3.exe") - assert os.path.isfile(cmd) - opts = [] - if timeout is not None: - opts.append("-T:" + str(int(timeout*1000))) - start = time.time() - output = subproc_check_output([cmd] + opts + ['--', example_path], - timeout=(timeout + 5), - logfile=os.path.join(logdir, "z3.log")) - end = time.time() - found_result = False - for line in output.splitlines()[-20:]: - if verbose: - print(" ---", line) - if 'unsat' in line or 'sat' in line: # TODO: This is bad - found_result = True - if not found_result: - raise NoSuccessException("couldn't find 'sat' or 'unsat'") - return end-start - - -def z3_benchmarks(): - root = getenv_or_raise("Z3_ROOT") - bench_root = os.getenv("Z3_BENCH") - if not bench_root: - bench_root = os.path.join(root, "benchmarks") - assert os.path.isdir(bench_root) - for root, dirs, files in os.walk(bench_root): - for f in files: - if os.path.splitext(f)[1].lower() == ".smt2": - yield os.path.join(root, f) - - -def name_only(path): - return os.path.splitext(os.path.split(path)[1])[0].lower() - - -def bench_intersection(a, b): - a_set = set(name_only(path) for path in a) - b_set = set(name_only(path) for path in b) - i = a_set.intersection(b_set) - return ([x for x in a if name_only(x) in i], - [x for x in b if name_only(x) in i]) - - -def benchmarks_from_args(args): - if args.BENCHNAMES: - lc_benchnames = set(l.lower() for l in args.BENCHNAMES) - else: - orig_sets = [] - if args.mcmc: - orig_sets.append(set(name_only(b) for b in mcmc_benchmarks())) - if args.ice: - orig_sets.append(set(name_only(b) for b in ice_benchmarks())) - if args.z3: - orig_sets.append(set(name_only(b) for b in z3_benchmarks())) - lc_benchnames = orig_sets[0] - for s in orig_sets[1:]: - lc_benchnames.intersection_update(s) - return lc_benchnames - - -def others_from_args(args, name, run_fn, lc_benchnames, bench_gen): - if not getattr(args, name.lower()): - return [] - b = list(bench_gen) - if len(b) == 0: - raise Exception("No benchmarks for %s found" % name.upper()) - b = [x for x in b if name_only(x) in lc_benchnames] - return [(name.upper(), run_fn, args.__dict__[name.lower()], b)] - - -def main(): - parser = argparse.ArgumentParser() - parser.add_argument("BENCHNAMES", nargs='*') - parser.add_argument('--mcmc', action='store', type=int, default=0, - help="run the MCMC solver N iterations") - parser.add_argument('--ice', action='store', type=int, default=0, - help="run the ICE (Boogie.exe) solver N iterations") - parser.add_argument('--z3', action='store', type=int, default=0, - help="run the Z3 solver N iterations") - parser.add_argument("-o", "--outfile", type=str, - help="path to file to save times") - parser.add_argument("--logdir", type=str, - help="path to directory to save logs") - parser.add_argument('-r', "--resume", action='store_true', - help="merge results with outfile if it exists") - parser.add_argument('-e', "--exclude", type=str, nargs='+', - help="benchmarks to exclude; overrides BENCHNAMES") - parser.add_argument('-v', "--verbose", action='store_true', - help="be noisier about what's going on") - args = parser.parse_args() - - if not args.resume and args.outfile and os.path.exists(args.outfile): - print("'%s' already exists" % args.outfile, file=sys.stderr) - return 1 - - times, others = {}, [] - if args.resume and os.path.exists(args.outfile): - with open(args.outfile, 'r') as f: - times = json.load(f)['times'] - times = defaultdict(lambda: defaultdict(list), - {k: defaultdict(list, {a: b for a, b in v.iteritems()}) - for k, v in times.iteritems()}) - - try: - # Construct name-only set of benchmarks to run - lc_benchnames = benchmarks_from_args(args) - if args.verbose: - print("Running benchmarks:", ', '.join(lc_benchnames)) - - others += others_from_args(args, "MCMC", run_mcmc, lc_benchnames, mcmc_benchmarks()) - others += others_from_args(args, "ICE", run_ice, lc_benchnames, ice_benchmarks()) - others += others_from_args(args, "Z3", run_z3, lc_benchnames, z3_benchmarks()) - - for n, fn, cnt, benches in others: - for b in benches: - if args.exclude and name_only(b) in args.exclude: - continue - t_list = times[n][name_only(b)] - try: - while len(t_list) < cnt: - if args.verbose: - print("Running %s on %s" % (n, name_only(b))) - try: - fn_result = fn(b, args.logdir, verbose=args.verbose, - timeout=ONE_MIN) - except subprocess32.CalledProcessError: - traceback.print_exc() - break - else: - t_list.append(fn_result) - except subprocess32.TimeoutExpired: - if args.verbose: - print("Timeout expired") - except KeyboardInterrupt: - pass - finally: - # Delete benchmarks with no results - times = {a: {x: y for x, y in b.items() if len(y)} for a, b in times.items()} - - # Save the times - if args.outfile: - with open(args.outfile, 'w') as f: - json.dump({'times': times}, f) - - # Print the times - for k, v in times.iteritems(): - print(k, ":") - for benchpath, t in v.iteritems(): - t = list(t) - if len(t): - print(" ", name_only(benchpath), ": ", t) - - -if __name__ == '__main__': - ret = main() - if ret: - sys.exit(ret) diff --git a/tools/deep_bench/windows/ansible/roles/benchscripts/tasks/main.yml b/tools/deep_bench/windows/ansible/roles/benchscripts/tasks/main.yml index 32829b670..f8daeb186 100644 --- a/tools/deep_bench/windows/ansible/roles/benchscripts/tasks/main.yml +++ b/tools/deep_bench/windows/ansible/roles/benchscripts/tasks/main.yml @@ -1,32 +1,34 @@ --- -- name: copy benchmark-others.py to C:\ +- name: remove deprecated script benchmark-others.py + win_file: + path: C:\benchmark-others.py + state: absent + +- name: copy benchmark-supervisor.py to C:\ win_copy: - src: files/benchmark-others.py + src: ../../../../../scripts/benchmark-supervisor.py dest: C:\ -- name: install packages to benchmark-others.py +- name: install packages for benchmark-supervisor.py win_shell: "{{ cygwin_root }}\\bin\\bash.exe --login -c \"{{ item }}\"" with_items: - pip2 install subprocess32 -- name: delete MCMC benchmarks +- name: delete old benchmarks win_file: - path: C:\bench_horn_mcmc + path: C:\{{ item }} state: absent + with_items: + - bench_horn + - bench_horn_ice + - bench_horn_mcmc -- name: copy MCMC benchmarks +- name: copy benchmarks win_copy: - src: ../../../../../../bench_horn_mcmc/ - dest: C:\bench_horn_mcmc + src: ../../../../../../{{ item }}/ + dest: C:\{{ item }} force: yes - -- name: delete ICE benchmarks - win_file: - path: C:\bench_horn_ice - state: absent - -- name: copy ICE benchmarks - win_copy: - src: ../../../../../../bench_horn_ice/ - dest: C:\bench_horn_ice - force: yes \ No newline at end of file + with_items: + - bench_horn + - bench_horn_ice + - bench_horn_mcmc diff --git a/tools/deep_bench/windows/ansible/roles/spacer/tasks/main.yml b/tools/deep_bench/windows/ansible/roles/spacer/tasks/main.yml index 05b41b48e..9b4ce1328 100644 --- a/tools/deep_bench/windows/ansible/roles/spacer/tasks/main.yml +++ b/tools/deep_bench/windows/ansible/roles/spacer/tasks/main.yml @@ -15,8 +15,8 @@ path: C:\tools\cygwin\home\{{ ansible_user }}\spacer\build\z3.exe register: spacer_bin_info -- name: git pull spacer - win_command: C:\tools\cygwin\bin\bash.exe --login -c "git clone --branch spacer https://bitbucket.org/arieg/z3.git spacer" +- name: git pull spacer3 + win_command: C:\tools\cygwin\bin\bash.exe --login -c "git clone --branch spacer3 https://bitbucket.org/spacer/code.git spacer" when: not spacer_folder_info.stat.exists - name: build Spacer diff --git a/tools/deep_bench/windows/run-other-benchmarks.sh b/tools/deep_bench/windows/run-other-benchmarks.sh index 2ffe4940d..ccba5e4e1 100755 --- a/tools/deep_bench/windows/run-other-benchmarks.sh +++ b/tools/deep_bench/windows/run-other-benchmarks.sh @@ -2,29 +2,35 @@ set -e -HOSTS=`../scripts/ec2-inv.py --list | jq -r .tag_Project_FreqHorn\[\] | sed -e 's/^/1\/Administrator@/' | xargs echo -n | tr '\n' ','` +HOSTS=`../scripts/ec2-inv.py --list | jq -r .tag_FreqHornPlatform_Windows\[\] | sed -e 's/^/1\/Administrator@/' | xargs echo -n | tr '\n' ','` # HOSTS=`../scripts/ec2-inv.py --list | jq -r .tag_Project_FreqHorn\[\] | sed -e 's/^/1\/ssh -o StrictHostKeyChecking=no Administrator@/' | xargs echo -n | tr '\n' ','` echo $HOSTS +echo "" +echo "Starting jobs. (If this seems to hang, make sure you've used ssh-add" +echo "on your key.)" +echo "" + # Disable StrictHostKeyChecking temporarily. (Hacky and brittle.) touch ~/.ssh/config cp ~/.ssh/config ~/.ssh/config.backup (echo 'Host *'; echo StrictHostKeyChecking no) >> ~/.ssh/config -find ../../../bench_horn/*.smt2 -exec basename {} .smt2 \; | parallel \ +# find ../../../bench_horn/*.smt2 -exec basename {} .smt2 \; | parallel \ +./all-jobs.py freqhorn | parallel \ --resume-failed \ --joblog ./clusterjobs.log \ - --return "out-{1}-{2}-i{3}.tar.gz" \ + --return "out-{2}-{3}--{4}--i{5}.tar.gz" \ + --colsep ':::' \ --cleanup \ - --verbose \ -a - \ --sshlogin "$HOSTS" \ "cd ~ && " \ "rm -rf out && " \ "mkdir out && " \ - "MCMC_ROOT=/cygdrive/c/MCMC ICE_ROOT=/cygdrive/c/ICE MCMC_BENCH=/cygdrive/c/bench_horn_mcmc ICE_BENCH=/cygdrive/c/bench_horn_ice /cygdrive/c/benchmark-others.py --logdir out/ -o out/times.json --{2} 1 {1} &> out/std.log ; " \ + "MCMC_ROOT=/cygdrive/c/MCMC ICE_ROOT=/cygdrive/c/ICE MCMC_BENCH=/cygdrive/c/bench_horn_mcmc ICE_BENCH=/cygdrive/c/bench_horn_ice Z3_ROOT=/cygdrive/c/tools/cygwin/home/Administrator/spacer/build Z3_BENCH=/cygdrive/c/bench_horn /cygdrive/c/benchmark-supervisor.py -o /home/ubuntu/out {1} {4} {3} {2} &> out/supervisor.std.log ; " \ "cd ~ ; " \ - "tar -zcf out-{1}-{2}-i{3}.tar.gz out/ ;" \ + "tar -zcf out-{2}-{3}--{4}--i{5}.tar.gz out/ ;" ::: mcmc ice z3 ::: {0..2} # Remove the disabling of StrictHostKeyChecking diff --git a/tools/deep_bench/windows/terraform/win-cluster.tf b/tools/deep_bench/windows/terraform/win-cluster.tf index 31ed914da..095110cc1 100644 --- a/tools/deep_bench/windows/terraform/win-cluster.tf +++ b/tools/deep_bench/windows/terraform/win-cluster.tf @@ -10,7 +10,7 @@ variable "instance_type" { default = "m4.xlarge" } -variable "freqhorn_ami" { +variable "freqhorn_windows_ami" { default = "" } @@ -165,7 +165,7 @@ EOF } # -# Look up AMI +# Default AMI # data "aws_ami" "windows2012" { @@ -178,16 +178,6 @@ data "aws_ami" "windows2012" { } } -data "aws_ami" "freqhorn" { - most_recent = true - owners = ["self"] - - filter { - name = "name" - values = ["FreqHorn-Win-Benchmark-Image"] - } -} - # # Instances # @@ -209,7 +199,7 @@ resource "aws_spot_fleet_request" "fleet_req" { launch_specification { instance_type = "${var.instance_type}" - ami = "${var.freqhorn_ami != "" ? var.freqhorn_ami : data.aws_ami.windows2012.id}" + ami = "${var.freqhorn_windows_ami != "" ? var.freqhorn_windows_ami : data.aws_ami.windows2012.id}" subnet_id = "${aws_subnet.main.id}" vpc_security_group_ids = ["${aws_security_group.secgrp.id}"] associate_public_ip_address = true @@ -220,6 +210,7 @@ resource "aws_spot_fleet_request" "fleet_req" { tags { Project = "FreqHorn" + FreqHornPlatform = "Windows" } } } From eb920f6cd029a60065a8e8b1efe05136fdc47443 Mon Sep 17 00:00:00 2001 From: Sam Kaufman Date: Tue, 27 Feb 2018 14:10:37 -0500 Subject: [PATCH 072/236] spacer compilation fix --- .gitignore | 2 ++ tools/deep_bench/windows/ansible/roles/base/tasks/main.yml | 2 +- .../windows/ansible/roles/cygwin-sshd/tasks/main.yml | 2 +- .../deep_bench/windows/ansible/roles/spacer/tasks/main.yml | 7 +++++++ 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index f0b0b6bad..6355c0b30 100644 --- a/.gitignore +++ b/.gitignore @@ -16,8 +16,10 @@ .mypy_cache .vscode +.sync .tags .tags1 +.ipynb_checkpoints terraform.tfstate terraform.tfstate.backup* tools/deep_bench/windows/files/ice.zip diff --git a/tools/deep_bench/windows/ansible/roles/base/tasks/main.yml b/tools/deep_bench/windows/ansible/roles/base/tasks/main.yml index c0d5fc23a..3794cfdb3 100644 --- a/tools/deep_bench/windows/ansible/roles/base/tasks/main.yml +++ b/tools/deep_bench/windows/ansible/roles/base/tasks/main.yml @@ -30,7 +30,7 @@ - visualstudio2017-workload-vctools retries: 1 register: chocolatey_pkgs - until: chocolatey_pkgs|succeeded + until: chocolatey_pkgs is succeeded delay: 2 - name: reboot the machine diff --git a/tools/deep_bench/windows/ansible/roles/cygwin-sshd/tasks/main.yml b/tools/deep_bench/windows/ansible/roles/cygwin-sshd/tasks/main.yml index b2643a492..9a49367a7 100644 --- a/tools/deep_bench/windows/ansible/roles/cygwin-sshd/tasks/main.yml +++ b/tools/deep_bench/windows/ansible/roles/cygwin-sshd/tasks/main.yml @@ -9,7 +9,7 @@ become: yes retries: 1 register: ssh_host_config - until: ssh_host_config|succeeded + until: ssh_host_config is succeeded delay: 2 notify: restart sshd diff --git a/tools/deep_bench/windows/ansible/roles/spacer/tasks/main.yml b/tools/deep_bench/windows/ansible/roles/spacer/tasks/main.yml index 9b4ce1328..9fd6c43db 100644 --- a/tools/deep_bench/windows/ansible/roles/spacer/tasks/main.yml +++ b/tools/deep_bench/windows/ansible/roles/spacer/tasks/main.yml @@ -19,6 +19,13 @@ win_command: C:\tools\cygwin\bin\bash.exe --login -c "git clone --branch spacer3 https://bitbucket.org/spacer/code.git spacer" when: not spacer_folder_info.stat.exists +- name: add smmintrin.h include to hwf.cpp (to compile with VS 2017) + win_lineinfile: + path: C:\tools\cygwin\home\{{ ansible_user }}\spacer\src\util\hwf.cpp + line: "#include" + regexp: '^\s*#include\s*\' + insertafter: '^\s*#include' + - name: build Spacer win_shell: '"C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\Common7\Tools\VsDevCmd.bat" && cd C:\tools\cygwin\home\{{ ansible_user }}\spacer && python scripts\mk_make.py && cd build && nmake' args: From 3770911619815e39fb7f4d6faaf3e4b752d520f1 Mon Sep 17 00:00:00 2001 From: Sam Kaufman Date: Tue, 27 Feb 2018 22:03:48 -0500 Subject: [PATCH 073/236] misc. fixes --- tools/deep_bench/linux/ansible/inventory | 1 + .../linux/run-freqhorn-benchmarks.sh | 11 +--- .../deep_bench/{linux => scripts}/all-jobs.py | 8 +++ .../scripts/benchmark-supervisor.py | 57 +++++++++++++------ .../windows/run-other-benchmarks.sh | 8 +-- 5 files changed, 56 insertions(+), 29 deletions(-) rename tools/deep_bench/{linux => scripts}/all-jobs.py (81%) diff --git a/tools/deep_bench/linux/ansible/inventory b/tools/deep_bench/linux/ansible/inventory index eba7db279..7f7eefc90 100644 --- a/tools/deep_bench/linux/ansible/inventory +++ b/tools/deep_bench/linux/ansible/inventory @@ -2,6 +2,7 @@ [linux:vars] ansible_user=ubuntu +ansible_private_key_file=/home/skaufman/.ssh/deephornec2.pem [linux:children] tag_FreqHornPlatform_Linux diff --git a/tools/deep_bench/linux/run-freqhorn-benchmarks.sh b/tools/deep_bench/linux/run-freqhorn-benchmarks.sh index 84e2c61a0..669619f96 100755 --- a/tools/deep_bench/linux/run-freqhorn-benchmarks.sh +++ b/tools/deep_bench/linux/run-freqhorn-benchmarks.sh @@ -3,14 +3,9 @@ set -e # Get IP addresses -cd terraform || exit 1 -terraform refresh || exit 1 -SFR_ID=`jq -r ".modules[0].resources.\"aws_spot_fleet_request.fleet_req\".primary.id" terraform.tfstate` -INSTANCE_IDS=`aws ec2 describe-spot-fleet-instances --spot-fleet-request-id $SFR_ID | jq -r ".ActiveInstances[]| -select(.InstanceHealth==\"healthy\")|.InstanceId" | awk '{$1=$1};1'` -HOSTS=`aws ec2 describe-instances --instance-ids $INSTANCE_IDS | jq -r '.Reservations[0].Instances[].PublicIpAddress' | sed -e 's/^/1\/ubuntu@/' | xargs echo -n | tr ' ' ','` +# HOSTS=`../scripts/ec2-inv.py --list | jq -r .tag_FreqHornPlatform_Linux\[\] | sed -e 's/^/1\/ubuntu@/' | xargs echo -n | tr '\n' ','` +HOSTS=`../scripts/ec2-inv.py --list | jq -r .tag_FreqHornPlatform_Linux\[\] | sed -e 's/^/1\/ssh -i ~\/.ssh\/deephornec2.pem ubuntu@/' | tr '\n' ','` echo $HOSTS -cd .. # Disable StrictHostKeyChecking temporarily. (So hacky.) touch ~/.ssh/config @@ -39,7 +34,7 @@ cp ~/.ssh/config ~/.ssh/config.backup --cleanup \ --colsep ':::' \ -a - \ - --sshlogin $HOSTS \ + --sshlogin "$HOSTS" \ "rm -rf out && " \ "mkdir out && " \ "cd /home/ubuntu/aeval/tools/deep_bench/scripts && " \ diff --git a/tools/deep_bench/linux/all-jobs.py b/tools/deep_bench/scripts/all-jobs.py similarity index 81% rename from tools/deep_bench/linux/all-jobs.py rename to tools/deep_bench/scripts/all-jobs.py index 1a83047d2..fe4e6ebf1 100755 --- a/tools/deep_bench/linux/all-jobs.py +++ b/tools/deep_bench/scripts/all-jobs.py @@ -28,13 +28,21 @@ def smt2_names(): def main(): parser = argparse.ArgumentParser() + parser.add_argument("-b", "--bench", type=str, + help="comma-sep.'d list of benchmarks to output") parser.add_argument("ALGOS", type=str, nargs='+') args = parser.parse_args() + bench_mask = set() + if args.bench: + bench_mask = set(args.bench.lower().split(',')) + max_iters = max(algo_confs[x.lower()].iters for x in args.ALGOS) for i in range(max_iters): for bench in smt2_names(): + if len(bench_mask) and bench.lower() not in bench_mask: + continue for algo in args.ALGOS: aconf = algo_confs[algo] if i >= aconf.iters: diff --git a/tools/deep_bench/scripts/benchmark-supervisor.py b/tools/deep_bench/scripts/benchmark-supervisor.py index 9f50e0272..ed36d2269 100755 --- a/tools/deep_bench/scripts/benchmark-supervisor.py +++ b/tools/deep_bench/scripts/benchmark-supervisor.py @@ -25,6 +25,7 @@ def utcoffset(self, dt): ONE_MIN = 1 * 60 # in seconds TOTAL_TIME_RE = re.compile(r'\s*[tT]otal [tT]ime:?\s+([\.0-9]*)\s*') BOOGIE_RESULTS_RE = re.compile(r'\s*Boogie program verifier finished with [^0]\d* verified, 0 errors.*') +FREQHORN_ITER_LIMIT_RE = re.compile(r'\s*No success after (\d+) iterations\s*') FREQHORN_V1_RE = re.compile(r'\s*\-+>\s*Success after (\d+) iterations\s*') FREQHORN_V2_BOOT_RE = re.compile(r'\s*Success after (.+?\s+)?bootstrapping\s*') FREQHORN_V2_SAMPLING_RE = re.compile(r'\s*Success after (.+?\s+)?sampling\s*') @@ -32,10 +33,14 @@ def utcoffset(self, dt): RunResult = namedtuple('RunResult', 'reported_time proc_time iters success_kind') -# TODO: Should actually check for explicit success, not just total time report class NoSuccessException(Exception): pass +class IterLimitHitException(NoSuccessException): + def __init__(self, msg, iters=None): + super(IterLimitHitException, self).__init__(msg) + self.iters = iters + def win_path(orig): if 'SYSTEMDRIVE' in os.environ: @@ -113,7 +118,7 @@ def run_ice(bench_name, logfile, hyper, verbose=False, timeout=None): raise Exception("couldn't find time") return RunResult(t, proc_time=end-start, iters=None, success_kind=None) else: - raise NoSuccessException("couldn't find '0 errors'") + raise Exception("couldn't find '0 errors'") def run_mcmc(bench_name, logfile, hyper, verbose=False, timeout=None): @@ -136,7 +141,7 @@ def run_mcmc(bench_name, logfile, hyper, verbose=False, timeout=None): m = TOTAL_TIME_RE.match(line) if m: return RunResult(float(m.group(1)), end-start, None, None) - raise NoSuccessException("couldn't find 'Total time'") + raise Exception("couldn't find 'Total time'") def run_z3(bench_name, logfile, hyper, verbose=False, timeout=None): @@ -167,7 +172,7 @@ def run_z3(bench_name, logfile, hyper, verbose=False, timeout=None): end = time.time() is_unsat, found_result = False, False - for line in output.splitlines()[-20:]: + for line in output.splitlines()[:10]: if verbose: print(" ---", line) split_line = line.lower().split() @@ -178,10 +183,10 @@ def run_z3(bench_name, logfile, hyper, verbose=False, timeout=None): assert not found_result is_unsat, found_result = True, True if not found_result: - raise NoSuccessException("couldn't find 'sat' or 'unsat'") + raise Exception("couldn't find 'sat' or 'unsat'") if is_unsat: return RunResult(end-start, end-start, None, None) - raise NoSuccessException("was 'sat'") + raise Exception("was 'sat'") def run_freqhorn(bench_name, logfile, hyper, verbose=False, timeout=None): @@ -200,27 +205,35 @@ def run_freqhorn(bench_name, logfile, hyper, verbose=False, timeout=None): logfile=logfile) end = time.time() - success, iters, v2_kind = False, None, None - for line in output.splitlines()[-20:]: + result_found, success, iters, v2_kind = False, None, None, None + for line in output.splitlines(): if verbose: print(line) - if '--v1' in hyp_args: + iter_limit_m = FREQHORN_ITER_LIMIT_RE.match(line) + if iter_limit_m: + assert not result_found + result_found, success = True, False + iters = int(iter_limit_m.group(1)) + elif '--v1' in hyp_args: m = FREQHORN_V1_RE.match(line) if m: - assert not success - success, iters = True, int(m.group(1)) + assert not result_found + result_found, success, iters = True, True, int(m.group(1)) else: boot_m = FREQHORN_V2_BOOT_RE.match(line) samp_m = FREQHORN_V2_SAMPLING_RE.match(line) if boot_m: - assert not success - success, v2_kind = True, 'bootstrapping' + assert not result_found + result_found, success, v2_kind = True, True, 'bootstrapping' elif samp_m: - assert not success - success, v2_kind = True, 'sampling' + assert not result_found + result_found, success, v2_kind = True, True, 'sampling' + if not result_found: + raise Exception("didn't find result in output") if not success: - raise NoSuccessException("didn't find success token in output") + raise IterLimitHitException("no success after %d iterations" % iters, + iters=iters) return RunResult(None, end-start, iters, v2_kind) @@ -278,13 +291,23 @@ def main(): print("Timed out") result_obj['outcome'] = 'timeout' json.dump(result_obj, resultfile) + except IterLimitHitException as e: + if args.verbose: + print("Iteration limit hit") + result_obj['outcome'] = 'iterLimitHit' + result_obj['iters'] = e.iters + json.dump(result_obj, resultfile) except KeyboardInterrupt: return 0 else: result_obj['outcome'] = 'success' + result_obj['processTime'] = run_result.proc_time if run_result.reported_time: result_obj['reportedTime'] = run_result.reported_time - result_obj['processTime'] = run_result.proc_time + if run_result.success_kind: + result_obj['successKind'] = run_result.success_kind + if run_result.iters is not None: + result_obj['iters'] = run_result.iters json.dump(result_obj, resultfile) finally: resultfile.close() diff --git a/tools/deep_bench/windows/run-other-benchmarks.sh b/tools/deep_bench/windows/run-other-benchmarks.sh index ccba5e4e1..25e5869f1 100755 --- a/tools/deep_bench/windows/run-other-benchmarks.sh +++ b/tools/deep_bench/windows/run-other-benchmarks.sh @@ -2,8 +2,8 @@ set -e -HOSTS=`../scripts/ec2-inv.py --list | jq -r .tag_FreqHornPlatform_Windows\[\] | sed -e 's/^/1\/Administrator@/' | xargs echo -n | tr '\n' ','` -# HOSTS=`../scripts/ec2-inv.py --list | jq -r .tag_Project_FreqHorn\[\] | sed -e 's/^/1\/ssh -o StrictHostKeyChecking=no Administrator@/' | xargs echo -n | tr '\n' ','` +# HOSTS=`../scripts/ec2-inv.py --list | jq -r .tag_FreqHornPlatform_Windows\[\] | sed -e 's/^/1\/Administrator@/' | xargs echo -n | tr '\n' ','` +HOSTS=`../scripts/ec2-inv.py --list | jq -r .tag_FreqHornPlatform_Windows\[\] | sed -e 's/^/1\/ssh -i ~\/.ssh\/deephornec2.pem Administrator@/' | xargs echo -n | tr '\n' ','` echo $HOSTS echo "" @@ -17,7 +17,7 @@ cp ~/.ssh/config ~/.ssh/config.backup (echo 'Host *'; echo StrictHostKeyChecking no) >> ~/.ssh/config # find ../../../bench_horn/*.smt2 -exec basename {} .smt2 \; | parallel \ -./all-jobs.py freqhorn | parallel \ +../scripts/all-jobs.py z3 | parallel \ --resume-failed \ --joblog ./clusterjobs.log \ --return "out-{2}-{3}--{4}--i{5}.tar.gz" \ @@ -28,7 +28,7 @@ cp ~/.ssh/config ~/.ssh/config.backup "cd ~ && " \ "rm -rf out && " \ "mkdir out && " \ - "MCMC_ROOT=/cygdrive/c/MCMC ICE_ROOT=/cygdrive/c/ICE MCMC_BENCH=/cygdrive/c/bench_horn_mcmc ICE_BENCH=/cygdrive/c/bench_horn_ice Z3_ROOT=/cygdrive/c/tools/cygwin/home/Administrator/spacer/build Z3_BENCH=/cygdrive/c/bench_horn /cygdrive/c/benchmark-supervisor.py -o /home/ubuntu/out {1} {4} {3} {2} &> out/supervisor.std.log ; " \ + "MCMC_ROOT=/cygdrive/c/MCMC ICE_ROOT=/cygdrive/c/ICE MCMC_BENCH=/cygdrive/c/bench_horn_mcmc ICE_BENCH=/cygdrive/c/bench_horn_ice Z3_ROOT=/cygdrive/c/tools/cygwin/home/Administrator/spacer/build Z3_BENCH=/cygdrive/c/bench_horn /cygdrive/c/benchmark-supervisor.py -o ~/out {1} {4} {3} {2} &> out/supervisor.std.log ; " \ "cd ~ ; " \ "tar -zcf out-{2}-{3}--{4}--i{5}.tar.gz out/ ;" ::: mcmc ice z3 ::: {0..2} From a3906ed2934466a02535727275db2408492e339b Mon Sep 17 00:00:00 2001 From: Sam Kaufman Date: Thu, 1 Mar 2018 00:47:48 -0500 Subject: [PATCH 074/236] Fixed & initial analysis notebook --- .../linux/run-freqhorn-benchmarks.sh | 2 +- tools/deep_bench/scripts/Summarize.ipynb | 1839 +++++++++++++++++ tools/deep_bench/scripts/all-jobs.py | 7 +- .../scripts/benchmark-supervisor.py | 14 +- tools/deep_bench/windows/ansible/inventory | 5 + tools/deep_bench/windows/ansible/playbook.yml | 2 +- .../windows/ansible/roles/base/tasks/main.yml | 25 +- .../windows/run-other-benchmarks.sh | 5 +- .../windows/terraform/win-cluster.tf | 5 + 9 files changed, 1891 insertions(+), 13 deletions(-) create mode 100644 tools/deep_bench/scripts/Summarize.ipynb diff --git a/tools/deep_bench/linux/run-freqhorn-benchmarks.sh b/tools/deep_bench/linux/run-freqhorn-benchmarks.sh index 669619f96..83ee4d55a 100755 --- a/tools/deep_bench/linux/run-freqhorn-benchmarks.sh +++ b/tools/deep_bench/linux/run-freqhorn-benchmarks.sh @@ -27,7 +27,7 @@ cp ~/.ssh/config ~/.ssh/config.backup # TODO: rsync & re-build (instead of prior update pass) # Run the jobs -./all-jobs.py z3 | parallel \ +../scripts/all-jobs.py freqhorn | parallel \ --resume-failed \ --joblog ./clusterjobs.log \ --return "out-{2}-{3}--{4}--i{5}.tar.gz" \ diff --git a/tools/deep_bench/scripts/Summarize.ipynb b/tools/deep_bench/scripts/Summarize.ipynb new file mode 100644 index 000000000..36eb2fc29 --- /dev/null +++ b/tools/deep_bench/scripts/Summarize.ipynb @@ -0,0 +1,1839 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import pandas\n", + "import tarfile\n", + "import glob\n", + "import json\n", + "import os\n", + "import re\n", + "import numpy as np\n", + "from functools import reduce\n", + "from IPython.core.display import display, HTML" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's ingest a bunch of data!" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "PATH_RE = re.compile(r\"(.*?/)*out-([a-zA-Z0-9_-]+)-(ice|mcmc|z3|freqhorn)--(.*?)--i\\d+\\.tar\\.gz$\")" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "def jsons_from_targlob(tarpath):\n", + " for path in glob.glob(os.path.expanduser(tarpath)):\n", + " path_match = PATH_RE.match(path)\n", + " with tarfile.open(path) as tf:\n", + " for tarinfo in tf:\n", + " if tarinfo.name.lower() == 'out/result.json':\n", + " results = json.load(tf.extractfile(tarinfo))\n", + " if not results['hyperparams'] and path_match:\n", + " # workaround: some early runs didn't save hyperparams\n", + " results['hyperparams'] = path_match.group(4)\n", + " yield results\n", + "SRC_GLOBS = [\"~/Desktop/runs/linux0/*.tar.gz\",\n", + " \"~/Desktop/runs/linux1/*.tar.gz\",\n", + " \"~/Desktop/runs/linux2/*.tar.gz\",\n", + " \"~/Desktop/runs/windows0/*.tar.gz\",\n", + " \"~/Desktop/runs/windows1/*.tar.gz\",\n", + " \"~/Desktop/runs/windows2/*.tar.gz\",\n", + " \"~/Desktop/runs/windows3/*.tar.gz\",\n", + " \"/Users/skaufman/Code/grigory-aeval/tools/deep_bench/windows/*.tar.gz\"]\n", + "all_tar_paths = reduce(lambda a, b: a + glob.glob(os.path.expanduser(b)), SRC_GLOBS, [])" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "src = reduce(lambda a, b: a + list(jsons_from_targlob(b)), SRC_GLOBS, [])\n", + "df = pandas.DataFrame(src)\n", + "df.drop(columns=['startDate'], inplace=True) # startDate is boring" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's add an extra column--`bestTime`--taking `reportedTime` where available and `processTime` otherwise. We use `min` because `processTime` must, of course, always be smaller. Then drop the others. Who needs 'em." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "df['bestTime'] = df[['processTime', 'reportedTime']].min(axis=1)\n", + "df.drop(columns=['processTime', 'reportedTime'], inplace=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Flagging Failures\n", + "Failures have no `results.json` files. In general, I'm not immediately sure about why failures occur. In the case of **ICE**, I think syntactic details matter; if I had more time, I'd try rewriting a lot of these such that they resemble ICE's original PLDI benchmarks. **MCMC** seems to segfault arbitrarily. In any case, let's flag all MCMC & ICE trials with missing results.json files `outcome = \"failure\"`." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "path_is_ice = lambda pth: \"-ice-\" in pth.lower()\n", + "path_is_mcmc = lambda pth: \"-mcmc-\" in pth.lower()\n", + "path_is_spacer = lambda pth: \"-z3-\" in pth.lower()\n", + "tarinfo_is_result = lambda tarinfo: tarinfo.name.lower() == 'out/result.json'\n", + "for path in all_tar_paths:\n", + " if path_is_ice(path):\n", + " algo = \"ICE\"\n", + " elif path_is_mcmc(path):\n", + " algo = \"MCMC\"\n", + " elif path_is_spacer(path):\n", + " also = \"Z3\"\n", + " else:\n", + " continue\n", + " with tarfile.open(path) as tf:\n", + " if any(map(tarinfo_is_result, tf)):\n", + " continue\n", + " name = re.match(r'out-(.+?)-(ice|mcmc|z3)-.*\\.tar\\.gz', os.path.split(path)[1]).group(1)\n", + " df = df.append({'algorithm': algo, 'benchmarkName': name, 'outcome': 'failure'}, ignore_index=True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Any FreqHorn failures?\n", + "Before we go further, let's look for failures (as opposed to timeouts) from FreqHorn. These should have no `results.json` files. (Also, ignore the Spacer, ICE, and MCMC failures, which we used prior.)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "Missing results.json in:
    " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
  • out-s_disj_ite_02-freqhorn--aggp-itp3--i0
  • " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
  • out-s_disj_ite_02-freqhorn--freqs-aggp--i0
  • " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "data": { + "text/html": [ + "
" + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "failure_paths = []\n", + "for path in all_tar_paths:\n", + " if any(fn(path) for fn in [path_is_ice, path_is_mcmc, path_is_spacer]):\n", + " continue\n", + " found_results = False\n", + " with tarfile.open(path) as tf:\n", + " for tarinfo in tf:\n", + " if tarinfo_is_result(tarinfo):\n", + " found_results = True\n", + " break\n", + " if not found_results:\n", + " failure_paths.append(path)\n", + "if failure_paths:\n", + " display(HTML(\"Missing results.json in:
    \"))\n", + " for pth in sorted(failure_paths):\n", + " display(HTML(\"
  • %s
  • \" % str(os.path.split(os.path.splitext(os.path.splitext(pth)[0])[0])[1])))\n", + " display(HTML(\"
\"))\n", + "else:\n", + " display(HTML(\"No failures.\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Benchmark Success\n", + "Which benchmarks are available to each algorithm and didn't uniformly fail?" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
algorithmFREQHORNICEMCMCZ3
benchmarkName
abdu_01YYYY
abdu_02YYYY
abdu_03YYYY
abdu_04YNoneYY
bhmr2007_true-unreach-callYNoneYY
bouncy_three_counters_mergedYNoneYY
bouncy_two_counters_mergedYYYY
cegar1YNoneYY
cegar2YNoneYY
cggmp_iter_1YYYY
cggmp_iter_2YYYY
cggmp_iter_3YYYY
const_div_1YYNoneY
const_div_2YYNoneY
const_div_3YNoneNoneY
const_div_4YNoneNoneY
const_div_modYYNoneY
const_mod_1YNoneYY
const_mod_2YNoneYY
const_mod_3YNoneNoneY
count_by_1_variant_true-unreach-call_true-terminationYNoneYY
count_by_2_modif_true-unreach-call_true-terminationYNoneYY
count_by_2_true-unreach-call_true-terminationYNoneYY
countudYNoneYY
css2003_true-unreach-callYNoneNoneY
dillig01YNoneYY
dillig02YNoneNoneY
dillig03YNoneYY
dillig04YNoneYY
dillig05YNoneYY
dillig07YNoneYY
dillig08YNoneNoneY
dillig10YNoneNoneY
dillig13YNoneYY
dillig14YNoneYY
dillig15YNoneYY
dillig16YNoneYY
dillig18YNoneNoneY
dillig19YNoneNoneY
dillig20-1YNoneNoneY
dillig20-2YNoneNoneY
dillig20-3YNoneNoneY
dillig21YNoneNoneY
dillig22YNoneNoneY
dillig22-1YNoneNoneY
dillig22-2YNoneNoneY
dillig22-3YNoneNoneY
dillig22-4YNoneNoneY
dillig22-5YNoneNoneY
dillig22-6YNoneNoneY
dillig37YNoneYY
dillig41YNoneYY
dillig42YNoneNoneY
dillig42-1YNoneNoneY
dillig43YNoneYY
dillig44YNoneNoneY
dillig44-1YNoneNoneY
dillig46YNoneNoneY
ex14YNoneYY
ex7YNoneYY
exact_iters_1YYYY
exact_iters_2YYYY
exact_iters_3YYYY
exact_iters_4YYYY
exact_iters_5YYYY
fig3YYNoneY
fig9YNoneYY
formula22YYYY
formula25YYYY
formula27YNoneYY
gcd_1YNoneNoneY
gcd_2YNoneNoneY
gcd_3YNoneNoneY
gj2007_true-unreach-callYNoneNoneY
half_true_modifYNoneNoneY
half_true_origYNoneNoneY
hhk2008_true-unreach-callYNoneYY
menlo_park_term_origYNoneYY
menlo_park_term_simpl_1YNoneYY
menlo_park_term_simpl_2YNoneYY
n_c11YNoneNoneY
nonlin_count_by_k_true-unreach-call_true-terminationYNoneYY
nonlin_divYYNoneY
nonlin_factorialYYYY
nonlin_gauss_sumYNoneYY
nonlin_minus_1YYYY
nonlin_minus_2YYYY
nonlin_mod_1YYYY
nonlin_mod_2YYYY
nonlin_mod_multYYYY
nonlin_mult_1YYYY
nonlin_mult_2YYYY
nonlin_mult_3YYYY
nonlin_mult_4YYYY
nonlin_mult_5YYYY
nonlin_mult_6YYYY
nonlin_powerYYYY
nonlin_squareYYYY
nonterm_01YNoneNoneY
phases_true-unreach-call1YNoneNoneY
recur_1YYYY
recur_102YNoneNoneY
s_disj_ite_01YYYY
s_disj_ite_02YYYY
s_disj_ite_03YYYY
s_disj_ite_04YYYY
s_disj_ite_05YYYY
s_disj_ite_06YYYY
s_mutants_01YYYY
s_mutants_02YYYY
s_mutants_03YYYY
s_mutants_04YYYY
s_mutants_05YYYY
s_mutants_06YYYY
s_mutants_07YYYY
s_mutants_08YYYY
s_mutants_09YYYY
s_mutants_10YYYY
s_mutants_11YYYY
s_mutants_12YYYY
s_mutants_13YYYY
s_mutants_14YYYY
s_mutants_15YYYY
s_mutants_16YNoneYY
s_mutants_17YNoneYY
s_mutants_18YNoneNoneY
s_mutants_19YNoneNoneY
s_mutants_20YNoneNoneY
s_mutants_21YNoneYY
s_mutants_22YNoneYY
s_mutants_23YYYY
s_mutants_24YNoneYY
s_seeds_01YYYY
s_seeds_02YYYY
s_seeds_03YYYY
s_seeds_04YNoneYY
s_seeds_05YYYY
s_seeds_06YYYY
s_seeds_07YYNoneY
s_seeds_08YYNoneY
s_seeds_09YNoneYY
s_seeds_10YNoneYY
s_triv_01YYYY
s_triv_02YNoneNoneY
s_triv_03YNoneYY
s_triv_04YNoneYY
s_triv_05YYNoneY
s_triv_06YYNoneY
s_triv_07YYNoneY
s_triv_08YYNoneY
s_triv_09YNoneNoneY
s_triv_10YNoneNoneY
s_triv_11YNoneNoneY
s_triv_12YNoneNoneY
s_triv_13YNoneNoneY
s_triv_14YNoneNoneY
s_triv_15YYNoneY
s_triv_16YNoneNoneY
s_triv_17YNoneNoneY
sn_1024YYYY
sn_2048YYYY
sn_4096YYYY
sn_8192YYYY
three_dots_moving_1YNoneNoneY
three_dots_moving_2YNoneNoneY
three_dots_moving_3YNoneNoneY
trex1YNoneNoneY
trex3YNoneNoneY
w1YNoneYY
w2YNoneNoneY
yz_plus_minus_1YNoneNoneY
yz_plus_minus_2YNoneNoneY
\n", + "
" + ], + "text/plain": [ + "algorithm FREQHORN ICE MCMC Z3\n", + "benchmarkName \n", + "abdu_01 Y Y Y Y\n", + "abdu_02 Y Y Y Y\n", + "abdu_03 Y Y Y Y\n", + "abdu_04 Y None Y Y\n", + "bhmr2007_true-unreach-call Y None Y Y\n", + "bouncy_three_counters_merged Y None Y Y\n", + "bouncy_two_counters_merged Y Y Y Y\n", + "cegar1 Y None Y Y\n", + "cegar2 Y None Y Y\n", + "cggmp_iter_1 Y Y Y Y\n", + "cggmp_iter_2 Y Y Y Y\n", + "cggmp_iter_3 Y Y Y Y\n", + "const_div_1 Y Y None Y\n", + "const_div_2 Y Y None Y\n", + "const_div_3 Y None None Y\n", + "const_div_4 Y None None Y\n", + "const_div_mod Y Y None Y\n", + "const_mod_1 Y None Y Y\n", + "const_mod_2 Y None Y Y\n", + "const_mod_3 Y None None Y\n", + "count_by_1_variant_true-unreach-call_true-termi... Y None Y Y\n", + "count_by_2_modif_true-unreach-call_true-termina... Y None Y Y\n", + "count_by_2_true-unreach-call_true-termination Y None Y Y\n", + "countud Y None Y Y\n", + "css2003_true-unreach-call Y None None Y\n", + "dillig01 Y None Y Y\n", + "dillig02 Y None None Y\n", + "dillig03 Y None Y Y\n", + "dillig04 Y None Y Y\n", + "dillig05 Y None Y Y\n", + "dillig07 Y None Y Y\n", + "dillig08 Y None None Y\n", + "dillig10 Y None None Y\n", + "dillig13 Y None Y Y\n", + "dillig14 Y None Y Y\n", + "dillig15 Y None Y Y\n", + "dillig16 Y None Y Y\n", + "dillig18 Y None None Y\n", + "dillig19 Y None None Y\n", + "dillig20-1 Y None None Y\n", + "dillig20-2 Y None None Y\n", + "dillig20-3 Y None None Y\n", + "dillig21 Y None None Y\n", + "dillig22 Y None None Y\n", + "dillig22-1 Y None None Y\n", + "dillig22-2 Y None None Y\n", + "dillig22-3 Y None None Y\n", + "dillig22-4 Y None None Y\n", + "dillig22-5 Y None None Y\n", + "dillig22-6 Y None None Y\n", + "dillig37 Y None Y Y\n", + "dillig41 Y None Y Y\n", + "dillig42 Y None None Y\n", + "dillig42-1 Y None None Y\n", + "dillig43 Y None Y Y\n", + "dillig44 Y None None Y\n", + "dillig44-1 Y None None Y\n", + "dillig46 Y None None Y\n", + "ex14 Y None Y Y\n", + "ex7 Y None Y Y\n", + "exact_iters_1 Y Y Y Y\n", + "exact_iters_2 Y Y Y Y\n", + "exact_iters_3 Y Y Y Y\n", + "exact_iters_4 Y Y Y Y\n", + "exact_iters_5 Y Y Y Y\n", + "fig3 Y Y None Y\n", + "fig9 Y None Y Y\n", + "formula22 Y Y Y Y\n", + "formula25 Y Y Y Y\n", + "formula27 Y None Y Y\n", + "gcd_1 Y None None Y\n", + "gcd_2 Y None None Y\n", + "gcd_3 Y None None Y\n", + "gj2007_true-unreach-call Y None None Y\n", + "half_true_modif Y None None Y\n", + "half_true_orig Y None None Y\n", + "hhk2008_true-unreach-call Y None Y Y\n", + "menlo_park_term_orig Y None Y Y\n", + "menlo_park_term_simpl_1 Y None Y Y\n", + "menlo_park_term_simpl_2 Y None Y Y\n", + "n_c11 Y None None Y\n", + "nonlin_count_by_k_true-unreach-call_true-termin... Y None Y Y\n", + "nonlin_div Y Y None Y\n", + "nonlin_factorial Y Y Y Y\n", + "nonlin_gauss_sum Y None Y Y\n", + "nonlin_minus_1 Y Y Y Y\n", + "nonlin_minus_2 Y Y Y Y\n", + "nonlin_mod_1 Y Y Y Y\n", + "nonlin_mod_2 Y Y Y Y\n", + "nonlin_mod_mult Y Y Y Y\n", + "nonlin_mult_1 Y Y Y Y\n", + "nonlin_mult_2 Y Y Y Y\n", + "nonlin_mult_3 Y Y Y Y\n", + "nonlin_mult_4 Y Y Y Y\n", + "nonlin_mult_5 Y Y Y Y\n", + "nonlin_mult_6 Y Y Y Y\n", + "nonlin_power Y Y Y Y\n", + "nonlin_square Y Y Y Y\n", + "nonterm_01 Y None None Y\n", + "phases_true-unreach-call1 Y None None Y\n", + "recur_1 Y Y Y Y\n", + "recur_102 Y None None Y\n", + "s_disj_ite_01 Y Y Y Y\n", + "s_disj_ite_02 Y Y Y Y\n", + "s_disj_ite_03 Y Y Y Y\n", + "s_disj_ite_04 Y Y Y Y\n", + "s_disj_ite_05 Y Y Y Y\n", + "s_disj_ite_06 Y Y Y Y\n", + "s_mutants_01 Y Y Y Y\n", + "s_mutants_02 Y Y Y Y\n", + "s_mutants_03 Y Y Y Y\n", + "s_mutants_04 Y Y Y Y\n", + "s_mutants_05 Y Y Y Y\n", + "s_mutants_06 Y Y Y Y\n", + "s_mutants_07 Y Y Y Y\n", + "s_mutants_08 Y Y Y Y\n", + "s_mutants_09 Y Y Y Y\n", + "s_mutants_10 Y Y Y Y\n", + "s_mutants_11 Y Y Y Y\n", + "s_mutants_12 Y Y Y Y\n", + "s_mutants_13 Y Y Y Y\n", + "s_mutants_14 Y Y Y Y\n", + "s_mutants_15 Y Y Y Y\n", + "s_mutants_16 Y None Y Y\n", + "s_mutants_17 Y None Y Y\n", + "s_mutants_18 Y None None Y\n", + "s_mutants_19 Y None None Y\n", + "s_mutants_20 Y None None Y\n", + "s_mutants_21 Y None Y Y\n", + "s_mutants_22 Y None Y Y\n", + "s_mutants_23 Y Y Y Y\n", + "s_mutants_24 Y None Y Y\n", + "s_seeds_01 Y Y Y Y\n", + "s_seeds_02 Y Y Y Y\n", + "s_seeds_03 Y Y Y Y\n", + "s_seeds_04 Y None Y Y\n", + "s_seeds_05 Y Y Y Y\n", + "s_seeds_06 Y Y Y Y\n", + "s_seeds_07 Y Y None Y\n", + "s_seeds_08 Y Y None Y\n", + "s_seeds_09 Y None Y Y\n", + "s_seeds_10 Y None Y Y\n", + "s_triv_01 Y Y Y Y\n", + "s_triv_02 Y None None Y\n", + "s_triv_03 Y None Y Y\n", + "s_triv_04 Y None Y Y\n", + "s_triv_05 Y Y None Y\n", + "s_triv_06 Y Y None Y\n", + "s_triv_07 Y Y None Y\n", + "s_triv_08 Y Y None Y\n", + "s_triv_09 Y None None Y\n", + "s_triv_10 Y None None Y\n", + "s_triv_11 Y None None Y\n", + "s_triv_12 Y None None Y\n", + "s_triv_13 Y None None Y\n", + "s_triv_14 Y None None Y\n", + "s_triv_15 Y Y None Y\n", + "s_triv_16 Y None None Y\n", + "s_triv_17 Y None None Y\n", + "sn_1024 Y Y Y Y\n", + "sn_2048 Y Y Y Y\n", + "sn_4096 Y Y Y Y\n", + "sn_8192 Y Y Y Y\n", + "three_dots_moving_1 Y None None Y\n", + "three_dots_moving_2 Y None None Y\n", + "three_dots_moving_3 Y None None Y\n", + "trex1 Y None None Y\n", + "trex3 Y None None Y\n", + "w1 Y None Y Y\n", + "w2 Y None None Y\n", + "yz_plus_minus_1 Y None None Y\n", + "yz_plus_minus_2 Y None None Y" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "with pandas.option_context('display.max_rows', None):\n", + " display(df[df['outcome'] != 'failure'][['benchmarkName', 'algorithm']].pivot_table(index='benchmarkName', columns='algorithm', aggfunc=lambda x: 'Y'))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Timeout Counts" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "algorithm outcome \n", + "FREQHORN iterLimitHit 70\n", + " success 3055\n", + " timeout 1001\n", + "ICE failure 322\n", + " success 122\n", + " timeout 93\n", + "MCMC failure 201\n", + " success 93\n", + " timeout 221\n", + "Z3 success 723\n", + " timeout 288\n", + "dtype: int64" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.groupby(['algorithm', 'outcome']).size()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Histogram of Non-Timeout Times" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n" + ] + }, + "metadata": { + "jupyter-vega3": "#4a20f535-b2f2-4a27-9958-4d8c45131ddc" + }, + "output_type": "display_data" + }, + { + "data": { + "application/javascript": [ + "var spec = {\"mark\": \"bar\", \"encoding\": {\"x\": {\"bin\": {\"maxbins\": 30}, \"field\": \"bestTime\", \"type\": \"quantitative\"}, \"y\": {\"aggregate\": \"count\", \"type\": \"quantitative\"}}, \"$schema\": \"https://vega.github.io/schema/vega-lite/v2.json\", \"width\": 450, \"height\": 300, \"selection\": {\"grid\": {\"type\": \"interval\", \"bind\": \"scales\"}}, \"data\": {\"values\": [{\"bestTime\": 0.27507996559143066}, {\"bestTime\": 7.687636137008667}, {\"bestTime\": 15.11708378791809}, {\"bestTime\": 14.977015018463135}, {\"bestTime\": 9.742303848266602}, {\"bestTime\": 4.4705970287323}, {\"bestTime\": 0.3854842185974121}, {\"bestTime\": 0.22148704528808594}, {\"bestTime\": 20.755006790161133}, {\"bestTime\": 0.5583930015563965}, {\"bestTime\": 0.24776291847229004}, {\"bestTime\": 1.5473339557647705}, {\"bestTime\": 1.7132349014282227}, {\"bestTime\": 46.11060094833374}, {\"bestTime\": 0.48245906829833984}, {\"bestTime\": 0.7709009647369385}, {\"bestTime\": 0.5080230236053467}, {\"bestTime\": 3.1167359352111816}, {\"bestTime\": 0.6019210815429688}, {\"bestTime\": 11.645603895187378}, {\"bestTime\": 0.27788591384887695}, {\"bestTime\": 8.472511053085327}, {\"bestTime\": 0.34551310539245605}, {\"bestTime\": 0.9437510967254639}, {\"bestTime\": 0.1545422077178955}, {\"bestTime\": 0.1292421817779541}, {\"bestTime\": 0.9045729637145996}, {\"bestTime\": 11.104864835739136}, {\"bestTime\": 0.3543109893798828}, {\"bestTime\": 0.6076581478118896}, {\"bestTime\": 0.20325303077697754}, {\"bestTime\": 7.004143953323364}, {\"bestTime\": 4.743921995162964}, {\"bestTime\": 5.6720099449157715}, {\"bestTime\": 25.9023699760437}, {\"bestTime\": 2.5966849327087402}, {\"bestTime\": 0.3435509204864502}, {\"bestTime\": 0.11447787284851074}, {\"bestTime\": 0.30796003341674805}, {\"bestTime\": 0.2730729579925537}, {\"bestTime\": 0.1676180362701416}, {\"bestTime\": 17.042580127716064}, {\"bestTime\": 39.29200196266174}, {\"bestTime\": 0.3625819683074951}, {\"bestTime\": 1.1185557842254639}, {\"bestTime\": 0.21780800819396973}, {\"bestTime\": 0.700314998626709}, {\"bestTime\": 0.047937870025634766}, {\"bestTime\": 2.4964988231658936}, {\"bestTime\": 9.626194953918457}, {\"bestTime\": 4.517822980880737}, {\"bestTime\": 0.5953519344329834}, {\"bestTime\": 0.18700003623962402}, {\"bestTime\": 5.681717872619629}, {\"bestTime\": 9.206433057785034}, {\"bestTime\": 1.3995530605316162}, {\"bestTime\": 4.3701348304748535}, {\"bestTime\": 1.7025740146636963}, {\"bestTime\": 0.4843130111694336}, {\"bestTime\": 8.935805082321167}, {\"bestTime\": 6.610934019088745}, {\"bestTime\": 0.36695098876953125}, {\"bestTime\": 2.4761929512023926}, {\"bestTime\": 0.3020601272583008}, {\"bestTime\": 1.9120209217071533}, {\"bestTime\": 0.7332100868225098}, {\"bestTime\": 12.994786024093628}, {\"bestTime\": 0.8177990913391113}, {\"bestTime\": 0.6787199974060059}, {\"bestTime\": 14.603124141693115}, {\"bestTime\": 1.7458159923553467}, {\"bestTime\": 29.797986030578613}, {\"bestTime\": 1.6394689083099365}, {\"bestTime\": 0.21187400817871094}, {\"bestTime\": 39.741260051727295}, {\"bestTime\": 0.9450540542602539}, {\"bestTime\": 23.518840074539185}, {\"bestTime\": 1.918673038482666}, {\"bestTime\": 2.633051872253418}, {\"bestTime\": 0.6716320514678955}, {\"bestTime\": 14.299813032150269}, {\"bestTime\": 0.8290460109710693}, {\"bestTime\": 1.3830859661102295}, {\"bestTime\": 7.36578893661499}, {\"bestTime\": 0.22001981735229492}, {\"bestTime\": 6.286279201507568}, {\"bestTime\": 29.170534133911133}, {\"bestTime\": 0.11984896659851074}, {\"bestTime\": 0.6596858501434326}, {\"bestTime\": 0.3679652214050293}, {\"bestTime\": 1.2661170959472656}, {\"bestTime\": 0.2834608554840088}, {\"bestTime\": 8.514616966247559}, {\"bestTime\": 5.456643104553223}, {\"bestTime\": 0.28658413887023926}, {\"bestTime\": 7.05855393409729}, {\"bestTime\": 15.495913982391357}, {\"bestTime\": 3.614049196243286}, {\"bestTime\": 0.24445199966430664}, {\"bestTime\": 0.12414193153381348}, {\"bestTime\": 2.0643110275268555}, {\"bestTime\": 0.6943099498748779}, {\"bestTime\": 0.370311975479126}, {\"bestTime\": 0.15557599067687988}, {\"bestTime\": 0.09092998504638672}, {\"bestTime\": 52.33218502998352}, {\"bestTime\": 5.757562875747681}, {\"bestTime\": 0.2746009826660156}, {\"bestTime\": 2.1636300086975098}, {\"bestTime\": 0.9296741485595703}, {\"bestTime\": 43.42172598838806}, {\"bestTime\": 0.43706703186035156}, {\"bestTime\": 11.375471115112305}, {\"bestTime\": 22.11535382270813}, {\"bestTime\": 6.0814049243927}, {\"bestTime\": 1.6661889553070068}, {\"bestTime\": 19.473403930664062}, {\"bestTime\": 17.665033102035522}, {\"bestTime\": 22.946839809417725}, {\"bestTime\": 0.47998905181884766}, {\"bestTime\": 1.2394239902496338}, {\"bestTime\": 4.633136987686157}, {\"bestTime\": 0.2387850284576416}, {\"bestTime\": 0.3712120056152344}, {\"bestTime\": 53.937904834747314}, {\"bestTime\": 0.46793603897094727}, {\"bestTime\": 31.157759189605713}, {\"bestTime\": 33.72001099586487}, {\"bestTime\": 2.1205649375915527}, {\"bestTime\": 0.35796499252319336}, {\"bestTime\": 1.345959186553955}, {\"bestTime\": 0.6718099117279053}, {\"bestTime\": 0.7460720539093018}, {\"bestTime\": 52.71762180328369}, {\"bestTime\": 0.1935570240020752}, {\"bestTime\": 3.3945751190185547}, {\"bestTime\": 0.42477989196777344}, {\"bestTime\": 0.26934313774108887}, {\"bestTime\": 1.850019931793213}, {\"bestTime\": 19.97994899749756}, {\"bestTime\": 0.15013504028320312}, {\"bestTime\": 1.8371930122375488}, {\"bestTime\": 0.11188006401062012}, {\"bestTime\": 1.5418570041656494}, {\"bestTime\": 2.267457962036133}, {\"bestTime\": 0.12758803367614746}, {\"bestTime\": 24.524569034576416}, {\"bestTime\": 18.26715612411499}, {\"bestTime\": 0.6840090751647949}, {\"bestTime\": 4.665761947631836}, {\"bestTime\": 0.0548708438873291}, {\"bestTime\": 1.7477939128875732}, {\"bestTime\": 0.6729929447174072}, {\"bestTime\": 5.558549880981445}, {\"bestTime\": 3.8771960735321045}, {\"bestTime\": 0.5343070030212402}, {\"bestTime\": 0.7915968894958496}, {\"bestTime\": 12.113834857940674}, {\"bestTime\": 0.13920092582702637}, {\"bestTime\": 2.00832200050354}, {\"bestTime\": 1.9199929237365723}, {\"bestTime\": 0.5129430294036865}, {\"bestTime\": 0.4207890033721924}, {\"bestTime\": 12.846521139144897}, {\"bestTime\": 0.618278980255127}, {\"bestTime\": 5.109615802764893}, {\"bestTime\": 9.441703081130981}, {\"bestTime\": 0.3907968997955322}, {\"bestTime\": 0.4130880832672119}, {\"bestTime\": 0.6857900619506836}, {\"bestTime\": 0.14975309371948242}, {\"bestTime\": 0.15021300315856934}, {\"bestTime\": 13.943119049072266}, {\"bestTime\": 0.2734658718109131}, {\"bestTime\": 43.099798917770386}, {\"bestTime\": 0.06317496299743652}, {\"bestTime\": 8.61067819595337}, {\"bestTime\": 0.4872128963470459}, {\"bestTime\": 0.36994314193725586}, {\"bestTime\": 4.748936891555786}, {\"bestTime\": 0.7709450721740723}, {\"bestTime\": 0.3211839199066162}, {\"bestTime\": 0.1365678310394287}, {\"bestTime\": 0.13822603225708008}, {\"bestTime\": 1.5188229084014893}, {\"bestTime\": 21.177951097488403}, {\"bestTime\": 19.22685694694519}, {\"bestTime\": 0.18734383583068848}, {\"bestTime\": 0.9396319389343262}, {\"bestTime\": 18.721688985824585}, {\"bestTime\": 22.82727885246277}, {\"bestTime\": 0.1456141471862793}, {\"bestTime\": 0.14494800567626953}, {\"bestTime\": 3.6278398036956787}, {\"bestTime\": 0.2513010501861572}, {\"bestTime\": 0.22027087211608887}, {\"bestTime\": 0.18271613121032715}, {\"bestTime\": 18.571437120437622}, {\"bestTime\": 4.224077939987183}, {\"bestTime\": 0.25789499282836914}, {\"bestTime\": 0.24493694305419922}, {\"bestTime\": 0.7259409427642822}, {\"bestTime\": 12.677395105361938}, {\"bestTime\": 0.07933306694030762}, {\"bestTime\": 0.24483013153076172}, {\"bestTime\": 2.853020191192627}, {\"bestTime\": 0.05451202392578125}, {\"bestTime\": 1.9583048820495605}, {\"bestTime\": 0.3194618225097656}, {\"bestTime\": 0.183272123336792}, {\"bestTime\": 9.248500108718872}, {\"bestTime\": 4.493060827255249}, {\"bestTime\": 0.40879297256469727}, {\"bestTime\": 1.7196941375732422}, {\"bestTime\": 1.6722958087921143}, {\"bestTime\": 0.7746970653533936}, {\"bestTime\": 8.251631021499634}, {\"bestTime\": 0.5066370964050293}, {\"bestTime\": 1.6287760734558105}, {\"bestTime\": 21.93108105659485}, {\"bestTime\": 42.6387619972229}, {\"bestTime\": 0.41051506996154785}, {\"bestTime\": 0.8730599880218506}, {\"bestTime\": 0.2296888828277588}, {\"bestTime\": 0.3995649814605713}, {\"bestTime\": 0.18286705017089844}, {\"bestTime\": 0.1964871883392334}, {\"bestTime\": 0.1841118335723877}, {\"bestTime\": 3.4904561042785645}, {\"bestTime\": 0.1143350601196289}, {\"bestTime\": 14.898368120193481}, {\"bestTime\": 0.19847798347473145}, {\"bestTime\": 2.099397897720337}, {\"bestTime\": 56.24942588806152}, {\"bestTime\": 0.4143850803375244}, {\"bestTime\": 0.89292311668396}, {\"bestTime\": 2.6746041774749756}, {\"bestTime\": 7.186194896697998}, {\"bestTime\": 18.66399908065796}, {\"bestTime\": 21.69753885269165}, {\"bestTime\": 41.61012077331543}, {\"bestTime\": 18.04982590675354}, {\"bestTime\": 5.4199018478393555}, {\"bestTime\": 7.886237859725952}, {\"bestTime\": 0.1116030216217041}, {\"bestTime\": 2.8739190101623535}, {\"bestTime\": 10.557419776916504}, {\"bestTime\": 0.9395320415496826}, {\"bestTime\": 0.3930330276489258}, {\"bestTime\": 0.39560484886169434}, {\"bestTime\": 0.13379192352294922}, {\"bestTime\": 0.5834407806396484}, {\"bestTime\": 0.11528301239013672}, {\"bestTime\": 2.7437539100646973}, {\"bestTime\": 7.75597882270813}, {\"bestTime\": 0.15586590766906738}, {\"bestTime\": 0.7609689235687256}, {\"bestTime\": 1.4975969791412354}, {\"bestTime\": 4.285359859466553}, {\"bestTime\": 0.1494770050048828}, {\"bestTime\": 0.13753795623779297}, {\"bestTime\": 0.6605479717254639}, {\"bestTime\": 4.420241117477417}, {\"bestTime\": 0.6506190299987793}, {\"bestTime\": 33.5343599319458}, {\"bestTime\": 2.6605191230773926}, {\"bestTime\": 0.14293313026428223}, {\"bestTime\": 0.4921748638153076}, {\"bestTime\": 3.913728952407837}, {\"bestTime\": 4.087730169296265}, {\"bestTime\": 8.984137058258057}, {\"bestTime\": 2.6147830486297607}, {\"bestTime\": 0.43769001960754395}, {\"bestTime\": 0.09511590003967285}, {\"bestTime\": 1.6482269763946533}, {\"bestTime\": 0.12828993797302246}, {\"bestTime\": 57.91946005821228}, {\"bestTime\": 0.27879905700683594}, {\"bestTime\": 23.742749214172363}, {\"bestTime\": 0.3020498752593994}, {\"bestTime\": 0.8157029151916504}, {\"bestTime\": 0.7417030334472656}, {\"bestTime\": 0.8438849449157715}, {\"bestTime\": 5.439342021942139}, {\"bestTime\": 1.8701200485229492}, {\"bestTime\": 0.7463741302490234}, {\"bestTime\": 10.219377994537354}, {\"bestTime\": 2.1227810382843018}, {\"bestTime\": 23.353032112121582}, {\"bestTime\": 0.27251386642456055}, {\"bestTime\": 0.22749590873718262}, {\"bestTime\": 6.637101888656616}, {\"bestTime\": 4.2117760181427}, {\"bestTime\": 0.07944607734680176}, {\"bestTime\": 41.6068000793457}, {\"bestTime\": 0.2801640033721924}, {\"bestTime\": 0.18965911865234375}, {\"bestTime\": 0.5574569702148438}, {\"bestTime\": 52.36652588844299}, {\"bestTime\": 17.783511877059937}, {\"bestTime\": 0.21015095710754395}, {\"bestTime\": 1.5407838821411133}, {\"bestTime\": 12.558223962783813}, {\"bestTime\": 2.6752450466156006}, {\"bestTime\": 1.6632349491119385}, {\"bestTime\": 0.1277451515197754}, {\"bestTime\": 0.2116701602935791}, {\"bestTime\": 0.23037505149841309}, {\"bestTime\": 0.38727879524230957}, {\"bestTime\": 0.47391200065612793}, {\"bestTime\": 5.10810399055481}, {\"bestTime\": 35.52881598472595}, {\"bestTime\": 0.24624896049499512}, {\"bestTime\": 0.8032140731811523}, {\"bestTime\": 0.7245151996612549}, {\"bestTime\": 25.818722009658813}, {\"bestTime\": 0.3816969394683838}, {\"bestTime\": 0.1313941478729248}, {\"bestTime\": 0.12891411781311035}, {\"bestTime\": 0.4871339797973633}, {\"bestTime\": 0.678551197052002}, {\"bestTime\": 14.52736496925354}, {\"bestTime\": 15.370544910430908}, {\"bestTime\": 0.8491668701171875}, {\"bestTime\": 19.74747586250305}, {\"bestTime\": 8.973210096359253}, {\"bestTime\": 0.9722139835357666}, {\"bestTime\": 0.20153594017028809}, {\"bestTime\": 0.892380952835083}, {\"bestTime\": 0.3531160354614258}, {\"bestTime\": 0.30205202102661133}, {\"bestTime\": 2.157719850540161}, {\"bestTime\": 3.7066080570220947}, {\"bestTime\": 0.4195678234100342}, {\"bestTime\": 10.939458847045898}, {\"bestTime\": 0.1779341697692871}, {\"bestTime\": 2.0753700733184814}, {\"bestTime\": 0.15909314155578613}, {\"bestTime\": 15.38750696182251}, {\"bestTime\": 13.741991996765137}, {\"bestTime\": 28.415789127349854}, {\"bestTime\": 0.06345200538635254}, {\"bestTime\": 0.08054304122924805}, {\"bestTime\": 10.079277038574219}, {\"bestTime\": 45.59532308578491}, {\"bestTime\": 0.19141292572021484}, {\"bestTime\": 0.486436128616333}, {\"bestTime\": 0.35326290130615234}, {\"bestTime\": 0.0832209587097168}, {\"bestTime\": 0.06249094009399414}, {\"bestTime\": 2.5447921752929688}, {\"bestTime\": 0.09401392936706543}, {\"bestTime\": 1.9449548721313477}, {\"bestTime\": 4.63348913192749}, {\"bestTime\": 0.798712968826294}, {\"bestTime\": 0.28164005279541016}, {\"bestTime\": 0.22160601615905762}, {\"bestTime\": 9.495184898376465}, {\"bestTime\": 3.1057848930358887}, {\"bestTime\": 5.621002912521362}, {\"bestTime\": 39.46429204940796}, {\"bestTime\": 0.8298981189727783}, {\"bestTime\": 5.5359580516815186}, {\"bestTime\": 19.18468999862671}, {\"bestTime\": 4.681045055389404}, {\"bestTime\": 34.74170207977295}, {\"bestTime\": 41.46851110458374}, {\"bestTime\": 0.2956349849700928}, {\"bestTime\": 0.948261022567749}, {\"bestTime\": 13.531186819076538}, {\"bestTime\": 0.11255502700805664}, {\"bestTime\": 12.526174068450928}, {\"bestTime\": 0.4334409236907959}, {\"bestTime\": 0.18556785583496094}, {\"bestTime\": 1.206333875656128}, {\"bestTime\": 0.24485301971435547}, {\"bestTime\": 0.14665603637695312}, {\"bestTime\": 0.14633584022521973}, {\"bestTime\": 1.9453489780426025}, {\"bestTime\": 0.0633089542388916}, {\"bestTime\": 8.504855155944824}, {\"bestTime\": 0.48032307624816895}, {\"bestTime\": 50.570947885513306}, {\"bestTime\": 0.6917910575866699}, {\"bestTime\": 0.15244698524475098}, {\"bestTime\": 8.613245964050293}, {\"bestTime\": 0.2977118492126465}, {\"bestTime\": 21.86127781867981}, {\"bestTime\": 0.32318592071533203}, {\"bestTime\": 0.13501405715942383}, {\"bestTime\": 0.1759490966796875}, {\"bestTime\": 0.1942598819732666}, {\"bestTime\": 0.41185498237609863}, {\"bestTime\": 0.37026190757751465}, {\"bestTime\": 19.06050395965576}, {\"bestTime\": 0.5041830539703369}, {\"bestTime\": 0.6860330104827881}, {\"bestTime\": 1.8949830532073975}, {\"bestTime\": 2.643949031829834}, {\"bestTime\": 0.2701230049133301}, {\"bestTime\": 5.980352163314819}, {\"bestTime\": 0.814967155456543}, {\"bestTime\": 0.37172412872314453}, {\"bestTime\": 2.9967567920684814}, {\"bestTime\": 14.61380410194397}, {\"bestTime\": 0.13138890266418457}, {\"bestTime\": 0.13153600692749023}, {\"bestTime\": 12.183281898498535}, {\"bestTime\": 0.38118481636047363}, {\"bestTime\": 0.5509469509124756}, {\"bestTime\": 43.3771550655365}, {\"bestTime\": 29.950247049331665}, {\"bestTime\": 3.2194759845733643}, {\"bestTime\": 2.828238010406494}, {\"bestTime\": 0.4212939739227295}, {\"bestTime\": 0.27190494537353516}, {\"bestTime\": 4.963321208953857}, {\"bestTime\": 10.915421962738037}, {\"bestTime\": 0.08081293106079102}, {\"bestTime\": 1.2965130805969238}, {\"bestTime\": 0.833406925201416}, {\"bestTime\": 0.1398608684539795}, {\"bestTime\": 1.7411980628967285}, {\"bestTime\": 0.7519330978393555}, {\"bestTime\": 10.952269077301025}, {\"bestTime\": 0.0534510612487793}, {\"bestTime\": 0.22388601303100586}, {\"bestTime\": 0.7704839706420898}, {\"bestTime\": 0.481982946395874}, {\"bestTime\": 0.37828898429870605}, {\"bestTime\": 0.234238862991333}, {\"bestTime\": 0.7118570804595947}, {\"bestTime\": 3.9249000549316406}, {\"bestTime\": 0.2111971378326416}, {\"bestTime\": 5.905513048171997}, {\"bestTime\": 6.02879786491394}, {\"bestTime\": 18.691620111465454}, {\"bestTime\": 0.7143580913543701}, {\"bestTime\": 0.44473695755004883}, {\"bestTime\": 15.731011867523193}, {\"bestTime\": 1.2533020973205566}, {\"bestTime\": 2.511655807495117}, {\"bestTime\": 0.16273117065429688}, {\"bestTime\": 1.7681870460510254}, {\"bestTime\": 0.28173303604125977}, {\"bestTime\": 54.48647689819336}, {\"bestTime\": 0.2951688766479492}, {\"bestTime\": 0.5951888561248779}, {\"bestTime\": 0.05300188064575195}, {\"bestTime\": 38.567590951919556}, {\"bestTime\": 0.09182381629943848}, {\"bestTime\": 2.6354820728302}, {\"bestTime\": 12.713675022125244}, {\"bestTime\": 5.137559175491333}, {\"bestTime\": 0.6485269069671631}, {\"bestTime\": 0.7676818370819092}, {\"bestTime\": 0.490419864654541}, {\"bestTime\": 0.6221771240234375}, {\"bestTime\": 2.2179160118103027}, {\"bestTime\": 0.11719894409179688}, {\"bestTime\": 12.571322202682495}, {\"bestTime\": 0.3950979709625244}, {\"bestTime\": 0.45653700828552246}, {\"bestTime\": 0.15430092811584473}, {\"bestTime\": 0.2645230293273926}, {\"bestTime\": 33.561294078826904}, {\"bestTime\": 2.7333548069000244}, {\"bestTime\": 37.529491901397705}, {\"bestTime\": 12.142969131469727}, {\"bestTime\": 18.942402124404907}, {\"bestTime\": 0.2843317985534668}, {\"bestTime\": 1.024148941040039}, {\"bestTime\": 0.6804938316345215}, {\"bestTime\": 5.19124698638916}, {\"bestTime\": 4.271412134170532}, {\"bestTime\": 0.32388806343078613}, {\"bestTime\": 0.09840893745422363}, {\"bestTime\": 0.6919829845428467}, {\"bestTime\": 12.398355960845947}, {\"bestTime\": 3.016356945037842}, {\"bestTime\": 0.42720699310302734}, {\"bestTime\": 1.4988138675689697}, {\"bestTime\": 2.673798084259033}, {\"bestTime\": 0.41334009170532227}, {\"bestTime\": 3.8521549701690674}, {\"bestTime\": 17.525969982147217}, {\"bestTime\": 2.2787060737609863}, {\"bestTime\": 2.4607911109924316}, {\"bestTime\": 0.4904751777648926}, {\"bestTime\": 0.25644707679748535}, {\"bestTime\": 21.406028985977173}, {\"bestTime\": 7.32135796546936}, {\"bestTime\": 0.19690489768981934}, {\"bestTime\": 0.5490000247955322}, {\"bestTime\": 0.04720807075500488}, {\"bestTime\": 0.04754304885864258}, {\"bestTime\": 0.510516881942749}, {\"bestTime\": 0.17836618423461914}, {\"bestTime\": 9.401143074035645}, {\"bestTime\": 37.08918499946594}, {\"bestTime\": 0.5837869644165039}, {\"bestTime\": 0.2425990104675293}, {\"bestTime\": 20.155938863754272}, {\"bestTime\": 52.681007862091064}, {\"bestTime\": 4.159462928771973}, {\"bestTime\": 0.559683084487915}, {\"bestTime\": 0.7362141609191895}, {\"bestTime\": 0.350614070892334}, {\"bestTime\": 0.1721479892730713}, {\"bestTime\": 0.6089420318603516}, {\"bestTime\": 0.5332989692687988}, {\"bestTime\": 0.20371198654174805}, {\"bestTime\": 0.21318602561950684}, {\"bestTime\": 0.1276719570159912}, {\"bestTime\": 1.8743109703063965}, {\"bestTime\": 0.10488700866699219}, {\"bestTime\": 0.1138620376586914}, {\"bestTime\": 0.30629396438598633}, {\"bestTime\": 0.16993284225463867}, {\"bestTime\": 7.057882070541382}, {\"bestTime\": 0.5270488262176514}, {\"bestTime\": 4.521076202392578}, {\"bestTime\": 3.810109853744507}, {\"bestTime\": 3.83502197265625}, {\"bestTime\": 4.92274808883667}, {\"bestTime\": 0.4026341438293457}, {\"bestTime\": 0.4639129638671875}, {\"bestTime\": 0.1968381404876709}, {\"bestTime\": 0.27858495712280273}, {\"bestTime\": 15.164045095443726}, {\"bestTime\": 7.682156085968018}, {\"bestTime\": 0.7657690048217773}, {\"bestTime\": 0.5071289539337158}, {\"bestTime\": 6.486546993255615}, {\"bestTime\": 2.7447688579559326}, {\"bestTime\": 4.772068977355957}, {\"bestTime\": 0.2112407684326172}, {\"bestTime\": 0.27710795402526855}, {\"bestTime\": 0.3525509834289551}, {\"bestTime\": 0.38062405586242676}, {\"bestTime\": 0.1562328338623047}, {\"bestTime\": 15.59000015258789}, {\"bestTime\": 0.5642290115356445}, {\"bestTime\": 0.24928689002990723}, {\"bestTime\": 0.9846069812774658}, {\"bestTime\": 1.4793641567230225}, {\"bestTime\": 0.47475194931030273}, {\"bestTime\": 9.961407899856567}, {\"bestTime\": 1.2020268440246582}, {\"bestTime\": 0.5257291793823242}, {\"bestTime\": 2.8875889778137207}, {\"bestTime\": 4.559080123901367}, {\"bestTime\": 4.618811130523682}, {\"bestTime\": 0.4539761543273926}, {\"bestTime\": 4.681519985198975}, {\"bestTime\": 2.1209449768066406}, {\"bestTime\": 2.0966989994049072}, {\"bestTime\": 0.4978909492492676}, {\"bestTime\": 39.67084980010986}, {\"bestTime\": 0.4367520809173584}, {\"bestTime\": 3.7475199699401855}, {\"bestTime\": 4.0519020557403564}, {\"bestTime\": 0.18335294723510742}, {\"bestTime\": 6.521417856216431}, {\"bestTime\": 0.15572309494018555}, {\"bestTime\": 3.2334320545196533}, {\"bestTime\": 0.5439610481262207}, {\"bestTime\": 0.6690659523010254}, {\"bestTime\": 2.269908905029297}, {\"bestTime\": 2.9432530403137207}, {\"bestTime\": 0.19637703895568848}, {\"bestTime\": 0.42252087593078613}, {\"bestTime\": 43.4053750038147}, {\"bestTime\": 29.986531019210815}, {\"bestTime\": 0.33359408378601074}, {\"bestTime\": 0.7657959461212158}, {\"bestTime\": 4.204823017120361}, {\"bestTime\": 0.1210319995880127}, {\"bestTime\": 53.87936091423035}, {\"bestTime\": 0.39286208152770996}, {\"bestTime\": 5.464622974395752}, {\"bestTime\": 25.63602900505066}, {\"bestTime\": 0.9282081127166748}, {\"bestTime\": 0.43146395683288574}, {\"bestTime\": 16.33383798599243}, {\"bestTime\": 5.056987047195435}, {\"bestTime\": 0.9233551025390625}, {\"bestTime\": 0.19642400741577148}, {\"bestTime\": 0.05019021034240723}, {\"bestTime\": 7.7297539710998535}, {\"bestTime\": 0.23865914344787598}, {\"bestTime\": 3.1930811405181885}, {\"bestTime\": 0.0926520824432373}, {\"bestTime\": 56.49560594558716}, {\"bestTime\": 26.08758807182312}, {\"bestTime\": 5.202218055725098}, {\"bestTime\": 1.025312900543213}, {\"bestTime\": 1.3226141929626465}, {\"bestTime\": 1.3566300868988037}, {\"bestTime\": 18.884909868240356}, {\"bestTime\": 6.312146902084351}, {\"bestTime\": 34.03926205635071}, {\"bestTime\": 0.7066161632537842}, {\"bestTime\": 0.13109111785888672}, {\"bestTime\": 0.20920515060424805}, {\"bestTime\": 13.004935026168823}, {\"bestTime\": 0.9378330707550049}, {\"bestTime\": 2.6362369060516357}, {\"bestTime\": 1.4017751216888428}, {\"bestTime\": 0.23927617073059082}, {\"bestTime\": 23.65637993812561}, {\"bestTime\": 5.622112989425659}, {\"bestTime\": 3.0627400875091553}, {\"bestTime\": 0.5936698913574219}, {\"bestTime\": 7.743969917297363}, {\"bestTime\": 0.2754631042480469}, {\"bestTime\": 0.6178698539733887}, {\"bestTime\": 0.12609100341796875}, {\"bestTime\": 0.6749670505523682}, {\"bestTime\": 0.5010731220245361}, {\"bestTime\": 1.6786868572235107}, {\"bestTime\": 0.05185103416442871}, {\"bestTime\": 0.31522393226623535}, {\"bestTime\": 7.567430019378662}, {\"bestTime\": 0.6855168342590332}, {\"bestTime\": 0.28465700149536133}, {\"bestTime\": 0.374783992767334}, {\"bestTime\": 0.12683391571044922}, {\"bestTime\": 0.20853090286254883}, {\"bestTime\": 27.946851015090942}, {\"bestTime\": 0.2828829288482666}, {\"bestTime\": 3.2705130577087402}, {\"bestTime\": 7.047782897949219}, {\"bestTime\": 0.12009382247924805}, {\"bestTime\": 9.256524085998535}, {\"bestTime\": 0.0918281078338623}, {\"bestTime\": 0.7287650108337402}, {\"bestTime\": 13.333407878875732}, {\"bestTime\": 3.1480050086975098}, {\"bestTime\": 7.249139070510864}, {\"bestTime\": 0.4190340042114258}, {\"bestTime\": 2.790820837020874}, {\"bestTime\": 0.07644486427307129}, {\"bestTime\": 0.5066440105438232}, {\"bestTime\": 0.3446829319000244}, {\"bestTime\": 9.531774997711182}, {\"bestTime\": 0.4496300220489502}, {\"bestTime\": 2.074416160583496}, {\"bestTime\": 0.18298888206481934}, {\"bestTime\": 1.995621919631958}, {\"bestTime\": 0.12312102317810059}, {\"bestTime\": 0.6205289363861084}, {\"bestTime\": 0.12302398681640625}, {\"bestTime\": 0.34521913528442383}, {\"bestTime\": 0.396636962890625}, {\"bestTime\": 0.9508788585662842}, {\"bestTime\": 0.7055590152740479}, {\"bestTime\": 0.2397751808166504}, {\"bestTime\": 0.6022050380706787}, {\"bestTime\": 0.41545796394348145}, {\"bestTime\": 0.5496470928192139}, {\"bestTime\": 0.7092709541320801}, {\"bestTime\": 2.353863000869751}, {\"bestTime\": 0.26788878440856934}, {\"bestTime\": 0.21453285217285156}, {\"bestTime\": 0.788693904876709}, {\"bestTime\": 16.770971059799194}, {\"bestTime\": 0.18982291221618652}, {\"bestTime\": 3.638896942138672}, {\"bestTime\": 2.6237940788269043}, {\"bestTime\": 0.7245118618011475}, {\"bestTime\": 0.5572350025177002}, {\"bestTime\": 1.9462080001831055}, {\"bestTime\": 0.7372548580169678}, {\"bestTime\": 0.627018928527832}, {\"bestTime\": 0.26010799407958984}, {\"bestTime\": 0.20054912567138672}, {\"bestTime\": 24.263853073120117}, {\"bestTime\": 0.04655194282531738}, {\"bestTime\": 0.6786708831787109}, {\"bestTime\": 0.6796119213104248}, {\"bestTime\": 0.97409987449646}, {\"bestTime\": 28.1738498210907}, {\"bestTime\": 17.450171947479248}, {\"bestTime\": 0.741055965423584}, {\"bestTime\": 30.59866499900818}, {\"bestTime\": 0.5997822284698486}, {\"bestTime\": 0.30202603340148926}, {\"bestTime\": 0.8775548934936523}, {\"bestTime\": 12.206686019897461}, {\"bestTime\": 0.24009108543395996}, {\"bestTime\": 18.10927700996399}, {\"bestTime\": 0.27599501609802246}, {\"bestTime\": 0.11743617057800293}, {\"bestTime\": 36.03294491767883}, {\"bestTime\": 0.08103704452514648}, {\"bestTime\": 0.2607390880584717}, {\"bestTime\": 9.404664039611816}, {\"bestTime\": 7.312933921813965}, {\"bestTime\": 0.3980569839477539}, {\"bestTime\": 0.193389892578125}, {\"bestTime\": 0.12097501754760742}, {\"bestTime\": 10.227802991867065}, {\"bestTime\": 0.14310884475708008}, {\"bestTime\": 0.5447649955749512}, {\"bestTime\": 0.7279660701751709}, {\"bestTime\": 2.79654598236084}, {\"bestTime\": 0.2704601287841797}, {\"bestTime\": 0.2500791549682617}, {\"bestTime\": 3.52603816986084}, {\"bestTime\": 30.129056930541992}, {\"bestTime\": 0.34271907806396484}, {\"bestTime\": 40.977850914001465}, {\"bestTime\": 0.40588808059692383}, {\"bestTime\": 0.7589271068572998}, {\"bestTime\": 0.11464190483093262}, {\"bestTime\": 0.3811509609222412}, {\"bestTime\": 0.45380091667175293}, {\"bestTime\": 2.208595037460327}, {\"bestTime\": 0.21551990509033203}, {\"bestTime\": 33.68133807182312}, {\"bestTime\": 0.3072319030761719}, {\"bestTime\": 6.930781126022339}, {\"bestTime\": 0.9219529628753662}, {\"bestTime\": 0.1825869083404541}, {\"bestTime\": 27.968651056289673}, {\"bestTime\": 0.3205909729003906}, {\"bestTime\": 0.5757520198822021}, {\"bestTime\": 0.3761448860168457}, {\"bestTime\": 0.7160911560058594}, {\"bestTime\": 2.511721134185791}, {\"bestTime\": 11.597651958465576}, {\"bestTime\": 1.1553270816802979}, {\"bestTime\": 0.4287588596343994}, {\"bestTime\": 0.13979005813598633}, {\"bestTime\": 47.432713985443115}, {\"bestTime\": 0.0792839527130127}, {\"bestTime\": 1.5403778553009033}, {\"bestTime\": 0.303602933883667}, {\"bestTime\": 3.03182315826416}, {\"bestTime\": 0.6191339492797852}, {\"bestTime\": 0.4579172134399414}, {\"bestTime\": 0.3502509593963623}, {\"bestTime\": 0.9182839393615723}, {\"bestTime\": 3.059753179550171}, {\"bestTime\": 0.7750730514526367}, {\"bestTime\": 0.17395710945129395}, {\"bestTime\": 6.747013092041016}, {\"bestTime\": 1.884577989578247}, {\"bestTime\": 0.09255194664001465}, {\"bestTime\": 0.24104809761047363}, {\"bestTime\": 0.15024709701538086}, {\"bestTime\": 1.2600469589233398}, {\"bestTime\": 20.04096794128418}, {\"bestTime\": 9.317611932754517}, {\"bestTime\": 9.018749952316284}, {\"bestTime\": 0.3950538635253906}, {\"bestTime\": 2.4638381004333496}, {\"bestTime\": 0.23763203620910645}, {\"bestTime\": 45.78458595275879}, {\"bestTime\": 4.6644980907440186}, {\"bestTime\": 0.2059340476989746}, {\"bestTime\": 0.16453886032104492}, {\"bestTime\": 3.1176111698150635}, {\"bestTime\": 0.3570709228515625}, {\"bestTime\": 0.8790709972381592}, {\"bestTime\": 0.39606189727783203}, {\"bestTime\": 0.12434697151184082}, {\"bestTime\": 0.8686540126800537}, {\"bestTime\": 22.014370918273926}, {\"bestTime\": 0.285416841506958}, {\"bestTime\": 49.07097005844116}, {\"bestTime\": 0.34020209312438965}, {\"bestTime\": 0.10899901390075684}, {\"bestTime\": 8.326987028121948}, {\"bestTime\": 0.4882798194885254}, {\"bestTime\": 0.42461395263671875}, {\"bestTime\": 0.18283605575561523}, {\"bestTime\": 1.412165880203247}, {\"bestTime\": 0.44656801223754883}, {\"bestTime\": 3.051347017288208}, {\"bestTime\": 8.031284093856812}, {\"bestTime\": 0.17353415489196777}, {\"bestTime\": 0.2675821781158447}, {\"bestTime\": 2.8676300048828125}, {\"bestTime\": 0.30352282524108887}, {\"bestTime\": 0.2350919246673584}, {\"bestTime\": 0.853233814239502}, {\"bestTime\": 0.08022212982177734}, {\"bestTime\": 6.886528015136719}, {\"bestTime\": 0.4739699363708496}, {\"bestTime\": 8.834622859954834}, {\"bestTime\": 0.2794229984283447}, {\"bestTime\": 2.236043930053711}, {\"bestTime\": 0.14493799209594727}, {\"bestTime\": 2.5020978450775146}, {\"bestTime\": 1.0633409023284912}, {\"bestTime\": 1.9063539505004883}, {\"bestTime\": 55.59857201576233}, {\"bestTime\": 0.5828330516815186}, {\"bestTime\": 40.86588501930237}, {\"bestTime\": 0.27872705459594727}, {\"bestTime\": 19.211618900299072}, {\"bestTime\": 0.19663000106811523}, {\"bestTime\": 0.31229591369628906}, {\"bestTime\": 31.90131187438965}, {\"bestTime\": 0.12932705879211426}, {\"bestTime\": 0.27714991569519043}, {\"bestTime\": 0.07683610916137695}, {\"bestTime\": 1.199558973312378}, {\"bestTime\": 24.192000150680542}, {\"bestTime\": 1.0028860569000244}, {\"bestTime\": 0.40753698348999023}, {\"bestTime\": 1.652742862701416}, {\"bestTime\": 0.07733798027038574}, {\"bestTime\": 8.466835021972656}, {\"bestTime\": 1.2220830917358398}, {\"bestTime\": 14.973016023635864}, {\"bestTime\": 0.21361899375915527}, {\"bestTime\": 0.672990083694458}, {\"bestTime\": 0.23044204711914062}, {\"bestTime\": 19.796541929244995}, {\"bestTime\": 14.029090881347656}, {\"bestTime\": 0.8994309902191162}, {\"bestTime\": 0.8772938251495361}, {\"bestTime\": 27.902445077896118}, {\"bestTime\": 0.17112994194030762}, {\"bestTime\": 1.1287791728973389}, {\"bestTime\": 0.261646032333374}, {\"bestTime\": 5.439364194869995}, {\"bestTime\": 2.21038818359375}, {\"bestTime\": 0.3920419216156006}, {\"bestTime\": 0.10625004768371582}, {\"bestTime\": 19.747714042663574}, {\"bestTime\": 3.6022510528564453}, {\"bestTime\": 0.23434901237487793}, {\"bestTime\": 0.20945405960083008}, {\"bestTime\": 32.58414816856384}, {\"bestTime\": 34.077905893325806}, {\"bestTime\": 0.30916595458984375}, {\"bestTime\": 0.24395394325256348}, {\"bestTime\": 0.6114351749420166}, {\"bestTime\": 3.7156810760498047}, {\"bestTime\": 0.36371493339538574}, {\"bestTime\": 0.834892988204956}, {\"bestTime\": 26.67088294029236}, {\"bestTime\": 0.4039928913116455}, {\"bestTime\": 0.38689208030700684}, {\"bestTime\": 0.33260416984558105}, {\"bestTime\": 2.475215196609497}, {\"bestTime\": 24.309386014938354}, {\"bestTime\": 0.7813220024108887}, {\"bestTime\": 0.3140261173248291}, {\"bestTime\": 6.061819076538086}, {\"bestTime\": 0.6713290214538574}, {\"bestTime\": 0.6870720386505127}, {\"bestTime\": 0.1681520938873291}, {\"bestTime\": 52.19137978553772}, {\"bestTime\": 0.48431992530822754}, {\"bestTime\": 0.6178960800170898}, {\"bestTime\": 1.7340960502624512}, {\"bestTime\": 0.7547190189361572}, {\"bestTime\": 0.23031902313232422}, {\"bestTime\": 0.34011006355285645}, {\"bestTime\": 59.97643709182739}, {\"bestTime\": 6.533144950866699}, {\"bestTime\": 0.35382604598999023}, {\"bestTime\": 0.4463798999786377}, {\"bestTime\": 3.713015079498291}, {\"bestTime\": 0.2802410125732422}, {\"bestTime\": 0.6739051342010498}, {\"bestTime\": 0.29528188705444336}, {\"bestTime\": 0.17042207717895508}, {\"bestTime\": 0.5783889293670654}, {\"bestTime\": 45.39754104614258}, {\"bestTime\": 1.1482210159301758}, {\"bestTime\": 2.8162271976470947}, {\"bestTime\": 0.1843409538269043}, {\"bestTime\": 0.5452940464019775}, {\"bestTime\": 1.034114122390747}, {\"bestTime\": 1.1726949214935303}, {\"bestTime\": 0.6325898170471191}, {\"bestTime\": 0.20120811462402344}, {\"bestTime\": 0.1893918514251709}, {\"bestTime\": 6.603796005249023}, {\"bestTime\": 1.2276110649108887}, {\"bestTime\": 0.29208898544311523}, {\"bestTime\": 1.395697832107544}, {\"bestTime\": 0.18904995918273926}, {\"bestTime\": 3.1713969707489014}, {\"bestTime\": 1.112138032913208}, {\"bestTime\": 1.166043996810913}, {\"bestTime\": 5.773498058319092}, {\"bestTime\": 3.553373098373413}, {\"bestTime\": 2.2892770767211914}, {\"bestTime\": 0.6611759662628174}, {\"bestTime\": 4.174527168273926}, {\"bestTime\": 7.536098957061768}, {\"bestTime\": 9.393126964569092}, {\"bestTime\": 46.87646508216858}, {\"bestTime\": 7.735066175460815}, {\"bestTime\": 0.39181995391845703}, {\"bestTime\": 0.9136590957641602}, {\"bestTime\": 0.6792449951171875}, {\"bestTime\": 0.5317142009735107}, {\"bestTime\": 0.36914801597595215}, {\"bestTime\": 0.04879283905029297}, {\"bestTime\": 0.22693395614624023}, {\"bestTime\": 0.35626792907714844}, {\"bestTime\": 1.255500078201294}, {\"bestTime\": 4.160983085632324}, {\"bestTime\": 7.538601875305176}, {\"bestTime\": 0.2712249755859375}, {\"bestTime\": 3.3489248752593994}, {\"bestTime\": 0.2824831008911133}, {\"bestTime\": 0.38468003273010254}, {\"bestTime\": 2.2192862033843994}, {\"bestTime\": 1.4292380809783936}, {\"bestTime\": 0.8691079616546631}, {\"bestTime\": 0.7226381301879883}, {\"bestTime\": 28.00373101234436}, {\"bestTime\": 51.901875019073486}, {\"bestTime\": 0.17029094696044922}, {\"bestTime\": 0.20524311065673828}, {\"bestTime\": 0.10581207275390625}, {\"bestTime\": 14.355379819869995}, {\"bestTime\": 0.07626795768737793}, {\"bestTime\": 0.2824568748474121}, {\"bestTime\": 19.2809898853302}, {\"bestTime\": 11.86233401298523}, {\"bestTime\": 4.898375988006592}, {\"bestTime\": 1.0733110904693604}, {\"bestTime\": 16.697760105133057}, {\"bestTime\": 14.148741006851196}, {\"bestTime\": 0.3124420642852783}, {\"bestTime\": 0.9898431301116943}, {\"bestTime\": 0.3969399929046631}, {\"bestTime\": 0.6017630100250244}, {\"bestTime\": 0.23230600357055664}, {\"bestTime\": 0.8725020885467529}, {\"bestTime\": 19.040998935699463}, {\"bestTime\": 0.07991313934326172}, {\"bestTime\": 0.4791858196258545}, {\"bestTime\": 0.6500070095062256}, {\"bestTime\": 0.1768500804901123}, {\"bestTime\": 4.229122161865234}, {\"bestTime\": 0.27977991104125977}, {\"bestTime\": 5.163159132003784}, {\"bestTime\": 1.9161760807037354}, {\"bestTime\": 30.49888801574707}, {\"bestTime\": 0.8033268451690674}, {\"bestTime\": 1.5731770992279053}, {\"bestTime\": 0.2840280532836914}, {\"bestTime\": 0.25951695442199707}, {\"bestTime\": 1.7076499462127686}, {\"bestTime\": 14.02999496459961}, {\"bestTime\": 0.1445009708404541}, {\"bestTime\": 5.627130031585693}, {\"bestTime\": 1.2884578704833984}, {\"bestTime\": 0.28284287452697754}, {\"bestTime\": 1.709280014038086}, {\"bestTime\": 0.4872889518737793}, {\"bestTime\": 7.704505920410156}, {\"bestTime\": 1.034527063369751}, {\"bestTime\": 0.14801597595214844}, {\"bestTime\": 0.13679099082946777}, {\"bestTime\": 4.466875076293945}, {\"bestTime\": 2.79494309425354}, {\"bestTime\": 1.131809949874878}, {\"bestTime\": 5.623182058334351}, {\"bestTime\": 6.016125917434692}, {\"bestTime\": 16.052624940872192}, {\"bestTime\": 58.91051506996155}, {\"bestTime\": 1.3893380165100098}, {\"bestTime\": 0.28553104400634766}, {\"bestTime\": 32.12273097038269}, {\"bestTime\": 22.650920867919922}, {\"bestTime\": 0.2892420291900635}, {\"bestTime\": 0.7020280361175537}, {\"bestTime\": 1.2814319133758545}, {\"bestTime\": 4.4829301834106445}, {\"bestTime\": 21.778104066848755}, {\"bestTime\": 9.230948209762573}, {\"bestTime\": 22.368523836135864}, {\"bestTime\": 4.067209005355835}, {\"bestTime\": 8.917842149734497}, {\"bestTime\": 0.7661399841308594}, {\"bestTime\": 2.6890618801116943}, {\"bestTime\": 1.1599390506744385}, {\"bestTime\": 9.073775053024292}, {\"bestTime\": 0.2798631191253662}, {\"bestTime\": 6.310928106307983}, {\"bestTime\": 0.3057289123535156}, {\"bestTime\": 0.4545459747314453}, {\"bestTime\": 0.6714920997619629}, {\"bestTime\": 0.17001914978027344}, {\"bestTime\": 0.2908010482788086}, {\"bestTime\": 0.17920589447021484}, {\"bestTime\": 0.3535728454589844}, {\"bestTime\": 7.446388006210327}, {\"bestTime\": 0.42714500427246094}, {\"bestTime\": 0.7280368804931641}, {\"bestTime\": 2.7459850311279297}, {\"bestTime\": 0.1522819995880127}, {\"bestTime\": 1.6434731483459473}, {\"bestTime\": 0.24798202514648438}, {\"bestTime\": 0.6632521152496338}, {\"bestTime\": 0.6727070808410645}, {\"bestTime\": 7.86116099357605}, {\"bestTime\": 1.0956530570983887}, {\"bestTime\": 39.082890033721924}, {\"bestTime\": 6.373136043548584}, {\"bestTime\": 0.33577990531921387}, {\"bestTime\": 0.35469985008239746}, {\"bestTime\": 8.292701005935669}, {\"bestTime\": 0.38754701614379883}, {\"bestTime\": 0.27483510971069336}, {\"bestTime\": 7.516945123672485}, {\"bestTime\": 21.695196866989136}, {\"bestTime\": 0.3890869617462158}, {\"bestTime\": 0.4891469478607178}, {\"bestTime\": 0.756493091583252}, {\"bestTime\": 1.2759230136871338}, {\"bestTime\": 0.3395991325378418}, {\"bestTime\": 0.22420096397399902}, {\"bestTime\": 0.14066386222839355}, {\"bestTime\": 0.14841008186340332}, {\"bestTime\": 13.311875820159912}, {\"bestTime\": 0.30926990509033203}, {\"bestTime\": 21.060467004776}, {\"bestTime\": 0.10599303245544434}, {\"bestTime\": 0.7230608463287354}, {\"bestTime\": 3.4836981296539307}, {\"bestTime\": 39.57233786582947}, {\"bestTime\": 0.23749589920043945}, {\"bestTime\": 4.773725986480713}, {\"bestTime\": 0.7406580448150635}, {\"bestTime\": 0.6702890396118164}, {\"bestTime\": 0.21186089515686035}, {\"bestTime\": 0.3178739547729492}, {\"bestTime\": 0.2436070442199707}, {\"bestTime\": 1.5245120525360107}, {\"bestTime\": 0.6012899875640869}, {\"bestTime\": 0.27034616470336914}, {\"bestTime\": 1.6135530471801758}, {\"bestTime\": 8.46350908279419}, {\"bestTime\": 0.38410305976867676}, {\"bestTime\": 0.5497071743011475}, {\"bestTime\": 0.06285905838012695}, {\"bestTime\": 0.5146429538726807}, {\"bestTime\": 1.14506196975708}, {\"bestTime\": 22.48853898048401}, {\"bestTime\": 19.12547492980957}, {\"bestTime\": 13.428091049194336}, {\"bestTime\": 0.19784283638000488}, {\"bestTime\": 19.34100580215454}, {\"bestTime\": 0.04725289344787598}, {\"bestTime\": 11.603217840194702}, {\"bestTime\": 2.475766181945801}, {\"bestTime\": 0.08184099197387695}, {\"bestTime\": 1.0351519584655762}, {\"bestTime\": 1.2584280967712402}, {\"bestTime\": 0.17201709747314453}, {\"bestTime\": 25.66047692298889}, {\"bestTime\": 8.892453908920288}, {\"bestTime\": 0.5981888771057129}, {\"bestTime\": 0.3428230285644531}, {\"bestTime\": 0.8854539394378662}, {\"bestTime\": 1.396333932876587}, {\"bestTime\": 2.8821170330047607}, {\"bestTime\": 1.4101629257202148}, {\"bestTime\": 0.41468381881713867}, {\"bestTime\": 0.5567221641540527}, {\"bestTime\": 55.94078707695007}, {\"bestTime\": 0.2321779727935791}, {\"bestTime\": 0.055280208587646484}, {\"bestTime\": 0.25745487213134766}, {\"bestTime\": 0.3789370059967041}, {\"bestTime\": 38.341922998428345}, {\"bestTime\": 6.780334949493408}, {\"bestTime\": 0.5489239692687988}, {\"bestTime\": 0.7500269412994385}, {\"bestTime\": 0.47133493423461914}, {\"bestTime\": 0.22772216796875}, {\"bestTime\": 0.27255892753601074}, {\"bestTime\": 1.444586992263794}, {\"bestTime\": 0.33325695991516113}, {\"bestTime\": 0.17743611335754395}, {\"bestTime\": 0.7019290924072266}, {\"bestTime\": 55.62450313568115}, {\"bestTime\": 0.26288914680480957}, {\"bestTime\": 0.6132028102874756}, {\"bestTime\": 0.6597249507904053}, {\"bestTime\": 0.21813511848449707}, {\"bestTime\": 0.6945319175720215}, {\"bestTime\": 0.047569990158081055}, {\"bestTime\": 3.130316972732544}, {\"bestTime\": 0.30632805824279785}, {\"bestTime\": 0.35034990310668945}, {\"bestTime\": 8.137059926986694}, {\"bestTime\": 0.4557199478149414}, {\"bestTime\": 0.41247105598449707}, {\"bestTime\": 0.18505311012268066}, {\"bestTime\": 0.12865710258483887}, {\"bestTime\": 0.12156105041503906}, {\"bestTime\": 0.6853411197662354}, {\"bestTime\": 0.27853894233703613}, {\"bestTime\": 0.3749520778656006}, {\"bestTime\": 0.05428481101989746}, {\"bestTime\": 3.5063021183013916}, {\"bestTime\": 3.584009885787964}, {\"bestTime\": 0.7267460823059082}, {\"bestTime\": 0.7333040237426758}, {\"bestTime\": 0.14950013160705566}, {\"bestTime\": 17.129849910736084}, {\"bestTime\": 1.3494460582733154}, {\"bestTime\": 0.21174287796020508}, {\"bestTime\": 27.93280601501465}, {\"bestTime\": 0.28077101707458496}, {\"bestTime\": 5.116379022598267}, {\"bestTime\": 2.8116118907928467}, {\"bestTime\": 1.5148630142211914}, {\"bestTime\": 12.06892704963684}, {\"bestTime\": 16.517170906066895}, {\"bestTime\": 0.5081758499145508}, {\"bestTime\": 0.5265581607818604}, {\"bestTime\": 0.1721808910369873}, {\"bestTime\": 59.39471697807312}, {\"bestTime\": 0.1376650333404541}, {\"bestTime\": 0.14955902099609375}, {\"bestTime\": 1.014868974685669}, {\"bestTime\": 0.20851588249206543}, {\"bestTime\": 0.16348481178283691}, {\"bestTime\": 3.338027000427246}, {\"bestTime\": 39.387129068374634}, {\"bestTime\": 1.4685330390930176}, {\"bestTime\": 0.3613910675048828}, {\"bestTime\": 7.451321125030518}, {\"bestTime\": 2.1694979667663574}, {\"bestTime\": 0.39176011085510254}, {\"bestTime\": 0.4004511833190918}, {\"bestTime\": 0.6672840118408203}, {\"bestTime\": 0.23568201065063477}, {\"bestTime\": 8.247360944747925}, {\"bestTime\": 48.80650281906128}, {\"bestTime\": 0.15060114860534668}, {\"bestTime\": 28.553164958953857}, {\"bestTime\": 2.4660580158233643}, {\"bestTime\": 1.1747348308563232}, {\"bestTime\": 0.6195929050445557}, {\"bestTime\": 0.7328541278839111}, {\"bestTime\": 5.262260913848877}, {\"bestTime\": 0.09731698036193848}, {\"bestTime\": 11.106200933456421}, {\"bestTime\": 19.603159189224243}, {\"bestTime\": 36.56371593475342}, {\"bestTime\": 2.5616278648376465}, {\"bestTime\": 8.412523984909058}, {\"bestTime\": 3.5649831295013428}, {\"bestTime\": 0.1367499828338623}, {\"bestTime\": 8.945976972579956}, {\"bestTime\": 55.86505699157715}, {\"bestTime\": 2.5949289798736572}, {\"bestTime\": 38.68822193145752}, {\"bestTime\": 0.3069620132446289}, {\"bestTime\": 18.68319296836853}, {\"bestTime\": 0.10864901542663574}, {\"bestTime\": 1.1485319137573242}, {\"bestTime\": 0.4612901210784912}, {\"bestTime\": 3.0757579803466797}, {\"bestTime\": 33.10364103317261}, {\"bestTime\": 0.364163875579834}, {\"bestTime\": 29.915063858032227}, {\"bestTime\": 14.868129014968872}, {\"bestTime\": 1.824882984161377}, {\"bestTime\": 1.1596369743347168}, {\"bestTime\": 27.95071291923523}, {\"bestTime\": 3.055490016937256}, {\"bestTime\": 0.3265559673309326}, {\"bestTime\": 0.8924829959869385}, {\"bestTime\": 0.7688050270080566}, {\"bestTime\": 0.37200403213500977}, {\"bestTime\": 0.8735148906707764}, {\"bestTime\": 0.1986861228942871}, {\"bestTime\": 0.19034910202026367}, {\"bestTime\": 0.14179015159606934}, {\"bestTime\": 34.56400799751282}, {\"bestTime\": 0.5275280475616455}, {\"bestTime\": 0.7309198379516602}, {\"bestTime\": 0.5378398895263672}, {\"bestTime\": 0.07982397079467773}, {\"bestTime\": 3.193047046661377}, {\"bestTime\": 0.25786900520324707}, {\"bestTime\": 0.06195402145385742}, {\"bestTime\": 10.301476001739502}, {\"bestTime\": 0.2510561943054199}, {\"bestTime\": 7.046886920928955}, {\"bestTime\": 0.3402588367462158}, {\"bestTime\": 7.627403020858765}, {\"bestTime\": 2.72979998588562}, {\"bestTime\": 0.5743598937988281}, {\"bestTime\": 2.4383459091186523}, {\"bestTime\": 2.1846702098846436}, {\"bestTime\": 0.10095596313476562}, {\"bestTime\": 55.62467694282532}, {\"bestTime\": 0.2995879650115967}, {\"bestTime\": 0.2039508819580078}, {\"bestTime\": 24.048419952392578}, {\"bestTime\": 0.1617600917816162}, {\"bestTime\": 0.14276409149169922}, {\"bestTime\": 0.5075647830963135}, {\"bestTime\": 20.587197065353394}, {\"bestTime\": 2.5753581523895264}, {\"bestTime\": 1.6431798934936523}, {\"bestTime\": 1.0340337753295898}, {\"bestTime\": 4.6906960010528564}, {\"bestTime\": 3.724224090576172}, {\"bestTime\": 0.1480398178100586}, {\"bestTime\": 0.09073495864868164}, {\"bestTime\": 20.07372808456421}, {\"bestTime\": 5.326157093048096}, {\"bestTime\": 7.749764919281006}, {\"bestTime\": 0.26706385612487793}, {\"bestTime\": 0.35417795181274414}, {\"bestTime\": 0.6657588481903076}, {\"bestTime\": 0.322145938873291}, {\"bestTime\": 1.1913509368896484}, {\"bestTime\": 1.1759748458862305}, {\"bestTime\": 1.1061668395996094}, {\"bestTime\": 33.268845081329346}, {\"bestTime\": 2.6544058322906494}, {\"bestTime\": 0.6712539196014404}, {\"bestTime\": 0.15550899505615234}, {\"bestTime\": 11.813135147094727}, {\"bestTime\": 0.11170196533203125}, {\"bestTime\": 18.170676946640015}, {\"bestTime\": 0.8399448394775391}, {\"bestTime\": 0.23994708061218262}, {\"bestTime\": 0.48798203468322754}, {\"bestTime\": 0.6082921028137207}, {\"bestTime\": 5.102324962615967}, {\"bestTime\": 3.4524412155151367}, {\"bestTime\": 0.47137999534606934}, {\"bestTime\": 2.93072509765625}, {\"bestTime\": 2.6001508235931396}, {\"bestTime\": 0.2797660827636719}, {\"bestTime\": 14.060163974761963}, {\"bestTime\": 0.6166491508483887}, {\"bestTime\": 0.9344789981842041}, {\"bestTime\": 40.93161702156067}, {\"bestTime\": 0.38367509841918945}, {\"bestTime\": 0.19489598274230957}, {\"bestTime\": 1.3585920333862305}, {\"bestTime\": 16.538471937179565}, {\"bestTime\": 54.300787925720215}, {\"bestTime\": 0.24905014038085938}, {\"bestTime\": 0.3542211055755615}, {\"bestTime\": 0.2696518898010254}, {\"bestTime\": 11.622956991195679}, {\"bestTime\": 7.40493106842041}, {\"bestTime\": 0.21541094779968262}, {\"bestTime\": 0.45639705657958984}, {\"bestTime\": 2.829892873764038}, {\"bestTime\": 0.23034214973449707}, {\"bestTime\": 12.491835117340088}, {\"bestTime\": 0.21364593505859375}, {\"bestTime\": 0.22858095169067383}, {\"bestTime\": 0.9184188842773438}, {\"bestTime\": 5.099622011184692}, {\"bestTime\": 0.6961779594421387}, {\"bestTime\": 9.316566944122314}, {\"bestTime\": 0.3800978660583496}, {\"bestTime\": 0.18459606170654297}, {\"bestTime\": 1.3745169639587402}, {\"bestTime\": 0.8279998302459717}, {\"bestTime\": 0.9722390174865723}, {\"bestTime\": 0.13961005210876465}, {\"bestTime\": 2.232611894607544}, {\"bestTime\": 0.7406299114227295}, {\"bestTime\": 4.266009092330933}, {\"bestTime\": 4.492660999298096}, {\"bestTime\": 1.0103709697723389}, {\"bestTime\": 0.27729296684265137}, {\"bestTime\": 1.1584999561309814}, {\"bestTime\": 40.81335401535034}, {\"bestTime\": 0.14516997337341309}, {\"bestTime\": 0.5331168174743652}, {\"bestTime\": 1.5327608585357666}, {\"bestTime\": 4.638046979904175}, {\"bestTime\": 5.118753910064697}, {\"bestTime\": 0.2603271007537842}, {\"bestTime\": 4.245763063430786}, {\"bestTime\": 0.22044610977172852}, {\"bestTime\": 0.18602991104125977}, {\"bestTime\": 0.18381500244140625}, {\"bestTime\": 0.784919023513794}, {\"bestTime\": 31.884207010269165}, {\"bestTime\": 0.1842360496520996}, {\"bestTime\": 0.29798007011413574}, {\"bestTime\": 0.2295548915863037}, {\"bestTime\": 0.37967991828918457}, {\"bestTime\": 4.376006841659546}, {\"bestTime\": 8.20170521736145}, {\"bestTime\": 0.27382707595825195}, {\"bestTime\": 35.04143285751343}, {\"bestTime\": 0.4011378288269043}, {\"bestTime\": 3.6624867916107178}, {\"bestTime\": 0.19750499725341797}, {\"bestTime\": 0.13931679725646973}, {\"bestTime\": 2.0407490730285645}, {\"bestTime\": 0.15233087539672852}, {\"bestTime\": 0.6768097877502441}, {\"bestTime\": 0.15026521682739258}, {\"bestTime\": 4.7169270515441895}, {\"bestTime\": 0.48653292655944824}, {\"bestTime\": 0.06391596794128418}, {\"bestTime\": 8.42612910270691}, {\"bestTime\": 1.5571238994598389}, {\"bestTime\": 0.35139012336730957}, {\"bestTime\": 30.595942974090576}, {\"bestTime\": 0.1913900375366211}, {\"bestTime\": 0.47208690643310547}, {\"bestTime\": 0.15941596031188965}, {\"bestTime\": 3.9743850231170654}, {\"bestTime\": 15.830312967300415}, {\"bestTime\": 0.0639960765838623}, {\"bestTime\": 6.897671222686768}, {\"bestTime\": 0.8220679759979248}, {\"bestTime\": 0.31078290939331055}, {\"bestTime\": 7.225872039794922}, {\"bestTime\": 0.18155217170715332}, {\"bestTime\": 1.8345918655395508}, {\"bestTime\": 30.735801935195923}, {\"bestTime\": 0.19133400917053223}, {\"bestTime\": 0.18326616287231445}, {\"bestTime\": 0.22769808769226074}, {\"bestTime\": 0.3503270149230957}, {\"bestTime\": 0.1644608974456787}, {\"bestTime\": 0.3152608871459961}, {\"bestTime\": 1.9088618755340576}, {\"bestTime\": 18.318902015686035}, {\"bestTime\": 41.43870282173157}, {\"bestTime\": 37.32197093963623}, {\"bestTime\": 0.8742680549621582}, {\"bestTime\": 15.83069896697998}, {\"bestTime\": 6.607964992523193}, {\"bestTime\": 0.37607598304748535}, {\"bestTime\": 1.2792460918426514}, {\"bestTime\": 0.2808220386505127}, {\"bestTime\": 12.911226034164429}, {\"bestTime\": 0.7337720394134521}, {\"bestTime\": 2.8485779762268066}, {\"bestTime\": 1.9742541313171387}, {\"bestTime\": 0.2801499366760254}, {\"bestTime\": 2.1887879371643066}, {\"bestTime\": 0.07971000671386719}, {\"bestTime\": 1.9590790271759033}, {\"bestTime\": 19.51720094680786}, {\"bestTime\": 0.17405390739440918}, {\"bestTime\": 4.153970956802368}, {\"bestTime\": 26.7216579914093}, {\"bestTime\": 0.9500868320465088}, {\"bestTime\": 3.3519351482391357}, {\"bestTime\": 7.709106922149658}, {\"bestTime\": 0.3443281650543213}, {\"bestTime\": 0.1549990177154541}, {\"bestTime\": 10.652570962905884}, {\"bestTime\": 0.7640299797058105}, {\"bestTime\": 0.925678014755249}, {\"bestTime\": 58.105802059173584}, {\"bestTime\": 0.31420087814331055}, {\"bestTime\": 18.491672039031982}, {\"bestTime\": 0.2792050838470459}, {\"bestTime\": 0.5094180107116699}, {\"bestTime\": 0.28667497634887695}, {\"bestTime\": 0.25534486770629883}, {\"bestTime\": 1.1339900493621826}, {\"bestTime\": 1.9349169731140137}, {\"bestTime\": 19.360979795455933}, {\"bestTime\": 20.190731048583984}, {\"bestTime\": 0.24085378646850586}, {\"bestTime\": 0.12046694755554199}, {\"bestTime\": 3.070122003555298}, {\"bestTime\": 8.475353002548218}, {\"bestTime\": 0.5810279846191406}, {\"bestTime\": 5.678542852401733}, {\"bestTime\": 0.9441940784454346}, {\"bestTime\": 2.6216721534729004}, {\"bestTime\": 37.89282512664795}, {\"bestTime\": 0.16545605659484863}, {\"bestTime\": 8.476364850997925}, {\"bestTime\": 10.54639720916748}, {\"bestTime\": 29.224479913711548}, {\"bestTime\": 0.13067388534545898}, {\"bestTime\": 0.21265602111816406}, {\"bestTime\": 6.889617919921875}, {\"bestTime\": 0.2238759994506836}, {\"bestTime\": 0.6321101188659668}, {\"bestTime\": 12.436858177185059}, {\"bestTime\": 4.570631980895996}, {\"bestTime\": 0.5954060554504395}, {\"bestTime\": 0.1387629508972168}, {\"bestTime\": 0.15487003326416016}, {\"bestTime\": 0.6061160564422607}, {\"bestTime\": 5.389098882675171}, {\"bestTime\": 2.3415729999542236}, {\"bestTime\": 0.3907351493835449}, {\"bestTime\": 0.5121200084686279}, {\"bestTime\": 4.596999168395996}, {\"bestTime\": 0.12887096405029297}, {\"bestTime\": 0.6651639938354492}, {\"bestTime\": 0.5438179969787598}, {\"bestTime\": 37.47347617149353}, {\"bestTime\": 0.24028992652893066}, {\"bestTime\": 7.3389809131622314}, {\"bestTime\": 0.26822900772094727}, {\"bestTime\": 5.934784889221191}, {\"bestTime\": 0.20412492752075195}, {\"bestTime\": 11.311140060424805}, {\"bestTime\": 0.12094497680664062}, {\"bestTime\": 17.052243947982788}, {\"bestTime\": 0.14876794815063477}, {\"bestTime\": 2.7139458656311035}, {\"bestTime\": 1.8489060401916504}, {\"bestTime\": 0.3578481674194336}, {\"bestTime\": 0.47687506675720215}, {\"bestTime\": 20.964636087417603}, {\"bestTime\": 0.32225990295410156}, {\"bestTime\": 2.040472984313965}, {\"bestTime\": 0.42698097229003906}, {\"bestTime\": 0.6623070240020752}, {\"bestTime\": 2.8762168884277344}, {\"bestTime\": 27.368757009506226}, {\"bestTime\": 0.19426512718200684}, {\"bestTime\": 3.8622360229492188}, {\"bestTime\": 7.005014896392822}, {\"bestTime\": 0.29972195625305176}, {\"bestTime\": 0.3086819648742676}, {\"bestTime\": 0.27349090576171875}, {\"bestTime\": 6.254355192184448}, {\"bestTime\": 0.12753605842590332}, {\"bestTime\": 3.849151134490967}, {\"bestTime\": 8.220386028289795}, {\"bestTime\": 0.21944403648376465}, {\"bestTime\": 0.607551097869873}, {\"bestTime\": 0.17284798622131348}, {\"bestTime\": 0.5354688167572021}, {\"bestTime\": 0.2048649787902832}, {\"bestTime\": 0.35950493812561035}, {\"bestTime\": 0.1064920425415039}, {\"bestTime\": 51.58765387535095}, {\"bestTime\": 0.4760899543762207}, {\"bestTime\": 0.2556419372558594}, {\"bestTime\": 0.4999198913574219}, {\"bestTime\": 0.28183603286743164}, {\"bestTime\": 8.902649879455566}, {\"bestTime\": 4.643218994140625}, {\"bestTime\": 0.35223817825317383}, {\"bestTime\": 0.7619228363037109}, {\"bestTime\": 5.501746892929077}, {\"bestTime\": 0.5121440887451172}, {\"bestTime\": 4.610738039016724}, {\"bestTime\": 4.906084060668945}, {\"bestTime\": 2.875910997390747}, {\"bestTime\": 0.21067094802856445}, {\"bestTime\": 0.8352921009063721}, {\"bestTime\": 5.116241216659546}, {\"bestTime\": 40.88472104072571}, {\"bestTime\": 52.57136607170105}, {\"bestTime\": 0.11081695556640625}, {\"bestTime\": 47.05527091026306}, {\"bestTime\": 9.305830955505371}, {\"bestTime\": 10.152199029922485}, {\"bestTime\": 0.38665008544921875}, {\"bestTime\": 8.554124116897583}, {\"bestTime\": 5.904521942138672}, {\"bestTime\": 31.629294872283936}, {\"bestTime\": 0.7216489315032959}, {\"bestTime\": 4.792950868606567}, {\"bestTime\": 2.2872588634490967}, {\"bestTime\": 29.862468957901}, {\"bestTime\": 3.391580104827881}, {\"bestTime\": 0.6799490451812744}, {\"bestTime\": 15.339087009429932}, {\"bestTime\": 3.6125729084014893}, {\"bestTime\": 1.5236451625823975}, {\"bestTime\": 5.825953960418701}, {\"bestTime\": 11.784716129302979}, {\"bestTime\": 1.2203238010406494}, {\"bestTime\": 0.6762049198150635}, {\"bestTime\": 0.5916850566864014}, {\"bestTime\": 0.18495392799377441}, {\"bestTime\": 0.9573690891265869}, {\"bestTime\": 6.4576661586761475}, {\"bestTime\": 22.6283860206604}, {\"bestTime\": 0.4216339588165283}, {\"bestTime\": 0.17835402488708496}, {\"bestTime\": 6.3349449634552}, {\"bestTime\": 4.440181016921997}, {\"bestTime\": 0.4628140926361084}, {\"bestTime\": 0.4147911071777344}, {\"bestTime\": 0.7042849063873291}, {\"bestTime\": 8.00879192352295}, {\"bestTime\": 0.04773211479187012}, {\"bestTime\": 0.15018916130065918}, {\"bestTime\": 47.43273591995239}, {\"bestTime\": 0.12144589424133301}, {\"bestTime\": 9.288218021392822}, {\"bestTime\": 3.5141351222991943}, {\"bestTime\": 0.15187597274780273}, {\"bestTime\": 45.000089168548584}, {\"bestTime\": 10.991911172866821}, {\"bestTime\": 0.26935887336730957}, {\"bestTime\": 6.832905054092407}, {\"bestTime\": 0.2609689235687256}, {\"bestTime\": 2.88108491897583}, {\"bestTime\": 0.3720970153808594}, {\"bestTime\": 0.9480671882629395}, {\"bestTime\": 0.47355198860168457}, {\"bestTime\": 21.96009087562561}, {\"bestTime\": 42.393571853637695}, {\"bestTime\": 43.38692593574524}, {\"bestTime\": 0.32257890701293945}, {\"bestTime\": 0.6144728660583496}, {\"bestTime\": 2.2130510807037354}, {\"bestTime\": 0.38901495933532715}, {\"bestTime\": 0.7752819061279297}, {\"bestTime\": 1.1214351654052734}, {\"bestTime\": 0.5257830619812012}, {\"bestTime\": 1.9274101257324219}, {\"bestTime\": 0.18253087997436523}, {\"bestTime\": 5.361304998397827}, {\"bestTime\": 0.13839483261108398}, {\"bestTime\": 0.1562490463256836}, {\"bestTime\": 0.6688728332519531}, {\"bestTime\": 1.4793980121612549}, {\"bestTime\": 0.5560951232910156}, {\"bestTime\": 7.68505597114563}, {\"bestTime\": 0.9822239875793457}, {\"bestTime\": 7.207576036453247}, {\"bestTime\": 0.8186039924621582}, {\"bestTime\": 2.8162059783935547}, {\"bestTime\": 0.09563899040222168}, {\"bestTime\": 2.1636409759521484}, {\"bestTime\": 0.4246351718902588}, {\"bestTime\": 0.1295909881591797}, {\"bestTime\": 13.3332200050354}, {\"bestTime\": 16.746830940246582}, {\"bestTime\": 0.8899328708648682}, {\"bestTime\": 0.24777507781982422}, {\"bestTime\": 3.0274670124053955}, {\"bestTime\": 8.5030038356781}, {\"bestTime\": 0.5846621990203857}, {\"bestTime\": 0.2836639881134033}, {\"bestTime\": 2.0099759101867676}, {\"bestTime\": 0.28593993186950684}, {\"bestTime\": 0.23345303535461426}, {\"bestTime\": 0.6729888916015625}, {\"bestTime\": 8.036900997161865}, {\"bestTime\": 0.2195110321044922}, {\"bestTime\": 7.299456834793091}, {\"bestTime\": 0.11093497276306152}, {\"bestTime\": 18.71570897102356}, {\"bestTime\": 37.19109296798706}, {\"bestTime\": 1.0253870487213135}, {\"bestTime\": 8.999649047851562}, {\"bestTime\": 0.1335608959197998}, {\"bestTime\": 3.9315128326416016}, {\"bestTime\": 0.6197659969329834}, {\"bestTime\": 0.23370695114135742}, {\"bestTime\": 7.722185134887695}, {\"bestTime\": 0.2711930274963379}, {\"bestTime\": 3.296527862548828}, {\"bestTime\": 4.268288850784302}, {\"bestTime\": 43.04534077644348}, {\"bestTime\": 1.0868251323699951}, {\"bestTime\": 2.2998440265655518}, {\"bestTime\": 13.865705013275146}, {\"bestTime\": 22.152390956878662}, {\"bestTime\": 1.2395708560943604}, {\"bestTime\": 16.59526014328003}, {\"bestTime\": 0.43250203132629395}, {\"bestTime\": 0.3090388774871826}, {\"bestTime\": 14.289078950881958}, {\"bestTime\": 3.4500880241394043}, {\"bestTime\": 0.2780640125274658}, {\"bestTime\": 0.6836960315704346}, {\"bestTime\": 0.07957005500793457}, {\"bestTime\": 0.15401220321655273}, {\"bestTime\": 39.402859926223755}, {\"bestTime\": 0.32970404624938965}, {\"bestTime\": 0.18243193626403809}, {\"bestTime\": 2.947305917739868}, {\"bestTime\": 2.7671430110931396}, {\"bestTime\": 0.6155080795288086}, {\"bestTime\": 0.20052099227905273}, {\"bestTime\": 0.44459009170532227}, {\"bestTime\": 0.7074182033538818}, {\"bestTime\": 0.0483248233795166}, {\"bestTime\": 0.25388216972351074}, {\"bestTime\": 0.048564910888671875}, {\"bestTime\": 26.569963932037354}, {\"bestTime\": 1.2685589790344238}, {\"bestTime\": 0.17943620681762695}, {\"bestTime\": 30.246731996536255}, {\"bestTime\": 32.74822807312012}, {\"bestTime\": 2.2642900943756104}, {\"bestTime\": 29.832003116607666}, {\"bestTime\": 0.6867191791534424}, {\"bestTime\": 5.269129991531372}, {\"bestTime\": 4.750046968460083}, {\"bestTime\": 13.95337700843811}, {\"bestTime\": 0.24609994888305664}, {\"bestTime\": 41.061991930007935}, {\"bestTime\": 0.7231719493865967}, {\"bestTime\": 2.034799098968506}, {\"bestTime\": 0.5816800594329834}, {\"bestTime\": 0.8225491046905518}, {\"bestTime\": 0.6682929992675781}, {\"bestTime\": 0.7256169319152832}, {\"bestTime\": 10.085047960281372}, {\"bestTime\": 2.1616690158843994}, {\"bestTime\": 13.286805152893066}, {\"bestTime\": 1.9803800582885742}, {\"bestTime\": 0.15625691413879395}, {\"bestTime\": 6.453435897827148}, {\"bestTime\": 0.7620079517364502}, {\"bestTime\": 3.4369800090789795}, {\"bestTime\": 3.077465057373047}, {\"bestTime\": 0.211104154586792}, {\"bestTime\": 12.781291007995605}, {\"bestTime\": 0.6203551292419434}, {\"bestTime\": 0.8866040706634521}, {\"bestTime\": 0.5503988265991211}, {\"bestTime\": 1.0978550910949707}, {\"bestTime\": 0.349714994430542}, {\"bestTime\": 33.73843693733215}, {\"bestTime\": 2.784514904022217}, {\"bestTime\": 3.7281100749969482}, {\"bestTime\": 0.8584611415863037}, {\"bestTime\": 1.3274619579315186}, {\"bestTime\": 0.27404093742370605}, {\"bestTime\": 16.49781584739685}, {\"bestTime\": 7.717248916625977}, {\"bestTime\": 29.39767098426819}, {\"bestTime\": 0.11497807502746582}, {\"bestTime\": 0.28485584259033203}, {\"bestTime\": 0.17403697967529297}, {\"bestTime\": 2.947129964828491}, {\"bestTime\": 3.6586458683013916}, {\"bestTime\": 0.07074809074401855}, {\"bestTime\": 2.286623001098633}, {\"bestTime\": 1.5293750762939453}, {\"bestTime\": 0.17472505569458008}, {\"bestTime\": 0.5382130146026611}, {\"bestTime\": 1.456963062286377}, {\"bestTime\": 12.499539852142334}, {\"bestTime\": 0.21162199974060059}, {\"bestTime\": 0.2305769920349121}, {\"bestTime\": 0.3183431625366211}, {\"bestTime\": 0.47476887702941895}, {\"bestTime\": 0.38043713569641113}, {\"bestTime\": 0.5621969699859619}, {\"bestTime\": 47.68535494804382}, {\"bestTime\": 1.0229392051696777}, {\"bestTime\": 1.6069788932800293}, {\"bestTime\": 15.063451051712036}, {\"bestTime\": 0.7267210483551025}, {\"bestTime\": 1.97216796875}, {\"bestTime\": 42.58662700653076}, {\"bestTime\": 0.08112311363220215}, {\"bestTime\": 2.6711618900299072}, {\"bestTime\": 0.6377310752868652}, {\"bestTime\": 1.1806409358978271}, {\"bestTime\": 3.032778024673462}, {\"bestTime\": 11.730121850967407}, {\"bestTime\": 0.13663506507873535}, {\"bestTime\": 26.47664713859558}, {\"bestTime\": 0.6037631034851074}, {\"bestTime\": 0.38748717308044434}, {\"bestTime\": 0.19742798805236816}, {\"bestTime\": 13.924084901809692}, {\"bestTime\": 9.867548942565918}, {\"bestTime\": 3.5456130504608154}, {\"bestTime\": 2.2937159538269043}, {\"bestTime\": 0.9306068420410156}, {\"bestTime\": 21.698460817337036}, {\"bestTime\": 37.864479780197144}, {\"bestTime\": 0.2733800411224365}, {\"bestTime\": 32.977181911468506}, {\"bestTime\": 0.48560404777526855}, {\"bestTime\": 0.6768679618835449}, {\"bestTime\": 6.0495710372924805}, {\"bestTime\": 2.8644959926605225}, {\"bestTime\": 0.43141722679138184}, {\"bestTime\": 0.13124895095825195}, {\"bestTime\": 0.13060688972473145}, {\"bestTime\": 0.8363521099090576}, {\"bestTime\": 42.20171809196472}, {\"bestTime\": 0.24881219863891602}, {\"bestTime\": 0.8272981643676758}, {\"bestTime\": 0.36087799072265625}, {\"bestTime\": 1.2749519348144531}, {\"bestTime\": 0.24289393424987793}, {\"bestTime\": 0.6681830883026123}, {\"bestTime\": 0.15508198738098145}, {\"bestTime\": 6.926297903060913}, {\"bestTime\": 0.1500110626220703}, {\"bestTime\": 7.7306129932403564}, {\"bestTime\": 23.94597315788269}, {\"bestTime\": 10.99246096611023}, {\"bestTime\": 2.5439069271087646}, {\"bestTime\": 1.0244090557098389}, {\"bestTime\": 0.32595014572143555}, {\"bestTime\": 4.002220153808594}, {\"bestTime\": 0.6658210754394531}, {\"bestTime\": 20.048313856124878}, {\"bestTime\": 2.5993359088897705}, {\"bestTime\": 8.758874893188477}, {\"bestTime\": 0.23414397239685059}, {\"bestTime\": 27.282903909683228}, {\"bestTime\": 4.4802820682525635}, {\"bestTime\": 7.190912961959839}, {\"bestTime\": 0.4001741409301758}, {\"bestTime\": 0.4910390377044678}, {\"bestTime\": 0.6084232330322266}, {\"bestTime\": 6.285062074661255}, {\"bestTime\": 4.251919984817505}, {\"bestTime\": 0.2826709747314453}, {\"bestTime\": 1.073354959487915}, {\"bestTime\": 0.11692094802856445}, {\"bestTime\": 1.3578028678894043}, {\"bestTime\": 0.4433610439300537}, {\"bestTime\": 0.15914201736450195}, {\"bestTime\": 1.290360927581787}, {\"bestTime\": 0.1429591178894043}, {\"bestTime\": 5.002472877502441}, {\"bestTime\": 6.2422919273376465}, {\"bestTime\": 0.4953610897064209}, {\"bestTime\": 17.67297387123108}, {\"bestTime\": 3.1601080894470215}, {\"bestTime\": 0.7895059585571289}, {\"bestTime\": 11.252043962478638}, {\"bestTime\": 39.596877098083496}, {\"bestTime\": 12.5572669506073}, {\"bestTime\": 2.324244976043701}, {\"bestTime\": 21.056040048599243}, {\"bestTime\": 0.37334203720092773}, {\"bestTime\": 1.0118048191070557}, {\"bestTime\": 45.065046072006226}, {\"bestTime\": 2.9257290363311768}, {\"bestTime\": 0.32015109062194824}, {\"bestTime\": 1.1639471054077148}, {\"bestTime\": 49.066166162490845}, {\"bestTime\": 7.0358428955078125}, {\"bestTime\": 0.21707797050476074}, {\"bestTime\": 1.6720850467681885}, {\"bestTime\": 23.230862140655518}, {\"bestTime\": 1.2040648460388184}, {\"bestTime\": 0.06211495399475098}, {\"bestTime\": 3.7321949005126953}, {\"bestTime\": 0.2855849266052246}, {\"bestTime\": 11.240876913070679}, {\"bestTime\": 0.7229340076446533}, {\"bestTime\": 42.24460196495056}, {\"bestTime\": 0.15973520278930664}, {\"bestTime\": 4.081477165222168}, {\"bestTime\": 34.05584788322449}, {\"bestTime\": 24.34551501274109}, {\"bestTime\": 0.0968618392944336}, {\"bestTime\": 0.8373680114746094}, {\"bestTime\": 0.30925989151000977}, {\"bestTime\": 34.9109001159668}, {\"bestTime\": 0.1865830421447754}, {\"bestTime\": 1.4116971492767334}, {\"bestTime\": 0.3481011390686035}, {\"bestTime\": 0.2235431671142578}, {\"bestTime\": 32.90761709213257}, {\"bestTime\": 2.451058864593506}, {\"bestTime\": 32.151026010513306}, {\"bestTime\": 0.4748520851135254}, {\"bestTime\": 0.46788787841796875}, {\"bestTime\": 0.1953110694885254}, {\"bestTime\": 0.18766212463378906}, {\"bestTime\": 0.8883769512176514}, {\"bestTime\": 0.23378992080688477}, {\"bestTime\": 0.3461000919342041}, {\"bestTime\": 0.8151099681854248}, {\"bestTime\": 17.96680498123169}, {\"bestTime\": 39.3764910697937}, {\"bestTime\": 0.5443432331085205}, {\"bestTime\": 5.6508469581604}, {\"bestTime\": 0.1377577781677246}, {\"bestTime\": 0.12586593627929688}, {\"bestTime\": 0.19208002090454102}, {\"bestTime\": 1.905229091644287}, {\"bestTime\": 0.40407609939575195}, {\"bestTime\": 0.32387685775756836}, {\"bestTime\": 0.13929510116577148}, {\"bestTime\": 1.3021159172058105}, {\"bestTime\": 8.243356943130493}, {\"bestTime\": 2.575529098510742}, {\"bestTime\": 41.21093511581421}, {\"bestTime\": 0.1484980583190918}, {\"bestTime\": 8.88729190826416}, {\"bestTime\": 0.241225004196167}, {\"bestTime\": 0.26256299018859863}, {\"bestTime\": 3.8368310928344727}, {\"bestTime\": 0.22440314292907715}, {\"bestTime\": 21.01169514656067}, {\"bestTime\": 0.14661788940429688}, {\"bestTime\": 1.0190961360931396}, {\"bestTime\": 1.9879281520843506}, {\"bestTime\": 0.7830939292907715}, {\"bestTime\": 0.054660797119140625}, {\"bestTime\": 0.29587483406066895}, {\"bestTime\": 0.9489548206329346}, {\"bestTime\": 12.239233016967773}, {\"bestTime\": 42.12773895263672}, {\"bestTime\": 0.1832289695739746}, {\"bestTime\": 1.47586989402771}, {\"bestTime\": 0.9242608547210693}, {\"bestTime\": 1.8653957843780518}, {\"bestTime\": 0.3367428779602051}, {\"bestTime\": 38.35794997215271}, {\"bestTime\": 0.40296387672424316}, {\"bestTime\": 0.48358702659606934}, {\"bestTime\": 0.25629496574401855}, {\"bestTime\": 7.705322027206421}, {\"bestTime\": 0.39335203170776367}, {\"bestTime\": 8.919718027114868}, {\"bestTime\": 13.618505954742432}, {\"bestTime\": 7.370332956314087}, {\"bestTime\": 0.3353569507598877}, {\"bestTime\": 0.3086400032043457}, {\"bestTime\": 11.022181034088135}, {\"bestTime\": 2.4371750354766846}, {\"bestTime\": 18.5316059589386}, {\"bestTime\": 1.0373380184173584}, {\"bestTime\": 6.019515037536621}, {\"bestTime\": 0.23047304153442383}, {\"bestTime\": 0.3174159526824951}, {\"bestTime\": 1.63919997215271}, {\"bestTime\": 0.4005930423736572}, {\"bestTime\": 0.3886091709136963}, {\"bestTime\": 3.579023838043213}, {\"bestTime\": 0.6069259643554688}, {\"bestTime\": 0.14507794380187988}, {\"bestTime\": 0.8326611518859863}, {\"bestTime\": 1.6127521991729736}, {\"bestTime\": 0.7355420589447021}, {\"bestTime\": 0.6741220951080322}, {\"bestTime\": 0.20933318138122559}, {\"bestTime\": 5.666887998580933}, {\"bestTime\": 0.12195897102355957}, {\"bestTime\": 0.4984860420227051}, {\"bestTime\": 0.14790105819702148}, {\"bestTime\": 31.399190187454224}, {\"bestTime\": 0.30669713020324707}, {\"bestTime\": 0.6049668788909912}, {\"bestTime\": 2.718776226043701}, {\"bestTime\": 3.859126091003418}, {\"bestTime\": 0.6855089664459229}, {\"bestTime\": 5.196091890335083}, {\"bestTime\": 0.9327561855316162}, {\"bestTime\": 11.466693878173828}, {\"bestTime\": 5.8763580322265625}, {\"bestTime\": 4.558057069778442}, {\"bestTime\": 0.19122695922851562}, {\"bestTime\": 4.452160835266113}, {\"bestTime\": 5.8489789962768555}, {\"bestTime\": 14.9682137966156}, {\"bestTime\": 51.880561113357544}, {\"bestTime\": 0.28151702880859375}, {\"bestTime\": 0.9687099456787109}, {\"bestTime\": 0.06193685531616211}, {\"bestTime\": 2.395015001296997}, {\"bestTime\": 0.2496500015258789}, {\"bestTime\": 0.20531702041625977}, {\"bestTime\": 0.13509893417358398}, {\"bestTime\": 29.957214832305908}, {\"bestTime\": 0.3521420955657959}, {\"bestTime\": 0.5464208126068115}, {\"bestTime\": 2.1142687797546387}, {\"bestTime\": 0.674767017364502}, {\"bestTime\": 0.16814899444580078}, {\"bestTime\": 1.4566540718078613}, {\"bestTime\": 0.1825239658355713}, {\"bestTime\": 38.98479604721069}, {\"bestTime\": 0.28571009635925293}, {\"bestTime\": 1.5496277809143066}, {\"bestTime\": 20.733901023864746}, {\"bestTime\": 0.14557290077209473}, {\"bestTime\": 11.362294912338257}, {\"bestTime\": 0.26127004623413086}, {\"bestTime\": 1.905745029449463}, {\"bestTime\": 2.5572080612182617}, {\"bestTime\": 26.867114067077637}, {\"bestTime\": 0.1510329246520996}, {\"bestTime\": 30.39901113510132}, {\"bestTime\": 4.853434085845947}, {\"bestTime\": 0.267071008682251}, {\"bestTime\": 1.1311187744140625}, {\"bestTime\": 40.107917070388794}, {\"bestTime\": 47.66866612434387}, {\"bestTime\": 0.8645570278167725}, {\"bestTime\": 0.13826799392700195}, {\"bestTime\": 18.375886917114258}, {\"bestTime\": 0.4811699390411377}, {\"bestTime\": 0.3699991703033447}, {\"bestTime\": 15.235799789428711}, {\"bestTime\": 5.817081928253174}, {\"bestTime\": 4.935635089874268}, {\"bestTime\": 0.18274998664855957}, {\"bestTime\": 0.4519519805908203}, {\"bestTime\": 6.22304105758667}, {\"bestTime\": 0.45000505447387695}, {\"bestTime\": 0.1376819610595703}, {\"bestTime\": 0.8615939617156982}, {\"bestTime\": 0.28082895278930664}, {\"bestTime\": 6.1313769817352295}, {\"bestTime\": 0.4905059337615967}, {\"bestTime\": 3.9714250564575195}, {\"bestTime\": 0.9904818534851074}, {\"bestTime\": 0.34061503410339355}, {\"bestTime\": 8.440253973007202}, {\"bestTime\": 0.17187190055847168}, {\"bestTime\": 3.45829701423645}, {\"bestTime\": 2.7720460891723633}, {\"bestTime\": 0.8537478446960449}, {\"bestTime\": 0.7243258953094482}, {\"bestTime\": 28.09014081954956}, {\"bestTime\": 0.2625401020050049}, {\"bestTime\": 1.4634850025177002}, {\"bestTime\": 0.2824900150299072}, {\"bestTime\": 1.8310821056365967}, {\"bestTime\": 2.734524965286255}, {\"bestTime\": 0.23733997344970703}, {\"bestTime\": 0.04865312576293945}, {\"bestTime\": 0.9213290214538574}, {\"bestTime\": 1.7893950939178467}, {\"bestTime\": 0.37715888023376465}, {\"bestTime\": 0.8366820812225342}, {\"bestTime\": 0.21139192581176758}, {\"bestTime\": 16.920285940170288}, {\"bestTime\": 0.3102149963378906}, {\"bestTime\": 0.47342801094055176}, {\"bestTime\": 1.6405110359191895}, {\"bestTime\": 3.6461400985717773}, {\"bestTime\": 0.19913697242736816}, {\"bestTime\": 19.23712992668152}, {\"bestTime\": 0.27759599685668945}, {\"bestTime\": 0.24055194854736328}, {\"bestTime\": 0.12178993225097656}, {\"bestTime\": 1.875892162322998}, {\"bestTime\": 0.32224607467651367}, {\"bestTime\": 1.4639911651611328}, {\"bestTime\": 1.5820269584655762}, {\"bestTime\": 27.863600969314575}, {\"bestTime\": 10.012197971343994}, {\"bestTime\": 0.4549229145050049}, {\"bestTime\": 3.8828370571136475}, {\"bestTime\": 0.7566990852355957}, {\"bestTime\": 29.80381488800049}, {\"bestTime\": 26.539826154708862}, {\"bestTime\": 0.8987479209899902}, {\"bestTime\": 42.84703302383423}, {\"bestTime\": 0.38286709785461426}, {\"bestTime\": 0.11245608329772949}, {\"bestTime\": 14.142510175704956}, {\"bestTime\": 6.083343982696533}, {\"bestTime\": 0.3128042221069336}, {\"bestTime\": 9.497421026229858}, {\"bestTime\": 5.739544868469238}, {\"bestTime\": 0.34612393379211426}, {\"bestTime\": 1.208385944366455}, {\"bestTime\": 9.163224935531616}, {\"bestTime\": 4.3267059326171875}, {\"bestTime\": 22.97366714477539}, {\"bestTime\": 0.259490966796875}, {\"bestTime\": 7.47790002822876}, {\"bestTime\": 0.10269904136657715}, {\"bestTime\": 28.14648413658142}, {\"bestTime\": 38.50331711769104}, {\"bestTime\": 0.5176949501037598}, {\"bestTime\": 0.5421919822692871}, {\"bestTime\": 57.677775859832764}, {\"bestTime\": 0.7360079288482666}, {\"bestTime\": 1.715378999710083}, {\"bestTime\": 0.07575201988220215}, {\"bestTime\": 0.12322807312011719}, {\"bestTime\": 38.56720995903015}, {\"bestTime\": 8.284236192703247}, {\"bestTime\": 0.6689150333404541}, {\"bestTime\": 5.820559978485107}, {\"bestTime\": 2.25849986076355}, {\"bestTime\": 0.3872368335723877}, {\"bestTime\": 0.3002321720123291}, {\"bestTime\": 26.016465187072754}, {\"bestTime\": 0.8888399600982666}, {\"bestTime\": 1.250805139541626}, {\"bestTime\": 3.862840175628662}, {\"bestTime\": 0.24189496040344238}, {\"bestTime\": 0.1468210220336914}, {\"bestTime\": 2.445042848587036}, {\"bestTime\": 0.17705392837524414}, {\"bestTime\": 45.4895601272583}, {\"bestTime\": 0.5939109325408936}, {\"bestTime\": 0.605111837387085}, {\"bestTime\": 35.82922911643982}, {\"bestTime\": 3.9114441871643066}, {\"bestTime\": 26.151819944381714}, {\"bestTime\": 0.0822000503540039}, {\"bestTime\": 2.9353420734405518}, {\"bestTime\": 0.23017597198486328}, {\"bestTime\": 15.43452501296997}, {\"bestTime\": 4.229405879974365}, {\"bestTime\": 0.1432349681854248}, {\"bestTime\": 1.1096150875091553}, {\"bestTime\": 3.2052841186523438}, {\"bestTime\": 0.05170297622680664}, {\"bestTime\": 20.914330005645752}, {\"bestTime\": 20.412441968917847}, {\"bestTime\": 50.038357973098755}, {\"bestTime\": 0.08012199401855469}, {\"bestTime\": 0.6574430465698242}, {\"bestTime\": 33.177571058273315}, {\"bestTime\": 0.42676210403442383}, {\"bestTime\": 10.856605052947998}, {\"bestTime\": 2.3885109424591064}, {\"bestTime\": 1.2135322093963623}, {\"bestTime\": 0.2990899085998535}, {\"bestTime\": 0.15210294723510742}, {\"bestTime\": 16.342687845230103}, {\"bestTime\": 0.4518570899963379}, {\"bestTime\": 4.647294998168945}, {\"bestTime\": 0.18477392196655273}, {\"bestTime\": 0.34907102584838867}, {\"bestTime\": 0.08549189567565918}, {\"bestTime\": 0.4875359535217285}, {\"bestTime\": 0.686816930770874}, {\"bestTime\": 0.049337148666381836}, {\"bestTime\": 0.41569018363952637}, {\"bestTime\": 57.58366894721985}, {\"bestTime\": 0.9750380516052246}, {\"bestTime\": 0.18239498138427734}, {\"bestTime\": 0.09251713752746582}, {\"bestTime\": 0.7484519481658936}, {\"bestTime\": 0.17539405822753906}, {\"bestTime\": 0.05399298667907715}, {\"bestTime\": 0.7100670337677002}, {\"bestTime\": 0.2594630718231201}, {\"bestTime\": 4.195127964019775}, {\"bestTime\": 2.13280987739563}, {\"bestTime\": 0.23139405250549316}, {\"bestTime\": 0.21420502662658691}, {\"bestTime\": 28.030194997787476}, {\"bestTime\": 0.28254008293151855}, {\"bestTime\": 5.585947036743164}, {\"bestTime\": 4.955063819885254}, {\"bestTime\": 0.7240011692047119}, {\"bestTime\": 12.75597882270813}, {\"bestTime\": 0.1506791114807129}, {\"bestTime\": 3.2545320987701416}, {\"bestTime\": 3.274872064590454}, {\"bestTime\": 0.06447792053222656}, {\"bestTime\": 4.699867010116577}, {\"bestTime\": 0.7332079410552979}, {\"bestTime\": 10.40336298942566}, {\"bestTime\": 0.2798609733581543}, {\"bestTime\": 0.12615704536437988}, {\"bestTime\": 31.73637104034424}, {\"bestTime\": 0.12692999839782715}, {\"bestTime\": 0.32013416290283203}, {\"bestTime\": 12.874300003051758}, {\"bestTime\": 0.09377908706665039}, {\"bestTime\": 2.0186588764190674}, {\"bestTime\": 29.551582098007202}, {\"bestTime\": 0.08316183090209961}, {\"bestTime\": 0.20768213272094727}, {\"bestTime\": 2.465855836868286}, {\"bestTime\": 0.06388688087463379}, {\"bestTime\": 1.5316600799560547}, {\"bestTime\": 12.201128005981445}, {\"bestTime\": 0.19714093208312988}, {\"bestTime\": 17.24872589111328}, {\"bestTime\": 0.25903987884521484}, {\"bestTime\": 19.356276988983154}, {\"bestTime\": 19.83352017402649}, {\"bestTime\": 1.24471116065979}, {\"bestTime\": 0.6885509490966797}, {\"bestTime\": 0.3756840229034424}, {\"bestTime\": 0.6870510578155518}, {\"bestTime\": 3.9042110443115234}, {\"bestTime\": 1.6401100158691406}, {\"bestTime\": 0.2673020362854004}, {\"bestTime\": 0.6267349720001221}, {\"bestTime\": 1.343008041381836}, {\"bestTime\": 1.1507468223571777}, {\"bestTime\": 0.7741491794586182}, {\"bestTime\": 18.588147163391113}, {\"bestTime\": 0.2909219264984131}, {\"bestTime\": 0.3442380428314209}, {\"bestTime\": 0.26000380516052246}, {\"bestTime\": 0.3961920738220215}, {\"bestTime\": 0.3378279209136963}, {\"bestTime\": 0.23000192642211914}, {\"bestTime\": 24.853294134140015}, {\"bestTime\": 0.5528969764709473}, {\"bestTime\": 0.715217113494873}, {\"bestTime\": 0.7095739841461182}, {\"bestTime\": 0.22873210906982422}, {\"bestTime\": 0.4238560199737549}, {\"bestTime\": 3.222730875015259}, {\"bestTime\": 0.13844084739685059}, {\"bestTime\": 0.32772207260131836}, {\"bestTime\": 2.9454610347747803}, {\"bestTime\": 0.4633021354675293}, {\"bestTime\": 0.20770907402038574}, {\"bestTime\": 4.2535951137542725}, {\"bestTime\": 2.444058895111084}, {\"bestTime\": 1.166769027709961}, {\"bestTime\": 0.31511402130126953}, {\"bestTime\": 1.7682390213012695}, {\"bestTime\": 0.15058684349060059}, {\"bestTime\": 5.487207889556885}, {\"bestTime\": 29.669179916381836}, {\"bestTime\": 34.932443141937256}, {\"bestTime\": 0.08034920692443848}, {\"bestTime\": 0.4287259578704834}, {\"bestTime\": 32.10823392868042}, {\"bestTime\": 30.962278127670288}, {\"bestTime\": 0.4210638999938965}, {\"bestTime\": 32.173506021499634}, {\"bestTime\": 2.5923218727111816}, {\"bestTime\": 1.719710111618042}, {\"bestTime\": 0.3951740264892578}, {\"bestTime\": 0.38433408737182617}, {\"bestTime\": 0.2106461524963379}, {\"bestTime\": 0.16419410705566406}, {\"bestTime\": 1.8040499687194824}, {\"bestTime\": 1.1444010734558105}, {\"bestTime\": 0.3664369583129883}, {\"bestTime\": 4.4753968715667725}, {\"bestTime\": 0.891279935836792}, {\"bestTime\": 0.23577308654785156}, {\"bestTime\": 52.13618803024292}, {\"bestTime\": 0.6749730110168457}, {\"bestTime\": 9.93758487701416}, {\"bestTime\": 0.0691840648651123}, {\"bestTime\": 31.803060054779053}, {\"bestTime\": 38.12649083137512}, {\"bestTime\": 6.402008056640625}, {\"bestTime\": 0.2520599365234375}, {\"bestTime\": 0.25160694122314453}, {\"bestTime\": 4.393443822860718}, {\"bestTime\": 1.2188749313354492}, {\"bestTime\": 57.823758125305176}, {\"bestTime\": 3.4717369079589844}, {\"bestTime\": 0.6602730751037598}, {\"bestTime\": 15.300395011901855}, {\"bestTime\": 0.2514069080352783}, {\"bestTime\": 19.518336057662964}, {\"bestTime\": 13.286855936050415}, {\"bestTime\": 1.473417043685913}, {\"bestTime\": 0.18155598640441895}, {\"bestTime\": 11.43124794960022}, {\"bestTime\": 27.792109966278076}, {\"bestTime\": 0.1414961814880371}, {\"bestTime\": 22.452320098876953}, {\"bestTime\": 0.5124151706695557}, {\"bestTime\": 5.2125279903411865}, {\"bestTime\": 0.27566003799438477}, {\"bestTime\": 0.19125008583068848}, {\"bestTime\": 0.12230801582336426}, {\"bestTime\": 6.3724400997161865}, {\"bestTime\": 0.07996392250061035}, {\"bestTime\": 0.0632638931274414}, {\"bestTime\": 1.1681609153747559}, {\"bestTime\": 13.042585849761963}, {\"bestTime\": 32.85650682449341}, {\"bestTime\": 2.9735519886016846}, {\"bestTime\": 0.37685489654541016}, {\"bestTime\": 7.673957109451294}, {\"bestTime\": 0.20381689071655273}, {\"bestTime\": 35.6816201210022}, {\"bestTime\": 2.19541597366333}, {\"bestTime\": 0.4127957820892334}, {\"bestTime\": 0.8376011848449707}, {\"bestTime\": 29.845453023910522}, {\"bestTime\": 15.182155132293701}, {\"bestTime\": 0.11256599426269531}, {\"bestTime\": 0.38784003257751465}, {\"bestTime\": 3.1815359592437744}, {\"bestTime\": 5.8177080154418945}, {\"bestTime\": 0.6356320381164551}, {\"bestTime\": 0.5554969310760498}, {\"bestTime\": 0.7528290748596191}, {\"bestTime\": 0.7527410984039307}, {\"bestTime\": 0.7750458717346191}, {\"bestTime\": 0.6386408805847168}, {\"bestTime\": 1.068852186203003}, {\"bestTime\": 2.7710320949554443}, {\"bestTime\": 0.4307229518890381}, {\"bestTime\": 27.806360960006714}, {\"bestTime\": 0.7093260288238525}, {\"bestTime\": 1.9193029403686523}, {\"bestTime\": 0.22583603858947754}, {\"bestTime\": 0.34804511070251465}, {\"bestTime\": 0.2598881721496582}, {\"bestTime\": 0.3952138423919678}, {\"bestTime\": 0.3365960121154785}, {\"bestTime\": 0.23354601860046387}, {\"bestTime\": 0.25507116317749023}, {\"bestTime\": 0.37968993186950684}, {\"bestTime\": 0.4031541347503662}, {\"bestTime\": 42.366616010665894}, {\"bestTime\": 10.200745105743408}, {\"bestTime\": 2.5143849849700928}, {\"bestTime\": 0.5308599472045898}, {\"bestTime\": 0.5772140026092529}, {\"bestTime\": 0.8476028442382812}, {\"bestTime\": 0.6001889705657959}, {\"bestTime\": 0.884533166885376}, {\"bestTime\": 22.786722898483276}, {\"bestTime\": 0.13337397575378418}, {\"bestTime\": 0.2231130599975586}, {\"bestTime\": 59.41215801239014}, {\"bestTime\": 0.17623519897460938}, {\"bestTime\": 19.25368905067444}, {\"bestTime\": 2.86130690574646}, {\"bestTime\": 0.5057308673858643}, {\"bestTime\": 0.6784870624542236}, {\"bestTime\": 0.5333459377288818}, {\"bestTime\": 0.051870107650756836}, {\"bestTime\": 14.335846900939941}, {\"bestTime\": 0.047332048416137695}, {\"bestTime\": 0.263657808303833}, {\"bestTime\": 0.7266871929168701}, {\"bestTime\": 0.1500849723815918}, {\"bestTime\": 4.574373960494995}, {\"bestTime\": 11.535842895507812}, {\"bestTime\": 2.478144884109497}, {\"bestTime\": 1.1757440567016602}, {\"bestTime\": 0.16614294052124023}, {\"bestTime\": 3.19691801071167}, {\"bestTime\": 3.3954808712005615}, {\"bestTime\": 0.12187409400939941}, {\"bestTime\": 0.6845548152923584}, {\"bestTime\": 0.37680697441101074}, {\"bestTime\": 6.454486131668091}, {\"bestTime\": 0.05250906944274902}, {\"bestTime\": 13.301164865493774}, {\"bestTime\": 0.05108904838562012}, {\"bestTime\": 0.6274621486663818}, {\"bestTime\": 0.17241787910461426}, {\"bestTime\": 0.7031538486480713}, {\"bestTime\": 0.0814509391784668}, {\"bestTime\": 0.26308679580688477}, {\"bestTime\": 0.6798431873321533}, {\"bestTime\": 0.41791605949401855}, {\"bestTime\": 2.248492956161499}, {\"bestTime\": 0.17666888236999512}, {\"bestTime\": 0.19880294799804688}, {\"bestTime\": 0.9452688694000244}, {\"bestTime\": 0.3447399139404297}, {\"bestTime\": 7.504639148712158}, {\"bestTime\": 0.25460195541381836}, {\"bestTime\": 1.621000051498413}, {\"bestTime\": 0.4623250961303711}, {\"bestTime\": 0.24670004844665527}, {\"bestTime\": 0.2976219654083252}, {\"bestTime\": 0.21868491172790527}, {\"bestTime\": 3.7924368381500244}, {\"bestTime\": 0.22568702697753906}, {\"bestTime\": 0.2849099636077881}, {\"bestTime\": 0.4074079990386963}, {\"bestTime\": 0.28893089294433594}, {\"bestTime\": 0.1757509708404541}, {\"bestTime\": 0.7784481048583984}, {\"bestTime\": 0.9356579780578613}, {\"bestTime\": 7.039361953735352}, {\"bestTime\": 4.237453937530518}, {\"bestTime\": 45.82089185714722}, {\"bestTime\": 3.538149118423462}, {\"bestTime\": 3.470893144607544}, {\"bestTime\": 0.6559829711914062}, {\"bestTime\": 56.71169090270996}, {\"bestTime\": 3.492650032043457}, {\"bestTime\": 0.6986820697784424}, {\"bestTime\": 1.4963889122009277}, {\"bestTime\": 4.519604206085205}, {\"bestTime\": 0.19087600708007812}, {\"bestTime\": 5.710071086883545}, {\"bestTime\": 59.04734206199646}, {\"bestTime\": 58.509583950042725}, {\"bestTime\": 0.2898550033569336}, {\"bestTime\": 53.07762312889099}, {\"bestTime\": 0.1565990447998047}, {\"bestTime\": 0.29566097259521484}, {\"bestTime\": 0.40357089042663574}, {\"bestTime\": 0.24660897254943848}, {\"bestTime\": 0.8820278644561768}, {\"bestTime\": 0.14844584465026855}, {\"bestTime\": 0.2567901611328125}, {\"bestTime\": 0.23053622245788574}, {\"bestTime\": 1.906567096710205}, {\"bestTime\": 0.7306098937988281}, {\"bestTime\": 0.6721320152282715}, {\"bestTime\": 3.981133222579956}, {\"bestTime\": 40.00025200843811}, {\"bestTime\": 0.2986640930175781}, {\"bestTime\": 3.5504329204559326}, {\"bestTime\": 0.8193960189819336}, {\"bestTime\": 0.3582899570465088}, {\"bestTime\": 0.2741968631744385}, {\"bestTime\": 7.785038948059082}, {\"bestTime\": 0.3863210678100586}, {\"bestTime\": 0.2755119800567627}, {\"bestTime\": 7.010894060134888}, {\"bestTime\": 0.33381104469299316}, {\"bestTime\": 2.9250450134277344}, {\"bestTime\": 0.25066709518432617}, {\"bestTime\": 0.3928649425506592}, {\"bestTime\": 27.863340854644775}, {\"bestTime\": 4.179649114608765}, {\"bestTime\": 0.6680269241333008}, {\"bestTime\": 0.6660270690917969}, {\"bestTime\": 0.05458402633666992}, {\"bestTime\": 0.31490492820739746}, {\"bestTime\": 4.195746898651123}, {\"bestTime\": 2.438703775405884}, {\"bestTime\": 15.935537099838257}, {\"bestTime\": 5.262279033660889}, {\"bestTime\": 0.3437490463256836}, {\"bestTime\": 2.1591289043426514}, {\"bestTime\": 2.9270498752593994}, {\"bestTime\": 9.10620903968811}, {\"bestTime\": 6.077800989151001}, {\"bestTime\": 0.31520986557006836}, {\"bestTime\": 0.9843800067901611}, {\"bestTime\": 0.40908193588256836}, {\"bestTime\": 0.2735002040863037}, {\"bestTime\": 0.047718048095703125}, {\"bestTime\": 32.32371401786804}, {\"bestTime\": 0.19948315620422363}, {\"bestTime\": 0.2789161205291748}, {\"bestTime\": 0.3927919864654541}, {\"bestTime\": 3.2944018840789795}, {\"bestTime\": 0.28427600860595703}, {\"bestTime\": 1.5821099281311035}, {\"bestTime\": 0.9655261039733887}, {\"bestTime\": 0.8859119415283203}, {\"bestTime\": 0.7235729694366455}, {\"bestTime\": 0.37404513359069824}, {\"bestTime\": 38.13814997673035}, {\"bestTime\": 0.21506309509277344}, {\"bestTime\": 0.6685771942138672}, {\"bestTime\": 0.374755859375}, {\"bestTime\": 7.225275039672852}, {\"bestTime\": 10.187142848968506}, {\"bestTime\": 0.22700095176696777}, {\"bestTime\": 3.6837399005889893}, {\"bestTime\": 27.89562702178955}, {\"bestTime\": 27.887129068374634}, {\"bestTime\": 0.45764899253845215}, {\"bestTime\": 1.463763952255249}, {\"bestTime\": 3.0183441638946533}, {\"bestTime\": 7.700123071670532}, {\"bestTime\": 6.94710898399353}, {\"bestTime\": 13.226095914840698}, {\"bestTime\": 0.19242596626281738}, {\"bestTime\": 3.305943012237549}, {\"bestTime\": 0.34490394592285156}, {\"bestTime\": 0.19916391372680664}, {\"bestTime\": 1.9114899635314941}, {\"bestTime\": 0.13727998733520508}, {\"bestTime\": 0.8596229553222656}, {\"bestTime\": 23.9874370098114}, {\"bestTime\": 0.2821929454803467}, {\"bestTime\": 13.934183120727539}, {\"bestTime\": 4.423173904418945}, {\"bestTime\": 0.09446501731872559}, {\"bestTime\": 2.1177449226379395}, {\"bestTime\": 9.702338218688965}, {\"bestTime\": 11.08942198753357}, {\"bestTime\": 5.84375786781311}, {\"bestTime\": 1.885633945465088}, {\"bestTime\": 1.0591099262237549}, {\"bestTime\": 18.265614986419678}, {\"bestTime\": 0.2815861701965332}, {\"bestTime\": 0.255141019821167}, {\"bestTime\": 26.176435947418213}, {\"bestTime\": 0.23067188262939453}, {\"bestTime\": 0.17488312721252441}, {\"bestTime\": 0.46549010276794434}, {\"bestTime\": 17.05197310447693}, {\"bestTime\": 0.939751148223877}, {\"bestTime\": null}, {\"bestTime\": 1.3951568603515625}, {\"bestTime\": 2.6046578884124756}, {\"bestTime\": 10.797614097595215}, {\"bestTime\": 16.470688104629517}, {\"bestTime\": 0.32498598098754883}, {\"bestTime\": 11.122535943984985}, {\"bestTime\": 42.58629512786865}, {\"bestTime\": 21.758729934692383}, {\"bestTime\": 48.35049605369568}, {\"bestTime\": 0.7119801044464111}, {\"bestTime\": 37.07883977890015}, {\"bestTime\": 2.6963260173797607}, {\"bestTime\": 0.09641504287719727}, {\"bestTime\": null}, {\"bestTime\": 0.07689189910888672}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": 0.8207437992095947}, {\"bestTime\": 16.092151880264282}, {\"bestTime\": 0.2141420841217041}, {\"bestTime\": null}, {\"bestTime\": 51.78983688354492}, {\"bestTime\": null}, {\"bestTime\": 0.19219398498535156}, {\"bestTime\": null}, {\"bestTime\": 0.13917899131774902}, {\"bestTime\": 0.07806801795959473}, {\"bestTime\": 0.36435604095458984}, {\"bestTime\": 14.378906011581421}, {\"bestTime\": 2.6434409618377686}, {\"bestTime\": null}, {\"bestTime\": 0.1848468780517578}, {\"bestTime\": null}, {\"bestTime\": 5.477503061294556}, {\"bestTime\": null}, {\"bestTime\": 48.68565797805786}, {\"bestTime\": 1.9596359729766846}, {\"bestTime\": 0.21611499786376953}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": 0.19133901596069336}, {\"bestTime\": 4.862153053283691}, {\"bestTime\": 12.698328971862793}, {\"bestTime\": 4.96187686920166}, {\"bestTime\": 7.069933891296387}, {\"bestTime\": null}, {\"bestTime\": 24.276376008987427}, {\"bestTime\": null}, {\"bestTime\": 0.13960981369018555}, {\"bestTime\": 0.13888287544250488}, {\"bestTime\": 0.07859992980957031}, {\"bestTime\": 0.5758001804351807}, {\"bestTime\": 0.3591032028198242}, {\"bestTime\": null}, {\"bestTime\": 58.99269413948059}, {\"bestTime\": null}, {\"bestTime\": 0.185866117477417}, {\"bestTime\": 7.000326871871948}, {\"bestTime\": 0.32199788093566895}, {\"bestTime\": 3.436800003051758}, {\"bestTime\": 1.8282699584960938}, {\"bestTime\": 0.45865392684936523}, {\"bestTime\": 0.07630109786987305}, {\"bestTime\": 8.09290885925293}, {\"bestTime\": null}, {\"bestTime\": 10.926622152328491}, {\"bestTime\": 0.09589481353759766}, {\"bestTime\": 5.847468137741089}, {\"bestTime\": null}, {\"bestTime\": 0.07694506645202637}, {\"bestTime\": 50.0181930065155}, {\"bestTime\": null}, {\"bestTime\": 32.05920696258545}, {\"bestTime\": 3.3525900840759277}, {\"bestTime\": 45.353720903396606}, {\"bestTime\": 34.142343044281006}, {\"bestTime\": 0.0768589973449707}, {\"bestTime\": null}, {\"bestTime\": 0.13883018493652344}, {\"bestTime\": 7.4854700565338135}, {\"bestTime\": 8.673985004425049}, {\"bestTime\": 0.1904921531677246}, {\"bestTime\": 0.5198569297790527}, {\"bestTime\": 52.63784193992615}, {\"bestTime\": 11.298856019973755}, {\"bestTime\": null}, {\"bestTime\": 0.30553603172302246}, {\"bestTime\": 0.15698599815368652}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": 16.208189010620117}, {\"bestTime\": 3.2051339149475098}, {\"bestTime\": 30.224974870681763}, {\"bestTime\": 0.07636690139770508}, {\"bestTime\": null}, {\"bestTime\": 0.1842029094696045}, {\"bestTime\": 0.10921406745910645}, {\"bestTime\": 0.1566760540008545}, {\"bestTime\": 9.533813953399658}, {\"bestTime\": 15.066066026687622}, {\"bestTime\": 9.635416984558105}, {\"bestTime\": 0.09737706184387207}, {\"bestTime\": 0.2699089050292969}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": 4.288557052612305}, {\"bestTime\": null}, {\"bestTime\": 0.5664989948272705}, {\"bestTime\": 0.10965204238891602}, {\"bestTime\": 0.3867909908294678}, {\"bestTime\": 0.1848311424255371}, {\"bestTime\": 0.07772111892700195}, {\"bestTime\": null}, {\"bestTime\": 1.0186679363250732}, {\"bestTime\": 7.859379053115845}, {\"bestTime\": null}, {\"bestTime\": 0.14492106437683105}, {\"bestTime\": 36.03050994873047}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": 0.27283287048339844}, {\"bestTime\": 0.0957648754119873}, {\"bestTime\": 0.31865501403808594}, {\"bestTime\": 2.42374587059021}, {\"bestTime\": 21.131887912750244}, {\"bestTime\": 49.11333513259888}, {\"bestTime\": 17.141016006469727}, {\"bestTime\": null}, {\"bestTime\": 0.1559431552886963}, {\"bestTime\": 0.18146586418151855}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": 0.30515408515930176}, {\"bestTime\": null}, {\"bestTime\": 13.204108953475952}, {\"bestTime\": 14.458651065826416}, {\"bestTime\": 0.19080209732055664}, {\"bestTime\": 0.1890430450439453}, {\"bestTime\": 0.13832902908325195}, {\"bestTime\": 0.0785980224609375}, {\"bestTime\": 5.833642959594727}, {\"bestTime\": 46.10367703437805}, {\"bestTime\": null}, {\"bestTime\": 0.2695000171661377}, {\"bestTime\": 10.991940975189209}, {\"bestTime\": 3.135772943496704}, {\"bestTime\": null}, {\"bestTime\": 0.5150690078735352}, {\"bestTime\": 0.3595550060272217}, {\"bestTime\": 0.13919496536254883}, {\"bestTime\": 0.18463897705078125}, {\"bestTime\": 7.319704055786133}, {\"bestTime\": 5.317239046096802}, {\"bestTime\": null}, {\"bestTime\": 0.13860392570495605}, {\"bestTime\": null}, {\"bestTime\": 0.18469715118408203}, {\"bestTime\": null}, {\"bestTime\": 1.7870509624481201}, {\"bestTime\": 0.1892850399017334}, {\"bestTime\": null}, {\"bestTime\": 9.39104700088501}, {\"bestTime\": 0.21531891822814941}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": 2.163285970687866}, {\"bestTime\": 0.07689905166625977}, {\"bestTime\": 13.570377111434937}, {\"bestTime\": 7.570823907852173}, {\"bestTime\": 13.609096050262451}, {\"bestTime\": null}, {\"bestTime\": 0.09626197814941406}, {\"bestTime\": 3.0721781253814697}, {\"bestTime\": null}, {\"bestTime\": 11.370063781738281}, {\"bestTime\": 0.07782983779907227}, {\"bestTime\": 0.39923095703125}, {\"bestTime\": 55.24536085128784}, {\"bestTime\": null}, {\"bestTime\": 1.7608990669250488}, {\"bestTime\": 3.8903610706329346}, {\"bestTime\": 0.3201441764831543}, {\"bestTime\": null}, {\"bestTime\": 58.12186098098755}, {\"bestTime\": null}, {\"bestTime\": 2.880510091781616}, {\"bestTime\": 10.867811918258667}, {\"bestTime\": 0.07686209678649902}, {\"bestTime\": 16.069318056106567}, {\"bestTime\": 11.439944982528687}, {\"bestTime\": 2.0510740280151367}, {\"bestTime\": 0.07641792297363281}, {\"bestTime\": 4.383858919143677}, {\"bestTime\": 1.685654878616333}, {\"bestTime\": 21.7691969871521}, {\"bestTime\": 0.4526209831237793}, {\"bestTime\": 6.332065105438232}, {\"bestTime\": 29.86000394821167}, {\"bestTime\": 7.14103102684021}, {\"bestTime\": 0.8921020030975342}, {\"bestTime\": 5.809942007064819}, {\"bestTime\": 0.0766439437866211}, {\"bestTime\": 0.1860518455505371}, {\"bestTime\": 0.13913798332214355}, {\"bestTime\": 1.2195789813995361}, {\"bestTime\": null}, {\"bestTime\": 20.76156187057495}, {\"bestTime\": 6.675274133682251}, {\"bestTime\": null}, {\"bestTime\": 23.736277103424072}, {\"bestTime\": 6.391646862030029}, {\"bestTime\": null}, {\"bestTime\": 0.20670080184936523}, {\"bestTime\": 0.07802510261535645}, {\"bestTime\": null}, {\"bestTime\": 0.29141688346862793}, {\"bestTime\": 5.098588943481445}, {\"bestTime\": 0.19095110893249512}, {\"bestTime\": null}, {\"bestTime\": 0.09644389152526855}, {\"bestTime\": 0.3208920955657959}, {\"bestTime\": null}, {\"bestTime\": 5.4952099323272705}, {\"bestTime\": 0.2715108394622803}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": 15.03661298751831}, {\"bestTime\": 1.5908360481262207}, {\"bestTime\": 46.65457487106323}, {\"bestTime\": 0.07694005966186523}, {\"bestTime\": 0.4033989906311035}, {\"bestTime\": 16.73023819923401}, {\"bestTime\": 0.15704083442687988}, {\"bestTime\": 0.0783090591430664}, {\"bestTime\": 0.1841878890991211}, {\"bestTime\": 0.1100320816040039}, {\"bestTime\": 0.4409918785095215}, {\"bestTime\": 7.173803091049194}, {\"bestTime\": 19.626403093338013}, {\"bestTime\": 0.2698838710784912}, {\"bestTime\": 16.700743913650513}, {\"bestTime\": 2.1598098278045654}, {\"bestTime\": 25.847851037979126}, {\"bestTime\": null}, {\"bestTime\": 10.208225965499878}, {\"bestTime\": 0.19050097465515137}, {\"bestTime\": 0.1892540454864502}, {\"bestTime\": 0.5950250625610352}, {\"bestTime\": 8.636565923690796}, {\"bestTime\": 56.029574155807495}, {\"bestTime\": 0.13805103302001953}, {\"bestTime\": null}, {\"bestTime\": 4.400274991989136}, {\"bestTime\": null}, {\"bestTime\": 9.726850032806396}, {\"bestTime\": 0.3027989864349365}, {\"bestTime\": 12.956289052963257}, {\"bestTime\": null}, {\"bestTime\": 2.776956081390381}, {\"bestTime\": 34.57741713523865}, {\"bestTime\": 6.129059076309204}, {\"bestTime\": 6.832008123397827}, {\"bestTime\": 30.817916870117188}, {\"bestTime\": 0.27109503746032715}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": 0.1588749885559082}, {\"bestTime\": null}, {\"bestTime\": 55.60457897186279}, {\"bestTime\": null}, {\"bestTime\": 0.19007611274719238}, {\"bestTime\": 0.42438507080078125}, {\"bestTime\": 5.181819915771484}, {\"bestTime\": null}, {\"bestTime\": 0.5194330215454102}, {\"bestTime\": null}, {\"bestTime\": 53.18076491355896}, {\"bestTime\": 0.3211379051208496}, {\"bestTime\": 13.631855964660645}, {\"bestTime\": 0.0785531997680664}, {\"bestTime\": 0.4407188892364502}, {\"bestTime\": 0.39144420623779297}, {\"bestTime\": 9.951511859893799}, {\"bestTime\": 0.15734219551086426}, {\"bestTime\": 19.731485843658447}, {\"bestTime\": 0.07599592208862305}, {\"bestTime\": null}, {\"bestTime\": 0.257781982421875}, {\"bestTime\": 0.31424593925476074}, {\"bestTime\": 0.6646378040313721}, {\"bestTime\": 0.26085400581359863}, {\"bestTime\": 0.49959707260131836}, {\"bestTime\": 0.8873791694641113}, {\"bestTime\": 2.431960105895996}, {\"bestTime\": 0.49956512451171875}, {\"bestTime\": 1.0003440380096436}, {\"bestTime\": 0.92519211769104}, {\"bestTime\": 0.06184816360473633}, {\"bestTime\": 0.3288869857788086}, {\"bestTime\": 0.1707139015197754}, {\"bestTime\": 14.445369005203247}, {\"bestTime\": 0.14703702926635742}, {\"bestTime\": 0.41640496253967285}, {\"bestTime\": 0.3363521099090576}, {\"bestTime\": 0.20046091079711914}, {\"bestTime\": 7.4339470863342285}, {\"bestTime\": 0.9428400993347168}, {\"bestTime\": 0.30357909202575684}, {\"bestTime\": 1.075711965560913}, {\"bestTime\": 0.3074350357055664}, {\"bestTime\": 20.271817922592163}, {\"bestTime\": 0.19459795951843262}, {\"bestTime\": 0.24153804779052734}, {\"bestTime\": 0.13943195343017578}, {\"bestTime\": 1.1770951747894287}, {\"bestTime\": 2.2670230865478516}, {\"bestTime\": 0.5075900554656982}, {\"bestTime\": 9.308769941329956}, {\"bestTime\": 0.34671497344970703}, {\"bestTime\": 0.42937707901000977}, {\"bestTime\": 49.01170301437378}, {\"bestTime\": 0.18457484245300293}, {\"bestTime\": 16.714416027069092}, {\"bestTime\": 2.497725009918213}, {\"bestTime\": 0.21109294891357422}, {\"bestTime\": 0.8395941257476807}, {\"bestTime\": 0.5334799289703369}, {\"bestTime\": 0.17352890968322754}, {\"bestTime\": 0.09786677360534668}, {\"bestTime\": 0.18800806999206543}, {\"bestTime\": 0.2751610279083252}, {\"bestTime\": 0.5410499572753906}, {\"bestTime\": 0.3599860668182373}, {\"bestTime\": 0.35901904106140137}, {\"bestTime\": 0.2449049949645996}, {\"bestTime\": 1.2587430477142334}, {\"bestTime\": 0.26462602615356445}, {\"bestTime\": 0.602288007736206}, {\"bestTime\": 0.16509199142456055}, {\"bestTime\": 0.34738779067993164}, {\"bestTime\": 0.42240214347839355}, {\"bestTime\": 0.6488380432128906}, {\"bestTime\": 0.1842811107635498}, {\"bestTime\": 23.108402013778687}, {\"bestTime\": 0.5522620677947998}, {\"bestTime\": 3.5616519451141357}, {\"bestTime\": 14.059423923492432}, {\"bestTime\": 0.5066711902618408}, {\"bestTime\": 1.187736988067627}, {\"bestTime\": 6.487813949584961}, {\"bestTime\": 20.36879801750183}, {\"bestTime\": 0.3636181354522705}, {\"bestTime\": 0.09627819061279297}, {\"bestTime\": 0.36368489265441895}, {\"bestTime\": 0.35940098762512207}, {\"bestTime\": 0.24733901023864746}, {\"bestTime\": 1.3318560123443604}, {\"bestTime\": 0.2721250057220459}, {\"bestTime\": 0.5380711555480957}, {\"bestTime\": 0.09600305557250977}, {\"bestTime\": 34.90438985824585}, {\"bestTime\": 0.18902802467346191}, {\"bestTime\": 0.5212149620056152}, {\"bestTime\": 0.8314290046691895}, {\"bestTime\": 0.10919618606567383}, {\"bestTime\": 0.18563199043273926}, {\"bestTime\": 5.601337909698486}, {\"bestTime\": 0.9221010208129883}, {\"bestTime\": 0.06356096267700195}, {\"bestTime\": 0.3165900707244873}, {\"bestTime\": 0.9995231628417969}, {\"bestTime\": 2.472148895263672}, {\"bestTime\": 1.1553869247436523}, {\"bestTime\": 0.4864339828491211}, {\"bestTime\": 3.045246124267578}, {\"bestTime\": 13.459717988967896}, {\"bestTime\": 0.6761019229888916}, {\"bestTime\": 0.2622349262237549}, {\"bestTime\": 0.2616279125213623}, {\"bestTime\": 2.430091142654419}, {\"bestTime\": 0.30592799186706543}, {\"bestTime\": 0.347700834274292}, {\"bestTime\": 0.37195301055908203}, {\"bestTime\": 0.4152050018310547}, {\"bestTime\": 0.3403809070587158}, {\"bestTime\": 0.9384801387786865}, {\"bestTime\": 2.877506971359253}, {\"bestTime\": 2.701864004135132}, {\"bestTime\": 0.3697319030761719}, {\"bestTime\": 25.071949005126953}, {\"bestTime\": 0.35816502571105957}, {\"bestTime\": 0.6153488159179688}, {\"bestTime\": 0.48995494842529297}, {\"bestTime\": 0.28634214401245117}, {\"bestTime\": 1.9453909397125244}, {\"bestTime\": 0.7457931041717529}, {\"bestTime\": 0.18154001235961914}, {\"bestTime\": 0.7724640369415283}, {\"bestTime\": 48.1338050365448}, {\"bestTime\": 4.5084388256073}, {\"bestTime\": 0.2829139232635498}, {\"bestTime\": 0.19427490234375}, {\"bestTime\": 42.41771984100342}, {\"bestTime\": 0.8865349292755127}, {\"bestTime\": 0.455427885055542}, {\"bestTime\": 0.27837300300598145}, {\"bestTime\": 39.27722692489624}, {\"bestTime\": 0.32744812965393066}, {\"bestTime\": 0.17187809944152832}, {\"bestTime\": 0.23366189002990723}, {\"bestTime\": 7.119162082672119}, {\"bestTime\": 0.6180868148803711}, {\"bestTime\": 7.753775119781494}, {\"bestTime\": 0.6126151084899902}, {\"bestTime\": 0.3139650821685791}, {\"bestTime\": 1.4910380840301514}, {\"bestTime\": 6.995382070541382}, {\"bestTime\": 6.150964975357056}, {\"bestTime\": 37.61149001121521}, {\"bestTime\": 0.2172679901123047}, {\"bestTime\": 0.40939998626708984}, {\"bestTime\": 3.9440300464630127}, {\"bestTime\": 6.117722034454346}, {\"bestTime\": 0.7585268020629883}, {\"bestTime\": 34.759998083114624}, {\"bestTime\": 0.1682720184326172}, {\"bestTime\": 0.2123260498046875}, {\"bestTime\": 0.1510920524597168}, {\"bestTime\": 0.8245820999145508}, {\"bestTime\": 26.62046194076538}, {\"bestTime\": 0.18644404411315918}, {\"bestTime\": 0.1483011245727539}, {\"bestTime\": 0.42575502395629883}, {\"bestTime\": 0.20909500122070312}, {\"bestTime\": 42.28427791595459}, {\"bestTime\": 3.7451751232147217}, {\"bestTime\": 0.22722387313842773}, {\"bestTime\": 0.9410128593444824}, {\"bestTime\": 0.1796119213104248}, {\"bestTime\": 0.7025129795074463}, {\"bestTime\": 0.4773731231689453}, {\"bestTime\": 0.9109539985656738}, {\"bestTime\": 0.8068270683288574}, {\"bestTime\": 0.38729405403137207}, {\"bestTime\": 0.7303979396820068}, {\"bestTime\": 0.20920395851135254}, {\"bestTime\": 0.4302561283111572}, {\"bestTime\": 0.7118151187896729}, {\"bestTime\": 0.20737886428833008}, {\"bestTime\": 57.34158682823181}, {\"bestTime\": 0.8246951103210449}, {\"bestTime\": 27.203251123428345}, {\"bestTime\": 0.5528891086578369}, {\"bestTime\": 7.773526906967163}, {\"bestTime\": 0.7458670139312744}, {\"bestTime\": 0.29868388175964355}, {\"bestTime\": 0.16723299026489258}, {\"bestTime\": 0.703300952911377}, {\"bestTime\": 0.21012210845947266}, {\"bestTime\": 36.72494387626648}, {\"bestTime\": 0.9132070541381836}, {\"bestTime\": 2.4681789875030518}, {\"bestTime\": 0.44026994705200195}, {\"bestTime\": 27.87469220161438}, {\"bestTime\": 0.9442579746246338}, {\"bestTime\": 34.55738615989685}, {\"bestTime\": 0.17437386512756348}, {\"bestTime\": 0.7364640235900879}, {\"bestTime\": 0.47728800773620605}, {\"bestTime\": 0.21156787872314453}, {\"bestTime\": 3.6574900150299072}, {\"bestTime\": 0.882688045501709}, {\"bestTime\": 0.4627060890197754}, {\"bestTime\": 0.2886531352996826}, {\"bestTime\": 4.547628879547119}, {\"bestTime\": 0.7418909072875977}, {\"bestTime\": 0.6097619533538818}, {\"bestTime\": 0.27663397789001465}, {\"bestTime\": 26.460906982421875}, {\"bestTime\": 0.7677340507507324}, {\"bestTime\": 0.3742029666900635}, {\"bestTime\": 24.002004861831665}, {\"bestTime\": 0.3589210510253906}, {\"bestTime\": 0.4340839385986328}, {\"bestTime\": 0.8193800449371338}, {\"bestTime\": 3.038267135620117}, {\"bestTime\": 9.149199962615967}, {\"bestTime\": 0.18924403190612793}, {\"bestTime\": 0.10994410514831543}, {\"bestTime\": 1.7757148742675781}, {\"bestTime\": 0.21519684791564941}, {\"bestTime\": 0.20357298851013184}, {\"bestTime\": 0.1049051284790039}, {\"bestTime\": 5.511259078979492}, {\"bestTime\": 7.6994099617004395}, {\"bestTime\": 0.1684110164642334}, {\"bestTime\": 0.5392940044403076}, {\"bestTime\": 33.17119383811951}, {\"bestTime\": 0.1743488311767578}, {\"bestTime\": 0.10965895652770996}, {\"bestTime\": 0.18398094177246094}, {\"bestTime\": 0.21233797073364258}, {\"bestTime\": 0.5187878608703613}, {\"bestTime\": 25.315775871276855}, {\"bestTime\": 0.25951313972473145}, {\"bestTime\": 0.6036410331726074}, {\"bestTime\": 1.3873639106750488}, {\"bestTime\": 0.16581392288208008}, {\"bestTime\": 0.3649139404296875}, {\"bestTime\": 47.2364718914032}, {\"bestTime\": 0.367462158203125}, {\"bestTime\": 0.34677696228027344}, {\"bestTime\": 4.060259819030762}, {\"bestTime\": 2.271329164505005}, {\"bestTime\": 0.13985610008239746}, {\"bestTime\": 0.24398303031921387}, {\"bestTime\": 0.09692692756652832}, {\"bestTime\": 0.18214201927185059}, {\"bestTime\": 2.4919800758361816}, {\"bestTime\": 18.57689118385315}, {\"bestTime\": 0.5538091659545898}, {\"bestTime\": 0.6540420055389404}, {\"bestTime\": 0.3476250171661377}, {\"bestTime\": 0.43089890480041504}, {\"bestTime\": 3.497253894805908}, {\"bestTime\": 0.3891870975494385}, {\"bestTime\": 2.8781120777130127}, {\"bestTime\": 0.33466005325317383}, {\"bestTime\": 0.4030580520629883}, {\"bestTime\": 0.2006819248199463}, {\"bestTime\": 0.3713529109954834}, {\"bestTime\": 5.618874788284302}, {\"bestTime\": 0.14622902870178223}, {\"bestTime\": 0.17084407806396484}, {\"bestTime\": 2.6531879901885986}, {\"bestTime\": 16.878718852996826}, {\"bestTime\": 0.19689488410949707}, {\"bestTime\": 1.8830630779266357}, {\"bestTime\": 0.3563969135284424}, {\"bestTime\": 2.384434938430786}, {\"bestTime\": 0.32315802574157715}, {\"bestTime\": 1.0634419918060303}, {\"bestTime\": 0.30428409576416016}, {\"bestTime\": 3.1556529998779297}, {\"bestTime\": 5.500200986862183}, {\"bestTime\": 0.4842379093170166}, {\"bestTime\": 1.151231050491333}, {\"bestTime\": 0.2611720561981201}, {\"bestTime\": 0.2608640193939209}, {\"bestTime\": 0.310413122177124}, {\"bestTime\": 0.06295108795166016}, {\"bestTime\": 0.3279719352722168}, {\"bestTime\": 20.040127992630005}, {\"bestTime\": 0.4945251941680908}, {\"bestTime\": 2.4471781253814697}, {\"bestTime\": 0.8748269081115723}, {\"bestTime\": 21.129190921783447}, {\"bestTime\": 1.0882878303527832}, {\"bestTime\": 0.30237388610839844}, {\"bestTime\": 0.19539594650268555}, {\"bestTime\": 47.48579406738281}, {\"bestTime\": 0.34725284576416016}, {\"bestTime\": 2.386557102203369}, {\"bestTime\": 0.14676499366760254}, {\"bestTime\": 2.699099063873291}, {\"bestTime\": 10.124470949172974}, {\"bestTime\": 0.16985487937927246}, {\"bestTime\": 0.950463056564331}, {\"bestTime\": 2.871960163116455}, {\"bestTime\": 0.20720911026000977}, {\"bestTime\": 0.3757340908050537}, {\"bestTime\": 3.658125877380371}, {\"bestTime\": 0.4996809959411621}, {\"bestTime\": 0.8745970726013184}, {\"bestTime\": 0.9236850738525391}, {\"bestTime\": 0.9894020557403564}, {\"bestTime\": 31.35387897491455}, {\"bestTime\": 0.6621708869934082}, {\"bestTime\": 0.30951595306396484}, {\"bestTime\": 3.02377986907959}, {\"bestTime\": 4.090384006500244}, {\"bestTime\": 1.1528000831604004}, {\"bestTime\": 0.27341794967651367}, {\"bestTime\": 0.5334441661834717}, {\"bestTime\": 0.16864299774169922}, {\"bestTime\": 0.26523590087890625}, {\"bestTime\": 0.6299419403076172}, {\"bestTime\": 0.3642079830169678}, {\"bestTime\": 0.24446487426757812}, {\"bestTime\": 0.1090548038482666}, {\"bestTime\": 0.18427705764770508}, {\"bestTime\": 0.21073484420776367}, {\"bestTime\": 0.8360011577606201}, {\"bestTime\": 0.09823799133300781}, {\"bestTime\": 33.05550217628479}, {\"bestTime\": 0.1878221035003662}, {\"bestTime\": 0.1766529083251953}, {\"bestTime\": 3.5223231315612793}, {\"bestTime\": 0.4034121036529541}, {\"bestTime\": 0.6813280582427979}, {\"bestTime\": 2.4860849380493164}, {\"bestTime\": 0.5626349449157715}, {\"bestTime\": 0.35711193084716797}, {\"bestTime\": 16.19421100616455}, {\"bestTime\": 0.4261608123779297}, {\"bestTime\": 0.14005494117736816}, {\"bestTime\": 0.09689593315124512}, {\"bestTime\": 0.24100089073181152}, {\"bestTime\": 22.963052988052368}, {\"bestTime\": 0.35975098609924316}, {\"bestTime\": 0.3473780155181885}, {\"bestTime\": 2.2969348430633545}, {\"bestTime\": 0.5070021152496338}, {\"bestTime\": 1.1555900573730469}, {\"bestTime\": 0.7074418067932129}, {\"bestTime\": 0.489332914352417}, {\"bestTime\": 28.166785955429077}, {\"bestTime\": 0.17399096488952637}, {\"bestTime\": 0.22438502311706543}, {\"bestTime\": 9.812282085418701}, {\"bestTime\": 0.21897101402282715}, {\"bestTime\": 11.446017980575562}, {\"bestTime\": 0.4014251232147217}, {\"bestTime\": 0.7056350708007812}, {\"bestTime\": 0.21944904327392578}, {\"bestTime\": 27.790276765823364}, {\"bestTime\": 0.4412879943847656}, {\"bestTime\": 8.552091121673584}, {\"bestTime\": 0.21247100830078125}, {\"bestTime\": 0.5268759727478027}, {\"bestTime\": 0.14575409889221191}, {\"bestTime\": 0.1712629795074463}, {\"bestTime\": 0.30169200897216797}, {\"bestTime\": 39.581218004226685}, {\"bestTime\": 0.7415058612823486}, {\"bestTime\": 0.7002999782562256}, {\"bestTime\": 0.1835331916809082}, {\"bestTime\": 0.14415597915649414}, {\"bestTime\": 27.50158190727234}, {\"bestTime\": 0.833564043045044}, {\"bestTime\": 0.3071451187133789}, {\"bestTime\": 3.64455509185791}, {\"bestTime\": 0.6214361190795898}, {\"bestTime\": 0.5832281112670898}, {\"bestTime\": 0.1999671459197998}, {\"bestTime\": 0.1074831485748291}, {\"bestTime\": 0.23134207725524902}, {\"bestTime\": 0.5332498550415039}, {\"bestTime\": 0.33206915855407715}, {\"bestTime\": 0.18435001373291016}, {\"bestTime\": 0.11040592193603516}, {\"bestTime\": 0.7678680419921875}, {\"bestTime\": 9.195802927017212}, {\"bestTime\": 0.4101219177246094}, {\"bestTime\": 0.8149840831756592}, {\"bestTime\": 3.5759119987487793}, {\"bestTime\": 8.881335973739624}, {\"bestTime\": 7.182261943817139}, {\"bestTime\": 0.18307995796203613}, {\"bestTime\": 43.544739961624146}, {\"bestTime\": 0.7680261135101318}, {\"bestTime\": 0.47918009757995605}, {\"bestTime\": 0.2809867858886719}, {\"bestTime\": 8.44465184211731}, {\"bestTime\": 0.3755629062652588}, {\"bestTime\": 38.94339990615845}, {\"bestTime\": 0.2860701084136963}, {\"bestTime\": 0.27991795539855957}, {\"bestTime\": 0.1997079849243164}, {\"bestTime\": 0.2187199592590332}, {\"bestTime\": 3.700108051300049}, {\"bestTime\": 6.957979917526245}, {\"bestTime\": 6.9382078647613525}, {\"bestTime\": 0.7374629974365234}, {\"bestTime\": 0.19225287437438965}, {\"bestTime\": 0.11009383201599121}, {\"bestTime\": 13.83975887298584}, {\"bestTime\": 0.8137459754943848}, {\"bestTime\": 4.668392181396484}, {\"bestTime\": 0.5418291091918945}, {\"bestTime\": 0.23161697387695312}, {\"bestTime\": 0.17093110084533691}, {\"bestTime\": 0.33225417137145996}, {\"bestTime\": 0.308758020401001}, {\"bestTime\": 0.5853159427642822}, {\"bestTime\": 0.19911503791809082}, {\"bestTime\": 0.1116950511932373}, {\"bestTime\": 0.6185879707336426}, {\"bestTime\": 7.710424184799194}, {\"bestTime\": 0.18983888626098633}, {\"bestTime\": 0.2971019744873047}, {\"bestTime\": 4.466759920120239}, {\"bestTime\": 31.65843391418457}, {\"bestTime\": 0.8796799182891846}, {\"bestTime\": 0.45545291900634766}, {\"bestTime\": 56.255017042160034}, {\"bestTime\": 0.3534200191497803}, {\"bestTime\": 0.18358588218688965}, {\"bestTime\": 0.7473669052124023}, {\"bestTime\": 0.6097540855407715}, {\"bestTime\": 0.4799659252166748}, {\"bestTime\": 3.8412041664123535}, {\"bestTime\": 28.037426948547363}, {\"bestTime\": 0.9188220500946045}, {\"bestTime\": 0.43893909454345703}, {\"bestTime\": 8.737631797790527}, {\"bestTime\": 0.39975500106811523}, {\"bestTime\": 3.608886957168579}, {\"bestTime\": 0.21074485778808594}, {\"bestTime\": 0.9437298774719238}, {\"bestTime\": 0.22643184661865234}, {\"bestTime\": 15.392003774642944}, {\"bestTime\": 0.20630502700805664}, {\"bestTime\": 32.08170509338379}, {\"bestTime\": 0.4344291687011719}, {\"bestTime\": 0.7028050422668457}, {\"bestTime\": 0.1853029727935791}, {\"bestTime\": 0.14630794525146484}, {\"bestTime\": 0.30945301055908203}, {\"bestTime\": 0.7589051723480225}, {\"bestTime\": 0.2131798267364502}, {\"bestTime\": 0.5386390686035156}, {\"bestTime\": 0.1456289291381836}, {\"bestTime\": 0.363}, {\"bestTime\": 24.177}, {\"bestTime\": 4.832}, {\"bestTime\": 0.063}, {\"bestTime\": 27.14}, {\"bestTime\": 29.928}, {\"bestTime\": 0.021}, {\"bestTime\": 0.052}, {\"bestTime\": 23.227}, {\"bestTime\": 0.091}, {\"bestTime\": 2.978}, {\"bestTime\": 1.938}, {\"bestTime\": 4.488}, {\"bestTime\": 0.042}, {\"bestTime\": 0.283}, {\"bestTime\": 0.069}, {\"bestTime\": 0.024}, {\"bestTime\": 3.389}, {\"bestTime\": 9.85}, {\"bestTime\": 0.132}, {\"bestTime\": 4.729}, {\"bestTime\": 0.088}, {\"bestTime\": 25.217}, {\"bestTime\": 30.601}, {\"bestTime\": 0.392}, {\"bestTime\": 5.123}, {\"bestTime\": 0.026}, {\"bestTime\": 17.991}, {\"bestTime\": 0.229}, {\"bestTime\": 0.755}, {\"bestTime\": 0.26}, {\"bestTime\": 0.06}, {\"bestTime\": 0.427}, {\"bestTime\": 10.906}, {\"bestTime\": 0.031}, {\"bestTime\": 0.06}, {\"bestTime\": 6.059}, {\"bestTime\": 0.715}, {\"bestTime\": 0.122}, {\"bestTime\": 0.05}, {\"bestTime\": 1.138}, {\"bestTime\": 0.02}, {\"bestTime\": 1.912}, {\"bestTime\": 0.383}, {\"bestTime\": 0.036}, {\"bestTime\": 0.851}, {\"bestTime\": 0.031}, {\"bestTime\": 0.33}, {\"bestTime\": 0.193}, {\"bestTime\": 1.412}, {\"bestTime\": 0.313}, {\"bestTime\": 0.052}, {\"bestTime\": 0.277}, {\"bestTime\": 1.547}, {\"bestTime\": 7.84}, {\"bestTime\": 31.719}, {\"bestTime\": 37.117}, {\"bestTime\": 0.141}, {\"bestTime\": 0.035}, {\"bestTime\": 20.484}, {\"bestTime\": 6.778}, {\"bestTime\": 0.037}, {\"bestTime\": 0.614}, {\"bestTime\": 0.141}, {\"bestTime\": 53.052}, {\"bestTime\": 44.471}, {\"bestTime\": 18.91}, {\"bestTime\": 0.046}, {\"bestTime\": 1.194}, {\"bestTime\": 1.879}, {\"bestTime\": 0.312}, {\"bestTime\": 32.251}, {\"bestTime\": 13.888}, {\"bestTime\": 0.034}, {\"bestTime\": 0.084}, {\"bestTime\": 0.361}, {\"bestTime\": 5.511}, {\"bestTime\": 0.252}, {\"bestTime\": 0.219}, {\"bestTime\": 0.027}, {\"bestTime\": 0.03}, {\"bestTime\": 21.489}, {\"bestTime\": 0.036}, {\"bestTime\": 0.058}, {\"bestTime\": 1.761}, {\"bestTime\": 33.513}, {\"bestTime\": 8.156}, {\"bestTime\": 0.179}, {\"bestTime\": 0.03}, {\"bestTime\": 0.258}, {\"bestTime\": 8.405}, {\"bestTime\": 3.571}, {\"bestTime\": 0.267}, {\"bestTime\": 39.61}, {\"bestTime\": 0.11}, {\"bestTime\": 4.41}, {\"bestTime\": 0.17}, {\"bestTime\": 0.12}, {\"bestTime\": 9.47}, {\"bestTime\": 3.08}, {\"bestTime\": 0.25}, {\"bestTime\": 0.11}, {\"bestTime\": 0.5}, {\"bestTime\": 0.16}, {\"bestTime\": 0.22}, {\"bestTime\": 3.12}, {\"bestTime\": 0.36}, {\"bestTime\": 0.44}, {\"bestTime\": 0.52}, {\"bestTime\": 0.12}, {\"bestTime\": 4.72}, {\"bestTime\": 4.36}, {\"bestTime\": 0.22}, {\"bestTime\": 8.22}, {\"bestTime\": 40.51}, {\"bestTime\": 0.14}, {\"bestTime\": 9.37}, {\"bestTime\": 3.53}, {\"bestTime\": 0.11}, {\"bestTime\": 0.12}, {\"bestTime\": 0.02}, {\"bestTime\": 19.14}, {\"bestTime\": 1.05}, {\"bestTime\": 0.02}, {\"bestTime\": 0.02}, {\"bestTime\": 5.34}, {\"bestTime\": 0.12}, {\"bestTime\": 0.09}, {\"bestTime\": 0.02}, {\"bestTime\": 0.63}, {\"bestTime\": 1.12}, {\"bestTime\": 0.33}, {\"bestTime\": 0.83}, {\"bestTime\": 0.02}, {\"bestTime\": 0.17}, {\"bestTime\": 0.12}, {\"bestTime\": 1.08}, {\"bestTime\": 0.14}, {\"bestTime\": 0.92}, {\"bestTime\": 0.84}, {\"bestTime\": 0.02}, {\"bestTime\": 0.25}, {\"bestTime\": 0.33}, {\"bestTime\": 0.14}, {\"bestTime\": 0.02}, {\"bestTime\": 0.02}, {\"bestTime\": 2.05}, {\"bestTime\": 0.02}, {\"bestTime\": 0.09}, {\"bestTime\": 0.13}, {\"bestTime\": 0.22}, {\"bestTime\": 5.55}, {\"bestTime\": 0.11}, {\"bestTime\": 0.27}, {\"bestTime\": 0.41}, {\"bestTime\": 0.14}, {\"bestTime\": 0.52}, {\"bestTime\": 0.37}, {\"bestTime\": 0.2}, {\"bestTime\": 0.17}, {\"bestTime\": 19.48}, {\"bestTime\": 0.12}, {\"bestTime\": 3.61}, {\"bestTime\": 0.09}, {\"bestTime\": 8.05}, {\"bestTime\": 0.14}, {\"bestTime\": 40.16}, {\"bestTime\": 0.23}, {\"bestTime\": 4.23}, {\"bestTime\": 4.73}, {\"bestTime\": 0.02}, {\"bestTime\": 3.62}, {\"bestTime\": 0.11}, {\"bestTime\": 9.41}, {\"bestTime\": 19.45}, {\"bestTime\": 0.17}, {\"bestTime\": 0.22}, {\"bestTime\": 4.72}, {\"bestTime\": 7.97}, {\"bestTime\": 0.41}, {\"bestTime\": 0.16}, {\"bestTime\": 0.25}, {\"bestTime\": 3.08}, {\"bestTime\": 0.22}, {\"bestTime\": 0.36}, {\"bestTime\": 0.2}, {\"bestTime\": 0.2}, {\"bestTime\": 0.02}, {\"bestTime\": 0.85}, {\"bestTime\": 0.14}, {\"bestTime\": 0.92}, {\"bestTime\": 0.02}, {\"bestTime\": 1.09}, {\"bestTime\": 0.61}, {\"bestTime\": 5.36}, {\"bestTime\": 0.25}, {\"bestTime\": 0.02}, {\"bestTime\": 0.14}, {\"bestTime\": 2.06}, {\"bestTime\": 1.02}, {\"bestTime\": 0.12}, {\"bestTime\": 0.22}, {\"bestTime\": 0.02}, {\"bestTime\": 0.02}, {\"bestTime\": 1.03}, {\"bestTime\": 0.02}, {\"bestTime\": 2.03}, {\"bestTime\": 0.91}, {\"bestTime\": 0.14}, {\"bestTime\": 0.14}, {\"bestTime\": 0.33}, {\"bestTime\": 0.2}, {\"bestTime\": 0.22}, {\"bestTime\": 0.63}, {\"bestTime\": 0.02}, {\"bestTime\": 0.05364704132080078}, {\"bestTime\": 0.051525115966796875}, {\"bestTime\": 0.05029106140136719}, {\"bestTime\": 0.07716608047485352}, {\"bestTime\": 0.0612490177154541}, {\"bestTime\": 0.05204296112060547}, {\"bestTime\": 9.382128953933716}, {\"bestTime\": 0.04848814010620117}, {\"bestTime\": 0.039711952209472656}, {\"bestTime\": 14.769173860549927}, {\"bestTime\": 0.049980878829956055}, {\"bestTime\": 22.689826011657715}, {\"bestTime\": 0.18026494979858398}, {\"bestTime\": 0.04264712333679199}, {\"bestTime\": 0.06567192077636719}, {\"bestTime\": 0.14634108543395996}, {\"bestTime\": 15.563709020614624}, {\"bestTime\": 0.061079978942871094}, {\"bestTime\": 0.04666495323181152}, {\"bestTime\": 0.050260066986083984}, {\"bestTime\": 0.05538201332092285}, {\"bestTime\": 0.04541206359863281}, {\"bestTime\": 1.8741540908813477}, {\"bestTime\": 0.04834413528442383}, {\"bestTime\": 0.10815811157226562}, {\"bestTime\": 0.04982399940490723}, {\"bestTime\": 0.25699400901794434}, {\"bestTime\": 0.06641697883605957}, {\"bestTime\": 0.05175590515136719}, {\"bestTime\": 0.25380396842956543}, {\"bestTime\": 0.05255603790283203}, {\"bestTime\": 0.05066800117492676}, {\"bestTime\": 0.04820108413696289}, {\"bestTime\": 0.04673504829406738}, {\"bestTime\": 0.04839897155761719}, {\"bestTime\": 0.04626202583312988}, {\"bestTime\": 0.0617828369140625}, {\"bestTime\": 0.051896095275878906}, {\"bestTime\": 0.051795005798339844}, {\"bestTime\": 0.04515409469604492}, {\"bestTime\": 0.2085268497467041}, {\"bestTime\": 0.05176591873168945}, {\"bestTime\": 0.05077695846557617}, {\"bestTime\": 0.06435990333557129}, {\"bestTime\": 0.06531190872192383}, {\"bestTime\": 0.2537839412689209}, {\"bestTime\": 0.08275198936462402}, {\"bestTime\": 0.05199694633483887}, {\"bestTime\": 0.753648042678833}, {\"bestTime\": 0.04986715316772461}, {\"bestTime\": 0.050724029541015625}, {\"bestTime\": 0.06608295440673828}, {\"bestTime\": 0.06699991226196289}, {\"bestTime\": 0.05016613006591797}, {\"bestTime\": 0.05755805969238281}, {\"bestTime\": 0.06793904304504395}, {\"bestTime\": 0.035857200622558594}, {\"bestTime\": 0.05398392677307129}, {\"bestTime\": 0.08335208892822266}, {\"bestTime\": 0.04631781578063965}, {\"bestTime\": 0.05208182334899902}, {\"bestTime\": 38.436110973358154}, {\"bestTime\": 0.047904014587402344}, {\"bestTime\": 0.049429893493652344}, {\"bestTime\": 0.04910898208618164}, {\"bestTime\": 0.06704378128051758}, {\"bestTime\": 0.05203104019165039}, {\"bestTime\": 0.03626704216003418}, {\"bestTime\": 0.07919716835021973}, {\"bestTime\": 31.95779800415039}, {\"bestTime\": 0.036409854888916016}, {\"bestTime\": 0.04694199562072754}, {\"bestTime\": 0.23802685737609863}, {\"bestTime\": 0.035456180572509766}, {\"bestTime\": 0.037248849868774414}, {\"bestTime\": 0.056603193283081055}, {\"bestTime\": 0.05415201187133789}, {\"bestTime\": 0.05531001091003418}, {\"bestTime\": 0.04219818115234375}, {\"bestTime\": 0.04782414436340332}, {\"bestTime\": 0.04763603210449219}, {\"bestTime\": 0.034417152404785156}, {\"bestTime\": 0.13657903671264648}, {\"bestTime\": 0.052976131439208984}, {\"bestTime\": 0.0509490966796875}, {\"bestTime\": 0.05230116844177246}, {\"bestTime\": 0.07172799110412598}, {\"bestTime\": 0.08474898338317871}, {\"bestTime\": 6.051944017410278}, {\"bestTime\": 0.06729984283447266}, {\"bestTime\": 0.05026698112487793}, {\"bestTime\": 0.5767719745635986}, {\"bestTime\": 0.06911206245422363}, {\"bestTime\": 21.184988975524902}, {\"bestTime\": 0.05043601989746094}, {\"bestTime\": 0.048780202865600586}, {\"bestTime\": 0.07070183753967285}, {\"bestTime\": 0.09096097946166992}, {\"bestTime\": 0.25530099868774414}, {\"bestTime\": 0.0813591480255127}, {\"bestTime\": 0.04738593101501465}, {\"bestTime\": 0.7741379737854004}, {\"bestTime\": 0.04115796089172363}, {\"bestTime\": 0.051119089126586914}, {\"bestTime\": 0.05056905746459961}, {\"bestTime\": 0.08533310890197754}, {\"bestTime\": 0.049466848373413086}, {\"bestTime\": 0.08387589454650879}, {\"bestTime\": 0.06808114051818848}, {\"bestTime\": 26.09428596496582}, {\"bestTime\": 0.13006186485290527}, {\"bestTime\": 0.048191070556640625}, {\"bestTime\": 0.0529789924621582}, {\"bestTime\": 0.0467219352722168}, {\"bestTime\": 1.5353209972381592}, {\"bestTime\": 0.053720951080322266}, {\"bestTime\": 0.05132699012756348}, {\"bestTime\": 0.038110971450805664}, {\"bestTime\": 0.04874610900878906}, {\"bestTime\": 0.03632092475891113}, {\"bestTime\": 0.04760098457336426}, {\"bestTime\": 0.062313079833984375}, {\"bestTime\": 0.03845691680908203}, {\"bestTime\": 0.06159806251525879}, {\"bestTime\": 0.0538330078125}, {\"bestTime\": 0.040608882904052734}, {\"bestTime\": 0.049774169921875}, {\"bestTime\": 34.40940809249878}, {\"bestTime\": 0.049407005310058594}, {\"bestTime\": 0.23851609230041504}, {\"bestTime\": 0.03789997100830078}, {\"bestTime\": 0.20747804641723633}, {\"bestTime\": 0.05285978317260742}, {\"bestTime\": 38.53139901161194}, {\"bestTime\": 0.05075383186340332}, {\"bestTime\": 0.05132412910461426}, {\"bestTime\": 0.0371708869934082}, {\"bestTime\": 0.0371098518371582}, {\"bestTime\": 0.17546987533569336}, {\"bestTime\": 15.70844292640686}, {\"bestTime\": 0.03805398941040039}, {\"bestTime\": 0.06706714630126953}, {\"bestTime\": 0.14544892311096191}, {\"bestTime\": 0.0466158390045166}, {\"bestTime\": 0.050752878189086914}, {\"bestTime\": 0.0462491512298584}, {\"bestTime\": 0.05197405815124512}, {\"bestTime\": 0.04984283447265625}, {\"bestTime\": 14.166874885559082}, {\"bestTime\": 0.6815109252929688}, {\"bestTime\": 0.050341129302978516}, {\"bestTime\": 0.046855926513671875}, {\"bestTime\": 0.0725259780883789}, {\"bestTime\": 0.054650068283081055}, {\"bestTime\": 0.05254817008972168}, {\"bestTime\": 0.051300048828125}, {\"bestTime\": 0.05278205871582031}, {\"bestTime\": 0.04691505432128906}, {\"bestTime\": 0.04915809631347656}, {\"bestTime\": 0.04959988594055176}, {\"bestTime\": 0.053700923919677734}, {\"bestTime\": 0.04748106002807617}, {\"bestTime\": 0.047370195388793945}, {\"bestTime\": 0.20638298988342285}, {\"bestTime\": 0.05099892616271973}, {\"bestTime\": 0.050874948501586914}, {\"bestTime\": 0.047377824783325195}, {\"bestTime\": 0.09917211532592773}, {\"bestTime\": 1.863797903060913}, {\"bestTime\": 0.27078890800476074}, {\"bestTime\": 0.06665682792663574}, {\"bestTime\": 0.049835920333862305}, {\"bestTime\": 0.03989982604980469}, {\"bestTime\": 0.05150794982910156}, {\"bestTime\": 0.07645702362060547}, {\"bestTime\": 0.04941201210021973}, {\"bestTime\": 0.04954814910888672}, {\"bestTime\": 0.05236387252807617}, {\"bestTime\": 0.06343412399291992}, {\"bestTime\": 0.0477142333984375}, {\"bestTime\": 0.06511998176574707}, {\"bestTime\": 0.05194211006164551}, {\"bestTime\": 0.0451970100402832}, {\"bestTime\": 0.03798699378967285}, {\"bestTime\": 0.08232688903808594}, {\"bestTime\": 0.043797969818115234}, {\"bestTime\": 0.05116581916809082}, {\"bestTime\": 0.04621696472167969}, {\"bestTime\": 0.03669595718383789}, {\"bestTime\": 0.038594961166381836}, {\"bestTime\": 0.03653883934020996}, {\"bestTime\": 3.3439979553222656}, {\"bestTime\": 0.05347490310668945}, {\"bestTime\": 0.0388338565826416}, {\"bestTime\": 9.910356998443604}, {\"bestTime\": 0.047514915466308594}, {\"bestTime\": 0.05151510238647461}, {\"bestTime\": 0.04890704154968262}, {\"bestTime\": 0.04332995414733887}, {\"bestTime\": 0.06730985641479492}, {\"bestTime\": 38.0968291759491}, {\"bestTime\": 0.03640890121459961}, {\"bestTime\": 0.03543496131896973}, {\"bestTime\": 0.04826807975769043}, {\"bestTime\": 0.04700899124145508}, {\"bestTime\": 0.05022788047790527}, {\"bestTime\": 0.0450439453125}, {\"bestTime\": 0.06398391723632812}, {\"bestTime\": 0.0812070369720459}, {\"bestTime\": 0.05095696449279785}, {\"bestTime\": 0.050682783126831055}, {\"bestTime\": 0.06186389923095703}, {\"bestTime\": 0.05124092102050781}, {\"bestTime\": 0.04708290100097656}, {\"bestTime\": 19.59306502342224}, {\"bestTime\": 0.050694942474365234}, {\"bestTime\": 0.05772590637207031}, {\"bestTime\": 0.05186200141906738}, {\"bestTime\": 0.048306941986083984}, {\"bestTime\": 0.2238328456878662}, {\"bestTime\": 0.04749298095703125}, {\"bestTime\": 0.05252194404602051}, {\"bestTime\": 0.08362698554992676}, {\"bestTime\": 0.16183805465698242}, {\"bestTime\": 0.05466794967651367}, {\"bestTime\": 0.05043911933898926}, {\"bestTime\": 0.058611154556274414}, {\"bestTime\": 0.04259800910949707}, {\"bestTime\": 0.047171831130981445}, {\"bestTime\": 0.06132197380065918}, {\"bestTime\": 0.07986617088317871}, {\"bestTime\": 38.491212129592896}, {\"bestTime\": 0.05178499221801758}, {\"bestTime\": 0.06995892524719238}, {\"bestTime\": 0.05696702003479004}, {\"bestTime\": 0.049546003341674805}, {\"bestTime\": 0.17601323127746582}, {\"bestTime\": 0.7058901786804199}, {\"bestTime\": 0.04709506034851074}, {\"bestTime\": 0.09597492218017578}, {\"bestTime\": 0.08200407028198242}, {\"bestTime\": 0.04695701599121094}, {\"bestTime\": 0.05685710906982422}, {\"bestTime\": 0.06664395332336426}, {\"bestTime\": 0.04751896858215332}, {\"bestTime\": 0.03557705879211426}, {\"bestTime\": 0.06826901435852051}, {\"bestTime\": 0.04989790916442871}, {\"bestTime\": 0.07777714729309082}, {\"bestTime\": 0.050685882568359375}, {\"bestTime\": 0.06770896911621094}, {\"bestTime\": 0.04024314880371094}, {\"bestTime\": 56.346421003341675}, {\"bestTime\": 0.05003690719604492}, {\"bestTime\": 0.05152010917663574}, {\"bestTime\": 0.03659319877624512}, {\"bestTime\": 0.04960918426513672}, {\"bestTime\": 0.3572719097137451}, {\"bestTime\": 0.05308198928833008}, {\"bestTime\": 0.05713391304016113}, {\"bestTime\": 0.06842994689941406}, {\"bestTime\": 0.05199694633483887}, {\"bestTime\": 0.0670318603515625}, {\"bestTime\": 0.04498600959777832}, {\"bestTime\": 0.04958200454711914}, {\"bestTime\": 0.04056596755981445}, {\"bestTime\": 0.049681901931762695}, {\"bestTime\": 12.894305229187012}, {\"bestTime\": 0.04719805717468262}, {\"bestTime\": 0.05123615264892578}, {\"bestTime\": 0.0749809741973877}, {\"bestTime\": 0.05061793327331543}, {\"bestTime\": 0.1303119659423828}, {\"bestTime\": 0.04556703567504883}, {\"bestTime\": 0.07622599601745605}, {\"bestTime\": 0.05376005172729492}, {\"bestTime\": 0.05048203468322754}, {\"bestTime\": 0.045925140380859375}, {\"bestTime\": 0.05330204963684082}, {\"bestTime\": 0.05409407615661621}, {\"bestTime\": 0.0407710075378418}, {\"bestTime\": 0.05004119873046875}, {\"bestTime\": 0.05194592475891113}, {\"bestTime\": 0.09199190139770508}, {\"bestTime\": 0.08308196067810059}, {\"bestTime\": 0.07053399085998535}, {\"bestTime\": 0.03649187088012695}, {\"bestTime\": 0.05319499969482422}, {\"bestTime\": 0.07070612907409668}, {\"bestTime\": 0.0541379451751709}, {\"bestTime\": 38.61496615409851}, {\"bestTime\": 0.04944300651550293}, {\"bestTime\": 0.04826998710632324}, {\"bestTime\": 0.18089008331298828}, {\"bestTime\": 0.08110213279724121}, {\"bestTime\": 0.054006099700927734}, {\"bestTime\": 0.08382987976074219}, {\"bestTime\": 0.038001060485839844}, {\"bestTime\": 0.035748958587646484}, {\"bestTime\": 0.03586387634277344}, {\"bestTime\": 0.052034854888916016}, {\"bestTime\": 0.06058692932128906}, {\"bestTime\": 0.06882596015930176}, {\"bestTime\": 0.06931614875793457}, {\"bestTime\": 0.05296897888183594}, {\"bestTime\": 0.05027413368225098}, {\"bestTime\": 0.06001591682434082}, {\"bestTime\": 0.03793907165527344}, {\"bestTime\": 0.22168493270874023}, {\"bestTime\": 0.36546802520751953}, {\"bestTime\": 0.04925203323364258}, {\"bestTime\": 0.05198311805725098}, {\"bestTime\": 0.052414894104003906}, {\"bestTime\": 0.04593706130981445}, {\"bestTime\": 7.263469934463501}, {\"bestTime\": 0.20280003547668457}, {\"bestTime\": 38.12791204452515}, {\"bestTime\": 0.051457881927490234}, {\"bestTime\": 0.5840549468994141}, {\"bestTime\": 0.036553144454956055}, {\"bestTime\": 0.03576493263244629}, {\"bestTime\": 10.226379156112671}, {\"bestTime\": 0.03782796859741211}, {\"bestTime\": 0.046691179275512695}, {\"bestTime\": 0.05318403244018555}, {\"bestTime\": 0.04761004447937012}, {\"bestTime\": 0.047193050384521484}, {\"bestTime\": 0.6277909278869629}, {\"bestTime\": 0.04546403884887695}, {\"bestTime\": 0.05370521545410156}, {\"bestTime\": 0.037554025650024414}, {\"bestTime\": 3.346724033355713}, {\"bestTime\": 0.06735897064208984}, {\"bestTime\": 0.04521799087524414}, {\"bestTime\": 0.07882499694824219}, {\"bestTime\": 0.04368090629577637}, {\"bestTime\": 0.049626827239990234}, {\"bestTime\": 0.04789400100708008}, {\"bestTime\": 0.05249595642089844}, {\"bestTime\": 0.05118393898010254}, {\"bestTime\": 0.07026386260986328}, {\"bestTime\": 0.08110904693603516}, {\"bestTime\": 0.03701496124267578}, {\"bestTime\": 0.22628498077392578}, {\"bestTime\": 0.05008387565612793}, {\"bestTime\": 0.07116007804870605}, {\"bestTime\": 0.17583298683166504}, {\"bestTime\": 7.216051816940308}, {\"bestTime\": 0.04793405532836914}, {\"bestTime\": 0.050340890884399414}, {\"bestTime\": 0.15414690971374512}, {\"bestTime\": 0.04981803894042969}, {\"bestTime\": 19.58107900619507}, {\"bestTime\": 0.059409141540527344}, {\"bestTime\": 0.052896976470947266}, {\"bestTime\": 0.05083608627319336}, {\"bestTime\": 4.039516925811768}, {\"bestTime\": 0.08264899253845215}, {\"bestTime\": 0.03727889060974121}, {\"bestTime\": 0.06339907646179199}, {\"bestTime\": 0.049880027770996094}, {\"bestTime\": 0.066741943359375}, {\"bestTime\": 0.051687002182006836}, {\"bestTime\": 0.2348170280456543}, {\"bestTime\": 0.04640984535217285}, {\"bestTime\": 0.08105802536010742}, {\"bestTime\": 0.052755117416381836}, {\"bestTime\": 0.04554295539855957}, {\"bestTime\": 0.0499720573425293}, {\"bestTime\": 0.04911684989929199}, {\"bestTime\": 0.040985822677612305}, {\"bestTime\": 0.20951008796691895}, {\"bestTime\": 0.05091404914855957}, {\"bestTime\": 0.06438684463500977}, {\"bestTime\": 26.145479917526245}, {\"bestTime\": 0.04967188835144043}, {\"bestTime\": 0.08357000350952148}, {\"bestTime\": 0.04754996299743652}, {\"bestTime\": 0.05403900146484375}, {\"bestTime\": 0.04531407356262207}, {\"bestTime\": 0.05130410194396973}, {\"bestTime\": 0.03574109077453613}, {\"bestTime\": 0.06295990943908691}, {\"bestTime\": 1.5070998668670654}, {\"bestTime\": 0.0522458553314209}, {\"bestTime\": 0.0461580753326416}, {\"bestTime\": 0.0472109317779541}, {\"bestTime\": 0.08225607872009277}, {\"bestTime\": 0.26406097412109375}, {\"bestTime\": 0.037158966064453125}, {\"bestTime\": 0.06612706184387207}, {\"bestTime\": 0.05001497268676758}, {\"bestTime\": 0.05434703826904297}, {\"bestTime\": 0.08154797554016113}, {\"bestTime\": 0.054231882095336914}, {\"bestTime\": 0.050642967224121094}, {\"bestTime\": 0.21244001388549805}, {\"bestTime\": 0.04709506034851074}, {\"bestTime\": 5.675185918807983}, {\"bestTime\": 0.04806017875671387}, {\"bestTime\": 0.03807520866394043}, {\"bestTime\": 0.04532480239868164}, {\"bestTime\": 21.4584538936615}, {\"bestTime\": 0.04978013038635254}, {\"bestTime\": 0.049835920333862305}, {\"bestTime\": 0.049566030502319336}, {\"bestTime\": 0.03726792335510254}, {\"bestTime\": 0.05082297325134277}, {\"bestTime\": 0.06380605697631836}, {\"bestTime\": 1.8287739753723145}, {\"bestTime\": 0.09843301773071289}, {\"bestTime\": 0.053132057189941406}, {\"bestTime\": 0.05351614952087402}, {\"bestTime\": 0.051191091537475586}, {\"bestTime\": 0.04605293273925781}, {\"bestTime\": 0.05140209197998047}, {\"bestTime\": 0.05310988426208496}, {\"bestTime\": 0.05279898643493652}, {\"bestTime\": 0.04702901840209961}, {\"bestTime\": 0.06399011611938477}, {\"bestTime\": 0.053217172622680664}, {\"bestTime\": 0.05785989761352539}, {\"bestTime\": 0.04170680046081543}, {\"bestTime\": 0.052451133728027344}, {\"bestTime\": 0.057312965393066406}, {\"bestTime\": 0.052095890045166016}, {\"bestTime\": 0.04900407791137695}, {\"bestTime\": 0.05262494087219238}, {\"bestTime\": 0.05306696891784668}, {\"bestTime\": 0.19282984733581543}, {\"bestTime\": 0.049993038177490234}, {\"bestTime\": 0.25550007820129395}, {\"bestTime\": 0.047273874282836914}, {\"bestTime\": 0.5323131084442139}, {\"bestTime\": 13.813039064407349}, {\"bestTime\": 9.429232835769653}, {\"bestTime\": 0.05602908134460449}, {\"bestTime\": 0.035585880279541016}, {\"bestTime\": 0.06708192825317383}, {\"bestTime\": 0.049128055572509766}, {\"bestTime\": 0.0695798397064209}, {\"bestTime\": 0.13118505477905273}, {\"bestTime\": 15.62972903251648}, {\"bestTime\": 0.03807401657104492}, {\"bestTime\": 0.17219805717468262}, {\"bestTime\": 0.03628110885620117}, {\"bestTime\": 0.037042856216430664}, {\"bestTime\": 22.503747940063477}, {\"bestTime\": 0.04099893569946289}, {\"bestTime\": 0.046122074127197266}, {\"bestTime\": 0.05050206184387207}, {\"bestTime\": 0.04531598091125488}, {\"bestTime\": 0.2060849666595459}, {\"bestTime\": 0.04899001121520996}, {\"bestTime\": 0.047077178955078125}, {\"bestTime\": 0.04770517349243164}, {\"bestTime\": 0.04675602912902832}, {\"bestTime\": 0.26021504402160645}, {\"bestTime\": 0.05092191696166992}, {\"bestTime\": 0.05208992958068848}, {\"bestTime\": 0.05086398124694824}, {\"bestTime\": 0.06262588500976562}, {\"bestTime\": 0.04616808891296387}, {\"bestTime\": 0.0508880615234375}, {\"bestTime\": 0.04159998893737793}, {\"bestTime\": 0.06493306159973145}, {\"bestTime\": 0.05041193962097168}, {\"bestTime\": 0.05212092399597168}, {\"bestTime\": 0.04970908164978027}, {\"bestTime\": 0.07184696197509766}, {\"bestTime\": 0.05266904830932617}, {\"bestTime\": 0.061869144439697266}, {\"bestTime\": 0.2717781066894531}, {\"bestTime\": 0.04989790916442871}, {\"bestTime\": 0.04090690612792969}, {\"bestTime\": 0.049780845642089844}, {\"bestTime\": 0.05400991439819336}, {\"bestTime\": 23.5675630569458}, {\"bestTime\": 0.05048680305480957}, {\"bestTime\": 0.04966616630554199}, {\"bestTime\": 0.05593395233154297}, {\"bestTime\": 0.05312085151672363}, {\"bestTime\": 0.06466794013977051}, {\"bestTime\": 0.050354957580566406}, {\"bestTime\": 0.049375057220458984}, {\"bestTime\": 0.036438941955566406}, {\"bestTime\": 0.03849601745605469}, {\"bestTime\": 0.039834022521972656}, {\"bestTime\": 0.06822705268859863}, {\"bestTime\": 0.06156587600708008}, {\"bestTime\": 0.03471112251281738}, {\"bestTime\": 0.04883599281311035}, {\"bestTime\": 0.03805804252624512}, {\"bestTime\": 0.053112030029296875}, {\"bestTime\": 0.03925490379333496}, {\"bestTime\": 9.437676906585693}, {\"bestTime\": 0.050952911376953125}, {\"bestTime\": 0.04817509651184082}, {\"bestTime\": 0.06520509719848633}, {\"bestTime\": 1.5346200466156006}, {\"bestTime\": 0.0500180721282959}, {\"bestTime\": 0.047554969787597656}, {\"bestTime\": 0.06464505195617676}, {\"bestTime\": 0.05068516731262207}, {\"bestTime\": 0.07733893394470215}, {\"bestTime\": 0.05416703224182129}, {\"bestTime\": 0.05078005790710449}, {\"bestTime\": 0.06273484230041504}, {\"bestTime\": 26.18851590156555}, {\"bestTime\": 0.13066816329956055}, {\"bestTime\": 0.04934406280517578}, {\"bestTime\": 0.036203861236572266}, {\"bestTime\": 0.05158805847167969}, {\"bestTime\": 0.20652484893798828}, {\"bestTime\": 38.388652086257935}, {\"bestTime\": 0.051216840744018555}, {\"bestTime\": 0.03931903839111328}, {\"bestTime\": 0.07718586921691895}, {\"bestTime\": 0.05058002471923828}, {\"bestTime\": 29.765121936798096}, {\"bestTime\": 0.05362105369567871}, {\"bestTime\": 0.0661630630493164}, {\"bestTime\": 0.05231785774230957}, {\"bestTime\": 20.972984075546265}, {\"bestTime\": 0.05388498306274414}, {\"bestTime\": 0.08131885528564453}, {\"bestTime\": 0.06362295150756836}, {\"bestTime\": 6.131086111068726}, {\"bestTime\": 0.05049586296081543}, {\"bestTime\": 0.07636094093322754}, {\"bestTime\": 0.06663393974304199}, {\"bestTime\": 0.0431671142578125}, {\"bestTime\": 0.06457281112670898}, {\"bestTime\": 0.08757686614990234}, {\"bestTime\": 0.0561671257019043}, {\"bestTime\": 0.0426020622253418}, {\"bestTime\": 0.2076869010925293}, {\"bestTime\": 0.05434298515319824}, {\"bestTime\": 0.7734088897705078}, {\"bestTime\": 0.09232592582702637}, {\"bestTime\": 0.08394503593444824}, {\"bestTime\": 0.049163103103637695}, {\"bestTime\": 0.05494999885559082}, {\"bestTime\": 0.0517730712890625}, {\"bestTime\": 0.03581881523132324}, {\"bestTime\": 0.04373598098754883}, {\"bestTime\": 0.05263495445251465}, {\"bestTime\": 0.22538208961486816}, {\"bestTime\": 0.03964400291442871}, {\"bestTime\": 48.347079038619995}, {\"bestTime\": 0.04868793487548828}, {\"bestTime\": 0.0514531135559082}, {\"bestTime\": 0.08382678031921387}, {\"bestTime\": 0.051396846771240234}, {\"bestTime\": 0.13301706314086914}, {\"bestTime\": 0.04005098342895508}, {\"bestTime\": 0.05080604553222656}, {\"bestTime\": 0.05305790901184082}, {\"bestTime\": 0.08378481864929199}, {\"bestTime\": 0.04558396339416504}, {\"bestTime\": 0.052507877349853516}, {\"bestTime\": 0.04609799385070801}, {\"bestTime\": 12.726213932037354}, {\"bestTime\": 0.05047321319580078}, {\"bestTime\": 0.0637369155883789}, {\"bestTime\": 0.05295920372009277}, {\"bestTime\": 0.038411855697631836}, {\"bestTime\": 0.05961799621582031}, {\"bestTime\": 0.07020020484924316}, {\"bestTime\": 0.037138938903808594}, {\"bestTime\": 0.06649303436279297}, {\"bestTime\": 0.05061602592468262}, {\"bestTime\": 0.0933229923248291}, {\"bestTime\": 0.0822300910949707}, {\"bestTime\": 0.07895898818969727}, {\"bestTime\": 0.048879146575927734}, {\"bestTime\": 0.7074010372161865}, {\"bestTime\": 0.046655893325805664}, {\"bestTime\": 0.03770589828491211}, {\"bestTime\": 0.04755902290344238}, {\"bestTime\": 0.05135917663574219}, {\"bestTime\": 38.61156392097473}, {\"bestTime\": 0.06547284126281738}, {\"bestTime\": 0.06762194633483887}, {\"bestTime\": 0.07625102996826172}, {\"bestTime\": 0.05163288116455078}, {\"bestTime\": 0.051998138427734375}, {\"bestTime\": 0.07120203971862793}, {\"bestTime\": 0.06932902336120605}, {\"bestTime\": 0.5341579914093018}, {\"bestTime\": 0.036889076232910156}, {\"bestTime\": 4.017160892486572}, {\"bestTime\": 0.047158002853393555}, {\"bestTime\": 0.0553591251373291}, {\"bestTime\": 0.0509340763092041}, {\"bestTime\": 0.15563297271728516}, {\"bestTime\": 0.04880499839782715}, {\"bestTime\": 20.08298397064209}, {\"bestTime\": 0.04558587074279785}, {\"bestTime\": 0.050427913665771484}, {\"bestTime\": 7.363609075546265}, {\"bestTime\": 0.049185991287231445}, {\"bestTime\": 0.06242108345031738}, {\"bestTime\": 0.06392693519592285}, {\"bestTime\": 0.042643070220947266}, {\"bestTime\": 0.05414605140686035}, {\"bestTime\": 0.04631996154785156}, {\"bestTime\": 0.04698681831359863}, {\"bestTime\": 0.08186793327331543}, {\"bestTime\": 0.09124207496643066}, {\"bestTime\": 0.0513761043548584}, {\"bestTime\": 0.05143904685974121}, {\"bestTime\": 0.051396846771240234}, {\"bestTime\": 0.04797005653381348}, {\"bestTime\": 0.05212998390197754}, {\"bestTime\": 0.04693913459777832}, {\"bestTime\": 0.0510411262512207}, {\"bestTime\": 0.05442380905151367}, {\"bestTime\": 0.0513920783996582}, {\"bestTime\": 0.0520479679107666}, {\"bestTime\": 0.2225029468536377}, {\"bestTime\": 0.05081915855407715}, {\"bestTime\": 0.05182790756225586}, {\"bestTime\": 0.05202913284301758}, {\"bestTime\": 0.03720808029174805}, {\"bestTime\": 0.04657101631164551}, {\"bestTime\": 0.07222700119018555}, {\"bestTime\": 0.051896095275878906}, {\"bestTime\": 0.036067962646484375}, {\"bestTime\": 0.5831630229949951}, {\"bestTime\": 0.03655600547790527}, {\"bestTime\": 0.05005502700805664}, {\"bestTime\": 0.03738594055175781}, {\"bestTime\": 0.2029740810394287}, {\"bestTime\": 0.07985806465148926}, {\"bestTime\": 7.3980631828308105}, {\"bestTime\": 0.050090789794921875}, {\"bestTime\": 0.047373056411743164}, {\"bestTime\": 0.035475969314575195}, {\"bestTime\": 0.1622309684753418}, {\"bestTime\": 0.051093101501464844}, {\"bestTime\": 0.08332610130310059}, {\"bestTime\": 0.052934885025024414}, {\"bestTime\": 0.05465292930603027}, {\"bestTime\": 0.05316901206970215}, {\"bestTime\": 0.06692695617675781}, {\"bestTime\": 0.05311989784240723}, {\"bestTime\": 0.04711604118347168}, {\"bestTime\": 0.047039031982421875}, {\"bestTime\": 0.047760009765625}, {\"bestTime\": 0.051876068115234375}, {\"bestTime\": 0.050106048583984375}, {\"bestTime\": 0.04802393913269043}, {\"bestTime\": 0.060175180435180664}, {\"bestTime\": 0.05141496658325195}, {\"bestTime\": 0.04825401306152344}, {\"bestTime\": 0.0660848617553711}, {\"bestTime\": 0.05197405815124512}, {\"bestTime\": 4.112929105758667}, {\"bestTime\": 0.05241990089416504}, {\"bestTime\": 7.421210050582886}, {\"bestTime\": 0.14362502098083496}, {\"bestTime\": 0.04665994644165039}, {\"bestTime\": 0.05097508430480957}, {\"bestTime\": 10.254784107208252}, {\"bestTime\": 0.5899279117584229}, {\"bestTime\": 7.626478910446167}, {\"bestTime\": 37.73944401741028}, {\"bestTime\": 0.04232597351074219}, {\"bestTime\": 0.20569086074829102}, {\"bestTime\": 0.07956910133361816}, {\"bestTime\": 0.055413007736206055}, {\"bestTime\": 0.04674696922302246}, {\"bestTime\": 0.07648801803588867}, {\"bestTime\": 0.03573107719421387}, {\"bestTime\": 0.06991291046142578}, {\"bestTime\": 0.045204877853393555}, {\"bestTime\": 3.333004951477051}, {\"bestTime\": 0.051434993743896484}, {\"bestTime\": 0.04800891876220703}, {\"bestTime\": 0.03911399841308594}, {\"bestTime\": 12.299826860427856}, {\"bestTime\": 0.05094313621520996}, {\"bestTime\": 0.04707503318786621}, {\"bestTime\": 0.04802203178405762}, {\"bestTime\": 0.052435874938964844}, {\"bestTime\": 0.06584405899047852}, {\"bestTime\": 0.04680299758911133}, {\"bestTime\": 0.05272984504699707}, {\"bestTime\": 0.12859702110290527}, {\"bestTime\": 0.0448458194732666}, {\"bestTime\": 0.03874015808105469}, {\"bestTime\": 0.05265998840332031}, {\"bestTime\": 51.037073850631714}, {\"bestTime\": 0.036657094955444336}, {\"bestTime\": 0.05334901809692383}, {\"bestTime\": 0.03850293159484863}, {\"bestTime\": 0.05236387252807617}, {\"bestTime\": 0.04907393455505371}, {\"bestTime\": 0.051587820053100586}, {\"bestTime\": 0.3718118667602539}, {\"bestTime\": 0.05538511276245117}, {\"bestTime\": 0.04992389678955078}, {\"bestTime\": 0.22314810752868652}, {\"bestTime\": 0.0666649341583252}, {\"bestTime\": 0.05099177360534668}, {\"bestTime\": 0.05290102958679199}, {\"bestTime\": 0.036366939544677734}, {\"bestTime\": 0.06836295127868652}, {\"bestTime\": 0.0500340461730957}, {\"bestTime\": 0.07100486755371094}, {\"bestTime\": 0.0654458999633789}, {\"bestTime\": 0.05725717544555664}, {\"bestTime\": 0.0526580810546875}, {\"bestTime\": 0.17577290534973145}, {\"bestTime\": 0.051835060119628906}, {\"bestTime\": 0.06651592254638672}, {\"bestTime\": 0.05187702178955078}, {\"bestTime\": 0.07094717025756836}, {\"bestTime\": 0.07584118843078613}, {\"bestTime\": 0.08513307571411133}, {\"bestTime\": 0.6931679248809814}, {\"bestTime\": 0.046340227127075195}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}]}};\n", + "var selector = \"#4a20f535-b2f2-4a27-9958-4d8c45131ddc\";\n", + "var type = \"vega-lite\";\n", + "\n", + "var output_area = this;\n", + "require(['nbextensions/jupyter-vega3/index'], function(vega) {\n", + " vega.render(selector, spec, type, output_area);\n", + "}, function (err) {\n", + " if (err.requireType !== 'scripterror') {\n", + " throw(err);\n", + " }\n", + "});\n" + ] + }, + "metadata": { + "jupyter-vega3": "#4a20f535-b2f2-4a27-9958-4d8c45131ddc" + }, + "output_type": "display_data" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgAAAAFZCAYAAADuEZdYAAAAAXNSR0IArs4c6QAAK/NJREFUeAHt3X+sJeV93/F7DNiwBHvXYTHdreoLN1ogESBk2rgOJY4Eqm1AahuMd8kf7B/YsboOruofQFtp76ZJ78UslVzZSmpwBVXNEmpXqb24brFlFq3TSo6KMEkJG264WxXieh2zEAJeU3b7+dz7fNeT2Tn3zsw9M+fMnfcjfe/8ODPzPM9rZne+Z+acOVNTFAQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQ6KTAoJOtrtDoL37xiyfe+973VliDRRFAAAEEEFhfAjMzM6ec709fX108tTdHjhyZKur4qUsyBwEEEEAAgfUnsLCwcKKoV28qmsk8BBBAAAEEEFjfAiQA63v/0jsEEEAAAQQKBUgAClmYiQACCCCAwPoWIAFY3/uX3iGAAAIIIFAoQAJQyMJMBBBAAAEE1rcACcD63r/0DgEEEEAAgUKBdf81QPf6+n/+8NbC3q8yc/9v3/T8KovwMgIIIIAAAp0U6EUCMPXG8f9Tc++c8uCEmtthNQQQQAABBCZKgFsAE7U7aAwCCCCAAALtCJAAtONMLQgggAACCEyUAAnARO0OGoMAAggggEA7AiQA7ThTCwIIIIAAAhMlQAIwUbuDxiCAAAIIINCOAAlAO87UggACCCCAwEQJkABM1O6gMQgggAACCLQjQALQjjO1IIAAAgggMFECJAATtTtoDAIIIIAAAu0IkAC040wtCCCAAAIITJQACcBE7Q4agwACCCCAQDsCJADtOFMLAggggAACEyVAAjBRu4PGIIAAAggg0I4ACUA7ztSCAAIIIIDARAmQAEzU7qAxCCCAAAIItCNAAtCOM7UggAACCCAwUQIkABO1O2gMAggggAAC7QiQALTjTC0IIIAAAghMlECbCcBm9dwxrJyuFyKy7dqk+Y5s8XJbFNnlsq8zjgACCCCAAAIrCLR1An1Sbfiu4suKEwqfwLPFJ/PXFd9SPKu4UeGyX/GE4rE0rsFSEuFl9yreUHhdCgIIIIAAAghUEMifiCusWnrRaS15mWKQ1jig4fsVX0vTHrxLsVPxgCKKT+zXKWI9Jw7TCicE3t5TijnF84pYRqMUBBBAAAEEEFhNoI0rAIfViA2pIU44rlb45J0tF2vifoVP8g7fKrhKcY8iyj6NnKvYqHg6zTyUhgwQQAABBBBAoIJAG1cAfEJ/TXGN4lGFT+qLimw5WxPXKr6p2KXwif2zilcUUTxva5o4noa+FXCyzM3NzQ4Gg90nZ6xxZGFhwW2nIIAAAgggsO4E2rp0/qDkdijOUxwpUHQ74mTrpMQn9osUs4qbFS4vKq5Q+BbA+Ypjii2KFW8BzM/Pnzh4dFqLVS/757e35VO9cayBAAIIIIBACQG/mZ2ZmTnlfNbGLQBfzvfJ/0zFDxVx1cF1b1O4+B19jPvzAUcVPuF7PS/vZX3p/6UUd2ro4qsGjy+N8QcBBBBAAAEESgvEybj0CjUWfHda58eZdS/Q+E8UzyiclfhE7vEovtTvKwV7FHGZf6fGnRRconhVEZf6T9M4BQEEEEAAAQQqCLSRAPjT/qdcetA8v6s/nNrqe/+efrPiWJrnwazCn/R3ifn+PIG3d5bC4xQEEEAAAQQQqCjQRgIwrEln6IVLMy/6MwBxks/MLpzn1zn5Z5UYRwABBBBAoILAOBMAn+yLTvgVms+iCCCAAAIIIFBHwJfdKQgggAACCCDQMwESgJ7tcLqLAAIIIICABUgAOA4QQAABBBDooQAJQA93Ol1GAAEEEECABIBjAAEEEEAAgR4KkAD0cKfTZQQQQAABBEgAOAYQQAABBBDooQAJQA93Ol1GAAEEEECABIBjAAEEEEAAgR4KkAD0cKfTZQQQQAABBEgAOAYQQAABBBDooQAJQA93Ol1GAAEEEECABIBjAAEEEEAAgR4KkAD0cKfTZQQQQAABBEgAOAYQQAABBBDooQAJQA93Ol1GAAEEEECABIBjAAEEEEAAgR4KkAD0cKfTZQQQQAABBEgAOAYQQAABBBDooQAJQA93Ol1GAAEEEECABIBjAAEEEEAAgR4KkAD0cKfTZQQQQAABBEgAOAYQQAABBBDooQAJQA93Ol1GAAEEEECABIBjAAEEEEAAgR4KkAD0cKfTZQQQQAABBEgAOAYQQAABBBDooQAJQA93Ol1GAAEEEECABIBjAAEEEEAAgR4KkAD0cKfTZQQQQAABBEgAOAYQQAABBBDooQAJQA93Ol1GAAEEEECABIBjAAEEEEAAgR4KkAD0cKfTZQQQQAABBEgAOAYQQAABBBDooQAJQA93Ol1GAAEEEECABIBjAAEEEEAAgR4KkAD0cKfTZQQQQAABBEgAOAYQQAABBBDooQAJQA93Ol1GAAEEEECABIBjAAEEEEAAgR4KkAD0cKfTZQQQQAABBEgAOAYQQAABBBDooUCbCcBm+TqGldP1whZFvk2bNM+RLcOWzS7DOAIIIIAAAggMEcifbIcstubZT2oL31V8WXFC4RN4tjgxeF2xV/GGwomAy37FE4rH0rgGS0lE0bJ+jYIAAggggAACJQTyJ+ISq1ReZFprXKYYpDUPaPh+xdfStAeHFF7mKcWc4nnFVsV1iljPicO0wglBftlYRi9REEAAAQQQQGA1gTauABxWIzakhjjhuFrhE322bNTE02mGkwGXqxT3LI0t/9mnwbmKomUzizGKAAIIIIAAAqsJtHEFwO/cX1Nco3hU4ZP6oiJKJCHH0wxf3nf5ecUrS2PLf5wY+KqAS37ZpZlzc3Ozg8Fg99LECP4sLCy47RQEEEAAAQTWnUBbl84flNwOxXmKIwWKL2re+YpjCt//9y2AixSzipsVLl7mCoVvAeSXHdqP+fn5EwePTmuV6mX//Pah262+NdZAAAEEEECgfQG/mZ2ZmTnlfBbvvptskT/g55P/mYofKuKqg+vepnB5SXHn0tjU1LUaPq7wCd/reXkv60v/Xq5oWc2mIIAAAggggEBZgTgZl12+znLvTiv9OLPyBRr/ieIZhbOSSxSvKuLy/Wka92X+PYq4JbBT404KipbVbAoCCCCAAAIIlBVoIwHwp/1PufSgeX5Xfzg11J8R8DJnKTweZVYj/laAy7HlwdLrRcumlxkggAACCCCAwGoCbSQAw9pwhl64NPdi9uQfL8WJP6ZjWLRsvMYQAQQQQAABBFYQGGcC4BP7sJP7Ck3mJQQQQAABBBBYq4Avw1MQQAABBBBAoGcCJAA92+F0FwEEEEAAAQuQAHAcIIAAAggg0EMBEoAe7nS6jAACCCCAAAkAxwACCCCAAAI9FCAB6OFOp8sIIIAAAgjUSQD8EJ74+uCVGvejfikIIIAAAggg0CGBqgnAW9Q3P6L3Xyj8Az/fVfxAkX+gj2ZREEAAAQQQQGBSBaomALemjjyn4Q7F4yk+l+YzQAABBBBAAIEOCFRNADaoT99THEh9u1HDf6e4Ok0zQAABBBBAAIEOCFRNAA6rT5cpfAXA5QOK+xX3KigIIIAAAggg0BGBqgnAl9UvXwFw+ZjivKWxqanb05ABAggggAACCHRAID7NX7ap/gDg5ZmFvf5exYnMPEYRQAABBBBAYMIFyl4B+JT64ZN8Pl7XPCcFfp2CAAIIIIAAAh0RKJsA/In640v/cfnf3dunOOoRFb9OQQABBBBAAIGOCJS9BfA19cdxg+KrijMVxxQuvirwt5bG+IMAAggggAACnRAoewUgOnNxGvHXAV1ifW4BLHvwFwEEEEAAgU4IxAm8bGO/kRb8kYYvKt5I07+RhgwQQAABBBBAoAMCVROAp9QnPwfAzwPYqPBnAD6k8O0BCgIIIIAAAgh0RKDsZwCiOzdp5DOK6ZjBEAEEEEAAAQS6J1D1CsCfqYvvVPhXACkIIIAAAggg0FGBqgnAhamf/hXA7DMBdnW0/zQbAQQQQACBXgpUvQXwvJR83/+ljNbbNP5KZppRBBBAAAEEEJhwgaoJwHfUn02KsxTvUDgR8LcBKAgggAACCCDQIYGqtwDctf2KVxXPKfx1wCcVAwUFAQQQQAABBDoiUDUB+CX16zrF4wp//e8Rhb8W+EkFBQEEEEAAAQQ6IlA1AXhP6tcva/iw4nqFPxPAhwCFQEEAAQQQQKArAlUTgOjXOWnEnyHwA4H8YCAKAggggAACCHREoGoC8KXUr5c19NcA/XPALp9YHvAXAQQQQAABBLogUDUBeEGdukDhnwX2u37HVYo/VFAQQAABBBBAoCMCVROA6Na/1si0wj8C5G8DUBBAAAEEEECgQwJVE4At6ptP+PenPn5VQz8caFuaZoAAAggggAACHRComgD8w9SnrWn41jS8twN9pYkIIIAAAgggkASqJgAb0nrfT8O/TMN3piEDBBBAAAEEEOiAQNUE4D+nPr2h4aLC3wRw2b084C8CCCCAAAIIdEGgagJwSJ3yp/798J94179H4w8oKAgggAACCCDQEYGqPwbkbv2Bwk8A/DmFnwZ4poKCAAIIIIAAAh0SqJoAePl4+I+7+azioMIfCvQzAigIIIAAAggg0AGBqrcAfj31yT8E5PK/lgdTe9OQAQIIIIAAAgh0QKBqAhBd8qV/lxcV/kXAX/AEBQEEEEAAAQS6IVA1AfjfqVtPpuGDGvrngb+QphkggAACCCCAQAcEqiYAX1Of/NCfy1Lfdmjo3wX4nTTNAAEEEEAAAQQ6IFA1AfCHAD+q8Cf/367wkwAvV5yhKFPOWmEhbzsi265Nmu/IFi/nxxJnl8u+zjgCCCCAAAIIrCBQ5QR6QNvxNwD8EKBbFb+veFnhhwHdqVipuJ4rFa8OWcgnc2/7Wwp/s+BGhct+xROKx9K4BlObFV7WHzx0W7wuBQEEEEAAAQQqCPiddJnik/fVisNp4c/lVnouN52f/F3N+LAi1s+//i7N2KnIPlDIJ3Z/vmCgcHGiMa1wQuBbEE8p5hT+MaJYRqMUBBBAAAEEEFhNoOwVgF9JG7pQQ4fLPQqfeB0PKFYqH9GL5yni6YH5ZS/WjPsVPsk7/C7fTxx0HVH2aeRcxUbF02nmoTRkgAACCCCAAAIVBMpeAYhL93GCdhXPVajHi569wvJ+7VrFNxW7FD6xf1bxiiKK521NE8fT0LcCTpa5ubnZwWCw++SMNY4sLCy4vxQEEEAAAQTWnYDfvZcpPin7sv9Fip8ofPK/V3G7wh/s8/MAXlOsVLboxWGX692OONk6KfGJ3XXNKm5WuLiOKxS+BXC+4phipW3q5amp+fn5EwePTi+NV/2zf357WZ+qm2Z5BBBAAAEEWhHwm9mZmZlTzmdlbwHEzwA/o9b65O/yYcWPFD6p/0vFauXNuQVc97Y0z+/oY/z9GvePDfmE768ZOiHwsr70/1KK+NChrxo8rqAggAACCCCAQAWBsrcA/mPaZtwKyFbh5OAb2RlDxn3lwCf2KH4X74TCWYlP5B6P4kv9RxR7FHGZf6fGnRRconA7ditcTlse8BcBBBBAAAEEygqUTQAWtcG7y250yHIvaP6mzGvf1/jhNO17/36X76sEx9I8D2YV/qS/S8z3rQYnDb71sNptBy1CQQABBBBAAIG8QNkEIL/eKKbP0EYuzWzInwGIk3xmduE8v87JP6vEOAIIIIAAAhUExpkA+GRfdMKv0HwWRQABBBBAAIE6Ar7sXqb4A3o3KN6iuKXMCiyDAAIIIIAAApMrUPYKgL+K5w/d7VPsUPyMIkp8CNBP5qMggAACCCCAQAcEyiYAX1FfnAD45O+SfxTwOzTvk0uv8AcBBBBAAAEEJl6gbALgd/f+ut3fVRxU+NcAs7cP4qt6mk1BAAEEEEAAgUkXKJsAuB9+WM93FP6q3j9R+Kl8hxR+Xj+fyBcCBQEEEEAAga4IVEkA3Cd/CPDHuc751oAf3OPv+VMQQAABBBBAoAMC2cv4ZZq7PS3kX+rz9/gvStN705ABAggggAACCHRAoOoVAH/634/z9a0AF98C8LSf309BAAEEEEAAgY4IVL0C4G5tVPjXATcrbkrTX9SQggACCCCAAAIdEaiaAPxO6pe/BvgDxe+laf9oDwUBBBBAAAEEOiJQ9RaAvwngH+K5UvELiucV31KcUFAQQAABBBBAoCMCVROA6NYfasRBQQABBBBAAIEOClS9BdDBLtJkBBBAAAEEEMgLVE0AfPm/7lWDfN1MI4AAAggggMCYBKomAH7ojx/760SAggACCCCAAAIdFaiaANyf+nm3hpsy4ScEUhBAAAEEEECgIwJVE4APpn59QsMfZeK3O9JfmokAAggggAACEqh6P/8+rePv/2d//OcsTf93BQUBBBBAAAEEOiJQ9QrAi+rXw4p3Kv6B4tuKZxV+JDAFAQQQQAABBDoiUPUKwDnq18uZvn1e4wcVlymeysxnFAEEEEAAAQQmWKDqFYCPpr74hO/yPxX+MSA/GpiCAAIIIIAAAh0RqJoARLf+KI34swDfi5kMEUAAAQQQQKAbAlVvAfiev4t/E8BlUeHPA3xIQUEAAQQQQACBjghUvQLg5//vzPTNJ/97FP5gIAUBBBBAAAEEOiJQ9QqAu/XvFf4VwL+Zhv41QAoCCCCAAAIIdEigagLgJ/79uKB/52nekYL5zEIAAQQQQACBCRSoegvg1tSHPRpuVcS9f54EOIE7lyYhgAACCCAwTKBqAvBK2tCshi8ouPefQBgggAACCCDQJYGyCYB/+GebIh4BPKvxLYqbFC7fWR7wFwEEEEAAAQS6IFA2Afi4OvOM4vdSp3Zr6A8CxvQFaT4DBBBAAAEEEOiAQNkPAd6lvuxXHCvokz8YeLhgPrMQQAABBBBAYEIFyiYAvvTvZwC4TCsu9Uim/FDjfAsgA8IoAggggAACkyxQNgGIPvjEX/ToXz8M6JOxEEMEEEAAAQQQmGyBqgnA+1J3/raG/haAy5sVf740xh8EEEAAAQQQ6IRA1QQgfgvgj9W7+EZAJzpKIxFAAAEEEEDgpwJlvwUQa/ibAC6vKk5kYlbjFAQQQAABBBDoiEDVKwAfTf3y5wB8FcDFTwR8dGmMPwgggAACCCDQCYGqCUB83e/yTvSORiKAAAIIIIBAoUDVBOBHaSsPahgfAnyrxh9Q8DTAhMMAAQQQQACBSReomgBclDq0I9cxJwMkADkUJhFAAAEEEJhUgaoJwOfVkfsKOvN6wTxmIYAAAggggMCEClRNAK5UPz6ieDnTH24BZDAYRQABBBBAoAsCVROA69WpDxd07E81j1sABTDMQgABBBBAYBIFqj4H4DfViTNTnKHh21On4gFBaXLo4Kyhr0xNORnxTwzn2+SfInZky7Bls8swjgACCCCAAAJDBPIn2yGLnZx9XGP+RUDH/1O8qPBXA31lYKXienz7wA8QKiqbNdOfI9ireEPhRMDFv0D4hOKxNK7B1LBl/RoFAQQQQAABBEoIVE0Admmb2ScAevydJer5XS3zXUU8RyC/yiHNuExxcxo+r6GTgOsU0wo/dyDGi5bVyxQEEEAAAQQQKCtQNQE4kjZ8VMOIRzT+W6tU6A8OnqcYlixs1GtPp234BO9ylcK/Mhhln0bOVRQtG8swRAABBBBAAIESAlU/BPiwtumoU84eslIkIb694BJfKfx5jb+yNGf5jxODrWk6v+zS7Lm5udnBYLA7LbPmwcLCgq9wUBBAAAEEEFh3AoOSPdql5T63wrKf1mt3r/C6X/IlfV/aL6rTnyU4X+HPFsRyfujQrOJmhYuXuULhzwTkly3aphabmpqfnz9x8Oj00njVP/vntw/dbtVtsTwCCCCAAALjEPCb2ZmZmVPOZ/Hue7U2+dL/YYV/BOhxhS/HVy1vzq3gureleS9peGcav1ZD1+ET/g6Fr1J4WV/693JFy2o2BQEEEEAAAQTKCpS9BZC/9O8rAj45u+xUPOCRVcpP9Lo/NxDF7+KfUTgruUThbwjE5fvTNO7L/HsUcUtgp8adFBQtq9kUBBBAAAEEECgrUDYBiO1do5FH08S9Gv5jhb8OWKa8oIU2ZRb8vsZ9VcHlNYUTAT8nwONRZjUylyaOpeGwZdPLDBBAAAEEEEBgNYGyCYBP3H+m8GV4F9+fP6TwSduX5/1huaofmPODhC5VZEv25B/z48Qf0zEsWjZeY4gAAggggAACKwj45F2mfFwLxcnfy/vSvU/4vkzvB/fEpXuNli4+sf9l6aVZEAEEEEAAAQRGJlD2CsBXVOOVCl/Gz5ef0YyD+ZlMI4AAAggggMDkCpRNAJ5SF1Z73O/k9pKWIYAAAggggMBfEyh7C+CvrcQEAggggAACCHRbgASg2/uP1iOAAAIIIFBLgASgFhsrIYAAAggg0G0BEoBu7z9ajwACCCCAQC0BEoBabKyEAAIIIIBAtwVIALq9/2g9AggggAACtQRIAGqxsRICCCCAAALdFiAB6Pb+o/UIIIAAAgjUEiABqMXGSggggAACCHRbgASg2/uP1iOAAAIIIFBLgASgFhsrIYAAAggg0G0BEoBu7z9ajwACCCCAQC0BEoBabKyEAAIIIIBAtwVIALq9/2g9AggggAACtQRIAGqxsRICCCCAAALdFiAB6Pb+o/UIIIAAAgjUEiABqMXGSggggAACCHRbgASg2/uP1iOAAAIIIFBLgASgFhsrIYAAAggg0G0BEoBu7z9ajwACCCCAQC0BEoBabKyEAAIIIIBAtwVIALq9/2g9AggggAACtQRIAGqxsRICCCCAAALdFiAB6Pb+o/UIIIAAAgjUEiABqMXGSggggAACCHRbgASg2/uP1iOAAAIIIFBLgASgFhsrIYAAAggg0G0BEoBu7z9ajwACCCCAQC0BEoBabKyEAAIIIIBAtwVIALq9/2g9AggggAACtQRIAGqxsRICCCCAAALdFiAB6Pb+o/UIIIAAAgjUEiABqMXGSggggAACCHRbgASg2/uP1iOAAAIIIFBLgASgFhsrIYAAAggg0G0BEoBu7z9ajwACCCCAQC0BEoBabKyEAAIIIIBAtwVIALq9/2g9AggggAACtQRIAGqxsRICCCCAAALdFiAB6Pb+o/UIIIAAAgjUEpikBOB09SAi265Nmu/IFi+3RZFdLvs64wgggAACCCCwgsCknEB9Mn9d8S3Fs4obFS77FU8oHkvjGkxtVnjZvYo3FF6XggACCCCAAAIVBPxOehLKu9SInYoHMo3xif06xSDNO6HhtMIJwWWKpxRziucVsYxGKQgggAACCCCwmsCkXAG4WA29X+GTvMPv8q9S3KOIsk8j5yo2Kp5OMw+lIQMEEEAAAQQQqCAwKVcAzlabr1V8U7FL4RP7ZxWvKKJ43tY0cTwNfSvgZJmbm5sdDAa7T85Y48jCwoKTEQoCCCCAAALrTmBSLp27HXGydVLiE/tFilnFzQqXFxVXKHwL4HzFMcUWxYq3AObn508cPDqtxaqX/fPbJ8WneuNZAwEEEEAAAQn4zezMzMwp57NJuQXgd/Tb0p56v4ZHFT7h71A4IXA7fen/pRR3aujiqwaPL43xBwEEEEAAAQRKC0zKLQCfyJ/JtNqX+o8o9ijiMv9OjTspuETxqiIu9Z+mcQoCCCCAAAIIVBCYlCsAvvfvtpyp8GWKFxQuswrPczygcHlN4WU2pGF8HkCTFAQQQAABBBAoIzApVwDcVn8GwPf186VonpdxIkBBAAEEEEAAgRoCk3IFoEbTWQUBBBBAAAEE6gqQANSVYz0EEEAAAQQ6LEAC0OGdR9MRQAABBBCoK0ACUFeO9RBAAAEEEOiwAAlAh3ceTUcAAQQQQKCuAAlAXTnWQwABBBBAoMMCJAAd3nk0HQEEEEAAgboCJAB15VgPAQQQQACBDguQAHR459F0BBBAAAEE6gqQANSVYz0EEEAAAQQ6LEAC0OGdR9MRQAABBBCoK0ACUFeO9RBAAAEEEOiwAAlAh3ceTUcAAQQQQKCuAAlAXTnWQwABBBBAoMMCJAAd3nk0HQEEEEAAgboCJAB15VgPAQQQQACBDguc3uG2t9L0D9zx0K11Kvr6/Pb76qzHOggggAACCLQhQAKwirIukdy7yiLDXiYBGCbDfAQQQACBsQtwC2Dsu4AGIIAAAggg0L4ACUD75tSIAAIIIIDA2AVIAMa+C2gAAggggAAC7QuQALRvTo0IIIAAAgiMXYAEYOy7gAYggAACCCDQvgAJQPvm1IgAAggggMDYBUgAxr4LaAACCCCAAALtC5AAtG9OjQgggAACCIxdgARg7LuABiCAAAIIINC+AAlA++bUiAACCCCAwNgFSADGvgtoAAIIIIAAAu0L8FsADZpf9+mH/lGdzT/yme3/qc56rIMAAggggEBZARKAslI1lhu8aeorNVbzKoOa67EaAggggAACpQS4BVCKiYUQQAABBBBYXwIkAOtrf9IbBBBAAAEESgmQAJRiYiEEEEAAAQTWlwCfAZjQ/Xn9HQ/dW6dp++e3f7jOeqyDAAIIINAvARKAyd3ft9ZsGglATThWQwABBPokwC2APu1t+ooAAggggEASIAHgUEAAAQQQQKCHAtwCWIc7XZ8f+HadbunzA79SZz3WQQABBBDongAJQPf2WZkWv7fMQiyDAAIIINBfAW4B9Hff03MEEEAAgR4LkAD0eOfTdQQQQACB/gpwC6C/+76w59fd/lCt3y945K7tv3rdHfv+R+FGV5n5yPyOd6+ySGMv//07Hv65Ohv/r/M3PVtnPdZBAAEEJkWABGBS9sSEtGMwmKr1C4Zu/mBq8It1u3H9HfuerLPu/vkdl9dZL9Y5Y+r4n8Z4xSE/2FQRjMURQGCyBLqaALjd5ym+rzg+WaS0pp7A4LJ6601NfeD2h+6qs+7X79p+e531Yp3rb3/o1RivMtx/1/YNVZYf5bLjshplH7qwLX4KvAt7iTZ2MQHYrN32A8U+xQ7FVsULCkpPBd40mPp0za6vKQHQJY+zatY7Na7bJWuxWkub9dXUX6tjpa+mfkm3pf5NnXV1W+q2OuuNYh1+CnwUimyjaYEuJgCHhOJ3i08p5hTPK7gcKwRKdwTWcrtEJ8S/qNNTnRB/ts56sc5a2qxt/IfYTsXhl3Rb6jcqrhOL37aWW0vj+j2OtdQ7rmPjff/swVpX8L7xr27+XuystocfuOOhW+vU+fX57ffVWS/WmSSrLiYAGwX5dMJ0MkBBoFcCOiG+vVcdXlNn699aUrW1ThBab62/x1G73rUcG7qldaIOtW5pDU4//qZan+FRfYO11KtkqV6b57frIs1UrR9cU5vvW0ubx2E1bL927Z2zv7b4huI0he/9x/RSP+bm5h4bDAa/rPkUBBBAAAEEEJDAhg0bpm677baune8L992LmvuW9MoWDVfMAOfn51d8vbCGEcyk3hEgltgEziWQRrAIziNALLEJnEsgjWARnJcRu/ggoJfU9DvTMXCtho+ncQYIIIAAAgggUFKgi58BuER989evdqc++nYABQEEEEAAAQQqCHTxCsBr6p/vZfi71B7yHAAhUBBAAAEEEKgi0MUEIPrnRGDVcuLEiQOrLtTAAqp3TwObXXWT1Lsq0UgWwHkkjKtuBOdViUayAM4jYVx1I31zXhWEBRBAAAEEEEAAAQQQQAABBBBAAIGRCvixrX6McJvlnDYrU13uo78a2Vbxh0j9OYxscZ/dhiZvLxXVG31v6oOt3q775Xqypenjali90YamjrFh9YZz1D/qYXjmj5+mj6th9UZ/mzquwm9TjKRhtCc3e+ST+XqjgqaOq9h+vt5wjtdHPfT+i8geW00fV1Gnh9l6o7+ev9Ziy/z/+95u0/8Pr7Xdra1/k2ry8wD2p2F2RzTViAdTXU1tP7/dWc3wMxKijz7Amix+FoPr25apZJfG7Rx9n868NqrRonov1cZd7xfScFrDURb3Mdsv99Ol6eNqWL3Ltf/UOaZHNRxW76wqaPIYu0HbzzpfmTrU9HE1rN6mj6vUvalrUr/j/6Wmj6th9cb8+Pcb06Me5vs7qwqaPK58IvRx5c+DLSrs69L0cTWs3lEeV7PqR/bfjE/8fqObned29Lb4HaoxDOPik8SsRxoscYAvNlhHdtPRx3g37iTA/6k1VXyALSrsOq1w8X9eno7/xFz/AcUoS1G90ffYv17G/8BGWdyv2KYTK0/n623iuCqqN/rV5DFWVG/010OXJo4x1+sEz8X9s2kbx1VRvdHfJo8r9/Mchet3uK/5eps4rlTNKfV6nkuTx5W3P6y/TR5XN6jeW1x5prRxXBXVm9+/a/n/aov64+MmihNm+zqZujTN9DC7TJrdn4Evj2QBfknT/kfVVPEOcH3TCu+Itoqzdtfnvrn++I9Uo40V1zed2Xr2qsOTmj+beW2Uo9l64x+U57nfBxSeN8qS7dct2rDraeO4KqrX/Wr6GBtWb1vHWBj7ZOSSbU+Tx1W23jaOK/fNx5JPAh76pNTGcaVqTqnX85o+robV2/Rx9anUXxuHt9vS9HFVVO8oj6tIAKJfrs/F05G4+jzg6cLiA269l7epg0cznfSvBxquqfKyNvxWxV8p/MNFbZX3qKLvpHCdzvzaLv5q5maFDzi7/6airfJBVeTj2eZ3j7hS98v/oHzyuV/hH+Np47gqqldVTzV9jA2rt61j7AL10f9m3+fOqrR1XOXrdd1NHlc+8X1IccQVqcS/m6b/vyqq1/U3fVwNq7fp4+ps9c1PjfXJ92OKQwqXpo+rYfW67lEeV1u1vTMVn1FcrHCJ5+O8vjzZ378+KWQzoE9perYhjmlt13XFu1GP+6TRdNmsCrJ9vEHTe5uuVNt3P6cz9fgdm9vhYZMlW29+/+YtRtGOeFc2m9lYvt4mjquieqfVhqaPsaJ6865NHGO7Mr7xbtSzmj6uiurN7998/zNNrTUa2/e+zMbpaTo2Ourjali9F6Z6m/q/a1i978j1t4njyif+KFnfpo+ronrDIdqzluNqWhvx/ooSx4rnxRXgLRr38dXb4p1ggG1JwCdkH2RNFNfly0rG960G1+sDruniOl1XXNLyyX9W0XTJnojzzu539h/AKNuSrdfbdd+nPaLyBcWsR0ZYFrWtOEn4H7Aj398mjqth9TZ9jBXV28Yx5v3o/7Bc4t9P3rmJ46qoXreh6eMq9mMkXD4Z5PvbxHE1rN6YH/a2HmWJ7Wf763l29tClif+7vP34/9//9/v/j7xzU8dVvl5VPbLjKpLk2E9xvC6qjlmFyy2KA0tjPf5zqfpuHEdbGP6PzAdaW8XZX/TRw/gH1WT9i9r4dKog/lFn2+A2NVEWtdHpzIaz+9f1R/abWWRNo9k+eTz2a7beJo6rYfVGZ5o6xobV2/QxdoM6lq3bvm0cV0X12ji7f92uUR9XrsNloPD2PXTJ1tvEcbVcy6n1xvymjqvYfr6/TR9X16ji7HHl/rVxXBXVa4Ps/l3rcZW18wdzXSKpij77DUvvixHaOCmOE9p9jGxwnO0YR93+T2Ucfe/DcZXdn00fY95+UyfabD/y48Pq5bjKSzUz3fRx5f04juNqWL2jPK6G2a33810zRyJbRQABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBnIC/wjRpZRLbNGlGtAcBBBBAoCUBP7zED/bwcBTFD7/xtvx95HhgSH54YXqtqQc6uT4/vGSlvsWDTpo+KUcbptWeJ1NoQEEAAQQQQGC8AnGC8nAUxSdfn1ydAPiEd0ARCYDHFxXnKfwDLn6i2ahLPG7WDytZqW9ezkmC29lk2ayNu//TihiPx7hqFgUBBBBAAIHxCMRJ0idDP4rY4UeKuvjk6BO1T2Cenz1hz6b5fu0LCi97IDMvu6wTAS/nZVw8dH1eJtZzPYuKqCemsz8+5d9N8HYcs4qi4tcW0wsr9c11RwLgcbfR/Yj1N2ncxfV7OYdfi3U0uuTk9sb80z1TxX6e74j1pjXuEttfnuIvAggggAACYxKIk6RPTHFZ3ON+Bx0n9Fs0HonANo37Mr+X8Qn5psx4nKAXNc/bjRIJQFxu90k/6ovxmPbQ4fqi/mmN36Lw/FlFtNPj2eJHsnoZv+6yUt+irW5TjC/mxjW5lBh4m04OwsDb36zwfJ/gw8AnfLt5frQjxqc1z2VW4XlhoVEKAutLgIN7fe1PerP+BS5SF+9WXJW6+jc0vDqNe/BKGr9Zw3gW+G9p/O8oPqb4t4rPK1y8nReWxsr/+XRa73tpFddzY2b1PZnxGP14jKSh2+zyjeXByb/5vvmnYovKhZrpPkQbYpnDGvmIwm2KsjNGNAyPjRr/e2l+vs5Y/EgaeVvMYIjAehOIS2HrrV/0B4H1KhAn+DhBRT+PphG/i/dJ2ifXP1L4pPdBxScULpcrfn1pbDR/fGXgjIJN/ZXmvapw0pFvayz+1hhJw2F9yy226qTblC9/kma4PRsUcesg6nwuvwLTCKx3Aa4ArPc9TP/Wm8B/UYd87/q/pY7FydXvah9VePozCr97vltxv+KfKvxO1+UXFXGC9AfsRv0m4MuuROUPFG6Prz5co8iWP08T78nO1Hi+b3+Re73O5LfTSv9Xw68qblLsUnxd4RJ1/vHy5Mm/ThJcXloe8BcBBBBAAIHxCGxRtXGfOoa3pKaco6Hva8d83wN38bvcmBdDb8cllt+7PLn094D+erl4Y+BEwdM+YWbHNXnyvr/Ho23TGvdysR2v63reosgXvxbtjPU9L+KWtILr9jy3KTvul321w+GSHc+39VN6Pbbr4TavoBLby742vfTKTz/omCYZIIAAAgggMH4BnwzjJJ1tjU+0Re/oPa/oJOwTZVNlWJ1Rn9+J+8Sbb9ewvsV6dYfebr4ub8vtzJtF4uQrJBQEEEAAAQQQGLGAE4C4CjDiTa9pc76asLimLbAyAggggAACCAwV8Lvy+GT+0IXG8ILb1OTVkTF0iSoRQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBNaNwP8HFUeyMPEaRgkAAAAASUVORK5CYII=" + }, + "metadata": { + "jupyter-vega3": "#4a20f535-b2f2-4a27-9958-4d8c45131ddc" + }, + "output_type": "display_data" + } + ], + "source": [ + "import pdvega\n", + "df[df['outcome'] != 'timeout']['bestTime'].vgplot.hist(bins=30)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "algorithm hyperparams \n", + "FREQHORN aggp 516\n", + " aggp-itp3 515\n", + " freqs-aggp 515\n", + " freqs-aggp-itp3 516\n", + " v1 516\n", + " v1-eps 516\n", + " v1-eps-freqs 516\n", + " v1-eps-freqs-aggp 516\n", + "ICE 215\n", + "MCMC 314\n", + "Z3 spacerhyp1 495\n", + " spacerhyp2 516\n", + "dtype: int64" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.groupby(['algorithm', 'hyperparams']).size()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.2" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/tools/deep_bench/scripts/all-jobs.py b/tools/deep_bench/scripts/all-jobs.py index fe4e6ebf1..b1a97de5d 100755 --- a/tools/deep_bench/scripts/all-jobs.py +++ b/tools/deep_bench/scripts/all-jobs.py @@ -15,7 +15,7 @@ 'z3': AlgoConf(3, ['spacerhyp1', 'spacerhyp2']), 'freqhorn': AlgoConf(3, ['v1', 'v1-eps', 'v1-eps-freqs', 'v1-eps-freqs-aggp', 'aggp', 'aggp-itp3', - 'freqs-aggp', 'freqs-aggp']) + 'freqs-aggp', 'freqs-aggp-itp3']) } @@ -49,10 +49,11 @@ def main(): continue for hyper in aconf.hypers: hypflag = "" if hyper is None else "--hyper" + hypval = "" if hyper is None else hyper out = "%s ::: %s ::: %s ::: %s ::: %d" % \ - (hypflag, bench, algo, hyper, i) + (hypflag, bench, algo, hypval, i) print(out) if __name__ == '__main__': - main() \ No newline at end of file + main() diff --git a/tools/deep_bench/scripts/benchmark-supervisor.py b/tools/deep_bench/scripts/benchmark-supervisor.py index ed36d2269..a94deb5df 100755 --- a/tools/deep_bench/scripts/benchmark-supervisor.py +++ b/tools/deep_bench/scripts/benchmark-supervisor.py @@ -92,15 +92,22 @@ def run_ice(bench_name, logfile, hyper, verbose=False, timeout=None): assert os.path.isfile(cmd) for cachepath in glob.glob(example_path + ".*"): + if verbose: + print("removing %s" % cachepath) os.remove(cachepath) + # This was built with msys. It needs the relevant DLLs in PATH to work. + new_env = dict(os.environ) + new_env['PATH'] = "/cygdrive/c/tools/msys64/mingw64/bin:" + os.environ["PATH"] + start = time.time() output = subproc_check_output([cmd, "-nologo", "-noinfer", "-contractInfer", "-mlHoudini:dt_penalty", "-printAssignment", win_path(example_path)], timeout=timeout, cwd=os.path.join(root, "Boogie", "Binaries"), - logfile=logfile) + logfile=logfile, + env=new_env) end = time.time() success, t = False, 0 @@ -247,7 +254,7 @@ def main(): help="be noisier about what's going on") parser.add_argument("--hyper", type=str, help="a hyperparameter string for the algo.") - args = parser.parse_args() + args = parser.parse_args(args=[x for x in sys.argv[1:] if len(x)]) # Make the out/ directory outdir = args.outdir @@ -271,10 +278,11 @@ def main(): # Begin building the result.json object result_obj = { 'algorithm': args.ALGO.upper(), - 'hyperparams': '', 'startDate': datetime.utcnow().replace(tzinfo=simple_utc()).isoformat(), 'benchmarkName': args.BENCHNAME } + if args.hyper: + result_obj['hyperparams'] = args.hyper # Run the benchmark logpath = os.path.join(outdir, "out.log") diff --git a/tools/deep_bench/windows/ansible/inventory b/tools/deep_bench/windows/ansible/inventory index f1a37d3e9..2447f6c18 100644 --- a/tools/deep_bench/windows/ansible/inventory +++ b/tools/deep_bench/windows/ansible/inventory @@ -1,3 +1,8 @@ +[all] + +[all:children] +windows + [windows] [windows:children] diff --git a/tools/deep_bench/windows/ansible/playbook.yml b/tools/deep_bench/windows/ansible/playbook.yml index 27dcd5959..073ab5d64 100644 --- a/tools/deep_bench/windows/ansible/playbook.yml +++ b/tools/deep_bench/windows/ansible/playbook.yml @@ -1,5 +1,5 @@ --- -- hosts: windows +- hosts: all roles: - base - cygwin-sshd diff --git a/tools/deep_bench/windows/ansible/roles/base/tasks/main.yml b/tools/deep_bench/windows/ansible/roles/base/tasks/main.yml index 3794cfdb3..7421b22fb 100644 --- a/tools/deep_bench/windows/ansible/roles/base/tasks/main.yml +++ b/tools/deep_bench/windows/ansible/roles/base/tasks/main.yml @@ -6,6 +6,16 @@ # dest: C:\cygwin-setup-x86.exe # force: no +- name: remove mingw (but not msys2) + win_chocolatey: + name: mingw + state: absent + +# - name: remove Visual Studio (not the build tool) +# win_chocolatey: +# name: visualstudio2017community +# state: absent + - name: install Cygwin and cyg-get (via Chocolatey) win_chocolatey: name: "{{ item }}" @@ -13,13 +23,20 @@ with_items: - cygwin - cyg-get + - msys2 - name: install a bunch of Cygwin packages - win_shell: cyg-get.bat git rsync vim python2 python2-pip python2-devel openssh gcc-core + win_shell: cyg-get.bat git rsync vim python2 python2-pip python2-devel openssh gcc-core # - name: run the Cygwin installer/update packages # win_shell: C:\cygwin-setup-x86.exe --site http://mirrors.kernel.org/sourceware/cygwin/ --quiet-mode --root {{ cygwin_root }} --arch x86 --local-package-dir C:\cygwinx86\cygwin-packages --verbose --packages git,rsync,vim,python2,python2-pip,python2-devel,openssh,gcc-core +# TODO: install msys packages: make mingw-x86_64-i686-gcc libreadline + +# TODO: automate make clean; make inside the mingw32 shell + +# TODO: copy c5.0.dtpenalty and dtentropy into Binaries + - name: install Visual Studio Redistributables and Build Tools win_chocolatey: name: "{{ item }}" @@ -28,6 +45,10 @@ - vcredist-all - visualstudio2017buildtools - visualstudio2017-workload-vctools + # - visualstudio2017-workload-netcoretools + # - nugetpackagemanager + # - visualstudio2017community + # - visualstudio2017-workload-manageddesktop retries: 1 register: chocolatey_pkgs until: chocolatey_pkgs is succeeded @@ -35,4 +56,4 @@ - name: reboot the machine win_reboot: - when: chocolatey_pkgs|changed \ No newline at end of file + when: chocolatey_pkgs|changed diff --git a/tools/deep_bench/windows/run-other-benchmarks.sh b/tools/deep_bench/windows/run-other-benchmarks.sh index 25e5869f1..8b3b16bc9 100755 --- a/tools/deep_bench/windows/run-other-benchmarks.sh +++ b/tools/deep_bench/windows/run-other-benchmarks.sh @@ -1,9 +1,10 @@ #!/usr/bin/env bash set -e +set -x # HOSTS=`../scripts/ec2-inv.py --list | jq -r .tag_FreqHornPlatform_Windows\[\] | sed -e 's/^/1\/Administrator@/' | xargs echo -n | tr '\n' ','` -HOSTS=`../scripts/ec2-inv.py --list | jq -r .tag_FreqHornPlatform_Windows\[\] | sed -e 's/^/1\/ssh -i ~\/.ssh\/deephornec2.pem Administrator@/' | xargs echo -n | tr '\n' ','` +HOSTS=`../scripts/ec2-inv.py --list | jq -r .tag_FreqHornPlatform_Windows\[\] | sed -e 's/^/1\/ssh -i ~\/.ssh\/freqhorn_rsa Administrator@/' | tr '\n' ','` echo $HOSTS echo "" @@ -16,7 +17,6 @@ touch ~/.ssh/config cp ~/.ssh/config ~/.ssh/config.backup (echo 'Host *'; echo StrictHostKeyChecking no) >> ~/.ssh/config -# find ../../../bench_horn/*.smt2 -exec basename {} .smt2 \; | parallel \ ../scripts/all-jobs.py z3 | parallel \ --resume-failed \ --joblog ./clusterjobs.log \ @@ -31,7 +31,6 @@ cp ~/.ssh/config ~/.ssh/config.backup "MCMC_ROOT=/cygdrive/c/MCMC ICE_ROOT=/cygdrive/c/ICE MCMC_BENCH=/cygdrive/c/bench_horn_mcmc ICE_BENCH=/cygdrive/c/bench_horn_ice Z3_ROOT=/cygdrive/c/tools/cygwin/home/Administrator/spacer/build Z3_BENCH=/cygdrive/c/bench_horn /cygdrive/c/benchmark-supervisor.py -o ~/out {1} {4} {3} {2} &> out/supervisor.std.log ; " \ "cd ~ ; " \ "tar -zcf out-{2}-{3}--{4}--i{5}.tar.gz out/ ;" - ::: mcmc ice z3 ::: {0..2} # Remove the disabling of StrictHostKeyChecking mv ~/.ssh/config.backup ~/.ssh/config diff --git a/tools/deep_bench/windows/terraform/win-cluster.tf b/tools/deep_bench/windows/terraform/win-cluster.tf index 095110cc1..52caaf99d 100644 --- a/tools/deep_bench/windows/terraform/win-cluster.tf +++ b/tools/deep_bench/windows/terraform/win-cluster.tf @@ -208,6 +208,11 @@ resource "aws_spot_fleet_request" "fleet_req" { # non-dedicated because m4.xlarge doesn't supported that tenancy mode # placement_tenancy = "dedicated" + root_block_device { + volume_size = "40" + volume_type = "gp2" + } + tags { Project = "FreqHorn" FreqHornPlatform = "Windows" From 4361c98153edeb1319cdf4c55315bf992fae5387 Mon Sep 17 00:00:00 2001 From: Sam Kaufman Date: Thu, 1 Mar 2018 17:29:40 -0500 Subject: [PATCH 075/236] more analyses --- tools/deep_bench/scripts/Summarize.ipynb | 2617 +++++++++++++++++++++- 1 file changed, 2533 insertions(+), 84 deletions(-) diff --git a/tools/deep_bench/scripts/Summarize.ipynb b/tools/deep_bench/scripts/Summarize.ipynb index 36eb2fc29..7d13fea01 100644 --- a/tools/deep_bench/scripts/Summarize.ipynb +++ b/tools/deep_bench/scripts/Summarize.ipynb @@ -45,17 +45,31 @@ }, "outputs": [], "source": [ + "FREQHORN_V2_BOOT_RE = re.compile(r'\\s*Success after (.+?\\s+)?bootstrapping\\s*')\n", + "FREQHORN_V2_SAMPLING_RE = re.compile(r'\\s*Success after (.+?\\s+)?sampling\\s*')\n", + "\n", "def jsons_from_targlob(tarpath):\n", " for path in glob.glob(os.path.expanduser(tarpath)):\n", " path_match = PATH_RE.match(path)\n", " with tarfile.open(path) as tf:\n", + " results, manual_success_kind = None, None\n", " for tarinfo in tf:\n", - " if tarinfo.name.lower() == 'out/result.json':\n", + " if tarinfo.name.lower() == 'out/out.log':\n", + " outlog = tf.extractfile(tarinfo)\n", + " out_log_lines = outlog.read().decode('utf-8').splitlines()\n", + " if any(FREQHORN_V2_BOOT_RE.match(line) for line in out_log_lines):\n", + " manual_success_kind = 'bootstrapping'\n", + " elif any(FREQHORN_V2_SAMPLING_RE.match(line) for line in out_log_lines):\n", + " manual_success_kind = 'sampling'\n", + " elif tarinfo.name.lower() == 'out/result.json':\n", " results = json.load(tf.extractfile(tarinfo))\n", " if not results['hyperparams'] and path_match:\n", " # workaround: some early runs didn't save hyperparams\n", " results['hyperparams'] = path_match.group(4)\n", - " yield results\n", + " if results is not None:\n", + " if manual_success_kind:\n", + " results['successKind'] = manual_success_kind\n", + " yield results\n", "SRC_GLOBS = [\"~/Desktop/runs/linux0/*.tar.gz\",\n", " \"~/Desktop/runs/linux1/*.tar.gz\",\n", " \"~/Desktop/runs/linux2/*.tar.gz\",\n", @@ -104,7 +118,9 @@ "metadata": {}, "source": [ "#### Flagging Failures\n", - "Failures have no `results.json` files. In general, I'm not immediately sure about why failures occur. In the case of **ICE**, I think syntactic details matter; if I had more time, I'd try rewriting a lot of these such that they resemble ICE's original PLDI benchmarks. **MCMC** seems to segfault arbitrarily. In any case, let's flag all MCMC & ICE trials with missing results.json files `outcome = \"failure\"`." + "Failures have no `results.json` files. In general, I'm not immediately sure about why failures occur. In the case of **ICE**, I think syntactic details matter; if I had more time, I'd try rewriting a lot of these such that they resemble ICE's original PLDI benchmarks. **MCMC** seems to segfault arbitrarily. In any case, let's flag all MCMC & ICE trials with missing results.json files `outcome = \"failure\"`.\n", + "\n", + "At the same time, a few of our tarballs might've resulted from non-existant benchmarks. Let's skip those/not include them in any subsequent analysis." ] }, { @@ -112,11 +128,29 @@ "execution_count": 6, "metadata": {}, "outputs": [], + "source": [ + "def line_is_nonexist(line):\n", + " pat = r\"^\\s*OSError: \\[Errno \\d+\\] No such [\\w\\s]+: '([\\d\\w\\s\\/]+\\/)?([\\w\\d_\\-]+)'\\s*$\"\n", + " m = re.match(pat, line)\n", + " if m:\n", + " return True\n", + " return False" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "scrolled": false + }, + "outputs": [], "source": [ "path_is_ice = lambda pth: \"-ice-\" in pth.lower()\n", "path_is_mcmc = lambda pth: \"-mcmc-\" in pth.lower()\n", "path_is_spacer = lambda pth: \"-z3-\" in pth.lower()\n", "tarinfo_is_result = lambda tarinfo: tarinfo.name.lower() == 'out/result.json'\n", + "tarinfo_is_supervisor_log = lambda tarinfo: tarinfo.name.lower() == 'out/supervisor.std.log'\n", + " \n", "for path in all_tar_paths:\n", " if path_is_ice(path):\n", " algo = \"ICE\"\n", @@ -126,11 +160,18 @@ " also = \"Z3\"\n", " else:\n", " continue\n", + " has_results, is_nonexist = False, False\n", " with tarfile.open(path) as tf:\n", - " if any(map(tarinfo_is_result, tf)):\n", - " continue\n", - " name = re.match(r'out-(.+?)-(ice|mcmc|z3)-.*\\.tar\\.gz', os.path.split(path)[1]).group(1)\n", - " df = df.append({'algorithm': algo, 'benchmarkName': name, 'outcome': 'failure'}, ignore_index=True)" + " for tarinfo in tf:\n", + " if tarinfo_is_result(tarinfo):\n", + " has_results = True\n", + " elif tarinfo_is_supervisor_log(tarinfo):\n", + " superlog = tf.extractfile(tarinfo)\n", + " if any(line_is_nonexist(l) for l in superlog.read().decode('utf-8').splitlines()):\n", + " is_nonexist = True\n", + " if not has_results and not is_nonexist:\n", + " name = re.match(r'out-(.+?)-(ice|mcmc|z3)-.*\\.tar\\.gz', os.path.split(path)[1]).group(1)\n", + " df = df.append({'algorithm': algo, 'benchmarkName': name, 'outcome': 'failure'}, ignore_index=True)" ] }, { @@ -143,7 +184,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 8, "metadata": { "scrolled": false }, @@ -219,6 +260,494 @@ " display(HTML(\"No failures.\"))" ] }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
algorithmbenchmarkNamehyperparamsitersoutcomesuccessKindbestTime
32FREQHORNabdu_04v1-eps-freqs-aggpNaNsuccessNaN11.104865
304FREQHORNabdu_04v1-eps-freqsNaNsuccessNaN41.610121
439FREQHORNabdu_04v1-eps-freqsNaNsuccessNaN28.415789
453FREQHORNabdu_04v1NaNsuccessNaN2.544792
606FREQHORNabdu_04freqs-aggpNaNsuccessbootstrapping0.490420
675FREQHORNabdu_04aggp-itp3NaNsuccessbootstrapping0.533299
883FREQHORNabdu_04v1-epsNaNtimeoutNaNNaN
1148FREQHORNabdu_04aggpNaNsuccessbootstrapping0.484320
1366FREQHORNabdu_04aggpNaNsuccessbootstrapping0.489147
1449FREQHORNabdu_04v1-epsNaNtimeoutNaNNaN
1642FREQHORNabdu_04freqs-aggpNaNsuccessbootstrapping0.487982
1765FREQHORNabdu_04v1-eps-freqsNaNsuccessNaN6.897671
1804FREQHORNabdu_04v1NaNsuccessNaN1.959079
1917FREQHORNabdu_04v1-eps-freqs-aggpNaNsuccessNaN8.220386
1921FREQHORNabdu_04aggp-itp3NaNsuccessbootstrapping0.535469
2189FREQHORNabdu_04aggp-itp3NaNsuccessbootstrapping0.538213
2192FREQHORNabdu_04v1-eps-freqs-aggpNaNsuccessNaN12.499540
2283FREQHORNabdu_04freqs-aggpNaNsuccessbootstrapping0.491039
2330FREQHORNabdu_04v1NaNsuccessNaN3.732195
2420FREQHORNabdu_04aggpNaNsuccessbootstrapping0.483587
2774FREQHORNabdu_04v1-epsNaNtimeoutNaNNaN
3800FREQHORNabdu_04freqs-aggp-itp3NaNsuccessbootstrapping0.552889
4004FREQHORNabdu_04freqs-aggp-itp3NaNsuccessbootstrapping0.526876
4124FREQHORNabdu_04freqs-aggp-itp3NaNsuccessbootstrapping0.538639
4249MCMCabdu_04NaNtimeoutNaNNaN
4371MCMCabdu_04NaNtimeoutNaNNaN
4437MCMCabdu_04NaNtimeoutNaNNaN
4686Z3abdu_04spacerhyp1NaNsuccessNaN0.055382
4903Z3abdu_04spacerhyp1NaNsuccessNaN0.052364
5156Z3abdu_04spacerhyp2NaNsuccessNaN0.049880
5239Z3abdu_04spacerhyp1NaNsuccessNaN0.047029
5496Z3abdu_04spacerhyp2NaNsuccessNaN0.042643
5561Z3abdu_04spacerhyp2NaNsuccessNaN0.048024
5714ICEabdu_04NaNNaNfailureNaNNaN
5745ICEabdu_04NaNNaNfailureNaNNaN
5861ICEabdu_04NaNNaNfailureNaNNaN
\n", + "
" + ], + "text/plain": [ + " algorithm benchmarkName hyperparams iters outcome \\\n", + "32 FREQHORN abdu_04 v1-eps-freqs-aggp NaN success \n", + "304 FREQHORN abdu_04 v1-eps-freqs NaN success \n", + "439 FREQHORN abdu_04 v1-eps-freqs NaN success \n", + "453 FREQHORN abdu_04 v1 NaN success \n", + "606 FREQHORN abdu_04 freqs-aggp NaN success \n", + "675 FREQHORN abdu_04 aggp-itp3 NaN success \n", + "883 FREQHORN abdu_04 v1-eps NaN timeout \n", + "1148 FREQHORN abdu_04 aggp NaN success \n", + "1366 FREQHORN abdu_04 aggp NaN success \n", + "1449 FREQHORN abdu_04 v1-eps NaN timeout \n", + "1642 FREQHORN abdu_04 freqs-aggp NaN success \n", + "1765 FREQHORN abdu_04 v1-eps-freqs NaN success \n", + "1804 FREQHORN abdu_04 v1 NaN success \n", + "1917 FREQHORN abdu_04 v1-eps-freqs-aggp NaN success \n", + "1921 FREQHORN abdu_04 aggp-itp3 NaN success \n", + "2189 FREQHORN abdu_04 aggp-itp3 NaN success \n", + "2192 FREQHORN abdu_04 v1-eps-freqs-aggp NaN success \n", + "2283 FREQHORN abdu_04 freqs-aggp NaN success \n", + "2330 FREQHORN abdu_04 v1 NaN success \n", + "2420 FREQHORN abdu_04 aggp NaN success \n", + "2774 FREQHORN abdu_04 v1-eps NaN timeout \n", + "3800 FREQHORN abdu_04 freqs-aggp-itp3 NaN success \n", + "4004 FREQHORN abdu_04 freqs-aggp-itp3 NaN success \n", + "4124 FREQHORN abdu_04 freqs-aggp-itp3 NaN success \n", + "4249 MCMC abdu_04 NaN timeout \n", + "4371 MCMC abdu_04 NaN timeout \n", + "4437 MCMC abdu_04 NaN timeout \n", + "4686 Z3 abdu_04 spacerhyp1 NaN success \n", + "4903 Z3 abdu_04 spacerhyp1 NaN success \n", + "5156 Z3 abdu_04 spacerhyp2 NaN success \n", + "5239 Z3 abdu_04 spacerhyp1 NaN success \n", + "5496 Z3 abdu_04 spacerhyp2 NaN success \n", + "5561 Z3 abdu_04 spacerhyp2 NaN success \n", + "5714 ICE abdu_04 NaN NaN failure \n", + "5745 ICE abdu_04 NaN NaN failure \n", + "5861 ICE abdu_04 NaN NaN failure \n", + "\n", + " successKind bestTime \n", + "32 NaN 11.104865 \n", + "304 NaN 41.610121 \n", + "439 NaN 28.415789 \n", + "453 NaN 2.544792 \n", + "606 bootstrapping 0.490420 \n", + "675 bootstrapping 0.533299 \n", + "883 NaN NaN \n", + "1148 bootstrapping 0.484320 \n", + "1366 bootstrapping 0.489147 \n", + "1449 NaN NaN \n", + "1642 bootstrapping 0.487982 \n", + "1765 NaN 6.897671 \n", + "1804 NaN 1.959079 \n", + "1917 NaN 8.220386 \n", + "1921 bootstrapping 0.535469 \n", + "2189 bootstrapping 0.538213 \n", + "2192 NaN 12.499540 \n", + "2283 bootstrapping 0.491039 \n", + "2330 NaN 3.732195 \n", + "2420 bootstrapping 0.483587 \n", + "2774 NaN NaN \n", + "3800 bootstrapping 0.552889 \n", + "4004 bootstrapping 0.526876 \n", + "4124 bootstrapping 0.538639 \n", + "4249 NaN NaN \n", + "4371 NaN NaN \n", + "4437 NaN NaN \n", + "4686 NaN 0.055382 \n", + "4903 NaN 0.052364 \n", + "5156 NaN 0.049880 \n", + "5239 NaN 0.047029 \n", + "5496 NaN 0.042643 \n", + "5561 NaN 0.048024 \n", + "5714 NaN NaN \n", + "5745 NaN NaN \n", + "5861 NaN NaN " + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Where are out ICE abdu_04\n", + "df[df['benchmarkName'] == 'abdu_04']" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -229,9 +758,9 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 10, "metadata": { - "scrolled": false + "scrolled": true }, "outputs": [ { @@ -1672,137 +2201,2057 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "algorithm outcome \n", - "FREQHORN iterLimitHit 70\n", - " success 3055\n", - " timeout 1001\n", - "ICE failure 322\n", - " success 122\n", - " timeout 93\n", - "MCMC failure 201\n", - " success 93\n", - " timeout 221\n", - "Z3 success 723\n", - " timeout 288\n", + "algorithm hyperparams outcome \n", + "FREQHORN aggp success 434\n", + " timeout 82\n", + " aggp-itp3 success 431\n", + " timeout 84\n", + " freqs-aggp success 433\n", + " timeout 82\n", + " freqs-aggp-itp3 success 436\n", + " timeout 80\n", + " v1 iterLimitHit 9\n", + " success 306\n", + " timeout 201\n", + " v1-eps iterLimitHit 9\n", + " success 310\n", + " timeout 197\n", + " v1-eps-freqs iterLimitHit 9\n", + " success 332\n", + " timeout 175\n", + " v1-eps-freqs-aggp iterLimitHit 43\n", + " success 373\n", + " timeout 100\n", + "ICE success 122\n", + " timeout 93\n", + "MCMC success 93\n", + " timeout 221\n", + "Z3 spacerhyp1 success 342\n", + " timeout 153\n", + " spacerhyp2 success 381\n", + " timeout 135\n", "dtype: int64" ] }, - "execution_count": 9, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df.groupby(['algorithm', 'hyperparams', 'outcome']).size()" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "algorithm hyperparams \n", + "FREQHORN aggp 516\n", + " aggp-itp3 515\n", + " freqs-aggp 515\n", + " freqs-aggp-itp3 516\n", + " v1 516\n", + " v1-eps 516\n", + " v1-eps-freqs 516\n", + " v1-eps-freqs-aggp 516\n", + "ICE 215\n", + "MCMC 314\n", + "Z3 spacerhyp1 495\n", + " spacerhyp2 516\n", + "dtype: int64" + ] + }, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "df.groupby(['algorithm', 'outcome']).size()" + "df.groupby(['algorithm', 'hyperparams']).size()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Main Analysis" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "#### Histogram of Non-Timeout Times" + "What are the mean variations for each algorithm? We expect them to be very slow for ICE and Z3/Spacer and much higher for probabilistic methods like MCMC and FreqHorn." ] }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 13, "metadata": {}, "outputs": [ { "data": { - "text/html": [ - "
\n", - "\n", - "\n" + "text/plain": [ + "algorithm\n", + "FREQHORN 91.174769\n", + "ICE 0.006892\n", + "MCMC 102.484544\n", + "Z3 3.793790\n", + "dtype: float64" ] }, - "metadata": { - "jupyter-vega3": "#4a20f535-b2f2-4a27-9958-4d8c45131ddc" - }, - "output_type": "display_data" + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "time_vars = df.groupby(['algorithm', 'benchmarkName'])['bestTime'].var().rename(\"timeVariation\")\n", + "time_vars = time_vars[time_vars.isnull() == False]\n", + "time_vars = time_vars.reset_index()\n", + "time_vars = time_vars.pivot(index=\"benchmarkName\", columns=\"algorithm\")\n", + "time_vars['timeVariation'].mean()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### Cross-Algorithm Time Summary\n", + "First, figure out how many benchmarks (with any _outcome_) were run for each algorithm. We'll use this in the next step." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Not totally ported:\n" + ] }, { "data": { - "application/javascript": [ - "var spec = {\"mark\": \"bar\", \"encoding\": {\"x\": {\"bin\": {\"maxbins\": 30}, \"field\": \"bestTime\", \"type\": \"quantitative\"}, \"y\": {\"aggregate\": \"count\", \"type\": \"quantitative\"}}, \"$schema\": \"https://vega.github.io/schema/vega-lite/v2.json\", \"width\": 450, \"height\": 300, \"selection\": {\"grid\": {\"type\": \"interval\", \"bind\": \"scales\"}}, \"data\": {\"values\": [{\"bestTime\": 0.27507996559143066}, {\"bestTime\": 7.687636137008667}, {\"bestTime\": 15.11708378791809}, {\"bestTime\": 14.977015018463135}, {\"bestTime\": 9.742303848266602}, {\"bestTime\": 4.4705970287323}, {\"bestTime\": 0.3854842185974121}, {\"bestTime\": 0.22148704528808594}, {\"bestTime\": 20.755006790161133}, {\"bestTime\": 0.5583930015563965}, {\"bestTime\": 0.24776291847229004}, {\"bestTime\": 1.5473339557647705}, {\"bestTime\": 1.7132349014282227}, {\"bestTime\": 46.11060094833374}, {\"bestTime\": 0.48245906829833984}, {\"bestTime\": 0.7709009647369385}, {\"bestTime\": 0.5080230236053467}, {\"bestTime\": 3.1167359352111816}, {\"bestTime\": 0.6019210815429688}, {\"bestTime\": 11.645603895187378}, {\"bestTime\": 0.27788591384887695}, {\"bestTime\": 8.472511053085327}, {\"bestTime\": 0.34551310539245605}, {\"bestTime\": 0.9437510967254639}, {\"bestTime\": 0.1545422077178955}, {\"bestTime\": 0.1292421817779541}, {\"bestTime\": 0.9045729637145996}, {\"bestTime\": 11.104864835739136}, {\"bestTime\": 0.3543109893798828}, {\"bestTime\": 0.6076581478118896}, {\"bestTime\": 0.20325303077697754}, {\"bestTime\": 7.004143953323364}, {\"bestTime\": 4.743921995162964}, {\"bestTime\": 5.6720099449157715}, {\"bestTime\": 25.9023699760437}, {\"bestTime\": 2.5966849327087402}, {\"bestTime\": 0.3435509204864502}, {\"bestTime\": 0.11447787284851074}, {\"bestTime\": 0.30796003341674805}, {\"bestTime\": 0.2730729579925537}, {\"bestTime\": 0.1676180362701416}, {\"bestTime\": 17.042580127716064}, {\"bestTime\": 39.29200196266174}, {\"bestTime\": 0.3625819683074951}, {\"bestTime\": 1.1185557842254639}, {\"bestTime\": 0.21780800819396973}, {\"bestTime\": 0.700314998626709}, {\"bestTime\": 0.047937870025634766}, {\"bestTime\": 2.4964988231658936}, {\"bestTime\": 9.626194953918457}, {\"bestTime\": 4.517822980880737}, {\"bestTime\": 0.5953519344329834}, {\"bestTime\": 0.18700003623962402}, {\"bestTime\": 5.681717872619629}, {\"bestTime\": 9.206433057785034}, {\"bestTime\": 1.3995530605316162}, {\"bestTime\": 4.3701348304748535}, {\"bestTime\": 1.7025740146636963}, {\"bestTime\": 0.4843130111694336}, {\"bestTime\": 8.935805082321167}, {\"bestTime\": 6.610934019088745}, {\"bestTime\": 0.36695098876953125}, {\"bestTime\": 2.4761929512023926}, {\"bestTime\": 0.3020601272583008}, {\"bestTime\": 1.9120209217071533}, {\"bestTime\": 0.7332100868225098}, {\"bestTime\": 12.994786024093628}, {\"bestTime\": 0.8177990913391113}, {\"bestTime\": 0.6787199974060059}, {\"bestTime\": 14.603124141693115}, {\"bestTime\": 1.7458159923553467}, {\"bestTime\": 29.797986030578613}, {\"bestTime\": 1.6394689083099365}, {\"bestTime\": 0.21187400817871094}, {\"bestTime\": 39.741260051727295}, {\"bestTime\": 0.9450540542602539}, {\"bestTime\": 23.518840074539185}, {\"bestTime\": 1.918673038482666}, {\"bestTime\": 2.633051872253418}, {\"bestTime\": 0.6716320514678955}, {\"bestTime\": 14.299813032150269}, {\"bestTime\": 0.8290460109710693}, {\"bestTime\": 1.3830859661102295}, {\"bestTime\": 7.36578893661499}, {\"bestTime\": 0.22001981735229492}, {\"bestTime\": 6.286279201507568}, {\"bestTime\": 29.170534133911133}, {\"bestTime\": 0.11984896659851074}, {\"bestTime\": 0.6596858501434326}, {\"bestTime\": 0.3679652214050293}, {\"bestTime\": 1.2661170959472656}, {\"bestTime\": 0.2834608554840088}, {\"bestTime\": 8.514616966247559}, {\"bestTime\": 5.456643104553223}, {\"bestTime\": 0.28658413887023926}, {\"bestTime\": 7.05855393409729}, {\"bestTime\": 15.495913982391357}, {\"bestTime\": 3.614049196243286}, {\"bestTime\": 0.24445199966430664}, {\"bestTime\": 0.12414193153381348}, {\"bestTime\": 2.0643110275268555}, {\"bestTime\": 0.6943099498748779}, {\"bestTime\": 0.370311975479126}, {\"bestTime\": 0.15557599067687988}, {\"bestTime\": 0.09092998504638672}, {\"bestTime\": 52.33218502998352}, {\"bestTime\": 5.757562875747681}, {\"bestTime\": 0.2746009826660156}, {\"bestTime\": 2.1636300086975098}, {\"bestTime\": 0.9296741485595703}, {\"bestTime\": 43.42172598838806}, {\"bestTime\": 0.43706703186035156}, {\"bestTime\": 11.375471115112305}, {\"bestTime\": 22.11535382270813}, {\"bestTime\": 6.0814049243927}, {\"bestTime\": 1.6661889553070068}, {\"bestTime\": 19.473403930664062}, {\"bestTime\": 17.665033102035522}, {\"bestTime\": 22.946839809417725}, {\"bestTime\": 0.47998905181884766}, {\"bestTime\": 1.2394239902496338}, {\"bestTime\": 4.633136987686157}, {\"bestTime\": 0.2387850284576416}, {\"bestTime\": 0.3712120056152344}, {\"bestTime\": 53.937904834747314}, {\"bestTime\": 0.46793603897094727}, {\"bestTime\": 31.157759189605713}, {\"bestTime\": 33.72001099586487}, {\"bestTime\": 2.1205649375915527}, {\"bestTime\": 0.35796499252319336}, {\"bestTime\": 1.345959186553955}, {\"bestTime\": 0.6718099117279053}, {\"bestTime\": 0.7460720539093018}, {\"bestTime\": 52.71762180328369}, {\"bestTime\": 0.1935570240020752}, {\"bestTime\": 3.3945751190185547}, {\"bestTime\": 0.42477989196777344}, {\"bestTime\": 0.26934313774108887}, {\"bestTime\": 1.850019931793213}, {\"bestTime\": 19.97994899749756}, {\"bestTime\": 0.15013504028320312}, {\"bestTime\": 1.8371930122375488}, {\"bestTime\": 0.11188006401062012}, {\"bestTime\": 1.5418570041656494}, {\"bestTime\": 2.267457962036133}, {\"bestTime\": 0.12758803367614746}, {\"bestTime\": 24.524569034576416}, {\"bestTime\": 18.26715612411499}, {\"bestTime\": 0.6840090751647949}, {\"bestTime\": 4.665761947631836}, {\"bestTime\": 0.0548708438873291}, {\"bestTime\": 1.7477939128875732}, {\"bestTime\": 0.6729929447174072}, {\"bestTime\": 5.558549880981445}, {\"bestTime\": 3.8771960735321045}, {\"bestTime\": 0.5343070030212402}, {\"bestTime\": 0.7915968894958496}, {\"bestTime\": 12.113834857940674}, {\"bestTime\": 0.13920092582702637}, {\"bestTime\": 2.00832200050354}, {\"bestTime\": 1.9199929237365723}, {\"bestTime\": 0.5129430294036865}, {\"bestTime\": 0.4207890033721924}, {\"bestTime\": 12.846521139144897}, {\"bestTime\": 0.618278980255127}, {\"bestTime\": 5.109615802764893}, {\"bestTime\": 9.441703081130981}, {\"bestTime\": 0.3907968997955322}, {\"bestTime\": 0.4130880832672119}, {\"bestTime\": 0.6857900619506836}, {\"bestTime\": 0.14975309371948242}, {\"bestTime\": 0.15021300315856934}, {\"bestTime\": 13.943119049072266}, {\"bestTime\": 0.2734658718109131}, {\"bestTime\": 43.099798917770386}, {\"bestTime\": 0.06317496299743652}, {\"bestTime\": 8.61067819595337}, {\"bestTime\": 0.4872128963470459}, {\"bestTime\": 0.36994314193725586}, {\"bestTime\": 4.748936891555786}, {\"bestTime\": 0.7709450721740723}, {\"bestTime\": 0.3211839199066162}, {\"bestTime\": 0.1365678310394287}, {\"bestTime\": 0.13822603225708008}, {\"bestTime\": 1.5188229084014893}, {\"bestTime\": 21.177951097488403}, {\"bestTime\": 19.22685694694519}, {\"bestTime\": 0.18734383583068848}, {\"bestTime\": 0.9396319389343262}, {\"bestTime\": 18.721688985824585}, {\"bestTime\": 22.82727885246277}, {\"bestTime\": 0.1456141471862793}, {\"bestTime\": 0.14494800567626953}, {\"bestTime\": 3.6278398036956787}, {\"bestTime\": 0.2513010501861572}, {\"bestTime\": 0.22027087211608887}, {\"bestTime\": 0.18271613121032715}, {\"bestTime\": 18.571437120437622}, {\"bestTime\": 4.224077939987183}, {\"bestTime\": 0.25789499282836914}, {\"bestTime\": 0.24493694305419922}, {\"bestTime\": 0.7259409427642822}, {\"bestTime\": 12.677395105361938}, {\"bestTime\": 0.07933306694030762}, {\"bestTime\": 0.24483013153076172}, {\"bestTime\": 2.853020191192627}, {\"bestTime\": 0.05451202392578125}, {\"bestTime\": 1.9583048820495605}, {\"bestTime\": 0.3194618225097656}, {\"bestTime\": 0.183272123336792}, {\"bestTime\": 9.248500108718872}, {\"bestTime\": 4.493060827255249}, {\"bestTime\": 0.40879297256469727}, {\"bestTime\": 1.7196941375732422}, {\"bestTime\": 1.6722958087921143}, {\"bestTime\": 0.7746970653533936}, {\"bestTime\": 8.251631021499634}, {\"bestTime\": 0.5066370964050293}, {\"bestTime\": 1.6287760734558105}, {\"bestTime\": 21.93108105659485}, {\"bestTime\": 42.6387619972229}, {\"bestTime\": 0.41051506996154785}, {\"bestTime\": 0.8730599880218506}, {\"bestTime\": 0.2296888828277588}, {\"bestTime\": 0.3995649814605713}, {\"bestTime\": 0.18286705017089844}, {\"bestTime\": 0.1964871883392334}, {\"bestTime\": 0.1841118335723877}, {\"bestTime\": 3.4904561042785645}, {\"bestTime\": 0.1143350601196289}, {\"bestTime\": 14.898368120193481}, {\"bestTime\": 0.19847798347473145}, {\"bestTime\": 2.099397897720337}, {\"bestTime\": 56.24942588806152}, {\"bestTime\": 0.4143850803375244}, {\"bestTime\": 0.89292311668396}, {\"bestTime\": 2.6746041774749756}, {\"bestTime\": 7.186194896697998}, {\"bestTime\": 18.66399908065796}, {\"bestTime\": 21.69753885269165}, {\"bestTime\": 41.61012077331543}, {\"bestTime\": 18.04982590675354}, {\"bestTime\": 5.4199018478393555}, {\"bestTime\": 7.886237859725952}, {\"bestTime\": 0.1116030216217041}, {\"bestTime\": 2.8739190101623535}, {\"bestTime\": 10.557419776916504}, {\"bestTime\": 0.9395320415496826}, {\"bestTime\": 0.3930330276489258}, {\"bestTime\": 0.39560484886169434}, {\"bestTime\": 0.13379192352294922}, {\"bestTime\": 0.5834407806396484}, {\"bestTime\": 0.11528301239013672}, {\"bestTime\": 2.7437539100646973}, {\"bestTime\": 7.75597882270813}, {\"bestTime\": 0.15586590766906738}, {\"bestTime\": 0.7609689235687256}, {\"bestTime\": 1.4975969791412354}, {\"bestTime\": 4.285359859466553}, {\"bestTime\": 0.1494770050048828}, {\"bestTime\": 0.13753795623779297}, {\"bestTime\": 0.6605479717254639}, {\"bestTime\": 4.420241117477417}, {\"bestTime\": 0.6506190299987793}, {\"bestTime\": 33.5343599319458}, {\"bestTime\": 2.6605191230773926}, {\"bestTime\": 0.14293313026428223}, {\"bestTime\": 0.4921748638153076}, {\"bestTime\": 3.913728952407837}, {\"bestTime\": 4.087730169296265}, {\"bestTime\": 8.984137058258057}, {\"bestTime\": 2.6147830486297607}, {\"bestTime\": 0.43769001960754395}, {\"bestTime\": 0.09511590003967285}, {\"bestTime\": 1.6482269763946533}, {\"bestTime\": 0.12828993797302246}, {\"bestTime\": 57.91946005821228}, {\"bestTime\": 0.27879905700683594}, {\"bestTime\": 23.742749214172363}, {\"bestTime\": 0.3020498752593994}, {\"bestTime\": 0.8157029151916504}, {\"bestTime\": 0.7417030334472656}, {\"bestTime\": 0.8438849449157715}, {\"bestTime\": 5.439342021942139}, {\"bestTime\": 1.8701200485229492}, {\"bestTime\": 0.7463741302490234}, {\"bestTime\": 10.219377994537354}, {\"bestTime\": 2.1227810382843018}, {\"bestTime\": 23.353032112121582}, {\"bestTime\": 0.27251386642456055}, {\"bestTime\": 0.22749590873718262}, {\"bestTime\": 6.637101888656616}, {\"bestTime\": 4.2117760181427}, {\"bestTime\": 0.07944607734680176}, {\"bestTime\": 41.6068000793457}, {\"bestTime\": 0.2801640033721924}, {\"bestTime\": 0.18965911865234375}, {\"bestTime\": 0.5574569702148438}, {\"bestTime\": 52.36652588844299}, {\"bestTime\": 17.783511877059937}, {\"bestTime\": 0.21015095710754395}, {\"bestTime\": 1.5407838821411133}, {\"bestTime\": 12.558223962783813}, {\"bestTime\": 2.6752450466156006}, {\"bestTime\": 1.6632349491119385}, {\"bestTime\": 0.1277451515197754}, {\"bestTime\": 0.2116701602935791}, {\"bestTime\": 0.23037505149841309}, {\"bestTime\": 0.38727879524230957}, {\"bestTime\": 0.47391200065612793}, {\"bestTime\": 5.10810399055481}, {\"bestTime\": 35.52881598472595}, {\"bestTime\": 0.24624896049499512}, {\"bestTime\": 0.8032140731811523}, {\"bestTime\": 0.7245151996612549}, {\"bestTime\": 25.818722009658813}, {\"bestTime\": 0.3816969394683838}, {\"bestTime\": 0.1313941478729248}, {\"bestTime\": 0.12891411781311035}, {\"bestTime\": 0.4871339797973633}, {\"bestTime\": 0.678551197052002}, {\"bestTime\": 14.52736496925354}, {\"bestTime\": 15.370544910430908}, {\"bestTime\": 0.8491668701171875}, {\"bestTime\": 19.74747586250305}, {\"bestTime\": 8.973210096359253}, {\"bestTime\": 0.9722139835357666}, {\"bestTime\": 0.20153594017028809}, {\"bestTime\": 0.892380952835083}, {\"bestTime\": 0.3531160354614258}, {\"bestTime\": 0.30205202102661133}, {\"bestTime\": 2.157719850540161}, {\"bestTime\": 3.7066080570220947}, {\"bestTime\": 0.4195678234100342}, {\"bestTime\": 10.939458847045898}, {\"bestTime\": 0.1779341697692871}, {\"bestTime\": 2.0753700733184814}, {\"bestTime\": 0.15909314155578613}, {\"bestTime\": 15.38750696182251}, {\"bestTime\": 13.741991996765137}, {\"bestTime\": 28.415789127349854}, {\"bestTime\": 0.06345200538635254}, {\"bestTime\": 0.08054304122924805}, {\"bestTime\": 10.079277038574219}, {\"bestTime\": 45.59532308578491}, {\"bestTime\": 0.19141292572021484}, {\"bestTime\": 0.486436128616333}, {\"bestTime\": 0.35326290130615234}, {\"bestTime\": 0.0832209587097168}, {\"bestTime\": 0.06249094009399414}, {\"bestTime\": 2.5447921752929688}, {\"bestTime\": 0.09401392936706543}, {\"bestTime\": 1.9449548721313477}, {\"bestTime\": 4.63348913192749}, {\"bestTime\": 0.798712968826294}, {\"bestTime\": 0.28164005279541016}, {\"bestTime\": 0.22160601615905762}, {\"bestTime\": 9.495184898376465}, {\"bestTime\": 3.1057848930358887}, {\"bestTime\": 5.621002912521362}, {\"bestTime\": 39.46429204940796}, {\"bestTime\": 0.8298981189727783}, {\"bestTime\": 5.5359580516815186}, {\"bestTime\": 19.18468999862671}, {\"bestTime\": 4.681045055389404}, {\"bestTime\": 34.74170207977295}, {\"bestTime\": 41.46851110458374}, {\"bestTime\": 0.2956349849700928}, {\"bestTime\": 0.948261022567749}, {\"bestTime\": 13.531186819076538}, {\"bestTime\": 0.11255502700805664}, {\"bestTime\": 12.526174068450928}, {\"bestTime\": 0.4334409236907959}, {\"bestTime\": 0.18556785583496094}, {\"bestTime\": 1.206333875656128}, {\"bestTime\": 0.24485301971435547}, {\"bestTime\": 0.14665603637695312}, {\"bestTime\": 0.14633584022521973}, {\"bestTime\": 1.9453489780426025}, {\"bestTime\": 0.0633089542388916}, {\"bestTime\": 8.504855155944824}, {\"bestTime\": 0.48032307624816895}, {\"bestTime\": 50.570947885513306}, {\"bestTime\": 0.6917910575866699}, {\"bestTime\": 0.15244698524475098}, {\"bestTime\": 8.613245964050293}, {\"bestTime\": 0.2977118492126465}, {\"bestTime\": 21.86127781867981}, {\"bestTime\": 0.32318592071533203}, {\"bestTime\": 0.13501405715942383}, {\"bestTime\": 0.1759490966796875}, {\"bestTime\": 0.1942598819732666}, {\"bestTime\": 0.41185498237609863}, {\"bestTime\": 0.37026190757751465}, {\"bestTime\": 19.06050395965576}, {\"bestTime\": 0.5041830539703369}, {\"bestTime\": 0.6860330104827881}, {\"bestTime\": 1.8949830532073975}, {\"bestTime\": 2.643949031829834}, {\"bestTime\": 0.2701230049133301}, {\"bestTime\": 5.980352163314819}, {\"bestTime\": 0.814967155456543}, {\"bestTime\": 0.37172412872314453}, {\"bestTime\": 2.9967567920684814}, {\"bestTime\": 14.61380410194397}, {\"bestTime\": 0.13138890266418457}, {\"bestTime\": 0.13153600692749023}, {\"bestTime\": 12.183281898498535}, {\"bestTime\": 0.38118481636047363}, {\"bestTime\": 0.5509469509124756}, {\"bestTime\": 43.3771550655365}, {\"bestTime\": 29.950247049331665}, {\"bestTime\": 3.2194759845733643}, {\"bestTime\": 2.828238010406494}, {\"bestTime\": 0.4212939739227295}, {\"bestTime\": 0.27190494537353516}, {\"bestTime\": 4.963321208953857}, {\"bestTime\": 10.915421962738037}, {\"bestTime\": 0.08081293106079102}, {\"bestTime\": 1.2965130805969238}, {\"bestTime\": 0.833406925201416}, {\"bestTime\": 0.1398608684539795}, {\"bestTime\": 1.7411980628967285}, {\"bestTime\": 0.7519330978393555}, {\"bestTime\": 10.952269077301025}, {\"bestTime\": 0.0534510612487793}, {\"bestTime\": 0.22388601303100586}, {\"bestTime\": 0.7704839706420898}, {\"bestTime\": 0.481982946395874}, {\"bestTime\": 0.37828898429870605}, {\"bestTime\": 0.234238862991333}, {\"bestTime\": 0.7118570804595947}, {\"bestTime\": 3.9249000549316406}, {\"bestTime\": 0.2111971378326416}, {\"bestTime\": 5.905513048171997}, {\"bestTime\": 6.02879786491394}, {\"bestTime\": 18.691620111465454}, {\"bestTime\": 0.7143580913543701}, {\"bestTime\": 0.44473695755004883}, {\"bestTime\": 15.731011867523193}, {\"bestTime\": 1.2533020973205566}, {\"bestTime\": 2.511655807495117}, {\"bestTime\": 0.16273117065429688}, {\"bestTime\": 1.7681870460510254}, {\"bestTime\": 0.28173303604125977}, {\"bestTime\": 54.48647689819336}, {\"bestTime\": 0.2951688766479492}, {\"bestTime\": 0.5951888561248779}, {\"bestTime\": 0.05300188064575195}, {\"bestTime\": 38.567590951919556}, {\"bestTime\": 0.09182381629943848}, {\"bestTime\": 2.6354820728302}, {\"bestTime\": 12.713675022125244}, {\"bestTime\": 5.137559175491333}, {\"bestTime\": 0.6485269069671631}, {\"bestTime\": 0.7676818370819092}, {\"bestTime\": 0.490419864654541}, {\"bestTime\": 0.6221771240234375}, {\"bestTime\": 2.2179160118103027}, {\"bestTime\": 0.11719894409179688}, {\"bestTime\": 12.571322202682495}, {\"bestTime\": 0.3950979709625244}, {\"bestTime\": 0.45653700828552246}, {\"bestTime\": 0.15430092811584473}, {\"bestTime\": 0.2645230293273926}, {\"bestTime\": 33.561294078826904}, {\"bestTime\": 2.7333548069000244}, {\"bestTime\": 37.529491901397705}, {\"bestTime\": 12.142969131469727}, {\"bestTime\": 18.942402124404907}, {\"bestTime\": 0.2843317985534668}, {\"bestTime\": 1.024148941040039}, {\"bestTime\": 0.6804938316345215}, {\"bestTime\": 5.19124698638916}, {\"bestTime\": 4.271412134170532}, {\"bestTime\": 0.32388806343078613}, {\"bestTime\": 0.09840893745422363}, {\"bestTime\": 0.6919829845428467}, {\"bestTime\": 12.398355960845947}, {\"bestTime\": 3.016356945037842}, {\"bestTime\": 0.42720699310302734}, {\"bestTime\": 1.4988138675689697}, {\"bestTime\": 2.673798084259033}, {\"bestTime\": 0.41334009170532227}, {\"bestTime\": 3.8521549701690674}, {\"bestTime\": 17.525969982147217}, {\"bestTime\": 2.2787060737609863}, {\"bestTime\": 2.4607911109924316}, {\"bestTime\": 0.4904751777648926}, {\"bestTime\": 0.25644707679748535}, {\"bestTime\": 21.406028985977173}, {\"bestTime\": 7.32135796546936}, {\"bestTime\": 0.19690489768981934}, {\"bestTime\": 0.5490000247955322}, {\"bestTime\": 0.04720807075500488}, {\"bestTime\": 0.04754304885864258}, {\"bestTime\": 0.510516881942749}, {\"bestTime\": 0.17836618423461914}, {\"bestTime\": 9.401143074035645}, {\"bestTime\": 37.08918499946594}, {\"bestTime\": 0.5837869644165039}, {\"bestTime\": 0.2425990104675293}, {\"bestTime\": 20.155938863754272}, {\"bestTime\": 52.681007862091064}, {\"bestTime\": 4.159462928771973}, {\"bestTime\": 0.559683084487915}, {\"bestTime\": 0.7362141609191895}, {\"bestTime\": 0.350614070892334}, {\"bestTime\": 0.1721479892730713}, {\"bestTime\": 0.6089420318603516}, {\"bestTime\": 0.5332989692687988}, {\"bestTime\": 0.20371198654174805}, {\"bestTime\": 0.21318602561950684}, {\"bestTime\": 0.1276719570159912}, {\"bestTime\": 1.8743109703063965}, {\"bestTime\": 0.10488700866699219}, {\"bestTime\": 0.1138620376586914}, {\"bestTime\": 0.30629396438598633}, {\"bestTime\": 0.16993284225463867}, {\"bestTime\": 7.057882070541382}, {\"bestTime\": 0.5270488262176514}, {\"bestTime\": 4.521076202392578}, {\"bestTime\": 3.810109853744507}, {\"bestTime\": 3.83502197265625}, {\"bestTime\": 4.92274808883667}, {\"bestTime\": 0.4026341438293457}, {\"bestTime\": 0.4639129638671875}, {\"bestTime\": 0.1968381404876709}, {\"bestTime\": 0.27858495712280273}, {\"bestTime\": 15.164045095443726}, {\"bestTime\": 7.682156085968018}, {\"bestTime\": 0.7657690048217773}, {\"bestTime\": 0.5071289539337158}, {\"bestTime\": 6.486546993255615}, {\"bestTime\": 2.7447688579559326}, {\"bestTime\": 4.772068977355957}, {\"bestTime\": 0.2112407684326172}, {\"bestTime\": 0.27710795402526855}, {\"bestTime\": 0.3525509834289551}, {\"bestTime\": 0.38062405586242676}, {\"bestTime\": 0.1562328338623047}, {\"bestTime\": 15.59000015258789}, {\"bestTime\": 0.5642290115356445}, {\"bestTime\": 0.24928689002990723}, {\"bestTime\": 0.9846069812774658}, {\"bestTime\": 1.4793641567230225}, {\"bestTime\": 0.47475194931030273}, {\"bestTime\": 9.961407899856567}, {\"bestTime\": 1.2020268440246582}, {\"bestTime\": 0.5257291793823242}, {\"bestTime\": 2.8875889778137207}, {\"bestTime\": 4.559080123901367}, {\"bestTime\": 4.618811130523682}, {\"bestTime\": 0.4539761543273926}, {\"bestTime\": 4.681519985198975}, {\"bestTime\": 2.1209449768066406}, {\"bestTime\": 2.0966989994049072}, {\"bestTime\": 0.4978909492492676}, {\"bestTime\": 39.67084980010986}, {\"bestTime\": 0.4367520809173584}, {\"bestTime\": 3.7475199699401855}, {\"bestTime\": 4.0519020557403564}, {\"bestTime\": 0.18335294723510742}, {\"bestTime\": 6.521417856216431}, {\"bestTime\": 0.15572309494018555}, {\"bestTime\": 3.2334320545196533}, {\"bestTime\": 0.5439610481262207}, {\"bestTime\": 0.6690659523010254}, {\"bestTime\": 2.269908905029297}, {\"bestTime\": 2.9432530403137207}, {\"bestTime\": 0.19637703895568848}, {\"bestTime\": 0.42252087593078613}, {\"bestTime\": 43.4053750038147}, {\"bestTime\": 29.986531019210815}, {\"bestTime\": 0.33359408378601074}, {\"bestTime\": 0.7657959461212158}, {\"bestTime\": 4.204823017120361}, {\"bestTime\": 0.1210319995880127}, {\"bestTime\": 53.87936091423035}, {\"bestTime\": 0.39286208152770996}, {\"bestTime\": 5.464622974395752}, {\"bestTime\": 25.63602900505066}, {\"bestTime\": 0.9282081127166748}, {\"bestTime\": 0.43146395683288574}, {\"bestTime\": 16.33383798599243}, {\"bestTime\": 5.056987047195435}, {\"bestTime\": 0.9233551025390625}, {\"bestTime\": 0.19642400741577148}, {\"bestTime\": 0.05019021034240723}, {\"bestTime\": 7.7297539710998535}, {\"bestTime\": 0.23865914344787598}, {\"bestTime\": 3.1930811405181885}, {\"bestTime\": 0.0926520824432373}, {\"bestTime\": 56.49560594558716}, {\"bestTime\": 26.08758807182312}, {\"bestTime\": 5.202218055725098}, {\"bestTime\": 1.025312900543213}, {\"bestTime\": 1.3226141929626465}, {\"bestTime\": 1.3566300868988037}, {\"bestTime\": 18.884909868240356}, {\"bestTime\": 6.312146902084351}, {\"bestTime\": 34.03926205635071}, {\"bestTime\": 0.7066161632537842}, {\"bestTime\": 0.13109111785888672}, {\"bestTime\": 0.20920515060424805}, {\"bestTime\": 13.004935026168823}, {\"bestTime\": 0.9378330707550049}, {\"bestTime\": 2.6362369060516357}, {\"bestTime\": 1.4017751216888428}, {\"bestTime\": 0.23927617073059082}, {\"bestTime\": 23.65637993812561}, {\"bestTime\": 5.622112989425659}, {\"bestTime\": 3.0627400875091553}, {\"bestTime\": 0.5936698913574219}, {\"bestTime\": 7.743969917297363}, {\"bestTime\": 0.2754631042480469}, {\"bestTime\": 0.6178698539733887}, {\"bestTime\": 0.12609100341796875}, {\"bestTime\": 0.6749670505523682}, {\"bestTime\": 0.5010731220245361}, {\"bestTime\": 1.6786868572235107}, {\"bestTime\": 0.05185103416442871}, {\"bestTime\": 0.31522393226623535}, {\"bestTime\": 7.567430019378662}, {\"bestTime\": 0.6855168342590332}, {\"bestTime\": 0.28465700149536133}, {\"bestTime\": 0.374783992767334}, {\"bestTime\": 0.12683391571044922}, {\"bestTime\": 0.20853090286254883}, {\"bestTime\": 27.946851015090942}, {\"bestTime\": 0.2828829288482666}, {\"bestTime\": 3.2705130577087402}, {\"bestTime\": 7.047782897949219}, {\"bestTime\": 0.12009382247924805}, {\"bestTime\": 9.256524085998535}, {\"bestTime\": 0.0918281078338623}, {\"bestTime\": 0.7287650108337402}, {\"bestTime\": 13.333407878875732}, {\"bestTime\": 3.1480050086975098}, {\"bestTime\": 7.249139070510864}, {\"bestTime\": 0.4190340042114258}, {\"bestTime\": 2.790820837020874}, {\"bestTime\": 0.07644486427307129}, {\"bestTime\": 0.5066440105438232}, {\"bestTime\": 0.3446829319000244}, {\"bestTime\": 9.531774997711182}, {\"bestTime\": 0.4496300220489502}, {\"bestTime\": 2.074416160583496}, {\"bestTime\": 0.18298888206481934}, {\"bestTime\": 1.995621919631958}, {\"bestTime\": 0.12312102317810059}, {\"bestTime\": 0.6205289363861084}, {\"bestTime\": 0.12302398681640625}, {\"bestTime\": 0.34521913528442383}, {\"bestTime\": 0.396636962890625}, {\"bestTime\": 0.9508788585662842}, {\"bestTime\": 0.7055590152740479}, {\"bestTime\": 0.2397751808166504}, {\"bestTime\": 0.6022050380706787}, {\"bestTime\": 0.41545796394348145}, {\"bestTime\": 0.5496470928192139}, {\"bestTime\": 0.7092709541320801}, {\"bestTime\": 2.353863000869751}, {\"bestTime\": 0.26788878440856934}, {\"bestTime\": 0.21453285217285156}, {\"bestTime\": 0.788693904876709}, {\"bestTime\": 16.770971059799194}, {\"bestTime\": 0.18982291221618652}, {\"bestTime\": 3.638896942138672}, {\"bestTime\": 2.6237940788269043}, {\"bestTime\": 0.7245118618011475}, {\"bestTime\": 0.5572350025177002}, {\"bestTime\": 1.9462080001831055}, {\"bestTime\": 0.7372548580169678}, {\"bestTime\": 0.627018928527832}, {\"bestTime\": 0.26010799407958984}, {\"bestTime\": 0.20054912567138672}, {\"bestTime\": 24.263853073120117}, {\"bestTime\": 0.04655194282531738}, {\"bestTime\": 0.6786708831787109}, {\"bestTime\": 0.6796119213104248}, {\"bestTime\": 0.97409987449646}, {\"bestTime\": 28.1738498210907}, {\"bestTime\": 17.450171947479248}, {\"bestTime\": 0.741055965423584}, {\"bestTime\": 30.59866499900818}, {\"bestTime\": 0.5997822284698486}, {\"bestTime\": 0.30202603340148926}, {\"bestTime\": 0.8775548934936523}, {\"bestTime\": 12.206686019897461}, {\"bestTime\": 0.24009108543395996}, {\"bestTime\": 18.10927700996399}, {\"bestTime\": 0.27599501609802246}, {\"bestTime\": 0.11743617057800293}, {\"bestTime\": 36.03294491767883}, {\"bestTime\": 0.08103704452514648}, {\"bestTime\": 0.2607390880584717}, {\"bestTime\": 9.404664039611816}, {\"bestTime\": 7.312933921813965}, {\"bestTime\": 0.3980569839477539}, {\"bestTime\": 0.193389892578125}, {\"bestTime\": 0.12097501754760742}, {\"bestTime\": 10.227802991867065}, {\"bestTime\": 0.14310884475708008}, {\"bestTime\": 0.5447649955749512}, {\"bestTime\": 0.7279660701751709}, {\"bestTime\": 2.79654598236084}, {\"bestTime\": 0.2704601287841797}, {\"bestTime\": 0.2500791549682617}, {\"bestTime\": 3.52603816986084}, {\"bestTime\": 30.129056930541992}, {\"bestTime\": 0.34271907806396484}, {\"bestTime\": 40.977850914001465}, {\"bestTime\": 0.40588808059692383}, {\"bestTime\": 0.7589271068572998}, {\"bestTime\": 0.11464190483093262}, {\"bestTime\": 0.3811509609222412}, {\"bestTime\": 0.45380091667175293}, {\"bestTime\": 2.208595037460327}, {\"bestTime\": 0.21551990509033203}, {\"bestTime\": 33.68133807182312}, {\"bestTime\": 0.3072319030761719}, {\"bestTime\": 6.930781126022339}, {\"bestTime\": 0.9219529628753662}, {\"bestTime\": 0.1825869083404541}, {\"bestTime\": 27.968651056289673}, {\"bestTime\": 0.3205909729003906}, {\"bestTime\": 0.5757520198822021}, {\"bestTime\": 0.3761448860168457}, {\"bestTime\": 0.7160911560058594}, {\"bestTime\": 2.511721134185791}, {\"bestTime\": 11.597651958465576}, {\"bestTime\": 1.1553270816802979}, {\"bestTime\": 0.4287588596343994}, {\"bestTime\": 0.13979005813598633}, {\"bestTime\": 47.432713985443115}, {\"bestTime\": 0.0792839527130127}, {\"bestTime\": 1.5403778553009033}, {\"bestTime\": 0.303602933883667}, {\"bestTime\": 3.03182315826416}, {\"bestTime\": 0.6191339492797852}, {\"bestTime\": 0.4579172134399414}, {\"bestTime\": 0.3502509593963623}, {\"bestTime\": 0.9182839393615723}, {\"bestTime\": 3.059753179550171}, {\"bestTime\": 0.7750730514526367}, {\"bestTime\": 0.17395710945129395}, {\"bestTime\": 6.747013092041016}, {\"bestTime\": 1.884577989578247}, {\"bestTime\": 0.09255194664001465}, {\"bestTime\": 0.24104809761047363}, {\"bestTime\": 0.15024709701538086}, {\"bestTime\": 1.2600469589233398}, {\"bestTime\": 20.04096794128418}, {\"bestTime\": 9.317611932754517}, {\"bestTime\": 9.018749952316284}, {\"bestTime\": 0.3950538635253906}, {\"bestTime\": 2.4638381004333496}, {\"bestTime\": 0.23763203620910645}, {\"bestTime\": 45.78458595275879}, {\"bestTime\": 4.6644980907440186}, {\"bestTime\": 0.2059340476989746}, {\"bestTime\": 0.16453886032104492}, {\"bestTime\": 3.1176111698150635}, {\"bestTime\": 0.3570709228515625}, {\"bestTime\": 0.8790709972381592}, {\"bestTime\": 0.39606189727783203}, {\"bestTime\": 0.12434697151184082}, {\"bestTime\": 0.8686540126800537}, {\"bestTime\": 22.014370918273926}, {\"bestTime\": 0.285416841506958}, {\"bestTime\": 49.07097005844116}, {\"bestTime\": 0.34020209312438965}, {\"bestTime\": 0.10899901390075684}, {\"bestTime\": 8.326987028121948}, {\"bestTime\": 0.4882798194885254}, {\"bestTime\": 0.42461395263671875}, {\"bestTime\": 0.18283605575561523}, {\"bestTime\": 1.412165880203247}, {\"bestTime\": 0.44656801223754883}, {\"bestTime\": 3.051347017288208}, {\"bestTime\": 8.031284093856812}, {\"bestTime\": 0.17353415489196777}, {\"bestTime\": 0.2675821781158447}, {\"bestTime\": 2.8676300048828125}, {\"bestTime\": 0.30352282524108887}, {\"bestTime\": 0.2350919246673584}, {\"bestTime\": 0.853233814239502}, {\"bestTime\": 0.08022212982177734}, {\"bestTime\": 6.886528015136719}, {\"bestTime\": 0.4739699363708496}, {\"bestTime\": 8.834622859954834}, {\"bestTime\": 0.2794229984283447}, {\"bestTime\": 2.236043930053711}, {\"bestTime\": 0.14493799209594727}, {\"bestTime\": 2.5020978450775146}, {\"bestTime\": 1.0633409023284912}, {\"bestTime\": 1.9063539505004883}, {\"bestTime\": 55.59857201576233}, {\"bestTime\": 0.5828330516815186}, {\"bestTime\": 40.86588501930237}, {\"bestTime\": 0.27872705459594727}, {\"bestTime\": 19.211618900299072}, {\"bestTime\": 0.19663000106811523}, {\"bestTime\": 0.31229591369628906}, {\"bestTime\": 31.90131187438965}, {\"bestTime\": 0.12932705879211426}, {\"bestTime\": 0.27714991569519043}, {\"bestTime\": 0.07683610916137695}, {\"bestTime\": 1.199558973312378}, {\"bestTime\": 24.192000150680542}, {\"bestTime\": 1.0028860569000244}, {\"bestTime\": 0.40753698348999023}, {\"bestTime\": 1.652742862701416}, {\"bestTime\": 0.07733798027038574}, {\"bestTime\": 8.466835021972656}, {\"bestTime\": 1.2220830917358398}, {\"bestTime\": 14.973016023635864}, {\"bestTime\": 0.21361899375915527}, {\"bestTime\": 0.672990083694458}, {\"bestTime\": 0.23044204711914062}, {\"bestTime\": 19.796541929244995}, {\"bestTime\": 14.029090881347656}, {\"bestTime\": 0.8994309902191162}, {\"bestTime\": 0.8772938251495361}, {\"bestTime\": 27.902445077896118}, {\"bestTime\": 0.17112994194030762}, {\"bestTime\": 1.1287791728973389}, {\"bestTime\": 0.261646032333374}, {\"bestTime\": 5.439364194869995}, {\"bestTime\": 2.21038818359375}, {\"bestTime\": 0.3920419216156006}, {\"bestTime\": 0.10625004768371582}, {\"bestTime\": 19.747714042663574}, {\"bestTime\": 3.6022510528564453}, {\"bestTime\": 0.23434901237487793}, {\"bestTime\": 0.20945405960083008}, {\"bestTime\": 32.58414816856384}, {\"bestTime\": 34.077905893325806}, {\"bestTime\": 0.30916595458984375}, {\"bestTime\": 0.24395394325256348}, {\"bestTime\": 0.6114351749420166}, {\"bestTime\": 3.7156810760498047}, {\"bestTime\": 0.36371493339538574}, {\"bestTime\": 0.834892988204956}, {\"bestTime\": 26.67088294029236}, {\"bestTime\": 0.4039928913116455}, {\"bestTime\": 0.38689208030700684}, {\"bestTime\": 0.33260416984558105}, {\"bestTime\": 2.475215196609497}, {\"bestTime\": 24.309386014938354}, {\"bestTime\": 0.7813220024108887}, {\"bestTime\": 0.3140261173248291}, {\"bestTime\": 6.061819076538086}, {\"bestTime\": 0.6713290214538574}, {\"bestTime\": 0.6870720386505127}, {\"bestTime\": 0.1681520938873291}, {\"bestTime\": 52.19137978553772}, {\"bestTime\": 0.48431992530822754}, {\"bestTime\": 0.6178960800170898}, {\"bestTime\": 1.7340960502624512}, {\"bestTime\": 0.7547190189361572}, {\"bestTime\": 0.23031902313232422}, {\"bestTime\": 0.34011006355285645}, {\"bestTime\": 59.97643709182739}, {\"bestTime\": 6.533144950866699}, {\"bestTime\": 0.35382604598999023}, {\"bestTime\": 0.4463798999786377}, {\"bestTime\": 3.713015079498291}, {\"bestTime\": 0.2802410125732422}, {\"bestTime\": 0.6739051342010498}, {\"bestTime\": 0.29528188705444336}, {\"bestTime\": 0.17042207717895508}, {\"bestTime\": 0.5783889293670654}, {\"bestTime\": 45.39754104614258}, {\"bestTime\": 1.1482210159301758}, {\"bestTime\": 2.8162271976470947}, {\"bestTime\": 0.1843409538269043}, {\"bestTime\": 0.5452940464019775}, {\"bestTime\": 1.034114122390747}, {\"bestTime\": 1.1726949214935303}, {\"bestTime\": 0.6325898170471191}, {\"bestTime\": 0.20120811462402344}, {\"bestTime\": 0.1893918514251709}, {\"bestTime\": 6.603796005249023}, {\"bestTime\": 1.2276110649108887}, {\"bestTime\": 0.29208898544311523}, {\"bestTime\": 1.395697832107544}, {\"bestTime\": 0.18904995918273926}, {\"bestTime\": 3.1713969707489014}, {\"bestTime\": 1.112138032913208}, {\"bestTime\": 1.166043996810913}, {\"bestTime\": 5.773498058319092}, {\"bestTime\": 3.553373098373413}, {\"bestTime\": 2.2892770767211914}, {\"bestTime\": 0.6611759662628174}, {\"bestTime\": 4.174527168273926}, {\"bestTime\": 7.536098957061768}, {\"bestTime\": 9.393126964569092}, {\"bestTime\": 46.87646508216858}, {\"bestTime\": 7.735066175460815}, {\"bestTime\": 0.39181995391845703}, {\"bestTime\": 0.9136590957641602}, {\"bestTime\": 0.6792449951171875}, {\"bestTime\": 0.5317142009735107}, {\"bestTime\": 0.36914801597595215}, {\"bestTime\": 0.04879283905029297}, {\"bestTime\": 0.22693395614624023}, {\"bestTime\": 0.35626792907714844}, {\"bestTime\": 1.255500078201294}, {\"bestTime\": 4.160983085632324}, {\"bestTime\": 7.538601875305176}, {\"bestTime\": 0.2712249755859375}, {\"bestTime\": 3.3489248752593994}, {\"bestTime\": 0.2824831008911133}, {\"bestTime\": 0.38468003273010254}, {\"bestTime\": 2.2192862033843994}, {\"bestTime\": 1.4292380809783936}, {\"bestTime\": 0.8691079616546631}, {\"bestTime\": 0.7226381301879883}, {\"bestTime\": 28.00373101234436}, {\"bestTime\": 51.901875019073486}, {\"bestTime\": 0.17029094696044922}, {\"bestTime\": 0.20524311065673828}, {\"bestTime\": 0.10581207275390625}, {\"bestTime\": 14.355379819869995}, {\"bestTime\": 0.07626795768737793}, {\"bestTime\": 0.2824568748474121}, {\"bestTime\": 19.2809898853302}, {\"bestTime\": 11.86233401298523}, {\"bestTime\": 4.898375988006592}, {\"bestTime\": 1.0733110904693604}, {\"bestTime\": 16.697760105133057}, {\"bestTime\": 14.148741006851196}, {\"bestTime\": 0.3124420642852783}, {\"bestTime\": 0.9898431301116943}, {\"bestTime\": 0.3969399929046631}, {\"bestTime\": 0.6017630100250244}, {\"bestTime\": 0.23230600357055664}, {\"bestTime\": 0.8725020885467529}, {\"bestTime\": 19.040998935699463}, {\"bestTime\": 0.07991313934326172}, {\"bestTime\": 0.4791858196258545}, {\"bestTime\": 0.6500070095062256}, {\"bestTime\": 0.1768500804901123}, {\"bestTime\": 4.229122161865234}, {\"bestTime\": 0.27977991104125977}, {\"bestTime\": 5.163159132003784}, {\"bestTime\": 1.9161760807037354}, {\"bestTime\": 30.49888801574707}, {\"bestTime\": 0.8033268451690674}, {\"bestTime\": 1.5731770992279053}, {\"bestTime\": 0.2840280532836914}, {\"bestTime\": 0.25951695442199707}, {\"bestTime\": 1.7076499462127686}, {\"bestTime\": 14.02999496459961}, {\"bestTime\": 0.1445009708404541}, {\"bestTime\": 5.627130031585693}, {\"bestTime\": 1.2884578704833984}, {\"bestTime\": 0.28284287452697754}, {\"bestTime\": 1.709280014038086}, {\"bestTime\": 0.4872889518737793}, {\"bestTime\": 7.704505920410156}, {\"bestTime\": 1.034527063369751}, {\"bestTime\": 0.14801597595214844}, {\"bestTime\": 0.13679099082946777}, {\"bestTime\": 4.466875076293945}, {\"bestTime\": 2.79494309425354}, {\"bestTime\": 1.131809949874878}, {\"bestTime\": 5.623182058334351}, {\"bestTime\": 6.016125917434692}, {\"bestTime\": 16.052624940872192}, {\"bestTime\": 58.91051506996155}, {\"bestTime\": 1.3893380165100098}, {\"bestTime\": 0.28553104400634766}, {\"bestTime\": 32.12273097038269}, {\"bestTime\": 22.650920867919922}, {\"bestTime\": 0.2892420291900635}, {\"bestTime\": 0.7020280361175537}, {\"bestTime\": 1.2814319133758545}, {\"bestTime\": 4.4829301834106445}, {\"bestTime\": 21.778104066848755}, {\"bestTime\": 9.230948209762573}, {\"bestTime\": 22.368523836135864}, {\"bestTime\": 4.067209005355835}, {\"bestTime\": 8.917842149734497}, {\"bestTime\": 0.7661399841308594}, {\"bestTime\": 2.6890618801116943}, {\"bestTime\": 1.1599390506744385}, {\"bestTime\": 9.073775053024292}, {\"bestTime\": 0.2798631191253662}, {\"bestTime\": 6.310928106307983}, {\"bestTime\": 0.3057289123535156}, {\"bestTime\": 0.4545459747314453}, {\"bestTime\": 0.6714920997619629}, {\"bestTime\": 0.17001914978027344}, {\"bestTime\": 0.2908010482788086}, {\"bestTime\": 0.17920589447021484}, {\"bestTime\": 0.3535728454589844}, {\"bestTime\": 7.446388006210327}, {\"bestTime\": 0.42714500427246094}, {\"bestTime\": 0.7280368804931641}, {\"bestTime\": 2.7459850311279297}, {\"bestTime\": 0.1522819995880127}, {\"bestTime\": 1.6434731483459473}, {\"bestTime\": 0.24798202514648438}, {\"bestTime\": 0.6632521152496338}, {\"bestTime\": 0.6727070808410645}, {\"bestTime\": 7.86116099357605}, {\"bestTime\": 1.0956530570983887}, {\"bestTime\": 39.082890033721924}, {\"bestTime\": 6.373136043548584}, {\"bestTime\": 0.33577990531921387}, {\"bestTime\": 0.35469985008239746}, {\"bestTime\": 8.292701005935669}, {\"bestTime\": 0.38754701614379883}, {\"bestTime\": 0.27483510971069336}, {\"bestTime\": 7.516945123672485}, {\"bestTime\": 21.695196866989136}, {\"bestTime\": 0.3890869617462158}, {\"bestTime\": 0.4891469478607178}, {\"bestTime\": 0.756493091583252}, {\"bestTime\": 1.2759230136871338}, {\"bestTime\": 0.3395991325378418}, {\"bestTime\": 0.22420096397399902}, {\"bestTime\": 0.14066386222839355}, {\"bestTime\": 0.14841008186340332}, {\"bestTime\": 13.311875820159912}, {\"bestTime\": 0.30926990509033203}, {\"bestTime\": 21.060467004776}, {\"bestTime\": 0.10599303245544434}, {\"bestTime\": 0.7230608463287354}, {\"bestTime\": 3.4836981296539307}, {\"bestTime\": 39.57233786582947}, {\"bestTime\": 0.23749589920043945}, {\"bestTime\": 4.773725986480713}, {\"bestTime\": 0.7406580448150635}, {\"bestTime\": 0.6702890396118164}, {\"bestTime\": 0.21186089515686035}, {\"bestTime\": 0.3178739547729492}, {\"bestTime\": 0.2436070442199707}, {\"bestTime\": 1.5245120525360107}, {\"bestTime\": 0.6012899875640869}, {\"bestTime\": 0.27034616470336914}, {\"bestTime\": 1.6135530471801758}, {\"bestTime\": 8.46350908279419}, {\"bestTime\": 0.38410305976867676}, {\"bestTime\": 0.5497071743011475}, {\"bestTime\": 0.06285905838012695}, {\"bestTime\": 0.5146429538726807}, {\"bestTime\": 1.14506196975708}, {\"bestTime\": 22.48853898048401}, {\"bestTime\": 19.12547492980957}, {\"bestTime\": 13.428091049194336}, {\"bestTime\": 0.19784283638000488}, {\"bestTime\": 19.34100580215454}, {\"bestTime\": 0.04725289344787598}, {\"bestTime\": 11.603217840194702}, {\"bestTime\": 2.475766181945801}, {\"bestTime\": 0.08184099197387695}, {\"bestTime\": 1.0351519584655762}, {\"bestTime\": 1.2584280967712402}, {\"bestTime\": 0.17201709747314453}, {\"bestTime\": 25.66047692298889}, {\"bestTime\": 8.892453908920288}, {\"bestTime\": 0.5981888771057129}, {\"bestTime\": 0.3428230285644531}, {\"bestTime\": 0.8854539394378662}, {\"bestTime\": 1.396333932876587}, {\"bestTime\": 2.8821170330047607}, {\"bestTime\": 1.4101629257202148}, {\"bestTime\": 0.41468381881713867}, {\"bestTime\": 0.5567221641540527}, {\"bestTime\": 55.94078707695007}, {\"bestTime\": 0.2321779727935791}, {\"bestTime\": 0.055280208587646484}, {\"bestTime\": 0.25745487213134766}, {\"bestTime\": 0.3789370059967041}, {\"bestTime\": 38.341922998428345}, {\"bestTime\": 6.780334949493408}, {\"bestTime\": 0.5489239692687988}, {\"bestTime\": 0.7500269412994385}, {\"bestTime\": 0.47133493423461914}, {\"bestTime\": 0.22772216796875}, {\"bestTime\": 0.27255892753601074}, {\"bestTime\": 1.444586992263794}, {\"bestTime\": 0.33325695991516113}, {\"bestTime\": 0.17743611335754395}, {\"bestTime\": 0.7019290924072266}, {\"bestTime\": 55.62450313568115}, {\"bestTime\": 0.26288914680480957}, {\"bestTime\": 0.6132028102874756}, {\"bestTime\": 0.6597249507904053}, {\"bestTime\": 0.21813511848449707}, {\"bestTime\": 0.6945319175720215}, {\"bestTime\": 0.047569990158081055}, {\"bestTime\": 3.130316972732544}, {\"bestTime\": 0.30632805824279785}, {\"bestTime\": 0.35034990310668945}, {\"bestTime\": 8.137059926986694}, {\"bestTime\": 0.4557199478149414}, {\"bestTime\": 0.41247105598449707}, {\"bestTime\": 0.18505311012268066}, {\"bestTime\": 0.12865710258483887}, {\"bestTime\": 0.12156105041503906}, {\"bestTime\": 0.6853411197662354}, {\"bestTime\": 0.27853894233703613}, {\"bestTime\": 0.3749520778656006}, {\"bestTime\": 0.05428481101989746}, {\"bestTime\": 3.5063021183013916}, {\"bestTime\": 3.584009885787964}, {\"bestTime\": 0.7267460823059082}, {\"bestTime\": 0.7333040237426758}, {\"bestTime\": 0.14950013160705566}, {\"bestTime\": 17.129849910736084}, {\"bestTime\": 1.3494460582733154}, {\"bestTime\": 0.21174287796020508}, {\"bestTime\": 27.93280601501465}, {\"bestTime\": 0.28077101707458496}, {\"bestTime\": 5.116379022598267}, {\"bestTime\": 2.8116118907928467}, {\"bestTime\": 1.5148630142211914}, {\"bestTime\": 12.06892704963684}, {\"bestTime\": 16.517170906066895}, {\"bestTime\": 0.5081758499145508}, {\"bestTime\": 0.5265581607818604}, {\"bestTime\": 0.1721808910369873}, {\"bestTime\": 59.39471697807312}, {\"bestTime\": 0.1376650333404541}, {\"bestTime\": 0.14955902099609375}, {\"bestTime\": 1.014868974685669}, {\"bestTime\": 0.20851588249206543}, {\"bestTime\": 0.16348481178283691}, {\"bestTime\": 3.338027000427246}, {\"bestTime\": 39.387129068374634}, {\"bestTime\": 1.4685330390930176}, {\"bestTime\": 0.3613910675048828}, {\"bestTime\": 7.451321125030518}, {\"bestTime\": 2.1694979667663574}, {\"bestTime\": 0.39176011085510254}, {\"bestTime\": 0.4004511833190918}, {\"bestTime\": 0.6672840118408203}, {\"bestTime\": 0.23568201065063477}, {\"bestTime\": 8.247360944747925}, {\"bestTime\": 48.80650281906128}, {\"bestTime\": 0.15060114860534668}, {\"bestTime\": 28.553164958953857}, {\"bestTime\": 2.4660580158233643}, {\"bestTime\": 1.1747348308563232}, {\"bestTime\": 0.6195929050445557}, {\"bestTime\": 0.7328541278839111}, {\"bestTime\": 5.262260913848877}, {\"bestTime\": 0.09731698036193848}, {\"bestTime\": 11.106200933456421}, {\"bestTime\": 19.603159189224243}, {\"bestTime\": 36.56371593475342}, {\"bestTime\": 2.5616278648376465}, {\"bestTime\": 8.412523984909058}, {\"bestTime\": 3.5649831295013428}, {\"bestTime\": 0.1367499828338623}, {\"bestTime\": 8.945976972579956}, {\"bestTime\": 55.86505699157715}, {\"bestTime\": 2.5949289798736572}, {\"bestTime\": 38.68822193145752}, {\"bestTime\": 0.3069620132446289}, {\"bestTime\": 18.68319296836853}, {\"bestTime\": 0.10864901542663574}, {\"bestTime\": 1.1485319137573242}, {\"bestTime\": 0.4612901210784912}, {\"bestTime\": 3.0757579803466797}, {\"bestTime\": 33.10364103317261}, {\"bestTime\": 0.364163875579834}, {\"bestTime\": 29.915063858032227}, {\"bestTime\": 14.868129014968872}, {\"bestTime\": 1.824882984161377}, {\"bestTime\": 1.1596369743347168}, {\"bestTime\": 27.95071291923523}, {\"bestTime\": 3.055490016937256}, {\"bestTime\": 0.3265559673309326}, {\"bestTime\": 0.8924829959869385}, {\"bestTime\": 0.7688050270080566}, {\"bestTime\": 0.37200403213500977}, {\"bestTime\": 0.8735148906707764}, {\"bestTime\": 0.1986861228942871}, {\"bestTime\": 0.19034910202026367}, {\"bestTime\": 0.14179015159606934}, {\"bestTime\": 34.56400799751282}, {\"bestTime\": 0.5275280475616455}, {\"bestTime\": 0.7309198379516602}, {\"bestTime\": 0.5378398895263672}, {\"bestTime\": 0.07982397079467773}, {\"bestTime\": 3.193047046661377}, {\"bestTime\": 0.25786900520324707}, {\"bestTime\": 0.06195402145385742}, {\"bestTime\": 10.301476001739502}, {\"bestTime\": 0.2510561943054199}, {\"bestTime\": 7.046886920928955}, {\"bestTime\": 0.3402588367462158}, {\"bestTime\": 7.627403020858765}, {\"bestTime\": 2.72979998588562}, {\"bestTime\": 0.5743598937988281}, {\"bestTime\": 2.4383459091186523}, {\"bestTime\": 2.1846702098846436}, {\"bestTime\": 0.10095596313476562}, {\"bestTime\": 55.62467694282532}, {\"bestTime\": 0.2995879650115967}, {\"bestTime\": 0.2039508819580078}, {\"bestTime\": 24.048419952392578}, {\"bestTime\": 0.1617600917816162}, {\"bestTime\": 0.14276409149169922}, {\"bestTime\": 0.5075647830963135}, {\"bestTime\": 20.587197065353394}, {\"bestTime\": 2.5753581523895264}, {\"bestTime\": 1.6431798934936523}, {\"bestTime\": 1.0340337753295898}, {\"bestTime\": 4.6906960010528564}, {\"bestTime\": 3.724224090576172}, {\"bestTime\": 0.1480398178100586}, {\"bestTime\": 0.09073495864868164}, {\"bestTime\": 20.07372808456421}, {\"bestTime\": 5.326157093048096}, {\"bestTime\": 7.749764919281006}, {\"bestTime\": 0.26706385612487793}, {\"bestTime\": 0.35417795181274414}, {\"bestTime\": 0.6657588481903076}, {\"bestTime\": 0.322145938873291}, {\"bestTime\": 1.1913509368896484}, {\"bestTime\": 1.1759748458862305}, {\"bestTime\": 1.1061668395996094}, {\"bestTime\": 33.268845081329346}, {\"bestTime\": 2.6544058322906494}, {\"bestTime\": 0.6712539196014404}, {\"bestTime\": 0.15550899505615234}, {\"bestTime\": 11.813135147094727}, {\"bestTime\": 0.11170196533203125}, {\"bestTime\": 18.170676946640015}, {\"bestTime\": 0.8399448394775391}, {\"bestTime\": 0.23994708061218262}, {\"bestTime\": 0.48798203468322754}, {\"bestTime\": 0.6082921028137207}, {\"bestTime\": 5.102324962615967}, {\"bestTime\": 3.4524412155151367}, {\"bestTime\": 0.47137999534606934}, {\"bestTime\": 2.93072509765625}, {\"bestTime\": 2.6001508235931396}, {\"bestTime\": 0.2797660827636719}, {\"bestTime\": 14.060163974761963}, {\"bestTime\": 0.6166491508483887}, {\"bestTime\": 0.9344789981842041}, {\"bestTime\": 40.93161702156067}, {\"bestTime\": 0.38367509841918945}, {\"bestTime\": 0.19489598274230957}, {\"bestTime\": 1.3585920333862305}, {\"bestTime\": 16.538471937179565}, {\"bestTime\": 54.300787925720215}, {\"bestTime\": 0.24905014038085938}, {\"bestTime\": 0.3542211055755615}, {\"bestTime\": 0.2696518898010254}, {\"bestTime\": 11.622956991195679}, {\"bestTime\": 7.40493106842041}, {\"bestTime\": 0.21541094779968262}, {\"bestTime\": 0.45639705657958984}, {\"bestTime\": 2.829892873764038}, {\"bestTime\": 0.23034214973449707}, {\"bestTime\": 12.491835117340088}, {\"bestTime\": 0.21364593505859375}, {\"bestTime\": 0.22858095169067383}, {\"bestTime\": 0.9184188842773438}, {\"bestTime\": 5.099622011184692}, {\"bestTime\": 0.6961779594421387}, {\"bestTime\": 9.316566944122314}, {\"bestTime\": 0.3800978660583496}, {\"bestTime\": 0.18459606170654297}, {\"bestTime\": 1.3745169639587402}, {\"bestTime\": 0.8279998302459717}, {\"bestTime\": 0.9722390174865723}, {\"bestTime\": 0.13961005210876465}, {\"bestTime\": 2.232611894607544}, {\"bestTime\": 0.7406299114227295}, {\"bestTime\": 4.266009092330933}, {\"bestTime\": 4.492660999298096}, {\"bestTime\": 1.0103709697723389}, {\"bestTime\": 0.27729296684265137}, {\"bestTime\": 1.1584999561309814}, {\"bestTime\": 40.81335401535034}, {\"bestTime\": 0.14516997337341309}, {\"bestTime\": 0.5331168174743652}, {\"bestTime\": 1.5327608585357666}, {\"bestTime\": 4.638046979904175}, {\"bestTime\": 5.118753910064697}, {\"bestTime\": 0.2603271007537842}, {\"bestTime\": 4.245763063430786}, {\"bestTime\": 0.22044610977172852}, {\"bestTime\": 0.18602991104125977}, {\"bestTime\": 0.18381500244140625}, {\"bestTime\": 0.784919023513794}, {\"bestTime\": 31.884207010269165}, {\"bestTime\": 0.1842360496520996}, {\"bestTime\": 0.29798007011413574}, {\"bestTime\": 0.2295548915863037}, {\"bestTime\": 0.37967991828918457}, {\"bestTime\": 4.376006841659546}, {\"bestTime\": 8.20170521736145}, {\"bestTime\": 0.27382707595825195}, {\"bestTime\": 35.04143285751343}, {\"bestTime\": 0.4011378288269043}, {\"bestTime\": 3.6624867916107178}, {\"bestTime\": 0.19750499725341797}, {\"bestTime\": 0.13931679725646973}, {\"bestTime\": 2.0407490730285645}, {\"bestTime\": 0.15233087539672852}, {\"bestTime\": 0.6768097877502441}, {\"bestTime\": 0.15026521682739258}, {\"bestTime\": 4.7169270515441895}, {\"bestTime\": 0.48653292655944824}, {\"bestTime\": 0.06391596794128418}, {\"bestTime\": 8.42612910270691}, {\"bestTime\": 1.5571238994598389}, {\"bestTime\": 0.35139012336730957}, {\"bestTime\": 30.595942974090576}, {\"bestTime\": 0.1913900375366211}, {\"bestTime\": 0.47208690643310547}, {\"bestTime\": 0.15941596031188965}, {\"bestTime\": 3.9743850231170654}, {\"bestTime\": 15.830312967300415}, {\"bestTime\": 0.0639960765838623}, {\"bestTime\": 6.897671222686768}, {\"bestTime\": 0.8220679759979248}, {\"bestTime\": 0.31078290939331055}, {\"bestTime\": 7.225872039794922}, {\"bestTime\": 0.18155217170715332}, {\"bestTime\": 1.8345918655395508}, {\"bestTime\": 30.735801935195923}, {\"bestTime\": 0.19133400917053223}, {\"bestTime\": 0.18326616287231445}, {\"bestTime\": 0.22769808769226074}, {\"bestTime\": 0.3503270149230957}, {\"bestTime\": 0.1644608974456787}, {\"bestTime\": 0.3152608871459961}, {\"bestTime\": 1.9088618755340576}, {\"bestTime\": 18.318902015686035}, {\"bestTime\": 41.43870282173157}, {\"bestTime\": 37.32197093963623}, {\"bestTime\": 0.8742680549621582}, {\"bestTime\": 15.83069896697998}, {\"bestTime\": 6.607964992523193}, {\"bestTime\": 0.37607598304748535}, {\"bestTime\": 1.2792460918426514}, {\"bestTime\": 0.2808220386505127}, {\"bestTime\": 12.911226034164429}, {\"bestTime\": 0.7337720394134521}, {\"bestTime\": 2.8485779762268066}, {\"bestTime\": 1.9742541313171387}, {\"bestTime\": 0.2801499366760254}, {\"bestTime\": 2.1887879371643066}, {\"bestTime\": 0.07971000671386719}, {\"bestTime\": 1.9590790271759033}, {\"bestTime\": 19.51720094680786}, {\"bestTime\": 0.17405390739440918}, {\"bestTime\": 4.153970956802368}, {\"bestTime\": 26.7216579914093}, {\"bestTime\": 0.9500868320465088}, {\"bestTime\": 3.3519351482391357}, {\"bestTime\": 7.709106922149658}, {\"bestTime\": 0.3443281650543213}, {\"bestTime\": 0.1549990177154541}, {\"bestTime\": 10.652570962905884}, {\"bestTime\": 0.7640299797058105}, {\"bestTime\": 0.925678014755249}, {\"bestTime\": 58.105802059173584}, {\"bestTime\": 0.31420087814331055}, {\"bestTime\": 18.491672039031982}, {\"bestTime\": 0.2792050838470459}, {\"bestTime\": 0.5094180107116699}, {\"bestTime\": 0.28667497634887695}, {\"bestTime\": 0.25534486770629883}, {\"bestTime\": 1.1339900493621826}, {\"bestTime\": 1.9349169731140137}, {\"bestTime\": 19.360979795455933}, {\"bestTime\": 20.190731048583984}, {\"bestTime\": 0.24085378646850586}, {\"bestTime\": 0.12046694755554199}, {\"bestTime\": 3.070122003555298}, {\"bestTime\": 8.475353002548218}, {\"bestTime\": 0.5810279846191406}, {\"bestTime\": 5.678542852401733}, {\"bestTime\": 0.9441940784454346}, {\"bestTime\": 2.6216721534729004}, {\"bestTime\": 37.89282512664795}, {\"bestTime\": 0.16545605659484863}, {\"bestTime\": 8.476364850997925}, {\"bestTime\": 10.54639720916748}, {\"bestTime\": 29.224479913711548}, {\"bestTime\": 0.13067388534545898}, {\"bestTime\": 0.21265602111816406}, {\"bestTime\": 6.889617919921875}, {\"bestTime\": 0.2238759994506836}, {\"bestTime\": 0.6321101188659668}, {\"bestTime\": 12.436858177185059}, {\"bestTime\": 4.570631980895996}, {\"bestTime\": 0.5954060554504395}, {\"bestTime\": 0.1387629508972168}, {\"bestTime\": 0.15487003326416016}, {\"bestTime\": 0.6061160564422607}, {\"bestTime\": 5.389098882675171}, {\"bestTime\": 2.3415729999542236}, {\"bestTime\": 0.3907351493835449}, {\"bestTime\": 0.5121200084686279}, {\"bestTime\": 4.596999168395996}, {\"bestTime\": 0.12887096405029297}, {\"bestTime\": 0.6651639938354492}, {\"bestTime\": 0.5438179969787598}, {\"bestTime\": 37.47347617149353}, {\"bestTime\": 0.24028992652893066}, {\"bestTime\": 7.3389809131622314}, {\"bestTime\": 0.26822900772094727}, {\"bestTime\": 5.934784889221191}, {\"bestTime\": 0.20412492752075195}, {\"bestTime\": 11.311140060424805}, {\"bestTime\": 0.12094497680664062}, {\"bestTime\": 17.052243947982788}, {\"bestTime\": 0.14876794815063477}, {\"bestTime\": 2.7139458656311035}, {\"bestTime\": 1.8489060401916504}, {\"bestTime\": 0.3578481674194336}, {\"bestTime\": 0.47687506675720215}, {\"bestTime\": 20.964636087417603}, {\"bestTime\": 0.32225990295410156}, {\"bestTime\": 2.040472984313965}, {\"bestTime\": 0.42698097229003906}, {\"bestTime\": 0.6623070240020752}, {\"bestTime\": 2.8762168884277344}, {\"bestTime\": 27.368757009506226}, {\"bestTime\": 0.19426512718200684}, {\"bestTime\": 3.8622360229492188}, {\"bestTime\": 7.005014896392822}, {\"bestTime\": 0.29972195625305176}, {\"bestTime\": 0.3086819648742676}, {\"bestTime\": 0.27349090576171875}, {\"bestTime\": 6.254355192184448}, {\"bestTime\": 0.12753605842590332}, {\"bestTime\": 3.849151134490967}, {\"bestTime\": 8.220386028289795}, {\"bestTime\": 0.21944403648376465}, {\"bestTime\": 0.607551097869873}, {\"bestTime\": 0.17284798622131348}, {\"bestTime\": 0.5354688167572021}, {\"bestTime\": 0.2048649787902832}, {\"bestTime\": 0.35950493812561035}, {\"bestTime\": 0.1064920425415039}, {\"bestTime\": 51.58765387535095}, {\"bestTime\": 0.4760899543762207}, {\"bestTime\": 0.2556419372558594}, {\"bestTime\": 0.4999198913574219}, {\"bestTime\": 0.28183603286743164}, {\"bestTime\": 8.902649879455566}, {\"bestTime\": 4.643218994140625}, {\"bestTime\": 0.35223817825317383}, {\"bestTime\": 0.7619228363037109}, {\"bestTime\": 5.501746892929077}, {\"bestTime\": 0.5121440887451172}, {\"bestTime\": 4.610738039016724}, {\"bestTime\": 4.906084060668945}, {\"bestTime\": 2.875910997390747}, {\"bestTime\": 0.21067094802856445}, {\"bestTime\": 0.8352921009063721}, {\"bestTime\": 5.116241216659546}, {\"bestTime\": 40.88472104072571}, {\"bestTime\": 52.57136607170105}, {\"bestTime\": 0.11081695556640625}, {\"bestTime\": 47.05527091026306}, {\"bestTime\": 9.305830955505371}, {\"bestTime\": 10.152199029922485}, {\"bestTime\": 0.38665008544921875}, {\"bestTime\": 8.554124116897583}, {\"bestTime\": 5.904521942138672}, {\"bestTime\": 31.629294872283936}, {\"bestTime\": 0.7216489315032959}, {\"bestTime\": 4.792950868606567}, {\"bestTime\": 2.2872588634490967}, {\"bestTime\": 29.862468957901}, {\"bestTime\": 3.391580104827881}, {\"bestTime\": 0.6799490451812744}, {\"bestTime\": 15.339087009429932}, {\"bestTime\": 3.6125729084014893}, {\"bestTime\": 1.5236451625823975}, {\"bestTime\": 5.825953960418701}, {\"bestTime\": 11.784716129302979}, {\"bestTime\": 1.2203238010406494}, {\"bestTime\": 0.6762049198150635}, {\"bestTime\": 0.5916850566864014}, {\"bestTime\": 0.18495392799377441}, {\"bestTime\": 0.9573690891265869}, {\"bestTime\": 6.4576661586761475}, {\"bestTime\": 22.6283860206604}, {\"bestTime\": 0.4216339588165283}, {\"bestTime\": 0.17835402488708496}, {\"bestTime\": 6.3349449634552}, {\"bestTime\": 4.440181016921997}, {\"bestTime\": 0.4628140926361084}, {\"bestTime\": 0.4147911071777344}, {\"bestTime\": 0.7042849063873291}, {\"bestTime\": 8.00879192352295}, {\"bestTime\": 0.04773211479187012}, {\"bestTime\": 0.15018916130065918}, {\"bestTime\": 47.43273591995239}, {\"bestTime\": 0.12144589424133301}, {\"bestTime\": 9.288218021392822}, {\"bestTime\": 3.5141351222991943}, {\"bestTime\": 0.15187597274780273}, {\"bestTime\": 45.000089168548584}, {\"bestTime\": 10.991911172866821}, {\"bestTime\": 0.26935887336730957}, {\"bestTime\": 6.832905054092407}, {\"bestTime\": 0.2609689235687256}, {\"bestTime\": 2.88108491897583}, {\"bestTime\": 0.3720970153808594}, {\"bestTime\": 0.9480671882629395}, {\"bestTime\": 0.47355198860168457}, {\"bestTime\": 21.96009087562561}, {\"bestTime\": 42.393571853637695}, {\"bestTime\": 43.38692593574524}, {\"bestTime\": 0.32257890701293945}, {\"bestTime\": 0.6144728660583496}, {\"bestTime\": 2.2130510807037354}, {\"bestTime\": 0.38901495933532715}, {\"bestTime\": 0.7752819061279297}, {\"bestTime\": 1.1214351654052734}, {\"bestTime\": 0.5257830619812012}, {\"bestTime\": 1.9274101257324219}, {\"bestTime\": 0.18253087997436523}, {\"bestTime\": 5.361304998397827}, {\"bestTime\": 0.13839483261108398}, {\"bestTime\": 0.1562490463256836}, {\"bestTime\": 0.6688728332519531}, {\"bestTime\": 1.4793980121612549}, {\"bestTime\": 0.5560951232910156}, {\"bestTime\": 7.68505597114563}, {\"bestTime\": 0.9822239875793457}, {\"bestTime\": 7.207576036453247}, {\"bestTime\": 0.8186039924621582}, {\"bestTime\": 2.8162059783935547}, {\"bestTime\": 0.09563899040222168}, {\"bestTime\": 2.1636409759521484}, {\"bestTime\": 0.4246351718902588}, {\"bestTime\": 0.1295909881591797}, {\"bestTime\": 13.3332200050354}, {\"bestTime\": 16.746830940246582}, {\"bestTime\": 0.8899328708648682}, {\"bestTime\": 0.24777507781982422}, {\"bestTime\": 3.0274670124053955}, {\"bestTime\": 8.5030038356781}, {\"bestTime\": 0.5846621990203857}, {\"bestTime\": 0.2836639881134033}, {\"bestTime\": 2.0099759101867676}, {\"bestTime\": 0.28593993186950684}, {\"bestTime\": 0.23345303535461426}, {\"bestTime\": 0.6729888916015625}, {\"bestTime\": 8.036900997161865}, {\"bestTime\": 0.2195110321044922}, {\"bestTime\": 7.299456834793091}, {\"bestTime\": 0.11093497276306152}, {\"bestTime\": 18.71570897102356}, {\"bestTime\": 37.19109296798706}, {\"bestTime\": 1.0253870487213135}, {\"bestTime\": 8.999649047851562}, {\"bestTime\": 0.1335608959197998}, {\"bestTime\": 3.9315128326416016}, {\"bestTime\": 0.6197659969329834}, {\"bestTime\": 0.23370695114135742}, {\"bestTime\": 7.722185134887695}, {\"bestTime\": 0.2711930274963379}, {\"bestTime\": 3.296527862548828}, {\"bestTime\": 4.268288850784302}, {\"bestTime\": 43.04534077644348}, {\"bestTime\": 1.0868251323699951}, {\"bestTime\": 2.2998440265655518}, {\"bestTime\": 13.865705013275146}, {\"bestTime\": 22.152390956878662}, {\"bestTime\": 1.2395708560943604}, {\"bestTime\": 16.59526014328003}, {\"bestTime\": 0.43250203132629395}, {\"bestTime\": 0.3090388774871826}, {\"bestTime\": 14.289078950881958}, {\"bestTime\": 3.4500880241394043}, {\"bestTime\": 0.2780640125274658}, {\"bestTime\": 0.6836960315704346}, {\"bestTime\": 0.07957005500793457}, {\"bestTime\": 0.15401220321655273}, {\"bestTime\": 39.402859926223755}, {\"bestTime\": 0.32970404624938965}, {\"bestTime\": 0.18243193626403809}, {\"bestTime\": 2.947305917739868}, {\"bestTime\": 2.7671430110931396}, {\"bestTime\": 0.6155080795288086}, {\"bestTime\": 0.20052099227905273}, {\"bestTime\": 0.44459009170532227}, {\"bestTime\": 0.7074182033538818}, {\"bestTime\": 0.0483248233795166}, {\"bestTime\": 0.25388216972351074}, {\"bestTime\": 0.048564910888671875}, {\"bestTime\": 26.569963932037354}, {\"bestTime\": 1.2685589790344238}, {\"bestTime\": 0.17943620681762695}, {\"bestTime\": 30.246731996536255}, {\"bestTime\": 32.74822807312012}, {\"bestTime\": 2.2642900943756104}, {\"bestTime\": 29.832003116607666}, {\"bestTime\": 0.6867191791534424}, {\"bestTime\": 5.269129991531372}, {\"bestTime\": 4.750046968460083}, {\"bestTime\": 13.95337700843811}, {\"bestTime\": 0.24609994888305664}, {\"bestTime\": 41.061991930007935}, {\"bestTime\": 0.7231719493865967}, {\"bestTime\": 2.034799098968506}, {\"bestTime\": 0.5816800594329834}, {\"bestTime\": 0.8225491046905518}, {\"bestTime\": 0.6682929992675781}, {\"bestTime\": 0.7256169319152832}, {\"bestTime\": 10.085047960281372}, {\"bestTime\": 2.1616690158843994}, {\"bestTime\": 13.286805152893066}, {\"bestTime\": 1.9803800582885742}, {\"bestTime\": 0.15625691413879395}, {\"bestTime\": 6.453435897827148}, {\"bestTime\": 0.7620079517364502}, {\"bestTime\": 3.4369800090789795}, {\"bestTime\": 3.077465057373047}, {\"bestTime\": 0.211104154586792}, {\"bestTime\": 12.781291007995605}, {\"bestTime\": 0.6203551292419434}, {\"bestTime\": 0.8866040706634521}, {\"bestTime\": 0.5503988265991211}, {\"bestTime\": 1.0978550910949707}, {\"bestTime\": 0.349714994430542}, {\"bestTime\": 33.73843693733215}, {\"bestTime\": 2.784514904022217}, {\"bestTime\": 3.7281100749969482}, {\"bestTime\": 0.8584611415863037}, {\"bestTime\": 1.3274619579315186}, {\"bestTime\": 0.27404093742370605}, {\"bestTime\": 16.49781584739685}, {\"bestTime\": 7.717248916625977}, {\"bestTime\": 29.39767098426819}, {\"bestTime\": 0.11497807502746582}, {\"bestTime\": 0.28485584259033203}, {\"bestTime\": 0.17403697967529297}, {\"bestTime\": 2.947129964828491}, {\"bestTime\": 3.6586458683013916}, {\"bestTime\": 0.07074809074401855}, {\"bestTime\": 2.286623001098633}, {\"bestTime\": 1.5293750762939453}, {\"bestTime\": 0.17472505569458008}, {\"bestTime\": 0.5382130146026611}, {\"bestTime\": 1.456963062286377}, {\"bestTime\": 12.499539852142334}, {\"bestTime\": 0.21162199974060059}, {\"bestTime\": 0.2305769920349121}, {\"bestTime\": 0.3183431625366211}, {\"bestTime\": 0.47476887702941895}, {\"bestTime\": 0.38043713569641113}, {\"bestTime\": 0.5621969699859619}, {\"bestTime\": 47.68535494804382}, {\"bestTime\": 1.0229392051696777}, {\"bestTime\": 1.6069788932800293}, {\"bestTime\": 15.063451051712036}, {\"bestTime\": 0.7267210483551025}, {\"bestTime\": 1.97216796875}, {\"bestTime\": 42.58662700653076}, {\"bestTime\": 0.08112311363220215}, {\"bestTime\": 2.6711618900299072}, {\"bestTime\": 0.6377310752868652}, {\"bestTime\": 1.1806409358978271}, {\"bestTime\": 3.032778024673462}, {\"bestTime\": 11.730121850967407}, {\"bestTime\": 0.13663506507873535}, {\"bestTime\": 26.47664713859558}, {\"bestTime\": 0.6037631034851074}, {\"bestTime\": 0.38748717308044434}, {\"bestTime\": 0.19742798805236816}, {\"bestTime\": 13.924084901809692}, {\"bestTime\": 9.867548942565918}, {\"bestTime\": 3.5456130504608154}, {\"bestTime\": 2.2937159538269043}, {\"bestTime\": 0.9306068420410156}, {\"bestTime\": 21.698460817337036}, {\"bestTime\": 37.864479780197144}, {\"bestTime\": 0.2733800411224365}, {\"bestTime\": 32.977181911468506}, {\"bestTime\": 0.48560404777526855}, {\"bestTime\": 0.6768679618835449}, {\"bestTime\": 6.0495710372924805}, {\"bestTime\": 2.8644959926605225}, {\"bestTime\": 0.43141722679138184}, {\"bestTime\": 0.13124895095825195}, {\"bestTime\": 0.13060688972473145}, {\"bestTime\": 0.8363521099090576}, {\"bestTime\": 42.20171809196472}, {\"bestTime\": 0.24881219863891602}, {\"bestTime\": 0.8272981643676758}, {\"bestTime\": 0.36087799072265625}, {\"bestTime\": 1.2749519348144531}, {\"bestTime\": 0.24289393424987793}, {\"bestTime\": 0.6681830883026123}, {\"bestTime\": 0.15508198738098145}, {\"bestTime\": 6.926297903060913}, {\"bestTime\": 0.1500110626220703}, {\"bestTime\": 7.7306129932403564}, {\"bestTime\": 23.94597315788269}, {\"bestTime\": 10.99246096611023}, {\"bestTime\": 2.5439069271087646}, {\"bestTime\": 1.0244090557098389}, {\"bestTime\": 0.32595014572143555}, {\"bestTime\": 4.002220153808594}, {\"bestTime\": 0.6658210754394531}, {\"bestTime\": 20.048313856124878}, {\"bestTime\": 2.5993359088897705}, {\"bestTime\": 8.758874893188477}, {\"bestTime\": 0.23414397239685059}, {\"bestTime\": 27.282903909683228}, {\"bestTime\": 4.4802820682525635}, {\"bestTime\": 7.190912961959839}, {\"bestTime\": 0.4001741409301758}, {\"bestTime\": 0.4910390377044678}, {\"bestTime\": 0.6084232330322266}, {\"bestTime\": 6.285062074661255}, {\"bestTime\": 4.251919984817505}, {\"bestTime\": 0.2826709747314453}, {\"bestTime\": 1.073354959487915}, {\"bestTime\": 0.11692094802856445}, {\"bestTime\": 1.3578028678894043}, {\"bestTime\": 0.4433610439300537}, {\"bestTime\": 0.15914201736450195}, {\"bestTime\": 1.290360927581787}, {\"bestTime\": 0.1429591178894043}, {\"bestTime\": 5.002472877502441}, {\"bestTime\": 6.2422919273376465}, {\"bestTime\": 0.4953610897064209}, {\"bestTime\": 17.67297387123108}, {\"bestTime\": 3.1601080894470215}, {\"bestTime\": 0.7895059585571289}, {\"bestTime\": 11.252043962478638}, {\"bestTime\": 39.596877098083496}, {\"bestTime\": 12.5572669506073}, {\"bestTime\": 2.324244976043701}, {\"bestTime\": 21.056040048599243}, {\"bestTime\": 0.37334203720092773}, {\"bestTime\": 1.0118048191070557}, {\"bestTime\": 45.065046072006226}, {\"bestTime\": 2.9257290363311768}, {\"bestTime\": 0.32015109062194824}, {\"bestTime\": 1.1639471054077148}, {\"bestTime\": 49.066166162490845}, {\"bestTime\": 7.0358428955078125}, {\"bestTime\": 0.21707797050476074}, {\"bestTime\": 1.6720850467681885}, {\"bestTime\": 23.230862140655518}, {\"bestTime\": 1.2040648460388184}, {\"bestTime\": 0.06211495399475098}, {\"bestTime\": 3.7321949005126953}, {\"bestTime\": 0.2855849266052246}, {\"bestTime\": 11.240876913070679}, {\"bestTime\": 0.7229340076446533}, {\"bestTime\": 42.24460196495056}, {\"bestTime\": 0.15973520278930664}, {\"bestTime\": 4.081477165222168}, {\"bestTime\": 34.05584788322449}, {\"bestTime\": 24.34551501274109}, {\"bestTime\": 0.0968618392944336}, {\"bestTime\": 0.8373680114746094}, {\"bestTime\": 0.30925989151000977}, {\"bestTime\": 34.9109001159668}, {\"bestTime\": 0.1865830421447754}, {\"bestTime\": 1.4116971492767334}, {\"bestTime\": 0.3481011390686035}, {\"bestTime\": 0.2235431671142578}, {\"bestTime\": 32.90761709213257}, {\"bestTime\": 2.451058864593506}, {\"bestTime\": 32.151026010513306}, {\"bestTime\": 0.4748520851135254}, {\"bestTime\": 0.46788787841796875}, {\"bestTime\": 0.1953110694885254}, {\"bestTime\": 0.18766212463378906}, {\"bestTime\": 0.8883769512176514}, {\"bestTime\": 0.23378992080688477}, {\"bestTime\": 0.3461000919342041}, {\"bestTime\": 0.8151099681854248}, {\"bestTime\": 17.96680498123169}, {\"bestTime\": 39.3764910697937}, {\"bestTime\": 0.5443432331085205}, {\"bestTime\": 5.6508469581604}, {\"bestTime\": 0.1377577781677246}, {\"bestTime\": 0.12586593627929688}, {\"bestTime\": 0.19208002090454102}, {\"bestTime\": 1.905229091644287}, {\"bestTime\": 0.40407609939575195}, {\"bestTime\": 0.32387685775756836}, {\"bestTime\": 0.13929510116577148}, {\"bestTime\": 1.3021159172058105}, {\"bestTime\": 8.243356943130493}, {\"bestTime\": 2.575529098510742}, {\"bestTime\": 41.21093511581421}, {\"bestTime\": 0.1484980583190918}, {\"bestTime\": 8.88729190826416}, {\"bestTime\": 0.241225004196167}, {\"bestTime\": 0.26256299018859863}, {\"bestTime\": 3.8368310928344727}, {\"bestTime\": 0.22440314292907715}, {\"bestTime\": 21.01169514656067}, {\"bestTime\": 0.14661788940429688}, {\"bestTime\": 1.0190961360931396}, {\"bestTime\": 1.9879281520843506}, {\"bestTime\": 0.7830939292907715}, {\"bestTime\": 0.054660797119140625}, {\"bestTime\": 0.29587483406066895}, {\"bestTime\": 0.9489548206329346}, {\"bestTime\": 12.239233016967773}, {\"bestTime\": 42.12773895263672}, {\"bestTime\": 0.1832289695739746}, {\"bestTime\": 1.47586989402771}, {\"bestTime\": 0.9242608547210693}, {\"bestTime\": 1.8653957843780518}, {\"bestTime\": 0.3367428779602051}, {\"bestTime\": 38.35794997215271}, {\"bestTime\": 0.40296387672424316}, {\"bestTime\": 0.48358702659606934}, {\"bestTime\": 0.25629496574401855}, {\"bestTime\": 7.705322027206421}, {\"bestTime\": 0.39335203170776367}, {\"bestTime\": 8.919718027114868}, {\"bestTime\": 13.618505954742432}, {\"bestTime\": 7.370332956314087}, {\"bestTime\": 0.3353569507598877}, {\"bestTime\": 0.3086400032043457}, {\"bestTime\": 11.022181034088135}, {\"bestTime\": 2.4371750354766846}, {\"bestTime\": 18.5316059589386}, {\"bestTime\": 1.0373380184173584}, {\"bestTime\": 6.019515037536621}, {\"bestTime\": 0.23047304153442383}, {\"bestTime\": 0.3174159526824951}, {\"bestTime\": 1.63919997215271}, {\"bestTime\": 0.4005930423736572}, {\"bestTime\": 0.3886091709136963}, {\"bestTime\": 3.579023838043213}, {\"bestTime\": 0.6069259643554688}, {\"bestTime\": 0.14507794380187988}, {\"bestTime\": 0.8326611518859863}, {\"bestTime\": 1.6127521991729736}, {\"bestTime\": 0.7355420589447021}, {\"bestTime\": 0.6741220951080322}, {\"bestTime\": 0.20933318138122559}, {\"bestTime\": 5.666887998580933}, {\"bestTime\": 0.12195897102355957}, {\"bestTime\": 0.4984860420227051}, {\"bestTime\": 0.14790105819702148}, {\"bestTime\": 31.399190187454224}, {\"bestTime\": 0.30669713020324707}, {\"bestTime\": 0.6049668788909912}, {\"bestTime\": 2.718776226043701}, {\"bestTime\": 3.859126091003418}, {\"bestTime\": 0.6855089664459229}, {\"bestTime\": 5.196091890335083}, {\"bestTime\": 0.9327561855316162}, {\"bestTime\": 11.466693878173828}, {\"bestTime\": 5.8763580322265625}, {\"bestTime\": 4.558057069778442}, {\"bestTime\": 0.19122695922851562}, {\"bestTime\": 4.452160835266113}, {\"bestTime\": 5.8489789962768555}, {\"bestTime\": 14.9682137966156}, {\"bestTime\": 51.880561113357544}, {\"bestTime\": 0.28151702880859375}, {\"bestTime\": 0.9687099456787109}, {\"bestTime\": 0.06193685531616211}, {\"bestTime\": 2.395015001296997}, {\"bestTime\": 0.2496500015258789}, {\"bestTime\": 0.20531702041625977}, {\"bestTime\": 0.13509893417358398}, {\"bestTime\": 29.957214832305908}, {\"bestTime\": 0.3521420955657959}, {\"bestTime\": 0.5464208126068115}, {\"bestTime\": 2.1142687797546387}, {\"bestTime\": 0.674767017364502}, {\"bestTime\": 0.16814899444580078}, {\"bestTime\": 1.4566540718078613}, {\"bestTime\": 0.1825239658355713}, {\"bestTime\": 38.98479604721069}, {\"bestTime\": 0.28571009635925293}, {\"bestTime\": 1.5496277809143066}, {\"bestTime\": 20.733901023864746}, {\"bestTime\": 0.14557290077209473}, {\"bestTime\": 11.362294912338257}, {\"bestTime\": 0.26127004623413086}, {\"bestTime\": 1.905745029449463}, {\"bestTime\": 2.5572080612182617}, {\"bestTime\": 26.867114067077637}, {\"bestTime\": 0.1510329246520996}, {\"bestTime\": 30.39901113510132}, {\"bestTime\": 4.853434085845947}, {\"bestTime\": 0.267071008682251}, {\"bestTime\": 1.1311187744140625}, {\"bestTime\": 40.107917070388794}, {\"bestTime\": 47.66866612434387}, {\"bestTime\": 0.8645570278167725}, {\"bestTime\": 0.13826799392700195}, {\"bestTime\": 18.375886917114258}, {\"bestTime\": 0.4811699390411377}, {\"bestTime\": 0.3699991703033447}, {\"bestTime\": 15.235799789428711}, {\"bestTime\": 5.817081928253174}, {\"bestTime\": 4.935635089874268}, {\"bestTime\": 0.18274998664855957}, {\"bestTime\": 0.4519519805908203}, {\"bestTime\": 6.22304105758667}, {\"bestTime\": 0.45000505447387695}, {\"bestTime\": 0.1376819610595703}, {\"bestTime\": 0.8615939617156982}, {\"bestTime\": 0.28082895278930664}, {\"bestTime\": 6.1313769817352295}, {\"bestTime\": 0.4905059337615967}, {\"bestTime\": 3.9714250564575195}, {\"bestTime\": 0.9904818534851074}, {\"bestTime\": 0.34061503410339355}, {\"bestTime\": 8.440253973007202}, {\"bestTime\": 0.17187190055847168}, {\"bestTime\": 3.45829701423645}, {\"bestTime\": 2.7720460891723633}, {\"bestTime\": 0.8537478446960449}, {\"bestTime\": 0.7243258953094482}, {\"bestTime\": 28.09014081954956}, {\"bestTime\": 0.2625401020050049}, {\"bestTime\": 1.4634850025177002}, {\"bestTime\": 0.2824900150299072}, {\"bestTime\": 1.8310821056365967}, {\"bestTime\": 2.734524965286255}, {\"bestTime\": 0.23733997344970703}, {\"bestTime\": 0.04865312576293945}, {\"bestTime\": 0.9213290214538574}, {\"bestTime\": 1.7893950939178467}, {\"bestTime\": 0.37715888023376465}, {\"bestTime\": 0.8366820812225342}, {\"bestTime\": 0.21139192581176758}, {\"bestTime\": 16.920285940170288}, {\"bestTime\": 0.3102149963378906}, {\"bestTime\": 0.47342801094055176}, {\"bestTime\": 1.6405110359191895}, {\"bestTime\": 3.6461400985717773}, {\"bestTime\": 0.19913697242736816}, {\"bestTime\": 19.23712992668152}, {\"bestTime\": 0.27759599685668945}, {\"bestTime\": 0.24055194854736328}, {\"bestTime\": 0.12178993225097656}, {\"bestTime\": 1.875892162322998}, {\"bestTime\": 0.32224607467651367}, {\"bestTime\": 1.4639911651611328}, {\"bestTime\": 1.5820269584655762}, {\"bestTime\": 27.863600969314575}, {\"bestTime\": 10.012197971343994}, {\"bestTime\": 0.4549229145050049}, {\"bestTime\": 3.8828370571136475}, {\"bestTime\": 0.7566990852355957}, {\"bestTime\": 29.80381488800049}, {\"bestTime\": 26.539826154708862}, {\"bestTime\": 0.8987479209899902}, {\"bestTime\": 42.84703302383423}, {\"bestTime\": 0.38286709785461426}, {\"bestTime\": 0.11245608329772949}, {\"bestTime\": 14.142510175704956}, {\"bestTime\": 6.083343982696533}, {\"bestTime\": 0.3128042221069336}, {\"bestTime\": 9.497421026229858}, {\"bestTime\": 5.739544868469238}, {\"bestTime\": 0.34612393379211426}, {\"bestTime\": 1.208385944366455}, {\"bestTime\": 9.163224935531616}, {\"bestTime\": 4.3267059326171875}, {\"bestTime\": 22.97366714477539}, {\"bestTime\": 0.259490966796875}, {\"bestTime\": 7.47790002822876}, {\"bestTime\": 0.10269904136657715}, {\"bestTime\": 28.14648413658142}, {\"bestTime\": 38.50331711769104}, {\"bestTime\": 0.5176949501037598}, {\"bestTime\": 0.5421919822692871}, {\"bestTime\": 57.677775859832764}, {\"bestTime\": 0.7360079288482666}, {\"bestTime\": 1.715378999710083}, {\"bestTime\": 0.07575201988220215}, {\"bestTime\": 0.12322807312011719}, {\"bestTime\": 38.56720995903015}, {\"bestTime\": 8.284236192703247}, {\"bestTime\": 0.6689150333404541}, {\"bestTime\": 5.820559978485107}, {\"bestTime\": 2.25849986076355}, {\"bestTime\": 0.3872368335723877}, {\"bestTime\": 0.3002321720123291}, {\"bestTime\": 26.016465187072754}, {\"bestTime\": 0.8888399600982666}, {\"bestTime\": 1.250805139541626}, {\"bestTime\": 3.862840175628662}, {\"bestTime\": 0.24189496040344238}, {\"bestTime\": 0.1468210220336914}, {\"bestTime\": 2.445042848587036}, {\"bestTime\": 0.17705392837524414}, {\"bestTime\": 45.4895601272583}, {\"bestTime\": 0.5939109325408936}, {\"bestTime\": 0.605111837387085}, {\"bestTime\": 35.82922911643982}, {\"bestTime\": 3.9114441871643066}, {\"bestTime\": 26.151819944381714}, {\"bestTime\": 0.0822000503540039}, {\"bestTime\": 2.9353420734405518}, {\"bestTime\": 0.23017597198486328}, {\"bestTime\": 15.43452501296997}, {\"bestTime\": 4.229405879974365}, {\"bestTime\": 0.1432349681854248}, {\"bestTime\": 1.1096150875091553}, {\"bestTime\": 3.2052841186523438}, {\"bestTime\": 0.05170297622680664}, {\"bestTime\": 20.914330005645752}, {\"bestTime\": 20.412441968917847}, {\"bestTime\": 50.038357973098755}, {\"bestTime\": 0.08012199401855469}, {\"bestTime\": 0.6574430465698242}, {\"bestTime\": 33.177571058273315}, {\"bestTime\": 0.42676210403442383}, {\"bestTime\": 10.856605052947998}, {\"bestTime\": 2.3885109424591064}, {\"bestTime\": 1.2135322093963623}, {\"bestTime\": 0.2990899085998535}, {\"bestTime\": 0.15210294723510742}, {\"bestTime\": 16.342687845230103}, {\"bestTime\": 0.4518570899963379}, {\"bestTime\": 4.647294998168945}, {\"bestTime\": 0.18477392196655273}, {\"bestTime\": 0.34907102584838867}, {\"bestTime\": 0.08549189567565918}, {\"bestTime\": 0.4875359535217285}, {\"bestTime\": 0.686816930770874}, {\"bestTime\": 0.049337148666381836}, {\"bestTime\": 0.41569018363952637}, {\"bestTime\": 57.58366894721985}, {\"bestTime\": 0.9750380516052246}, {\"bestTime\": 0.18239498138427734}, {\"bestTime\": 0.09251713752746582}, {\"bestTime\": 0.7484519481658936}, {\"bestTime\": 0.17539405822753906}, {\"bestTime\": 0.05399298667907715}, {\"bestTime\": 0.7100670337677002}, {\"bestTime\": 0.2594630718231201}, {\"bestTime\": 4.195127964019775}, {\"bestTime\": 2.13280987739563}, {\"bestTime\": 0.23139405250549316}, {\"bestTime\": 0.21420502662658691}, {\"bestTime\": 28.030194997787476}, {\"bestTime\": 0.28254008293151855}, {\"bestTime\": 5.585947036743164}, {\"bestTime\": 4.955063819885254}, {\"bestTime\": 0.7240011692047119}, {\"bestTime\": 12.75597882270813}, {\"bestTime\": 0.1506791114807129}, {\"bestTime\": 3.2545320987701416}, {\"bestTime\": 3.274872064590454}, {\"bestTime\": 0.06447792053222656}, {\"bestTime\": 4.699867010116577}, {\"bestTime\": 0.7332079410552979}, {\"bestTime\": 10.40336298942566}, {\"bestTime\": 0.2798609733581543}, {\"bestTime\": 0.12615704536437988}, {\"bestTime\": 31.73637104034424}, {\"bestTime\": 0.12692999839782715}, {\"bestTime\": 0.32013416290283203}, {\"bestTime\": 12.874300003051758}, {\"bestTime\": 0.09377908706665039}, {\"bestTime\": 2.0186588764190674}, {\"bestTime\": 29.551582098007202}, {\"bestTime\": 0.08316183090209961}, {\"bestTime\": 0.20768213272094727}, {\"bestTime\": 2.465855836868286}, {\"bestTime\": 0.06388688087463379}, {\"bestTime\": 1.5316600799560547}, {\"bestTime\": 12.201128005981445}, {\"bestTime\": 0.19714093208312988}, {\"bestTime\": 17.24872589111328}, {\"bestTime\": 0.25903987884521484}, {\"bestTime\": 19.356276988983154}, {\"bestTime\": 19.83352017402649}, {\"bestTime\": 1.24471116065979}, {\"bestTime\": 0.6885509490966797}, {\"bestTime\": 0.3756840229034424}, {\"bestTime\": 0.6870510578155518}, {\"bestTime\": 3.9042110443115234}, {\"bestTime\": 1.6401100158691406}, {\"bestTime\": 0.2673020362854004}, {\"bestTime\": 0.6267349720001221}, {\"bestTime\": 1.343008041381836}, {\"bestTime\": 1.1507468223571777}, {\"bestTime\": 0.7741491794586182}, {\"bestTime\": 18.588147163391113}, {\"bestTime\": 0.2909219264984131}, {\"bestTime\": 0.3442380428314209}, {\"bestTime\": 0.26000380516052246}, {\"bestTime\": 0.3961920738220215}, {\"bestTime\": 0.3378279209136963}, {\"bestTime\": 0.23000192642211914}, {\"bestTime\": 24.853294134140015}, {\"bestTime\": 0.5528969764709473}, {\"bestTime\": 0.715217113494873}, {\"bestTime\": 0.7095739841461182}, {\"bestTime\": 0.22873210906982422}, {\"bestTime\": 0.4238560199737549}, {\"bestTime\": 3.222730875015259}, {\"bestTime\": 0.13844084739685059}, {\"bestTime\": 0.32772207260131836}, {\"bestTime\": 2.9454610347747803}, {\"bestTime\": 0.4633021354675293}, {\"bestTime\": 0.20770907402038574}, {\"bestTime\": 4.2535951137542725}, {\"bestTime\": 2.444058895111084}, {\"bestTime\": 1.166769027709961}, {\"bestTime\": 0.31511402130126953}, {\"bestTime\": 1.7682390213012695}, {\"bestTime\": 0.15058684349060059}, {\"bestTime\": 5.487207889556885}, {\"bestTime\": 29.669179916381836}, {\"bestTime\": 34.932443141937256}, {\"bestTime\": 0.08034920692443848}, {\"bestTime\": 0.4287259578704834}, {\"bestTime\": 32.10823392868042}, {\"bestTime\": 30.962278127670288}, {\"bestTime\": 0.4210638999938965}, {\"bestTime\": 32.173506021499634}, {\"bestTime\": 2.5923218727111816}, {\"bestTime\": 1.719710111618042}, {\"bestTime\": 0.3951740264892578}, {\"bestTime\": 0.38433408737182617}, {\"bestTime\": 0.2106461524963379}, {\"bestTime\": 0.16419410705566406}, {\"bestTime\": 1.8040499687194824}, {\"bestTime\": 1.1444010734558105}, {\"bestTime\": 0.3664369583129883}, {\"bestTime\": 4.4753968715667725}, {\"bestTime\": 0.891279935836792}, {\"bestTime\": 0.23577308654785156}, {\"bestTime\": 52.13618803024292}, {\"bestTime\": 0.6749730110168457}, {\"bestTime\": 9.93758487701416}, {\"bestTime\": 0.0691840648651123}, {\"bestTime\": 31.803060054779053}, {\"bestTime\": 38.12649083137512}, {\"bestTime\": 6.402008056640625}, {\"bestTime\": 0.2520599365234375}, {\"bestTime\": 0.25160694122314453}, {\"bestTime\": 4.393443822860718}, {\"bestTime\": 1.2188749313354492}, {\"bestTime\": 57.823758125305176}, {\"bestTime\": 3.4717369079589844}, {\"bestTime\": 0.6602730751037598}, {\"bestTime\": 15.300395011901855}, {\"bestTime\": 0.2514069080352783}, {\"bestTime\": 19.518336057662964}, {\"bestTime\": 13.286855936050415}, {\"bestTime\": 1.473417043685913}, {\"bestTime\": 0.18155598640441895}, {\"bestTime\": 11.43124794960022}, {\"bestTime\": 27.792109966278076}, {\"bestTime\": 0.1414961814880371}, {\"bestTime\": 22.452320098876953}, {\"bestTime\": 0.5124151706695557}, {\"bestTime\": 5.2125279903411865}, {\"bestTime\": 0.27566003799438477}, {\"bestTime\": 0.19125008583068848}, {\"bestTime\": 0.12230801582336426}, {\"bestTime\": 6.3724400997161865}, {\"bestTime\": 0.07996392250061035}, {\"bestTime\": 0.0632638931274414}, {\"bestTime\": 1.1681609153747559}, {\"bestTime\": 13.042585849761963}, {\"bestTime\": 32.85650682449341}, {\"bestTime\": 2.9735519886016846}, {\"bestTime\": 0.37685489654541016}, {\"bestTime\": 7.673957109451294}, {\"bestTime\": 0.20381689071655273}, {\"bestTime\": 35.6816201210022}, {\"bestTime\": 2.19541597366333}, {\"bestTime\": 0.4127957820892334}, {\"bestTime\": 0.8376011848449707}, {\"bestTime\": 29.845453023910522}, {\"bestTime\": 15.182155132293701}, {\"bestTime\": 0.11256599426269531}, {\"bestTime\": 0.38784003257751465}, {\"bestTime\": 3.1815359592437744}, {\"bestTime\": 5.8177080154418945}, {\"bestTime\": 0.6356320381164551}, {\"bestTime\": 0.5554969310760498}, {\"bestTime\": 0.7528290748596191}, {\"bestTime\": 0.7527410984039307}, {\"bestTime\": 0.7750458717346191}, {\"bestTime\": 0.6386408805847168}, {\"bestTime\": 1.068852186203003}, {\"bestTime\": 2.7710320949554443}, {\"bestTime\": 0.4307229518890381}, {\"bestTime\": 27.806360960006714}, {\"bestTime\": 0.7093260288238525}, {\"bestTime\": 1.9193029403686523}, {\"bestTime\": 0.22583603858947754}, {\"bestTime\": 0.34804511070251465}, {\"bestTime\": 0.2598881721496582}, {\"bestTime\": 0.3952138423919678}, {\"bestTime\": 0.3365960121154785}, {\"bestTime\": 0.23354601860046387}, {\"bestTime\": 0.25507116317749023}, {\"bestTime\": 0.37968993186950684}, {\"bestTime\": 0.4031541347503662}, {\"bestTime\": 42.366616010665894}, {\"bestTime\": 10.200745105743408}, {\"bestTime\": 2.5143849849700928}, {\"bestTime\": 0.5308599472045898}, {\"bestTime\": 0.5772140026092529}, {\"bestTime\": 0.8476028442382812}, {\"bestTime\": 0.6001889705657959}, {\"bestTime\": 0.884533166885376}, {\"bestTime\": 22.786722898483276}, {\"bestTime\": 0.13337397575378418}, {\"bestTime\": 0.2231130599975586}, {\"bestTime\": 59.41215801239014}, {\"bestTime\": 0.17623519897460938}, {\"bestTime\": 19.25368905067444}, {\"bestTime\": 2.86130690574646}, {\"bestTime\": 0.5057308673858643}, {\"bestTime\": 0.6784870624542236}, {\"bestTime\": 0.5333459377288818}, {\"bestTime\": 0.051870107650756836}, {\"bestTime\": 14.335846900939941}, {\"bestTime\": 0.047332048416137695}, {\"bestTime\": 0.263657808303833}, {\"bestTime\": 0.7266871929168701}, {\"bestTime\": 0.1500849723815918}, {\"bestTime\": 4.574373960494995}, {\"bestTime\": 11.535842895507812}, {\"bestTime\": 2.478144884109497}, {\"bestTime\": 1.1757440567016602}, {\"bestTime\": 0.16614294052124023}, {\"bestTime\": 3.19691801071167}, {\"bestTime\": 3.3954808712005615}, {\"bestTime\": 0.12187409400939941}, {\"bestTime\": 0.6845548152923584}, {\"bestTime\": 0.37680697441101074}, {\"bestTime\": 6.454486131668091}, {\"bestTime\": 0.05250906944274902}, {\"bestTime\": 13.301164865493774}, {\"bestTime\": 0.05108904838562012}, {\"bestTime\": 0.6274621486663818}, {\"bestTime\": 0.17241787910461426}, {\"bestTime\": 0.7031538486480713}, {\"bestTime\": 0.0814509391784668}, {\"bestTime\": 0.26308679580688477}, {\"bestTime\": 0.6798431873321533}, {\"bestTime\": 0.41791605949401855}, {\"bestTime\": 2.248492956161499}, {\"bestTime\": 0.17666888236999512}, {\"bestTime\": 0.19880294799804688}, {\"bestTime\": 0.9452688694000244}, {\"bestTime\": 0.3447399139404297}, {\"bestTime\": 7.504639148712158}, {\"bestTime\": 0.25460195541381836}, {\"bestTime\": 1.621000051498413}, {\"bestTime\": 0.4623250961303711}, {\"bestTime\": 0.24670004844665527}, {\"bestTime\": 0.2976219654083252}, {\"bestTime\": 0.21868491172790527}, {\"bestTime\": 3.7924368381500244}, {\"bestTime\": 0.22568702697753906}, {\"bestTime\": 0.2849099636077881}, {\"bestTime\": 0.4074079990386963}, {\"bestTime\": 0.28893089294433594}, {\"bestTime\": 0.1757509708404541}, {\"bestTime\": 0.7784481048583984}, {\"bestTime\": 0.9356579780578613}, {\"bestTime\": 7.039361953735352}, {\"bestTime\": 4.237453937530518}, {\"bestTime\": 45.82089185714722}, {\"bestTime\": 3.538149118423462}, {\"bestTime\": 3.470893144607544}, {\"bestTime\": 0.6559829711914062}, {\"bestTime\": 56.71169090270996}, {\"bestTime\": 3.492650032043457}, {\"bestTime\": 0.6986820697784424}, {\"bestTime\": 1.4963889122009277}, {\"bestTime\": 4.519604206085205}, {\"bestTime\": 0.19087600708007812}, {\"bestTime\": 5.710071086883545}, {\"bestTime\": 59.04734206199646}, {\"bestTime\": 58.509583950042725}, {\"bestTime\": 0.2898550033569336}, {\"bestTime\": 53.07762312889099}, {\"bestTime\": 0.1565990447998047}, {\"bestTime\": 0.29566097259521484}, {\"bestTime\": 0.40357089042663574}, {\"bestTime\": 0.24660897254943848}, {\"bestTime\": 0.8820278644561768}, {\"bestTime\": 0.14844584465026855}, {\"bestTime\": 0.2567901611328125}, {\"bestTime\": 0.23053622245788574}, {\"bestTime\": 1.906567096710205}, {\"bestTime\": 0.7306098937988281}, {\"bestTime\": 0.6721320152282715}, {\"bestTime\": 3.981133222579956}, {\"bestTime\": 40.00025200843811}, {\"bestTime\": 0.2986640930175781}, {\"bestTime\": 3.5504329204559326}, {\"bestTime\": 0.8193960189819336}, {\"bestTime\": 0.3582899570465088}, {\"bestTime\": 0.2741968631744385}, {\"bestTime\": 7.785038948059082}, {\"bestTime\": 0.3863210678100586}, {\"bestTime\": 0.2755119800567627}, {\"bestTime\": 7.010894060134888}, {\"bestTime\": 0.33381104469299316}, {\"bestTime\": 2.9250450134277344}, {\"bestTime\": 0.25066709518432617}, {\"bestTime\": 0.3928649425506592}, {\"bestTime\": 27.863340854644775}, {\"bestTime\": 4.179649114608765}, {\"bestTime\": 0.6680269241333008}, {\"bestTime\": 0.6660270690917969}, {\"bestTime\": 0.05458402633666992}, {\"bestTime\": 0.31490492820739746}, {\"bestTime\": 4.195746898651123}, {\"bestTime\": 2.438703775405884}, {\"bestTime\": 15.935537099838257}, {\"bestTime\": 5.262279033660889}, {\"bestTime\": 0.3437490463256836}, {\"bestTime\": 2.1591289043426514}, {\"bestTime\": 2.9270498752593994}, {\"bestTime\": 9.10620903968811}, {\"bestTime\": 6.077800989151001}, {\"bestTime\": 0.31520986557006836}, {\"bestTime\": 0.9843800067901611}, {\"bestTime\": 0.40908193588256836}, {\"bestTime\": 0.2735002040863037}, {\"bestTime\": 0.047718048095703125}, {\"bestTime\": 32.32371401786804}, {\"bestTime\": 0.19948315620422363}, {\"bestTime\": 0.2789161205291748}, {\"bestTime\": 0.3927919864654541}, {\"bestTime\": 3.2944018840789795}, {\"bestTime\": 0.28427600860595703}, {\"bestTime\": 1.5821099281311035}, {\"bestTime\": 0.9655261039733887}, {\"bestTime\": 0.8859119415283203}, {\"bestTime\": 0.7235729694366455}, {\"bestTime\": 0.37404513359069824}, {\"bestTime\": 38.13814997673035}, {\"bestTime\": 0.21506309509277344}, {\"bestTime\": 0.6685771942138672}, {\"bestTime\": 0.374755859375}, {\"bestTime\": 7.225275039672852}, {\"bestTime\": 10.187142848968506}, {\"bestTime\": 0.22700095176696777}, {\"bestTime\": 3.6837399005889893}, {\"bestTime\": 27.89562702178955}, {\"bestTime\": 27.887129068374634}, {\"bestTime\": 0.45764899253845215}, {\"bestTime\": 1.463763952255249}, {\"bestTime\": 3.0183441638946533}, {\"bestTime\": 7.700123071670532}, {\"bestTime\": 6.94710898399353}, {\"bestTime\": 13.226095914840698}, {\"bestTime\": 0.19242596626281738}, {\"bestTime\": 3.305943012237549}, {\"bestTime\": 0.34490394592285156}, {\"bestTime\": 0.19916391372680664}, {\"bestTime\": 1.9114899635314941}, {\"bestTime\": 0.13727998733520508}, {\"bestTime\": 0.8596229553222656}, {\"bestTime\": 23.9874370098114}, {\"bestTime\": 0.2821929454803467}, {\"bestTime\": 13.934183120727539}, {\"bestTime\": 4.423173904418945}, {\"bestTime\": 0.09446501731872559}, {\"bestTime\": 2.1177449226379395}, {\"bestTime\": 9.702338218688965}, {\"bestTime\": 11.08942198753357}, {\"bestTime\": 5.84375786781311}, {\"bestTime\": 1.885633945465088}, {\"bestTime\": 1.0591099262237549}, {\"bestTime\": 18.265614986419678}, {\"bestTime\": 0.2815861701965332}, {\"bestTime\": 0.255141019821167}, {\"bestTime\": 26.176435947418213}, {\"bestTime\": 0.23067188262939453}, {\"bestTime\": 0.17488312721252441}, {\"bestTime\": 0.46549010276794434}, {\"bestTime\": 17.05197310447693}, {\"bestTime\": 0.939751148223877}, {\"bestTime\": null}, {\"bestTime\": 1.3951568603515625}, {\"bestTime\": 2.6046578884124756}, {\"bestTime\": 10.797614097595215}, {\"bestTime\": 16.470688104629517}, {\"bestTime\": 0.32498598098754883}, {\"bestTime\": 11.122535943984985}, {\"bestTime\": 42.58629512786865}, {\"bestTime\": 21.758729934692383}, {\"bestTime\": 48.35049605369568}, {\"bestTime\": 0.7119801044464111}, {\"bestTime\": 37.07883977890015}, {\"bestTime\": 2.6963260173797607}, {\"bestTime\": 0.09641504287719727}, {\"bestTime\": null}, {\"bestTime\": 0.07689189910888672}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": 0.8207437992095947}, {\"bestTime\": 16.092151880264282}, {\"bestTime\": 0.2141420841217041}, {\"bestTime\": null}, {\"bestTime\": 51.78983688354492}, {\"bestTime\": null}, {\"bestTime\": 0.19219398498535156}, {\"bestTime\": null}, {\"bestTime\": 0.13917899131774902}, {\"bestTime\": 0.07806801795959473}, {\"bestTime\": 0.36435604095458984}, {\"bestTime\": 14.378906011581421}, {\"bestTime\": 2.6434409618377686}, {\"bestTime\": null}, {\"bestTime\": 0.1848468780517578}, {\"bestTime\": null}, {\"bestTime\": 5.477503061294556}, {\"bestTime\": null}, {\"bestTime\": 48.68565797805786}, {\"bestTime\": 1.9596359729766846}, {\"bestTime\": 0.21611499786376953}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": 0.19133901596069336}, {\"bestTime\": 4.862153053283691}, {\"bestTime\": 12.698328971862793}, {\"bestTime\": 4.96187686920166}, {\"bestTime\": 7.069933891296387}, {\"bestTime\": null}, {\"bestTime\": 24.276376008987427}, {\"bestTime\": null}, {\"bestTime\": 0.13960981369018555}, {\"bestTime\": 0.13888287544250488}, {\"bestTime\": 0.07859992980957031}, {\"bestTime\": 0.5758001804351807}, {\"bestTime\": 0.3591032028198242}, {\"bestTime\": null}, {\"bestTime\": 58.99269413948059}, {\"bestTime\": null}, {\"bestTime\": 0.185866117477417}, {\"bestTime\": 7.000326871871948}, {\"bestTime\": 0.32199788093566895}, {\"bestTime\": 3.436800003051758}, {\"bestTime\": 1.8282699584960938}, {\"bestTime\": 0.45865392684936523}, {\"bestTime\": 0.07630109786987305}, {\"bestTime\": 8.09290885925293}, {\"bestTime\": null}, {\"bestTime\": 10.926622152328491}, {\"bestTime\": 0.09589481353759766}, {\"bestTime\": 5.847468137741089}, {\"bestTime\": null}, {\"bestTime\": 0.07694506645202637}, {\"bestTime\": 50.0181930065155}, {\"bestTime\": null}, {\"bestTime\": 32.05920696258545}, {\"bestTime\": 3.3525900840759277}, {\"bestTime\": 45.353720903396606}, {\"bestTime\": 34.142343044281006}, {\"bestTime\": 0.0768589973449707}, {\"bestTime\": null}, {\"bestTime\": 0.13883018493652344}, {\"bestTime\": 7.4854700565338135}, {\"bestTime\": 8.673985004425049}, {\"bestTime\": 0.1904921531677246}, {\"bestTime\": 0.5198569297790527}, {\"bestTime\": 52.63784193992615}, {\"bestTime\": 11.298856019973755}, {\"bestTime\": null}, {\"bestTime\": 0.30553603172302246}, {\"bestTime\": 0.15698599815368652}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": 16.208189010620117}, {\"bestTime\": 3.2051339149475098}, {\"bestTime\": 30.224974870681763}, {\"bestTime\": 0.07636690139770508}, {\"bestTime\": null}, {\"bestTime\": 0.1842029094696045}, {\"bestTime\": 0.10921406745910645}, {\"bestTime\": 0.1566760540008545}, {\"bestTime\": 9.533813953399658}, {\"bestTime\": 15.066066026687622}, {\"bestTime\": 9.635416984558105}, {\"bestTime\": 0.09737706184387207}, {\"bestTime\": 0.2699089050292969}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": 4.288557052612305}, {\"bestTime\": null}, {\"bestTime\": 0.5664989948272705}, {\"bestTime\": 0.10965204238891602}, {\"bestTime\": 0.3867909908294678}, {\"bestTime\": 0.1848311424255371}, {\"bestTime\": 0.07772111892700195}, {\"bestTime\": null}, {\"bestTime\": 1.0186679363250732}, {\"bestTime\": 7.859379053115845}, {\"bestTime\": null}, {\"bestTime\": 0.14492106437683105}, {\"bestTime\": 36.03050994873047}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": 0.27283287048339844}, {\"bestTime\": 0.0957648754119873}, {\"bestTime\": 0.31865501403808594}, {\"bestTime\": 2.42374587059021}, {\"bestTime\": 21.131887912750244}, {\"bestTime\": 49.11333513259888}, {\"bestTime\": 17.141016006469727}, {\"bestTime\": null}, {\"bestTime\": 0.1559431552886963}, {\"bestTime\": 0.18146586418151855}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": 0.30515408515930176}, {\"bestTime\": null}, {\"bestTime\": 13.204108953475952}, {\"bestTime\": 14.458651065826416}, {\"bestTime\": 0.19080209732055664}, {\"bestTime\": 0.1890430450439453}, {\"bestTime\": 0.13832902908325195}, {\"bestTime\": 0.0785980224609375}, {\"bestTime\": 5.833642959594727}, {\"bestTime\": 46.10367703437805}, {\"bestTime\": null}, {\"bestTime\": 0.2695000171661377}, {\"bestTime\": 10.991940975189209}, {\"bestTime\": 3.135772943496704}, {\"bestTime\": null}, {\"bestTime\": 0.5150690078735352}, {\"bestTime\": 0.3595550060272217}, {\"bestTime\": 0.13919496536254883}, {\"bestTime\": 0.18463897705078125}, {\"bestTime\": 7.319704055786133}, {\"bestTime\": 5.317239046096802}, {\"bestTime\": null}, {\"bestTime\": 0.13860392570495605}, {\"bestTime\": null}, {\"bestTime\": 0.18469715118408203}, {\"bestTime\": null}, {\"bestTime\": 1.7870509624481201}, {\"bestTime\": 0.1892850399017334}, {\"bestTime\": null}, {\"bestTime\": 9.39104700088501}, {\"bestTime\": 0.21531891822814941}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": 2.163285970687866}, {\"bestTime\": 0.07689905166625977}, {\"bestTime\": 13.570377111434937}, {\"bestTime\": 7.570823907852173}, {\"bestTime\": 13.609096050262451}, {\"bestTime\": null}, {\"bestTime\": 0.09626197814941406}, {\"bestTime\": 3.0721781253814697}, {\"bestTime\": null}, {\"bestTime\": 11.370063781738281}, {\"bestTime\": 0.07782983779907227}, {\"bestTime\": 0.39923095703125}, {\"bestTime\": 55.24536085128784}, {\"bestTime\": null}, {\"bestTime\": 1.7608990669250488}, {\"bestTime\": 3.8903610706329346}, {\"bestTime\": 0.3201441764831543}, {\"bestTime\": null}, {\"bestTime\": 58.12186098098755}, {\"bestTime\": null}, {\"bestTime\": 2.880510091781616}, {\"bestTime\": 10.867811918258667}, {\"bestTime\": 0.07686209678649902}, {\"bestTime\": 16.069318056106567}, {\"bestTime\": 11.439944982528687}, {\"bestTime\": 2.0510740280151367}, {\"bestTime\": 0.07641792297363281}, {\"bestTime\": 4.383858919143677}, {\"bestTime\": 1.685654878616333}, {\"bestTime\": 21.7691969871521}, {\"bestTime\": 0.4526209831237793}, {\"bestTime\": 6.332065105438232}, {\"bestTime\": 29.86000394821167}, {\"bestTime\": 7.14103102684021}, {\"bestTime\": 0.8921020030975342}, {\"bestTime\": 5.809942007064819}, {\"bestTime\": 0.0766439437866211}, {\"bestTime\": 0.1860518455505371}, {\"bestTime\": 0.13913798332214355}, {\"bestTime\": 1.2195789813995361}, {\"bestTime\": null}, {\"bestTime\": 20.76156187057495}, {\"bestTime\": 6.675274133682251}, {\"bestTime\": null}, {\"bestTime\": 23.736277103424072}, {\"bestTime\": 6.391646862030029}, {\"bestTime\": null}, {\"bestTime\": 0.20670080184936523}, {\"bestTime\": 0.07802510261535645}, {\"bestTime\": null}, {\"bestTime\": 0.29141688346862793}, {\"bestTime\": 5.098588943481445}, {\"bestTime\": 0.19095110893249512}, {\"bestTime\": null}, {\"bestTime\": 0.09644389152526855}, {\"bestTime\": 0.3208920955657959}, {\"bestTime\": null}, {\"bestTime\": 5.4952099323272705}, {\"bestTime\": 0.2715108394622803}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": 15.03661298751831}, {\"bestTime\": 1.5908360481262207}, {\"bestTime\": 46.65457487106323}, {\"bestTime\": 0.07694005966186523}, {\"bestTime\": 0.4033989906311035}, {\"bestTime\": 16.73023819923401}, {\"bestTime\": 0.15704083442687988}, {\"bestTime\": 0.0783090591430664}, {\"bestTime\": 0.1841878890991211}, {\"bestTime\": 0.1100320816040039}, {\"bestTime\": 0.4409918785095215}, {\"bestTime\": 7.173803091049194}, {\"bestTime\": 19.626403093338013}, {\"bestTime\": 0.2698838710784912}, {\"bestTime\": 16.700743913650513}, {\"bestTime\": 2.1598098278045654}, {\"bestTime\": 25.847851037979126}, {\"bestTime\": null}, {\"bestTime\": 10.208225965499878}, {\"bestTime\": 0.19050097465515137}, {\"bestTime\": 0.1892540454864502}, {\"bestTime\": 0.5950250625610352}, {\"bestTime\": 8.636565923690796}, {\"bestTime\": 56.029574155807495}, {\"bestTime\": 0.13805103302001953}, {\"bestTime\": null}, {\"bestTime\": 4.400274991989136}, {\"bestTime\": null}, {\"bestTime\": 9.726850032806396}, {\"bestTime\": 0.3027989864349365}, {\"bestTime\": 12.956289052963257}, {\"bestTime\": null}, {\"bestTime\": 2.776956081390381}, {\"bestTime\": 34.57741713523865}, {\"bestTime\": 6.129059076309204}, {\"bestTime\": 6.832008123397827}, {\"bestTime\": 30.817916870117188}, {\"bestTime\": 0.27109503746032715}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": 0.1588749885559082}, {\"bestTime\": null}, {\"bestTime\": 55.60457897186279}, {\"bestTime\": null}, {\"bestTime\": 0.19007611274719238}, {\"bestTime\": 0.42438507080078125}, {\"bestTime\": 5.181819915771484}, {\"bestTime\": null}, {\"bestTime\": 0.5194330215454102}, {\"bestTime\": null}, {\"bestTime\": 53.18076491355896}, {\"bestTime\": 0.3211379051208496}, {\"bestTime\": 13.631855964660645}, {\"bestTime\": 0.0785531997680664}, {\"bestTime\": 0.4407188892364502}, {\"bestTime\": 0.39144420623779297}, {\"bestTime\": 9.951511859893799}, {\"bestTime\": 0.15734219551086426}, {\"bestTime\": 19.731485843658447}, {\"bestTime\": 0.07599592208862305}, {\"bestTime\": null}, {\"bestTime\": 0.257781982421875}, {\"bestTime\": 0.31424593925476074}, {\"bestTime\": 0.6646378040313721}, {\"bestTime\": 0.26085400581359863}, {\"bestTime\": 0.49959707260131836}, {\"bestTime\": 0.8873791694641113}, {\"bestTime\": 2.431960105895996}, {\"bestTime\": 0.49956512451171875}, {\"bestTime\": 1.0003440380096436}, {\"bestTime\": 0.92519211769104}, {\"bestTime\": 0.06184816360473633}, {\"bestTime\": 0.3288869857788086}, {\"bestTime\": 0.1707139015197754}, {\"bestTime\": 14.445369005203247}, {\"bestTime\": 0.14703702926635742}, {\"bestTime\": 0.41640496253967285}, {\"bestTime\": 0.3363521099090576}, {\"bestTime\": 0.20046091079711914}, {\"bestTime\": 7.4339470863342285}, {\"bestTime\": 0.9428400993347168}, {\"bestTime\": 0.30357909202575684}, {\"bestTime\": 1.075711965560913}, {\"bestTime\": 0.3074350357055664}, {\"bestTime\": 20.271817922592163}, {\"bestTime\": 0.19459795951843262}, {\"bestTime\": 0.24153804779052734}, {\"bestTime\": 0.13943195343017578}, {\"bestTime\": 1.1770951747894287}, {\"bestTime\": 2.2670230865478516}, {\"bestTime\": 0.5075900554656982}, {\"bestTime\": 9.308769941329956}, {\"bestTime\": 0.34671497344970703}, {\"bestTime\": 0.42937707901000977}, {\"bestTime\": 49.01170301437378}, {\"bestTime\": 0.18457484245300293}, {\"bestTime\": 16.714416027069092}, {\"bestTime\": 2.497725009918213}, {\"bestTime\": 0.21109294891357422}, {\"bestTime\": 0.8395941257476807}, {\"bestTime\": 0.5334799289703369}, {\"bestTime\": 0.17352890968322754}, {\"bestTime\": 0.09786677360534668}, {\"bestTime\": 0.18800806999206543}, {\"bestTime\": 0.2751610279083252}, {\"bestTime\": 0.5410499572753906}, {\"bestTime\": 0.3599860668182373}, {\"bestTime\": 0.35901904106140137}, {\"bestTime\": 0.2449049949645996}, {\"bestTime\": 1.2587430477142334}, {\"bestTime\": 0.26462602615356445}, {\"bestTime\": 0.602288007736206}, {\"bestTime\": 0.16509199142456055}, {\"bestTime\": 0.34738779067993164}, {\"bestTime\": 0.42240214347839355}, {\"bestTime\": 0.6488380432128906}, {\"bestTime\": 0.1842811107635498}, {\"bestTime\": 23.108402013778687}, {\"bestTime\": 0.5522620677947998}, {\"bestTime\": 3.5616519451141357}, {\"bestTime\": 14.059423923492432}, {\"bestTime\": 0.5066711902618408}, {\"bestTime\": 1.187736988067627}, {\"bestTime\": 6.487813949584961}, {\"bestTime\": 20.36879801750183}, {\"bestTime\": 0.3636181354522705}, {\"bestTime\": 0.09627819061279297}, {\"bestTime\": 0.36368489265441895}, {\"bestTime\": 0.35940098762512207}, {\"bestTime\": 0.24733901023864746}, {\"bestTime\": 1.3318560123443604}, {\"bestTime\": 0.2721250057220459}, {\"bestTime\": 0.5380711555480957}, {\"bestTime\": 0.09600305557250977}, {\"bestTime\": 34.90438985824585}, {\"bestTime\": 0.18902802467346191}, {\"bestTime\": 0.5212149620056152}, {\"bestTime\": 0.8314290046691895}, {\"bestTime\": 0.10919618606567383}, {\"bestTime\": 0.18563199043273926}, {\"bestTime\": 5.601337909698486}, {\"bestTime\": 0.9221010208129883}, {\"bestTime\": 0.06356096267700195}, {\"bestTime\": 0.3165900707244873}, {\"bestTime\": 0.9995231628417969}, {\"bestTime\": 2.472148895263672}, {\"bestTime\": 1.1553869247436523}, {\"bestTime\": 0.4864339828491211}, {\"bestTime\": 3.045246124267578}, {\"bestTime\": 13.459717988967896}, {\"bestTime\": 0.6761019229888916}, {\"bestTime\": 0.2622349262237549}, {\"bestTime\": 0.2616279125213623}, {\"bestTime\": 2.430091142654419}, {\"bestTime\": 0.30592799186706543}, {\"bestTime\": 0.347700834274292}, {\"bestTime\": 0.37195301055908203}, {\"bestTime\": 0.4152050018310547}, {\"bestTime\": 0.3403809070587158}, {\"bestTime\": 0.9384801387786865}, {\"bestTime\": 2.877506971359253}, {\"bestTime\": 2.701864004135132}, {\"bestTime\": 0.3697319030761719}, {\"bestTime\": 25.071949005126953}, {\"bestTime\": 0.35816502571105957}, {\"bestTime\": 0.6153488159179688}, {\"bestTime\": 0.48995494842529297}, {\"bestTime\": 0.28634214401245117}, {\"bestTime\": 1.9453909397125244}, {\"bestTime\": 0.7457931041717529}, {\"bestTime\": 0.18154001235961914}, {\"bestTime\": 0.7724640369415283}, {\"bestTime\": 48.1338050365448}, {\"bestTime\": 4.5084388256073}, {\"bestTime\": 0.2829139232635498}, {\"bestTime\": 0.19427490234375}, {\"bestTime\": 42.41771984100342}, {\"bestTime\": 0.8865349292755127}, {\"bestTime\": 0.455427885055542}, {\"bestTime\": 0.27837300300598145}, {\"bestTime\": 39.27722692489624}, {\"bestTime\": 0.32744812965393066}, {\"bestTime\": 0.17187809944152832}, {\"bestTime\": 0.23366189002990723}, {\"bestTime\": 7.119162082672119}, {\"bestTime\": 0.6180868148803711}, {\"bestTime\": 7.753775119781494}, {\"bestTime\": 0.6126151084899902}, {\"bestTime\": 0.3139650821685791}, {\"bestTime\": 1.4910380840301514}, {\"bestTime\": 6.995382070541382}, {\"bestTime\": 6.150964975357056}, {\"bestTime\": 37.61149001121521}, {\"bestTime\": 0.2172679901123047}, {\"bestTime\": 0.40939998626708984}, {\"bestTime\": 3.9440300464630127}, {\"bestTime\": 6.117722034454346}, {\"bestTime\": 0.7585268020629883}, {\"bestTime\": 34.759998083114624}, {\"bestTime\": 0.1682720184326172}, {\"bestTime\": 0.2123260498046875}, {\"bestTime\": 0.1510920524597168}, {\"bestTime\": 0.8245820999145508}, {\"bestTime\": 26.62046194076538}, {\"bestTime\": 0.18644404411315918}, {\"bestTime\": 0.1483011245727539}, {\"bestTime\": 0.42575502395629883}, {\"bestTime\": 0.20909500122070312}, {\"bestTime\": 42.28427791595459}, {\"bestTime\": 3.7451751232147217}, {\"bestTime\": 0.22722387313842773}, {\"bestTime\": 0.9410128593444824}, {\"bestTime\": 0.1796119213104248}, {\"bestTime\": 0.7025129795074463}, {\"bestTime\": 0.4773731231689453}, {\"bestTime\": 0.9109539985656738}, {\"bestTime\": 0.8068270683288574}, {\"bestTime\": 0.38729405403137207}, {\"bestTime\": 0.7303979396820068}, {\"bestTime\": 0.20920395851135254}, {\"bestTime\": 0.4302561283111572}, {\"bestTime\": 0.7118151187896729}, {\"bestTime\": 0.20737886428833008}, {\"bestTime\": 57.34158682823181}, {\"bestTime\": 0.8246951103210449}, {\"bestTime\": 27.203251123428345}, {\"bestTime\": 0.5528891086578369}, {\"bestTime\": 7.773526906967163}, {\"bestTime\": 0.7458670139312744}, {\"bestTime\": 0.29868388175964355}, {\"bestTime\": 0.16723299026489258}, {\"bestTime\": 0.703300952911377}, {\"bestTime\": 0.21012210845947266}, {\"bestTime\": 36.72494387626648}, {\"bestTime\": 0.9132070541381836}, {\"bestTime\": 2.4681789875030518}, {\"bestTime\": 0.44026994705200195}, {\"bestTime\": 27.87469220161438}, {\"bestTime\": 0.9442579746246338}, {\"bestTime\": 34.55738615989685}, {\"bestTime\": 0.17437386512756348}, {\"bestTime\": 0.7364640235900879}, {\"bestTime\": 0.47728800773620605}, {\"bestTime\": 0.21156787872314453}, {\"bestTime\": 3.6574900150299072}, {\"bestTime\": 0.882688045501709}, {\"bestTime\": 0.4627060890197754}, {\"bestTime\": 0.2886531352996826}, {\"bestTime\": 4.547628879547119}, {\"bestTime\": 0.7418909072875977}, {\"bestTime\": 0.6097619533538818}, {\"bestTime\": 0.27663397789001465}, {\"bestTime\": 26.460906982421875}, {\"bestTime\": 0.7677340507507324}, {\"bestTime\": 0.3742029666900635}, {\"bestTime\": 24.002004861831665}, {\"bestTime\": 0.3589210510253906}, {\"bestTime\": 0.4340839385986328}, {\"bestTime\": 0.8193800449371338}, {\"bestTime\": 3.038267135620117}, {\"bestTime\": 9.149199962615967}, {\"bestTime\": 0.18924403190612793}, {\"bestTime\": 0.10994410514831543}, {\"bestTime\": 1.7757148742675781}, {\"bestTime\": 0.21519684791564941}, {\"bestTime\": 0.20357298851013184}, {\"bestTime\": 0.1049051284790039}, {\"bestTime\": 5.511259078979492}, {\"bestTime\": 7.6994099617004395}, {\"bestTime\": 0.1684110164642334}, {\"bestTime\": 0.5392940044403076}, {\"bestTime\": 33.17119383811951}, {\"bestTime\": 0.1743488311767578}, {\"bestTime\": 0.10965895652770996}, {\"bestTime\": 0.18398094177246094}, {\"bestTime\": 0.21233797073364258}, {\"bestTime\": 0.5187878608703613}, {\"bestTime\": 25.315775871276855}, {\"bestTime\": 0.25951313972473145}, {\"bestTime\": 0.6036410331726074}, {\"bestTime\": 1.3873639106750488}, {\"bestTime\": 0.16581392288208008}, {\"bestTime\": 0.3649139404296875}, {\"bestTime\": 47.2364718914032}, {\"bestTime\": 0.367462158203125}, {\"bestTime\": 0.34677696228027344}, {\"bestTime\": 4.060259819030762}, {\"bestTime\": 2.271329164505005}, {\"bestTime\": 0.13985610008239746}, {\"bestTime\": 0.24398303031921387}, {\"bestTime\": 0.09692692756652832}, {\"bestTime\": 0.18214201927185059}, {\"bestTime\": 2.4919800758361816}, {\"bestTime\": 18.57689118385315}, {\"bestTime\": 0.5538091659545898}, {\"bestTime\": 0.6540420055389404}, {\"bestTime\": 0.3476250171661377}, {\"bestTime\": 0.43089890480041504}, {\"bestTime\": 3.497253894805908}, {\"bestTime\": 0.3891870975494385}, {\"bestTime\": 2.8781120777130127}, {\"bestTime\": 0.33466005325317383}, {\"bestTime\": 0.4030580520629883}, {\"bestTime\": 0.2006819248199463}, {\"bestTime\": 0.3713529109954834}, {\"bestTime\": 5.618874788284302}, {\"bestTime\": 0.14622902870178223}, {\"bestTime\": 0.17084407806396484}, {\"bestTime\": 2.6531879901885986}, {\"bestTime\": 16.878718852996826}, {\"bestTime\": 0.19689488410949707}, {\"bestTime\": 1.8830630779266357}, {\"bestTime\": 0.3563969135284424}, {\"bestTime\": 2.384434938430786}, {\"bestTime\": 0.32315802574157715}, {\"bestTime\": 1.0634419918060303}, {\"bestTime\": 0.30428409576416016}, {\"bestTime\": 3.1556529998779297}, {\"bestTime\": 5.500200986862183}, {\"bestTime\": 0.4842379093170166}, {\"bestTime\": 1.151231050491333}, {\"bestTime\": 0.2611720561981201}, {\"bestTime\": 0.2608640193939209}, {\"bestTime\": 0.310413122177124}, {\"bestTime\": 0.06295108795166016}, {\"bestTime\": 0.3279719352722168}, {\"bestTime\": 20.040127992630005}, {\"bestTime\": 0.4945251941680908}, {\"bestTime\": 2.4471781253814697}, {\"bestTime\": 0.8748269081115723}, {\"bestTime\": 21.129190921783447}, {\"bestTime\": 1.0882878303527832}, {\"bestTime\": 0.30237388610839844}, {\"bestTime\": 0.19539594650268555}, {\"bestTime\": 47.48579406738281}, {\"bestTime\": 0.34725284576416016}, {\"bestTime\": 2.386557102203369}, {\"bestTime\": 0.14676499366760254}, {\"bestTime\": 2.699099063873291}, {\"bestTime\": 10.124470949172974}, {\"bestTime\": 0.16985487937927246}, {\"bestTime\": 0.950463056564331}, {\"bestTime\": 2.871960163116455}, {\"bestTime\": 0.20720911026000977}, {\"bestTime\": 0.3757340908050537}, {\"bestTime\": 3.658125877380371}, {\"bestTime\": 0.4996809959411621}, {\"bestTime\": 0.8745970726013184}, {\"bestTime\": 0.9236850738525391}, {\"bestTime\": 0.9894020557403564}, {\"bestTime\": 31.35387897491455}, {\"bestTime\": 0.6621708869934082}, {\"bestTime\": 0.30951595306396484}, {\"bestTime\": 3.02377986907959}, {\"bestTime\": 4.090384006500244}, {\"bestTime\": 1.1528000831604004}, {\"bestTime\": 0.27341794967651367}, {\"bestTime\": 0.5334441661834717}, {\"bestTime\": 0.16864299774169922}, {\"bestTime\": 0.26523590087890625}, {\"bestTime\": 0.6299419403076172}, {\"bestTime\": 0.3642079830169678}, {\"bestTime\": 0.24446487426757812}, {\"bestTime\": 0.1090548038482666}, {\"bestTime\": 0.18427705764770508}, {\"bestTime\": 0.21073484420776367}, {\"bestTime\": 0.8360011577606201}, {\"bestTime\": 0.09823799133300781}, {\"bestTime\": 33.05550217628479}, {\"bestTime\": 0.1878221035003662}, {\"bestTime\": 0.1766529083251953}, {\"bestTime\": 3.5223231315612793}, {\"bestTime\": 0.4034121036529541}, {\"bestTime\": 0.6813280582427979}, {\"bestTime\": 2.4860849380493164}, {\"bestTime\": 0.5626349449157715}, {\"bestTime\": 0.35711193084716797}, {\"bestTime\": 16.19421100616455}, {\"bestTime\": 0.4261608123779297}, {\"bestTime\": 0.14005494117736816}, {\"bestTime\": 0.09689593315124512}, {\"bestTime\": 0.24100089073181152}, {\"bestTime\": 22.963052988052368}, {\"bestTime\": 0.35975098609924316}, {\"bestTime\": 0.3473780155181885}, {\"bestTime\": 2.2969348430633545}, {\"bestTime\": 0.5070021152496338}, {\"bestTime\": 1.1555900573730469}, {\"bestTime\": 0.7074418067932129}, {\"bestTime\": 0.489332914352417}, {\"bestTime\": 28.166785955429077}, {\"bestTime\": 0.17399096488952637}, {\"bestTime\": 0.22438502311706543}, {\"bestTime\": 9.812282085418701}, {\"bestTime\": 0.21897101402282715}, {\"bestTime\": 11.446017980575562}, {\"bestTime\": 0.4014251232147217}, {\"bestTime\": 0.7056350708007812}, {\"bestTime\": 0.21944904327392578}, {\"bestTime\": 27.790276765823364}, {\"bestTime\": 0.4412879943847656}, {\"bestTime\": 8.552091121673584}, {\"bestTime\": 0.21247100830078125}, {\"bestTime\": 0.5268759727478027}, {\"bestTime\": 0.14575409889221191}, {\"bestTime\": 0.1712629795074463}, {\"bestTime\": 0.30169200897216797}, {\"bestTime\": 39.581218004226685}, {\"bestTime\": 0.7415058612823486}, {\"bestTime\": 0.7002999782562256}, {\"bestTime\": 0.1835331916809082}, {\"bestTime\": 0.14415597915649414}, {\"bestTime\": 27.50158190727234}, {\"bestTime\": 0.833564043045044}, {\"bestTime\": 0.3071451187133789}, {\"bestTime\": 3.64455509185791}, {\"bestTime\": 0.6214361190795898}, {\"bestTime\": 0.5832281112670898}, {\"bestTime\": 0.1999671459197998}, {\"bestTime\": 0.1074831485748291}, {\"bestTime\": 0.23134207725524902}, {\"bestTime\": 0.5332498550415039}, {\"bestTime\": 0.33206915855407715}, {\"bestTime\": 0.18435001373291016}, {\"bestTime\": 0.11040592193603516}, {\"bestTime\": 0.7678680419921875}, {\"bestTime\": 9.195802927017212}, {\"bestTime\": 0.4101219177246094}, {\"bestTime\": 0.8149840831756592}, {\"bestTime\": 3.5759119987487793}, {\"bestTime\": 8.881335973739624}, {\"bestTime\": 7.182261943817139}, {\"bestTime\": 0.18307995796203613}, {\"bestTime\": 43.544739961624146}, {\"bestTime\": 0.7680261135101318}, {\"bestTime\": 0.47918009757995605}, {\"bestTime\": 0.2809867858886719}, {\"bestTime\": 8.44465184211731}, {\"bestTime\": 0.3755629062652588}, {\"bestTime\": 38.94339990615845}, {\"bestTime\": 0.2860701084136963}, {\"bestTime\": 0.27991795539855957}, {\"bestTime\": 0.1997079849243164}, {\"bestTime\": 0.2187199592590332}, {\"bestTime\": 3.700108051300049}, {\"bestTime\": 6.957979917526245}, {\"bestTime\": 6.9382078647613525}, {\"bestTime\": 0.7374629974365234}, {\"bestTime\": 0.19225287437438965}, {\"bestTime\": 0.11009383201599121}, {\"bestTime\": 13.83975887298584}, {\"bestTime\": 0.8137459754943848}, {\"bestTime\": 4.668392181396484}, {\"bestTime\": 0.5418291091918945}, {\"bestTime\": 0.23161697387695312}, {\"bestTime\": 0.17093110084533691}, {\"bestTime\": 0.33225417137145996}, {\"bestTime\": 0.308758020401001}, {\"bestTime\": 0.5853159427642822}, {\"bestTime\": 0.19911503791809082}, {\"bestTime\": 0.1116950511932373}, {\"bestTime\": 0.6185879707336426}, {\"bestTime\": 7.710424184799194}, {\"bestTime\": 0.18983888626098633}, {\"bestTime\": 0.2971019744873047}, {\"bestTime\": 4.466759920120239}, {\"bestTime\": 31.65843391418457}, {\"bestTime\": 0.8796799182891846}, {\"bestTime\": 0.45545291900634766}, {\"bestTime\": 56.255017042160034}, {\"bestTime\": 0.3534200191497803}, {\"bestTime\": 0.18358588218688965}, {\"bestTime\": 0.7473669052124023}, {\"bestTime\": 0.6097540855407715}, {\"bestTime\": 0.4799659252166748}, {\"bestTime\": 3.8412041664123535}, {\"bestTime\": 28.037426948547363}, {\"bestTime\": 0.9188220500946045}, {\"bestTime\": 0.43893909454345703}, {\"bestTime\": 8.737631797790527}, {\"bestTime\": 0.39975500106811523}, {\"bestTime\": 3.608886957168579}, {\"bestTime\": 0.21074485778808594}, {\"bestTime\": 0.9437298774719238}, {\"bestTime\": 0.22643184661865234}, {\"bestTime\": 15.392003774642944}, {\"bestTime\": 0.20630502700805664}, {\"bestTime\": 32.08170509338379}, {\"bestTime\": 0.4344291687011719}, {\"bestTime\": 0.7028050422668457}, {\"bestTime\": 0.1853029727935791}, {\"bestTime\": 0.14630794525146484}, {\"bestTime\": 0.30945301055908203}, {\"bestTime\": 0.7589051723480225}, {\"bestTime\": 0.2131798267364502}, {\"bestTime\": 0.5386390686035156}, {\"bestTime\": 0.1456289291381836}, {\"bestTime\": 0.363}, {\"bestTime\": 24.177}, {\"bestTime\": 4.832}, {\"bestTime\": 0.063}, {\"bestTime\": 27.14}, {\"bestTime\": 29.928}, {\"bestTime\": 0.021}, {\"bestTime\": 0.052}, {\"bestTime\": 23.227}, {\"bestTime\": 0.091}, {\"bestTime\": 2.978}, {\"bestTime\": 1.938}, {\"bestTime\": 4.488}, {\"bestTime\": 0.042}, {\"bestTime\": 0.283}, {\"bestTime\": 0.069}, {\"bestTime\": 0.024}, {\"bestTime\": 3.389}, {\"bestTime\": 9.85}, {\"bestTime\": 0.132}, {\"bestTime\": 4.729}, {\"bestTime\": 0.088}, {\"bestTime\": 25.217}, {\"bestTime\": 30.601}, {\"bestTime\": 0.392}, {\"bestTime\": 5.123}, {\"bestTime\": 0.026}, {\"bestTime\": 17.991}, {\"bestTime\": 0.229}, {\"bestTime\": 0.755}, {\"bestTime\": 0.26}, {\"bestTime\": 0.06}, {\"bestTime\": 0.427}, {\"bestTime\": 10.906}, {\"bestTime\": 0.031}, {\"bestTime\": 0.06}, {\"bestTime\": 6.059}, {\"bestTime\": 0.715}, {\"bestTime\": 0.122}, {\"bestTime\": 0.05}, {\"bestTime\": 1.138}, {\"bestTime\": 0.02}, {\"bestTime\": 1.912}, {\"bestTime\": 0.383}, {\"bestTime\": 0.036}, {\"bestTime\": 0.851}, {\"bestTime\": 0.031}, {\"bestTime\": 0.33}, {\"bestTime\": 0.193}, {\"bestTime\": 1.412}, {\"bestTime\": 0.313}, {\"bestTime\": 0.052}, {\"bestTime\": 0.277}, {\"bestTime\": 1.547}, {\"bestTime\": 7.84}, {\"bestTime\": 31.719}, {\"bestTime\": 37.117}, {\"bestTime\": 0.141}, {\"bestTime\": 0.035}, {\"bestTime\": 20.484}, {\"bestTime\": 6.778}, {\"bestTime\": 0.037}, {\"bestTime\": 0.614}, {\"bestTime\": 0.141}, {\"bestTime\": 53.052}, {\"bestTime\": 44.471}, {\"bestTime\": 18.91}, {\"bestTime\": 0.046}, {\"bestTime\": 1.194}, {\"bestTime\": 1.879}, {\"bestTime\": 0.312}, {\"bestTime\": 32.251}, {\"bestTime\": 13.888}, {\"bestTime\": 0.034}, {\"bestTime\": 0.084}, {\"bestTime\": 0.361}, {\"bestTime\": 5.511}, {\"bestTime\": 0.252}, {\"bestTime\": 0.219}, {\"bestTime\": 0.027}, {\"bestTime\": 0.03}, {\"bestTime\": 21.489}, {\"bestTime\": 0.036}, {\"bestTime\": 0.058}, {\"bestTime\": 1.761}, {\"bestTime\": 33.513}, {\"bestTime\": 8.156}, {\"bestTime\": 0.179}, {\"bestTime\": 0.03}, {\"bestTime\": 0.258}, {\"bestTime\": 8.405}, {\"bestTime\": 3.571}, {\"bestTime\": 0.267}, {\"bestTime\": 39.61}, {\"bestTime\": 0.11}, {\"bestTime\": 4.41}, {\"bestTime\": 0.17}, {\"bestTime\": 0.12}, {\"bestTime\": 9.47}, {\"bestTime\": 3.08}, {\"bestTime\": 0.25}, {\"bestTime\": 0.11}, {\"bestTime\": 0.5}, {\"bestTime\": 0.16}, {\"bestTime\": 0.22}, {\"bestTime\": 3.12}, {\"bestTime\": 0.36}, {\"bestTime\": 0.44}, {\"bestTime\": 0.52}, {\"bestTime\": 0.12}, {\"bestTime\": 4.72}, {\"bestTime\": 4.36}, {\"bestTime\": 0.22}, {\"bestTime\": 8.22}, {\"bestTime\": 40.51}, {\"bestTime\": 0.14}, {\"bestTime\": 9.37}, {\"bestTime\": 3.53}, {\"bestTime\": 0.11}, {\"bestTime\": 0.12}, {\"bestTime\": 0.02}, {\"bestTime\": 19.14}, {\"bestTime\": 1.05}, {\"bestTime\": 0.02}, {\"bestTime\": 0.02}, {\"bestTime\": 5.34}, {\"bestTime\": 0.12}, {\"bestTime\": 0.09}, {\"bestTime\": 0.02}, {\"bestTime\": 0.63}, {\"bestTime\": 1.12}, {\"bestTime\": 0.33}, {\"bestTime\": 0.83}, {\"bestTime\": 0.02}, {\"bestTime\": 0.17}, {\"bestTime\": 0.12}, {\"bestTime\": 1.08}, {\"bestTime\": 0.14}, {\"bestTime\": 0.92}, {\"bestTime\": 0.84}, {\"bestTime\": 0.02}, {\"bestTime\": 0.25}, {\"bestTime\": 0.33}, {\"bestTime\": 0.14}, {\"bestTime\": 0.02}, {\"bestTime\": 0.02}, {\"bestTime\": 2.05}, {\"bestTime\": 0.02}, {\"bestTime\": 0.09}, {\"bestTime\": 0.13}, {\"bestTime\": 0.22}, {\"bestTime\": 5.55}, {\"bestTime\": 0.11}, {\"bestTime\": 0.27}, {\"bestTime\": 0.41}, {\"bestTime\": 0.14}, {\"bestTime\": 0.52}, {\"bestTime\": 0.37}, {\"bestTime\": 0.2}, {\"bestTime\": 0.17}, {\"bestTime\": 19.48}, {\"bestTime\": 0.12}, {\"bestTime\": 3.61}, {\"bestTime\": 0.09}, {\"bestTime\": 8.05}, {\"bestTime\": 0.14}, {\"bestTime\": 40.16}, {\"bestTime\": 0.23}, {\"bestTime\": 4.23}, {\"bestTime\": 4.73}, {\"bestTime\": 0.02}, {\"bestTime\": 3.62}, {\"bestTime\": 0.11}, {\"bestTime\": 9.41}, {\"bestTime\": 19.45}, {\"bestTime\": 0.17}, {\"bestTime\": 0.22}, {\"bestTime\": 4.72}, {\"bestTime\": 7.97}, {\"bestTime\": 0.41}, {\"bestTime\": 0.16}, {\"bestTime\": 0.25}, {\"bestTime\": 3.08}, {\"bestTime\": 0.22}, {\"bestTime\": 0.36}, {\"bestTime\": 0.2}, {\"bestTime\": 0.2}, {\"bestTime\": 0.02}, {\"bestTime\": 0.85}, {\"bestTime\": 0.14}, {\"bestTime\": 0.92}, {\"bestTime\": 0.02}, {\"bestTime\": 1.09}, {\"bestTime\": 0.61}, {\"bestTime\": 5.36}, {\"bestTime\": 0.25}, {\"bestTime\": 0.02}, {\"bestTime\": 0.14}, {\"bestTime\": 2.06}, {\"bestTime\": 1.02}, {\"bestTime\": 0.12}, {\"bestTime\": 0.22}, {\"bestTime\": 0.02}, {\"bestTime\": 0.02}, {\"bestTime\": 1.03}, {\"bestTime\": 0.02}, {\"bestTime\": 2.03}, {\"bestTime\": 0.91}, {\"bestTime\": 0.14}, {\"bestTime\": 0.14}, {\"bestTime\": 0.33}, {\"bestTime\": 0.2}, {\"bestTime\": 0.22}, {\"bestTime\": 0.63}, {\"bestTime\": 0.02}, {\"bestTime\": 0.05364704132080078}, {\"bestTime\": 0.051525115966796875}, {\"bestTime\": 0.05029106140136719}, {\"bestTime\": 0.07716608047485352}, {\"bestTime\": 0.0612490177154541}, {\"bestTime\": 0.05204296112060547}, {\"bestTime\": 9.382128953933716}, {\"bestTime\": 0.04848814010620117}, {\"bestTime\": 0.039711952209472656}, {\"bestTime\": 14.769173860549927}, {\"bestTime\": 0.049980878829956055}, {\"bestTime\": 22.689826011657715}, {\"bestTime\": 0.18026494979858398}, {\"bestTime\": 0.04264712333679199}, {\"bestTime\": 0.06567192077636719}, {\"bestTime\": 0.14634108543395996}, {\"bestTime\": 15.563709020614624}, {\"bestTime\": 0.061079978942871094}, {\"bestTime\": 0.04666495323181152}, {\"bestTime\": 0.050260066986083984}, {\"bestTime\": 0.05538201332092285}, {\"bestTime\": 0.04541206359863281}, {\"bestTime\": 1.8741540908813477}, {\"bestTime\": 0.04834413528442383}, {\"bestTime\": 0.10815811157226562}, {\"bestTime\": 0.04982399940490723}, {\"bestTime\": 0.25699400901794434}, {\"bestTime\": 0.06641697883605957}, {\"bestTime\": 0.05175590515136719}, {\"bestTime\": 0.25380396842956543}, {\"bestTime\": 0.05255603790283203}, {\"bestTime\": 0.05066800117492676}, {\"bestTime\": 0.04820108413696289}, {\"bestTime\": 0.04673504829406738}, {\"bestTime\": 0.04839897155761719}, {\"bestTime\": 0.04626202583312988}, {\"bestTime\": 0.0617828369140625}, {\"bestTime\": 0.051896095275878906}, {\"bestTime\": 0.051795005798339844}, {\"bestTime\": 0.04515409469604492}, {\"bestTime\": 0.2085268497467041}, {\"bestTime\": 0.05176591873168945}, {\"bestTime\": 0.05077695846557617}, {\"bestTime\": 0.06435990333557129}, {\"bestTime\": 0.06531190872192383}, {\"bestTime\": 0.2537839412689209}, {\"bestTime\": 0.08275198936462402}, {\"bestTime\": 0.05199694633483887}, {\"bestTime\": 0.753648042678833}, {\"bestTime\": 0.04986715316772461}, {\"bestTime\": 0.050724029541015625}, {\"bestTime\": 0.06608295440673828}, {\"bestTime\": 0.06699991226196289}, {\"bestTime\": 0.05016613006591797}, {\"bestTime\": 0.05755805969238281}, {\"bestTime\": 0.06793904304504395}, {\"bestTime\": 0.035857200622558594}, {\"bestTime\": 0.05398392677307129}, {\"bestTime\": 0.08335208892822266}, {\"bestTime\": 0.04631781578063965}, {\"bestTime\": 0.05208182334899902}, {\"bestTime\": 38.436110973358154}, {\"bestTime\": 0.047904014587402344}, {\"bestTime\": 0.049429893493652344}, {\"bestTime\": 0.04910898208618164}, {\"bestTime\": 0.06704378128051758}, {\"bestTime\": 0.05203104019165039}, {\"bestTime\": 0.03626704216003418}, {\"bestTime\": 0.07919716835021973}, {\"bestTime\": 31.95779800415039}, {\"bestTime\": 0.036409854888916016}, {\"bestTime\": 0.04694199562072754}, {\"bestTime\": 0.23802685737609863}, {\"bestTime\": 0.035456180572509766}, {\"bestTime\": 0.037248849868774414}, {\"bestTime\": 0.056603193283081055}, {\"bestTime\": 0.05415201187133789}, {\"bestTime\": 0.05531001091003418}, {\"bestTime\": 0.04219818115234375}, {\"bestTime\": 0.04782414436340332}, {\"bestTime\": 0.04763603210449219}, {\"bestTime\": 0.034417152404785156}, {\"bestTime\": 0.13657903671264648}, {\"bestTime\": 0.052976131439208984}, {\"bestTime\": 0.0509490966796875}, {\"bestTime\": 0.05230116844177246}, {\"bestTime\": 0.07172799110412598}, {\"bestTime\": 0.08474898338317871}, {\"bestTime\": 6.051944017410278}, {\"bestTime\": 0.06729984283447266}, {\"bestTime\": 0.05026698112487793}, {\"bestTime\": 0.5767719745635986}, {\"bestTime\": 0.06911206245422363}, {\"bestTime\": 21.184988975524902}, {\"bestTime\": 0.05043601989746094}, {\"bestTime\": 0.048780202865600586}, {\"bestTime\": 0.07070183753967285}, {\"bestTime\": 0.09096097946166992}, {\"bestTime\": 0.25530099868774414}, {\"bestTime\": 0.0813591480255127}, {\"bestTime\": 0.04738593101501465}, {\"bestTime\": 0.7741379737854004}, {\"bestTime\": 0.04115796089172363}, {\"bestTime\": 0.051119089126586914}, {\"bestTime\": 0.05056905746459961}, {\"bestTime\": 0.08533310890197754}, {\"bestTime\": 0.049466848373413086}, {\"bestTime\": 0.08387589454650879}, {\"bestTime\": 0.06808114051818848}, {\"bestTime\": 26.09428596496582}, {\"bestTime\": 0.13006186485290527}, {\"bestTime\": 0.048191070556640625}, {\"bestTime\": 0.0529789924621582}, {\"bestTime\": 0.0467219352722168}, {\"bestTime\": 1.5353209972381592}, {\"bestTime\": 0.053720951080322266}, {\"bestTime\": 0.05132699012756348}, {\"bestTime\": 0.038110971450805664}, {\"bestTime\": 0.04874610900878906}, {\"bestTime\": 0.03632092475891113}, {\"bestTime\": 0.04760098457336426}, {\"bestTime\": 0.062313079833984375}, {\"bestTime\": 0.03845691680908203}, {\"bestTime\": 0.06159806251525879}, {\"bestTime\": 0.0538330078125}, {\"bestTime\": 0.040608882904052734}, {\"bestTime\": 0.049774169921875}, {\"bestTime\": 34.40940809249878}, {\"bestTime\": 0.049407005310058594}, {\"bestTime\": 0.23851609230041504}, {\"bestTime\": 0.03789997100830078}, {\"bestTime\": 0.20747804641723633}, {\"bestTime\": 0.05285978317260742}, {\"bestTime\": 38.53139901161194}, {\"bestTime\": 0.05075383186340332}, {\"bestTime\": 0.05132412910461426}, {\"bestTime\": 0.0371708869934082}, {\"bestTime\": 0.0371098518371582}, {\"bestTime\": 0.17546987533569336}, {\"bestTime\": 15.70844292640686}, {\"bestTime\": 0.03805398941040039}, {\"bestTime\": 0.06706714630126953}, {\"bestTime\": 0.14544892311096191}, {\"bestTime\": 0.0466158390045166}, {\"bestTime\": 0.050752878189086914}, {\"bestTime\": 0.0462491512298584}, {\"bestTime\": 0.05197405815124512}, {\"bestTime\": 0.04984283447265625}, {\"bestTime\": 14.166874885559082}, {\"bestTime\": 0.6815109252929688}, {\"bestTime\": 0.050341129302978516}, {\"bestTime\": 0.046855926513671875}, {\"bestTime\": 0.0725259780883789}, {\"bestTime\": 0.054650068283081055}, {\"bestTime\": 0.05254817008972168}, {\"bestTime\": 0.051300048828125}, {\"bestTime\": 0.05278205871582031}, {\"bestTime\": 0.04691505432128906}, {\"bestTime\": 0.04915809631347656}, {\"bestTime\": 0.04959988594055176}, {\"bestTime\": 0.053700923919677734}, {\"bestTime\": 0.04748106002807617}, {\"bestTime\": 0.047370195388793945}, {\"bestTime\": 0.20638298988342285}, {\"bestTime\": 0.05099892616271973}, {\"bestTime\": 0.050874948501586914}, {\"bestTime\": 0.047377824783325195}, {\"bestTime\": 0.09917211532592773}, {\"bestTime\": 1.863797903060913}, {\"bestTime\": 0.27078890800476074}, {\"bestTime\": 0.06665682792663574}, {\"bestTime\": 0.049835920333862305}, {\"bestTime\": 0.03989982604980469}, {\"bestTime\": 0.05150794982910156}, {\"bestTime\": 0.07645702362060547}, {\"bestTime\": 0.04941201210021973}, {\"bestTime\": 0.04954814910888672}, {\"bestTime\": 0.05236387252807617}, {\"bestTime\": 0.06343412399291992}, {\"bestTime\": 0.0477142333984375}, {\"bestTime\": 0.06511998176574707}, {\"bestTime\": 0.05194211006164551}, {\"bestTime\": 0.0451970100402832}, {\"bestTime\": 0.03798699378967285}, {\"bestTime\": 0.08232688903808594}, {\"bestTime\": 0.043797969818115234}, {\"bestTime\": 0.05116581916809082}, {\"bestTime\": 0.04621696472167969}, {\"bestTime\": 0.03669595718383789}, {\"bestTime\": 0.038594961166381836}, {\"bestTime\": 0.03653883934020996}, {\"bestTime\": 3.3439979553222656}, {\"bestTime\": 0.05347490310668945}, {\"bestTime\": 0.0388338565826416}, {\"bestTime\": 9.910356998443604}, {\"bestTime\": 0.047514915466308594}, {\"bestTime\": 0.05151510238647461}, {\"bestTime\": 0.04890704154968262}, {\"bestTime\": 0.04332995414733887}, {\"bestTime\": 0.06730985641479492}, {\"bestTime\": 38.0968291759491}, {\"bestTime\": 0.03640890121459961}, {\"bestTime\": 0.03543496131896973}, {\"bestTime\": 0.04826807975769043}, {\"bestTime\": 0.04700899124145508}, {\"bestTime\": 0.05022788047790527}, {\"bestTime\": 0.0450439453125}, {\"bestTime\": 0.06398391723632812}, {\"bestTime\": 0.0812070369720459}, {\"bestTime\": 0.05095696449279785}, {\"bestTime\": 0.050682783126831055}, {\"bestTime\": 0.06186389923095703}, {\"bestTime\": 0.05124092102050781}, {\"bestTime\": 0.04708290100097656}, {\"bestTime\": 19.59306502342224}, {\"bestTime\": 0.050694942474365234}, {\"bestTime\": 0.05772590637207031}, {\"bestTime\": 0.05186200141906738}, {\"bestTime\": 0.048306941986083984}, {\"bestTime\": 0.2238328456878662}, {\"bestTime\": 0.04749298095703125}, {\"bestTime\": 0.05252194404602051}, {\"bestTime\": 0.08362698554992676}, {\"bestTime\": 0.16183805465698242}, {\"bestTime\": 0.05466794967651367}, {\"bestTime\": 0.05043911933898926}, {\"bestTime\": 0.058611154556274414}, {\"bestTime\": 0.04259800910949707}, {\"bestTime\": 0.047171831130981445}, {\"bestTime\": 0.06132197380065918}, {\"bestTime\": 0.07986617088317871}, {\"bestTime\": 38.491212129592896}, {\"bestTime\": 0.05178499221801758}, {\"bestTime\": 0.06995892524719238}, {\"bestTime\": 0.05696702003479004}, {\"bestTime\": 0.049546003341674805}, {\"bestTime\": 0.17601323127746582}, {\"bestTime\": 0.7058901786804199}, {\"bestTime\": 0.04709506034851074}, {\"bestTime\": 0.09597492218017578}, {\"bestTime\": 0.08200407028198242}, {\"bestTime\": 0.04695701599121094}, {\"bestTime\": 0.05685710906982422}, {\"bestTime\": 0.06664395332336426}, {\"bestTime\": 0.04751896858215332}, {\"bestTime\": 0.03557705879211426}, {\"bestTime\": 0.06826901435852051}, {\"bestTime\": 0.04989790916442871}, {\"bestTime\": 0.07777714729309082}, {\"bestTime\": 0.050685882568359375}, {\"bestTime\": 0.06770896911621094}, {\"bestTime\": 0.04024314880371094}, {\"bestTime\": 56.346421003341675}, {\"bestTime\": 0.05003690719604492}, {\"bestTime\": 0.05152010917663574}, {\"bestTime\": 0.03659319877624512}, {\"bestTime\": 0.04960918426513672}, {\"bestTime\": 0.3572719097137451}, {\"bestTime\": 0.05308198928833008}, {\"bestTime\": 0.05713391304016113}, {\"bestTime\": 0.06842994689941406}, {\"bestTime\": 0.05199694633483887}, {\"bestTime\": 0.0670318603515625}, {\"bestTime\": 0.04498600959777832}, {\"bestTime\": 0.04958200454711914}, {\"bestTime\": 0.04056596755981445}, {\"bestTime\": 0.049681901931762695}, {\"bestTime\": 12.894305229187012}, {\"bestTime\": 0.04719805717468262}, {\"bestTime\": 0.05123615264892578}, {\"bestTime\": 0.0749809741973877}, {\"bestTime\": 0.05061793327331543}, {\"bestTime\": 0.1303119659423828}, {\"bestTime\": 0.04556703567504883}, {\"bestTime\": 0.07622599601745605}, {\"bestTime\": 0.05376005172729492}, {\"bestTime\": 0.05048203468322754}, {\"bestTime\": 0.045925140380859375}, {\"bestTime\": 0.05330204963684082}, {\"bestTime\": 0.05409407615661621}, {\"bestTime\": 0.0407710075378418}, {\"bestTime\": 0.05004119873046875}, {\"bestTime\": 0.05194592475891113}, {\"bestTime\": 0.09199190139770508}, {\"bestTime\": 0.08308196067810059}, {\"bestTime\": 0.07053399085998535}, {\"bestTime\": 0.03649187088012695}, {\"bestTime\": 0.05319499969482422}, {\"bestTime\": 0.07070612907409668}, {\"bestTime\": 0.0541379451751709}, {\"bestTime\": 38.61496615409851}, {\"bestTime\": 0.04944300651550293}, {\"bestTime\": 0.04826998710632324}, {\"bestTime\": 0.18089008331298828}, {\"bestTime\": 0.08110213279724121}, {\"bestTime\": 0.054006099700927734}, {\"bestTime\": 0.08382987976074219}, {\"bestTime\": 0.038001060485839844}, {\"bestTime\": 0.035748958587646484}, {\"bestTime\": 0.03586387634277344}, {\"bestTime\": 0.052034854888916016}, {\"bestTime\": 0.06058692932128906}, {\"bestTime\": 0.06882596015930176}, {\"bestTime\": 0.06931614875793457}, {\"bestTime\": 0.05296897888183594}, {\"bestTime\": 0.05027413368225098}, {\"bestTime\": 0.06001591682434082}, {\"bestTime\": 0.03793907165527344}, {\"bestTime\": 0.22168493270874023}, {\"bestTime\": 0.36546802520751953}, {\"bestTime\": 0.04925203323364258}, {\"bestTime\": 0.05198311805725098}, {\"bestTime\": 0.052414894104003906}, {\"bestTime\": 0.04593706130981445}, {\"bestTime\": 7.263469934463501}, {\"bestTime\": 0.20280003547668457}, {\"bestTime\": 38.12791204452515}, {\"bestTime\": 0.051457881927490234}, {\"bestTime\": 0.5840549468994141}, {\"bestTime\": 0.036553144454956055}, {\"bestTime\": 0.03576493263244629}, {\"bestTime\": 10.226379156112671}, {\"bestTime\": 0.03782796859741211}, {\"bestTime\": 0.046691179275512695}, {\"bestTime\": 0.05318403244018555}, {\"bestTime\": 0.04761004447937012}, {\"bestTime\": 0.047193050384521484}, {\"bestTime\": 0.6277909278869629}, {\"bestTime\": 0.04546403884887695}, {\"bestTime\": 0.05370521545410156}, {\"bestTime\": 0.037554025650024414}, {\"bestTime\": 3.346724033355713}, {\"bestTime\": 0.06735897064208984}, {\"bestTime\": 0.04521799087524414}, {\"bestTime\": 0.07882499694824219}, {\"bestTime\": 0.04368090629577637}, {\"bestTime\": 0.049626827239990234}, {\"bestTime\": 0.04789400100708008}, {\"bestTime\": 0.05249595642089844}, {\"bestTime\": 0.05118393898010254}, {\"bestTime\": 0.07026386260986328}, {\"bestTime\": 0.08110904693603516}, {\"bestTime\": 0.03701496124267578}, {\"bestTime\": 0.22628498077392578}, {\"bestTime\": 0.05008387565612793}, {\"bestTime\": 0.07116007804870605}, {\"bestTime\": 0.17583298683166504}, {\"bestTime\": 7.216051816940308}, {\"bestTime\": 0.04793405532836914}, {\"bestTime\": 0.050340890884399414}, {\"bestTime\": 0.15414690971374512}, {\"bestTime\": 0.04981803894042969}, {\"bestTime\": 19.58107900619507}, {\"bestTime\": 0.059409141540527344}, {\"bestTime\": 0.052896976470947266}, {\"bestTime\": 0.05083608627319336}, {\"bestTime\": 4.039516925811768}, {\"bestTime\": 0.08264899253845215}, {\"bestTime\": 0.03727889060974121}, {\"bestTime\": 0.06339907646179199}, {\"bestTime\": 0.049880027770996094}, {\"bestTime\": 0.066741943359375}, {\"bestTime\": 0.051687002182006836}, {\"bestTime\": 0.2348170280456543}, {\"bestTime\": 0.04640984535217285}, {\"bestTime\": 0.08105802536010742}, {\"bestTime\": 0.052755117416381836}, {\"bestTime\": 0.04554295539855957}, {\"bestTime\": 0.0499720573425293}, {\"bestTime\": 0.04911684989929199}, {\"bestTime\": 0.040985822677612305}, {\"bestTime\": 0.20951008796691895}, {\"bestTime\": 0.05091404914855957}, {\"bestTime\": 0.06438684463500977}, {\"bestTime\": 26.145479917526245}, {\"bestTime\": 0.04967188835144043}, {\"bestTime\": 0.08357000350952148}, {\"bestTime\": 0.04754996299743652}, {\"bestTime\": 0.05403900146484375}, {\"bestTime\": 0.04531407356262207}, {\"bestTime\": 0.05130410194396973}, {\"bestTime\": 0.03574109077453613}, {\"bestTime\": 0.06295990943908691}, {\"bestTime\": 1.5070998668670654}, {\"bestTime\": 0.0522458553314209}, {\"bestTime\": 0.0461580753326416}, {\"bestTime\": 0.0472109317779541}, {\"bestTime\": 0.08225607872009277}, {\"bestTime\": 0.26406097412109375}, {\"bestTime\": 0.037158966064453125}, {\"bestTime\": 0.06612706184387207}, {\"bestTime\": 0.05001497268676758}, {\"bestTime\": 0.05434703826904297}, {\"bestTime\": 0.08154797554016113}, {\"bestTime\": 0.054231882095336914}, {\"bestTime\": 0.050642967224121094}, {\"bestTime\": 0.21244001388549805}, {\"bestTime\": 0.04709506034851074}, {\"bestTime\": 5.675185918807983}, {\"bestTime\": 0.04806017875671387}, {\"bestTime\": 0.03807520866394043}, {\"bestTime\": 0.04532480239868164}, {\"bestTime\": 21.4584538936615}, {\"bestTime\": 0.04978013038635254}, {\"bestTime\": 0.049835920333862305}, {\"bestTime\": 0.049566030502319336}, {\"bestTime\": 0.03726792335510254}, {\"bestTime\": 0.05082297325134277}, {\"bestTime\": 0.06380605697631836}, {\"bestTime\": 1.8287739753723145}, {\"bestTime\": 0.09843301773071289}, {\"bestTime\": 0.053132057189941406}, {\"bestTime\": 0.05351614952087402}, {\"bestTime\": 0.051191091537475586}, {\"bestTime\": 0.04605293273925781}, {\"bestTime\": 0.05140209197998047}, {\"bestTime\": 0.05310988426208496}, {\"bestTime\": 0.05279898643493652}, {\"bestTime\": 0.04702901840209961}, {\"bestTime\": 0.06399011611938477}, {\"bestTime\": 0.053217172622680664}, {\"bestTime\": 0.05785989761352539}, {\"bestTime\": 0.04170680046081543}, {\"bestTime\": 0.052451133728027344}, {\"bestTime\": 0.057312965393066406}, {\"bestTime\": 0.052095890045166016}, {\"bestTime\": 0.04900407791137695}, {\"bestTime\": 0.05262494087219238}, {\"bestTime\": 0.05306696891784668}, {\"bestTime\": 0.19282984733581543}, {\"bestTime\": 0.049993038177490234}, {\"bestTime\": 0.25550007820129395}, {\"bestTime\": 0.047273874282836914}, {\"bestTime\": 0.5323131084442139}, {\"bestTime\": 13.813039064407349}, {\"bestTime\": 9.429232835769653}, {\"bestTime\": 0.05602908134460449}, {\"bestTime\": 0.035585880279541016}, {\"bestTime\": 0.06708192825317383}, {\"bestTime\": 0.049128055572509766}, {\"bestTime\": 0.0695798397064209}, {\"bestTime\": 0.13118505477905273}, {\"bestTime\": 15.62972903251648}, {\"bestTime\": 0.03807401657104492}, {\"bestTime\": 0.17219805717468262}, {\"bestTime\": 0.03628110885620117}, {\"bestTime\": 0.037042856216430664}, {\"bestTime\": 22.503747940063477}, {\"bestTime\": 0.04099893569946289}, {\"bestTime\": 0.046122074127197266}, {\"bestTime\": 0.05050206184387207}, {\"bestTime\": 0.04531598091125488}, {\"bestTime\": 0.2060849666595459}, {\"bestTime\": 0.04899001121520996}, {\"bestTime\": 0.047077178955078125}, {\"bestTime\": 0.04770517349243164}, {\"bestTime\": 0.04675602912902832}, {\"bestTime\": 0.26021504402160645}, {\"bestTime\": 0.05092191696166992}, {\"bestTime\": 0.05208992958068848}, {\"bestTime\": 0.05086398124694824}, {\"bestTime\": 0.06262588500976562}, {\"bestTime\": 0.04616808891296387}, {\"bestTime\": 0.0508880615234375}, {\"bestTime\": 0.04159998893737793}, {\"bestTime\": 0.06493306159973145}, {\"bestTime\": 0.05041193962097168}, {\"bestTime\": 0.05212092399597168}, {\"bestTime\": 0.04970908164978027}, {\"bestTime\": 0.07184696197509766}, {\"bestTime\": 0.05266904830932617}, {\"bestTime\": 0.061869144439697266}, {\"bestTime\": 0.2717781066894531}, {\"bestTime\": 0.04989790916442871}, {\"bestTime\": 0.04090690612792969}, {\"bestTime\": 0.049780845642089844}, {\"bestTime\": 0.05400991439819336}, {\"bestTime\": 23.5675630569458}, {\"bestTime\": 0.05048680305480957}, {\"bestTime\": 0.04966616630554199}, {\"bestTime\": 0.05593395233154297}, {\"bestTime\": 0.05312085151672363}, {\"bestTime\": 0.06466794013977051}, {\"bestTime\": 0.050354957580566406}, {\"bestTime\": 0.049375057220458984}, {\"bestTime\": 0.036438941955566406}, {\"bestTime\": 0.03849601745605469}, {\"bestTime\": 0.039834022521972656}, {\"bestTime\": 0.06822705268859863}, {\"bestTime\": 0.06156587600708008}, {\"bestTime\": 0.03471112251281738}, {\"bestTime\": 0.04883599281311035}, {\"bestTime\": 0.03805804252624512}, {\"bestTime\": 0.053112030029296875}, {\"bestTime\": 0.03925490379333496}, {\"bestTime\": 9.437676906585693}, {\"bestTime\": 0.050952911376953125}, {\"bestTime\": 0.04817509651184082}, {\"bestTime\": 0.06520509719848633}, {\"bestTime\": 1.5346200466156006}, {\"bestTime\": 0.0500180721282959}, {\"bestTime\": 0.047554969787597656}, {\"bestTime\": 0.06464505195617676}, {\"bestTime\": 0.05068516731262207}, {\"bestTime\": 0.07733893394470215}, {\"bestTime\": 0.05416703224182129}, {\"bestTime\": 0.05078005790710449}, {\"bestTime\": 0.06273484230041504}, {\"bestTime\": 26.18851590156555}, {\"bestTime\": 0.13066816329956055}, {\"bestTime\": 0.04934406280517578}, {\"bestTime\": 0.036203861236572266}, {\"bestTime\": 0.05158805847167969}, {\"bestTime\": 0.20652484893798828}, {\"bestTime\": 38.388652086257935}, {\"bestTime\": 0.051216840744018555}, {\"bestTime\": 0.03931903839111328}, {\"bestTime\": 0.07718586921691895}, {\"bestTime\": 0.05058002471923828}, {\"bestTime\": 29.765121936798096}, {\"bestTime\": 0.05362105369567871}, {\"bestTime\": 0.0661630630493164}, {\"bestTime\": 0.05231785774230957}, {\"bestTime\": 20.972984075546265}, {\"bestTime\": 0.05388498306274414}, {\"bestTime\": 0.08131885528564453}, {\"bestTime\": 0.06362295150756836}, {\"bestTime\": 6.131086111068726}, {\"bestTime\": 0.05049586296081543}, {\"bestTime\": 0.07636094093322754}, {\"bestTime\": 0.06663393974304199}, {\"bestTime\": 0.0431671142578125}, {\"bestTime\": 0.06457281112670898}, {\"bestTime\": 0.08757686614990234}, {\"bestTime\": 0.0561671257019043}, {\"bestTime\": 0.0426020622253418}, {\"bestTime\": 0.2076869010925293}, {\"bestTime\": 0.05434298515319824}, {\"bestTime\": 0.7734088897705078}, {\"bestTime\": 0.09232592582702637}, {\"bestTime\": 0.08394503593444824}, {\"bestTime\": 0.049163103103637695}, {\"bestTime\": 0.05494999885559082}, {\"bestTime\": 0.0517730712890625}, {\"bestTime\": 0.03581881523132324}, {\"bestTime\": 0.04373598098754883}, {\"bestTime\": 0.05263495445251465}, {\"bestTime\": 0.22538208961486816}, {\"bestTime\": 0.03964400291442871}, {\"bestTime\": 48.347079038619995}, {\"bestTime\": 0.04868793487548828}, {\"bestTime\": 0.0514531135559082}, {\"bestTime\": 0.08382678031921387}, {\"bestTime\": 0.051396846771240234}, {\"bestTime\": 0.13301706314086914}, {\"bestTime\": 0.04005098342895508}, {\"bestTime\": 0.05080604553222656}, {\"bestTime\": 0.05305790901184082}, {\"bestTime\": 0.08378481864929199}, {\"bestTime\": 0.04558396339416504}, {\"bestTime\": 0.052507877349853516}, {\"bestTime\": 0.04609799385070801}, {\"bestTime\": 12.726213932037354}, {\"bestTime\": 0.05047321319580078}, {\"bestTime\": 0.0637369155883789}, {\"bestTime\": 0.05295920372009277}, {\"bestTime\": 0.038411855697631836}, {\"bestTime\": 0.05961799621582031}, {\"bestTime\": 0.07020020484924316}, {\"bestTime\": 0.037138938903808594}, {\"bestTime\": 0.06649303436279297}, {\"bestTime\": 0.05061602592468262}, {\"bestTime\": 0.0933229923248291}, {\"bestTime\": 0.0822300910949707}, {\"bestTime\": 0.07895898818969727}, {\"bestTime\": 0.048879146575927734}, {\"bestTime\": 0.7074010372161865}, {\"bestTime\": 0.046655893325805664}, {\"bestTime\": 0.03770589828491211}, {\"bestTime\": 0.04755902290344238}, {\"bestTime\": 0.05135917663574219}, {\"bestTime\": 38.61156392097473}, {\"bestTime\": 0.06547284126281738}, {\"bestTime\": 0.06762194633483887}, {\"bestTime\": 0.07625102996826172}, {\"bestTime\": 0.05163288116455078}, {\"bestTime\": 0.051998138427734375}, {\"bestTime\": 0.07120203971862793}, {\"bestTime\": 0.06932902336120605}, {\"bestTime\": 0.5341579914093018}, {\"bestTime\": 0.036889076232910156}, {\"bestTime\": 4.017160892486572}, {\"bestTime\": 0.047158002853393555}, {\"bestTime\": 0.0553591251373291}, {\"bestTime\": 0.0509340763092041}, {\"bestTime\": 0.15563297271728516}, {\"bestTime\": 0.04880499839782715}, {\"bestTime\": 20.08298397064209}, {\"bestTime\": 0.04558587074279785}, {\"bestTime\": 0.050427913665771484}, {\"bestTime\": 7.363609075546265}, {\"bestTime\": 0.049185991287231445}, {\"bestTime\": 0.06242108345031738}, {\"bestTime\": 0.06392693519592285}, {\"bestTime\": 0.042643070220947266}, {\"bestTime\": 0.05414605140686035}, {\"bestTime\": 0.04631996154785156}, {\"bestTime\": 0.04698681831359863}, {\"bestTime\": 0.08186793327331543}, {\"bestTime\": 0.09124207496643066}, {\"bestTime\": 0.0513761043548584}, {\"bestTime\": 0.05143904685974121}, {\"bestTime\": 0.051396846771240234}, {\"bestTime\": 0.04797005653381348}, {\"bestTime\": 0.05212998390197754}, {\"bestTime\": 0.04693913459777832}, {\"bestTime\": 0.0510411262512207}, {\"bestTime\": 0.05442380905151367}, {\"bestTime\": 0.0513920783996582}, {\"bestTime\": 0.0520479679107666}, {\"bestTime\": 0.2225029468536377}, {\"bestTime\": 0.05081915855407715}, {\"bestTime\": 0.05182790756225586}, {\"bestTime\": 0.05202913284301758}, {\"bestTime\": 0.03720808029174805}, {\"bestTime\": 0.04657101631164551}, {\"bestTime\": 0.07222700119018555}, {\"bestTime\": 0.051896095275878906}, {\"bestTime\": 0.036067962646484375}, {\"bestTime\": 0.5831630229949951}, {\"bestTime\": 0.03655600547790527}, {\"bestTime\": 0.05005502700805664}, {\"bestTime\": 0.03738594055175781}, {\"bestTime\": 0.2029740810394287}, {\"bestTime\": 0.07985806465148926}, {\"bestTime\": 7.3980631828308105}, {\"bestTime\": 0.050090789794921875}, {\"bestTime\": 0.047373056411743164}, {\"bestTime\": 0.035475969314575195}, {\"bestTime\": 0.1622309684753418}, {\"bestTime\": 0.051093101501464844}, {\"bestTime\": 0.08332610130310059}, {\"bestTime\": 0.052934885025024414}, {\"bestTime\": 0.05465292930603027}, {\"bestTime\": 0.05316901206970215}, {\"bestTime\": 0.06692695617675781}, {\"bestTime\": 0.05311989784240723}, {\"bestTime\": 0.04711604118347168}, {\"bestTime\": 0.047039031982421875}, {\"bestTime\": 0.047760009765625}, {\"bestTime\": 0.051876068115234375}, {\"bestTime\": 0.050106048583984375}, {\"bestTime\": 0.04802393913269043}, {\"bestTime\": 0.060175180435180664}, {\"bestTime\": 0.05141496658325195}, {\"bestTime\": 0.04825401306152344}, {\"bestTime\": 0.0660848617553711}, {\"bestTime\": 0.05197405815124512}, {\"bestTime\": 4.112929105758667}, {\"bestTime\": 0.05241990089416504}, {\"bestTime\": 7.421210050582886}, {\"bestTime\": 0.14362502098083496}, {\"bestTime\": 0.04665994644165039}, {\"bestTime\": 0.05097508430480957}, {\"bestTime\": 10.254784107208252}, {\"bestTime\": 0.5899279117584229}, {\"bestTime\": 7.626478910446167}, {\"bestTime\": 37.73944401741028}, {\"bestTime\": 0.04232597351074219}, {\"bestTime\": 0.20569086074829102}, {\"bestTime\": 0.07956910133361816}, {\"bestTime\": 0.055413007736206055}, {\"bestTime\": 0.04674696922302246}, {\"bestTime\": 0.07648801803588867}, {\"bestTime\": 0.03573107719421387}, {\"bestTime\": 0.06991291046142578}, {\"bestTime\": 0.045204877853393555}, {\"bestTime\": 3.333004951477051}, {\"bestTime\": 0.051434993743896484}, {\"bestTime\": 0.04800891876220703}, {\"bestTime\": 0.03911399841308594}, {\"bestTime\": 12.299826860427856}, {\"bestTime\": 0.05094313621520996}, {\"bestTime\": 0.04707503318786621}, {\"bestTime\": 0.04802203178405762}, {\"bestTime\": 0.052435874938964844}, {\"bestTime\": 0.06584405899047852}, {\"bestTime\": 0.04680299758911133}, {\"bestTime\": 0.05272984504699707}, {\"bestTime\": 0.12859702110290527}, {\"bestTime\": 0.0448458194732666}, {\"bestTime\": 0.03874015808105469}, {\"bestTime\": 0.05265998840332031}, {\"bestTime\": 51.037073850631714}, {\"bestTime\": 0.036657094955444336}, {\"bestTime\": 0.05334901809692383}, {\"bestTime\": 0.03850293159484863}, {\"bestTime\": 0.05236387252807617}, {\"bestTime\": 0.04907393455505371}, {\"bestTime\": 0.051587820053100586}, {\"bestTime\": 0.3718118667602539}, {\"bestTime\": 0.05538511276245117}, {\"bestTime\": 0.04992389678955078}, {\"bestTime\": 0.22314810752868652}, {\"bestTime\": 0.0666649341583252}, {\"bestTime\": 0.05099177360534668}, {\"bestTime\": 0.05290102958679199}, {\"bestTime\": 0.036366939544677734}, {\"bestTime\": 0.06836295127868652}, {\"bestTime\": 0.0500340461730957}, {\"bestTime\": 0.07100486755371094}, {\"bestTime\": 0.0654458999633789}, {\"bestTime\": 0.05725717544555664}, {\"bestTime\": 0.0526580810546875}, {\"bestTime\": 0.17577290534973145}, {\"bestTime\": 0.051835060119628906}, {\"bestTime\": 0.06651592254638672}, {\"bestTime\": 0.05187702178955078}, {\"bestTime\": 0.07094717025756836}, {\"bestTime\": 0.07584118843078613}, {\"bestTime\": 0.08513307571411133}, {\"bestTime\": 0.6931679248809814}, {\"bestTime\": 0.046340227127075195}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}, {\"bestTime\": null}]}};\n", - "var selector = \"#4a20f535-b2f2-4a27-9958-4d8c45131ddc\";\n", - "var type = \"vega-lite\";\n", - "\n", - "var output_area = this;\n", - "require(['nbextensions/jupyter-vega3/index'], function(vega) {\n", - " vega.render(selector, spec, type, output_area);\n", - "}, function (err) {\n", - " if (err.requireType !== 'scripterror') {\n", - " throw(err);\n", - " }\n", - "});\n" + "text/plain": [ + "benchmarkName\n", + "const_div_3 False\n", + "const_div_4 False\n", + "const_mod_3 False\n", + "css2003_true-unreach-call False\n", + "dillig02 False\n", + "dillig08 False\n", + "dillig10 False\n", + "dillig18 False\n", + "dillig19 False\n", + "dillig20-1 False\n", + "dillig20-2 False\n", + "dillig20-3 False\n", + "dillig21 False\n", + "dillig22 False\n", + "dillig22-1 False\n", + "dillig22-2 False\n", + "dillig22-3 False\n", + "dillig22-4 False\n", + "dillig22-5 False\n", + "dillig22-6 False\n", + "dillig42 False\n", + "dillig42-1 False\n", + "dillig44 False\n", + "dillig44-1 False\n", + "dillig46 False\n", + "fig3 False\n", + "gcd_1 False\n", + "gcd_2 False\n", + "gcd_3 False\n", + "gj2007_true-unreach-call False\n", + "half_true_modif False\n", + "half_true_orig False\n", + "n_c11 False\n", + "nonterm_01 False\n", + "phases_true-unreach-call1 False\n", + "recur_102 False\n", + "s_mutants_18 False\n", + "s_mutants_19 False\n", + "s_mutants_20 False\n", + "s_seeds_07 False\n", + "s_seeds_08 False\n", + "s_triv_02 False\n", + "s_triv_05 False\n", + "s_triv_06 False\n", + "s_triv_07 False\n", + "s_triv_08 False\n", + "s_triv_10 False\n", + "s_triv_14 False\n", + "s_triv_16 False\n", + "s_triv_17 False\n", + "three_dots_moving_1 False\n", + "three_dots_moving_2 False\n", + "three_dots_moving_3 False\n", + "trex1 False\n", + "trex3 False\n", + "w2 False\n", + "yz_plus_minus_1 False\n", + "yz_plus_minus_2 False\n", + "dtype: bool" ] }, - "metadata": { - "jupyter-vega3": "#4a20f535-b2f2-4a27-9958-4d8c45131ddc" - }, - "output_type": "display_data" + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "holes = df.pivot_table(index='benchmarkName',\n", + " columns=['algorithm'],\n", + " values='bestTime',\n", + " dropna=False,\n", + " aggfunc=lambda x: x.size)\n", + "totally_ported = holes.isnull().any(axis=1) == False\n", + "print(\"Not totally ported:\")\n", + "totally_ported[totally_ported == False]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We use **min** for non-probabilistic methods (*ICE* and *Z3*) and **mean** for others. Only include benchmarks which we've ported to all algorithms." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "algorithm\n", + "hyperparams\n" + ] + } + ], + "source": [ + "for x in df[['algorithm', 'hyperparams']]:\n", + " print(x)" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "scrolled": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.6/site-packages/ipykernel_launcher.py:7: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + " import sys\n" + ] }, { "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAAgAAAAFZCAYAAADuEZdYAAAAAXNSR0IArs4c6QAAK/NJREFUeAHt3X+sJeV93/F7DNiwBHvXYTHdreoLN1ogESBk2rgOJY4Eqm1AahuMd8kf7B/YsboOruofQFtp76ZJ78UslVzZSmpwBVXNEmpXqb24brFlFq3TSo6KMEkJG264WxXieh2zEAJeU3b7+dz7fNeT2Tn3zsw9M+fMnfcjfe/8ODPzPM9rZne+Z+acOVNTFAQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQ6KTAoJOtrtDoL37xiyfe+973VliDRRFAAAEEEFhfAjMzM6ec709fX108tTdHjhyZKur4qUsyBwEEEEAAgfUnsLCwcKKoV28qmsk8BBBAAAEEEFjfAiQA63v/0jsEEEAAAQQKBUgAClmYiQACCCCAwPoWIAFY3/uX3iGAAAIIIFAoQAJQyMJMBBBAAAEE1rcACcD63r/0DgEEEEAAgUKBdf81QPf6+n/+8NbC3q8yc/9v3/T8KovwMgIIIIAAAp0U6EUCMPXG8f9Tc++c8uCEmtthNQQQQAABBCZKgFsAE7U7aAwCCCCAAALtCJAAtONMLQgggAACCEyUAAnARO0OGoMAAggggEA7AiQA7ThTCwIIIIAAAhMlQAIwUbuDxiCAAAIIINCOAAlAO87UggACCCCAwEQJkABM1O6gMQgggAACCLQjQALQjjO1IIAAAgggMFECJAATtTtoDAIIIIAAAu0IkAC040wtCCCAAAIITJQACcBE7Q4agwACCCCAQDsCJADtOFMLAggggAACEyVAAjBRu4PGIIAAAggg0I4ACUA7ztSCAAIIIIDARAmQAEzU7qAxCCCAAAIItCNAAtCOM7UggAACCCAwUQIkABO1O2gMAggggAAC7QiQALTjTC0IIIAAAghMlECbCcBm9dwxrJyuFyKy7dqk+Y5s8XJbFNnlsq8zjgACCCCAAAIrCLR1An1Sbfiu4suKEwqfwLPFJ/PXFd9SPKu4UeGyX/GE4rE0rsFSEuFl9yreUHhdCgIIIIAAAghUEMifiCusWnrRaS15mWKQ1jig4fsVX0vTHrxLsVPxgCKKT+zXKWI9Jw7TCicE3t5TijnF84pYRqMUBBBAAAEEEFhNoI0rAIfViA2pIU44rlb45J0tF2vifoVP8g7fKrhKcY8iyj6NnKvYqHg6zTyUhgwQQAABBBBAoIJAG1cAfEJ/TXGN4lGFT+qLimw5WxPXKr6p2KXwif2zilcUUTxva5o4noa+FXCyzM3NzQ4Gg90nZ6xxZGFhwW2nIIAAAgggsO4E2rp0/qDkdijOUxwpUHQ74mTrpMQn9osUs4qbFS4vKq5Q+BbA+Ypjii2KFW8BzM/Pnzh4dFqLVS/757e35VO9cayBAAIIIIBACQG/mZ2ZmTnlfNbGLQBfzvfJ/0zFDxVx1cF1b1O4+B19jPvzAUcVPuF7PS/vZX3p/6UUd2ro4qsGjy+N8QcBBBBAAAEESgvEybj0CjUWfHda58eZdS/Q+E8UzyiclfhE7vEovtTvKwV7FHGZf6fGnRRconhVEZf6T9M4BQEEEEAAAQQqCLSRAPjT/qdcetA8v6s/nNrqe/+efrPiWJrnwazCn/R3ifn+PIG3d5bC4xQEEEAAAQQQqCjQRgIwrEln6IVLMy/6MwBxks/MLpzn1zn5Z5UYRwABBBBAoILAOBMAn+yLTvgVms+iCCCAAAIIIFBHwJfdKQgggAACCCDQMwESgJ7tcLqLAAIIIICABUgAOA4QQAABBBDooQAJQA93Ol1GAAEEEECABIBjAAEEEEAAgR4KkAD0cKfTZQQQQAABBEgAOAYQQAABBBDooQAJQA93Ol1GAAEEEECABIBjAAEEEEAAgR4KkAD0cKfTZQQQQAABBEgAOAYQQAABBBDooQAJQA93Ol1GAAEEEECABIBjAAEEEEAAgR4KkAD0cKfTZQQQQAABBEgAOAYQQAABBBDooQAJQA93Ol1GAAEEEECABIBjAAEEEEAAgR4KkAD0cKfTZQQQQAABBEgAOAYQQAABBBDooQAJQA93Ol1GAAEEEECABIBjAAEEEEAAgR4KkAD0cKfTZQQQQAABBEgAOAYQQAABBBDooQAJQA93Ol1GAAEEEECABIBjAAEEEEAAgR4KkAD0cKfTZQQQQAABBEgAOAYQQAABBBDooQAJQA93Ol1GAAEEEECABIBjAAEEEEAAgR4KkAD0cKfTZQQQQAABBEgAOAYQQAABBBDooQAJQA93Ol1GAAEEEECABIBjAAEEEEAAgR4KkAD0cKfTZQQQQAABBEgAOAYQQAABBBDooQAJQA93Ol1GAAEEEECABIBjAAEEEEAAgR4KkAD0cKfTZQQQQAABBEgAOAYQQAABBBDooQAJQA93Ol1GAAEEEECABIBjAAEEEEAAgR4KkAD0cKfTZQQQQAABBEgAOAYQQAABBBDooUCbCcBm+TqGldP1whZFvk2bNM+RLcOWzS7DOAIIIIAAAggMEcifbIcstubZT2oL31V8WXFC4RN4tjgxeF2xV/GGwomAy37FE4rH0rgGS0lE0bJ+jYIAAggggAACJQTyJ+ISq1ReZFprXKYYpDUPaPh+xdfStAeHFF7mKcWc4nnFVsV1iljPicO0wglBftlYRi9REEAAAQQQQGA1gTauABxWIzakhjjhuFrhE322bNTE02mGkwGXqxT3LI0t/9mnwbmKomUzizGKAAIIIIAAAqsJtHEFwO/cX1Nco3hU4ZP6oiJKJCHH0wxf3nf5ecUrS2PLf5wY+KqAS37ZpZlzc3Ozg8Fg99LECP4sLCy47RQEEEAAAQTWnUBbl84flNwOxXmKIwWKL2re+YpjCt//9y2AixSzipsVLl7mCoVvAeSXHdqP+fn5EwePTmuV6mX//Pah262+NdZAAAEEEECgfQG/mZ2ZmTnlfBbvvptskT/g55P/mYofKuKqg+vepnB5SXHn0tjU1LUaPq7wCd/reXkv60v/Xq5oWc2mIIAAAggggEBZgTgZl12+znLvTiv9OLPyBRr/ieIZhbOSSxSvKuLy/Wka92X+PYq4JbBT404KipbVbAoCCCCAAAIIlBVoIwHwp/1PufSgeX5Xfzg11J8R8DJnKTweZVYj/laAy7HlwdLrRcumlxkggAACCCCAwGoCbSQAw9pwhl64NPdi9uQfL8WJP6ZjWLRsvMYQAQQQQAABBFYQGGcC4BP7sJP7Ck3mJQQQQAABBBBYq4Avw1MQQAABBBBAoGcCJAA92+F0FwEEEEAAAQuQAHAcIIAAAggg0EMBEoAe7nS6jAACCCCAAAkAxwACCCCAAAI9FCAB6OFOp8sIIIAAAgjUSQD8EJ74+uCVGvejfikIIIAAAggg0CGBqgnAW9Q3P6L3Xyj8Az/fVfxAkX+gj2ZREEAAAQQQQGBSBaomALemjjyn4Q7F4yk+l+YzQAABBBBAAIEOCFRNADaoT99THEh9u1HDf6e4Ok0zQAABBBBAAIEOCFRNAA6rT5cpfAXA5QOK+xX3KigIIIAAAggg0BGBqgnAl9UvXwFw+ZjivKWxqanb05ABAggggAACCHRAID7NX7ap/gDg5ZmFvf5exYnMPEYRQAABBBBAYMIFyl4B+JT64ZN8Pl7XPCcFfp2CAAIIIIAAAh0RKJsA/In640v/cfnf3dunOOoRFb9OQQABBBBAAIGOCJS9BfA19cdxg+KrijMVxxQuvirwt5bG+IMAAggggAACnRAoewUgOnNxGvHXAV1ifW4BLHvwFwEEEEAAgU4IxAm8bGO/kRb8kYYvKt5I07+RhgwQQAABBBBAoAMCVROAp9QnPwfAzwPYqPBnAD6k8O0BCgIIIIAAAgh0RKDsZwCiOzdp5DOK6ZjBEAEEEEAAAQS6J1D1CsCfqYvvVPhXACkIIIAAAggg0FGBqgnAhamf/hXA7DMBdnW0/zQbAQQQQACBXgpUvQXwvJR83/+ljNbbNP5KZppRBBBAAAEEEJhwgaoJwHfUn02KsxTvUDgR8LcBKAgggAACCCDQIYGqtwDctf2KVxXPKfx1wCcVAwUFAQQQQAABBDoiUDUB+CX16zrF4wp//e8Rhb8W+EkFBQEEEEAAAQQ6IlA1AXhP6tcva/iw4nqFPxPAhwCFQEEAAQQQQKArAlUTgOjXOWnEnyHwA4H8YCAKAggggAACCHREoGoC8KXUr5c19NcA/XPALp9YHvAXAQQQQAABBLogUDUBeEGdukDhnwX2u37HVYo/VFAQQAABBBBAoCMCVROA6Na/1si0wj8C5G8DUBBAAAEEEECgQwJVE4At6ptP+PenPn5VQz8caFuaZoAAAggggAACHRComgD8w9SnrWn41jS8twN9pYkIIIAAAgggkASqJgAb0nrfT8O/TMN3piEDBBBAAAEEEOiAQNUE4D+nPr2h4aLC3wRw2b084C8CCCCAAAIIdEGgagJwSJ3yp/798J94179H4w8oKAgggAACCCDQEYGqPwbkbv2Bwk8A/DmFnwZ4poKCAAIIIIAAAh0SqJoAePl4+I+7+azioMIfCvQzAigIIIAAAggg0AGBqrcAfj31yT8E5PK/lgdTe9OQAQIIIIAAAgh0QKBqAhBd8qV/lxcV/kXAX/AEBQEEEEAAAQS6IVA1AfjfqVtPpuGDGvrngb+QphkggAACCCCAQAcEqiYAX1Of/NCfy1Lfdmjo3wX4nTTNAAEEEEAAAQQ6IFA1AfCHAD+q8Cf/367wkwAvV5yhKFPOWmEhbzsi265Nmu/IFi/nxxJnl8u+zjgCCCCAAAIIrCBQ5QR6QNvxNwD8EKBbFb+veFnhhwHdqVipuJ4rFa8OWcgnc2/7Wwp/s+BGhct+xROKx9K4BlObFV7WHzx0W7wuBQEEEEAAAQQqCPiddJnik/fVisNp4c/lVnouN52f/F3N+LAi1s+//i7N2KnIPlDIJ3Z/vmCgcHGiMa1wQuBbEE8p5hT+MaJYRqMUBBBAAAEEEFhNoOwVgF9JG7pQQ4fLPQqfeB0PKFYqH9GL5yni6YH5ZS/WjPsVPsk7/C7fTxx0HVH2aeRcxUbF02nmoTRkgAACCCCAAAIVBMpeAYhL93GCdhXPVajHi569wvJ+7VrFNxW7FD6xf1bxiiKK521NE8fT0LcCTpa5ubnZwWCw++SMNY4sLCy4vxQEEEAAAQTWnYDfvZcpPin7sv9Fip8ofPK/V3G7wh/s8/MAXlOsVLboxWGX692OONk6KfGJ3XXNKm5WuLiOKxS+BXC+4phipW3q5amp+fn5EwePTi+NV/2zf357WZ+qm2Z5BBBAAAEEWhHwm9mZmZlTzmdlbwHEzwA/o9b65O/yYcWPFD6p/0vFauXNuQVc97Y0z+/oY/z9GvePDfmE768ZOiHwsr70/1KK+NChrxo8rqAggAACCCCAQAWBsrcA/mPaZtwKyFbh5OAb2RlDxn3lwCf2KH4X74TCWYlP5B6P4kv9RxR7FHGZf6fGnRRconA7ditcTlse8BcBBBBAAAEEygqUTQAWtcG7y250yHIvaP6mzGvf1/jhNO17/36X76sEx9I8D2YV/qS/S8z3rQYnDb71sNptBy1CQQABBBBAAIG8QNkEIL/eKKbP0EYuzWzInwGIk3xmduE8v87JP6vEOAIIIIAAAhUExpkA+GRfdMKv0HwWRQABBBBAAIE6Ar7sXqb4A3o3KN6iuKXMCiyDAAIIIIAAApMrUPYKgL+K5w/d7VPsUPyMIkp8CNBP5qMggAACCCCAQAcEyiYAX1FfnAD45O+SfxTwOzTvk0uv8AcBBBBAAAEEJl6gbALgd/f+ut3fVRxU+NcAs7cP4qt6mk1BAAEEEEAAgUkXKJsAuB9+WM93FP6q3j9R+Kl8hxR+Xj+fyBcCBQEEEEAAga4IVEkA3Cd/CPDHuc751oAf3OPv+VMQQAABBBBAoAMC2cv4ZZq7PS3kX+rz9/gvStN705ABAggggAACCHRAoOoVAH/634/z9a0AF98C8LSf309BAAEEEEAAgY4IVL0C4G5tVPjXATcrbkrTX9SQggACCCCAAAIdEaiaAPxO6pe/BvgDxe+laf9oDwUBBBBAAAEEOiJQ9RaAvwngH+K5UvELiucV31KcUFAQQAABBBBAoCMCVROA6NYfasRBQQABBBBAAIEOClS9BdDBLtJkBBBAAAEEEMgLVE0AfPm/7lWDfN1MI4AAAggggMCYBKomAH7ojx/760SAggACCCCAAAIdFaiaANyf+nm3hpsy4ScEUhBAAAEEEECgIwJVE4APpn59QsMfZeK3O9JfmokAAggggAACEqh6P/8+rePv/2d//OcsTf93BQUBBBBAAAEEOiJQ9QrAi+rXw4p3Kv6B4tuKZxV+JDAFAQQQQAABBDoiUPUKwDnq18uZvn1e4wcVlymeysxnFAEEEEAAAQQmWKDqFYCPpr74hO/yPxX+MSA/GpiCAAIIIIAAAh0RqJoARLf+KI34swDfi5kMEUAAAQQQQKAbAlVvAfiev4t/E8BlUeHPA3xIQUEAAQQQQACBjghUvQLg5//vzPTNJ/97FP5gIAUBBBBAAAEEOiJQ9QqAu/XvFf4VwL+Zhv41QAoCCCCAAAIIdEigagLgJ/79uKB/52nekYL5zEIAAQQQQACBCRSoegvg1tSHPRpuVcS9f54EOIE7lyYhgAACCCAwTKBqAvBK2tCshi8ouPefQBgggAACCCDQJYGyCYB/+GebIh4BPKvxLYqbFC7fWR7wFwEEEEAAAQS6IFA2Afi4OvOM4vdSp3Zr6A8CxvQFaT4DBBBAAAEEEOiAQNkPAd6lvuxXHCvokz8YeLhgPrMQQAABBBBAYEIFyiYAvvTvZwC4TCsu9Uim/FDjfAsgA8IoAggggAACkyxQNgGIPvjEX/ToXz8M6JOxEEMEEEAAAQQQmGyBqgnA+1J3/raG/haAy5sVf740xh8EEEAAAQQQ6IRA1QQgfgvgj9W7+EZAJzpKIxFAAAEEEEDgpwJlvwUQa/ibAC6vKk5kYlbjFAQQQAABBBDoiEDVKwAfTf3y5wB8FcDFTwR8dGmMPwgggAACCCDQCYGqCUB83e/yTvSORiKAAAIIIIBAoUDVBOBHaSsPahgfAnyrxh9Q8DTAhMMAAQQQQACBSReomgBclDq0I9cxJwMkADkUJhFAAAEEEJhUgaoJwOfVkfsKOvN6wTxmIYAAAggggMCEClRNAK5UPz6ieDnTH24BZDAYRQABBBBAoAsCVROA69WpDxd07E81j1sABTDMQgABBBBAYBIFqj4H4DfViTNTnKHh21On4gFBaXLo4Kyhr0xNORnxTwzn2+SfInZky7Bls8swjgACCCCAAAJDBPIn2yGLnZx9XGP+RUDH/1O8qPBXA31lYKXienz7wA8QKiqbNdOfI9ireEPhRMDFv0D4hOKxNK7B1LBl/RoFAQQQQAABBEoIVE0Admmb2ScAevydJer5XS3zXUU8RyC/yiHNuExxcxo+r6GTgOsU0wo/dyDGi5bVyxQEEEAAAQQQKCtQNQE4kjZ8VMOIRzT+W6tU6A8OnqcYlixs1GtPp234BO9ylcK/Mhhln0bOVRQtG8swRAABBBBAAIESAlU/BPiwtumoU84eslIkIb694BJfKfx5jb+yNGf5jxODrWk6v+zS7Lm5udnBYLA7LbPmwcLCgq9wUBBAAAEEEFh3AoOSPdql5T63wrKf1mt3r/C6X/IlfV/aL6rTnyU4X+HPFsRyfujQrOJmhYuXuULhzwTkly3aphabmpqfnz9x8Oj00njVP/vntw/dbtVtsTwCCCCAAALjEPCb2ZmZmVPOZ/Hue7U2+dL/YYV/BOhxhS/HVy1vzq3gureleS9peGcav1ZD1+ET/g6Fr1J4WV/693JFy2o2BQEEEEAAAQTKCpS9BZC/9O8rAj45u+xUPOCRVcpP9Lo/NxDF7+KfUTgruUThbwjE5fvTNO7L/HsUcUtgp8adFBQtq9kUBBBAAAEEECgrUDYBiO1do5FH08S9Gv5jhb8OWKa8oIU2ZRb8vsZ9VcHlNYUTAT8nwONRZjUylyaOpeGwZdPLDBBAAAEEEEBgNYGyCYBP3H+m8GV4F9+fP6TwSduX5/1huaofmPODhC5VZEv25B/z48Qf0zEsWjZeY4gAAggggAACKwj45F2mfFwLxcnfy/vSvU/4vkzvB/fEpXuNli4+sf9l6aVZEAEEEEAAAQRGJlD2CsBXVOOVCl/Gz5ef0YyD+ZlMI4AAAggggMDkCpRNAJ5SF1Z73O/k9pKWIYAAAggggMBfEyh7C+CvrcQEAggggAACCHRbgASg2/uP1iOAAAIIIFBLgASgFhsrIYAAAggg0G0BEoBu7z9ajwACCCCAQC0BEoBabKyEAAIIIIBAtwVIALq9/2g9AggggAACtQRIAGqxsRICCCCAAALdFiAB6Pb+o/UIIIAAAgjUEiABqMXGSggggAACCHRbgASg2/uP1iOAAAIIIFBLgASgFhsrIYAAAggg0G0BEoBu7z9ajwACCCCAQC0BEoBabKyEAAIIIIBAtwVIALq9/2g9AggggAACtQRIAGqxsRICCCCAAALdFiAB6Pb+o/UIIIAAAgjUEiABqMXGSggggAACCHRbgASg2/uP1iOAAAIIIFBLgASgFhsrIYAAAggg0G0BEoBu7z9ajwACCCCAQC0BEoBabKyEAAIIIIBAtwVIALq9/2g9AggggAACtQRIAGqxsRICCCCAAALdFiAB6Pb+o/UIIIAAAgjUEiABqMXGSggggAACCHRbgASg2/uP1iOAAAIIIFBLgASgFhsrIYAAAggg0G0BEoBu7z9ajwACCCCAQC0BEoBabKyEAAIIIIBAtwVIALq9/2g9AggggAACtQRIAGqxsRICCCCAAALdFiAB6Pb+o/UIIIAAAgjUEiABqMXGSggggAACCHRbgASg2/uP1iOAAAIIIFBLgASgFhsrIYAAAggg0G0BEoBu7z9ajwACCCCAQC0BEoBabKyEAAIIIIBAtwVIALq9/2g9AggggAACtQRIAGqxsRICCCCAAALdFiAB6Pb+o/UIIIAAAgjUEpikBOB09SAi265Nmu/IFi+3RZFdLvs64wgggAACCCCwgsCknEB9Mn9d8S3Fs4obFS77FU8oHkvjGkxtVnjZvYo3FF6XggACCCCAAAIVBPxOehLKu9SInYoHMo3xif06xSDNO6HhtMIJwWWKpxRziucVsYxGKQgggAACCCCwmsCkXAG4WA29X+GTvMPv8q9S3KOIsk8j5yo2Kp5OMw+lIQMEEEAAAQQQqCAwKVcAzlabr1V8U7FL4RP7ZxWvKKJ43tY0cTwNfSvgZJmbm5sdDAa7T85Y48jCwoKTEQoCCCCAAALrTmBSLp27HXGydVLiE/tFilnFzQqXFxVXKHwL4HzFMcUWxYq3AObn508cPDqtxaqX/fPbJ8WneuNZAwEEEEAAAQn4zezMzMwp57NJuQXgd/Tb0p56v4ZHFT7h71A4IXA7fen/pRR3aujiqwaPL43xBwEEEEAAAQRKC0zKLQCfyJ/JtNqX+o8o9ijiMv9OjTspuETxqiIu9Z+mcQoCCCCAAAIIVBCYlCsAvvfvtpyp8GWKFxQuswrPczygcHlN4WU2pGF8HkCTFAQQQAABBBAoIzApVwDcVn8GwPf186VonpdxIkBBAAEEEEAAgRoCk3IFoEbTWQUBBBBAAAEE6gqQANSVYz0EEEAAAQQ6LEAC0OGdR9MRQAABBBCoK0ACUFeO9RBAAAEEEOiwAAlAh3ceTUcAAQQQQKCuAAlAXTnWQwABBBBAoMMCJAAd3nk0HQEEEEAAgboCJAB15VgPAQQQQACBDguQAHR459F0BBBAAAEE6gqQANSVYz0EEEAAAQQ6LEAC0OGdR9MRQAABBBCoK0ACUFeO9RBAAAEEEOiwAAlAh3ceTUcAAQQQQKCuAAlAXTnWQwABBBBAoMMCJAAd3nk0HQEEEEAAgboCJAB15VgPAQQQQACBDguc3uG2t9L0D9zx0K11Kvr6/Pb76qzHOggggAACCLQhQAKwirIukdy7yiLDXiYBGCbDfAQQQACBsQtwC2Dsu4AGIIAAAggg0L4ACUD75tSIAAIIIIDA2AVIAMa+C2gAAggggAAC7QuQALRvTo0IIIAAAgiMXYAEYOy7gAYggAACCCDQvgAJQPvm1IgAAggggMDYBUgAxr4LaAACCCCAAALtC5AAtG9OjQgggAACCIxdgARg7LuABiCAAAIIINC+AAlA++bUiAACCCCAwNgFSADGvgtoAAIIIIAAAu0L8FsADZpf9+mH/lGdzT/yme3/qc56rIMAAggggEBZARKAslI1lhu8aeorNVbzKoOa67EaAggggAACpQS4BVCKiYUQQAABBBBYXwIkAOtrf9IbBBBAAAEESgmQAJRiYiEEEEAAAQTWlwCfAZjQ/Xn9HQ/dW6dp++e3f7jOeqyDAAIIINAvARKAyd3ft9ZsGglATThWQwABBPokwC2APu1t+ooAAggggEASIAHgUEAAAQQQQKCHAtwCWIc7XZ8f+HadbunzA79SZz3WQQABBBDongAJQPf2WZkWv7fMQiyDAAIIINBfAW4B9Hff03MEEEAAgR4LkAD0eOfTdQQQQACB/gpwC6C/+76w59fd/lCt3y945K7tv3rdHfv+R+FGV5n5yPyOd6+ySGMv//07Hv65Ohv/r/M3PVtnPdZBAAEEJkWABGBS9sSEtGMwmKr1C4Zu/mBq8It1u3H9HfuerLPu/vkdl9dZL9Y5Y+r4n8Z4xSE/2FQRjMURQGCyBLqaALjd5ym+rzg+WaS0pp7A4LJ6601NfeD2h+6qs+7X79p+e531Yp3rb3/o1RivMtx/1/YNVZYf5bLjshplH7qwLX4KvAt7iTZ2MQHYrN32A8U+xQ7FVsULCkpPBd40mPp0za6vKQHQJY+zatY7Na7bJWuxWkub9dXUX6tjpa+mfkm3pf5NnXV1W+q2OuuNYh1+CnwUimyjaYEuJgCHhOJ3i08p5hTPK7gcKwRKdwTWcrtEJ8S/qNNTnRB/ts56sc5a2qxt/IfYTsXhl3Rb6jcqrhOL37aWW0vj+j2OtdQ7rmPjff/swVpX8L7xr27+XuystocfuOOhW+vU+fX57ffVWS/WmSSrLiYAGwX5dMJ0MkBBoFcCOiG+vVcdXlNn699aUrW1ThBab62/x1G73rUcG7qldaIOtW5pDU4//qZan+FRfYO11KtkqV6b57frIs1UrR9cU5vvW0ubx2E1bL927Z2zv7b4huI0he/9x/RSP+bm5h4bDAa/rPkUBBBAAAEEEJDAhg0bpm677baune8L992LmvuW9MoWDVfMAOfn51d8vbCGEcyk3hEgltgEziWQRrAIziNALLEJnEsgjWARnJcRu/ggoJfU9DvTMXCtho+ncQYIIIAAAgggUFKgi58BuER989evdqc++nYABQEEEEAAAQQqCHTxCsBr6p/vZfi71B7yHAAhUBBAAAEEEKgi0MUEIPrnRGDVcuLEiQOrLtTAAqp3TwObXXWT1Lsq0UgWwHkkjKtuBOdViUayAM4jYVx1I31zXhWEBRBAAAEEEEAAAQQQQAABBBBAAIGRCvixrX6McJvlnDYrU13uo78a2Vbxh0j9OYxscZ/dhiZvLxXVG31v6oOt3q775Xqypenjali90YamjrFh9YZz1D/qYXjmj5+mj6th9UZ/mzquwm9TjKRhtCc3e+ST+XqjgqaOq9h+vt5wjtdHPfT+i8geW00fV1Gnh9l6o7+ev9Ziy/z/+95u0/8Pr7Xdra1/k2ry8wD2p2F2RzTViAdTXU1tP7/dWc3wMxKijz7Amix+FoPr25apZJfG7Rx9n868NqrRonov1cZd7xfScFrDURb3Mdsv99Ol6eNqWL3Ltf/UOaZHNRxW76wqaPIYu0HbzzpfmTrU9HE1rN6mj6vUvalrUr/j/6Wmj6th9cb8+Pcb06Me5vs7qwqaPK58IvRx5c+DLSrs69L0cTWs3lEeV7PqR/bfjE/8fqObned29Lb4HaoxDOPik8SsRxoscYAvNlhHdtPRx3g37iTA/6k1VXyALSrsOq1w8X9eno7/xFz/AcUoS1G90ffYv17G/8BGWdyv2KYTK0/n623iuCqqN/rV5DFWVG/010OXJo4x1+sEz8X9s2kbx1VRvdHfJo8r9/Mchet3uK/5eps4rlTNKfV6nkuTx5W3P6y/TR5XN6jeW1x5prRxXBXVm9+/a/n/aov64+MmihNm+zqZujTN9DC7TJrdn4Evj2QBfknT/kfVVPEOcH3TCu+Itoqzdtfnvrn++I9Uo40V1zed2Xr2qsOTmj+beW2Uo9l64x+U57nfBxSeN8qS7dct2rDraeO4KqrX/Wr6GBtWb1vHWBj7ZOSSbU+Tx1W23jaOK/fNx5JPAh76pNTGcaVqTqnX85o+robV2/Rx9anUXxuHt9vS9HFVVO8oj6tIAKJfrs/F05G4+jzg6cLiA269l7epg0cznfSvBxquqfKyNvxWxV8p/MNFbZX3qKLvpHCdzvzaLv5q5maFDzi7/6airfJBVeTj2eZ3j7hS98v/oHzyuV/hH+Np47gqqldVTzV9jA2rt61j7AL10f9m3+fOqrR1XOXrdd1NHlc+8X1IccQVqcS/m6b/vyqq1/U3fVwNq7fp4+ps9c1PjfXJ92OKQwqXpo+rYfW67lEeV1u1vTMVn1FcrHCJ5+O8vjzZ378+KWQzoE9perYhjmlt13XFu1GP+6TRdNmsCrJ9vEHTe5uuVNt3P6cz9fgdm9vhYZMlW29+/+YtRtGOeFc2m9lYvt4mjquieqfVhqaPsaJ6865NHGO7Mr7xbtSzmj6uiurN7998/zNNrTUa2/e+zMbpaTo2Ourjali9F6Z6m/q/a1i978j1t4njyif+KFnfpo+ronrDIdqzluNqWhvx/ooSx4rnxRXgLRr38dXb4p1ggG1JwCdkH2RNFNfly0rG960G1+sDruniOl1XXNLyyX9W0XTJnojzzu539h/AKNuSrdfbdd+nPaLyBcWsR0ZYFrWtOEn4H7Aj398mjqth9TZ9jBXV28Yx5v3o/7Bc4t9P3rmJ46qoXreh6eMq9mMkXD4Z5PvbxHE1rN6YH/a2HmWJ7Wf763l29tClif+7vP34/9//9/v/j7xzU8dVvl5VPbLjKpLk2E9xvC6qjlmFyy2KA0tjPf5zqfpuHEdbGP6PzAdaW8XZX/TRw/gH1WT9i9r4dKog/lFn2+A2NVEWtdHpzIaz+9f1R/abWWRNo9k+eTz2a7beJo6rYfVGZ5o6xobV2/QxdoM6lq3bvm0cV0X12ji7f92uUR9XrsNloPD2PXTJ1tvEcbVcy6n1xvymjqvYfr6/TR9X16ji7HHl/rVxXBXVa4Ps/l3rcZW18wdzXSKpij77DUvvixHaOCmOE9p9jGxwnO0YR93+T2Ucfe/DcZXdn00fY95+UyfabD/y48Pq5bjKSzUz3fRx5f04juNqWL2jPK6G2a33810zRyJbRQABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQACBnIC/wjRpZRLbNGlGtAcBBBBAoCUBP7zED/bwcBTFD7/xtvx95HhgSH54YXqtqQc6uT4/vGSlvsWDTpo+KUcbptWeJ1NoQEEAAQQQQGC8AnGC8nAUxSdfn1ydAPiEd0ARCYDHFxXnKfwDLn6i2ahLPG7WDytZqW9ezkmC29lk2ayNu//TihiPx7hqFgUBBBBAAIHxCMRJ0idDP4rY4UeKuvjk6BO1T2Cenz1hz6b5fu0LCi97IDMvu6wTAS/nZVw8dH1eJtZzPYuKqCemsz8+5d9N8HYcs4qi4tcW0wsr9c11RwLgcbfR/Yj1N2ncxfV7OYdfi3U0uuTk9sb80z1TxX6e74j1pjXuEttfnuIvAggggAACYxKIk6RPTHFZ3ON+Bx0n9Fs0HonANo37Mr+X8Qn5psx4nKAXNc/bjRIJQFxu90k/6ovxmPbQ4fqi/mmN36Lw/FlFtNPj2eJHsnoZv+6yUt+irW5TjC/mxjW5lBh4m04OwsDb36zwfJ/gw8AnfLt5frQjxqc1z2VW4XlhoVEKAutLgIN7fe1PerP+BS5SF+9WXJW6+jc0vDqNe/BKGr9Zw3gW+G9p/O8oPqb4t4rPK1y8nReWxsr/+XRa73tpFddzY2b1PZnxGP14jKSh2+zyjeXByb/5vvmnYovKhZrpPkQbYpnDGvmIwm2KsjNGNAyPjRr/e2l+vs5Y/EgaeVvMYIjAehOIS2HrrV/0B4H1KhAn+DhBRT+PphG/i/dJ2ifXP1L4pPdBxScULpcrfn1pbDR/fGXgjIJN/ZXmvapw0pFvayz+1hhJw2F9yy226qTblC9/kma4PRsUcesg6nwuvwLTCKx3Aa4ArPc9TP/Wm8B/UYd87/q/pY7FydXvah9VePozCr97vltxv+KfKvxO1+UXFXGC9AfsRv0m4MuuROUPFG6Prz5co8iWP08T78nO1Hi+b3+Re73O5LfTSv9Xw68qblLsUnxd4RJ1/vHy5Mm/ThJcXloe8BcBBBBAAIHxCGxRtXGfOoa3pKaco6Hva8d83wN38bvcmBdDb8cllt+7PLn094D+erl4Y+BEwdM+YWbHNXnyvr/Ho23TGvdysR2v63reosgXvxbtjPU9L+KWtILr9jy3KTvul321w+GSHc+39VN6Pbbr4TavoBLby742vfTKTz/omCYZIIAAAgggMH4BnwzjJJ1tjU+0Re/oPa/oJOwTZVNlWJ1Rn9+J+8Sbb9ewvsV6dYfebr4ub8vtzJtF4uQrJBQEEEAAAQQQGLGAE4C4CjDiTa9pc76asLimLbAyAggggAACCAwV8Lvy+GT+0IXG8ILb1OTVkTF0iSoRQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBBBAAAEEEEAAAQQQQAABBNaNwP8HFUeyMPEaRgkAAAAASUVORK5CYII=" - }, - "metadata": { - "jupyter-vega3": "#4a20f535-b2f2-4a27-9958-4d8c45131ddc" + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
freqhorn-aggp-itp3AvgTimefreqhorn-aggpAvgTimefreqhorn-freqs-aggp-itp3AvgTimefreqhorn-freqs-aggpAvgTimefreqhorn-v1-eps-freqs-aggpAvgTimefreqhorn-v1-eps-freqsAvgTimefreqhorn-v1-epsAvgTimefreqhorn-v1AvgTimeice-MinTimemcmc-AvgTimez3-spacerhyp1MinTimez3-spacerhyp2MinTime
abdu_010.3616330.3227490.3628620.3261442.7490415.03203738.8321572.382093NaNNaN0.0385950.038058
abdu_020.58645336.3456430.59372053.07762340.88472134.93244332.17578113.856761NaNNaN0.0475190.052318
abdu_030.705050NaN0.704973NaN49.529664NaNNaN30.962278NaNNaN0.0536470.051166
abdu_040.5356600.4856850.5394680.48981410.60826425.641194NaN2.745355NaNNaN0.0470290.042643
bhmr2007_true-unreach-call0.746312NaN0.745017NaNNaNNaNNaNNaNNaNNaN0.0479700.047481
bouncy_three_counters_merged30.70583338.357950NaN55.94078749.066166NaN19.226857NaNNaN30.601000NaNNaN
bouncy_two_counters_merged6.3438856.2589057.6711324.0893183.4921765.4241237.09324913.805033NaNNaNNaNNaN
cegar10.3076450.2772900.3099560.2760823.78530118.3452654.5188658.432661NaN3.8130000.0396440.051217
cegar20.9010510.9053261.3259880.8607942.1623911.8311071.0480091.853755NaN0.3010000.0613220.046168
cggmp_iter_11.1239422.0047846.6189485.03279514.534831NaN9.181728NaN0.3318.3530000.0543470.051785
cggmp_iter_229.22441926.19346936.62635442.24460239.83965346.87646513.813542NaN0.36NaN0.0646680.067310
cggmp_iter_315.91741021.26642528.166786NaNNaNNaN39.670850NaN0.91NaN0.0758410.081359
const_div_10.5415990.2820650.5375220.2834941.9479775.3953366.8097574.338250NaNNaN0.0500150.048879
const_div_20.5447400.2830830.5381240.2853591.4740043.67237327.0450932.764348NaNNaN0.0461220.047610
const_div_mod0.3901820.3126220.4073250.3083781.2941932.36031310.3233337.998853NaNNaN0.0370430.047009
const_mod_10.1847950.1488760.1827350.1491760.4252720.1231451.1318560.075972NaNNaN0.0478240.048022
const_mod_20.1842720.1482520.1836660.1510970.2881910.2597130.8141500.155398NaNNaN0.0372680.047083
count_by_1_variant_true-unreach-call_true-termination0.2112450.1500880.2137610.1501940.2241130.1444580.7580600.225529NaN12.1730000.0371590.036492
count_by_2_modif_true-unreach-call_true-termination6.8784423.3076973.4016541.21528044.01044115.59298220.284528NaNNaNNaN37.739444NaN
count_by_2_true-unreach-call_true-termination2.3409335.7930633.6705174.8925206.34014110.10655214.318313NaNNaNNaN38.38865248.347079
countud10.6970085.28881119.1728696.5399535.67062012.3017043.99145515.251741NaNNaNNaN0.050888
dillig010.2083650.1281500.2075930.1286830.4990471.3939940.776907NaNNaN0.5990000.0494430.042602
dillig030.2618130.1274740.2631250.1303520.4406330.7671200.7675390.471464NaN7.864667NaNNaN
dillig040.1732400.1421320.1748440.1428850.3789710.3448091.7072840.107023NaN12.6855000.0364100.043736
dillig058.8895081.88335718.9984483.6008122.88300533.19303010.373889NaNNaN11.411500NaNNaN
dillig070.4202884.4445430.4178692.0492361.30940311.8542658.0097911.998042NaN11.3500000.0470770.047493
dillig13NaNNaNNaNNaNNaNNaNNaNNaNNaNNaN0.0764880.068227
dillig140.5993872.2700700.61195719.7306507.995617NaN9.123693NaNNaNNaN0.0618640.063990
dillig152.1662832.6177857.6834343.5873412.77796510.6989252.086586NaNNaNNaNNaN0.059618
dillig1618.86337026.26299143.90252312.27649913.25091834.13914529.09733845.065046NaNNaNNaN0.046660
.......................................
s_mutants_130.7112710.6788270.7131110.6721813.86014227.7014604.84475521.7303913.53NaN0.0509920.049836
s_mutants_140.7040060.6690100.7154730.67338814.18683435.04143328.80161028.3709795.34NaN0.0449860.047555
s_mutants_150.8863970.6675360.8829680.66666214.406412NaN36.5336634.0068384.23NaN0.0379870.046320
s_mutants_166.29305232.64290230.18944123.2282606.75887117.672974NaNNaNNaNNaNNaNNaN
s_mutants_1710.19356239.05805923.21355831.3109285.22125025.53356113.433933NaNNaNNaNNaNNaN
s_mutants_21NaNNaN25.315776NaN17.69207752.191380NaNNaNNaNNaNNaNNaN
s_mutants_22NaN8.12629137.61149017.22924729.37193836.36629431.502577NaNNaNNaNNaNNaN
s_mutants_239.9459132.99985327.3715811.6387071.4223269.6506833.700095NaN0.17NaNNaNNaN
s_mutants_249.6056051.71270927.1084322.3897214.23725532.57459510.892872NaNNaNNaNNaN0.047550
s_seeds_010.3125240.2816790.3113920.2810190.3341400.3176020.4597120.3487170.120.0420000.0398340.035731
s_seeds_020.8350970.7792960.8276140.7980340.6785461.6251382.3332541.6354171.02NaN0.0480600.045925
s_seeds_030.1710980.1369990.1704070.1372510.2357540.3772860.4765440.3124670.170.6243330.0366960.039712
s_seeds_040.2151920.1875660.2170620.184407NaNNaNNaNNaNNaN0.03700019.5810790.039900
s_seeds_050.1695300.1394750.1689230.1383930.0883460.3140661.6268380.087041NaN4.28166726.0942860.035749
s_seeds_060.4983670.3388170.4979240.3511201.3597343.7740673.0375403.5538070.224.3890000.046665NaN
s_seeds_090.3089990.2341270.3121740.2326900.9371561.6836873.5751170.857082NaN0.4563330.2569940.050428
s_seeds_100.1096330.0781940.1093030.078231NaNNaNNaNNaNNaN0.0270000.0364390.035435
s_triv_010.2480370.2147510.2455700.2164011.8220133.9825864.3542912.7532290.02NaN0.0475590.047095
s_triv_030.1454850.1231970.1462550.1211410.4250950.9500860.8157180.905150NaN0.0360000.0461580.040771
s_triv_040.1450040.1221700.1474920.1235670.3084120.7667161.9519102.295245NaN0.0580000.0354560.036593
s_triv_090.0961910.0767250.0967000.076900NaNNaNNaNNaNNaNNaNNaN0.037249
s_triv_110.0965290.0764340.0973690.076925NaNNaNNaNNaNNaNNaNNaN0.036539
s_triv_120.1851990.1572680.1886160.157020NaNNaNNaNNaNNaNNaNNaN0.035577
s_triv_130.2133580.1847960.2126590.1847710.0962700.1088940.6690820.172544NaNNaN0.0372080.034711
s_triv_150.2017760.1743970.2008850.1750890.1607590.2522700.1189760.0735630.02NaN0.0344170.035864
sn_10247.0223472.6116567.0452082.6303201.1720495.47990911.7585461.0466374.726.6583334.0171611.828774
sn_204833.45483319.24324633.71036219.24514719.59045819.30295429.77939920.0464839.3732.39300015.5637097.263470
sn_4096NaN8.497658NaN8.51388712.25786420.6414131.5731772.71877619.1432.251000NaN29.765122
sn_8192NaN29.830819NaN29.85477731.44515220.58195336.7388995.53595839.61NaNNaNNaN
w10.1750830.1937600.1759920.1944420.1218680.1219310.9942760.364030NaN0.0416670.0354760.040999
\n", + "

114 rows × 12 columns

\n", + "
" + ], + "text/plain": [ + " freqhorn-aggp-itp3AvgTime \\\n", + "abdu_01 0.361633 \n", + "abdu_02 0.586453 \n", + "abdu_03 0.705050 \n", + "abdu_04 0.535660 \n", + "bhmr2007_true-unreach-call 0.746312 \n", + "bouncy_three_counters_merged 30.705833 \n", + "bouncy_two_counters_merged 6.343885 \n", + "cegar1 0.307645 \n", + "cegar2 0.901051 \n", + "cggmp_iter_1 1.123942 \n", + "cggmp_iter_2 29.224419 \n", + "cggmp_iter_3 15.917410 \n", + "const_div_1 0.541599 \n", + "const_div_2 0.544740 \n", + "const_div_mod 0.390182 \n", + "const_mod_1 0.184795 \n", + "const_mod_2 0.184272 \n", + "count_by_1_variant_true-unreach-call_true-termi... 0.211245 \n", + "count_by_2_modif_true-unreach-call_true-termina... 6.878442 \n", + "count_by_2_true-unreach-call_true-termination 2.340933 \n", + "countud 10.697008 \n", + "dillig01 0.208365 \n", + "dillig03 0.261813 \n", + "dillig04 0.173240 \n", + "dillig05 8.889508 \n", + "dillig07 0.420288 \n", + "dillig13 NaN \n", + "dillig14 0.599387 \n", + "dillig15 2.166283 \n", + "dillig16 18.863370 \n", + "... ... \n", + "s_mutants_13 0.711271 \n", + "s_mutants_14 0.704006 \n", + "s_mutants_15 0.886397 \n", + "s_mutants_16 6.293052 \n", + "s_mutants_17 10.193562 \n", + "s_mutants_21 NaN \n", + "s_mutants_22 NaN \n", + "s_mutants_23 9.945913 \n", + "s_mutants_24 9.605605 \n", + "s_seeds_01 0.312524 \n", + "s_seeds_02 0.835097 \n", + "s_seeds_03 0.171098 \n", + "s_seeds_04 0.215192 \n", + "s_seeds_05 0.169530 \n", + "s_seeds_06 0.498367 \n", + "s_seeds_09 0.308999 \n", + "s_seeds_10 0.109633 \n", + "s_triv_01 0.248037 \n", + "s_triv_03 0.145485 \n", + "s_triv_04 0.145004 \n", + "s_triv_09 0.096191 \n", + "s_triv_11 0.096529 \n", + "s_triv_12 0.185199 \n", + "s_triv_13 0.213358 \n", + "s_triv_15 0.201776 \n", + "sn_1024 7.022347 \n", + "sn_2048 33.454833 \n", + "sn_4096 NaN \n", + "sn_8192 NaN \n", + "w1 0.175083 \n", + "\n", + " freqhorn-aggpAvgTime \\\n", + "abdu_01 0.322749 \n", + "abdu_02 36.345643 \n", + "abdu_03 NaN \n", + "abdu_04 0.485685 \n", + "bhmr2007_true-unreach-call NaN \n", + "bouncy_three_counters_merged 38.357950 \n", + "bouncy_two_counters_merged 6.258905 \n", + "cegar1 0.277290 \n", + "cegar2 0.905326 \n", + "cggmp_iter_1 2.004784 \n", + "cggmp_iter_2 26.193469 \n", + "cggmp_iter_3 21.266425 \n", + "const_div_1 0.282065 \n", + "const_div_2 0.283083 \n", + "const_div_mod 0.312622 \n", + "const_mod_1 0.148876 \n", + "const_mod_2 0.148252 \n", + "count_by_1_variant_true-unreach-call_true-termi... 0.150088 \n", + "count_by_2_modif_true-unreach-call_true-termina... 3.307697 \n", + "count_by_2_true-unreach-call_true-termination 5.793063 \n", + "countud 5.288811 \n", + "dillig01 0.128150 \n", + "dillig03 0.127474 \n", + "dillig04 0.142132 \n", + "dillig05 1.883357 \n", + "dillig07 4.444543 \n", + "dillig13 NaN \n", + "dillig14 2.270070 \n", + "dillig15 2.617785 \n", + "dillig16 26.262991 \n", + "... ... \n", + "s_mutants_13 0.678827 \n", + "s_mutants_14 0.669010 \n", + "s_mutants_15 0.667536 \n", + "s_mutants_16 32.642902 \n", + "s_mutants_17 39.058059 \n", + "s_mutants_21 NaN \n", + "s_mutants_22 8.126291 \n", + "s_mutants_23 2.999853 \n", + "s_mutants_24 1.712709 \n", + "s_seeds_01 0.281679 \n", + "s_seeds_02 0.779296 \n", + "s_seeds_03 0.136999 \n", + "s_seeds_04 0.187566 \n", + "s_seeds_05 0.139475 \n", + "s_seeds_06 0.338817 \n", + "s_seeds_09 0.234127 \n", + "s_seeds_10 0.078194 \n", + "s_triv_01 0.214751 \n", + "s_triv_03 0.123197 \n", + "s_triv_04 0.122170 \n", + "s_triv_09 0.076725 \n", + "s_triv_11 0.076434 \n", + "s_triv_12 0.157268 \n", + "s_triv_13 0.184796 \n", + "s_triv_15 0.174397 \n", + "sn_1024 2.611656 \n", + "sn_2048 19.243246 \n", + "sn_4096 8.497658 \n", + "sn_8192 29.830819 \n", + "w1 0.193760 \n", + "\n", + " freqhorn-freqs-aggp-itp3AvgTime \\\n", + "abdu_01 0.362862 \n", + "abdu_02 0.593720 \n", + "abdu_03 0.704973 \n", + "abdu_04 0.539468 \n", + "bhmr2007_true-unreach-call 0.745017 \n", + "bouncy_three_counters_merged NaN \n", + "bouncy_two_counters_merged 7.671132 \n", + "cegar1 0.309956 \n", + "cegar2 1.325988 \n", + "cggmp_iter_1 6.618948 \n", + "cggmp_iter_2 36.626354 \n", + "cggmp_iter_3 28.166786 \n", + "const_div_1 0.537522 \n", + "const_div_2 0.538124 \n", + "const_div_mod 0.407325 \n", + "const_mod_1 0.182735 \n", + "const_mod_2 0.183666 \n", + "count_by_1_variant_true-unreach-call_true-termi... 0.213761 \n", + "count_by_2_modif_true-unreach-call_true-termina... 3.401654 \n", + "count_by_2_true-unreach-call_true-termination 3.670517 \n", + "countud 19.172869 \n", + "dillig01 0.207593 \n", + "dillig03 0.263125 \n", + "dillig04 0.174844 \n", + "dillig05 18.998448 \n", + "dillig07 0.417869 \n", + "dillig13 NaN \n", + "dillig14 0.611957 \n", + "dillig15 7.683434 \n", + "dillig16 43.902523 \n", + "... ... \n", + "s_mutants_13 0.713111 \n", + "s_mutants_14 0.715473 \n", + "s_mutants_15 0.882968 \n", + "s_mutants_16 30.189441 \n", + "s_mutants_17 23.213558 \n", + "s_mutants_21 25.315776 \n", + "s_mutants_22 37.611490 \n", + "s_mutants_23 27.371581 \n", + "s_mutants_24 27.108432 \n", + "s_seeds_01 0.311392 \n", + "s_seeds_02 0.827614 \n", + "s_seeds_03 0.170407 \n", + "s_seeds_04 0.217062 \n", + "s_seeds_05 0.168923 \n", + "s_seeds_06 0.497924 \n", + "s_seeds_09 0.312174 \n", + "s_seeds_10 0.109303 \n", + "s_triv_01 0.245570 \n", + "s_triv_03 0.146255 \n", + "s_triv_04 0.147492 \n", + "s_triv_09 0.096700 \n", + "s_triv_11 0.097369 \n", + "s_triv_12 0.188616 \n", + "s_triv_13 0.212659 \n", + "s_triv_15 0.200885 \n", + "sn_1024 7.045208 \n", + "sn_2048 33.710362 \n", + "sn_4096 NaN \n", + "sn_8192 NaN \n", + "w1 0.175992 \n", + "\n", + " freqhorn-freqs-aggpAvgTime \\\n", + "abdu_01 0.326144 \n", + "abdu_02 53.077623 \n", + "abdu_03 NaN \n", + "abdu_04 0.489814 \n", + "bhmr2007_true-unreach-call NaN \n", + "bouncy_three_counters_merged 55.940787 \n", + "bouncy_two_counters_merged 4.089318 \n", + "cegar1 0.276082 \n", + "cegar2 0.860794 \n", + "cggmp_iter_1 5.032795 \n", + "cggmp_iter_2 42.244602 \n", + "cggmp_iter_3 NaN \n", + "const_div_1 0.283494 \n", + "const_div_2 0.285359 \n", + "const_div_mod 0.308378 \n", + "const_mod_1 0.149176 \n", + "const_mod_2 0.151097 \n", + "count_by_1_variant_true-unreach-call_true-termi... 0.150194 \n", + "count_by_2_modif_true-unreach-call_true-termina... 1.215280 \n", + "count_by_2_true-unreach-call_true-termination 4.892520 \n", + "countud 6.539953 \n", + "dillig01 0.128683 \n", + "dillig03 0.130352 \n", + "dillig04 0.142885 \n", + "dillig05 3.600812 \n", + "dillig07 2.049236 \n", + "dillig13 NaN \n", + "dillig14 19.730650 \n", + "dillig15 3.587341 \n", + "dillig16 12.276499 \n", + "... ... \n", + "s_mutants_13 0.672181 \n", + "s_mutants_14 0.673388 \n", + "s_mutants_15 0.666662 \n", + "s_mutants_16 23.228260 \n", + "s_mutants_17 31.310928 \n", + "s_mutants_21 NaN \n", + "s_mutants_22 17.229247 \n", + "s_mutants_23 1.638707 \n", + "s_mutants_24 2.389721 \n", + "s_seeds_01 0.281019 \n", + "s_seeds_02 0.798034 \n", + "s_seeds_03 0.137251 \n", + "s_seeds_04 0.184407 \n", + "s_seeds_05 0.138393 \n", + "s_seeds_06 0.351120 \n", + "s_seeds_09 0.232690 \n", + "s_seeds_10 0.078231 \n", + "s_triv_01 0.216401 \n", + "s_triv_03 0.121141 \n", + "s_triv_04 0.123567 \n", + "s_triv_09 0.076900 \n", + "s_triv_11 0.076925 \n", + "s_triv_12 0.157020 \n", + "s_triv_13 0.184771 \n", + "s_triv_15 0.175089 \n", + "sn_1024 2.630320 \n", + "sn_2048 19.245147 \n", + "sn_4096 8.513887 \n", + "sn_8192 29.854777 \n", + "w1 0.194442 \n", + "\n", + " freqhorn-v1-eps-freqs-aggpAvgTime \\\n", + "abdu_01 2.749041 \n", + "abdu_02 40.884721 \n", + "abdu_03 49.529664 \n", + "abdu_04 10.608264 \n", + "bhmr2007_true-unreach-call NaN \n", + "bouncy_three_counters_merged 49.066166 \n", + "bouncy_two_counters_merged 3.492176 \n", + "cegar1 3.785301 \n", + "cegar2 2.162391 \n", + "cggmp_iter_1 14.534831 \n", + "cggmp_iter_2 39.839653 \n", + "cggmp_iter_3 NaN \n", + "const_div_1 1.947977 \n", + "const_div_2 1.474004 \n", + "const_div_mod 1.294193 \n", + "const_mod_1 0.425272 \n", + "const_mod_2 0.288191 \n", + "count_by_1_variant_true-unreach-call_true-termi... 0.224113 \n", + "count_by_2_modif_true-unreach-call_true-termina... 44.010441 \n", + "count_by_2_true-unreach-call_true-termination 6.340141 \n", + "countud 5.670620 \n", + "dillig01 0.499047 \n", + "dillig03 0.440633 \n", + "dillig04 0.378971 \n", + "dillig05 2.883005 \n", + "dillig07 1.309403 \n", + "dillig13 NaN \n", + "dillig14 7.995617 \n", + "dillig15 2.777965 \n", + "dillig16 13.250918 \n", + "... ... \n", + "s_mutants_13 3.860142 \n", + "s_mutants_14 14.186834 \n", + "s_mutants_15 14.406412 \n", + "s_mutants_16 6.758871 \n", + "s_mutants_17 5.221250 \n", + "s_mutants_21 17.692077 \n", + "s_mutants_22 29.371938 \n", + "s_mutants_23 1.422326 \n", + "s_mutants_24 4.237255 \n", + "s_seeds_01 0.334140 \n", + "s_seeds_02 0.678546 \n", + "s_seeds_03 0.235754 \n", + "s_seeds_04 NaN \n", + "s_seeds_05 0.088346 \n", + "s_seeds_06 1.359734 \n", + "s_seeds_09 0.937156 \n", + "s_seeds_10 NaN \n", + "s_triv_01 1.822013 \n", + "s_triv_03 0.425095 \n", + "s_triv_04 0.308412 \n", + "s_triv_09 NaN \n", + "s_triv_11 NaN \n", + "s_triv_12 NaN \n", + "s_triv_13 0.096270 \n", + "s_triv_15 0.160759 \n", + "sn_1024 1.172049 \n", + "sn_2048 19.590458 \n", + "sn_4096 12.257864 \n", + "sn_8192 31.445152 \n", + "w1 0.121868 \n", + "\n", + " freqhorn-v1-eps-freqsAvgTime \\\n", + "abdu_01 5.032037 \n", + "abdu_02 34.932443 \n", + "abdu_03 NaN \n", + "abdu_04 25.641194 \n", + "bhmr2007_true-unreach-call NaN \n", + "bouncy_three_counters_merged NaN \n", + "bouncy_two_counters_merged 5.424123 \n", + "cegar1 18.345265 \n", + "cegar2 1.831107 \n", + "cggmp_iter_1 NaN \n", + "cggmp_iter_2 46.876465 \n", + "cggmp_iter_3 NaN \n", + "const_div_1 5.395336 \n", + "const_div_2 3.672373 \n", + "const_div_mod 2.360313 \n", + "const_mod_1 0.123145 \n", + "const_mod_2 0.259713 \n", + "count_by_1_variant_true-unreach-call_true-termi... 0.144458 \n", + "count_by_2_modif_true-unreach-call_true-termina... 15.592982 \n", + "count_by_2_true-unreach-call_true-termination 10.106552 \n", + "countud 12.301704 \n", + "dillig01 1.393994 \n", + "dillig03 0.767120 \n", + "dillig04 0.344809 \n", + "dillig05 33.193030 \n", + "dillig07 11.854265 \n", + "dillig13 NaN \n", + "dillig14 NaN \n", + "dillig15 10.698925 \n", + "dillig16 34.139145 \n", + "... ... \n", + "s_mutants_13 27.701460 \n", + "s_mutants_14 35.041433 \n", + "s_mutants_15 NaN \n", + "s_mutants_16 17.672974 \n", + "s_mutants_17 25.533561 \n", + "s_mutants_21 52.191380 \n", + "s_mutants_22 36.366294 \n", + "s_mutants_23 9.650683 \n", + "s_mutants_24 32.574595 \n", + "s_seeds_01 0.317602 \n", + "s_seeds_02 1.625138 \n", + "s_seeds_03 0.377286 \n", + "s_seeds_04 NaN \n", + "s_seeds_05 0.314066 \n", + "s_seeds_06 3.774067 \n", + "s_seeds_09 1.683687 \n", + "s_seeds_10 NaN \n", + "s_triv_01 3.982586 \n", + "s_triv_03 0.950086 \n", + "s_triv_04 0.766716 \n", + "s_triv_09 NaN \n", + "s_triv_11 NaN \n", + "s_triv_12 NaN \n", + "s_triv_13 0.108894 \n", + "s_triv_15 0.252270 \n", + "sn_1024 5.479909 \n", + "sn_2048 19.302954 \n", + "sn_4096 20.641413 \n", + "sn_8192 20.581953 \n", + "w1 0.121931 \n", + "\n", + " freqhorn-v1-epsAvgTime \\\n", + "abdu_01 38.832157 \n", + "abdu_02 32.175781 \n", + "abdu_03 NaN \n", + "abdu_04 NaN \n", + "bhmr2007_true-unreach-call NaN \n", + "bouncy_three_counters_merged 19.226857 \n", + "bouncy_two_counters_merged 7.093249 \n", + "cegar1 4.518865 \n", + "cegar2 1.048009 \n", + "cggmp_iter_1 9.181728 \n", + "cggmp_iter_2 13.813542 \n", + "cggmp_iter_3 39.670850 \n", + "const_div_1 6.809757 \n", + "const_div_2 27.045093 \n", + "const_div_mod 10.323333 \n", + "const_mod_1 1.131856 \n", + "const_mod_2 0.814150 \n", + "count_by_1_variant_true-unreach-call_true-termi... 0.758060 \n", + "count_by_2_modif_true-unreach-call_true-termina... 20.284528 \n", + "count_by_2_true-unreach-call_true-termination 14.318313 \n", + "countud 3.991455 \n", + "dillig01 0.776907 \n", + "dillig03 0.767539 \n", + "dillig04 1.707284 \n", + "dillig05 10.373889 \n", + "dillig07 8.009791 \n", + "dillig13 NaN \n", + "dillig14 9.123693 \n", + "dillig15 2.086586 \n", + "dillig16 29.097338 \n", + "... ... \n", + "s_mutants_13 4.844755 \n", + "s_mutants_14 28.801610 \n", + "s_mutants_15 36.533663 \n", + "s_mutants_16 NaN \n", + "s_mutants_17 13.433933 \n", + "s_mutants_21 NaN \n", + "s_mutants_22 31.502577 \n", + "s_mutants_23 3.700095 \n", + "s_mutants_24 10.892872 \n", + "s_seeds_01 0.459712 \n", + "s_seeds_02 2.333254 \n", + "s_seeds_03 0.476544 \n", + "s_seeds_04 NaN \n", + "s_seeds_05 1.626838 \n", + "s_seeds_06 3.037540 \n", + "s_seeds_09 3.575117 \n", + "s_seeds_10 NaN \n", + "s_triv_01 4.354291 \n", + "s_triv_03 0.815718 \n", + "s_triv_04 1.951910 \n", + "s_triv_09 NaN \n", + "s_triv_11 NaN \n", + "s_triv_12 NaN \n", + "s_triv_13 0.669082 \n", + "s_triv_15 0.118976 \n", + "sn_1024 11.758546 \n", + "sn_2048 29.779399 \n", + "sn_4096 1.573177 \n", + "sn_8192 36.738899 \n", + "w1 0.994276 \n", + "\n", + " freqhorn-v1AvgTime \\\n", + "abdu_01 2.382093 \n", + "abdu_02 13.856761 \n", + "abdu_03 30.962278 \n", + "abdu_04 2.745355 \n", + "bhmr2007_true-unreach-call NaN \n", + "bouncy_three_counters_merged NaN \n", + "bouncy_two_counters_merged 13.805033 \n", + "cegar1 8.432661 \n", + "cegar2 1.853755 \n", + "cggmp_iter_1 NaN \n", + "cggmp_iter_2 NaN \n", + "cggmp_iter_3 NaN \n", + "const_div_1 4.338250 \n", + "const_div_2 2.764348 \n", + "const_div_mod 7.998853 \n", + "const_mod_1 0.075972 \n", + "const_mod_2 0.155398 \n", + "count_by_1_variant_true-unreach-call_true-termi... 0.225529 \n", + "count_by_2_modif_true-unreach-call_true-termina... NaN \n", + "count_by_2_true-unreach-call_true-termination NaN \n", + "countud 15.251741 \n", + "dillig01 NaN \n", + "dillig03 0.471464 \n", + "dillig04 0.107023 \n", + "dillig05 NaN \n", + "dillig07 1.998042 \n", + "dillig13 NaN \n", + "dillig14 NaN \n", + "dillig15 NaN \n", + "dillig16 45.065046 \n", + "... ... \n", + "s_mutants_13 21.730391 \n", + "s_mutants_14 28.370979 \n", + "s_mutants_15 4.006838 \n", + "s_mutants_16 NaN \n", + "s_mutants_17 NaN \n", + "s_mutants_21 NaN \n", + "s_mutants_22 NaN \n", + "s_mutants_23 NaN \n", + "s_mutants_24 NaN \n", + "s_seeds_01 0.348717 \n", + "s_seeds_02 1.635417 \n", + "s_seeds_03 0.312467 \n", + "s_seeds_04 NaN \n", + "s_seeds_05 0.087041 \n", + "s_seeds_06 3.553807 \n", + "s_seeds_09 0.857082 \n", + "s_seeds_10 NaN \n", + "s_triv_01 2.753229 \n", + "s_triv_03 0.905150 \n", + "s_triv_04 2.295245 \n", + "s_triv_09 NaN \n", + "s_triv_11 NaN \n", + "s_triv_12 NaN \n", + "s_triv_13 0.172544 \n", + "s_triv_15 0.073563 \n", + "sn_1024 1.046637 \n", + "sn_2048 20.046483 \n", + "sn_4096 2.718776 \n", + "sn_8192 5.535958 \n", + "w1 0.364030 \n", + "\n", + " ice-MinTime mcmc-AvgTime \\\n", + "abdu_01 NaN NaN \n", + "abdu_02 NaN NaN \n", + "abdu_03 NaN NaN \n", + "abdu_04 NaN NaN \n", + "bhmr2007_true-unreach-call NaN NaN \n", + "bouncy_three_counters_merged NaN 30.601000 \n", + "bouncy_two_counters_merged NaN NaN \n", + "cegar1 NaN 3.813000 \n", + "cegar2 NaN 0.301000 \n", + "cggmp_iter_1 0.33 18.353000 \n", + "cggmp_iter_2 0.36 NaN \n", + "cggmp_iter_3 0.91 NaN \n", + "const_div_1 NaN NaN \n", + "const_div_2 NaN NaN \n", + "const_div_mod NaN NaN \n", + "const_mod_1 NaN NaN \n", + "const_mod_2 NaN NaN \n", + "count_by_1_variant_true-unreach-call_true-termi... NaN 12.173000 \n", + "count_by_2_modif_true-unreach-call_true-termina... NaN NaN \n", + "count_by_2_true-unreach-call_true-termination NaN NaN \n", + "countud NaN NaN \n", + "dillig01 NaN 0.599000 \n", + "dillig03 NaN 7.864667 \n", + "dillig04 NaN 12.685500 \n", + "dillig05 NaN 11.411500 \n", + "dillig07 NaN 11.350000 \n", + "dillig13 NaN NaN \n", + "dillig14 NaN NaN \n", + "dillig15 NaN NaN \n", + "dillig16 NaN NaN \n", + "... ... ... \n", + "s_mutants_13 3.53 NaN \n", + "s_mutants_14 5.34 NaN \n", + "s_mutants_15 4.23 NaN \n", + "s_mutants_16 NaN NaN \n", + "s_mutants_17 NaN NaN \n", + "s_mutants_21 NaN NaN \n", + "s_mutants_22 NaN NaN \n", + "s_mutants_23 0.17 NaN \n", + "s_mutants_24 NaN NaN \n", + "s_seeds_01 0.12 0.042000 \n", + "s_seeds_02 1.02 NaN \n", + "s_seeds_03 0.17 0.624333 \n", + "s_seeds_04 NaN 0.037000 \n", + "s_seeds_05 NaN 4.281667 \n", + "s_seeds_06 0.22 4.389000 \n", + "s_seeds_09 NaN 0.456333 \n", + "s_seeds_10 NaN 0.027000 \n", + "s_triv_01 0.02 NaN \n", + "s_triv_03 NaN 0.036000 \n", + "s_triv_04 NaN 0.058000 \n", + "s_triv_09 NaN NaN \n", + "s_triv_11 NaN NaN \n", + "s_triv_12 NaN NaN \n", + "s_triv_13 NaN NaN \n", + "s_triv_15 0.02 NaN \n", + "sn_1024 4.72 6.658333 \n", + "sn_2048 9.37 32.393000 \n", + "sn_4096 19.14 32.251000 \n", + "sn_8192 39.61 NaN \n", + "w1 NaN 0.041667 \n", + "\n", + " z3-spacerhyp1MinTime \\\n", + "abdu_01 0.038595 \n", + "abdu_02 0.047519 \n", + "abdu_03 0.053647 \n", + "abdu_04 0.047029 \n", + "bhmr2007_true-unreach-call 0.047970 \n", + "bouncy_three_counters_merged NaN \n", + "bouncy_two_counters_merged NaN \n", + "cegar1 0.039644 \n", + "cegar2 0.061322 \n", + "cggmp_iter_1 0.054347 \n", + "cggmp_iter_2 0.064668 \n", + "cggmp_iter_3 0.075841 \n", + "const_div_1 0.050015 \n", + "const_div_2 0.046122 \n", + "const_div_mod 0.037043 \n", + "const_mod_1 0.047824 \n", + "const_mod_2 0.037268 \n", + "count_by_1_variant_true-unreach-call_true-termi... 0.037159 \n", + "count_by_2_modif_true-unreach-call_true-termina... 37.739444 \n", + "count_by_2_true-unreach-call_true-termination 38.388652 \n", + "countud NaN \n", + "dillig01 0.049443 \n", + "dillig03 NaN \n", + "dillig04 0.036410 \n", + "dillig05 NaN \n", + "dillig07 0.047077 \n", + "dillig13 0.076488 \n", + "dillig14 0.061864 \n", + "dillig15 NaN \n", + "dillig16 NaN \n", + "... ... \n", + "s_mutants_13 0.050992 \n", + "s_mutants_14 0.044986 \n", + "s_mutants_15 0.037987 \n", + "s_mutants_16 NaN \n", + "s_mutants_17 NaN \n", + "s_mutants_21 NaN \n", + "s_mutants_22 NaN \n", + "s_mutants_23 NaN \n", + "s_mutants_24 NaN \n", + "s_seeds_01 0.039834 \n", + "s_seeds_02 0.048060 \n", + "s_seeds_03 0.036696 \n", + "s_seeds_04 19.581079 \n", + "s_seeds_05 26.094286 \n", + "s_seeds_06 0.046665 \n", + "s_seeds_09 0.256994 \n", + "s_seeds_10 0.036439 \n", + "s_triv_01 0.047559 \n", + "s_triv_03 0.046158 \n", + "s_triv_04 0.035456 \n", + "s_triv_09 NaN \n", + "s_triv_11 NaN \n", + "s_triv_12 NaN \n", + "s_triv_13 0.037208 \n", + "s_triv_15 0.034417 \n", + "sn_1024 4.017161 \n", + "sn_2048 15.563709 \n", + "sn_4096 NaN \n", + "sn_8192 NaN \n", + "w1 0.035476 \n", + "\n", + " z3-spacerhyp2MinTime \n", + "abdu_01 0.038058 \n", + "abdu_02 0.052318 \n", + "abdu_03 0.051166 \n", + "abdu_04 0.042643 \n", + "bhmr2007_true-unreach-call 0.047481 \n", + "bouncy_three_counters_merged NaN \n", + "bouncy_two_counters_merged NaN \n", + "cegar1 0.051217 \n", + "cegar2 0.046168 \n", + "cggmp_iter_1 0.051785 \n", + "cggmp_iter_2 0.067310 \n", + "cggmp_iter_3 0.081359 \n", + "const_div_1 0.048879 \n", + "const_div_2 0.047610 \n", + "const_div_mod 0.047009 \n", + "const_mod_1 0.048022 \n", + "const_mod_2 0.047083 \n", + "count_by_1_variant_true-unreach-call_true-termi... 0.036492 \n", + "count_by_2_modif_true-unreach-call_true-termina... NaN \n", + "count_by_2_true-unreach-call_true-termination 48.347079 \n", + "countud 0.050888 \n", + "dillig01 0.042602 \n", + "dillig03 NaN \n", + "dillig04 0.043736 \n", + "dillig05 NaN \n", + "dillig07 0.047493 \n", + "dillig13 0.068227 \n", + "dillig14 0.063990 \n", + "dillig15 0.059618 \n", + "dillig16 0.046660 \n", + "... ... \n", + "s_mutants_13 0.049836 \n", + "s_mutants_14 0.047555 \n", + "s_mutants_15 0.046320 \n", + "s_mutants_16 NaN \n", + "s_mutants_17 NaN \n", + "s_mutants_21 NaN \n", + "s_mutants_22 NaN \n", + "s_mutants_23 NaN \n", + "s_mutants_24 0.047550 \n", + "s_seeds_01 0.035731 \n", + "s_seeds_02 0.045925 \n", + "s_seeds_03 0.039712 \n", + "s_seeds_04 0.039900 \n", + "s_seeds_05 0.035749 \n", + "s_seeds_06 NaN \n", + "s_seeds_09 0.050428 \n", + "s_seeds_10 0.035435 \n", + "s_triv_01 0.047095 \n", + "s_triv_03 0.040771 \n", + "s_triv_04 0.036593 \n", + "s_triv_09 0.037249 \n", + "s_triv_11 0.036539 \n", + "s_triv_12 0.035577 \n", + "s_triv_13 0.034711 \n", + "s_triv_15 0.035864 \n", + "sn_1024 1.828774 \n", + "sn_2048 7.263470 \n", + "sn_4096 29.765122 \n", + "sn_8192 NaN \n", + "w1 0.040999 \n", + "\n", + "[114 rows x 12 columns]" + ] }, - "output_type": "display_data" + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" } ], "source": [ - "import pdvega\n", - "df[df['outcome'] != 'timeout']['bestTime'].vgplot.hist(bins=30)" + "time_summary_parts = {}\n", + "for algo in df['algorithm'].unique():\n", + " u_hypers = ['']\n", + " if algo.upper() not in ('ICE', 'MCMC'):\n", + " u_hypers = df[df['algorithm'] == algo]['hyperparams'].unique()\n", + " for hyper in u_hypers:\n", + " per_bench = df[df['algorithm'] == algo][df['hyperparams'] == hyper].groupby('benchmarkName')['bestTime']\n", + " if algo.upper() in ('ICE', 'Z3'):\n", + " col_name = algo.lower() + \"-\" + hyper + \"MinTime\"\n", + " per_bench = per_bench.min()\n", + " else:\n", + " col_name = algo.lower() + \"-\" + hyper + \"AvgTime\"\n", + " per_bench = per_bench.mean()\n", + " time_summary_parts[col_name] = per_bench\n", + "final_time_summary = pandas.concat(time_summary_parts, axis=1)[totally_ported]\n", + "final_time_summary.to_csv(\"final_time_summary.csv\")\n", + "final_time_summary" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "What are the counts after bootstrapping and sampling?" ] }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 61, "metadata": {}, "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "aggp\n", + "bootstrapping: 204\n", + "sampling: 87\n", + "\n", + "freqs-aggp\n", + "bootstrapping: 204\n", + "sampling: 78\n", + "\n", + "v1-eps-freqs\n", + "bootstrapping: 0\n", + "sampling: 0\n", + "\n", + "v1-eps-freqs-aggp\n", + "bootstrapping: 0\n", + "sampling: 0\n", + "\n", + "v1-eps\n", + "bootstrapping: 0\n", + "sampling: 0\n", + "\n", + "v1\n", + "bootstrapping: 0\n", + "sampling: 0\n", + "\n", + "aggp-itp3\n", + "bootstrapping: 222\n", + "sampling: 67\n", + "\n", + "freqs-aggp-itp3\n", + "bootstrapping: 222\n", + "sampling: 67\n", + "\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.6/site-packages/ipykernel_launcher.py:5: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + " \"\"\"\n" + ] + } + ], + "source": [ + "freqhorn_hypers = df[df['algorithm'] == 'FREQHORN']['hyperparams'].unique()\n", + "for hyper in freqhorn_hypers:\n", + " print(hyper)\n", + " for kind in ('bootstrapping', 'sampling'):\n", + " aa = df[df['algorithm'] == 'FREQHORN'][df['hyperparams'] == hyper][df['outcome'] == 'success'][df['successKind'] == kind] \\\n", + " .groupby(['benchmarkName']).count()[totally_ported]['algorithm'].sum()\n", + " print(str(kind) + \": \" + str(aa))\n", + " print(\"\")\n", + "# aa[df['successKind'].isnull() == False].groupby(['successKind'])['bestTime'].count()" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "/usr/local/lib/python3.6/site-packages/ipykernel_launcher.py:1: UserWarning: Boolean Series key will be reindexed to match DataFrame index.\n", + " \"\"\"Entry point for launching an IPython kernel.\n" + ] + }, { "data": { "text/plain": [ - "algorithm hyperparams \n", - "FREQHORN aggp 516\n", - " aggp-itp3 515\n", - " freqs-aggp 515\n", - " freqs-aggp-itp3 516\n", - " v1 516\n", - " v1-eps 516\n", - " v1-eps-freqs 516\n", - " v1-eps-freqs-aggp 516\n", - "ICE 215\n", - "MCMC 314\n", - "Z3 spacerhyp1 495\n", - " spacerhyp2 516\n", - "dtype: int64" + "hyperparams successKind \n", + "aggp bootstrapping 309\n", + " sampling 125\n", + "aggp-itp3 bootstrapping 351\n", + " sampling 80\n", + "freqs-aggp bootstrapping 309\n", + " sampling 124\n", + "freqs-aggp-itp3 bootstrapping 351\n", + " sampling 85\n", + "Name: bestTime, dtype: int64" ] }, - "execution_count": 11, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "df.groupby(['algorithm', 'hyperparams']).size()" + "df[df['algorithm'] == 'FREQHORN'][df['successKind'].isnull() == False].groupby(['hyperparams', 'successKind'])['bestTime'].count()" ] }, { From 244dbed5c37ca85b0ad7804931576ed91214086a Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Wed, 18 Apr 2018 18:52:50 +0300 Subject: [PATCH 076/236] TACAS slides --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d10cd6cdb..13653eee4 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ Satisfiability solver for constrained Horn clauses (CHC) based on the Expression News ======== -A more efficient release (FreqHorn-2) is now available. It features a two-stage process: 1) deterministic bootstrapping with interpolation-based proofs of bounded safety, 2) nondeterministic sampling with the inductive subset extraction and on-demand exploiting of counterexamples-to-induction. Find more details at the TACAS'18 paper. +A more efficient release (FreqHorn-2) is now available. It features a two-stage process: 1) deterministic bootstrapping with interpolation-based proofs of bounded safety, 2) nondeterministic sampling with the inductive subset extraction and on-demand exploiting of counterexamples-to-induction. Find more details at the TACAS'18 paper (slides). Installation ============ From d558d023e6016c498b2414be68d0746d5b41ad71 Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Thu, 3 May 2018 23:49:26 -0400 Subject: [PATCH 077/236] new experimental algorithm for synthesis of multiple invariants --- .../samples_multiple_inv_05_cex.smt2 | 36 +++ .../nonlin_multiple_inv_01.smt2 | 18 ++ .../nonlin_multiple_inv_02.smt2 | 21 ++ .../samples_multiple_inv_01.smt2 | 6 +- .../samples_multiple_inv_02.smt2 | 8 +- .../samples_multiple_inv_03.smt2 | 5 +- .../samples_multiple_inv_04.smt2 | 14 +- .../samples_multiple_inv_05.smt2 | 36 +++ .../samples_multiple_inv_06.smt2 | 27 ++ include/deep/RndLearner.hpp | 2 +- include/deep/RndLearnerV3.hpp | 246 ++++++++++++++++++ tools/deep/DeepHorn.cpp | 20 +- 12 files changed, 413 insertions(+), 26 deletions(-) create mode 100644 bench_horn_cex/samples_multiple_inv_05_cex.smt2 create mode 100644 bench_horn_multiple/nonlin_multiple_inv_01.smt2 create mode 100644 bench_horn_multiple/nonlin_multiple_inv_02.smt2 create mode 100644 bench_horn_multiple/samples_multiple_inv_05.smt2 create mode 100644 bench_horn_multiple/samples_multiple_inv_06.smt2 create mode 100644 include/deep/RndLearnerV3.hpp diff --git a/bench_horn_cex/samples_multiple_inv_05_cex.smt2 b/bench_horn_cex/samples_multiple_inv_05_cex.smt2 new file mode 100644 index 000000000..e8f2eb73b --- /dev/null +++ b/bench_horn_cex/samples_multiple_inv_05_cex.smt2 @@ -0,0 +1,36 @@ +(declare-rel FUN (Int)) +(declare-rel SAD (Int)) +(declare-var m Int) +(declare-var m1 Int) + +(declare-rel fail ()) + +(rule (=> + (> m 50) (FUN m) + ) +) + +(rule (=> + (and + (FUN m) + (= m1 (+ m 1)) + ) + (FUN m1) + ) +) + +(rule (=> (and (FUN m) (= m1 (- m 22))) (SAD m1))) + +(rule (=> + (and + (SAD m) + (= m1 (+ m 2)) + ) + (SAD m1) + ) +) + +(rule (=> (and (SAD m) (not (>= m 30))) fail)) + +(query fail :print-certificate true) + diff --git a/bench_horn_multiple/nonlin_multiple_inv_01.smt2 b/bench_horn_multiple/nonlin_multiple_inv_01.smt2 new file mode 100644 index 000000000..78d129bd8 --- /dev/null +++ b/bench_horn_multiple/nonlin_multiple_inv_01.smt2 @@ -0,0 +1,18 @@ +(declare-rel PRE (Int)) +(declare-rel POST (Int)) +(declare-var m Int) +(declare-var m1 Int) + +(declare-rel fail ()) + +(rule (=> (= m 1) (PRE m))) + +(rule (=> (and (PRE m) (= m1 (+ m m))) (PRE m1))) + +(rule (=> (PRE m) (POST m))) + +(rule (=> (and (POST m) (= m1 (* m m))) (POST m1))) + +(rule (=> (and (POST m) (not (>= m 1))) fail)) + +(query fail) diff --git a/bench_horn_multiple/nonlin_multiple_inv_02.smt2 b/bench_horn_multiple/nonlin_multiple_inv_02.smt2 new file mode 100644 index 000000000..78cca0385 --- /dev/null +++ b/bench_horn_multiple/nonlin_multiple_inv_02.smt2 @@ -0,0 +1,21 @@ +(declare-rel PRE (Int)) +(declare-rel POST (Int Int Int)) +(declare-var m Int) +(declare-var m1 Int) +(declare-var n Int) +(declare-var i Int) +(declare-var i1 Int) + +(declare-rel fail ()) + +(rule (=> (> m 0) (PRE m))) + +(rule (=> (PRE m) (PRE m))) ; very stupid + +(rule (=> (PRE m) (POST m m 1))) + +(rule (=> (and (POST m n i) (= m1 (+ m n)) (= i1 (+ i 1))) (POST m1 n i1))) + +(rule (=> (and (POST m n i) (not (= (* i n) m))) fail)) + +(query fail) diff --git a/bench_horn_multiple/samples_multiple_inv_01.smt2 b/bench_horn_multiple/samples_multiple_inv_01.smt2 index 7a551a4ac..de2f71a76 100644 --- a/bench_horn_multiple/samples_multiple_inv_01.smt2 +++ b/bench_horn_multiple/samples_multiple_inv_01.smt2 @@ -10,13 +10,12 @@ ) ) - (rule (=> (WRAP m) (NEST m))) (rule (=> (and - (NEST m) - (= m1 (+ m 1)) + (NEST m) + (= m1 (+ m 1)) ) (NEST m1) ) @@ -24,7 +23,6 @@ (rule (=> (NEST m) (WRAP m))) - (rule (=> (and (WRAP m) (not (>= m 0))) fail)) (query fail :print-certificate true) diff --git a/bench_horn_multiple/samples_multiple_inv_02.smt2 b/bench_horn_multiple/samples_multiple_inv_02.smt2 index 43fed33c8..de8e7dc6e 100644 --- a/bench_horn_multiple/samples_multiple_inv_02.smt2 +++ b/bench_horn_multiple/samples_multiple_inv_02.smt2 @@ -12,8 +12,8 @@ (rule (=> (and - (FUN m) - (= m1 (+ m 1)) + (FUN m) + (= m1 (+ m 1)) ) (FUN m1) ) @@ -23,8 +23,8 @@ (rule (=> (and - (SAD m) - (= m1 (+ m 2)) + (SAD m) + (= m1 (+ m 2)) ) (SAD m1) ) diff --git a/bench_horn_multiple/samples_multiple_inv_03.smt2 b/bench_horn_multiple/samples_multiple_inv_03.smt2 index ca715ebc6..9b78c10d0 100644 --- a/bench_horn_multiple/samples_multiple_inv_03.smt2 +++ b/bench_horn_multiple/samples_multiple_inv_03.smt2 @@ -11,15 +11,14 @@ ) ) - (rule (=> (WRAP m) (NEST m))) (rule (=> (NEST m) (WEEE m))) (rule (=> (and - (WEEE m) - (= m1 (+ m 1)) + (WEEE m) + (= m1 (+ m 1)) ) (WEEE m1) ) diff --git a/bench_horn_multiple/samples_multiple_inv_04.smt2 b/bench_horn_multiple/samples_multiple_inv_04.smt2 index 3a202b17a..eca3a3714 100644 --- a/bench_horn_multiple/samples_multiple_inv_04.smt2 +++ b/bench_horn_multiple/samples_multiple_inv_04.smt2 @@ -13,8 +13,8 @@ (rule (=> (and - (FUN m) - (= m1 (+ m 1)) + (FUN m) + (= m1 (+ m 1)) ) (FUN m1) ) @@ -24,8 +24,8 @@ (rule (=> (and - (SAD m) - (= m1 (+ m 2)) + (SAD m) + (= m1 (+ m 2)) ) (SAD m1) ) @@ -35,8 +35,8 @@ (rule (=> (and - (WEE m) - (= m1 (+ m 3)) + (WEE m) + (= m1 (+ m 3)) ) (WEE m1) ) @@ -44,4 +44,4 @@ (rule (=> (and (WEE m) (not (>= m 30))) fail)) -(query fail :print-certificate true) \ No newline at end of file +(query fail :print-certificate true) diff --git a/bench_horn_multiple/samples_multiple_inv_05.smt2 b/bench_horn_multiple/samples_multiple_inv_05.smt2 new file mode 100644 index 000000000..50c2d256b --- /dev/null +++ b/bench_horn_multiple/samples_multiple_inv_05.smt2 @@ -0,0 +1,36 @@ +(declare-rel FUN (Int)) +(declare-rel SAD (Int)) +(declare-var m Int) +(declare-var m1 Int) + +(declare-rel fail ()) + +(rule (=> + (> m 50) (FUN m) + ) +) + +(rule (=> + (and + (FUN m) + (= m1 (+ m 1)) + ) + (FUN m1) + ) +) + +(rule (=> (and (FUN m) (= m1 (- m))) (SAD m1))) + +(rule (=> + (and + (SAD m) + (= m1 (- m 2)) + ) + (SAD m1) + ) +) + +(rule (=> (and (SAD m) (not (<= m -30))) fail)) + +(query fail) + diff --git a/bench_horn_multiple/samples_multiple_inv_06.smt2 b/bench_horn_multiple/samples_multiple_inv_06.smt2 new file mode 100644 index 000000000..4fbe92755 --- /dev/null +++ b/bench_horn_multiple/samples_multiple_inv_06.smt2 @@ -0,0 +1,27 @@ +(declare-rel I (Int)) +(declare-rel J (Int Int)) +(declare-rel K (Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) +(declare-var z Int) +(declare-var z1 Int) + +(declare-rel fail ()) + +(rule (=> (= x 0) (I x))) + +(rule (=> (and (I x) (= x1 x) (= y1 0)) (J x1 y1))) + +(rule (=> (and (J x y) (= x1 x) (= y1 (+ y 1))) (J x1 y1))) + +(rule (=> (and (J x y) (= x1 (+ x y))) (I x1))) + +(rule (=> (and (I x) (= z1 (- x))) (K z1))) + +(rule (=> (and (K z) (= z1 (- z 1))) (K z1))) + +(rule (=> (and (K z) (not (<= z 0))) fail)) + +(query fail) diff --git a/include/deep/RndLearner.hpp b/include/deep/RndLearner.hpp index 08dfeed06..fa464dd8e 100644 --- a/include/deep/RndLearner.hpp +++ b/include/deep/RndLearner.hpp @@ -276,7 +276,7 @@ namespace ufo bool checkBoundedProofs (ExprSet& itpCandidates) { - assert(invNumber == 1); + if (invNumber == 1) return false; // not supported yet for (auto it = itpCandidates.begin(), end = itpCandidates.end(); it != end; ) { diff --git a/include/deep/RndLearnerV3.hpp b/include/deep/RndLearnerV3.hpp new file mode 100644 index 000000000..c4279697b --- /dev/null +++ b/include/deep/RndLearnerV3.hpp @@ -0,0 +1,246 @@ +#ifndef RNDLEARNERV3__HPP__ +#define RNDLEARNERV3__HPP__ + +#include "RndLearner.hpp" + +using namespace std; +using namespace boost; +namespace ufo +{ + class RndLearnerV3 : public RndLearner + { + private: + + ExprSet checked; + map candidates; + + public: + + RndLearnerV3 (ExprFactory &efac, EZ3 &z3, CHCs& r, bool freqs, bool aggp) : + RndLearner (efac, z3, r, /*k-induction*/ false, freqs, /*epsilon*/ true, aggp){} + + int getInductiveRule(Expr rel) + { + for (auto a : ruleManager.outgs[rel]) + { + if (ruleManager.chcs[a].srcRelation == ruleManager.chcs[a].dstRelation) + return a; + } + return -1; + } + + bool checkInit(int invNum, Expr rel) + { + for (int i = 0; i < ruleManager.chcs.size(); i++) + { + auto & a = ruleManager.chcs[i]; + if (a.isFact && a.dstRelation == rel) + { + bool res = checkCHC(a); + if (!res) + { + SamplFactory& sf = sfs[invNum].back(); + Sampl& s = sf.exprToSampl(candidates[invNum]); + sf.assignPrioritiesForFailed(); + } + return res; + } + } + return true; + } + + bool checkAllAdjacent(Expr rel) + { + for (auto &hr: ruleManager.chcs) + { + if ((hr.srcRelation == rel || hr.dstRelation == rel) && !hr.isQuery) + if (!checkCHC(hr)) return false; // TODO: use this knowledge somehow + } + return true; + } + + bool checkInductiveness(Expr rel) + { + int indRule = getInductiveRule(rel); + return (indRule == -1) ? checkAllAdjacent(rel) : checkCHC(ruleManager.chcs[indRule]); + } + + bool getCandForAdjacentRel(Expr formula, ExprVector& varsRenameFrom, Expr rel) + { + if (findNonlin(formula)) + { + // Currently unsupported, + // Cannot propagate anything, + // So simply try checking if "TRUE" is OK + return checkAllAdjacent(rel); + } + + ExprSet allVars; + ExprSet quantified; + expr::filter (formula, bind::IsConst(), std::inserter (allVars, allVars.begin ())); + for (auto & v : allVars) + if (find(varsRenameFrom.begin(), varsRenameFrom.end(), v) == varsRenameFrom.end()) + quantified.insert(v); + + AeValSolver ae(mk(m_efac), formula, quantified); + if (ae.solve()) + { + Expr newCand = ae.getValidSubset(); + if (newCand != NULL) + { + int invNum = getVarIndex(rel, decls); + for (auto & v : invarVars[invNum]) newCand = replaceAll(newCand, varsRenameFrom[v.first], v.second); + return checkCand(invNum, newCand); + } + } + return false; + } + + // TODO: try propagating learned lemmas too + bool propagate(int invNum, Expr cand) + { + bool res = true; + Expr rel = decls[invNum]; + for (int i = 0; i < ruleManager.chcs.size(); i++) + { + auto & a = ruleManager.chcs[i]; + if (a.srcRelation == a.dstRelation) continue; + + // forward: + if (a.srcRelation == rel && find(checked.begin(), checked.end(), a.dstRelation) == checked.end() && !a.isQuery) + { + Expr replCand = cand; + for (auto & v : invarVars[invNum]) replCand = replaceAll(replCand, v.second, a.srcVars[v.first]); + res = res && getCandForAdjacentRel (mk (replCand, a.body), a.dstVars, a.dstRelation); + } + + // backward (very similarly): + if (a.dstRelation == rel && find(checked.begin(), checked.end(), a.srcRelation) == checked.end() && !a.isFact) + { + Expr replCand = cand; + for (auto & v : invarVars[invNum]) replCand = replaceAll(replCand, v.second, a.dstVars[v.first]); + res = res && getCandForAdjacentRel (mk (replCand, a.body), a.srcVars, a.srcRelation); + } + } + return res; + } + + bool checkCand(int curInv, Expr cand) + { + Expr rel = decls[curInv]; +// outs () << " -- cand for " << *rel << ": " << *cand << "\n"; + candidates[curInv] = cand; + + if (!checkInit(curInv, rel)) return false; + if (!checkInductiveness(rel)) return false; + + checked.insert(rel); + bool res = propagate(curInv, cand); + if (res) + { +// outs() << "lemma learned for " << *rel << "\n"; + SamplFactory& sf = sfs[curInv].back(); + sf.learnedExprs.insert(cand); + Sampl& s = sf.exprToSampl(cand); + sf.assignPrioritiesForLearned(); + } + return res; + } + + void synthesize(int maxAttempts, char * outfile) + { + int curInv = 0; + for (int i = 0; i < maxAttempts; i++) + { + checked.clear(); + candidates.clear(); + SamplFactory& sf = sfs[curInv].back(); + Expr cand = sf.getFreshCandidate(); + if (cand == NULL) continue; + + if (checkCand(curInv, cand) && checkAllLemmas()) { + outs () << "Success after " << (i+1) << " iterations\n"; + return; + } + + // next cand (to be sampled) + curInv = (curInv + 1) % invNumber; + // just natural order; TODO: find a smarter way to calculate; make parametrizable + } + } + + bool checkAllLemmas() + { + candidates.clear(); + for (auto &hr: ruleManager.chcs) + { + if (!checkCHC(hr)) { + if (!hr.isQuery) + assert(0); // only queries are allowed to fail + else + return false; // TODO: use this fact somehow + } + } + return true; + } + + bool checkCHC (HornRuleExt& hr) + { + m_smt_solver.reset(); + m_smt_solver.assertExpr (hr.body); + + if (!hr.isFact) + { + int ind = getVarIndex(hr.srcRelation, decls); + SamplFactory& sf = sfs[ind].back(); + Expr lmApp = sf.getAllLemmas(); + if (candidates[ind] != NULL) lmApp = mk(lmApp, candidates[ind]); + for (auto & v : invarVars[ind]) lmApp = replaceAll(lmApp, v.second, hr.srcVars[v.first]); + m_smt_solver.assertExpr(lmApp); + } + + if (!hr.isQuery) + { + int ind = getVarIndex(hr.dstRelation, decls); + SamplFactory& sf = sfs[ind].back(); + Expr lmApp = sf.getAllLemmas(); + if (candidates[ind] != NULL) lmApp = mk(lmApp, candidates[ind]); + for (auto & v : invarVars[ind]) lmApp = replaceAll(lmApp, v.second, hr.dstVars[v.first]); + m_smt_solver.assertExpr(mk(lmApp)); + } + + return !m_smt_solver.solve (); + } + }; + + inline void learnInvariants3(string smt, char * outfile, int maxAttempts, bool freqs, bool aggp) + { + ExprFactory m_efac; + EZ3 z3(m_efac); + + CHCs ruleManager(m_efac, z3); + ruleManager.parse(smt); + RndLearnerV3 ds(m_efac, z3, ruleManager, freqs, aggp); + + ds.setupSafetySolver(); + std::srand(std::time(0)); + + if (ruleManager.decls.size() <= 1) + { + outs() << "This is an experimental thing for multiple invariants.\nFor a single invariant synthsis, run --v1 or --v2.\n"; + return; + } + + ExprSet stub; + for (auto& dcl: ruleManager.decls) + { + ds.initializeDecl(dcl); + ds.doSeedMining(dcl->arg(0), stub); + } + + ds.calculateStatistics(); + ds.synthesize(maxAttempts, outfile); + } +} + +#endif diff --git a/tools/deep/DeepHorn.cpp b/tools/deep/DeepHorn.cpp index 002ecf7cb..975d36397 100644 --- a/tools/deep/DeepHorn.cpp +++ b/tools/deep/DeepHorn.cpp @@ -1,4 +1,5 @@ #include "deep/RndLearnerV2.hpp" +#include "deep/RndLearnerV3.hpp" using namespace ufo; using namespace std; @@ -41,6 +42,7 @@ int main (int argc, char ** argv) const char *OPT_HELP = "--help"; const char *OPT_V1 = "--v1"; const char *OPT_V2 = "--v2"; + const char *OPT_V3 = "--v3"; const char *OPT_MAX_ATTEMPTS = "--attempts"; const char *OPT_K_IND = "--kind"; const char *OPT_ITP = "--itp"; @@ -53,8 +55,8 @@ int main (int argc, char ** argv) if (getBoolValue(OPT_HELP, false, argc, argv) || argc == 1){ outs () << - "* * * FreqHorn v.0.2 - Copyright (C) 2017 * * *\n" << - " Grigory Fedyukovich & Sam Kaufman \n\n" << + "* * * FreqHorn v.0.3 - Copyright (C) 2018 * * *\n" << + " Grigory Fedyukovich et al \n\n" << "Usage: Purpose:\n" << " freqhorn [--help] show help\n" << " freqhorn [options] discover invariants for a system of constrained Horn clauses\n" << @@ -62,6 +64,7 @@ int main (int argc, char ** argv) "Options:\n" << " " << OPT_V1 << " original version (just one-by-one sampling)\n" " " << OPT_V2 << " (default) revised version (all-at once bootstrapping and sampling)\n\n" + " " << OPT_V3 << " Multi-loop version (in progress)\n\n" " " << OPT_MAX_ATTEMPTS << " maximal number of candidates to sample and check\n" << " " << OPT_OUT_FILE << " serialize invariants to `file.smt2`\n" << " " << OPT_GET_FREQS << " calculate frequency distributions and sample from them\n\n" << @@ -81,14 +84,15 @@ int main (int argc, char ** argv) bool vers1 = getBoolValue(OPT_V1, false, argc, argv); bool vers2 = getBoolValue(OPT_V2, false, argc, argv); - if (vers1 && vers2) + bool vers3 = getBoolValue(OPT_V3, false, argc, argv); + if (vers1 + vers2 + vers3 > 1) { outs() << "Only one version of the algorithm can be chosen\n"; return 0; } - if (!vers1 && !vers2) vers2 = true; // default - + if (!vers1 && !vers2 && !vers3) vers2 = true; // default + int maxAttempts = getIntValue(OPT_MAX_ATTEMPTS, 2000000, argc, argv); bool kinduction = getBoolValue(OPT_K_IND, false, argc, argv); bool densecode = getBoolValue(OPT_GET_FREQS, false, argc, argv); @@ -99,10 +103,12 @@ int main (int argc, char ** argv) int retry = getIntValue(OPT_RETRY, 3, argc, argv); char * outfile = getStrValue(OPT_OUT_FILE, NULL, argc, argv); - if (vers2) // run a revised algorithm + if (vers3) // new experimental algorithm for multiple loops + learnInvariants3(string(argv[argc-1]), outfile, maxAttempts, densecode, aggressivepruning); + else if (vers2) // run the TACAS'18 algorithm learnInvariants2(string(argv[argc-1]), outfile, maxAttempts, itp, batch, retry, densecode, aggressivepruning); - else // run an old algorithm + else // run the FMCAD'17 algorithm learnInvariants(string(argv[argc-1]), outfile, maxAttempts, kinduction, itp, densecode, addepsilon, aggressivepruning); return 0; From e98cd44aa385d04b3ebf7a1e37879391ee1920fe Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Sun, 6 May 2018 23:07:25 -0400 Subject: [PATCH 078/236] MultiFreqHorn: added bootstrapping, fixed few bugs --- include/ae/AeValSolver.hpp | 2 +- include/deep/RndLearnerV3.hpp | 40 ++++++++++++++++++++++++----------- include/sampl/Sampl.hpp | 9 ++++++-- 3 files changed, 36 insertions(+), 15 deletions(-) diff --git a/include/ae/AeValSolver.hpp b/include/ae/AeValSolver.hpp index 5cf2cabc1..93274d096 100644 --- a/include/ae/AeValSolver.hpp +++ b/include/ae/AeValSolver.hpp @@ -258,7 +258,7 @@ namespace ufo { if (partitioning_size == 0){ if (debug) outs() << "WARNING: Trivial valid subset (equal to False) due to 0 iterations\n"; - return NULL; + return mk(efac); } Expr prs = disjoin(projections, efac); if (isOpX(s)) return prs; diff --git a/include/deep/RndLearnerV3.hpp b/include/deep/RndLearnerV3.hpp index c4279697b..6db44e851 100644 --- a/include/deep/RndLearnerV3.hpp +++ b/include/deep/RndLearnerV3.hpp @@ -53,8 +53,11 @@ namespace ufo { for (auto &hr: ruleManager.chcs) { - if ((hr.srcRelation == rel || hr.dstRelation == rel) && !hr.isQuery) - if (!checkCHC(hr)) return false; // TODO: use this knowledge somehow + if (( (hr.srcRelation == rel && + find(checked.begin(), checked.end(), hr.dstRelation) != checked.end()) + || (hr.dstRelation == rel && + find(checked.begin(), checked.end(), hr.srcRelation) != checked.end()))) + if (!hr.isQuery && !checkCHC(hr)) return false; // TODO: use this knowledge somehow } return true; } @@ -86,14 +89,11 @@ namespace ufo if (ae.solve()) { Expr newCand = ae.getValidSubset(); - if (newCand != NULL) - { - int invNum = getVarIndex(rel, decls); - for (auto & v : invarVars[invNum]) newCand = replaceAll(newCand, varsRenameFrom[v.first], v.second); - return checkCand(invNum, newCand); - } + int invNum = getVarIndex(rel, decls); + for (auto & v : invarVars[invNum]) newCand = replaceAll(newCand, varsRenameFrom[v.first], v.second); + return checkCand(invNum, newCand); } - return false; + return true; } // TODO: try propagating learned lemmas too @@ -138,7 +138,7 @@ namespace ufo bool res = propagate(curInv, cand); if (res) { -// outs() << "lemma learned for " << *rel << "\n"; +// outs() << "lemma learned for " << *rel << ":\n " << *cand << "\n"; SamplFactory& sf = sfs[curInv].back(); sf.learnedExprs.insert(cand); Sampl& s = sf.exprToSampl(cand); @@ -169,6 +169,21 @@ namespace ufo } } + bool bootstrap(map& cands){ + // TODO: batching + for (auto & dcl: decls) { + for (auto & cand : cands[dcl]) { + checked.clear(); + candidates.clear(); + if (checkCand(getVarIndex(dcl, decls), cand) && checkAllLemmas()) { + outs () << "Success after bootstrapping\n"; + return true; + } + } + } + return false; + } + bool checkAllLemmas() { candidates.clear(); @@ -231,14 +246,15 @@ namespace ufo return; } - ExprSet stub; + map cands; for (auto& dcl: ruleManager.decls) { ds.initializeDecl(dcl); - ds.doSeedMining(dcl->arg(0), stub); + ds.doSeedMining(dcl->arg(0), cands[dcl->arg(0)]); } ds.calculateStatistics(); + if (ds.bootstrap(cands)) return; ds.synthesize(maxAttempts, outfile); } } diff --git a/include/sampl/Sampl.hpp b/include/sampl/Sampl.hpp index 06d4fade7..a9cc8142b 100644 --- a/include/sampl/Sampl.hpp +++ b/include/sampl/Sampl.hpp @@ -35,7 +35,6 @@ namespace ufo private: ExprFactory &m_efac; - ExprVector vars; vector samples; density hasBooleanComb; @@ -104,6 +103,13 @@ namespace ufo int maxArity = 0; set orArities; + if (samples.size() == 0) + { + // artificially add one default sample in case there is nothing here + // TODO: find a better solution + exprToSampl (mk(lf.getVars()[0], mkTerm (mpz_class (0), m_efac))); + } + for (auto &s : samples) { maxArity = max (maxArity, s.arity()); @@ -117,7 +123,6 @@ namespace ufo orArities.insert(i); } - assert(orArities.size() > 0); lf.initDensities(orArities); bf.initDensities(); From 00901feeea1df75d52a5e7a0b50c682a8e58b61c Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Tue, 8 May 2018 23:15:10 -0400 Subject: [PATCH 079/236] MultiFreqHorn: enlarged set of seeds by QE-based propagation --- .../samples_multiple_inv_07.smt2 | 38 ++++++ include/deep/RndLearnerV3.hpp | 116 +++++++++++++----- 2 files changed, 125 insertions(+), 29 deletions(-) create mode 100644 bench_horn_multiple/samples_multiple_inv_07.smt2 diff --git a/bench_horn_multiple/samples_multiple_inv_07.smt2 b/bench_horn_multiple/samples_multiple_inv_07.smt2 new file mode 100644 index 000000000..a65b6fc78 --- /dev/null +++ b/bench_horn_multiple/samples_multiple_inv_07.smt2 @@ -0,0 +1,38 @@ +(declare-rel FUN (Int Int)) +(declare-rel SAD (Int Int)) +(declare-var k Int) +(declare-var k1 Int) +(declare-var j Int) +(declare-var j1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= k 0) (= j 0)) (FUN k j))) + +(rule (=> + (and + (FUN k j) + (< j 10) + (= k1 (+ k 1)) + (= j1 (+ j 1)) + ) + (FUN k1 j1) + ) +) + +(rule (=> (and (FUN k j) (>= j 10) (= k1 k) (= j1 0)) (SAD k1 j1))) + +(rule (=> + (and + (SAD k j) + (< j 10) + (= k1 (+ k 1)) + (= j1 (+ j 1)) + ) + (SAD k1 j1) + ) +) + +(rule (=> (and (SAD k j) (>= j 10) (< k 20)) fail)) + +(query fail) diff --git a/include/deep/RndLearnerV3.hpp b/include/deep/RndLearnerV3.hpp index 6db44e851..8bca0b001 100644 --- a/include/deep/RndLearnerV3.hpp +++ b/include/deep/RndLearnerV3.hpp @@ -61,23 +61,15 @@ namespace ufo } return true; } - + bool checkInductiveness(Expr rel) { int indRule = getInductiveRule(rel); return (indRule == -1) ? checkAllAdjacent(rel) : checkCHC(ruleManager.chcs[indRule]); } - bool getCandForAdjacentRel(Expr formula, ExprVector& varsRenameFrom, Expr rel) + Expr eliminateQuantifiers(Expr formula, ExprVector& varsRenameFrom, int invNum) { - if (findNonlin(formula)) - { - // Currently unsupported, - // Cannot propagate anything, - // So simply try checking if "TRUE" is OK - return checkAllAdjacent(rel); - } - ExprSet allVars; ExprSet quantified; expr::filter (formula, bind::IsConst(), std::inserter (allVars, allVars.begin ())); @@ -89,11 +81,33 @@ namespace ufo if (ae.solve()) { Expr newCand = ae.getValidSubset(); - int invNum = getVarIndex(rel, decls); for (auto & v : invarVars[invNum]) newCand = replaceAll(newCand, varsRenameFrom[v.first], v.second); - return checkCand(invNum, newCand); + return newCand; } - return true; + return mk(m_efac); + } + + bool getCandForAdjacentRel(Expr formula, ExprVector& varsRenameFrom, Expr rel) + { + if (findNonlin(formula)) + { + // Currently unsupported, + // Cannot propagate anything, + // So simply try checking if "TRUE" is OK + return checkAllAdjacent(rel); + } + + int invNum = getVarIndex(rel, decls); + Expr newCand = eliminateQuantifiers(formula, varsRenameFrom, invNum); + if (!isOpX(newCand)) return checkCand(invNum, newCand); + else return true; + } + + // similar to getCandForAdjacentRel, but not recursive + Expr getSeedsByQE(Expr formula, ExprVector& varsRenameFrom, Expr rel) + { + if (findNonlin(formula)) return mk(m_efac); + return eliminateQuantifiers(formula, varsRenameFrom, getVarIndex(rel, decls)); } // TODO: try propagating learned lemmas too @@ -101,25 +115,24 @@ namespace ufo { bool res = true; Expr rel = decls[invNum]; - for (int i = 0; i < ruleManager.chcs.size(); i++) + for (auto & hr : ruleManager.chcs) { - auto & a = ruleManager.chcs[i]; - if (a.srcRelation == a.dstRelation) continue; + if (hr.srcRelation == hr.dstRelation) continue; // forward: - if (a.srcRelation == rel && find(checked.begin(), checked.end(), a.dstRelation) == checked.end() && !a.isQuery) + if (hr.srcRelation == rel && find(checked.begin(), checked.end(), hr.dstRelation) == checked.end() && !hr.isQuery) { Expr replCand = cand; - for (auto & v : invarVars[invNum]) replCand = replaceAll(replCand, v.second, a.srcVars[v.first]); - res = res && getCandForAdjacentRel (mk (replCand, a.body), a.dstVars, a.dstRelation); + for (auto & v : invarVars[invNum]) replCand = replaceAll(replCand, v.second, hr.srcVars[v.first]); + res = res && getCandForAdjacentRel (mk (replCand, hr.body), hr.dstVars, hr.dstRelation); } // backward (very similarly): - if (a.dstRelation == rel && find(checked.begin(), checked.end(), a.srcRelation) == checked.end() && !a.isFact) + if (hr.dstRelation == rel && find(checked.begin(), checked.end(), hr.srcRelation) == checked.end() && !hr.isFact) { Expr replCand = cand; - for (auto & v : invarVars[invNum]) replCand = replaceAll(replCand, v.second, a.dstVars[v.first]); - res = res && getCandForAdjacentRel (mk (replCand, a.body), a.srcVars, a.srcRelation); + for (auto & v : invarVars[invNum]) replCand = replaceAll(replCand, v.second, hr.dstVars[v.first]); + res = res && getCandForAdjacentRel (mk (replCand, hr.body), hr.srcVars, hr.srcRelation); } } return res; @@ -133,12 +146,12 @@ namespace ufo if (!checkInit(curInv, rel)) return false; if (!checkInductiveness(rel)) return false; - + checked.insert(rel); bool res = propagate(curInv, cand); if (res) { -// outs() << "lemma learned for " << *rel << ":\n " << *cand << "\n"; +// outs() << " lemma learned for " << *rel << ":\n " << *cand << "\n"; SamplFactory& sf = sfs[curInv].back(); sf.learnedExprs.insert(cand); Sampl& s = sf.exprToSampl(cand); @@ -169,6 +182,53 @@ namespace ufo } } + // similar to propagate, but not recursive and w/o checking + void propagateSeeds(int invNum, Expr cand, map& cands) + { + Expr rel = decls[invNum]; + for (auto & hr : ruleManager.chcs) + { + if (hr.srcRelation == hr.dstRelation) continue; + + if (hr.srcRelation == rel && find(checked.begin(), checked.end(), hr.dstRelation) == checked.end() && !hr.isQuery) + { + Expr replCand = cand; + for (auto & v : invarVars[invNum]) replCand = replaceAll(replCand, v.second, hr.srcVars[v.first]); + Expr newcand = getSeedsByQE (mk (replCand, hr.body), hr.dstVars, hr.dstRelation); +// outs () << " propagated seed for " << *hr.dstRelation << ": " << *newcand << "\n"; + cands[hr.dstRelation].insert(newcand); + } + + if (hr.dstRelation == rel && find(checked.begin(), checked.end(), hr.srcRelation) == checked.end() && !hr.isFact) + { + Expr replCand = cand; + for (auto & v : invarVars[invNum]) replCand = replaceAll(replCand, v.second, hr.dstVars[v.first]); + Expr newcand = getSeedsByQE (mk (replCand, hr.body), hr.srcVars, hr.srcRelation); +// outs () << " propagated seed for " << *hr.srcRelation << ": " << *newcand << "\n"; + cands[hr.srcRelation].insert(newcand); + } + } + } + + // adapted from doSeedMining + void getSeeds(Expr invRel, map& cands) + { + int ind = getVarIndex(invRel, decls); + SamplFactory& sf = sfs[ind].back(); + for (auto &hr : ruleManager.chcs) + { + if (hr.dstRelation != invRel && hr.srcRelation != invRel) continue; + SeedMiner sm (hr, invRel, invarVars[ind], sf.lf.nonlinVars); + sm.analyzeCode(); + for (auto &cand : sm.candidates) + { +// outs () << "seed for " << *invRel << ": " << *cand << "\n"; + cands[invRel].insert(cand); + propagateSeeds(ind, cand, cands); + } + } + } + bool bootstrap(map& cands){ // TODO: batching for (auto & dcl: decls) { @@ -247,11 +307,9 @@ namespace ufo } map cands; - for (auto& dcl: ruleManager.decls) - { - ds.initializeDecl(dcl); - ds.doSeedMining(dcl->arg(0), cands[dcl->arg(0)]); - } + for (auto& dcl: ruleManager.decls) ds.initializeDecl(dcl); + for (auto& dcl: ruleManager.decls) ds.getSeeds(dcl->arg(0), cands); + for (auto& dcl: ruleManager.decls) ds.doSeedMining(dcl->arg(0), cands[dcl->arg(0)]); ds.calculateStatistics(); if (ds.bootstrap(cands)) return; From 84ef5da07194199a1075b29626edfc4f97c838c8 Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Wed, 9 May 2018 15:25:35 -0400 Subject: [PATCH 080/236] MultiFreqHorn: weakening of propagated candidates --- .../samples_multiple_inv_07.smt2 | 8 +-- .../samples_multiple_inv_08.smt2 | 52 +++++++++++++++++++ include/deep/RndLearnerV3.hpp | 42 +++++++++++---- 3 files changed, 89 insertions(+), 13 deletions(-) create mode 100644 bench_horn_multiple/samples_multiple_inv_08.smt2 diff --git a/bench_horn_multiple/samples_multiple_inv_07.smt2 b/bench_horn_multiple/samples_multiple_inv_07.smt2 index a65b6fc78..1605a98f2 100644 --- a/bench_horn_multiple/samples_multiple_inv_07.smt2 +++ b/bench_horn_multiple/samples_multiple_inv_07.smt2 @@ -12,7 +12,7 @@ (rule (=> (and (FUN k j) - (< j 10) + (< j 1000) (= k1 (+ k 1)) (= j1 (+ j 1)) ) @@ -20,12 +20,12 @@ ) ) -(rule (=> (and (FUN k j) (>= j 10) (= k1 k) (= j1 0)) (SAD k1 j1))) +(rule (=> (and (FUN k j) (>= j 1000) (= k1 k) (= j1 0)) (SAD k1 j1))) (rule (=> (and (SAD k j) - (< j 10) + (< j 1000) (= k1 (+ k 1)) (= j1 (+ j 1)) ) @@ -33,6 +33,6 @@ ) ) -(rule (=> (and (SAD k j) (>= j 10) (< k 20)) fail)) +(rule (=> (and (SAD k j) (>= j 1000) (< k 2000)) fail)) (query fail) diff --git a/bench_horn_multiple/samples_multiple_inv_08.smt2 b/bench_horn_multiple/samples_multiple_inv_08.smt2 new file mode 100644 index 000000000..6caa7ea9d --- /dev/null +++ b/bench_horn_multiple/samples_multiple_inv_08.smt2 @@ -0,0 +1,52 @@ +(declare-rel FUN (Int Int)) +(declare-rel SAD (Int Int)) +(declare-rel WEE (Int Int)) +(declare-var k Int) +(declare-var k1 Int) +(declare-var j Int) +(declare-var j1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= k 0) (= j 0)) (FUN k j))) + +(rule (=> + (and + (FUN k j) + (< j 1000) + (= k1 (+ k 1)) + (= j1 (+ j 1)) + ) + (FUN k1 j1) + ) +) + +(rule (=> (and (FUN k j) (>= j 1000) (= k1 k) (= j1 0)) (SAD k1 j1))) + +(rule (=> + (and + (SAD k j) + (< j 1000) + (= k1 (+ k 1)) + (= j1 (+ j 1)) + ) + (SAD k1 j1) + ) +) + +(rule (=> (and (SAD k j) (>= j 1000) (= k1 k) (= j1 0)) (WEE k1 j1))) + +(rule (=> + (and + (WEE k j) + (< j 1000) + (= k1 (+ k 1)) + (= j1 (+ j 1)) + ) + (WEE k1 j1) + ) +) + +(rule (=> (and (WEE k j) (>= j 1000) (< k 3000)) fail)) + +(query fail) diff --git a/include/deep/RndLearnerV3.hpp b/include/deep/RndLearnerV3.hpp index 8bca0b001..9caac3134 100644 --- a/include/deep/RndLearnerV3.hpp +++ b/include/deep/RndLearnerV3.hpp @@ -87,8 +87,9 @@ namespace ufo return mk(m_efac); } - bool getCandForAdjacentRel(Expr formula, ExprVector& varsRenameFrom, Expr rel) + bool getCandForAdjacentRel(Expr candToProp, Expr constraint, ExprVector& varsRenameFrom, Expr rel) { + Expr formula = mk(candToProp, constraint); if (findNonlin(formula)) { // Currently unsupported, @@ -97,17 +98,40 @@ namespace ufo return checkAllAdjacent(rel); } + ExprSet dsjs; + getDisj(candToProp, dsjs); + ExprSet newSeedDsjs; int invNum = getVarIndex(rel, decls); - Expr newCand = eliminateQuantifiers(formula, varsRenameFrom, invNum); - if (!isOpX(newCand)) return checkCand(invNum, newCand); + + for (auto & d : dsjs) + newSeedDsjs.insert(eliminateQuantifiers(mk(d, constraint), varsRenameFrom, invNum)); + + Expr newCand = disjoin(newSeedDsjs, m_efac); + + if (!isOpX(newCand)) + { + // TODO: more fine-grained refinement + bool res = checkCand(invNum, newCand); + if (res) return res; + + candidates[invNum] = mk(m_efac); + return checkAllAdjacent(rel); + } else return true; } // similar to getCandForAdjacentRel, but not recursive - Expr getSeedsByQE(Expr formula, ExprVector& varsRenameFrom, Expr rel) + Expr getSeedsByQE(Expr candToProp, Expr constraint, ExprVector& varsRenameFrom, Expr rel) { + Expr formula = mk(candToProp, constraint); if (findNonlin(formula)) return mk(m_efac); - return eliminateQuantifiers(formula, varsRenameFrom, getVarIndex(rel, decls)); + ExprSet dsjs; + getDisj(candToProp, dsjs); + ExprSet newSeedDsjs; + for (auto & d : dsjs) + newSeedDsjs.insert(eliminateQuantifiers(mk(d, constraint), varsRenameFrom, getVarIndex(rel, decls))); + + return disjoin(newSeedDsjs, m_efac); } // TODO: try propagating learned lemmas too @@ -124,7 +148,7 @@ namespace ufo { Expr replCand = cand; for (auto & v : invarVars[invNum]) replCand = replaceAll(replCand, v.second, hr.srcVars[v.first]); - res = res && getCandForAdjacentRel (mk (replCand, hr.body), hr.dstVars, hr.dstRelation); + res = res && getCandForAdjacentRel (replCand, hr.body, hr.dstVars, hr.dstRelation); } // backward (very similarly): @@ -132,7 +156,7 @@ namespace ufo { Expr replCand = cand; for (auto & v : invarVars[invNum]) replCand = replaceAll(replCand, v.second, hr.dstVars[v.first]); - res = res && getCandForAdjacentRel (mk (replCand, hr.body), hr.srcVars, hr.srcRelation); + res = res && getCandForAdjacentRel (replCand, hr.body, hr.srcVars, hr.srcRelation); } } return res; @@ -194,7 +218,7 @@ namespace ufo { Expr replCand = cand; for (auto & v : invarVars[invNum]) replCand = replaceAll(replCand, v.second, hr.srcVars[v.first]); - Expr newcand = getSeedsByQE (mk (replCand, hr.body), hr.dstVars, hr.dstRelation); + Expr newcand = getSeedsByQE (replCand, hr.body, hr.dstVars, hr.dstRelation); // outs () << " propagated seed for " << *hr.dstRelation << ": " << *newcand << "\n"; cands[hr.dstRelation].insert(newcand); } @@ -203,7 +227,7 @@ namespace ufo { Expr replCand = cand; for (auto & v : invarVars[invNum]) replCand = replaceAll(replCand, v.second, hr.dstVars[v.first]); - Expr newcand = getSeedsByQE (mk (replCand, hr.body), hr.srcVars, hr.srcRelation); + Expr newcand = getSeedsByQE (replCand, hr.body, hr.srcVars, hr.srcRelation); // outs () << " propagated seed for " << *hr.srcRelation << ": " << *newcand << "\n"; cands[hr.srcRelation].insert(newcand); } From 164164ea284805a886bb11a5e3e3e88d765d24c4 Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Thu, 10 May 2018 00:19:04 -0400 Subject: [PATCH 081/236] MultiFreqHorn: fixed lemma learning --- include/deep/RndLearnerV3.hpp | 131 +++++++++++++++++++++++++--------- 1 file changed, 98 insertions(+), 33 deletions(-) diff --git a/include/deep/RndLearnerV3.hpp b/include/deep/RndLearnerV3.hpp index 9caac3134..f1e86646d 100644 --- a/include/deep/RndLearnerV3.hpp +++ b/include/deep/RndLearnerV3.hpp @@ -19,16 +19,6 @@ namespace ufo RndLearnerV3 (ExprFactory &efac, EZ3 &z3, CHCs& r, bool freqs, bool aggp) : RndLearner (efac, z3, r, /*k-induction*/ false, freqs, /*epsilon*/ true, aggp){} - int getInductiveRule(Expr rel) - { - for (auto a : ruleManager.outgs[rel]) - { - if (ruleManager.chcs[a].srcRelation == ruleManager.chcs[a].dstRelation) - return a; - } - return -1; - } - bool checkInit(int invNum, Expr rel) { for (int i = 0; i < ruleManager.chcs.size(); i++) @@ -64,8 +54,14 @@ namespace ufo bool checkInductiveness(Expr rel) { - int indRule = getInductiveRule(rel); - return (indRule == -1) ? checkAllAdjacent(rel) : checkCHC(ruleManager.chcs[indRule]); + for (auto &hr: ruleManager.chcs) + { + if ((hr.srcRelation == rel && hr.dstRelation == rel) || + (hr.srcRelation == rel && find(checked.begin(), checked.end(), hr.dstRelation) != checked.end()) || + (hr.dstRelation == rel && find(checked.begin(), checked.end(), hr.srcRelation) != checked.end())) + if (!hr.isQuery && !checkCHC(hr)) return false; + } + return true; } Expr eliminateQuantifiers(Expr formula, ExprVector& varsRenameFrom, int invNum) @@ -95,7 +91,11 @@ namespace ufo // Currently unsupported, // Cannot propagate anything, // So simply try checking if "TRUE" is OK - return checkAllAdjacent(rel); + if (checkAllAdjacent(rel)){ + checked.insert(rel); + return true; + } + return false; } ExprSet dsjs; @@ -108,14 +108,53 @@ namespace ufo Expr newCand = disjoin(newSeedDsjs, m_efac); + // reserve + ExprSet checkedTmp = checked; + map candidatesTmp = candidates; + if (!isOpX(newCand)) { - // TODO: more fine-grained refinement - bool res = checkCand(invNum, newCand); - if (res) return res; + ExprSet cnjs; + getConj(newCand, cnjs); + bool resFinal = false; + if (cnjs.size() > 1) + { + resFinal = false; + for (auto & a : cnjs) // TODO: Houdini style + { + candidates[invNum] = a; + if (!checkAllAdjacent(rel)) { + candidates = candidatesTmp; + continue; + } + + bool res = checkCand(invNum, a); + if (res) + { + checkedTmp = checked; + candidatesTmp = candidates; + } + else + { + checked = checkedTmp; + candidates = candidatesTmp; + } + resFinal = resFinal || res; + } + } + else + { + resFinal = checkCand(invNum, newCand); + } - candidates[invNum] = mk(m_efac); - return checkAllAdjacent(rel); + if (resFinal) return true; + checked = checkedTmp; + candidates = candidatesTmp; + if (checkAllAdjacent(rel)){ + checked.insert(rel); + return true; + } + return false; } else return true; } @@ -172,16 +211,41 @@ namespace ufo if (!checkInductiveness(rel)) return false; checked.insert(rel); - bool res = propagate(curInv, cand); - if (res) + return propagate(curInv, cand); + } + + bool learn (int curInv, Expr cand) + { + if (checkCand(curInv, cand)) { -// outs() << " lemma learned for " << *rel << ":\n " << *cand << "\n"; - SamplFactory& sf = sfs[curInv].back(); - sf.learnedExprs.insert(cand); - Sampl& s = sf.exprToSampl(cand); - sf.assignPrioritiesForLearned(); + for (auto & a : candidates) + { + if (a.second != NULL && !isOpX(a.second)) + { + SamplFactory& sf = sfs[a.first].back(); + sf.learnedExprs.insert(a.second); // TODO: split conjunctions +// outs() << " lemmas learned for " << *decls[a.first] << ": " << *a.second << "\n"; + } + } + + if (checkAllLemmas(false)) + { + return true; + } + else + { + for (auto & a : candidates) + { + if (a.second != NULL && !isOpX(a.second)) + { + SamplFactory& sf = sfs[a.first].back(); + Sampl& s = sf.exprToSampl(cand); // TODO: split conjunctions + sf.assignPrioritiesForLearned(); + } + } + } } - return res; + return false; } void synthesize(int maxAttempts, char * outfile) @@ -195,7 +259,8 @@ namespace ufo Expr cand = sf.getFreshCandidate(); if (cand == NULL) continue; - if (checkCand(curInv, cand) && checkAllLemmas()) { + if (learn(curInv, cand)) + { outs () << "Success after " << (i+1) << " iterations\n"; return; } @@ -259,7 +324,7 @@ namespace ufo for (auto & cand : cands[dcl]) { checked.clear(); candidates.clear(); - if (checkCand(getVarIndex(dcl, decls), cand) && checkAllLemmas()) { + if (learn(getVarIndex(dcl, decls), cand)) { outs () << "Success after bootstrapping\n"; return true; } @@ -268,12 +333,12 @@ namespace ufo return false; } - bool checkAllLemmas() + bool checkAllLemmas(bool addCand = true) { candidates.clear(); for (auto &hr: ruleManager.chcs) { - if (!checkCHC(hr)) { + if (!checkCHC(hr, addCand)) { if (!hr.isQuery) assert(0); // only queries are allowed to fail else @@ -283,7 +348,7 @@ namespace ufo return true; } - bool checkCHC (HornRuleExt& hr) + bool checkCHC (HornRuleExt& hr, bool addCand = true) { m_smt_solver.reset(); m_smt_solver.assertExpr (hr.body); @@ -293,7 +358,7 @@ namespace ufo int ind = getVarIndex(hr.srcRelation, decls); SamplFactory& sf = sfs[ind].back(); Expr lmApp = sf.getAllLemmas(); - if (candidates[ind] != NULL) lmApp = mk(lmApp, candidates[ind]); + if (addCand && candidates[ind] != NULL) lmApp = mk(lmApp, candidates[ind]); for (auto & v : invarVars[ind]) lmApp = replaceAll(lmApp, v.second, hr.srcVars[v.first]); m_smt_solver.assertExpr(lmApp); } @@ -303,7 +368,7 @@ namespace ufo int ind = getVarIndex(hr.dstRelation, decls); SamplFactory& sf = sfs[ind].back(); Expr lmApp = sf.getAllLemmas(); - if (candidates[ind] != NULL) lmApp = mk(lmApp, candidates[ind]); + if (addCand && candidates[ind] != NULL) lmApp = mk(lmApp, candidates[ind]); for (auto & v : invarVars[ind]) lmApp = replaceAll(lmApp, v.second, hr.dstVars[v.first]); m_smt_solver.assertExpr(mk(lmApp)); } From 3fd39d6a34d5180d2c116301215eed0738067880 Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Thu, 10 May 2018 00:57:57 -0400 Subject: [PATCH 082/236] small extension of the grammar --- include/ae/ExprSimpl.hpp | 29 +++++++++++++++++++---------- include/sampl/SeedMiner.hpp | 2 +- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index ef659960d..65c24f5f7 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -2280,7 +2280,6 @@ namespace ufo inline static Expr propagateEqualities (Expr exp) { ExprSet cnjs; - ExprSet newCnjs; ExprSet eqs; ExprSet trEqs; @@ -2291,13 +2290,23 @@ namespace ufo computeTransitiveClosure(eqs, trEqs); - for (auto &a : cnjs) + for (auto &a : trEqs) { if (isOpX(a)) { - newCnjs.insert(a); + bool toAdd = true; + for (auto & c : cnjs) + { + if (isOpX(c)) + { + if (c->left() == a->left() && c->right() == a->right()) { toAdd = false; break; } + if (c->left() == a->right() && c->right() == a->left()) { toAdd = false; break; } + } + } + if (toAdd) cnjs.insert(a); } - else +// TODO: double-check if it is needed: +/* else { Expr neg = mkNeg(a); for (auto &b : trEqs) @@ -2308,15 +2317,15 @@ namespace ufo bool eq2 = (repl2 == neg); bool eq3 = (repl2 == repl1); - if (eq1 && eq2 && eq3) newCnjs.insert(a); - else if (eq1) newCnjs.insert (mk (mk(neg, repl2))); - else if (eq2) newCnjs.insert (mk (mk(neg, repl1))); - else newCnjs.insert(mk (mk(neg, mk(repl1, repl2)))); + if (eq1 && eq2 && eq3) cnjs.insert(a); + else if (eq1) cnjs.insert (mk (mk(neg, repl2))); + else if (eq2) cnjs.insert (mk (mk(neg, repl1))); + else cnjs.insert(mk (mk(neg, mk(repl1, repl2)))); } - } + } */ } - return conjoin(newCnjs, exp->getFactory()); + return conjoin(cnjs, exp->getFactory()); } } diff --git a/include/sampl/SeedMiner.hpp b/include/sampl/SeedMiner.hpp index 8ed999873..dbefbc189 100644 --- a/include/sampl/SeedMiner.hpp +++ b/include/sampl/SeedMiner.hpp @@ -240,7 +240,7 @@ namespace ufo } else if (hr.isFact) { - coreProcess(body); + coreProcess(propagateEqualities(body)); } else { From 58e01c58ca09365deb8f352e9ac6e5d13802a6b8 Mon Sep 17 00:00:00 2001 From: Kumar Madhukar Date: Thu, 10 May 2018 16:48:59 +0530 Subject: [PATCH 083/236] behavior candidates changes --- CMakeLists.txt | 6 + include/deep/BndExpl.hpp | 71 ++++ include/deep/DataLearner.hpp | 668 +++++++++++++++++++++++++++++++++++ tools/deep/CMakeLists.txt | 2 +- tools/deep/DeepHorn.cpp | 23 +- 5 files changed, 767 insertions(+), 3 deletions(-) create mode 100644 include/deep/DataLearner.hpp diff --git a/CMakeLists.txt b/CMakeLists.txt index 22b92c6a3..e74dc3eea 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -184,6 +184,12 @@ endif() find_package(OpenMP) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") +find_package(Armadillo) +if (ARMADILLO_FOUND) + add_definitions(-DHAVE_ARMADILLO) + include_directories(${ARMADILLO_INCLUDE_DIR}) +endif() + install(DIRECTORY include/ DESTINATION include FILES_MATCHING diff --git a/include/deep/BndExpl.hpp b/include/deep/BndExpl.hpp index 9c1fcc153..30686d433 100644 --- a/include/deep/BndExpl.hpp +++ b/include/deep/BndExpl.hpp @@ -274,6 +274,77 @@ namespace ufo } return itp; } + + //TODO: support nested loops + bool unrollAndExecute(int trIndex, ufo::ZSolver & m_smt_solver, vector > & models, int k = 10, Expr initCondn = nullptr) + { + + int initIndex; + bool initFound = false; + + for (int i = 0; i < trIndex; i++) { + auto & r = ruleManager.chcs[i]; + if (r.isFact) { + initIndex = i; + initFound = true; + } + } + + if (!initFound && initCondn == nullptr) { + cout << "ERR: init not found for given transition (index: " << trIndex << ")" << endl; + return false; + } + + Expr init = initCondn == nullptr ? ruleManager.chcs[initIndex].body : initCondn; + + HornRuleExt& tr = ruleManager.chcs[trIndex]; + + for (int i = 0; i < tr.srcVars.size(); i++) { + init = replaceAll(init, tr.dstVars[i], tr.srcVars[i]); + } + + + vector trace; + for (int i = 0; i < k; i++) { + trace.push_back(trIndex); + } + + Expr unrolledTr = toExpr(trace); + + // cout << init << " && " << unrolledTr << endl; + + m_smt_solver.reset(); + m_smt_solver.assertExpr(init); + m_smt_solver.assertExpr(unrolledTr); + + if (!m_smt_solver.solve()) { + cout << init << " && " << unrolledTr << "\nfound to be unsat\n"; + return false; + } + + ZSolver::Model m = m_smt_solver.getModel(); + + for (auto vars : bindVars) { + vector model; + for (auto var : vars) { + int value; + if (var != m.eval(var)) { + stringstream tmpstream; + tmpstream << m.eval(var); + tmpstream >> value; + } else { + value = guessUniformly(1000)-500; + cout << "random guess for: " << var << endl; //DEBUG + } + cout << value << "\t";//DEBUG + model.push_back(value); + } + cout << endl;//DEBUG + models.push_back(model); + } + + return true; + } }; inline void unrollAndCheck(string smt, int bnd1, int bnd2) diff --git a/include/deep/DataLearner.hpp b/include/deep/DataLearner.hpp new file mode 100644 index 000000000..ee14c79f6 --- /dev/null +++ b/include/deep/DataLearner.hpp @@ -0,0 +1,668 @@ +#ifndef DATALEARNER__HPP__ +#define DATALEARNER__HPP__ + +// currently only polynomials upto degree 2 is supported + +#include +#include +#include +#include +#include +#include + +#include "armadillo" + +#include "Horn.hpp" +#include "BndExpl.hpp" + +using namespace std; +using namespace boost; + +namespace ufo +{ + + const double approxEqualTol = 0.001; + const char approxEqualMethod[] = "absdiff"; + + enum loglevel {NONE, ERROR, INFO, DEBUG}; + + unsigned int LOG_LEVEL = INFO; + + template + void printmsg(T t) + { + std::cout << t << std::endl; + } + + template + void printmsg(T t, Args... args) + { + std::cout << t << " "; + printmsg(args...); + } + + template + void printmsg(loglevel level, Args... args) + { + if (level <= LOG_LEVEL) { + printmsg(args...); + } + } + + class DataLearner + { + + private: + + struct armaApproxEqual + { + bool operator() (const double & a, const double & b) { + if (!arma::approx_equal(arma::vec(1).fill(a), arma::vec(1).fill(b), + approxEqualMethod, approxEqualTol)) { + return (a < b); + } + return false; + } + }; + + CHCs& ruleManager; + ExprFactory &m_efac; + ufo::ZSolver m_smt_solver; + + unsigned int numVars; + int trIndex; + arma::mat dataMatrix; + unsigned int prevDataSize; + + unsigned int curPolyDegree; + unsigned int maxPolyCompute[3]; + unsigned int numPolyCompute; + + map monomialToExpr; + + map largeCoeffToExpr; + + ExprSet polynomialsComputed; + vector basisComputed; + + // return nonzero on error + int + loadDataFromFile(const std::string & fileName) + { + dataMatrix.load(fileName, arma::csv_ascii); + + if (dataMatrix.n_cols != numVars+1) { + printmsg(ERROR, "data load failed from ", fileName); + printmsg(INFO, "vars: ", numVars, "\ncolumns read: ", dataMatrix.n_cols); + dataMatrix.clear(); + return 1; + } + + printmsg(INFO, "vars: ", numVars, "\n row x col ", dataMatrix.n_rows, dataMatrix.n_cols); + + return 0; + } + + arma::mat + computeMonomial(arma::mat data) + { + arma::mat monomialMatrix; + + if (curPolyDegree == 1) { + monomialMatrix.set_size(dataMatrix.n_rows, dataMatrix.n_cols); + for (int i = 0; i < dataMatrix.n_rows; i++) { + for (int j = 0; j < dataMatrix.n_cols; j++) { + monomialMatrix(i,j) = dataMatrix(i,j); + } + } + } else { + //compute all monomials upto degree 2 + monomialMatrix.set_size(dataMatrix.n_rows, (dataMatrix.n_cols * (dataMatrix.n_cols+1)) / 2); + for (int i = 0; i < dataMatrix.n_rows; i++) { + for(int j = 0, dmcol=0; j < dataMatrix.n_cols; j++) { + for (int k = j; k < dataMatrix.n_cols; k++, dmcol++) { + monomialMatrix(i, dmcol) = dataMatrix(i,j) * dataMatrix(i, k); + } + } + } + } + + return monomialMatrix; + } + + arma::mat + gaussjordan(arma::mat input) + { + unsigned int cur_row = 0; + unsigned int cur_col = 0; + arma::vec rowToPivot = arma::vec(input.n_rows); + const unsigned int UNDEFINED_PIVOT = 100; + + rowToPivot.fill(UNDEFINED_PIVOT); + + printmsg(DEBUG, "Before row\n", input); + + //row echleon form + while (cur_col < input.n_cols && cur_row < input.n_rows) { + + if (input(cur_row, cur_col) == 0) { + unsigned int next_nonzero; + for (next_nonzero = cur_row; next_nonzero < input.n_rows; next_nonzero++) { + if (input(next_nonzero, cur_col) != 0) { + break; + } + } + if (next_nonzero == input.n_rows) { + cur_col++; + continue; + } else { + input.swap_rows(cur_row, next_nonzero); + } + } + + if (input(cur_row, cur_col) != 1) { + double inverse = 1/input(cur_row, cur_col); + for (unsigned int k = cur_col; k < input.n_cols; k++) { + input(cur_row, k) = input(cur_row,k)*inverse; + } + } + + for (unsigned int j = cur_row+1; j < input.n_rows; j++) { + double f = input(j, cur_col)/input(cur_row, cur_col); + for (unsigned int k = 0; k < input.n_cols; k++) { + input(j,k) = input(j,k) - input(cur_row, k)*f; + } + input(j,cur_col) = 0; + } + + rowToPivot(cur_row) = cur_col; + + cur_col++; + cur_row++; + } + + rowToPivot(input.n_rows-1) = input.n_cols-1; + + //reduced row echloen form + if (cur_row != input.n_rows) { + //we have found a zero row before we reached last row + cur_row = cur_row-1; + } else { + cur_row = input.n_rows-1; + } + + cur_col = rowToPivot(cur_row); + + while (cur_row >= 0 && cur_row < input.n_rows) { + + cur_col = rowToPivot(cur_row); + + if (cur_col == UNDEFINED_PIVOT || input(cur_row,cur_col) == 0) { + cur_row--; + continue; + } + + for (unsigned int j = cur_row-1; j < input.n_rows; j--) { + double f = input(j,cur_col)/input(cur_row,cur_col); + for (unsigned int k = 0; k < input.n_cols; k++) { + input(j,k) = input(j,k) - input(cur_row,k)*f; + } + } + cur_row--; + } + + // printmsg(INFO, "after row reduced\n", input); + + std::vector independentVars; + + for (unsigned col = 0; col < input.n_cols; col++) { + if (col < input.n_rows && input(col, col) == 0) { + independentVars.push_back(col); + } + } + + arma::mat basis(input.n_cols, independentVars.size()); + unsigned int basis_col = 0; + + for (auto indVar : independentVars) { + for (unsigned int row = 0; row < input.n_rows; row++) { + if (rowToPivot[row] == UNDEFINED_PIVOT) { + continue; + } + //TODO: replace -2 with lcm of column + //printmsg(DEBUG, input(row,indVar), row, indVar); + basis(rowToPivot(row), basis_col) = -1*input(row, indVar); + } + basis(indVar,basis_col)=1; + basis_col++; + } + + return basis; + } + + void + computetime(const string & msg, clock_t & start) + { + printmsg(DEBUG, msg, (clock() - start)/(CLOCKS_PER_SEC/1000.0)); + start = clock(); + } + + bool + allowedPolyCoefficient(double val, Expr & coeffExpr) + { + //arma may not store exact 0 as val + if (arma::approx_equal(arma::vec(1).fill(0), arma::vec(1).fill(val), + approxEqualMethod, approxEqualTol)) { + return false; + } + + auto search = largeCoeffToExpr.find(val); + if (search != largeCoeffToExpr.end()) { + coeffExpr = search->second; + // printmsg(DEBUG, "coefficient ", coeffExpr); + return true; + } + + if (val < 10000 && val > -10000) { + return true; + } + + return false; + } + + int + algExprFromBasis(const arma::mat & basis, vector & polynomials) + { + + /*TODO: fix this; not working for 8.c*/ + // if (arma::all(arma::vectorise(basis))) { + // return 1; + // } + + // create equations of the form a_1*x_1 + a_2*x_2 + ... = 0 + // where a_1, a_2, etc are from basis columns values + // and x_1, x_2 etc are monomials from corresponding basis' rows + // to disallow unsound invariants like a_1 = 0 add only candidates with atleast two terms + Expr zero = mkTerm(mpz_class(0), m_efac); + for (int col = 0; col < basis.n_cols; col++) { + int numTerms = 0; + Expr poly = nullptr; + for (int row = 0; row < basis.n_rows; row++) { + //coeffcient is stored in a stream first to avoid incorrect type conversion error + std::stringstream coeffStream; + coeffStream << std::fixed << basis(row,col); + + Expr abstractCoeff = nullptr; + if (!allowedPolyCoefficient(basis(row,col), abstractCoeff)) { + continue; + } + + Expr mult; + if (abstractCoeff != nullptr) { + mult = mk(abstractCoeff, monomialToExpr[row]); + } else { + int coeff; + coeffStream >> coeff; + mult = mk(mkTerm(mpz_class(coeff), m_efac), monomialToExpr[row]); + } + + if (poly != nullptr) { + poly = mk(poly, mult); + } else { + poly = mult; + } + + numTerms++; + } + + if (poly != nullptr && numTerms > 1) { + poly = mk(poly, zero); + polynomials.push_back(poly); + } + } + + return 0; + } + + void + addpolytocands(ExprSet & cands, Expr poly) + { + cands.insert(poly); + } + + void + addpolytocands(ExprVector & cands, Expr poly) + { + cands.push_back(poly); + } + + void + initTrIndex(Expr invDecl) + { + for (int i = 0; i < ruleManager.chcs.size(); i++) { + auto & r = ruleManager.chcs[i]; + if (r.isInductive && r.srcRelation == invDecl && r.dstRelation == invDecl) { + trIndex = i; + } + } + } + + void + initInvVars(Expr invDecl) + { + monomialToExpr.insert(pair(0, mkTerm(mpz_class(1), m_efac))); + + // Expr arg = invDecl->arg(0); + for (auto var : ruleManager.invVars[invDecl]) { + numVars++; + monomialToExpr.insert(pair(numVars, var)); + } + + //degree 2 monomials + for (unsigned int vIndex1 = 1, mIndex = numVars+1; vIndex1 <= numVars; vIndex1++) { + for (int vIndex2 = vIndex1; vIndex2 <= numVars; vIndex2++) { + monomialToExpr.insert(std::pair(mIndex, + mk(monomialToExpr[vIndex1], + monomialToExpr[vIndex2]))); + mIndex++; + } + } + + } + + // adds monomial and constant multiples of it if corresponding + // monomial column in datamatrix is constant + void + initLargeCoeffToExpr() + { + // first column is 1's + for (unsigned int col = 1; col < dataMatrix.n_cols; col++) { + + double tmp = dataMatrix(0, col); + unsigned int row; + + for (row = 1; row < dataMatrix.n_rows; row++) { + if (!arma::approx_equal(arma::vec(1).fill(dataMatrix(row, col)), arma::vec(1).fill(tmp), + approxEqualMethod, approxEqualTol)) { + break; + } + } + + if (row != dataMatrix.n_rows) { + continue; + } + + Expr var = monomialToExpr[col]; + for (int multiple = 1; multiple < 4; multiple++) { + Expr val1 = mk(mkTerm(mpz_class(multiple), m_efac), var); + Expr val2 = mk(mkTerm(mpz_class(-1*multiple), m_efac), var); + largeCoeffToExpr.insert(make_pair(multiple*tmp, val1)); + largeCoeffToExpr.insert(make_pair(-1*multiple*tmp, val2)); + } + + } + } + + + Expr + modelToExpr(vector model) + { + ExprVector eqs; + for (unsigned int index = 0; index < model.size(); index++) { + Expr var = monomialToExpr[index+1]; + eqs.push_back(mk(var, mkTerm(mpz_class(model[index]), m_efac))); + } + + return conjoin(eqs, m_efac); + } + + // return true only if all the data satisfies basis + bool + checkBasisSatisfiesData(arma::mat monomial, arma::vec basis) + { + if (monomial.n_cols != basis.n_elem) { + return false; + } + + arma::rowvec basisRow = arma::conv_to::from(basis); + + for (int row = 0; row < monomial.n_rows; row++) { + double sum = 0; + for (int col = 0; col < monomial.n_cols; col++) { + sum += basisRow(col) * monomial(row, col); + } + if (!arma::approx_equal(arma::vec(1).fill(sum), arma::vec(1).fill(0), + approxEqualMethod, approxEqualTol)) { + return false; + } + } + + return true; + + } + + template + int + getPolynomialsFromData(const arma::mat & data, CONTAINERT & cands, Expr assume = nullptr) + { + if (data.n_elem == 0) { + return -1; + } + + clock_t start = clock(); + + arma::mat monomialMatrix = computeMonomial(data); + + arma::mat basis = gaussjordan(monomialMatrix); + + // printmsg(INFO, "before basis check ", basis); + + if (basis.n_cols == 0) { + return 0; + } + + // cout << endl << basis << endl; //DEBUG + + computetime("basis computation time ", start); + + // check if column of basis is unique + if (assume == nullptr) { + for (int col = 0; col < basis.n_cols; col++) { + int oldcol; + for (oldcol = 0; oldcol < basisComputed[curPolyDegree].n_cols; oldcol++) { + if (arma::approx_equal(basis.col(col), basisComputed[curPolyDegree].col(oldcol), + approxEqualMethod, approxEqualTol)) { + basis.shed_col(col); + break; + } + } + } + + for (int col = 0; col < basis.n_cols; col++) { + basisComputed[curPolyDegree].insert_cols(basisComputed[curPolyDegree].n_cols, basis.col(col)); + } + } + + computetime("data unique check time ", start); + + // for some reason previous monomialmatrix is overwritten so copy to a different matrix + arma::mat monomialMatrix2 = computeMonomial(data); + for (int col = 0; col < basis.n_cols; col++) { + if (!checkBasisSatisfiesData(monomialMatrix2, basis.col(col))) { + basis.shed_col(col); + continue; + } + + } + + // if (assume != nullptr) { + // printmsg(INFO, "\n dataMatrix \n", dataMatrix); + // printmsg(INFO, "\n data \n", data); + // printmsg(INFO, "\n monomial \n", monomialMatrix); + // printmsg(INFO, "\n basis \n", basis); + // } + + vector polynomials; + polynomials.reserve(basis.n_cols); + + if (!algExprFromBasis(basis, polynomials)) { + for (auto poly : polynomials) { + Expr cand = (assume == nullptr) ? poly : mk(assume, poly); + if (polynomialsComputed.find(cand) == polynomialsComputed.end()) { + addpolytocands(cands, cand); + polynomialsComputed.insert(cand); + printmsg(INFO, "Adding polynomial: ", cand); + } + } + + computetime("poly conversion time ", start); + + return polynomials.size(); + } + + return 0; + + } + + //non-zero on error + int + loadDataFromSMT() + { + BndExpl bnd(ruleManager); + vector > models; + printmsg(INFO, "Unrolling and solving via SMT"); + if (!bnd.unrollAndExecute(trIndex, m_smt_solver, models)) { + return 1; + } + + for (auto model : models) { + arma::rowvec row = arma::conv_to::from(model); + row.insert_cols(0, arma::rowvec(1, arma::fill::ones)); + dataMatrix.insert_rows(dataMatrix.n_rows, row); + } + + // cout << dataMatrix << endl; //DEBUG + + return 0; + + } + + public: + + DataLearner(CHCs& r, EZ3 &z3) : + ruleManager(r), m_smt_solver(z3), m_efac(r.m_efac), trIndex(-1), numVars(0), + curPolyDegree(1), numPolyCompute(0), prevDataSize(0) + { + maxPolyCompute[1] = 5; + maxPolyCompute[2] = numeric_limits::max(); + //to let index start from 1 + basisComputed.push_back(arma::mat()); + basisComputed.push_back(arma::mat()); + } + + + void + setLogLevel(unsigned int l) + { + LOG_LEVEL = l; + } + + + void + initialize(Expr invDecl, unsigned int loglevel = 2) + { + // cout << *invDecl << endl; + + setLogLevel(loglevel); + initTrIndex(invDecl); + initInvVars(invDecl); + } + + // NOTE: should be called after initialize() + bool + computeData(const std::string & dataFile) + { + + assert(numVars != 0); + if (trIndex == -1) { + printmsg(ERROR, "Relation without inductive clauses are not supported yet"); + return false; + } + + if (dataFile.empty()) { + if (loadDataFromSMT() != 0) { + printmsg(ERROR, "failed to load data from smt"); + return false; + } + } else { + if (loadDataFromFile(dataFile) != 0) { + printmsg(ERROR, "failed to load data from file ", dataFile); + return false; + } + } + + initLargeCoeffToExpr(); + + return true; + } + + // Implementation of "A Data Driven Approach for Algebraic Loop Invariants", Sharma et al. + // return number of candidate polynomials added (< 0 in case of error) + template + int + computePolynomials(CONTAINERT & cands) + { + + if (trIndex == -1) { + printmsg(ERROR, "Relations without inductive clauses are not supported yet"); + return -1; + } + + numPolyCompute++; + + if (numPolyCompute > maxPolyCompute[curPolyDegree]) { + curPolyDegree++; + basisComputed.push_back(arma::mat()); + } + + int retVal = getPolynomialsFromData(dataMatrix, cands); + prevDataSize = dataMatrix.n_rows; + return retVal; + } + + void + incPolyDegree() + { + if (curPolyDegree < 2) { + curPolyDegree++; + basisComputed.push_back(arma::mat()); + } + } + + // adds a unique row + void + updateData(vector data) + { + return ; + + arma::rowvec dataRow(data.size() + 1); + dataRow(0) = 1; + for (int i = 0; i < data.size(); i++) { + dataRow(i+1) = data[i]; + } + + for (unsigned int i = 0; i < dataMatrix.n_rows; i++) { + if (arma::approx_equal(dataMatrix.row(i), dataRow, approxEqualMethod, approxEqualTol)) { + return; + } + } + + dataMatrix.insert_rows(dataMatrix.n_rows, dataRow); + + } + + }; +} + + +#endif diff --git a/tools/deep/CMakeLists.txt b/tools/deep/CMakeLists.txt index e4fc4e0ff..751ab3807 100644 --- a/tools/deep/CMakeLists.txt +++ b/tools/deep/CMakeLists.txt @@ -1,4 +1,4 @@ add_executable (freqhorn DeepHorn.cpp) -target_link_libraries (freqhorn ${Z3_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${GMPXX_LIB} ${GMP_LIB}) +target_link_libraries (freqhorn ${Z3_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${GMPXX_LIB} ${GMP_LIB} ${ARMADILLO_LIBRARIES}) llvm_config (freqhorn bitwriter) install(TARGETS freqhorn RUNTIME DESTINATION bin) diff --git a/tools/deep/DeepHorn.cpp b/tools/deep/DeepHorn.cpp index 975d36397..691b2660d 100644 --- a/tools/deep/DeepHorn.cpp +++ b/tools/deep/DeepHorn.cpp @@ -37,6 +37,17 @@ int getIntValue(const char * opt, int defValue, int argc, char ** argv) return defValue; } +void getStrValues(const char * opt, vector & values, int argc, char ** argv) +{ + for (int i = 1; i < argc-1; i++) + { + if (strcmp(argv[i], opt) == 0) + { + values.push_back(string(argv[i+1])); + } + } +} + int main (int argc, char ** argv) { const char *OPT_HELP = "--help"; @@ -52,6 +63,8 @@ int main (int argc, char ** argv) const char *OPT_GET_FREQS = "--freqs"; const char *OPT_ADD_EPSILON = "--eps"; const char *OPT_AGG_PRUNING = "--aggp"; + const char *OPT_DATA_LEARNING = "--data"; + const char *OPT_DATA_INPUT = "--data-input"; if (getBoolValue(OPT_HELP, false, argc, argv) || argc == 1){ outs () << @@ -77,7 +90,10 @@ int main (int argc, char ** argv) " " << OPT_AGG_PRUNING << " prioritize and prune the search space aggressively\n" << " " << OPT_ITP << " bound for itp-based proofs\n" << " " << OPT_BATCH << " threshold for how many candidates to check at once\n" << - " " << OPT_RETRY << " threshold for how many lemmas to wait before giving failures a second chance\n"; + " " << OPT_RETRY << " threshold for how many lemmas to wait before giving failures a second chance\n" << + " " << OPT_DATA_LEARNING << " bootstrap candidates from behaviors\n" << + " " << OPT_DATA_INPUT << " name of the file which contains behaviors; can be specified multiple times for each invariant \n"; + return 0; } @@ -102,9 +118,12 @@ int main (int argc, char ** argv) int batch = getIntValue(OPT_BATCH, 3, argc, argv); int retry = getIntValue(OPT_RETRY, 3, argc, argv); char * outfile = getStrValue(OPT_OUT_FILE, NULL, argc, argv); + bool enable_data_learning = getBoolValue(OPT_DATA_LEARNING, false, argc, argv); + vector data_filenames; + getStrValues(OPT_DATA_INPUT, data_filenames, argc, argv); if (vers3) // new experimental algorithm for multiple loops - learnInvariants3(string(argv[argc-1]), outfile, maxAttempts, densecode, aggressivepruning); + learnInvariants3(string(argv[argc-1]), outfile, maxAttempts, densecode, aggressivepruning, enable_data_learning, data_filenames); else if (vers2) // run the TACAS'18 algorithm learnInvariants2(string(argv[argc-1]), outfile, maxAttempts, itp, batch, retry, densecode, aggressivepruning); From ea0079a5bcae7ed64e38693ee1975dfd7c6cbae9 Mon Sep 17 00:00:00 2001 From: Kumar Madhukar Date: Thu, 10 May 2018 16:56:03 +0530 Subject: [PATCH 084/236] call behavior candidate changes --- include/deep/RndLearnerV3.hpp | 35 ++++++++++++++++++++++++++++++++--- 1 file changed, 32 insertions(+), 3 deletions(-) diff --git a/include/deep/RndLearnerV3.hpp b/include/deep/RndLearnerV3.hpp index f1e86646d..34f09a383 100644 --- a/include/deep/RndLearnerV3.hpp +++ b/include/deep/RndLearnerV3.hpp @@ -3,6 +3,10 @@ #include "RndLearner.hpp" +#ifdef HAVE_ARMADILLO +#include "DataLearner.hpp" +#endif + using namespace std; using namespace boost; namespace ufo @@ -318,7 +322,32 @@ namespace ufo } } - bool bootstrap(map& cands){ +#ifdef HAVE_ARMADILLO + void getDataCandidates(map& cands, const vector & behaviorfiles){ + int fileIndex = 0; + for (auto & dcl : decls) { + DataLearner dl(ruleManager, m_z3); + dl.initialize(dcl); + string filename(""); + if (fileIndex < behaviorfiles.size()) { + filename = behaviorfiles[fileIndex]; + fileIndex++; + } + if (!dl.computeData(filename)) return; + (void)dl.computePolynomials(cands[dcl]); + } + } +#endif + + bool bootstrap(map& cands, bool enableDataLearning, const vector & behaviorfiles){ + if (enableDataLearning) { +#ifdef HAVE_ARMADILLO + getDataCandidates(cands, behaviorfiles); +#else + outs() << "Skipping learning from data as required library(armadillo) not found\n"; +#endif + } + // TODO: batching for (auto & dcl: decls) { for (auto & cand : cands[dcl]) { @@ -377,7 +406,7 @@ namespace ufo } }; - inline void learnInvariants3(string smt, char * outfile, int maxAttempts, bool freqs, bool aggp) + inline void learnInvariants3(string smt, char * outfile, int maxAttempts, bool freqs, bool aggp, bool enableDataLearning, const vector & behaviorfiles) { ExprFactory m_efac; EZ3 z3(m_efac); @@ -401,7 +430,7 @@ namespace ufo for (auto& dcl: ruleManager.decls) ds.doSeedMining(dcl->arg(0), cands[dcl->arg(0)]); ds.calculateStatistics(); - if (ds.bootstrap(cands)) return; + if (ds.bootstrap(cands, enableDataLearning, behaviorfiles)) return; ds.synthesize(maxAttempts, outfile); } } From 1b78ae24e7bf1286fac724eef4b027b3b2dc4764 Mon Sep 17 00:00:00 2001 From: Kumar Madhukar Date: Thu, 10 May 2018 17:25:39 +0530 Subject: [PATCH 085/236] C benchmarks for behavior candidates --- bench_horn_multiple_c/8.c | 39 ++++++++++++ bench_horn_multiple_c/common.h | 106 +++++++++++++++++++++++++++++++++ 2 files changed, 145 insertions(+) create mode 100644 bench_horn_multiple_c/8.c create mode 100644 bench_horn_multiple_c/common.h diff --git a/bench_horn_multiple_c/8.c b/bench_horn_multiple_c/8.c new file mode 100644 index 000000000..2a1eef987 --- /dev/null +++ b/bench_horn_multiple_c/8.c @@ -0,0 +1,39 @@ +#include "common.h" + +int main() +{ + int k=0, j=0; + + RESET(); + + while (j < 1000) { + /* print should have same order as argument order for corresponding relation in CHC */ + PRINT(k,j); + j++; + k++; + } + + RESET(); + j=0; + while (j < 1000) { + PRINT(k,j); + j++; + k++; + } + + RESET(); + j=0; + while (j < 1000) { + PRINT(k,j); + j++; + k++; + } + + FIN(); + + assert(k>=3000); + + return 0; +} + + diff --git a/bench_horn_multiple_c/common.h b/bench_horn_multiple_c/common.h new file mode 100644 index 000000000..c86679a65 --- /dev/null +++ b/bench_horn_multiple_c/common.h @@ -0,0 +1,106 @@ +#ifndef COMMON__H +#define COMMON__H + +#include +#include +#include +#include +#include + +const unsigned int ASSERT_FAIL = 41; +const unsigned int ASSUME_FAIL = 42; +void assert(int predicate) { if (!predicate) exit(ASSERT_FAIL); } +void assume(int predicate) { if (!predicate) exit(ASSUME_FAIL); } + +std::ofstream cur_ofstream; + +std::vector outputfiles; + +std::ostream & +out() +{ + if(cur_ofstream) { + return cur_ofstream; + } else { + return std::cerr; + } +} + +void cleanup() +{ + if (cur_ofstream) { + cur_ofstream.close(); + } +} +/* call this after every loop to change the output filename*/ +void RESET() +{ + cleanup(); + outputfiles.push_back(std::tmpnam(nullptr)); + cur_ofstream.open((outputfiles.back()).c_str(), std::ofstream::out | std::ofstream::trunc); +} + +/* call this in the end to display filenames */ +void FIN() +{ + cleanup(); + + if (outputfiles.size() > 0) { + std::cerr << "Output files are: " << std::endl; + for (auto file : outputfiles) std::cerr << file << std::endl; + } +} + + +unsigned int num_iter = 0; + +template +void myprint(T t) +{ + out() << t << std::endl; + num_iter++; +} + +template + void myprint(T t, Args... args) +{ + out() << t << ","; + myprint(args...); +} + +/* +#ifdef MAX_ITER +#define INIT(varlist...) \ + auto PRINT = [&]() { if (num_iter > MAX_ITER) exit(0); out() << "1,"; myprint(varlist); }; +#else +#define INIT(varlist...) \ + auto PRINT = [&]() { out() << "1,"; myprint(varlist); }; +#endif +*/ + +#ifdef MAX_ITER +#define PRINT(varlist...) \ + { if (num_iter > MAX_ITER) break; out() << "1,"; myprint(varlist); } +#else +#define PRINT(varlist...) \ + { out() << "1,"; myprint(varlist); } +#endif + + +int generateRandomInt(int min = INT_MIN, int max = INT_MAX) +{ + +#ifdef MIN_ITER + if (min == 0 && max == 1 && num_iter < MIN_ITER) { + return 1; + } +#endif + + std::random_device device; + std::default_random_engine engine(device()); + std::uniform_int_distribution dist(min, max); + return dist(engine); +} + + +#endif From dba413385828de805743b40fee786bada99e7a26 Mon Sep 17 00:00:00 2001 From: Kumar Madhukar Date: Thu, 10 May 2018 17:47:07 +0530 Subject: [PATCH 086/236] armadillo in readme --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 13653eee4..a1983001a 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,7 @@ A more efficient release (FreqHorn-2) is now available. It features a two-stage Installation ============ -Compiles with gcc-5 (on Linux) and clang-900 (on Mac). Assumes preinstalled Svn, Gmp, and Boost (libboost-system1.55-dev) packages. +Compiles with gcc-5 (on Linux) and clang-900 (on Mac). Assumes preinstalled Svn, Gmp, and Boost (libboost-system1.55-dev) packages. Additionally, armadillo package to get candidates from behaviors. * `cd aeval ; mkdir build ; cd build` * `cmake ../` From e3b446ce14789985be9054d11555df4acbe1a9d3 Mon Sep 17 00:00:00 2001 From: Sumanth Prabhu Date: Thu, 10 May 2018 17:51:20 +0530 Subject: [PATCH 087/236] minor changes --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a1983001a..64cc7bddd 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ FreqHorn Satisfiability solver for constrained Horn clauses (CHC) based on the Expression library of SeaHorn and the Z3 SMT solver. It combines probabilistic and syntax-guided methods to sample candidate invariants and checks their inductiveness / safety. Find more details at the FMCAD'17 paper and slides. News -======== +==== A more efficient release (FreqHorn-2) is now available. It features a two-stage process: 1) deterministic bootstrapping with interpolation-based proofs of bounded safety, 2) nondeterministic sampling with the inductive subset extraction and on-demand exploiting of counterexamples-to-induction. Find more details at the TACAS'18 paper (slides). From 8e8d875b30061542709f821cc6ab17f9fb49ddb4 Mon Sep 17 00:00:00 2001 From: sumanthsprabhu Date: Thu, 10 May 2018 18:14:47 +0000 Subject: [PATCH 088/236] Make armaApproxEqual const to avoid compilation error --- include/deep/DataLearner.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/deep/DataLearner.hpp b/include/deep/DataLearner.hpp index ee14c79f6..4fd84c791 100644 --- a/include/deep/DataLearner.hpp +++ b/include/deep/DataLearner.hpp @@ -56,7 +56,7 @@ namespace ufo struct armaApproxEqual { - bool operator() (const double & a, const double & b) { + bool operator() (const double & a, const double & b) const { if (!arma::approx_equal(arma::vec(1).fill(a), arma::vec(1).fill(b), approxEqualMethod, approxEqualTol)) { return (a < b); From 07cda6cf1e0fdb468d2c9fd89f8347235ce12716 Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Thu, 10 May 2018 22:58:01 -0400 Subject: [PATCH 089/236] MultiFreqHorn: normalizing the candidates before learning --- .../samples_multiple_inv_09.smt2 | 39 +++++++++++++++++++ include/deep/RndLearnerV3.hpp | 33 +++++++++------- 2 files changed, 58 insertions(+), 14 deletions(-) create mode 100644 bench_horn_multiple/samples_multiple_inv_09.smt2 diff --git a/bench_horn_multiple/samples_multiple_inv_09.smt2 b/bench_horn_multiple/samples_multiple_inv_09.smt2 new file mode 100644 index 000000000..b23aacf29 --- /dev/null +++ b/bench_horn_multiple/samples_multiple_inv_09.smt2 @@ -0,0 +1,39 @@ +(declare-rel FUN (Int Int Int)) +(declare-rel SAD (Int Int Int)) +(declare-var k Int) +(declare-var k1 Int) +(declare-var j Int) +(declare-var j1 Int) +(declare-var N Int) + +(declare-rel fail ()) + +(rule (=> (and (= k 0) (= j 0) (> N 0)) (FUN k j N))) + +(rule (=> + (and + (FUN k j N) + (< j N) + (= k1 (+ k 1)) + (= j1 (+ j 1)) + ) + (FUN k1 j1 N) + ) +) + +(rule (=> (and (FUN k j N) (>= j N) (= k1 k) (= j1 0)) (SAD k1 j1 N))) + +(rule (=> + (and + (SAD k j N) + (< j N) + (= k1 (+ k 1)) + (= j1 (+ j 1)) + ) + (SAD k1 j1 N) + ) +) + +(rule (=> (and (SAD k j N) (>= j N) (< k (* 2 N))) fail)) + +(query fail) diff --git a/include/deep/RndLearnerV3.hpp b/include/deep/RndLearnerV3.hpp index 34f09a383..33ad37325 100644 --- a/include/deep/RndLearnerV3.hpp +++ b/include/deep/RndLearnerV3.hpp @@ -33,8 +33,11 @@ namespace ufo bool res = checkCHC(a); if (!res) { + ExprVector invVars; + for (auto & a : invarVars[invNum]) invVars.push_back(a.second); + Expr failedCand = normalizeDisj(candidates[invNum], invVars); SamplFactory& sf = sfs[invNum].back(); - Sampl& s = sf.exprToSampl(candidates[invNum]); + Sampl& s = sf.exprToSampl(failedCand); sf.assignPrioritiesForFailed(); } return res; @@ -210,7 +213,6 @@ namespace ufo Expr rel = decls[curInv]; // outs () << " -- cand for " << *rel << ": " << *cand << "\n"; candidates[curInv] = cand; - if (!checkInit(curInv, rel)) return false; if (!checkInductiveness(rel)) return false; @@ -242,8 +244,11 @@ namespace ufo { if (a.second != NULL && !isOpX(a.second)) { + ExprVector invVars; + for (auto & a : invarVars[curInv]) invVars.push_back(a.second); + Expr learnedCand = normalizeDisj(cand, invVars); SamplFactory& sf = sfs[a.first].back(); - Sampl& s = sf.exprToSampl(cand); // TODO: split conjunctions + Sampl& s = sf.exprToSampl(learnedCand); // TODO: split conjunctions sf.assignPrioritiesForLearned(); } } @@ -326,15 +331,15 @@ namespace ufo void getDataCandidates(map& cands, const vector & behaviorfiles){ int fileIndex = 0; for (auto & dcl : decls) { - DataLearner dl(ruleManager, m_z3); - dl.initialize(dcl); - string filename(""); - if (fileIndex < behaviorfiles.size()) { - filename = behaviorfiles[fileIndex]; - fileIndex++; - } - if (!dl.computeData(filename)) return; - (void)dl.computePolynomials(cands[dcl]); + DataLearner dl(ruleManager, m_z3); + dl.initialize(dcl); + string filename(""); + if (fileIndex < behaviorfiles.size()) { + filename = behaviorfiles[fileIndex]; + fileIndex++; + } + if (!dl.computeData(filename)) return; + (void)dl.computePolynomials(cands[dcl]); } } #endif @@ -342,9 +347,9 @@ namespace ufo bool bootstrap(map& cands, bool enableDataLearning, const vector & behaviorfiles){ if (enableDataLearning) { #ifdef HAVE_ARMADILLO - getDataCandidates(cands, behaviorfiles); + getDataCandidates(cands, behaviorfiles); #else - outs() << "Skipping learning from data as required library(armadillo) not found\n"; + outs() << "Skipping learning from data as required library(armadillo) not found\n"; #endif } From 9f8a1b9f0fda6656b54ddb0625bc8d136fdbc343 Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Thu, 10 May 2018 22:58:01 -0400 Subject: [PATCH 090/236] MultiFreqHorn: normalizing the candidates before learning --- .../samples_multiple_inv_09.smt2 | 39 +++++++++++++++++++ include/ae/ExprSimpl.hpp | 8 +++- include/deep/RndLearnerV3.hpp | 33 +++++++++------- 3 files changed, 64 insertions(+), 16 deletions(-) create mode 100644 bench_horn_multiple/samples_multiple_inv_09.smt2 diff --git a/bench_horn_multiple/samples_multiple_inv_09.smt2 b/bench_horn_multiple/samples_multiple_inv_09.smt2 new file mode 100644 index 000000000..b23aacf29 --- /dev/null +++ b/bench_horn_multiple/samples_multiple_inv_09.smt2 @@ -0,0 +1,39 @@ +(declare-rel FUN (Int Int Int)) +(declare-rel SAD (Int Int Int)) +(declare-var k Int) +(declare-var k1 Int) +(declare-var j Int) +(declare-var j1 Int) +(declare-var N Int) + +(declare-rel fail ()) + +(rule (=> (and (= k 0) (= j 0) (> N 0)) (FUN k j N))) + +(rule (=> + (and + (FUN k j N) + (< j N) + (= k1 (+ k 1)) + (= j1 (+ j 1)) + ) + (FUN k1 j1 N) + ) +) + +(rule (=> (and (FUN k j N) (>= j N) (= k1 k) (= j1 0)) (SAD k1 j1 N))) + +(rule (=> + (and + (SAD k j N) + (< j N) + (= k1 (+ k 1)) + (= j1 (+ j 1)) + ) + (SAD k1 j1 N) + ) +) + +(rule (=> (and (SAD k j N) (>= j N) (< k (* 2 N))) fail)) + +(query fail) diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index 65c24f5f7..a4ed1a989 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -1880,8 +1880,12 @@ namespace ufo // GF: sometimes it fails (no idea why) int thisTerm = 1; for (auto it = e->args_begin (), end = e->args_end (); it != end; ++it) - thisTerm *= lexical_cast(*it); - + { + if (isOpX(*it)) + thisTerm *= lexical_cast(*it); + else + success = false; + } intconst += thisTerm; } else diff --git a/include/deep/RndLearnerV3.hpp b/include/deep/RndLearnerV3.hpp index 34f09a383..33ad37325 100644 --- a/include/deep/RndLearnerV3.hpp +++ b/include/deep/RndLearnerV3.hpp @@ -33,8 +33,11 @@ namespace ufo bool res = checkCHC(a); if (!res) { + ExprVector invVars; + for (auto & a : invarVars[invNum]) invVars.push_back(a.second); + Expr failedCand = normalizeDisj(candidates[invNum], invVars); SamplFactory& sf = sfs[invNum].back(); - Sampl& s = sf.exprToSampl(candidates[invNum]); + Sampl& s = sf.exprToSampl(failedCand); sf.assignPrioritiesForFailed(); } return res; @@ -210,7 +213,6 @@ namespace ufo Expr rel = decls[curInv]; // outs () << " -- cand for " << *rel << ": " << *cand << "\n"; candidates[curInv] = cand; - if (!checkInit(curInv, rel)) return false; if (!checkInductiveness(rel)) return false; @@ -242,8 +244,11 @@ namespace ufo { if (a.second != NULL && !isOpX(a.second)) { + ExprVector invVars; + for (auto & a : invarVars[curInv]) invVars.push_back(a.second); + Expr learnedCand = normalizeDisj(cand, invVars); SamplFactory& sf = sfs[a.first].back(); - Sampl& s = sf.exprToSampl(cand); // TODO: split conjunctions + Sampl& s = sf.exprToSampl(learnedCand); // TODO: split conjunctions sf.assignPrioritiesForLearned(); } } @@ -326,15 +331,15 @@ namespace ufo void getDataCandidates(map& cands, const vector & behaviorfiles){ int fileIndex = 0; for (auto & dcl : decls) { - DataLearner dl(ruleManager, m_z3); - dl.initialize(dcl); - string filename(""); - if (fileIndex < behaviorfiles.size()) { - filename = behaviorfiles[fileIndex]; - fileIndex++; - } - if (!dl.computeData(filename)) return; - (void)dl.computePolynomials(cands[dcl]); + DataLearner dl(ruleManager, m_z3); + dl.initialize(dcl); + string filename(""); + if (fileIndex < behaviorfiles.size()) { + filename = behaviorfiles[fileIndex]; + fileIndex++; + } + if (!dl.computeData(filename)) return; + (void)dl.computePolynomials(cands[dcl]); } } #endif @@ -342,9 +347,9 @@ namespace ufo bool bootstrap(map& cands, bool enableDataLearning, const vector & behaviorfiles){ if (enableDataLearning) { #ifdef HAVE_ARMADILLO - getDataCandidates(cands, behaviorfiles); + getDataCandidates(cands, behaviorfiles); #else - outs() << "Skipping learning from data as required library(armadillo) not found\n"; + outs() << "Skipping learning from data as required library(armadillo) not found\n"; #endif } From f9c9e435d64e747cfb212b6d3fcb144ab5ab0f31 Mon Sep 17 00:00:00 2001 From: sumanthsprabhu Date: Mon, 14 May 2018 22:12:47 +0530 Subject: [PATCH 091/236] A script to generate behaviors by running the program --- bench_horn_multiple_c/run.sh | 62 ++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 bench_horn_multiple_c/run.sh diff --git a/bench_horn_multiple_c/run.sh b/bench_horn_multiple_c/run.sh new file mode 100644 index 000000000..1b6d2c003 --- /dev/null +++ b/bench_horn_multiple_c/run.sh @@ -0,0 +1,62 @@ +#!/bin/bash + +FLAGS="" +BINARY_TIMEOUT="60s" +BINARY_OUTPUT="/tmp/binout" +TOOL_CMDLINE="../../build/tools/deep/freqhorn --data --v3 --freqs --eps --aggp " +SMT_TIMEOUT="100s" + +#compile given input program +if [ $# -ne 1 ] +then + echo "Usage: run.sh input_file.c" + exit 1 +fi + +filename=$1 +binary="/tmp/${filename%.*}" + +echo "compiling $filename to $binary" +g++ -o $binary $filename + +if [ $? -ne 0 ] +then + echo "compilation failed" + exit 1 +fi + +#run the program and note output files +echo "running $binary with $BINARY_TIMEOUT timeout" +timeout -k 10 $BINARY_TIMEOUT $binary 2> $BINARY_OUTPUT +es=$? +if [ $es -eq 124 ] +then + echo "make sure your program completes within $BINARY_TIMEOUT" + exit 1 +elif [ $es -ne 0 ] +then + echo "program killed or program asserted (exit status: $es)" + exit 1 +fi + + +#run the tool with output files as options +toolcmd=$TOOL_CMDLINE +while read inputFile; do + if [[ $inputFile == Output* ]] + then + continue + fi + toolcmd=$toolcmd" --data-input "$inputFile +done < $BINARY_OUTPUT + +smtfile="../bench_horn_multiple/${filename%.*}.smt2" +if [ -f $smtfile ] +then + toolcmd=$toolcmd" $smtfile" + echo "running $toolcmd with $SMT_TIMEOUT timeout" + timeout -k 10 $SMT_TIMEOUT $toolcmd +else + echo $smtfile" not found" +fi + From 395a4a188b6903e0944ad24c3335d940cc218424 Mon Sep 17 00:00:00 2001 From: sumanthsprabhu Date: Mon, 14 May 2018 22:15:12 +0530 Subject: [PATCH 092/236] Benchmark for behavioral candidates Behavior candidates perform well on these benchmarks. --- bench_horn_multiple/abdu_03.smt2 | 32 ++++++++++++ bench_horn_multiple/dillig22-4.smt2 | 33 ++++++++++++ bench_horn_multiple/exact_iters_4.smt2 | 34 ++++++++++++ bench_horn_multiple/exact_iters_5.smt2 | 34 ++++++++++++ bench_horn_multiple/half_true_modif.smt2 | 33 ++++++++++++ bench_horn_multiple/s_mutants_20.smt2 | 38 ++++++++++++++ bench_horn_multiple/s_mutants_21.smt2 | 34 ++++++++++++ .../samples_multiple_inv_10.smt2 | 52 +++++++++++++++++++ 8 files changed, 290 insertions(+) create mode 100644 bench_horn_multiple/abdu_03.smt2 create mode 100644 bench_horn_multiple/dillig22-4.smt2 create mode 100644 bench_horn_multiple/exact_iters_4.smt2 create mode 100644 bench_horn_multiple/exact_iters_5.smt2 create mode 100644 bench_horn_multiple/half_true_modif.smt2 create mode 100644 bench_horn_multiple/s_mutants_20.smt2 create mode 100644 bench_horn_multiple/s_mutants_21.smt2 create mode 100644 bench_horn_multiple/samples_multiple_inv_10.smt2 diff --git a/bench_horn_multiple/abdu_03.smt2 b/bench_horn_multiple/abdu_03.smt2 new file mode 100644 index 000000000..744235ede --- /dev/null +++ b/bench_horn_multiple/abdu_03.smt2 @@ -0,0 +1,32 @@ +(declare-rel inv1 (Int Int Int)) +(declare-rel inv (Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) +(declare-var len Int) + +(declare-rel fail ()) + +(rule (=> (and (= x 0) (= y 0) (>= len 0)) (inv1 x y len))) + +(rule (=> (inv1 x y len) (inv1 x y len))) + +(rule (=> (inv1 x y len) (inv x y len))) + +(rule (=> + (and + (inv x y len) + (< x len) + (= x1 (+ x 1)) + (= y1 (+ y 2)) + ) + (inv x1 y1 len) + ) +) + + +(rule (=> (and (inv x y len) (= x len) (not (= (+ x y) (* 3 len)))) fail)) + + +(query fail :print-certificate true) diff --git a/bench_horn_multiple/dillig22-4.smt2 b/bench_horn_multiple/dillig22-4.smt2 new file mode 100644 index 000000000..a78cfaab9 --- /dev/null +++ b/bench_horn_multiple/dillig22-4.smt2 @@ -0,0 +1,33 @@ +(declare-rel inv1 (Int Int Int Int)) +(declare-rel inv (Int Int Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var y0 Int) +(declare-var y1 Int) +(declare-var k0 Int) +(declare-var k1 Int) +(declare-var t0 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= y1 0) (= k1 0)) (inv1 x1 y1 k1 t0))) + +(rule (=> (inv1 x1 y1 k1 t0) (inv1 x1 y1 k1 t0))) + +(rule (=> (inv1 x1 y1 k1 t0) (inv x1 y1 k1 t0))) + +(rule (=> + (and + (inv x0 y0 k0 t0) + (< y0 t0) + (= x1 (ite (= (mod k0 2) 0) (+ x0 1) x0)) + (= y1 (+ y0 1)) + (= k1 (+ x1 y1)) + ) + (inv x1 y1 k1 t0) + ) +) + +(rule (=> (and (inv x1 y1 k1 t0) (= y1 t0) (not (= t0 x1))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn_multiple/exact_iters_4.smt2 b/bench_horn_multiple/exact_iters_4.smt2 new file mode 100644 index 000000000..3ca78b106 --- /dev/null +++ b/bench_horn_multiple/exact_iters_4.smt2 @@ -0,0 +1,34 @@ +(declare-rel inv1 (Int Int Int)) +(declare-rel inv (Int Int Int)) +(declare-var i1 Int) +(declare-var i2 Int) +(declare-var j1 Int) +(declare-var j2 Int) +(declare-var k1 Int) +(declare-var k2 Int) + +(declare-rel fail ()) + +(rule (=> (and (= i1 0) (= j1 10) (= k1 0)) (inv1 i1 j1 k1))) + +(rule (=> (inv1 i1 j1 k1) (inv1 i1 j1 k1))) + +(rule (=> (inv1 i1 j1 k1) (inv i1 j1 k1))) + +(rule (=> + (and + (inv i1 j1 k1) + (= i2 (+ i1 1)) + (= j2 (- j1 3)) + (= k2 (+ k1 2)) + ) + (inv i2 j2 k2) + ) +) + + +(rule (=> (and (inv i1 j1 k1) (= (+ i1 k1) 6) (not (= j1 4)) ) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn_multiple/exact_iters_5.smt2 b/bench_horn_multiple/exact_iters_5.smt2 new file mode 100644 index 000000000..c41accdc5 --- /dev/null +++ b/bench_horn_multiple/exact_iters_5.smt2 @@ -0,0 +1,34 @@ +(declare-rel inv1 (Int Int Int)) +(declare-rel inv2 (Int Int Int)) +(declare-var i1 Int) +(declare-var i2 Int) +(declare-var j1 Int) +(declare-var j2 Int) +(declare-var k1 Int) +(declare-var k2 Int) + +(declare-rel fail ()) + +(rule (=> (and (= i1 0) (= j1 1000) (= k1 0)) (inv1 i1 j1 k1))) + +(rule (=> (inv1 i1 j1 k1) (inv1 i1 j1 k1))) + +(rule (=> (inv1 i1 j1 k1) (inv2 i1 j1 k1))) + +(rule (=> + (and + (inv2 i1 j1 k1) + (= i2 (+ i1 1)) + (= j2 (- j1 3)) + (= k2 (+ k1 2)) + ) + (inv2 i2 j2 k2) + ) +) + + +(rule (=> (and (inv2 i1 j1 k1) (= (+ i1 k1) 600) (not (= j1 400)) ) fail)) + + +(query fail :print-certificate true) + diff --git a/bench_horn_multiple/half_true_modif.smt2 b/bench_horn_multiple/half_true_modif.smt2 new file mode 100644 index 000000000..2b032ea1e --- /dev/null +++ b/bench_horn_multiple/half_true_modif.smt2 @@ -0,0 +1,33 @@ +(declare-rel inv1 (Int Int Int Int)) +(declare-rel inv (Int Int Int Int)) +(declare-var i Int) +(declare-var k Int) +(declare-var n Int) +(declare-var i1 Int) +(declare-var n1 Int) +(declare-var j Int) +(declare-var j1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= i 0) (= j 0) (= n 0) (>= k 0)) (inv1 i k n j))) + +(rule (=> (inv1 i k n j) (inv1 i k n j))) + +(rule (=> (inv1 i k n j) (inv i k n j))) + +(rule (=> + (and + (inv i k n j) + (< i (* 2 k)) + (= n1 (ite (= j 0) (+ n 1) n)) + (= i1 (+ i 1)) + (= j1 (ite (= j 0) 1 0)) + ) + (inv i1 k n1 j1) + ) +) + +(rule (=> (and (inv i k n j) (>= i (* 2 k)) (not (= n k))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn_multiple/s_mutants_20.smt2 b/bench_horn_multiple/s_mutants_20.smt2 new file mode 100644 index 000000000..3a6cd8499 --- /dev/null +++ b/bench_horn_multiple/s_mutants_20.smt2 @@ -0,0 +1,38 @@ +(declare-rel inv1 (Int Int Int Int Int)) +(declare-rel inv (Int Int Int Int Int)) +(declare-var k0 Int) +(declare-var k1 Int) +(declare-var i0 Int) +(declare-var i1 Int) +(declare-var j0 Int) +(declare-var j1 Int) +(declare-var n0 Int) +(declare-var n1 Int) +(declare-var b0 Int) +(declare-var b1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= k1 100) (= i1 j1) (= n1 0) (= i1 0) (or (= b1 0) (= b1 1))) + (inv1 k1 i1 j1 n1 b1))) + +(rule (=> (inv1 k1 i1 j1 n1 b1) (inv1 k1 i1 j1 n1 b1))) + +(rule (=> (inv1 k1 i1 j1 n1 b1) (inv k1 i1 j1 n1 b1))) + +(rule (=> + (and + (inv k0 i0 j0 n0 b0) + (< n0 (* 2 k0)) + (= i1 (ite (= b0 0) (+ i0 1) i0)) + (= j1 (ite (= b0 0) j0 (+ j0 1))) + (= b1 (ite (= b0 0) 1 0)) + (= n1 (+ n0 1)) + ) + (inv k0 i1 j1 n1 b1) + ) +) + +(rule (=> (and (inv k1 i1 j1 n1 b1) (>= n1 (* 2 k1)) (not (= (+ i1 j1) n1))) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn_multiple/s_mutants_21.smt2 b/bench_horn_multiple/s_mutants_21.smt2 new file mode 100644 index 000000000..58f5f8292 --- /dev/null +++ b/bench_horn_multiple/s_mutants_21.smt2 @@ -0,0 +1,34 @@ +(declare-rel itp1 (Int Int Int)) +(declare-rel itp (Int Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) +(declare-var x9 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= x3 0) (= x5 (* 10 x9)) (> x9 0) (< x9 10)) (itp1 x1 x3 x5))) + +(rule (=> (itp1 x1 x3 x5) (itp1 x1 x3 x5))) + +(rule (=> (itp1 x1 x3 x5) (itp x1 x3 x5))) + +(rule (=> + (and + (itp x1 x3 x5) + (or (and (= x2 (+ x1 1)) (= x4 (- x3 1))) + (and (= x2 (- x1 1)) (= x4 (+ x3 1)))) + (= x6 (+ x5 x2 x4)) + ) + (itp x2 x4 x6) + ) +) + + +(rule (=> (and (itp x1 x3 x5) (= x5 78)) fail)) + +(query fail :print-certificate true) \ No newline at end of file diff --git a/bench_horn_multiple/samples_multiple_inv_10.smt2 b/bench_horn_multiple/samples_multiple_inv_10.smt2 new file mode 100644 index 000000000..3e50bcb98 --- /dev/null +++ b/bench_horn_multiple/samples_multiple_inv_10.smt2 @@ -0,0 +1,52 @@ +(declare-rel FUN (Int Int)) +(declare-rel SAD (Int Int)) +(declare-rel WEE (Int Int)) +(declare-var k Int) +(declare-var k1 Int) +(declare-var j Int) +(declare-var j1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= k 0) (= j 0)) (FUN k j))) + +(rule (=> + (and + (FUN k j) + (< j 10) + (= k1 (+ k 1)) + (= j1 (+ j 1)) + ) + (FUN k1 j1) + ) +) + +(rule (=> (and (FUN k j) (>= j 10) (= k1 k) (= j1 0)) (SAD k1 j1))) + +(rule (=> + (and + (SAD k j) + (< j 10) + (= k1 (+ k 1)) + (= j1 (+ j 1)) + ) + (SAD k1 j1) + ) +) + +(rule (=> (and (SAD k j) (>= j 10) (= k1 k) (= j1 0)) (WEE k1 j1))) + +(rule (=> + (and + (WEE k j) + (< j 10) + (= k1 (+ k 1)) + (= j1 (+ j 1)) + ) + (WEE k1 j1) + ) +) + +(rule (=> (and (WEE k j) (>= j 10) (< k 30)) fail)) + +(query fail) From 68470c84e45452ddf0cc5a27e0497b2e56f90362 Mon Sep 17 00:00:00 2001 From: sumanthsprabhu Date: Mon, 14 May 2018 22:59:29 +0530 Subject: [PATCH 093/236] autmatic generation of models for multiple loops using SMT and seeding from behavioral candidates --- .../{8.c => samples_multiple_inv_08.c} | 0 include/deep/BndExpl.hpp | 69 +++++++++++++++- include/deep/DataLearner.hpp | 79 ++++++++++++++++--- include/deep/RndLearnerV3.hpp | 21 ++--- tools/deep/DeepHorn.cpp | 2 +- 5 files changed, 145 insertions(+), 26 deletions(-) rename bench_horn_multiple_c/{8.c => samples_multiple_inv_08.c} (100%) diff --git a/bench_horn_multiple_c/8.c b/bench_horn_multiple_c/samples_multiple_inv_08.c similarity index 100% rename from bench_horn_multiple_c/8.c rename to bench_horn_multiple_c/samples_multiple_inv_08.c diff --git a/include/deep/BndExpl.hpp b/include/deep/BndExpl.hpp index 30686d433..a4e075bd3 100644 --- a/include/deep/BndExpl.hpp +++ b/include/deep/BndExpl.hpp @@ -275,19 +275,82 @@ namespace ufo return itp; } - //TODO: support nested loops - bool unrollAndExecute(int trIndex, ufo::ZSolver & m_smt_solver, vector > & models, int k = 10, Expr initCondn = nullptr) + //used for multiple loops to unroll inductive clauses k times and collect corresponding models + bool unrollAndExecuteMultiple(ufo::ZSolver & m_smt_solver, + map > > & models, int k = 10) + { + vector traces; + map indexToInv; + int chcIndex = 0; + + for (auto & r : ruleManager.chcs) { + if (r.isInductive) { + for (int i = 0; i < k; i++) { + traces.push_back(chcIndex); + indexToInv[traces.size()-1] = r.srcRelation; + } + } else if (r.isQuery) { + chcIndex++; + continue; + } else { + //fact or non-inductive clauses + traces.push_back(chcIndex++); + } + } + + Expr unrolledTr = toExpr(traces); + + m_smt_solver.reset(); + m_smt_solver.assertExpr(unrolledTr); + + if (!m_smt_solver.solve()) { + cout << unrolledTr << " found to be unsat with k = " << k << endl; + return false; + } + + ZSolver::Model m = m_smt_solver.getModel(); + + for (int bvIndex = 0; bvIndex < bindVars.size(); bvIndex++) { + auto invItr = indexToInv.find(bvIndex); + if (invItr == indexToInv.end()) { + continue; + } + + auto vars = bindVars[bvIndex]; + vector model; + for (auto var : vars) { + int value; + if (var != m.eval(var)) { + stringstream tmpstream; + tmpstream << m.eval(var); + tmpstream >> value; + } else { + value = guessUniformly(1000)-500; + } + model.push_back(value); + } + models[invItr->second].push_back(model); + } + + return true; + } + + bool unrollAndExecute(const Expr & invRel, ufo::ZSolver & m_smt_solver, vector > & models, int k = 10, Expr initCondn = nullptr) { int initIndex; + int trIndex; bool initFound = false; - for (int i = 0; i < trIndex; i++) { + for (int i = 0; i < ruleManager.chcs.size(); i++) { auto & r = ruleManager.chcs[i]; if (r.isFact) { initIndex = i; initFound = true; } + if (r.isInductive && r.srcRelation == invRel && r.dstRelation == invRel) { + trIndex = i; + } } if (!initFound && initCondn == nullptr) { diff --git a/include/deep/DataLearner.hpp b/include/deep/DataLearner.hpp index 4fd84c791..205c9344e 100644 --- a/include/deep/DataLearner.hpp +++ b/include/deep/DataLearner.hpp @@ -49,6 +49,56 @@ namespace ufo } } + //if multipleloops then executes entire program once and caches models of all inductive relations + class loadDataFromSMTHelper + { + private: + static loadDataFromSMTHelper * ptr; + map > > exprToModels; + loadDataFromSMTHelper() {} + + bool + executeEntireProgram(CHCs & rm, ufo::ZSolver & solver) + { + BndExpl bnd(rm); + return bnd.unrollAndExecuteMultiple(solver, exprToModels); + } + + bool + exprModels(const Expr & inv, vector< vector > & models) + { + auto itr = exprToModels.find(inv); + if (itr == exprToModels.end()) { + return false; + } else { + for (auto model : itr->second) { + models.push_back(model); + } + return true; + } + } + + public: + static bool + getModels(bool multipleLoops, const Expr & inv, CHCs & rm, + ufo::ZSolver & solver, vector< vector > & models) + { + if (ptr == nullptr) { + ptr = new loadDataFromSMTHelper(); + if (multipleLoops && !(ptr->executeEntireProgram(rm, solver))) { + return false; + } + } + + if(multipleLoops) { + return ptr->exprModels(inv, models); + } else { + BndExpl bnd(rm); + return bnd.unrollAndExecute(inv, solver, models) + } + } + + }; class DataLearner { @@ -68,7 +118,9 @@ namespace ufo CHCs& ruleManager; ExprFactory &m_efac; ufo::ZSolver m_smt_solver; - + + Expr inv; + bool multipleLoops unsigned int numVars; int trIndex; arma::mat dataMatrix; @@ -98,7 +150,7 @@ namespace ufo return 1; } - printmsg(INFO, "vars: ", numVars, "\n row x col ", dataMatrix.n_rows, dataMatrix.n_cols); + printmsg(DEBUG, "vars: ", numVars, "\n row x col ", dataMatrix.n_rows, dataMatrix.n_cols); return 0; } @@ -511,7 +563,7 @@ namespace ufo if (polynomialsComputed.find(cand) == polynomialsComputed.end()) { addpolytocands(cands, cand); polynomialsComputed.insert(cand); - printmsg(INFO, "Adding polynomial: ", cand); + printmsg(DEBUG, "Adding polynomial: ", cand); } } @@ -528,10 +580,9 @@ namespace ufo int loadDataFromSMT() { - BndExpl bnd(ruleManager); vector > models; - printmsg(INFO, "Unrolling and solving via SMT"); - if (!bnd.unrollAndExecute(trIndex, m_smt_solver, models)) { + printmsg(DEBUG, "Unrolling and solving via SMT"); + if (!loadDataFromSMTHelper::getModels(multipleLoops, inv, ruleManager, m_smt_solver, models)) { return 1; } @@ -553,6 +604,7 @@ namespace ufo ruleManager(r), m_smt_solver(z3), m_efac(r.m_efac), trIndex(-1), numVars(0), curPolyDegree(1), numPolyCompute(0), prevDataSize(0) { + multipleLoops = false; maxPolyCompute[1] = 5; maxPolyCompute[2] = numeric_limits::max(); //to let index start from 1 @@ -569,12 +621,13 @@ namespace ufo void - initialize(Expr invDecl, unsigned int loglevel = 2) + initialize(Expr invDecl, bool multiLoop = false, unsigned int loglevel = 2) { // cout << *invDecl << endl; - + inv = invDecl; + multipleLoops = multiLoop; setLogLevel(loglevel); - initTrIndex(invDecl); + // initTrIndex(invDecl); initInvVars(invDecl); } @@ -584,14 +637,14 @@ namespace ufo { assert(numVars != 0); - if (trIndex == -1) { + if (!multipleLoops && trIndex == -1) { printmsg(ERROR, "Relation without inductive clauses are not supported yet"); return false; } if (dataFile.empty()) { if (loadDataFromSMT() != 0) { - printmsg(ERROR, "failed to load data from smt"); + printmsg(INFO, "failed to load data from smt (also no input file)"); return false; } } else { @@ -613,7 +666,7 @@ namespace ufo computePolynomials(CONTAINERT & cands) { - if (trIndex == -1) { + if (!multipleLoops && trIndex == -1) { printmsg(ERROR, "Relations without inductive clauses are not supported yet"); return -1; } @@ -662,6 +715,8 @@ namespace ufo } }; + + loadDataFromSMTHelper * loadDataFromSMTHelper::ptr = nullptr; } diff --git a/include/deep/RndLearnerV3.hpp b/include/deep/RndLearnerV3.hpp index 33ad37325..1ca0ca24e 100644 --- a/include/deep/RndLearnerV3.hpp +++ b/include/deep/RndLearnerV3.hpp @@ -332,27 +332,19 @@ namespace ufo int fileIndex = 0; for (auto & dcl : decls) { DataLearner dl(ruleManager, m_z3); - dl.initialize(dcl); + dl.initialize(dcl, true /*multipleLoops*/); string filename(""); if (fileIndex < behaviorfiles.size()) { filename = behaviorfiles[fileIndex]; fileIndex++; } - if (!dl.computeData(filename)) return; + if (!dl.computeData(filename)) continue; (void)dl.computePolynomials(cands[dcl]); } } #endif bool bootstrap(map& cands, bool enableDataLearning, const vector & behaviorfiles){ - if (enableDataLearning) { -#ifdef HAVE_ARMADILLO - getDataCandidates(cands, behaviorfiles); -#else - outs() << "Skipping learning from data as required library(armadillo) not found\n"; -#endif - } - // TODO: batching for (auto & dcl: decls) { for (auto & cand : cands[dcl]) { @@ -431,6 +423,15 @@ namespace ufo map cands; for (auto& dcl: ruleManager.decls) ds.initializeDecl(dcl); + + if (enableDataLearning) { +#ifdef HAVE_ARMADILLO + getDataCandidates(cands, behaviorfiles); +#else + outs() << "Skipping learning from data as required library(armadillo) not found\n"; +#endif + } + for (auto& dcl: ruleManager.decls) ds.getSeeds(dcl->arg(0), cands); for (auto& dcl: ruleManager.decls) ds.doSeedMining(dcl->arg(0), cands[dcl->arg(0)]); diff --git a/tools/deep/DeepHorn.cpp b/tools/deep/DeepHorn.cpp index 691b2660d..a597d0c30 100644 --- a/tools/deep/DeepHorn.cpp +++ b/tools/deep/DeepHorn.cpp @@ -92,7 +92,7 @@ int main (int argc, char ** argv) " " << OPT_BATCH << " threshold for how many candidates to check at once\n" << " " << OPT_RETRY << " threshold for how many lemmas to wait before giving failures a second chance\n" << " " << OPT_DATA_LEARNING << " bootstrap candidates from behaviors\n" << - " " << OPT_DATA_INPUT << " name of the file which contains behaviors; can be specified multiple times for each invariant \n"; + " " << OPT_DATA_INPUT << " name of the file which contains behaviors; can be specified multiple times for each invariant \n"; return 0; From 9fdb1c053d99432777de7fa0817850238471e382 Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Mon, 14 May 2018 23:36:58 -0400 Subject: [PATCH 094/236] MultiFreqHorn: new benchmarks --- bench_horn_multiple/dillig12.smt2 | 12 ++--- bench_horn_multiple/dillig17.smt2 | 4 +- bench_horn_multiple/dillig24.smt2 | 4 +- bench_horn_multiple/dillig25.smt2 | 6 +-- bench_horn_multiple/dillig28.smt2 | 14 +++--- bench_horn_multiple/niagara.smt2 | 21 +++------ .../nonlin_multiple_inv_02.smt2 | 2 +- .../nonlin_multiple_inv_03.smt2 | 29 ++++++++++++ .../nonlin_multiple_inv_04.smt2 | 21 +++++++++ .../samples_multiple_inv_11.smt2 | 41 +++++++++++++++++ .../samples_multiple_inv_12.smt2 | 45 +++++++++++++++++++ .../samples_multiple_inv_13.smt2 | 37 +++++++++++++++ .../samples_multiple_inv_14.smt2 | 44 ++++++++++++++++++ .../samples_multiple_inv_15.smt2 | 33 ++++++++++++++ .../samples_multiple_inv_16.smt2 | 33 ++++++++++++++ .../samples_multiple_inv_17.smt2 | 29 ++++++++++++ 16 files changed, 339 insertions(+), 36 deletions(-) create mode 100644 bench_horn_multiple/nonlin_multiple_inv_03.smt2 create mode 100644 bench_horn_multiple/nonlin_multiple_inv_04.smt2 create mode 100644 bench_horn_multiple/samples_multiple_inv_11.smt2 create mode 100644 bench_horn_multiple/samples_multiple_inv_12.smt2 create mode 100644 bench_horn_multiple/samples_multiple_inv_13.smt2 create mode 100644 bench_horn_multiple/samples_multiple_inv_14.smt2 create mode 100644 bench_horn_multiple/samples_multiple_inv_15.smt2 create mode 100644 bench_horn_multiple/samples_multiple_inv_16.smt2 create mode 100644 bench_horn_multiple/samples_multiple_inv_17.smt2 diff --git a/bench_horn_multiple/dillig12.smt2 b/bench_horn_multiple/dillig12.smt2 index 40f3efaec..2b58aec8b 100644 --- a/bench_horn_multiple/dillig12.smt2 +++ b/bench_horn_multiple/dillig12.smt2 @@ -21,11 +21,11 @@ (rule (=> (and - (FUN m n s t flag) - (= m1 (+ m 1)) - (= n1 (+ n 1)) - (= s1 (+ s m1)) - (= t1 (+ t n1)) + (FUN m n s t flag) + (= m1 (+ m 1)) + (= n1 (+ n 1)) + (= s1 (+ s m1)) + (= t1 (+ t n1)) (= t2 (ite (= flag 1) (+ t1 m1) t1)) ) (FUN m1 n1 s1 t2 flag) @@ -43,7 +43,7 @@ (rule (=> (and - (SAD x y) + (SAD x y) (<= y x) (or (= y1 (+ y 1)) (= y1 (+ y 2))) ) diff --git a/bench_horn_multiple/dillig17.smt2 b/bench_horn_multiple/dillig17.smt2 index 224f0df82..0c93444fc 100644 --- a/bench_horn_multiple/dillig17.smt2 +++ b/bench_horn_multiple/dillig17.smt2 @@ -17,8 +17,8 @@ (rule (=> (and - (NEST i j k n) - (<= j (- i 1)) + (NEST i j k n) + (<= j (- i 1)) (= k1 (+ k (- i j))) (= j1 (+ j 1)) ) diff --git a/bench_horn_multiple/dillig24.smt2 b/bench_horn_multiple/dillig24.smt2 index a77002c3d..37d53a039 100644 --- a/bench_horn_multiple/dillig24.smt2 +++ b/bench_horn_multiple/dillig24.smt2 @@ -19,9 +19,9 @@ (rule (=> (and - (WEEE i j k n) + (WEEE i j k n) (< k n) - (= k1 (+ k 1)) + (= k1 (+ k 1)) ) (WEEE i j k1 n) ) diff --git a/bench_horn_multiple/dillig25.smt2 b/bench_horn_multiple/dillig25.smt2 index b7d00241f..d9bc64653 100644 --- a/bench_horn_multiple/dillig25.smt2 +++ b/bench_horn_multiple/dillig25.smt2 @@ -17,9 +17,9 @@ (rule (=> (and - (NEST x y i j) - (= i1 (ite (= x y) (+ i 1) i)) - (= j1 (ite (= x y) j (+ j 1))) + (NEST x y i j) + (= i1 (ite (= x y) (+ i 1) i)) + (= j1 (ite (= x y) j (+ j 1))) ) (NEST x y i1 j1) ) diff --git a/bench_horn_multiple/dillig28.smt2 b/bench_horn_multiple/dillig28.smt2 index 56f359b18..ae690c56b 100644 --- a/bench_horn_multiple/dillig28.smt2 +++ b/bench_horn_multiple/dillig28.smt2 @@ -12,9 +12,9 @@ (rule (=> (and - (FUN x y n) - (= x1 (+ x 1)) - (= y1 (+ y 1)) + (FUN x y n) + (= x1 (+ x 1)) + (= y1 (+ y 1)) ) (FUN x1 y1 n) ) @@ -24,10 +24,10 @@ (rule (=> (and - (SAD x y n) - (or (<= x (- n 1)) (>= x (+ n 1))) - (= x1 (- x 1)) - (= y1 (- y 1)) + (SAD x y n) + (or (<= x (- n 1)) (>= x (+ n 1))) + (= x1 (- x 1)) + (= y1 (- y 1)) ) (SAD x1 y1 n) ) diff --git a/bench_horn_multiple/niagara.smt2 b/bench_horn_multiple/niagara.smt2 index a41c62c2f..29acc1fb2 100644 --- a/bench_horn_multiple/niagara.smt2 +++ b/bench_horn_multiple/niagara.smt2 @@ -8,13 +8,12 @@ (declare-rel fail ()) - (rule (=> (and (= x1 0) (= y1 0)) (itp1 x1 y1))) (rule (=> (and - (itp1 x1 y1) - (< y1 10) + (itp1 x1 y1) + (< y1 100000) (= x2 (+ x1 1)) (= y2 (+ y1 x2)) ) @@ -23,25 +22,18 @@ ) (rule (=> (and (itp1 x1 y1) - (= y1 10) - (= x2 (+ x1 1)) - (= y2 (+ y1 x2))) - (itp2 x2 y2))) - - -(rule (=> (and (itp1 x1 y1) - (= y1 10) + (= y1 100000) (= x2 (+ x1 2)) (= y2 (+ y1 x2))) (itp2 x2 y2))) -(rule (=> (and (itp1 x1 y1) (< y1 10) (> x1 y1)) fail)) +(rule (=> (and (itp1 x1 y1) (< y1 100000) (> x1 y1)) fail)) (rule (=> (and - (itp2 x1 y1) - (> y1 10) + (itp2 x1 y1) + (> y1 100000) (= x2 (+ x1 1)) (= y2 (+ y1 x2)) @@ -54,4 +46,3 @@ (query fail :print-certificate true) - diff --git a/bench_horn_multiple/nonlin_multiple_inv_02.smt2 b/bench_horn_multiple/nonlin_multiple_inv_02.smt2 index 78cca0385..c11bffb47 100644 --- a/bench_horn_multiple/nonlin_multiple_inv_02.smt2 +++ b/bench_horn_multiple/nonlin_multiple_inv_02.smt2 @@ -10,7 +10,7 @@ (rule (=> (> m 0) (PRE m))) -(rule (=> (PRE m) (PRE m))) ; very stupid +(rule (=> (and (PRE m) (= m1 (+ m 1))) (PRE m1))) (rule (=> (PRE m) (POST m m 1))) diff --git a/bench_horn_multiple/nonlin_multiple_inv_03.smt2 b/bench_horn_multiple/nonlin_multiple_inv_03.smt2 new file mode 100644 index 000000000..7d0fb8a3e --- /dev/null +++ b/bench_horn_multiple/nonlin_multiple_inv_03.smt2 @@ -0,0 +1,29 @@ +(declare-rel PRE (Int Int Int)) +(declare-rel POST (Int Int Int Int)) +(declare-var m Int) +(declare-var m1 Int) +(declare-var n Int) +(declare-var n1 Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) + +(declare-rel fail ()) + +(rule (=> (> n 0) (PRE n 0 0))) + +(rule (=> (and (PRE n i j) (> n 0) + (= n1 (- n 1)) + (or + (and (= i1 (+ i 1)) (= j1 j)) + (and (= i1 i) (= j1 (+ j 1))))) + (PRE n1 i1 j1))) + +(rule (=> (and (PRE n i j) (= n 0)) (POST 0 0 i j))) + +(rule (=> (and (POST m n i j) (= m1 (+ m j)) (= n1 (+ n 1)) ) (POST m1 n1 i j))) + +(rule (=> (and (POST m n i j) (not (= (* n j) m))) fail)) + +(query fail) diff --git a/bench_horn_multiple/nonlin_multiple_inv_04.smt2 b/bench_horn_multiple/nonlin_multiple_inv_04.smt2 new file mode 100644 index 000000000..3472e21ca --- /dev/null +++ b/bench_horn_multiple/nonlin_multiple_inv_04.smt2 @@ -0,0 +1,21 @@ +(declare-rel PRE (Int Int)) +(declare-rel POST (Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) + +(declare-rel fail ()) + +(rule (=> (and (> i 0) (> j 0)) (PRE i j))) + +(rule (=> (and (PRE i j) (= i1 (+ i 1)) (= j1 (+ j 1))) (PRE i1 j1))) + +(rule (=> (and (PRE i j) (= i1 (* i j))) (POST i1 j))) + +(rule (=> (and (POST i j) (= i1 (- i 1)) (= j1 (- j 1))) (POST i1 j1))) + +(rule (=> (and (POST i j) (not (>= i j))) fail)) + +(query fail) + diff --git a/bench_horn_multiple/samples_multiple_inv_11.smt2 b/bench_horn_multiple/samples_multiple_inv_11.smt2 new file mode 100644 index 000000000..5ce14096e --- /dev/null +++ b/bench_horn_multiple/samples_multiple_inv_11.smt2 @@ -0,0 +1,41 @@ +(declare-rel LOOPY (Int Int)) +(declare-rel LOOPZ (Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) +(declare-var z Int) +(declare-var z1 Int) + +(declare-rel fail ()) + +(rule (=> (< y z) (LOOPY y z))) + +(rule (=> + (and + (LOOPY y z) + (< y z) + (= y1 (+ y 1000)) + (= z1 z) + ) + (LOOPY y1 z1) + ) +) + +(rule (=> (and (LOOPY y z) (not (< y z))) (LOOPZ 0 y z))) + +(rule (=> + (and + (LOOPZ x y z) + (> y z) + (= x1 (+ x 1)) + (= y1 y) + (= z1 (+ z 2)) + ) + (LOOPZ x1 y1 z1) + ) +) + +(rule (=> (and (LOOPZ x y z) (not (> y z)) (not (<= x 500))) fail)) + +(query fail) diff --git a/bench_horn_multiple/samples_multiple_inv_12.smt2 b/bench_horn_multiple/samples_multiple_inv_12.smt2 new file mode 100644 index 000000000..48318afeb --- /dev/null +++ b/bench_horn_multiple/samples_multiple_inv_12.smt2 @@ -0,0 +1,45 @@ +(declare-rel INV0 (Int Int Int)) +(declare-rel INV1 (Int Int Int)) +(declare-rel INV2 (Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) +(declare-var z Int) +(declare-var z1 Int) + +(declare-rel fail ()) + +(rule (=> (> x 0) (INV0 x 0 0))) + +(rule (=> (and (INV0 x y z) (> x 0) (= x1 (- x 1))) (INV1 x1 y z))) + +(rule (=> + (and + (INV1 x y z) + (< y x) + (= y1 (+ y 1)) + (= z1 (- z 1)) + ) + (INV1 x y1 z1) + ) +) + +(rule (=> (and (INV1 x y z) (not (< y x))) (INV2 x y z))) + +(rule (=> + (and + (INV2 x y z) + (< z x) + (= y1 (- y 1)) + (= z1 (+ z 1)) + ) + (INV2 x y1 z1) + ) +) + +(rule (=> (and (INV2 x y z) (not (< z x))) (INV0 x y z))) + +(rule (=> (and (INV0 x y z) (= x 0) (not (= y z))) fail)) + +(query fail) diff --git a/bench_horn_multiple/samples_multiple_inv_13.smt2 b/bench_horn_multiple/samples_multiple_inv_13.smt2 new file mode 100644 index 000000000..5de412cf9 --- /dev/null +++ b/bench_horn_multiple/samples_multiple_inv_13.smt2 @@ -0,0 +1,37 @@ +(declare-rel PRE (Int Int Int Int )) +(declare-rel POST1 (Int Int Int )) +(declare-rel POST2 (Int Int Int )) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) +(declare-var n Int) +(declare-var n1 Int) +(declare-var m Int) +(declare-var m1 Int) + +(declare-rel fail ()) + +(rule (=> (>= n 0) (PRE n n 0 0))) + +(rule (=> (and (PRE n m i j) (> n 0) + (= n1 (- n 1)) + (or + (and (= i1 (+ i 1)) (= j1 j)) + (and (= i1 i) (= j1 (+ j 1))))) + (PRE n1 m i1 j1))) + +(rule (=> (and (PRE n m i j) (= n 0)) (POST1 m i j))) + +;interestingly, with this precondition the task becomes almost trivial +;(rule (=> (= m (+ i j)) (POST1 m i j))) + +(rule (=> (and (POST1 m i j ) (> i 0) (= i1 (- i 1)) (= m1 (- m 1)) ) (POST1 m1 i1 j ))) + +(rule (=> (and (POST1 m i j ) (= i 0)) (POST2 m i j ))) + +(rule (=> (and (POST2 m i j ) (> j 0) (= j1 (- j 1)) (= m1 (- m 1)) ) (POST2 m1 i j1 ))) + +(rule (=> (and (POST2 m i j ) (= j 0) (not (= m 0))) fail)) + +(query fail) diff --git a/bench_horn_multiple/samples_multiple_inv_14.smt2 b/bench_horn_multiple/samples_multiple_inv_14.smt2 new file mode 100644 index 000000000..317fc2e4c --- /dev/null +++ b/bench_horn_multiple/samples_multiple_inv_14.smt2 @@ -0,0 +1,44 @@ +(declare-rel PRE (Int Int Int Int Int)) +(declare-rel POST1 (Int Int Int Int)) +(declare-rel POST2 (Int Int Int Int)) +(declare-rel POST3 (Int Int Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) +(declare-var k Int) +(declare-var k1 Int) +(declare-var n Int) +(declare-var n1 Int) +(declare-var m Int) +(declare-var m1 Int) + +; same as samples_multiple_inv_13.smt2, but with one iterator more + +(declare-rel fail ()) + +(rule (=> (>= n 0) (PRE n n 0 0 0))) + +(rule (=> (and (PRE n m i j k) (> n 0) + (= n1 (- n 1)) + (or + (and (= i1 (+ i 1)) (= j1 j) (= k1 k)) + (and (= i1 i) (= j1 (+ j 1)) (= k1 k)) + (and (= i1 i) (= j1 j) (= k1 (+ k 1))))) + (PRE n1 m i1 j1 k1))) + +(rule (=> (and (PRE n m i j k) (= n 0)) (POST1 m i j k))) + +(rule (=> (and (POST1 m i j k) (> i 0) (= i1 (- i 1)) (= m1 (- m 1)) ) (POST1 m1 i1 j k))) + +(rule (=> (and (POST1 m i j k) (= i 0)) (POST2 m i j k))) + +(rule (=> (and (POST2 m i j k) (> j 0) (= j1 (- j 1)) (= m1 (- m 1)) ) (POST2 m1 i j1 k))) + +(rule (=> (and (POST2 m i j k) (= j 0)) (POST3 m i j k))) + +(rule (=> (and (POST3 m i j k) (> k 0) (= k1 (- j 1)) (= m1 (- m 1)) ) (POST3 m1 i j k1))) + +(rule (=> (and (POST3 m i j k) (= k 0) (not (= m 0))) fail)) + +(query fail) diff --git a/bench_horn_multiple/samples_multiple_inv_15.smt2 b/bench_horn_multiple/samples_multiple_inv_15.smt2 new file mode 100644 index 000000000..24cf1d30c --- /dev/null +++ b/bench_horn_multiple/samples_multiple_inv_15.smt2 @@ -0,0 +1,33 @@ +(declare-rel PRE (Int Int Int Int )) +(declare-rel POST (Int Int Int )) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) +(declare-var n Int) +(declare-var n1 Int) +(declare-var m Int) +(declare-var m1 Int) + +(declare-rel fail ()) + +(rule (=> (>= n 0) (PRE n n 0 0))) + +(rule (=> (and (PRE n m i j) (> n 0) + (= n1 (- n 1)) + (or + (and (= i1 (+ i 1)) (= j1 j)) + (and (= i1 i) (= j1 (+ j 1))))) + (PRE n1 m i1 j1))) + +(rule (=> (and (PRE n m i j) (= n 0)) (POST m i j))) + +(rule (=> (and (POST m i j ) (> m 0) (= m1 (- m 1)) + (or + (and (= i1 (- i 1)) (= j1 j)) + (and (= i1 i) (= j1 (- j 1))))) + (POST m1 i1 j1 ))) + +(rule (=> (and (POST m i j ) (= m 0) (not (or (<= i 0) (<= j 0)))) fail)) + +(query fail) diff --git a/bench_horn_multiple/samples_multiple_inv_16.smt2 b/bench_horn_multiple/samples_multiple_inv_16.smt2 new file mode 100644 index 000000000..ebdf8ef84 --- /dev/null +++ b/bench_horn_multiple/samples_multiple_inv_16.smt2 @@ -0,0 +1,33 @@ +(declare-rel PRE (Int Int Int Int )) +(declare-rel POST (Int Int Int )) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) +(declare-var n Int) +(declare-var n1 Int) +(declare-var m Int) +(declare-var m1 Int) + +(declare-rel fail ()) + +(rule (=> (>= n 0) (PRE n n 0 0))) + +(rule (=> (and (PRE n m i j) (> n 0) + (= n1 (- n 1)) + (or + (and (= i1 (+ i 1)) (= j1 j)) + (and (= i1 i) (= j1 (+ j 1))))) + (PRE n1 m i1 j1))) + +(rule (=> (and (PRE n m i j) (= n 0)) (POST m i j))) + +(rule (=> (and (POST m i j ) (> m 0) (= m1 (- m 1)) + (or + (and (= i1 (- i 1)) (= j1 j)) + (and (= i1 i) (= j1 (- j 1))))) + (POST m1 i1 j1 ))) + +(rule (=> (and (POST m i j ) (= i 0) (= j 0) (not (= m 0))) fail)) + +(query fail) diff --git a/bench_horn_multiple/samples_multiple_inv_17.smt2 b/bench_horn_multiple/samples_multiple_inv_17.smt2 new file mode 100644 index 000000000..5c3ef948a --- /dev/null +++ b/bench_horn_multiple/samples_multiple_inv_17.smt2 @@ -0,0 +1,29 @@ +(declare-rel LOOPX (Int)) +(declare-rel LOOPY (Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (=> (= x 3138) (LOOPX x))) + +(rule (=> (and (LOOPX x) (= y1 0) (= x1 x)) (LOOPY x1 y1))) + +(rule (=> + (and + (LOOPY x y) + (not (and (= (mod y 3) 0) (> y 0))) + (= y1 (+ y 2)) + (= x1 x) + ) + (LOOPY x1 y1) + ) +) + +(rule (=> (and (LOOPY x y) (= (mod y 3) 0) (> y 0) (= x1 (+ x y))) (LOOPX x1))) + +(rule (=> (and (LOOPX x) (not (= (mod x 6) 0))) fail)) + +(query fail) From 859b80976ea35e9277ceacf81016a83ab1110ede Mon Sep 17 00:00:00 2001 From: sumanthsprabhu Date: Tue, 15 May 2018 11:27:12 +0530 Subject: [PATCH 095/236] fix semicolons error while copying; fixed it --- include/deep/DataLearner.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/deep/DataLearner.hpp b/include/deep/DataLearner.hpp index 205c9344e..9e2635b4b 100644 --- a/include/deep/DataLearner.hpp +++ b/include/deep/DataLearner.hpp @@ -94,7 +94,7 @@ namespace ufo return ptr->exprModels(inv, models); } else { BndExpl bnd(rm); - return bnd.unrollAndExecute(inv, solver, models) + return bnd.unrollAndExecute(inv, solver, models); } } @@ -120,7 +120,7 @@ namespace ufo ufo::ZSolver m_smt_solver; Expr inv; - bool multipleLoops + bool multipleLoops; unsigned int numVars; int trIndex; arma::mat dataMatrix; From d5eebe711a94a6aa611df3b7af33bb0fc7366073 Mon Sep 17 00:00:00 2001 From: sumanthsprabhu Date: Tue, 15 May 2018 11:28:05 +0530 Subject: [PATCH 096/236] fix copying error --- include/deep/RndLearnerV3.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/deep/RndLearnerV3.hpp b/include/deep/RndLearnerV3.hpp index 1ca0ca24e..49dbffc0a 100644 --- a/include/deep/RndLearnerV3.hpp +++ b/include/deep/RndLearnerV3.hpp @@ -426,7 +426,7 @@ namespace ufo if (enableDataLearning) { #ifdef HAVE_ARMADILLO - getDataCandidates(cands, behaviorfiles); + ds.getDataCandidates(cands, behaviorfiles); #else outs() << "Skipping learning from data as required library(armadillo) not found\n"; #endif From cad4138145963d94559ac3c4d9f75256f15e4770 Mon Sep 17 00:00:00 2001 From: sumanthsprabhu Date: Tue, 15 May 2018 11:39:15 +0530 Subject: [PATCH 097/236] fix a minor copy bug --- include/deep/BndExpl.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/include/deep/BndExpl.hpp b/include/deep/BndExpl.hpp index a4e075bd3..a3f8ffefb 100644 --- a/include/deep/BndExpl.hpp +++ b/include/deep/BndExpl.hpp @@ -289,6 +289,7 @@ namespace ufo traces.push_back(chcIndex); indexToInv[traces.size()-1] = r.srcRelation; } + chcIndex++; } else if (r.isQuery) { chcIndex++; continue; From 8f0e709d3f5be3cf6152ae9d877e468f8cfbcc9d Mon Sep 17 00:00:00 2001 From: sumanthsprabhu Date: Tue, 15 May 2018 18:03:40 +0000 Subject: [PATCH 098/236] fixed tautological warning --- include/deep/DataLearner.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/deep/DataLearner.hpp b/include/deep/DataLearner.hpp index 9e2635b4b..dbbf9cabe 100644 --- a/include/deep/DataLearner.hpp +++ b/include/deep/DataLearner.hpp @@ -245,7 +245,7 @@ namespace ufo cur_col = rowToPivot(cur_row); - while (cur_row >= 0 && cur_row < input.n_rows) { + while (cur_row < input.n_rows) { cur_col = rowToPivot(cur_row); From ef475548c2ed960c79c2e1534325f234473d9ce3 Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Tue, 15 May 2018 16:59:13 -0400 Subject: [PATCH 099/236] more careful handling of lin.combinations --- include/ae/ExprSimpl.hpp | 31 +++++++++++++++++-------------- include/sampl/SeedMiner.hpp | 23 ++++++++--------------- 2 files changed, 25 insertions(+), 29 deletions(-) diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index a4ed1a989..a8e601004 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -1924,13 +1924,14 @@ namespace ufo return disjoin(newDisjs, exp->getFactory()); } - inline static void getLinCombCoefs(Expr ex, set& intCoefs) + inline static bool getLinCombCoefs(Expr ex, set& intCoefs) { + bool res = true; if (isOpX(ex)) { for (auto it = ex->args_begin (), end = ex->args_end (); it != end; ++it) - getLinCombCoefs(*it, intCoefs); - } + res = res && getLinCombCoefs(*it, intCoefs); + } else if (isOp(ex)) // assuming the lin.combination is on the left side { Expr lhs = ex->left(); @@ -1940,18 +1941,24 @@ namespace ufo { if (isOpX(*it)) // else, it is 1, and we will add it anyway; { - intCoefs.insert(lexical_cast ((*it)->left())); + if (isOpX((*it)->left())) + intCoefs.insert(lexical_cast ((*it)->left())); + else return false; } } } - else + else if (isOpX(lhs)) { - if (isOpX(lhs)) - { + if (isOpX(lhs->left())) intCoefs.insert(lexical_cast (lhs->left())); - } + else return false; + } + else + { + return false; } } + return res; } inline static void getLinCombConsts(Expr ex, set& intConsts) @@ -2168,12 +2175,8 @@ namespace ufo (av[1] == srcVars[i] && av[0] == dstVars[i])) { set coefs; - try - { - exp = normalizeAtom(exp, av); - getLinCombCoefs(exp, coefs); - } - catch (const boost::bad_lexical_cast& e) { continue; } + exp = normalizeAtom(exp, av); + if (!getLinCombCoefs(exp, coefs)) continue; bool success = true; for (auto i : coefs) success = success && (i == -1 || i == 1); diff --git a/include/sampl/SeedMiner.hpp b/include/sampl/SeedMiner.hpp index dbefbc189..9a6ea9b06 100644 --- a/include/sampl/SeedMiner.hpp +++ b/include/sampl/SeedMiner.hpp @@ -65,23 +65,16 @@ namespace ufo } for (auto &a : extraVars) invVarsCstm.push_back(a.second); + tmpl = normalizeDisj(tmpl, invVarsCstm); - try + if (!isOpX (tmpl) && !isOpX (tmpl)) { - tmpl = normalizeDisj(tmpl, invVarsCstm); - - if (!isOpX (tmpl) && !isOpX (tmpl)) - { - candidates.insert(tmpl); - - // get int constants from the normalized candidate - ExprSet intConstsE; - expr::filter (tmpl, bind::IsHardIntConst(), std::inserter (intConstsE, intConstsE.begin ())); - - for (auto &a : intConstsE) intConsts.insert(lexical_cast(a)); - getLinCombCoefs(tmpl, intCoefs); - } - } catch (const boost::bad_lexical_cast& e) { /*TBD*/ } + // get int constants from the normalized candidate + ExprSet intConstsE; + expr::filter (tmpl, bind::IsHardIntConst(), std::inserter (intConstsE, intConstsE.begin ())); + for (auto &a : intConstsE) intConsts.insert(lexical_cast(a)); + if (getLinCombCoefs(tmpl, intCoefs)) candidates.insert(tmpl); + } } void addSeed(Expr term) From efaf249391d39b2086b41d63a1682be8e9074e6b Mon Sep 17 00:00:00 2001 From: sumanthsprabhu Date: Wed, 16 May 2018 20:25:16 +0530 Subject: [PATCH 100/236] Evaluate constants of abstracted variable When constant is generalized to a variable convert it from (int*var)*int to var*(value(int*int). This is because normalizeAtom expects each term to be of the form const*var or var*const. --- include/deep/DataLearner.hpp | 43 +++++++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/include/deep/DataLearner.hpp b/include/deep/DataLearner.hpp index dbbf9cabe..388526cba 100644 --- a/include/deep/DataLearner.hpp +++ b/include/deep/DataLearner.hpp @@ -344,14 +344,41 @@ namespace ufo std::stringstream coeffStream; coeffStream << std::fixed << basis(row,col); - Expr abstractCoeff = nullptr; - if (!allowedPolyCoefficient(basis(row,col), abstractCoeff)) { - continue; - } - - Expr mult; - if (abstractCoeff != nullptr) { - mult = mk(abstractCoeff, monomialToExpr[row]); + Expr abstractVar = nullptr; + if (!allowedPolyCoefficient(basis(row,col), abstractVar)) { + continue; + } + + Expr mult; + if (abstractVar != nullptr) { + Expr monomialExpr = monomialToExpr[row]; + if (!isNumericConst(monomialExpr)) { + mult = mk(abstractVar, monomialExpr); + } else { + int monomialInt = lexical_cast(monomialExpr); + //assumption is that abstractVar will be of the form intConst * var or var * intConst + bool success = true; + Expr var = nullptr; + int varCoeff = 1; + if (!isOpX(abstractVar)) { + success = false; + } else { + for (auto it = abstractVar->args_begin(), end = abstractVar->args_end(); it != end; ++it) { + if (isNumericConst(*it)) { + varCoeff = lexical_cast(*it); + } else if (bind::isIntConst(*it)) { + var = *it; + } else { + success = false; + } + } + } + if (!success || var == nullptr) { + mult = mk(abstractVar, monomialExpr); + } else { + mult = mk(mkTerm(mpz_class(varCoeff*monomialInt), m_efac), var); + } + } } else { int coeff; coeffStream >> coeff; From 398f6b5fc7a8ebeed794661df75def2f2c3b8a06 Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Thu, 17 May 2018 01:09:19 -0400 Subject: [PATCH 101/236] MultiFreqHorn: Houdini-style weakening and batching at the bootstrapping --- .../nonlin_multiple_inv_05.smt2 | 20 + .../samples_multiple_inv_18.smt2 | 33 ++ include/deep/Horn.hpp | 55 ++ include/deep/RndLearnerV3.hpp | 474 +++++++++++------- 4 files changed, 397 insertions(+), 185 deletions(-) create mode 100644 bench_horn_multiple/nonlin_multiple_inv_05.smt2 create mode 100644 bench_horn_multiple/samples_multiple_inv_18.smt2 diff --git a/bench_horn_multiple/nonlin_multiple_inv_05.smt2 b/bench_horn_multiple/nonlin_multiple_inv_05.smt2 new file mode 100644 index 000000000..f0f0f97da --- /dev/null +++ b/bench_horn_multiple/nonlin_multiple_inv_05.smt2 @@ -0,0 +1,20 @@ +(declare-rel PRE (Int Int)) +(declare-rel POST (Int Int)) +(declare-var m Int) +(declare-var m1 Int) +(declare-var n Int) +(declare-var n1 Int) + +(declare-rel fail ()) + +(rule (=> (and (> m 0) (> n 0)) (PRE m n))) + +(rule (=> (and (PRE m n) (> m 1) (= m1 (- m 1)) (= n1 (* m1 n))) (PRE m1 n1))) + +(rule (=> (and (PRE m n) (= m 1) (= m1 (- m 2)) (= n1 (* m1 n))) (POST m1 n1))) + +(rule (=> (and (POST m n) (= m1 (+ m 2)) (= n1 (* m1 n))) (POST m1 n1))) + +(rule (=> (and (POST m n) (not (< n 0))) fail)) + +(query fail) diff --git a/bench_horn_multiple/samples_multiple_inv_18.smt2 b/bench_horn_multiple/samples_multiple_inv_18.smt2 new file mode 100644 index 000000000..09efecf9c --- /dev/null +++ b/bench_horn_multiple/samples_multiple_inv_18.smt2 @@ -0,0 +1,33 @@ +(declare-rel PRE (Int Int Int)) +(declare-rel POST (Int Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) +(declare-var z Int) +(declare-var z1 Int) + +(declare-rel fail ()) + +(rule (PRE 0 0 z)) + +(rule (=> (and (PRE i j z) + (or + (and (< j 0) (= j1 (- j z)) (= i1 (+ i z))) + (and (>= j 0) (= j1 (+ j z)) (= i1 (- i z))))) + (PRE i1 j1 z))) + +; z > 0 => j < 0 && i > 0 +; z < 0 => j > 0 && i < 0 + +(rule (=> (and (PRE i j z) (< i j) (= z1 (- z))) (POST i j z1))) + +(rule (=> (and (POST i j z) (not (= i j)) + (or + (and (< j 0) (= j1 (+ i z)) (= i1 (- j z))) + (and (>= j 0) (= j1 (- i z)) (= i1 (+ j z))))) + (POST i1 j1 z))) + +(rule (=> (and (POST i j z) (= i j) (not (= i 0))) fail)) + +(query fail) diff --git a/include/deep/Horn.hpp b/include/deep/Horn.hpp index 5385dae9d..63a90dca4 100755 --- a/include/deep/Horn.hpp +++ b/include/deep/Horn.hpp @@ -100,6 +100,8 @@ namespace ufo Expr failDecl; vector chcs; + vector wtoCHCs; + ExprVector wtoDecls; ExprSet decls; map invVars; map> outgs; @@ -270,6 +272,8 @@ namespace ufo } } } + + wtoSort(); } void addRule (HornRuleExt* r) @@ -321,6 +325,57 @@ namespace ufo return conjoin(newCnjs, m_efac); } + void wtoSort() + { + if (wtoCHCs.size() > 0) + { + outs () << "Already sorted\n"; + return; + } + + int r1 = 0; + for (auto & hr : chcs) + if (hr.isInductive) + { + wtoDecls.push_back(hr.srcRelation); + wtoCHCs.push_back(&hr); + } + int r2 = wtoDecls.size(); + + while (r1 != r2) + { + for (int i = r1; i < r2; i++) + { + auto dcl = wtoDecls[i]; + for (auto &hr : chcs) + { + if (find(wtoCHCs.begin(), wtoCHCs.end(), &hr) != wtoCHCs.end()) continue; + + if (hr.srcRelation == dcl) + { + wtoDecls.push_back(hr.dstRelation); + wtoCHCs.push_back(&hr); + } + else if (hr.dstRelation == dcl) + { + wtoDecls.push_back(hr.srcRelation); + wtoCHCs.push_back(&hr); + } + } + } + r1 = r2; + r2 = wtoDecls.size(); + } + assert(wtoCHCs.size() == chcs.size()); + + // filter wtoDecls + for (auto it = wtoDecls.begin(); it != wtoDecls.end();) + { + if (*it == failDecl || isOpX(*it)) it = wtoDecls.erase(it); + else ++it; + } + } + // Transformations void mergeIterations(Expr decl, int num) diff --git a/include/deep/RndLearnerV3.hpp b/include/deep/RndLearnerV3.hpp index 49dbffc0a..f1ee45c5c 100644 --- a/include/deep/RndLearnerV3.hpp +++ b/include/deep/RndLearnerV3.hpp @@ -11,64 +11,51 @@ using namespace std; using namespace boost; namespace ufo { - class RndLearnerV3 : public RndLearner + class RndLearnerV3 : public RndLearnerV2 { private: ExprSet checked; - map candidates; + map candidates; + int updCount = 1; public: RndLearnerV3 (ExprFactory &efac, EZ3 &z3, CHCs& r, bool freqs, bool aggp) : - RndLearner (efac, z3, r, /*k-induction*/ false, freqs, /*epsilon*/ true, aggp){} + RndLearnerV2 (efac, z3, r, freqs, aggp){} bool checkInit(int invNum, Expr rel) { - for (int i = 0; i < ruleManager.chcs.size(); i++) + vector adjacent; + for (auto &hr: ruleManager.chcs) { - auto & a = ruleManager.chcs[i]; - if (a.isFact && a.dstRelation == rel) + if (hr.isFact && hr.dstRelation == rel) { - bool res = checkCHC(a); - if (!res) - { - ExprVector invVars; - for (auto & a : invarVars[invNum]) invVars.push_back(a.second); - Expr failedCand = normalizeDisj(candidates[invNum], invVars); - SamplFactory& sf = sfs[invNum].back(); - Sampl& s = sf.exprToSampl(failedCand); - sf.assignPrioritiesForFailed(); - } - return res; + adjacent.push_back(&hr); } } - return true; - } - - bool checkAllAdjacent(Expr rel) - { - for (auto &hr: ruleManager.chcs) - { - if (( (hr.srcRelation == rel && - find(checked.begin(), checked.end(), hr.dstRelation) != checked.end()) - || (hr.dstRelation == rel && - find(checked.begin(), checked.end(), hr.srcRelation) != checked.end()))) - if (!hr.isQuery && !checkCHC(hr)) return false; // TODO: use this knowledge somehow - } - return true; + if (adjacent.empty()) return true; + return multiHoudini(adjacent); } bool checkInductiveness(Expr rel) { + vector adjacent; for (auto &hr: ruleManager.chcs) { + bool checkedSrc = find(checked.begin(), checked.end(), hr.srcRelation) != checked.end(); + bool checkedDst = find(checked.begin(), checked.end(), hr.dstRelation) != checked.end(); if ((hr.srcRelation == rel && hr.dstRelation == rel) || - (hr.srcRelation == rel && find(checked.begin(), checked.end(), hr.dstRelation) != checked.end()) || - (hr.dstRelation == rel && find(checked.begin(), checked.end(), hr.srcRelation) != checked.end())) - if (!hr.isQuery && !checkCHC(hr)) return false; + (hr.srcRelation == rel && checkedDst) || + (hr.dstRelation == rel && checkedSrc) || + (checkedSrc && checkedDst) || + (hr.isFact && checkedDst)) + { + if (!hr.isQuery) adjacent.push_back(&hr); + } } - return true; + if (adjacent.empty()) return true; + return multiHoudini(adjacent); } Expr eliminateQuantifiers(Expr formula, ExprVector& varsRenameFrom, int invNum) @@ -90,19 +77,15 @@ namespace ufo return mk(m_efac); } - bool getCandForAdjacentRel(Expr candToProp, Expr constraint, ExprVector& varsRenameFrom, Expr rel) + bool getCandForAdjacentRel(Expr candToProp, Expr constraint, ExprVector& varsRenameFrom, Expr rel, bool seed) { Expr formula = mk(candToProp, constraint); + if (!u.isSat(formula)) return false; // sometimes, maybe we should return true. + if (findNonlin(formula)) { - // Currently unsupported, - // Cannot propagate anything, - // So simply try checking if "TRUE" is OK - if (checkAllAdjacent(rel)){ - checked.insert(rel); - return true; - } - return false; + checked.insert(rel); + return true; } ExprSet dsjs; @@ -115,86 +98,86 @@ namespace ufo Expr newCand = disjoin(newSeedDsjs, m_efac); - // reserve - ExprSet checkedTmp = checked; - map candidatesTmp = candidates; - - if (!isOpX(newCand)) + if (seed) { ExprSet cnjs; + ExprSet newCnjs; getConj(newCand, cnjs); - bool resFinal = false; - if (cnjs.size() > 1) + for (auto & cnd : cnjs) { - resFinal = false; - for (auto & a : cnjs) // TODO: Houdini style - { - candidates[invNum] = a; - if (!checkAllAdjacent(rel)) { - candidates = candidatesTmp; - continue; - } - - bool res = checkCand(invNum, a); - if (res) - { - checkedTmp = checked; - candidatesTmp = candidates; - } - else - { - checked = checkedTmp; - candidates = candidatesTmp; - } - resFinal = resFinal || res; - } + if (hasUnsupportedSymbs(cnd)) continue; + newCnjs.insert(cnd); + addCandidate(invNum, cnd); } - else + + newCand = conjoin(newCnjs, m_efac); + checked.insert(rel); + return propagate(invNum, newCand, true); + } + else + { + if (!isOpX(newCand)) { - resFinal = checkCand(invNum, newCand); - } + ExprSet cnjs; + getConj(newCand, cnjs); + for (auto & a : cnjs) addCandidate(invNum, a); - if (resFinal) return true; - checked = checkedTmp; - candidates = candidatesTmp; - if (checkAllAdjacent(rel)){ - checked.insert(rel); - return true; + return checkCand(invNum); } - return false; + else return true; } - else return true; } - // similar to getCandForAdjacentRel, but not recursive - Expr getSeedsByQE(Expr candToProp, Expr constraint, ExprVector& varsRenameFrom, Expr rel) + // temporary workaround + bool hasUnsupportedSymbs(Expr e) { - Expr formula = mk(candToProp, constraint); - if (findNonlin(formula)) return mk(m_efac); - ExprSet dsjs; - getDisj(candToProp, dsjs); - ExprSet newSeedDsjs; - for (auto & d : dsjs) - newSeedDsjs.insert(eliminateQuantifiers(mk(d, constraint), varsRenameFrom, getVarIndex(rel, decls))); + ExprSet artif; + expr::filter (e, bind::IsConst(), std::inserter (artif, artif.begin ())); + for (auto & a : artif) + { + if (lexical_cast(a).substr(0, 5) == "__e__") return true; + } + return false; + } - return disjoin(newSeedDsjs, m_efac); + void addCandidate(int invNum, Expr cnd) + { + for (auto & a : candidates[invNum]) + { + if (u.isEquiv(a, cnd)) return; + } + candidates[invNum].push_back(cnd); } - // TODO: try propagating learned lemmas too - bool propagate(int invNum, Expr cand) + bool propagate(int invNum, Expr cand, bool seed) { bool res = true; Expr rel = decls[invNum]; + for (auto & hr : ruleManager.chcs) { - if (hr.srcRelation == hr.dstRelation) continue; + if (hr.srcRelation == hr.dstRelation || hr.isQuery) continue; + + // adding lemmas to the body. GF: not sure if it helps + Expr constraint = hr.body; + SamplFactory& sf2 = sfs[getVarIndex(hr.dstRelation, decls)].back(); + Expr lm2 = sf2.getAllLemmas(); + for (auto & v : invarVars[getVarIndex(hr.dstRelation, decls)]) + lm2 = replaceAll(lm2, v.second, hr.dstVars[v.first]); + constraint = mk(constraint, lm2); + + if (!hr.isFact) + { + SamplFactory& sf1 = sfs[getVarIndex(hr.srcRelation, decls)].back(); + constraint = mk(constraint, sf1.getAllLemmas()); + } // forward: - if (hr.srcRelation == rel && find(checked.begin(), checked.end(), hr.dstRelation) == checked.end() && !hr.isQuery) + if (hr.srcRelation == rel && find(checked.begin(), checked.end(), hr.dstRelation) == checked.end()) { Expr replCand = cand; for (auto & v : invarVars[invNum]) replCand = replaceAll(replCand, v.second, hr.srcVars[v.first]); - res = res && getCandForAdjacentRel (replCand, hr.body, hr.dstVars, hr.dstRelation); + res = res && getCandForAdjacentRel (replCand, constraint, hr.dstVars, hr.dstRelation, seed); } // backward (very similarly): @@ -202,110 +185,191 @@ namespace ufo { Expr replCand = cand; for (auto & v : invarVars[invNum]) replCand = replaceAll(replCand, v.second, hr.dstVars[v.first]); - res = res && getCandForAdjacentRel (replCand, hr.body, hr.srcVars, hr.srcRelation); + res = res && getCandForAdjacentRel (replCand, constraint, hr.srcVars, hr.srcRelation, seed); } } return res; } - bool checkCand(int curInv, Expr cand) + bool checkCand(int invNum) { - Expr rel = decls[curInv]; -// outs () << " -- cand for " << *rel << ": " << *cand << "\n"; - candidates[curInv] = cand; - if (!checkInit(curInv, rel)) return false; + Expr rel = decls[invNum]; +// outs () << " -- checkCand for " << *rel << ": " << *conjoin(candidates[invNum], m_efac) << "\n"; + if (!checkInit(invNum, rel)) return false; if (!checkInductiveness(rel)) return false; checked.insert(rel); - return propagate(curInv, cand); + return propagate(invNum, conjoin(candidates[invNum], m_efac), false); } - bool learn (int curInv, Expr cand) + void assignPrioritiesForLearned() { - if (checkCand(curInv, cand)) + bool progress = true; + for (auto & cand : candidates) { - for (auto & a : candidates) + if (cand.second.size() > 0) { - if (a.second != NULL && !isOpX(a.second)) + ExprVector invVars; + SamplFactory& sf = sfs[cand.first].back(); + for (auto & a : invarVars[cand.first]) invVars.push_back(a.second); + for (auto & b : cand.second) { - SamplFactory& sf = sfs[a.first].back(); - sf.learnedExprs.insert(a.second); // TODO: split conjunctions -// outs() << " lemmas learned for " << *decls[a.first] << ": " << *a.second << "\n"; - } - } - - if (checkAllLemmas(false)) - { - return true; - } - else - { - for (auto & a : candidates) - { - if (a.second != NULL && !isOpX(a.second)) + Expr learnedCand = normalizeDisj(b, invVars); + SamplFactory& sf = sfs[cand.first].back(); + Sampl& s = sf.exprToSampl(learnedCand); + sf.assignPrioritiesForLearned(); + if (!u.implies(sf.getAllLemmas(), learnedCand)) { - ExprVector invVars; - for (auto & a : invarVars[curInv]) invVars.push_back(a.second); - Expr learnedCand = normalizeDisj(cand, invVars); - SamplFactory& sf = sfs[a.first].back(); - Sampl& s = sf.exprToSampl(learnedCand); // TODO: split conjunctions - sf.assignPrioritiesForLearned(); + sf.learnedExprs.insert(learnedCand); +// outs() << " lemmas learned for " << *decls[cand.first] << ": " << *learnedCand << "\n"; } + else progress = false; } } } - return false; + // if (progress) updateGrammars(); // GF: doesn't work great :( } void synthesize(int maxAttempts, char * outfile) { - int curInv = 0; + ExprSet cands; for (int i = 0; i < maxAttempts; i++) { + // next cand (to be sampled) + // TODO: find a smarter way to calculate; make parametrizable + int invNum = getVarIndex(ruleManager.wtoDecls[i % ruleManager.wtoDecls.size()], decls); checked.clear(); candidates.clear(); - SamplFactory& sf = sfs[curInv].back(); + SamplFactory& sf = sfs[invNum].back(); Expr cand = sf.getFreshCandidate(); if (cand == NULL) continue; - if (learn(curInv, cand)) + addCandidate(invNum, cand); + if (checkCand(invNum)) { - outs () << "Success after " << (i+1) << " iterations\n"; - return; + assignPrioritiesForLearned(); + if (checkAllLemmas()) + { + outs () << "Success after " << (i+1) << " iterations\n"; + return; + } } + } + } - // next cand (to be sampled) - curInv = (curInv + 1) % invNumber; - // just natural order; TODO: find a smarter way to calculate; make parametrizable + bool splitUnsatSets(ExprVector & src, ExprVector & dst1, ExprVector & dst2) + { + if (u.isSat(conjoin(src, m_efac))) return false; + + for (auto & a : src) dst1.push_back(a); + + for (auto it = dst1.begin(); it != dst1.end(); ) + { + dst2.push_back(*it); + it = dst1.erase(it); + if (u.isSat(conjoin(dst1, m_efac))) break; } + + // now dst1 is SAT, try to get more things from dst2 back to dst1 + + for (auto it = dst2.begin(); it != dst2.end(); ) + { + if (!u.isSat(conjoin(dst1, m_efac), *it)) { ++it; continue; } + dst1.push_back(*it); + it = dst2.erase(it); + } + + return true; } - // similar to propagate, but not recursive and w/o checking - void propagateSeeds(int invNum, Expr cand, map& cands) + bool filterUnsat() { - Expr rel = decls[invNum]; - for (auto & hr : ruleManager.chcs) + vector worklist; + for (int i = 0; i < invNumber; i++) { - if (hr.srcRelation == hr.dstRelation) continue; + if (!u.isSat(conjoin(candidates[i], m_efac))) + { + for (auto & hr : ruleManager.chcs) + { + if (hr.dstRelation == decls[i]) worklist.push_back(&hr); + } + } + } - if (hr.srcRelation == rel && find(checked.begin(), checked.end(), hr.dstRelation) == checked.end() && !hr.isQuery) + // basically, just checks initiation and immediately removes bad candidates + multiHoudini(worklist, false); + + for (int i = 0; i < invNumber; i++) + { + if (!u.isSat(conjoin(candidates[i], m_efac))) { - Expr replCand = cand; - for (auto & v : invarVars[invNum]) replCand = replaceAll(replCand, v.second, hr.srcVars[v.first]); - Expr newcand = getSeedsByQE (replCand, hr.body, hr.dstVars, hr.dstRelation); -// outs () << " propagated seed for " << *hr.dstRelation << ": " << *newcand << "\n"; - cands[hr.dstRelation].insert(newcand); + ExprVector tmp; + ExprVector stub; // TODO: try greedy search, maybe some lemmas are in stub? + splitUnsatSets(candidates[i], tmp, stub); + candidates[i] = tmp; } + } - if (hr.dstRelation == rel && find(checked.begin(), checked.end(), hr.srcRelation) == checked.end() && !hr.isFact) + return true; + } + + bool multiHoudini(vector worklist, bool recur = true) + { + if (!anyProgress(worklist)) return false; + + map candidatesTmp = candidates; + bool res1 = true; + for (auto &h: worklist) + { + HornRuleExt& hr = *h; + + if (hr.isQuery) continue; + + if (!checkCHC(hr, candidatesTmp)) { - Expr replCand = cand; - for (auto & v : invarVars[invNum]) replCand = replaceAll(replCand, v.second, hr.dstVars[v.first]); - Expr newcand = getSeedsByQE (replCand, hr.body, hr.srcVars, hr.srcRelation); -// outs () << " propagated seed for " << *hr.srcRelation << ": " << *newcand << "\n"; - cands[hr.srcRelation].insert(newcand); + bool res2 = true; + Expr model = getModel(hr.dstVars); + int ind = getVarIndex(hr.dstRelation, decls); + ExprVector& ev = candidatesTmp[ind]; + + ExprVector invVars; + for (auto & a : invarVars[ind]) invVars.push_back(a.second); + SamplFactory& sf = sfs[ind].back(); + + for (auto it = ev.begin(); it != ev.end(); ) + { + Expr repl = *it; + for (auto & v : invarVars[ind]) repl = replaceAll(repl, v.second, hr.dstVars[v.first]); + + if (!u.isSat(model, repl)) + { + if (hr.isFact) + { + Expr failedCand = normalizeDisj(*it, invVars); +// outs () << "failed cand for " << *hr.dstRelation << ": " << *failedCand << "\n"; + Sampl& s = sf.exprToSampl(failedCand); + sf.assignPrioritiesForFailed(); + } + it = ev.erase(it); + res2 = false; + } + else + { + ++it; + } + } + + if (recur && !res2) + { + res1 = false; + break; + } } } + candidates = candidatesTmp; + if (!recur) return false; + if (res1) return anyProgress(worklist); + else return multiHoudini(worklist); } // adapted from doSeedMining @@ -313,18 +377,42 @@ namespace ufo { int ind = getVarIndex(invRel, decls); SamplFactory& sf = sfs[ind].back(); + ExprSet candsFromCode; for (auto &hr : ruleManager.chcs) { if (hr.dstRelation != invRel && hr.srcRelation != invRel) continue; SeedMiner sm (hr, invRel, invarVars[ind], sf.lf.nonlinVars); sm.analyzeCode(); - for (auto &cand : sm.candidates) + for (auto &cand : sm.candidates) candsFromCode.insert(cand); + } + + for (auto & cand : candsFromCode) + { + checked.clear(); + propagate (getVarIndex(invRel, decls), cand, true); + } + + for (auto & a : candidates) + { + cands[decls[a.first]].insert(a.second.begin(), a.second.end()); + } + } + + bool anyProgress(vector worklist) + { + bool res = false; + for (int i = 0; i < invNumber; i++) + { + // simple check if there is a non-empty candidate + for (auto & hr : worklist) { -// outs () << "seed for " << *invRel << ": " << *cand << "\n"; - cands[invRel].insert(cand); - propagateSeeds(ind, cand, cands); + if (hr->srcRelation == decls[i] || hr->dstRelation == decls[i]) + { + if (candidates[i].size() > 0) return true; + } } } + return res; } #ifdef HAVE_ARMADILLO @@ -340,31 +428,50 @@ namespace ufo } if (!dl.computeData(filename)) continue; (void)dl.computePolynomials(cands[dcl]); - } + } } #endif bool bootstrap(map& cands, bool enableDataLearning, const vector & behaviorfiles){ - // TODO: batching - for (auto & dcl: decls) { - for (auto & cand : cands[dcl]) { - checked.clear(); - candidates.clear(); - if (learn(getVarIndex(dcl, decls), cand)) { - outs () << "Success after bootstrapping\n"; - return true; - } + + for (int i = 0; i < invNumber; i++) + { + for (auto & cnd : cands[decls[i]]) addCandidate(i, cnd); + } + + filterUnsat(); + + if (multiHoudini(ruleManager.wtoCHCs)) + { + assignPrioritiesForLearned(); + if (checkAllLemmas()) + { + outs () << "Success after bootstrapping\n"; + return true; } } return false; } - bool checkAllLemmas(bool addCand = true) + void updateGrammars() + { + // convert candidates to curCandidates and run the method from RndLearner + for (int ind = 0; ind < invNumber; ind++) + { + if (candidates[ind].size() == 0) curCandidates[ind] = mk(m_efac); + else curCandidates[ind] = conjoin(candidates[ind], m_efac); + } + updateRels(); + updCount++; + } + + bool checkAllLemmas() { candidates.clear(); - for (auto &hr: ruleManager.chcs) + for (int i = ruleManager.wtoCHCs.size() - 1; i >= 0; i--) { - if (!checkCHC(hr, addCand)) { + auto & hr = *ruleManager.wtoCHCs[i]; + if (!checkCHC(hr, candidates)) { if (!hr.isQuery) assert(0); // only queries are allowed to fail else @@ -374,7 +481,7 @@ namespace ufo return true; } - bool checkCHC (HornRuleExt& hr, bool addCand = true) + bool checkCHC (HornRuleExt& hr, map& annotations) { m_smt_solver.reset(); m_smt_solver.assertExpr (hr.body); @@ -384,7 +491,7 @@ namespace ufo int ind = getVarIndex(hr.srcRelation, decls); SamplFactory& sf = sfs[ind].back(); Expr lmApp = sf.getAllLemmas(); - if (addCand && candidates[ind] != NULL) lmApp = mk(lmApp, candidates[ind]); + if (annotations[ind].size() > 0) lmApp = mk(lmApp, conjoin(annotations[ind], m_efac)); for (auto & v : invarVars[ind]) lmApp = replaceAll(lmApp, v.second, hr.srcVars[v.first]); m_smt_solver.assertExpr(lmApp); } @@ -394,7 +501,7 @@ namespace ufo int ind = getVarIndex(hr.dstRelation, decls); SamplFactory& sf = sfs[ind].back(); Expr lmApp = sf.getAllLemmas(); - if (addCand && candidates[ind] != NULL) lmApp = mk(lmApp, candidates[ind]); + if (annotations[ind].size() > 0) lmApp = mk(lmApp, conjoin(annotations[ind], m_efac)); for (auto & v : invarVars[ind]) lmApp = replaceAll(lmApp, v.second, hr.dstVars[v.first]); m_smt_solver.assertExpr(mk(lmApp)); } @@ -412,13 +519,11 @@ namespace ufo ruleManager.parse(smt); RndLearnerV3 ds(m_efac, z3, ruleManager, freqs, aggp); - ds.setupSafetySolver(); - std::srand(std::time(0)); - - if (ruleManager.decls.size() <= 1) + if (ruleManager.decls.size() == 1) { - outs() << "This is an experimental thing for multiple invariants.\nFor a single invariant synthsis, run --v1 or --v2.\n"; - return; + outs() << "WARNING.\n" << + "This is an experimental thing for multiple invariants.\n" << + "For a single invariant synthsis, we suggest to use the --v2 option.\n"; } map cands; @@ -431,12 +536,11 @@ namespace ufo outs() << "Skipping learning from data as required library(armadillo) not found\n"; #endif } - for (auto& dcl: ruleManager.decls) ds.getSeeds(dcl->arg(0), cands); for (auto& dcl: ruleManager.decls) ds.doSeedMining(dcl->arg(0), cands[dcl->arg(0)]); - ds.calculateStatistics(); if (ds.bootstrap(cands, enableDataLearning, behaviorfiles)) return; + std::srand(std::time(0)); ds.synthesize(maxAttempts, outfile); } } From 68bd6b73b3ad97219a5392f86daa4048a910dea6 Mon Sep 17 00:00:00 2001 From: sumanthsprabhu Date: Thu, 17 May 2018 20:14:07 +0530 Subject: [PATCH 102/236] fix generalisation of constants Generalize based on current degree of polynomial. Also fix some heisenbugs by filling matrices to zeros initially. --- include/deep/DataLearner.hpp | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/include/deep/DataLearner.hpp b/include/deep/DataLearner.hpp index 388526cba..4d01763aa 100644 --- a/include/deep/DataLearner.hpp +++ b/include/deep/DataLearner.hpp @@ -159,7 +159,7 @@ namespace ufo computeMonomial(arma::mat data) { arma::mat monomialMatrix; - + monomialMatrix.fill(0); if (curPolyDegree == 1) { monomialMatrix.set_size(dataMatrix.n_rows, dataMatrix.n_cols); for (int i = 0; i < dataMatrix.n_rows; i++) { @@ -274,6 +274,7 @@ namespace ufo } arma::mat basis(input.n_cols, independentVars.size()); + basis.fill(0); unsigned int basis_col = 0; for (auto indVar : independentVars) { @@ -350,8 +351,8 @@ namespace ufo } Expr mult; - if (abstractVar != nullptr) { - Expr monomialExpr = monomialToExpr[row]; + Expr monomialExpr = monomialToExpr[row]; + if (abstractVar != nullptr && (isNumericConst(monomialExpr) || curPolyDegree > 1)) { if (!isNumericConst(monomialExpr)) { mult = mk(abstractVar, monomialExpr); } else { From fd4dc153ed1e2de00fc6b4c08f189e89772f46fd Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Thu, 17 May 2018 20:31:29 -0400 Subject: [PATCH 103/236] more careful handling of NIA-terms --- .../nonlin_multiple_inv_06.smt2 | 24 ++++ .../nonlin_multiple_inv_07.smt2 | 28 ++++ .../nonlin_multiple_inv_08.smt2 | 28 ++++ include/ae/ExprSimpl.hpp | 128 ++++++++++++++---- include/deep/RndLearnerV3.hpp | 38 ++---- include/sampl/SeedMiner.hpp | 3 +- 6 files changed, 195 insertions(+), 54 deletions(-) create mode 100644 bench_horn_multiple/nonlin_multiple_inv_06.smt2 create mode 100644 bench_horn_multiple/nonlin_multiple_inv_07.smt2 create mode 100644 bench_horn_multiple/nonlin_multiple_inv_08.smt2 diff --git a/bench_horn_multiple/nonlin_multiple_inv_06.smt2 b/bench_horn_multiple/nonlin_multiple_inv_06.smt2 new file mode 100644 index 000000000..4c92bb624 --- /dev/null +++ b/bench_horn_multiple/nonlin_multiple_inv_06.smt2 @@ -0,0 +1,24 @@ +(declare-rel MLT1 (Int Int Int)) +(declare-rel MLT2 (Int Int Int)) +(declare-var a Int) +(declare-var a1 Int) +(declare-var c Int) +(declare-var c1 Int) +(declare-var e Int) +(declare-var e1 Int) + +(declare-rel fail ()) + +(rule (MLT1 0 c 0)) + +(rule (=> (and (MLT1 a c e) (= a1 (+ a 1)) (= e1 (+ e c))) + (MLT1 a1 c e1))) + +(rule (=> (MLT1 a c e) (MLT2 a c e))) + +(rule (=> (and (MLT2 a c e) (= a1 (- a 1)) (= e1 (- e c))) + (MLT2 a1 c e1))) + +(rule (=> (and (MLT2 a c e) (not (= e (* a c)))) fail)) + +(query fail) diff --git a/bench_horn_multiple/nonlin_multiple_inv_07.smt2 b/bench_horn_multiple/nonlin_multiple_inv_07.smt2 new file mode 100644 index 000000000..1f859d253 --- /dev/null +++ b/bench_horn_multiple/nonlin_multiple_inv_07.smt2 @@ -0,0 +1,28 @@ +(declare-rel MLT1 (Int Int Int)) +(declare-rel MLT2 (Int Int Int Int Int)) +(declare-var a Int) +(declare-var a1 Int) +(declare-var b Int) +(declare-var b1 Int) +(declare-var c Int) +(declare-var c1 Int) +(declare-var d Int) +(declare-var d1 Int) +(declare-var e Int) +(declare-var e1 Int) + +(declare-rel fail ()) + +(rule (MLT1 0 b 0)) + +(rule (=> (and (MLT1 a b c) (= a1 (+ a 1)) (= c1 (+ c b))) + (MLT1 a1 b c1))) + +(rule (=> (MLT1 a b c) (MLT2 a b 0 c 0))) + +(rule (=> (and (MLT2 a b c d e) (= c1 (+ c 1)) (= e1 (+ e d))) + (MLT2 a b c1 d e1))) + +(rule (=> (and (MLT2 a b c d e) (not (= e (* c (* a b))))) fail)) + +(query fail) diff --git a/bench_horn_multiple/nonlin_multiple_inv_08.smt2 b/bench_horn_multiple/nonlin_multiple_inv_08.smt2 new file mode 100644 index 000000000..2a88b8564 --- /dev/null +++ b/bench_horn_multiple/nonlin_multiple_inv_08.smt2 @@ -0,0 +1,28 @@ +(declare-rel MLT1 (Int Int Int)) +(declare-rel MLT2 (Int Int Int Int Int)) +(declare-var a Int) +(declare-var a1 Int) +(declare-var b Int) +(declare-var b1 Int) +(declare-var c Int) +(declare-var c1 Int) +(declare-var d Int) +(declare-var d1 Int) +(declare-var e Int) +(declare-var e1 Int) + +(declare-rel fail ()) + +(rule (=> (> b 0) (MLT1 0 b 0))) + +(rule (=> (and (MLT1 a b c) (= a1 (+ a 1)) (= c1 (+ c b))) + (MLT1 a1 b c1))) + +(rule (=> (and (MLT1 a b c) (> a 0)) (MLT2 a b 0 c 0))) + +(rule (=> (and (MLT2 a b c d e) (= c1 (+ c 1)) (= e1 (+ e d))) + (MLT2 a b c1 d e1))) + +(rule (=> (and (MLT2 a b c d e) (> c 0) (not (> (div e d) 0))) fail)) + +(query fail) diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index a8e601004..9de1b1a13 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -89,6 +89,17 @@ namespace ufo } } + inline static void getMultOps (Expr a, ExprVector &ops) + { + if (isOpX(a)){ + for (unsigned i = 0; i < a->arity(); i++){ + getMultOps(a->arg(i), ops); + } + } else { + ops.push_back(a); + } + } + /** * Represent Expr as multiplication */ @@ -1114,44 +1125,59 @@ namespace ufo struct FindNonlinAndRewrite { ExprVector& vars; - ExprVector& vars2; ExprMap& extraVars; - FindNonlinAndRewrite (ExprVector& _vars, ExprVector& _vars2, ExprMap& _extraVars) : - vars(_vars), vars2(_vars2), extraVars(_extraVars) {}; + FindNonlinAndRewrite (ExprVector& _vars, ExprMap& _extraVars) : + vars(_vars), extraVars(_extraVars) {}; Expr operator() (Expr t) { if (isOpX(t)) { - ExprVector varsForMult; - Expr multedConsts; - for (unsigned j = 0; j < t->arity(); j++) + // using the communativity of multiplication + ExprVector ops; + getMultOps(t, ops); + + ExprVector nonlinPart; + int linPart = 1; + for (auto & a : ops) { - Expr q = t->arg(j); - if (bind::isIntConst(q)) + ExprVector av; + filter (a, bind::IsConst (), inserter(av, av.begin())); + if (av.size() == 0) { - int ind = getVarIndex(q, vars); - if (ind == -1) return t; - varsForMult.push_back(vars2[ind]); + linPart = linPart * lexical_cast(a); + continue; } - else + for (auto & b : av) { - // GF: to ensure that it is indeed const - multedConsts = (multedConsts == NULL) ? q : mk(multedConsts, q); + if (find(vars.begin(), vars.end(), b) == vars.end()) + { + bool found = false; + for (auto & c : extraVars) if (c.second == b) { found = true; break; } + if (! found) + { + outs () << "WARNING. Wrong symbol at " << *t << ".\n"; + return mk(t->getFactory()); + } + } } + nonlinPart.push_back(a); } - if (varsForMult.size() > 1) + + if (linPart == 0) return mkTerm (mpz_class (0), t->getFactory()); + if (nonlinPart.size() <= 1) return t; + + Expr multedVars = mkmult(nonlinPart, t->getFactory()); + if (extraVars[multedVars] == NULL) { - Expr multedVars = mknary(varsForMult); - if (extraVars[multedVars] == NULL) - { - Expr new_name = mkTerm ("__e__" + to_string(extraVars.size()), t->getFactory()); - Expr var = bind::intConst(new_name); - extraVars[multedVars] = var; - } - return (multedConsts == NULL) ? extraVars[multedVars] : mk(multedConsts, extraVars[multedVars]); + Expr new_name = mkTerm ("__e__" + to_string(extraVars.size()), t->getFactory()); + Expr var = bind::intConst(new_name); + extraVars[multedVars] = var; } + + if (linPart == 1) return extraVars[multedVars]; + else return mk( mkTerm (mpz_class (linPart), t->getFactory()), extraVars[multedVars]); } else if (isOpX(t) || isOpX(t) || isOpX
(t)) { @@ -1159,8 +1185,11 @@ namespace ufo int indr = getVarIndex(t->right(), vars); Expr key = t; - if (indl >= 0) key = replaceAll(key, t->left(), vars2[indl]); - if (indr >= 0) key = replaceAll(key, t->right(), vars2[indr]); + if (indl >= 0) key = replaceAll(key, t->left(), vars[indl]); + if (indr >= 0) key = replaceAll(key, t->right(), vars[indr]); + + if (isOpX(t->left()) && lexical_cast(t->left()) == 0) + return mkTerm (mpz_class (0), t->getFactory()); if (extraVars[key] == NULL) { @@ -1174,9 +1203,9 @@ namespace ufo } }; - inline static Expr findNonlinAndRewrite (Expr exp, ExprVector& vars, ExprVector& vars2, ExprMap& extraVars) + inline static Expr findNonlinAndRewrite (Expr exp, ExprVector& vars, ExprMap& extraVars) { - RW mu(new FindNonlinAndRewrite(vars, vars2, extraVars)); + RW mu(new FindNonlinAndRewrite(vars, extraVars)); return dagVisit (mu, exp); } @@ -1649,7 +1678,50 @@ namespace ufo } }; - inline static Expr rewriteNegAnd (Expr exp) + inline static Expr simpleQE(Expr exp, ExprSet& quantified) + { + // rewrite just equalities + ExprSet cnjs; + ExprSet newCnjs; + ExprMap eqs; + getConj(exp, cnjs); + for (auto & a : cnjs) + { + bool eq = false; + if (isOpX(a)) + { + for (auto & b : quantified) + { + if (a->left() == b) + { + eq = true; + eqs[b] = a->right(); + break; + } + else if (a->right() == b) + { + eq = true; + eqs[b] = a->left(); + break; + } + } + } + if (!eq) newCnjs.insert(a); + } + + Expr qed = conjoin(newCnjs, exp->getFactory()); + for (auto & a : eqs) qed = replaceAll(qed, a.first, a.second); + + // check if there are some not eliminated vars + ExprVector av; + filter (qed, bind::IsConst (), inserter(av, av.begin())); + if (emptyIntersect(av, quantified)) return qed; + + // otherwise result is incomplete + return mk(exp->getFactory()); + } + + inline static Expr rewriteNegAnd(Expr exp) { RW a(new NegAndRewriter()); return dagVisit (a, exp); diff --git a/include/deep/RndLearnerV3.hpp b/include/deep/RndLearnerV3.hpp index f1ee45c5c..494f96be5 100644 --- a/include/deep/RndLearnerV3.hpp +++ b/include/deep/RndLearnerV3.hpp @@ -67,6 +67,8 @@ namespace ufo if (find(varsRenameFrom.begin(), varsRenameFrom.end(), v) == varsRenameFrom.end()) quantified.insert(v); + if (findNonlin(formula)) return simpleQE(formula, quantified); + AeValSolver ae(mk(m_efac), formula, quantified); if (ae.solve()) { @@ -82,12 +84,6 @@ namespace ufo Expr formula = mk(candToProp, constraint); if (!u.isSat(formula)) return false; // sometimes, maybe we should return true. - if (findNonlin(formula)) - { - checked.insert(rel); - return true; - } - ExprSet dsjs; getDisj(candToProp, dsjs); ExprSet newSeedDsjs; @@ -105,14 +101,14 @@ namespace ufo getConj(newCand, cnjs); for (auto & cnd : cnjs) { - if (hasUnsupportedSymbs(cnd)) continue; newCnjs.insert(cnd); addCandidate(invNum, cnd); } newCand = conjoin(newCnjs, m_efac); checked.insert(rel); - return propagate(invNum, newCand, true); + if (isOpX(newCand)) return true; + else return propagate(invNum, newCand, true); } else { @@ -121,25 +117,12 @@ namespace ufo ExprSet cnjs; getConj(newCand, cnjs); for (auto & a : cnjs) addCandidate(invNum, a); - return checkCand(invNum); } else return true; } } - // temporary workaround - bool hasUnsupportedSymbs(Expr e) - { - ExprSet artif; - expr::filter (e, bind::IsConst(), std::inserter (artif, artif.begin ())); - for (auto & a : artif) - { - if (lexical_cast(a).substr(0, 5) == "__e__") return true; - } - return false; - } - void addCandidate(int invNum, Expr cnd) { for (auto & a : candidates[invNum]) @@ -158,24 +141,28 @@ namespace ufo { if (hr.srcRelation == hr.dstRelation || hr.isQuery) continue; + SamplFactory* sf1; + SamplFactory* sf2; + // adding lemmas to the body. GF: not sure if it helps Expr constraint = hr.body; - SamplFactory& sf2 = sfs[getVarIndex(hr.dstRelation, decls)].back(); - Expr lm2 = sf2.getAllLemmas(); + sf2 = &sfs[getVarIndex(hr.dstRelation, decls)].back(); + Expr lm2 = sf2->getAllLemmas(); for (auto & v : invarVars[getVarIndex(hr.dstRelation, decls)]) lm2 = replaceAll(lm2, v.second, hr.dstVars[v.first]); constraint = mk(constraint, lm2); if (!hr.isFact) { - SamplFactory& sf1 = sfs[getVarIndex(hr.srcRelation, decls)].back(); - constraint = mk(constraint, sf1.getAllLemmas()); + sf1 = &sfs[getVarIndex(hr.srcRelation, decls)].back(); + constraint = mk(constraint, sf1->getAllLemmas()); } // forward: if (hr.srcRelation == rel && find(checked.begin(), checked.end(), hr.dstRelation) == checked.end()) { Expr replCand = cand; + for (int i = 0; i < 3; i++) for (auto & v : sf1->lf.nonlinVars) replCand = replaceAll(replCand, v.second, v.first); for (auto & v : invarVars[invNum]) replCand = replaceAll(replCand, v.second, hr.srcVars[v.first]); res = res && getCandForAdjacentRel (replCand, constraint, hr.dstVars, hr.dstRelation, seed); } @@ -184,6 +171,7 @@ namespace ufo if (hr.dstRelation == rel && find(checked.begin(), checked.end(), hr.srcRelation) == checked.end() && !hr.isFact) { Expr replCand = cand; + for (int i = 0; i < 3; i++) for (auto & v : sf2->lf.nonlinVars) replCand = replaceAll(replCand, v.second, v.first); for (auto & v : invarVars[invNum]) replCand = replaceAll(replCand, v.second, hr.dstVars[v.first]); res = res && getCandForAdjacentRel (replCand, constraint, hr.srcVars, hr.srcRelation, seed); } diff --git a/include/sampl/SeedMiner.hpp b/include/sampl/SeedMiner.hpp index 9a6ea9b06..6227d9643 100644 --- a/include/sampl/SeedMiner.hpp +++ b/include/sampl/SeedMiner.hpp @@ -53,7 +53,6 @@ namespace ufo for (auto & a : invVars) invVarsCstm.push_back(a.second); tmpl = disjoin (newDsjs, m_efac); - tmpl = findNonlinAndRewrite(tmpl, vars, invVarsCstm, extraVars); for (auto &v : actualVars) { @@ -64,6 +63,8 @@ namespace ufo } } + tmpl = findNonlinAndRewrite(tmpl, invVarsCstm, extraVars); + for (auto &a : extraVars) invVarsCstm.push_back(a.second); tmpl = normalizeDisj(tmpl, invVarsCstm); From 2e86d9cbd8163e809f3c675297c479d652ccc607 Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Sat, 19 May 2018 13:34:13 -0400 Subject: [PATCH 104/236] MultiFreqHorn: solved more challenging benchs --- .../samples_multiple_inv_08.smt2 | 41 +++++++------------ .../samples_multiple_inv_09.smt2 | 24 ++++++++--- .../samples_multiple_inv_10.smt2 | 35 ++++++++-------- include/ae/ExprSimpl.hpp | 3 +- 4 files changed, 53 insertions(+), 50 deletions(-) diff --git a/bench_horn_multiple/samples_multiple_inv_08.smt2 b/bench_horn_multiple/samples_multiple_inv_08.smt2 index 6caa7ea9d..ad43b0b35 100644 --- a/bench_horn_multiple/samples_multiple_inv_08.smt2 +++ b/bench_horn_multiple/samples_multiple_inv_08.smt2 @@ -1,52 +1,39 @@ -(declare-rel FUN (Int Int)) -(declare-rel SAD (Int Int)) -(declare-rel WEE (Int Int)) +(declare-rel FUN (Int Int Int)) +(declare-rel SAD (Int Int Int)) (declare-var k Int) (declare-var k1 Int) (declare-var j Int) (declare-var j1 Int) +(declare-var N Int) (declare-rel fail ()) -(rule (=> (and (= k 0) (= j 0)) (FUN k j))) +(rule (=> (and (= k 0) (= j 0) (> N 0)) (FUN k j N))) (rule (=> (and - (FUN k j) - (< j 1000) - (= k1 (+ k 1)) - (= j1 (+ j 1)) - ) - (FUN k1 j1) - ) -) - -(rule (=> (and (FUN k j) (>= j 1000) (= k1 k) (= j1 0)) (SAD k1 j1))) - -(rule (=> - (and - (SAD k j) - (< j 1000) - (= k1 (+ k 1)) - (= j1 (+ j 1)) + (FUN k j N) + (< j N) + (= k1 (+ k 1)) + (= j1 (+ j 1)) ) - (SAD k1 j1) + (FUN k1 j1 N) ) ) -(rule (=> (and (SAD k j) (>= j 1000) (= k1 k) (= j1 0)) (WEE k1 j1))) +(rule (=> (and (FUN k j N) (>= j N) (= k1 k) (= j1 0)) (SAD k1 j1 N))) (rule (=> (and - (WEE k j) - (< j 1000) + (SAD k j N) + (< j N) (= k1 (+ k 1)) (= j1 (+ j 1)) ) - (WEE k1 j1) + (SAD k1 j1 N) ) ) -(rule (=> (and (WEE k j) (>= j 1000) (< k 3000)) fail)) +(rule (=> (and (SAD k j N) (>= j N) (not (>= k (* 2 N)))) fail)) (query fail) diff --git a/bench_horn_multiple/samples_multiple_inv_09.smt2 b/bench_horn_multiple/samples_multiple_inv_09.smt2 index b23aacf29..2f5b536aa 100644 --- a/bench_horn_multiple/samples_multiple_inv_09.smt2 +++ b/bench_horn_multiple/samples_multiple_inv_09.smt2 @@ -1,5 +1,6 @@ (declare-rel FUN (Int Int Int)) (declare-rel SAD (Int Int Int)) +(declare-rel WEE (Int Int Int)) (declare-var k Int) (declare-var k1 Int) (declare-var j Int) @@ -12,10 +13,10 @@ (rule (=> (and - (FUN k j N) - (< j N) - (= k1 (+ k 1)) - (= j1 (+ j 1)) + (FUN k j N) + (< j N) + (= k1 (+ k 1)) + (= j1 (+ j 1)) ) (FUN k1 j1 N) ) @@ -34,6 +35,19 @@ ) ) -(rule (=> (and (SAD k j N) (>= j N) (< k (* 2 N))) fail)) +(rule (=> (and (SAD k j N) (>= j N) (= k1 k) (= j1 0)) (WEE k1 j1 N))) + +(rule (=> + (and + (WEE k j N) + (< j N) + (= k1 (+ k 1)) + (= j1 (+ j 1)) + ) + (WEE k1 j1 N) + ) +) + +(rule (=> (and (WEE k j N) (>= j N) (< k (* 3 N))) fail)) (query fail) diff --git a/bench_horn_multiple/samples_multiple_inv_10.smt2 b/bench_horn_multiple/samples_multiple_inv_10.smt2 index 3e50bcb98..c0c429da0 100644 --- a/bench_horn_multiple/samples_multiple_inv_10.smt2 +++ b/bench_horn_multiple/samples_multiple_inv_10.smt2 @@ -1,52 +1,53 @@ -(declare-rel FUN (Int Int)) -(declare-rel SAD (Int Int)) -(declare-rel WEE (Int Int)) +(declare-rel FUN (Int Int Int)) +(declare-rel SAD (Int Int Int)) +(declare-rel WEE (Int Int Int)) (declare-var k Int) (declare-var k1 Int) (declare-var j Int) (declare-var j1 Int) +(declare-var N Int) (declare-rel fail ()) -(rule (=> (and (= k 0) (= j 0)) (FUN k j))) +(rule (=> (and (= k 0) (= j 0) (> N 0)) (FUN k j N))) (rule (=> (and - (FUN k j) - (< j 10) + (FUN k j N) + (< j N) (= k1 (+ k 1)) (= j1 (+ j 1)) ) - (FUN k1 j1) + (FUN k1 j1 N) ) ) -(rule (=> (and (FUN k j) (>= j 10) (= k1 k) (= j1 0)) (SAD k1 j1))) +(rule (=> (and (FUN k j N) (>= j N) (= k1 k) (= j1 0)) (SAD k1 j1 N))) (rule (=> (and - (SAD k j) - (< j 10) - (= k1 (+ k 1)) + (SAD k j N) + (< j N) + (= k1 (- k 1)) (= j1 (+ j 1)) ) - (SAD k1 j1) + (SAD k1 j1 N) ) ) -(rule (=> (and (SAD k j) (>= j 10) (= k1 k) (= j1 0)) (WEE k1 j1))) +(rule (=> (and (SAD k j N) (>= j N) (= k1 k) (= j1 0)) (WEE k1 j1 N))) (rule (=> (and - (WEE k j) - (< j 10) + (WEE k j N) + (< j N) (= k1 (+ k 1)) (= j1 (+ j 1)) ) - (WEE k1 j1) + (WEE k1 j1 N) ) ) -(rule (=> (and (WEE k j) (>= j 10) (< k 30)) fail)) +(rule (=> (and (WEE k j N) (>= j N) (not (= k N))) fail)) (query fail) diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index 9de1b1a13..3cbb32bc0 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -1320,7 +1320,8 @@ namespace ufo { ExprSet disjs; getDisj(exp, disjs); - if (disjs.size() == 1) return exp; + if (disjs.size() == 1) + return disjoin(disjs, exp->getFactory()); vector dconjs; for (auto &a : disjs) From e01d98df24f387f08eb79a660cf1bf49ec827287 Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Sun, 20 May 2018 14:29:07 -0400 Subject: [PATCH 105/236] MultiFreqHorn: flexible generation of behavioral candidates --- bench_horn_multiple/abdu_03.smt2 | 11 +- bench_horn_multiple/dillig22-4.smt2 | 9 +- bench_horn_multiple/half_true_modif.smt2 | 11 +- .../samples_multiple_inv_19.smt2 | 40 ++++ include/deep/BndExpl.hpp | 196 +++++++++++------- 5 files changed, 179 insertions(+), 88 deletions(-) create mode 100644 bench_horn_multiple/samples_multiple_inv_19.smt2 diff --git a/bench_horn_multiple/abdu_03.smt2 b/bench_horn_multiple/abdu_03.smt2 index 744235ede..a01d0da9c 100644 --- a/bench_horn_multiple/abdu_03.smt2 +++ b/bench_horn_multiple/abdu_03.smt2 @@ -5,21 +5,22 @@ (declare-var y Int) (declare-var y1 Int) (declare-var len Int) +(declare-var len1 Int) (declare-rel fail ()) (rule (=> (and (= x 0) (= y 0) (>= len 0)) (inv1 x y len))) -(rule (=> (inv1 x y len) (inv1 x y len))) +(rule (=> (and (inv1 x y len) (= len1 (+ len 1))) (inv1 x y len1))) -(rule (=> (inv1 x y len) (inv x y len))) +(rule (=> (and (inv1 x y len) (= len1 (+ len 80))) (inv x y len1))) (rule (=> (and - (inv x y len) + (inv x y len) (< x len) - (= x1 (+ x 1)) - (= y1 (+ y 2)) + (= x1 (+ x 1)) + (= y1 (+ y 2)) ) (inv x1 y1 len) ) diff --git a/bench_horn_multiple/dillig22-4.smt2 b/bench_horn_multiple/dillig22-4.smt2 index a78cfaab9..ec054b2cd 100644 --- a/bench_horn_multiple/dillig22-4.smt2 +++ b/bench_horn_multiple/dillig22-4.smt2 @@ -7,14 +7,15 @@ (declare-var k0 Int) (declare-var k1 Int) (declare-var t0 Int) +(declare-var t1 Int) (declare-rel fail ()) -(rule (=> (and (= x1 0) (= y1 0) (= k1 0)) (inv1 x1 y1 k1 t0))) +(rule (=> (and (= x1 0) (= y1 0) (= k1 0) (= t0 0)) (inv1 x1 y1 k1 t0))) -(rule (=> (inv1 x1 y1 k1 t0) (inv1 x1 y1 k1 t0))) +(rule (=> (and (inv1 x1 y1 k1 t0) (= t1 (+ t0 14))) (inv1 x1 y1 k1 t1))) -(rule (=> (inv1 x1 y1 k1 t0) (inv x1 y1 k1 t0))) +(rule (=> (and (inv1 x1 y1 k1 t0) (= t1 (+ t0 2))) (inv x1 y1 k1 t1))) (rule (=> (and @@ -30,4 +31,4 @@ (rule (=> (and (inv x1 y1 k1 t0) (= y1 t0) (not (= t0 x1))) fail)) -(query fail :print-certificate true) \ No newline at end of file +(query fail :print-certificate true) diff --git a/bench_horn_multiple/half_true_modif.smt2 b/bench_horn_multiple/half_true_modif.smt2 index 2b032ea1e..dafbabfe3 100644 --- a/bench_horn_multiple/half_true_modif.smt2 +++ b/bench_horn_multiple/half_true_modif.smt2 @@ -2,6 +2,7 @@ (declare-rel inv (Int Int Int Int)) (declare-var i Int) (declare-var k Int) +(declare-var k1 Int) (declare-var n Int) (declare-var i1 Int) (declare-var n1 Int) @@ -12,14 +13,14 @@ (rule (=> (and (= i 0) (= j 0) (= n 0) (>= k 0)) (inv1 i k n j))) -(rule (=> (inv1 i k n j) (inv1 i k n j))) +(rule (=> (and (inv1 i k n j) (= k1 (+ k 1))) (inv1 i k1 n j))) -(rule (=> (inv1 i k n j) (inv i k n j))) +(rule (=> (and (inv1 i k n j) (= k1 (+ k 52))) (inv i k1 n j))) (rule (=> (and - (inv i k n j) - (< i (* 2 k)) + (inv i k n j) + (< i (* 2 k)) (= n1 (ite (= j 0) (+ n 1) n)) (= i1 (+ i 1)) (= j1 (ite (= j 0) 1 0)) @@ -30,4 +31,4 @@ (rule (=> (and (inv i k n j) (>= i (* 2 k)) (not (= n k))) fail)) -(query fail :print-certificate true) \ No newline at end of file +(query fail :print-certificate true) diff --git a/bench_horn_multiple/samples_multiple_inv_19.smt2 b/bench_horn_multiple/samples_multiple_inv_19.smt2 new file mode 100644 index 000000000..471ec0821 --- /dev/null +++ b/bench_horn_multiple/samples_multiple_inv_19.smt2 @@ -0,0 +1,40 @@ +(declare-rel FUN (Int Int Int)) +(declare-rel SAD (Int Int Int Int)) +(declare-var c Int) +(declare-var c1 Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) +(declare-var N1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= c 0) (= i 0) (> N 0)) (FUN c i N))) + +(rule (=> + (and + (FUN c i N) + (< c N) + (= c1 (+ c 1)) + (= i1 (+ i 2)) + ) + (FUN c1 i1 N) + ) +) + +(rule (=> (and (FUN c i N) (>= c N) (= c1 0) (= i1 i) (< N1 N)) (SAD c1 i1 N N1))) + +(rule (=> + (and + (SAD c i N N1) + (< c N1) + (= c1 (+ c 1)) + (= i1 (+ i 1)) + ) + (SAD c1 i1 N N1) + ) +) + +(rule (=> (and (SAD c i N N1) (>= c N1) (not (>= i (* 2 N)))) fail)) + +(query fail) diff --git a/include/deep/BndExpl.hpp b/include/deep/BndExpl.hpp index a3f8ffefb..b7d866814 100644 --- a/include/deep/BndExpl.hpp +++ b/include/deep/BndExpl.hpp @@ -79,7 +79,12 @@ namespace ufo Expr toExpr(vector& trace) { ExprVector ssa; + getSSA(trace, ssa); + return conjoin(ssa, m_efac); + } + void getSSA(vector& trace, ExprVector& ssa) + { ExprVector bindVars2; bindVars.clear(); ExprVector bindVars1 = ruleManager.chcs[trace[0]].srcVars; @@ -131,8 +136,6 @@ namespace ufo bindVars.push_back(bindVars2); bindVars1 = bindVars2; } - - return conjoin(ssa, m_efac); } bool exploreTraces(int cur_bnd, int bnd, bool print = false) @@ -283,59 +286,104 @@ namespace ufo map indexToInv; int chcIndex = 0; - for (auto & r : ruleManager.chcs) { - if (r.isInductive) { - for (int i = 0; i < k; i++) { - traces.push_back(chcIndex); - indexToInv[traces.size()-1] = r.srcRelation; - } - chcIndex++; - } else if (r.isQuery) { - chcIndex++; - continue; - } else { - //fact or non-inductive clauses - traces.push_back(chcIndex++); - } - } + for (auto & a : ruleManager.decls) + { + vector trace; - Expr unrolledTr = toExpr(traces); + ExprSet lastModel; + for (int i = 0; i < ruleManager.chcs.size(); i++) + { + auto & r = ruleManager.chcs[i]; + if (!r.isInductive && r.dstRelation == (a->first())) + { + if (models[r.srcRelation].size() > 0) + { + for (int j = 0; j < models[r.srcRelation].back().size(); j ++) + { + Expr val = mk(r.srcVars[j], mkTerm (mpz_class (models[r.srcRelation].back()[j]), m_efac)); + lastModel.insert(val); + } + } + trace.push_back(i); + break; + } + } - m_smt_solver.reset(); - m_smt_solver.assertExpr(unrolledTr); + for (int i = 0; i < ruleManager.chcs.size(); i++) + { + auto & r = ruleManager.chcs[i]; + if (r.isInductive && r.srcRelation == (a->first())) + { + for (int j = 0; j < k; j++) trace.push_back(i); + } + } - if (!m_smt_solver.solve()) { - cout << unrolledTr << " found to be unsat with k = " << k << endl; - return false; - } + for (int i = 0; i < ruleManager.chcs.size(); i++) + { + auto & r = ruleManager.chcs[i]; + if (!r.isInductive && !r.isQuery && r.srcRelation == (a->first())) + { + trace.push_back(i); + break; + } + } - ZSolver::Model m = m_smt_solver.getModel(); + ExprVector ssa; + getSSA(trace, ssa); + bindVars.pop_back(); - for (int bvIndex = 0; bvIndex < bindVars.size(); bvIndex++) { - auto invItr = indexToInv.find(bvIndex); - if (invItr == indexToInv.end()) { - continue; - } - - auto vars = bindVars[bvIndex]; - vector model; - for (auto var : vars) { - int value; - if (var != m.eval(var)) { - stringstream tmpstream; - tmpstream << m.eval(var); - tmpstream >> value; - } else { - value = guessUniformly(1000)-500; - } - model.push_back(value); - } - models[invItr->second].push_back(model); + bool toContinue = false; + while (true) + { + if (ssa.size() < 2) + { + outs () << "Unable to find a suitable unrolling for " << *(a->first()) << "\n"; + toContinue = true; + break; + } + + m_smt_solver.reset(); + m_smt_solver.assertExpr(conjoin(lastModel, m_efac)); + m_smt_solver.assertExpr(conjoin(ssa, m_efac)); + + if (m_smt_solver.solve()) + { + break; + } + else + { + ssa.pop_back(); + bindVars.pop_back(); + } + } + + if (toContinue) continue; + + ZSolver::Model m = m_smt_solver.getModel(); + + for (auto vars : bindVars) { + vector model; + for (auto var : vars) { + int value; + if (var != m.eval(var)) { + stringstream tmpstream; + tmpstream << m.eval(var); + tmpstream >> value; + } else { + value = guessUniformly(1000)-500; + cout << "random guess for: " << var << endl; //DEBUG + } +// cout << value << "\t";//DEBUG + model.push_back(value); + } +// cout << endl;//DEBUG + models[(a->first())].push_back(model); + } } return true; } - + bool unrollAndExecute(const Expr & invRel, ufo::ZSolver & m_smt_solver, vector > & models, int k = 10, Expr initCondn = nullptr) { @@ -346,17 +394,17 @@ namespace ufo for (int i = 0; i < ruleManager.chcs.size(); i++) { auto & r = ruleManager.chcs[i]; if (r.isFact) { - initIndex = i; - initFound = true; - } - if (r.isInductive && r.srcRelation == invRel && r.dstRelation == invRel) { - trIndex = i; - } + initIndex = i; + initFound = true; + } + if (r.isInductive && r.srcRelation == invRel && r.dstRelation == invRel) { + trIndex = i; + } } if (!initFound && initCondn == nullptr) { - cout << "ERR: init not found for given transition (index: " << trIndex << ")" << endl; - return false; + cout << "ERR: init not found for given transition (index: " << trIndex << ")" << endl; + return false; } Expr init = initCondn == nullptr ? ruleManager.chcs[initIndex].body : initCondn; @@ -364,13 +412,13 @@ namespace ufo HornRuleExt& tr = ruleManager.chcs[trIndex]; for (int i = 0; i < tr.srcVars.size(); i++) { - init = replaceAll(init, tr.dstVars[i], tr.srcVars[i]); + init = replaceAll(init, tr.dstVars[i], tr.srcVars[i]); } vector trace; for (int i = 0; i < k; i++) { - trace.push_back(trIndex); + trace.push_back(trIndex); } Expr unrolledTr = toExpr(trace); @@ -382,29 +430,29 @@ namespace ufo m_smt_solver.assertExpr(unrolledTr); if (!m_smt_solver.solve()) { - cout << init << " && " << unrolledTr << "\nfound to be unsat\n"; - return false; + cout << init << " && " << unrolledTr << "\nfound to be unsat\n"; + return false; } ZSolver::Model m = m_smt_solver.getModel(); for (auto vars : bindVars) { - vector model; - for (auto var : vars) { - int value; - if (var != m.eval(var)) { - stringstream tmpstream; - tmpstream << m.eval(var); - tmpstream >> value; - } else { - value = guessUniformly(1000)-500; - cout << "random guess for: " << var << endl; //DEBUG - } - cout << value << "\t";//DEBUG - model.push_back(value); - } - cout << endl;//DEBUG - models.push_back(model); + vector model; + for (auto var : vars) { + int value; + if (var != m.eval(var)) { + stringstream tmpstream; + tmpstream << m.eval(var); + tmpstream >> value; + } else { + value = guessUniformly(1000)-500; + cout << "random guess for: " << var << endl; //DEBUG + } + cout << value << "\t";//DEBUG + model.push_back(value); + } + cout << endl;//DEBUG + models.push_back(model); } return true; From 35662c84560b0f8a28ca2e224da6fd8c5aad1255 Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Mon, 21 May 2018 01:08:22 -0400 Subject: [PATCH 106/236] MultiFreqHorn: optimized bootstrapping slightly --- include/deep/RndLearnerV3.hpp | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/include/deep/RndLearnerV3.hpp b/include/deep/RndLearnerV3.hpp index 494f96be5..fc95a9d34 100644 --- a/include/deep/RndLearnerV3.hpp +++ b/include/deep/RndLearnerV3.hpp @@ -366,20 +366,32 @@ namespace ufo int ind = getVarIndex(invRel, decls); SamplFactory& sf = sfs[ind].back(); ExprSet candsFromCode; + bool analyzedExtras = false; for (auto &hr : ruleManager.chcs) { if (hr.dstRelation != invRel && hr.srcRelation != invRel) continue; SeedMiner sm (hr, invRel, invarVars[ind], sf.lf.nonlinVars); sm.analyzeCode(); + if (!analyzedExtras && hr.srcRelation == invRel) + { + sm.analyzeExtras (cands[invRel]); + analyzedExtras = true; + } + for (auto &cand : sm.candidates) candsFromCode.insert(cand); } for (auto & cand : candsFromCode) { checked.clear(); - propagate (getVarIndex(invRel, decls), cand, true); + Expr replCand = cand; + for (int i = 0; i < 3; i++) + for (auto & v : sf.lf.nonlinVars) replCand = replaceAll(replCand, v.second, v.first); + addCandidate(getVarIndex(invRel, decls), replCand); + propagate (getVarIndex(invRel, decls), replCand, true); } + cands[invRel].clear(); for (auto & a : candidates) { cands[decls[a.first]].insert(a.second.begin(), a.second.end()); @@ -420,13 +432,8 @@ namespace ufo } #endif - bool bootstrap(map& cands, bool enableDataLearning, const vector & behaviorfiles){ - - for (int i = 0; i < invNumber; i++) - { - for (auto & cnd : cands[decls[i]]) addCandidate(i, cnd); - } - + bool bootstrap(map& cands) + { filterUnsat(); if (multiHoudini(ruleManager.wtoCHCs)) @@ -527,7 +534,7 @@ namespace ufo for (auto& dcl: ruleManager.decls) ds.getSeeds(dcl->arg(0), cands); for (auto& dcl: ruleManager.decls) ds.doSeedMining(dcl->arg(0), cands[dcl->arg(0)]); ds.calculateStatistics(); - if (ds.bootstrap(cands, enableDataLearning, behaviorfiles)) return; + if (ds.bootstrap(cands)) return; std::srand(std::time(0)); ds.synthesize(maxAttempts, outfile); } From df571e4183df869891929caecb5a01289cb5312b Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Thu, 24 May 2018 17:36:27 -0400 Subject: [PATCH 107/236] enforced current AE-VAL's limitation --- include/deep/RndLearnerV3.hpp | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/include/deep/RndLearnerV3.hpp b/include/deep/RndLearnerV3.hpp index fc95a9d34..28dcb31b7 100644 --- a/include/deep/RndLearnerV3.hpp +++ b/include/deep/RndLearnerV3.hpp @@ -67,7 +67,12 @@ namespace ufo if (find(varsRenameFrom.begin(), varsRenameFrom.end(), v) == varsRenameFrom.end()) quantified.insert(v); - if (findNonlin(formula)) return simpleQE(formula, quantified); + if (findNonlin(formula) || containsOp(formula) || containsOp(formula)) + { + Expr newCand = simpleQE(formula, quantified); + for (auto & v : invarVars[invNum]) newCand = replaceAll(newCand, varsRenameFrom[v.first], v.second); + return newCand; + } AeValSolver ae(mk(m_efac), formula, quantified); if (ae.solve()) @@ -112,14 +117,10 @@ namespace ufo } else { - if (!isOpX(newCand)) - { - ExprSet cnjs; - getConj(newCand, cnjs); - for (auto & a : cnjs) addCandidate(invNum, a); - return checkCand(invNum); - } - else return true; + ExprSet cnjs; + getConj(newCand, cnjs); + for (auto & a : cnjs) addCandidate(invNum, a); + return checkCand(invNum); } } From b60b53c90f34e4a5acc2b130c0ac6f1ad5d936b1 Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Sat, 26 May 2018 22:59:00 -0400 Subject: [PATCH 108/236] MultiFreqHorn: several tiny optimizations --- include/deep/RndLearner.hpp | 11 ++++++++--- include/deep/RndLearnerV3.hpp | 35 ++++++++++++++++++++++------------- 2 files changed, 30 insertions(+), 16 deletions(-) diff --git a/include/deep/RndLearner.hpp b/include/deep/RndLearner.hpp index fa464dd8e..2c0aa6d70 100644 --- a/include/deep/RndLearner.hpp +++ b/include/deep/RndLearner.hpp @@ -461,7 +461,7 @@ namespace ufo invNumber++; } - void doSeedMining(Expr invRel, ExprSet& cands) + void doSeedMining(Expr invRel, ExprSet& cands, bool analyzecode = true) { vector css; set progConstsTmp; @@ -474,15 +474,20 @@ namespace ufo // init boolean combinations quickly sf.bf.initialize(); + bool analyzedExtras = false; // analize each rule separately: for (auto &hr : ruleManager.chcs) { if (hr.dstRelation != invRel && hr.srcRelation != invRel) continue; css.push_back(SeedMiner(hr, invRel, invarVars[ind], sf.lf.nonlinVars)); - css.back().analyzeCode(); + if (analyzecode) css.back().analyzeCode(); - if (hr.isInductive) css.back().analyzeExtras(cands); + if (!analyzedExtras && hr.srcRelation == invRel) + { + css.back().analyzeExtras (cands); + analyzedExtras = true; + } // convert intConsts to progConsts and add additive inverses (if applicable): for (auto &a : css.back().intConsts) diff --git a/include/deep/RndLearnerV3.hpp b/include/deep/RndLearnerV3.hpp index 28dcb31b7..dfbb7a30b 100644 --- a/include/deep/RndLearnerV3.hpp +++ b/include/deep/RndLearnerV3.hpp @@ -124,13 +124,16 @@ namespace ufo } } - void addCandidate(int invNum, Expr cnd) + bool addCandidate(int invNum, Expr cnd) { for (auto & a : candidates[invNum]) { - if (u.isEquiv(a, cnd)) return; + if (u.isEquiv(a, cnd)) return false; + SamplFactory& sf = sfs[invNum].back(); + if (!isOpX(sf.getAllLemmas()) && u.implies(sf.getAllLemmas(), cnd)) return false; } candidates[invNum].push_back(cnd); + return true; } bool propagate(int invNum, Expr cand, bool seed) @@ -233,7 +236,7 @@ namespace ufo Expr cand = sf.getFreshCandidate(); if (cand == NULL) continue; - addCandidate(invNum, cand); + if (!addCandidate(invNum, cand)) continue; if (checkCand(invNum)) { assignPrioritiesForLearned(); @@ -317,8 +320,8 @@ namespace ufo if (!checkCHC(hr, candidatesTmp)) { bool res2 = true; - Expr model = getModel(hr.dstVars); int ind = getVarIndex(hr.dstRelation, decls); + Expr model = getModel(hr.dstVars); ExprVector& ev = candidatesTmp[ind]; ExprVector invVars; @@ -387,12 +390,16 @@ namespace ufo checked.clear(); Expr replCand = cand; for (int i = 0; i < 3; i++) - for (auto & v : sf.lf.nonlinVars) replCand = replaceAll(replCand, v.second, v.first); - addCandidate(getVarIndex(invRel, decls), replCand); - propagate (getVarIndex(invRel, decls), replCand, true); + for (auto & v : sf.lf.nonlinVars) + replCand = replaceAll(replCand, v.second, v.first); + if (addCandidate(ind, replCand)) + propagate (ind, replCand, true); } + } - cands[invRel].clear(); + void refreshCands(map& cands) + { + cands.clear(); for (auto & a : candidates) { cands[decls[a.first]].insert(a.second.begin(), a.second.end()); @@ -433,7 +440,7 @@ namespace ufo } #endif - bool bootstrap(map& cands) + bool bootstrap() { filterUnsat(); @@ -519,7 +526,7 @@ namespace ufo { outs() << "WARNING.\n" << "This is an experimental thing for multiple invariants.\n" << - "For a single invariant synthsis, we suggest to use the --v2 option.\n"; + "For a single invariant synthesis, we suggest to use the --v2 option.\n"; } map cands; @@ -529,13 +536,15 @@ namespace ufo #ifdef HAVE_ARMADILLO ds.getDataCandidates(cands, behaviorfiles); #else - outs() << "Skipping learning from data as required library(armadillo) not found\n"; + outs() << "Skipping learning from data as required library (armadillo) not found\n"; #endif } + for (auto& dcl: ruleManager.decls) ds.getSeeds(dcl->arg(0), cands); - for (auto& dcl: ruleManager.decls) ds.doSeedMining(dcl->arg(0), cands[dcl->arg(0)]); + ds.refreshCands(cands); + for (auto& dcl: ruleManager.decls) ds.doSeedMining(dcl->arg(0), cands[dcl->arg(0)], false); ds.calculateStatistics(); - if (ds.bootstrap(cands)) return; + if (ds.bootstrap()) return; std::srand(std::time(0)); ds.synthesize(maxAttempts, outfile); } From 935ba642226ba72db934814ccc5b744f2aafbded Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Sun, 27 May 2018 21:13:50 -0400 Subject: [PATCH 109/236] MultiFreqHorn: added new benchmarks --- .../{abdu_03.smt2 => abdu_05.smt2} | 0 bench_horn_multiple/const_div_5.smt2 | 25 + bench_horn_multiple/const_mod_4.smt2 | 25 + bench_horn_multiple/count_by_2.smt2 | 49 + bench_horn_multiple/count_by_2_m_nest.smt2 | 42 + bench_horn_multiple/dillig02_m.smt2 | 39 + bench_horn_multiple/dillig03_m.smt2 | 31 + bench_horn_multiple/dillig05_m.smt2 | 38 + bench_horn_multiple/dillig07_m.smt2 | 43 + bench_horn_multiple/dillig08_m.smt2 | 34 + bench_horn_multiple/dillig10_m.smt2 | 35 + .../{dillig12.smt2 => dillig12_m.smt2} | 0 bench_horn_multiple/dillig15_m.smt2 | 32 + bench_horn_multiple/dillig21_m.smt2 | 43 + .../{dillig22-4.smt2 => dillig22_m.smt2} | 0 bench_horn_multiple/dillig37_m.smt2 | 31 + bench_horn_multiple/dillig44_m.smt2 | 30 + bench_horn_multiple/dillig46_m.smt2 | 38 + ...{exact_iters_4.smt2 => exact_iters_6.smt2} | 0 ...{exact_iters_5.smt2 => exact_iters_7.smt2} | 0 bench_horn_multiple/gj2007_m_1.smt2 | 81 ++ bench_horn_multiple/gj2007_m_2.smt2 | 55 + bench_horn_multiple/gj2007_m_3.smt2 | 88 ++ ...true_modif.smt2 => half_true_modif_m.smt2} | 0 bench_horn_multiple/hhk2008_m.smt2 | 33 + .../nonlin_multiple_inv_09.smt2 | 20 + .../nonlin_multiple_inv_10.smt2 | 49 + .../nonlin_multiple_inv_11.smt2 | 44 + .../nonlin_multiple_inv_12.smt2 | 33 + .../nonlin_multiple_inv_13.smt2 | 29 + .../nonlin_multiple_inv_14.smt2 | 38 + .../nonlin_multiple_inv_15.smt2 | 34 + .../nonlin_multiple_inv_16.smt2 | 20 + .../nonlin_multiple_inv_96.smt2 | 32 + .../nonlin_multiple_inv_97.smt2 | 32 + .../nonlin_multiple_inv_98.smt2 | 22 + .../nonlin_multiple_inv_99.smt2 | 32 + bench_horn_multiple/phases_m.smt2 | 43 + bench_horn_multiple/s_mutants_01_m.smt2 | 38 + bench_horn_multiple/s_mutants_02_m.smt2 | 40 + bench_horn_multiple/s_mutants_03_m.smt2 | 45 + bench_horn_multiple/s_mutants_06_m.smt2 | 44 + bench_horn_multiple/s_mutants_11_m.smt2 | 63 + bench_horn_multiple/s_mutants_12_m.smt2 | 40 + bench_horn_multiple/s_mutants_16_m.smt2 | 41 + bench_horn_multiple/s_mutants_18_m.smt2 | 40 + bench_horn_multiple/s_mutants_19_m.smt2 | 38 + ...{s_mutants_20.smt2 => s_mutants_20_m.smt2} | 12 +- ...{s_mutants_21.smt2 => s_mutants_21_m.smt2} | 15 +- bench_horn_multiple/s_mutants_22_m.smt2 | 33 + bench_horn_multiple/s_mutants_24_m.smt2 | 40 + bench_horn_multiple/s_seeds_06_m.smt2 | 41 + bench_horn_multiple/s_seeds_09_m.smt2 | 40 + bench_horn_multiple/s_seeds_11_m.smt2 | 54 + .../samples_multiple_inv_13.smt2 | 9 +- .../samples_multiple_inv_14.smt2 | 8 +- .../samples_multiple_inv_20.smt2 | 40 + .../samples_multiple_inv_21.smt2 | 38 + .../samples_multiple_inv_22.smt2 | 38 + .../samples_multiple_inv_23.smt2 | 39 + .../samples_multiple_inv_24.smt2 | 44 + .../samples_multiple_inv_25.smt2 | 44 + bench_horn_multiple/sn_1024_m.smt2 | 1069 +++++++++++++++++ bench_horn_multiple/trex3_m.smt2 | 49 + bench_horn_multiple/yz_plus_minus_3.smt2 | 35 + bench_horn_multiple/yz_plus_minus_4.smt2 | 32 + 66 files changed, 3268 insertions(+), 21 deletions(-) rename bench_horn_multiple/{abdu_03.smt2 => abdu_05.smt2} (100%) create mode 100644 bench_horn_multiple/const_div_5.smt2 create mode 100644 bench_horn_multiple/const_mod_4.smt2 create mode 100644 bench_horn_multiple/count_by_2.smt2 create mode 100644 bench_horn_multiple/count_by_2_m_nest.smt2 create mode 100644 bench_horn_multiple/dillig02_m.smt2 create mode 100644 bench_horn_multiple/dillig03_m.smt2 create mode 100644 bench_horn_multiple/dillig05_m.smt2 create mode 100644 bench_horn_multiple/dillig07_m.smt2 create mode 100644 bench_horn_multiple/dillig08_m.smt2 create mode 100644 bench_horn_multiple/dillig10_m.smt2 rename bench_horn_multiple/{dillig12.smt2 => dillig12_m.smt2} (100%) create mode 100644 bench_horn_multiple/dillig15_m.smt2 create mode 100644 bench_horn_multiple/dillig21_m.smt2 rename bench_horn_multiple/{dillig22-4.smt2 => dillig22_m.smt2} (100%) create mode 100644 bench_horn_multiple/dillig37_m.smt2 create mode 100644 bench_horn_multiple/dillig44_m.smt2 create mode 100644 bench_horn_multiple/dillig46_m.smt2 rename bench_horn_multiple/{exact_iters_4.smt2 => exact_iters_6.smt2} (100%) rename bench_horn_multiple/{exact_iters_5.smt2 => exact_iters_7.smt2} (100%) create mode 100644 bench_horn_multiple/gj2007_m_1.smt2 create mode 100644 bench_horn_multiple/gj2007_m_2.smt2 create mode 100644 bench_horn_multiple/gj2007_m_3.smt2 rename bench_horn_multiple/{half_true_modif.smt2 => half_true_modif_m.smt2} (100%) create mode 100644 bench_horn_multiple/hhk2008_m.smt2 create mode 100644 bench_horn_multiple/nonlin_multiple_inv_09.smt2 create mode 100644 bench_horn_multiple/nonlin_multiple_inv_10.smt2 create mode 100644 bench_horn_multiple/nonlin_multiple_inv_11.smt2 create mode 100644 bench_horn_multiple/nonlin_multiple_inv_12.smt2 create mode 100644 bench_horn_multiple/nonlin_multiple_inv_13.smt2 create mode 100644 bench_horn_multiple/nonlin_multiple_inv_14.smt2 create mode 100644 bench_horn_multiple/nonlin_multiple_inv_15.smt2 create mode 100644 bench_horn_multiple/nonlin_multiple_inv_16.smt2 create mode 100644 bench_horn_multiple/nonlin_multiple_inv_96.smt2 create mode 100644 bench_horn_multiple/nonlin_multiple_inv_97.smt2 create mode 100644 bench_horn_multiple/nonlin_multiple_inv_98.smt2 create mode 100644 bench_horn_multiple/nonlin_multiple_inv_99.smt2 create mode 100644 bench_horn_multiple/phases_m.smt2 create mode 100644 bench_horn_multiple/s_mutants_01_m.smt2 create mode 100644 bench_horn_multiple/s_mutants_02_m.smt2 create mode 100644 bench_horn_multiple/s_mutants_03_m.smt2 create mode 100644 bench_horn_multiple/s_mutants_06_m.smt2 create mode 100644 bench_horn_multiple/s_mutants_11_m.smt2 create mode 100644 bench_horn_multiple/s_mutants_12_m.smt2 create mode 100644 bench_horn_multiple/s_mutants_16_m.smt2 create mode 100644 bench_horn_multiple/s_mutants_18_m.smt2 create mode 100644 bench_horn_multiple/s_mutants_19_m.smt2 rename bench_horn_multiple/{s_mutants_20.smt2 => s_mutants_20_m.smt2} (67%) rename bench_horn_multiple/{s_mutants_21.smt2 => s_mutants_21_m.smt2} (55%) create mode 100644 bench_horn_multiple/s_mutants_22_m.smt2 create mode 100644 bench_horn_multiple/s_mutants_24_m.smt2 create mode 100644 bench_horn_multiple/s_seeds_06_m.smt2 create mode 100644 bench_horn_multiple/s_seeds_09_m.smt2 create mode 100644 bench_horn_multiple/s_seeds_11_m.smt2 create mode 100644 bench_horn_multiple/samples_multiple_inv_20.smt2 create mode 100644 bench_horn_multiple/samples_multiple_inv_21.smt2 create mode 100644 bench_horn_multiple/samples_multiple_inv_22.smt2 create mode 100644 bench_horn_multiple/samples_multiple_inv_23.smt2 create mode 100644 bench_horn_multiple/samples_multiple_inv_24.smt2 create mode 100644 bench_horn_multiple/samples_multiple_inv_25.smt2 create mode 100644 bench_horn_multiple/sn_1024_m.smt2 create mode 100644 bench_horn_multiple/trex3_m.smt2 create mode 100644 bench_horn_multiple/yz_plus_minus_3.smt2 create mode 100644 bench_horn_multiple/yz_plus_minus_4.smt2 diff --git a/bench_horn_multiple/abdu_03.smt2 b/bench_horn_multiple/abdu_05.smt2 similarity index 100% rename from bench_horn_multiple/abdu_03.smt2 rename to bench_horn_multiple/abdu_05.smt2 diff --git a/bench_horn_multiple/const_div_5.smt2 b/bench_horn_multiple/const_div_5.smt2 new file mode 100644 index 000000000..cfe2f1b9b --- /dev/null +++ b/bench_horn_multiple/const_div_5.smt2 @@ -0,0 +1,25 @@ +(declare-rel inv1 (Int Int)) +(declare-rel inv3 (Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) + +(declare-rel fail ()) + +(rule (=> (= i (* j 3)) (inv1 i j))) + +(rule (=> (and (inv1 i j) (= i1 i)) (inv3 i1 j))) + +(rule (=> + (and + (inv3 i j) + (= i1 (+ i 3)) + (= j1 (+ j 1))) + (inv3 i1 j1))) + +(rule (=> (and (inv3 i j) (= i1 i) (= j1 j)) (inv1 i1 j1))) + +(rule (=> (and (inv1 i j) (not (= (div i 3) j))) fail)) + +(query fail) diff --git a/bench_horn_multiple/const_mod_4.smt2 b/bench_horn_multiple/const_mod_4.smt2 new file mode 100644 index 000000000..2e798cd74 --- /dev/null +++ b/bench_horn_multiple/const_mod_4.smt2 @@ -0,0 +1,25 @@ +(declare-rel inv1 (Int Int)) +(declare-rel inv3 (Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) + +(declare-rel fail ()) + +(rule (=> (= i (* j 3)) (inv1 i j))) + +(rule (=> (and (inv1 i j) (= i1 (+ i 1))) (inv3 i1 j))) + +(rule (=> + (and + (inv3 i j) + (= i1 (+ i 3)) + (= j1 (+ j 1))) + (inv3 i1 j1))) + +(rule (=> (and (inv3 i j) (= i1 (+ i 2)) (= j1 j)) (inv1 i1 j1))) + +(rule (=> (and (inv1 i j) (not (= (mod i 3) 0))) fail)) + +(query fail) diff --git a/bench_horn_multiple/count_by_2.smt2 b/bench_horn_multiple/count_by_2.smt2 new file mode 100644 index 000000000..d4e2c9af2 --- /dev/null +++ b/bench_horn_multiple/count_by_2.smt2 @@ -0,0 +1,49 @@ +(declare-var i1 Int) +(declare-var i0 Int) +(declare-var LRG1 Int) +(declare-var LRG2 Int) +(declare-rel itp1 (Int Int)) +(declare-rel itp2 (Int Int )) +(declare-rel fail ()) + +(rule (=> + (and + (= i1 0) + (= LRG1 128)) + (itp1 i1 LRG1) + )) + +(rule (=> + (and + (itp1 i0 LRG1) + (< i0 LRG1) + (= i1 (+ i0 2)) + ) + (itp1 i1 LRG1) +)) + +(rule (=> + (and + (itp1 i0 LRG1) + (>= i0 LRG1) + (= LRG2 (+ LRG1 128))) + (itp2 i0 LRG2 ) + )) + +(rule (=> + (and + (itp2 i0 LRG1 ) + (< i0 LRG1 ) + (= i1 (+ i0 2)) + ) + (itp2 i1 LRG1 ) +)) + +(rule (=> + (and + (itp2 i1 LRG1 ) + (>= i1 LRG1 ) + (not (= i1 LRG1 )) + ) fail)) + +(query fail :print-certificate true) diff --git a/bench_horn_multiple/count_by_2_m_nest.smt2 b/bench_horn_multiple/count_by_2_m_nest.smt2 new file mode 100644 index 000000000..91b1f0506 --- /dev/null +++ b/bench_horn_multiple/count_by_2_m_nest.smt2 @@ -0,0 +1,42 @@ +(declare-var i1 Int) +(declare-var i0 Int) +(declare-var j1 Int) +(declare-var j0 Int) +(declare-rel itp1 (Int )) +(declare-rel itp2 (Int Int)) +(declare-rel fail ()) + +(rule (itp1 0 )) + +(rule (=> + (and + (itp1 i0 ) + (< i0 256)) + (itp2 i0 0) +)) + +(rule (=> + (and + (itp2 i0 j0 ) + (< j0 16) + (= j1 (+ j0 2))) + (itp2 i0 j1) + )) + +(rule (=> + (and + (itp2 i0 j0 ) + (>= j0 16 ) + (= i1 (+ i0 j0)) + ) + (itp1 i1 ) +)) + +(rule (=> + (and + (itp1 i0 ) + (>= i0 256 ) + (not (= i0 256 )) + ) fail)) + +(query fail :print-certificate true) diff --git a/bench_horn_multiple/dillig02_m.smt2 b/bench_horn_multiple/dillig02_m.smt2 new file mode 100644 index 000000000..4d6194623 --- /dev/null +++ b/bench_horn_multiple/dillig02_m.smt2 @@ -0,0 +1,39 @@ +(declare-rel inv (Int Int Int Int Int Int)) +(declare-rel inv1 (Int Int Int Int Int Int)) +(declare-var i0 Int) +(declare-var i1 Int) +(declare-var j0 Int) +(declare-var j1 Int) +(declare-var z0 Int) +(declare-var z1 Int) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var y0 Int) +(declare-var y1 Int) +(declare-var w0 Int) +(declare-var w1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= i1 1) (= j1 0) (= z1 (- i1 j1)) (= x1 0) (= y1 0) (= w1 0)) + (inv i1 j1 z1 x1 y1 w1))) + +(rule (=> (inv i0 j0 z0 x0 y0 w0) (inv1 i0 j0 z0 x0 y0 w0))) + +(rule (=> + (and + (inv1 i0 j0 z0 x0 y0 w0) + (= z1 (+ z0 x0 y0 w0)) + (= y1 (+ y0 1)) + (= x1 (ite (= (mod z1 2) 1) (+ x0 1) x0)) + (= w1 (+ w0 2)) + ) + (inv1 i0 j0 z1 x1 y1 w1) + ) +) + +(rule (=> (inv1 i0 j0 z0 x0 y0 w0) (inv i0 j0 z0 x0 y0 w0))) + +(rule (=> (and (inv i1 j1 z1 x1 y1 w1) (not (= x1 y1))) fail)) + +(query fail :print-certificate true) diff --git a/bench_horn_multiple/dillig03_m.smt2 b/bench_horn_multiple/dillig03_m.smt2 new file mode 100644 index 000000000..3af53e14a --- /dev/null +++ b/bench_horn_multiple/dillig03_m.smt2 @@ -0,0 +1,31 @@ +(declare-rel itp (Int Int)) +(declare-rel inv (Int Int)) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 1) (= x3 1)) (inv x1 x3))) + +(rule (=> (and (inv x1 x3) (= x2 (+ x1 1))) (itp x2 x3))) + +(rule (=> + (and + (itp x1 x3) + (or (= x2 x1) (= x2 (+ x1 1))) + (= x4 (+ x3 x2)) + ) + (itp x2 x4) + ) +) + +(rule (=> (itp x1 x3) (inv x1 x3))) + +(rule (=> (and (inv x1 x3) + (not (>= x3 1) + )) fail)) + + +(query fail) diff --git a/bench_horn_multiple/dillig05_m.smt2 b/bench_horn_multiple/dillig05_m.smt2 new file mode 100644 index 000000000..4068209a4 --- /dev/null +++ b/bench_horn_multiple/dillig05_m.smt2 @@ -0,0 +1,38 @@ +(declare-rel itp (Int Int Int Int)) +(declare-rel inv (Int Int Int Int)) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) +(declare-var x7 Int) +(declare-var x8 Int) +(declare-var tmp Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= x3 0) (= x5 0) (= x7 0)) (inv x1 x3 x5 x7))) + +(rule (=> (inv x1 x3 x5 x7) (itp x1 x3 x5 x7))) + +(rule (=> + (and + (itp x1 x3 x5 x7) + (= x2 (+ x1 1)) + (= x4 (+ x3 1)) + (= x6 (+ x5 x2)) + (= tmp (+ x7 x4)) + (or (= x8 tmp) (= x8 (+ tmp 1))) + ) + (itp x2 x4 x6 x8) + ) +) + +(rule (=> (itp x1 x3 x5 x7) (inv x1 x3 x5 x7))) + +(rule (=> (and (inv x1 x3 x5 x7) + (not (> x7 (- x5 1)) + )) fail)) + +(query fail :print-certificate true) diff --git a/bench_horn_multiple/dillig07_m.smt2 b/bench_horn_multiple/dillig07_m.smt2 new file mode 100644 index 000000000..444377a46 --- /dev/null +++ b/bench_horn_multiple/dillig07_m.smt2 @@ -0,0 +1,43 @@ +(declare-rel itp (Int Int Int)) +(declare-rel itp1 (Int Int Int)) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= x3 0) (> x5 0)) (itp x1 x3 x5))) + +(rule (=> + (and + (itp x1 x3 x5) + (not (= x1 x5)) + (= x2 (+ x1 1)) + (= x4 (+ x3 1)) + (= x6 x5) + ) + (itp x2 x4 x6) + ) +) + +(rule (=> (and (itp x1 x3 x5) (= x1 x5) (= x6 (* 2 x5))) (itp1 x1 0 x6))) + +(rule (=> + (and + (itp1 x1 x3 x5) + (not (= x1 x5)) + (= x2 (+ x1 1)) + (= x4 (+ x3 1)) + (= x6 x5) + ) + (itp1 x2 x4 x6) + ) +) + +(rule (=> (and (itp1 x1 x3 x5) (= x1 x5) (not (= (* 2 x3) x5))) fail)) + +(query fail :print-certificate true) + diff --git a/bench_horn_multiple/dillig08_m.smt2 b/bench_horn_multiple/dillig08_m.smt2 new file mode 100644 index 000000000..786aa00eb --- /dev/null +++ b/bench_horn_multiple/dillig08_m.smt2 @@ -0,0 +1,34 @@ +(declare-rel inv (Int Int)) +(declare-rel inv1 (Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var y0 Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x0 0) (= y0 0) ) (inv1 x0 y0))) + +(rule (=> (and (inv1 x0 y0 ) (= y1 (+ y0 1))) (inv1 x0 y1 ))) + +(rule (=> (inv1 x0 y0 ) (inv x0 y0 ))) + +(rule (=> + (and + (inv x0 y0) + (or + (and (= x1 (+ x0 1)) (= y1 (+ y0 100))) + (and (= x1 x0) (= y1 y0)) + (and + (= x1 (ite (>= x0 4) (+ x0 1) x0)) + (= y1 (ite (>= x0 4) (+ y0 1) (ite (< x0 0) (- y0 1) y0))) + ) + ) + ) + (inv x1 y1) + ) +) + +(rule (=> (and (inv x1 y1) (not (< x1 4)) (not (> y1 2))) fail)) + +(query fail) diff --git a/bench_horn_multiple/dillig10_m.smt2 b/bench_horn_multiple/dillig10_m.smt2 new file mode 100644 index 000000000..5d1adc5cd --- /dev/null +++ b/bench_horn_multiple/dillig10_m.smt2 @@ -0,0 +1,35 @@ +(declare-rel inv1 (Int Int)) +(declare-rel inv (Int Int Int Int)) + +(declare-var z0 Int) +(declare-var z1 Int) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var y0 Int) +(declare-var y1 Int) +(declare-var w0 Int) +(declare-var w1 Int) + +(declare-rel fail ()) + +(rule (inv1 0 0)) + +(rule (=> (and (inv1 x0 y0 ) (= x1 (+ y0 1534)) (= y1 (+ x0 1534))) (inv1 x1 y1 ))) + +(rule (=> (and (inv1 x0 y0 ) (= z1 0) (= w1 1)) (inv z1 x0 y0 w1))) + +(rule (=> + (and + (inv z0 x0 y0 w0) + (= x1 (ite (= w0 0) x0 (+ x0 1))) + (= w1 (ite (= w0 0) w0 (- 1 w0))) + (= y1 (ite (= z0 0) (+ y0 1) y0)) + (= z1 (ite (= z0 0) 1 z0)) + ) + (inv z1 x1 y1 w1) + ) +) + +(rule (=> (and (inv z1 x1 y1 w1) (not (= x1 y1))) fail)) + +(query fail) diff --git a/bench_horn_multiple/dillig12.smt2 b/bench_horn_multiple/dillig12_m.smt2 similarity index 100% rename from bench_horn_multiple/dillig12.smt2 rename to bench_horn_multiple/dillig12_m.smt2 diff --git a/bench_horn_multiple/dillig15_m.smt2 b/bench_horn_multiple/dillig15_m.smt2 new file mode 100644 index 000000000..11227d7c9 --- /dev/null +++ b/bench_horn_multiple/dillig15_m.smt2 @@ -0,0 +1,32 @@ +(declare-rel inv1 (Int Int)) +(declare-rel itp1 (Int Int Int)) +(declare-var j Int) +(declare-var k Int) +(declare-var n Int) +(declare-var j1 Int) +(declare-var k1 Int) +(declare-var n1 Int) + +(declare-rel fail ()) + +(rule (=> (>= n 1) (inv1 n k))) + +(rule (=> (and (inv1 n k) (not (> k n)) (= k1 (+ k 215))) (inv1 n k1 ))) + +(rule (=> (and (inv1 n k) (> k n) (= j 0)) (itp1 j k n))) + +(rule (=> + (and + (itp1 j k n) + (<= j (- n 1)) + (= j1 (+ j 1)) + (= k1 (- k 1)) + ) + (itp1 j1 k1 n) + ) +) + +(rule (=> (and (itp1 j k n) (>= j n) (<= k -1)) fail)) + +(query fail :print-certificate true) + diff --git a/bench_horn_multiple/dillig21_m.smt2 b/bench_horn_multiple/dillig21_m.smt2 new file mode 100644 index 000000000..27ecde6d3 --- /dev/null +++ b/bench_horn_multiple/dillig21_m.smt2 @@ -0,0 +1,43 @@ +(declare-rel inv (Int Int Int Int Int)) +(declare-rel inv1 (Int Int )) +(declare-var c1 Int) +(declare-var c2 Int) +(declare-var c3 Int) +(declare-var c4 Int) +(declare-var k0 Int) +(declare-var k1 Int) +(declare-var i0 Int) +(declare-var i1 Int) +(declare-var n0 Int) +(declare-var n1 Int) +(declare-var x1 Int) +(declare-var v0 Int) +(declare-var v1 Int) +(declare-var w0 Int) +(declare-var w1 Int) + +(declare-rel fail ()) + +(rule (inv1 10 20)) + +(rule (=> (and (inv1 c1 c2) (= c3 (+ c1 c1)) (= c4 (+ c2 c2))) (inv1 c3 c4))) + +(rule (=> (and (inv1 c1 c2) (= k1 0) (= i1 0) (> n1 0) (< n1 10)) + (inv c1 c2 k1 i1 n1))) + +(rule (=> + (and + (inv c1 c2 k0 i0 n0) + (< i0 n0) + (= i1 (+ i0 1)) + (= w1 (mod w0 2)) + (= v1 (ite (= w1 0) 0 1)) + (= k1 (ite (= v1 0) (+ k0 c1) (+ k0 c2))) + ) + (inv c1 c2 k1 i1 n0) + ) +) + +(rule (=> (and (inv c1 c2 k1 i1 n1) (>= i1 n1) (not (> k1 n1))) fail)) + +(query fail :print-certificate true) diff --git a/bench_horn_multiple/dillig22-4.smt2 b/bench_horn_multiple/dillig22_m.smt2 similarity index 100% rename from bench_horn_multiple/dillig22-4.smt2 rename to bench_horn_multiple/dillig22_m.smt2 diff --git a/bench_horn_multiple/dillig37_m.smt2 b/bench_horn_multiple/dillig37_m.smt2 new file mode 100644 index 000000000..98f43b27d --- /dev/null +++ b/bench_horn_multiple/dillig37_m.smt2 @@ -0,0 +1,31 @@ +(declare-rel inv (Int Int Int)) +(declare-rel inv1 (Int Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var y0 Int) +(declare-var y1 Int) +(declare-var n0 Int) +(declare-var n1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= y1 0) (> n0 0)) (inv x1 y1 n0))) + +(rule (=> (and (inv x1 y1 n0) (= n1 (- n0 1))) (inv1 x1 y1 n1))) + +(rule (=> + (and + (inv1 x0 y0 n0) + (< x0 n0) + (or (= y1 x0) (= y1 y0)) + (= x1 (+ x0 1)) + ) + (inv1 x1 y1 n0) + ) +) + +(rule (=> (and (inv1 x1 y1 n0) (= n1 (+ n0 1))) (inv x1 y1 n1))) + +(rule (=> (and (inv x1 y1 n0) (>= x1 n0) (not (and (<= 0 y1) (<= y1 n0)))) fail)) + +(query fail :print-certificate true) diff --git a/bench_horn_multiple/dillig44_m.smt2 b/bench_horn_multiple/dillig44_m.smt2 new file mode 100644 index 000000000..5961b5c02 --- /dev/null +++ b/bench_horn_multiple/dillig44_m.smt2 @@ -0,0 +1,30 @@ +(declare-rel inv (Int Int Int Int)) +(declare-rel inv1 (Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var y0 Int) +(declare-var y1 Int) +(declare-var n Int) +(declare-var flag Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= y1 0) (= n (ite (= flag 1) 1 2))) (inv x1 y1 n flag))) + +(rule (=> + (and + (inv x0 y0 n flag) + (= x1 (+ x0 1)) + (= y1 (+ y0 n)) + ) + (inv x1 y1 n flag) + ) +) + +(rule (=> (and (inv x1 y1 n flag) (= flag 1)) (inv1 x1 y1))) + +(rule (=> (and (inv1 x1 y1) (= x0 (- x1 1)) (= y0 (- y1 1))) (inv1 x0 y0))) + +(rule (=> (and (inv1 x1 y1) (not (= x1 y1))) fail)) + +(query fail :print-certificate true) diff --git a/bench_horn_multiple/dillig46_m.smt2 b/bench_horn_multiple/dillig46_m.smt2 new file mode 100644 index 000000000..608e86d5d --- /dev/null +++ b/bench_horn_multiple/dillig46_m.smt2 @@ -0,0 +1,38 @@ +(declare-rel inv (Int Int Int Int)) +(declare-rel inv1 (Int Int Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var y0 Int) +(declare-var y1 Int) +(declare-var z0 Int) +(declare-var z1 Int) +(declare-var w0 Int) +(declare-var w1 Int) +(declare-var tmp0 Int) +(declare-var tmp1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= y1 0) (= z1 0) (= w1 1)) (inv1 x1 y1 z1 w1))) + +(rule (=> (and (inv1 x1 y1 z0 w1) (= z1 (+ z0 1))) (inv1 x1 y1 z1 w1))) + +(rule (=> (inv1 x1 y1 z1 w1) (inv x1 y1 z1 w1))) + +(rule (=> + (and + (inv x0 y0 z0 w0) + (= tmp0 (mod w0 2)) + (= tmp1 (mod z0 2)) + (= x1 (ite (= tmp0 1) (+ x0 1) x0)) + (= w1 (ite (= tmp0 1) (+ w0 1) w0)) + (= y1 (ite (= tmp1 0) (+ y0 1) y0)) + (= z1 (ite (= tmp1 0) (+ z0 1) z0)) + ) + (inv x1 y1 z1 w1) + ) +) + +(rule (=> (and (inv x0 y0 z0 w0) (not (<= x0 1))) fail)) + +(query fail :print-certificate true) diff --git a/bench_horn_multiple/exact_iters_4.smt2 b/bench_horn_multiple/exact_iters_6.smt2 similarity index 100% rename from bench_horn_multiple/exact_iters_4.smt2 rename to bench_horn_multiple/exact_iters_6.smt2 diff --git a/bench_horn_multiple/exact_iters_5.smt2 b/bench_horn_multiple/exact_iters_7.smt2 similarity index 100% rename from bench_horn_multiple/exact_iters_5.smt2 rename to bench_horn_multiple/exact_iters_7.smt2 diff --git a/bench_horn_multiple/gj2007_m_1.smt2 b/bench_horn_multiple/gj2007_m_1.smt2 new file mode 100644 index 000000000..be6922b24 --- /dev/null +++ b/bench_horn_multiple/gj2007_m_1.smt2 @@ -0,0 +1,81 @@ +(declare-rel inv (Int Int Int)) +(declare-rel inv2 (Int Int Int)) +(declare-rel inv3 (Int Int Int)) +(declare-rel inv4 (Int Int Int)) +(declare-rel inv5 (Int Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var y0 Int) +(declare-var y1 Int) +(declare-var LRG Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= y1 LRG) (> LRG 0)) (inv x1 y1 LRG))) + +(rule (=> + (and + (inv x0 y0 LRG) + (< x0 LRG) + (= x1 (+ x0 1)) + (= y1 (ite (< x0 LRG) y0 (+ y0 1))) + ) + (inv x1 y1 LRG) + ) +) + +(rule (=> (and (inv x0 y0 LRG) (>= x0 LRG)) (inv2 x0 y0 LRG))) + +(rule (=> + (and + (inv2 x0 y0 LRG) + (< x0 (* 2 LRG)) + (= x1 (+ x0 1)) + (= y1 (ite (< x0 LRG) y0 (+ y0 1))) + ) + (inv2 x1 y1 LRG) + ) +) + +(rule (=> (and (inv2 x0 y0 LRG) (>= x1 (* 2 LRG))) (inv3 x0 y0 LRG))) + +(rule (=> + (and + (inv3 x0 y0 LRG) + (< x0 (* 3 LRG)) + (= x1 (+ x0 1)) + (= y1 (ite (< x0 LRG) y0 (+ y0 1))) + ) + (inv3 x1 y1 LRG) + ) +) + +(rule (=> (and (inv3 x0 y0 LRG) (>= x1 (* 3 LRG))) (inv4 x0 y0 LRG))) + +(rule (=> + (and + (inv4 x0 y0 LRG) + (< x0 (* 4 LRG)) + (= x1 (+ x0 1)) + (= y1 (ite (< x0 LRG) y0 (+ y0 1))) + ) + (inv4 x1 y1 LRG) + ) +) + +(rule (=> (and (inv4 x0 y0 LRG) (>= x1 (* 4 LRG))) (inv5 x0 y0 LRG))) + +(rule (=> + (and + (inv5 x0 y0 LRG) + (< x0 (* 5 LRG)) + (= x1 (+ x0 1)) + (= y1 (ite (< x0 LRG) y0 (+ y0 1))) + ) + (inv5 x1 y1 LRG) + ) +) + +(rule (=> (and (inv5 x1 y1 LRG) (>= x1 (* 5 LRG)) (not (= y1 (* 5 LRG)))) fail)) + +(query fail) diff --git a/bench_horn_multiple/gj2007_m_2.smt2 b/bench_horn_multiple/gj2007_m_2.smt2 new file mode 100644 index 000000000..0210db053 --- /dev/null +++ b/bench_horn_multiple/gj2007_m_2.smt2 @@ -0,0 +1,55 @@ +(declare-rel inv (Int Int Int)) +(declare-rel inv2 (Int Int Int)) +(declare-rel inv3 (Int Int Int)) +(declare-rel inv4 (Int Int Int)) +(declare-rel inv5 (Int Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var y0 Int) +(declare-var y1 Int) +(declare-var LRG Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= y1 (* 2 LRG)) (> LRG 0)) (inv x1 y1 LRG))) + +(rule (=> + (and + (inv x0 y0 LRG) + (< x0 LRG) + (= x1 (+ x0 1)) + (= y1 (ite (< x0 (* 2 LRG)) y0 (+ y0 1))) + ) + (inv x1 y1 LRG) + ) +) + +(rule (=> (and (inv x0 y0 LRG) (>= x0 LRG)) (inv2 x0 y0 LRG))) + +(rule (=> + (and + (inv2 x0 y0 LRG) + (< x0 (* 2 LRG)) + (= x1 (+ x0 1)) + (= y1 (ite (< x0 (* 2 LRG)) y0 (+ y0 1))) + ) + (inv2 x1 y1 LRG) + ) +) + +(rule (=> (and (inv2 x0 y0 LRG) (>= x1 (* 2 LRG))) (inv3 x0 y0 LRG))) + +(rule (=> + (and + (inv3 x0 y0 LRG) + (< x0 (* 3 LRG)) + (= x1 (+ x0 1)) + (= y1 (ite (< x0 (* 2 LRG)) y0 (+ y0 1))) + ) + (inv3 x1 y1 LRG) + ) +) + +(rule (=> (and (inv3 x1 y1 LRG) (>= x1 (* 3 LRG)) (not (= y1 (* 3 LRG)))) fail)) + +(query fail) diff --git a/bench_horn_multiple/gj2007_m_3.smt2 b/bench_horn_multiple/gj2007_m_3.smt2 new file mode 100644 index 000000000..674ccae9d --- /dev/null +++ b/bench_horn_multiple/gj2007_m_3.smt2 @@ -0,0 +1,88 @@ +(declare-rel inv (Int Int Int Int)) +(declare-rel inv2 (Int Int Int Int)) +(declare-rel inv3 (Int Int Int Int)) +(declare-rel inv4 (Int Int Int Int)) +(declare-rel inv5 (Int Int Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var z0 Int) +(declare-var z1 Int) +(declare-var y0 Int) +(declare-var y1 Int) +(declare-var LRG Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= z1 0) (= y1 LRG) (> LRG 0)) (inv x1 y1 z1 LRG))) + +(rule (=> + (and + (inv x0 y0 z0 LRG) + (< x0 LRG) + (= x1 (+ x0 1)) + (= z1 (+ z0 1)) + (= y1 (ite (< z0 LRG) y0 (+ y0 1))) + ) + (inv x1 y1 z1 LRG) + ) +) + +(rule (=> (and (inv x0 y0 z0 LRG) (>= x0 LRG)) (inv2 x0 y0 z0 LRG))) + +(rule (=> + (and + (inv2 x0 y0 z0 LRG) + (< x0 (* 2 LRG)) + (= x1 (+ x0 1)) + (= z1 (+ z0 1)) + (= y1 (ite (< z0 (* 2 LRG)) y0 (+ y0 1))) + ) + (inv2 x1 y1 z1 LRG) + ) +) + +(rule (=> (and (inv2 x0 y0 z0 LRG) (>= x1 (* 2 LRG))) (inv3 x0 y0 z0 LRG))) + +(rule (=> + (and + (inv3 x0 y0 z0 LRG) + (< x0 (* 3 LRG)) + (= x1 (+ x0 1)) + (= z1 (+ z0 1)) + (= y1 (ite (< z0 (* 3 LRG)) y0 (+ y0 1))) + ) + (inv3 x1 y1 z1 LRG) + ) +) + +(rule (=> (and (inv3 x0 y0 z0 LRG) (>= x1 (* 3 LRG))) (inv4 x0 y0 z0 LRG))) + +(rule (=> + (and + (inv4 x0 y0 z0 LRG) + (< x0 (* 4 LRG)) + (= x1 (+ x0 1)) + (= z1 (+ z0 1)) + (= y1 (ite (< z0 (* 4 LRG)) y0 (+ y0 1))) + ) + (inv4 x1 y1 z1 LRG) + ) +) + +(rule (=> (and (inv4 x0 y0 z0 LRG) (>= x1 (* 4 LRG))) (inv5 x0 y0 z0 LRG))) + +(rule (=> + (and + (inv5 x0 y0 z0 LRG) + (< x0 (* 5 LRG)) + (= x1 (+ x0 1)) + (= z1 (+ z0 1)) + (= y1 (ite (< z0 (* 5 LRG)) y0 (+ y0 1))) + ) + (inv5 x1 y1 z1 LRG) + ) +) + +(rule (=> (and (inv5 x1 y1 z1 LRG) (>= x1 (* 5 LRG)) (not (= y1 LRG))) fail)) + +(query fail) diff --git a/bench_horn_multiple/half_true_modif.smt2 b/bench_horn_multiple/half_true_modif_m.smt2 similarity index 100% rename from bench_horn_multiple/half_true_modif.smt2 rename to bench_horn_multiple/half_true_modif_m.smt2 diff --git a/bench_horn_multiple/hhk2008_m.smt2 b/bench_horn_multiple/hhk2008_m.smt2 new file mode 100644 index 000000000..dc54c0632 --- /dev/null +++ b/bench_horn_multiple/hhk2008_m.smt2 @@ -0,0 +1,33 @@ +(declare-rel inv1 (Int Int Int Int)) +(declare-rel inv2 (Int Int Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var y0 Int) +(declare-var y1 Int) +(declare-var res0 Int) +(declare-var res1 Int) +(declare-var cnt0 Int) +(declare-var cnt1 Int) + +(declare-rel fail ()) + +(rule (=> (and (<= x1 1000) (<= 0 y1) (<= y1 100) (= res1 x1) (= cnt1 y1)) (inv1 x1 y1 res1 cnt1))) + +(rule (=> (and (inv1 x1 y1 res0 cnt0) (= cnt1 (+ cnt0 100)) (= res1 (- res0 100))) (inv2 x1 y1 res1 cnt1))) + +(rule (=> + (and + (inv2 x0 y0 res0 cnt0) + (> cnt0 0) + (= cnt1 (- cnt0 1)) + (= res1 (+ res0 1)) + ) + (inv2 x0 y0 res1 cnt1) + ) +) + +(rule (=> (inv2 x1 y1 res1 cnt1) (inv1 x1 y1 res1 cnt1))) + +(rule (=> (and (inv1 x1 y1 res1 cnt1) (<= cnt1 0) (not (= res1 (+ x1 y1)))) fail)) + +(query fail :print-certificate true) diff --git a/bench_horn_multiple/nonlin_multiple_inv_09.smt2 b/bench_horn_multiple/nonlin_multiple_inv_09.smt2 new file mode 100644 index 000000000..77ba0c792 --- /dev/null +++ b/bench_horn_multiple/nonlin_multiple_inv_09.smt2 @@ -0,0 +1,20 @@ +(declare-rel PRE (Int)) +(declare-rel POST (Int Int)) +(declare-var m Int) +(declare-var m1 Int) +(declare-var n Int) +(declare-var n1 Int) + +(declare-rel fail ()) + +(rule (=> (< m 0) (PRE m))) + +(rule (=> (and (PRE m) (= m1 (- m 1))) (PRE m1))) + +(rule (=> (PRE m) (POST m m))) + +(rule (=> (and (POST m n) (= m1 (* m n)) (= n1 (+ n 1))) (POST m1 n1))) + +(rule (=> (and (POST m n) (> n 0) (not (= m 0))) fail)) + +(query fail) diff --git a/bench_horn_multiple/nonlin_multiple_inv_10.smt2 b/bench_horn_multiple/nonlin_multiple_inv_10.smt2 new file mode 100644 index 000000000..02a004bae --- /dev/null +++ b/bench_horn_multiple/nonlin_multiple_inv_10.smt2 @@ -0,0 +1,49 @@ +(declare-rel FUN (Int Int Int )) +(declare-rel SAD (Int Int Int Int )) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) +(declare-var d1 Int) +(declare-var d2 Int) +(declare-var d3 Int) +(declare-var c1 Int) +(declare-var c2 Int) +(declare-var c3 Int) +(declare-var c4 Int) +(declare-var f1 Int) +(declare-var f2 Int) + +; inspired by trex3_m.smt2 but with nonlinear arithm in the query + +(declare-rel fail ()) + +(rule (FUN x1 x2 c1 )) + +(rule (=> (and (FUN x1 x2 c1) + (= x4 (+ x1 1)) (= x5 (+ x2 1))) + (SAD x4 x5 c1 0))) + +(rule (=> + (and + (SAD x1 x2 c1 f1) + (> x1 0) + (> x2 0) + (= x4 (ite (= c1 1) (- x1 1) x1)) + (= x5 (ite (and (not (= c1 1)) (= c2 1)) (- x2 1) x2)) + ) + (SAD x4 x5 c3 1) + ) +) + +(rule (=> (and (SAD x1 x2 c1 f1) + (= f1 0) (not (and (> x1 0) (> x2 0)))) + (FUN x1 x2 c1))) + +(rule (=> (and (SAD x1 x2 c1 f1) + (= f1 1) (not (and (> x1 0) (> x2 0) )) + (not (= (* x1 x2) 0))) fail)) + +(query fail) diff --git a/bench_horn_multiple/nonlin_multiple_inv_11.smt2 b/bench_horn_multiple/nonlin_multiple_inv_11.smt2 new file mode 100644 index 000000000..2d597fd62 --- /dev/null +++ b/bench_horn_multiple/nonlin_multiple_inv_11.smt2 @@ -0,0 +1,44 @@ +(declare-rel inv (Int Int Int Int)) +(declare-rel inv1 (Int Int Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) +(declare-var k Int) +(declare-var l Int) +(declare-var l1 Int) +(declare-var m Int) + +(declare-rel fail ()) + +(rule (=> (and (= i 0) (> j 0) (> k 0) (= l 0)) (inv i j k l))) + +(rule (=> + (and + (inv i j k l) + (= i1 (+ i 1)) + (= m (mod j k)) + (= j1 (+ j m)) + (= l1 (+ l m)) + ) + (inv i1 j1 k l1) + ) +) + +(rule (=> (inv i1 j1 k l1) (inv1 i1 j1 k l1))) + +(rule (=> + (and + (inv1 i j k l) + (= i1 (+ i 1)) + (= m (mod j k)) + (= j1 (+ j m)) + (= l1 (+ l m 1)) + ) + (inv1 i1 j1 k l1) + ) +) + +(rule (=> (and (inv1 i j k l) (not (<= l (* k i)))) fail)) + +(query fail) diff --git a/bench_horn_multiple/nonlin_multiple_inv_12.smt2 b/bench_horn_multiple/nonlin_multiple_inv_12.smt2 new file mode 100644 index 000000000..5e9ac729e --- /dev/null +++ b/bench_horn_multiple/nonlin_multiple_inv_12.smt2 @@ -0,0 +1,33 @@ +(declare-rel inv (Int Int)) +(declare-rel inv1 (Int Int)) +(declare-var a Int) +(declare-var a2 Int) +(declare-var b Int) +(declare-var b2 Int) + +(declare-rel fail ()) + +(rule (=> (and (= a 2) (= b 2)) (inv a b))) + +(rule (=> + (and + (inv a b) + (= a2 (* a a)) + ) + (inv a2 b) + ) +) + +(rule (=> (inv a b) (inv1 a b))) + +(rule (=> + (and + (inv1 a b) + (= a2 (+ a a)) + (= b2 (* b a)) + ) + (inv1 a2 b2) + ) +) + +(rule (=> (and (inv1 a b) (not (> b 1))) fail)) diff --git a/bench_horn_multiple/nonlin_multiple_inv_13.smt2 b/bench_horn_multiple/nonlin_multiple_inv_13.smt2 new file mode 100644 index 000000000..7c45a3217 --- /dev/null +++ b/bench_horn_multiple/nonlin_multiple_inv_13.smt2 @@ -0,0 +1,29 @@ +(declare-rel inv (Int Int Int)) +(declare-rel inv1 (Int Int Int)) +(declare-var a Int) +(declare-var b Int) +(declare-var b1 Int) +(declare-var i Int) +(declare-var i1 Int) + +(declare-rel fail ()) + +(rule (=> (and (< a 0) (= b a) (= i -1)) (inv a b i))) + +(rule (=> (inv a b i) (inv1 a b i))) + +(rule (=> + (and + (inv1 a b i) + (= b1 (* a b)) + (= i1 (- i)) + ) + (inv1 a b1 i1) + ) +) + +(rule (=> (and (inv1 a b i) (= b1 (- b)) (= i1 (- i))) (inv a b1 i1))) + +(rule (=> (and (inv a b i) (not (> (* b i) 0))) fail)) + +(query fail) diff --git a/bench_horn_multiple/nonlin_multiple_inv_14.smt2 b/bench_horn_multiple/nonlin_multiple_inv_14.smt2 new file mode 100644 index 000000000..0daea7661 --- /dev/null +++ b/bench_horn_multiple/nonlin_multiple_inv_14.smt2 @@ -0,0 +1,38 @@ +(declare-rel inv (Int Int Int Int)) +(declare-rel inv1 (Int Int Int Int)) +(declare-var a Int) +(declare-var b Int) +(declare-var c1 Int) +(declare-var c2 Int) +(declare-var d1 Int) +(declare-var d2 Int) + +(declare-rel fail ()) + +(rule (=> (and (> a 0) (> b 0) (= c1 0) (= d1 0)) (inv a b c1 d1))) + +(rule (=> + (and + (inv a b c1 d1) + (= c2 (+ c1 1)) + (= d2 (+ d1 b)) + ) + (inv a b c2 d2) + ) +) + +(rule (=> (inv a b c1 d1) (inv1 a b c1 d1))) + +(rule (=> + (and + (inv1 a b c1 d1) + (= c2 (+ c1 1)) + (= d2 (+ d1 b)) + ) + (inv1 a b c2 d2) + ) +) + +(rule (=> (and (inv1 a b c1 d1) (not (= d1 (* c1 b)))) fail)) + +(query fail) diff --git a/bench_horn_multiple/nonlin_multiple_inv_15.smt2 b/bench_horn_multiple/nonlin_multiple_inv_15.smt2 new file mode 100644 index 000000000..9b1d464d8 --- /dev/null +++ b/bench_horn_multiple/nonlin_multiple_inv_15.smt2 @@ -0,0 +1,34 @@ +(declare-rel inv (Int Int Int Int Int)) +(declare-rel inv1 (Int Int)) +(declare-var a Int) +(declare-var b Int) +(declare-var c1 Int) +(declare-var c2 Int) +(declare-var d1 Int) +(declare-var d2 Int) +(declare-var e1 Int) +(declare-var e2 Int) + +(declare-rel fail ()) + +(rule (=> (and (> a 0) (>= b a) (= c1 0) (= e1 0) (= d1 0)) (inv a b c1 d1 e1))) + +(rule (=> + (and + (inv a b c1 d1 e1) + (= c2 (+ c1 1)) + (= d2 (+ d1 a)) + (= e2 (+ e1 b)) + ) + (inv a b c2 d2 e2) + ) +) + +(rule (=> (and (inv a b c1 d1 e1) (= e1 (* b c1)) (= e2 (* a c1))) (inv1 e1 e2))) + +(rule (=> (and (inv1 e1 e2) (= c1 (+ e1 1)) (= c2 (+ e2 1))) (inv1 c1 c2))) + +(rule (=> (and (inv1 c1 c2) (not (>= c1 c2))) fail)) + +(query fail) + diff --git a/bench_horn_multiple/nonlin_multiple_inv_16.smt2 b/bench_horn_multiple/nonlin_multiple_inv_16.smt2 new file mode 100644 index 000000000..1deba62a9 --- /dev/null +++ b/bench_horn_multiple/nonlin_multiple_inv_16.smt2 @@ -0,0 +1,20 @@ +(declare-rel INV1 (Int Int)) +(declare-rel INV2 (Int Int)) +(declare-var a Int) +(declare-var a1 Int) +(declare-var b Int) +(declare-var b1 Int) + +(declare-rel fail ()) + +(rule (=> (= 0 (* a b)) (INV1 a b))) + +(rule (=> (and (INV1 a b) (> a 0) (= a1 (- a 1))) (INV1 a1 b))) + +(rule (=> (and (INV1 a b) (<= a 0)) (INV2 a b))) + +(rule (=> (and (INV2 a b) (< b 0) (= b1 (+ b 1))) (INV2 a b1))) + +(rule (=> (and (INV2 a b) (>= b 0) (not (= (* a b) 0))) fail)) + +(query fail) diff --git a/bench_horn_multiple/nonlin_multiple_inv_96.smt2 b/bench_horn_multiple/nonlin_multiple_inv_96.smt2 new file mode 100644 index 000000000..03c870da2 --- /dev/null +++ b/bench_horn_multiple/nonlin_multiple_inv_96.smt2 @@ -0,0 +1,32 @@ +(declare-rel OUT_MLT (Int Int Int Int)) +(declare-rel INN_MLT (Int Int Int Int)) +(declare-var k Int) +(declare-var k1 Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) +(declare-var N Int) + +(declare-rel fail ()) + +(rule (=> (and (= k 0) (= j 0) (= i 0) (> N 0)) (OUT_MLT k i j N))) + +(rule (=> (OUT_MLT k i j N) (INN_MLT k i 0 N))) + +(rule (=> + (and + (INN_MLT k i j N) + (< j N) + (= k1 (+ k 1)) + (= j1 (+ j 1)) + ) + (INN_MLT k1 i j1 N) + ) +) + +(rule (=> (and (INN_MLT k i j N) (>= j N) (= i1 (+ i 1))) (OUT_MLT k i1 j N))) + +(rule (=> (and (OUT_MLT k i j N) (not (= (mod k N) 0))) fail)) + +(query fail) diff --git a/bench_horn_multiple/nonlin_multiple_inv_97.smt2 b/bench_horn_multiple/nonlin_multiple_inv_97.smt2 new file mode 100644 index 000000000..5f175f9ae --- /dev/null +++ b/bench_horn_multiple/nonlin_multiple_inv_97.smt2 @@ -0,0 +1,32 @@ +(declare-rel OUT_MLT (Int Int Int Int)) +(declare-rel INN_MLT (Int Int Int Int)) +(declare-var k Int) +(declare-var k1 Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) +(declare-var N Int) + +(declare-rel fail ()) + +(rule (=> (and (= k 0) (= j 0) (= i 0) (> N 0)) (OUT_MLT k i j N))) + +(rule (=> (OUT_MLT k i j N) (INN_MLT k i 0 N))) + +(rule (=> + (and + (INN_MLT k i j N) + (< j N) + (= k1 (+ k 1)) + (= j1 (+ j 1)) + ) + (INN_MLT k1 i j1 N) + ) +) + +(rule (=> (and (INN_MLT k i j N) (>= j N) (= i1 (+ i 1))) (OUT_MLT k i1 j N))) + +(rule (=> (and (OUT_MLT k i j N) (not (= k (* i N)))) fail)) + +(query fail) diff --git a/bench_horn_multiple/nonlin_multiple_inv_98.smt2 b/bench_horn_multiple/nonlin_multiple_inv_98.smt2 new file mode 100644 index 000000000..384a945aa --- /dev/null +++ b/bench_horn_multiple/nonlin_multiple_inv_98.smt2 @@ -0,0 +1,22 @@ +(declare-rel PLUS (Int Int)) +(declare-rel MULT (Int Int Int)) +(declare-var m Int) +(declare-var m1 Int) +(declare-var n Int) +(declare-var n1 Int) +(declare-var k Int) +(declare-var k1 Int) + +(declare-rel fail ()) + +(rule (=> (< n 0) (PLUS 0 n))) + +(rule (=> (and (PLUS m n) (< n1 0)) (MULT m n1 1))) + +(rule (=> (and (MULT m n k) (= k1 (* k n)) (= n1 (+ n 1))) (MULT m n1 k1))) + +(rule (=> (and (MULT m n k) (> n 0) (= m1 (+ m k))) (PLUS m1 n1))) + +(rule (=> (and (PLUS m n) (not (= m 0))) fail)) + +(query fail) diff --git a/bench_horn_multiple/nonlin_multiple_inv_99.smt2 b/bench_horn_multiple/nonlin_multiple_inv_99.smt2 new file mode 100644 index 000000000..b781e8730 --- /dev/null +++ b/bench_horn_multiple/nonlin_multiple_inv_99.smt2 @@ -0,0 +1,32 @@ +(declare-rel MLT1 (Int Int Int)) +(declare-rel MLT2 (Int Int Int Int Int Int)) +(declare-var a Int) +(declare-var a1 Int) +(declare-var b Int) +(declare-var b1 Int) +(declare-var c Int) +(declare-var c1 Int) +(declare-var d Int) +(declare-var d1 Int) +(declare-var e Int) +(declare-var e1 Int) +(declare-var f Int) +(declare-var f1 Int) + +(declare-rel fail ()) + +; everything is linear, but non-linear invariants are required + +(rule (MLT1 0 c 0)) + +(rule (=> (and (MLT1 a c e) (= a1 (+ a 1)) (= e1 (+ e c))) + (MLT1 a1 c e1))) + +(rule (=> (MLT1 a c e) (MLT2 a 0 c c e 0))) + +(rule (=> (and (MLT2 a b c d e f) (= b1 (+ b 1)) (= f1 (+ f d))) + (MLT2 a b1 c d e f1))) + +(rule (=> (and (MLT2 a b c d e f) (= b a) (not (= e f))) fail)) + +(query fail) diff --git a/bench_horn_multiple/phases_m.smt2 b/bench_horn_multiple/phases_m.smt2 new file mode 100644 index 000000000..ad0d45531 --- /dev/null +++ b/bench_horn_multiple/phases_m.smt2 @@ -0,0 +1,43 @@ +(declare-rel inv1 (Int Int Int)) +(declare-rel inv2 (Int Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var LRG1 Int) ; 65520 +(declare-var LRG2 Int) ; 268435455 +(declare-var tmp1 Int) +(declare-var tmp2 Int) + +(declare-rel fail ()) + +(rule (=> (and + (= x0 0) (< 0 LRG1) (< LRG1 LRG2) + (= LRG1 (* 2 tmp1)) + (= LRG2 (+ (* 2 tmp2) 1))) + (inv1 x0 LRG1 LRG2))) + +(rule (=> + (and + (inv1 x0 LRG1 LRG2) + (< x0 LRG1) + (= x1 (ite (< x0 LRG1) (+ x0 1) (+ x0 2))) + ) + (inv1 x1 LRG1 LRG2) + ) +) + +(rule (=> (and (inv1 x0 LRG1 LRG2) (not (< x0 LRG1))) (inv2 x0 LRG1 LRG2))) + +(rule (=> + (and + (inv2 x0 LRG1 LRG2) + (< x0 LRG2) + (= x1 (ite (< x0 LRG1) (+ x0 1) (+ x0 2))) + ) + (inv2 x1 LRG1 LRG2) + ) +) + +(rule (=> (and (inv2 x0 LRG1 LRG2) (>= x0 LRG2) + (not (= (mod x0 2) 0))) fail)) + +(query fail) diff --git a/bench_horn_multiple/s_mutants_01_m.smt2 b/bench_horn_multiple/s_mutants_01_m.smt2 new file mode 100644 index 000000000..663b7a020 --- /dev/null +++ b/bench_horn_multiple/s_mutants_01_m.smt2 @@ -0,0 +1,38 @@ +(declare-rel inv1 (Int Int)) +(declare-rel inv2 (Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var i Int) +(declare-var i1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x 0) (= i 0)) (inv1 x i))) + +(rule (=> + (and + (inv1 x i) + (= i1 (+ i 1)) + (= x1 (+ x i)) + ) + (inv1 x1 i1) + ) +) + +(rule (=> (inv1 x i) (inv2 x i))) + +(rule (=> + (and + (inv2 x i) + (= i1 (+ i 1)) + (= x1 (+ x i)) + ) + (inv2 x1 i1) + ) +) + + +(rule (=> (and (inv2 x i) (not (>= x 0))) fail)) + +(query fail) + diff --git a/bench_horn_multiple/s_mutants_02_m.smt2 b/bench_horn_multiple/s_mutants_02_m.smt2 new file mode 100644 index 000000000..84cd0277e --- /dev/null +++ b/bench_horn_multiple/s_mutants_02_m.smt2 @@ -0,0 +1,40 @@ +(declare-rel itp1 (Int Int Int Int )) +(declare-rel itp2 (Int Int Int Int )) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) +(declare-var x7 Int) +(declare-var x8 Int) +(declare-var x9 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= x3 0) (= x5 0) (= x7 0)) (itp1 x1 x3 x5 x7))) + +(rule (=> (itp1 x1 x3 x5 x7) (itp2 x7 x3 x1 x5))) + +(rule (=> + (and + (itp2 x1 x3 x5 x7) + (= x2 (+ x1 1)) + (= x4 (+ x3 x2)) + (= x6 (+ x5 x4)) + (= x8 (+ x7 x6)) + ) + (itp2 x2 x4 x6 x8) + ) +) + +(rule (=> (itp2 x1 x3 x5 x7) (itp1 x3 x7 x5 x1))) + +(rule (=> (and (itp1 x1 x3 x5 x7) + (not + (>= x7 0) + )) fail)) + + +(query fail) diff --git a/bench_horn_multiple/s_mutants_03_m.smt2 b/bench_horn_multiple/s_mutants_03_m.smt2 new file mode 100644 index 000000000..ea91f0941 --- /dev/null +++ b/bench_horn_multiple/s_mutants_03_m.smt2 @@ -0,0 +1,45 @@ +(declare-rel itp1 (Int Int Int )) +(declare-rel itp2 (Int Int Int )) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (= x3 0) (= x5 0)) (itp1 x1 x3 x5))) + +(rule (=> + (and + (itp1 x1 x3 x5) + (= x2 (+ x1 1)) + (= x4 (+ x3 1)) + (or (= x6 (+ x5 x2)) + (= x6 (+ x5 x4))) + ) + (itp1 x2 x4 x6) + ) +) + +(rule (=> (itp1 x1 x3 x5) (itp2 x1 x5 x3))) + +(rule (=> + (and + (itp2 x1 x3 x5) + (or (and (= x2 (+ x1 1)) (= x4 x3)) + (and (= x2 x1) (= x4 (+ x3 1)))) + (= x6 (+ x5 x2 x4)) + ) + (itp2 x2 x4 x6) + ) +) + +(rule (=> (and (itp2 x1 x3 x5) + (not + (>= x5 0) + )) fail)) + +(query fail) diff --git a/bench_horn_multiple/s_mutants_06_m.smt2 b/bench_horn_multiple/s_mutants_06_m.smt2 new file mode 100644 index 000000000..db3a4df36 --- /dev/null +++ b/bench_horn_multiple/s_mutants_06_m.smt2 @@ -0,0 +1,44 @@ +(declare-rel inv1 (Int Int Int Int)) +(declare-rel inv2 (Int Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x 0) (= y 0) (= i 0) (= j 0)) (inv1 x y i j))) + +(rule (=> + (and + (inv1 x y i j) + (= i1 (+ i 1)) + (= x1 (+ x 1)) + (= y1 (- y 1)) + ) + (inv1 x1 y1 i1 j) + ) +) + +(rule (=> (inv1 x y i j) (inv2 x y i j))) + +(rule (=> + (and + (inv2 x y i j) + (= j1 (+ j 1)) + (= x1 (- x 1)) + (= y1 (+ y 1)) + ) + (inv2 x1 y1 i j1) + ) +) + +(rule (=> (and (inv2 x y i j) (> i j) (not (> x y))) fail)) + + +(query fail) + diff --git a/bench_horn_multiple/s_mutants_11_m.smt2 b/bench_horn_multiple/s_mutants_11_m.smt2 new file mode 100644 index 000000000..eb130cb06 --- /dev/null +++ b/bench_horn_multiple/s_mutants_11_m.smt2 @@ -0,0 +1,63 @@ +(declare-rel itp1 (Int Int Int)) +(declare-rel itp2 (Int Int Int)) +(declare-rel itp3 (Int Int Int)) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 1) (= x3 1) (= x5 1)) (itp1 x1 x3 x5))) + +(rule (=> + (and + (itp1 x1 x3 x5) + (= x2 (+ x1 1)) + (= x4 (+ x1 x1)) + (= x6 (+ x1 x1 x1)) + ) + (itp1 x2 x4 x6) + ) +) + +(rule (=> (itp1 x1 x3 x5) (itp2 x1 x3 x5))) + +(rule (=> + (and + (itp2 x1 x3 x5) + (= x2 (+ x1 x1 1)) + (= x4 (+ x1 x1 x1)) + (= x6 (+ x1 x1 x1 x1 )) + ) + (itp2 x2 x4 x6) + ) +) + +(rule (=> (itp2 x1 x3 x5) (itp3 x1 x3 x5))) + +(rule (=> + (and + (itp3 x1 x3 x5) + (= x2 (+ x1 x1 x1 1)) + (= x4 (+ x1 x1 x1 x1)) + (= x6 (+ x1 x1 x1 x1 x1)) + ) + (itp3 x2 x4 x6) + ) +) + + +(rule (=> (and (itp3 x1 x3 x5) + (not + (or + (> (- x5 x3) 300) + (< x1 1000) + ) + )) fail)) + + +(query fail) + diff --git a/bench_horn_multiple/s_mutants_12_m.smt2 b/bench_horn_multiple/s_mutants_12_m.smt2 new file mode 100644 index 000000000..68eb2ccd4 --- /dev/null +++ b/bench_horn_multiple/s_mutants_12_m.smt2 @@ -0,0 +1,40 @@ +(declare-rel inv (Int Int Int Int Int Int)) +(declare-rel inv1 (Int Int Int Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) +(declare-var k Int) +(declare-var k1 Int) +(declare-var l Int) +(declare-var l1 Int) +(declare-var m Int) +(declare-var m1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x 1) (= i 1) (= j 1) (= k 1) (= l 1) (= m 1)) (inv x i j k l m))) + +(rule (=> (inv x i j k l m) (inv1 x i j k l m))) + +(rule (=> + (and + (inv1 x i j k l m) + (= x1 (+ x i j k l m)) + (= i1 (+ x i j k l m)) + (= j1 (+ x i j k l m)) + (= k1 (+ x i j k l m)) + (= l1 (+ x i j k l m)) + (= m1 (+ x i j k l m)) + ) + (inv1 x1 i1 j1 k1 l1 m1) + ) +) + +(rule (=> (inv1 x i j k l m) (inv x i j k l m))) + +(rule (=> (and (inv x i j k l m) (not (>= x 1))) fail)) + +(query fail) diff --git a/bench_horn_multiple/s_mutants_16_m.smt2 b/bench_horn_multiple/s_mutants_16_m.smt2 new file mode 100644 index 000000000..06e455514 --- /dev/null +++ b/bench_horn_multiple/s_mutants_16_m.smt2 @@ -0,0 +1,41 @@ +(declare-rel itp (Int Int Int)) +(declare-rel itp1 (Int Int Int)) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var y Int) + +(declare-rel fail ()) + +(rule (=> (and (= x1 0) (> y 0) (< y 5) (= x3 (* 3 y))) (itp x1 x3 y))) + +(rule (=> + (and + (itp x1 x3 y ) + (< x1 100) + (= x2 (+ x1 1)) + (= x4 (+ x3 1)) + ) + (itp x2 x4 y) + ) +) + +(rule (=> (and (itp x1 x3 y) (not (< x1 100))) (itp1 x1 x3 y))) + +(rule (=> + (and + (itp1 x1 x3 y ) + (< x1 120) + (= x2 (+ x1 1)) + (= x4 (+ x3 1)) + ) + (itp1 x2 x4 y) + ) +) + +(rule (=> (and (itp1 x1 x3 y) (not (< x1 120)) + (not (and (>= x3 3) (<= x3 132)) + )) fail)) + +(query fail) diff --git a/bench_horn_multiple/s_mutants_18_m.smt2 b/bench_horn_multiple/s_mutants_18_m.smt2 new file mode 100644 index 000000000..7107c73c5 --- /dev/null +++ b/bench_horn_multiple/s_mutants_18_m.smt2 @@ -0,0 +1,40 @@ +(declare-rel inv (Int Int Int Int)) +(declare-rel inv1 (Int Int Int Int)) +(declare-rel inv2 (Int Int Int Int)) +(declare-var z0 Int) +(declare-var z1 Int) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var y0 Int) +(declare-var y1 Int) +(declare-var w0 Int) +(declare-var w1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= z1 0) (= x1 0) (= y1 0) (= w1 1)) + (inv z1 x1 y1 w1))) + +(rule (=> (inv z0 x0 y0 w0) (inv1 z0 x0 y0 w0))) + +(rule (=> (inv1 z0 x0 y0 w0) (inv2 z0 x0 y0 w0))) + +(rule (=> + (and + (inv2 z0 x0 y0 w0) + (= x1 (ite (= w0 1) (+ x0 1) x0)) + (= w1 (ite (= w0 1) 0 1)) + (= y1 (ite (= z0 0) (+ y0 1) y0)) + (= z1 (ite (= z0 0) 1 0)) + ) + (inv2 z1 x1 y1 w1) + ) +) + +(rule (=> (inv2 z0 x0 y0 w0) (inv1 z0 x0 y0 w0))) + +(rule (=> (inv1 z0 x0 y0 w0) (inv z0 x0 y0 w0))) + +(rule (=> (and (inv z1 x1 y1 w1) (not (= x1 y1))) fail)) + +(query fail) diff --git a/bench_horn_multiple/s_mutants_19_m.smt2 b/bench_horn_multiple/s_mutants_19_m.smt2 new file mode 100644 index 000000000..21e12733d --- /dev/null +++ b/bench_horn_multiple/s_mutants_19_m.smt2 @@ -0,0 +1,38 @@ +(declare-rel inv (Int)) +(declare-rel inv1 (Int Int Int Int Int)) +(declare-var k0 Int) +(declare-var k1 Int) +(declare-var i0 Int) +(declare-var i1 Int) +(declare-var j0 Int) +(declare-var j1 Int) +(declare-var n0 Int) +(declare-var n1 Int) +(declare-var b0 Int) +(declare-var b1 Int) + +(declare-rel fail ()) + +(rule (inv 25465)) + +(rule (=> (and (inv k0) (not (> k0 1000)) (= k1 (- k0 1))) (inv k1))) + +(rule (=> (and (inv k0) (<= k0 1000) + (= i1 j1) (= n1 0) (= i1 0) (or (= b1 0) (= b1 1))) (inv1 k0 i1 j1 n1 b1))) + +(rule (=> + (and + (inv1 k0 i0 j0 n0 b0) + (< n0 (* 2 k0)) + (= i1 (ite (= b0 0) (+ i0 1) i0)) + (= j1 (ite (= b0 0) j0 (+ j0 1))) + (= b1 (ite (= b0 0) 1 0)) + (= n1 (+ n0 1)) + ) + (inv1 k0 i1 j1 n1 b1) + ) +) + +(rule (=> (and (inv1 k1 i1 j1 n1 b1) (>= n1 (* 2 k1)) (not (= 0 (mod n1 2)))) fail)) + +(query fail) diff --git a/bench_horn_multiple/s_mutants_20.smt2 b/bench_horn_multiple/s_mutants_20_m.smt2 similarity index 67% rename from bench_horn_multiple/s_mutants_20.smt2 rename to bench_horn_multiple/s_mutants_20_m.smt2 index 3a6cd8499..2bcbe37ec 100644 --- a/bench_horn_multiple/s_mutants_20.smt2 +++ b/bench_horn_multiple/s_mutants_20_m.smt2 @@ -1,4 +1,4 @@ -(declare-rel inv1 (Int Int Int Int Int)) +(declare-rel inv1 (Int )) (declare-rel inv (Int Int Int Int Int)) (declare-var k0 Int) (declare-var k1 Int) @@ -13,12 +13,12 @@ (declare-rel fail ()) -(rule (=> (and (= k1 100) (= i1 j1) (= n1 0) (= i1 0) (or (= b1 0) (= b1 1))) - (inv1 k1 i1 j1 n1 b1))) +(rule (=> (= k1 0) (inv1 k1))) -(rule (=> (inv1 k1 i1 j1 n1 b1) (inv1 k1 i1 j1 n1 b1))) +(rule (=> (and (inv1 k0 ) (< k0 100) (= k1 (+ k0 10))) (inv1 k1))) -(rule (=> (inv1 k1 i1 j1 n1 b1) (inv k1 i1 j1 n1 b1))) +(rule (=> (and (inv1 k0) (>= k0 100) + (= i1 j1) (= n1 0) (= i1 0) (or (= b1 0) (= b1 1))) (inv k0 i1 j1 n1 b1))) (rule (=> (and @@ -35,4 +35,4 @@ (rule (=> (and (inv k1 i1 j1 n1 b1) (>= n1 (* 2 k1)) (not (= (+ i1 j1) n1))) fail)) -(query fail :print-certificate true) \ No newline at end of file +(query fail) diff --git a/bench_horn_multiple/s_mutants_21.smt2 b/bench_horn_multiple/s_mutants_21_m.smt2 similarity index 55% rename from bench_horn_multiple/s_mutants_21.smt2 rename to bench_horn_multiple/s_mutants_21_m.smt2 index 58f5f8292..bf2b0b624 100644 --- a/bench_horn_multiple/s_mutants_21.smt2 +++ b/bench_horn_multiple/s_mutants_21_m.smt2 @@ -1,4 +1,5 @@ -(declare-rel itp1 (Int Int Int)) +(declare-rel itp1 (Int)) +(declare-rel itp2 (Int Int)) (declare-rel itp (Int Int Int)) (declare-var x0 Int) (declare-var x1 Int) @@ -11,11 +12,15 @@ (declare-rel fail ()) -(rule (=> (and (= x1 0) (= x3 0) (= x5 (* 10 x9)) (> x9 0) (< x9 10)) (itp1 x1 x3 x5))) +(rule (=> (> x1 0) (itp1 x1))) -(rule (=> (itp1 x1 x3 x5) (itp1 x1 x3 x5))) +(rule (=> (and (itp1 x1) (not (= x1 0)) (= x2 (- x1 1))) (itp1 x2))) -(rule (=> (itp1 x1 x3 x5) (itp x1 x3 x5))) +(rule (=> (and (itp1 x1) (= x1 0) (> x3 0)) (itp2 x1 x3))) + +(rule (=> (and (itp2 x1 x3) (not (= x3 0)) (= x4 (- x3 1))) (itp2 x1 x4))) + +(rule (=> (and (itp2 x1 x3) (= x3 0) (= x5 (* 10 x9)) (> x9 0) (< x9 10)) (itp x1 x3 x5))) (rule (=> (and @@ -31,4 +36,4 @@ (rule (=> (and (itp x1 x3 x5) (= x5 78)) fail)) -(query fail :print-certificate true) \ No newline at end of file +(query fail) diff --git a/bench_horn_multiple/s_mutants_22_m.smt2 b/bench_horn_multiple/s_mutants_22_m.smt2 new file mode 100644 index 000000000..ccb27980d --- /dev/null +++ b/bench_horn_multiple/s_mutants_22_m.smt2 @@ -0,0 +1,33 @@ +(declare-rel itp1 (Int Int)) +(declare-rel itp (Int Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) +(declare-var x9 Int) + +(declare-rel fail ()) + +(rule (=> (> x0 0) (itp1 x0 x0))) + +(rule (=> (and (itp1 x0 x9) (< x0 (* 2 x9)) (= x5 (+ x0 1))) (itp1 x5 x9))) + +(rule (=> (and (itp1 x5 x9) (= x1 0) (= x3 0) (not (< x5 (* 2 x9)))) (itp x1 x3 x5))) + +(rule (=> + (and + (itp x1 x3 x5) + (or (and (= x2 (+ x1 1)) (= x4 (+ x3 1))) + (and (= x2 (- x1 1)) (= x4 (- x3 1)))) + (= x6 (+ x5 x2 x4)) + ) + (itp x2 x4 x6) + ) +) + +(rule (=> (and (itp x1 x3 x5) (= x5 77)) fail)) + +(query fail :print-certificate true) diff --git a/bench_horn_multiple/s_mutants_24_m.smt2 b/bench_horn_multiple/s_mutants_24_m.smt2 new file mode 100644 index 000000000..b70d8b1b8 --- /dev/null +++ b/bench_horn_multiple/s_mutants_24_m.smt2 @@ -0,0 +1,40 @@ +(declare-rel itp (Int Int Int Int)) +(declare-rel itp1 (Int Int Int Int)) +(declare-rel fail ()) +(declare-var i1 Int) +(declare-var i1p Int) +(declare-var i2 Int) +(declare-var i2p Int) +(declare-var N1 Int) +(declare-var N2 Int) + +(rule (=> (and (= N1 N2) (= i1 N1) (= i2 0)) (itp i1 i2 N1 N2))) + +(rule (=> + (and + (itp i1 i2 N1 N2) + (> i1 0) + (= i1p (- i1 1)) + (= i2p (+ i2 1)) + ) + (itp i1p i2p N1 N2) + ) +) + +(rule (=> (and (itp i1 i2 N1 N2) (not (> i1 0))) (itp1 i1 i2 N1 N2))) + +(rule (=> + (and + (itp1 i1 i2 N1 N2) + (< i2 N1) + (= i1p (- i1 1)) + (= i2p (+ i2 1)) + ) + (itp1 i1p i2p N1 N2) + ) +) + +(rule (=> (and (itp1 i1 i2 N1 N2) (not (< i2 N1)) (not (= (= i2 N1) (= i1 0)))) fail)) + +(query fail :print-certificate true) + diff --git a/bench_horn_multiple/s_seeds_06_m.smt2 b/bench_horn_multiple/s_seeds_06_m.smt2 new file mode 100644 index 000000000..cae2882fa --- /dev/null +++ b/bench_horn_multiple/s_seeds_06_m.smt2 @@ -0,0 +1,41 @@ +(declare-rel inv (Int Int Int)) +(declare-rel inv1 (Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) +(declare-var i Int) +(declare-var i1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x 0) (= y 0) (= i 0)) (inv x y i))) + +(rule (=> + (and + (inv x y i) + (= i1 (+ i 1)) + (= x1 (+ x i1)) + (= y1 (- y i1)) + ) + (inv x1 y1 i1) + ) +) + +(rule (=> (inv x y i) (inv1 x y i))) + +(rule (=> + (and + (inv1 x y i) + (= i1 (- i 1)) + (= x1 (+ x i1)) + (= y1 (- y i1)) + ) + (inv1 x1 y1 i1) + ) +) + +(rule (=> (and (inv1 x y i) (= 0 (- x (+ y (- 8 i 7)))) (not (= x (- y)))) fail)) + +(query fail) + diff --git a/bench_horn_multiple/s_seeds_09_m.smt2 b/bench_horn_multiple/s_seeds_09_m.smt2 new file mode 100644 index 000000000..1937a059c --- /dev/null +++ b/bench_horn_multiple/s_seeds_09_m.smt2 @@ -0,0 +1,40 @@ +(declare-rel itp (Int Int)) +(declare-rel itp1 (Int Int)) +(declare-var m Int) +(declare-var m1 Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var b Int) + +(declare-rel fail ()) + +(rule (=> (and (= m 20) (= i 0)) (itp m i))) + +(rule (=> + (and + (itp m i) + (> m i) + (= m1 (+ m 1)) + (= i1 (+ i 1)) + ) + (itp m1 i1) + ) +) + + +(rule (=> (and (itp m i) (= m1 (+ 20 m))) (itp1 m1 i))) + +(rule (=> + (and + (itp1 m i) + (> m i) + (= m1 (+ m 1)) + (= i1 (+ i 1)) + ) + (itp1 m1 i1) + ) +) + +(rule (=> (and (itp1 m i) (> i 80) (not (> m 120))) fail)) + +(query fail) diff --git a/bench_horn_multiple/s_seeds_11_m.smt2 b/bench_horn_multiple/s_seeds_11_m.smt2 new file mode 100644 index 000000000..ac754e794 --- /dev/null +++ b/bench_horn_multiple/s_seeds_11_m.smt2 @@ -0,0 +1,54 @@ +(declare-rel itp (Int Int)) +(declare-rel itp1 (Int Int)) +(declare-rel itp2 (Int Int)) +(declare-var m Int) +(declare-var m1 Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var b Int) + +(declare-rel fail ()) + +(rule (=> (and (= m 20) (= i 0)) (itp m i))) + +(rule (=> + (and + (itp m i) + (> m i) + (= m1 (+ m 1)) + (= i1 (+ i 1)) + ) + (itp m1 i1) + ) +) + + +(rule (=> (and (itp m i) (= m1 (+ 20 m))) (itp1 m1 i))) + +(rule (=> + (and + (itp1 m i) + (> m i) + (= m1 (+ m 1)) + (= i1 (+ i 1)) + ) + (itp1 m1 i1) + ) +) + +(rule (=> (and (itp1 m i) (= m1 (+ 20 m))) (itp2 m1 i))) + +(rule (=> + (and + (itp2 m i) + (> m i) + (= m1 (+ m 1)) + (= i1 (+ i 1)) + ) + (itp2 m1 i1) + ) +) + +(rule (=> (and (itp2 m i) (> i 80) (not (> m 140))) fail)) + +(query fail) diff --git a/bench_horn_multiple/samples_multiple_inv_13.smt2 b/bench_horn_multiple/samples_multiple_inv_13.smt2 index 5de412cf9..f70b940f0 100644 --- a/bench_horn_multiple/samples_multiple_inv_13.smt2 +++ b/bench_horn_multiple/samples_multiple_inv_13.smt2 @@ -14,7 +14,7 @@ (rule (=> (>= n 0) (PRE n n 0 0))) -(rule (=> (and (PRE n m i j) (> n 0) +(rule (=> (and (PRE n m i j) (not (= n 0)) (= n1 (- n 1)) (or (and (= i1 (+ i 1)) (= j1 j)) @@ -23,14 +23,11 @@ (rule (=> (and (PRE n m i j) (= n 0)) (POST1 m i j))) -;interestingly, with this precondition the task becomes almost trivial -;(rule (=> (= m (+ i j)) (POST1 m i j))) - -(rule (=> (and (POST1 m i j ) (> i 0) (= i1 (- i 1)) (= m1 (- m 1)) ) (POST1 m1 i1 j ))) +(rule (=> (and (POST1 m i j ) (not (= i 0)) (= i1 (- i 1)) (= m1 (- m 1)) ) (POST1 m1 i1 j ))) (rule (=> (and (POST1 m i j ) (= i 0)) (POST2 m i j ))) -(rule (=> (and (POST2 m i j ) (> j 0) (= j1 (- j 1)) (= m1 (- m 1)) ) (POST2 m1 i j1 ))) +(rule (=> (and (POST2 m i j ) (not (= j 0)) (= j1 (- j 1)) (= m1 (- m 1)) ) (POST2 m1 i j1 ))) (rule (=> (and (POST2 m i j ) (= j 0) (not (= m 0))) fail)) diff --git a/bench_horn_multiple/samples_multiple_inv_14.smt2 b/bench_horn_multiple/samples_multiple_inv_14.smt2 index 317fc2e4c..0fb71189c 100644 --- a/bench_horn_multiple/samples_multiple_inv_14.smt2 +++ b/bench_horn_multiple/samples_multiple_inv_14.smt2 @@ -19,7 +19,7 @@ (rule (=> (>= n 0) (PRE n n 0 0 0))) -(rule (=> (and (PRE n m i j k) (> n 0) +(rule (=> (and (PRE n m i j k) (not (= n 0)) (= n1 (- n 1)) (or (and (= i1 (+ i 1)) (= j1 j) (= k1 k)) @@ -29,15 +29,15 @@ (rule (=> (and (PRE n m i j k) (= n 0)) (POST1 m i j k))) -(rule (=> (and (POST1 m i j k) (> i 0) (= i1 (- i 1)) (= m1 (- m 1)) ) (POST1 m1 i1 j k))) +(rule (=> (and (POST1 m i j k) (not (= i 0)) (= i1 (- i 1)) (= m1 (- m 1)) ) (POST1 m1 i1 j k))) (rule (=> (and (POST1 m i j k) (= i 0)) (POST2 m i j k))) -(rule (=> (and (POST2 m i j k) (> j 0) (= j1 (- j 1)) (= m1 (- m 1)) ) (POST2 m1 i j1 k))) +(rule (=> (and (POST2 m i j k) (not (= j 0)) (= j1 (- j 1)) (= m1 (- m 1)) ) (POST2 m1 i j1 k))) (rule (=> (and (POST2 m i j k) (= j 0)) (POST3 m i j k))) -(rule (=> (and (POST3 m i j k) (> k 0) (= k1 (- j 1)) (= m1 (- m 1)) ) (POST3 m1 i j k1))) +(rule (=> (and (POST3 m i j k) (not (= k 0)) (= k1 (- j 1)) (= m1 (- m 1)) ) (POST3 m1 i j k1))) (rule (=> (and (POST3 m i j k) (= k 0) (not (= m 0))) fail)) diff --git a/bench_horn_multiple/samples_multiple_inv_20.smt2 b/bench_horn_multiple/samples_multiple_inv_20.smt2 new file mode 100644 index 000000000..a2dd578f1 --- /dev/null +++ b/bench_horn_multiple/samples_multiple_inv_20.smt2 @@ -0,0 +1,40 @@ +(declare-rel FUN (Int Int Int)) +(declare-rel SAD (Int Int Int Int)) +(declare-var c Int) +(declare-var c1 Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) +(declare-var N1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= c 0) (= i 0) (> N 0)) (FUN c i N))) + +(rule (=> + (and + (FUN c i N) + (< c N) + (= c1 (+ c 1)) + (= i1 (+ i 2)) + ) + (FUN c1 i1 N) + ) +) + +(rule (=> (and (FUN c i N) (>= c N) (= c1 0) (= i1 i) (> N1 (* 2 N))) (SAD c1 i1 N N1))) + +(rule (=> + (and + (SAD c i N N1) + (< c N1) + (= c1 (+ c 1)) + (= i1 (+ i 3)) + ) + (SAD c1 i1 N N1) + ) +) + +(rule (=> (and (SAD c i N N1) (>= c N1) (not (>= i (* 8 N)))) fail)) + +(query fail) diff --git a/bench_horn_multiple/samples_multiple_inv_21.smt2 b/bench_horn_multiple/samples_multiple_inv_21.smt2 new file mode 100644 index 000000000..c46ebbe38 --- /dev/null +++ b/bench_horn_multiple/samples_multiple_inv_21.smt2 @@ -0,0 +1,38 @@ +(declare-rel FUN (Int Int)) +(declare-rel SAD (Int Int)) +(declare-var k Int) +(declare-var k1 Int) +(declare-var j Int) +(declare-var j1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= k 0) (= j 0)) (FUN k j))) + +(rule (=> + (and + (FUN k j) + (= k1 (+ k 1)) + (= j1 (+ j k1)) + ) + (FUN k1 j1) + ) +) + +(rule (=> (and (FUN k j) (> k 0) (= k1 k) (= j1 (- j 1))) (SAD k1 j1))) + +(rule (=> + (and + (SAD k j) + (> j 0) + (= k1 (- k 1)) + (= j1 (- j k1)) + ) + (SAD k1 j1) + ) +) + +(rule (=> (and (SAD k j) (<= j 0) (not (> k 0))) fail)) + +(query fail) + diff --git a/bench_horn_multiple/samples_multiple_inv_22.smt2 b/bench_horn_multiple/samples_multiple_inv_22.smt2 new file mode 100644 index 000000000..11230a5ab --- /dev/null +++ b/bench_horn_multiple/samples_multiple_inv_22.smt2 @@ -0,0 +1,38 @@ +(declare-rel FUN (Int Int)) +(declare-rel SAD (Int Int)) +(declare-var k Int) +(declare-var k1 Int) +(declare-var j Int) +(declare-var j1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= k 0) (= j 0)) (FUN k j))) + +(rule (=> + (and + (FUN k j) + (= k1 (+ k 1)) + (= j1 (+ j k1)) + ) + (FUN k1 j1) + ) +) + +(rule (=> (and (FUN k j) (> k 0) (= k1 k) (= j1 (+ j 1))) (SAD k1 j1))) + +(rule (=> + (and + (SAD k j) + (> j 0) + (= k1 (- k 1)) + (= j1 (- j k1)) + ) + (SAD k1 j1) + ) +) + +(rule (=> (and (SAD k j) (<= j 0) (not (< k 0))) fail)) + +(query fail) + diff --git a/bench_horn_multiple/samples_multiple_inv_23.smt2 b/bench_horn_multiple/samples_multiple_inv_23.smt2 new file mode 100644 index 000000000..3a9fb0f72 --- /dev/null +++ b/bench_horn_multiple/samples_multiple_inv_23.smt2 @@ -0,0 +1,39 @@ +(declare-rel FUN (Int Int Int)) +(declare-rel SAD (Int Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) +(declare-var N Int) + +(declare-rel fail ()) + +(rule (=> (and (= i 0) (= j 0) (> N 0)) (FUN i j N))) + +(rule (=> + (and + (FUN i j N) + (< j N) + (= i1 (+ i 1)) + (= j1 (+ j 2)) + ) + (FUN i1 j1 N) + ) +) + +(rule (=> (and (FUN i j N) (>= j N) (= i1 i) (= j1 1)) (SAD i1 j1 N))) + +(rule (=> + (and + (SAD i j N) + (< j N) + (= i1 (+ i 1)) + (= j1 (+ j 2)) + ) + (SAD i1 j1 N) + ) +) + +(rule (=> (and (SAD i j N) (>= j N) (not (= i N))) fail)) + +(query fail) diff --git a/bench_horn_multiple/samples_multiple_inv_24.smt2 b/bench_horn_multiple/samples_multiple_inv_24.smt2 new file mode 100644 index 000000000..e37a7a700 --- /dev/null +++ b/bench_horn_multiple/samples_multiple_inv_24.smt2 @@ -0,0 +1,44 @@ +(declare-rel FUN (Int Int Int Int)) +(declare-rel SAD (Int Int Int Int)) +(declare-var k Int) +(declare-var k1 Int) +(declare-var j Int) +(declare-var j1 Int) +(declare-var f Int) +(declare-var f1 Int) +(declare-var N Int) +(declare-var N1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= k 0) (= j 0) (> N 0) (= N (+ (* 2 N1) 1))) (FUN k j 0 N))) + +(rule (=> + (and + (FUN k j f N) + (< k N) + (= k1 (+ k 1)) + (= f1 (ite (= f 0) 1 0)) + (= j1 (ite (= f 0) (+ j 1) j)) + ) + (FUN k1 j1 f1 N) + ) +) + +(rule (=> (and (FUN k j f N) (>= j N) (= k1 0) (= j1 j)) (SAD k1 j1 0 N))) + +(rule (=> + (and + (SAD k j f N) + (< k N) + (= k1 (+ k 1)) + (= f1 (ite (= f 0) 1 0)) + (= j1 (ite (= f 1) (+ j 1) j)) + ) + (SAD k1 j1 f1 N) + ) +) + +(rule (=> (and (SAD k j f N) (>= k N) (not (= N j))) fail)) + +(query fail) diff --git a/bench_horn_multiple/samples_multiple_inv_25.smt2 b/bench_horn_multiple/samples_multiple_inv_25.smt2 new file mode 100644 index 000000000..7265a1223 --- /dev/null +++ b/bench_horn_multiple/samples_multiple_inv_25.smt2 @@ -0,0 +1,44 @@ +(declare-rel inv1 (Int Int Int Int)) +(declare-rel inv2 (Int Int Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) + +; similar to s_mutants_06_m.smt2 but "slightly" more challenging + +(declare-rel fail ()) + +(rule (=> (and (= x 0) (= y 0) (= i 0) (= j 0)) (inv1 x y i j))) + +(rule (=> + (and + (inv1 x y i j) + (= i1 (+ i 1)) + (= x1 (+ x i1)) + (= y1 (- y i1)) + ) + (inv1 x1 y1 i1 j) + ) +) + +(rule (=> (inv1 x y i j) (inv2 x y i j))) + +(rule (=> + (and + (inv2 x y i j) + (= j1 (+ j 1)) + (= x1 (- x j1)) + (= y1 (+ y j1)) + ) + (inv2 x1 y1 i j1) + ) +) + +(rule (=> (and (inv2 x y i j) (> i j) (not (> x y))) fail)) + +(query fail) diff --git a/bench_horn_multiple/sn_1024_m.smt2 b/bench_horn_multiple/sn_1024_m.smt2 new file mode 100644 index 000000000..c9dc2fbc3 --- /dev/null +++ b/bench_horn_multiple/sn_1024_m.smt2 @@ -0,0 +1,1069 @@ +(declare-rel itp (Int)) +(declare-rel itp2 (Int)) +(declare-var x Int) +(declare-var x1 Int) + +(declare-rel fail ()) + +(rule (=> + (or + (= x 1) + (= x 2) + (= x 3) + (= x 4) + (= x 5) + (= x 6) + (= x 7) + (= x 8) + (= x 9) + (= x 10) + (= x 11) + (= x 12) + (= x 13) + (= x 14) + (= x 15) + (= x 16) + (= x 17) + (= x 18) + (= x 19) + (= x 20) + (= x 21) + (= x 22) + (= x 23) + (= x 24) + (= x 25) + (= x 26) + (= x 27) + (= x 28) + (= x 29) + (= x 30) + (= x 31) + (= x 32) + (= x 33) + (= x 34) + (= x 35) + (= x 36) + (= x 37) + (= x 38) + (= x 39) + (= x 40) + (= x 41) + (= x 42) + (= x 43) + (= x 44) + (= x 45) + (= x 46) + (= x 47) + (= x 48) + (= x 49) + (= x 50) + (= x 51) + (= x 52) + (= x 53) + (= x 54) + (= x 55) + (= x 56) + (= x 57) + (= x 58) + (= x 59) + (= x 60) + (= x 61) + (= x 62) + (= x 63) + (= x 64) + (= x 65) + (= x 66) + (= x 67) + (= x 68) + (= x 69) + (= x 70) + (= x 71) + (= x 72) + (= x 73) + (= x 74) + (= x 75) + (= x 76) + (= x 77) + (= x 78) + (= x 79) + (= x 80) + (= x 81) + (= x 82) + (= x 83) + (= x 84) + (= x 85) + (= x 86) + (= x 87) + (= x 88) + (= x 89) + (= x 90) + (= x 91) + (= x 92) + (= x 93) + (= x 94) + (= x 95) + (= x 96) + (= x 97) + (= x 98) + (= x 99) + (= x 100) + (= x 101) + (= x 102) + (= x 103) + (= x 104) + (= x 105) + (= x 106) + (= x 107) + (= x 108) + (= x 109) + (= x 110) + (= x 111) + (= x 112) + (= x 113) + (= x 114) + (= x 115) + (= x 116) + (= x 117) + (= x 118) + (= x 119) + (= x 120) + (= x 121) + (= x 122) + (= x 123) + (= x 124) + (= x 125) + (= x 126) + (= x 127) + (= x 128) + (= x 129) + (= x 130) + (= x 131) + (= x 132) + (= x 133) + (= x 134) + (= x 135) + (= x 136) + (= x 137) + (= x 138) + (= x 139) + (= x 140) + (= x 141) + (= x 142) + (= x 143) + (= x 144) + (= x 145) + (= x 146) + (= x 147) + (= x 148) + (= x 149) + (= x 150) + (= x 151) + (= x 152) + (= x 153) + (= x 154) + (= x 155) + (= x 156) + (= x 157) + (= x 158) + (= x 159) + (= x 160) + (= x 161) + (= x 162) + (= x 163) + (= x 164) + (= x 165) + (= x 166) + (= x 167) + (= x 168) + (= x 169) + (= x 170) + (= x 171) + (= x 172) + (= x 173) + (= x 174) + (= x 175) + (= x 176) + (= x 177) + (= x 178) + (= x 179) + (= x 180) + (= x 181) + (= x 182) + (= x 183) + (= x 184) + (= x 185) + (= x 186) + (= x 187) + (= x 188) + (= x 189) + (= x 190) + (= x 191) + (= x 192) + (= x 193) + (= x 194) + (= x 195) + (= x 196) + (= x 197) + (= x 198) + (= x 199) + (= x 200) + (= x 201) + (= x 202) + (= x 203) + (= x 204) + (= x 205) + (= x 206) + (= x 207) + (= x 208) + (= x 209) + (= x 210) + (= x 211) + (= x 212) + (= x 213) + (= x 214) + (= x 215) + (= x 216) + (= x 217) + (= x 218) + (= x 219) + (= x 220) + (= x 221) + (= x 222) + (= x 223) + (= x 224) + (= x 225) + (= x 226) + (= x 227) + (= x 228) + (= x 229) + (= x 230) + (= x 231) + (= x 232) + (= x 233) + (= x 234) + (= x 235) + (= x 236) + (= x 237) + (= x 238) + (= x 239) + (= x 240) + (= x 241) + (= x 242) + (= x 243) + (= x 244) + (= x 245) + (= x 246) + (= x 247) + (= x 248) + (= x 249) + (= x 250) + (= x 251) + (= x 252) + (= x 253) + (= x 254) + (= x 255) + (= x 256) + (= x 257) + (= x 258) + (= x 259) + (= x 260) + (= x 261) + (= x 262) + (= x 263) + (= x 264) + (= x 265) + (= x 266) + (= x 267) + (= x 268) + (= x 269) + (= x 270) + (= x 271) + (= x 272) + (= x 273) + (= x 274) + (= x 275) + (= x 276) + (= x 277) + (= x 278) + (= x 279) + (= x 280) + (= x 281) + (= x 282) + (= x 283) + (= x 284) + (= x 285) + (= x 286) + (= x 287) + (= x 288) + (= x 289) + (= x 290) + (= x 291) + (= x 292) + (= x 293) + (= x 294) + (= x 295) + (= x 296) + (= x 297) + (= x 298) + (= x 299) + (= x 300) + (= x 301) + (= x 302) + (= x 303) + (= x 304) + (= x 305) + (= x 306) + (= x 307) + (= x 308) + (= x 309) + (= x 310) + (= x 311) + (= x 312) + (= x 313) + (= x 314) + (= x 315) + (= x 316) + (= x 317) + (= x 318) + (= x 319) + (= x 320) + (= x 321) + (= x 322) + (= x 323) + (= x 324) + (= x 325) + (= x 326) + (= x 327) + (= x 328) + (= x 329) + (= x 330) + (= x 331) + (= x 332) + (= x 333) + (= x 334) + (= x 335) + (= x 336) + (= x 337) + (= x 338) + (= x 339) + (= x 340) + (= x 341) + (= x 342) + (= x 343) + (= x 344) + (= x 345) + (= x 346) + (= x 347) + (= x 348) + (= x 349) + (= x 350) + (= x 351) + (= x 352) + (= x 353) + (= x 354) + (= x 355) + (= x 356) + (= x 357) + (= x 358) + (= x 359) + (= x 360) + (= x 361) + (= x 362) + (= x 363) + (= x 364) + (= x 365) + (= x 366) + (= x 367) + (= x 368) + (= x 369) + (= x 370) + (= x 371) + (= x 372) + (= x 373) + (= x 374) + (= x 375) + (= x 376) + (= x 377) + (= x 378) + (= x 379) + (= x 380) + (= x 381) + (= x 382) + (= x 383) + (= x 384) + (= x 385) + (= x 386) + (= x 387) + (= x 388) + (= x 389) + (= x 390) + (= x 391) + (= x 392) + (= x 393) + (= x 394) + (= x 395) + (= x 396) + (= x 397) + (= x 398) + (= x 399) + (= x 400) + (= x 401) + (= x 402) + (= x 403) + (= x 404) + (= x 405) + (= x 406) + (= x 407) + (= x 408) + (= x 409) + (= x 410) + (= x 411) + (= x 412) + (= x 413) + (= x 414) + (= x 415) + (= x 416) + (= x 417) + (= x 418) + (= x 419) + (= x 420) + (= x 421) + (= x 422) + (= x 423) + (= x 424) + (= x 425) + (= x 426) + (= x 427) + (= x 428) + (= x 429) + (= x 430) + (= x 431) + (= x 432) + (= x 433) + (= x 434) + (= x 435) + (= x 436) + (= x 437) + (= x 438) + (= x 439) + (= x 440) + (= x 441) + (= x 442) + (= x 443) + (= x 444) + (= x 445) + (= x 446) + (= x 447) + (= x 448) + (= x 449) + (= x 450) + (= x 451) + (= x 452) + (= x 453) + (= x 454) + (= x 455) + (= x 456) + (= x 457) + (= x 458) + (= x 459) + (= x 460) + (= x 461) + (= x 462) + (= x 463) + (= x 464) + (= x 465) + (= x 466) + (= x 467) + (= x 468) + (= x 469) + (= x 470) + (= x 471) + (= x 472) + (= x 473) + (= x 474) + (= x 475) + (= x 476) + (= x 477) + (= x 478) + (= x 479) + (= x 480) + (= x 481) + (= x 482) + (= x 483) + (= x 484) + (= x 485) + (= x 486) + (= x 487) + (= x 488) + (= x 489) + (= x 490) + (= x 491) + (= x 492) + (= x 493) + (= x 494) + (= x 495) + (= x 496) + (= x 497) + (= x 498) + (= x 499) + (= x 500) + (= x 501) + (= x 502) + (= x 503) + (= x 504) + (= x 505) + (= x 506) + (= x 507) + (= x 508) + (= x 509) + (= x 510) + (= x 511) + (= x 512) + ) + (itp x))) + +(rule (=> + (and + (itp x) + (= x1 (+ x 1)) + ) + (itp x1) + ) +) + +(rule (=> (and + (itp x) + (or + (= x 513) + (= x 514) + (= x 515) + (= x 516) + (= x 517) + (= x 518) + (= x 519) + (= x 520) + (= x 521) + (= x 522) + (= x 523) + (= x 524) + (= x 525) + (= x 526) + (= x 527) + (= x 528) + (= x 529) + (= x 530) + (= x 531) + (= x 532) + (= x 533) + (= x 534) + (= x 535) + (= x 536) + (= x 537) + (= x 538) + (= x 539) + (= x 540) + (= x 541) + (= x 542) + (= x 543) + (= x 544) + (= x 545) + (= x 546) + (= x 547) + (= x 548) + (= x 549) + (= x 550) + (= x 551) + (= x 552) + (= x 553) + (= x 554) + (= x 555) + (= x 556) + (= x 557) + (= x 558) + (= x 559) + (= x 560) + (= x 561) + (= x 562) + (= x 563) + (= x 564) + (= x 565) + (= x 566) + (= x 567) + (= x 568) + (= x 569) + (= x 570) + (= x 571) + (= x 572) + (= x 573) + (= x 574) + (= x 575) + (= x 576) + (= x 577) + (= x 578) + (= x 579) + (= x 580) + (= x 581) + (= x 582) + (= x 583) + (= x 584) + (= x 585) + (= x 586) + (= x 587) + (= x 588) + (= x 589) + (= x 590) + (= x 591) + (= x 592) + (= x 593) + (= x 594) + (= x 595) + (= x 596) + (= x 597) + (= x 598) + (= x 599) + (= x 600) + (= x 601) + (= x 602) + (= x 603) + (= x 604) + (= x 605) + (= x 606) + (= x 607) + (= x 608) + (= x 609) + (= x 610) + (= x 611) + (= x 612) + (= x 613) + (= x 614) + (= x 615) + (= x 616) + (= x 617) + (= x 618) + (= x 619) + (= x 620) + (= x 621) + (= x 622) + (= x 623) + (= x 624) + (= x 625) + (= x 626) + (= x 627) + (= x 628) + (= x 629) + (= x 630) + (= x 631) + (= x 632) + (= x 633) + (= x 634) + (= x 635) + (= x 636) + (= x 637) + (= x 638) + (= x 639) + (= x 640) + (= x 641) + (= x 642) + (= x 643) + (= x 644) + (= x 645) + (= x 646) + (= x 647) + (= x 648) + (= x 649) + (= x 650) + (= x 651) + (= x 652) + (= x 653) + (= x 654) + (= x 655) + (= x 656) + (= x 657) + (= x 658) + (= x 659) + (= x 660) + (= x 661) + (= x 662) + (= x 663) + (= x 664) + (= x 665) + (= x 666) + (= x 667) + (= x 668) + (= x 669) + (= x 670) + (= x 671) + (= x 672) + (= x 673) + (= x 674) + (= x 675) + (= x 676) + (= x 677) + (= x 678) + (= x 679) + (= x 680) + (= x 681) + (= x 682) + (= x 683) + (= x 684) + (= x 685) + (= x 686) + (= x 687) + (= x 688) + (= x 689) + (= x 690) + (= x 691) + (= x 692) + (= x 693) + (= x 694) + (= x 695) + (= x 696) + (= x 697) + (= x 698) + (= x 699) + (= x 700) + (= x 701) + (= x 702) + (= x 703) + (= x 704) + (= x 705) + (= x 706) + (= x 707) + (= x 708) + (= x 709) + (= x 710) + (= x 711) + (= x 712) + (= x 713) + (= x 714) + (= x 715) + (= x 716) + (= x 717) + (= x 718) + (= x 719) + (= x 720) + (= x 721) + (= x 722) + (= x 723) + (= x 724) + (= x 725) + (= x 726) + (= x 727) + (= x 728) + (= x 729) + (= x 730) + (= x 731) + (= x 732) + (= x 733) + (= x 734) + (= x 735) + (= x 736) + (= x 737) + (= x 738) + (= x 739) + (= x 740) + (= x 741) + (= x 742) + (= x 743) + (= x 744) + (= x 745) + (= x 746) + (= x 747) + (= x 748) + (= x 749) + (= x 750) + (= x 751) + (= x 752) + (= x 753) + (= x 754) + (= x 755) + (= x 756) + (= x 757) + (= x 758) + (= x 759) + (= x 760) + (= x 761) + (= x 762) + (= x 763) + (= x 764) + (= x 765) + (= x 766) + (= x 767) + (= x 768) + (= x 769) + (= x 770) + (= x 771) + (= x 772) + (= x 773) + (= x 774) + (= x 775) + (= x 776) + (= x 777) + (= x 778) + (= x 779) + (= x 780) + (= x 781) + (= x 782) + (= x 783) + (= x 784) + (= x 785) + (= x 786) + (= x 787) + (= x 788) + (= x 789) + (= x 790) + (= x 791) + (= x 792) + (= x 793) + (= x 794) + (= x 795) + (= x 796) + (= x 797) + (= x 798) + (= x 799) + (= x 800) + (= x 801) + (= x 802) + (= x 803) + (= x 804) + (= x 805) + (= x 806) + (= x 807) + (= x 808) + (= x 809) + (= x 810) + (= x 811) + (= x 812) + (= x 813) + (= x 814) + (= x 815) + (= x 816) + (= x 817) + (= x 818) + (= x 819) + (= x 820) + (= x 821) + (= x 822) + (= x 823) + (= x 824) + (= x 825) + (= x 826) + (= x 827) + (= x 828) + (= x 829) + (= x 830) + (= x 831) + (= x 832) + (= x 833) + (= x 834) + (= x 835) + (= x 836) + (= x 837) + (= x 838) + (= x 839) + (= x 840) + (= x 841) + (= x 842) + (= x 843) + (= x 844) + (= x 845) + (= x 846) + (= x 847) + (= x 848) + (= x 849) + (= x 850) + (= x 851) + (= x 852) + (= x 853) + (= x 854) + (= x 855) + (= x 856) + (= x 857) + (= x 858) + (= x 859) + (= x 860) + (= x 861) + (= x 862) + (= x 863) + (= x 864) + (= x 865) + (= x 866) + (= x 867) + (= x 868) + (= x 869) + (= x 870) + (= x 871) + (= x 872) + (= x 873) + (= x 874) + (= x 875) + (= x 876) + (= x 877) + (= x 878) + (= x 879) + (= x 880) + (= x 881) + (= x 882) + (= x 883) + (= x 884) + (= x 885) + (= x 886) + (= x 887) + (= x 888) + (= x 889) + (= x 890) + (= x 891) + (= x 892) + (= x 893) + (= x 894) + (= x 895) + (= x 896) + (= x 897) + (= x 898) + (= x 899) + (= x 900) + (= x 901) + (= x 902) + (= x 903) + (= x 904) + (= x 905) + (= x 906) + (= x 907) + (= x 908) + (= x 909) + (= x 910) + (= x 911) + (= x 912) + (= x 913) + (= x 914) + (= x 915) + (= x 916) + (= x 917) + (= x 918) + (= x 919) + (= x 920) + (= x 921) + (= x 922) + (= x 923) + (= x 924) + (= x 925) + (= x 926) + (= x 927) + (= x 928) + (= x 929) + (= x 930) + (= x 931) + (= x 932) + (= x 933) + (= x 934) + (= x 935) + (= x 936) + (= x 937) + (= x 938) + (= x 939) + (= x 940) + (= x 941) + (= x 942) + (= x 943) + (= x 944) + (= x 945) + (= x 946) + (= x 947) + (= x 948) + (= x 949) + (= x 950) + (= x 951) + (= x 952) + (= x 953) + (= x 954) + (= x 955) + (= x 956) + (= x 957) + (= x 958) + (= x 959) + (= x 960) + (= x 961) + (= x 962) + (= x 963) + (= x 964) + (= x 965) + (= x 966) + (= x 967) + (= x 968) + (= x 969) + (= x 970) + (= x 971) + (= x 972) + (= x 973) + (= x 974) + (= x 975) + (= x 976) + (= x 977) + (= x 978) + (= x 979) + (= x 980) + (= x 981) + (= x 982) + (= x 983) + (= x 984) + (= x 985) + (= x 986) + (= x 987) + (= x 988) + (= x 989) + (= x 990) + (= x 991) + (= x 992) + (= x 993) + (= x 994) + (= x 995) + (= x 996) + (= x 997) + (= x 998) + (= x 999) + (= x 1000) + (= x 1001) + (= x 1002) + (= x 1003) + (= x 1004) + (= x 1005) + (= x 1006) + (= x 1007) + (= x 1008) + (= x 1009) + (= x 1010) + (= x 1011) + (= x 1012) + (= x 1013) + (= x 1014) + (= x 1015) + (= x 1016) + (= x 1017) + (= x 1018) + (= x 1019) + (= x 1020) + (= x 1021) + (= x 1022) + (= x 1023) + (= x 1024) + )) + (itp2 x)) +) + +(rule (=> + (and + (itp2 x) + (= x1 (+ x 1)) + ) + (itp2 x1) + ) +) + + +(rule (=> (and (itp2 x) + (not (> x 0) + )) fail)) + + +(query fail) + diff --git a/bench_horn_multiple/trex3_m.smt2 b/bench_horn_multiple/trex3_m.smt2 new file mode 100644 index 000000000..87723245d --- /dev/null +++ b/bench_horn_multiple/trex3_m.smt2 @@ -0,0 +1,49 @@ +(declare-rel FUN (Int Int Int Int Int Int Int Int)) +(declare-rel SAD (Int Int Int Int Int Int Int Int Int)) +(declare-var x1 Int) +(declare-var x2 Int) +(declare-var x3 Int) +(declare-var x4 Int) +(declare-var x5 Int) +(declare-var x6 Int) +(declare-var d1 Int) +(declare-var d2 Int) +(declare-var d3 Int) +(declare-var c1 Int) +(declare-var c2 Int) +(declare-var c3 Int) +(declare-var c4 Int) +(declare-var f1 Int) +(declare-var f2 Int) + +(declare-rel fail ()) + +(rule (=> (and (= d1 1) (= d2 1) (= d3 1)) (FUN x1 x2 x3 d1 d2 d3 c1 c2))) + +(rule (=> (and (FUN x1 x2 x3 d1 d2 d3 c1 c2) + (= x4 (+ x2 22424)) (= x5 (+ x3 7265)) (= x6 (+ x1 94622))) + (SAD x4 x5 x6 d1 d2 d3 c1 c2 0))) + +(rule (=> + (and + (SAD x1 x2 x3 d1 d2 d3 c1 c2 f1) + (> x1 0) + (> x2 0) + (> x3 0) + (= x4 (ite (= c1 1) (- x1 d1) x1)) + (= x5 (ite (and (not (= c1 1)) (= c2 1)) (- x2 d2) x2)) + (= x6 (ite (and (not (= c1 1)) (not (= c2 1))) (- x3 d3) x3)) + ) + (SAD x4 x5 x6 d1 d2 d3 c3 c4 1) + ) +) + +(rule (=> (and (SAD x1 x2 x3 d1 d2 d3 c1 c2 f1) + (= f1 0) (not (and (> x1 0) (> x2 0) (> x3 0)))) + (FUN x1 x2 x3 d1 d2 d3 c1 c2))) + +(rule (=> (and (SAD x1 x2 x3 d1 d2 d3 c1 c2 f1) + (= f1 1) (not (and (> x1 0) (> x2 0) (> x3 0))) + (not (or (= x1 0) (= x2 0) (= x3 0)))) fail)) + +(query fail) diff --git a/bench_horn_multiple/yz_plus_minus_3.smt2 b/bench_horn_multiple/yz_plus_minus_3.smt2 new file mode 100644 index 000000000..c51d2d489 --- /dev/null +++ b/bench_horn_multiple/yz_plus_minus_3.smt2 @@ -0,0 +1,35 @@ +(declare-rel inv1 (Int Int Int Int)) +(declare-rel inv2 (Int Int Int Int)) +(declare-var x Int) +(declare-var y Int) +(declare-var z Int) +(declare-var w Int) +(declare-var x1 Int) +(declare-var y1 Int) +(declare-var z1 Int) +(declare-var w1 Int) + +(declare-rel err ()) + +(rule (inv1 0 0 0 0)) + +(rule (=> (inv1 x y z w) (inv2 x y z w))) + +(rule (=> + (and + (inv2 x y z w) + (< x 1000) + (= x1 (+ x w)) + (= y1 (+ z 1)) + (= z1 (- w 1)) + (= w1 (+ y 1)) + ) + (inv2 x1 y1 z1 w1) + ) +) + +(rule (=> (inv2 x y z w) (inv1 x y z w))) + +(rule (=> (and (inv2 x y z w) (not (>= x 0))) err)) + +(query err) diff --git a/bench_horn_multiple/yz_plus_minus_4.smt2 b/bench_horn_multiple/yz_plus_minus_4.smt2 new file mode 100644 index 000000000..cee3025e6 --- /dev/null +++ b/bench_horn_multiple/yz_plus_minus_4.smt2 @@ -0,0 +1,32 @@ +(declare-rel inv1 (Int Int Int)) +(declare-rel inv2 (Int Int Int)) +(declare-var x Int) +(declare-var y Int) +(declare-var z Int) +(declare-var x1 Int) +(declare-var y1 Int) +(declare-var z1 Int) + +(declare-rel err ()) + +(rule (inv1 0 0 0)) + +(rule (=> (inv1 x y z) (inv2 x y z))) + +(rule (=> + (and + (inv2 x y z) + (< x 100) + (= x1 (+ x y)) + (= y1 (+ z 1)) + (= z1 (- y 1)) + ) + (inv2 x1 y1 z1) + ) +) + +(rule (=> (inv2 x y z) (inv1 x y z))) + +(rule (=> (and (inv1 x y z) (not (>= x 0))) err)) + +(query err) From c6b8848749cd41f328151be6c8458f166c3c72b5 Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Thu, 31 May 2018 10:45:31 -0400 Subject: [PATCH 110/236] more careful handling of Z3 bugs --- include/deep/RndLearnerV2.hpp | 20 +++++++++----- include/deep/RndLearnerV3.hpp | 51 ++++++++++++++++++++--------------- include/ufo/Smt/Z3n.hpp | 3 ++- 3 files changed, 46 insertions(+), 28 deletions(-) diff --git a/include/deep/RndLearnerV2.hpp b/include/deep/RndLearnerV2.hpp index 0391e0b73..4e4ff5f55 100644 --- a/include/deep/RndLearnerV2.hpp +++ b/include/deep/RndLearnerV2.hpp @@ -30,13 +30,21 @@ namespace ufo { ExprVector eqs; ZSolver::Model m = m_smt_solver.getModel(); - for (auto & v : vars) if (v != m.eval(v)) + for (auto & v : vars) { - eqs.push_back(mk(v, m.eval(v))); - } - else - { - eqs.push_back(mk(v, mkTerm (mpz_class (guessUniformly (1000)-500), m_efac))); + Expr e = m.eval(v); + if (e == NULL) + { + return NULL; + } + else if (e != v) + { + eqs.push_back(mk(v, e)); + } + else + { + eqs.push_back(mk(v, mkTerm (mpz_class (guessUniformly (1000)-500), m_efac))); + } } return conjoin (eqs, m_efac); } diff --git a/include/deep/RndLearnerV3.hpp b/include/deep/RndLearnerV3.hpp index dfbb7a30b..b813f341a 100644 --- a/include/deep/RndLearnerV3.hpp +++ b/include/deep/RndLearnerV3.hpp @@ -322,32 +322,41 @@ namespace ufo bool res2 = true; int ind = getVarIndex(hr.dstRelation, decls); Expr model = getModel(hr.dstVars); - ExprVector& ev = candidatesTmp[ind]; - - ExprVector invVars; - for (auto & a : invarVars[ind]) invVars.push_back(a.second); - SamplFactory& sf = sfs[ind].back(); - - for (auto it = ev.begin(); it != ev.end(); ) + if (model == NULL) { - Expr repl = *it; - for (auto & v : invarVars[ind]) repl = replaceAll(repl, v.second, hr.dstVars[v.first]); + // something went wrong with z3. do aggressive weakening (TODO: try bruteforce): + candidatesTmp[ind].clear(); + res2 = false; + } + else + { + ExprVector& ev = candidatesTmp[ind]; + + ExprVector invVars; + for (auto & a : invarVars[ind]) invVars.push_back(a.second); + SamplFactory& sf = sfs[ind].back(); - if (!u.isSat(model, repl)) + for (auto it = ev.begin(); it != ev.end(); ) { - if (hr.isFact) + Expr repl = *it; + for (auto & v : invarVars[ind]) repl = replaceAll(repl, v.second, hr.dstVars[v.first]); + + if (!u.isSat(model, repl)) { - Expr failedCand = normalizeDisj(*it, invVars); + if (hr.isFact) + { + Expr failedCand = normalizeDisj(*it, invVars); // outs () << "failed cand for " << *hr.dstRelation << ": " << *failedCand << "\n"; - Sampl& s = sf.exprToSampl(failedCand); - sf.assignPrioritiesForFailed(); + Sampl& s = sf.exprToSampl(failedCand); + sf.assignPrioritiesForFailed(); + } + it = ev.erase(it); + res2 = false; + } + else + { + ++it; } - it = ev.erase(it); - res2 = false; - } - else - { - ++it; } } @@ -531,7 +540,7 @@ namespace ufo map cands; for (auto& dcl: ruleManager.decls) ds.initializeDecl(dcl); - + if (enableDataLearning) { #ifdef HAVE_ARMADILLO ds.getDataCandidates(cands, behaviorfiles); diff --git a/include/ufo/Smt/Z3n.hpp b/include/ufo/Smt/Z3n.hpp index 73efa07f1..53298f276 100644 --- a/include/ufo/Smt/Z3n.hpp +++ b/include/ufo/Smt/Z3n.hpp @@ -462,7 +462,8 @@ namespace ufo Expr eval (Expr e, bool completion = false) { - assert (model); + if (!model) return NULL; + z3::ast ast (z3.toAst (e)); Z3_ast raw_val = NULL; From 40d22ec3290f2385c2f9b8a2a030ee55df5c46b5 Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Fri, 1 Jun 2018 16:36:47 -0400 Subject: [PATCH 111/236] updated the help message; made --v3 default --- tools/deep/DeepHorn.cpp | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/tools/deep/DeepHorn.cpp b/tools/deep/DeepHorn.cpp index a597d0c30..8ba074986 100644 --- a/tools/deep/DeepHorn.cpp +++ b/tools/deep/DeepHorn.cpp @@ -75,26 +75,25 @@ int main (int argc, char ** argv) " freqhorn [options] discover invariants for a system of constrained Horn clauses\n" << " (`file.smt2` in a datalog format extending SMT-LIB2)\n" << "Options:\n" << - " " << OPT_V1 << " original version (just one-by-one sampling)\n" - " " << OPT_V2 << " (default) revised version (all-at once bootstrapping and sampling)\n\n" - " " << OPT_V3 << " Multi-loop version (in progress)\n\n" + " " << OPT_V1 << " original version (one-by-one sampling)\n" + " " << OPT_V2 << " optimized version for transition systems (+ bootstrapping)\n" + " " << OPT_V3 << " (default) optimized version (+ bootstrapping, propagation, and data candidates)\n\n" + " " << OPT_GET_FREQS << " calculate frequency distributions and sample from them\n" << + " " << OPT_AGG_PRUNING << " prioritize and prune the search space aggressively\n" << + " (if not specified, sample from uniform distributions)\n" << " " << OPT_MAX_ATTEMPTS << " maximal number of candidates to sample and check\n" << - " " << OPT_OUT_FILE << " serialize invariants to `file.smt2`\n" << - " " << OPT_GET_FREQS << " calculate frequency distributions and sample from them\n\n" << + " " << OPT_OUT_FILE << " serialize invariants to `file.smt2`\n\n" << "V1 options only:\n" << " " << OPT_ADD_EPSILON << " add small probabilities to features that never happen in the code\n" << - " " << OPT_AGG_PRUNING << " prioritize and prune the search space aggressively\n" << - " (if not specified, sample from uniform distributions)\n" << " " << OPT_K_IND << " run k-induction after each learned lemma\n\n" << "V2 options only:\n" << - " " << OPT_AGG_PRUNING << " prioritize and prune the search space aggressively\n" << " " << OPT_ITP << " bound for itp-based proofs\n" << " " << OPT_BATCH << " threshold for how many candidates to check at once\n" << - " " << OPT_RETRY << " threshold for how many lemmas to wait before giving failures a second chance\n" << - " " << OPT_DATA_LEARNING << " bootstrap candidates from behaviors\n" << - " " << OPT_DATA_INPUT << " name of the file which contains behaviors; can be specified multiple times for each invariant \n"; - - + " " << OPT_RETRY << " threshold for how many lemmas to wait before giving failures a second chance\n\n" << + "V3 options only:\n" << + " " << OPT_DATA_LEARNING << " bootstrap candidates from behaviors\n" << + " " << OPT_DATA_INPUT << " name of the file which contains behaviors; can be specified multiple times for each invariant \n"; + return 0; } @@ -107,7 +106,7 @@ int main (int argc, char ** argv) return 0; } - if (!vers1 && !vers2 && !vers3) vers2 = true; // default + if (!vers1 && !vers2 && !vers3) vers3 = true; // default int maxAttempts = getIntValue(OPT_MAX_ATTEMPTS, 2000000, argc, argv); bool kinduction = getBoolValue(OPT_K_IND, false, argc, argv); From a58a175bb79855cb35fb645fb07e185c32e1ae11 Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Thu, 14 Jun 2018 11:48:22 +0800 Subject: [PATCH 112/236] identifying and solving non-recursive systems (using BMC) --- include/deep/Horn.hpp | 59 +++++++++++++++++++++++++++++++++-- include/deep/RndLearnerV3.hpp | 12 +++++++ 2 files changed, 69 insertions(+), 2 deletions(-) diff --git a/include/deep/Horn.hpp b/include/deep/Horn.hpp index 63a90dca4..c645b35ab 100755 --- a/include/deep/Horn.hpp +++ b/include/deep/Horn.hpp @@ -93,6 +93,9 @@ namespace ufo class CHCs { + private: + set indeces; + public: ExprFactory &m_efac; @@ -105,6 +108,7 @@ namespace ufo ExprSet decls; map invVars; map> outgs; + bool noInductiveRules = false; CHCs(ExprFactory &efac, EZ3 &z3) : m_efac(efac), m_z3(z3) {}; @@ -247,8 +251,6 @@ namespace ufo simplBoolReplCnj(allOrigSymbs, lin); hr.body = conjoin(lin, m_efac); - outgs[hr.srcRelation].push_back(chcs.size()-1); - hr.assignVarsAndRewrite (origSrcSymbs, invVars[hr.srcRelation], origDstSymbs, invVars[hr.dstRelation]); @@ -273,9 +275,53 @@ namespace ufo } } + // remove useless rules + chcSlice(failDecl); + vector tmpChcs; + for (auto i : indeces) tmpChcs.push_back(chcs[i]); + chcs = tmpChcs; + for (int i = 0; i < chcs.size(); i++) + outgs[chcs[i].srcRelation].push_back(i); + + // sort rules wtoSort(); } + void chcSlice (Expr dstRel) + { + for (int i = 0; i < chcs.size(); i++) + { + if (chcs[i].dstRelation == dstRel) + { + bool alreadyIn = find(indeces.begin(), indeces.end(), i) != indeces.end(); + indeces.insert(i); + if (!chcs[i].isInductive && !alreadyIn) + chcSlice(chcs[i].srcRelation); + } + } + } + + bool hasCycles() + { + if (!noInductiveRules) return true; + return hasCycles(mk(m_efac), ExprVector()); + } + + bool hasCycles(Expr srcRel, ExprVector ev) + { + for (auto & chc : ev) + if (chc == srcRel) + return true; + + ev.push_back(srcRel); + bool res = false; + for (auto & i : outgs[srcRel]) + { + res = res || hasCycles(chcs[i].dstRelation, ev); + } + return res; + } + void addRule (HornRuleExt* r) { chcs.push_back(*r); @@ -335,12 +381,20 @@ namespace ufo int r1 = 0; for (auto & hr : chcs) + { if (hr.isInductive) { wtoDecls.push_back(hr.srcRelation); wtoCHCs.push_back(&hr); } + } + int r2 = wtoDecls.size(); + if (r2 == 0) + { + noInductiveRules = true; + return; + } while (r1 != r2) { @@ -366,6 +420,7 @@ namespace ufo r1 = r2; r2 = wtoDecls.size(); } + assert(wtoCHCs.size() == chcs.size()); // filter wtoDecls diff --git a/include/deep/RndLearnerV3.hpp b/include/deep/RndLearnerV3.hpp index b813f341a..c11e34322 100644 --- a/include/deep/RndLearnerV3.hpp +++ b/include/deep/RndLearnerV3.hpp @@ -529,6 +529,18 @@ namespace ufo CHCs ruleManager(m_efac, z3); ruleManager.parse(smt); + if (!ruleManager.hasCycles()) + { + BndExpl bnd(ruleManager); + bnd.exploreTraces(1, ruleManager.chcs.size(), true); + return; + } + else if (ruleManager.noInductiveRules) + { + outs () << "Mutual recursion unsupported\n"; + return; + } + RndLearnerV3 ds(m_efac, z3, ruleManager, freqs, aggp); if (ruleManager.decls.size() == 1) From 3d9f00ab0ff4fe241bc6217cb743dbbcf4ba9d93 Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Sun, 17 Jun 2018 12:10:45 +0800 Subject: [PATCH 113/236] support for pure smtlib2 inputs --- include/deep/Horn.hpp | 20 ++++++++++++++++++-- include/ufo/Smt/Z3n.hpp | 30 ++++++++++++++++++++---------- tools/deep/DeepHorn.cpp | 3 +-- 3 files changed, 39 insertions(+), 14 deletions(-) diff --git a/include/deep/Horn.hpp b/include/deep/Horn.hpp index c645b35ab..d4d979868 100755 --- a/include/deep/Horn.hpp +++ b/include/deep/Horn.hpp @@ -225,8 +225,24 @@ namespace ufo Expr body = rule->arg(0); Expr head = rule->arg(1); - hr.head = head->arg(0); - hr.dstRelation = head->arg(0)->arg(0); + if (isOpX(head)) + { + hr.head = head; + hr.dstRelation = head; + failDecl = head; + } + else if (isOpX(head)) + { + hr.head = head->arg(0); + hr.dstRelation = head->arg(0)->arg(0); + } + else + { + body = mk(body, mk(head)); + hr.head = mk(m_efac); + hr.dstRelation = mk(m_efac); + failDecl = mk(m_efac); + } ExprVector origSrcSymbs; ExprSet lin; diff --git a/include/ufo/Smt/Z3n.hpp b/include/ufo/Smt/Z3n.hpp index 53298f276..315edcc77 100644 --- a/include/ufo/Smt/Z3n.hpp +++ b/include/ufo/Smt/Z3n.hpp @@ -1016,24 +1016,34 @@ namespace ufo ctx.check_error (); z3::ast_vector rules (ctx, Z3_fixedpoint_get_rules(ctx, fp)); + if (rules.empty()) rules = z3::ast_vector(ctx, Z3_fixedpoint_get_assertions(ctx, fp)); ExprSet relations; for (unsigned i = 0; i < rules.size (); ++i){ - Expr rule = z3.toExpr (rules [i]); - m_rules.push_back(rule); + Expr rule = z3.toExpr (rules [i]); + m_rules.push_back(rule); - if (!isOpX(rule)) continue; - - Expr head = rule->arg(rule->arity() - 1)->arg(1); + if (isOpX(rule)) { + Expr head = rule->last()->arg(1); + if (isOpX(head)){ + if (head->arity () > 0){ + if (isOpX(head->arg(0))){ + relations.insert(head->arg(0)); + } + } + } + } else { + Expr head = rule->last(); if (isOpX(head)){ - if (head->arity () > 0){ - if (isOpX(head->arg(0))){ - relations.insert(head->arg(0)); - } + if (head->arity () > 0){ + if (isOpX(head->arg(0))){ + relations.insert(head->arg(0)); } + } } + } } - + for (unsigned i = 0; i < queries.size (); ++i){ m_queries.push_back(z3.toExpr (queries [i])); } diff --git a/tools/deep/DeepHorn.cpp b/tools/deep/DeepHorn.cpp index 8ba074986..1a3e38ba8 100644 --- a/tools/deep/DeepHorn.cpp +++ b/tools/deep/DeepHorn.cpp @@ -72,8 +72,7 @@ int main (int argc, char ** argv) " Grigory Fedyukovich et al \n\n" << "Usage: Purpose:\n" << " freqhorn [--help] show help\n" << - " freqhorn [options] discover invariants for a system of constrained Horn clauses\n" << - " (`file.smt2` in a datalog format extending SMT-LIB2)\n" << + " freqhorn [options] discover invariants for a system of constrained Horn clauses\n\n" << "Options:\n" << " " << OPT_V1 << " original version (one-by-one sampling)\n" " " << OPT_V2 << " optimized version for transition systems (+ bootstrapping)\n" From c5f7fd56bc79589ddd4095d1a99eb24727199d01 Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Sun, 8 Jul 2018 23:41:01 -0400 Subject: [PATCH 114/236] basic support for mutual recursion --- include/ae/ExprSimpl.hpp | 100 +++++---- include/deep/BndExpl.hpp | 94 ++++++--- include/deep/Horn.hpp | 383 +++++++++++++++++++++------------- include/deep/RndLearnerV2.hpp | 5 +- include/deep/RndLearnerV3.hpp | 58 +++-- include/sampl/SeedMiner.hpp | 3 +- include/ufo/Expr.hpp | 33 +++ include/ufo/Smt/Z3n.hpp | 28 --- 8 files changed, 429 insertions(+), 275 deletions(-) diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index 3cbb32bc0..721ea9cb5 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -578,8 +578,11 @@ namespace ufo } return exp; } - - + + template static void unique_push_back(T e, vector& v) { + if (find(v.begin(), v.end(), e) == v.end()) v.push_back(e); + } + template struct RW { @@ -1248,39 +1251,6 @@ namespace ufo return fn.found; } - inline Expr convertToGEandGT(Expr term) - { - if (isOpX(term)) return mk(term->right(), term->left()); - - if (isOpX(term)) return mk(term->right(), term->left()); - - if (isOpX(term)) return mk( - mk(term->left(), term->right()), - mk(term->right(), term->left())); - - if (isOpX(term)) return mk( - mk(term->left(), term->right()), - mk(term->right(), term->left())); - - if (isOpX(term)) - { - return mk(convertToGEandGT(term->last())); - } - - if (isOpX(term) || isOpX(term)) - { - ExprSet args; - for (int i = 0; i < term->arity(); i++){ - args.insert(convertToGEandGT(term->arg(i))); - } - - return isOpX(term) ? conjoin (args, term->getFactory()) : - disjoin (args, term->getFactory()); - - } - return term; - } - inline static Expr simplifiedAnd (Expr a, Expr b){ ExprSet conjs; getConj(a, conjs); @@ -1458,6 +1428,57 @@ namespace ufo return mk(term); } + bool hasBoolSort(Expr e) + { + if (bind::isBoolConst(e) || isOp(e)) return true; + return false; + } + + inline Expr convertToGEandGT(Expr term) + { + if (isOpX(term)) return mk(term->right(), term->left()); + + if (isOpX(term)) return mk(term->right(), term->left()); + + if (isOpX(term)) + { + if (hasBoolSort(term->left())) + mk(mk(term->left(), term->right()), + mk(mkNeg(term->left()), mkNeg(term->right()))); + else return mk( + mk(term->left(), term->right()), + mk(term->right(), term->left())); + } + + if (isOpX(term)) + { + if (hasBoolSort(term->left())) + return mk(mk(term->left(), mkNeg(term->right())), + mk(mkNeg(term->left()), term->right())); + else return mk( + mk(term->left(), term->right()), + mk(term->right(), term->left())); + } + + if (isOpX(term)) + { + return mk(convertToGEandGT(term->last())); + } + + if (isOpX(term) || isOpX(term)) + { + ExprSet args; + for (int i = 0; i < term->arity(); i++){ + args.insert(convertToGEandGT(term->arg(i))); + } + + return isOpX(term) ? conjoin (args, term->getFactory()) : + disjoin (args, term->getFactory()); + + } + return term; + } + inline static Expr unfoldITE(Expr term) { if (isOpX(term)) @@ -1679,7 +1700,7 @@ namespace ufo } }; - inline static Expr simpleQE(Expr exp, ExprSet& quantified) + template static Expr simpleQE(Expr exp, Range& quantified, bool strict = false) { // rewrite just equalities ExprSet cnjs; @@ -1693,13 +1714,15 @@ namespace ufo { for (auto & b : quantified) { - if (a->left() == b) + if (eqs[b] != NULL) continue; + + if (a->left() == b && emptyIntersect(a->right(), quantified)) { eq = true; eqs[b] = a->right(); break; } - else if (a->right() == b) + else if (a->right() == b && emptyIntersect(a->left(), quantified)) { eq = true; eqs[b] = a->left(); @@ -1712,6 +1735,7 @@ namespace ufo Expr qed = conjoin(newCnjs, exp->getFactory()); for (auto & a : eqs) qed = replaceAll(qed, a.first, a.second); + if (!strict) return qed; // check if there are some not eliminated vars ExprVector av; diff --git a/include/deep/BndExpl.hpp b/include/deep/BndExpl.hpp index b7d866814..b28659c3b 100644 --- a/include/deep/BndExpl.hpp +++ b/include/deep/BndExpl.hpp @@ -3,7 +3,7 @@ #include "Horn.hpp" #include "Distribution.hpp" -#include "ae/SMTUtils.hpp" +#include "ae/AeValSolver.hpp" using namespace std; using namespace boost; @@ -74,6 +74,27 @@ namespace ufo } } + Expr compactPrefix (int num) + { + vector& pr = ruleManager.prefixes[num]; + if (pr.size() == 0) return mk(m_efac); + + Expr pref = toExpr(pr); + + ExprSet quantified; + filter (pref, bind::IsConst(), inserter (quantified, quantified.begin ())); + for (auto & a : bindVars.back()) quantified.erase(a); + + if (quantified.size() > 0) + { + AeValSolver ae(mk(m_efac), pref, quantified); + ae.solve(); + pref = ae.getValidSubset(); + } + + return replaceAll(pref, bindVars.back(), ruleManager.chcs[ruleManager.cycles[num][0]].srcVars); + } + vector bindVars; Expr toExpr(vector& trace) @@ -282,46 +303,52 @@ namespace ufo bool unrollAndExecuteMultiple(ufo::ZSolver & m_smt_solver, map > > & models, int k = 10) { - vector traces; - map indexToInv; - int chcIndex = 0; - - for (auto & a : ruleManager.decls) + for (int i = 0; i < ruleManager.cycles.size(); i++) { - vector trace; - - ExprSet lastModel; - for (int i = 0; i < ruleManager.chcs.size(); i++) + auto & loop = ruleManager.cycles[i]; + Expr srcRel = ruleManager.chcs[loop[0]].srcRelation; + if (models[srcRel].size() > 0) continue; + bool toContinue = false; + for (auto & v : ruleManager.chcs[loop[0]].srcVars) { - auto & r = ruleManager.chcs[i]; - if (!r.isInductive && r.dstRelation == (a->first())) + if (!bind::isIntConst(v)) { - if (models[r.srcRelation].size() > 0) - { - for (int j = 0; j < models[r.srcRelation].back().size(); j ++) - { - Expr val = mk(r.srcVars[j], mkTerm (mpz_class (models[r.srcRelation].back()[j]), m_efac)); - lastModel.insert(val); - } - } - trace.push_back(i); + toContinue = true; break; } } + if (toContinue) continue; - for (int i = 0; i < ruleManager.chcs.size(); i++) + auto & prefix = ruleManager.prefixes[i]; + vector trace; + ExprSet lastModel; + int p = prefix.size(); + + while (p > 0) { - auto & r = ruleManager.chcs[i]; - if (r.isInductive && r.srcRelation == (a->first())) + auto & r = ruleManager.chcs[prefix[--p]]; + if (models[r.srcRelation].size() > 0) { - for (int j = 0; j < k; j++) trace.push_back(i); + assert(models[r.srcRelation].back().size() == r.srcVars.size()); + for (int j = 0; j < r.srcVars.size(); j ++) + { + Expr val = mk(r.srcVars[j], mkTerm (mpz_class (models[r.srcRelation].back()[j]), m_efac)); + lastModel.insert(val); + } + break; } } + while (p < prefix.size()) trace.push_back(prefix[p++]); + int l = trace.size() - 1; + + for (int j = 0; j < k; j++) + for (int m = 0; m < loop.size(); m++) + trace.push_back(loop[m]); for (int i = 0; i < ruleManager.chcs.size(); i++) { auto & r = ruleManager.chcs[i]; - if (!r.isInductive && !r.isQuery && r.srcRelation == (a->first())) + if (i != loop[0] && !r.isQuery && r.srcRelation == srcRel) { trace.push_back(i); break; @@ -332,12 +359,12 @@ namespace ufo getSSA(trace, ssa); bindVars.pop_back(); - bool toContinue = false; + toContinue = false; while (true) { if (ssa.size() < 2) { - outs () << "Unable to find a suitable unrolling for " << *(a->first()) << "\n"; + outs () << "Unable to find a suitable unrolling for " << *srcRel << "\n"; toContinue = true; break; } @@ -361,8 +388,11 @@ namespace ufo ZSolver::Model m = m_smt_solver.getModel(); - for (auto vars : bindVars) { + for (; l < bindVars.size(); l = l + loop.size()) + { + auto & vars = bindVars[l]; vector model; +// outs () << "model for " << l << ": "; for (auto var : vars) { int value; if (var != m.eval(var)) { @@ -373,11 +403,11 @@ namespace ufo value = guessUniformly(1000)-500; cout << "random guess for: " << var << endl; //DEBUG } -// cout << value << "\t";//DEBUG model.push_back(value); +// outs () << *var << " = " << value << ", "; } -// cout << endl;//DEBUG - models[(a->first())].push_back(model); +// outs () << "\b\b]\n"; + models[srcRel].push_back(model); } } diff --git a/include/deep/Horn.hpp b/include/deep/Horn.hpp index d4d979868..e195c55e2 100755 --- a/include/deep/Horn.hpp +++ b/include/deep/Horn.hpp @@ -1,7 +1,7 @@ #ifndef HORN__HPP__ #define HORN__HPP__ -#include "ae/ExprSimpl.hpp" +#include "ae/AeValSolver.hpp" using namespace std; using namespace boost; @@ -25,16 +25,9 @@ namespace ufo body = mk(body, mk(v2)); return true; } - //else.. TODO: simplifications like "1 + 2" and support for other sorts like Reals and Bools return false; } - inline void rewriteHelperDupls(Expr& body, Expr _v1, Expr _v2, Expr v1, Expr v2) - { - if (_v1 == _v2) body = mk(body, mk(v1, v2)); - //else.. TODO: mine more complex relationships, like "_v1 + 1 = _v2" - } - struct HornRuleExt { ExprVector srcVars; @@ -57,15 +50,7 @@ namespace ufo for (int i = 0; i < _srcVars.size(); i++) { srcVars.push_back(invVarsSrc[i]); - - // find constants - if (rewriteHelperConsts(body, _srcVars[i], srcVars[i])) continue; - - body = replaceAll(body, _srcVars[i], srcVars[i]); - for (int j = 0; j < i; j++) // find duplicates among srcVars - { - rewriteHelperDupls(body, _srcVars[i], _srcVars[j], srcVars[i], srcVars[j]); - } + body = mk(body, mk(_srcVars[i], srcVars[i])); } for (int i = 0; i < _dstVars.size(); i++) @@ -74,19 +59,7 @@ namespace ufo Expr new_name = mkTerm (lexical_cast(invVarsDst[i]) + "'", body->getFactory()); Expr var = cloneVar(invVarsDst[i], new_name); dstVars.push_back(var); - - // find constants - if (rewriteHelperConsts(body, _dstVars[i], dstVars[i])) continue; - - body = replaceAll(body, _dstVars[i], dstVars[i]); - for (int j = 0; j < i; j++) // find duplicates among dstVars - { - rewriteHelperDupls(body, _dstVars[i], _dstVars[j], dstVars[i], dstVars[j]); - } - for (int j = 0; j < _srcVars.size(); j++) // find duplicates between srcVars and dstVars - { - rewriteHelperDupls(body, _dstVars[i], _srcVars[j], dstVars[i], srcVars[j]); - } + body = mk(body, mk(_dstVars[i], dstVars[i])); } } }; @@ -95,6 +68,7 @@ namespace ufo { private: set indeces; + string varname = " $_"; public: @@ -108,17 +82,18 @@ namespace ufo ExprSet decls; map invVars; map> outgs; - bool noInductiveRules = false; + vector> prefixes; // for cycles + vector> cycles; CHCs(ExprFactory &efac, EZ3 &z3) : m_efac(efac), m_z3(z3) {}; - void preprocess (Expr term, ExprVector& srcVars, ExprVector& relations, Expr &srcRelation, ExprSet& lin) + void preprocess (Expr term, ExprVector& srcVars, Expr &srcRelation, ExprSet& lin) { if (isOpX(term)) { for (auto it = term->args_begin(), end = term->args_end(); it != end; ++it) { - preprocess(*it, srcVars, relations, srcRelation, lin); + preprocess(*it, srcVars, srcRelation, lin); } } else @@ -133,14 +108,19 @@ namespace ufo { if (isOpX(term->arg(0))) { - for (auto &rel: relations) + Expr rel = term->arg(0); + if (term->arg(0)->arity() > 2) { - if (rel == term->arg(0)) + addDecl(rel); + if (srcRelation != NULL) { - srcRelation = rel->arg(0); - for (auto it = term->args_begin()+1, end = term->args_end(); it != end; ++it) - srcVars.push_back(*it); + outs() << "Nonlinear CHCs are currently unsupported:\n "; + outs () << *srcRelation << " /\\ " << *rel->arg(0) << "\n"; + exit(0); } + srcRelation = rel->arg(0); + for (auto it = term->args_begin()+1, end = term->args_end(); it != end; ++it) + srcVars.push_back(*it); } } } @@ -152,70 +132,100 @@ namespace ufo } } - void parse(string smt, string varname = " $_") + void addDecl (Expr a) + { + if (a->arity() == 2) + { + addFailDecl(a->arg(0)); + } + else if (invVars[a->arg(0)].size() == 0) + { + decls.insert(a); + for (int i = 1; i < a->arity()-1; i++) + { + Expr new_name = mkTerm (varname + to_string(i - 1), m_efac); + Expr var; + if (isOpX (a->arg(i))) + var = bind::intConst(new_name); + else if (isOpX (a->arg(i))) + var = bind::realConst(new_name); + else if (isOpX (a->arg(i))) + var = bind::boolConst(new_name); + + invVars[a->arg(0)].push_back(var); + } + } + } + + void parse(string smt) { std::unique_ptr > m_fp; m_fp.reset (new ZFixedPoint (m_z3)); ZFixedPoint &fp = *m_fp; fp.loadFPfromFile(smt); - for (auto &a : fp.m_rels) + for (auto &r: fp.m_rules) { - if (a->arity() == 2) - { - failDecl = a->arg(0); - } - else if (invVars[a->arg(0)].size() == 0) + bool toReplace = false; + chcs.push_back(HornRuleExt()); + HornRuleExt& hr = chcs.back(); + Expr rule = r; + + while (isOpX(r)) { - decls.insert(a); - for (int i = 1; i < a->arity()-1; i++) + toReplace = true; + for (int i = 0; i < r->arity() - 1; i++) { - Expr new_name = mkTerm (varname + to_string(i - 1), m_efac); - Expr var; - if (isOpX (a->arg(i))) - var = bind::intConst(new_name); - else if (isOpX (a->arg(i))) - var = bind::realConst(new_name); - else if (isOpX (a->arg(i))) - var = bind::boolConst(new_name); - - invVars[a->arg(0)].push_back(var); + hr.locVars.push_back(bind::fapp(r->arg(i))); } + r = r->last(); } - } - for (auto &r: fp.m_rules) - { - chcs.push_back(HornRuleExt()); - HornRuleExt& hr = chcs.back(); + if (isOpX(r) && isOpX(r->first())) + { + toReplace = true; + for (int i = 0; i < r->first()->arity() - 1; i++) + hr.locVars.push_back(bind::fapp(r->first()->arg(i))); - hr.srcRelation = mk(m_efac); - Expr rule = r; - ExprVector args; + rule = mk(r->first()->last(), mk(m_efac)); + r = rule; + } - if (isOpX(r)) + if (toReplace) { - rule = r->last(); - - for (int i = 0; i < r->arity() - 1; i++) + if (isOpX(r)) + { + rule = mk(r->first(), mk(m_efac)); + } + else if (isOpX(r) && r->arity() == 2 && isOpX(r->left()) && hasUninterp(r->left())) { - Expr var = r->arg(i); - Expr name = bind::name (r->arg(i)); - Expr new_name = mkTerm (lexical_cast (name.get()), m_efac); - Expr var_new = bind::fapp(bind::rename(var, new_name)); - args.push_back(var_new); + rule = mk(r->left()->left(), r->right()); + } + else if (isOpX(r) && r->arity() == 2 && isOpX(r->right()) && hasUninterp(r->right())) + { + rule = mk(r->right()->left(), r->left()); + } + else + { + rule = r; } ExprVector actual_vars; expr::filter (rule, bind::IsVar(), std::inserter (actual_vars, actual_vars.begin ())); - assert(actual_vars.size() == args.size()); + if (actual_vars.size() == 0) + { + chcs.pop_back(); + continue; + } + + assert(actual_vars.size() <= hr.locVars.size()); ExprVector repl_vars; for (int i = 0; i < actual_vars.size(); i++) { string a1 = lexical_cast(bind::name(actual_vars[i])); - int ind = args.size() - 1 - atoi(a1.substr(1).c_str()); - repl_vars.push_back(args[ind]); + int ind = hr.locVars.size() - 1 - atoi(a1.substr(1).c_str()); + repl_vars.push_back(hr.locVars[ind]); } rule = replaceAll(rule, actual_vars, repl_vars); } @@ -225,74 +235,59 @@ namespace ufo Expr body = rule->arg(0); Expr head = rule->arg(1); - if (isOpX(head)) - { - hr.head = head; - hr.dstRelation = head; - failDecl = head; - } - else if (isOpX(head)) + if (isOpX(head)) { + addDecl(head->arg(0)); hr.head = head->arg(0); hr.dstRelation = head->arg(0)->arg(0); } else { - body = mk(body, mk(head)); + if (!isOpX(head)) body = mk(body, mk(head)); + addFailDecl(mk(m_efac)); hr.head = mk(m_efac); hr.dstRelation = mk(m_efac); - failDecl = mk(m_efac); } ExprVector origSrcSymbs; ExprSet lin; + preprocess(body, origSrcSymbs, hr.srcRelation, lin); + if (hr.srcRelation == NULL) + { + if (hasUninterp(body)) + { + outs () << "Unsupported format\n"; + outs () << " " << *body << "\n"; + exit (0); + } + hr.srcRelation = mk(m_efac); + } - preprocess(body, origSrcSymbs, fp.m_rels, hr.srcRelation, lin); hr.isFact = isOpX(hr.srcRelation); hr.isQuery = (hr.dstRelation == failDecl); hr.isInductive = (hr.srcRelation == hr.dstRelation); - ExprVector allOrigSymbs = origSrcSymbs; ExprVector origDstSymbs; - if (!hr.isQuery) { for (auto it = head->args_begin()+1, end = head->args_end(); it != end; ++it) origDstSymbs.push_back(*it); } - allOrigSymbs.insert(allOrigSymbs.end(), origDstSymbs.begin(), origDstSymbs.end()); - - Expr bodyPre = conjoin(lin, m_efac); simplBoolReplCnj(allOrigSymbs, lin); hr.body = conjoin(lin, m_efac); - hr.assignVarsAndRewrite (origSrcSymbs, invVars[hr.srcRelation], origDstSymbs, invVars[hr.dstRelation]); - - for (auto &a: args) - { - bool found = false; - for (auto &b : origDstSymbs) - { - if (a == b) found = true; - } - if (! found) - { - for (auto &b : origSrcSymbs) - { - if (a == b) found = true; - } - } - if (!found) - { - hr.locVars.push_back(a); - } - } + hr.body = simpleQE(hr.body, hr.locVars); } // remove useless rules - chcSlice(failDecl); + failShrink(failDecl); + for (auto rit = indeces.rbegin(); rit != indeces.rend(); ++rit) + chcs.erase(chcs.begin() + *rit); + + indeces.clear(); + chcSliceBwd(failDecl); vector tmpChcs; for (auto i : indeces) tmpChcs.push_back(chcs[i]); chcs = tmpChcs; @@ -303,7 +298,42 @@ namespace ufo wtoSort(); } - void chcSlice (Expr dstRel) + void failShrink (Expr dstRel) + { + for (int i = 0; i < chcs.size(); i++) + { + if (chcs[i].dstRelation != dstRel) continue; + + ExprSet quantified; + quantified.insert(chcs[i].dstVars.begin(), chcs[i].dstVars.end()); + quantified.insert(chcs[i].locVars.begin(), chcs[i].locVars.end()); + Expr tmp = chcs[i].body; + + if (quantified.size() > 0) + { + AeValSolver ae(mk(m_efac), tmp, quantified); + ae.solve(); + tmp = ae.getValidSubset(); + } + + if (isOpX(tmp)) + { + failShrink(chcs[i].srcRelation); + indeces.insert(i); + return; + } + } + for (int i = 0; i < chcs.size(); i++) + { + if (chcs[i].dstRelation == dstRel) + { + chcs[i].isQuery = true; + chcs[i].dstRelation = failDecl; + } + } + } + + void chcSliceBwd (Expr dstRel) { for (int i = 0; i < chcs.size(); i++) { @@ -311,31 +341,88 @@ namespace ufo { bool alreadyIn = find(indeces.begin(), indeces.end(), i) != indeces.end(); indeces.insert(i); - if (!chcs[i].isInductive && !alreadyIn) - chcSlice(chcs[i].srcRelation); + if (!alreadyIn) chcSliceBwd(chcs[i].srcRelation); } } + chcSliceFwd (dstRel); } - bool hasCycles() + void chcSliceFwd (Expr srcRel) { - if (!noInductiveRules) return true; - return hasCycles(mk(m_efac), ExprVector()); + for (int i = 0; i < chcs.size(); i++) + { + if (chcs[i].srcRelation == srcRel) + { + bool alreadyIn = find(indeces.begin(), indeces.end(), i) != indeces.end(); + indeces.insert(i); + if (!alreadyIn) chcSliceFwd(chcs[i].dstRelation); + } + } } - bool hasCycles(Expr srcRel, ExprVector ev) + bool hasCycles() { - for (auto & chc : ev) - if (chc == srcRel) - return true; + if (cycles.size() > 0) return true; - ev.push_back(srcRel); + for (int i = 0; i < chcs.size(); i++) + { + if (chcs[i].isFact) findCycles(i, vector()); + } + + assert (cycles.size() == prefixes.size()); +// for (auto & c : cycles) +// { +// outs () << " cycle: "; +// for (auto & chcNum : c) outs () << *chcs[chcNum].srcRelation << " -> "; +// outs () << " ["; +// for (auto & chcNum : c) outs () << chcNum << " -> "; +// outs () << "]\n"; +// } + return (cycles.size() > 0); + } + + void findCycles(int chcNum, vector vec) + { + Expr srcRel = chcs[chcNum].srcRelation; + Expr dstRel = chcs[chcNum].dstRelation; bool res = false; - for (auto & i : outgs[srcRel]) + for (int i = 0; i < vec.size(); i++) { - res = res || hasCycles(chcs[i].dstRelation, ev); + auto c = vec[i]; + bool newCycle = (chcs[c].srcRelation == srcRel); + // TODO: some cycles can be redundant + if (newCycle) + { + cycles.push_back(vector()); + prefixes.push_back(vector()); + for (int j = 0; j < i; j++) prefixes.back().push_back(vec[j]); + res = true; + } + if (res) + { + cycles.back().push_back(c); + } + } + + if (! res) + { + vec.push_back(chcNum); + + for (auto & i : outgs[dstRel]) + { + if (chcs[i].dstRelation == failDecl) continue; + bool newRel = true; + for (auto & c : cycles) + { + if (c[0] == i) + { + newRel = false; + break; + } + } + if (newRel) findCycles(i, vec); + } } - return res; } void addRule (HornRuleExt* r) @@ -346,13 +433,13 @@ namespace ufo { if (invVars[srcRel].size() == 0) { - addDecl(srcRel, r->srcVars); + addDeclAndVars(srcRel, r->srcVars); } } outgs[srcRel].push_back(chcs.size()-1); } - void addDecl(Expr rel, ExprVector& args) + void addDeclAndVars(Expr rel, ExprVector& args) { ExprVector types; for (auto &var: args) { @@ -369,7 +456,16 @@ namespace ufo void addFailDecl(Expr decl) { - failDecl = decl; + if (failDecl == NULL) + { + failDecl = decl; + } + else + { + if (failDecl != decl) + outs () << "Multiple queries are unsupported\n"; + exit(0); + } } Expr getPrecondition (Expr decl) @@ -389,6 +485,7 @@ namespace ufo void wtoSort() { + hasCycles(); if (wtoCHCs.size() > 0) { outs () << "Already sorted\n"; @@ -396,21 +493,19 @@ namespace ufo } int r1 = 0; - for (auto & hr : chcs) + + for (auto & c : cycles) { - if (hr.isInductive) + wtoDecls.push_back(chcs[c[0]].srcRelation); + for (int i = 1; i < c.size(); i++) { - wtoDecls.push_back(hr.srcRelation); - wtoCHCs.push_back(&hr); + unique_push_back(chcs[c[i]].dstRelation, wtoDecls); + unique_push_back(&chcs[c[i]], wtoCHCs); } } int r2 = wtoDecls.size(); - if (r2 == 0) - { - noInductiveRules = true; - return; - } + if (r2 == 0) return; while (r1 != r2) { @@ -423,13 +518,13 @@ namespace ufo if (hr.srcRelation == dcl) { - wtoDecls.push_back(hr.dstRelation); - wtoCHCs.push_back(&hr); + unique_push_back(hr.dstRelation, wtoDecls); + unique_push_back(&hr, wtoCHCs); } else if (hr.dstRelation == dcl) { - wtoDecls.push_back(hr.srcRelation); - wtoCHCs.push_back(&hr); + unique_push_back(hr.srcRelation, wtoDecls); + unique_push_back(&hr, wtoCHCs); } } } diff --git a/include/deep/RndLearnerV2.hpp b/include/deep/RndLearnerV2.hpp index 4e4ff5f55..7122bbb16 100644 --- a/include/deep/RndLearnerV2.hpp +++ b/include/deep/RndLearnerV2.hpp @@ -43,7 +43,10 @@ namespace ufo } else { - eqs.push_back(mk(v, mkTerm (mpz_class (guessUniformly (1000)-500), m_efac))); + if (bind::isBoolConst(v)) + eqs.push_back(mk(v, mk(m_efac))); + else + eqs.push_back(mk(v, mkTerm (mpz_class (guessUniformly (1000)-500), m_efac))); } } return conjoin (eqs, m_efac); diff --git a/include/deep/RndLearnerV3.hpp b/include/deep/RndLearnerV3.hpp index c11e34322..fe13196e1 100644 --- a/include/deep/RndLearnerV3.hpp +++ b/include/deep/RndLearnerV3.hpp @@ -69,7 +69,7 @@ namespace ufo if (findNonlin(formula) || containsOp(formula) || containsOp(formula)) { - Expr newCand = simpleQE(formula, quantified); + Expr newCand = simpleQE(formula, quantified, true); for (auto & v : invarVars[invNum]) newCand = replaceAll(newCand, varsRenameFrom[v.first], v.second); return newCand; } @@ -93,10 +93,11 @@ namespace ufo getDisj(candToProp, dsjs); ExprSet newSeedDsjs; int invNum = getVarIndex(rel, decls); - for (auto & d : dsjs) - newSeedDsjs.insert(eliminateQuantifiers(mk(d, constraint), varsRenameFrom, invNum)); - + { + Expr r = eliminateQuantifiers(mk(d, constraint), varsRenameFrom, invNum); + newSeedDsjs.insert(r); + } Expr newCand = disjoin(newSeedDsjs, m_efac); if (seed) @@ -111,7 +112,6 @@ namespace ufo } newCand = conjoin(newCnjs, m_efac); - checked.insert(rel); if (isOpX(newCand)) return true; else return propagate(invNum, newCand, true); } @@ -126,11 +126,12 @@ namespace ufo bool addCandidate(int invNum, Expr cnd) { + SamplFactory& sf = sfs[invNum].back(); + if (!isOpX(sf.getAllLemmas()) && u.implies(sf.getAllLemmas(), cnd)) return false; + for (auto & a : candidates[invNum]) { if (u.isEquiv(a, cnd)) return false; - SamplFactory& sf = sfs[invNum].back(); - if (!isOpX(sf.getAllLemmas()) && u.implies(sf.getAllLemmas(), cnd)) return false; } candidates[invNum].push_back(cnd); return true; @@ -140,11 +141,10 @@ namespace ufo { bool res = true; Expr rel = decls[invNum]; - + checked.insert(rel); for (auto & hr : ruleManager.chcs) { if (hr.srcRelation == hr.dstRelation || hr.isQuery) continue; - SamplFactory* sf1; SamplFactory* sf2; @@ -186,11 +186,9 @@ namespace ufo bool checkCand(int invNum) { Expr rel = decls[invNum]; -// outs () << " -- checkCand for " << *rel << ": " << *conjoin(candidates[invNum], m_efac) << "\n"; if (!checkInit(invNum, rel)) return false; if (!checkInductiveness(rel)) return false; - checked.insert(rel); return propagate(invNum, conjoin(candidates[invNum], m_efac), false); } @@ -222,14 +220,15 @@ namespace ufo // if (progress) updateGrammars(); // GF: doesn't work great :( } - void synthesize(int maxAttempts, char * outfile) + bool synthesize(int maxAttempts, char * outfile) { ExprSet cands; for (int i = 0; i < maxAttempts; i++) { // next cand (to be sampled) // TODO: find a smarter way to calculate; make parametrizable - int invNum = getVarIndex(ruleManager.wtoDecls[i % ruleManager.wtoDecls.size()], decls); + int tmp = ruleManager.cycles[i % ruleManager.cycles.size()][0]; + int invNum = getVarIndex(ruleManager.chcs[tmp].srcRelation, decls); checked.clear(); candidates.clear(); SamplFactory& sf = sfs[invNum].back(); @@ -243,10 +242,11 @@ namespace ufo if (checkAllLemmas()) { outs () << "Success after " << (i+1) << " iterations\n"; - return; + return true; } } } + return false; } bool splitUnsatSets(ExprVector & src, ExprVector & dst1, ExprVector & dst2) @@ -374,17 +374,19 @@ namespace ufo } // adapted from doSeedMining - void getSeeds(Expr invRel, map& cands) + void getSeeds(Expr invRel, map& cands, bool analizeCode = true) { int ind = getVarIndex(invRel, decls); SamplFactory& sf = sfs[ind].back(); ExprSet candsFromCode; bool analyzedExtras = false; + bool isFalse = false; for (auto &hr : ruleManager.chcs) { if (hr.dstRelation != invRel && hr.srcRelation != invRel) continue; SeedMiner sm (hr, invRel, invarVars[ind], sf.lf.nonlinVars); - sm.analyzeCode(); + if (analizeCode) sm.analyzeCode(); + else sm.candidates.clear(); if (!analyzedExtras && hr.srcRelation == invRel) { sm.analyzeExtras (cands[invRel]); @@ -529,27 +531,15 @@ namespace ufo CHCs ruleManager(m_efac, z3); ruleManager.parse(smt); + BndExpl bnd(ruleManager); + if (!ruleManager.hasCycles()) { - BndExpl bnd(ruleManager); bnd.exploreTraces(1, ruleManager.chcs.size(), true); return; } - else if (ruleManager.noInductiveRules) - { - outs () << "Mutual recursion unsupported\n"; - return; - } RndLearnerV3 ds(m_efac, z3, ruleManager, freqs, aggp); - - if (ruleManager.decls.size() == 1) - { - outs() << "WARNING.\n" << - "This is an experimental thing for multiple invariants.\n" << - "For a single invariant synthesis, we suggest to use the --v2 option.\n"; - } - map cands; for (auto& dcl: ruleManager.decls) ds.initializeDecl(dcl); @@ -561,7 +551,13 @@ namespace ufo #endif } - for (auto& dcl: ruleManager.decls) ds.getSeeds(dcl->arg(0), cands); + for (int i = 0; i < ruleManager.cycles.size(); i++) + { + Expr pref = bnd.compactPrefix(i); + cands[ruleManager.chcs[ruleManager.cycles[i][0]].srcRelation].insert(pref); + } + + for (auto& dcl: ruleManager.wtoDecls) ds.getSeeds(dcl, cands); ds.refreshCands(cands); for (auto& dcl: ruleManager.decls) ds.doSeedMining(dcl->arg(0), cands[dcl->arg(0)], false); ds.calculateStatistics(); diff --git a/include/sampl/SeedMiner.hpp b/include/sampl/SeedMiner.hpp index 6227d9643..e8061c5f1 100644 --- a/include/sampl/SeedMiner.hpp +++ b/include/sampl/SeedMiner.hpp @@ -172,7 +172,8 @@ namespace ufo void analyzeExtras(ExprSet& extra) { - for (auto &cnj : extra) coreProcess(cnj); + for (auto &cnj : extra) + coreProcess(propagateEqualities(cnj)); } void analyzeCode() diff --git a/include/ufo/Expr.hpp b/include/ufo/Expr.hpp index e3fc6def3..8baaa44fd 100644 --- a/include/ufo/Expr.hpp +++ b/include/ufo/Expr.hpp @@ -2864,6 +2864,31 @@ namespace expr } }; + struct HasUninterp : public std::unary_function + { + bool found; + + HasUninterp () : found(false) {} + + VisitAction operator() (Expr exp) + { + if (found || isOpX(exp)) + { + if (exp->arity() > 0) + { + if (isOpX(exp->arg(0)) && + "BOOL" == boost::lexical_cast (exp->arg(0)->last()) && + exp->arg(0)->arity() > 2) + { + found = true; + return VisitAction::skipKids (); + } + } + } + return VisitAction::doKids (); + } + }; + struct SIZE : public std::unary_function { size_t count; @@ -2934,6 +2959,7 @@ namespace expr // pairwise replacing inline Expr replaceAll (Expr exp, ExprVector& s, ExprVector& t) { + if (isOpX(exp) || isOpX(exp)) return exp; assert(s.size() == t.size()); RAVALL rav(&s, &t); return dagVisit (rav, exp); @@ -3036,6 +3062,13 @@ namespace expr return co.found; } + inline bool hasUninterp (Expr e1) + { + HasUninterp co; + dagVisit (co, e1); + return co.found; + } + namespace op { namespace boolop diff --git a/include/ufo/Smt/Z3n.hpp b/include/ufo/Smt/Z3n.hpp index 315edcc77..8cd2a7908 100644 --- a/include/ufo/Smt/Z3n.hpp +++ b/include/ufo/Smt/Z3n.hpp @@ -1022,35 +1022,7 @@ namespace ufo for (unsigned i = 0; i < rules.size (); ++i){ Expr rule = z3.toExpr (rules [i]); m_rules.push_back(rule); - - if (isOpX(rule)) { - Expr head = rule->last()->arg(1); - if (isOpX(head)){ - if (head->arity () > 0){ - if (isOpX(head->arg(0))){ - relations.insert(head->arg(0)); - } - } - } - } else { - Expr head = rule->last(); - if (isOpX(head)){ - if (head->arity () > 0){ - if (isOpX(head->arg(0))){ - relations.insert(head->arg(0)); - } - } - } - } - } - - for (unsigned i = 0; i < queries.size (); ++i){ - m_queries.push_back(z3.toExpr (queries [i])); } - - for (auto &r: relations) m_rels.push_back (r); - - //TODO: vars } }; From 76cbb03db890106c8aa4d1ac51fdcea3793555eb Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Tue, 14 Aug 2018 22:36:51 -0400 Subject: [PATCH 115/236] supported some basic reasoning about arrays --- bench_horn/array_copy.smt2 | 17 ++++ bench_horn/array_copy_ind.smt2 | 16 ++++ bench_horn/array_init_const.smt2 | 16 ++++ bench_horn/array_init_const_ind.smt2 | 15 ++++ bench_horn/array_init_var.smt2 | 16 ++++ bench_horn/array_init_var_ind.smt2 | 15 ++++ bench_horn/array_init_var_plus_ind.smt2 | 17 ++++ bench_horn/array_min.smt2 | 17 ++++ bench_horn/array_min_ind.smt2 | 16 ++++ include/ae/ExprSimpl.hpp | 91 ++++++++++++++++++- include/deep/BndExpl.hpp | 21 +++-- include/deep/Horn.hpp | 34 +++++-- include/deep/RndLearner.hpp | 33 ++++--- include/deep/RndLearnerV2.hpp | 7 +- include/deep/RndLearnerV3.hpp | 95 ++++++++++++++++---- include/sampl/ArrCom.hpp | 114 ++++++++++++++++++++++++ include/sampl/Sampl.hpp | 22 ++++- include/sampl/SeedMiner.hpp | 66 ++++++++++++-- include/ufo/Expr.hpp | 11 ++- 19 files changed, 583 insertions(+), 56 deletions(-) create mode 100644 bench_horn/array_copy.smt2 create mode 100644 bench_horn/array_copy_ind.smt2 create mode 100644 bench_horn/array_init_const.smt2 create mode 100644 bench_horn/array_init_const_ind.smt2 create mode 100644 bench_horn/array_init_var.smt2 create mode 100644 bench_horn/array_init_var_ind.smt2 create mode 100644 bench_horn/array_init_var_plus_ind.smt2 create mode 100644 bench_horn/array_min.smt2 create mode 100644 bench_horn/array_min_ind.smt2 create mode 100644 include/sampl/ArrCom.hpp diff --git a/bench_horn/array_copy.smt2 b/bench_horn/array_copy.smt2 new file mode 100644 index 000000000..b7aa187c2 --- /dev/null +++ b/bench_horn/array_copy.smt2 @@ -0,0 +1,17 @@ +(declare-var a (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var b1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var n Int) + +(declare-rel inv ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv a b 0 n)) + +(rule (=> (and (inv a b i n) (< i n) (= (store b i (select a i)) b1) (= i1 (+ i 1))) (inv a b1 i1 n))) + +(rule (=> (and (inv a b i n) (>= i n) (< 0 i1) (< i1 n) (not (= (select a i1) (select b i1)))) fail)) + +(query fail) diff --git a/bench_horn/array_copy_ind.smt2 b/bench_horn/array_copy_ind.smt2 new file mode 100644 index 000000000..f0660ea41 --- /dev/null +++ b/bench_horn/array_copy_ind.smt2 @@ -0,0 +1,16 @@ +(declare-var a (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var b1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) + +(declare-rel inv ((Array Int Int) (Array Int Int) Int)) +(declare-rel fail ()) + +(rule (inv a b 0)) + +(rule (=> (and (inv a b i) (= (store b i (select a i)) b1) (= i1 (+ i 1))) (inv a b1 i1))) + +(rule (=> (and (inv a b i) (< 0 i1) (< i1 i) (not (= (select a i1) (select b i1)))) fail)) + +(query fail) diff --git a/bench_horn/array_init_const.smt2 b/bench_horn/array_init_const.smt2 new file mode 100644 index 000000000..d8fd9f954 --- /dev/null +++ b/bench_horn/array_init_const.smt2 @@ -0,0 +1,16 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv a 0 N)) + +(rule (=> (and (inv a i N) (< i N) (= (store a i 1) a1) (= i1 (+ i 1))) (inv a1 i1 N))) + +(rule (=> (and (inv a i N) (>= i N) (< 0 i1) (< i1 N) (not (= (select a i1) 1))) fail)) + +(query fail) diff --git a/bench_horn/array_init_const_ind.smt2 b/bench_horn/array_init_const_ind.smt2 new file mode 100644 index 000000000..43bf48ca2 --- /dev/null +++ b/bench_horn/array_init_const_ind.smt2 @@ -0,0 +1,15 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) + +(declare-rel inv ((Array Int Int) Int)) +(declare-rel fail ()) + +(rule (inv a 0)) + +(rule (=> (and (inv a i) (= (store a i 1) a1) (= i1 (+ i 1))) (inv a1 i1))) + +(rule (=> (and (inv a i) (< 0 i1) (< i1 i) (not (= (select a i1) 1))) fail)) + +(query fail) diff --git a/bench_horn/array_init_var.smt2 b/bench_horn/array_init_var.smt2 new file mode 100644 index 000000000..a0ca47fb9 --- /dev/null +++ b/bench_horn/array_init_var.smt2 @@ -0,0 +1,16 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var n Int) + +(declare-rel inv ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv a 0 n)) + +(rule (=> (and (inv a i n) (< i n) (= (store a i i) a1) (= i1 (+ i 1))) (inv a1 i1 n))) + +(rule (=> (and (inv a i n) (>= i n) (< 0 i1) (< i1 n) (not (= (select a i1) i1))) fail)) + +(query fail) diff --git a/bench_horn/array_init_var_ind.smt2 b/bench_horn/array_init_var_ind.smt2 new file mode 100644 index 000000000..7081128c3 --- /dev/null +++ b/bench_horn/array_init_var_ind.smt2 @@ -0,0 +1,15 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) + +(declare-rel inv ((Array Int Int) Int)) +(declare-rel fail ()) + +(rule (inv a 0)) + +(rule (=> (and (inv a i) (= (store a i i) a1) (= i1 (+ i 1))) (inv a1 i1))) + +(rule (=> (and (inv a i) (< 0 i1) (< i1 i) (not (= (select a i1) i1))) fail)) + +(query fail) diff --git a/bench_horn/array_init_var_plus_ind.smt2 b/bench_horn/array_init_var_plus_ind.smt2 new file mode 100644 index 000000000..5d26f6aee --- /dev/null +++ b/bench_horn/array_init_var_plus_ind.smt2 @@ -0,0 +1,17 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) + +(declare-rel inv ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv a 0 0)) + +(rule (=> (and (inv a i j) (= (store a i j) a1) (= j1 (+ j i)) (= i1 (+ i 1))) (inv a1 i1 j1))) + +(rule (=> (and (inv a i j) (< 0 i1) (< i1 i) (not (>= (select a i1) 0))) fail)) + +(query fail) diff --git a/bench_horn/array_min.smt2 b/bench_horn/array_min.smt2 new file mode 100644 index 000000000..267d433c6 --- /dev/null +++ b/bench_horn/array_min.smt2 @@ -0,0 +1,17 @@ +(declare-var a (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var m Int) +(declare-var m1 Int) +(declare-var N Int) + +(declare-rel inv ((Array Int Int) Int Int Int)) +(declare-rel fail ()) + +(rule (inv a 0 0 N)) + +(rule (=> (and (inv a i m N) (< i N) (= m1 (ite (<= m (select a i)) m (select a i))) (= i1 (+ i 1))) (inv a i1 m1 N))) + +(rule (=> (and (inv a i m N) (>= i N) (< 0 i1) (< i1 N) (not (<= m (select a i1)))) fail)) + +(query fail) diff --git a/bench_horn/array_min_ind.smt2 b/bench_horn/array_min_ind.smt2 new file mode 100644 index 000000000..afb73064d --- /dev/null +++ b/bench_horn/array_min_ind.smt2 @@ -0,0 +1,16 @@ +(declare-var a (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var m Int) +(declare-var m1 Int) + +(declare-rel inv ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv a 0 0)) + +(rule (=> (and (inv a i m) (= m1 (ite (<= m (select a i)) m (select a i))) (= i1 (+ i 1))) (inv a i1 m1))) + +(rule (=> (and (inv a i m) (< 0 i1) (< i1 i) (not (<= m (select a i1)))) fail)) + +(query fail) diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index 721ea9cb5..6fc407adb 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -1250,7 +1250,35 @@ namespace ufo dagVisit (fn, e1); return fn.found; } - + + struct FindArray : public std::unary_function + { + bool found; + + FindArray () : found (false) {} + + VisitAction operator() (Expr exp) + { + if (found) + { + return VisitAction::skipKids (); + } + else if (bind::isConst (exp)) + { + found = true; + return VisitAction::skipKids (); + } + return VisitAction::doKids (); + } + }; + + inline bool findArray (Expr e1) + { + FindArray fn; + dagVisit (fn, e1); + return fn.found; + } + inline static Expr simplifiedAnd (Expr a, Expr b){ ExprSet conjs; getConj(a, conjs); @@ -1322,6 +1350,10 @@ namespace ufo return bind::realConst(new_name); else if (bind::isBoolConst(var)) return bind::boolConst(new_name); + else if (bind::isConst (var)) + return bind::mkConst(new_name, mk ( + mk (new_name->getFactory()), + mk (new_name->getFactory()))); // GF: currently, only Arrays over Ints else return NULL; } @@ -1682,6 +1714,28 @@ namespace ufo return dagVisit (a, exp); } + struct RAVSUBEXPR: public std::unary_function + { + Expr s; + Expr t; + Expr p; + + RAVSUBEXPR (Expr _s, Expr _t, Expr _p) : s(_s), t(_t), p(_p) {} + VisitAction operator() (Expr exp) const + { + return exp == s ? + VisitAction::changeTo (replaceAll(exp, t, p)) : + VisitAction::doKids (); + } + }; + + // -- replace all occurrences of t by p in a subexpression s of exp + inline Expr replaceInSubexpr (Expr exp, Expr s, Expr t, Expr p) + { + RAVSUBEXPR rav(s, t, p); + return dagVisit (rav, exp); + } + struct NegAndRewriter { NegAndRewriter () {}; @@ -2071,6 +2125,41 @@ namespace ufo } } + inline static void normalizeSelects(Expr& body) + { + ExprVector se; + filter (body, bind::IsSelect (), inserter(se, se.begin())); + for (auto & s : se) + { + if (!bind::isIntConst(s->right())) + { + Expr var_it = bind::intConst(mkTerm ("it_" + lexical_cast(&s), body->getFactory())); + body = mk(replaceInSubexpr(body, s, s->right(), var_it), mk(s->right(), var_it)); + } + } + } + + inline static void uniqueizeSelects(Expr& body) + { + ExprVector se; + filter (body, bind::IsSelect (), inserter(se, se.begin())); + if (se.size() < 2) return; + + ExprSet seenIterators; + for (auto & s : se) + { + if (find(seenIterators.begin(), seenIterators.end(), s->right()) == seenIterators.end()) + { + seenIterators.insert(s->right()); + } + else + { + Expr var_it = bind::intConst(mkTerm ("it_" + lexical_cast(&s), body->getFactory())); + body = mk(replaceInSubexpr(body, s, s->right(), var_it), mk(s->right(), var_it)); + } + } + } + inline static bool isSymmetric (Expr exp) { return isOpX(exp); diff --git a/include/deep/BndExpl.hpp b/include/deep/BndExpl.hpp index b28659c3b..82fc8b1ce 100644 --- a/include/deep/BndExpl.hpp +++ b/include/deep/BndExpl.hpp @@ -81,15 +81,19 @@ namespace ufo Expr pref = toExpr(pr); - ExprSet quantified; - filter (pref, bind::IsConst(), inserter (quantified, quantified.begin ())); - for (auto & a : bindVars.back()) quantified.erase(a); - - if (quantified.size() > 0) + if (!ruleManager.hasArrays && !findNonlin(pref) && + !containsOp(pref) && !containsOp(pref)) // current limitations { - AeValSolver ae(mk(m_efac), pref, quantified); - ae.solve(); - pref = ae.getValidSubset(); + ExprSet quantified; + filter (pref, bind::IsConst(), inserter (quantified, quantified.begin ())); + for (auto & a : bindVars.back()) quantified.erase(a); + + if (quantified.size() > 0) + { + AeValSolver ae(mk(m_efac), pref, quantified); + ae.solve(); + pref = ae.getValidSubset(); + } } return replaceAll(pref, bindVars.back(), ruleManager.chcs[ruleManager.cycles[num][0]].srcVars); @@ -175,7 +179,6 @@ namespace ufo for (auto &a : traces) { -// for (auto &b : a) outs() << " -> " << * ruleManager.chcs[b].dstRelation; outs() << "\n"; num_traces++; unsat = !u.isSat(toExpr(a)); if (!unsat) break; diff --git a/include/deep/Horn.hpp b/include/deep/Horn.hpp index e195c55e2..d4e838eca 100755 --- a/include/deep/Horn.hpp +++ b/include/deep/Horn.hpp @@ -68,7 +68,7 @@ namespace ufo { private: set indeces; - string varname = " $_"; + string varname = "_FH_"; public: @@ -84,6 +84,9 @@ namespace ufo map> outgs; vector> prefixes; // for cycles vector> cycles; + bool hasArrays = false; + map arrRangeMap; // created only from queries (currently) + map arrIterMap; // created only from queries (currently) CHCs(ExprFactory &efac, EZ3 &z3) : m_efac(efac), m_z3(z3) {}; @@ -151,7 +154,12 @@ namespace ufo var = bind::realConst(new_name); else if (isOpX (a->arg(i))) var = bind::boolConst(new_name); - + else if (isOpX (a->arg(i))) // GF: currently support only arrays over Ints + { + var = bind::mkConst(new_name, mk + (mk (m_efac), mk (m_efac))); + hasArrays = true; + } invVars[a->arg(0)].push_back(var); } } @@ -170,7 +178,6 @@ namespace ufo chcs.push_back(HornRuleExt()); HornRuleExt& hr = chcs.back(); Expr rule = r; - while (isOpX(r)) { toReplace = true; @@ -279,12 +286,17 @@ namespace ufo hr.assignVarsAndRewrite (origSrcSymbs, invVars[hr.srcRelation], origDstSymbs, invVars[hr.dstRelation]); hr.body = simpleQE(hr.body, hr.locVars); + if (hasArrays) + { + normalizeSelects(hr.body); +// uniqueizeSelects(hr.body); // maybe will be needed some time later? + } } // remove useless rules - failShrink(failDecl); - for (auto rit = indeces.rbegin(); rit != indeces.rend(); ++rit) - chcs.erase(chcs.begin() + *rit); + if (failShrink(failDecl)) + for (auto rit = indeces.rbegin(); rit != indeces.rend(); ++rit) + chcs.erase(chcs.begin() + *rit); indeces.clear(); chcSliceBwd(failDecl); @@ -298,8 +310,10 @@ namespace ufo wtoSort(); } - void failShrink (Expr dstRel) + bool failShrink (Expr dstRel) { + if (hasArrays) return false; // current limitations + for (int i = 0; i < chcs.size(); i++) { if (chcs[i].dstRelation != dstRel) continue; @@ -309,6 +323,9 @@ namespace ufo quantified.insert(chcs[i].locVars.begin(), chcs[i].locVars.end()); Expr tmp = chcs[i].body; + // current limitations + if (findNonlin(tmp) || containsOp(tmp) || containsOp(tmp)) return false; + if (quantified.size() > 0) { AeValSolver ae(mk(m_efac), tmp, quantified); @@ -320,7 +337,7 @@ namespace ufo { failShrink(chcs[i].srcRelation); indeces.insert(i); - return; + return true; } } for (int i = 0; i < chcs.size(); i++) @@ -331,6 +348,7 @@ namespace ufo chcs[i].dstRelation = failDecl; } } + return true; } void chcSliceBwd (Expr dstRel) diff --git a/include/deep/RndLearner.hpp b/include/deep/RndLearner.hpp index 2c0aa6d70..e15cfec3b 100644 --- a/include/deep/RndLearner.hpp +++ b/include/deep/RndLearner.hpp @@ -32,6 +32,11 @@ namespace ufo vector> invarVars; + // for arrays + vector arrCands; + vector arrSelects; + vector arrIterRanges; + int invNumber; int numOfSMTChecks; @@ -458,35 +463,36 @@ namespace ufo if (sf.addVar(var)) invarVars[invNumber][i] = var; } + arrCands.push_back(ExprSet()); + arrSelects.push_back(ExprSet()); + arrIterRanges.push_back(ExprSet()); + invNumber++; } - void doSeedMining(Expr invRel, ExprSet& cands, bool analyzecode = true) + void doSeedMining(Expr invRel, ExprSet& cands, bool analizeCode = true) { vector css; set progConstsTmp; set progConsts; set intCoefs; - + int ind = getVarIndex(invRel, decls); SamplFactory& sf = sfs[ind].back(); - // init boolean combinations quickly - sf.bf.initialize(); - - bool analyzedExtras = false; + bool analizedExtras = false; // analize each rule separately: for (auto &hr : ruleManager.chcs) { if (hr.dstRelation != invRel && hr.srcRelation != invRel) continue; css.push_back(SeedMiner(hr, invRel, invarVars[ind], sf.lf.nonlinVars)); - if (analyzecode) css.back().analyzeCode(); + if (analizeCode) css.back().analizeCode(); - if (!analyzedExtras && hr.srcRelation == invRel) + if (!analizedExtras && hr.srcRelation == invRel) { - css.back().analyzeExtras (cands); - analyzedExtras = true; + css.back().analizeExtras (cands); + analizedExtras = true; } // convert intConsts to progConsts and add additive inverses (if applicable): @@ -540,7 +546,7 @@ namespace ufo sf.lf.addConst(min); } - sf.lf.initialize(); + sf.initialize(arrCands[ind], arrSelects[ind], arrIterRanges[ind]); ExprSet allCands; for (auto &cs : css) @@ -700,6 +706,11 @@ namespace ufo std::srand(std::time(0)); ExprSet itpCands; + if (ruleManager.hasArrays) + { + outs () << "Arrays are not supported in this mode\n"; + exit(0); + } if (ruleManager.decls.size() > 1) { outs () << "WARNING: learning multiple invariants is currently unstable\n" diff --git a/include/deep/RndLearnerV2.hpp b/include/deep/RndLearnerV2.hpp index 7122bbb16..bb5a0b1fe 100644 --- a/include/deep/RndLearnerV2.hpp +++ b/include/deep/RndLearnerV2.hpp @@ -45,7 +45,7 @@ namespace ufo { if (bind::isBoolConst(v)) eqs.push_back(mk(v, mk(m_efac))); - else + else if (bind::isIntConst(v)) eqs.push_back(mk(v, mkTerm (mpz_class (guessUniformly (1000)-500), m_efac))); } } @@ -345,6 +345,11 @@ namespace ufo std::srand(std::time(0)); + if (ruleManager.hasArrays) + { + outs () << "Arrays are not supported in this mode\n"; + exit(0); + } if (ruleManager.decls.size() > 1) { outs() << "WARNING: learning multiple invariants is currently unsupported in --v2.\n" diff --git a/include/deep/RndLearnerV3.hpp b/include/deep/RndLearnerV3.hpp index fe13196e1..fe512272d 100644 --- a/include/deep/RndLearnerV3.hpp +++ b/include/deep/RndLearnerV3.hpp @@ -234,6 +234,7 @@ namespace ufo SamplFactory& sf = sfs[invNum].back(); Expr cand = sf.getFreshCandidate(); if (cand == NULL) continue; +// outs () << " - - - sampled cand: #" << i << ": " << *cand << "\n"; if (!addCandidate(invNum, cand)) continue; if (checkCand(invNum)) @@ -305,6 +306,18 @@ namespace ufo return true; } + bool hasQuantifiedCands(map& cands) + { + for (auto & a : cands) + { + for (auto & b : a.second) + { + if (isOpX(b)) return true; + } + } + return false; + } + bool multiHoudini(vector worklist, bool recur = true) { if (!anyProgress(worklist)) return false; @@ -322,7 +335,7 @@ namespace ufo bool res2 = true; int ind = getVarIndex(hr.dstRelation, decls); Expr model = getModel(hr.dstVars); - if (model == NULL) + if (model == NULL || hasQuantifiedCands(candidatesTmp)) { // something went wrong with z3. do aggressive weakening (TODO: try bruteforce): candidatesTmp[ind].clear(); @@ -331,7 +344,6 @@ namespace ufo else { ExprVector& ev = candidatesTmp[ind]; - ExprVector invVars; for (auto & a : invarVars[ind]) invVars.push_back(a.second); SamplFactory& sf = sfs[ind].back(); @@ -379,21 +391,29 @@ namespace ufo int ind = getVarIndex(invRel, decls); SamplFactory& sf = sfs[ind].back(); ExprSet candsFromCode; - bool analyzedExtras = false; + bool analizedExtras = false; bool isFalse = false; for (auto &hr : ruleManager.chcs) { if (hr.dstRelation != invRel && hr.srcRelation != invRel) continue; SeedMiner sm (hr, invRel, invarVars[ind], sf.lf.nonlinVars); - if (analizeCode) sm.analyzeCode(); + if (analizeCode) sm.analizeCode(); else sm.candidates.clear(); - if (!analyzedExtras && hr.srcRelation == invRel) + if (!analizedExtras && hr.srcRelation == invRel) { - sm.analyzeExtras (cands[invRel]); - analyzedExtras = true; + sm.analizeExtras (cands[invRel]); + analizedExtras = true; } for (auto &cand : sm.candidates) candsFromCode.insert(cand); + + // for arrays (currently, use only query) + if (analizeCode && hr.isQuery && !sm.arrIterRanges.empty()) + { + arrCands[ind] = sm.arrCands; + arrSelects[ind] = sm.arrSelects; + arrIterRanges[ind] = sm.arrIterRanges; + } } for (auto & cand : candsFromCode) @@ -419,7 +439,6 @@ namespace ufo bool anyProgress(vector worklist) { - bool res = false; for (int i = 0; i < invNumber; i++) { // simple check if there is a non-empty candidate @@ -427,11 +446,14 @@ namespace ufo { if (hr->srcRelation == decls[i] || hr->dstRelation == decls[i]) { - if (candidates[i].size() > 0) return true; + if (candidates[i].size() > 0) + { + return true; + } } } } - return res; + return false; } #ifdef HAVE_ARMADILLO @@ -504,23 +526,52 @@ namespace ufo { int ind = getVarIndex(hr.srcRelation, decls); SamplFactory& sf = sfs[ind].back(); - Expr lmApp = sf.getAllLemmas(); - if (annotations[ind].size() > 0) lmApp = mk(lmApp, conjoin(annotations[ind], m_efac)); - for (auto & v : invarVars[ind]) lmApp = replaceAll(lmApp, v.second, hr.srcVars[v.first]); - m_smt_solver.assertExpr(lmApp); + ExprSet lms = sf.learnedExprs; + for (auto & a : annotations[ind]) lms.insert(a); + for (auto a : lms) + { + for (auto & v : invarVars[ind]) a = replaceAll(a, v.second, hr.srcVars[v.first]); + if (isOpX(a)) + { + ExprVector varz; + for (int i = 0; i < a->arity() - 1; i++) + { + varz.push_back(bind::fapp(a->arg(i))); + } + m_smt_solver.assertForallExpr(varz, a); + } + else + { + m_smt_solver.assertExpr(a); + } + } } if (!hr.isQuery) { int ind = getVarIndex(hr.dstRelation, decls); SamplFactory& sf = sfs[ind].back(); - Expr lmApp = sf.getAllLemmas(); - if (annotations[ind].size() > 0) lmApp = mk(lmApp, conjoin(annotations[ind], m_efac)); - for (auto & v : invarVars[ind]) lmApp = replaceAll(lmApp, v.second, hr.dstVars[v.first]); - m_smt_solver.assertExpr(mk(lmApp)); + ExprSet lms = sf.learnedExprs; + ExprSet negged; + for (auto & a : annotations[ind]) lms.insert(a); + for (auto a : lms) + { + for (auto & v : invarVars[ind]) a = replaceAll(a, v.second, hr.dstVars[v.first]); + if (isOpX(a)) + { + Expr b = a->arg(a->arity() - 1); + negged.insert(mk(b)); + } + else + { + negged.insert(mk(a)); + } + } + m_smt_solver.assertExpr(disjoin(negged, m_efac)); } - return !m_smt_solver.solve (); + bool res = !m_smt_solver.solve (); + return res; } }; @@ -533,6 +584,12 @@ namespace ufo ruleManager.parse(smt); BndExpl bnd(ruleManager); + if (ruleManager.hasArrays && ruleManager.decls.size() > 1) + { + outs () << "Systems with arrays and multiple invariants are not supported\n"; + exit(0); + } + if (!ruleManager.hasCycles()) { bnd.exploreTraces(1, ruleManager.chcs.size(), true); diff --git a/include/sampl/ArrCom.hpp b/include/sampl/ArrCom.hpp new file mode 100644 index 000000000..ebdcb61a4 --- /dev/null +++ b/include/sampl/ArrCom.hpp @@ -0,0 +1,114 @@ +#ifndef ARRCOM__HPP__ +#define ARRCOM__HPP__ + +#include "deep/Distribution.hpp" +#include "ae/ExprSimpl.hpp" +#include "LinCom.hpp" + +using namespace std; +using namespace boost; + +namespace ufo +{ + class ARRfactory + { + private: + + ExprFactory &m_efac; + ExprVector vars; + ExprVector forall_args; + LAfactory preFac; + LAfactory postFac; + Expr pre; + + public: + + ARRfactory(ExprFactory &_efac, bool _false) : + m_efac(_efac), preFac(_efac, false), postFac(_efac, false) {}; + + void addVar(Expr var) + { + vars.push_back(var); // currently, not used. TODO: at least some sanity checks later + } + + void initializeLAfactory (LAfactory& lf, ExprSet& cands, ExprVector& intVars, int eps) + { + set arrConsts; + set arrCoefs; + + for (auto & a : cands) + { + if (getLinCombCoefs(a, arrCoefs)) + { + getLinCombConsts(a, arrConsts); + } + } + + for (auto & a : intVars) lf.addVar(a); + for (auto & a : arrConsts) lf.addConst(a); + for (auto & a : arrCoefs) lf.addIntCoef(a); + + lf.initialize(); + set orArities; + orArities.insert(1); // hardcode for now + lf.initDensities(orArities); + + for (auto & a : cands) + { + LAdisj b; + lf.exprToLAdisj(a, b); + lf.calculateStatistics(b, 1, 0, 0); // hardcode for now + } + lf.stabilizeDensities(1, eps, 1); // hardcode for now + } + + void initialize(ExprVector& intVars, ExprSet& arrCands, ExprSet& arrSelects, ExprSet& arrRange) + { + for (auto & a : arrSelects) + { + postFac.addVar(a); + if (find(preFac.getVars().begin(), + preFac.getVars().end(), a->right()) == preFac.getVars().end()) + { + postFac.addVar(a->right()); + preFac.addVar(a->right()); + forall_args.push_back(a->right()->left()); + } + } + + pre = mk(m_efac); + for (auto & a : arrRange) + { + if (!emptyIntersect(a, preFac.getVars())) + pre = mk(pre, a); + } + + initializeLAfactory(preFac, arrRange, intVars, 1); + initializeLAfactory(postFac, arrCands, intVars, 0); + } + + Expr guessTerm () + { + LAdisj expr1; + LAdisj expr2; + // GF: fixed guesses, currently + // TODO: 1) pruning based on dependencies of pre and expr1, + // 2) pruning based on dependencies of expr1 and expr2, + // 3) conjunctive and disjunctive expr1 and expr2 + if (preFac.guessTerm(expr1, 1) && postFac.guessTerm(expr2, 1)) + { + ExprVector args = forall_args; + args.push_back(mk(mk(pre, preFac.toExpr(expr1)), postFac.toExpr(expr2))); + Expr forallExpr = mknary (args); + return forallExpr; + } + else + { + return NULL; + } + } + }; +} + + +#endif diff --git a/include/sampl/Sampl.hpp b/include/sampl/Sampl.hpp index a9cc8142b..bf287725b 100644 --- a/include/sampl/Sampl.hpp +++ b/include/sampl/Sampl.hpp @@ -5,6 +5,7 @@ #include "ae/ExprSimpl.hpp" #include "LinCom.hpp" #include "BoolCom.hpp" +#include "ArrCom.hpp" using namespace std; using namespace boost; @@ -39,16 +40,18 @@ namespace ufo density hasBooleanComb; density orAritiesDensity; + bool hasArrays = false; public: LAfactory lf; Bfactory bf; + ARRfactory af; ExprSet learnedExprs; SamplFactory(ExprFactory &_efac, bool aggp) : - m_efac(_efac), lf(_efac, aggp), bf(_efac) {} + m_efac(_efac), lf(_efac, aggp), bf(_efac), af(_efac, aggp) {} Expr getAllLemmas() { @@ -68,9 +71,22 @@ namespace ufo lf.addVar(var); added = true; } + else if (bind::isConst (var)) + { + af.addVar(var); + added = true; + hasArrays = true; + } return added; } + void initialize(ExprSet& arrCands, ExprSet& arrSelects, ExprSet& arrRange) + { + bf.initialize(); + lf.initialize(); + af.initialize(lf.getVars(), arrCands, arrSelects, arrRange); + } + Sampl& exprToSampl(Expr ex) { samples.push_back(Sampl()); @@ -166,6 +182,10 @@ namespace ufo Expr getFreshCandidate() { + // for now, if a CHC system has arrays, we try candidates only with array + // in the future, we will need arithmetic candidates as well + if (hasArrays) return af.guessTerm(); + int arity = chooseByWeight(orAritiesDensity); int hasBool = chooseByWeight(hasBooleanComb); int hasLin = arity - hasBool; diff --git a/include/sampl/SeedMiner.hpp b/include/sampl/SeedMiner.hpp index e8061c5f1..f946cc640 100644 --- a/include/sampl/SeedMiner.hpp +++ b/include/sampl/SeedMiner.hpp @@ -13,8 +13,12 @@ namespace ufo { public: - ExprSet candidates; + // for arrays + ExprSet arrCands; + ExprSet arrSelects; + ExprSet arrIterRanges; + ExprSet candidates; set intConsts; set intCoefs; @@ -28,6 +32,57 @@ namespace ufo SeedMiner(HornRuleExt& r, Expr& d, map& v, ExprMap& e) : hr(r), invRel(d), invVars(v), extraVars(e), m_efac(d->getFactory()) {}; + void getSelectTmpl (Expr tmpl) + { + ExprSet dsjs; + ExprSet tmp; + getDisj(tmpl, dsjs); + ExprVector invAndIterVarsAll; + for (auto & a : invVars) invAndIterVarsAll.push_back(a.second); + + for (auto dsj : dsjs) + { + ExprSet se; + filter (dsj, bind::IsSelect (), inserter(se, se.begin())); + if (se.size() == 0) + { + tmp.insert(mkNeg(dsj)); + continue; + } + + ExprVector invAndIterVars; + for (auto & a : invVars) invAndIterVars.push_back(a.second); + + for (auto & a : se) + { + arrSelects.insert(a); + invAndIterVars.push_back(a); + assert (bind::isIntConst(a->right())); // complex indexes like A[i+1] are supposed to be rewritten in Horn.hpp + + if (find(invAndIterVars.begin(), invAndIterVars.end(), + a->right()) == invAndIterVars.end()) + invAndIterVars.push_back (a->right()); + + if (find(invAndIterVarsAll.begin(), invAndIterVarsAll.end(), + a->right()) == invAndIterVarsAll.end()) + invAndIterVarsAll.push_back(a->right()); + } + + ExprSet arrCandsTmp; + getConj(convertToGEandGT(dsj), arrCandsTmp); + for (auto & a : arrCandsTmp) arrCands.insert(normalizeDisj(a, invAndIterVars)); + } + + if (arrCands.size() == 0) return; + + for (auto & e : tmp) + { + ExprSet rangeTmp; + getConj(convertToGEandGT(e), rangeTmp); + for (auto & a : rangeTmp) arrIterRanges.insert(normalizeDisj(a, invAndIterVarsAll)); + } + } + void addSeedHlp(Expr tmpl, ExprVector& vars, ExprSet& actualVars) { ExprSet dsjs; @@ -42,7 +97,7 @@ namespace ufo for (auto & a : vrs) { if (std::find(std::begin(vars), std::end (vars), a) - == std::end(vars)) {found = false; break; } + == std::end(vars)) { found = false; break; } } if (found) newDsjs.insert(dsj); } @@ -170,17 +225,17 @@ namespace ufo obtainSeeds(e); } - void analyzeExtras(ExprSet& extra) + void analizeExtras(ExprSet& extra) { for (auto &cnj : extra) coreProcess(propagateEqualities(cnj)); } - void analyzeCode() + void analizeCode() { if (false) // printing only { - outs() << "\nAnalize CHC:\n"; + outs() << "Analize CHC: " << *hr.srcRelation << " -> " << *hr.dstRelation << ":\n"; outs() << "src vars: "; for (int i = 0; i < hr.srcVars.size(); i++) outs() << *hr.srcVars[i] << ", "; outs() << "\n"; @@ -232,6 +287,7 @@ namespace ufo { Expr massaged = propagateEqualities(body); coreProcess(mkNeg(massaged)); + getSelectTmpl(mkNeg(hr.body)); } else if (hr.isFact) { diff --git a/include/ufo/Expr.hpp b/include/ufo/Expr.hpp index 8baaa44fd..fd2a72cde 100644 --- a/include/ufo/Expr.hpp +++ b/include/ufo/Expr.hpp @@ -2416,9 +2416,18 @@ namespace expr public: bool operator () (Expr e) { - return isIntVar(e) || isRealVar(e) || isBoolVar(e); + return isIntVar(e) || isRealVar(e) || isBoolVar(e) || isVar (e); } }; + + class IsSelect : public std::unary_function + { + public: + bool operator () (Expr e) + { + return isOpX(exp)) + { + terms.insert(exp->arg(1)); + } + return VisitAction::doKids (); + } + }; + + inline void getArrAccessExprs (Expr exp, ExprSet& terms) + { + ArrAccessFilter aa (terms); + dagVisit (aa, exp); + } + template static Expr simpleQE(Expr exp, Range& quantified, bool strict = false) { // rewrite just equalities diff --git a/include/deep/RndLearnerV3.hpp b/include/deep/RndLearnerV3.hpp index de0b78e80..f6fe06c5b 100644 --- a/include/deep/RndLearnerV3.hpp +++ b/include/deep/RndLearnerV3.hpp @@ -267,32 +267,107 @@ namespace ufo return propagate(invNum, conjoin(candidates[invNum], m_efac), false); } + // a simple method to generate properties of a larger Array range, given already proven ranges + void generalizeArrInvars (SamplFactory& sf) + { + if (sf.learnedExprs.size() > 1) + { + ExprVector its; + ExprVector posts; + ExprVector pres; + map>> tmp; + Expr tmpVar = bind::intConst(mkTerm ("_tmp_var", m_efac)); + Expr arrVar = NULL; + for (auto & a : sf.learnedExprs) + { + if (!isOpX(a)) continue; + if (!isOpX(a->last())) continue; + ExprVector se; + filter (a->last()->last(), bind::IsSelect (), inserter(se, se.begin())); + if (se.size() == 1) + { + its.push_back(se[0]->right()); + pres.push_back(a->last()->left()); + posts.push_back(replaceAll(a->last()->right(), se[0], tmpVar)); + tmp[a->last()->left()].push_back(make_pair(se[0]->right(), replaceAll(a->last()->right(), se[0], tmpVar))); + if (arrVar != NULL && arrVar != se[0]->left()) continue; + arrVar = se[0]->left(); + } + } + if (tmp.size() > 0) + { + for (auto & a : tmp) + { + Expr distSelect = NULL; + bool toContinue = false; + for (auto & b : a.second) + { + toContinue = toContinue || (distSelect != NULL && distSelect != b.first); + distSelect = b.first; + } + + if (toContinue) + { + Expr disjIts = mk(m_efac); + Expr disjPosts = mk(m_efac); + Expr tmpIt = bind::intConst(mkTerm ("_tmp_it", m_efac)); + for (auto & b : a.second) + { + disjIts = mk(disjIts, mk(tmpIt, b.first)); + disjPosts = mk(disjPosts, b.second); + } + ExprSet elementaryIts; + filter (disjIts, bind::IsConst (), inserter(elementaryIts, elementaryIts.begin())); + elementaryIts.erase(tmpIt); + if (elementaryIts.size() == 1) + { + AeValSolver ae(mk(m_efac), mk(disjIts, a.first), elementaryIts); + if (ae.solve()) + { + ExprVector args; + Expr it = *elementaryIts.begin(); + args.push_back(it->left()); + Expr newPre = replaceAll(ae.getValidSubset(), tmpIt, it); + args.push_back(mk(newPre, replaceAll(disjPosts, tmpVar, mk(a.second, e); + Expr newSel = replaceAll(sel, iterators[ind], tmpArrIter); + arrSelects[ind].insert(newSel); + // currently, a hack. TODO: automatic mining these predicates from CHCs + arrCands[ind].insert(mk(mk(mkTerm (mpz_class (1), m_efac), newSel), mkTerm (mpz_class (0), m_efac))); + } + } } } @@ -613,7 +731,7 @@ namespace ufo { varz.push_back(bind::fapp(a->arg(i))); } - m_smt_solver.assertForallExpr(varz, a); + m_smt_solver.assertForallExpr(varz, a->last()); } else { @@ -632,21 +750,11 @@ namespace ufo for (auto a : lms) { for (auto & v : invarVars[ind]) a = replaceAll(a, v.second, hr.dstVars[v.first]); - if (isOpX(a)) - { - Expr b = a->arg(a->arity() - 1); - negged.insert(mk(b)); - } - else - { - negged.insert(mk(a)); - } + negged.insert(mkNeg(a)); } m_smt_solver.assertExpr(disjoin(negged, m_efac)); } - - bool res = !m_smt_solver.solve (); - return res; + return !m_smt_solver.solve (); } void initArrayStuff(BndExpl& bnd) diff --git a/include/sampl/ArrCom.hpp b/include/sampl/ArrCom.hpp index ffd6f613d..198cf3ecb 100644 --- a/include/sampl/ArrCom.hpp +++ b/include/sampl/ArrCom.hpp @@ -67,12 +67,13 @@ namespace ufo for (auto & a : arrSelects) { postFac.addVar(a); - if (find(preFac.getVars().begin(), - preFac.getVars().end(), a->right()) == preFac.getVars().end()) + Expr it = a->right(); + if (bind::isIntConst(it) && + find(preFac.getVars().begin(), preFac.getVars().end(), it) == preFac.getVars().end()) { - postFac.addVar(a->right()); - preFac.addVar(a->right()); - forall_args.push_back(a->right()->left()); + postFac.addVar(it); + preFac.addVar(it); + forall_args.push_back(it->left()); } } diff --git a/include/sampl/SeedMiner.hpp b/include/sampl/SeedMiner.hpp index f946cc640..4c7246fa1 100644 --- a/include/sampl/SeedMiner.hpp +++ b/include/sampl/SeedMiner.hpp @@ -17,6 +17,7 @@ namespace ufo ExprSet arrCands; ExprSet arrSelects; ExprSet arrIterRanges; + ExprSet arrAccessVars; ExprSet candidates; set intConsts; @@ -59,6 +60,7 @@ namespace ufo invAndIterVars.push_back(a); assert (bind::isIntConst(a->right())); // complex indexes like A[i+1] are supposed to be rewritten in Horn.hpp + arrAccessVars.insert(a->right()); if (find(invAndIterVars.begin(), invAndIterVars.end(), a->right()) == invAndIterVars.end()) invAndIterVars.push_back (a->right()); @@ -231,6 +233,11 @@ namespace ufo coreProcess(propagateEqualities(cnj)); } + void analizeExtras(Expr extra) + { + coreProcess(propagateEqualities(extra)); + } + void analizeCode() { if (false) // printing only From 2077319f62a25e40785cfa27d191149dc01e4222 Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Tue, 11 Sep 2018 23:23:24 -0400 Subject: [PATCH 119/236] support for disjunctive array invariants --- bench_horn/array_init_disj.smt2 | 16 ++++++++++++++++ include/deep/RndLearnerV3.hpp | 2 +- include/sampl/ArrCom.hpp | 19 ++++++++++++++----- 3 files changed, 31 insertions(+), 6 deletions(-) create mode 100644 bench_horn/array_init_disj.smt2 diff --git a/bench_horn/array_init_disj.smt2 b/bench_horn/array_init_disj.smt2 new file mode 100644 index 000000000..d3a8e7427 --- /dev/null +++ b/bench_horn/array_init_disj.smt2 @@ -0,0 +1,16 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv a 0 N)) + +(rule (=> (and (inv a i N) (< i N) (or (= (store a i 0) a1) (= (store a i 2) a1)) (= i1 (+ i 1))) (inv a1 i1 N))) + +(rule (=> (and (inv a i N) (>= i N) (< 0 i1) (< i1 N) (= (select a i1) 1)) fail)) + +(query fail) diff --git a/include/deep/RndLearnerV3.hpp b/include/deep/RndLearnerV3.hpp index f6fe06c5b..b81d25bfa 100644 --- a/include/deep/RndLearnerV3.hpp +++ b/include/deep/RndLearnerV3.hpp @@ -383,7 +383,7 @@ namespace ufo candidates.clear(); SamplFactory& sf = sfs[invNum].back(); Expr cand = sf.getFreshCandidate(i < 25); // try simple array candidates first - if (isOpX(cand) && isOpX(cand->last())) + if (cand != NULL && isOpX(cand) && isOpX(cand->last())) { if (!u.isSat(cand->last()->left())) cand = NULL; } diff --git a/include/sampl/ArrCom.hpp b/include/sampl/ArrCom.hpp index 198cf3ecb..6063d1f12 100644 --- a/include/sampl/ArrCom.hpp +++ b/include/sampl/ArrCom.hpp @@ -20,6 +20,7 @@ namespace ufo LAfactory preFac; LAfactory postFac; Expr pre; + density postOrAritiesDensity; public: @@ -50,16 +51,22 @@ namespace ufo lf.initialize(); set orArities; - orArities.insert(1); // hardcode for now + for (auto & a : cands) + { + int ar = isOpX(a) ? a->arity() : 1; + postOrAritiesDensity[ar] ++; + orArities.insert(ar); + } lf.initDensities(orArities); for (auto & a : cands) { LAdisj b; lf.exprToLAdisj(a, b); - lf.calculateStatistics(b, 1, 0, 0); // hardcode for now + lf.calculateStatistics(b, b.arity, 0, 0); } - lf.stabilizeDensities(1, eps, 1); // hardcode for now + + for (auto & ar : orArities) lf.stabilizeDensities(ar, eps, 1); } void initialize(ExprVector& intVars, ExprSet& arrCands, ExprSet& arrSelects, ExprSet& arrRange) @@ -96,7 +103,8 @@ namespace ufo // TODO: 1) pruning based on dependencies of pre and expr1, // 2) pruning based on dependencies of expr1 and expr2, // 3) conjunctive and disjunctive expr1 and expr2 - if (preFac.guessTerm(expr1, 1) && postFac.guessTerm(expr2, 1)) + int arity = chooseByWeight(postOrAritiesDensity); + if (preFac.guessTerm(expr1, 1) && postFac.guessTerm(expr2, arity)) { ExprVector args = forall_args; args.push_back(mk(mk(pre, preFac.toExpr(expr1)), postFac.toExpr(expr2))); @@ -112,7 +120,8 @@ namespace ufo Expr guessSimplTerm () { LAdisj expr2; - if (postFac.guessTerm(expr2, 1)) + int arity = chooseByWeight(postOrAritiesDensity); + if (postFac.guessTerm(expr2, arity)) { ExprVector args = forall_args; args.push_back(mk(pre, postFac.toExpr(expr2))); From a4f1224d39f502c88b737bf81ebc9cc482b61ad3 Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Fri, 14 Sep 2018 10:55:49 -0400 Subject: [PATCH 120/236] more accurate seed mining and candidate manipulation for array invariants --- bench_horn/array_init_ite_jump.smt2 | 21 +++ bench_horn/array_init_ite_jump_two.smt2 | 23 ++++ bench_horn/array_tiling_rew.smt2 | 33 +++++ bench_horn/array_tiling_rewnif.smt2 | 30 +++++ bench_horn/array_tiling_rewnifrev.smt2 | 30 +++++ bench_horn/array_tiling_rewnifrev2.smt2 | 30 +++++ bench_horn/array_tiling_rewrev.smt2 | 33 +++++ include/ae/ExprSimpl.hpp | 172 +++++++++++++++++++----- include/deep/Horn.hpp | 2 +- include/deep/RndLearnerV3.hpp | 117 ++++++++-------- include/sampl/ArrCom.hpp | 19 ++- include/sampl/SeedMiner.hpp | 103 ++++++++++---- 12 files changed, 478 insertions(+), 135 deletions(-) create mode 100644 bench_horn/array_init_ite_jump.smt2 create mode 100644 bench_horn/array_init_ite_jump_two.smt2 create mode 100644 bench_horn/array_tiling_rew.smt2 create mode 100644 bench_horn/array_tiling_rewnif.smt2 create mode 100644 bench_horn/array_tiling_rewnifrev.smt2 create mode 100644 bench_horn/array_tiling_rewnifrev2.smt2 create mode 100644 bench_horn/array_tiling_rewrev.smt2 diff --git a/bench_horn/array_init_ite_jump.smt2 b/bench_horn/array_init_ite_jump.smt2 new file mode 100644 index 000000000..637e7b8fe --- /dev/null +++ b/bench_horn/array_init_ite_jump.smt2 @@ -0,0 +1,21 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var a2 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) +(declare-var val Int) + +(declare-rel inv ((Array Int Int) Int Int Int)) +(declare-rel fail ()) + +(rule (inv a 0 7 N)) + +(rule (=> (and (inv a i val N) (<= i N) + (= a1 (ite (= val i) (store a i 0) (store a i i))) + (= i1 (+ i 1))) +(inv a1 i1 val N))) + +(rule (=> (and (inv a i val N) (> i N) (<= 0 i1) (<= i1 N) (= (select a i1) val)) fail)) + +(query fail) diff --git a/bench_horn/array_init_ite_jump_two.smt2 b/bench_horn/array_init_ite_jump_two.smt2 new file mode 100644 index 000000000..05ee4a993 --- /dev/null +++ b/bench_horn/array_init_ite_jump_two.smt2 @@ -0,0 +1,23 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var a2 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) +(declare-var val1 Int) +(declare-var val2 Int) + +(declare-rel inv ((Array Int Int) Int Int Int Int)) +(declare-rel fail ()) + +(rule (inv a 0 7 13 N)) + +(rule (=> (and (inv a i val1 val2 N) (<= i N) + (= a1 (ite (= val1 i) (store a i 0) (ite (= val2 i) (store a i 10) (store a i i)))) + (= i1 (+ i 1))) +(inv a1 i1 val1 val2 N))) + +(rule (=> (and (inv a i val1 val2 N) (> i N) (<= 0 i1) (<= i1 N) + (not (and (not (= (select a i1) val1)) (not (= (select a i1) val2))))) fail)) + +(query fail) diff --git a/bench_horn/array_tiling_rew.smt2 b/bench_horn/array_tiling_rew.smt2 new file mode 100644 index 000000000..aef2cce7d --- /dev/null +++ b/bench_horn/array_tiling_rew.smt2 @@ -0,0 +1,33 @@ +(declare-var S Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var a2 (Array Int Int)) +(declare-var val1 Int) +(declare-var val2 Int) +(declare-var low Int) + +(declare-rel inv ((Array Int Int) Int Int Int Int Int)) +(declare-rel fail ()) + +(rule (=> (and (> S 1) (= val1 0) (= val2 3) (= low 2) (= i 0)) + (inv a i S val1 val2 low))) + +(rule (=> (and + (inv a i S val1 val2 low) + (< i S) + (= i1 (+ i 1)) + (= a1 (ite (< (+ i 1) S) (store a (+ i 1) val1) a)) + (= a2 (store a1 i val2))) + (inv a2 i1 S val1 val2 low))) + +(rule (=> (and + (inv a i S val1 val2 low) + (not (< i S)) + (<= 0 i1) + (< i1 S) + (not (<= low (select a i1)))) + fail)) + +(query fail) diff --git a/bench_horn/array_tiling_rewnif.smt2 b/bench_horn/array_tiling_rewnif.smt2 new file mode 100644 index 000000000..d09d7b5cf --- /dev/null +++ b/bench_horn/array_tiling_rewnif.smt2 @@ -0,0 +1,30 @@ +(declare-var S Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var a2 (Array Int Int)) + +(declare-rel inv ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (=> (and (> S 1) (= i 0)) + (inv a i S))) + +(rule (=> (and + (inv a i S) + (< i S) + (= i1 (+ i 1)) + (= a1 (ite (< (+ i 1) S) (store a (+ i 1) i) a)) + (= a2 (store a1 i i))) + (inv a2 i1 S))) + +(rule (=> (and + (inv a i S) + (not (< i S)) + (<= 0 i1) + (< i1 S) + (not (<= i1 (select a i1)))) + fail)) + +(query fail) diff --git a/bench_horn/array_tiling_rewnifrev.smt2 b/bench_horn/array_tiling_rewnifrev.smt2 new file mode 100644 index 000000000..6d9ab6b63 --- /dev/null +++ b/bench_horn/array_tiling_rewnifrev.smt2 @@ -0,0 +1,30 @@ +(declare-var S Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var a2 (Array Int Int)) + +(declare-rel inv ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (=> (and (> S 1) (= i (- S 1))) + (inv a i S))) + +(rule (=> (and + (inv a i S) + (<= 0 i) + (= i1 (- i 1)) + (= a1 (ite (<= 0 (- i 1)) (store a (- i 1) (- i 2)) a)) + (= a2 (store a1 i i))) + (inv a2 i1 S))) + +(rule (=> (and + (inv a i S) + (not (<= 0 i)) + (<= 0 i1) + (< i1 S) + (not (<= i1 (select a i1)))) + fail)) + +(query fail) diff --git a/bench_horn/array_tiling_rewnifrev2.smt2 b/bench_horn/array_tiling_rewnifrev2.smt2 new file mode 100644 index 000000000..db9fdffaa --- /dev/null +++ b/bench_horn/array_tiling_rewnifrev2.smt2 @@ -0,0 +1,30 @@ +(declare-var S Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var a2 (Array Int Int)) + +(declare-rel inv ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (=> (and (> S 1) (= i (- S 2))) + (inv a i S))) + +(rule (=> (and + (inv a i S) + (<= 0 i) + (= i1 (- i 1)) + (= a1 (store a i i)) + (= a2 (store a1 (+ i 1) (+ i 1)))) + (inv a2 i1 S))) + +(rule (=> (and + (inv a i S) + (not (<= 0 i)) + (<= 0 i1) + (< i1 S) + (not (<= i1 (select a i1)))) + fail)) + +(query fail) diff --git a/bench_horn/array_tiling_rewrev.smt2 b/bench_horn/array_tiling_rewrev.smt2 new file mode 100644 index 000000000..d32a34ebb --- /dev/null +++ b/bench_horn/array_tiling_rewrev.smt2 @@ -0,0 +1,33 @@ +(declare-var S Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var a2 (Array Int Int)) +(declare-var val1 Int) +(declare-var val2 Int) +(declare-var low Int) + +(declare-rel inv ((Array Int Int) Int Int Int Int Int)) +(declare-rel fail ()) + +(rule (=> (and (> S 1) (= val1 7) (= val2 3) (= low 2) (= i (- S 2))) + (inv a i S val1 val2 low))) + +(rule (=> (and + (inv a i S val1 val2 low) + (<= -1 i) + (= i1 (- i 1)) + (= a1 (ite (<= 0 i) (store a i val1) a)) + (= a2 (store a1 (+ i 1) val2))) + (inv a2 i1 S val1 val2 low))) + +(rule (=> (and + (inv a i S val1 val2 low) + (not (<= -1 i)) + (<= 0 i1) + (< i1 S) + (not (<= low (select a i1)))) + fail)) + +(query fail) diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index 48f037e08..7c128978f 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -1550,7 +1550,6 @@ namespace ufo if (isOpX(rhs)) { - Expr iteCond = unfoldITE (rhs->arg(0)); Expr iteC1 = rhs->arg(1); Expr iteC2 = rhs->arg(2); @@ -1564,7 +1563,6 @@ namespace ufo // outs () << " [1b] ---> " << *term << "\n"; // outs () << " [1e] ---> " << *transformed << "\n\n"; return transformed; - } else if (isOpX(lhs)) { @@ -1666,8 +1664,18 @@ namespace ufo return transformed; } } + else if (isOpX(lhs)) + { + Expr arrVar = lhs->left(); + if (isOpX(arrVar)) + { + return unfoldITE (reBuildCmp(term, + mk(arrVar->left(), + mk(arrVar->right(), lhs->right(), lhs->last()), + mk(arrVar->last(), lhs->right(), lhs->last())), rhs)); + } + } } - return term; } @@ -1762,26 +1770,19 @@ namespace ufo } }; - struct ArrAccessFilter : public std::unary_function + template static void update_min_value(ExprMap& m, Expr key, Expr value, Range& quantified, ExprSet& newCnjs) { - ExprSet& terms; - - ArrAccessFilter (ExprSet& _terms): terms(_terms) {}; - - VisitAction operator() (Expr exp) + // just heuristic + if (m[key] == NULL) { - if (isOp(exp) || isOp(arrVar, indVar), valVar)); + return arrVar; + } + struct TransitionOverapprox { ExprVector& srcVars; ExprVector& dstVars; TransitionOverapprox (ExprVector& _srcVars, ExprVector& _dstVars): - srcVars(_srcVars), dstVars(_dstVars) {}; + srcVars(_srcVars), dstVars(_dstVars) {}; Expr operator() (Expr exp) { if (isOp(exp) && !containsOp(exp)) { + ExprSet tmp; + if (isOpX(exp->left())) + { + processNestedStores(exp->left(), tmp); + return conjoin(tmp, exp->getFactory()); + } + else if (isOpX(exp->right())) + { + processNestedStores(exp->right(), tmp); + return conjoin(tmp, exp->getFactory()); + } ExprVector av; filter (exp, bind::IsConst (), inserter(av, av.begin())); if (!emptyIntersect(av, srcVars) && !emptyIntersect(av, dstVars)) - return mk(exp->getFactory()); + return mk(exp->getFactory()); } - return exp; } }; @@ -2489,6 +2554,51 @@ namespace ufo return dagVisit (rw, exp); } + inline static Expr mergeIneqs (Expr e1, Expr e2) + { + if (isOpX(e1)) e1 = mkNeg(e1->last()); + if (isOpX(e2)) e2 = mkNeg(e2->last()); + + if (isOpX(e1) && isOpX(e2) && e1->right() == e2->left()) + return mk(e1->left(), e2->right()); + if (isOpX(e1) && isOpX(e2) && e1->right() == e2->left()) + return mk(e1->left(), e2->right()); + if (isOpX(e1) && isOpX(e2) && e1->right() == e2->left()) + return mk(e1->left(), e2->right()); + if (isOpX(e1) && isOpX(e2) && e1->right() == e2->left()) + return mk(e1->left(), e2->right()); + + if (isOpX(e1) && isOpX(e2) && e1->right() == e2->left()) + return mk(e1->left(), e2->right()); + if (isOpX(e1) && isOpX(e2) && e1->right() == e2->left()) + return mk(e1->left(), e2->right()); + if (isOpX(e1) && isOpX(e2) && e1->right() == e2->left()) + return mk(e1->left(), e2->right()); + if (isOpX(e1) && isOpX(e2) && e1->right() == e2->left()) + return mk(e1->left(), e2->right()); + + if (isOpX(e1) && isOpX(e2) && e1->right() == e2->right()) + return mk(e1->left(), e2->left()); + if (isOpX(e1) && isOpX(e2) && e1->right() == e2->right()) + return mk(e1->left(), e2->left()); + if (isOpX(e1) && isOpX(e2) && e1->right() == e2->right()) + return mk(e1->left(), e2->left()); + if (isOpX(e1) && isOpX(e2) && e1->right() == e2->right()) + return mk(e1->left(), e2->left()); + + if (isOpX(e1) && isOpX(e2) && e1->right() == e2->right()) + return mk(e1->left(), e2->left()); + if (isOpX(e1) && isOpX(e2) && e1->right() == e2->right()) + return mk(e1->left(), e2->left()); + if (isOpX(e1) && isOpX(e2) && e1->right() == e2->right()) + return mk(e1->left(), e2->left()); + if (isOpX(e1) && isOpX(e2) && e1->right() == e2->right()) + return mk(e1->left(), e2->left()); + + // TODO: support more cases + return NULL; + } + template static void computeTransitiveClosure(ExprSet& r, ExprSet& tr) { for (auto &a : r) diff --git a/include/deep/Horn.hpp b/include/deep/Horn.hpp index a0140f556..2ff5d9a8d 100755 --- a/include/deep/Horn.hpp +++ b/include/deep/Horn.hpp @@ -515,7 +515,7 @@ namespace ufo { ExprSet cnjs; ExprSet newCnjs; - getConj(hr->body, cnjs); + getConj(simpleQE(hr->body, hr->dstVars), cnjs); for (auto &a : cnjs) { if (emptyIntersect(a, hr->dstVars) && emptyIntersect(a, hr->locVars)) newCnjs.insert(a); diff --git a/include/deep/RndLearnerV3.hpp b/include/deep/RndLearnerV3.hpp index b81d25bfa..4a79175a7 100644 --- a/include/deep/RndLearnerV3.hpp +++ b/include/deep/RndLearnerV3.hpp @@ -171,20 +171,17 @@ namespace ufo ExprSet iterVars; getArrCandIters(invNum, iterVars); Expr precond = preconds[invNum]; - ExprSet cnjs; ExprSet newCnjs; getConj(cand->last()->left(), cnjs); - // TODO: support the case when precond has two or more conjuncts for (auto & a : iterVars) for (auto & b : cnjs) - if (u.isEquiv(replaceAll(b, a, iterators[invNum]), precond)) + if (u.implies(replaceAll(b, a, iterators[invNum]), precond)) newCnjs.insert(b); if (newCnjs.size() != 1) return cand; Expr preCand = *newCnjs.begin(); - cnjs.clear(); newCnjs.clear(); getConj(body, cnjs); @@ -194,21 +191,27 @@ namespace ufo Expr bodyRestr = conjoin(newCnjs, m_efac); - ExprSet qVars; - ExprSet vars1; - ExprSet vars2; - filter (preCand, bind::IsConst (), inserter(vars1, vars1.begin())); - filter (bodyRestr, bind::IsConst (), inserter(vars2, vars2.begin())); - - for (auto & v1 : vars1) - if (find(vars2.begin(), vars2.end(), v1) != vars2.end()) qVars.insert(v1); + Expr range = mergeIneqs(bodyRestr, preCand); + if (range == NULL) + { + ExprSet qVars; + ExprSet vars1; + ExprSet vars2; + filter (preCand, bind::IsConst (), inserter(vars1, vars1.begin())); + filter (bodyRestr, bind::IsConst (), inserter(vars2, vars2.begin())); - if (qVars.empty()) return cand; + for (auto & v1 : vars1) + if (find(vars2.begin(), vars2.end(), v1) != vars2.end()) qVars.insert(v1); - AeValSolver ae(mk(m_efac), mk(preCand, bodyRestr), qVars); - if (ae.solve()) - return replaceAll(cand, preCand, ae.getValidSubset()); + if (qVars.empty()) return cand; + AeValSolver ae(mk(m_efac), mk(preCand, bodyRestr), qVars); + if (ae.solve()) + { + range = ae.getValidSubset(); + } + } + cand = replaceAll(cand, preCand, range); return cand; } @@ -275,21 +278,23 @@ namespace ufo ExprVector its; ExprVector posts; ExprVector pres; - map>> tmp; + map tmp; Expr tmpVar = bind::intConst(mkTerm ("_tmp_var", m_efac)); Expr arrVar = NULL; for (auto & a : sf.learnedExprs) { if (!isOpX(a)) continue; - if (!isOpX(a->last())) continue; + Expr learnedQF = a->last(); + if (!isOpX(learnedQF)) continue; ExprVector se; - filter (a->last()->last(), bind::IsSelect (), inserter(se, se.begin())); + filter (learnedQF->last(), bind::IsSelect (), inserter(se, se.begin())); if (se.size() == 1) { its.push_back(se[0]->right()); - pres.push_back(a->last()->left()); - posts.push_back(replaceAll(a->last()->right(), se[0], tmpVar)); - tmp[a->last()->left()].push_back(make_pair(se[0]->right(), replaceAll(a->last()->right(), se[0], tmpVar))); + Expr postReplaced = replaceAll(learnedQF->right(), se[0], tmpVar); + pres.push_back(learnedQF->left()); + posts.push_back(postReplaced); + tmp[mk(learnedQF->left(), postReplaced)].push_back(se[0]->right()); if (arrVar != NULL && arrVar != se[0]->left()) continue; arrVar = se[0]->left(); } @@ -298,37 +303,24 @@ namespace ufo { for (auto & a : tmp) { - Expr distSelect = NULL; - bool toContinue = false; - for (auto & b : a.second) - { - toContinue = toContinue || (distSelect != NULL && distSelect != b.first); - distSelect = b.first; - } - - if (toContinue) + if (a.second.size() > 1) { Expr disjIts = mk(m_efac); - Expr disjPosts = mk(m_efac); Expr tmpIt = bind::intConst(mkTerm ("_tmp_it", m_efac)); - for (auto & b : a.second) - { - disjIts = mk(disjIts, mk(tmpIt, b.first)); - disjPosts = mk(disjPosts, b.second); - } + for (auto & b : a.second) disjIts = mk(disjIts, mk(tmpIt, b)); ExprSet elementaryIts; filter (disjIts, bind::IsConst (), inserter(elementaryIts, elementaryIts.begin())); elementaryIts.erase(tmpIt); if (elementaryIts.size() == 1) { - AeValSolver ae(mk(m_efac), mk(disjIts, a.first), elementaryIts); + AeValSolver ae(mk(m_efac), mk(disjIts, a.first->left()), elementaryIts); if (ae.solve()) { ExprVector args; Expr it = *elementaryIts.begin(); args.push_back(it->left()); Expr newPre = replaceAll(ae.getValidSubset(), tmpIt, it); - args.push_back(mk(newPre, replaceAll(disjPosts, tmpVar, mk(arrVar, it)))); Expr newCand = mknary(args); sf.learnedExprs.insert(newCand); } @@ -551,6 +543,9 @@ namespace ufo // for Arrays Expr tmpArrIter; ExprSet tmpArrAccess; + ExprSet tmpArrSelects; + ExprSet tmpArrCands; + ExprSet tmpArrAccessVars; for (auto &hr : ruleManager.chcs) { if (hr.dstRelation != invRel && hr.srcRelation != invRel) continue; @@ -569,44 +564,40 @@ namespace ufo // for arrays if (analizeCode && ruleManager.hasArrays) { - arrCands[ind].insert(sm.arrCands.begin(), sm.arrCands.end()); - arrSelects[ind].insert(sm.arrSelects.begin(), sm.arrSelects.end()); + tmpArrCands.insert(sm.arrCands.begin(), sm.arrCands.end()); + tmpArrSelects.insert(sm.arrSelects.begin(), sm.arrSelects.end()); + tmpArrAccessVars.insert(sm.arrAccessVars.begin(), sm.arrAccessVars.end()); arrIterRanges[ind].insert(sm.arrIterRanges.begin(), sm.arrIterRanges.end()); // extra range constraints - if (sm.arrAccessVars.size() == 1) + if (sm.arrAccessVars.size() > 0) { - tmpArrIter = *sm.arrAccessVars.begin(); sm.candidates.clear(); sm.analizeExtras(preconds[ind]); for (auto cand : sm.candidates) { - cand = replaceAll(cand, iterators[ind], tmpArrIter); - if (!u.implies(conjoin(arrIterRanges[ind], m_efac), cand)) - arrIterRanges[ind].insert(cand); + for (auto & iter : tmpArrAccessVars) + { + cand = replaceAll(cand, iterators[ind], iter); + if (!u.implies(conjoin(arrIterRanges[ind], m_efac), cand)) + { + arrIterRanges[ind].insert(cand); + } + } } } - // extra access expressions (like i*2 or i*2+1) to be post-processed outside the loop - getArrAccessExprs(hr.body, tmpArrAccess); } } - if (tmpArrIter != NULL) + for (auto & a : tmpArrSelects) { - for (auto & e : tmpArrAccess) - { - for (auto & a : invarVars[ind]) // TODO: a more precise way of identifying array vars - { - if (bind::isConst(a.second)) - { - Expr sel = mk(term)) + { + addArrCand(term); + return; + } - expr::filter (term, bind::IsConst(), std::inserter (actualVars, actualVars.begin ())); + ExprSet actualVars; + filter (term, bind::IsConst(), std::inserter (actualVars, actualVars.begin ())); term = rewriteMultAdd(term); bool locals = false; if (actualVars.size() == 0 || isTautology(term)) return; - + // split each term to two seeds (for srcVars and dstVars) if (hr.srcRelation == invRel) @@ -273,7 +316,8 @@ namespace ufo if (quantified.size() > 0) { - AeValSolver ae(mk(m_efac), hr.body, quantified); + body = simpleQE(hr.body, quantified); + AeValSolver ae(mk(m_efac), body, quantified); if (ae.solve()) { Expr bodyTmp = ae.getValidSubset(); @@ -292,9 +336,9 @@ namespace ufo // for the query: add a negation of the entire non-recursive part: if (hr.isQuery) { - Expr massaged = propagateEqualities(body); - coreProcess(mkNeg(massaged)); - getSelectTmpl(mkNeg(hr.body)); + Expr massaged = mkNeg(propagateEqualities(body)); + coreProcess(massaged); + getArrRange(massaged); } else if (hr.isFact) { @@ -311,6 +355,7 @@ namespace ufo obtainSeeds(a); } e = overapproxTransitions(e, hr.srcVars, hr.dstVars); + e = simpleQERecurs(e, hr.locVars); e = simplifyBool(e); e = rewriteBoolEq(e); e = convertToGEandGT(e); From afe82f918794b3005dac6c0f2412cc28cf0046a8 Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Thu, 20 Sep 2018 02:01:26 -0400 Subject: [PATCH 121/236] bootstrapping for array candidates --- include/ae/ExprSimpl.hpp | 8 ++++++++ include/deep/Horn.hpp | 9 ++------- include/deep/RndLearnerV3.hpp | 33 ++++++++++++++++++++++++++++++--- include/sampl/ArrCom.hpp | 8 ++++++++ include/sampl/SeedMiner.hpp | 7 +++++++ 5 files changed, 55 insertions(+), 10 deletions(-) diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index 7c128978f..39ec2d57e 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -1830,6 +1830,14 @@ namespace ufo used.insert(a.first); toBreak = false; } + for (auto & b : eqs) + { + if (a == b) continue; + if (!emptyIntersect(a.first, b.second)) + { + b.second = replaceAll(b.second, a.first, a.second); + } + } } if (toBreak) break; } diff --git a/include/deep/Horn.hpp b/include/deep/Horn.hpp index 2ff5d9a8d..fc9636d7d 100755 --- a/include/deep/Horn.hpp +++ b/include/deep/Horn.hpp @@ -283,12 +283,7 @@ namespace ufo hr.body = conjoin(lin, m_efac); hr.assignVarsAndRewrite (origSrcSymbs, invVars[hr.srcRelation], origDstSymbs, invVars[hr.dstRelation]); - hr.body = simpleQE(hr.body, hr.locVars); - if (hasArrays) - { - normalizeSelects(hr.body); -// uniqueizeSelects(hr.body); // maybe will be needed some time later? - } + hr.body = simpleQE(simpleQE(hr.body, hr.locVars), hr.dstVars); } // remove useless rules @@ -515,7 +510,7 @@ namespace ufo { ExprSet cnjs; ExprSet newCnjs; - getConj(simpleQE(hr->body, hr->dstVars), cnjs); + getConj(hr->body, cnjs); for (auto &a : cnjs) { if (emptyIntersect(a, hr->dstVars) && emptyIntersect(a, hr->locVars)) newCnjs.insert(a); diff --git a/include/deep/RndLearnerV3.hpp b/include/deep/RndLearnerV3.hpp index 4a79175a7..42b3626ba 100644 --- a/include/deep/RndLearnerV3.hpp +++ b/include/deep/RndLearnerV3.hpp @@ -541,7 +541,6 @@ namespace ufo bool isFalse = false; // for Arrays - Expr tmpArrIter; ExprSet tmpArrAccess; ExprSet tmpArrSelects; ExprSet tmpArrCands; @@ -596,8 +595,9 @@ namespace ufo } for (auto & a : tmpArrCands) { - for (auto iter : tmpArrAccessVars) - arrCands[ind].insert(replaceAll(a, iterators[ind], iter)); + if (!u.isEquiv(a, mk(m_efac)) && !u.isEquiv(a, mk(m_efac))) + for (auto iter : tmpArrAccessVars) + arrCands[ind].insert(replaceAll(a, iterators[ind], iter)); } for (auto & cand : candsFromCode) @@ -670,6 +670,33 @@ namespace ufo return true; } } + + // try array candidates one-by-one (adapted from `synthesize`) + // TODO: batching + if (ruleManager.hasArrays) + { + for (int i = 0; i < invNumber; i++) + { + SamplFactory& sf = sfs[i].back(); + for (auto & c : arrCands[i]) + { + Expr cand = sf.af.getSimplCand(c); +// outs () << " - - - bootstrapped cand: " << *cand << "\n"; + + if (!addCandidate(i, cand)) continue; + if (checkCand(i)) + { + assignPrioritiesForLearned(); + generalizeArrInvars(sf); + if (checkAllLemmas()) + { + outs () << "Success after bootstrapping\n"; + return true; + } + } + } + } + } return false; } diff --git a/include/sampl/ArrCom.hpp b/include/sampl/ArrCom.hpp index 9ec36682d..f04f65319 100644 --- a/include/sampl/ArrCom.hpp +++ b/include/sampl/ArrCom.hpp @@ -114,6 +114,14 @@ namespace ufo } } + // used for bootstrapping where `post` is one of the `arrCands` + Expr getSimplCand(Expr post) + { + ExprVector args = forall_args; + args.push_back(mk(pre, post)); + return mknary (args); + } + Expr guessSimplTerm () { LAdisj expr2; diff --git a/include/sampl/SeedMiner.hpp b/include/sampl/SeedMiner.hpp index a33fad397..7324bec34 100644 --- a/include/sampl/SeedMiner.hpp +++ b/include/sampl/SeedMiner.hpp @@ -55,6 +55,13 @@ namespace ufo for (auto & a : se) { Expr var = a->right(); + if (isOpX(var)) + { + string varName = "_FH_tmp_iter_" + lexical_cast(var); + Expr newVar = bind::intConst(mkTerm (varName, m_efac)); + tmp.insert(mk(newVar, var)); + var = newVar; + } if (bind::isIntConst(var) && find(invAndIterVarsAll.begin(), invAndIterVarsAll.end(), var) == invAndIterVarsAll.end()) { From 390fe6c6fbe2f27b47416dbc7ec03ce78b87d83a Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Fri, 21 Sep 2018 02:04:26 -0400 Subject: [PATCH 122/236] generalization of learned lemmas over several arrays --- bench_horn/array_tiling_tcpy.smt2 | 27 +++++++++++++++ include/ae/ExprSimpl.hpp | 4 +-- include/deep/Horn.hpp | 2 +- include/deep/RndLearnerV3.hpp | 55 +++++++++++++++++++++++-------- 4 files changed, 71 insertions(+), 17 deletions(-) create mode 100644 bench_horn/array_tiling_tcpy.smt2 diff --git a/bench_horn/array_tiling_tcpy.smt2 b/bench_horn/array_tiling_tcpy.smt2 new file mode 100644 index 000000000..355b081a3 --- /dev/null +++ b/bench_horn/array_tiling_tcpy.smt2 @@ -0,0 +1,27 @@ +;here '2*S' represents 'SIZE' of original program + +(declare-var S Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var a (Array Int Int)) +(declare-var acopy (Array Int Int)) +(declare-var acopy1 (Array Int Int)) +(declare-var acopy2 (Array Int Int)) + +(declare-rel inv ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (=> (> S 1) (inv a acopy 0 S))) + +(rule (=> (and + (inv a acopy i S) + (< i S) + (= (store acopy (- (* 2 S) (+ i 1)) (select a (- (* 2 S) (+ i 1)))) acopy1) + (= (store acopy1 i (select a i)) acopy2) + (= i1 (+ i 1))) + (inv a acopy2 i1 S))) + +(rule (=> (and (inv a acopy i S) (not (< i S)) (<= 0 i1) (< i1 (* 2 S)) + (not (= (select acopy i1) (select a i1)))) fail)) + +(query fail) diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index 39ec2d57e..88d891e20 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -1785,7 +1785,7 @@ namespace ufo else newCnjs.insert(mk(key, value)); } - template static Expr simpleQE(Expr exp, Range& quantified, bool strict = false) + template static Expr simpleQE(Expr exp, Range& quantified, bool removeUsed = true, bool strict = false) { // rewrite just equalities ExprSet cnjs; @@ -1827,7 +1827,7 @@ namespace ufo if (!emptyIntersect(a.first, qed)) { qed = replaceAll(qed, a.first, a.second); - used.insert(a.first); + if (removeUsed) used.insert(a.first); toBreak = false; } for (auto & b : eqs) diff --git a/include/deep/Horn.hpp b/include/deep/Horn.hpp index fc9636d7d..25752ea51 100755 --- a/include/deep/Horn.hpp +++ b/include/deep/Horn.hpp @@ -283,7 +283,7 @@ namespace ufo hr.body = conjoin(lin, m_efac); hr.assignVarsAndRewrite (origSrcSymbs, invVars[hr.srcRelation], origDstSymbs, invVars[hr.dstRelation]); - hr.body = simpleQE(simpleQE(hr.body, hr.locVars), hr.dstVars); + hr.body = simpleQE(simpleQE(hr.body, hr.locVars), hr.dstVars, false); } // remove useless rules diff --git a/include/deep/RndLearnerV3.hpp b/include/deep/RndLearnerV3.hpp index 42b3626ba..b8cd62404 100644 --- a/include/deep/RndLearnerV3.hpp +++ b/include/deep/RndLearnerV3.hpp @@ -75,7 +75,7 @@ namespace ufo if (findNonlin(formula) || containsOp(formula) || containsOp(formula)) { - Expr newCand = simpleQE(formula, quantified, true); + Expr newCand = simpleQE(formula, quantified, true, true); for (auto & v : invarVars[invNum]) newCand = replaceAll(newCand, varsRenameFrom[v.first], v.second); return newCand; } @@ -275,12 +275,11 @@ namespace ufo { if (sf.learnedExprs.size() > 1) { - ExprVector its; ExprVector posts; ExprVector pres; map tmp; - Expr tmpVar = bind::intConst(mkTerm ("_tmp_var", m_efac)); - Expr arrVar = NULL; + ExprVector tmpVars; + ExprVector arrVars; for (auto & a : sf.learnedExprs) { if (!isOpX(a)) continue; @@ -288,17 +287,41 @@ namespace ufo if (!isOpX(learnedQF)) continue; ExprVector se; filter (learnedQF->last(), bind::IsSelect (), inserter(se, se.begin())); - if (se.size() == 1) - { - its.push_back(se[0]->right()); - Expr postReplaced = replaceAll(learnedQF->right(), se[0], tmpVar); - pres.push_back(learnedQF->left()); - posts.push_back(postReplaced); - tmp[mk(learnedQF->left(), postReplaced)].push_back(se[0]->right()); - if (arrVar != NULL && arrVar != se[0]->left()) continue; - arrVar = se[0]->left(); + + bool multipleIndex = false; + for (auto & s : se) { + if (se[0]->right() != s->right()) { + multipleIndex = true; + break; + } } + + if (se.size() == 0 || multipleIndex) continue; + + if (arrVars.size() == 0) { + for (int index = 0; index < se.size(); index++) { + arrVars.push_back(se[index]->left()); + tmpVars.push_back(bind::intConst(mkTerm ("_tmp_var_" + lexical_cast(index), m_efac))); + } + } else { + bool toContinue = false; + for (auto & s : se) { + if (find(arrVars.begin(), arrVars.end(), s->left()) == arrVars.end()) { + toContinue = true; + break; + } + } + if (toContinue) continue; + } + + Expr postReplaced = learnedQF->right(); + for (int index = 0; index < se.size() && index < tmpVars.size(); index++) + postReplaced = replaceAll(postReplaced, se[index], tmpVars[index]); + pres.push_back(learnedQF->left()); + posts.push_back(postReplaced); + tmp[mk(learnedQF->left(), postReplaced)].push_back(se[0]->right()); } + if (tmp.size() > 0) { for (auto & a : tmp) @@ -310,6 +333,7 @@ namespace ufo for (auto & b : a.second) disjIts = mk(disjIts, mk(tmpIt, b)); ExprSet elementaryIts; filter (disjIts, bind::IsConst (), inserter(elementaryIts, elementaryIts.begin())); + for (auto & a : sf.lf.getVars()) elementaryIts.erase(a); elementaryIts.erase(tmpIt); if (elementaryIts.size() == 1) { @@ -320,7 +344,10 @@ namespace ufo Expr it = *elementaryIts.begin(); args.push_back(it->left()); Expr newPre = replaceAll(ae.getValidSubset(), tmpIt, it); - args.push_back(mk(newPre, replaceAll(a.first->right(), tmpVar, mk(arrVars[index], it)); + args.push_back(mk(newPre, newPost)); Expr newCand = mknary(args); sf.learnedExprs.insert(newCand); } From d5ce55e95ec505bd5d51656ab1e00497db898d04 Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Wed, 26 Sep 2018 17:32:42 -0400 Subject: [PATCH 123/236] mining array seeds deeper --- include/ae/ExprSimpl.hpp | 67 ++++++++++++++++++++++++++++++++++--- include/sampl/SeedMiner.hpp | 26 +++++++++++--- 2 files changed, 84 insertions(+), 9 deletions(-) diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index 88d891e20..e4a8ad265 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -1468,13 +1468,13 @@ namespace ufo return mk(term); } - bool hasBoolSort(Expr e) + inline static bool hasBoolSort(Expr e) { if (bind::isBoolConst(e) || isOp(e)) return true; return false; } - inline Expr convertToGEandGT(Expr term) + inline static Expr convertToGEandGT(Expr term) { if (isOpX(term)) return mk(term->right(), term->left()); @@ -1582,7 +1582,7 @@ namespace ufo // outs () << " [2e] ---> " << *transformed << "\n\n"; return transformed; } - else if (isOpX(rhs)) + if (isOpX(rhs)) { bool found = false; Expr iteArg; @@ -1623,7 +1623,7 @@ namespace ufo return transformed; } } - else if (isOpX(lhs)) + if (isOpX(lhs)) { // symmetric to the above case bool found = false; @@ -1664,7 +1664,7 @@ namespace ufo return transformed; } } - else if (isOpX(lhs)) + if (isOpX(lhs)) { Expr arrVar = lhs->left(); if (isOpX(arrVar)) @@ -1675,6 +1675,39 @@ namespace ufo mk(arrVar->last(), lhs->right(), lhs->last())), rhs)); } } + if (isOpX(rhs)) + { + Expr arrVar = rhs->left(); + if (isOpX(arrVar)) + { + return unfoldITE (reBuildCmp(term, + mk(arrVar->left(), + mk(arrVar->right(), rhs->right(), rhs->last()), + mk(arrVar->last(), rhs->right(), rhs->last())), lhs)); + } + } + if (isOpX(arrVar->right(), lhs->right()), + mk(rhs)) + { + Expr arrVar = rhs->left(); + if (isOpX(arrVar)) + { + return unfoldITE (reBuildCmp(term, + mk(arrVar->left(), + mk(arrVar->last(), rhs->right())), lhs)); + } + } } return term; } @@ -1770,6 +1803,24 @@ namespace ufo } }; + struct SelectStoreRewriter + { + SelectStoreRewriter () {}; + + Expr operator() (Expr exp) + { + if (isOpX(exp->left()->left(), exp->right())); + } + return exp; + } + }; + template static void update_min_value(ExprMap& m, Expr key, Expr value, Range& quantified, ExprSet& newCnjs) { // just heuristic @@ -1888,6 +1939,12 @@ namespace ufo return dagVisit (a, exp); } + inline static Expr rewriteSelectStore(Expr exp) + { + RW a(new SelectStoreRewriter()); + return dagVisit (a, exp); + } + // very simple check if tautology (SMT-based check is expensive) inline static bool isTautology(Expr term) { diff --git a/include/sampl/SeedMiner.hpp b/include/sampl/SeedMiner.hpp index 7324bec34..a7d62d560 100644 --- a/include/sampl/SeedMiner.hpp +++ b/include/sampl/SeedMiner.hpp @@ -99,6 +99,12 @@ namespace ufo for (auto & a : se) { + if (isOpX(a->first()) || + isOpX(a->first())) + { + // FIXME: should not fall here + return; + } arrSelects.insert(a); unique_push_back(a, invAndIterVars); @@ -182,9 +188,18 @@ namespace ufo void addSeed(Expr term) { - if (containsOp(term) || containsOp(term)) { - addArrCand(term); + if (containsOp(term) || containsOp(term) || containsOp(term)) + { + Expr term2 = unfoldITE(rewriteSelectStore(unfoldITE(term))); + if (term == term2) + return; + else // mutual recursive call: extra processing for arrays + obtainSeeds(term2); + } + else + addArrCand(term); return; } @@ -263,7 +278,8 @@ namespace ufo } else if (isOp(term)) { - obtainSeeds(convertToGEandGT(term)); + if (containsOp(term)) addSeed(term); + else obtainSeeds(convertToGEandGT(term)); } } @@ -349,7 +365,9 @@ namespace ufo } else if (hr.isFact) { - coreProcess(propagateEqualities(body)); + Expr e = overapproxTransitions(body, hr.srcVars, hr.dstVars); // useful stuff for arrays + e = propagateEqualities(e); + coreProcess(e); } else { From bb16e54f5531dddefb9ec8b28594f985ca2681f2 Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Tue, 9 Oct 2018 22:01:37 -0400 Subject: [PATCH 124/236] extended the generalization method for array candidates --- bench_horn/array_tiling_skipped.smt2 | 34 +++++++++++++++++++++ include/deep/RndLearnerV3.hpp | 45 +++++++++++++++++++++++++--- 2 files changed, 75 insertions(+), 4 deletions(-) create mode 100644 bench_horn/array_tiling_skipped.smt2 diff --git a/bench_horn/array_tiling_skipped.smt2 b/bench_horn/array_tiling_skipped.smt2 new file mode 100644 index 000000000..60b69231f --- /dev/null +++ b/bench_horn/array_tiling_skipped.smt2 @@ -0,0 +1,34 @@ +;here '2*S' is 'SIZE' of original program +(declare-var S Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var a2 (Array Int Int)) + +(declare-rel inv ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (=> (>= S 1) (inv a 1 S))) + +(rule (=> (and + (inv a i S) + (<= i (* S 1)) + (= a1 (ite (> (select a (- (* 2 i) 2)) (- (* 2 i) 2)) + (store a (- (* 2 i) 2) (- (* 2 i) 2)) + a)) + (= a2 (ite (> (select a1 (- (* 2 i) 1)) (- (* 2 i) 1)) + (store a1 (- (* 2 i) 1) (- (* 2 i) 1)) + a1)) + (= i1 (+ i 1))) + (inv a2 i1 S))) + +(rule (=> (and + (inv a i S) + (not (<= i (* S 1))) + (< 0 i1) + (< i1 (* S 2)) + (not (<= (select a i1) i1))) + fail)) + +(query fail) diff --git a/include/deep/RndLearnerV3.hpp b/include/deep/RndLearnerV3.hpp index b8cd62404..7b11f5d36 100644 --- a/include/deep/RndLearnerV3.hpp +++ b/include/deep/RndLearnerV3.hpp @@ -280,6 +280,8 @@ namespace ufo map tmp; ExprVector tmpVars; ExprVector arrVars; + Expr tmpIt = bind::intConst(mkTerm ("_tmp_it", m_efac)); + for (auto & a : sf.learnedExprs) { if (!isOpX(a)) continue; @@ -316,7 +318,43 @@ namespace ufo Expr postReplaced = learnedQF->right(); for (int index = 0; index < se.size() && index < tmpVars.size(); index++) - postReplaced = replaceAll(postReplaced, se[index], tmpVars[index]); + postReplaced = replaceAll(postReplaced, se[index], tmpVars[index]); + + ExprSet postVars; + filter(postReplaced, bind::IsConst(), inserter(postVars, postVars.begin())); + for (auto & fhVar : sf.lf.getVars()) postVars.erase(fhVar); + for (auto & tmpVar : tmpVars) postVars.erase(tmpVar); + if (postVars.size() > 0) + { + AeValSolver ae(mk(m_efac), mk(postReplaced, mk(tmpIt, se[0]->right())), postVars); + if (ae.solve()) + { + Expr pr = ae.getValidSubset(); + ExprSet conjs; + getConj(pr, conjs); + if (conjs.size() > 1) + { + for (auto conjItr = conjs.begin(); conjItr != conjs.end();) + { + ExprVector conjVars; + filter (*conjItr, bind::IsConst(), inserter(conjVars, conjVars.begin())); + bool found = false; + for (auto & conjVar : conjVars) + { + if (find (tmpVars.begin(), tmpVars.end(), conjVar) != tmpVars.end()) + { + found = true; + break; + } + } + if (!found) conjItr = conjs.erase(conjItr); + else ++conjItr; + } + } + postReplaced = conjoin(conjs, m_efac); + } + } + pres.push_back(learnedQF->left()); posts.push_back(postReplaced); tmp[mk(learnedQF->left(), postReplaced)].push_back(se[0]->right()); @@ -329,7 +367,6 @@ namespace ufo if (a.second.size() > 1) { Expr disjIts = mk(m_efac); - Expr tmpIt = bind::intConst(mkTerm ("_tmp_it", m_efac)); for (auto & b : a.second) disjIts = mk(disjIts, mk(tmpIt, b)); ExprSet elementaryIts; filter (disjIts, bind::IsConst (), inserter(elementaryIts, elementaryIts.begin())); @@ -344,9 +381,9 @@ namespace ufo Expr it = *elementaryIts.begin(); args.push_back(it->left()); Expr newPre = replaceAll(ae.getValidSubset(), tmpIt, it); - Expr newPost = a.first->right(); + Expr newPost = replaceAll(a.first->right(), tmpIt, it); for (int index = 0; index < tmpVars.size() && index < arrVars.size(); index++) - newPost = replaceAll(newPost, tmpVars[index], mk(arrVars[index], it)); args.push_back(mk(newPre, newPost)); Expr newCand = mknary(args); sf.learnedExprs.insert(newCand); From b3e305f13cf2cfd4c1be884e8a75dd3735d2a32b Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Wed, 10 Oct 2018 00:04:13 -0400 Subject: [PATCH 125/236] supported invariants over NIA+Arrays --- bench_horn/array_nonlin_init_mult.smt2 | 17 +++++++++++++++++ bench_horn/array_nonlin_square.smt2 | 17 +++++++++++++++++ bench_horn/array_tiling_poly1.smt2 | 16 ++++++++++++++++ include/sampl/Sampl.hpp | 7 ++++++- include/sampl/SeedMiner.hpp | 4 +++- 5 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 bench_horn/array_nonlin_init_mult.smt2 create mode 100644 bench_horn/array_nonlin_square.smt2 create mode 100644 bench_horn/array_tiling_poly1.smt2 diff --git a/bench_horn/array_nonlin_init_mult.smt2 b/bench_horn/array_nonlin_init_mult.smt2 new file mode 100644 index 000000000..fa97fb156 --- /dev/null +++ b/bench_horn/array_nonlin_init_mult.smt2 @@ -0,0 +1,17 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var n Int) + +(declare-rel inv ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv a 0 n)) + +(rule (=> (and (inv a i n) (< i n) (= i1 (+ i 1)) + (= a1 (store a i (* (- i) (- n))))) (inv a1 i1 n))) + +(rule (=> (and (inv a i n) (>= i n) (< 0 i1) (< i1 n) (not (>= (select a i1) 0))) fail)) + +(query fail) diff --git a/bench_horn/array_nonlin_square.smt2 b/bench_horn/array_nonlin_square.smt2 new file mode 100644 index 000000000..1ee06d585 --- /dev/null +++ b/bench_horn/array_nonlin_square.smt2 @@ -0,0 +1,17 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var n Int) + +(declare-rel inv ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv a 0 n)) + +(rule (=> (and (inv a i n) (< i n) (= i1 (+ i 1)) + (= a1 (store a i (* (select a i) (select a i))))) (inv a1 i1 n))) + +(rule (=> (and (inv a i n) (>= i n) (< 0 i1) (< i1 n) (not (>= (select a i1) 0))) fail)) + +(query fail) diff --git a/bench_horn/array_tiling_poly1.smt2 b/bench_horn/array_tiling_poly1.smt2 new file mode 100644 index 000000000..de5a662c6 --- /dev/null +++ b/bench_horn/array_tiling_poly1.smt2 @@ -0,0 +1,16 @@ +(declare-var S Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) + +(declare-rel inv ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (=> (>= S 1) (inv a 0 S))) + +(rule (=> (and (inv a i S) (< i S) (= (store a i (* i i)) a1) (= i1 (+ i 1))) (inv a1 i1 S))) + +(rule (=> (and (inv a i S) (>= i S) (<= 0 i1) (< i1 S) (not (= (select a i1) (* i1 i1)))) fail)) + +(query fail) diff --git a/include/sampl/Sampl.hpp b/include/sampl/Sampl.hpp index 57ac56870..7bbf52374 100644 --- a/include/sampl/Sampl.hpp +++ b/include/sampl/Sampl.hpp @@ -196,7 +196,12 @@ namespace ufo { // for now, if a CHC system has arrays, we try candidates only with array // in the future, we will need arithmetic candidates as well - if (hasArrays) return arrSimpl ? af.guessSimplTerm() : af.guessTerm(); + if (hasArrays) + { + Expr cand = arrSimpl ? af.guessSimplTerm() : af.guessTerm(); + for (auto & v : lf.nonlinVars) cand = replaceAll(cand, v.second, v.first); + return cand; + } int arity = chooseByWeight(orAritiesDensity); int hasBool = chooseByWeight(hasBooleanComb); diff --git a/include/sampl/SeedMiner.hpp b/include/sampl/SeedMiner.hpp index a7d62d560..b5403f162 100644 --- a/include/sampl/SeedMiner.hpp +++ b/include/sampl/SeedMiner.hpp @@ -117,7 +117,9 @@ namespace ufo getConj(convertToGEandGT(dsj), arrCandsTmp); for (auto & a : arrCandsTmp) { - Expr normalized = normalizeDisj(a, invAndIterVars); + Expr tmpl = findNonlinAndRewrite(a, invAndIterVars, extraVars); + for (auto &b : extraVars) invAndIterVars.push_back(b.second); + Expr normalized = normalizeDisj(tmpl, invAndIterVars); ExprSet vrs; filter (normalized, bind::IsConst(), std::inserter (vrs, vrs.begin ())); bool sanitized = true; From b2f456823095ed653f5540c3300e6ed72ec84803 Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Fri, 2 Nov 2018 21:26:24 -0500 Subject: [PATCH 126/236] basic support for multiple Array invariants --- bench_horn/array_min_swap.smt2 | 17 +- bench_horn_cex/array_init_addvar_cex.smt2 | 21 ++ bench_horn_cex/array_init_and_copy_cex.smt2 | 23 ++ bench_horn_cex/array_init_doubl_cex.smt2 | 21 ++ bench_horn_cex/array_init_increm_cex.smt2 | 21 ++ .../array_init_increm_twice_cex.smt2 | 22 ++ ...rray_init_increm_two_arrs_antisym_cex.smt2 | 24 ++ .../array_init_increm_two_arrs_cex.smt2 | 24 ++ bench_horn_cex/array_init_ite_cex.smt2 | 19 ++ bench_horn_cex/array_init_ite_jump_cex.smt2 | 21 ++ bench_horn_cex/array_init_pair_sum_cex.smt2 | 25 ++ .../array_init_pair_symmetr_cex.smt2 | 26 ++ bench_horn_cex/array_init_reverse_cex.smt2 | 21 ++ .../array_init_symmetr_swap_cex.smt2 | 24 ++ bench_horn_multiple/array_init_addvar.smt2 | 21 ++ bench_horn_multiple/array_init_and_copy.smt2 | 23 ++ bench_horn_multiple/array_init_doubl.smt2 | 21 ++ bench_horn_multiple/array_init_increm.smt2 | 21 ++ .../array_init_increm_twice.smt2 | 22 ++ .../array_init_increm_two_arrs.smt2 | 24 ++ .../array_init_increm_two_arrs_antisym.smt2 | 24 ++ bench_horn_multiple/array_init_pair_sum.smt2 | 25 ++ .../array_init_pair_symmetr.smt2 | 26 ++ bench_horn_multiple/array_init_reverse.smt2 | 21 ++ .../array_init_symmetr_swap.smt2 | 24 ++ include/ae/ExprSimpl.hpp | 160 +++++----- include/deep/RndLearnerV3.hpp | 278 ++++++++++++------ include/sampl/ArrCom.hpp | 13 +- include/sampl/SeedMiner.hpp | 2 + 29 files changed, 846 insertions(+), 168 deletions(-) create mode 100644 bench_horn_cex/array_init_addvar_cex.smt2 create mode 100644 bench_horn_cex/array_init_and_copy_cex.smt2 create mode 100644 bench_horn_cex/array_init_doubl_cex.smt2 create mode 100644 bench_horn_cex/array_init_increm_cex.smt2 create mode 100644 bench_horn_cex/array_init_increm_twice_cex.smt2 create mode 100644 bench_horn_cex/array_init_increm_two_arrs_antisym_cex.smt2 create mode 100644 bench_horn_cex/array_init_increm_two_arrs_cex.smt2 create mode 100644 bench_horn_cex/array_init_ite_cex.smt2 create mode 100644 bench_horn_cex/array_init_ite_jump_cex.smt2 create mode 100644 bench_horn_cex/array_init_pair_sum_cex.smt2 create mode 100644 bench_horn_cex/array_init_pair_symmetr_cex.smt2 create mode 100644 bench_horn_cex/array_init_reverse_cex.smt2 create mode 100644 bench_horn_cex/array_init_symmetr_swap_cex.smt2 create mode 100644 bench_horn_multiple/array_init_addvar.smt2 create mode 100644 bench_horn_multiple/array_init_and_copy.smt2 create mode 100644 bench_horn_multiple/array_init_doubl.smt2 create mode 100644 bench_horn_multiple/array_init_increm.smt2 create mode 100644 bench_horn_multiple/array_init_increm_twice.smt2 create mode 100644 bench_horn_multiple/array_init_increm_two_arrs.smt2 create mode 100644 bench_horn_multiple/array_init_increm_two_arrs_antisym.smt2 create mode 100644 bench_horn_multiple/array_init_pair_sum.smt2 create mode 100644 bench_horn_multiple/array_init_pair_symmetr.smt2 create mode 100644 bench_horn_multiple/array_init_reverse.smt2 create mode 100644 bench_horn_multiple/array_init_symmetr_swap.smt2 diff --git a/bench_horn/array_min_swap.smt2 b/bench_horn/array_min_swap.smt2 index e32aa3508..3d6a5f4e8 100644 --- a/bench_horn/array_min_swap.smt2 +++ b/bench_horn/array_min_swap.smt2 @@ -3,20 +3,23 @@ (declare-var i Int) (declare-var i1 Int) (declare-var j Int) +(declare-var j1 Int) +(declare-var N Int) -(declare-rel inv ((Array Int Int) Int Int)) +(declare-rel inv ((Array Int Int) Int Int Int)) (declare-rel fail ()) -(rule (inv a j j)) +(rule (=> (>= i 0) (inv a i (+ i 1) N))) -(rule (=> (and (inv a i j) +(rule (=> (and (inv a i j N) + (< j N) (= a1 (ite - (< (select a i) (select a j)) + (> (select a i) (select a j)) (store (store a i (select a j)) j (select a i)) a)) - (= i1 (+ i 1))) - (inv a1 i1 j))) + (= j1 (+ j 1))) + (inv a1 i j1 N))) -(rule (=> (and (inv a i j) (< j i1) (< i1 i) (not (<= (select a j) (select a i1)))) fail)) +(rule (=> (and (inv a i j N) (>= j N) (< i i1) (< i1 N) (not (<= (select a i) (select a i1)))) fail)) (query fail) diff --git a/bench_horn_cex/array_init_addvar_cex.smt2 b/bench_horn_cex/array_init_addvar_cex.smt2 new file mode 100644 index 000000000..d61a8ea7b --- /dev/null +++ b/bench_horn_cex/array_init_addvar_cex.smt2 @@ -0,0 +1,21 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a 0 N)) + +(rule (=> (and (inv1 a i N) (< i N) (= (store a i i) a1) (= i1 (+ i 1))) (inv1 a1 i1 N))) + +(rule (=> (and (inv1 a i N) (>= i N)) (inv2 a 0 N))) + +(rule (=> (and (inv2 a i N) (< i N) (= (store a i (+ (select a i) i)) a1) (= i1 (+ i 1))) (inv2 a1 i1 N))) + +(rule (=> (and (inv2 a i N) (>= i N) (< 0 i1) (< i1 N) (not (> (select a i1) (* 2 i1)))) fail)) + +(query fail) diff --git a/bench_horn_cex/array_init_and_copy_cex.smt2 b/bench_horn_cex/array_init_and_copy_cex.smt2 new file mode 100644 index 000000000..831ab0af0 --- /dev/null +++ b/bench_horn_cex/array_init_and_copy_cex.smt2 @@ -0,0 +1,23 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var b1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a 0 N)) + +(rule (=> (and (inv1 a i N) (< i N) (= (store a i 1) a1) (= i1 (+ i 1))) (inv1 a1 i1 N))) + +(rule (=> (and (inv1 a i N) (>= i N)) (inv2 a b 0 N))) + +(rule (=> (and (inv2 a b i N) (< i N) (= (store b i (- 1 (select a i))) b1) (= i1 (+ i 1))) (inv2 a b1 i1 N))) + +(rule (=> (and (inv2 a b i N) (>= i N) (< 0 i1) (< i1 N) (not (>= (select b i1) 1))) fail)) + +(query fail) diff --git a/bench_horn_cex/array_init_doubl_cex.smt2 b/bench_horn_cex/array_init_doubl_cex.smt2 new file mode 100644 index 000000000..4f1626bd6 --- /dev/null +++ b/bench_horn_cex/array_init_doubl_cex.smt2 @@ -0,0 +1,21 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a 0 N)) + +(rule (=> (and (inv1 a i N) (< i N) (= (store a i i) a1) (= i1 (+ i 1))) (inv1 a1 i1 N))) + +(rule (=> (and (inv1 a i N) (>= i N)) (inv2 a 2 N))) + +(rule (=> (and (inv2 a i N) (< i N) (= (store a i (* (select a i) 2)) a1) (= i1 (+ i 1))) (inv2 a1 i1 N))) + +(rule (=> (and (inv2 a i N) (>= i N) (< 0 i1) (< i1 N) (not (>= (select a i1) (* 2 i1)))) fail)) + +(query fail) diff --git a/bench_horn_cex/array_init_increm_cex.smt2 b/bench_horn_cex/array_init_increm_cex.smt2 new file mode 100644 index 000000000..c7549bf09 --- /dev/null +++ b/bench_horn_cex/array_init_increm_cex.smt2 @@ -0,0 +1,21 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a 0 N)) + +(rule (=> (and (inv1 a i N) (< i N) (= (store a i 0) a1) (= i1 (+ i 1))) (inv1 a1 i1 N))) + +(rule (=> (and (inv1 a i N) (>= i N)) (inv2 a 0 N))) + +(rule (=> (and (inv2 a i N) (< i N) (= (store a i (- (select a i) 1)) a1) (= i1 (+ i 1))) (inv2 a1 i1 N))) + +(rule (=> (and (inv2 a i N) (>= i N) (< 0 i1) (< i1 N) (not (>= (select a i1) 1))) fail)) + +(query fail) diff --git a/bench_horn_cex/array_init_increm_twice_cex.smt2 b/bench_horn_cex/array_init_increm_twice_cex.smt2 new file mode 100644 index 000000000..06e22587d --- /dev/null +++ b/bench_horn_cex/array_init_increm_twice_cex.smt2 @@ -0,0 +1,22 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a 0 N)) + +(rule (=> (and (inv1 a i N) (< i N) (= (store a i i) a1) (= i1 (+ i 1))) (inv1 a1 i1 N))) + +(rule (=> (and (inv1 a i N) (>= i N)) (inv2 a 0 N))) + +(rule (=> (and (inv2 a i N) (< i N) (= i1 (+ i 1)) + (= (store a i (+ (select (store a i (+ (select a i) 1)) i) 1)) a1)) (inv2 a1 i1 N))) + +(rule (=> (and (inv2 a i N) (>= i N) (< 0 i1) (< i1 N) (not (>= (select a i1) 4))) fail)) + +(query fail) diff --git a/bench_horn_cex/array_init_increm_two_arrs_antisym_cex.smt2 b/bench_horn_cex/array_init_increm_two_arrs_antisym_cex.smt2 new file mode 100644 index 000000000..e1d4e786a --- /dev/null +++ b/bench_horn_cex/array_init_increm_two_arrs_antisym_cex.smt2 @@ -0,0 +1,24 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var b1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var x Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a b 0 N)) + +(rule (=> (and (inv1 a b i N) (< i N) (= (store a i x) a1) (= (store b i (- x)) b1) (= i1 (+ i 1))) (inv1 a1 b1 i1 N))) + +(rule (=> (and (inv1 a b i N) (>= i N)) (inv2 a b 0 N))) + +(rule (=> (and (inv2 a b i N) (< i N) (= (store a i (+ (select a i) 1)) a1) (= i1 (+ i 1))) (inv2 a1 b i1 N))) + +(rule (=> (and (inv2 a b i N) (>= i N) (< 0 i1) (< i1 N) (not (>= (select a i1) (select b i1)))) fail)) + +(query fail) diff --git a/bench_horn_cex/array_init_increm_two_arrs_cex.smt2 b/bench_horn_cex/array_init_increm_two_arrs_cex.smt2 new file mode 100644 index 000000000..7660bae51 --- /dev/null +++ b/bench_horn_cex/array_init_increm_two_arrs_cex.smt2 @@ -0,0 +1,24 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var b1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var x Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a b 0 N)) + +(rule (=> (and (inv1 a b i N) (< i N) (= (store a i x) a1) (= (store b i x) b1) (= i1 (+ i 1))) (inv1 a1 b1 i1 N))) + +(rule (=> (and (inv1 a b i N) (>= i N)) (inv2 a b 0 N))) + +(rule (=> (and (inv2 a b i N) (< i N) (= (store a i (- (select a i) 1)) a1) (= (store b i (+ (select b i) 2)) b1) (= i1 (+ i 1))) (inv2 a1 b1 i1 N))) + +(rule (=> (and (inv2 a b i N) (>= i N) (< 0 i1) (< i1 N) (not (>= (select a i1) (select b i1)))) fail)) + +(query fail) diff --git a/bench_horn_cex/array_init_ite_cex.smt2 b/bench_horn_cex/array_init_ite_cex.smt2 new file mode 100644 index 000000000..c38ac0fda --- /dev/null +++ b/bench_horn_cex/array_init_ite_cex.smt2 @@ -0,0 +1,19 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var n Int) + +(declare-rel inv ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv a 2 n)) + +(rule (=> (and (inv a i n) (< i n) (= i1 (+ i 1)) + (= (ite (= (select a i) i) + (ite (= (select a i) 0) (store a i (+ i (select a i))) + (store a i i)) (store a i i)) a1)) (inv a1 i1 n))) + +(rule (=> (and (inv a i n) (>= i n) (< 0 i1) (< i1 n) (not (= (select a i1) i1))) fail)) + +(query fail) diff --git a/bench_horn_cex/array_init_ite_jump_cex.smt2 b/bench_horn_cex/array_init_ite_jump_cex.smt2 new file mode 100644 index 000000000..0be5351e6 --- /dev/null +++ b/bench_horn_cex/array_init_ite_jump_cex.smt2 @@ -0,0 +1,21 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var a2 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) +(declare-var val Int) + +(declare-rel inv ((Array Int Int) Int Int Int)) +(declare-rel fail ()) + +(rule (inv a 0 7 N)) + +(rule (=> (and (inv a i val N) (<= i N) + (= a1 (ite (= val i) (store a i 0) (store a i i))) + (= i1 (+ i 1))) +(inv a1 i1 val N))) + +(rule (=> (and (inv a i val N) (> i N) (<= 0 i1) (<= i1 N) (> (select a i1) val)) fail)) + +(query fail) diff --git a/bench_horn_cex/array_init_pair_sum_cex.smt2 b/bench_horn_cex/array_init_pair_sum_cex.smt2 new file mode 100644 index 000000000..115f98ff9 --- /dev/null +++ b/bench_horn_cex/array_init_pair_sum_cex.smt2 @@ -0,0 +1,25 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var b1 (Array Int Int)) +(declare-var c (Array Int Int)) +(declare-var c1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) (Array Int Int) (Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a b 0 N)) + +(rule (=> (and (inv1 a b i N) (< i N) (= (store a i 1) a1) (= (store b i 2) b1) (= i1 (+ i 1))) (inv1 a1 b1 i1 N))) + +(rule (=> (and (inv1 a b i N) (>= i N)) (inv2 a b c 2 N))) + +(rule (=> (and (inv2 a b c i N) (< i N) (= (store c i (+ (select a i) (select b i))) c1) (= i1 (+ i 1))) (inv2 a b c1 i1 N))) + +(rule (=> (and (inv2 a b c i N) (>= i N) (< 0 i1) (< i1 N) (not (>= (select c i1) 3))) fail)) + +(query fail) diff --git a/bench_horn_cex/array_init_pair_symmetr_cex.smt2 b/bench_horn_cex/array_init_pair_symmetr_cex.smt2 new file mode 100644 index 000000000..46bf2484b --- /dev/null +++ b/bench_horn_cex/array_init_pair_symmetr_cex.smt2 @@ -0,0 +1,26 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var b1 (Array Int Int)) +(declare-var c (Array Int Int)) +(declare-var c1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var x Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) (Array Int Int) (Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a b 0 N)) + +(rule (=> (and (inv1 a b i N) (< i N) (= (store a i x) a1) (= (store b i (- x)) b1) (= i1 (+ i 1))) (inv1 a1 b1 i1 N))) + +(rule (=> (and (inv1 a b i N) (>= i N)) (inv2 a b c 0 N))) + +(rule (=> (and (inv2 a b c i N) (< i N) (= (store c i (- (select a i) (select b i))) c1) (= i1 (+ i 1))) (inv2 a b c1 i1 N))) + +(rule (=> (and (inv2 a b c i N) (>= i N) (< 0 i1) (< i1 N) (not (= (select c i1) 0))) fail)) + +(query fail) diff --git a/bench_horn_cex/array_init_reverse_cex.smt2 b/bench_horn_cex/array_init_reverse_cex.smt2 new file mode 100644 index 000000000..1fdf84f15 --- /dev/null +++ b/bench_horn_cex/array_init_reverse_cex.smt2 @@ -0,0 +1,21 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a 0 N)) + +(rule (=> (and (inv1 a i N) (< i N) (= (store a i 1) a1) (= i1 (+ i 1))) (inv1 a1 i1 N))) + +(rule (=> (and (inv1 a i N) (>= i N)) (inv2 a (- N 2) N))) + +(rule (=> (and (inv2 a i N) (>= i 0) (= (store a i (- (select a i) 1)) a1) (= i1 (- i 1))) (inv2 a1 i1 N))) + +(rule (=> (and (inv2 a i N) (< i 0) (< 0 i1) (< i1 N) (not (= (select a i1) 0))) fail)) + +(query fail) diff --git a/bench_horn_cex/array_init_symmetr_swap_cex.smt2 b/bench_horn_cex/array_init_symmetr_swap_cex.smt2 new file mode 100644 index 000000000..ab157e566 --- /dev/null +++ b/bench_horn_cex/array_init_symmetr_swap_cex.smt2 @@ -0,0 +1,24 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var b1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var x Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a b 0 N)) + +(rule (=> (and (inv1 a b i N) (< i N) (= (store a i x) a1) (= (store b i x) b1) (= i1 (+ i 1))) (inv1 a1 b1 i1 N))) + +(rule (=> (and (inv1 a b i N) (>= i N)) (inv2 a b 0 N))) + +(rule (=> (and (inv2 a b i N) (< i N) (= (store a i (- (select b i))) a1) (= (store b i (select a i)) b1) (= i1 (+ i 1))) (inv2 a1 b1 i1 N))) + +(rule (=> (and (inv2 a b i N) (>= i N) (< 0 i1) (< i1 N) (not (= (select a i1) (select b i1)))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_init_addvar.smt2 b/bench_horn_multiple/array_init_addvar.smt2 new file mode 100644 index 000000000..85f709305 --- /dev/null +++ b/bench_horn_multiple/array_init_addvar.smt2 @@ -0,0 +1,21 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a 0 N)) + +(rule (=> (and (inv1 a i N) (< i N) (= (store a i i) a1) (= i1 (+ i 1))) (inv1 a1 i1 N))) + +(rule (=> (and (inv1 a i N) (>= i N)) (inv2 a 0 N))) + +(rule (=> (and (inv2 a i N) (< i N) (= (store a i (+ (select a i) i)) a1) (= i1 (+ i 1))) (inv2 a1 i1 N))) + +(rule (=> (and (inv2 a i N) (>= i N) (< 0 i1) (< i1 N) (not (>= (select a i1) (* 2 i1)))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_init_and_copy.smt2 b/bench_horn_multiple/array_init_and_copy.smt2 new file mode 100644 index 000000000..dae63bd90 --- /dev/null +++ b/bench_horn_multiple/array_init_and_copy.smt2 @@ -0,0 +1,23 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var b1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a 0 N)) + +(rule (=> (and (inv1 a i N) (< i N) (= (store a i 1) a1) (= i1 (+ i 1))) (inv1 a1 i1 N))) + +(rule (=> (and (inv1 a i N) (>= i N)) (inv2 a b 0 N))) + +(rule (=> (and (inv2 a b i N) (< i N) (= (store b i (select a i)) b1) (= i1 (+ i 1))) (inv2 a b1 i1 N))) + +(rule (=> (and (inv2 a b i N) (>= i N) (< 0 i1) (< i1 N) (not (>= (select b i1) 1))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_init_doubl.smt2 b/bench_horn_multiple/array_init_doubl.smt2 new file mode 100644 index 000000000..0eee14e6b --- /dev/null +++ b/bench_horn_multiple/array_init_doubl.smt2 @@ -0,0 +1,21 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a 0 N)) + +(rule (=> (and (inv1 a i N) (< i N) (= (store a i i) a1) (= i1 (+ i 1))) (inv1 a1 i1 N))) + +(rule (=> (and (inv1 a i N) (>= i N)) (inv2 a 0 N))) + +(rule (=> (and (inv2 a i N) (< i N) (= (store a i (* (select a i) 2)) a1) (= i1 (+ i 1))) (inv2 a1 i1 N))) + +(rule (=> (and (inv2 a i N) (>= i N) (< 0 i1) (< i1 N) (not (>= (select a i1) (* 2 i1)))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_init_increm.smt2 b/bench_horn_multiple/array_init_increm.smt2 new file mode 100644 index 000000000..ab9f2de96 --- /dev/null +++ b/bench_horn_multiple/array_init_increm.smt2 @@ -0,0 +1,21 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a 0 N)) + +(rule (=> (and (inv1 a i N) (< i N) (= (store a i 0) a1) (= i1 (+ i 1))) (inv1 a1 i1 N))) + +(rule (=> (and (inv1 a i N) (>= i N)) (inv2 a 0 N))) + +(rule (=> (and (inv2 a i N) (< i N) (= (store a i (+ (select a i) 1)) a1) (= i1 (+ i 1))) (inv2 a1 i1 N))) + +(rule (=> (and (inv2 a i N) (>= i N) (< 0 i1) (< i1 N) (not (>= (select a i1) 1))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_init_increm_twice.smt2 b/bench_horn_multiple/array_init_increm_twice.smt2 new file mode 100644 index 000000000..f8c39291c --- /dev/null +++ b/bench_horn_multiple/array_init_increm_twice.smt2 @@ -0,0 +1,22 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a 0 N)) + +(rule (=> (and (inv1 a i N) (< i N) (= (store a i 0) a1) (= i1 (+ i 1))) (inv1 a1 i1 N))) + +(rule (=> (and (inv1 a i N) (>= i N)) (inv2 a 0 N))) + +(rule (=> (and (inv2 a i N) (< i N) (= i1 (+ i 1)) + (= (store a i (+ (select (store a i (+ (select a i) 1)) i) 1)) a1)) (inv2 a1 i1 N))) + +(rule (=> (and (inv2 a i N) (>= i N) (< 0 i1) (< i1 N) (not (>= (select a i1) 2))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_init_increm_two_arrs.smt2 b/bench_horn_multiple/array_init_increm_two_arrs.smt2 new file mode 100644 index 000000000..09191c513 --- /dev/null +++ b/bench_horn_multiple/array_init_increm_two_arrs.smt2 @@ -0,0 +1,24 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var b1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var x Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a b 0 N)) + +(rule (=> (and (inv1 a b i N) (< i N) (= (store a i x) a1) (= (store b i x) b1) (= i1 (+ i 1))) (inv1 a1 b1 i1 N))) + +(rule (=> (and (inv1 a b i N) (>= i N)) (inv2 a b 0 N))) + +(rule (=> (and (inv2 a b i N) (< i N) (= (store a i (+ (select a i) 1)) a1) (= (store b i (+ (select b i) 1)) b1) (= i1 (+ i 1))) (inv2 a1 b1 i1 N))) + +(rule (=> (and (inv2 a b i N) (>= i N) (< 0 i1) (< i1 N) (not (>= (select a i1) (select b i1)))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_init_increm_two_arrs_antisym.smt2 b/bench_horn_multiple/array_init_increm_two_arrs_antisym.smt2 new file mode 100644 index 000000000..697d2786b --- /dev/null +++ b/bench_horn_multiple/array_init_increm_two_arrs_antisym.smt2 @@ -0,0 +1,24 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var b1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var x Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a b 0 N)) + +(rule (=> (and (inv1 a b i N) (< i N) (= (store a i x) a1) (= (store b i x) b1) (= i1 (+ i 1))) (inv1 a1 b1 i1 N))) + +(rule (=> (and (inv1 a b i N) (>= i N)) (inv2 a b 0 N))) + +(rule (=> (and (inv2 a b i N) (< i N) (= (store a i (+ (select a i) 1)) a1) (= i1 (+ i 1))) (inv2 a1 b i1 N))) + +(rule (=> (and (inv2 a b i N) (>= i N) (< 0 i1) (< i1 N) (not (>= (select a i1) (select b i1)))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_init_pair_sum.smt2 b/bench_horn_multiple/array_init_pair_sum.smt2 new file mode 100644 index 000000000..53e5a16d0 --- /dev/null +++ b/bench_horn_multiple/array_init_pair_sum.smt2 @@ -0,0 +1,25 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var b1 (Array Int Int)) +(declare-var c (Array Int Int)) +(declare-var c1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) (Array Int Int) (Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a b 0 N)) + +(rule (=> (and (inv1 a b i N) (< i N) (= (store a i 1) a1) (= (store b i 2) b1) (= i1 (+ i 1))) (inv1 a1 b1 i1 N))) + +(rule (=> (and (inv1 a b i N) (>= i N)) (inv2 a b c 0 N))) + +(rule (=> (and (inv2 a b c i N) (< i N) (= (store c i (+ (select a i) (select b i))) c1) (= i1 (+ i 1))) (inv2 a b c1 i1 N))) + +(rule (=> (and (inv2 a b c i N) (>= i N) (< 0 i1) (< i1 N) (not (>= (select c i1) 3))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_init_pair_symmetr.smt2 b/bench_horn_multiple/array_init_pair_symmetr.smt2 new file mode 100644 index 000000000..ae273fbdf --- /dev/null +++ b/bench_horn_multiple/array_init_pair_symmetr.smt2 @@ -0,0 +1,26 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var b1 (Array Int Int)) +(declare-var c (Array Int Int)) +(declare-var c1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var x Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) (Array Int Int) (Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a b 0 N)) + +(rule (=> (and (inv1 a b i N) (< i N) (= (store a i x) a1) (= (store b i (- x)) b1) (= i1 (+ i 1))) (inv1 a1 b1 i1 N))) + +(rule (=> (and (inv1 a b i N) (>= i N)) (inv2 a b c 0 N))) + +(rule (=> (and (inv2 a b c i N) (< i N) (= (store c i (+ (select a i) (select b i))) c1) (= i1 (+ i 1))) (inv2 a b c1 i1 N))) + +(rule (=> (and (inv2 a b c i N) (>= i N) (< 0 i1) (< i1 N) (not (= (select c i1) 0))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_init_reverse.smt2 b/bench_horn_multiple/array_init_reverse.smt2 new file mode 100644 index 000000000..3750f77a9 --- /dev/null +++ b/bench_horn_multiple/array_init_reverse.smt2 @@ -0,0 +1,21 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a 0 N)) + +(rule (=> (and (inv1 a i N) (< i N) (= (store a i 1) a1) (= i1 (+ i 1))) (inv1 a1 i1 N))) + +(rule (=> (and (inv1 a i N) (>= i N)) (inv2 a (- N 1) N))) + +(rule (=> (and (inv2 a i N) (>= i 0) (= (store a i (- (select a i) 1)) a1) (= i1 (- i 1))) (inv2 a1 i1 N))) + +(rule (=> (and (inv2 a i N) (< i 0) (< 0 i1) (< i1 N) (not (= (select a i1) 0))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_init_symmetr_swap.smt2 b/bench_horn_multiple/array_init_symmetr_swap.smt2 new file mode 100644 index 000000000..49412ee90 --- /dev/null +++ b/bench_horn_multiple/array_init_symmetr_swap.smt2 @@ -0,0 +1,24 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var b1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var x Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a b 0 N)) + +(rule (=> (and (inv1 a b i N) (< i N) (= (store a i x) a1) (= (store b i (- x)) b1) (= i1 (+ i 1))) (inv1 a1 b1 i1 N))) + +(rule (=> (and (inv1 a b i N) (>= i N)) (inv2 a b 0 N))) + +(rule (=> (and (inv2 a b i N) (< i N) (= (store a i (- (select b i))) a1) (= (store b i (select a i)) b1) (= i1 (+ i 1))) (inv2 a1 b1 i1 N))) + +(rule (=> (and (inv2 a b i N) (>= i N) (< 0 i1) (< i1 N) (not (= (select a i1) (select b i1)))) fail)) + +(query fail) diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index e4a8ad265..6005ec797 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -1006,16 +1006,19 @@ namespace ufo if (isOpX(e)) { int coef = 1; + ExprVector ops; + getMultOps (e, ops); + Expr var = NULL; - for (auto it = e->args_begin (), end = e->args_end (); it != end; ++it) + for (auto & a : ops) { - if (isNumericConst(*it)) + if (isNumericConst(a)) { - coef *= lexical_cast(*it); + coef *= lexical_cast(a); } - else if (bind::isIntConst(*it) && var == NULL) + else if (bind::isIntConst(a) && var == NULL) { - var = *it; + var = a; } else { @@ -1023,7 +1026,6 @@ namespace ufo } } if (success && coef != 0) return mk(mkTerm (mpz_class (-coef), e->getFactory()), e->right()); - if (coef == 0) return mkTerm (mpz_class (0), e->getFactory()); } else if (isOpX(e)) @@ -1821,6 +1823,31 @@ namespace ufo } }; + struct QuantifiedVarsFilter : public std::unary_function + { + ExprSet& vars; + + QuantifiedVarsFilter (ExprSet& _vars): vars(_vars) {}; + + VisitAction operator() (Expr exp) + { + if (isOp(exp)) + { + for (int i = 0; i < exp->arity() - 1; i++) + { + vars.insert(bind::fapp(exp->arg(i))); + } + } + return VisitAction::doKids (); + } + }; + + inline void getQuantifiedVars (Expr exp, ExprSet& vars) + { + QuantifiedVarsFilter qe (vars); + dagVisit (qe, exp); + } + template static void update_min_value(ExprMap& m, Expr key, Expr value, Range& quantified, ExprSet& newCnjs) { // just heuristic @@ -2099,18 +2126,16 @@ namespace ufo { all.push_back(arithmInverse(a)); } - ExprSet newlhs; - for (auto &v : intVars) { int coef = 0; + string s1 = lexical_cast(v); for (auto it = all.begin(); it != all.end();) { - string s1 = lexical_cast(v); string s2 = lexical_cast(*it); - - if(s1 == s2) + + if (s1 == s2) { coef++; it = all.erase(it); @@ -2130,23 +2155,33 @@ namespace ufo } else if (isOpX(*it)) { - string s3 = lexical_cast((*it)->left()); - string s4 = lexical_cast((*it)->right()); - - if (s1 == s3) + ExprVector ops; + getMultOps (*it, ops); + + int c = 1; + bool success = true; + for (auto & a : ops) { - coef += lexical_cast((*it)->right()); - it = all.erase(it); + if (s1 == lexical_cast(a)) + { + // all good! + } + else if (isOpX(a)) + { + c = c * lexical_cast(a); + } + else + { + ++it; + success = false; + break; + } } - else if (s1 == s4) + if (success) { - coef += lexical_cast((*it)->left()); + coef += c; it = all.erase(it); } - else - { - ++it; - } } else { @@ -2299,49 +2334,6 @@ namespace ufo } } - Expr getEvolvingIntVar(Expr exp, ExprSet& ssa) - { - Expr it; - ExprSet expVars; - ExprSet cands; - filter (exp, bind::IsConst (), inserter(expVars, expVars.begin())); - for (auto & a : ssa) - { - if (isOpX(a) && !findArray(a)) - { - ExprSet vars; - filter (a, bind::IsConst (), inserter(vars, vars.begin())); - if (vars.size() > 1) - { - // heuristic here. need to find a more stable solution - if (bind::isIntConst(a->right()) && !bind::isIntConst(a->left())) - filter (a->left(), bind::IsConst (), inserter(cands, cands.begin())); - else if (bind::isIntConst(a->left()) && !bind::isIntConst(a->right())) - filter (a->right(), bind::IsConst (), inserter(cands, cands.begin())); - } - } - } - if (isOpX(exp)) - { - if (cands.size() > 1) - outs () << "WARNING: iterator choice needs attention!\n"; - it = *cands.begin(); - } - else - { - for (auto & e : cands) - { - if (find (expVars.begin(), expVars.end(), e) != expVars.end()) - { - if (it != NULL) - outs () << "WARNING: iterator choice needs attention!\n"; - it = e; - } - } - } - return it; - } - inline static bool isSymmetric (Expr exp) { return isOpX(exp); @@ -2642,6 +2634,15 @@ namespace ufo if (isOpX(e1) && isOpX(e2) && e1->right() == e2->left()) return mk(e1->left(), e2->right()); + if (isOpX(e1) && isOpX(e2) && e2->right() == e1->left()) + return mk(e2->left(), e1->right()); + if (isOpX(e2) && isOpX(e1) && e2->right() == e1->left()) + return mk(e2->left(), e1->right()); + if (isOpX(e2) && isOpX(e1) && e2->right() == e1->left()) + return mk(e2->left(), e1->right()); + if (isOpX(e2) && isOpX(e1) && e2->right() == e1->left()) + return mk(e2->left(), e1->right()); + if (isOpX(e1) && isOpX(e2) && e1->right() == e2->right()) return mk(e1->left(), e2->left()); if (isOpX(e1) && isOpX(e2) && e1->right() == e2->right()) @@ -2651,6 +2652,15 @@ namespace ufo if (isOpX(e1) && isOpX(e2) && e1->right() == e2->right()) return mk(e1->left(), e2->left()); + if (isOpX(e1) && isOpX(e2) && e1->left() == e2->left()) + return mk(e2->right(), e1->right()); + if (isOpX(e1) && isOpX(e2) && e1->left() == e2->left()) + return mk(e2->right(), e1->right()); + if (isOpX(e1) && isOpX(e2) && e1->left() == e2->left()) + return mk(e2->right(), e1->right()); + if (isOpX(e1) && isOpX(e2) && e1->left() == e2->left()) + return mk(e2->right(), e1->right()); + if (isOpX(e1) && isOpX(e2) && e1->right() == e2->right()) return mk(e1->left(), e2->left()); if (isOpX(e1) && isOpX(e2) && e1->right() == e2->right()) @@ -2664,6 +2674,24 @@ namespace ufo return NULL; } + inline static Expr mergeIneqsWithVar (Expr e, Expr var) + { + ExprSet cnjs; + ExprVector cnjs2; + ExprSet cnjs3; + getConj(e, cnjs); + for (auto & a : cnjs) + if (contains(a, var)) cnjs2.push_back(a); + else cnjs3.insert(a); + + if (cnjs2.size() != 2) return e; + + assert(mergeIneqs(cnjs2[0], cnjs2[1]) != NULL); + + cnjs3.insert(mergeIneqs(cnjs2[0], cnjs2[1])); + return conjoin(cnjs3, e->getFactory()); + } + template static void computeTransitiveClosure(ExprSet& r, ExprSet& tr) { for (auto &a : r) diff --git a/include/deep/RndLearnerV3.hpp b/include/deep/RndLearnerV3.hpp index 7b11f5d36..5ec294c98 100644 --- a/include/deep/RndLearnerV3.hpp +++ b/include/deep/RndLearnerV3.hpp @@ -21,9 +21,10 @@ namespace ufo map iterators; // per cycle map preconds; + map postconds; map ssas; map qvars; - map bindvars; + map iterGrows; public: @@ -64,47 +65,91 @@ namespace ufo return multiHoudini(adjacent); } + Expr renameCand(Expr newCand, ExprVector& varsRenameFrom, int invNum) + { + for (auto & v : invarVars[invNum]) + newCand = replaceAll(newCand, varsRenameFrom[v.first], v.second); + return newCand; + } + Expr eliminateQuantifiers(Expr formula, ExprVector& varsRenameFrom, int invNum) { ExprSet allVars; ExprSet quantified; + ExprSet forallQuantified; + getQuantifiedVars(formula, forallQuantified); expr::filter (formula, bind::IsConst(), std::inserter (allVars, allVars.begin ())); for (auto & v : allVars) if (find(varsRenameFrom.begin(), varsRenameFrom.end(), v) == varsRenameFrom.end()) - quantified.insert(v); + if (find(forallQuantified.begin(), forallQuantified.end(), v) == forallQuantified.end()) + quantified.insert(v); - if (findNonlin(formula) || containsOp(formula) || containsOp(formula)) + if (containsOp(formula)) + { + Expr newCand = simpleQE(formula, quantified, true); + ExprSet ops; + getConj(newCand, ops); + for (auto & a : ops) + { + if (isOpX(a)) + { + newCand = a; + break; + } + } + return renameCand(newCand, varsRenameFrom, invNum); + } + + if (findNonlin(formula) || findArray(formula) || containsOp(formula) || containsOp(formula)) { Expr newCand = simpleQE(formula, quantified, true, true); - for (auto & v : invarVars[invNum]) newCand = replaceAll(newCand, varsRenameFrom[v.first], v.second); - return newCand; + return renameCand(newCand, varsRenameFrom, invNum); } AeValSolver ae(mk(m_efac), formula, quantified); if (ae.solve()) { Expr newCand = ae.getValidSubset(); - for (auto & v : invarVars[invNum]) newCand = replaceAll(newCand, varsRenameFrom[v.first], v.second); - return newCand; + return renameCand(newCand, varsRenameFrom, invNum); } return mk(m_efac); } - bool getCandForAdjacentRel(Expr candToProp, Expr constraint, ExprVector& varsRenameFrom, Expr rel, bool seed) + bool getCandForAdjacentRel(Expr candToProp, Expr constraint, Expr relFrom, ExprVector& varsRenameFrom, Expr rel, bool seed) { Expr formula = mk(candToProp, constraint); - if (!u.isSat(formula)) return false; // sometimes, maybe we should return true. + if (!containsOp(candToProp) && !u.isSat(formula)) return false; // sometimes, maybe we should return true. + + int invNum = getVarIndex(rel, decls); + Expr newCand; + + if (containsOp(candToProp)) + { + // GF: not tested for backward propagation + newCand = finalizeArrCand(candToProp, relFrom); + newCand = eliminateQuantifiers(mk(newCand, constraint), varsRenameFrom, invNum); + Expr newCand1 = replaceArrRangeForIndCheck(invNum, newCand, constraint, true); + Expr newCand2 = replaceArrRangeForIndCheck(invNum, newCand, constraint, false); + candidates[invNum].push_back(newCand1); + bool res1 = checkCand(invNum); + ExprVector candsTmp = candidates[invNum]; + candidates[invNum].push_back(newCand2); + bool res2 = checkCand(invNum); + if (candidates[invNum].empty()) candidates[invNum] = candsTmp; + // GF: temporary workaround: + // need to support Houdini for arrays, to be able to add newCand1 and newCand2 at the same time + return res1 || res2; + } ExprSet dsjs; getDisj(candToProp, dsjs); ExprSet newSeedDsjs; - int invNum = getVarIndex(rel, decls); for (auto & d : dsjs) { Expr r = eliminateQuantifiers(mk(d, constraint), varsRenameFrom, invNum); newSeedDsjs.insert(r); } - Expr newCand = disjoin(newSeedDsjs, m_efac); + newCand = disjoin(newSeedDsjs, m_efac); if (seed) { @@ -130,11 +175,6 @@ namespace ufo } } - void getArrCandIters(int ind, ExprSet& iters) - { - for (auto & a : arrSelects[ind]) iters.insert(a->right()); - } - bool addCandidate(int invNum, Expr cnd) { SamplFactory& sf = sfs[invNum].back(); @@ -149,8 +189,7 @@ namespace ufo ExprSet cnjs; ExprSet newCnjs; Expr it = iterators[invNum]; - if (it != NULL) - cnd = replaceArrRangeForIndCheck (invNum, cnd, hr->body); + if (it != NULL) cnd = replaceArrRangeForIndCheck (invNum, cnd, hr->body); } candidates[invNum].push_back(cnd); return true; @@ -165,79 +204,64 @@ namespace ufo return true; } - // hacky helper (to be revisited in the future) - Expr replaceArrRangeForIndCheck(int invNum, Expr cand, Expr body) + Expr finalizeArrCand(Expr cand, Expr relFrom) { - ExprSet iterVars; - getArrCandIters(invNum, iterVars); - Expr precond = preconds[invNum]; - ExprSet cnjs; - ExprSet newCnjs; - getConj(cand->last()->left(), cnjs); - // TODO: support the case when precond has two or more conjuncts - for (auto & a : iterVars) - for (auto & b : cnjs) - if (u.implies(replaceAll(b, a, iterators[invNum]), precond)) - newCnjs.insert(b); + // only forward currently + if (!isOpX(cand)) return NULL; + if (!findArray(cand)) return NULL; - if (newCnjs.size() != 1) return cand; - Expr preCand = *newCnjs.begin(); - cnjs.clear(); - newCnjs.clear(); - getConj(body, cnjs); + int invNum = getVarIndex(relFrom, decls); + Expr candQFree = cand->last(); - for (auto & b : cnjs) - if (u.isEquiv(mk(precond), b)) newCnjs.insert(b); - - Expr bodyRestr = conjoin(newCnjs, m_efac); + Expr propped = mergeIneqsWithVar(mk(candQFree->left(), postconds[invNum]), iterators[invNum]); + return replaceAll(cand, cand->last()->left(), propped); + } - Expr range = mergeIneqs(bodyRestr, preCand); - if (range == NULL) - { - ExprSet qVars; - ExprSet vars1; - ExprSet vars2; - filter (preCand, bind::IsConst (), inserter(vars1, vars1.begin())); - filter (bodyRestr, bind::IsConst (), inserter(vars2, vars2.begin())); + Expr replaceArrRangeForIndCheck(int invNum, Expr cand, Expr body, bool fwd = false) + { + Expr itRepl = iterators[invNum]; + Expr post = postconds[invNum]; + ExprSet cnjs; + ExprSet newCnjs; + getConj(cand->last()->left(), cnjs); - for (auto & v1 : vars1) - if (find(vars2.begin(), vars2.end(), v1) != vars2.end()) qVars.insert(v1); + // TODO: support the case when there are two or more quantified vars - if (qVars.empty()) return cand; + Expr it = bind::fapp(cand->arg(0)); + Expr extr; + if (iterGrows[invNum] && fwd) extr = mk(it, itRepl); + else if (iterGrows[invNum] && !fwd) extr = mk(it, itRepl); + else if (!iterGrows[invNum] && fwd) extr = mk(it, itRepl); + else if (!iterGrows[invNum] && !fwd) extr = mk(it, itRepl); - AeValSolver ae(mk(m_efac), mk(preCand, bodyRestr), qVars); - if (ae.solve()) - { - range = ae.getValidSubset(); - } - } - cand = replaceAll(cand, preCand, range); - return cand; + return replaceAll(cand, cand->last()->left(), mk(cand->last()->left(), extr)); } bool propagate(int invNum, Expr cand, bool seed) { bool res = true; Expr rel = decls[invNum]; + checked.insert(rel); for (auto & hr : ruleManager.chcs) { if (hr.srcRelation == hr.dstRelation || hr.isQuery) continue; + SamplFactory* sf1; SamplFactory* sf2; - // adding lemmas to the body. GF: not sure if it helps + // adding lemmas to the body. GF: disabled because something is wrong with them and arrays Expr constraint = hr.body; sf2 = &sfs[getVarIndex(hr.dstRelation, decls)].back(); - Expr lm2 = sf2->getAllLemmas(); - for (auto & v : invarVars[getVarIndex(hr.dstRelation, decls)]) - lm2 = replaceAll(lm2, v.second, hr.dstVars[v.first]); - constraint = mk(constraint, lm2); +// Expr lm2 = sf2->getAllLemmas(); +// for (auto & v : invarVars[getVarIndex(hr.dstRelation, decls)]) +// lm2 = replaceAll(lm2, v.second, hr.dstVars[v.first]); +// constraint = mk(constraint, lm2); if (!hr.isFact) { sf1 = &sfs[getVarIndex(hr.srcRelation, decls)].back(); - constraint = mk(constraint, sf1->getAllLemmas()); +// constraint = mk(constraint, sf1->getAllLemmas()); } // forward: @@ -246,7 +270,7 @@ namespace ufo Expr replCand = cand; for (int i = 0; i < 3; i++) for (auto & v : sf1->lf.nonlinVars) replCand = replaceAll(replCand, v.second, v.first); for (auto & v : invarVars[invNum]) replCand = replaceAll(replCand, v.second, hr.srcVars[v.first]); - res = res && getCandForAdjacentRel (replCand, constraint, hr.dstVars, hr.dstRelation, seed); + res = res && getCandForAdjacentRel (replCand, constraint, rel, hr.dstVars, hr.dstRelation, seed); } // backward (very similarly): @@ -255,7 +279,7 @@ namespace ufo Expr replCand = cand; for (int i = 0; i < 3; i++) for (auto & v : sf2->lf.nonlinVars) replCand = replaceAll(replCand, v.second, v.first); for (auto & v : invarVars[invNum]) replCand = replaceAll(replCand, v.second, hr.dstVars[v.first]); - res = res && getCandForAdjacentRel (replCand, constraint, hr.srcVars, hr.srcRelation, seed); + res = res && getCandForAdjacentRel (replCand, constraint, rel, hr.srcVars, hr.srcRelation, seed); } } return res; @@ -290,6 +314,22 @@ namespace ufo ExprVector se; filter (learnedQF->last(), bind::IsSelect (), inserter(se, se.begin())); + // filter out accesses via non-quantified indeces + for (auto it = se.begin(); it != se.end();) + { + bool found = false; + for (int i = 0; i < a->arity(); i++) + { + if (contains(se[0]->right(), a->arg(0))) + { + found = true; + break; + } + } + if (!found) it = se.erase(it); + else ++it; + } + bool multipleIndex = false; for (auto & s : se) { if (se[0]->right() != s->right()) { @@ -636,7 +676,7 @@ namespace ufo if (sm.arrAccessVars.size() > 0) { sm.candidates.clear(); - sm.analizeExtras(preconds[ind]); + sm.analizeExtras(postconds[ind]); for (auto cand : sm.candidates) { for (auto & iter : tmpArrAccessVars) @@ -652,16 +692,49 @@ namespace ufo } } + if (tmpArrAccessVars.empty()) + { + // only one variable for now. TBD: find if we need more + Expr qVar = bind::intConst(mkTerm ("_FH_arr_it", m_efac)); + tmpArrAccessVars.insert(qVar); + + assert (isOpX(preconds[ind])); // TODO: support more + + Expr fla; + if (preconds[ind]->right() == iterators[ind]) + fla = (iterGrows[ind]) ? mk(qVar, preconds[ind]->left()) : + mk(qVar, preconds[ind]->left()); + else if (preconds[ind]->left() == iterators[ind]) + fla = (iterGrows[ind]) ? mk(qVar, preconds[ind]->right()) : + mk(qVar, preconds[ind]->right()); + + arrIterRanges[ind].insert(fla); + arrIterRanges[ind].insert(replaceAll(postconds[ind], iterators[ind], qVar)); + } + + for (auto & a : tmpArrSelects) { for (auto iter : tmpArrAccessVars) - arrSelects[ind].insert(replaceAll(a, iterators[ind], iter)); + { + // GF is it needed here? + Expr replCand = replaceAll(a, iterators[ind], iter); + for (int i = 0; i < 3; i++) + for (auto & v : sf.lf.nonlinVars) + replCand = replaceAll(replCand, v.second, v.first); + arrSelects[ind].insert(replCand); + } } + for (auto & a : tmpArrCands) { - if (!u.isEquiv(a, mk(m_efac)) && !u.isEquiv(a, mk(m_efac))) + Expr replCand = a; + for (int i = 0; i < 3; i++) + for (auto & v : sf.lf.nonlinVars) + replCand = replaceAll(replCand, v.second, v.first); + if (!u.isEquiv(replCand, mk(m_efac)) && !u.isEquiv(replCand, mk(m_efac))) for (auto iter : tmpArrAccessVars) - arrCands[ind].insert(replaceAll(a, iterators[ind], iter)); + arrCands[ind].insert(replaceAll(replCand, iterators[ind], iter)); } for (auto & cand : candsFromCode) @@ -744,8 +817,9 @@ namespace ufo SamplFactory& sf = sfs[i].back(); for (auto & c : arrCands[i]) { + checked.clear(); Expr cand = sf.af.getSimplCand(c); -// outs () << " - - - bootstrapped cand: " << *cand << "\n"; +// outs () << " - - - bootstrapped cand for " << i << ":" << *cand << "\n"; if (!addCandidate(i, cand)) continue; if (checkCand(i)) @@ -839,26 +913,54 @@ namespace ufo return !m_smt_solver.solve (); } - void initArrayStuff(BndExpl& bnd) + void initArrayStuff(BndExpl& bnd, int cycleNum, Expr pref) { - for (int invNum = 0; invNum < decls.size(); invNum++) + vector& cycle = ruleManager.cycles[cycleNum]; + int invNum = getVarIndex(ruleManager.chcs[cycle[0]].srcRelation, decls); + if (iterators[invNum] != NULL) return; // GF: TODO more sanity checks (if needed) + + if (cycle.size() != 1) + { + for (int i = 0; i < cycle.size(); i++) outs () << " " << cycle[i] << ","; + outs () << "Small-step encoding is not supported currently\n"; + exit(0); // TODO: support longer cycles + } + ExprSet ssa; + ssas[invNum] = bnd.toExpr(cycle); + getConj(ssas[invNum], ssa); + + filter (ssas[invNum], bind::IsConst (), inserter(qvars[invNum], qvars[invNum].begin())); + postconds[invNum] = ruleManager.getPrecondition(&ruleManager.chcs[cycle[0]]); + + for (int i = 0; i < bnd.bindVars.back().size(); i++) { - vector cycle; - ruleManager.getCycleForRel(decls[invNum], cycle); - if (cycle.size() != 1) + Expr a = ruleManager.chcs[cycle[0]].srcVars[i]; + Expr b = bnd.bindVars.back()[i]; + if (!bind::isIntConst(a) /*|| !contains(postconds[invNum], a)*/) continue; + + // TODO: pick one if there are multiple available + if (u.implies(ssas[invNum], mk(a, b))) + { + iterators[invNum] = a; + iterGrows[invNum] = false; + break; + } + else if (u.implies(ssas[invNum], mk(a, b))) { - for (int i = 0; i < cycle.size(); i++) outs () << " " << cycle[i] << ","; - outs () << "Small-step encoding is not supported currently\n"; - exit(0); // TODO: support longer cycles + iterators[invNum] = a; + iterGrows[invNum] = true; } - ExprSet ssa; - ssas[invNum] = bnd.toExpr(cycle); - bindvars[invNum] = bnd.bindVars.back(); - getConj(ssas[invNum], ssa); + } - filter (ssas[invNum], bind::IsConst (), inserter(qvars[invNum], qvars[invNum].begin())); - preconds[invNum] = ruleManager.getPrecondition(&ruleManager.chcs[cycle[0]]); - iterators[invNum] = getEvolvingIntVar(preconds[invNum], ssa); + ssa.clear(); + getConj(pref, ssa); + for (auto & a : ssa) + { + if (contains(a, iterators[invNum])) + { + preconds[invNum] = a; + break; + } } } }; @@ -881,7 +983,6 @@ namespace ufo RndLearnerV3 ds(m_efac, z3, ruleManager, freqs, aggp); map cands; for (auto& dcl: ruleManager.decls) ds.initializeDecl(dcl); - if (ruleManager.hasArrays) ds.initArrayStuff(bnd); if (enableDataLearning) { #ifdef HAVE_ARMADILLO @@ -895,6 +996,7 @@ namespace ufo { Expr pref = bnd.compactPrefix(i); cands[ruleManager.chcs[ruleManager.cycles[i][0]].srcRelation].insert(pref); + if (ruleManager.hasArrays) ds.initArrayStuff(bnd, i, pref); } for (auto& dcl: ruleManager.wtoDecls) ds.getSeeds(dcl, cands); diff --git a/include/sampl/ArrCom.hpp b/include/sampl/ArrCom.hpp index f04f65319..5c9a8f244 100644 --- a/include/sampl/ArrCom.hpp +++ b/include/sampl/ArrCom.hpp @@ -36,7 +36,6 @@ namespace ufo { set arrConsts; set arrCoefs; - for (auto & a : cands) { if (getLinCombCoefs(a, arrCoefs)) @@ -68,16 +67,16 @@ namespace ufo void initialize(ExprVector& intVars, ExprSet& arrCands, ExprSet& arrSelects, ExprSet& arrRange) { - for (auto & a : arrSelects) + ExprSet it_vars; + for (auto & a : arrSelects) filter (a->right(), bind::IsConst(), std::inserter (it_vars, it_vars.begin ())); + for (auto & it : it_vars) { - postFac.addVar(a); - Expr it = a->right(); - if (bind::isIntConst(it) && - find(preFac.getVars().begin(), preFac.getVars().end(), it) == preFac.getVars().end()) + if (bind::isIntConst(it)) { postFac.addVar(it); preFac.addVar(it); - forall_args.push_back(it->left()); + if (find(intVars.begin(), intVars.end(), it) == intVars.end()) + forall_args.push_back(it->left()); } } diff --git a/include/sampl/SeedMiner.hpp b/include/sampl/SeedMiner.hpp index b5403f162..077528833 100644 --- a/include/sampl/SeedMiner.hpp +++ b/include/sampl/SeedMiner.hpp @@ -120,6 +120,8 @@ namespace ufo Expr tmpl = findNonlinAndRewrite(a, invAndIterVars, extraVars); for (auto &b : extraVars) invAndIterVars.push_back(b.second); Expr normalized = normalizeDisj(tmpl, invAndIterVars); + if (!containsOp(lhs)) - { - Expr arrVar = lhs->left(); - if (isOpX(arrVar)) - { - return unfoldITE (reBuildCmp(term, - mk(arrVar->left(), - mk(arrVar->last(), lhs->right())), rhs)); + Expr ifExpr = unfoldITE (reBuildCmp(term, arrVar->right(), lhs)); + Expr elseExpr = unfoldITE (reBuildCmp(term, arrVar->last(), lhs)); + + ifExpr = propagateStore(ifExpr, rhs->right(), rhs->last(), lhs); + elseExpr = propagateStore(elseExpr, rhs->right(), rhs->last(), lhs); + + Expr condExpr = unfoldITE (arrVar->left()); + Expr retExpr = mk (mk(condExpr, ifExpr), mk(mkNeg(condExpr), elseExpr)); + + return retExpr; } } if (isOpX(a); + if (sels[a]) noselects = false; + else allselects = false; + } + if (!noselects && ! allselects) + { + ExprSet newCnjs; + for (auto & a : cnjs) + if (sels[a]) newCnjs.insert(a); + newDsjs.insert(conjoin(newCnjs,exp->getFactory())); + } + } + return disjoin(newDsjs,exp->getFactory()); + } return exp; } }; @@ -2624,6 +2704,8 @@ namespace ufo return mk(e1->left(), e2->right()); if (isOpX(e1) && isOpX(e2) && e1->right() == e2->left()) return mk(e1->left(), e2->right()); + if (isOpX(e1) && isOpX(e2) && (e1->left() == e2->right())) + return mk(e2->left(), e1->right()); if (isOpX(e1) && isOpX(e2) && e1->right() == e2->left()) return mk(e1->left(), e2->right()); diff --git a/include/deep/Horn.hpp b/include/deep/Horn.hpp index 84ecec8d1..894e28dde 100755 --- a/include/deep/Horn.hpp +++ b/include/deep/Horn.hpp @@ -448,6 +448,16 @@ namespace ufo } } + HornRuleExt* getNestedRel (Expr rel) + { + vector cycle; + getCycleForRel(rel, cycle); + if (cycle.size() > 0 && !chcs[cycle[0]].isInductive) + return &chcs[cycle[0]]; + else + return NULL; + } + HornRuleExt* getFirstRuleOutside (Expr rel) { for (auto & c : cycles) diff --git a/include/deep/RndLearner.hpp b/include/deep/RndLearner.hpp index e15cfec3b..1ea5243c6 100644 --- a/include/deep/RndLearner.hpp +++ b/include/deep/RndLearner.hpp @@ -34,7 +34,7 @@ namespace ufo // for arrays vector arrCands; - vector arrSelects; + vector arrAccessVars; vector arrIterRanges; int invNumber; @@ -464,7 +464,7 @@ namespace ufo } arrCands.push_back(ExprSet()); - arrSelects.push_back(ExprSet()); + arrAccessVars.push_back(ExprSet()); arrIterRanges.push_back(ExprSet()); invNumber++; @@ -546,7 +546,7 @@ namespace ufo sf.lf.addConst(min); } - sf.initialize(arrCands[ind], arrSelects[ind], arrIterRanges[ind]); + sf.initialize(arrCands[ind], arrAccessVars[ind], arrIterRanges[ind]); ExprSet allCands; for (auto &cs : css) diff --git a/include/deep/RndLearnerV3.hpp b/include/deep/RndLearnerV3.hpp index e35a4ad54..7f8f3a0cd 100644 --- a/include/deep/RndLearnerV3.hpp +++ b/include/deep/RndLearnerV3.hpp @@ -647,11 +647,72 @@ namespace ufo else return multiHoudini(worklist); } - bool findInvVar(int invNum, Expr var) + bool findInvVar(int invNum, Expr expr, ExprVector& ve) { - for (auto & v : invarVars[invNum]) - if (v.second == var) return true; - return false; + ExprSet vars; + filter (expr, bind::IsConst (), inserter(vars, vars.begin())); + + for (auto & v : vars) + { + bool found = false; + for (auto & w : invarVars[invNum]) + { + if (w.second == v) + { + found = true; + break; + } + } + if (!found) + { + if (find (ve.begin(), ve.end(), v) == ve.end()) + return false; + } + } + return true; + } + + bool toCont(int invNum, Expr expr, ExprVector& ve) + { + ExprSet vars; + filter (expr, bind::IsConst (), inserter(vars, vars.begin())); + bool toCont = true; + for (auto & expr : vars) + { + if (!findInvVar(invNum, expr, ve)) + { + toCont = false; + break; + } + } + return toCont; + } + + // heuristic to replace weird variables in candidates + bool prepareArrCand (Expr& replCand, ExprMap& replLog, ExprVector& tmpArrAccessVars, int ind, int i = 0) + { + if (tmpArrAccessVars.empty()) return false; + + ExprSet se; + filter (replCand, bind::IsSelect (), inserter(se, se.begin())); + + for (auto & a : se) + { + if (isOpX(a->right()) || (!findInvVar(ind, a->right(), tmpArrAccessVars))) + { + if (isOpX(a->right())) + { + arrIterRanges[ind].insert(mk(tmpArrAccessVars[i], a->right())); + } + // TODO: try other combinations of replacements + if (i >= tmpArrAccessVars.size()) return false; + replLog[a->right()] = tmpArrAccessVars[i]; + replCand = replaceAll(replCand, a->right(), replLog[a->right()]); + + return prepareArrCand (replCand, replLog, tmpArrAccessVars, ind, i + 1); + } + } + return true; } // adapted from doSeedMining @@ -667,7 +728,7 @@ namespace ufo ExprSet tmpArrAccess; ExprSet tmpArrSelects; ExprSet tmpArrCands; - ExprSet tmpArrAccessVars; + ExprVector tmpArrAccessVars; for (auto &hr : ruleManager.chcs) { if (hr.dstRelation != invRel && hr.srcRelation != invRel) continue; @@ -688,89 +749,118 @@ namespace ufo { tmpArrCands.insert(sm.arrCands.begin(), sm.arrCands.end()); tmpArrSelects.insert(sm.arrSelects.begin(), sm.arrSelects.end()); - tmpArrAccessVars.insert(sm.arrAccessVars.begin(), sm.arrAccessVars.end()); - arrIterRanges[ind].insert(sm.arrIterRanges.begin(), sm.arrIterRanges.end()); + } + } - // extra range constraints - if (sm.arrAccessVars.size() > 0) + if (ruleManager.hasArrays) + { + if (tmpArrAccessVars.empty() && preconds[ind] != NULL) + { + Expr qVar = bind::intConst(mkTerm ("_FH_arr_it", m_efac)); + tmpArrAccessVars.push_back(qVar); + + assert (isOpX(preconds[ind])); // TODO: support more + + ExprVector invAndIterVarsAll; + for (auto & a : invarVars[ind]) invAndIterVarsAll.push_back(a.second); + invAndIterVarsAll.push_back(qVar); + + Expr fla; + if (preconds[ind]->right() == iterators[ind]) + fla = (iterGrows[ind]) ? mk(qVar, preconds[ind]->left()) : + mk(qVar, preconds[ind]->left()); + else if (preconds[ind]->left() == iterators[ind]) + fla = (iterGrows[ind]) ? mk(qVar, preconds[ind]->right()) : + mk(qVar, preconds[ind]->right()); + + arrIterRanges[ind].insert(normalizeDisj(fla, invAndIterVarsAll)); + arrIterRanges[ind].insert(normalizeDisj( + replaceAll(postconds[ind], iterators[ind], qVar), invAndIterVarsAll)); + } + + auto nested = ruleManager.getNestedRel(invRel); + if (nested != NULL) + { + int invNumTo = getVarIndex(nested->dstRelation, decls); + // only one variable for now. TBD: find if we need more + Expr qVar2 = bind::intConst(mkTerm ("_FH_nst_it", m_efac)); + tmpArrAccessVars.push_back(qVar2); + + Expr range = conjoin (arrIterRanges[invNumTo], m_efac); + ExprSet quantified; + for (int i = 0; i < nested->dstVars.size(); i++) + { + range = replaceAll(range, invarVars[invNumTo][i], nested->dstVars[i]); + quantified.insert(nested->dstVars[i]); + } + + // naive propagation of ranges + ExprSet cnjs; + getConj(nested->body, cnjs); + for (auto & a : cnjs) { - sm.candidates.clear(); - sm.analizeExtras(postconds[ind]); - for (auto cand : sm.candidates) + for (auto & b : quantified) { - for (auto & iter : tmpArrAccessVars) + if (isOpX(a) && a->right() == b) { - cand = replaceAll(cand, iterators[ind], iter); - if (!u.implies(conjoin(arrIterRanges[ind], m_efac), cand)) - { - arrIterRanges[ind].insert(cand); - } + range = replaceAll(range, b, a->left()); + } + else if (isOpX(a) && a->left() == b) + { + range = replaceAll(range, b, a->right()); } } } + arrIterRanges[ind].insert( + replaceAll(replaceAll(range, *arrAccessVars[invNumTo].begin(), qVar2), + iterators[ind], tmpArrAccessVars[0])); } - } - if (tmpArrAccessVars.empty()) - { - // only one variable for now. TBD: find if we need more - Expr qVar = bind::intConst(mkTerm ("_FH_arr_it", m_efac)); - tmpArrAccessVars.insert(qVar); - - assert (isOpX(preconds[ind])); // TODO: support more - - ExprVector invAndIterVarsAll; - for (auto & a : invarVars[ind]) invAndIterVarsAll.push_back(a.second); - invAndIterVarsAll.push_back(qVar); - - Expr fla; - if (preconds[ind]->right() == iterators[ind]) - fla = (iterGrows[ind]) ? mk(qVar, preconds[ind]->left()) : - mk(qVar, preconds[ind]->left()); - else if (preconds[ind]->left() == iterators[ind]) - fla = (iterGrows[ind]) ? mk(qVar, preconds[ind]->right()) : - mk(qVar, preconds[ind]->right()); - - arrIterRanges[ind].insert(normalizeDisj(fla, invAndIterVarsAll)); - arrIterRanges[ind].insert(normalizeDisj( - replaceAll(postconds[ind], iterators[ind], qVar), invAndIterVarsAll)); - } + arrAccessVars[ind].insert(tmpArrAccessVars.begin(), tmpArrAccessVars.end()); - for (auto & a : tmpArrSelects) - { - for (auto iter : tmpArrAccessVars) + // process all quantified seeds + for (auto & a : tmpArrCands) { - // GF is it needed here? - Expr replCand = replaceAll(a, iterators[ind], iter); + Expr replCand = a; for (int i = 0; i < 3; i++) for (auto & v : sf.lf.nonlinVars) replCand = replaceAll(replCand, v.second, v.first); - arrSelects[ind].insert(replCand); + if (!u.isEquiv(replCand, mk(m_efac)) && !u.isEquiv(replCand, mk(m_efac))) + { + ExprMap replLog; + + if ( prepareArrCand (replCand, replLog, tmpArrAccessVars, ind) && + (contains(replCand, iterators[ind]) || !emptyIntersect(replCand, tmpArrAccessVars))) + for (auto iter : tmpArrAccessVars) + arrCands[ind].insert(replaceAll(replCand, iterators[ind], iter)); + else candsFromCode.insert(a); + } } - } - for (auto & a : tmpArrCands) - { - Expr replCand = a; - for (int i = 0; i < 3; i++) - for (auto & v : sf.lf.nonlinVars) - replCand = replaceAll(replCand, v.second, v.first); - if (!u.isEquiv(replCand, mk(m_efac)) && !u.isEquiv(replCand, mk(m_efac))) + // trick for tiling benchs + ExprSet sels; + for (auto & sel : tmpArrSelects) { - if (contains(replCand, iterators[ind]) || !emptyIntersect(replCand, tmpArrAccessVars)) - { - for (auto iter : tmpArrAccessVars) - { - arrCands[ind].insert(replaceAll(replCand, iterators[ind], iter)); + if (!toCont(ind, sel, tmpArrAccessVars)) continue; + for (auto iter : tmpArrAccessVars) + sels.insert(replaceAll(sel, iterators[ind], iter)); + } + + for (auto & qcand : arrCands[ind]) + { + ExprSet se; + filter (qcand, bind::IsSelect (), inserter(se, se.begin())); + for (auto & s : se) { + for (auto & arrsel : sels) { + if (se.find(arrsel) != se.end()) continue; + Expr qcandTmp = replaceAll(qcand, s, arrsel); + arrCands[ind].insert(qcandTmp); } } - else - { - candsFromCode.insert(a); - } } } + // process all quantifier-free seeds for (auto & cand : candsFromCode) { checked.clear(); @@ -780,17 +870,7 @@ namespace ufo replCand = replaceAll(replCand, v.second, v.first); // sanity check for replCand: - ExprSet vars; - filter (replCand, bind::IsConst (), inserter(vars, vars.begin())); - bool toCont = true; - for (auto & v : vars) - if (!findInvVar(ind, v)) - { - toCont = false; - break; - } - - if (toCont && addCandidate(ind, replCand)) + if (toCont (ind, replCand, tmpArrAccessVars) && addCandidate(ind, replCand)) propagate (ind, replCand, true); } } diff --git a/include/sampl/ArrCom.hpp b/include/sampl/ArrCom.hpp index 5c9a8f244..12032fd46 100644 --- a/include/sampl/ArrCom.hpp +++ b/include/sampl/ArrCom.hpp @@ -65,11 +65,9 @@ namespace ufo for (auto & ar : orArities) lf.stabilizeDensities(ar, eps, 1); } - void initialize(ExprVector& intVars, ExprSet& arrCands, ExprSet& arrSelects, ExprSet& arrRange) + void initialize(ExprVector& intVars, ExprSet& arrCands, ExprSet& arrAccessVars, ExprSet& arrRange) { - ExprSet it_vars; - for (auto & a : arrSelects) filter (a->right(), bind::IsConst(), std::inserter (it_vars, it_vars.begin ())); - for (auto & it : it_vars) + for (auto & it : arrAccessVars) { if (bind::isIntConst(it)) { From 1bad65f09d32cd47c3ce8e2c206bc354749ef9ed Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Tue, 13 Nov 2018 21:40:39 -0500 Subject: [PATCH 129/236] optimized candidate propagation for Arrays --- bench_horn/array_init_both_ends.smt2 | 2 - ...erse.smt2 => array_init_reverse_mult.smt2} | 0 include/ae/ExprSimpl.hpp | 2 +- include/deep/RndLearnerV3.hpp | 132 +++++++++++++----- include/sampl/ArrCom.hpp | 7 +- 5 files changed, 96 insertions(+), 47 deletions(-) rename bench_horn_multiple/{array_init_reverse.smt2 => array_init_reverse_mult.smt2} (100%) diff --git a/bench_horn/array_init_both_ends.smt2 b/bench_horn/array_init_both_ends.smt2 index 8372b7e26..6f167d771 100644 --- a/bench_horn/array_init_both_ends.smt2 +++ b/bench_horn/array_init_both_ends.smt2 @@ -4,8 +4,6 @@ (declare-var i1 Int) (declare-var N Int) -; problematic query - (declare-rel inv ((Array Int Int) Int Int)) (declare-rel fail ()) diff --git a/bench_horn_multiple/array_init_reverse.smt2 b/bench_horn_multiple/array_init_reverse_mult.smt2 similarity index 100% rename from bench_horn_multiple/array_init_reverse.smt2 rename to bench_horn_multiple/array_init_reverse_mult.smt2 diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index b382c2a47..5940dcab6 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -2768,7 +2768,7 @@ namespace ufo if (cnjs2.size() != 2) return e; - assert(mergeIneqs(cnjs2[0], cnjs2[1]) != NULL); + if(mergeIneqs(cnjs2[0], cnjs2[1]) == NULL) return NULL; cnjs3.insert(mergeIneqs(cnjs2[0], cnjs2[1])); return conjoin(cnjs3, e->getFactory()); diff --git a/include/deep/RndLearnerV3.hpp b/include/deep/RndLearnerV3.hpp index 7f8f3a0cd..edb439baf 100644 --- a/include/deep/RndLearnerV3.hpp +++ b/include/deep/RndLearnerV3.hpp @@ -115,7 +115,7 @@ namespace ufo return mk(m_efac); } - bool getCandForAdjacentRel(Expr candToProp, Expr constraint, Expr relFrom, ExprVector& varsRenameFrom, Expr rel, bool seed) + bool getCandForAdjacentRel(Expr candToProp, Expr constraint, Expr relFrom, ExprVector& varsRenameFrom, Expr rel, bool seed, bool fwd) { Expr formula = mk(candToProp, constraint); if (!containsOp(candToProp) && !u.isSat(formula)) return false; // sometimes, maybe we should return true. @@ -126,20 +126,20 @@ namespace ufo if (containsOp(candToProp)) { // GF: not tested for backward propagation + if (fwd == false) return true; if (finalizeArrCand(candToProp, constraint, relFrom)) { newCand = eliminateQuantifiers(mk(candToProp, constraint), varsRenameFrom, invNum); - Expr newCand1 = replaceArrRangeForIndCheck(invNum, newCand, constraint, true); - Expr newCand2 = replaceArrRangeForIndCheck(invNum, newCand, constraint, false); - candidates[invNum].push_back(newCand1); - bool res1 = checkCand(invNum); - ExprVector candsTmp = candidates[invNum]; - candidates[invNum].push_back(newCand2); - bool res2 = checkCand(invNum); - if (candidates[invNum].empty()) candidates[invNum] = candsTmp; // GF: temporary workaround: - // need to support Houdini for arrays, to be able to add newCand1 and newCand2 at the same time - return res1 || res2; + // need to support Houdini for arrays, to be able to add newCand and newCand1 at the same time + Expr newCand1 = replaceArrRangeForIndCheck(invNum, newCand, true); + auto candsTmp = candidates; + candidates[invNum].push_back(newCand); + bool res0 = checkCand(invNum); + if (!candidates[invNum].empty()) return res0; + candidates = candsTmp; + candidates[invNum].push_back(newCand1); + return checkCand(invNum); } else { @@ -198,7 +198,7 @@ namespace ufo ExprSet cnjs; ExprSet newCnjs; Expr it = iterators[invNum]; - if (it != NULL) cnd = replaceArrRangeForIndCheck (invNum, cnd, hr->body); + if (it != NULL) cnd = replaceArrRangeForIndCheck (invNum, cnd); } candidates[invNum].push_back(cnd); return true; @@ -223,12 +223,11 @@ namespace ufo int invNum = getVarIndex(relFrom, decls); if (u.isSat(postconds[invNum], constraint)) return false; - Expr propped = mergeIneqsWithVar(mk(cand->last()->left(), postconds[invNum]), iterators[invNum]); - cand = replaceAll(cand, cand->last()->left(), propped); + cand = replaceAll(cand, cand->last()->left(), conjoin(arrIterRanges[invNum], m_efac)); return true; } - Expr replaceArrRangeForIndCheck(int invNum, Expr cand, Expr body, bool fwd = false) + Expr replaceArrRangeForIndCheck(int invNum, Expr cand, bool fwd = false) { Expr itRepl = iterators[invNum]; Expr post = postconds[invNum]; @@ -282,7 +281,7 @@ namespace ufo Expr replCand = cand; for (int i = 0; i < 3; i++) for (auto & v : sf1->lf.nonlinVars) replCand = replaceAll(replCand, v.second, v.first); for (auto & v : invarVars[invNum]) replCand = replaceAll(replCand, v.second, hr.srcVars[v.first]); - res = res && getCandForAdjacentRel (replCand, constraint, rel, hr.dstVars, hr.dstRelation, seed); + res = res && getCandForAdjacentRel (replCand, constraint, rel, hr.dstVars, hr.dstRelation, seed, true); } // backward (very similarly): @@ -291,7 +290,7 @@ namespace ufo Expr replCand = cand; for (int i = 0; i < 3; i++) for (auto & v : sf2->lf.nonlinVars) replCand = replaceAll(replCand, v.second, v.first); for (auto & v : invarVars[invNum]) replCand = replaceAll(replCand, v.second, hr.dstVars[v.first]); - res = res && getCandForAdjacentRel (replCand, constraint, rel, hr.srcVars, hr.srcRelation, seed); + res = res && getCandForAdjacentRel (replCand, constraint, rel, hr.srcVars, hr.srcRelation, seed, false); } } return res; @@ -688,28 +687,48 @@ namespace ufo return toCont; } + // heuristic to instantiate a quantified candidate for some particular instances + void createGroundInstances (ExprSet& vals, ExprSet& res, Expr qcand, Expr iterVar) + { + ExprSet se; + filter (qcand, bind::IsSelect (), inserter(se, se.begin())); + + for (auto & a : se) + { + if (iterVar == a->right()) + { + for (auto & v : vals) + { + res.insert(replaceAll(qcand, iterVar, v)); + } + } + } + } + // heuristic to replace weird variables in candidates - bool prepareArrCand (Expr& replCand, ExprMap& replLog, ExprVector& tmpArrAccessVars, int ind, int i = 0) + bool prepareArrCand (Expr& replCand, ExprMap& replLog, ExprVector& av, + ExprSet& tmpRanges, ExprSet& concreteVals, int ind, int i = 0) { - if (tmpArrAccessVars.empty()) return false; + if (av.empty()) return false; ExprSet se; filter (replCand, bind::IsSelect (), inserter(se, se.begin())); for (auto & a : se) { - if (isOpX(a->right()) || (!findInvVar(ind, a->right(), tmpArrAccessVars))) + if (isOpX(a->right()) || (!findInvVar(ind, a->right(), av))) { if (isOpX(a->right())) { - arrIterRanges[ind].insert(mk(tmpArrAccessVars[i], a->right())); + tmpRanges.insert(mk(av[i], a->right())); + concreteVals.insert(a->right()); } // TODO: try other combinations of replacements - if (i >= tmpArrAccessVars.size()) return false; - replLog[a->right()] = tmpArrAccessVars[i]; + if (i >= av.size()) return false; + replLog[a->right()] = av[i]; replCand = replaceAll(replCand, a->right(), replLog[a->right()]); - return prepareArrCand (replCand, replLog, tmpArrAccessVars, ind, i + 1); + return prepareArrCand (replCand, replLog, av, tmpRanges, concreteVals, ind, i + 1); } } return true; @@ -754,7 +773,7 @@ namespace ufo if (ruleManager.hasArrays) { - if (tmpArrAccessVars.empty() && preconds[ind] != NULL) + if (preconds[ind] != NULL) { Expr qVar = bind::intConst(mkTerm ("_FH_arr_it", m_efac)); tmpArrAccessVars.push_back(qVar); @@ -828,11 +847,29 @@ namespace ufo if (!u.isEquiv(replCand, mk(m_efac)) && !u.isEquiv(replCand, mk(m_efac))) { ExprMap replLog; - - if ( prepareArrCand (replCand, replLog, tmpArrAccessVars, ind) && + ExprSet tmpRanges; + ExprSet concreteVals; + if ( prepareArrCand (replCand, replLog, tmpArrAccessVars, tmpRanges, concreteVals, ind) && (contains(replCand, iterators[ind]) || !emptyIntersect(replCand, tmpArrAccessVars))) + { + // very cheeky heuristic: sometimes restrict, but sometimes extend the range + // depending on existing constants + if (u.isSat(conjoin(tmpRanges, m_efac), conjoin(arrIterRanges[ind], m_efac))) + { + arrIterRanges[ind].insert(tmpRanges.begin(), tmpRanges.end()); + } + else + { + for (auto & a : tmpArrCands) + createGroundInstances (concreteVals, candsFromCode, a, iterators[ind]); + } + + // at this point it should not happen, but sometimes it does. To debug. + if (!findInvVar(ind, replCand, tmpArrAccessVars)) continue; + for (auto iter : tmpArrAccessVars) arrCands[ind].insert(replaceAll(replCand, iterators[ind], iter)); + } else candsFromCode.insert(a); } } @@ -924,7 +961,6 @@ namespace ufo { filterUnsat(); - auto candidatesTmp = candidates; if (multiHoudini(ruleManager.wtoCHCs)) { assignPrioritiesForLearned(); @@ -947,7 +983,7 @@ namespace ufo { checked.clear(); Expr cand = sf.af.getSimplCand(c); -// outs () << " - - - bootstrapped cand for " << i << ":" << *cand << "\n"; +// outs () << " - - - bootstrapped cand for " << i << ": " << *cand << "\n"; if (!addCandidate(i, cand)) continue; if (checkCand(i)) @@ -962,17 +998,37 @@ namespace ufo } } } - } - // second round of bootstrapping (to be removed after Houdini supports arrays) - candidates = candidatesTmp; - if (multiHoudini(ruleManager.wtoCHCs)) - { - assignPrioritiesForLearned(); - if (checkAllLemmas()) + // second round of bootstrapping (to be removed after Houdini supports arrays) + + candidates.clear(); + ExprVector empt; + for (auto &hr: ruleManager.chcs) { - outs () << "Success after bootstrapping\n"; - return true; + if (hr.isQuery) + { + int invNum = getVarIndex(hr.srcRelation, decls); + ExprSet cnjs; + getConj(hr.body, cnjs); + for (auto & a : cnjs) + { + if (isOpX(a) && findInvVar(invNum, a, empt)) + { + candidates[invNum].push_back(a->left()); + break; + } + } + break; + } + } + if (multiHoudini(ruleManager.wtoCHCs)) + { + assignPrioritiesForLearned(); + if (checkAllLemmas()) + { + outs () << "Success after bootstrapping\n"; + return true; + } } } diff --git a/include/sampl/ArrCom.hpp b/include/sampl/ArrCom.hpp index 12032fd46..e66585739 100644 --- a/include/sampl/ArrCom.hpp +++ b/include/sampl/ArrCom.hpp @@ -78,12 +78,7 @@ namespace ufo } } - pre = mk(m_efac); - for (auto & a : arrRange) - { - if (!emptyIntersect(a, preFac.getVars())) - pre = mk(pre, a); - } + pre = conjoin(arrRange, m_efac); initializeLAfactory(preFac, arrRange, intVars, 1); initializeLAfactory(postFac, arrCands, intVars, 0); From db4e94846fe1280a70da6f4adfdaaa4589bea445 Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Tue, 13 Nov 2018 21:42:25 -0500 Subject: [PATCH 130/236] added new benchmarks over Arrays (thanks Sumanth Prabhu and Kumar Madhukar) --- bench_horn/array_copy_inverse.smt2 | 17 ++++++++ bench_horn/array_doub_access_init_const.smt2 | 16 ++++++++ bench_horn/array_index_compl.smt2 | 16 ++++++++ bench_horn/array_init_batches_const.smt2 | 16 ++++++++ bench_horn/array_init_both_ends2.smt2 | 20 ++++++++++ .../array_init_both_ends_simpl_const.smt2 | 20 ++++++++++ bench_horn/array_init_const_const.smt2 | 16 ++++++++ bench_horn/array_init_disj_const.smt2 | 16 ++++++++ bench_horn/array_init_double_const.smt2 | 20 ++++++++++ bench_horn/array_init_ite_jump_const.smt2 | 21 ++++++++++ bench_horn/array_init_ite_jump_two_const.smt2 | 23 +++++++++++ bench_horn/array_init_nondet_var_mult.smt2 | 17 ++++++++ bench_horn/array_init_nondet_vars.smt2 | 18 +++++++++ bench_horn/array_init_nondet_vars2.smt2 | 18 +++++++++ bench_horn/array_init_upto_nondet.smt2 | 17 ++++++++ bench_horn/array_init_var_plus_ind2.smt2 | 19 +++++++++ bench_horn/array_init_var_plus_ind3.smt2 | 17 ++++++++ bench_horn/array_min_const.smt2 | 17 ++++++++ bench_horn/array_min_max_const.smt2 | 22 +++++++++++ bench_horn/array_min_swap_const.smt2 | 25 ++++++++++++ bench_horn/array_partial_init.smt2 | 25 ++++++++++++ bench_horn/array_single_elem_const.smt2 | 16 ++++++++ bench_horn/array_standard_partition.smt2 | 25 ++++++++++++ bench_horn/array_standard_password.smt2 | 17 ++++++++ bench_horn/array_tiling_poly3.smt2 | 16 ++++++++ bench_horn/array_tiling_poly5.smt2 | 16 ++++++++ bench_horn/array_tiling_tcpy2.smt2 | 33 ++++++++++++++++ bench_horn/array_tiling_tcpy3.smt2 | 30 ++++++++++++++ bench_horn/array_tripl_access_init_const.smt2 | 16 ++++++++ bench_horn_cex/array_min_and_copy_cex.smt2 | 26 +++++++++++++ .../array_min_and_copy_shift_sum_cex.smt2 | 33 ++++++++++++++++ bench_horn_cex/array_min_swap_cex.smt2 | 22 +++++++++++ .../array_bubble_sort_rev.smt2 | 30 ++++++++++++++ .../array_copy_nondet_add.smt2 | 31 +++++++++++++++ bench_horn_multiple/array_hybr_nest_3.smt2 | 31 +++++++++++++++ bench_horn_multiple/array_init_addvar2.smt2 | 22 +++++++++++ bench_horn_multiple/array_init_addvar3.smt2 | 22 +++++++++++ bench_horn_multiple/array_init_addvar4.smt2 | 22 +++++++++++ .../array_init_and_copy_const.smt2 | 23 +++++++++++ .../array_init_and_copy_inverse.smt2 | 23 +++++++++++ bench_horn_multiple/array_init_doubl2.smt2 | 22 +++++++++++ bench_horn_multiple/array_init_doubl3.smt2 | 22 +++++++++++ .../array_init_increm_const.smt2 | 21 ++++++++++ .../array_init_increm_twice_const.smt2 | 22 +++++++++++ ...ay_init_increm_two_arrs_antisym_const.smt2 | 24 ++++++++++++ .../array_init_increm_two_arrs_const.smt2 | 24 ++++++++++++ .../array_init_nondet_vars_plus_ind.smt2 | 27 +++++++++++++ .../array_init_pair_sum_const.smt2 | 25 ++++++++++++ .../array_init_pair_symmetr2.smt2 | 27 +++++++++++++ .../array_init_pair_symmetr3.smt2 | 26 +++++++++++++ .../array_init_pair_symmetr4.smt2 | 26 +++++++++++++ .../array_init_reverse_const.smt2 | 16 ++++++++ .../array_init_symmetr_swap_const.smt2 | 24 ++++++++++++ bench_horn_multiple/array_min_and_copy.smt2 | 26 +++++++++++++ .../array_min_and_copy_inverse.smt2 | 26 +++++++++++++ .../array_min_and_copy_shift.smt2 | 26 +++++++++++++ .../array_min_and_copy_shift_sum.smt2 | 33 ++++++++++++++++ .../array_min_and_copy_shift_sum_add.smt2 | 33 ++++++++++++++++ bench_horn_multiple/array_standard_copy4.smt2 | 39 +++++++++++++++++++ bench_horn_multiple/array_tiling_poly4.smt2 | 21 ++++++++++ bench_horn_multiple/array_tiling_poly6.smt2 | 21 ++++++++++ bench_horn_multiple/array_zero_sum_m2.smt2 | 33 ++++++++++++++++ 62 files changed, 1414 insertions(+) create mode 100644 bench_horn/array_copy_inverse.smt2 create mode 100644 bench_horn/array_doub_access_init_const.smt2 create mode 100644 bench_horn/array_index_compl.smt2 create mode 100644 bench_horn/array_init_batches_const.smt2 create mode 100644 bench_horn/array_init_both_ends2.smt2 create mode 100644 bench_horn/array_init_both_ends_simpl_const.smt2 create mode 100644 bench_horn/array_init_const_const.smt2 create mode 100644 bench_horn/array_init_disj_const.smt2 create mode 100644 bench_horn/array_init_double_const.smt2 create mode 100644 bench_horn/array_init_ite_jump_const.smt2 create mode 100644 bench_horn/array_init_ite_jump_two_const.smt2 create mode 100644 bench_horn/array_init_nondet_var_mult.smt2 create mode 100644 bench_horn/array_init_nondet_vars.smt2 create mode 100644 bench_horn/array_init_nondet_vars2.smt2 create mode 100644 bench_horn/array_init_upto_nondet.smt2 create mode 100644 bench_horn/array_init_var_plus_ind2.smt2 create mode 100644 bench_horn/array_init_var_plus_ind3.smt2 create mode 100644 bench_horn/array_min_const.smt2 create mode 100644 bench_horn/array_min_max_const.smt2 create mode 100644 bench_horn/array_min_swap_const.smt2 create mode 100644 bench_horn/array_partial_init.smt2 create mode 100644 bench_horn/array_single_elem_const.smt2 create mode 100644 bench_horn/array_standard_partition.smt2 create mode 100644 bench_horn/array_standard_password.smt2 create mode 100644 bench_horn/array_tiling_poly3.smt2 create mode 100644 bench_horn/array_tiling_poly5.smt2 create mode 100644 bench_horn/array_tiling_tcpy2.smt2 create mode 100644 bench_horn/array_tiling_tcpy3.smt2 create mode 100644 bench_horn/array_tripl_access_init_const.smt2 create mode 100644 bench_horn_cex/array_min_and_copy_cex.smt2 create mode 100644 bench_horn_cex/array_min_and_copy_shift_sum_cex.smt2 create mode 100644 bench_horn_cex/array_min_swap_cex.smt2 create mode 100644 bench_horn_multiple/array_bubble_sort_rev.smt2 create mode 100644 bench_horn_multiple/array_copy_nondet_add.smt2 create mode 100644 bench_horn_multiple/array_hybr_nest_3.smt2 create mode 100644 bench_horn_multiple/array_init_addvar2.smt2 create mode 100644 bench_horn_multiple/array_init_addvar3.smt2 create mode 100644 bench_horn_multiple/array_init_addvar4.smt2 create mode 100644 bench_horn_multiple/array_init_and_copy_const.smt2 create mode 100644 bench_horn_multiple/array_init_and_copy_inverse.smt2 create mode 100644 bench_horn_multiple/array_init_doubl2.smt2 create mode 100644 bench_horn_multiple/array_init_doubl3.smt2 create mode 100644 bench_horn_multiple/array_init_increm_const.smt2 create mode 100644 bench_horn_multiple/array_init_increm_twice_const.smt2 create mode 100644 bench_horn_multiple/array_init_increm_two_arrs_antisym_const.smt2 create mode 100644 bench_horn_multiple/array_init_increm_two_arrs_const.smt2 create mode 100644 bench_horn_multiple/array_init_nondet_vars_plus_ind.smt2 create mode 100644 bench_horn_multiple/array_init_pair_sum_const.smt2 create mode 100644 bench_horn_multiple/array_init_pair_symmetr2.smt2 create mode 100644 bench_horn_multiple/array_init_pair_symmetr3.smt2 create mode 100644 bench_horn_multiple/array_init_pair_symmetr4.smt2 create mode 100644 bench_horn_multiple/array_init_reverse_const.smt2 create mode 100644 bench_horn_multiple/array_init_symmetr_swap_const.smt2 create mode 100644 bench_horn_multiple/array_min_and_copy.smt2 create mode 100644 bench_horn_multiple/array_min_and_copy_inverse.smt2 create mode 100644 bench_horn_multiple/array_min_and_copy_shift.smt2 create mode 100644 bench_horn_multiple/array_min_and_copy_shift_sum.smt2 create mode 100644 bench_horn_multiple/array_min_and_copy_shift_sum_add.smt2 create mode 100644 bench_horn_multiple/array_standard_copy4.smt2 create mode 100644 bench_horn_multiple/array_tiling_poly4.smt2 create mode 100644 bench_horn_multiple/array_tiling_poly6.smt2 create mode 100644 bench_horn_multiple/array_zero_sum_m2.smt2 diff --git a/bench_horn/array_copy_inverse.smt2 b/bench_horn/array_copy_inverse.smt2 new file mode 100644 index 000000000..021b2b00b --- /dev/null +++ b/bench_horn/array_copy_inverse.smt2 @@ -0,0 +1,17 @@ +(declare-var a (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var b1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var n Int) + +(declare-rel inv ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv a b 0 n)) + +(rule (=> (and (inv a b i n) (< i n) (= (store b i (select a (- n i1))) b1) (= i1 (+ i 1))) (inv a b1 i1 n))) + +(rule (=> (and (inv a b i n) (>= i n) (<= 0 i1) (< i1 n) (not (= (select a i1) (select b (- n i1 1))))) fail)) + +(query fail) diff --git a/bench_horn/array_doub_access_init_const.smt2 b/bench_horn/array_doub_access_init_const.smt2 new file mode 100644 index 000000000..a3bc02e4f --- /dev/null +++ b/bench_horn/array_doub_access_init_const.smt2 @@ -0,0 +1,16 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv a 0 100000)) + +(rule (=> (and (inv a i N) (<= i N) (= a1 (store (store a (* 2 i) 0) (+ (* 2 i) 1) 0)) (= i1 (+ i 1))) (inv a1 i1 N))) + +(rule (=> (and (inv a i N) (> i N) (<= 0 i1) (<= i1 (* N 2)) (not (>= (select a i1) 0))) fail)) + +(query fail) diff --git a/bench_horn/array_index_compl.smt2 b/bench_horn/array_index_compl.smt2 new file mode 100644 index 000000000..742a6ce9c --- /dev/null +++ b/bench_horn/array_index_compl.smt2 @@ -0,0 +1,16 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv (store a 0 1) 0 N)) + +(rule (=> (and (inv a i N) (< i N) (= a1 (store a (+ i 1) (+ 1 (select a i)))) (= i1 (select a i))) (inv a1 i1 N))) + +(rule (=> (and (inv a i N) (< i 0)) fail)) + +(query fail) diff --git a/bench_horn/array_init_batches_const.smt2 b/bench_horn/array_init_batches_const.smt2 new file mode 100644 index 000000000..d7309487e --- /dev/null +++ b/bench_horn/array_init_batches_const.smt2 @@ -0,0 +1,16 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv a 0 100000)) + +(rule (=> (and (inv a i N) (< i N) (= (store (store a i 0) (+ i 1) 0) a1) (= i1 (+ i 2))) (inv a1 i1 N))) + +(rule (=> (and (inv a i N) (>= i N) (< 0 i1) (< i1 N) (not (= (select a i1) 0))) fail)) + +(query fail) diff --git a/bench_horn/array_init_both_ends2.smt2 b/bench_horn/array_init_both_ends2.smt2 new file mode 100644 index 000000000..111b7d511 --- /dev/null +++ b/bench_horn/array_init_both_ends2.smt2 @@ -0,0 +1,20 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv a 0 N)) + +(rule (=> (and (inv a i N) (< i N) + (= i1 (+ i 1)) + (= (store a i (- N i)) a1)) + (inv a1 i1 N))) + +(rule (=> (and (inv a i N) (>= i N) (< 0 i1) (< i1 N) + (not (= N (+ (select a i1) (select a (- N i1)))))) fail)) + +(query fail) diff --git a/bench_horn/array_init_both_ends_simpl_const.smt2 b/bench_horn/array_init_both_ends_simpl_const.smt2 new file mode 100644 index 000000000..a38204dcc --- /dev/null +++ b/bench_horn/array_init_both_ends_simpl_const.smt2 @@ -0,0 +1,20 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv a 0 100000)) + +(rule (=> (and (inv a i N) (< i N) + (= i1 (+ i 1)) + (= (store (store a i i) (- N i) (- N i)) a1)) + (inv a1 i1 N))) + +(rule (=> (and (inv a i N) (>= i N) (< 0 i1) (< i1 N) + (not (= N (+ (select a i1) (select a (- N i1)))))) fail)) + +(query fail) diff --git a/bench_horn/array_init_const_const.smt2 b/bench_horn/array_init_const_const.smt2 new file mode 100644 index 000000000..a09e31295 --- /dev/null +++ b/bench_horn/array_init_const_const.smt2 @@ -0,0 +1,16 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv a 0 100000)) + +(rule (=> (and (inv a i N) (< i N) (= (store a i 1) a1) (= i1 (+ i 1))) (inv a1 i1 N))) + +(rule (=> (and (inv a i N) (>= i N) (< 0 i1) (< i1 N) (not (= (select a i1) 1))) fail)) + +(query fail) diff --git a/bench_horn/array_init_disj_const.smt2 b/bench_horn/array_init_disj_const.smt2 new file mode 100644 index 000000000..94da69f0f --- /dev/null +++ b/bench_horn/array_init_disj_const.smt2 @@ -0,0 +1,16 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv a 0 100000)) + +(rule (=> (and (inv a i N) (< i N) (or (= (store a i 0) a1) (= (store a i 2) a1)) (= i1 (+ i 1))) (inv a1 i1 N))) + +(rule (=> (and (inv a i N) (>= i N) (< 0 i1) (< i1 N) (= (select a i1) 1)) fail)) + +(query fail) diff --git a/bench_horn/array_init_double_const.smt2 b/bench_horn/array_init_double_const.smt2 new file mode 100644 index 000000000..d3682d7a1 --- /dev/null +++ b/bench_horn/array_init_double_const.smt2 @@ -0,0 +1,20 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var b1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv a b 0 777777)) + +(rule (=> (and (inv a b i N) (< i N) (= i1 (+ i 1)) + (= (store a i i) a1) + (= (store b i (- N i)) b1)) (inv a1 b1 i1 N))) + +(rule (=> (and (inv a b i N) (>= i N) (< 0 i1) (< i1 N) (not (= N (+ (select a i1) (select b i1))))) fail)) + +(query fail) diff --git a/bench_horn/array_init_ite_jump_const.smt2 b/bench_horn/array_init_ite_jump_const.smt2 new file mode 100644 index 000000000..a31e6814e --- /dev/null +++ b/bench_horn/array_init_ite_jump_const.smt2 @@ -0,0 +1,21 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var a2 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) +(declare-var val Int) + +(declare-rel inv ((Array Int Int) Int Int Int)) +(declare-rel fail ()) + +(rule (inv a 0 7 100000)) + +(rule (=> (and (inv a i val N) (<= i N) + (= a1 (ite (= val i) (store a i 0) (store a i i))) + (= i1 (+ i 1))) +(inv a1 i1 val N))) + +(rule (=> (and (inv a i val N) (> i N) (<= 0 i1) (<= i1 N) (= (select a i1) val)) fail)) + +(query fail) diff --git a/bench_horn/array_init_ite_jump_two_const.smt2 b/bench_horn/array_init_ite_jump_two_const.smt2 new file mode 100644 index 000000000..877699ad3 --- /dev/null +++ b/bench_horn/array_init_ite_jump_two_const.smt2 @@ -0,0 +1,23 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var a2 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) +(declare-var val1 Int) +(declare-var val2 Int) + +(declare-rel inv ((Array Int Int) Int Int Int Int)) +(declare-rel fail ()) + +(rule (inv a 0 7 13 100000)) + +(rule (=> (and (inv a i val1 val2 N) (<= i N) + (= a1 (ite (= val1 i) (store a i 0) (ite (= val2 i) (store a i 10) (store a i i)))) + (= i1 (+ i 1))) +(inv a1 i1 val1 val2 N))) + +(rule (=> (and (inv a i val1 val2 N) (> i N) (<= 0 i1) (<= i1 N) + (not (and (not (= (select a i1) val1)) (not (= (select a i1) val2))))) fail)) + +(query fail) diff --git a/bench_horn/array_init_nondet_var_mult.smt2 b/bench_horn/array_init_nondet_var_mult.smt2 new file mode 100644 index 000000000..aecae17e2 --- /dev/null +++ b/bench_horn/array_init_nondet_var_mult.smt2 @@ -0,0 +1,17 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var j Int) +(declare-var i1 Int) +(declare-var n Int) + +(declare-rel inv ((Array Int Int) Int Int Int)) +(declare-rel fail ()) + +(rule (=> (> j 0) (inv a 1 j n))) + +(rule (=> (and (inv a i j n) (< i n) (= (store a i (* i j)) a1) (= i1 (+ i 1))) (inv a1 i1 j n))) + +(rule (=> (and (inv a i j n) (>= i n) (< 0 i1) (< i1 n) (not (>= (select a i1) i1))) fail)) + +(query fail) diff --git a/bench_horn/array_init_nondet_vars.smt2 b/bench_horn/array_init_nondet_vars.smt2 new file mode 100644 index 000000000..6023dd5da --- /dev/null +++ b/bench_horn/array_init_nondet_vars.smt2 @@ -0,0 +1,18 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var j Int) +(declare-var k Int) +(declare-var i1 Int) +(declare-var n Int) + +(declare-rel inv ((Array Int Int) Int Int Int)) +(declare-rel fail ()) + +(rule (=> (> j 0) (inv a 1 j n))) + +(rule (=> (and (inv a i j n) (< i n) (> k 0) (= (store a i (+ i j k)) a1) (= i1 (+ i 1))) (inv a1 i1 j n))) + +(rule (=> (and (inv a i j n) (>= i n) (< 0 i1) (< i1 n) (not (>= (select a i1) (+ 2 i1)))) fail)) + +(query fail) diff --git a/bench_horn/array_init_nondet_vars2.smt2 b/bench_horn/array_init_nondet_vars2.smt2 new file mode 100644 index 000000000..9e39a322f --- /dev/null +++ b/bench_horn/array_init_nondet_vars2.smt2 @@ -0,0 +1,18 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var j Int) +(declare-var k Int) +(declare-var i1 Int) +(declare-var n Int) + +(declare-rel inv ((Array Int Int) Int Int Int Int)) +(declare-rel fail ()) + +(rule (=> (and (> j 0) (> 0 k)) (inv a 1 j k n))) + +(rule (=> (and (inv a i j k n) (< i n) (= (store a i (+ i (* j k))) a1) (= i1 (+ i 1))) (inv a1 i1 j k n))) + +(rule (=> (and (inv a i j k n) (>= i n) (< 0 i1) (< i1 n) (not (< (select a i1) i1))) fail)) + +(query fail) diff --git a/bench_horn/array_init_upto_nondet.smt2 b/bench_horn/array_init_upto_nondet.smt2 new file mode 100644 index 000000000..0a410766f --- /dev/null +++ b/bench_horn/array_init_upto_nondet.smt2 @@ -0,0 +1,17 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var n Int) +(declare-var k Int) + +(declare-rel inv ((Array Int Int) Int Int Int)) +(declare-rel fail ()) + +(rule (=> (and (<= 0 k) (< k n)) (inv a 0 n k))) + +(rule (=> (and (inv a i n k) (< i n) (= (ite (< i k) (store a i i) a) a1) (= i1 (+ i 1))) (inv a1 i1 n k))) + +(rule (=> (and (inv a i n k) (>= i n) (<= 0 i1) (< i1 n) (< i1 k) (not (= (select a i1) i1))) fail)) + +(query fail) diff --git a/bench_horn/array_init_var_plus_ind2.smt2 b/bench_horn/array_init_var_plus_ind2.smt2 new file mode 100644 index 000000000..0b16fc458 --- /dev/null +++ b/bench_horn/array_init_var_plus_ind2.smt2 @@ -0,0 +1,19 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) +(declare-var k Int) +(declare-var k1 Int) + +(declare-rel inv ((Array Int Int) Int Int Int)) +(declare-rel fail ()) + +(rule (inv a 0 0 0)) + +(rule (=> (and (inv a i j k) (= (store a i j) a1) (= j1 (+ j i)) (= k1 (- k i)) (= i1 (+ i 1))) (inv a1 i1 j1 k1))) + +(rule (=> (and (inv a i j k) (< 0 i1) (< i1 i) (not (>= (select a i1) k))) fail)) + +(query fail) diff --git a/bench_horn/array_init_var_plus_ind3.smt2 b/bench_horn/array_init_var_plus_ind3.smt2 new file mode 100644 index 000000000..a216213f7 --- /dev/null +++ b/bench_horn/array_init_var_plus_ind3.smt2 @@ -0,0 +1,17 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) + +(declare-rel inv ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv a 0 0)) + +(rule (=> (and (inv a i j) (= (store a i j) a1) (= j1 (- j i)) (= i1 (+ i 1))) (inv a1 i1 j1))) + +(rule (=> (and (inv a i j) (< 3 i1) (< i1 i) (not (>= 0 (select a i1)))) fail)) + +(query fail) diff --git a/bench_horn/array_min_const.smt2 b/bench_horn/array_min_const.smt2 new file mode 100644 index 000000000..e1495a902 --- /dev/null +++ b/bench_horn/array_min_const.smt2 @@ -0,0 +1,17 @@ +(declare-var a (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var m Int) +(declare-var m1 Int) +(declare-var N Int) + +(declare-rel inv ((Array Int Int) Int Int Int)) +(declare-rel fail ()) + +(rule (inv a 0 0 10000)) + +(rule (=> (and (inv a i m N) (< i N) (= m1 (ite (<= m (select a i)) m (select a i))) (= i1 (+ i 1))) (inv a i1 m1 N))) + +(rule (=> (and (inv a i m N) (>= i N) (< 0 i1) (< i1 N) (not (<= m (select a i1)))) fail)) + +(query fail) diff --git a/bench_horn/array_min_max_const.smt2 b/bench_horn/array_min_max_const.smt2 new file mode 100644 index 000000000..3164820f0 --- /dev/null +++ b/bench_horn/array_min_max_const.smt2 @@ -0,0 +1,22 @@ +(declare-var a (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var m Int) +(declare-var m1 Int) +(declare-var x Int) +(declare-var x1 Int) +(declare-var N Int) + +; trivial case, does not even need quantifiers in the invariants +; should be solved within the bootstrapping + +(declare-rel inv ((Array Int Int) Int Int Int Int)) +(declare-rel fail ()) + +(rule (inv a 0 0 0 100000)) + +(rule (=> (and (inv a i m x N) (< i N) (= x1 (ite (<= x (select a i)) x (select a i))) (= m1 (ite (<= m (select a i)) (select a i) m)) (= i1 (+ i 1))) (inv a i1 m1 x1 N))) + +(rule (=> (and (inv a i m x N) (>= i N) (< 0 i1) (< i1 N) (not (<= x m))) fail)) + +(query fail) diff --git a/bench_horn/array_min_swap_const.smt2 b/bench_horn/array_min_swap_const.smt2 new file mode 100644 index 000000000..d99454a10 --- /dev/null +++ b/bench_horn/array_min_swap_const.smt2 @@ -0,0 +1,25 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) +(declare-var N Int) + +(declare-rel inv ((Array Int Int) Int Int Int)) +(declare-rel fail ()) + +(rule (=> (>= i 0) (inv a i (+ i 1) 100000))) + +(rule (=> (and (inv a i j N) + (< j N) + (= a1 (ite + (> (select a i) (select a j)) + (store (store a i (select a j)) j (select a i)) + a)) + (= j1 (+ j 1))) + (inv a1 i j1 N))) + +(rule (=> (and (inv a i j N) (>= j N) (< i i1) (< i1 N) (not (<= (select a i) (select a i1)))) fail)) + +(query fail) diff --git a/bench_horn/array_partial_init.smt2 b/bench_horn/array_partial_init.smt2 new file mode 100644 index 000000000..2d2f3ca0b --- /dev/null +++ b/bench_horn/array_partial_init.smt2 @@ -0,0 +1,25 @@ +(declare-var a (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var c (Array Int Int)) +(declare-var c1 (Array Int Int)) +(declare-var i Int) +(declare-var j Int) +(declare-var i1 Int) +(declare-var j1 Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) (Array Int Int) (Array Int Int) Int Int Int)) + +(declare-rel fail ()) + +(rule (inv1 a b c 0 N 0)) + +(rule (=> (and (inv1 a b c i N j) + (< i N) + (= j1 (ite (= (select a i) (select b i)) (+ j 1) j)) + (= c1 (ite (= (select a i) (select b i)) (store c j i) c)) + (= i1 (+ i 1))) (inv1 a b c1 i1 N j1))) + +(rule (=> (and (inv1 a b c i N j) (>= i N) (<= 0 i1) (< i1 j) (not (>= (select c i1) i1))) fail)) + +(query fail) diff --git a/bench_horn/array_single_elem_const.smt2 b/bench_horn/array_single_elem_const.smt2 new file mode 100644 index 000000000..a4a7929e1 --- /dev/null +++ b/bench_horn/array_single_elem_const.smt2 @@ -0,0 +1,16 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (=> (> N 150) (inv a 0 100000))) + +(rule (=> (and (inv a i N) (< i N) (= a1 (ite (= i 143) (store a i 0) a)) (= i1 (+ i 1))) (inv a1 i1 N))) + +(rule (=> (and (inv a i N) (>= i N) (not (= (select a 143) 0))) fail)) + +(query fail) diff --git a/bench_horn/array_standard_partition.smt2 b/bench_horn/array_standard_partition.smt2 new file mode 100644 index 000000000..65b0eb1a2 --- /dev/null +++ b/bench_horn/array_standard_partition.smt2 @@ -0,0 +1,25 @@ +(declare-var a (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var b1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var k Int) +(declare-var k1 Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) (Array Int Int) Int Int Int)) + +(declare-rel fail ()) + +(rule (inv1 a b 0 N 0)) + +(rule (=> (and (inv1 a b i N k) + (< i N) + (= k1 (ite (>= 0 (select a i)) (+ k 1) k)) + (= b1 (ite (>= 0 (select a i)) (store b k (select a i)) b)) + (= i1 (+ i 1))) + (inv1 a b1 i1 N k1))) + +(rule (=> (and (inv1 a b i N k) (>= i N) (<= 0 i1) (< i1 k) (not (>= 0 (select b i1)))) fail)) + +(query fail) diff --git a/bench_horn/array_standard_password.smt2 b/bench_horn/array_standard_password.smt2 new file mode 100644 index 000000000..e1c4daa2e --- /dev/null +++ b/bench_horn/array_standard_password.smt2 @@ -0,0 +1,17 @@ +(declare-var p (Array Int Int)) +(declare-var g (Array Int Int)) +(declare-var i Int) +(declare-var j Int) +(declare-var i1 Int) +(declare-var j1 Int) + +(declare-rel inv1 ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 p g 0 0)) + +(rule (=> (and (inv1 p g i j) (= j 0) (= j1 (ite (= (select p i) (select g i)) 0 1)) (= i1 (+ i 1))) (inv1 p g i1 j1))) + +(rule (=> (and (inv1 p g i j) (not (= j 0)) (<= 0 i1) (< i1 (- i 1)) (not (= (select p i1) (select g i1)))) fail)) + +(query fail) diff --git a/bench_horn/array_tiling_poly3.smt2 b/bench_horn/array_tiling_poly3.smt2 new file mode 100644 index 000000000..b56b23cbe --- /dev/null +++ b/bench_horn/array_tiling_poly3.smt2 @@ -0,0 +1,16 @@ +(declare-var S Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) + +(declare-rel inv ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (=> (>= S 1) (inv a 0 S))) + +(rule (=> (and (inv a i S) (< i S) (= (store a i (* (- i 1) (- i 1))) a1) (= i1 (+ i 1))) (inv a1 i1 S))) + +(rule (=> (and (inv a i S) (>= i S) (< 0 i1) (< i1 S) (not (< (select a i1) (* i1 i1)))) fail)) + +(query fail) diff --git a/bench_horn/array_tiling_poly5.smt2 b/bench_horn/array_tiling_poly5.smt2 new file mode 100644 index 000000000..49f4e4497 --- /dev/null +++ b/bench_horn/array_tiling_poly5.smt2 @@ -0,0 +1,16 @@ +(declare-var S Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) + +(declare-rel inv ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (=> (>= S 1) (inv a 0 S))) + +(rule (=> (and (inv a i S) (< i S) (= (store a i (* (+ i 1) (- i 1))) a1) (= i1 (+ i 1))) (inv a1 i1 S))) + +(rule (=> (and (inv a i S) (>= i S) (<= 0 i1) (< i1 S) (not (< (select a i1) (* i1 i1)))) fail)) + +(query fail) diff --git a/bench_horn/array_tiling_tcpy2.smt2 b/bench_horn/array_tiling_tcpy2.smt2 new file mode 100644 index 000000000..962351edb --- /dev/null +++ b/bench_horn/array_tiling_tcpy2.smt2 @@ -0,0 +1,33 @@ +(declare-var S Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var a (Array Int Int)) +(declare-var acopy (Array Int Int)) +(declare-var acopy0 (Array Int Int)) +(declare-var acopy1 (Array Int Int)) +(declare-var acopy2 (Array Int Int)) +(declare-var acopy3 (Array Int Int)) +(declare-var acopy4 (Array Int Int)) + + +(declare-rel inv ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (=> (and (<= 1 S) (= i 0)) (inv a acopy i S))) + +(rule (=> (and + (inv a acopy i S) + (< i (* 1 S)) + (= acopy0 (store acopy (- (* 5 S) (+ i 1)) (select a (- (* 5 S) (+ i 1))))) + (= acopy1 (store acopy0 (- (* 4 S) (+ i 1)) (select a (- (* 4 S) (+ i 1))))) + (= acopy2 (store acopy1 (- (* 3 S) (+ i 1)) (select a (- (* 3 S) (+ i 1))))) + (= acopy3 (store acopy2 (- (* 2 S) (+ i 1)) (select a (- (* 2 S) (+ i 1))))) + (= acopy4 (store acopy3 i (select a i))) + (= i1 (+ 1 i))) + (inv a acopy4 i1 S))) + +(rule (=> (and (inv a acopy i S) (not (< i (* 1 S))) (<= 0 i1) (< i1 (* 5 S)) + (not (= (select a i1) (select acopy i1)))) fail)) + +(query fail) + diff --git a/bench_horn/array_tiling_tcpy3.smt2 b/bench_horn/array_tiling_tcpy3.smt2 new file mode 100644 index 000000000..940f7bd31 --- /dev/null +++ b/bench_horn/array_tiling_tcpy3.smt2 @@ -0,0 +1,30 @@ +(declare-var S Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var a (Array Int Int)) +(declare-var acopy (Array Int Int)) +(declare-var acopy1 (Array Int Int)) +(declare-var acopy2 (Array Int Int)) +(declare-var acopy3 (Array Int Int)) +(declare-var acopy4 (Array Int Int)) + + +(declare-rel inv ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (=> (and (<= 1 S) (= i 0)) (inv a acopy i S))) + +(rule (=> (and + (inv a acopy i S) + (< i (* 1 S)) + (= acopy1 (store acopy (- (* 4 S) (+ i 1)) (select a (- (* 4 S) (+ i 1))))) + (= acopy2 (store acopy1 (- (* 3 S) (+ i 1)) (select a (- (* 3 S) (+ i 1))))) + (= acopy3 (store acopy2 (- (* 2 S) (+ i 1)) (select a (- (* 2 S) (+ i 1))))) + (= acopy4 (store acopy3 i (select a i))) + (= i1 (+ 1 i))) + (inv a acopy4 i1 S))) + +(rule (=> (and (inv a acopy i S) (not (< i (* 1 S))) (<= 0 i1) (< i1 (* 4 S)) + (not (= (select a i1) (select acopy i1)))) fail)) + +(query fail) diff --git a/bench_horn/array_tripl_access_init_const.smt2 b/bench_horn/array_tripl_access_init_const.smt2 new file mode 100644 index 000000000..0dfd9737e --- /dev/null +++ b/bench_horn/array_tripl_access_init_const.smt2 @@ -0,0 +1,16 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv a 0 100000)) + +(rule (=> (and (inv a i N) (<= i N) (= a1 (store (store (store a (* 3 i) 0) (+ (* 3 i) 1) 0) (+ (* 3 i) 2) 0)) (= i1 (+ i 1))) (inv a1 i1 N))) + +(rule (=> (and (inv a i N) (> i N) (<= 0 i1) (<= i1 (* N 3)) (not (>= (select a i1) 0))) fail)) + +(query fail) diff --git a/bench_horn_cex/array_min_and_copy_cex.smt2 b/bench_horn_cex/array_min_and_copy_cex.smt2 new file mode 100644 index 000000000..85963fda7 --- /dev/null +++ b/bench_horn_cex/array_min_and_copy_cex.smt2 @@ -0,0 +1,26 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var b1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) + +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) Int Int Int )) +(declare-rel inv2 ((Array Int Int) (Array Int Int) Int Int Int)) +(declare-rel fail ()) + +(rule (inv1 a 0 0 N)) + +(rule (=> (and (inv1 a i j N) (< i N) (= j1 (ite (> j (select a i)) (select a i) j)) (= i1 (+ i 1))) (inv1 a i1 j1 N))) + +(rule (=> (and (inv1 a i j N) (>= i N)) (inv2 a b j 0 N))) + +(rule (=> (and (inv2 a b i j N) (< i N) (= (store b i (select a i)) b1) (= i1 (+ i 1))) (inv2 a b1 i1 j N))) + +(rule (=> (and (inv2 a b i j N) (>= i N) (< 0 i1) (< i1 N) (not (>= (select b i1) j))) fail)) + +(query fail) diff --git a/bench_horn_cex/array_min_and_copy_shift_sum_cex.smt2 b/bench_horn_cex/array_min_and_copy_shift_sum_cex.smt2 new file mode 100644 index 000000000..8202b6e45 --- /dev/null +++ b/bench_horn_cex/array_min_and_copy_shift_sum_cex.smt2 @@ -0,0 +1,33 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var b1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) +(declare-var k Int) +(declare-var k1 Int) + +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) Int Int Int )) +(declare-rel inv2 ((Array Int Int) (Array Int Int) Int Int Int)) +(declare-rel inv3 ((Array Int Int) (Array Int Int) Int Int Int Int)) +(declare-rel fail ()) + +(rule (inv1 a (- N 1) j N)) + +(rule (=> (and (inv1 a i j N) (> i 0) (= j1 (ite (> j (select a i)) (select a i) j)) (= i1 (- i 1))) (inv1 a i1 j1 N))) + +(rule (=> (and (inv1 a i j N) (<= i 0)) (inv2 a b 0 j N))) + +(rule (=> (and (inv2 a b i j N) (< i N) (= (store b i (- (select a (- N i1)) j)) b1) (= i1 (+ i 1))) (inv2 a b1 i1 j N))) + +(rule (=> (and (inv2 a b i j N) (>= i N)) (inv3 a b 0 j 0 N))) + +(rule (=> (and (inv3 a b i j k N) (< i N) (= k1 (+ k (select b i))) (= i1 (+ i 1))) (inv3 a b i1 j k1 N))) + +(rule (=> (and (inv3 a b i j k N) (>= i N) (not (>= k 0))) fail)) + +(query fail) diff --git a/bench_horn_cex/array_min_swap_cex.smt2 b/bench_horn_cex/array_min_swap_cex.smt2 new file mode 100644 index 000000000..b886d2b64 --- /dev/null +++ b/bench_horn_cex/array_min_swap_cex.smt2 @@ -0,0 +1,22 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) + +(declare-rel inv ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv a j j)) + +(rule (=> (and (inv a i j) + (= a1 (ite + (< (select a i) (select a j)) + (store (store a i (select a j)) j (select a i)) + a)) + (= i1 (+ i 1))) + (inv a1 i1 j))) + +(rule (=> (and (inv a i j) (< j i1) (< i1 i) (not (< (select a j) (select a i1)))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_bubble_sort_rev.smt2 b/bench_horn_multiple/array_bubble_sort_rev.smt2 new file mode 100644 index 000000000..21361aa99 --- /dev/null +++ b/bench_horn_multiple/array_bubble_sort_rev.smt2 @@ -0,0 +1,30 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) Int Int Int)) +(declare-rel fail ()) + +(rule (inv1 a 0 N)) + +(rule (=> (and (inv1 a i N) (< i N) (= i1 (+ i 1))) (inv2 a i i1 N))) + +(rule (=> (and (inv2 a i j N) + (< j N) + (= a1 (ite + (< (select a i) (select a j)) + (store (store a i (select a j)) j (select a i)) + a)) + (= j1 (+ j 1))) + (inv2 a1 i j1 N))) + +(rule (=> (and (inv2 a i j N) (not (< j N)) (= i1 (+ i 1))) (inv1 a i1 N))) + +(rule (=> (and (inv1 a i N) (not (< i N)) (< 0 i1) (< i1 N) (< i1 j1) (< j1 N) (not (>= (select a i1) (select a j1)))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_copy_nondet_add.smt2 b/bench_horn_multiple/array_copy_nondet_add.smt2 new file mode 100644 index 000000000..f8866d365 --- /dev/null +++ b/bench_horn_multiple/array_copy_nondet_add.smt2 @@ -0,0 +1,31 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var b1 (Array Int Int)) +(declare-var c (Array Int Int)) +(declare-var c1 (Array Int Int)) +(declare-var i Int) +(declare-var j Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel inv3 ((Array Int Int) (Array Int Int) (Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a 0 N)) + +(rule (=> (and (inv1 a i N) (< i N) (< i j) (= (store a i j) a1) (= i1 (+ i 1))) (inv1 a1 i1 N))) + +(rule (=> (and (inv1 a i N) (>= i N)) (inv2 a b 0 N))) + +(rule (=> (and (inv2 a b i N) (< i N) (< i j) (= (store b i (+ (select a i) j)) b1) (= i1 (+ i 1))) (inv2 a b1 i1 N))) + +(rule (=> (and (inv2 a b i N) (>= i N)) (inv3 a b c 0 N))) + +(rule (=> (and (inv3 a b c i N) (< i N) (< i j) (= (store c i (+ (select b i) j)) c1) (= i1 (+ i 1))) (inv3 a b c1 i1 N))) + +(rule (=> (and (inv3 a b c i N) (>= i N) (< 0 i1) (< i1 N) (not (> (select c i1) (select a i1)))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_hybr_nest_3.smt2 b/bench_horn_multiple/array_hybr_nest_3.smt2 new file mode 100644 index 000000000..738cae0f8 --- /dev/null +++ b/bench_horn_multiple/array_hybr_nest_3.smt2 @@ -0,0 +1,31 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) +(declare-var k Int) +(declare-var k1 Int) +(declare-var N Int) + +; tricky case, challenging for FreqHorn + +(declare-rel inv1 ((Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) Int Int Int Int)) +(declare-rel fail ()) + +(rule (inv1 a 0 N)) + +(rule (=> (and (inv1 a i N) (< i N)) (inv2 a i 0 1 N))) + +(rule (=> (and (inv2 a i j k N) + (< j i) + (= k1 (+ k (select a j))) + (= j1 (+ j 1))) + (inv2 a i j1 k1 N))) + +(rule (=> (and (inv2 a i j k N) (not (< j i)) (= a1 (store a i k)) (= i1 (+ i 1))) (inv1 a1 i1 N))) + +(rule (=> (and (inv1 a i N) (not (< i N)) (< 0 i1) (< i1 N) (not (>= (select a i1) 1))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_init_addvar2.smt2 b/bench_horn_multiple/array_init_addvar2.smt2 new file mode 100644 index 000000000..a8b863a87 --- /dev/null +++ b/bench_horn_multiple/array_init_addvar2.smt2 @@ -0,0 +1,22 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var j Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a 0 N)) + +(rule (=> (and (inv1 a i N) (< i j) (< i N) (= (store a i j) a1) (= i1 (+ i 1))) (inv1 a1 i1 N))) + +(rule (=> (and (inv1 a i N) (>= i N)) (inv2 a 0 N))) + +(rule (=> (and (inv2 a i N) (< i N) (= (store a i (- (select a i) i)) a1) (= i1 (+ i 1))) (inv2 a1 i1 N))) + +(rule (=> (and (inv2 a i N) (>= i N) (< 0 i1) (< i1 N) (not (>= (select a i1) 0))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_init_addvar3.smt2 b/bench_horn_multiple/array_init_addvar3.smt2 new file mode 100644 index 000000000..186dc6d08 --- /dev/null +++ b/bench_horn_multiple/array_init_addvar3.smt2 @@ -0,0 +1,22 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var j Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a 0 N)) + +(rule (=> (and (inv1 a i N) (< i N) (= (store a i i) a1) (= i1 (+ i 1))) (inv1 a1 i1 N))) + +(rule (=> (and (inv1 a i N) (>= i N)) (inv2 a 0 N))) + +(rule (=> (and (inv2 a i N) (< i N) (< j i) (= (store a i (+ (select a i) j)) a1) (= i1 (+ i 1))) (inv2 a1 i1 N))) + +(rule (=> (and (inv2 a i N) (>= i N) (< 0 i1) (< i1 N) (not (< (select a i1) (* 2 i1)))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_init_addvar4.smt2 b/bench_horn_multiple/array_init_addvar4.smt2 new file mode 100644 index 000000000..ef1e4b109 --- /dev/null +++ b/bench_horn_multiple/array_init_addvar4.smt2 @@ -0,0 +1,22 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var j Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a 0 N)) + +(rule (=> (and (inv1 a i N) (< i N) (< j i) (= (store a i j) a1) (= i1 (+ i 1))) (inv1 a1 i1 N))) + +(rule (=> (and (inv1 a i N) (>= i N)) (inv2 a 0 N))) + +(rule (=> (and (inv2 a i N) (< i N) (< j i) (= (store a i (+ (select a i) j)) a1) (= i1 (+ i 1))) (inv2 a1 i1 N))) + +(rule (=> (and (inv2 a i N) (>= i N) (< 0 i1) (< i1 N) (not (< (select a i1) (* 2 i1)))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_init_and_copy_const.smt2 b/bench_horn_multiple/array_init_and_copy_const.smt2 new file mode 100644 index 000000000..dae63bd90 --- /dev/null +++ b/bench_horn_multiple/array_init_and_copy_const.smt2 @@ -0,0 +1,23 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var b1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a 0 N)) + +(rule (=> (and (inv1 a i N) (< i N) (= (store a i 1) a1) (= i1 (+ i 1))) (inv1 a1 i1 N))) + +(rule (=> (and (inv1 a i N) (>= i N)) (inv2 a b 0 N))) + +(rule (=> (and (inv2 a b i N) (< i N) (= (store b i (select a i)) b1) (= i1 (+ i 1))) (inv2 a b1 i1 N))) + +(rule (=> (and (inv2 a b i N) (>= i N) (< 0 i1) (< i1 N) (not (>= (select b i1) 1))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_init_and_copy_inverse.smt2 b/bench_horn_multiple/array_init_and_copy_inverse.smt2 new file mode 100644 index 000000000..712a31b47 --- /dev/null +++ b/bench_horn_multiple/array_init_and_copy_inverse.smt2 @@ -0,0 +1,23 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var b1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a 0 N)) + +(rule (=> (and (inv1 a i N) (< i N) (= (store a i i) a1) (= i1 (+ i 1))) (inv1 a1 i1 N))) + +(rule (=> (and (inv1 a i N) (>= i N)) (inv2 a b 0 N))) + +(rule (=> (and (inv2 a b i N) (< i N) (= (store b i (select a (- N i1))) b1) (= i1 (+ i 1))) (inv2 a b1 i1 N))) + +(rule (=> (and (inv2 a b i N) (>= i N) (<= 0 i1) (< i1 N) (not (>= (select b (- N i1 1)) 0))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_init_doubl2.smt2 b/bench_horn_multiple/array_init_doubl2.smt2 new file mode 100644 index 000000000..9b68a0df7 --- /dev/null +++ b/bench_horn_multiple/array_init_doubl2.smt2 @@ -0,0 +1,22 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var j Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a 0 N)) + +(rule (=> (and (inv1 a i N) (< i N) (= (store a i i) a1) (= i1 (+ i 1))) (inv1 a1 i1 N))) + +(rule (=> (and (inv1 a i N) (>= i N)) (inv2 a 0 N))) + +(rule (=> (and (inv2 a i N) (< i N) (< i j) (= (store a i (+ (select a i) j)) a1) (= i1 (+ i 1))) (inv2 a1 i1 N))) + +(rule (=> (and (inv2 a i N) (>= i N) (< 0 i1) (< i1 N) (not (> (select a i1) (* 2 i1)))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_init_doubl3.smt2 b/bench_horn_multiple/array_init_doubl3.smt2 new file mode 100644 index 000000000..186dc6d08 --- /dev/null +++ b/bench_horn_multiple/array_init_doubl3.smt2 @@ -0,0 +1,22 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var j Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a 0 N)) + +(rule (=> (and (inv1 a i N) (< i N) (= (store a i i) a1) (= i1 (+ i 1))) (inv1 a1 i1 N))) + +(rule (=> (and (inv1 a i N) (>= i N)) (inv2 a 0 N))) + +(rule (=> (and (inv2 a i N) (< i N) (< j i) (= (store a i (+ (select a i) j)) a1) (= i1 (+ i 1))) (inv2 a1 i1 N))) + +(rule (=> (and (inv2 a i N) (>= i N) (< 0 i1) (< i1 N) (not (< (select a i1) (* 2 i1)))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_init_increm_const.smt2 b/bench_horn_multiple/array_init_increm_const.smt2 new file mode 100644 index 000000000..7887c522d --- /dev/null +++ b/bench_horn_multiple/array_init_increm_const.smt2 @@ -0,0 +1,21 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a 0 100000)) + +(rule (=> (and (inv1 a i N) (< i N) (= (store a i 0) a1) (= i1 (+ i 1))) (inv1 a1 i1 N))) + +(rule (=> (and (inv1 a i N) (>= i N)) (inv2 a 0 N))) + +(rule (=> (and (inv2 a i N) (< i N) (= (store a i (+ (select a i) 1)) a1) (= i1 (+ i 1))) (inv2 a1 i1 N))) + +(rule (=> (and (inv2 a i N) (>= i N) (< 0 i1) (< i1 N) (not (>= (select a i1) 1))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_init_increm_twice_const.smt2 b/bench_horn_multiple/array_init_increm_twice_const.smt2 new file mode 100644 index 000000000..ae756dcce --- /dev/null +++ b/bench_horn_multiple/array_init_increm_twice_const.smt2 @@ -0,0 +1,22 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a 0 100000)) + +(rule (=> (and (inv1 a i N) (< i N) (= (store a i 0) a1) (= i1 (+ i 1))) (inv1 a1 i1 N))) + +(rule (=> (and (inv1 a i N) (>= i N)) (inv2 a 0 N))) + +(rule (=> (and (inv2 a i N) (< i N) (= i1 (+ i 1)) + (= (store a i (+ (select (store a i (+ (select a i) 1)) i) 1)) a1)) (inv2 a1 i1 N))) + +(rule (=> (and (inv2 a i N) (>= i N) (< 0 i1) (< i1 N) (not (>= (select a i1) 2))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_init_increm_two_arrs_antisym_const.smt2 b/bench_horn_multiple/array_init_increm_two_arrs_antisym_const.smt2 new file mode 100644 index 000000000..04d5d3558 --- /dev/null +++ b/bench_horn_multiple/array_init_increm_two_arrs_antisym_const.smt2 @@ -0,0 +1,24 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var b1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var x Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a b 0 100000)) + +(rule (=> (and (inv1 a b i N) (< i N) (= (store a i x) a1) (= (store b i x) b1) (= i1 (+ i 1))) (inv1 a1 b1 i1 N))) + +(rule (=> (and (inv1 a b i N) (>= i N)) (inv2 a b 0 N))) + +(rule (=> (and (inv2 a b i N) (< i N) (= (store a i (+ (select a i) 1)) a1) (= i1 (+ i 1))) (inv2 a1 b i1 N))) + +(rule (=> (and (inv2 a b i N) (>= i N) (< 0 i1) (< i1 N) (not (>= (select a i1) (select b i1)))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_init_increm_two_arrs_const.smt2 b/bench_horn_multiple/array_init_increm_two_arrs_const.smt2 new file mode 100644 index 000000000..9cbc71d9f --- /dev/null +++ b/bench_horn_multiple/array_init_increm_two_arrs_const.smt2 @@ -0,0 +1,24 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var b1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var x Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a b 0 100000)) + +(rule (=> (and (inv1 a b i N) (< i N) (= (store a i x) a1) (= (store b i x) b1) (= i1 (+ i 1))) (inv1 a1 b1 i1 N))) + +(rule (=> (and (inv1 a b i N) (>= i N)) (inv2 a b 0 N))) + +(rule (=> (and (inv2 a b i N) (< i N) (= (store a i (+ (select a i) 1)) a1) (= (store b i (+ (select b i) 1)) b1) (= i1 (+ i 1))) (inv2 a1 b1 i1 N))) + +(rule (=> (and (inv2 a b i N) (>= i N) (< 0 i1) (< i1 N) (not (>= (select a i1) (select b i1)))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_init_nondet_vars_plus_ind.smt2 b/bench_horn_multiple/array_init_nondet_vars_plus_ind.smt2 new file mode 100644 index 000000000..c493b9f05 --- /dev/null +++ b/bench_horn_multiple/array_init_nondet_vars_plus_ind.smt2 @@ -0,0 +1,27 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var b1 (Array Int Int)) +(declare-var c (Array Int Int)) +(declare-var c1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var x Int) +(declare-var y Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) (Array Int Int) (Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a b 0 N)) + +(rule (=> (and (inv1 a b i N) (< i N) (> x y) (= (store a i (+ i y)) a1) (= (store b i (+ i x)) b1) (= i1 (+ i 1))) (inv1 a1 b1 i1 N))) + +(rule (=> (and (inv1 a b i N) (>= i N)) (inv2 a b c 0 N))) + +(rule (=> (and (inv2 a b c i N) (< i N) (= (store c i (- (select a i) (select b i))) c1) (= i1 (+ i 1))) (inv2 a b c1 i1 N))) + +(rule (=> (and (inv2 a b c i N) (>= i N) (< 0 i1) (< i1 N) (not (< (select c i1) 0))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_init_pair_sum_const.smt2 b/bench_horn_multiple/array_init_pair_sum_const.smt2 new file mode 100644 index 000000000..b6090434d --- /dev/null +++ b/bench_horn_multiple/array_init_pair_sum_const.smt2 @@ -0,0 +1,25 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var b1 (Array Int Int)) +(declare-var c (Array Int Int)) +(declare-var c1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) (Array Int Int) (Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a b 0 100000)) + +(rule (=> (and (inv1 a b i N) (< i N) (= (store a i 1) a1) (= (store b i 2) b1) (= i1 (+ i 1))) (inv1 a1 b1 i1 N))) + +(rule (=> (and (inv1 a b i N) (>= i N)) (inv2 a b c 0 N))) + +(rule (=> (and (inv2 a b c i N) (< i N) (= (store c i (+ (select a i) (select b i))) c1) (= i1 (+ i 1))) (inv2 a b c1 i1 N))) + +(rule (=> (and (inv2 a b c i N) (>= i N) (< 0 i1) (< i1 N) (not (>= (select c i1) 3))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_init_pair_symmetr2.smt2 b/bench_horn_multiple/array_init_pair_symmetr2.smt2 new file mode 100644 index 000000000..c4f431102 --- /dev/null +++ b/bench_horn_multiple/array_init_pair_symmetr2.smt2 @@ -0,0 +1,27 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var b1 (Array Int Int)) +(declare-var c (Array Int Int)) +(declare-var c1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var x Int) +(declare-var y Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) (Array Int Int) (Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a b 0 N)) + +(rule (=> (and (inv1 a b i N) (< i N) (= (store a i x) a1) (> x y) (= (store b i y) b1) (= i1 (+ i 1))) (inv1 a1 b1 i1 N))) + +(rule (=> (and (inv1 a b i N) (>= i N)) (inv2 a b c 0 N))) + +(rule (=> (and (inv2 a b c i N) (< i N) (= (store c i (- (select a i) (select b i))) c1) (= i1 (+ i 1))) (inv2 a b c1 i1 N))) + +(rule (=> (and (inv2 a b c i N) (>= i N) (< 0 i1) (< i1 N) (not (> (select c i1) 0))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_init_pair_symmetr3.smt2 b/bench_horn_multiple/array_init_pair_symmetr3.smt2 new file mode 100644 index 000000000..8c04b9222 --- /dev/null +++ b/bench_horn_multiple/array_init_pair_symmetr3.smt2 @@ -0,0 +1,26 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var b1 (Array Int Int)) +(declare-var c (Array Int Int)) +(declare-var c1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var x Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) (Array Int Int) (Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a b 0 N)) + +(rule (=> (and (inv1 a b i N) (< i N) (= (store a i (+ N x)) a1) (= (store b i x) b1) (= i1 (+ i 1))) (inv1 a1 b1 i1 N))) + +(rule (=> (and (inv1 a b i N) (>= i N)) (inv2 a b c 0 N))) + +(rule (=> (and (inv2 a b c i N) (< i N) (= (store c i (- (select a i) (select b i))) c1) (= i1 (+ i 1))) (inv2 a b c1 i1 N))) + +(rule (=> (and (inv2 a b c i N) (>= i N) (< 0 i1) (< i1 N) (not (= (select c i1) N))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_init_pair_symmetr4.smt2 b/bench_horn_multiple/array_init_pair_symmetr4.smt2 new file mode 100644 index 000000000..fa0e0b9b6 --- /dev/null +++ b/bench_horn_multiple/array_init_pair_symmetr4.smt2 @@ -0,0 +1,26 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var b1 (Array Int Int)) +(declare-var c (Array Int Int)) +(declare-var c1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var x Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) (Array Int Int) (Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a b 0 N)) + +(rule (=> (and (inv1 a b i N) (< i N) (= (store a i x) a1) (> x 0) (= (store b i (* x i)) b1) (= i1 (+ i 1))) (inv1 a1 b1 i1 N))) + +(rule (=> (and (inv1 a b i N) (>= i N)) (inv2 a b c 0 N))) + +(rule (=> (and (inv2 a b c i N) (< i N) (= (store c i (- (select b i) (select a i))) c1) (= i1 (+ i 1))) (inv2 a b c1 i1 N))) + +(rule (=> (and (inv2 a b c i N) (>= i N) (< 0 i1) (< i1 N) (not (>= (select c i1) 0))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_init_reverse_const.smt2 b/bench_horn_multiple/array_init_reverse_const.smt2 new file mode 100644 index 000000000..8e7a5fd42 --- /dev/null +++ b/bench_horn_multiple/array_init_reverse_const.smt2 @@ -0,0 +1,16 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv a (- 100000 1) 100000)) + +(rule (=> (and (inv a i N) (>= i 0) (= (store a i 1) a1) (= i1 (- i 1))) (inv a1 i1 N))) + +(rule (=> (and (inv a i N) (< i 0) (< 0 i1) (< i1 N) (not (= (select a i1) 1))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_init_symmetr_swap_const.smt2 b/bench_horn_multiple/array_init_symmetr_swap_const.smt2 new file mode 100644 index 000000000..31512e0fd --- /dev/null +++ b/bench_horn_multiple/array_init_symmetr_swap_const.smt2 @@ -0,0 +1,24 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var b1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var x Int) +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv1 a b 0 10000)) + +(rule (=> (and (inv1 a b i N) (< i N) (= (store a i x) a1) (= (store b i (- x)) b1) (= i1 (+ i 1))) (inv1 a1 b1 i1 N))) + +(rule (=> (and (inv1 a b i N) (>= i N)) (inv2 a b 0 N))) + +(rule (=> (and (inv2 a b i N) (< i N) (= (store a i (- (select b i))) a1) (= (store b i (select a i)) b1) (= i1 (+ i 1))) (inv2 a1 b1 i1 N))) + +(rule (=> (and (inv2 a b i N) (>= i N) (< 0 i1) (< i1 N) (not (= (select a i1) (select b i1)))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_min_and_copy.smt2 b/bench_horn_multiple/array_min_and_copy.smt2 new file mode 100644 index 000000000..6d6d622fa --- /dev/null +++ b/bench_horn_multiple/array_min_and_copy.smt2 @@ -0,0 +1,26 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var b1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) + +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) Int Int Int )) +(declare-rel inv2 ((Array Int Int) (Array Int Int) Int Int Int)) +(declare-rel fail ()) + +(rule (inv1 a 0 j N)) + +(rule (=> (and (inv1 a i j N) (< i N) (= j1 (ite (> j (select a i)) (select a i) j)) (= i1 (+ i 1))) (inv1 a i1 j1 N))) + +(rule (=> (and (inv1 a i j N) (>= i N)) (inv2 a b 0 j N))) + +(rule (=> (and (inv2 a b i j N) (< i N) (= (store b i (select a i)) b1) (= i1 (+ i 1))) (inv2 a b1 i1 j N))) + +(rule (=> (and (inv2 a b i j N) (>= i N) (< 0 i1) (< i1 N) (not (>= (select b i1) j))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_min_and_copy_inverse.smt2 b/bench_horn_multiple/array_min_and_copy_inverse.smt2 new file mode 100644 index 000000000..1f06a5ee8 --- /dev/null +++ b/bench_horn_multiple/array_min_and_copy_inverse.smt2 @@ -0,0 +1,26 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var b1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) + +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) Int Int Int )) +(declare-rel inv2 ((Array Int Int) (Array Int Int) Int Int Int)) +(declare-rel fail ()) + +(rule (inv1 a 0 j N)) + +(rule (=> (and (inv1 a i j N) (< i N) (= j1 (ite (> j (select a i)) (select a i) j)) (= i1 (+ i 1))) (inv1 a i1 j1 N))) + +(rule (=> (and (inv1 a i j N) (>= i N)) (inv2 a b 0 j N))) + +(rule (=> (and (inv2 a b i j N) (< i N) (= (store b i (select a (- N i1))) b1) (= i1 (+ i 1))) (inv2 a b1 i1 j N))) + +(rule (=> (and (inv2 a b i j N) (>= i N) (<= 0 i1) (< i1 N) (not (>= (select b i1) j))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_min_and_copy_shift.smt2 b/bench_horn_multiple/array_min_and_copy_shift.smt2 new file mode 100644 index 000000000..918fdc78b --- /dev/null +++ b/bench_horn_multiple/array_min_and_copy_shift.smt2 @@ -0,0 +1,26 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var b1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) + +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) Int Int Int )) +(declare-rel inv2 ((Array Int Int) (Array Int Int) Int Int Int)) +(declare-rel fail ()) + +(rule (inv1 a 0 j N)) + +(rule (=> (and (inv1 a i j N) (< i N) (= j1 (ite (> j (select a i)) (select a i) j)) (= i1 (+ i 1))) (inv1 a i1 j1 N))) + +(rule (=> (and (inv1 a i j N) (>= i N)) (inv2 a b 0 j N))) + +(rule (=> (and (inv2 a b i j N) (< i N) (= (store b i (- (select a i) j)) b1) (= i1 (+ i 1))) (inv2 a b1 i1 j N))) + +(rule (=> (and (inv2 a b i j N) (>= i N) (<= 0 i1) (< i1 N) (not (>= (select b i1) 0))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_min_and_copy_shift_sum.smt2 b/bench_horn_multiple/array_min_and_copy_shift_sum.smt2 new file mode 100644 index 000000000..8c7fd36f0 --- /dev/null +++ b/bench_horn_multiple/array_min_and_copy_shift_sum.smt2 @@ -0,0 +1,33 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var b1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) +(declare-var k Int) +(declare-var k1 Int) + +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) Int Int Int )) +(declare-rel inv2 ((Array Int Int) (Array Int Int) Int Int Int)) +(declare-rel inv3 ((Array Int Int) (Array Int Int) Int Int Int Int)) +(declare-rel fail ()) + +(rule (inv1 a (- N 1) j N)) + +(rule (=> (and (inv1 a i j N) (>= i 0) (= j1 (ite (> j (select a i)) (select a i) j)) (= i1 (- i 1))) (inv1 a i1 j1 N))) + +(rule (=> (and (inv1 a i j N) (< i 0)) (inv2 a b 0 j N))) + +(rule (=> (and (inv2 a b i j N) (< i N) (= (store b i (- (select a (- N i1)) j)) b1) (= i1 (+ i 1))) (inv2 a b1 i1 j N))) + +(rule (=> (and (inv2 a b i j N) (>= i N)) (inv3 a b 0 j 0 N))) + +(rule (=> (and (inv3 a b i j k N) (< i N) (= k1 (+ k (select b i))) (= i1 (+ i 1))) (inv3 a b i1 j k1 N))) + +(rule (=> (and (inv3 a b i j k N) (>= i N) (not (>= k 0))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_min_and_copy_shift_sum_add.smt2 b/bench_horn_multiple/array_min_and_copy_shift_sum_add.smt2 new file mode 100644 index 000000000..13f0ec318 --- /dev/null +++ b/bench_horn_multiple/array_min_and_copy_shift_sum_add.smt2 @@ -0,0 +1,33 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var b1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) +(declare-var k Int) +(declare-var k1 Int) + +(declare-var N Int) + +(declare-rel inv1 ((Array Int Int) Int Int Int )) +(declare-rel inv2 ((Array Int Int) (Array Int Int) Int Int Int)) +(declare-rel inv3 ((Array Int Int) (Array Int Int) Int Int Int Int)) +(declare-rel fail ()) + +(rule (inv1 a 0 j N)) + +(rule (=> (and (inv1 a i j N) (< i N) (= j1 (ite (> j (select a i)) (select a i) j)) (= i1 (+ i 1))) (inv1 a i1 j1 N))) + +(rule (=> (and (inv1 a i j N) (>= i N)) (inv2 a b 0 j N))) + +(rule (=> (and (inv2 a b i j N) (< i N) (= (store b i (- (select a i) j)) b1) (= i1 (+ i 1))) (inv2 a b1 i1 j N))) + +(rule (=> (and (inv2 a b i j N) (>= i N)) (inv3 a b 0 j 0 N))) + +(rule (=> (and (inv3 a b i j k N) (< i N) (= k1 (+ k i (select b i))) (= i1 (+ i 1))) (inv3 a b i1 j k1 N))) + +(rule (=> (and (inv3 a b i j k N) (>= i N) (not (>= k 0))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_standard_copy4.smt2 b/bench_horn_multiple/array_standard_copy4.smt2 new file mode 100644 index 000000000..89f168505 --- /dev/null +++ b/bench_horn_multiple/array_standard_copy4.smt2 @@ -0,0 +1,39 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var b1 (Array Int Int)) +(declare-var c (Array Int Int)) +(declare-var c1 (Array Int Int)) +(declare-var d (Array Int Int)) +(declare-var d1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) +(declare-var x Int) + +(declare-rel inv1 ((Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel inv3 ((Array Int Int) (Array Int Int) (Array Int Int) Int Int)) +(declare-rel inv4 ((Array Int Int) (Array Int Int) (Array Int Int) (Array Int Int) Int Int)) + +(declare-rel fail ()) + +(rule (inv1 a 0 N)) + +(rule (=> (and (inv1 a i N) (< i N) (= (store a i x) a1) (= i1 (+ i 1))) (inv1 a1 i1 N))) + +(rule (=> (and (inv1 a i N) (>= i N)) (inv2 a b 0 N))) + +(rule (=> (and (inv2 a b i N) (< i N) (= (store b i (select a i)) b1) (= i1 (+ i 1))) (inv2 a b1 i1 N))) + +(rule (=> (and (inv2 a b i N) (>= i N)) (inv3 a b c 0 N))) + +(rule (=> (and (inv3 a b c i N) (< i N) (= (store c i (select b i)) c1) (= i1 (+ i 1))) (inv3 a b c1 i1 N))) + +(rule (=> (and (inv3 a b c i N) (>= i N)) (inv4 a b c d 0 N))) + +(rule (=> (and (inv4 a b c d i N) (< i N) (= (store d i (select c i)) d1) (= i1 (+ i 1))) (inv4 a b c d1 i1 N))) + +(rule (=> (and (inv4 a b c d i N) (>= i N) (<= 0 i1) (< i1 N) (not (= (select d i1) (select a i1)))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_tiling_poly4.smt2 b/bench_horn_multiple/array_tiling_poly4.smt2 new file mode 100644 index 000000000..1967b1711 --- /dev/null +++ b/bench_horn_multiple/array_tiling_poly4.smt2 @@ -0,0 +1,21 @@ +(declare-var S Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) + +(declare-rel inv1 ((Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (=> (> S 1) (inv1 a 0 S))) + +(rule (=> (and (inv1 a i S) (< i S) (= (store a i (+ (* (+ i 1) (- i 1)) 2)) a1) (= i1 (+ i 1))) (inv1 a1 i1 S))) + +(rule (=> (and (inv1 a i S) (not (< i S))) (inv2 a 0 S))) + +(rule (=> (and (inv2 a i S) (< i S) (= (store a i (- (select a i) 1)) a1) (= i1 (+ i 1))) (inv2 a1 i1 S))) + +(rule (=> (and (inv2 a i S) (not (< i S)) (<= 0 i1) (< i1 S) (not (= (select a i1) (* i1 i1)))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_tiling_poly6.smt2 b/bench_horn_multiple/array_tiling_poly6.smt2 new file mode 100644 index 000000000..627b55c8d --- /dev/null +++ b/bench_horn_multiple/array_tiling_poly6.smt2 @@ -0,0 +1,21 @@ +(declare-var S Int) +(declare-var i Int) +(declare-var i1 Int) +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) + +(declare-rel inv1 ((Array Int Int) Int Int)) +(declare-rel inv2 ((Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (=> (> S 1) (inv1 a 0 S))) + +(rule (=> (and (inv1 a i S) (< i S) (= (store a i (* (- i 1) (+ i 1))) a1) (= i1 (+ i 1))) (inv1 a1 i1 S))) + +(rule (=> (and (inv1 a i S) (not (< i S))) (inv2 a 0 S))) + +(rule (=> (and (inv2 a i S) (< i S) (= (store a i (- (select a i) (* i i))) a1) (= i1 (+ i 1))) (inv2 a1 i1 S))) + +(rule (=> (and (inv2 a i S) (not (< i S)) (<= 0 i1) (< i1 S) (not (= (select a i1) -1))) fail)) + +(query fail) diff --git a/bench_horn_multiple/array_zero_sum_m2.smt2 b/bench_horn_multiple/array_zero_sum_m2.smt2 new file mode 100644 index 000000000..8e80968ad --- /dev/null +++ b/bench_horn_multiple/array_zero_sum_m2.smt2 @@ -0,0 +1,33 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var sum Int) +(declare-var sum1 Int) +(declare-var n Int) + +(declare-rel inv1 ((Array Int Int) Int Int Int)) +(declare-rel inv2 ((Array Int Int) Int Int Int)) +(declare-rel inv3 ((Array Int Int) Int Int Int)) +(declare-rel inv4 ((Array Int Int) Int Int Int)) +(declare-rel fail ()) + +(rule (inv1 a 0 n 0)) + +(rule (=> (and (inv1 a i n sum) (< i n) (= sum1 (+ sum (select a i))) (= i1 (+ i 1))) (inv1 a i1 n sum1))) + +(rule (=> (and (inv1 a i n sum) (>= i n)) (inv2 a 0 n sum))) + +(rule (=> (and (inv2 a i n sum) (< i n) (= sum1 (+ sum (select a i))) (= i1 (+ i 1))) (inv2 a i1 n sum1))) + +(rule (=> (and (inv2 a i n sum) (>= i n)) (inv3 a 0 n sum))) + +(rule (=> (and (inv3 a i n sum) (< i n) (= sum1 (- sum (select a i))) (= i1 (+ i 1))) (inv3 a i1 n sum1))) + +(rule (=> (and (inv3 a i n sum) (>= i n)) (inv4 a 0 n sum))) + +(rule (=> (and (inv4 a i n sum) (< i n) (= sum1 (- sum (select a i))) (= i1 (+ i 1))) (inv4 a i1 n sum1))) + +(rule (=> (and (inv4 a i n sum) (>= i n) (not (= sum 0))) fail)) + +(query fail) From 716019b64b08f4e39b93dd60c429927c686f7073 Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Thu, 29 Nov 2018 20:55:08 -0500 Subject: [PATCH 131/236] a prototype of lazy unroller and verifier (for nonlinear CHC systems) --- bench_horn_exampl/count_lin_bnd_1.smt2 | 31 ++ bench_horn_exampl/count_nonlin_bnd_1.smt2 | 32 ++ bench_horn_exampl/nonlinear_0.smt2 | 14 + bench_horn_exampl/nonlinear_1.smt2 | 15 + bench_horn_exampl/nonlinear_2.smt2 | 76 +++++ bench_horn_exampl/nonlinear_3.smt2 | 64 ++++ bench_horn_exampl/nonlinear_4.smt2 | 77 +++++ bench_horn_exampl/nonlinear_5.smt2 | 79 +++++ bench_horn_exampl/nonlinear_6.smt2 | 79 +++++ bench_horn_exampl/pow.smt2 | 24 ++ include/deep/HornNonlin.hpp | 381 ++++++++++++++++++++++ include/deep/NonlinCHCsolver.hpp | 137 ++++++++ tools/CMakeLists.txt | 2 + tools/nonlin/CMakeLists.txt | 4 + tools/nonlin/NonlinSolver.cpp | 10 + 15 files changed, 1025 insertions(+) create mode 100644 bench_horn_exampl/count_lin_bnd_1.smt2 create mode 100644 bench_horn_exampl/count_nonlin_bnd_1.smt2 create mode 100644 bench_horn_exampl/nonlinear_0.smt2 create mode 100644 bench_horn_exampl/nonlinear_1.smt2 create mode 100644 bench_horn_exampl/nonlinear_2.smt2 create mode 100644 bench_horn_exampl/nonlinear_3.smt2 create mode 100644 bench_horn_exampl/nonlinear_4.smt2 create mode 100644 bench_horn_exampl/nonlinear_5.smt2 create mode 100644 bench_horn_exampl/nonlinear_6.smt2 create mode 100644 bench_horn_exampl/pow.smt2 create mode 100755 include/deep/HornNonlin.hpp create mode 100644 include/deep/NonlinCHCsolver.hpp create mode 100644 tools/nonlin/CMakeLists.txt create mode 100644 tools/nonlin/NonlinSolver.cpp diff --git a/bench_horn_exampl/count_lin_bnd_1.smt2 b/bench_horn_exampl/count_lin_bnd_1.smt2 new file mode 100644 index 000000000..cea624036 --- /dev/null +++ b/bench_horn_exampl/count_lin_bnd_1.smt2 @@ -0,0 +1,31 @@ +(declare-rel inv (Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x 0) (= y -10)) (inv x y))) + +(rule (=> (and (= x 0) (= y -8)) (inv x y))) + +(rule (=> (and (= x 0) (= y -6)) (inv x y))) + +(rule (=> (and (= x 0) (= y -4)) (inv x y))) + +(rule (=> (and (= x 0) (= y -2)) (inv x y))) + +(rule (=> (and (= x 0) (= y 0)) (inv x y))) + +(rule (=> + (and + (inv x y) + (> x1 0) + (= x1 (+ x 1)) + (= y1 (+ y 2))) + (inv x1 y1))) + +(rule (=> (and (inv 5 y) (= y 7)) fail)) + +(query fail) diff --git a/bench_horn_exampl/count_nonlin_bnd_1.smt2 b/bench_horn_exampl/count_nonlin_bnd_1.smt2 new file mode 100644 index 000000000..0aa3853fd --- /dev/null +++ b/bench_horn_exampl/count_nonlin_bnd_1.smt2 @@ -0,0 +1,32 @@ +(declare-rel inv1 (Int Int)) +(declare-rel inv2 (Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (=> (and (<= x 0) (= y 0)) (inv1 x y))) + +(rule (=> + (and + (inv1 x y) + (> x1 0) + (= x1 (+ x 1)) + (= y1 (+ y 1))) + (inv1 x1 y1))) + +(rule (=> (and (<= x 0) (= y 0)) (inv2 x y))) + +(rule (=> + (and + (inv2 x y) + (> x1 0) + (= x1 (+ x 1)) + (= y1 (- y 1))) + (inv2 x1 y1))) + +(rule (=> (and (inv1 40 y) (inv2 20 y1) (not (= y (- 20 y1)))) fail)) + +(query fail) diff --git a/bench_horn_exampl/nonlinear_0.smt2 b/bench_horn_exampl/nonlinear_0.smt2 new file mode 100644 index 000000000..c1a01fccc --- /dev/null +++ b/bench_horn_exampl/nonlinear_0.smt2 @@ -0,0 +1,14 @@ +(declare-rel f (Int)) +(declare-rel g (Int)) +(declare-rel h (Int Int)) +(declare-rel fail ()) +(declare-var x Int) +(declare-var r0 Int) +(declare-var r1 Int) + +(rule (=> (= r0 (+ x 1)) (h x r0))) +(rule (g 3)) +(rule (=> (and (g r0) (h r0 r1)) (f r1))) +(rule (=> (and (f r1) (> r1 4)) fail)) + +(query fail) diff --git a/bench_horn_exampl/nonlinear_1.smt2 b/bench_horn_exampl/nonlinear_1.smt2 new file mode 100644 index 000000000..9093d864b --- /dev/null +++ b/bench_horn_exampl/nonlinear_1.smt2 @@ -0,0 +1,15 @@ +(declare-rel f (Int)) +(declare-rel g (Int Int)) +(declare-rel fail ()) +(declare-var x Int) +(declare-var r0 Int) +(declare-var r1 Int) +(declare-var r2 Int) +(declare-var r3 Int) +(declare-var r4 Int) + +(rule (f 1)) +(rule (=> (= r0 (+ x 1)) (g x r0))) +(rule (=> (and (f r0) (g r0 r1) (= r2 (+ r0 1)) (g r2 r3) (= r4 (+ r1 r2)) (>= r4 10)) fail)) + +(query fail) diff --git a/bench_horn_exampl/nonlinear_2.smt2 b/bench_horn_exampl/nonlinear_2.smt2 new file mode 100644 index 000000000..4ed591f16 --- /dev/null +++ b/bench_horn_exampl/nonlinear_2.smt2 @@ -0,0 +1,76 @@ +(declare-rel write ((Array Int Int) Int Int Int (Array Int Int) Int Int)) +(declare-rel rewrite ((Array Int Int) Int Int (Array Int Int) Int Int)) +(declare-rel wipe ((Array Int Int) Int Int (Array Int Int) Int Int)) +(declare-rel skip_write ((Array Int Int) Int Int Int (Array Int Int) Int Int)) +(declare-rel skip_read ((Array Int Int) Int Int Int (Array Int Int) Int Int)) +(declare-rel read ((Array Int Int) Int Int (Array Int Int) Int Int Int)) +(declare-rel fail ()) + +(declare-var a (Array Int Int)) +(declare-var a0 (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var a2 (Array Int Int)) +(declare-var a3 (Array Int Int)) +(declare-var a4 (Array Int Int)) +(declare-var a5 (Array Int Int)) +(declare-var a6 (Array Int Int)) +(declare-var a7 (Array Int Int)) +(declare-var wp Int) +(declare-var wp0 Int) +(declare-var wp1 Int) +(declare-var wp2 Int) +(declare-var wp3 Int) +(declare-var wp4 Int) +(declare-var wp5 Int) +(declare-var wp6 Int) +(declare-var wp7 Int) +(declare-var rp Int) +(declare-var rp0 Int) +(declare-var rp1 Int) +(declare-var rp2 Int) +(declare-var rp3 Int) +(declare-var rp4 Int) +(declare-var rp5 Int) +(declare-var rp6 Int) +(declare-var rp7 Int) +(declare-var s Int) +(declare-var amt Int) +(declare-var out Int) + +; write(_byte) +(rule (=> (and (= (store a wp s) a0) (= wp0 (+ 1 wp))) (write a wp rp s a0 wp0 rp))) +; rewrite (reset) +(rule (rewrite a wp rp a 0 0)) +; wipe (up to write cursor) +(rule (wipe a 0 rp a 0 0)) +(rule (=> (and (>= (- wp 1) 0) (= (store a (- wp 1) 0) a0) (wipe a0 (- wp 1) rp a1 wp0 rp0)) (wipe a wp rp a1 wp0 rp0))) +; skip_write +(rule (=> (= (+ amt wp) wp0) (skip_write a wp rp amt a wp0 rp))) +; skip_read (requires that read cursor stays behind write cursor) +(rule (=> (and (= (+ amt rp) rp0) (< rp0 wp)) (skip_read a wp rp amt a wp rp0))) +; read(_byte) +(rule (=> (and (= (select a rp) out) (= (+ rp 1) rp0)) (read a wp rp a wp rp0 out))) + +(rule (=> + (and + ; s is a private, nonzero value + (not (= s 0)) + (= wp 0) + (= rp 0) + ; write secrets + (write a wp rp s a0 wp0 rp0) + (write a0 wp0 rp0 s a1 wp1 rp1) + (write a1 wp1 rp1 s a2 wp2 rp2) + ; call rewrite + (rewrite a2 wp2 rp2 a3 wp3 rp3) + ; "wipe" + (wipe a3 wp3 rp3 a4 wp4 rp4) + (skip_write a4 wp4 rp4 3 a5 wp5 rp5) + (skip_read a5 wp5 rp5 2 a6 wp6 rp6) + (read a6 wp6 rp6 a7 wp7 rp7 out) + ; assert no leaks + (= 0 out) + ) + fail)) + +(query fail) diff --git a/bench_horn_exampl/nonlinear_3.smt2 b/bench_horn_exampl/nonlinear_3.smt2 new file mode 100644 index 000000000..a3aa0a2fb --- /dev/null +++ b/bench_horn_exampl/nonlinear_3.smt2 @@ -0,0 +1,64 @@ +(declare-rel write ((Array Int Int) Int Int Int (Array Int Int) Int Int)) +(declare-rel rewrite ((Array Int Int) Int Int (Array Int Int) Int Int)) +(declare-rel wipe ((Array Int Int) Int Int (Array Int Int) Int Int)) +(declare-rel skip_write ((Array Int Int) Int Int Int (Array Int Int) Int Int)) +(declare-rel skip_read ((Array Int Int) Int Int Int (Array Int Int) Int Int)) +(declare-rel read ((Array Int Int) Int Int (Array Int Int) Int Int Int)) +(declare-rel fail ()) + +(declare-var a (Array Int Int)) +(declare-var a0 (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var a2 (Array Int Int)) +(declare-var a3 (Array Int Int)) +(declare-var a4 (Array Int Int)) +(declare-var a5 (Array Int Int)) +(declare-var a6 (Array Int Int)) +(declare-var a7 (Array Int Int)) +(declare-var wp Int) +(declare-var wp0 Int) +(declare-var wp1 Int) +(declare-var wp2 Int) +(declare-var wp3 Int) +(declare-var wp4 Int) +(declare-var wp5 Int) +(declare-var wp6 Int) +(declare-var wp7 Int) +(declare-var rp Int) +(declare-var rp0 Int) +(declare-var rp1 Int) +(declare-var rp2 Int) +(declare-var rp3 Int) +(declare-var rp4 Int) +(declare-var rp5 Int) +(declare-var rp6 Int) +(declare-var rp7 Int) +(declare-var s Int) +(declare-var amt Int) +(declare-var out Int) + +; write(_byte) +(rule (=> (and (= (store a wp s) a0) (= wp0 (+ 1 wp))) (write a wp rp s a0 wp0 rp))) +; rewrite (reset) +(rule (rewrite a wp rp a 0 0)) +; wipe (up to write cursor) +(rule (wipe a 0 rp a 0 0)) +(rule (=> (and (>= (- wp 1) 0) (= (store a (- wp 1) 0) a0) (wipe a0 (- wp 1) rp a1 wp0 rp0)) (wipe a wp rp a1 wp0 rp0))) +; skip_write +(rule (=> (= (+ amt wp) wp0) (skip_write a wp rp amt a wp0 rp))) +; skip_read (requires that read cursor stays behind write cursor) +(rule (=> (and (= (+ amt rp) rp0) (< rp0 wp)) (skip_read a wp rp amt a wp rp0))) +; read(_byte) +(rule (=> (and (= (select a rp) out) (= (+ rp 1) rp0)) (read a wp rp a wp rp0 out))) + +(rule (=> + (and + (= wp 0) + (= rp 0) + (write a wp rp 1 a0 wp0 rp0) + (read a0 wp0 rp0 a1 wp1 rp1 out) + (= 0 out) + ) + fail)) + +(query fail) diff --git a/bench_horn_exampl/nonlinear_4.smt2 b/bench_horn_exampl/nonlinear_4.smt2 new file mode 100644 index 000000000..071fe2b9d --- /dev/null +++ b/bench_horn_exampl/nonlinear_4.smt2 @@ -0,0 +1,77 @@ +(declare-rel write ((Array Int Int) Int Int Int (Array Int Int) Int Int)) +(declare-rel rewrite ((Array Int Int) Int Int (Array Int Int) Int Int)) +(declare-rel wipe_helper ((Array Int Int) Int Int (Array Int Int) Int Int)) +(declare-rel wipe ((Array Int Int) Int Int (Array Int Int) Int Int)) +(declare-rel skip_write ((Array Int Int) Int Int Int (Array Int Int) Int Int)) +(declare-rel skip_read ((Array Int Int) Int Int Int (Array Int Int) Int Int)) +(declare-rel read ((Array Int Int) Int Int (Array Int Int) Int Int Int)) +(declare-rel fail ()) + +(declare-var a (Array Int Int)) +(declare-var a0 (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var a2 (Array Int Int)) +(declare-var a3 (Array Int Int)) +(declare-var a4 (Array Int Int)) +(declare-var a5 (Array Int Int)) +(declare-var a6 (Array Int Int)) +(declare-var a7 (Array Int Int)) +(declare-var wp Int) +(declare-var wp0 Int) +(declare-var wp1 Int) +(declare-var wp2 Int) +(declare-var wp3 Int) +(declare-var wp4 Int) +(declare-var wp5 Int) +(declare-var wp6 Int) +(declare-var wp7 Int) +(declare-var rp Int) +(declare-var rp0 Int) +(declare-var rp1 Int) +(declare-var rp2 Int) +(declare-var rp3 Int) +(declare-var rp4 Int) +(declare-var rp5 Int) +(declare-var rp6 Int) +(declare-var rp7 Int) +(declare-var s Int) +(declare-var amt Int) +(declare-var out Int) + +; write(_byte) +(rule (=> (and (= (store a wp s) a0) (= wp0 (+ 1 wp))) (write a wp rp s a0 wp0 rp))) +; rewrite (reset) +(rule (rewrite a wp rp a 0 0)) +; wipe (up to write cursor) +(rule (wipe a 0 rp a 0 0)) +(rule (=> (and (>= (- wp 1) 0) (= (store a (- wp 1) 0) a0) (wipe a0 (- wp 1) rp a1 wp0 rp0)) (wipe a wp rp a1 wp0 rp0))) +; skip_write +(rule (=> (= (+ amt wp) wp0) (skip_write a wp rp amt a wp0 rp))) +; skip_read (requires that read cursor stays behind write cursor) +(rule (=> (and (= (+ amt rp) rp0) (< rp0 wp)) (skip_read a wp rp amt a wp rp0))) +; read(_byte) +(rule (=> (and (= (select a rp) out) (= (+ rp 1) rp0)) (read a wp rp a wp rp0 out))) + +(rule (=> + (and + ; s is a private, nonzero value + (not (= s 0)) + (= wp 0) + (= rp 0) + ; write secrets + (write a wp rp s a0 wp0 rp0) + (write a0 wp0 rp0 s a1 wp1 rp1) + (write a1 wp1 rp1 s a2 wp2 rp2) + ; "wipe" + (wipe a2 wp2 (- rp2 1) a3 wp3 rp3) + ; call rewrite + (rewrite a3 wp3 rp3 a4 wp4 rp4) + (skip_write a4 wp4 rp4 3 a5 wp5 rp5) + (skip_read a5 wp5 rp5 2 a6 wp6 rp6) + (read a6 wp6 rp6 a7 wp7 rp7 out) + ; should be zeroed + (not (= 0 out)) + ) + fail)) + +(query fail) diff --git a/bench_horn_exampl/nonlinear_5.smt2 b/bench_horn_exampl/nonlinear_5.smt2 new file mode 100644 index 000000000..f96bfadb3 --- /dev/null +++ b/bench_horn_exampl/nonlinear_5.smt2 @@ -0,0 +1,79 @@ +(declare-rel write ((Array Int Int) Int Int Int (Array Int Int) Int Int)) +(declare-rel rewrite ((Array Int Int) Int Int (Array Int Int) Int Int)) +(declare-rel wipe ((Array Int Int) Int Int (Array Int Int) Int Int)) +(declare-rel skip_write ((Array Int Int) Int Int Int (Array Int Int) Int Int)) +(declare-rel skip_read ((Array Int Int) Int Int Int (Array Int Int) Int Int)) +(declare-rel read ((Array Int Int) Int Int (Array Int Int) Int Int Int)) +(declare-rel leak (Int Int)) +(declare-rel fail ()) + +(declare-var a (Array Int Int)) +(declare-var a0 (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var a2 (Array Int Int)) +(declare-var a3 (Array Int Int)) +(declare-var a4 (Array Int Int)) +(declare-var a5 (Array Int Int)) +(declare-var a6 (Array Int Int)) +(declare-var a7 (Array Int Int)) +(declare-var wp Int) +(declare-var wp0 Int) +(declare-var wp1 Int) +(declare-var wp2 Int) +(declare-var wp3 Int) +(declare-var wp4 Int) +(declare-var wp5 Int) +(declare-var wp6 Int) +(declare-var wp7 Int) +(declare-var rp Int) +(declare-var rp0 Int) +(declare-var rp1 Int) +(declare-var rp2 Int) +(declare-var rp3 Int) +(declare-var rp4 Int) +(declare-var rp5 Int) +(declare-var rp6 Int) +(declare-var rp7 Int) +(declare-var s Int) +(declare-var s0 Int) +(declare-var amt Int) +(declare-var out Int) +(declare-var out0 Int) + +; write(_byte) +(rule (=> (and (= (store a wp s) a0) (= wp0 (+ 1 wp))) (write a wp rp s a0 wp0 rp))) +; rewrite (reset) +(rule (rewrite a wp rp a 0 0)) +; wipe (up to write cursor) +(rule (wipe a 0 rp a 0 0)) +(rule (=> (and (>= (- wp 1) 0) (= (store a (- wp 1) 0) a0) (wipe a0 (- wp 1) rp a1 wp0 rp0)) (wipe a wp rp a1 wp0 rp0))) +; skip_write +(rule (=> (= (+ amt wp) wp0) (skip_write a wp rp amt a wp0 rp))) +; skip_read (requires that read cursor stays behind write cursor) +(rule (=> (and (= (+ amt rp) rp0) (< rp0 wp)) (skip_read a wp rp amt a wp rp0))) +; read(_byte) +(rule (=> (and (= (select a rp) out) (= (+ rp 1) rp0)) (read a wp rp a wp rp0 out))) + +(rule (=> + (and + (= wp 0) + (= rp 0) + ; write secrets + (write a wp rp s a0 wp0 rp0) + (write a0 wp0 rp0 s a1 wp1 rp1) + (write a1 wp1 rp1 s a2 wp2 rp2) + ; call rewrite + (rewrite a2 wp2 rp2 a3 wp3 rp3) + ; "wipe" + (wipe a3 wp3 rp3 a4 wp4 rp4) + (skip_write a4 wp4 rp4 3 a5 wp5 rp5) + (skip_read a5 wp5 rp5 2 a6 wp6 rp6) + (read a6 wp6 rp6 a7 wp7 rp7 out) + ) + (leak s out))) + +(rule (=> + (and (leak s out) (leak s0 out0) (not (= s s0)) (not (= out out0))) + fail)) + +(query fail) diff --git a/bench_horn_exampl/nonlinear_6.smt2 b/bench_horn_exampl/nonlinear_6.smt2 new file mode 100644 index 000000000..c4772635b --- /dev/null +++ b/bench_horn_exampl/nonlinear_6.smt2 @@ -0,0 +1,79 @@ +(declare-rel write ((Array Int Int) Int Int Int (Array Int Int) Int Int)) +(declare-rel rewrite ((Array Int Int) Int Int (Array Int Int) Int Int)) +(declare-rel wipe ((Array Int Int) Int Int (Array Int Int) Int Int)) +(declare-rel skip_write ((Array Int Int) Int Int Int (Array Int Int) Int Int)) +(declare-rel skip_read ((Array Int Int) Int Int Int (Array Int Int) Int Int)) +(declare-rel read ((Array Int Int) Int Int (Array Int Int) Int Int Int)) +(declare-rel leak (Int Int)) +(declare-rel fail ()) + +(declare-var a (Array Int Int)) +(declare-var a0 (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var a2 (Array Int Int)) +(declare-var a3 (Array Int Int)) +(declare-var a4 (Array Int Int)) +(declare-var a5 (Array Int Int)) +(declare-var a6 (Array Int Int)) +(declare-var a7 (Array Int Int)) +(declare-var wp Int) +(declare-var wp0 Int) +(declare-var wp1 Int) +(declare-var wp2 Int) +(declare-var wp3 Int) +(declare-var wp4 Int) +(declare-var wp5 Int) +(declare-var wp6 Int) +(declare-var wp7 Int) +(declare-var rp Int) +(declare-var rp0 Int) +(declare-var rp1 Int) +(declare-var rp2 Int) +(declare-var rp3 Int) +(declare-var rp4 Int) +(declare-var rp5 Int) +(declare-var rp6 Int) +(declare-var rp7 Int) +(declare-var s Int) +(declare-var s0 Int) +(declare-var amt Int) +(declare-var out Int) +(declare-var out0 Int) + +; write(_byte) +(rule (=> (and (= (store a wp s) a0) (= wp0 (+ 1 wp))) (write a wp rp s a0 wp0 rp))) +; rewrite (reset) +(rule (rewrite a wp rp a 0 0)) +; wipe (up to write cursor) +(rule (wipe a 0 rp a 0 0)) +(rule (=> (and (>= (- wp 1) 0) (= (store a (- wp 1) 0) a0) (wipe a0 (- wp 1) rp a1 wp0 rp0)) (wipe a wp rp a1 wp0 rp0))) +; skip_write +(rule (=> (= (+ amt wp) wp0) (skip_write a wp rp amt a wp0 rp))) +; skip_read (requires that read cursor stays behind write cursor) +(rule (=> (and (= (+ amt rp) rp0) (< rp0 wp)) (skip_read a wp rp amt a wp rp0))) +; read(_byte) +(rule (=> (and (= (select a rp) out) (= (+ rp 1) rp0)) (read a wp rp a wp rp0 out))) + +(rule (=> + (and + (= wp 0) + (= rp 0) + ; write secrets + (write a wp rp s a0 wp0 rp0) + (write a0 wp0 rp0 s a1 wp1 rp1) + (write a1 wp1 rp1 s a2 wp2 rp2) + ; "wipe" + (wipe a2 wp2 rp2 a3 wp3 rp3) + ; call rewrite + (rewrite a3 wp3 rp3 a4 wp4 rp4) + (skip_write a4 wp4 rp4 3 a5 wp5 rp5) + (skip_read a5 wp5 rp5 2 a6 wp6 rp6) + (read a6 wp6 rp6 a7 wp7 rp7 out) + ) + (leak s out))) + +(rule (=> + (and (leak s out) (leak s0 out0) (not (= s s0))) (not (= out out0)) + fail)) + +(query fail) diff --git a/bench_horn_exampl/pow.smt2 b/bench_horn_exampl/pow.smt2 new file mode 100644 index 000000000..6e823af3f --- /dev/null +++ b/bench_horn_exampl/pow.smt2 @@ -0,0 +1,24 @@ +(declare-rel ImportInt (Int Int Int Int)) +(declare-rel Exp2 (Int Int)) +(declare-rel fail ()) +(declare-rel Bad ()) +(declare-var pow Int) +(declare-var prev_pow Int) +(declare-var out Int) +(declare-var prev_out Int) +(declare-var r Int) +(declare-var log_r Int) +(declare-var modulus Int) +(declare-var r_mod_modulus Int) +(declare-var n Int) + +(rule (=> (= pow 0) (Exp2 pow 1))) +(rule (=> (and (> pow 0) (= prev_pow (- pow 1)) (Exp2 prev_pow prev_out) (= out (* 2 prev_out))) (Exp2 pow out))) + +(rule (=> + (and (Exp2 log_r r) (= r_mod_modulus (mod r modulus)) (= out (mod (* (mod n modulus) r_mod_modulus) modulus))) + (ImportInt n log_r modulus out))) + +(rule (=> (and (ImportInt 20 10 997 out) (not (= out 540))) fail)) + +(query fail) diff --git a/include/deep/HornNonlin.hpp b/include/deep/HornNonlin.hpp new file mode 100755 index 000000000..161ac469e --- /dev/null +++ b/include/deep/HornNonlin.hpp @@ -0,0 +1,381 @@ +#ifndef HORNNONLIN__HPP__ +#define HORNNONLIN__HPP__ + +#include "ae/AeValSolver.hpp" + +using namespace std; +using namespace boost; + +namespace ufo +{ + // all adapted from Horn.hpp; experimental; to merge with Horn.hpp at some point + inline bool rewriteHelperConsts(Expr& body, Expr v1, Expr v2) + { + if (isOpX(v1)) + { + body = mk(body, mk(v1, v2)); + return true; + } + else if (isOpX(v1)) + { + body = mk(body, v2); + return true; + } + else if (isOpX(v1)) + { + body = mk(body, mk(v2)); + return true; + } + return false; + } + + struct HornRuleExt + { + vector srcVars; + ExprVector dstVars; + ExprVector locVars; + + Expr body; + Expr head; + + ExprVector srcRelations; + Expr dstRelation; + + bool isFact; + bool isQuery; + bool isInductive; + + void assignVarsAndRewrite (vector& _srcVars, vector& invVarsSrc, + ExprVector& _dstVars, ExprVector& invVarsDst) + { + for (int i = 0; i < _srcVars.size(); i++) + { + ExprVector tmp; + for (int j = 0; j < _srcVars[i].size(); j++) + { + tmp.push_back(invVarsSrc[i][j]); + body = mk(body, mk(_srcVars[i][j], tmp[j])); + } + srcVars.push_back(tmp); + } + + for (int i = 0; i < _dstVars.size(); i++) + { + // primed copy of var: + Expr new_name = mkTerm (lexical_cast(invVarsDst[i]) + "'", body->getFactory()); + Expr var = cloneVar(invVarsDst[i], new_name); + dstVars.push_back(var); + body = mk(body, mk(_dstVars[i], dstVars[i])); + } + } + }; + + class CHCs + { + private: + set indeces; + string varname = "_FH_"; + + public: + + ExprFactory &m_efac; + EZ3 &m_z3; + + ExprSet decls; + Expr failDecl; + vector chcs; + map invVars; + map> incms; + int qCHCNum; // index of the query in chc + int total_var_cnt = 0; + + CHCs(ExprFactory &efac, EZ3 &z3) : m_efac(efac), m_z3(z3) {}; + + void preprocess (Expr term, vector& srcVars, ExprVector &srcRelations, ExprSet& lin) + { + if (isOpX(term)) + { + for (auto it = term->args_begin(), end = term->args_end(); it != end; ++it) + { + preprocess(*it, srcVars, srcRelations, lin); + } + } + else + { + if (bind::isBoolConst(term)) + { + lin.insert(term); + } + if (isOpX(term)) + { + if (term->arity() > 0) + { + if (isOpX(term->arg(0))) + { + Expr rel = term->arg(0); + if (term->arg(0)->arity() > 2) + { + addDecl(rel); + srcRelations.push_back(rel->arg(0)); + ExprVector tmp; + for (auto it = term->args_begin()+1, end = term->args_end(); it != end; ++it) + tmp.push_back(*it); + srcVars.push_back(tmp); + } + } + } + } + else + { + lin.insert(term); + } + } + } + + void addDecl (Expr a) + { + if (a->arity() == 2) + { + addFailDecl(a->arg(0)); + } + else if (invVars[a->arg(0)].size() == 0) + { + decls.insert(a); + for (int i = 1; i < a->arity()-1; i++) + { + Expr new_name = mkTerm (varname + to_string(total_var_cnt), m_efac); + total_var_cnt++; + Expr var; + if (isOpX (a->arg(i))) + var = bind::intConst(new_name); + else if (isOpX (a->arg(i))) + var = bind::realConst(new_name); + else if (isOpX (a->arg(i))) + var = bind::boolConst(new_name); + else if (isOpX (a->arg(i))) // GF: currently support only arrays over Ints + { + var = bind::mkConst(new_name, mk + (mk (m_efac), mk (m_efac))); + } + invVars[a->arg(0)].push_back(var); + } + } + } + + void parse(string smt) + { + std::unique_ptr > m_fp; + m_fp.reset (new ZFixedPoint (m_z3)); + ZFixedPoint &fp = *m_fp; + fp.loadFPfromFile(smt); + + for (auto &r: fp.m_rules) + { + bool toReplace = false; + chcs.push_back(HornRuleExt()); + HornRuleExt& hr = chcs.back(); + Expr rule = r; + while (isOpX(r)) + { + toReplace = true; + for (int i = 0; i < r->arity() - 1; i++) + { + hr.locVars.push_back(bind::fapp(r->arg(i))); + } + r = r->last(); + } + + if (isOpX(r) && isOpX(r->first())) + { + toReplace = true; + for (int i = 0; i < r->first()->arity() - 1; i++) + hr.locVars.push_back(bind::fapp(r->first()->arg(i))); + + rule = mk(r->first()->last(), mk(m_efac)); + r = rule; + } + + if (toReplace) + { + if (isOpX(r)) + { + rule = mk(r->first(), mk(m_efac)); + } + else if (isOpX(r) && r->arity() == 2 && isOpX(r->left()) && hasUninterp(r->left())) + { + rule = mk(r->left()->left(), r->right()); + } + else if (isOpX(r) && r->arity() == 2 && isOpX(r->right()) && hasUninterp(r->right())) + { + rule = mk(r->right()->left(), r->left()); + } + else + { + rule = r; + } + + ExprVector actual_vars; + expr::filter (rule, bind::IsVar(), std::inserter (actual_vars, actual_vars.begin ())); + if (actual_vars.size() == 0) + { + chcs.pop_back(); + continue; + } + + assert(actual_vars.size() <= hr.locVars.size()); + + ExprVector repl_vars; + for (int i = 0; i < actual_vars.size(); i++) + { + string a1 = lexical_cast(bind::name(actual_vars[i])); + int ind = hr.locVars.size() - 1 - atoi(a1.substr(1).c_str()); + repl_vars.push_back(hr.locVars[ind]); + } + rule = replaceAll(rule, actual_vars, repl_vars); + } + + if (!isOpX(rule)) rule = mk(mk(m_efac), rule); + + Expr body = rule->arg(0); + Expr head = rule->arg(1); + + if (isOpX(head)) + { + addDecl(head->arg(0)); + hr.head = head->arg(0); + hr.dstRelation = head->arg(0)->arg(0); + } + else + { + if (!isOpX(head)) body = mk(body, mk(head)); + addFailDecl(mk(m_efac)); + hr.head = mk(m_efac); + hr.dstRelation = mk(m_efac); + } + + vector origSrcSymbs; + ExprSet lin; + preprocess(body, origSrcSymbs, hr.srcRelations, lin); + if (hr.srcRelations.size() == 0) + { + if (hasUninterp(body)) + { + outs () << "Unsupported format\n"; + outs () << " " << *body << "\n"; + exit (0); + } + } + + hr.isFact = hr.srcRelations.empty(); + hr.isQuery = (hr.dstRelation == failDecl); + hr.isInductive = (hr.srcRelations.size() == 1 && hr.srcRelations[0] == hr.dstRelation); + + if (hr.isQuery) qCHCNum = chcs.size() - 1; + + ExprVector allOrigSymbs; + for (auto & a : origSrcSymbs) for (auto & b : a) allOrigSymbs.push_back(b); + ExprVector origDstSymbs; + if (!hr.isQuery) + { + for (auto it = head->args_begin()+1, end = head->args_end(); it != end; ++it) + origDstSymbs.push_back(*it); + } + allOrigSymbs.insert(allOrigSymbs.end(), origDstSymbs.begin(), origDstSymbs.end()); + simplBoolReplCnj(allOrigSymbs, lin); + hr.body = conjoin(lin, m_efac); + vector tmp; + + // we may have several applications of the same predicate symbol in the body: + for (int i = 0; i < hr.srcRelations.size(); i++) + { + auto & a = hr.srcRelations[i]; + ExprVector tmp1; + for (int j = 0; j < i; j++) + { + if (hr.srcRelations[i] == hr.srcRelations[j]) + { + for (int k = 0; k < invVars[a].size(); k++) + { + Expr new_name = mkTerm (varname + to_string(++total_var_cnt), m_efac); + tmp1.push_back(cloneVar(invVars[a][k], new_name)); + } + break; + } + } + if (tmp1.empty()) + { + tmp1 = invVars[a]; + } + tmp.push_back(tmp1); + } + hr.assignVarsAndRewrite (origSrcSymbs, tmp, + origDstSymbs, invVars[hr.dstRelation]); + hr.body = simpleQE(hr.body, hr.locVars); + } + + for (int i = 0; i < chcs.size(); i++) + incms[chcs[i].dstRelation].push_back(i); + } + + void addFailDecl(Expr decl) + { + if (failDecl == NULL) + { + failDecl = decl; + } + else + { + if (failDecl != decl) + outs () << "Multiple queries are not supported\n"; + exit(0); + } + } + + Expr getPostcondition (int i, ExprVector& vars) + { + HornRuleExt& hr = chcs[i]; + ExprSet cnjs; + ExprSet newCnjs; + getConj(hr.body, cnjs); + ExprVector allVars = hr.locVars; + for (auto & a : hr.srcVars) allVars.insert(allVars.end(), a.begin(), a.end()); + for (auto & a : cnjs) + { + if (emptyIntersect(a, allVars)) newCnjs.insert(a); + } + Expr res = conjoin(newCnjs, m_efac); + return replaceAll(res, hr.dstVars, vars); + } + + void print() + { + outs() << "CHCs:\n"; + for (auto &hr: chcs){ + if (hr.isFact) outs() << " INIT:\n"; + if (hr.isInductive) outs() << " TRANSITION RELATION:\n"; + if (hr.isQuery) outs() << " BAD:\n"; + + outs () << " "; + + for (int i = 0; i < hr.srcRelations.size(); i++) + { + outs () << * hr.srcRelations[i]; + outs () << " ("; + for(auto &a: hr.srcVars[i]) outs() << *a << ", "; + outs () << "\b\b)"; + outs () << " /\\ "; + } + outs () << "\b\b\b\b -> " << * hr.dstRelation; + + if (hr.dstVars.size() > 0) + { + outs () << " ("; + for(auto &a: hr.dstVars) outs() << *a << ", "; + outs () << "\b\b)"; + } + outs() << "\n body: " << * hr.body << "\n"; + } + } + }; +} +#endif diff --git a/include/deep/NonlinCHCsolver.hpp b/include/deep/NonlinCHCsolver.hpp new file mode 100644 index 000000000..09e68fd84 --- /dev/null +++ b/include/deep/NonlinCHCsolver.hpp @@ -0,0 +1,137 @@ +#ifndef BNDEXPL__HPP__ +#define BNDEXPL__HPP__ + +#include "HornNonlin.hpp" + +using namespace std; +using namespace boost; + +namespace ufo +{ + static void getCombinations(vector>& in, vector>& out, int pos = 0) + { + if (pos == 0) out.push_back(vector()); + if (pos == in.size()) return; + + vector> out2; + + for (auto & a : in[pos]) + { + for (auto & b : out) + { + out2.push_back(b); + out2.back().push_back(a); + } + } + out = out2; + getCombinations(in, out, pos + 1); + } + + class NonlinCHCsolver + { + private: + + ExprFactory &m_efac; + SMTUtils u; + CHCs& ruleManager; + int varCnt = 0; + ExprVector ssaSteps; + + public: + + NonlinCHCsolver (CHCs& r) : m_efac(r.m_efac), ruleManager(r), u(m_efac) {} + + bool solveIncrementally(int unr, ExprVector& rels, vector& args) + { + if (unr > 1000) // hardcoded bound + { + outs () << "(maximum bound reached)\n"; + return true; + } + else if (rels.empty()) + { + return false; + } + + bool res = true; + + // reserve copy; + auto ssaStepsTmp = ssaSteps; + int varCntTmp = varCnt; + + vector> availableRules; + for (int i = 0; i < rels.size(); i++) + { + vector available; + for (auto & b : ruleManager.incms[rels[i]]) + { + Expr postcond = ruleManager.getPostcondition(b, args[i]); + // identifying available rules + if (u.isSat(postcond, conjoin(ssaSteps, m_efac))) + { + available.push_back(b); + } + } + availableRules.push_back(available); + } + vector> ruleCombinations; + getCombinations(availableRules, ruleCombinations); + + for (auto & c : ruleCombinations) + { + ssaSteps = ssaStepsTmp; + varCnt = varCntTmp; + ExprVector rels2; + vector args2; + + for (int i = 0; i < c.size(); i++) + { + // clone all srcVars and rename in the body + auto &hr = ruleManager.chcs[c[i]]; + Expr body = hr.body; + if (!hr.dstVars.empty()) body = replaceAll(body, hr.dstVars, args[i]); + vector tmp; + for (int j = 0; j < hr.srcRelations.size(); j++) + { + rels2.push_back(hr.srcRelations[j]); + ExprVector tmp1; + for(auto &a: hr.srcVars[j]) + { + Expr new_name = mkTerm ("_fh_" + to_string(varCnt++), m_efac); + tmp1.push_back(cloneVar(a, new_name)); + } + args2.push_back(tmp1); + body = replaceAll(body, hr.srcVars[j], tmp1); + } + + ssaSteps.push_back(body); + } + if (u.isSat(conjoin(ssaSteps, m_efac))) // TODO: optimize with incremental SMT solving (i.e., using push / pop) + { + res = res && solveIncrementally(unr + 1, rels2, args2); + } + } + return res; + } + + void solveModular() + { + ExprVector query; + query.push_back(ruleManager.failDecl); + vector empt; + outs () << ((solveIncrementally (0, query, empt)) ? "unsat\n" : "sat\n"); + } + }; + + inline void solveModular(string smt) + { + ExprFactory m_efac; + EZ3 z3(m_efac); + CHCs ruleManager(m_efac, z3); + ruleManager.parse(smt); + NonlinCHCsolver nonlin(ruleManager); + nonlin.solveModular(); + }; +} + +#endif diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index 5ec1c3a5d..fd377dec7 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -1,3 +1,5 @@ +add_subdirectory(nonlin) + add_subdirectory(bnd) add_subdirectory(deep) diff --git a/tools/nonlin/CMakeLists.txt b/tools/nonlin/CMakeLists.txt new file mode 100644 index 000000000..dc7ae8912 --- /dev/null +++ b/tools/nonlin/CMakeLists.txt @@ -0,0 +1,4 @@ +add_executable (modver NonlinSolver.cpp) +target_link_libraries (modver ${Z3_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${GMPXX_LIB} ${GMP_LIB}) +llvm_config (modver bitwriter) +install(TARGETS modver RUNTIME DESTINATION bin) diff --git a/tools/nonlin/NonlinSolver.cpp b/tools/nonlin/NonlinSolver.cpp new file mode 100644 index 000000000..57da6035f --- /dev/null +++ b/tools/nonlin/NonlinSolver.cpp @@ -0,0 +1,10 @@ +#include "deep/NonlinCHCsolver.hpp" + +using namespace ufo; +using namespace std; + +int main (int argc, char ** argv) +{ + solveModular(string(argv[argc-1])); + return 0; +} From 61323d134fe25dfa7d9e5dd2257e1806b9ce7b77 Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Thu, 13 Dec 2018 16:40:57 -0500 Subject: [PATCH 132/236] handling of local variables fixed; more examples added --- bench_horn_exampl/count_lin_bnd_2.smt2 | 18 +++ bench_horn_exampl/count_nonlin_bnd_2.smt2 | 21 ++++ bench_horn_exampl/nonlinear_10.smt2 | 105 ++++++++++++++++++ bench_horn_exampl/nonlinear_7.smt2 | 98 ++++++++++++++++ bench_horn_exampl/nonlinear_8.smt2 | 98 ++++++++++++++++ bench_horn_exampl/nonlinear_9.smt2 | 98 ++++++++++++++++ bench_horn_exampl/pow_linear_sat.smt2 | 24 ++++ .../{pow.smt2 => pow_linear_unsat.smt2} | 0 bench_horn_exampl/pow_nonlinear_0.smt2 | 25 +++++ bench_horn_exampl/pow_nonlinear_0_sat_0.smt2 | 25 +++++ bench_horn_exampl/pow_nonlinear_0_sat_1.smt2 | 25 +++++ bench_horn_exampl/pow_nonlinear_1.smt2 | 64 +++++++++++ bench_horn_exampl/pow_nonlinear_1_sat_0.smt2 | 64 +++++++++++ bench_horn_exampl/pow_nonlinear_1_sat_1.smt2 | 64 +++++++++++ bench_horn_exampl/pow_nonlinear_2.smt2 | 64 +++++++++++ bench_horn_exampl/pow_nonlinear_2_sat_0.smt2 | 64 +++++++++++ bench_horn_exampl/pow_nonlinear_2_sat_1.smt2 | 64 +++++++++++ bench_horn_exampl/pow_nonlinear_2_sat_2.smt2 | 64 +++++++++++ bench_horn_exampl/pow_nonlinear_2_sat_3.smt2 | 64 +++++++++++ bench_horn_exampl/pow_nonlinear_2_sat_4.smt2 | 64 +++++++++++ include/deep/HornNonlin.hpp | 11 ++ include/deep/NonlinCHCsolver.hpp | 5 + 22 files changed, 1129 insertions(+) create mode 100644 bench_horn_exampl/count_lin_bnd_2.smt2 create mode 100644 bench_horn_exampl/count_nonlin_bnd_2.smt2 create mode 100644 bench_horn_exampl/nonlinear_10.smt2 create mode 100644 bench_horn_exampl/nonlinear_7.smt2 create mode 100644 bench_horn_exampl/nonlinear_8.smt2 create mode 100644 bench_horn_exampl/nonlinear_9.smt2 create mode 100644 bench_horn_exampl/pow_linear_sat.smt2 rename bench_horn_exampl/{pow.smt2 => pow_linear_unsat.smt2} (100%) create mode 100644 bench_horn_exampl/pow_nonlinear_0.smt2 create mode 100644 bench_horn_exampl/pow_nonlinear_0_sat_0.smt2 create mode 100644 bench_horn_exampl/pow_nonlinear_0_sat_1.smt2 create mode 100644 bench_horn_exampl/pow_nonlinear_1.smt2 create mode 100644 bench_horn_exampl/pow_nonlinear_1_sat_0.smt2 create mode 100644 bench_horn_exampl/pow_nonlinear_1_sat_1.smt2 create mode 100644 bench_horn_exampl/pow_nonlinear_2.smt2 create mode 100644 bench_horn_exampl/pow_nonlinear_2_sat_0.smt2 create mode 100644 bench_horn_exampl/pow_nonlinear_2_sat_1.smt2 create mode 100644 bench_horn_exampl/pow_nonlinear_2_sat_2.smt2 create mode 100644 bench_horn_exampl/pow_nonlinear_2_sat_3.smt2 create mode 100644 bench_horn_exampl/pow_nonlinear_2_sat_4.smt2 diff --git a/bench_horn_exampl/count_lin_bnd_2.smt2 b/bench_horn_exampl/count_lin_bnd_2.smt2 new file mode 100644 index 000000000..a051fc1be --- /dev/null +++ b/bench_horn_exampl/count_lin_bnd_2.smt2 @@ -0,0 +1,18 @@ +(declare-rel inv1 (Int Int)) +(declare-rel inv2 (Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x 0) (= y 0)) (inv1 x y))) + +(rule (=> (and (inv1 x y) (= y1 (+ y 1)) (= x1 (+ x 1))) (inv2 x1 y1))) + +(rule (=> (and (inv2 x y) (= y1 (+ y 1)) (= x1 (- x 2))) (inv1 x1 y1))) + +(rule (=> (and (inv1 x y) (= y 100) (not (= x 100))) fail)) + +(query fail) diff --git a/bench_horn_exampl/count_nonlin_bnd_2.smt2 b/bench_horn_exampl/count_nonlin_bnd_2.smt2 new file mode 100644 index 000000000..470cff0bb --- /dev/null +++ b/bench_horn_exampl/count_nonlin_bnd_2.smt2 @@ -0,0 +1,21 @@ +(declare-rel inv (Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (=> (and (<= x 0) (or (= y 0) (= y 2))) (inv x y))) + +(rule (=> + (and + (inv x y) + (> x1 0) + (= x1 (+ x 1)) + (= y1 (+ y 1))) + (inv x1 y1))) + +(rule (=> (and (inv 100 y) (inv 100 y1) (not (= y y1))) fail)) + +(query fail) diff --git a/bench_horn_exampl/nonlinear_10.smt2 b/bench_horn_exampl/nonlinear_10.smt2 new file mode 100644 index 000000000..cec0ac263 --- /dev/null +++ b/bench_horn_exampl/nonlinear_10.smt2 @@ -0,0 +1,105 @@ +(declare-rel write ((Array Int Int) Int Int Int (Array Int Int) Int Int)) +(declare-rel write_several ((Array Int Int) Int Int (Array Int Int) Int (Array Int Int) Int Int)) +(declare-rel write_several_loop ((Array Int Int) (Array Int Int) Int Int Int (Array Int Int))) +(declare-rel rewrite ((Array Int Int) Int Int (Array Int Int) Int Int)) +(declare-rel wipe ((Array Int Int) Int Int (Array Int Int) Int Int)) +(declare-rel skip_write ((Array Int Int) Int Int Int (Array Int Int) Int Int)) +(declare-rel skip_read ((Array Int Int) Int Int Int (Array Int Int) Int Int)) +(declare-rel read ((Array Int Int) Int Int (Array Int Int) Int Int Int)) +(declare-rel leak ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel count (Int Int Int)) +(declare-rel fail ()) + +(declare-var a (Array Int Int)) +(declare-var a0 (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var a2 (Array Int Int)) +(declare-var a3 (Array Int Int)) +(declare-var a4 (Array Int Int)) +(declare-var a5 (Array Int Int)) +(declare-var a6 (Array Int Int)) +(declare-var a7 (Array Int Int)) +(declare-var data (Array Int Int)) +(declare-var data0 (Array Int Int)) +(declare-var wp Int) +(declare-var wp0 Int) +(declare-var wp1 Int) +(declare-var wp2 Int) +(declare-var wp3 Int) +(declare-var wp4 Int) +(declare-var wp5 Int) +(declare-var wp6 Int) +(declare-var wp7 Int) +(declare-var rp Int) +(declare-var rp0 Int) +(declare-var rp1 Int) +(declare-var rp2 Int) +(declare-var rp3 Int) +(declare-var rp4 Int) +(declare-var rp5 Int) +(declare-var rp6 Int) +(declare-var rp7 Int) +(declare-var s Int) +(declare-var s0 Int) +(declare-var i Int) +(declare-var amt Int) +(declare-var out Int) +(declare-var out0 Int) + +; write +(rule (=> (and (= (store a wp s) a0) (= wp0 (+ 1 wp))) (write a wp rp s a0 wp0 rp))) +; write several +(rule (=> (= amt i) (write_several_loop a data wp i amt a))) +(rule (=> + (and + (not (= amt i)) + (= (select data i) s) + (write_several_loop (store a wp s) data (+ wp 1) (+ i 1) amt a0)) + (write_several_loop a data wp i amt a0))) +(rule (=> + (and + (>= amt 0) + (skip_write a wp rp amt a0 wp0 rp0) + (write_several_loop a0 data wp0 0 amt a1)) + (write_several a wp rp data amt a1 wp0 rp0))) +; rewrite (reset) +(rule (rewrite a wp rp a 0 0)) +; wipe (up to write cursor) +(rule (wipe a 0 rp a 0 0)) +(rule (=> (and (>= (- wp 1) 0) (= (store a (- wp 1) 0) a0) (wipe a0 (- wp 1) rp a1 wp0 rp0)) (wipe a wp rp a1 wp0 rp0))) +; skip_write +(rule (=> (= (+ amt wp) wp0) (skip_write a wp rp amt a wp0 rp))) +; skip_read (requires that read cursor stays behind write cursor) +(rule (=> (and (= (+ amt rp) rp0) (< rp0 wp)) (skip_read a wp rp amt a wp rp0))) +; read(_byte) +(rule (=> (and (= (select a rp) out) (= (+ rp 1) rp0)) (read a wp rp a wp rp0 out))) +; decide +(rule (=> (and (<= (+ s 1) 0) (count (+ s 1) (- i 1) out)) (count s i out))) +(rule (=> (and (>= (- s 1) 0) (count (- s 1) (+ i 1) out)) (count s i out))) +(rule (count 0 0 0)) + +(rule (=> + (and + (= wp 0) + (= rp 0) + ; write public data + (write_several a wp rp data0 s0 a0 wp0 rp0) + ; write secrets + (write_several a0 wp0 rp0 data 0 a2 wp2 rp2) + ; "wipe" + (wipe a2 wp2 rp2 a3 wp3 rp3) + ; call rewrite + (rewrite a3 wp3 rp3 a4 wp4 rp4) + (skip_write a4 wp4 rp4 (+ s s0) a5 wp5 rp5) + (skip_read a5 wp5 rp5 s0 a6 wp6 rp6) + (read a6 wp6 rp6 a7 wp7 rp7 out0) + ; make a decision based on out0 + (count out0 i out) + ) + (leak a data s out))) + +(rule (=> + (and (leak a data s out) (leak a data0 s out0) (not (= out out0))) + fail)) + +(query fail) diff --git a/bench_horn_exampl/nonlinear_7.smt2 b/bench_horn_exampl/nonlinear_7.smt2 new file mode 100644 index 000000000..b6db1221e --- /dev/null +++ b/bench_horn_exampl/nonlinear_7.smt2 @@ -0,0 +1,98 @@ +(declare-rel write ((Array Int Int) Int Int Int (Array Int Int) Int Int)) +(declare-rel write_several ((Array Int Int) Int Int (Array Int Int) Int (Array Int Int) Int Int)) +(declare-rel write_several_loop ((Array Int Int) (Array Int Int) Int Int Int (Array Int Int))) +(declare-rel rewrite ((Array Int Int) Int Int (Array Int Int) Int Int)) +(declare-rel wipe ((Array Int Int) Int Int (Array Int Int) Int Int)) +(declare-rel skip_write ((Array Int Int) Int Int Int (Array Int Int) Int Int)) +(declare-rel skip_read ((Array Int Int) Int Int Int (Array Int Int) Int Int)) +(declare-rel read ((Array Int Int) Int Int (Array Int Int) Int Int Int)) +(declare-rel leak ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel fail ()) + +(declare-var a (Array Int Int)) +(declare-var a0 (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var a2 (Array Int Int)) +(declare-var a3 (Array Int Int)) +(declare-var a4 (Array Int Int)) +(declare-var a5 (Array Int Int)) +(declare-var a6 (Array Int Int)) +(declare-var a7 (Array Int Int)) +(declare-var data (Array Int Int)) +(declare-var data0 (Array Int Int)) +(declare-var wp Int) +(declare-var wp0 Int) +(declare-var wp1 Int) +(declare-var wp2 Int) +(declare-var wp3 Int) +(declare-var wp4 Int) +(declare-var wp5 Int) +(declare-var wp6 Int) +(declare-var wp7 Int) +(declare-var rp Int) +(declare-var rp0 Int) +(declare-var rp1 Int) +(declare-var rp2 Int) +(declare-var rp3 Int) +(declare-var rp4 Int) +(declare-var rp5 Int) +(declare-var rp6 Int) +(declare-var rp7 Int) +(declare-var s Int) +(declare-var s0 Int) +(declare-var i Int) +(declare-var amt Int) +(declare-var out Int) +(declare-var out0 Int) + +; write +(rule (=> (and (= (store a wp s) a0) (= wp0 (+ 1 wp))) (write a wp rp s a0 wp0 rp))) +; write several +(rule (=> (= amt i) (write_several_loop a data wp i amt a))) +(rule (=> + (and + (not (= amt i)) + (= (select data i) s) + (write_several_loop (store a wp s) data (+ wp 1) (+ i 1) amt a0)) + (write_several_loop a data wp i amt a0))) +(rule (=> + (and + (>= amt 0) + (skip_write a wp rp amt a0 wp0 rp0) + (write_several_loop a0 data wp0 0 amt a1)) + (write_several a wp rp data amt a1 wp0 rp0))) +; rewrite (reset) +(rule (rewrite a wp rp a 0 0)) +; wipe (up to write cursor) +(rule (wipe a 0 rp a 0 0)) +(rule (=> (and (>= (- wp 1) 0) (= (store a (- wp 1) 0) a0) (wipe a0 (- wp 1) rp a1 wp0 rp0)) (wipe a wp rp a1 wp0 rp0))) +; skip_write +(rule (=> (= (+ amt wp) wp0) (skip_write a wp rp amt a wp0 rp))) +; skip_read (requires that read cursor stays behind write cursor) +(rule (=> (and (= (+ amt rp) rp0) (< rp0 wp)) (skip_read a wp rp amt a wp rp0))) +; read(_byte) +(rule (=> (and (= (select a rp) out) (= (+ rp 1) rp0)) (read a wp rp a wp rp0 out))) + +(rule (=> + (and + (= wp 0) + (= rp 0) + ; write public data + (write_several a wp rp data0 s0 a0 wp0 rp0) + ; write secrets + (write_several a0 wp0 rp0 data 0 a2 wp2 rp2) + ; call rewrite + (rewrite a2 wp2 rp2 a3 wp3 rp3) + ; "wipe" + (wipe a3 wp3 rp3 a4 wp4 rp4) + (skip_write a4 wp4 rp4 (+ s s0) a5 wp5 rp5) + (skip_read a5 wp5 rp5 s0 a6 wp6 rp6) + (read a6 wp6 rp6 a7 wp7 rp7 out) + ) + (leak a data s out))) + +(rule (=> + (and (leak a data s out) (leak a data0 s out0) (not (= out out0))) + fail)) + +(query fail) diff --git a/bench_horn_exampl/nonlinear_8.smt2 b/bench_horn_exampl/nonlinear_8.smt2 new file mode 100644 index 000000000..31ba8e38f --- /dev/null +++ b/bench_horn_exampl/nonlinear_8.smt2 @@ -0,0 +1,98 @@ +(declare-rel write ((Array Int Int) Int Int Int (Array Int Int) Int Int)) +(declare-rel write_several ((Array Int Int) Int Int (Array Int Int) Int (Array Int Int) Int Int)) +(declare-rel write_several_loop ((Array Int Int) (Array Int Int) Int Int Int (Array Int Int))) +(declare-rel rewrite ((Array Int Int) Int Int (Array Int Int) Int Int)) +(declare-rel wipe ((Array Int Int) Int Int (Array Int Int) Int Int)) +(declare-rel skip_write ((Array Int Int) Int Int Int (Array Int Int) Int Int)) +(declare-rel skip_read ((Array Int Int) Int Int Int (Array Int Int) Int Int)) +(declare-rel read ((Array Int Int) Int Int (Array Int Int) Int Int Int)) +(declare-rel leak ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel fail ()) + +(declare-var a (Array Int Int)) +(declare-var a0 (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var a2 (Array Int Int)) +(declare-var a3 (Array Int Int)) +(declare-var a4 (Array Int Int)) +(declare-var a5 (Array Int Int)) +(declare-var a6 (Array Int Int)) +(declare-var a7 (Array Int Int)) +(declare-var data (Array Int Int)) +(declare-var data0 (Array Int Int)) +(declare-var wp Int) +(declare-var wp0 Int) +(declare-var wp1 Int) +(declare-var wp2 Int) +(declare-var wp3 Int) +(declare-var wp4 Int) +(declare-var wp5 Int) +(declare-var wp6 Int) +(declare-var wp7 Int) +(declare-var rp Int) +(declare-var rp0 Int) +(declare-var rp1 Int) +(declare-var rp2 Int) +(declare-var rp3 Int) +(declare-var rp4 Int) +(declare-var rp5 Int) +(declare-var rp6 Int) +(declare-var rp7 Int) +(declare-var s Int) +(declare-var s0 Int) +(declare-var i Int) +(declare-var amt Int) +(declare-var out Int) +(declare-var out0 Int) + +; write +(rule (=> (and (= (store a wp s) a0) (= wp0 (+ 1 wp))) (write a wp rp s a0 wp0 rp))) +; write several +(rule (=> (= amt i) (write_several_loop a data wp i amt a))) +(rule (=> + (and + (not (= amt i)) + (= (select data i) s) + (write_several_loop (store a wp s) data (+ wp 1) (+ i 1) amt a0)) + (write_several_loop a data wp i amt a0))) +(rule (=> + (and + (>= amt 0) + (skip_write a wp rp amt a0 wp0 rp0) + (write_several_loop a0 data wp0 0 amt a1)) + (write_several a wp rp data amt a1 wp0 rp0))) +; rewrite (reset) +(rule (rewrite a wp rp a 0 0)) +; wipe (up to write cursor) +(rule (wipe a 0 rp a 0 0)) +(rule (=> (and (>= (- wp 1) 0) (= (store a (- wp 1) 0) a0) (wipe a0 (- wp 1) rp a1 wp0 rp0)) (wipe a wp rp a1 wp0 rp0))) +; skip_write +(rule (=> (= (+ amt wp) wp0) (skip_write a wp rp amt a wp0 rp))) +; skip_read (requires that read cursor stays behind write cursor) +(rule (=> (and (= (+ amt rp) rp0) (< rp0 wp)) (skip_read a wp rp amt a wp rp0))) +; read(_byte) +(rule (=> (and (= (select a rp) out) (= (+ rp 1) rp0)) (read a wp rp a wp rp0 out))) + +(rule (=> + (and + (= wp 0) + (= rp 0) + ; write public data + (write_several a wp rp data0 s0 a0 wp0 rp0) + ; write secrets + (write_several a0 wp0 rp0 data s a2 wp2 rp2) + ; "wipe" + (wipe a2 wp2 rp2 a3 wp3 rp3) + ; call rewrite + (rewrite a3 wp3 rp3 a4 wp4 rp4) + (skip_write a4 wp4 rp4 (+ s s0) a5 wp5 rp5) + (skip_read a5 wp5 rp5 s0 a6 wp6 rp6) + (read a6 wp6 rp6 a7 wp7 rp7 out) + ) + (leak a data s out))) + +(rule (=> + (and (leak a data s out) (leak a data0 s out0) (not (= out out0))) + fail)) + +(query fail) diff --git a/bench_horn_exampl/nonlinear_9.smt2 b/bench_horn_exampl/nonlinear_9.smt2 new file mode 100644 index 000000000..d74d6a486 --- /dev/null +++ b/bench_horn_exampl/nonlinear_9.smt2 @@ -0,0 +1,98 @@ +(declare-rel write ((Array Int Int) Int Int Int (Array Int Int) Int Int)) +(declare-rel write_several ((Array Int Int) Int Int (Array Int Int) Int (Array Int Int) Int Int)) +(declare-rel write_several_loop ((Array Int Int) (Array Int Int) Int Int Int (Array Int Int))) +(declare-rel rewrite ((Array Int Int) Int Int (Array Int Int) Int Int)) +(declare-rel wipe ((Array Int Int) Int Int (Array Int Int) Int Int)) +(declare-rel skip_write ((Array Int Int) Int Int Int (Array Int Int) Int Int)) +(declare-rel skip_read ((Array Int Int) Int Int Int (Array Int Int) Int Int)) +(declare-rel read ((Array Int Int) Int Int (Array Int Int) Int Int Int)) +(declare-rel leak ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel fail ()) + +(declare-var a (Array Int Int)) +(declare-var a0 (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var a2 (Array Int Int)) +(declare-var a3 (Array Int Int)) +(declare-var a4 (Array Int Int)) +(declare-var a5 (Array Int Int)) +(declare-var a6 (Array Int Int)) +(declare-var a7 (Array Int Int)) +(declare-var data (Array Int Int)) +(declare-var data0 (Array Int Int)) +(declare-var wp Int) +(declare-var wp0 Int) +(declare-var wp1 Int) +(declare-var wp2 Int) +(declare-var wp3 Int) +(declare-var wp4 Int) +(declare-var wp5 Int) +(declare-var wp6 Int) +(declare-var wp7 Int) +(declare-var rp Int) +(declare-var rp0 Int) +(declare-var rp1 Int) +(declare-var rp2 Int) +(declare-var rp3 Int) +(declare-var rp4 Int) +(declare-var rp5 Int) +(declare-var rp6 Int) +(declare-var rp7 Int) +(declare-var s Int) +(declare-var s0 Int) +(declare-var i Int) +(declare-var amt Int) +(declare-var out Int) +(declare-var out0 Int) + +; write +(rule (=> (and (= (store a wp s) a0) (= wp0 (+ 1 wp))) (write a wp rp s a0 wp0 rp))) +; write several +(rule (=> (= amt i) (write_several_loop a data wp i amt a))) +(rule (=> + (and + (not (= amt i)) + (= (select data i) s) + (write_several_loop (store a wp s) data (+ wp 1) (+ i 1) amt a0)) + (write_several_loop a data wp i amt a0))) +(rule (=> + (and + (>= amt 0) + (skip_write a wp rp amt a0 wp0 rp0) + (write_several_loop a0 data wp0 0 amt a1)) + (write_several a wp rp data amt a1 wp0 rp0))) +; rewrite (reset) +(rule (rewrite a wp rp a 0 0)) +; wipe (up to write cursor) +(rule (wipe a 0 rp a 0 0)) +(rule (=> (and (>= (- wp 1) 0) (= (store a (- wp 1) 0) a0) (wipe a0 (- wp 1) rp a1 wp0 rp0)) (wipe a wp rp a1 wp0 rp0))) +; skip_write +(rule (=> (= (+ amt wp) wp0) (skip_write a wp rp amt a wp0 rp))) +; skip_read (requires that read cursor stays behind write cursor) +(rule (=> (and (= (+ amt rp) rp0) (< rp0 wp)) (skip_read a wp rp amt a wp rp0))) +; read(_byte) +(rule (=> (and (= (select a rp) out) (= (+ rp 1) rp0)) (read a wp rp a wp rp0 out))) + +(rule (=> + (and + (= wp 0) + (= rp 0) + ; write public data + (write_several a wp rp data0 s0 a0 wp0 rp0) + ; write secrets + (write_several a0 wp0 rp0 data 0 a2 wp2 rp2) + ; "wipe" + (wipe a2 wp2 rp2 a3 wp3 rp3) + ; call rewrite + (rewrite a3 wp3 rp3 a4 wp4 rp4) + (skip_write a4 wp4 rp4 (+ s s0) a5 wp5 rp5) + (skip_read a5 wp5 rp5 s0 a6 wp6 rp6) + (read a6 wp6 rp6 a7 wp7 rp7 out) + ) + (leak a data s out))) + +(rule (=> + (and (leak a data s out) (leak a data0 s out0) (not (= out out0))) + fail)) + +(query fail) diff --git a/bench_horn_exampl/pow_linear_sat.smt2 b/bench_horn_exampl/pow_linear_sat.smt2 new file mode 100644 index 000000000..2accb8c42 --- /dev/null +++ b/bench_horn_exampl/pow_linear_sat.smt2 @@ -0,0 +1,24 @@ +(declare-rel ImportInt (Int Int Int Int)) +(declare-rel Exp2 (Int Int)) +(declare-rel fail ()) +(declare-rel Bad ()) +(declare-var pow Int) +(declare-var prev_pow Int) +(declare-var out Int) +(declare-var prev_out Int) +(declare-var r Int) +(declare-var log_r Int) +(declare-var modulus Int) +(declare-var r_mod_modulus Int) +(declare-var n Int) + +(rule (=> (= pow 0) (Exp2 pow 1))) +(rule (=> (and (> pow 0) (= prev_pow (- pow 1)) (Exp2 prev_pow prev_out) (= out (* 2 prev_out))) (Exp2 pow out))) + +(rule (=> + (and (Exp2 log_r r) (= r_mod_modulus (mod r modulus)) (= out (mod (* (mod n modulus) r_mod_modulus) modulus))) + (ImportInt n log_r modulus out))) + +(rule (=> (and (ImportInt 20 10 997 out) (not (= out 541))) fail)) + +(query fail) diff --git a/bench_horn_exampl/pow.smt2 b/bench_horn_exampl/pow_linear_unsat.smt2 similarity index 100% rename from bench_horn_exampl/pow.smt2 rename to bench_horn_exampl/pow_linear_unsat.smt2 diff --git a/bench_horn_exampl/pow_nonlinear_0.smt2 b/bench_horn_exampl/pow_nonlinear_0.smt2 new file mode 100644 index 000000000..3f82be422 --- /dev/null +++ b/bench_horn_exampl/pow_nonlinear_0.smt2 @@ -0,0 +1,25 @@ +(declare-rel ImportInt (Int Int Int Int)) +(declare-rel Exp2 (Int Int)) +(declare-rel fail ()) +(declare-rel Bad ()) +(declare-var pow Int) +(declare-var prev_pow Int) +(declare-var out Int) +(declare-var out0 Int) +(declare-var prev_out Int) +(declare-var r Int) +(declare-var log_r Int) +(declare-var modulus Int) +(declare-var r_mod_modulus Int) +(declare-var n Int) + +(rule (=> (= pow 0) (Exp2 pow 1))) +(rule (=> (and (> pow 0) (= prev_pow (- pow 1)) (Exp2 prev_pow prev_out) (= out (* 2 prev_out))) (Exp2 pow out))) + +(rule (=> + (and (Exp2 log_r r) (= r_mod_modulus (mod r modulus)) (= out (mod (* (mod n modulus) r_mod_modulus) modulus))) + (ImportInt n log_r modulus out))) + +(rule (=> (and (ImportInt 20 10 997 out) (ImportInt 10 10 997 out0) (= n (+ out out0)) (not (= n 810))) fail)) + +(query fail) diff --git a/bench_horn_exampl/pow_nonlinear_0_sat_0.smt2 b/bench_horn_exampl/pow_nonlinear_0_sat_0.smt2 new file mode 100644 index 000000000..6f70b5b1b --- /dev/null +++ b/bench_horn_exampl/pow_nonlinear_0_sat_0.smt2 @@ -0,0 +1,25 @@ +(declare-rel ImportInt (Int Int Int Int)) +(declare-rel Exp2 (Int Int)) +(declare-rel fail ()) +(declare-rel Bad ()) +(declare-var pow Int) +(declare-var prev_pow Int) +(declare-var out Int) +(declare-var out0 Int) +(declare-var prev_out Int) +(declare-var r Int) +(declare-var log_r Int) +(declare-var modulus Int) +(declare-var r_mod_modulus Int) +(declare-var n Int) + +(rule (=> (= pow 0) (Exp2 pow 1))) +(rule (=> (and (> pow 0) (= prev_pow (- pow 1)) (Exp2 prev_pow prev_out) (= out (* 2 prev_out))) (Exp2 pow out))) + +(rule (=> + (and (Exp2 log_r r) (= r_mod_modulus (mod r modulus)) (= out (mod (* (mod n modulus) r_mod_modulus) modulus))) + (ImportInt n log_r modulus out))) + +(rule (=> (and (ImportInt 20 10 997 out) (ImportInt 10 10 997 out0) (= n (+ out out0)) (not (= n 811))) fail)) + +(query fail) diff --git a/bench_horn_exampl/pow_nonlinear_0_sat_1.smt2 b/bench_horn_exampl/pow_nonlinear_0_sat_1.smt2 new file mode 100644 index 000000000..78a8354a9 --- /dev/null +++ b/bench_horn_exampl/pow_nonlinear_0_sat_1.smt2 @@ -0,0 +1,25 @@ +(declare-rel ImportInt (Int Int Int Int)) +(declare-rel Exp2 (Int Int)) +(declare-rel fail ()) +(declare-rel Bad ()) +(declare-var pow Int) +(declare-var prev_pow Int) +(declare-var out Int) +(declare-var out0 Int) +(declare-var prev_out Int) +(declare-var r Int) +(declare-var log_r Int) +(declare-var modulus Int) +(declare-var r_mod_modulus Int) +(declare-var n Int) + +(rule (=> (= pow 0) (Exp2 pow 1))) +(rule (=> (and (> pow 0) (= prev_pow (- pow 1)) (Exp2 prev_pow prev_out) (= out (* 2 prev_out))) (Exp2 pow out))) + +(rule (=> + (and (Exp2 log_r r) (= r_mod_modulus (mod r modulus)) (= out (mod (* (mod n modulus) r_mod_modulus) modulus))) + (ImportInt n log_r modulus out))) + +(rule (=> (and (ImportInt 20 10 977 out) (ImportInt 10 10 997 out0) (= n (+ out out0)) (not (= n 810))) fail)) + +(query fail) diff --git a/bench_horn_exampl/pow_nonlinear_1.smt2 b/bench_horn_exampl/pow_nonlinear_1.smt2 new file mode 100644 index 000000000..08e6009e2 --- /dev/null +++ b/bench_horn_exampl/pow_nonlinear_1.smt2 @@ -0,0 +1,64 @@ +(declare-rel ImportInt (Int Int Int Int)) +(declare-rel ExportInt (Int Int Int Int)) +(declare-rel Inverse (Int Int Int Int)) +(declare-rel InverseLoop (Int Int Int Int Int Int Int)) +(declare-rel Exp2 (Int Int)) +(declare-rel fail ()) +(declare-rel Bad ()) +(declare-var pow Int) +(declare-var prev_pow Int) +(declare-var out Int) +(declare-var out0 Int) +(declare-var prev_out Int) +(declare-var r Int) +(declare-var log_r Int) +(declare-var modulus Int) +(declare-var r_mod_modulus Int) +(declare-var n Int) +(declare-var log_sum Int) +(declare-var log_sum_p Int) +(declare-var x Int) +(declare-var y Int) +(declare-var x_p Int) +(declare-var y_p Int) +(declare-var x_pp Int) +(declare-var y_pp Int) +(declare-var out_x Int) +(declare-var out_y Int) +(declare-var inv_r Int) +(declare-var cond Bool) +(declare-var inv_modulus Int) + + +(rule (=> (= pow 0) (Exp2 pow 1))) +(rule (=> (and (> pow 0) (= prev_pow (- pow 1)) (Exp2 prev_pow prev_out) (= out (* 2 prev_out))) (Exp2 pow out))) + +(rule (=> + (and (Exp2 log_r r) (= r_mod_modulus (mod r modulus)) (= out (mod (* (mod n modulus) r_mod_modulus) modulus))) + (ImportInt n log_r modulus out))) + +(rule (=> (= log_sum 0) (InverseLoop log_sum modulus r x y x y))) +(rule (=> + (and (> log_sum 0) (= log_sum_p (- log_sum 1)) + (= cond (not (= (mod x 2) 0))) + (= x_p (ite cond (+ x modulus) x)) + (= y_p (ite cond (+ y (* 2 r)) y)) + (= x_pp (div x_p 2)) (= y_pp (div y_p 2)) + (InverseLoop log_sum_p modulus r x_pp y_pp out_x out_y)) + (InverseLoop log_sum modulus r x y out_x out_y))) +(rule (=> + (and (= log_sum (+ log_r 1)) + (Exp2 log_r r) + (= x 1) + (= y 0) + (InverseLoop log_sum modulus r x y out_x out_y) + (= out (* 2 out_x))) + (Inverse log_r modulus out out_y))) + +(rule (=> + (and (Inverse log_r modulus inv_r inv_modulus) (= out (mod (* n inv_r) modulus))) + (ExportInt n log_r modulus out))) + +(rule (=> (and (Inverse 10 997 inv_r inv_modulus) (not (= inv_r 1514))) fail)) + +(query fail) diff --git a/bench_horn_exampl/pow_nonlinear_1_sat_0.smt2 b/bench_horn_exampl/pow_nonlinear_1_sat_0.smt2 new file mode 100644 index 000000000..df462f843 --- /dev/null +++ b/bench_horn_exampl/pow_nonlinear_1_sat_0.smt2 @@ -0,0 +1,64 @@ +(declare-rel ImportInt (Int Int Int Int)) +(declare-rel ExportInt (Int Int Int Int)) +(declare-rel Inverse (Int Int Int Int)) +(declare-rel InverseLoop (Int Int Int Int Int Int Int)) +(declare-rel Exp2 (Int Int)) +(declare-rel fail ()) +(declare-rel Bad ()) +(declare-var pow Int) +(declare-var prev_pow Int) +(declare-var out Int) +(declare-var out0 Int) +(declare-var prev_out Int) +(declare-var r Int) +(declare-var log_r Int) +(declare-var modulus Int) +(declare-var r_mod_modulus Int) +(declare-var n Int) +(declare-var log_sum Int) +(declare-var log_sum_p Int) +(declare-var x Int) +(declare-var y Int) +(declare-var x_p Int) +(declare-var y_p Int) +(declare-var x_pp Int) +(declare-var y_pp Int) +(declare-var out_x Int) +(declare-var out_y Int) +(declare-var inv_r Int) +(declare-var cond Bool) +(declare-var inv_modulus Int) + + +(rule (=> (= pow 0) (Exp2 pow 1))) +(rule (=> (and (> pow 0) (= prev_pow (- pow 1)) (Exp2 prev_pow prev_out) (= out (* 2 prev_out))) (Exp2 pow out))) + +(rule (=> + (and (Exp2 log_r r) (= r_mod_modulus (mod r modulus)) (= out (mod (* (mod n modulus) r_mod_modulus) modulus))) + (ImportInt n log_r modulus out))) + +(rule (=> (= log_sum 0) (InverseLoop log_sum modulus r x y x y))) +(rule (=> + (and (> log_sum 0) (= log_sum_p (- log_sum 1)) + (= cond (not (= (mod x 2) 0))) + (= x_p (ite cond (+ x modulus) x)) + (= y_p (ite cond (+ y (* 2 r)) y)) + (= x_pp (div x_p 2)) (= y_pp (div y_p 2)) + (InverseLoop log_sum_p modulus r x_pp y_pp out_x out_y)) + (InverseLoop log_sum modulus r x y out_x out_y))) +(rule (=> + (and (= log_sum (+ log_r 1)) + (Exp2 log_r r) + (= x 1) + (= y 0) + (InverseLoop log_sum modulus r x y out_x out_y) + (= out (* 2 out_x))) + (Inverse log_r modulus out out_y))) + +(rule (=> + (and (Inverse log_r modulus inv_r inv_modulus) (= out (mod (* n inv_r) modulus))) + (ExportInt n log_r modulus out))) + +(rule (=> (and (Inverse 10 997 inv_r inv_modulus) (not (= inv_r 1515))) fail)) + +(query fail) diff --git a/bench_horn_exampl/pow_nonlinear_1_sat_1.smt2 b/bench_horn_exampl/pow_nonlinear_1_sat_1.smt2 new file mode 100644 index 000000000..49a9c097c --- /dev/null +++ b/bench_horn_exampl/pow_nonlinear_1_sat_1.smt2 @@ -0,0 +1,64 @@ +(declare-rel ImportInt (Int Int Int Int)) +(declare-rel ExportInt (Int Int Int Int)) +(declare-rel Inverse (Int Int Int Int)) +(declare-rel InverseLoop (Int Int Int Int Int Int Int)) +(declare-rel Exp2 (Int Int)) +(declare-rel fail ()) +(declare-rel Bad ()) +(declare-var pow Int) +(declare-var prev_pow Int) +(declare-var out Int) +(declare-var out0 Int) +(declare-var prev_out Int) +(declare-var r Int) +(declare-var log_r Int) +(declare-var modulus Int) +(declare-var r_mod_modulus Int) +(declare-var n Int) +(declare-var log_sum Int) +(declare-var log_sum_p Int) +(declare-var x Int) +(declare-var y Int) +(declare-var x_p Int) +(declare-var y_p Int) +(declare-var x_pp Int) +(declare-var y_pp Int) +(declare-var out_x Int) +(declare-var out_y Int) +(declare-var inv_r Int) +(declare-var cond Bool) +(declare-var inv_modulus Int) + + +(rule (=> (= pow 0) (Exp2 pow 1))) +(rule (=> (and (> pow 0) (= prev_pow (- pow 1)) (Exp2 prev_pow prev_out) (= out (* 2 prev_out))) (Exp2 pow out))) + +(rule (=> + (and (Exp2 log_r r) (= r_mod_modulus (mod r modulus)) (= out (mod (* (mod n modulus) r_mod_modulus) modulus))) + (ImportInt n log_r modulus out))) + +(rule (=> (= log_sum 0) (InverseLoop log_sum modulus r x y x y))) +(rule (=> + (and (> log_sum 0) (= log_sum_p (- log_sum 1)) + (= cond (not (= (mod x 2) 0))) + (= x_p (ite cond (+ x modulus) x)) + (= y_p (ite cond (+ y (* 2 r)) y)) + (= x_pp (div x_p 2)) (= y_pp (div y_p 2)) + (InverseLoop log_sum_p modulus r x_pp y_pp out_x out_y)) + (InverseLoop log_sum modulus r x y out_x out_y))) +(rule (=> + (and (= log_sum (+ log_r 1)) + (Exp2 log_r r) + (= x 1) + (= y 0) + (InverseLoop log_sum modulus r x y out_x out_y) + (= out (* 2 out_x))) + (Inverse log_r modulus out out_y))) + +(rule (=> + (and (Inverse log_r modulus inv_r inv_modulus) (= out (mod (* n inv_r) modulus))) + (ExportInt n log_r modulus out))) + +(rule (=> (and (Inverse 10 977 inv_r inv_modulus) (not (= inv_r 1514))) fail)) + +(query fail) diff --git a/bench_horn_exampl/pow_nonlinear_2.smt2 b/bench_horn_exampl/pow_nonlinear_2.smt2 new file mode 100644 index 000000000..1d208bc56 --- /dev/null +++ b/bench_horn_exampl/pow_nonlinear_2.smt2 @@ -0,0 +1,64 @@ +(declare-rel ImportInt (Int Int Int Int)) +(declare-rel ExportInt (Int Int Int Int)) +(declare-rel Inverse (Int Int Int Int)) +(declare-rel InverseLoop (Int Int Int Int Int Int Int)) +(declare-rel Exp2 (Int Int)) +(declare-rel fail ()) +(declare-rel Bad ()) +(declare-var pow Int) +(declare-var prev_pow Int) +(declare-var out Int) +(declare-var out0 Int) +(declare-var prev_out Int) +(declare-var r Int) +(declare-var log_r Int) +(declare-var modulus Int) +(declare-var r_mod_modulus Int) +(declare-var n Int) +(declare-var log_sum Int) +(declare-var log_sum_p Int) +(declare-var x Int) +(declare-var y Int) +(declare-var x_p Int) +(declare-var y_p Int) +(declare-var x_pp Int) +(declare-var y_pp Int) +(declare-var out_x Int) +(declare-var out_y Int) +(declare-var inv_r Int) +(declare-var cond Bool) +(declare-var inv_modulus Int) + + +(rule (=> (= pow 0) (Exp2 pow 1))) +(rule (=> (and (> pow 0) (= prev_pow (- pow 1)) (Exp2 prev_pow prev_out) (= out (* 2 prev_out))) (Exp2 pow out))) + +(rule (=> + (and (Exp2 log_r r) (= r_mod_modulus (mod r modulus)) (= out (mod (* (mod n modulus) r_mod_modulus) modulus))) + (ImportInt n log_r modulus out))) + +(rule (=> (= log_sum 0) (InverseLoop log_sum modulus r x y x y))) +(rule (=> + (and (> log_sum 0) (= log_sum_p (- log_sum 1)) + (= cond (not (= (mod x 2) 0))) + (= x_p (ite cond (+ x modulus) x)) + (= y_p (ite cond (+ y (* 2 r)) y)) + (= x_pp (div x_p 2)) (= y_pp (div y_p 2)) + (InverseLoop log_sum_p modulus r x_pp y_pp out_x out_y)) + (InverseLoop log_sum modulus r x y out_x out_y))) +(rule (=> + (and (= log_sum (+ log_r 1)) + (Exp2 log_r r) + (= x 1) + (= y 0) + (InverseLoop log_sum modulus r x y out_x out_y) + (= out (* 2 out_x))) + (Inverse log_r modulus out out_y))) + +(rule (=> + (and (Inverse log_r modulus inv_r inv_modulus) (= out (mod (* n inv_r) modulus))) + (ExportInt n log_r modulus out))) + +(rule (=> (and (ImportInt 20 10 997 out) (ExportInt out 10 997 out0) (not (= out0 20))) fail)) + +(query fail) diff --git a/bench_horn_exampl/pow_nonlinear_2_sat_0.smt2 b/bench_horn_exampl/pow_nonlinear_2_sat_0.smt2 new file mode 100644 index 000000000..431a13615 --- /dev/null +++ b/bench_horn_exampl/pow_nonlinear_2_sat_0.smt2 @@ -0,0 +1,64 @@ +(declare-rel ImportInt (Int Int Int Int)) +(declare-rel ExportInt (Int Int Int Int)) +(declare-rel Inverse (Int Int Int Int)) +(declare-rel InverseLoop (Int Int Int Int Int Int Int)) +(declare-rel Exp2 (Int Int)) +(declare-rel fail ()) +(declare-rel Bad ()) +(declare-var pow Int) +(declare-var prev_pow Int) +(declare-var out Int) +(declare-var out0 Int) +(declare-var prev_out Int) +(declare-var r Int) +(declare-var log_r Int) +(declare-var modulus Int) +(declare-var r_mod_modulus Int) +(declare-var n Int) +(declare-var log_sum Int) +(declare-var log_sum_p Int) +(declare-var x Int) +(declare-var y Int) +(declare-var x_p Int) +(declare-var y_p Int) +(declare-var x_pp Int) +(declare-var y_pp Int) +(declare-var out_x Int) +(declare-var out_y Int) +(declare-var inv_r Int) +(declare-var cond Bool) +(declare-var inv_modulus Int) + + +(rule (=> (= pow 0) (Exp2 pow 1))) +(rule (=> (and (> pow 0) (= prev_pow (- pow 1)) (Exp2 prev_pow prev_out) (= out (* 2 prev_out))) (Exp2 pow out))) + +(rule (=> + (and (Exp2 log_r r) (= r_mod_modulus (mod r modulus)) (= out (mod (* (mod n modulus) r_mod_modulus) modulus))) + (ImportInt n log_r modulus out))) + +(rule (=> (= log_sum 0) (InverseLoop log_sum modulus r x y x y))) +(rule (=> + (and (> log_sum 0) (= log_sum_p (- log_sum 1)) + (= cond (not (= (mod x 2) 0))) + (= x_p (ite cond (+ x modulus) x)) + (= y_p (ite cond (+ y (* 2 r)) y)) + (= x_pp (div x_p 2)) (= y_pp (div y_p 2)) + (InverseLoop log_sum_p modulus r x_pp y_pp out_x out_y)) + (InverseLoop log_sum modulus r x y out_x out_y))) +(rule (=> + (and (= log_sum (+ log_r 1)) + (Exp2 log_r r) + (= x 1) + (= y 0) + (InverseLoop log_sum modulus r x y out_x out_y) + (= out (* 2 out_x))) + (Inverse log_r modulus out out_y))) + +(rule (=> + (and (Inverse log_r modulus inv_r inv_modulus) (= out (mod (* n inv_r) modulus))) + (ExportInt n log_r modulus out))) + +(rule (=> (and (ImportInt 20 10 997 out) (ExportInt out 10 997 out0) (not (= out0 21))) fail)) + +(query fail) diff --git a/bench_horn_exampl/pow_nonlinear_2_sat_1.smt2 b/bench_horn_exampl/pow_nonlinear_2_sat_1.smt2 new file mode 100644 index 000000000..320f15f59 --- /dev/null +++ b/bench_horn_exampl/pow_nonlinear_2_sat_1.smt2 @@ -0,0 +1,64 @@ +(declare-rel ImportInt (Int Int Int Int)) +(declare-rel ExportInt (Int Int Int Int)) +(declare-rel Inverse (Int Int Int Int)) +(declare-rel InverseLoop (Int Int Int Int Int Int Int)) +(declare-rel Exp2 (Int Int)) +(declare-rel fail ()) +(declare-rel Bad ()) +(declare-var pow Int) +(declare-var prev_pow Int) +(declare-var out Int) +(declare-var out0 Int) +(declare-var prev_out Int) +(declare-var r Int) +(declare-var log_r Int) +(declare-var modulus Int) +(declare-var r_mod_modulus Int) +(declare-var n Int) +(declare-var log_sum Int) +(declare-var log_sum_p Int) +(declare-var x Int) +(declare-var y Int) +(declare-var x_p Int) +(declare-var y_p Int) +(declare-var x_pp Int) +(declare-var y_pp Int) +(declare-var out_x Int) +(declare-var out_y Int) +(declare-var inv_r Int) +(declare-var cond Bool) +(declare-var inv_modulus Int) + + +(rule (=> (= pow 0) (Exp2 pow 1))) +(rule (=> (and (> pow 0) (= prev_pow (- pow 1)) (Exp2 prev_pow prev_out) (= out (* 2 prev_out))) (Exp2 pow out))) + +(rule (=> + (and (Exp2 log_r r) (= r_mod_modulus (mod r modulus)) (= out (mod (* (mod n modulus) r_mod_modulus) modulus))) + (ImportInt n log_r modulus out))) + +(rule (=> (= log_sum 0) (InverseLoop log_sum modulus r x y x y))) +(rule (=> + (and (> log_sum 0) (= log_sum_p (- log_sum 1)) + (= cond (not (= (mod x 2) 0))) + (= x_p (ite cond (+ x modulus) x)) + (= y_p (ite cond (+ y (* 2 r)) y)) + (= x_pp (div x_p 2)) (= y_pp (div y_p 2)) + (InverseLoop log_sum_p modulus r x_pp y_pp out_x out_y)) + (InverseLoop log_sum modulus r x y out_x out_y))) +(rule (=> + (and (= log_sum (+ log_r 1)) + (Exp2 log_r r) + (= x 1) + (= y 0) + (InverseLoop log_sum modulus r x y out_x out_y) + (= out (* 2 out_x))) + (Inverse log_r modulus out out_y))) + +(rule (=> + (and (Inverse log_r modulus inv_r inv_modulus) (= out (mod (* n inv_r) modulus))) + (ExportInt n log_r modulus out))) + +(rule (=> (and (ImportInt 20 10 977 out) (ExportInt out 10 997 out0) (not (= out0 20))) fail)) + +(query fail) diff --git a/bench_horn_exampl/pow_nonlinear_2_sat_2.smt2 b/bench_horn_exampl/pow_nonlinear_2_sat_2.smt2 new file mode 100644 index 000000000..41428411f --- /dev/null +++ b/bench_horn_exampl/pow_nonlinear_2_sat_2.smt2 @@ -0,0 +1,64 @@ +(declare-rel ImportInt (Int Int Int Int)) +(declare-rel ExportInt (Int Int Int Int)) +(declare-rel Inverse (Int Int Int Int)) +(declare-rel InverseLoop (Int Int Int Int Int Int Int)) +(declare-rel Exp2 (Int Int)) +(declare-rel fail ()) +(declare-rel Bad ()) +(declare-var pow Int) +(declare-var prev_pow Int) +(declare-var out Int) +(declare-var out0 Int) +(declare-var prev_out Int) +(declare-var r Int) +(declare-var log_r Int) +(declare-var modulus Int) +(declare-var r_mod_modulus Int) +(declare-var n Int) +(declare-var log_sum Int) +(declare-var log_sum_p Int) +(declare-var x Int) +(declare-var y Int) +(declare-var x_p Int) +(declare-var y_p Int) +(declare-var x_pp Int) +(declare-var y_pp Int) +(declare-var out_x Int) +(declare-var out_y Int) +(declare-var inv_r Int) +(declare-var cond Bool) +(declare-var inv_modulus Int) + + +(rule (=> (= pow 0) (Exp2 pow 1))) +(rule (=> (and (> pow 0) (= prev_pow (- pow 1)) (Exp2 prev_pow prev_out) (= out (* 2 prev_out))) (Exp2 pow out))) + +(rule (=> + (and (Exp2 log_r r) (= r_mod_modulus (mod r modulus)) (= out (mod (* (mod n modulus) r_mod_modulus) modulus))) + (ImportInt n log_r modulus out))) + +(rule (=> (= log_sum 0) (InverseLoop log_sum modulus r x y x y))) +(rule (=> + (and (> log_sum 0) (= log_sum_p (- log_sum 1)) + (= cond (not (= (mod x 2) 0))) + (= x_p (ite cond (+ x modulus) x)) + (= y_p (ite cond (+ y (* 2 r)) y)) + (= x_pp (div x_p 2)) (= y_pp (div y_p 2)) + (InverseLoop log_sum_p modulus r x_pp y_pp out_x out_y)) + (InverseLoop log_sum modulus r x y out_x out_y))) +(rule (=> + (and (= log_sum (+ log_r 1)) + (Exp2 log_r r) + (= x 1) + (= y 0) + (InverseLoop log_sum modulus r x y out_x out_y) + (= out (* 2 out_x))) + (Inverse log_r modulus out out_y))) + +(rule (=> + (and (Inverse log_r modulus inv_r inv_modulus) (= out (mod (* n inv_r) modulus))) + (ExportInt n log_r modulus out))) + +(rule (=> (and (ImportInt 20 10 997 out) (ExportInt out 10 997 out0) (= out0 20)) fail)) + +(query fail) diff --git a/bench_horn_exampl/pow_nonlinear_2_sat_3.smt2 b/bench_horn_exampl/pow_nonlinear_2_sat_3.smt2 new file mode 100644 index 000000000..b4df0383d --- /dev/null +++ b/bench_horn_exampl/pow_nonlinear_2_sat_3.smt2 @@ -0,0 +1,64 @@ +(declare-rel ImportInt (Int Int Int Int)) +(declare-rel ExportInt (Int Int Int Int)) +(declare-rel Inverse (Int Int Int Int)) +(declare-rel InverseLoop (Int Int Int Int Int Int Int)) +(declare-rel Exp2 (Int Int)) +(declare-rel fail ()) +(declare-rel Bad ()) +(declare-var pow Int) +(declare-var prev_pow Int) +(declare-var out Int) +(declare-var out0 Int) +(declare-var prev_out Int) +(declare-var r Int) +(declare-var log_r Int) +(declare-var modulus Int) +(declare-var r_mod_modulus Int) +(declare-var n Int) +(declare-var log_sum Int) +(declare-var log_sum_p Int) +(declare-var x Int) +(declare-var y Int) +(declare-var x_p Int) +(declare-var y_p Int) +(declare-var x_pp Int) +(declare-var y_pp Int) +(declare-var out_x Int) +(declare-var out_y Int) +(declare-var inv_r Int) +(declare-var cond Bool) +(declare-var inv_modulus Int) + + +(rule (=> (= pow 0) (Exp2 pow 1))) +(rule (=> (and (> pow 0) (= prev_pow (- pow 1)) (Exp2 prev_pow prev_out) (= out (* 2 prev_out))) (Exp2 pow out))) + +(rule (=> + (and (Exp2 log_r r) (= r_mod_modulus (mod r modulus)) (= out (mod (* (mod n modulus) r_mod_modulus) modulus))) + (ImportInt n log_r modulus out))) + +(rule (=> (= log_sum 0) (InverseLoop log_sum modulus r x y x y))) +(rule (=> + (and (> log_sum 0) (= log_sum_p (- log_sum 1)) + (= cond (not (= (mod x 2) 0))) + (= x_p (ite cond (+ x modulus) x)) + (= y_p (ite cond (+ y (* 2 r)) y)) + (= x_pp (div x_p 2)) (= y_pp (div y_p 2)) + (InverseLoop log_sum_p modulus r x_pp y_pp out_x out_y)) + (InverseLoop log_sum modulus r x y out_x out_y))) +(rule (=> + (and (= log_sum (+ log_r 1)) + (Exp2 log_r r) + (= x 1) + (= y 0) + (InverseLoop log_sum modulus r x y out_x out_y) + (= out (* 2 out_x))) + (Inverse log_r modulus out out_y))) + +(rule (=> + (and (Inverse log_r modulus inv_r inv_modulus) (= out (mod (* n inv_r) modulus))) + (ExportInt n log_r modulus out))) + +(rule (=> (and (ImportInt 20 10 997 out) (ExportInt out 10 997 out0) (> out0 0)) fail)) + +(query fail) diff --git a/bench_horn_exampl/pow_nonlinear_2_sat_4.smt2 b/bench_horn_exampl/pow_nonlinear_2_sat_4.smt2 new file mode 100644 index 000000000..bbc9b3ee2 --- /dev/null +++ b/bench_horn_exampl/pow_nonlinear_2_sat_4.smt2 @@ -0,0 +1,64 @@ +(declare-rel ImportInt (Int Int Int Int)) +(declare-rel ExportInt (Int Int Int Int)) +(declare-rel Inverse (Int Int Int Int)) +(declare-rel InverseLoop (Int Int Int Int Int Int Int)) +(declare-rel Exp2 (Int Int)) +(declare-rel fail ()) +(declare-rel Bad ()) +(declare-var pow Int) +(declare-var prev_pow Int) +(declare-var out Int) +(declare-var out0 Int) +(declare-var prev_out Int) +(declare-var r Int) +(declare-var log_r Int) +(declare-var modulus Int) +(declare-var r_mod_modulus Int) +(declare-var n Int) +(declare-var log_sum Int) +(declare-var log_sum_p Int) +(declare-var x Int) +(declare-var y Int) +(declare-var x_p Int) +(declare-var y_p Int) +(declare-var x_pp Int) +(declare-var y_pp Int) +(declare-var out_x Int) +(declare-var out_y Int) +(declare-var inv_r Int) +(declare-var cond Bool) +(declare-var inv_modulus Int) + + +(rule (=> (= pow 0) (Exp2 pow 1))) +(rule (=> (and (> pow 0) (= prev_pow (- pow 1)) (Exp2 prev_pow prev_out) (= out (* 2 prev_out))) (Exp2 pow out))) + +(rule (=> + (and (Exp2 log_r r) (= r_mod_modulus (mod r modulus)) (= out (mod (* (mod n modulus) r_mod_modulus) modulus))) + (ImportInt n log_r modulus out))) + +(rule (=> (= log_sum 0) (InverseLoop log_sum modulus r x y x y))) +(rule (=> + (and (> log_sum 0) (= log_sum_p (- log_sum 1)) + (= cond (not (= (mod x 2) 0))) + (= x_p (ite cond (+ x modulus) x)) + (= y_p (ite cond (+ y (* 2 r)) y)) + (= x_pp (div x_p 2)) (= y_pp (div y_p 2)) + (InverseLoop log_sum_p modulus r x_pp y_pp out_x out_y)) + (InverseLoop log_sum modulus r x y out_x out_y))) +(rule (=> + (and (= log_sum (+ log_r 1)) + (Exp2 log_r r) + (= x 1) + (= y 0) + (InverseLoop log_sum modulus r x y out_x out_y) + (= out (* 2 out_x))) + (Inverse log_r modulus out out_y))) + +(rule (=> + (and (Inverse log_r modulus inv_r inv_modulus) (= out (mod (* n inv_r) modulus))) + (ExportInt n log_r modulus out))) + +(rule (=> (and (ImportInt 20 10 997 out) (ExportInt out 10 997 out0) (> out0 10)) fail)) + +(query fail) diff --git a/include/deep/HornNonlin.hpp b/include/deep/HornNonlin.hpp index 161ac469e..a40c43908 100755 --- a/include/deep/HornNonlin.hpp +++ b/include/deep/HornNonlin.hpp @@ -311,6 +311,17 @@ namespace ufo hr.assignVarsAndRewrite (origSrcSymbs, tmp, origDstSymbs, invVars[hr.dstRelation]); hr.body = simpleQE(hr.body, hr.locVars); + + // GF: ideally, hr.locVars should be empty after QE, + // but the QE procedure is imperfect, so + ExprVector body_vars; + expr::filter (hr.body, bind::IsConst(), std::inserter (body_vars, body_vars.begin ())); + for (auto it = hr.locVars.begin(); it != hr.locVars.end(); ) + { + if (find(body_vars.begin(), body_vars.end(), *it) == body_vars.end()) + it = hr.locVars.erase(it); + else ++it; + } } for (int i = 0; i < chcs.size(); i++) diff --git a/include/deep/NonlinCHCsolver.hpp b/include/deep/NonlinCHCsolver.hpp index 09e68fd84..d02b8956d 100644 --- a/include/deep/NonlinCHCsolver.hpp +++ b/include/deep/NonlinCHCsolver.hpp @@ -102,6 +102,11 @@ namespace ufo } args2.push_back(tmp1); body = replaceAll(body, hr.srcVars[j], tmp1); + for (auto & a : hr.locVars) + { + Expr new_name = mkTerm ("_fh_" + to_string(varCnt++), m_efac); + body = replaceAll(body, a, cloneVar(a, new_name)); + } } ssaSteps.push_back(body); From ba1516b019f35ac1576199fdf95e95c20c5d5055 Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Sun, 14 Apr 2019 19:11:20 -0400 Subject: [PATCH 133/236] more careful preprocessing --- include/deep/HornNonlin.hpp | 68 +++++++++++++++++++++++-------------- 1 file changed, 43 insertions(+), 25 deletions(-) diff --git a/include/deep/HornNonlin.hpp b/include/deep/HornNonlin.hpp index a40c43908..62c53b4ff 100755 --- a/include/deep/HornNonlin.hpp +++ b/include/deep/HornNonlin.hpp @@ -91,13 +91,23 @@ namespace ufo CHCs(ExprFactory &efac, EZ3 &z3) : m_efac(efac), m_z3(z3) {}; - void preprocess (Expr term, vector& srcVars, ExprVector &srcRelations, ExprSet& lin) + bool isFapp (Expr e) + { + if (isOpX(e)) + if (e->arity() > 0) + if (isOpX(e->arg(0))) + if (e->arg(0)->arity() >= 2) + return true; + return false; + } + + void preprocess (Expr term, ExprVector& locVars, vector& srcVars, ExprVector &srcRelations, ExprSet& lin) { if (isOpX(term)) { for (auto it = term->args_begin(), end = term->args_end(); it != end; ++it) { - preprocess(*it, srcVars, srcRelations, lin); + preprocess(*it, locVars, srcVars, srcRelations, lin); } } else @@ -106,14 +116,14 @@ namespace ufo { lin.insert(term); } - if (isOpX(term)) + if (isOpX(term) && find(locVars.begin(), locVars.end(), term) == locVars.end()) { if (term->arity() > 0) { if (isOpX(term->arg(0))) { Expr rel = term->arg(0); - if (term->arg(0)->arity() > 2) + if (rel->arity() >= 2) { addDecl(rel); srcRelations.push_back(rel->arg(0)); @@ -134,11 +144,7 @@ namespace ufo void addDecl (Expr a) { - if (a->arity() == 2) - { - addFailDecl(a->arg(0)); - } - else if (invVars[a->arg(0)].size() == 0) + if (invVars[a->arg(0)].size() == 0) { decls.insert(a); for (int i = 1; i < a->arity()-1; i++) @@ -234,28 +240,19 @@ namespace ufo rule = replaceAll(rule, actual_vars, repl_vars); } + if (isOpX(rule) && !isFapp(rule->right()) && !isOpX(rule->right())) + { + rule = mk(mk(rule->left(), mk(rule->right())), mk(m_efac)); + } + if (!isOpX(rule)) rule = mk(mk(m_efac), rule); Expr body = rule->arg(0); Expr head = rule->arg(1); - if (isOpX(head)) - { - addDecl(head->arg(0)); - hr.head = head->arg(0); - hr.dstRelation = head->arg(0)->arg(0); - } - else - { - if (!isOpX(head)) body = mk(body, mk(head)); - addFailDecl(mk(m_efac)); - hr.head = mk(m_efac); - hr.dstRelation = mk(m_efac); - } - vector origSrcSymbs; ExprSet lin; - preprocess(body, origSrcSymbs, hr.srcRelations, lin); + preprocess(body, hr.locVars, origSrcSymbs, hr.srcRelations, lin); if (hr.srcRelations.size() == 0) { if (hasUninterp(body)) @@ -267,9 +264,30 @@ namespace ufo } hr.isFact = hr.srcRelations.empty(); + + if (isOpX(head)) + { + if (head->arg(0)->arity() == 2 && !hr.isFact) + { + addFailDecl(head->arg(0)->arg(0)); + } + else + { + addDecl(head->arg(0)); + } + hr.head = head->arg(0); + hr.dstRelation = head->arg(0)->arg(0); + } + else + { + if (!isOpX(head)) body = mk(body, mk(head)); + addFailDecl(mk(m_efac)); + hr.head = mk(m_efac); + hr.dstRelation = mk(m_efac); + } + hr.isQuery = (hr.dstRelation == failDecl); hr.isInductive = (hr.srcRelations.size() == 1 && hr.srcRelations[0] == hr.dstRelation); - if (hr.isQuery) qCHCNum = chcs.size() - 1; ExprVector allOrigSymbs; From 4dce9dd02f533b1d698cbed0b511eedd54f049ee Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Thu, 25 Jul 2019 14:39:46 -0400 Subject: [PATCH 134/236] guessing and bootstrapping --- .../count_lin_bnd_1.smt2 | 0 .../count_lin_bnd_2.smt2 | 0 .../count_nonlin_bnd_1.smt2 | 0 .../count_nonlin_bnd_2.smt2 | 0 .../nonlinear_0.smt2 | 0 .../nonlinear_1.smt2 | 0 .../nonlinear_10.smt2 | 0 .../nonlinear_2.smt2 | 0 .../nonlinear_3.smt2 | 0 .../nonlinear_4.smt2 | 0 .../nonlinear_5.smt2 | 0 .../nonlinear_6.smt2 | 0 .../nonlinear_7.smt2 | 0 .../nonlinear_8.smt2 | 0 .../nonlinear_9.smt2 | 0 bench_horn_nonlin/parallel_01.smt2 | 17 + bench_horn_nonlin/parallel_02.smt2 | 17 + bench_horn_nonlin/parallel_03.smt2 | 25 ++ .../pow_linear_sat.smt2 | 0 .../pow_linear_unsat.smt2 | 0 .../pow_nonlinear_0.smt2 | 0 .../pow_nonlinear_0_sat_0.smt2 | 0 .../pow_nonlinear_0_sat_1.smt2 | 0 .../pow_nonlinear_1.smt2 | 0 .../pow_nonlinear_1_sat_0.smt2 | 0 .../pow_nonlinear_1_sat_1.smt2 | 0 .../pow_nonlinear_2.smt2 | 0 .../pow_nonlinear_2_sat_0.smt2 | 0 .../pow_nonlinear_2_sat_1.smt2 | 0 .../pow_nonlinear_2_sat_2.smt2 | 0 .../pow_nonlinear_2_sat_3.smt2 | 0 .../pow_nonlinear_2_sat_4.smt2 | 0 include/ae/AeValSolver.hpp | 123 +++++-- include/ae/ExprSimpl.hpp | 257 ++++++++++++- include/ae/SMTUtils.hpp | 178 ++++++--- include/deep/Horn.hpp | 10 +- include/deep/HornNonlin.hpp | 12 +- include/deep/NonlinCHCsolver.hpp | 339 +++++++++++++++++- tools/CMakeLists.txt | 8 - tools/nonlin/CMakeLists.txt | 8 +- tools/nonlin/NonlinSolver.cpp | 2 +- 41 files changed, 878 insertions(+), 118 deletions(-) rename {bench_horn_exampl => bench_horn_nonlin}/count_lin_bnd_1.smt2 (100%) rename {bench_horn_exampl => bench_horn_nonlin}/count_lin_bnd_2.smt2 (100%) rename {bench_horn_exampl => bench_horn_nonlin}/count_nonlin_bnd_1.smt2 (100%) rename {bench_horn_exampl => bench_horn_nonlin}/count_nonlin_bnd_2.smt2 (100%) rename {bench_horn_exampl => bench_horn_nonlin}/nonlinear_0.smt2 (100%) rename {bench_horn_exampl => bench_horn_nonlin}/nonlinear_1.smt2 (100%) rename {bench_horn_exampl => bench_horn_nonlin}/nonlinear_10.smt2 (100%) rename {bench_horn_exampl => bench_horn_nonlin}/nonlinear_2.smt2 (100%) rename {bench_horn_exampl => bench_horn_nonlin}/nonlinear_3.smt2 (100%) rename {bench_horn_exampl => bench_horn_nonlin}/nonlinear_4.smt2 (100%) rename {bench_horn_exampl => bench_horn_nonlin}/nonlinear_5.smt2 (100%) rename {bench_horn_exampl => bench_horn_nonlin}/nonlinear_6.smt2 (100%) rename {bench_horn_exampl => bench_horn_nonlin}/nonlinear_7.smt2 (100%) rename {bench_horn_exampl => bench_horn_nonlin}/nonlinear_8.smt2 (100%) rename {bench_horn_exampl => bench_horn_nonlin}/nonlinear_9.smt2 (100%) create mode 100644 bench_horn_nonlin/parallel_01.smt2 create mode 100644 bench_horn_nonlin/parallel_02.smt2 create mode 100644 bench_horn_nonlin/parallel_03.smt2 rename {bench_horn_exampl => bench_horn_nonlin}/pow_linear_sat.smt2 (100%) rename {bench_horn_exampl => bench_horn_nonlin}/pow_linear_unsat.smt2 (100%) rename {bench_horn_exampl => bench_horn_nonlin}/pow_nonlinear_0.smt2 (100%) rename {bench_horn_exampl => bench_horn_nonlin}/pow_nonlinear_0_sat_0.smt2 (100%) rename {bench_horn_exampl => bench_horn_nonlin}/pow_nonlinear_0_sat_1.smt2 (100%) rename {bench_horn_exampl => bench_horn_nonlin}/pow_nonlinear_1.smt2 (100%) rename {bench_horn_exampl => bench_horn_nonlin}/pow_nonlinear_1_sat_0.smt2 (100%) rename {bench_horn_exampl => bench_horn_nonlin}/pow_nonlinear_1_sat_1.smt2 (100%) rename {bench_horn_exampl => bench_horn_nonlin}/pow_nonlinear_2.smt2 (100%) rename {bench_horn_exampl => bench_horn_nonlin}/pow_nonlinear_2_sat_0.smt2 (100%) rename {bench_horn_exampl => bench_horn_nonlin}/pow_nonlinear_2_sat_1.smt2 (100%) rename {bench_horn_exampl => bench_horn_nonlin}/pow_nonlinear_2_sat_2.smt2 (100%) rename {bench_horn_exampl => bench_horn_nonlin}/pow_nonlinear_2_sat_3.smt2 (100%) rename {bench_horn_exampl => bench_horn_nonlin}/pow_nonlinear_2_sat_4.smt2 (100%) diff --git a/bench_horn_exampl/count_lin_bnd_1.smt2 b/bench_horn_nonlin/count_lin_bnd_1.smt2 similarity index 100% rename from bench_horn_exampl/count_lin_bnd_1.smt2 rename to bench_horn_nonlin/count_lin_bnd_1.smt2 diff --git a/bench_horn_exampl/count_lin_bnd_2.smt2 b/bench_horn_nonlin/count_lin_bnd_2.smt2 similarity index 100% rename from bench_horn_exampl/count_lin_bnd_2.smt2 rename to bench_horn_nonlin/count_lin_bnd_2.smt2 diff --git a/bench_horn_exampl/count_nonlin_bnd_1.smt2 b/bench_horn_nonlin/count_nonlin_bnd_1.smt2 similarity index 100% rename from bench_horn_exampl/count_nonlin_bnd_1.smt2 rename to bench_horn_nonlin/count_nonlin_bnd_1.smt2 diff --git a/bench_horn_exampl/count_nonlin_bnd_2.smt2 b/bench_horn_nonlin/count_nonlin_bnd_2.smt2 similarity index 100% rename from bench_horn_exampl/count_nonlin_bnd_2.smt2 rename to bench_horn_nonlin/count_nonlin_bnd_2.smt2 diff --git a/bench_horn_exampl/nonlinear_0.smt2 b/bench_horn_nonlin/nonlinear_0.smt2 similarity index 100% rename from bench_horn_exampl/nonlinear_0.smt2 rename to bench_horn_nonlin/nonlinear_0.smt2 diff --git a/bench_horn_exampl/nonlinear_1.smt2 b/bench_horn_nonlin/nonlinear_1.smt2 similarity index 100% rename from bench_horn_exampl/nonlinear_1.smt2 rename to bench_horn_nonlin/nonlinear_1.smt2 diff --git a/bench_horn_exampl/nonlinear_10.smt2 b/bench_horn_nonlin/nonlinear_10.smt2 similarity index 100% rename from bench_horn_exampl/nonlinear_10.smt2 rename to bench_horn_nonlin/nonlinear_10.smt2 diff --git a/bench_horn_exampl/nonlinear_2.smt2 b/bench_horn_nonlin/nonlinear_2.smt2 similarity index 100% rename from bench_horn_exampl/nonlinear_2.smt2 rename to bench_horn_nonlin/nonlinear_2.smt2 diff --git a/bench_horn_exampl/nonlinear_3.smt2 b/bench_horn_nonlin/nonlinear_3.smt2 similarity index 100% rename from bench_horn_exampl/nonlinear_3.smt2 rename to bench_horn_nonlin/nonlinear_3.smt2 diff --git a/bench_horn_exampl/nonlinear_4.smt2 b/bench_horn_nonlin/nonlinear_4.smt2 similarity index 100% rename from bench_horn_exampl/nonlinear_4.smt2 rename to bench_horn_nonlin/nonlinear_4.smt2 diff --git a/bench_horn_exampl/nonlinear_5.smt2 b/bench_horn_nonlin/nonlinear_5.smt2 similarity index 100% rename from bench_horn_exampl/nonlinear_5.smt2 rename to bench_horn_nonlin/nonlinear_5.smt2 diff --git a/bench_horn_exampl/nonlinear_6.smt2 b/bench_horn_nonlin/nonlinear_6.smt2 similarity index 100% rename from bench_horn_exampl/nonlinear_6.smt2 rename to bench_horn_nonlin/nonlinear_6.smt2 diff --git a/bench_horn_exampl/nonlinear_7.smt2 b/bench_horn_nonlin/nonlinear_7.smt2 similarity index 100% rename from bench_horn_exampl/nonlinear_7.smt2 rename to bench_horn_nonlin/nonlinear_7.smt2 diff --git a/bench_horn_exampl/nonlinear_8.smt2 b/bench_horn_nonlin/nonlinear_8.smt2 similarity index 100% rename from bench_horn_exampl/nonlinear_8.smt2 rename to bench_horn_nonlin/nonlinear_8.smt2 diff --git a/bench_horn_exampl/nonlinear_9.smt2 b/bench_horn_nonlin/nonlinear_9.smt2 similarity index 100% rename from bench_horn_exampl/nonlinear_9.smt2 rename to bench_horn_nonlin/nonlinear_9.smt2 diff --git a/bench_horn_nonlin/parallel_01.smt2 b/bench_horn_nonlin/parallel_01.smt2 new file mode 100644 index 000000000..dc5f1aac8 --- /dev/null +++ b/bench_horn_nonlin/parallel_01.smt2 @@ -0,0 +1,17 @@ +(declare-rel inv1 (Int)) +(declare-rel inv2 (Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) + +(declare-rel fail ()) + +(rule (=> (= x 0) (inv1 x))) +(rule (=> (= x 0) (inv2 x))) + +(rule (=> (and (inv1 x) (= x1 (+ x 1))) (inv1 x1))) +(rule (=> (and (inv2 x) (= x1 (+ x 1))) (inv2 x1))) + +(rule (=> (and (inv1 x) (inv2 y) (not (>= (+ x y) 0))) fail)) + +(query fail) diff --git a/bench_horn_nonlin/parallel_02.smt2 b/bench_horn_nonlin/parallel_02.smt2 new file mode 100644 index 000000000..926ef1207 --- /dev/null +++ b/bench_horn_nonlin/parallel_02.smt2 @@ -0,0 +1,17 @@ +(declare-rel inv1 (Int)) +(declare-rel inv2 (Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) + +(declare-rel fail ()) + +(rule (=> (= x 0) (inv1 x))) +(rule (=> (= x 0) (inv2 x))) + +(rule (=> (and (inv1 x) (= x1 (+ x 1))) (inv1 x1))) +(rule (=> (and (inv2 x) (= x1 (- x 1))) (inv2 x1))) + +(rule (=> (and (inv1 x) (inv2 y) (not (>= (- x y) 0))) fail)) + +(query fail) diff --git a/bench_horn_nonlin/parallel_03.smt2 b/bench_horn_nonlin/parallel_03.smt2 new file mode 100644 index 000000000..a720ab885 --- /dev/null +++ b/bench_horn_nonlin/parallel_03.smt2 @@ -0,0 +1,25 @@ +(declare-rel inv1 (Int)) +(declare-rel inv2 (Int)) +(declare-rel inv3 (Int)) +(declare-rel inv4 (Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var z Int) +(declare-var w Int) + +(declare-rel fail ()) + +(rule (=> (= x 1) (inv1 x))) +(rule (=> (= x 2) (inv2 x))) +(rule (=> (= x 3) (inv3 x))) +(rule (=> (= x 4) (inv4 x))) + +(rule (=> (and (inv1 x) (= x1 (+ x 1))) (inv2 x1))) +(rule (=> (and (inv2 x) (= x1 (+ x 2))) (inv1 x1))) +(rule (=> (and (inv3 x) (= x1 (+ x 3))) (inv4 x1))) +(rule (=> (and (inv4 x) (= x1 (+ x 4))) (inv3 x1))) + +(rule (=> (and (inv1 x) (inv2 y) (inv3 z) (inv4 w) (not (>= (+ x y z w) 0))) fail)) + +(query fail) diff --git a/bench_horn_exampl/pow_linear_sat.smt2 b/bench_horn_nonlin/pow_linear_sat.smt2 similarity index 100% rename from bench_horn_exampl/pow_linear_sat.smt2 rename to bench_horn_nonlin/pow_linear_sat.smt2 diff --git a/bench_horn_exampl/pow_linear_unsat.smt2 b/bench_horn_nonlin/pow_linear_unsat.smt2 similarity index 100% rename from bench_horn_exampl/pow_linear_unsat.smt2 rename to bench_horn_nonlin/pow_linear_unsat.smt2 diff --git a/bench_horn_exampl/pow_nonlinear_0.smt2 b/bench_horn_nonlin/pow_nonlinear_0.smt2 similarity index 100% rename from bench_horn_exampl/pow_nonlinear_0.smt2 rename to bench_horn_nonlin/pow_nonlinear_0.smt2 diff --git a/bench_horn_exampl/pow_nonlinear_0_sat_0.smt2 b/bench_horn_nonlin/pow_nonlinear_0_sat_0.smt2 similarity index 100% rename from bench_horn_exampl/pow_nonlinear_0_sat_0.smt2 rename to bench_horn_nonlin/pow_nonlinear_0_sat_0.smt2 diff --git a/bench_horn_exampl/pow_nonlinear_0_sat_1.smt2 b/bench_horn_nonlin/pow_nonlinear_0_sat_1.smt2 similarity index 100% rename from bench_horn_exampl/pow_nonlinear_0_sat_1.smt2 rename to bench_horn_nonlin/pow_nonlinear_0_sat_1.smt2 diff --git a/bench_horn_exampl/pow_nonlinear_1.smt2 b/bench_horn_nonlin/pow_nonlinear_1.smt2 similarity index 100% rename from bench_horn_exampl/pow_nonlinear_1.smt2 rename to bench_horn_nonlin/pow_nonlinear_1.smt2 diff --git a/bench_horn_exampl/pow_nonlinear_1_sat_0.smt2 b/bench_horn_nonlin/pow_nonlinear_1_sat_0.smt2 similarity index 100% rename from bench_horn_exampl/pow_nonlinear_1_sat_0.smt2 rename to bench_horn_nonlin/pow_nonlinear_1_sat_0.smt2 diff --git a/bench_horn_exampl/pow_nonlinear_1_sat_1.smt2 b/bench_horn_nonlin/pow_nonlinear_1_sat_1.smt2 similarity index 100% rename from bench_horn_exampl/pow_nonlinear_1_sat_1.smt2 rename to bench_horn_nonlin/pow_nonlinear_1_sat_1.smt2 diff --git a/bench_horn_exampl/pow_nonlinear_2.smt2 b/bench_horn_nonlin/pow_nonlinear_2.smt2 similarity index 100% rename from bench_horn_exampl/pow_nonlinear_2.smt2 rename to bench_horn_nonlin/pow_nonlinear_2.smt2 diff --git a/bench_horn_exampl/pow_nonlinear_2_sat_0.smt2 b/bench_horn_nonlin/pow_nonlinear_2_sat_0.smt2 similarity index 100% rename from bench_horn_exampl/pow_nonlinear_2_sat_0.smt2 rename to bench_horn_nonlin/pow_nonlinear_2_sat_0.smt2 diff --git a/bench_horn_exampl/pow_nonlinear_2_sat_1.smt2 b/bench_horn_nonlin/pow_nonlinear_2_sat_1.smt2 similarity index 100% rename from bench_horn_exampl/pow_nonlinear_2_sat_1.smt2 rename to bench_horn_nonlin/pow_nonlinear_2_sat_1.smt2 diff --git a/bench_horn_exampl/pow_nonlinear_2_sat_2.smt2 b/bench_horn_nonlin/pow_nonlinear_2_sat_2.smt2 similarity index 100% rename from bench_horn_exampl/pow_nonlinear_2_sat_2.smt2 rename to bench_horn_nonlin/pow_nonlinear_2_sat_2.smt2 diff --git a/bench_horn_exampl/pow_nonlinear_2_sat_3.smt2 b/bench_horn_nonlin/pow_nonlinear_2_sat_3.smt2 similarity index 100% rename from bench_horn_exampl/pow_nonlinear_2_sat_3.smt2 rename to bench_horn_nonlin/pow_nonlinear_2_sat_3.smt2 diff --git a/bench_horn_exampl/pow_nonlinear_2_sat_4.smt2 b/bench_horn_nonlin/pow_nonlinear_2_sat_4.smt2 similarity index 100% rename from bench_horn_exampl/pow_nonlinear_2_sat_4.smt2 rename to bench_horn_nonlin/pow_nonlinear_2_sat_4.smt2 diff --git a/include/ae/AeValSolver.hpp b/include/ae/AeValSolver.hpp index 93274d096..22a3b2bd9 100644 --- a/include/ae/AeValSolver.hpp +++ b/include/ae/AeValSolver.hpp @@ -92,7 +92,7 @@ namespace ufo outs().flush (); } ZSolver::Model m = smt.getModel(); - + if (debug) { outs() << "\nmodel " << partitioning_size << ":\n"; @@ -105,11 +105,11 @@ namespace ufo } getMBPandSkolem(m); - + smt.pop(); smt.assertExpr(boolop::lneg(projections[partitioning_size++])); if (!smt.solve()) { res = false; break; } - + smt.push(); smt.assertExpr (t); } @@ -223,17 +223,17 @@ namespace ufo substsMap[exp] = exp2; } - + // get rid of inter-dependencies cascadically: - + ExprVector cnjs; - + for (auto &exp: v) { refreshMapEntry(substsMap, exp); cnjs.push_back(mk(exp, substsMap[exp])); if (debug) outs() << "compiling skolem [pt2]: " << *exp << " <-----> " << *substsMap[exp]<<"\n"; } - + instantiations.push_back(conjoin(cnjs, efac)); if (debug) outs() << "Sanity check [" < (s,mk (projections[i], instantiations[i])), t) << "\n"; } @@ -254,13 +254,70 @@ namespace ufo /** * Valid Subset of S (if overall AE-formula is invalid) */ - Expr getValidSubset() + Expr getValidSubset(bool compact = true) { if (partitioning_size == 0){ if (debug) outs() << "WARNING: Trivial valid subset (equal to False) due to 0 iterations\n"; return mk(efac); } - Expr prs = disjoin(projections, efac); + + Expr prs; + if (compact) + { + ExprSet all; + vector pprs; + + for (auto & a : projections) + { + ExprSet tmp; + getConj(a, tmp); + pprs.push_back(tmp); + all.insert(tmp.begin(), tmp.end()); + } + + ExprSet common; + + for (auto & a : all) + { + bool everywhere = true; + vector pprsTmp = pprs; + for (auto & p : pprsTmp) + { + bool found = false; + for (auto it = p.begin(); it != p.end(); ++it) + { + if (*it == a) { + found = true; + p.erase(it); + break; + } + } + if (!found) + { + everywhere = false; + break; + } + } + if (everywhere) + { + pprs = pprsTmp; + common.insert(a); + } + } + + ExprSet cnjs; + for (auto & p : pprs) + { + cnjs.insert(conjoin(p, efac)); + } + + if (!cnjs.empty()) common.insert(simplifyBool(disjoin(cnjs, efac))); + prs = conjoin(common, efac); + } + else + { + prs = disjoin(projections, efac); + } if (isOpX(s)) return prs; return mk(s, prs); } @@ -276,7 +333,7 @@ namespace ufo // get equality (unique per variable) if (std::find(std::begin(usedConjs), std::end (usedConjs), cnj) != std::end(usedConjs)) continue; - + if (isOpX(cnj) ) { if (var == cnj->left()) @@ -312,7 +369,7 @@ namespace ufo string varName = "_aeval_tmp_max_" + ind; Expr realVarName = mkTerm (varName, efac); Expr realVar = bind::realConst(realVarName); - + skolSkope = simplifiedAnd(skolSkope, mk(realVar, mk(mk(curMax, vec[i]), vec[i], curMax))); curMax = realVar; @@ -352,7 +409,7 @@ namespace ufo // TODO: maybe buggy in LIA, due to a naive shrinking of the segment; for (int i = 0; i < vec.size(); i++){ - + ExprVector forLower; forLower.push_back(lower); forLower.push_back(vec[i]); @@ -364,7 +421,7 @@ namespace ufo forUpper.push_back(vec[i]); Expr updUpper; GetSymbolicMin(forUpper, updUpper); - + // TODO: do optimizations // first, try to see if there are any concrete values for updLower and updUpper @@ -375,7 +432,7 @@ namespace ufo // second, force the symbolic value for upper upper = mk (mk(updLower, updUpper), updUpper, upper); } - + candidate = mk
(mk(lower, upper), mkTerm (mpq_class (2), efac)); } } @@ -437,7 +494,7 @@ namespace ufo if (var != exp->left()) exp = ineqReverter(exp); assert (var == exp->left()); - + if (isOpX(exp) || isOpX(exp) || isOpX(exp)){ if (exp->left() == exp->right()) return getDefaultAssignment(var); return exp->right(); @@ -459,15 +516,15 @@ namespace ufo } } else if (isOpX(exp)){ - + exp = u.numericUnderapprox(exp); // try to see if there are only numerals if (isOpX(exp)) return exp->right(); - + bool incomplete = false; - + // split constraints - + ExprVector conjLT; ExprVector conjGT; ExprVector conjNEG; @@ -506,15 +563,15 @@ namespace ufo } } } - + // get the assignment (if exists) - + if (conjEG.size() > 0) return *(conjEG.begin()); // GF: maybe try to find the best of them - + if (incomplete) outs() << "WARNING: Some Skolem constraints unsupported\n"; - + // get symbolic max and min - + Expr extraDefsMax = mk(efac); Expr curMax; if (conjGT.size() > 1){ @@ -522,18 +579,18 @@ namespace ufo } else if (conjGT.size() == 1){ curMax = conjGT[0]; } - + Expr extraDefsMin = mk(efac); Expr curMin; - + if (conjLT.size() > 1){ GetSymbolicMin(conjLT, curMin); } else if (conjLT.size() == 1){ curMin = conjLT[0]; } - + // get value in the middle of max and min - + if (conjNEG.size() == 0){ if (conjLT.size() > 0 && conjGT.size() > 0){ return mk
(mk(curMin, curMax), mkTerm (mpq_class (2), efac)); @@ -545,26 +602,26 @@ namespace ufo } } } - + // here and later, we get conjNEG.size() > 0 - + if (conjLT.size() > 0 && conjGT.size() == 0) { conjNEG.push_back(curMin); GetSymbolicMin(conjNEG, curMin); return getPlusConst (curMin, isInt, -1); } - + if (conjLT.size() == 0 && conjGT.size() > 0) { conjNEG.push_back(curMax); GetSymbolicMax(conjNEG, curMax); return getPlusConst (curMax, isInt, 1); } - + if (conjLT.size() == 0 && conjGT.size() == 0) { GetSymbolicMax(conjNEG, curMax); return getPlusConst (curMax, isInt, 1); } - + // now, both conjLT and conjGT are non-empty Expr curMid; GetSymbolicNeg(conjNEG, curMax, curMin, curMid); diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index 5940dcab6..b5ec0aebf 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -89,6 +89,34 @@ namespace ufo } } + inline static void getCounters (Expr a, ExprVector &cntrs) + { + if (isOpX(a)){ + if (isOpX(a)) + { + ineqs.insert(mk(a->left(), a->right())); + ineqs.insert(mk(a->left(), a->right())); + } + else + { + ineqs.insert(a); + } + } else { + for (unsigned i = 0; i < a->arity(); i++) + getArrIneqs(a->arg(i), ineqs); + } + } + inline static void getMultOps (Expr a, ExprVector &ops) { if (isOpX(a)){ @@ -845,6 +873,8 @@ namespace ufo return dagVisit (rw, exp); } + static Expr mkNeg(Expr term); + inline static void simplBoolReplCnjHlp(ExprVector& hardVars, ExprSet& cnjs, ExprVector& facts, ExprVector& repls) { bool toRestart; @@ -858,6 +888,14 @@ namespace ufo continue; } + if (isOpX(*it)) + { + Expr negged = mkNeg((*it)->left()); + it = cnjs.erase(it); + cnjs.insert(negged); + continue; + } + Expr a = replaceAll(*it, facts, repls); if (isOpX(a)) @@ -2106,7 +2144,7 @@ namespace ufo for (auto it = dsjs.begin(); it != dsjs.end(); ) { auto d = *it; - if (!isOp(d)) { ++it; continue; } + if (!isOpX(d) && !isOpX(d) && !isOpX(d) && !isOpX(d)) { ++it; continue; } Expr rewritten = ineqMover(d, var); @@ -2878,6 +2916,223 @@ namespace ufo return conjoin(cnjs, exp->getFactory()); } + + bool isConstExpr(Expr e) { + using namespace expr::op::bind; + if (isIntConst(e) || isBoolConst(e) || isRealConst(e)) return true; + return false; + } + + bool isLitExpr(Expr e) { + int arity = e->arity(); + if (isConstExpr(e)) return false; + if (arity == 0) return true; + bool res = true; + for (int i = 0; i < arity; i++) { + res = res && isLitExpr(e->arg(i)); + } + return res; + } + + bool isConstAddModExpr(Expr e) { + using namespace expr::op::bind; + if (isOp(e) || isOp(e) || isOp(e)) { + if (isLitExpr(e->arg(0))) { + return isConstAddModExpr(e->arg(1)); + } + if (isLitExpr(e->arg(1))) { + return isConstAddModExpr(e->arg(0)); + } + } + return isConstExpr(e); + } + + bool isNonlinear(Expr e) { + int arity = e->arity(); + if (isOp(e)) { + if (isLitExpr(e->arg(0))) { + return !(isLitExpr(e->arg(1)) || !isConstExpr(e->arg(1))); + } + if (isLitExpr(e->arg(1))) { + return !(isConstAddModExpr(e->arg(0))); + } + return true; + } + if (isOp(e) || isOp
(e)) { + if (isLitExpr(e->arg(0))) { + return isNonlinear(e->arg(1)); + } + if (isLitExpr(e->arg(1))) { + return isNonlinear(e->arg(0)); + } + return true; + } + bool res = false; + for (int i = 0; i < arity; i++) { + res = res || isNonlinear(e->arg(i)); + } + return res; + } + + inline static bool isNumeric(Expr a) + { + // don't consider ITE-s + return (isOp(a) || isOpX(a) || + isOpX(a) || bind::isIntConst(a) || isOpX(a.body) || containsOp(a.body))) + { + ExprVector counters; + hr = &a; + + getCounters(a.body, counters); + for (auto & c : counters) + { + ind = getVarIndex(c, a.srcVars[0]); + + if (u.implies(a.body, mk(c, a.dstVars[ind]))) + { + iterator = c; + iterGrows = false; + break; + } + else if (u.implies(a.body, mk(c, a.dstVars[ind]))) + { + iterator = c; + iterGrows = true; + } + } + } + } + + if (iterator == NULL) return; + + // range computation + for (auto & a : ruleManager.chcs) + { + if (!a.isInductive && a.dstRelation == tgt) + { + ExprSet cnjs; + getConj(a.body, cnjs); + for (Expr e : cnjs) + { + if (isOpX(e) && (e->left() == a.dstVars[ind] || e->right() == a.dstVars[ind])) + { + Expr bound = (e->left() == a.dstVars[ind]) ? e->right() : e->left(); + range = iterGrows ? mk(mk(bound, qVar), mk(qVar, iterator)) : + mk(mk(iterator, qVar), mk(qVar, bound)); + } + } + } + } + + if (range == NULL) return; + + // cell property guessing + ExprSet tmp; + getArrIneqs(unfoldITE(overapproxTransitions(hr->body, hr->srcVars[0], hr->dstVars)), tmp); + for (auto s : tmp) + { + s = replaceAll(s, hr->dstVars, hr->srcVars[0]); // hack for now + s = replaceAll(s, iterator, qVar); + ExprVector args; + args.push_back(qVar->left()); + args.push_back(mk(range, s)); + if (fastGuessCheck(tgt, mknary(args), true)) + { + // try to propagate (only one level now; TODO: extend) + for (auto & hr2 : ruleManager.chcs) + { + if (hr2.isQuery) continue; + if (find(hr2.srcRelations.begin(), hr2.srcRelations.end(), tgt) != hr2.srcRelations.end() && + hr2.dstRelation != tgt) + { + ExprSet cnjs; + getConj(hr2.body, cnjs); + Expr newRange; + for (auto c : cnjs) + { + if (emptyIntersect(c, iterator)) continue; + if (isOpX(c)) c = mkNeg(c->left()); + c = ineqSimplifier(iterator, c); + if (!isOp(c)) continue; + + if (isOpX(c) && c->left() == iterator) + newRange = replaceAll(range, iterator, c->right()); + if (iterGrows && isOpX(c) && c->left() == iterator) + newRange = replaceAll(range, iterator, c->right()); + if (iterGrows && isOpX(c) && c->left() == iterator) + newRange = replaceAll(range, iterator, mk(c->right(), mkTerm (mpz_class (1), m_efac))); + if (!iterGrows && isOpX(c) && c->left() == iterator) + newRange = replaceAll(range, iterator, c->right()); + if (!iterGrows && isOpX(c) && c->left() == iterator) + newRange = replaceAll(range, iterator, mk(c->right(), mkTerm (mpz_class (1), m_efac))); + + if (newRange != NULL) break; + } + + if (newRange == NULL) continue; + + ExprSet vvv; + filter (s, bind::IsConst (), inserter (vvv, vvv.begin())); // prepare vars + for (auto c : cnjs) + { + // naive prop through equalities; works only for some benchs; TODO: extend + if (!isOpX(c)) continue; + if (find(vvv.begin(), vvv.end(), c->left()) != vvv.end()) s = replaceAll(s, c->left(), c->right()); + else if (find(vvv.begin(), vvv.end(), c->right()) != vvv.end()) s = replaceAll(s, c->right(), c->left()); + } + + ExprVector args; + args.push_back(qVar->left()); + args.push_back(mk(newRange, s)); + Expr newCand = mknary(args); + + newCand = replaceAll(newCand, hr2.dstVars, ruleManager.invVars[hr2.dstRelation]); + + // finally, try the propagated guess: + fastGuessCheck(hr2.dstRelation, newCand); + } + } + } + } + } + + // very restricted version of FreqHorn (no grammars, limited use of arrays) + void guessAndSolve() + { + for (auto tgt : ruleManager.decls) over[tgt->left()] = mk(m_efac); + bootstrapping(); + for (auto tgt : ruleManager.decls) arrayGuessing(tgt->left()); + outs () << ((checkAllOver(true)) ? "unsat\n" : "unknown\n"); + } + + // naive solving, without invariant generation bool solveIncrementally(int unr, ExprVector& rels, vector& args) { if (unr > 1000) // hardcoded bound @@ -119,7 +448,8 @@ namespace ufo return res; } - void solveModular() + // naive solving, without invariant generation + void solveIncrementally() { ExprVector query; query.push_back(ruleManager.failDecl); @@ -128,14 +458,17 @@ namespace ufo } }; - inline void solveModular(string smt) + inline void solveNonlin(string smt, bool inv = true) { ExprFactory m_efac; EZ3 z3(m_efac); CHCs ruleManager(m_efac, z3); ruleManager.parse(smt); NonlinCHCsolver nonlin(ruleManager); - nonlin.solveModular(); + if (inv) + nonlin.guessAndSolve(); + else + nonlin.solveIncrementally(); }; } diff --git a/tools/CMakeLists.txt b/tools/CMakeLists.txt index fd377dec7..f3156fd3e 100644 --- a/tools/CMakeLists.txt +++ b/tools/CMakeLists.txt @@ -1,9 +1 @@ add_subdirectory(nonlin) - -add_subdirectory(bnd) - -add_subdirectory(deep) - -add_subdirectory(ivc) - -add_subdirectory(kind) diff --git a/tools/nonlin/CMakeLists.txt b/tools/nonlin/CMakeLists.txt index dc7ae8912..69841a968 100644 --- a/tools/nonlin/CMakeLists.txt +++ b/tools/nonlin/CMakeLists.txt @@ -1,4 +1,4 @@ -add_executable (modver NonlinSolver.cpp) -target_link_libraries (modver ${Z3_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${GMPXX_LIB} ${GMP_LIB}) -llvm_config (modver bitwriter) -install(TARGETS modver RUNTIME DESTINATION bin) +add_executable (freqn NonlinSolver.cpp) +target_link_libraries (freqn ${Z3_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${GMPXX_LIB} ${GMP_LIB}) +llvm_config (freqn bitwriter) +install(TARGETS freqn RUNTIME DESTINATION bin) diff --git a/tools/nonlin/NonlinSolver.cpp b/tools/nonlin/NonlinSolver.cpp index 57da6035f..419d0c92f 100644 --- a/tools/nonlin/NonlinSolver.cpp +++ b/tools/nonlin/NonlinSolver.cpp @@ -5,6 +5,6 @@ using namespace std; int main (int argc, char ** argv) { - solveModular(string(argv[argc-1])); + solveNonlin(string(argv[argc-1])); return 0; } From 7e474acc27566934c1f33b5ce166641ff4ad51cf Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Wed, 31 Jul 2019 23:00:40 -0400 Subject: [PATCH 135/236] Houdini and candidate propagation --- .../chc-lia-nonlin-0035-simp.smt2 | 22 ++ .../chc-lia-nonlin-0065-simp.smt2 | 26 ++ bench_horn_nonlin/parallel_04.smt2 | 23 ++ include/ae/ExprSimpl.hpp | 7 +- include/ae/SMTUtils.hpp | 27 +- include/deep/NonlinCHCsolver.hpp | 312 +++++++++++++----- include/deep/RndLearnerV3.hpp | 27 +- 7 files changed, 328 insertions(+), 116 deletions(-) create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0035-simp.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0065-simp.smt2 create mode 100644 bench_horn_nonlin/parallel_04.smt2 diff --git a/bench_horn_nonlin/chc-lia-nonlin-0035-simp.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0035-simp.smt2 new file mode 100644 index 000000000..0f7123384 --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0035-simp.smt2 @@ -0,0 +1,22 @@ +(set-logic HORN) +(declare-fun P0 (Int Int Int) Bool) +(declare-fun P1 (Int) Bool) +(declare-fun P2 (Int Int) Bool) + +(assert (forall ((x0 Int)) (=> (= x0 0) (P1 x0)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (= x0 0) (= x1 50)) (P2 x0 x1)))) + +(assert (forall ((x0 Int) (x1 Int) (x2 Int)) (=> (and (P1 x1) (P2 x1 x2) (<= x1 49) (= x0 (+ 1 x1))) (P1 x0)))) +(assert (forall ((x0 Int) (x2 Int) (x1 Int)) (=> (and (P1 x1) (P2 x1 x2) (<= x1 49) (= x0 (+ 1 x1))) (P2 x0 x2)))) + +(assert (forall ((x1 Int) (x2 Int) (x0 Int) (x3 Int)) (=> (and (P1 x2) (P2 x2 x3) (<= 50 x2) (<= x2 99) (= x1 (+ 1 x2))) (P1 x1)))) +(assert (forall ((x0 Int) (x1 Int) (x2 Int) (x3 Int)) (=> (and (P1 x2) (P2 x2 x3) (<= 50 x2) (<= x2 99) (= x0 (+ 1 x2)) (= x1 (+ 1 x3))) (P2 x0 x1)))) + +(assert (forall ((x2 Int) (x0 Int) (x1 Int) (x3 Int)) + (=> (and (P1 x2) (P2 x2 x3) + (>= x2 100) + (> x3 100) +) false))) + + +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0065-simp.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0065-simp.smt2 new file mode 100644 index 000000000..514c9e5be --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0065-simp.smt2 @@ -0,0 +1,26 @@ +;; Original file: pow_inc.smt2 +(set-logic HORN) +;(declare-fun P4 (Int Int Int) Bool) ; replaced to true +(declare-fun P3 (Int Int Int) Bool) +(declare-fun P1 (Int Int) Bool) +(declare-fun P9 (Int Int) Bool) +(declare-fun P0 (Int) Bool) +; (declare-fun P2 (Int Int) Bool) ; replaced to true +; (declare-fun P10 (Int Int) Bool) ; replaced to true +; (declare-fun P11 (Int Int Int) Bool) ; replaced to true +(declare-fun P5 (Int Int Int Int) Bool) +; (declare-fun P6 (Int) Bool) ; replaced to true +; (declare-fun P7 (Int) Bool) ; replaced to true +; (declare-fun P8 (Int Int) Bool) ; simply eliminated +(declare-fun P12 (Int Int Int Int) Bool) + +(assert (forall ((x1 Int) (x0 Int)) (=> (= x0 (+ 1 x1)) (P9 x1 x0)))) +(assert (forall ((x0 Int) (x1 Int) (x2 Int) (x3 Int)) (=> (P9 x2 x3) (P12 x0 x1 x2 x3)))) +(assert (forall ((x1 Int) (x4 Int) (x5 Int) (x0 Int) (x3 Int) (x2 Int)) (=> (P12 x2 x3 x4 x5) (P3 x1 x4 x5)))) +(assert (forall ((x3 Int) (x4 Int) (x0 Int) (x2 Int) (x1 Int)) (=> (and (P12 x1 x2 x3 x4) ) (P1 x3 x4)))) +(assert (forall ((x1 Int) (x0 Int) (x2 Int) (x4 Int) (x3 Int)) (=> (and (P3 x1 x2 x3) (P1 x3 x4)) (P5 x1 x0 x2 x4)))) +(assert (forall ((x1 Int) (x2 Int) (x5 Int) (x6 Int) (x0 Int) (x3 Int) (x4 Int)) (=> (P5 x3 x4 x5 x6) (P12 x1 x2 x5 x6)))) + +(assert (forall ((x3 Int) (x2 Int) (x0 Int) (x1 Int)) (=> (and (P12 x0 x1 x2 x3) (>= x2 (+ 1 x3))) false))) +(check-sat) +;(get-model) diff --git a/bench_horn_nonlin/parallel_04.smt2 b/bench_horn_nonlin/parallel_04.smt2 new file mode 100644 index 000000000..8d4f79285 --- /dev/null +++ b/bench_horn_nonlin/parallel_04.smt2 @@ -0,0 +1,23 @@ +(declare-rel inv1 (Int)) +(declare-rel inv2 (Int)) +(declare-rel inv3 (Int)) +(declare-rel inv4 (Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var z Int) +(declare-var w Int) + +(declare-rel fail ()) + +(rule (=> (= x 1) (inv1 x))) +(rule (=> (= x 4) (inv4 x))) + +(rule (=> (and (inv1 x) (= x1 (+ x 1))) (inv2 x1))) +(rule (=> (and (inv2 x) (= x1 (+ x 2))) (inv3 x1))) +(rule (=> (and (inv3 x) (= x1 (+ x 3))) (inv1 x1))) +(rule (=> (and (inv4 x) (= x1 (+ x 4))) (inv4 x1))) + +(rule (=> (and (inv1 x) (inv4 z) (not (>= (+ x z) 0))) fail)) + +(query fail) diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index b5ec0aebf..1bdeb208a 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -3061,7 +3061,6 @@ namespace ufo else guesses.insert(c); } - guesses.insert(ineqs.begin(), ineqs.end()); for (auto & z : eqs) { @@ -3069,8 +3068,8 @@ namespace ufo { //if (bnd > guesses.size()) return; if (!emptyIntersect(z, in)) continue; - guesses.insert(mk(mk(in->left(), z->left()), mk(in->right(), z->right()))); - guesses.insert(mk(mk(in->left(), z->right()), mk(in->right(), z->left()))); + ineqs.insert(mk(mk(in->left(), z->left()), mk(in->right(), z->right()))); + ineqs.insert(mk(mk(in->left(), z->right()), mk(in->right(), z->left()))); } for (auto & d : disjs) @@ -3095,6 +3094,8 @@ namespace ufo } } + guesses.insert(ineqs.begin(), ineqs.end()); + for (auto & e : eqs) { for (auto & in : ineqs) diff --git a/include/ae/SMTUtils.hpp b/include/ae/SMTUtils.hpp index 9a09743e2..98eef47a7 100644 --- a/include/ae/SMTUtils.hpp +++ b/include/ae/SMTUtils.hpp @@ -147,7 +147,7 @@ namespace ufo ExprSet assumptions; assumptions.insert(mk(v, val)); - return (!isSat(conjoin(assumptions, efac), false)); + return (!isSat(assumptions, false)); } /** @@ -333,6 +333,31 @@ namespace ufo smt.toSmtLib (outs()); outs().flush (); } + + template bool splitUnsatSets(Range & src, ExprVector & dst1, ExprVector & dst2) + { + if (isSat(src)) return false; + + for (auto & a : src) dst1.push_back(a); + + for (auto it = dst1.begin(); it != dst1.end(); ) + { + dst2.push_back(*it); + it = dst1.erase(it); + if (isSat(dst1)) break; + } + + // now dst1 is SAT, try to get more things from dst2 back to dst1 + + for (auto it = dst2.begin(); it != dst2.end(); ) + { + if (!isSat(conjoin(dst1, efac), *it)) { ++it; continue; } + dst1.push_back(*it); + it = dst2.erase(it); + } + + return true; + } }; /** diff --git a/include/deep/NonlinCHCsolver.hpp b/include/deep/NonlinCHCsolver.hpp index 33ce5b59d..e76993a56 100644 --- a/include/deep/NonlinCHCsolver.hpp +++ b/include/deep/NonlinCHCsolver.hpp @@ -1,5 +1,5 @@ -#ifndef BNDEXPL__HPP__ -#define BNDEXPL__HPP__ +#ifndef NONLINCHCSOLVER__HPP__ +#define NONLINCHCSOLVER__HPP__ #include "HornNonlin.hpp" @@ -36,8 +36,9 @@ namespace ufo CHCs& ruleManager; int varCnt = 0; ExprVector ssaSteps; - map over; - map allGuesses; + map over; + map candidates; + ExprSet propProgress; // for stats public: @@ -69,56 +70,36 @@ namespace ufo for (auto & hr : ruleManager.chcs) { if (hr.isQuery && !checkQuery) continue; - ExprSet checkList; - checkList.insert(hr.body); - Expr overBody; - Expr rel; - for (int i = 0; i < hr.srcRelations.size(); i++) - { - Expr rel = hr.srcRelations[i]; - overBody = replaceAll(over[rel], ruleManager.invVars[rel], hr.srcVars[i]); - getConj(overBody, checkList); - } - if (!hr.isQuery) - { - rel = hr.dstRelation; - ExprSet tmp; - ExprSet negged; - getConj(replaceAll(over[rel], ruleManager.invVars[rel], hr.dstVars), tmp); - for (auto a : tmp) negged.insert(mkNeg(a)); - checkList.insert(disjoin(negged, m_efac)); - } - if (u.isSat(checkList)) return false; + if (!checkCHC(hr, candidates)) return false; } return true; } - bool fastGuessCheck (Expr tgt, Expr guess, bool toAdd = true) { - Expr ov = over[tgt]; - if (u.implies(ov, guess)) return true; - over[tgt] = mk(ov, guess); - - if (checkAllOver()) + bool checkCHC (HornRuleExt& hr, map& annotations) + { + ExprSet checkList; + checkList.insert(hr.body); + Expr overBody; + Expr rel; + for (int i = 0; i < hr.srcRelations.size(); i++) { - //errs() << " guess: " << *guess << " -> true!\n"; - if (toAdd) - { - // recheck old guesses - for (auto it = allGuesses[tgt].begin(); it != allGuesses[tgt].end(); ) - { - if (fastGuessCheck(tgt, *it, false)) it = allGuesses[tgt].erase(it); - else ++it; - } - for (auto & g : allGuesses[tgt]) fastGuessCheck(tgt, g, false); - } - return true; + Expr rel = hr.srcRelations[i]; + ExprSet lms = annotations[rel]; + lms.insert(over[rel].begin(), over[rel].end()); + overBody = replaceAll(conjoin(lms, m_efac), ruleManager.invVars[rel], hr.srcVars[i]); + getConj(overBody, checkList); } - else + if (!hr.isQuery) { - over[tgt] = ov; - if (toAdd) allGuesses[tgt].insert(guess); - return false; + rel = hr.dstRelation; + ExprSet negged; + ExprSet lms = annotations[rel]; + lms.insert(over[rel].begin(), over[rel].end()); + for (auto a : lms) + negged.insert(mkNeg(replaceAll(a, ruleManager.invVars[rel], hr.dstVars))); + checkList.insert(disjoin(negged, m_efac)); } + return !u.isSat(checkList); } void preproGuessing(Expr e, ExprVector& ev1, ExprVector& ev2, ExprSet& guesses) @@ -161,63 +142,195 @@ namespace ufo void bootstrapping() { - map preconds; - for (auto & r : ruleManager.chcs) { - ExprSet guesses; - if (r.isQuery) + for (auto & a : ruleManager.decls) propProgress.insert(a->left()); // for stats + + for (auto & hr : ruleManager.chcs) + { + if (hr.isQuery) { - for (int i = 0; i < r.srcVars.size(); i++) + if (!containsOp(hr.body)) { - ExprSet vars; - vars.insert(r.locVars.begin(), r.locVars.end()); - Expr q = quantifierElimination(r.body, vars); //we shouldn't do it here; to fix - guesses.clear(); - preproGuessing(mk(q), r.srcVars[i], - ruleManager.invVars[r.srcRelations[i]], guesses); - for (auto & guess : guesses) fastGuessCheck(r.srcRelations[i], guess); + for (int i = 0; i < hr.srcVars.size(); i++) + { + ExprSet vars; + vars.insert(hr.locVars.begin(), hr.locVars.end()); + Expr q = quantifierElimination(hr.body, vars); //we shouldn't do it here; to fix + preproGuessing(mk(q), hr.srcVars[i], + ruleManager.invVars[hr.srcRelations[i]], candidates[hr.srcRelations[i]]); + if (!candidates[hr.srcRelations[i]].empty()) propProgress.erase(hr.srcRelations[i]); // for stats + } } - continue; } - int srcRelInd = -1; - for (int i = 0; i < r.srcVars.size(); i++) if (r.srcRelations[i] == r.head->arg(0)) srcRelInd = i; - if (srcRelInd >= 0) - preproGuessing(r.body, r.srcVars[srcRelInd], - ruleManager.invVars[r.head->arg(0)], preconds[r.head->arg(0)]); + Expr rel = hr.head->left(); + preproGuessing(hr.body, hr.dstVars, ruleManager.invVars[rel], candidates[hr.dstRelation]); + if (!candidates[hr.dstRelation].empty()) propProgress.erase(hr.dstRelation); // for stats + } + } + + void propagateCandidatesForward() + { + for (auto & hr : ruleManager.chcs) + { + if (hr.isQuery) continue; + ExprSet all; + all.insert(hr.body); + for (int i = 0; i < hr.srcVars.size(); i++) + { + Expr rel = hr.srcRelations[i]; + // currently, tries all candidates; but in principle, should try various subsets + for (auto & c : candidates[rel]) + all.insert(replaceAll(c, ruleManager.invVars[rel], hr.srcVars[i])); + } + preproGuessing(conjoin(all, m_efac), hr.dstVars, + ruleManager.invVars[hr.dstRelation], candidates[hr.dstRelation]); + } + } - preproGuessing(r.body, r.dstVars, ruleManager.invVars[r.head->arg(0)], guesses); + void propagateCandidatesBackward() + { + // TODO + } - for (auto guess : guesses) fastGuessCheck(r.head->arg(0), guess); + void getImplicationGuesses(map& postconds) + { + map preconds; + for (auto & r : ruleManager.chcs) + { + if (r.isQuery) continue; - // get "implication" guesses + int srcRelInd = -1; + Expr rel = r.head->left(); + for (int i = 0; i < r.srcVars.size(); i++) if (r.srcRelations[i] == rel) srcRelInd = i; + if (srcRelInd >= 0) + preproGuessing(r.body, r.srcVars[srcRelInd], ruleManager.invVars[rel], preconds[rel]); + + if (srcRelInd == -1) continue; int tot = 0; - for (auto guess : allGuesses[r.head->arg(0)]) + for (auto guess : postconds[rel]) { - if (tot > 30) break; // empirically chosen bound - if (isOpX(guess)) continue; // hack + if (tot > 5) break; // empirically chosen bound + if (isOpX(guess) || isOpX(guess)) continue; // hack - for (auto & pre : preconds[r.head->arg(0)]) + for (auto & pre : preconds[rel]) { if (u.implies(pre, guess)) continue; tot++; Expr newGuess = mk(pre, guess); - if (fastGuessCheck(r.head->arg(0), newGuess)) + ExprVector tmp; + tmp.push_back(replaceAll(newGuess, ruleManager.invVars[rel], r.srcVars[srcRelInd])); + tmp.push_back(r.body); + // simple invariant check (for speed, need to be enhanced) + if (u.implies (conjoin(tmp, m_efac), replaceAll(newGuess, ruleManager.invVars[rel], r.dstVars))) + { + candidates[rel].insert(newGuess); + ExprSet newPost; + tmp.push_back(mkNeg(replaceAll(pre, ruleManager.invVars[rel], r.dstVars))); + preproGuessing(conjoin(tmp, m_efac), r.dstVars, ruleManager.invVars[rel], newPost); + for (auto & a : newPost) + { + candidates[rel].insert(mk(mk(pre), a)); + } + } + } + } + } + } + + bool filterUnsat() + { + vector worklist; + for (auto & a : candidates) + if (!u.isSat(a.second)) + for (auto & hr : ruleManager.chcs) + if (hr.dstRelation == a.first) worklist.push_back(&hr); + + multiHoudini(worklist, false); + + for (auto & a : candidates) + { + if (!u.isSat(a.second)) + { + ExprVector tmp; + ExprVector stub; // TODO: try greedy search, maybe some lemmas are in stub? + u.splitUnsatSets(a.second, tmp, stub); + a.second.clear(); + a.second.insert(tmp.begin(), tmp.end()); + } + } + + return true; + } + + bool hasQuantifiedCands(map& cands) + { + for (auto & a : cands) + for (auto & b : a.second) + if (containsOp(b)) return true; + + return false; + } + + // adapted from RndLearnerV3 + bool multiHoudini(vector& worklist, bool recur = true) + { + if (!anyProgress(worklist)) return false; + auto candidatesTmp = candidates; + bool res1 = true; + for (auto & hr : worklist) + { + if (hr->isQuery) continue; + + if (!checkCHC(*hr, candidatesTmp)) + { + bool res2 = true; + Expr dstRel = hr->dstRelation; + + Expr model = u.getModel(hr->dstVars); + if (model == NULL || hasQuantifiedCands(candidatesTmp)) + { + candidatesTmp[dstRel].clear(); + res2 = false; + } + else + { + for (auto it = candidatesTmp[dstRel].begin(); it != candidatesTmp[dstRel].end(); ) { - ExprSet tmpGuesses; - int srcRelInd = -1; - for (int i = 0; i < r.srcVars.size(); i++) if (r.srcRelations[i] == r.head->arg(0)) srcRelInd = i; - if (srcRelInd == -1) continue; - ExprVector tmp; - tmp.push_back(replaceAll(newGuess, ruleManager.invVars[r.head->arg(0)], r.srcVars[srcRelInd])); - tmp.push_back(r.body); - tmp.push_back(mkNeg(replaceAll(pre, ruleManager.invVars[r.head->arg(0)], r.dstVars))); - preproGuessing(conjoin(tmp, m_efac), r.dstVars, ruleManager.invVars[r.head->arg(0)], tmpGuesses); - for (auto guess : tmpGuesses) fastGuessCheck(r.head->arg(0), guess); + Expr repl = *it; + repl = replaceAll(*it, ruleManager.invVars[dstRel], hr->dstVars); + + if (!u.isSat(model, repl)) { it = candidatesTmp[dstRel].erase(it); res2 = false; } + else ++it; } } + + if (recur && !res2) res1 = false; + if (!res1) break; + } + } + candidates = candidatesTmp; + if (!recur) return false; + if (res1) + { + if (anyProgress(worklist)) + { + for (auto & a : candidates) over[a.first].insert(a.second.begin(), a.second.end()); + return true; } + else return false; } + else return multiHoudini(worklist); + } + + bool anyProgress(vector& worklist) + { + for (auto & a : candidates) + for (auto & hr : worklist) + if (find(hr->srcRelations.begin(), hr->srcRelations.end(), a.first) != + hr->srcRelations.end() || hr->dstRelation == a.first) + if (!a.second.empty()) return true; + return false; } // only one level of propagation here; to be extended @@ -300,8 +413,15 @@ namespace ufo ExprVector args; args.push_back(qVar->left()); args.push_back(mk(range, s)); - if (fastGuessCheck(tgt, mknary(args), true)) + Expr newGuess = mknary(args); + + ExprVector chk; + chk.push_back(replaceAll(newGuess, ruleManager.invVars[tgt], hr->srcVars[0])); + chk.push_back(hr->body); + // simple invariant check (for speed, need to be enhanced) + if (u.implies (conjoin(chk, m_efac), replaceAll(newGuess, ruleManager.invVars[tgt], hr->dstVars))) { + candidates[tgt].insert(newGuess); // try to propagate (only one level now; TODO: extend) for (auto & hr2 : ruleManager.chcs) { @@ -353,7 +473,7 @@ namespace ufo newCand = replaceAll(newCand, hr2.dstVars, ruleManager.invVars[hr2.dstRelation]); // finally, try the propagated guess: - fastGuessCheck(hr2.dstRelation, newCand); + candidates[hr2.dstRelation].insert(newCand); } } } @@ -363,10 +483,30 @@ namespace ufo // very restricted version of FreqHorn (no grammars, limited use of arrays) void guessAndSolve() { - for (auto tgt : ruleManager.decls) over[tgt->left()] = mk(m_efac); bootstrapping(); + + auto post = candidates; + filterUnsat(); + propagateCandidatesForward(); + + vector worklist; + for (auto & hr : ruleManager.chcs) worklist.push_back(&hr); // todo: wto + + multiHoudini(worklist); + if (checkAllOver(true)) { outs () << "unsat\n"; return; } + + candidates.clear(); + getImplicationGuesses(post); + filterUnsat(); + multiHoudini(worklist); + if (checkAllOver(true)) { outs () << "unsat\n"; return; } + + candidates.clear(); for (auto tgt : ruleManager.decls) arrayGuessing(tgt->left()); - outs () << ((checkAllOver(true)) ? "unsat\n" : "unknown\n"); + filterUnsat(); + multiHoudini(worklist); + if (checkAllOver(true)) { outs () << "unsat\n"; return; } + outs () << "unknown\n"; } // naive solving, without invariant generation diff --git a/include/deep/RndLearnerV3.hpp b/include/deep/RndLearnerV3.hpp index edb439baf..2dd68f7b0 100644 --- a/include/deep/RndLearnerV3.hpp +++ b/include/deep/RndLearnerV3.hpp @@ -512,31 +512,6 @@ namespace ufo return false; } - bool splitUnsatSets(ExprVector & src, ExprVector & dst1, ExprVector & dst2) - { - if (u.isSat(conjoin(src, m_efac))) return false; - - for (auto & a : src) dst1.push_back(a); - - for (auto it = dst1.begin(); it != dst1.end(); ) - { - dst2.push_back(*it); - it = dst1.erase(it); - if (u.isSat(conjoin(dst1, m_efac))) break; - } - - // now dst1 is SAT, try to get more things from dst2 back to dst1 - - for (auto it = dst2.begin(); it != dst2.end(); ) - { - if (!u.isSat(conjoin(dst1, m_efac), *it)) { ++it; continue; } - dst1.push_back(*it); - it = dst2.erase(it); - } - - return true; - } - bool filterUnsat() { vector worklist; @@ -560,7 +535,7 @@ namespace ufo { ExprVector tmp; ExprVector stub; // TODO: try greedy search, maybe some lemmas are in stub? - splitUnsatSets(candidates[i], tmp, stub); + u.splitUnsatSets(candidates[i], tmp, stub); candidates[i] = tmp; } } From e23db224f49a3a1396d5f5b77658a9052312e881 Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Tue, 3 Sep 2019 16:36:13 -0400 Subject: [PATCH 136/236] an option for counterexamples; help message --- tools/nonlin/NonlinSolver.cpp | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/tools/nonlin/NonlinSolver.cpp b/tools/nonlin/NonlinSolver.cpp index 419d0c92f..d4fc0fa55 100644 --- a/tools/nonlin/NonlinSolver.cpp +++ b/tools/nonlin/NonlinSolver.cpp @@ -3,8 +3,30 @@ using namespace ufo; using namespace std; +static inline bool getBoolValue(const char * opt, bool defValue, int argc, char ** argv) +{ + for (int i = 1; i < argc; i++) + { + if (strcmp(argv[i], opt) == 0) return true; + } + return defValue; +} + int main (int argc, char ** argv) { - solveNonlin(string(argv[argc-1])); + if (getBoolValue("--help", false, argc, argv) || argc == 1){ + outs () << + "* * * FreqHorn-Nonlin v.0.1 - Copyright (C) 2019 * * *\n" << + " Grigory Fedyukovich et al \n\n" << + "Usage: Purpose:\n" << + " freqn [--help] show help\n" << + " freqn [options] discover invariants for a system of constrained Horn clauses\n\n" << + "Options:\n" << + " --cex search for counterexamples \n"; + + return 0; + } + bool cex = getBoolValue("--cex", false, argc, argv); + solveNonlin(string(argv[argc-1]), !cex); return 0; } From 2e0153cefe8ea78e85bdfd07a9a65551b1ebdd06 Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Sat, 7 Sep 2019 07:03:01 -0400 Subject: [PATCH 137/236] fixed the parsing bug --- include/deep/HornNonlin.hpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/include/deep/HornNonlin.hpp b/include/deep/HornNonlin.hpp index cd9d16e1f..c9f3a64f5 100755 --- a/include/deep/HornNonlin.hpp +++ b/include/deep/HornNonlin.hpp @@ -355,8 +355,10 @@ namespace ufo else { if (failDecl != decl) - outs () << "Multiple queries are not supported\n"; - exit(0); + { + outs () << "Multiple queries are not supported\n"; + exit(0); + } } } From 1a50bfbce88d83db6f0ca3c14cca2aac7784909a Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Fri, 27 Dec 2019 22:21:35 +0100 Subject: [PATCH 138/236] printing invariants (+ libraries update and small fixes) --- include/ae/ExprSimpl.hpp | 699 +++++++++++++++++++++-------- include/ae/SMTUtils.hpp | 148 ++++-- include/deep/NonlinCHCsolver.hpp | 90 ++-- include/deep/RndLearnerV3.hpp | 26 +- include/ufo/Expr.hpp | 93 ++-- include/ufo/Smt/ZExprConverter.hpp | 3 + 6 files changed, 785 insertions(+), 274 deletions(-) diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index 1bdeb208a..73078e18e 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -99,10 +99,15 @@ namespace ufo } } + inline static bool isNumeric(Expr a) + { + return bind::typeOf(a) == mk(a->getFactory()); + } + inline static void getArrIneqs (Expr a, ExprSet &ineqs) { if (isOp(a) && containsOp(exp->left()->left(), exp->right())); } + if (isOpX(exp) && isOpX(exp->right())) + { + ExprSet tmp; + tmp.insert(rewriteSelectStore(mk(exp->left(), exp->right()->left()))); + tmp.insert(mk(exp->right()->last(), mk(exp->right(), exp->left()->right()))); + return conjoin (tmp, exp->getFactory()); + } + return exp; + } + }; + + struct SelectReplacer : public std::unary_function + { + ExprMap& sels; + SelectReplacer (ExprMap& _sels) : sels(_sels) {}; + + Expr operator() (Expr exp) + { + if (isOpX(exp) || isOpX(exp)) && !findArray(exp->right())) + { + accs.insert(exp->right()); } return VisitAction::doKids (); } @@ -2717,6 +3009,12 @@ namespace ufo dagVisit (dr, exp); } + inline void retrieveAccFuns (Expr exp, ExprSet& accs) + { + AccessRetriever dr (accs); + dagVisit (dr, exp); + } + inline void retrieveTransitions (Expr exp, ExprVector& srcVars, ExprVector& dstVars, ExprSet& transitions) { TransitionMiner trm (srcVars, dstVars, transitions); @@ -2905,7 +3203,7 @@ namespace ufo bool eq1 = (repl1 == neg); bool eq2 = (repl2 == neg); bool eq3 = (repl2 == repl1); - + if (eq1 && eq2 && eq3) cnjs.insert(a); else if (eq1) cnjs.insert (mk (mk(neg, repl2))); else if (eq2) cnjs.insert (mk (mk(neg, repl1))); @@ -2974,11 +3272,60 @@ namespace ufo return res; } - inline static bool isNumeric(Expr a) + struct QVMiner : public std::unary_function { - // don't consider ITE-s - return (isOp(a) || isOpX(a) || - isOpX(a) || bind::isIntConst(a) || isOpX(v)) return typeOf(v->left()); + std::cerr << "WARNING: could not infer type of: " << *v << "\n"; assert (0 && "Unreachable"); @@ -2396,8 +2406,16 @@ namespace expr return isOpX (e); } }; - - + + class IsFApp : public std::unary_function + { + public: + bool operator () (Expr e) + { + return isOpX (e) && isOpX (fname (e)); + } + }; + /// returns true if an expression is a constant class IsConst : public std::unary_function { @@ -2405,20 +2423,20 @@ namespace expr bool operator () (Expr e) { if (isOpX (e)) return this->operator() (variant::mainVariant (e)); - + return isOpX (e) && e->arity () == 1 && isOpX (fname (e)); } }; - - /// returns true if an expression is a variable - class IsVar : public std::unary_function - { - public: - bool operator () (Expr e) - { + + /// returns true if an expression is a variable + class IsVar : public std::unary_function + { + public: + bool operator () (Expr e) + { return isIntVar(e) || isRealVar(e) || isBoolVar(e) || isVar (e); - } - }; + } + }; class IsSelect : public std::unary_function { @@ -2456,7 +2474,7 @@ namespace expr return hasher (var); } - void Print (std::ostream &OS) const { OS << "B" << var; } + void Print (std::ostream &OS) const { OS << "B" << var; } }; inline std::ostream &operator<< (std::ostream &OS, const BoundVar &b) { @@ -2737,6 +2755,18 @@ namespace expr } }; + struct RAVALLM: public std::unary_function + { + ExprMap& m; + + RAVALLM (ExprMap& _m) : m(_m) { } + VisitAction operator() (Expr exp) const + { + if (m[exp] != NULL) return VisitAction::changeTo (m[exp]); + return VisitAction::doKids (); + } + }; + struct RAVSIMP: public std::unary_function { Expr s; @@ -2777,7 +2807,7 @@ namespace expr if (filter (exp)) { *(out++) = exp; - return VisitAction::skipKids (); + return VisitAction::doKids (); } return VisitAction::doKids (); @@ -2854,14 +2884,14 @@ namespace expr return VisitAction::doKids (); } }; - + template struct ContainsOp : public std::unary_function { bool found; - + ContainsOp () : found(false) {} - + VisitAction operator() (Expr exp) { if (found || isOpX(exp)) @@ -2968,12 +2998,18 @@ namespace expr // pairwise replacing inline Expr replaceAll (Expr exp, ExprVector& s, ExprVector& t) { - if (isOpX(exp) || isOpX(exp)) return exp; assert(s.size() == t.size()); RAVALL rav(&s, &t); return dagVisit (rav, exp); } + // pairwise replacing + inline Expr replaceAll (Expr exp, ExprMap& m) + { + RAVALLM rav(m); + return dagVisit (rav, exp); + } + /** Replace all occurrences of s by t while simplifying the result */ inline Expr replaceAllSimplify (Expr exp, Expr s, Expr t) { @@ -2981,7 +3017,6 @@ namespace expr return dagVisit (rav, exp); } - // -- collect all sub-expressions of exp that satisfy the filter template void filter (Expr exp, F filter, OutputIterator out) diff --git a/include/ufo/Smt/ZExprConverter.hpp b/include/ufo/Smt/ZExprConverter.hpp index 5c3b04877..42a141f5d 100644 --- a/include/ufo/Smt/ZExprConverter.hpp +++ b/include/ufo/Smt/ZExprConverter.hpp @@ -800,6 +800,9 @@ namespace ufo case Z3_OP_REM: e = mknary (args.begin (), args.end ()); break; + case Z3_OP_DISTINCT: + e = mknary (args.begin(), args.end()); + break; case Z3_OP_CONST_ARRAY: { assert (args.size () == 1); From f9b0a1339c0be35e5a19f09772938058a8532a09 Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Tue, 14 Apr 2020 22:52:38 -0400 Subject: [PATCH 139/236] backward propagation and multi-abduction --- bench_horn_nonlin/isodec_01.smt2 | 11 ++ bench_horn_nonlin/isodec_02.smt2 | 11 ++ bench_horn_nonlin/isodec_03.smt2 | 12 ++ bench_horn_nonlin/isodec_04.smt2 | 11 ++ bench_horn_nonlin/isodec_05.smt2 | 11 ++ bench_horn_nonlin/isodec_06.smt2 | 12 ++ bench_horn_nonlin/isodec_07.smt2 | 12 ++ bench_horn_nonlin/isodec_08.smt2 | 11 ++ bench_horn_nonlin/isodec_09.smt2 | 11 ++ bench_horn_nonlin/isodec_10.smt2 | 13 ++ bench_horn_nonlin/isodec_11.smt2 | 13 ++ bench_horn_nonlin/isodec_12.smt2 | 13 ++ bench_horn_nonlin/parallel_06.smt2 | 25 +++ include/ae/SMTUtils.hpp | 15 +- include/deep/NonlinCHCsolver.hpp | 235 ++++++++++++++++++++++++++++- 15 files changed, 407 insertions(+), 9 deletions(-) create mode 100644 bench_horn_nonlin/isodec_01.smt2 create mode 100644 bench_horn_nonlin/isodec_02.smt2 create mode 100644 bench_horn_nonlin/isodec_03.smt2 create mode 100644 bench_horn_nonlin/isodec_04.smt2 create mode 100644 bench_horn_nonlin/isodec_05.smt2 create mode 100644 bench_horn_nonlin/isodec_06.smt2 create mode 100644 bench_horn_nonlin/isodec_07.smt2 create mode 100644 bench_horn_nonlin/isodec_08.smt2 create mode 100644 bench_horn_nonlin/isodec_09.smt2 create mode 100644 bench_horn_nonlin/isodec_10.smt2 create mode 100644 bench_horn_nonlin/isodec_11.smt2 create mode 100644 bench_horn_nonlin/isodec_12.smt2 create mode 100644 bench_horn_nonlin/parallel_06.smt2 diff --git a/bench_horn_nonlin/isodec_01.smt2 b/bench_horn_nonlin/isodec_01.smt2 new file mode 100644 index 000000000..425fd7ef2 --- /dev/null +++ b/bench_horn_nonlin/isodec_01.smt2 @@ -0,0 +1,11 @@ +(declare-rel inv4 (Int)) +(declare-var x Int) +(declare-var y Int) + +(declare-rel fail ()) + +(rule (=> false (inv4 x))) + +(rule (=> (and (inv4 x) (inv4 y) (not (= x y))) fail)) + +(query fail) diff --git a/bench_horn_nonlin/isodec_02.smt2 b/bench_horn_nonlin/isodec_02.smt2 new file mode 100644 index 000000000..7789cc707 --- /dev/null +++ b/bench_horn_nonlin/isodec_02.smt2 @@ -0,0 +1,11 @@ +(declare-rel inv4 (Int)) +(declare-var x Int) +(declare-var y Int) + +(declare-rel fail ()) + +(rule (=> false (inv4 x))) + +(rule (=> (and (inv4 x) (inv4 y) (= x (- y)) (not (>= x y))) fail)) + +(query fail) diff --git a/bench_horn_nonlin/isodec_03.smt2 b/bench_horn_nonlin/isodec_03.smt2 new file mode 100644 index 000000000..18d9e1727 --- /dev/null +++ b/bench_horn_nonlin/isodec_03.smt2 @@ -0,0 +1,12 @@ +(declare-rel inv4 (Int)) +(declare-var x Int) +(declare-var y Int) +(declare-var z Int) + +(declare-rel fail ()) + +(rule (=> false (inv4 x))) + +(rule (=> (and (inv4 x) (inv4 y) (inv4 z) (= x (+ y z)) (not (> z (+ x y)))) fail)) + +(query fail) diff --git a/bench_horn_nonlin/isodec_04.smt2 b/bench_horn_nonlin/isodec_04.smt2 new file mode 100644 index 000000000..2e1e4f919 --- /dev/null +++ b/bench_horn_nonlin/isodec_04.smt2 @@ -0,0 +1,11 @@ +(declare-rel inv4 (Int)) +(declare-var x Int) +(declare-var y Int) + +(declare-rel fail ()) + +(rule (=> false (inv4 x))) + +(rule (=> (and (inv4 x) (inv4 y) (= x (+ 1 y))) fail)) + +(query fail) diff --git a/bench_horn_nonlin/isodec_05.smt2 b/bench_horn_nonlin/isodec_05.smt2 new file mode 100644 index 000000000..c0c2dbc6e --- /dev/null +++ b/bench_horn_nonlin/isodec_05.smt2 @@ -0,0 +1,11 @@ +(declare-rel inv4 (Int)) +(declare-var x Int) +(declare-var y Int) + +(declare-rel fail ()) + +(rule (=> false (inv4 x))) + +(rule (=> (and (inv4 x) (inv4 y) (not (< (+ x y) 8))) fail)) + +(query fail) diff --git a/bench_horn_nonlin/isodec_06.smt2 b/bench_horn_nonlin/isodec_06.smt2 new file mode 100644 index 000000000..5b334575a --- /dev/null +++ b/bench_horn_nonlin/isodec_06.smt2 @@ -0,0 +1,12 @@ +(declare-rel inv4 (Int)) +(declare-var x Int) +(declare-var y Int) +(declare-var z Int) + +(declare-rel fail ()) + +(rule (=> false (inv4 x))) + +(rule (=> (and (inv4 x) (inv4 y) (inv4 z) (not (> (+ x y z) 0))) fail)) + +(query fail) diff --git a/bench_horn_nonlin/isodec_07.smt2 b/bench_horn_nonlin/isodec_07.smt2 new file mode 100644 index 000000000..5b334575a --- /dev/null +++ b/bench_horn_nonlin/isodec_07.smt2 @@ -0,0 +1,12 @@ +(declare-rel inv4 (Int)) +(declare-var x Int) +(declare-var y Int) +(declare-var z Int) + +(declare-rel fail ()) + +(rule (=> false (inv4 x))) + +(rule (=> (and (inv4 x) (inv4 y) (inv4 z) (not (> (+ x y z) 0))) fail)) + +(query fail) diff --git a/bench_horn_nonlin/isodec_08.smt2 b/bench_horn_nonlin/isodec_08.smt2 new file mode 100644 index 000000000..85065a59d --- /dev/null +++ b/bench_horn_nonlin/isodec_08.smt2 @@ -0,0 +1,11 @@ +(declare-rel inv4 (Int)) +(declare-var x Int) +(declare-var y Int) + +(declare-rel fail ()) + +(rule (=> false (inv4 x))) + +(rule (=> (and (inv4 x) (inv4 y) (not (< (- (* 5 x) y) 0))) fail)) + +(query fail) diff --git a/bench_horn_nonlin/isodec_09.smt2 b/bench_horn_nonlin/isodec_09.smt2 new file mode 100644 index 000000000..0ab27db46 --- /dev/null +++ b/bench_horn_nonlin/isodec_09.smt2 @@ -0,0 +1,11 @@ +(declare-rel inv4 (Int)) +(declare-var x Int) +(declare-var y Int) + +(declare-rel fail ()) + +(rule (=> false (inv4 x))) + +(rule (=> (and (inv4 x) (inv4 y) (not (> (+ (* 5 x) y) 0))) fail)) + +(query fail) diff --git a/bench_horn_nonlin/isodec_10.smt2 b/bench_horn_nonlin/isodec_10.smt2 new file mode 100644 index 000000000..b8afc7d59 --- /dev/null +++ b/bench_horn_nonlin/isodec_10.smt2 @@ -0,0 +1,13 @@ +(declare-rel inv1 (Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (=> false (inv1 x y))) + +(rule (=> (and (inv1 x y) (inv1 x1 y1) (not (= (+ x x1) (+ y y1)))) fail)) + +(query fail) diff --git a/bench_horn_nonlin/isodec_11.smt2 b/bench_horn_nonlin/isodec_11.smt2 new file mode 100644 index 000000000..b54d512d6 --- /dev/null +++ b/bench_horn_nonlin/isodec_11.smt2 @@ -0,0 +1,13 @@ +(declare-rel inv1 (Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (=> false (inv1 x y))) + +(rule (=> (and (inv1 x y) (inv1 x1 y1) (not (> (+ x y x1 y1) 0))) fail)) + +(query fail) diff --git a/bench_horn_nonlin/isodec_12.smt2 b/bench_horn_nonlin/isodec_12.smt2 new file mode 100644 index 000000000..e2bf8151b --- /dev/null +++ b/bench_horn_nonlin/isodec_12.smt2 @@ -0,0 +1,13 @@ +(declare-rel inv1 (Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (=> false (inv1 x y))) + +(rule (=> (and (inv1 x y) (inv1 x1 y1) (not (= (+ x y x1) y1))) fail)) + +(query fail) diff --git a/bench_horn_nonlin/parallel_06.smt2 b/bench_horn_nonlin/parallel_06.smt2 new file mode 100644 index 000000000..11d0ad549 --- /dev/null +++ b/bench_horn_nonlin/parallel_06.smt2 @@ -0,0 +1,25 @@ +(declare-rel inv1 (Int Int)) +(declare-rel inv2 (Int)) +(declare-rel inv3 (Int)) +(declare-rel inv4 (Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) +(declare-var z Int) +(declare-var v Int) +(declare-var w Int) + +(declare-rel fail ()) + +(rule (=> (= x 1) (inv2 x))) +(rule (=> (= x 1) (inv3 x))) + +(rule (=> (and (inv2 x) (= x1 (+ x 2))) (inv2 x1))) +(rule (=> (and (inv3 y) (= y1 (+ y 3))) (inv3 y1))) + +(rule (=> (and (inv2 x) (inv3 y)) (inv4 (+ x y)))) + +(rule (=> (and (inv2 v) (inv4 x) (inv3 y) (inv4 z) (inv2 w) (not (> (+ x y z v w) 0))) fail)) + +(query fail) diff --git a/include/ae/SMTUtils.hpp b/include/ae/SMTUtils.hpp index a2919cefc..2967b4ae9 100644 --- a/include/ae/SMTUtils.hpp +++ b/include/ae/SMTUtils.hpp @@ -25,6 +25,13 @@ namespace ufo smt (z3) {} + Expr getModel(Expr v) + { + ExprVector eqs; + ZSolver::Model m = smt.getModel(); + return m.eval(v); + } + template Expr getModel(T& vars) { ExprVector eqs; @@ -231,9 +238,7 @@ namespace ufo newCnjs.erase(cnj); continue; } - - ExprSet old; - for (Expr e: newCnjs) old.insert(e); + ExprSet newCnjsTry = newCnjs; newCnjsTry.erase(cnj); @@ -252,7 +257,9 @@ namespace ufo } } } - conjs = newCnjs; + conjs.clear(); + for (auto & cnj : newCnjs) + conjs.insert(removeRedundantDisjuncts(cnj)); } /** diff --git a/include/deep/NonlinCHCsolver.hpp b/include/deep/NonlinCHCsolver.hpp index 0e7284e93..72311a612 100644 --- a/include/deep/NonlinCHCsolver.hpp +++ b/include/deep/NonlinCHCsolver.hpp @@ -37,6 +37,7 @@ namespace ufo int varCnt = 0; ExprVector ssaSteps; map candidates; + bool hasArrays = false; public: @@ -96,7 +97,7 @@ namespace ufo return !u.isSat(checkList); } - void preproGuessing(Expr e, ExprVector& ev1, ExprVector& ev2, ExprSet& guesses) + void preproGuessing(Expr e, ExprVector& ev1, ExprVector& ev2, ExprSet& guesses, bool backward = false, bool mutate = true) { ExprSet ev3; filter (e, bind::IsConst (), inserter (ev3, ev3.begin())); // prepare vars @@ -106,6 +107,7 @@ namespace ufo else it = ev3.erase(it); } e = quantifierElimination(e, ev3); + if (backward) e = mkNeg(e); ExprSet cnjs; @@ -132,7 +134,15 @@ namespace ufo if (newDsjs.size() > 0) e = replaceAll(e, c2, disjoin(newDsjs, m_efac)); } } - mutateHeuristic(replaceAll(e, ev1, ev2), guesses); + if (!ev2.empty()) + e = replaceAll(e, ev1, ev2); // rename variables only if ev2 is nonempty + if (mutate) + mutateHeuristic(e, guesses); + else + { + e = simplifyBool(e); + getConj(e, guesses); + } } void bootstrapping() @@ -141,7 +151,11 @@ namespace ufo { if (hr.isQuery) { - if (!containsOp(hr.body)) + if (containsOp(hr.body)) + { + hasArrays = true; + } + else { for (int i = 0; i < hr.srcVars.size(); i++) { @@ -182,7 +196,184 @@ namespace ufo void propagateCandidatesBackward() { - // TODO + if (hasArrays) return; // something is wrong, currently + + for (auto & hr : ruleManager.chcs) + { + if (hr.isFact || hr.isInductive) continue; + + Expr dstRel = hr.dstRelation; + ExprVector& rels = hr.srcRelations; + + ExprVector invVars; + ExprVector srcVars; + + // identifying nonlinear cases (i.e., when size(occursNum[...]) > 1) + map> occursNum; + for (int i = 0; i < rels.size(); i++) + { + occursNum[rels[i]].insert(i); + for (int j = i+1; j < rels.size(); j++) + if (rels[i] == rels[j]) + occursNum[rels[i]].insert(j); + } + + for (int i = 0; i < hr.srcVars.size(); i++) + srcVars.insert(srcVars.end(), hr.srcVars[i].begin(), hr.srcVars[i].end()); + + if (hr.srcVars.size() == 1) invVars = ruleManager.invVars[rels[0]]; + + ExprSet cands; + if (hr.isQuery) cands.insert(mk(m_efac)); + else cands = candidates[dstRel]; + + ExprSet mixedCands; + for (auto & c : cands) + { + ExprSet all; + all.insert(hr.body); + all.insert(mkNeg(replaceAll(c, ruleManager.invVars[dstRel], hr.dstVars))); + preproGuessing(conjoin(all, m_efac), srcVars, invVars, mixedCands, true, true); + } + + if (hr.srcVars.size() == 1) + candidates[rels[0]].insert(mixedCands.begin(), mixedCands.end()); + else + { + // decomposition here + + for (auto & a : mixedCands) + { + ExprSet processed, allGuesses; + + for (auto & r : rels) + { + if (!u.isSat(a)) return; // need to recheck because the solver has been reset + if (processed.find(r) != processed.end()) continue; + + invVars.clear(); + ExprSet backGuesses, allVarsExcept; + ExprVector vars; + for (int j = 0; j < rels.size(); j++) + { + Expr t = rels[j]; + if (processed.find(t) != processed.end()) continue; + if (t == r) + { + vars.insert(vars.begin(), hr.srcVars[j].begin(), hr.srcVars[j].end()); + if (occursNum[r].size() == 1) invVars = ruleManager.invVars[rels[j]]; + } + else + allVarsExcept.insert(hr.srcVars[j].begin(), hr.srcVars[j].end()); + } + + // model-based cartesian decomposition + ExprSet all = allGuesses; + all.insert(mkNeg(a)); + all.insert(u.getModel(allVarsExcept)); + + // in the case of nonlin, invVars is empty, so no renaming happens: + preproGuessing(conjoin(all, m_efac), vars, invVars, backGuesses, true, false); + + if (occursNum[r].size() == 1) + { + candidates[r].insert(backGuesses.begin(), backGuesses.end()); + allGuesses.insert(backGuesses.begin(), backGuesses.end()); + } + else + { + // nonlinear case; proceed to isomorphic decomposition for each candidate + + map multiabdVars; + + for (auto it2 = occursNum[r].begin(); it2 != occursNum[r].end(); ++it2) + for (auto & v : ruleManager.invVars[r]) + multiabdVars[*it2].push_back( + cloneVar(v, mkTerm ( + "__multiabd_var" + lexical_cast(*v) + "_" + to_string(*it2), m_efac))); + + for (auto & b : backGuesses) + { + ExprSet sol; + int iter = 0; + while (++iter < 10 /*hardcode*/) + { + // preps for obtaining a new model + + ExprSet cnj; + for (auto it2 = occursNum[r].begin(); it2 != occursNum[r].end(); ++it2) + { + ExprSet dsj; + if (!sol.empty()) + dsj.insert(replaceAll(conjoin(sol, m_efac), ruleManager.invVars[r], hr.srcVars[*it2])); + for (auto it3 = occursNum[r].begin(); it3 != occursNum[r].end(); ++it3) + { + ExprSet modelCnj; + for (int i = 0; i < ruleManager.invVars[r].size(); i++) + modelCnj.insert(mk(hr.srcVars[*it2][i], multiabdVars[*it3][i])); + dsj.insert(conjoin(modelCnj, m_efac)); + } + cnj.insert(disjoin(dsj, m_efac)); + } + + // obtaining a new model + ExprVector args; + for (auto it2 = occursNum[r].begin(); it2 != occursNum[r].end(); ++it2) + for (auto & v : hr.srcVars[*it2]) + args.push_back(v->left()); + args.push_back(mk(conjoin(cnj, m_efac), b)); + + ExprSet negModels; + for (auto it2 = occursNum[r].begin(); it2 != occursNum[r].end(); ++it2) + negModels.insert(mkNeg(replaceAll(conjoin(sol, m_efac), ruleManager.invVars[r], multiabdVars[*it2]))); + + if (!u.isSat(mknary(args), sol.empty() ? mk(m_efac) : disjoin(negModels, m_efac))) + { + candidates[r].insert(sol.begin(), sol.end()); + for (auto it2 = occursNum[r].begin(); it2 != occursNum[r].end(); ++it2) + allGuesses.insert(replaceAll(conjoin(sol, m_efac), ruleManager.invVars[r], hr.srcVars[*it2])); + break; + } + else + { + ExprSet models; + for (auto it2 = occursNum[r].begin(); it2 != occursNum[r].end(); ++it2) + { + ExprSet elements; + for (int i = 0; i < ruleManager.invVars[r].size(); i++) + elements.insert(mk(ruleManager.invVars[r][i], u.getModel(multiabdVars[*it2][i]))); + models.insert(conjoin(elements, m_efac)); + } + sol.insert (disjoin(models, m_efac)); // weakening sol by a new model + } + + // heuristic to accelerate convergence + ExprVector chk; + for (auto it2 = occursNum[r].begin(); it2 != occursNum[r].end(); ++it2) + chk.push_back(replaceAll(disjoin(sol, m_efac), ruleManager.invVars[r], hr.srcVars[*it2])); + sol.clear(); + for (auto it1 = occursNum[r].begin(); it1 != occursNum[r].end(); ++it1) + { + int cnt = 0; + for (auto it3 = occursNum[r].begin(); it3 != it1; ++it3, ++cnt) + chk[cnt] = replaceAll(conjoin(sol, m_efac), ruleManager.invVars[r], hr.srcVars[*it3]); + chk[cnt] = mk(m_efac); + + ExprSet allNonlin; + allNonlin.insert(mkNeg(b)); + allNonlin.insert(conjoin(chk, m_efac)); + preproGuessing(conjoin(allNonlin, m_efac), hr.srcVars[*it1], ruleManager.invVars[r], sol, true, false); + } + u.removeRedundantConjuncts(sol); + } + } + } + processed.insert(r); + } +// outs () << "sanity check: " << u.implies(conjoin(allGuesses, m_efac), a) << "\n"; + } + } + } } void getImplicationGuesses(map& postconds) @@ -352,11 +543,15 @@ namespace ufo Expr iterator; Expr qVar = bind::intConst(mkTerm ("_FH_arr_it", m_efac)); Expr range; - HornRuleExt *hr; + HornRuleExt *hr = 0; + HornRuleExt *qr = 0; // preprocessing for (auto & a : ruleManager.chcs) { + if (a.isQuery && a.srcRelations[0] == tgt /*hack for now*/ && + (containsOp(a.body) || containsOp(a.body))) { @@ -485,6 +680,33 @@ namespace ufo } } } + + if (qr == 0) return; + + tmp.clear(); + getArrIneqs(mkNeg(qr->body), tmp); + + for (auto s : tmp) + { + ExprSet allv; + filter (s, bind::IsConst (), inserter (allv, allv.begin())); + for (auto & a : allv) + if (bind::typeOf(a) == bind::typeOf(qVar) && find(hr->srcVars[0].begin(), hr->srcVars[0].end(), a) == + hr->srcVars[0].end()) s = replaceAll(s, a, qVar); + + ExprVector args; + args.push_back(qVar->left()); + args.push_back(mk(range, s)); + Expr newGuess = mknary(args); + + ExprSet chk; + chk.insert(replaceAll(newGuess, ruleManager.invVars[tgt], qr->srcVars[0])); + chk.insert(hr->body); + chk.insert(candidates[tgt].begin(), candidates[tgt].end()); + // simple invariant check (for speed, need to be enhanced) + if (u.implies (conjoin(chk, m_efac), replaceAll(newGuess, ruleManager.invVars[tgt], hr->dstVars))) + candidates[tgt].insert(newGuess); + } } // very restricted version of FreqHorn (no grammars, limited use of arrays) @@ -496,6 +718,9 @@ namespace ufo filterUnsat(); propagateCandidatesForward(); + filterUnsat(); + propagateCandidatesBackward(); + filterUnsat(); vector worklist; for (auto & hr : ruleManager.chcs) worklist.push_back(&hr); // todo: wto From 342e43ead81d3785598faf887c8be5254e42b2de Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Tue, 5 May 2020 13:11:05 -0400 Subject: [PATCH 140/236] revisited forward/backward alternation; improved decomposition --- bench_horn_nonlin/chc-lia-nonlin-0000.smt2 | 10 + bench_horn_nonlin/chc-lia-nonlin-0001.smt2 | 10 + bench_horn_nonlin/chc-lia-nonlin-0002.smt2 | 10 + bench_horn_nonlin/chc-lia-nonlin-0004.smt2 | 10 + bench_horn_nonlin/chc-lia-nonlin-0005.smt2 | 10 + bench_horn_nonlin/chc-lia-nonlin-0006.smt2 | 11 + bench_horn_nonlin/chc-lia-nonlin-0007.smt2 | 11 + bench_horn_nonlin/chc-lia-nonlin-0011.smt2 | 11 + bench_horn_nonlin/chc-lia-nonlin-0012.smt2 | 13 + bench_horn_nonlin/chc-lia-nonlin-0013.smt2 | 11 + bench_horn_nonlin/chc-lia-nonlin-0014.smt2 | 11 + bench_horn_nonlin/chc-lia-nonlin-0016.smt2 | 17 + bench_horn_nonlin/chc-lia-nonlin-0017.smt2 | 17 + bench_horn_nonlin/chc-lia-nonlin-0020.smt2 | 17 + bench_horn_nonlin/chc-lia-nonlin-0021.smt2 | 13 + bench_horn_nonlin/chc-lia-nonlin-0023.smt2 | 13 + bench_horn_nonlin/chc-lia-nonlin-0024.smt2 | 15 + bench_horn_nonlin/chc-lia-nonlin-0025.smt2 | 18 + bench_horn_nonlin/chc-lia-nonlin-0026.smt2 | 13 + bench_horn_nonlin/chc-lia-nonlin-0029.smt2 | 15 + bench_horn_nonlin/chc-lia-nonlin-0032.smt2 | 15 + bench_horn_nonlin/chc-lia-nonlin-0038.smt2 | 23 + bench_horn_nonlin/chc-lia-nonlin-0042.smt2 | 45 ++ bench_horn_nonlin/chc-lia-nonlin-0043.smt2 | 21 + bench_horn_nonlin/chc-lia-nonlin-0044.smt2 | 21 + bench_horn_nonlin/chc-lia-nonlin-0045.smt2 | 22 + bench_horn_nonlin/chc-lia-nonlin-0048.smt2 | 23 + bench_horn_nonlin/chc-lia-nonlin-0049.smt2 | 18 + bench_horn_nonlin/chc-lia-nonlin-0050.smt2 | 25 + bench_horn_nonlin/chc-lia-nonlin-0051.smt2 | 47 ++ bench_horn_nonlin/chc-lia-nonlin-0052.smt2 | 47 ++ bench_horn_nonlin/chc-lia-nonlin-0057.smt2 | 20 + bench_horn_nonlin/chc-lia-nonlin-0058.smt2 | 55 ++ bench_horn_nonlin/chc-lia-nonlin-0059.smt2 | 55 ++ bench_horn_nonlin/chc-lia-nonlin-0060.smt2 | 20 + bench_horn_nonlin/chc-lia-nonlin-0063.smt2 | 66 ++ bench_horn_nonlin/chc-lia-nonlin-0064.smt2 | 65 ++ bench_horn_nonlin/chc-lia-nonlin-0068.smt2 | 95 +++ bench_horn_nonlin/chc-lia-nonlin-0071.smt2 | 36 + bench_horn_nonlin/chc-lia-nonlin-0072.smt2 | 88 +++ bench_horn_nonlin/chc-lia-nonlin-0073.smt2 | 88 +++ bench_horn_nonlin/chc-lia-nonlin-0075.smt2 | 50 ++ bench_horn_nonlin/chc-lia-nonlin-0079.smt2 | 106 +++ bench_horn_nonlin/chc-lia-nonlin-0082.smt2 | 116 +++ bench_horn_nonlin/chc-lia-nonlin-0083.smt2 | 49 ++ bench_horn_nonlin/chc-lia-nonlin-0084.smt2 | 45 ++ bench_horn_nonlin/chc-lia-nonlin-0088.smt2 | 145 ++++ bench_horn_nonlin/chc-lia-nonlin-0089.smt2 | 54 ++ bench_horn_nonlin/chc-lia-nonlin-0090.smt2 | 152 ++++ bench_horn_nonlin/chc-lia-nonlin-0092.smt2 | 165 +++++ bench_horn_nonlin/chc-lia-nonlin-0102.smt2 | 440 ++++++++++++ bench_horn_nonlin/chc-lia-nonlin-0106.smt2 | 423 +++++++++++ bench_horn_nonlin/chc-lia-nonlin-0114.smt2 | 89 +++ bench_horn_nonlin/chc-lia-nonlin-0126.smt2 | 557 ++++++++++++++ bench_horn_nonlin/chc-lia-nonlin-0144.smt2 | 797 +++++++++++++++++++++ bench_horn_nonlin/parallel_05.smt2 | 21 + bench_horn_nonlin/parallel_06.smt2 | 1 - bench_horn_nonlin/vacuity_01.smt2 | 11 + bench_horn_nonlin/vacuity_02.smt2 | 14 + bench_horn_nonlin/vacuity_03.smt2 | 14 + bench_horn_nonlin/vacuity_04.smt2 | 17 + bench_horn_nonlin/vacuity_05.smt2 | 16 + bench_horn_nonlin/vacuity_06.smt2 | 17 + bench_horn_nonlin/vacuity_07.smt2 | 16 + bench_horn_nonlin/vacuity_08.smt2 | 17 + bench_horn_nonlin/vacuity_09.smt2 | 16 + bench_horn_nonlin/vacuity_10.smt2 | 17 + bench_horn_nonlin/vacuity_11.smt2 | 17 + bench_horn_nonlin/vacuity_12.smt2 | 17 + bench_horn_nonlin/vacuity_13.smt2 | 17 + bench_horn_nonlin/vacuity_14.smt2 | 11 + include/ae/AeValSolver.hpp | 11 +- include/ae/ExprSimpl.hpp | 24 +- include/deep/NonlinCHCsolver.hpp | 289 +++++--- 74 files changed, 4799 insertions(+), 103 deletions(-) create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0000.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0001.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0002.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0004.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0005.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0006.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0007.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0011.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0012.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0013.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0014.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0016.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0017.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0020.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0021.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0023.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0024.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0025.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0026.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0029.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0032.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0038.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0042.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0043.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0044.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0045.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0048.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0049.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0050.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0051.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0052.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0057.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0058.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0059.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0060.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0063.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0064.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0068.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0071.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0072.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0073.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0075.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0079.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0082.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0083.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0084.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0088.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0089.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0090.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0092.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0102.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0106.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0114.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0126.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0144.smt2 create mode 100644 bench_horn_nonlin/parallel_05.smt2 create mode 100644 bench_horn_nonlin/vacuity_01.smt2 create mode 100644 bench_horn_nonlin/vacuity_02.smt2 create mode 100644 bench_horn_nonlin/vacuity_03.smt2 create mode 100644 bench_horn_nonlin/vacuity_04.smt2 create mode 100644 bench_horn_nonlin/vacuity_05.smt2 create mode 100644 bench_horn_nonlin/vacuity_06.smt2 create mode 100644 bench_horn_nonlin/vacuity_07.smt2 create mode 100644 bench_horn_nonlin/vacuity_08.smt2 create mode 100644 bench_horn_nonlin/vacuity_09.smt2 create mode 100644 bench_horn_nonlin/vacuity_10.smt2 create mode 100644 bench_horn_nonlin/vacuity_11.smt2 create mode 100644 bench_horn_nonlin/vacuity_12.smt2 create mode 100644 bench_horn_nonlin/vacuity_13.smt2 create mode 100644 bench_horn_nonlin/vacuity_14.smt2 diff --git a/bench_horn_nonlin/chc-lia-nonlin-0000.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0000.smt2 new file mode 100644 index 000000000..adb2c1f4b --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0000.smt2 @@ -0,0 +1,10 @@ +;; Original file: copy1.smt2 +(set-logic HORN) +(declare-fun P0 (Int) Bool) +(declare-fun P1 (Int Int) Bool) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P0 x0) (P0 x1) (<= x0 0) (= x1 x0)) (P1 x0 x1)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P0 x1) (>= x1 1) (= x1 (+ 1 x0))) (P0 x0)))) +(assert (forall ((x1 Int) (x0 Int) (x2 Int) (x3 Int)) (=> (and (P0 x1) (P1 x2 x3) (>= x1 1) (= x1 (+ 1 x2)) (= x0 (+ 1 x3))) (P1 x1 x0)))) +(assert (forall ((x0 Int)) (=> true (P0 x0)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (and (P1 x0 x1) (or (< x1 x0) (> x1 x0))) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0001.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0001.smt2 new file mode 100644 index 000000000..2c9be5eba --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0001.smt2 @@ -0,0 +1,10 @@ +;; Original file: copy2.smt2 +(set-logic HORN) +(declare-fun P0 (Int) Bool) +(declare-fun P1 (Int Int) Bool) +(assert (forall ((x1 Int) (x0 Int)) (=> (and (P0 x1) (= x0 0) (= x1 0)) (P1 x1 x0)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P0 x1) (or (< x1 0) (> x1 0)) (= x1 (+ 1 x0))) (P0 x0)))) +(assert (forall ((x1 Int) (x0 Int) (x2 Int) (x3 Int)) (=> (and (P0 x1) (P1 x2 x3) (or (< x1 0) (> x1 0)) (= x1 (+ 1 x2)) (= x0 (+ 1 x3))) (P1 x1 x0)))) +(assert (forall ((x0 Int)) (=> true (P0 x0)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (and (P1 x0 x1) (or (< x1 x0) (> x1 x0))) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0002.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0002.smt2 new file mode 100644 index 000000000..ac1c68a17 --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0002.smt2 @@ -0,0 +1,10 @@ +;; Original file: map.smt2 +(set-logic HORN) +(declare-fun P0 (Int) Bool) +(declare-fun P1 (Int Int) Bool) +(assert (forall ((x1 Int) (x0 Int)) (=> (and (P0 x1) (= x0 0) (= x1 0)) (P1 x1 x0)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P0 x1) (or (< x1 0) (> x1 0)) (= x1 (+ 1 x0))) (P0 x0)))) +(assert (forall ((x1 Int) (x0 Int) (x2 Int) (x3 Int)) (=> (and (P0 x1) (P1 x2 x3) (or (< x1 0) (> x1 0)) (= x1 (+ 1 x2)) (= x0 (+ 1 x3))) (P1 x1 x0)))) +(assert (forall ((x0 Int)) (=> true (P0 x0)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (and (P1 x0 x1) (or (< x1 x0) (> x1 x0))) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0004.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0004.smt2 new file mode 100644 index 000000000..ce7990022 --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0004.smt2 @@ -0,0 +1,10 @@ +;; Original file: sum4.smt2 +(set-logic HORN) +(declare-fun P0 (Int) Bool) +(declare-fun P1 (Int Int) Bool) +(assert (forall ((x1 Int) (x0 Int)) (=> (and (P0 x1) (= x0 0) (<= x1 0)) (P1 x1 x0)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P0 x1) (>= x1 1) (= x1 (+ 1 x0))) (P0 x0)))) +(assert (forall ((x1 Int) (x0 Int) (x2 Int) (x3 Int)) (=> (and (P0 x1) (P1 x2 x3) (>= x1 1) (= x1 (+ 1 x2)) (= x0 (+ x1 x3))) (P1 x1 x0)))) +(assert (forall ((x2 Int) (x0 Int) (x1 Int)) (=> (and (= (* 4 x2) (+ 6 x0)) (= x1 (* 4 x2))) (P0 x2)))) +(assert (forall ((x0 Int) (x3 Int) (x2 Int) (x1 Int)) (=> (and (P1 x2 x3) (>= x0 (+ 1 x3)) (= (* 4 x2) (+ 6 x0)) (= x1 (* 4 x2))) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0005.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0005.smt2 new file mode 100644 index 000000000..02b0341bf --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0005.smt2 @@ -0,0 +1,10 @@ +;; Original file: sum2.smt2 +(set-logic HORN) +(declare-fun P0 (Int) Bool) +(declare-fun P1 (Int Int) Bool) +(assert (forall ((x1 Int) (x0 Int)) (=> (and (P0 x1) (= x0 0) (<= x1 0)) (P1 x1 x0)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P0 x1) (>= x1 1) (= x1 (+ 1 x0))) (P0 x0)))) +(assert (forall ((x1 Int) (x0 Int) (x2 Int) (x3 Int)) (=> (and (P0 x1) (P1 x2 x3) (>= x1 1) (= x1 (+ 1 x2)) (= x0 (+ x1 x3))) (P1 x1 x0)))) +(assert (forall ((x2 Int) (x0 Int) (x1 Int)) (=> (and (= (* 2 x2) (+ 1 x0)) (= x1 (* 2 x2))) (P0 x2)))) +(assert (forall ((x0 Int) (x3 Int) (x2 Int) (x1 Int)) (=> (and (P1 x2 x3) (>= x0 (+ 1 x3)) (= (* 2 x2) (+ 1 x0)) (= x1 (* 2 x2))) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0006.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0006.smt2 new file mode 100644 index 000000000..197126f5d --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0006.smt2 @@ -0,0 +1,11 @@ +;; Original file: copy_intro.smt2 +(set-logic HORN) +(declare-fun P0 (Int) Bool) +(declare-fun P1 (Int Int) Bool) +(assert (forall ((x1 Int) (x0 Int)) (=> (and (P0 x1) (= x0 0) (= x1 0)) (P1 x1 x0)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P0 x1) (or (< x1 0) (> x1 0)) (= x1 (+ 1 x0))) (P0 x0)))) +(assert (forall ((x1 Int) (x0 Int) (x2 Int) (x3 Int)) (=> (and (P0 x1) (P1 x2 x3) (or (< x1 0) (> x1 0)) (= x1 (+ 1 x2)) (= x0 (+ 1 x3))) (P1 x1 x0)))) +(assert (forall ((x0 Int)) (=> true (P0 x0)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (P1 x0 x1) (P0 x1)))) +(assert (forall ((x2 Int) (x0 Int) (x1 Int)) (=> (and (P1 x0 x1) (P1 x1 x2) (or (< x2 x0) (> x2 x0))) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0007.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0007.smt2 new file mode 100644 index 000000000..3148644ca --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0007.smt2 @@ -0,0 +1,11 @@ +;; Original file: map_map.smt2 +(set-logic HORN) +(declare-fun P0 (Int) Bool) +(declare-fun P1 (Int Int) Bool) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P0 x0) (P0 x1) (= x0 0) (= x1 x0)) (P1 x0 x1)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P0 x1) (or (< x1 0) (> x1 0)) (= x1 (+ 1 x0))) (P0 x0)))) +(assert (forall ((x1 Int) (x0 Int) (x2 Int) (x3 Int)) (=> (and (P0 x1) (P1 x2 x3) (or (< x1 0) (> x1 0)) (= x1 (+ 1 x2)) (= x0 (+ 1 x3))) (P1 x1 x0)))) +(assert (forall ((x0 Int)) (=> true (P0 x0)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (P1 x0 x1) (P0 x1)))) +(assert (forall ((x2 Int) (x0 Int) (x1 Int)) (=> (and (P1 x0 x1) (P1 x1 x2) (or (< x2 x0) (> x2 x0))) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0011.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0011.smt2 new file mode 100644 index 000000000..521a27901 --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0011.smt2 @@ -0,0 +1,11 @@ +;; Original file: fib.smt2 +(set-logic HORN) +(declare-fun P0 (Int) Bool) +(declare-fun P1 (Int Int) Bool) +(assert (forall ((x1 Int) (x0 Int)) (=> (and (P0 x1) (<= x1 1) (= x0 1)) (P1 x1 x0)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P0 x1) (>= x1 2) (= x1 (+ 1 x0))) (P0 x0)))) +(assert (forall ((x0 Int) (x1 Int) (x2 Int) (x3 Int)) (=> (and (P0 x1) (P1 x2 x3) (>= x1 2) (= x2 (+ 1 x0)) (= x1 (+ 1 x2))) (P0 x0)))) +(assert (forall ((x1 Int) (x0 Int) (x2 Int) (x4 Int) (x3 Int) (x5 Int)) (=> (and (P0 x1) (P1 x2 x3) (P1 x4 x5) (>= x1 2) (= x2 (+ 1 x4)) (= x1 (+ 1 x2)) (= x0 (+ x3 x5))) (P1 x1 x0)))) +(assert (forall ((x0 Int)) (=> true (P0 x0)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P1 x0 x1) (>= x0 (+ 1 x1))) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0012.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0012.smt2 new file mode 100644 index 000000000..b4d945fa6 --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0012.smt2 @@ -0,0 +1,13 @@ +;; Original file: fxx.smt2 +(set-logic HORN) +(declare-fun P4 (Int Int) Bool) +(declare-fun P0 (Int) Bool) +(declare-fun P1 (Int Int) Bool) +(declare-fun P2 (Int) Bool) +(declare-fun P3 (Int Int Int) Bool) +(assert (forall ((x3 Int) (x4 Int) (x0 Int) (x1 Int) (x2 Int)) (=> (and (P0 x3) (P1 x3 x4) (or (not (> x1 0)) (not (> x2 0))) (or (and (> x1 0) (> x3 0)) (and (not (> x1 0)) (not (> x3 0)))) (or (and (> x2 0) (<= x4 0)) (and (not (> x2 0)) (not (<= x4 0))))) (P3 x3 x4 x0)))) +(assert (forall ((x0 Int)) (=> (P2 x0) (P0 x0)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P2 x0) (P2 x1) (= x0 x1)) (P1 x0 x1)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P2 x0) (P3 x0 x0 x1)) (P4 x0 x1)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P0 x0) (P1 x0 x1) (>= x0 1) (<= x1 0)) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0013.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0013.smt2 new file mode 100644 index 000000000..909894e78 --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0013.smt2 @@ -0,0 +1,11 @@ +;; Original file: harmonic.smt2 +(set-logic HORN) +(declare-fun P0 (Int) Bool) +(declare-fun P1 (Int Int) Bool) +(declare-fun P2 (Int Int Int) Bool) +(assert (forall ((x1 Int) (x2 Int) (x0 Int)) (=> (and (P0 x1) (P1 x1 x2) (or (< x2 0) (> x2 0)) (<= (+ 1 x1) x2) (= x0 0)) (P2 x1 x2 x0)))) +(assert (forall ((x0 Int) (x2 Int) (x1 Int)) (=> (and (P0 x1) (P1 x1 x2) (or (< x2 0) (> x2 0)) (>= x1 x2) (= x1 (+ x0 x2))) (P0 x0)))) +(assert (forall ((x0 Int) (x2 Int) (x1 Int)) (=> (and (P0 x1) (P1 x1 x2) (or (< x2 0) (> x2 0)) (>= x1 x2) (= x1 (+ x0 x2))) (P1 x0 x2)))) +(assert (forall ((x1 Int) (x3 Int) (x0 Int) (x2 Int) (x4 Int)) (=> (and (P0 x1) (P1 x1 x3) (P2 x2 x3 x4) (or (< x3 0) (> x3 0)) (>= x1 x3) (= x1 (+ x2 x3)) (= x0 (+ 1 x4))) (P2 x1 x3 x0)))) +(assert (forall ((x0 Int)) (=> (and (P0 x0) (P1 x0 0)) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0014.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0014.smt2 new file mode 100644 index 000000000..4939dee06 --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0014.smt2 @@ -0,0 +1,11 @@ +;; Original file: harmonic-e.smt2 +(set-logic HORN) +(declare-fun P0 (Int) Bool) +(declare-fun P1 (Int Int) Bool) +(declare-fun P2 (Int Int Int) Bool) +(assert (forall ((x1 Int) (x2 Int) (x0 Int)) (=> (and (P0 x1) (P1 x1 x2) (or (< x2 0) (> x2 0)) (<= (+ 1 x1) x2) (= x0 0)) (P2 x1 x2 x0)))) +(assert (forall ((x0 Int) (x2 Int) (x1 Int)) (=> (and (P0 x1) (P1 x1 x2) (or (< x2 0) (> x2 0)) (>= x1 x2) (= x1 (+ x0 x2))) (P0 x0)))) +(assert (forall ((x0 Int) (x2 Int) (x1 Int)) (=> (and (P0 x1) (P1 x1 x2) (or (< x2 0) (> x2 0)) (>= x1 x2) (= x1 (+ x0 x2))) (P1 x0 x2)))) +(assert (forall ((x1 Int) (x3 Int) (x0 Int) (x2 Int) (x4 Int)) (=> (and (P0 x1) (P1 x1 x3) (P2 x2 x3 x4) (or (< x3 0) (> x3 0)) (>= x1 x3) (= x1 (+ x2 x3)) (= x0 (+ 1 x4))) (P2 x1 x3 x0)))) +(assert (forall ((x0 Int)) (=> (and (P0 x0) (P1 x0 0)) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0016.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0016.smt2 new file mode 100644 index 000000000..1dc3b7ac7 --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0016.smt2 @@ -0,0 +1,17 @@ +;; Original file: exc-simple.smt2 +(set-logic HORN) +(declare-fun P0 (Int Int Int) Bool) +(declare-fun P1 (Int) Bool) +(declare-fun P5 (Int Int Int) Bool) +(declare-fun P2 (Int) Bool) +(declare-fun P3 (Int Int) Bool) +(declare-fun P4 (Int Int) Bool) +(assert (forall ((x2 Int) (x0 Int) (x1 Int)) (=> (and (P1 x2) (>= x2 0)) (P0 x2 x0 x1)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (and (P1 x1) (<= (+ 1 x1) 0) (= x0 0)) (P3 x1 x0)))) +(assert (forall ((x1 Int) (x0 Int) (x2 Int)) (=> (and (P1 x1) (P5 x1 0 x2) (<= (+ 1 x1) 0)) (P0 x1 x0 x2)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (and (P2 x1) (= x1 0)) (P4 x1 x0)))) +(assert (forall ((x0 Int)) (=> true (P1 x0)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (P3 x0 x1) (P2 x1)))) +(assert (forall ((x0 Int) (x1 Int) (x2 Int)) (=> (and (P3 x0 x1) (P4 x1 x2)) (P5 x0 x1 x2)))) +(assert (forall ((x0 Int)) (=> (and (P2 x0) (or (< x0 0) (> x0 0))) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0017.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0017.smt2 new file mode 100644 index 000000000..01285f588 --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0017.smt2 @@ -0,0 +1,17 @@ +;; Original file: exception.smt2 +(set-logic HORN) +(declare-fun P0 (Int Int Int) Bool) +(declare-fun P1 (Int) Bool) +(declare-fun P5 (Int Int Int) Bool) +(declare-fun P2 (Int) Bool) +(declare-fun P3 (Int Int) Bool) +(declare-fun P4 (Int Int) Bool) +(assert (forall ((x2 Int) (x0 Int) (x1 Int)) (=> (and (P1 x2) (>= x2 0)) (P0 x2 x0 x1)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (and (P1 x1) (<= (+ 1 x1) 0) (= x0 0)) (P3 x1 x0)))) +(assert (forall ((x1 Int) (x0 Int) (x2 Int)) (=> (and (P1 x1) (P5 x1 0 x2) (<= (+ 1 x1) 0)) (P0 x1 x0 x2)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (and (P2 x1) (= x1 0)) (P4 x1 x0)))) +(assert (forall ((x0 Int)) (=> true (P1 x0)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (P3 x0 x1) (P2 x1)))) +(assert (forall ((x0 Int) (x1 Int) (x2 Int)) (=> (and (P3 x0 x1) (P4 x1 x2)) (P5 x0 x1 x2)))) +(assert (forall ((x0 Int)) (=> (and (P2 x0) (or (< x0 0) (> x0 0))) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0020.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0020.smt2 new file mode 100644 index 000000000..a1da8be2a --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0020.smt2 @@ -0,0 +1,17 @@ +;; Original file: twice.smt2 +(set-logic HORN) +(declare-fun P4 (Int Int) Bool) +(declare-fun P3 (Int Int) Bool) +(declare-fun P0 (Int) Bool) +(declare-fun P1 (Int) Bool) +(declare-fun P2 (Int Int) Bool) +(declare-fun P5 (Int Int Int) Bool) +(assert (forall ((x1 Int) (x0 Int)) (=> (P4 x0 x1) (P1 x1)))) +(assert (forall ((x2 Int) (x0 Int) (x1 Int)) (=> (and (P4 x0 x1) (P3 x1 x2)) (P1 x2)))) +(assert (forall ((x0 Int) (x1 Int) (x3 Int) (x2 Int)) (=> (and (P4 x0 x1) (P3 x1 x2) (P3 x2 x3)) (P5 x0 x1 x3)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (and (P0 x1) (= x0 (* 2 x1))) (P2 x1 x0)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (and (P1 x1) (>= x0 1)) (P0 x1)))) +(assert (forall ((x1 Int) (x2 Int) (x0 Int)) (=> (and (P1 x1) (P2 x1 x2) (>= x0 1)) (P3 x1 x2)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (>= x1 1) (P4 x0 x1)))) +(assert (forall ((x1 Int) (x2 Int) (x0 Int)) (=> (and (P5 x0 x1 x2) (>= x1 1) (<= x2 x1)) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0021.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0021.smt2 new file mode 100644 index 000000000..b06df5183 --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0021.smt2 @@ -0,0 +1,13 @@ +;; Original file: enc-rev_accum.smt2 +(set-logic HORN) +(declare-fun P0 (Int) Bool) +(declare-fun P1 (Int Int) Bool) +(declare-fun P2 (Int Int Int) Bool) +(assert (forall ((x1 Int) (x0 Int) (x2 Int)) (=> (and (P0 x1) (P1 x1 x0) (P1 x1 x2) (= x1 0) (= x2 x0)) (P2 x1 x0 x2)))) +(assert (forall ((x1 Int) (x2 Int) (x0 Int) (x3 Int)) (=> (and (P0 x2) (P1 x2 x3) (or (< x2 0) (> x2 0)) (= x0 (+ 1 x3)) (= x2 (+ 1 x1))) (P0 x1)))) +(assert (forall ((x0 Int) (x1 Int) (x2 Int) (x3 Int)) (=> (and (P0 x2) (P1 x2 x3) (or (< x2 0) (> x2 0)) (= x2 (+ 1 x0)) (= x1 (+ 1 x3))) (P1 x0 x1)))) +(assert (forall ((x0 Int) (x1 Int) (x4 Int) (x2 Int) (x3 Int)) (=> (and (P0 x0) (P1 x0 x1) (P2 x2 x3 x4) (or (< x0 0) (> x0 0)) (= x0 (+ 1 x2)) (= x3 (+ 1 x1))) (P2 x0 x1 x4)))) +(assert (forall ((x0 Int)) (=> true (P0 x0)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (= x1 0) (P1 x0 x1)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (and (P2 x0 0 x1) (<= (+ 1 x1) x0)) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0023.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0023.smt2 new file mode 100644 index 000000000..bbc33f43b --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0023.smt2 @@ -0,0 +1,13 @@ +;; Original file: copy4.smt2 +(set-logic HORN) +(declare-fun P0 (Int) Bool) +(declare-fun P1 (Int Int) Bool) +(declare-fun P2 (Int Int Int) Bool) +(assert (forall ((x0 Int) (x1 Int) (x2 Int)) (=> (and (P0 x0) (P1 x0 x1) (P0 x2) (= x1 0) (= x2 x0)) (P2 x0 x1 x2)))) +(assert (forall ((x1 Int) (x3 Int) (x0 Int) (x2 Int)) (=> (and (P0 x2) (P1 x2 x3) (or (< x3 0) (> x3 0)) (= x3 (+ 1 x0)) (= x1 (+ 1 x2))) (P0 x1)))) +(assert (forall ((x0 Int) (x1 Int) (x3 Int) (x2 Int)) (=> (and (P0 x2) (P1 x2 x3) (or (< x3 0) (> x3 0)) (= x0 (+ 1 x2)) (= x3 (+ 1 x1))) (P1 x0 x1)))) +(assert (forall ((x0 Int) (x1 Int) (x4 Int) (x2 Int) (x3 Int)) (=> (and (P0 x0) (P1 x0 x1) (P2 x2 x3 x4) (or (< x1 0) (> x1 0)) (= x2 (+ 1 x0)) (= x1 (+ 1 x3))) (P2 x0 x1 x4)))) +(assert (forall ((x0 Int)) (=> (= x0 0) (P0 x0)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (= x1 0) (P1 x1 x0)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (and (P2 0 x0 x1) (or (< x1 x0) (> x1 x0))) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0024.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0024.smt2 new file mode 100644 index 000000000..19bebd44b --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0024.smt2 @@ -0,0 +1,15 @@ +;; Original file: even_odd.smt2 +(set-logic HORN) +(declare-fun P2 (Int) Bool) +(declare-fun P1 (Int Int) Bool) +(declare-fun P0 (Int) Bool) +(declare-fun P3 (Int Int) Bool) +(assert (forall ((x1 Int) (x0 Int)) (=> (and (P2 x1) (> x0 0) (= x1 0)) (P3 x1 x0)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P2 x1) (or (< x1 0) (> x1 0)) (= x1 (+ 1 x0))) (P0 x0)))) +(assert (forall ((x0 Int) (x2 Int) (x1 Int)) (=> (and (P2 x0) (P1 x1 x2) (or (< x0 0) (> x0 0)) (= x0 (+ 1 x1))) (P3 x0 x2)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (and (P0 x1) (not (> x0 0)) (= x1 0)) (P1 x1 x0)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P0 x1) (or (< x1 0) (> x1 0)) (= x1 (+ 1 x0))) (P2 x0)))) +(assert (forall ((x0 Int) (x2 Int) (x1 Int)) (=> (and (P0 x0) (P3 x1 x2) (or (< x0 0) (> x0 0)) (= x0 (+ 1 x1))) (P1 x0 x2)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (= x0 (* 2 x1)) (P2 x0)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (and (P3 x1 0) (= x1 (* 2 x0))) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0025.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0025.smt2 new file mode 100644 index 000000000..bee2210ba --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0025.smt2 @@ -0,0 +1,18 @@ +;; Original file: intro3.smt2 +(set-logic HORN) +(declare-fun P0 (Int Int Int) Bool) +(declare-fun P2 (Int) Bool) +(declare-fun P6 (Int Int Int) Bool) +(declare-fun P1 (Int) Bool) +(declare-fun P3 (Int Int) Bool) +(declare-fun P4 (Int Int) Bool) +(declare-fun P5 (Int Int Int) Bool) +(assert (forall ((x1 Int) (x0 Int)) (=> (and (P2 x1) (= x0 (+ 1 x1))) (P4 x1 x0)))) +(assert (forall ((x1 Int) (x0 Int) (x3 Int) (x2 Int)) (=> (and (P2 x1) (P6 x1 x2 x3) (= x2 (+ 1 x1))) (P0 x1 x0 x3)))) +(assert (forall ((x1 Int) (x2 Int) (x0 Int)) (=> (and (P1 x1) (P3 x1 x2) (>= x2 (+ 1 x1))) (P5 x1 x2 x0)))) +(assert (forall ((x0 Int)) (=> (>= x0 0) (P1 x0)))) +(assert (forall ((x0 Int)) (=> (>= x0 0) (P2 x0)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P4 x0 x1) (>= x0 0)) (P3 x0 x1)))) +(assert (forall ((x0 Int) (x1 Int) (x2 Int)) (=> (and (P4 x0 x1) (P5 x0 x1 x2) (>= x0 0)) (P6 x0 x1 x2)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (and (P1 x0) (P3 x0 x1) (<= x1 x0)) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0026.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0026.smt2 new file mode 100644 index 000000000..a7a9fa1a0 --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0026.smt2 @@ -0,0 +1,13 @@ +;; Original file: mult.smt2 +(set-logic HORN) +(declare-fun P1 (Int Int) Bool) +(declare-fun P0 (Int) Bool) +(declare-fun P2 (Int Int Int) Bool) +(assert (forall ((x3 Int) (x4 Int) (x0 Int) (x1 Int) (x2 Int)) (=> (and (P0 x3) (P1 x3 x4) (or (> x1 0) (> x2 0)) (= x0 0) (or (and (> x1 0) (<= x3 0)) (and (not (> x1 0)) (not (<= x3 0)))) (or (and (> x2 0) (<= x4 0)) (and (not (> x2 0)) (not (<= x4 0))))) (P2 x3 x4 x0)))) +(assert (forall ((x2 Int) (x1 Int) (x0 Int)) (=> (and (P1 x2 x1) (P0 x2) (>= x2 1) (>= x1 1) (= x1 (+ 1 x0))) (P0 x2)))) +(assert (forall ((x1 Int) (x0 Int) (x2 Int)) (=> (and (P0 x1) (P1 x1 x2) (>= x1 1) (>= x2 1) (= x2 (+ 1 x0))) (P1 x1 x0)))) +(assert (forall ((x2 Int) (x1 Int) (x0 Int) (x3 Int) (x4 Int)) (=> (and (P1 x2 x1) (P0 x2) (P2 x2 x3 x4) (>= x2 1) (>= x1 1) (= x1 (+ 1 x3)) (= x0 (+ x2 x4))) (P2 x2 x1 x0)))) +(assert (forall ((x0 Int)) (=> true (P0 x0)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (= x0 x1) (P1 x1 x0)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P2 x0 x0 x1) (>= x0 (+ 1 x1))) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0029.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0029.smt2 new file mode 100644 index 000000000..0e88d2a61 --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0029.smt2 @@ -0,0 +1,15 @@ +;; Original file: enc-zip.smt2 +(set-logic HORN) +(declare-fun P0 (Int) Bool) +(declare-fun P1 (Int Int) Bool) +(declare-fun P2 (Int Int Int) Bool) +(assert (forall ((x1 Int) (x2 Int) (x0 Int)) (=> (and (P0 x1) (P1 x1 x2) (= x0 0) (= x1 0) (= x2 0)) (P2 x1 x2 x0)))) +(assert (forall ((x1 Int) (x2 Int) (x3 Int) (x0 Int)) (=> (and (P0 x2) (P1 x2 x3) (or (< x2 0) (> x2 0)) (or (< x3 0) (> x3 0)) (= x3 (+ 1 x0)) (= x2 (+ 1 x1))) (P0 x1)))) +(assert (forall ((x0 Int) (x1 Int) (x2 Int) (x3 Int)) (=> (and (P0 x2) (P1 x2 x3) (or (< x2 0) (> x2 0)) (or (< x3 0) (> x3 0)) (= x2 (+ 1 x0)) (= x3 (+ 1 x1))) (P1 x0 x1)))) +(assert (forall ((x1 Int) (x2 Int) (x0 Int) (x3 Int) (x4 Int) (x5 Int)) (=> (and (P0 x1) (P1 x1 x2) (P2 x3 x4 x5) (or (< x1 0) (> x1 0)) (or (< x2 0) (> x2 0)) (= x1 (+ 1 x3)) (= x2 (+ 1 x4)) (= x0 (+ 1 x5))) (P2 x1 x2 x0)))) +(assert (forall ((x0 Int)) (=> true (P0 x0)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (= x0 x1) (P1 x1 x0)))) +(assert (forall ((x0 Int)) (=> (and (P0 0) (P1 0 x0) (or (< x0 0) (> x0 0))) false))) +(assert (forall ((x0 Int)) (=> (and (P0 x0) (P1 x0 0) (or (< x0 0) (> x0 0))) false))) +(assert (forall ((x1 Int) (x0 Int)) (=> (and (P2 x0 x0 x1) (or (< x1 x0) (> x1 x0))) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0032.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0032.smt2 new file mode 100644 index 000000000..c74241afc --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0032.smt2 @@ -0,0 +1,15 @@ +;; Original file: enc-zip4.smt2 +(set-logic HORN) +(declare-fun P0 (Int) Bool) +(declare-fun P1 (Int Int) Bool) +(declare-fun P2 (Int Int Int) Bool) +(assert (forall ((x1 Int) (x2 Int) (x0 Int)) (=> (and (P0 x1) (P1 x1 x2) (= x0 0) (= x1 0) (= x2 0)) (P2 x1 x2 x0)))) +(assert (forall ((x1 Int) (x2 Int) (x3 Int) (x0 Int)) (=> (and (P0 x2) (P1 x2 x3) (or (< x2 0) (> x2 0)) (or (< x3 0) (> x3 0)) (= x3 (+ 1 x0)) (= x2 (+ 1 x1))) (P0 x1)))) +(assert (forall ((x0 Int) (x1 Int) (x2 Int) (x3 Int)) (=> (and (P0 x2) (P1 x2 x3) (or (< x2 0) (> x2 0)) (or (< x3 0) (> x3 0)) (= x2 (+ 1 x0)) (= x3 (+ 1 x1))) (P1 x0 x1)))) +(assert (forall ((x1 Int) (x2 Int) (x0 Int) (x3 Int) (x4 Int) (x5 Int)) (=> (and (P0 x1) (P1 x1 x2) (P2 x3 x4 x5) (or (< x1 0) (> x1 0)) (or (< x2 0) (> x2 0)) (= x1 (+ 1 x3)) (= x2 (+ 1 x4)) (= x0 (+ 1 x5))) (P2 x1 x2 x0)))) +(assert (forall ((x0 Int)) (=> true (P0 x0)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (= x0 x1) (P1 x1 x0)))) +(assert (forall ((x0 Int)) (=> (and (P0 0) (P1 0 x0) (or (< x0 0) (> x0 0))) false))) +(assert (forall ((x0 Int)) (=> (and (P0 x0) (P1 x0 0) (or (< x0 0) (> x0 0))) false))) +(assert (forall ((x0 Int) (x1 Int) (x3 Int) (x2 Int)) (=> (and (P2 x2 x2 x3) (or (not (> x0 0)) (not (> x1 0))) (or (and (> x0 0) (>= x3 x2)) (and (not (> x0 0)) (not (>= x3 x2)))) (or (and (> x1 0) (<= x3 x2)) (and (not (> x1 0)) (not (<= x3 x2))))) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0038.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0038.smt2 new file mode 100644 index 000000000..c86db2854 --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0038.smt2 @@ -0,0 +1,23 @@ +;; Original file: hrec.smt2 +(set-logic HORN) +(declare-fun P4 (Int Int) Bool) +(declare-fun P3 (Int Int) Bool) +(declare-fun P0 (Int) Bool) +(declare-fun P1 (Int) Bool) +(declare-fun P2 (Int Int) Bool) +(declare-fun P5 (Int Int Int) Bool) +(assert (forall ((x1 Int) (x0 Int)) (=> (and (P4 x0 x1) (>= x1 0)) (P1 x1)))) +(assert (forall ((x0 Int) (x1 Int) (x2 Int)) (=> (and (P4 x0 x1) (P3 x1 x2) (>= x1 0)) (P5 x0 x1 x2)))) +(assert (forall ((x2 Int) (x1 Int) (x0 Int)) (=> (and (P4 x0 x1) (P1 x2) (<= (+ 1 x1) 0)) (P1 x2)))) +(assert (forall ((x2 Int) (x3 Int) (x1 Int) (x0 Int)) (=> (and (P4 x0 x1) (P1 x2) (P3 x2 x3) (<= (+ 1 x1) 0)) (P3 x2 x3)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (and (P4 x0 x1) (<= (+ 1 x1) 0)) (P1 x1)))) +(assert (forall ((x0 Int) (x3 Int) (x1 Int) (x2 Int)) (=> (and (P4 x0 x1) (P3 x1 x2) (P1 x3) (<= (+ 1 x1) 0)) (P4 x0 x3)))) +(assert (forall ((x3 Int) (x4 Int) (x0 Int) (x2 Int) (x1 Int)) (=> (and (P4 x2 x0) (P3 x0 x1) (P1 x3) (P5 x2 x3 x4) (<= (+ 1 x0) 0)) (P3 x3 x4)))) +(assert (forall ((x0 Int) (x3 Int) (x2 Int) (x1 Int)) (=> (and (P4 x1 x2) (P3 x2 x3) (<= (+ 1 x2) 0)) (P4 x0 x3)))) +(assert (forall ((x0 Int) (x1 Int) (x4 Int) (x3 Int) (x2 Int)) (=> (and (P4 x0 x1) (P3 x1 x3) (P5 x2 x3 x4) (<= (+ 1 x1) 0)) (P5 x0 x1 x4)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (and (P0 x1) (= x0 (+ 1 x1))) (P2 x1 x0)))) +(assert (forall ((x0 Int)) (=> (P1 x0) (P0 x0)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P1 x0) (P2 x0 x1)) (P3 x0 x1)))) +(assert (forall ((x0 Int) (x1 Int)) (=> true (P4 x0 x1)))) +(assert (forall ((x2 Int) (x0 Int) (x1 Int)) (=> (and (P5 x0 x1 x2) (<= (+ 1 x2) 0)) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0042.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0042.smt2 new file mode 100644 index 000000000..cababbbb0 --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0042.smt2 @@ -0,0 +1,45 @@ +;; Original file: adr_147.smt2 +(set-logic HORN) +(declare-fun |f$unknown:2| (Int Int) Bool) +(declare-fun |twice$unknown:4| (Int Int) Bool) +(declare-fun |twice$unknown:6| (Int Int) Bool) + + +(assert (forall ((|$V-reftype:15| Int) (|$alpha-3:x| Int)) + (=> (and (= |$V-reftype:15| (* 2 |$alpha-3:x|)) true) + (|f$unknown:2| |$V-reftype:15| |$alpha-3:x|)))) +(assert (forall ((|$knormal:4| Int) + (|$alpha-4:n| Int) + (|$V-reftype:3| Int) + (f Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:4|)) (> |$alpha-4:n| 0)) + (not (= 0 |$knormal:4|)) + true + (|f$unknown:2| |$V-reftype:3| f)))) + (=> a!1 (|twice$unknown:4| |$V-reftype:3| f))))) +(assert (forall ((|$V-reftype:14| Int) + (|$knormal:3| Int) + (|$knormal:1| Int) + (|$alpha-2:x| Int)) + (=> (and (= |$V-reftype:14| |$knormal:3|) + true + (|twice$unknown:4| |$knormal:3| |$knormal:1|) + (|twice$unknown:4| |$knormal:1| |$alpha-2:x|)) + (|twice$unknown:6| |$V-reftype:14| |$alpha-2:x|)))) +(assert (forall ((|$knormal:1| Int) (|$alpha-2:x| Int)) + (=> (and true + (|twice$unknown:4| |$knormal:1| |$alpha-2:x|) + (not true)) + true))) +(assert (forall ((|$knormal:9| Int) + (|$knormal:7| Int) + (|$alpha-4:n| Int) + (|$knormal:4| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:9|)) + (> |$knormal:7| |$alpha-4:n|)) + (= (not (= 0 |$knormal:4|)) (> |$alpha-4:n| 0)) + (not (not (= 0 |$knormal:9|))) + (not (= 0 |$knormal:4|)) + (|twice$unknown:6| |$knormal:7| |$alpha-4:n|)))) + (=> a!1 false)))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0043.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0043.smt2 new file mode 100644 index 000000000..336a52478 --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0043.smt2 @@ -0,0 +1,21 @@ +;; Original file: enc-zipmap.smt2 +(set-logic HORN) +(declare-fun P0 (Int) Bool) +(declare-fun P1 (Int Int) Bool) +(declare-fun P2 (Int) Bool) +(declare-fun P3 (Int Int Int) Bool) +(declare-fun P4 (Int Int) Bool) +(assert (forall ((x0 Int) (x1 Int) (x2 Int)) (=> (and (P0 x0) (P1 x0 x1) (P0 x2) (= x2 x0) (= x0 0) (= x1 0)) (P3 x0 x1 x2)))) +(assert (forall ((x1 Int) (x2 Int) (x3 Int) (x0 Int)) (=> (and (P0 x2) (P1 x2 x3) (or (< x2 0) (> x2 0)) (or (< x3 0) (> x3 0)) (= x3 (+ 1 x0)) (= x2 (+ 1 x1))) (P0 x1)))) +(assert (forall ((x0 Int) (x1 Int) (x2 Int) (x3 Int)) (=> (and (P0 x2) (P1 x2 x3) (or (< x2 0) (> x2 0)) (or (< x3 0) (> x3 0)) (= x2 (+ 1 x0)) (= x3 (+ 1 x1))) (P1 x0 x1)))) +(assert (forall ((x1 Int) (x2 Int) (x0 Int) (x3 Int) (x4 Int) (x5 Int)) (=> (and (P0 x1) (P1 x1 x2) (P3 x3 x4 x5) (or (< x1 0) (> x1 0)) (or (< x2 0) (> x2 0)) (= x1 (+ 1 x3)) (= x2 (+ 1 x4)) (= x0 (+ 1 x5))) (P3 x1 x2 x0)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P2 x0) (P2 x1) (= x0 0) (= x1 x0)) (P4 x0 x1)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P2 x1) (or (< x1 0) (> x1 0)) (= x1 (+ 1 x0))) (P2 x0)))) +(assert (forall ((x1 Int) (x0 Int) (x2 Int) (x3 Int)) (=> (and (P2 x1) (P4 x2 x3) (or (< x1 0) (> x1 0)) (= x1 (+ 1 x2)) (= x0 (+ 1 x3))) (P4 x1 x0)))) +(assert (forall ((x0 Int)) (=> true (P0 x0)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (= x0 x1) (P1 x1 x0)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (P3 x0 x0 x1) (P2 x1)))) +(assert (forall ((x0 Int)) (=> (and (P0 0) (P1 0 x0) (or (< x0 0) (> x0 0))) false))) +(assert (forall ((x0 Int)) (=> (and (P0 x0) (P1 x0 0) (or (< x0 0) (> x0 0))) false))) +(assert (forall ((x2 Int) (x0 Int) (x1 Int)) (=> (and (P3 x0 x0 x1) (P4 x1 x2) (or (< x2 x0) (> x2 x0))) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0044.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0044.smt2 new file mode 100644 index 000000000..9cf435706 --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0044.smt2 @@ -0,0 +1,21 @@ +;; Original file: enc-zip3.smt2 +(set-logic HORN) +(declare-fun P0 (Int) Bool) +(declare-fun P1 (Int Int) Bool) +(declare-fun P2 (Int) Bool) +(declare-fun P3 (Int Int) Bool) +(declare-fun P4 (Int Int Int) Bool) +(assert (forall ((x0 Int) (x1 Int)) (=> (P0 x1) (P0 x0)))) +(assert (forall ((x0 Int) (x2 Int) (x1 Int)) (=> (and (P0 x0) (P1 x1 x2)) (P1 x0 x2)))) +(assert (forall ((x1 Int) (x2 Int) (x0 Int)) (=> (and (P2 x1) (P3 x1 x2) (= x0 0) (= x1 0) (= x2 0)) (P4 x1 x2 x0)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P2 0) (P3 0 x1) (or (< x1 0) (> x1 0))) (P0 x0)))) +(assert (forall ((x0 Int) (x1 Int) (x3 Int) (x2 Int)) (=> (and (P2 x0) (P3 x0 x1) (P1 x2 x3) (or (< x1 0) (> x1 0)) (= x0 0)) (P4 x0 x1 x3)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P2 x1) (P3 x1 0) (or (< x1 0) (> x1 0))) (P0 x0)))) +(assert (forall ((x0 Int) (x1 Int) (x3 Int) (x2 Int)) (=> (and (P2 x0) (P3 x0 x1) (P1 x2 x3) (or (< x0 0) (> x0 0)) (= x1 0)) (P4 x0 x1 x3)))) +(assert (forall ((x1 Int) (x2 Int) (x3 Int) (x0 Int)) (=> (and (P2 x2) (P3 x2 x3) (or (< x2 0) (> x2 0)) (or (< x3 0) (> x3 0)) (= x3 (+ 1 x0)) (= x2 (+ 1 x1))) (P2 x1)))) +(assert (forall ((x0 Int) (x1 Int) (x2 Int) (x3 Int)) (=> (and (P2 x2) (P3 x2 x3) (or (< x2 0) (> x2 0)) (or (< x3 0) (> x3 0)) (= x2 (+ 1 x0)) (= x3 (+ 1 x1))) (P3 x0 x1)))) +(assert (forall ((x1 Int) (x2 Int) (x0 Int) (x3 Int) (x4 Int) (x5 Int)) (=> (and (P2 x1) (P3 x1 x2) (P4 x3 x4 x5) (or (< x1 0) (> x1 0)) (or (< x2 0) (> x2 0)) (= x1 (+ 1 x3)) (= x2 (+ 1 x4)) (= x0 (+ 1 x5))) (P4 x1 x2 x0)))) +(assert (forall ((x0 Int)) (=> true (P2 x0)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (= x0 x1) (P3 x1 x0)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (and (P4 x0 x0 x1) (or (< x1 x0) (> x1 x0))) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0045.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0045.smt2 new file mode 100644 index 000000000..e7107f61d --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0045.smt2 @@ -0,0 +1,22 @@ +;; Original file: enc-rev_append.smt2 +(set-logic HORN) +(declare-fun P1 (Int) Bool) +(declare-fun P2 (Int Int) Bool) +(declare-fun P0 (Int) Bool) +(declare-fun P3 (Int Int) Bool) +(declare-fun P4 (Int Int Int) Bool) +(assert (forall ((x1 Int) (x0 Int) (x2 Int)) (=> (and (P1 x1) (P2 x1 x0) (P2 x1 x2) (= x1 0) (= x2 x0)) (P4 x1 x0 x2)))) +(assert (forall ((x0 Int) (x1 Int) (x2 Int)) (=> (and (P1 x1) (P2 x1 x2) (or (< x1 0) (> x1 0)) (= x1 (+ 1 x0))) (P1 x0)))) +(assert (forall ((x0 Int) (x2 Int) (x1 Int)) (=> (and (P1 x1) (P2 x1 x2) (or (< x1 0) (> x1 0)) (= x1 (+ 1 x0))) (P2 x0 x2)))) +(assert (forall ((x1 Int) (x3 Int) (x0 Int) (x2 Int) (x4 Int)) (=> (and (P1 x1) (P2 x1 x3) (P4 x2 x3 x4) (or (< x1 0) (> x1 0)) (= x1 (+ 1 x2)) (= x0 (+ 1 x4))) (P4 x1 x3 x0)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (and (P0 x1) (= x0 0) (= x1 0)) (P3 x1 x0)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P0 x1) (or (< x1 0) (> x1 0)) (= x1 (+ 1 x0))) (P0 x0)))) +(assert (forall ((x2 Int) (x0 Int) (x1 Int)) (=> (and (P0 x0) (P3 x1 x2) (or (< x0 0) (> x0 0)) (= x0 (+ 1 x1))) (P1 x2)))) +(assert (forall ((x3 Int) (x0 Int) (x1 Int) (x2 Int)) (=> (and (P0 x1) (P3 x2 x3) (or (< x1 0) (> x1 0)) (= x0 1) (= x1 (+ 1 x2))) (P2 x3 x0)))) +(assert (forall ((x0 Int) (x3 Int) (x1 Int) (x2 Int)) (=> (and (P0 x0) (P3 x1 x2) (P4 x2 1 x3) (or (< x0 0) (> x0 0)) (= x0 (+ 1 x1))) (P3 x0 x3)))) +(assert (forall ((x0 Int)) (=> true (P0 x0)))) +(assert (forall ((x0 Int)) (=> (P3 x0 x0) (P1 x0)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (P3 x1 x1) (P2 x1 x0)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (and (P3 x0 x1) (or (< x1 x0) (> x1 x0))) false))) +(assert (forall ((x3 Int) (x0 Int) (x1 Int) (x2 Int)) (=> (and (P3 x1 x1) (P4 x1 x2 x3) (or (< x3 x0) (> x3 x0)) (= x0 (+ x1 x2))) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0048.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0048.smt2 new file mode 100644 index 000000000..d75aa1c85 --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0048.smt2 @@ -0,0 +1,23 @@ +;; Original file: enc-filter.smt2 +(set-logic HORN) +(declare-fun P0 (Int) Bool) +(declare-fun P3 (Int Int) Bool) +(declare-fun P4 (Int Int) Bool) +(declare-fun P1 (Int) Bool) +(declare-fun P2 (Int Int) Bool) +(declare-fun P5 (Int Int Int) Bool) +(assert (forall ((x1 Int) (x0 Int)) (=> (and (P0 x1) (or (and (> x0 0) (< x1 0)) (and (not (> x0 0)) (not (< x1 0))))) (P2 x1 x0)))) +(assert (forall ((x1 Int) (x2 Int) (x0 Int)) (=> (and (P4 x1 x2) (= x0 0) (= x2 0)) (P5 x1 x2 x0)))) +(assert (forall ((x3 Int) (x2 Int) (x0 Int) (x1 Int)) (=> (and (P4 x1 x2) (P1 x3) (or (< x2 0) (> x2 0)) (= x2 (+ 1 x0))) (P1 x3)))) +(assert (forall ((x3 Int) (x4 Int) (x2 Int) (x0 Int) (x1 Int)) (=> (and (P4 x1 x2) (P1 x3) (P3 x3 x4) (or (< x2 0) (> x2 0)) (= x2 (+ 1 x0))) (P3 x3 x4)))) +(assert (forall ((x1 Int) (x0 Int) (x2 Int)) (=> (and (P4 x1 x2) (or (< x2 0) (> x2 0)) (= x2 (+ 1 x0))) (P4 x1 x0)))) +(assert (forall ((x2 Int) (x1 Int) (x0 Int) (x3 Int) (x4 Int)) (=> (and (P4 x2 x1) (P5 x2 x3 x4) (or (< x1 0) (> x1 0)) (= x1 (+ 1 x3)) (= x0 (+ 1 x4))) (P5 x2 x1 x0)))) +(assert (forall ((x3 Int) (x2 Int) (x0 Int) (x1 Int)) (=> (and (P4 x1 x2) (P1 x3) (or (< x2 0) (> x2 0)) (= x2 (+ 1 x0))) (P1 x3)))) +(assert (forall ((x3 Int) (x4 Int) (x2 Int) (x0 Int) (x1 Int)) (=> (and (P4 x1 x2) (P1 x3) (P3 x3 x4) (or (< x2 0) (> x2 0)) (= x2 (+ 1 x0))) (P3 x3 x4)))) +(assert (forall ((x0 Int) (x1 Int) (x3 Int) (x2 Int)) (=> (and (P4 x2 x3) (or (< x3 0) (> x3 0)) (= x3 (+ 1 x1))) (P4 x0 x1)))) +(assert (forall ((x0 Int) (x1 Int) (x4 Int) (x3 Int) (x2 Int)) (=> (and (P4 x0 x1) (P5 x2 x3 x4) (or (< x1 0) (> x1 0)) (= x1 (+ 1 x3))) (P5 x0 x1 x4)))) +(assert (forall ((x0 Int)) (=> (P1 x0) (P0 x0)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P1 x0) (P2 x0 x1)) (P3 x0 x1)))) +(assert (forall ((x0 Int) (x1 Int)) (=> true (P4 x0 x1)))) +(assert (forall ((x2 Int) (x1 Int) (x0 Int)) (=> (and (P5 x0 x1 x2) (>= x2 (+ 1 x1))) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0049.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0049.smt2 new file mode 100644 index 000000000..20dc29de5 --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0049.smt2 @@ -0,0 +1,18 @@ +;; Original file: ack.smt2 +(set-logic HORN) +(declare-fun P0 (Int) Bool) +(declare-fun P1 (Int Int) Bool) +(declare-fun P2 (Int Int Int) Bool) +(assert (forall ((x1 Int) (x2 Int) (x0 Int)) (=> (and (P0 x1) (P1 x1 x2) (= x0 (+ 1 x2)) (= x1 0)) (P2 x1 x2 x0)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P0 x1) (P1 x1 0) (or (< x1 0) (> x1 0)) (= x1 (+ 1 x0))) (P0 x0)))) +(assert (forall ((x1 Int) (x0 Int) (x2 Int)) (=> (and (P0 x2) (P1 x2 0) (or (< x2 0) (> x2 0)) (= x0 1) (= x2 (+ 1 x1))) (P1 x1 x0)))) +(assert (forall ((x0 Int) (x1 Int) (x3 Int) (x2 Int)) (=> (and (P0 x0) (P1 x0 x1) (P2 x2 1 x3) (or (< x0 0) (> x0 0)) (= x0 (+ 1 x2)) (= x1 0)) (P2 x0 x1 x3)))) +(assert (forall ((x3 Int) (x2 Int) (x0 Int) (x1 Int)) (=> (and (P1 x3 x2) (P0 x3) (or (< x3 0) (> x3 0)) (or (< x2 0) (> x2 0)) (= x3 (+ 1 x0)) (= x2 (+ 1 x1))) (P0 x3)))) +(assert (forall ((x2 Int) (x1 Int) (x3 Int) (x0 Int)) (=> (and (P0 x2) (P1 x2 x3) (or (< x2 0) (> x2 0)) (or (< x3 0) (> x3 0)) (= x2 (+ 1 x0)) (= x3 (+ 1 x1))) (P1 x2 x1)))) +(assert (forall ((x0 Int) (x2 Int) (x1 Int) (x3 Int) (x4 Int)) (=> (and (P0 x2) (P1 x2 x1) (P2 x2 x3 x4) (or (< x2 0) (> x2 0)) (or (< x1 0) (> x1 0)) (= x1 (+ 1 x3)) (= x2 (+ 1 x0))) (P0 x0)))) +(assert (forall ((x0 Int) (x4 Int) (x2 Int) (x1 Int) (x3 Int)) (=> (and (P0 x2) (P1 x2 x1) (P2 x2 x3 x4) (or (< x2 0) (> x2 0)) (or (< x1 0) (> x1 0)) (= x1 (+ 1 x3)) (= x2 (+ 1 x0))) (P1 x0 x4)))) +(assert (forall ((x1 Int) (x0 Int) (x5 Int) (x2 Int) (x3 Int) (x4 Int)) (=> (and (P0 x1) (P1 x1 x0) (P2 x1 x2 x4) (P2 x3 x4 x5) (or (< x1 0) (> x1 0)) (or (< x0 0) (> x0 0)) (= x0 (+ 1 x2)) (= x1 (+ 1 x3))) (P2 x1 x0 x5)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (>= x0 0) (>= x1 0)) (P0 x0)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (>= x0 0) (>= x1 0)) (P1 x0 x1)))) +(assert (forall ((x0 Int) (x1 Int) (x2 Int)) (=> (and (P2 x0 x1 x2) (>= x0 0) (>= x1 0) (<= (+ 1 x2) x1)) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0050.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0050.smt2 new file mode 100644 index 000000000..3efed6ad2 --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0050.smt2 @@ -0,0 +1,25 @@ +;; Original file: enc-zip_map2.smt2 +(set-logic HORN) +(declare-fun P0 (Int) Bool) +(declare-fun P1 (Int Int) Bool) +(declare-fun P2 (Int) Bool) +(declare-fun P3 (Int Int) Bool) +(declare-fun P4 (Int) Bool) +(declare-fun P5 (Int Int Int) Bool) +(declare-fun P6 (Int Int) Bool) +(assert (forall ((x0 Int)) (=> (P0 x0) (P0 x0)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P0 x0) (P1 x0 x1)) (P1 x0 x1)))) +(assert (forall ((x0 Int) (x1 Int) (x2 Int)) (=> (and (P2 x0) (P3 x0 x1) (P2 x2) (= x2 x0) (= x0 0) (= x1 0)) (P5 x0 x1 x2)))) +(assert (forall ((x1 Int) (x2 Int) (x3 Int) (x0 Int)) (=> (and (P2 x2) (P3 x2 x3) (or (< x2 0) (> x2 0)) (or (< x3 0) (> x3 0)) (= x3 (+ 1 x0)) (= x2 (+ 1 x1))) (P2 x1)))) +(assert (forall ((x0 Int) (x1 Int) (x2 Int) (x3 Int)) (=> (and (P2 x2) (P3 x2 x3) (or (< x2 0) (> x2 0)) (or (< x3 0) (> x3 0)) (= x2 (+ 1 x0)) (= x3 (+ 1 x1))) (P3 x0 x1)))) +(assert (forall ((x1 Int) (x2 Int) (x0 Int) (x3 Int) (x4 Int) (x5 Int)) (=> (and (P2 x1) (P3 x1 x2) (P5 x3 x4 x5) (or (< x1 0) (> x1 0)) (or (< x2 0) (> x2 0)) (= x1 (+ 1 x3)) (= x2 (+ 1 x4)) (= x0 (+ 1 x5))) (P5 x1 x2 x0)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P4 x0) (P4 x1) (= x0 0) (= x1 x0)) (P6 x0 x1)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P4 x1) (or (< x1 0) (> x1 0)) (= x1 (+ 1 x0))) (P4 x0)))) +(assert (forall ((x1 Int) (x0 Int) (x2 Int) (x3 Int)) (=> (and (P4 x1) (P6 x2 x3) (or (< x1 0) (> x1 0)) (= x1 (+ 1 x2)) (= x0 (+ 1 x3))) (P6 x1 x0)))) +(assert (forall ((x0 Int)) (=> true (P2 x0)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (= x0 x1) (P3 x1 x0)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (P5 x0 x0 x1) (P4 x1)))) +(assert (forall ((x0 Int)) (=> (and (P2 0) (P3 0 x0) (or (< x0 0) (> x0 0))) false))) +(assert (forall ((x0 Int)) (=> (and (P2 x0) (P3 x0 0) (or (< x0 0) (> x0 0))) false))) +(assert (forall ((x2 Int) (x0 Int) (x1 Int)) (=> (and (P5 x0 x0 x1) (P6 x1 x2) (or (< x2 x0) (> x2 x0))) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0051.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0051.smt2 new file mode 100644 index 000000000..6f30e444b --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0051.smt2 @@ -0,0 +1,47 @@ +;; Original file: adr_122.smt2 +(set-logic HORN) +(declare-fun |mc91$unknown:2| (Int Int) Bool) + + +(assert (forall ((|$knormal:2| Int) + (|$alpha-1:x| Int) + (|$knormal:1| Int) + (|$V-reftype:10| Int) + (|$knormal:5| Int) + (|$knormal:3| Int)) + (let ((a!1 (and (= |$knormal:2| (+ |$alpha-1:x| 11)) + (= (not (= 0 |$knormal:1|)) (> |$alpha-1:x| 100)) + (= |$V-reftype:10| |$knormal:5|) + (not (not (= 0 |$knormal:1|))) + (|mc91$unknown:2| |$knormal:5| |$knormal:3|) + (|mc91$unknown:2| |$knormal:3| |$knormal:2|) + true))) + (=> a!1 (|mc91$unknown:2| |$V-reftype:10| |$alpha-1:x|))))) +(assert (forall ((|$knormal:2| Int) + (|$alpha-1:x| Int) + (|$knormal:1| Int) + (|$knormal:3| Int)) + (let ((a!1 (and (= |$knormal:2| (+ |$alpha-1:x| 11)) + (= (not (= 0 |$knormal:1|)) (> |$alpha-1:x| 100)) + (not (not (= 0 |$knormal:1|))) + (|mc91$unknown:2| |$knormal:3| |$knormal:2|) + true + (not true)))) + (=> a!1 true)))) +(assert (forall ((|$knormal:1| Int) (|$alpha-1:x| Int) (|$V-reftype:8| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:1|)) (> |$alpha-1:x| 100)) + (= |$V-reftype:8| (- |$alpha-1:x| 10)) + (not (= 0 |$knormal:1|)) + true))) + (=> a!1 (|mc91$unknown:2| |$V-reftype:8| |$alpha-1:x|))))) +(assert (forall ((|$knormal:9| Int) + (|$knormal:7| Int) + (|$knormal:6| Int) + (|$alpha-2:n| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:9|)) (= |$knormal:7| 91)) + (= (not (= 0 |$knormal:6|)) (<= |$alpha-2:n| 101)) + (not (not (= 0 |$knormal:9|))) + (not (= 0 |$knormal:6|)) + (|mc91$unknown:2| |$knormal:7| |$alpha-2:n|)))) + (=> a!1 false)))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0052.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0052.smt2 new file mode 100644 index 000000000..7647fa638 --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0052.smt2 @@ -0,0 +1,47 @@ +;; Original file: adr_86.smt2 +(set-logic HORN) +(declare-fun |fib$unknown:2| (Int Int) Bool) + + +(assert (forall ((|$knormal:5| Int) + (|$alpha-1:n| Int) + (|$knormal:2| Int) + (|$knormal:1| Int) + (|$V-reftype:11| Int) + (|$knormal:3| Int) + (|$knormal:6| Int)) + (let ((a!1 (and (= |$knormal:5| (- |$alpha-1:n| 2)) + (= |$knormal:2| (- |$alpha-1:n| 1)) + (= (not (= 0 |$knormal:1|)) (< |$alpha-1:n| 2)) + (= |$V-reftype:11| (+ |$knormal:3| |$knormal:6|)) + (not (not (= 0 |$knormal:1|))) + (|fib$unknown:2| |$knormal:6| |$knormal:5|) + (|fib$unknown:2| |$knormal:3| |$knormal:2|) + true))) + (=> a!1 (|fib$unknown:2| |$V-reftype:11| |$alpha-1:n|))))) +(assert (forall ((|$knormal:5| Int) + (|$alpha-1:n| Int) + (|$knormal:2| Int) + (|$knormal:1| Int) + (|$knormal:3| Int)) + (let ((a!1 (and (= |$knormal:5| (- |$alpha-1:n| 2)) + (= |$knormal:2| (- |$alpha-1:n| 1)) + (= (not (= 0 |$knormal:1|)) (< |$alpha-1:n| 2)) + (not (not (= 0 |$knormal:1|))) + (|fib$unknown:2| |$knormal:3| |$knormal:2|) + true + (not true)))) + (=> a!1 true)))) +(assert (forall ((|$knormal:1| Int) (|$alpha-1:n| Int) (|$V-reftype:8| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:1|)) (< |$alpha-1:n| 2)) + (= |$V-reftype:8| 1) + (not (= 0 |$knormal:1|)) + true))) + (=> a!1 (|fib$unknown:2| |$V-reftype:8| |$alpha-1:n|))))) +(assert (forall ((|$knormal:10| Int) (|$alpha-2:n| Int) (|$knormal:8| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:10|)) + (<= |$alpha-2:n| |$knormal:8|)) + (not (not (= 0 |$knormal:10|))) + (|fib$unknown:2| |$knormal:8| |$alpha-2:n|)))) + (=> a!1 false)))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0057.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0057.smt2 new file mode 100644 index 000000000..830d8ed59 --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0057.smt2 @@ -0,0 +1,20 @@ +;; Original file: gib2.smt2 +(set-logic HORN) +(declare-fun P0 (Int) Bool) +(declare-fun P1 (Int Int) Bool) +(declare-fun P2 (Int Int Int) Bool) +(declare-fun P3 (Int Int Int Int) Bool) +(assert (forall ((x0 Int) (x1 Int) (x2 Int) (x3 Int)) (=> (and (P0 x0) (P1 x0 x1) (P2 x0 x1 x2) (P0 x3) (= x2 0) (= x3 x0)) (P3 x0 x1 x2 x3)))) +(assert (forall ((x2 Int) (x0 Int) (x1 Int) (x3 Int)) (=> (and (P0 x2) (P1 x2 x0) (P2 x2 x0 x1) (P1 x2 x3) (= x1 1) (= x3 x0)) (P3 x2 x0 x1 x3)))) +(assert (forall ((x3 Int) (x2 Int) (x0 Int) (x1 Int)) (=> (and (P1 x3 x1) (P2 x3 x1 x2) (P0 x3) (or (< x2 0) (> x2 0)) (or (< x2 1) (> x2 1)) (= x2 (+ 1 x0))) (P0 x3)))) +(assert (forall ((x2 Int) (x3 Int) (x1 Int) (x0 Int)) (=> (and (P0 x2) (P2 x2 x3 x1) (P1 x2 x3) (or (< x1 0) (> x1 0)) (or (< x1 1) (> x1 1)) (= x1 (+ 1 x0))) (P1 x2 x3)))) +(assert (forall ((x1 Int) (x2 Int) (x0 Int) (x3 Int)) (=> (and (P0 x1) (P1 x1 x2) (P2 x1 x2 x3) (or (< x3 0) (> x3 0)) (or (< x3 1) (> x3 1)) (= x3 (+ 1 x0))) (P2 x1 x2 x0)))) +(assert (forall ((x5 Int) (x1 Int) (x3 Int) (x0 Int) (x2 Int) (x4 Int)) (=> (and (P1 x5 x2) (P2 x5 x2 x1) (P3 x5 x2 x3 x4) (P0 x5) (or (< x1 0) (> x1 0)) (or (< x1 1) (> x1 1)) (= x3 (+ 1 x0)) (= x1 (+ 1 x3))) (P0 x5)))) +(assert (forall ((x4 Int) (x5 Int) (x1 Int) (x2 Int) (x0 Int) (x3 Int)) (=> (and (P0 x4) (P2 x4 x5 x1) (P3 x4 x5 x2 x3) (P1 x4 x5) (or (< x1 0) (> x1 0)) (or (< x1 1) (> x1 1)) (= x2 (+ 1 x0)) (= x1 (+ 1 x2))) (P1 x4 x5)))) +(assert (forall ((x2 Int) (x3 Int) (x0 Int) (x1 Int) (x4 Int) (x5 Int)) (=> (and (P0 x2) (P1 x2 x3) (P2 x2 x3 x1) (P3 x2 x3 x4 x5) (or (< x1 0) (> x1 0)) (or (< x1 1) (> x1 1)) (= x4 (+ 1 x0)) (= x1 (+ 1 x4))) (P2 x2 x3 x0)))) +(assert (forall ((x4 Int) (x5 Int) (x1 Int) (x0 Int) (x2 Int) (x6 Int) (x3 Int) (x7 Int)) (=> (and (P0 x4) (P1 x4 x5) (P2 x4 x5 x1) (P3 x4 x5 x2 x3) (P3 x4 x5 x6 x7) (or (< x1 0) (> x1 0)) (or (< x1 1) (> x1 1)) (= x2 (+ 1 x6)) (= x1 (+ 1 x2)) (= x0 (+ x3 x7))) (P3 x4 x5 x1 x0)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (>= x0 0) (>= x1 0)) (P0 x0)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (>= x0 0) (>= x1 0)) (P1 x0 x1)))) +(assert (forall ((x1 Int) (x2 Int) (x0 Int)) (=> (and (>= x1 0) (>= x2 0)) (P2 x1 x2 x0)))) +(assert (forall ((x0 Int) (x1 Int) (x3 Int) (x2 Int)) (=> (and (P3 x0 x1 x2 x3) (>= x0 0) (>= x1 0) (<= (+ 1 x3) 0)) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0058.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0058.smt2 new file mode 100644 index 000000000..5db7d4eb6 --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0058.smt2 @@ -0,0 +1,55 @@ +;; Original file: adr_114.smt2 +(set-logic HORN) +(declare-fun |f$unknown:3| (Int Int Int) Bool) +(declare-fun |f$unknown:1| (Int) Bool) +(declare-fun |f$unknown:4| (Int Int) Bool) +(declare-fun |f$unknown:2| (Int Int) Bool) +(declare-fun |h$unknown:5| (Int) Bool) +(declare-fun |h$unknown:6| (Int Int) Bool) + + +(assert (forall ((|$knormal:1| Int) + (|$alpha-1:x| Int) + (|$V-reftype:15| Int) + (|$knormal:2| Int)) + (=> (and (= |$knormal:1| (+ |$alpha-1:x| 1)) + (= |$V-reftype:15| |$knormal:2|) + (|f$unknown:3| |$knormal:2| |$knormal:1| |$alpha-1:x|) + (|f$unknown:1| |$alpha-1:x|)) + (|f$unknown:4| |$V-reftype:15| |$alpha-1:x|)))) +(assert (forall ((|$knormal:1| Int) (|$alpha-1:x| Int)) + (=> (and (= |$knormal:1| (+ |$alpha-1:x| 1)) + (|f$unknown:1| |$alpha-1:x|)) + (|f$unknown:2| |$knormal:1| |$alpha-1:x|)))) +(assert (forall ((|$knormal:4| Int) (|$alpha-4:n| Int) (|$V-reftype:3| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:4|)) (> |$alpha-4:n| 0)) + (not (= 0 |$knormal:4|)) + (|f$unknown:2| |$V-reftype:3| |$alpha-4:n|)))) + (=> a!1 (|h$unknown:5| |$V-reftype:3|))))) +(assert (forall ((|$knormal:4| Int) + (|$alpha-4:n| Int) + (|$V-reftype:10| Int) + (h Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:4|)) (> |$alpha-4:n| 0)) + (not (= 0 |$knormal:4|)) + (|h$unknown:6| |$V-reftype:10| h) + (|f$unknown:2| h |$alpha-4:n|)))) + (=> a!1 (|f$unknown:3| |$V-reftype:10| h |$alpha-4:n|))))) +(assert (forall ((|$knormal:3| Int) + (|$alpha-3:y| Int) + (|$V-reftype:17| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:3|)) (> |$alpha-3:y| 0)) + (= |$V-reftype:17| 1) + (not (= 0 |$knormal:3|)) + (|h$unknown:5| |$alpha-3:y|)))) + (=> a!1 (|h$unknown:6| |$V-reftype:17| |$alpha-3:y|))))) +(assert (forall ((|$knormal:3| Int) (|$alpha-3:y| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:3|)) (> |$alpha-3:y| 0)) + (not (not (= 0 |$knormal:3|))) + (|h$unknown:5| |$alpha-3:y|)))) + (=> a!1 false)))) +(assert (forall ((|$knormal:4| Int) (|$alpha-4:n| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:4|)) (> |$alpha-4:n| 0)) + (not (= 0 |$knormal:4|))))) + (=> a!1 (|f$unknown:1| |$alpha-4:n|))))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0059.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0059.smt2 new file mode 100644 index 000000000..d92a0229d --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0059.smt2 @@ -0,0 +1,55 @@ +;; Original file: adr_115.smt2 +(set-logic HORN) +(declare-fun |f$unknown:3| (Int Int Int) Bool) +(declare-fun |f$unknown:1| (Int) Bool) +(declare-fun |f$unknown:4| (Int Int) Bool) +(declare-fun |f$unknown:2| (Int Int) Bool) +(declare-fun |h$unknown:5| (Int) Bool) +(declare-fun |h$unknown:6| (Int Int) Bool) + + +(assert (forall ((|$knormal:1| Int) + (|$alpha-1:x| Int) + (|$V-reftype:15| Int) + (|$knormal:2| Int)) + (=> (and (= |$knormal:1| (+ |$alpha-1:x| 1)) + (= |$V-reftype:15| |$knormal:2|) + (|f$unknown:3| |$knormal:2| |$knormal:1| |$alpha-1:x|) + (|f$unknown:1| |$alpha-1:x|)) + (|f$unknown:4| |$V-reftype:15| |$alpha-1:x|)))) +(assert (forall ((|$knormal:1| Int) (|$alpha-1:x| Int)) + (=> (and (= |$knormal:1| (+ |$alpha-1:x| 1)) + (|f$unknown:1| |$alpha-1:x|)) + (|f$unknown:2| |$knormal:1| |$alpha-1:x|)))) +(assert (forall ((|$knormal:4| Int) (|$alpha-4:n| Int) (|$V-reftype:3| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:4|)) (>= |$alpha-4:n| 0)) + (not (= 0 |$knormal:4|)) + (|f$unknown:2| |$V-reftype:3| |$alpha-4:n|)))) + (=> a!1 (|h$unknown:5| |$V-reftype:3|))))) +(assert (forall ((|$knormal:4| Int) + (|$alpha-4:n| Int) + (|$V-reftype:10| Int) + (h Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:4|)) (>= |$alpha-4:n| 0)) + (not (= 0 |$knormal:4|)) + (|h$unknown:6| |$V-reftype:10| h) + (|f$unknown:2| h |$alpha-4:n|)))) + (=> a!1 (|f$unknown:3| |$V-reftype:10| h |$alpha-4:n|))))) +(assert (forall ((|$knormal:3| Int) + (|$alpha-3:y| Int) + (|$V-reftype:17| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:3|)) (> |$alpha-3:y| 0)) + (= |$V-reftype:17| 1) + (not (= 0 |$knormal:3|)) + (|h$unknown:5| |$alpha-3:y|)))) + (=> a!1 (|h$unknown:6| |$V-reftype:17| |$alpha-3:y|))))) +(assert (forall ((|$knormal:3| Int) (|$alpha-3:y| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:3|)) (> |$alpha-3:y| 0)) + (not (not (= 0 |$knormal:3|))) + (|h$unknown:5| |$alpha-3:y|)))) + (=> a!1 false)))) +(assert (forall ((|$knormal:4| Int) (|$alpha-4:n| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:4|)) (>= |$alpha-4:n| 0)) + (not (= 0 |$knormal:4|))))) + (=> a!1 (|f$unknown:1| |$alpha-4:n|))))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0060.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0060.smt2 new file mode 100644 index 000000000..589eff4e2 --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0060.smt2 @@ -0,0 +1,20 @@ +;; Original file: gib.smt2 +(set-logic HORN) +(declare-fun P0 (Int) Bool) +(declare-fun P1 (Int Int) Bool) +(declare-fun P2 (Int Int Int) Bool) +(declare-fun P3 (Int Int Int Int) Bool) +(assert (forall ((x0 Int) (x1 Int) (x2 Int) (x3 Int)) (=> (and (P0 x0) (P1 x0 x1) (P2 x0 x1 x2) (P0 x3) (= x2 0) (= x3 x0)) (P3 x0 x1 x2 x3)))) +(assert (forall ((x2 Int) (x0 Int) (x1 Int) (x3 Int)) (=> (and (P0 x2) (P1 x2 x0) (P2 x2 x0 x1) (P1 x2 x3) (= x1 1) (= x3 x0)) (P3 x2 x0 x1 x3)))) +(assert (forall ((x3 Int) (x2 Int) (x0 Int) (x1 Int)) (=> (and (P1 x3 x1) (P2 x3 x1 x2) (P0 x3) (or (< x2 0) (> x2 0)) (or (< x2 1) (> x2 1)) (= x2 (+ 1 x0))) (P0 x3)))) +(assert (forall ((x2 Int) (x3 Int) (x1 Int) (x0 Int)) (=> (and (P0 x2) (P2 x2 x3 x1) (P1 x2 x3) (or (< x1 0) (> x1 0)) (or (< x1 1) (> x1 1)) (= x1 (+ 1 x0))) (P1 x2 x3)))) +(assert (forall ((x1 Int) (x2 Int) (x0 Int) (x3 Int)) (=> (and (P0 x1) (P1 x1 x2) (P2 x1 x2 x3) (or (< x3 0) (> x3 0)) (or (< x3 1) (> x3 1)) (= x3 (+ 1 x0))) (P2 x1 x2 x0)))) +(assert (forall ((x5 Int) (x1 Int) (x3 Int) (x0 Int) (x2 Int) (x4 Int)) (=> (and (P1 x5 x2) (P2 x5 x2 x1) (P3 x5 x2 x3 x4) (P0 x5) (or (< x1 0) (> x1 0)) (or (< x1 1) (> x1 1)) (= x3 (+ 1 x0)) (= x1 (+ 1 x3))) (P0 x5)))) +(assert (forall ((x4 Int) (x5 Int) (x1 Int) (x2 Int) (x0 Int) (x3 Int)) (=> (and (P0 x4) (P2 x4 x5 x1) (P3 x4 x5 x2 x3) (P1 x4 x5) (or (< x1 0) (> x1 0)) (or (< x1 1) (> x1 1)) (= x2 (+ 1 x0)) (= x1 (+ 1 x2))) (P1 x4 x5)))) +(assert (forall ((x2 Int) (x3 Int) (x0 Int) (x1 Int) (x4 Int) (x5 Int)) (=> (and (P0 x2) (P1 x2 x3) (P2 x2 x3 x1) (P3 x2 x3 x4 x5) (or (< x1 0) (> x1 0)) (or (< x1 1) (> x1 1)) (= x4 (+ 1 x0)) (= x1 (+ 1 x4))) (P2 x2 x3 x0)))) +(assert (forall ((x4 Int) (x5 Int) (x1 Int) (x0 Int) (x2 Int) (x6 Int) (x3 Int) (x7 Int)) (=> (and (P0 x4) (P1 x4 x5) (P2 x4 x5 x1) (P3 x4 x5 x2 x3) (P3 x4 x5 x6 x7) (or (< x1 0) (> x1 0)) (or (< x1 1) (> x1 1)) (= x2 (+ 1 x6)) (= x1 (+ 1 x2)) (= x0 (+ x3 x7))) (P3 x4 x5 x1 x0)))) +(assert (forall ((x2 Int) (x0 Int) (x1 Int)) (=> (and (>= x0 0) (>= x1 0) (= x2 0)) (P0 x2)))) +(assert (forall ((x2 Int) (x3 Int) (x0 Int) (x1 Int)) (=> (and (>= x0 0) (>= x1 0) (= x2 0) (= x3 1)) (P1 x2 x3)))) +(assert (forall ((x3 Int) (x4 Int) (x0 Int) (x1 Int) (x2 Int)) (=> (and (>= x1 0) (>= x2 0) (= x3 0) (= x4 1)) (P2 x3 x4 x0)))) +(assert (forall ((x0 Int) (x1 Int) (x3 Int) (x2 Int)) (=> (and (P3 0 1 x2 x3) (>= x0 0) (>= x1 0) (<= (+ 1 x3) 0)) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0063.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0063.smt2 new file mode 100644 index 000000000..8e93cd0d6 --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0063.smt2 @@ -0,0 +1,66 @@ +;; Original file: adr_140.smt2 +(set-logic HORN) +(declare-fun |add$unknown:3| (Int Int Int) Bool) +(declare-fun |sum$unknown:5| (Int Int) Bool) + + +(assert (forall ((|$V-reftype:12| Int) + (|$alpha-1:x| Int) + (|$alpha-2:y| Int)) + (=> (and (= |$V-reftype:12| (+ |$alpha-1:x| |$alpha-2:y|)) + true + true) + (|add$unknown:3| |$V-reftype:12| |$alpha-2:y| |$alpha-1:x|)))) +(assert (forall ((|$knormal:2| Int) + (|$alpha-3:n| Int) + (|$knormal:1| Int) + (|$V-reftype:16| Int) + (|$knormal:7| Int) + (|$knormal:3| Int)) + (let ((a!1 (and (= |$knormal:2| (- |$alpha-3:n| 1)) + (= (not (= 0 |$knormal:1|)) (<= |$alpha-3:n| 0)) + (= |$V-reftype:16| |$knormal:7|) + (not (not (= 0 |$knormal:1|))) + (|sum$unknown:5| |$knormal:3| |$knormal:2|) + true + (|add$unknown:3| |$knormal:7| + |$knormal:3| + |$alpha-3:n|)))) + (=> a!1 (|sum$unknown:5| |$V-reftype:16| |$alpha-3:n|))))) +(assert (forall ((|$knormal:2| Int) + (|$alpha-3:n| Int) + (|$knormal:1| Int) + (|$knormal:3| Int)) + (let ((a!1 (and (= |$knormal:2| (- |$alpha-3:n| 1)) + (= (not (= 0 |$knormal:1|)) (<= |$alpha-3:n| 0)) + (not (not (= 0 |$knormal:1|))) + (|sum$unknown:5| |$knormal:3| |$knormal:2|) + true + (not true)))) + (=> a!1 true)))) +(assert (forall ((|$knormal:2| Int) + (|$alpha-3:n| Int) + (|$knormal:1| Int) + (|$knormal:3| Int)) + (let ((a!1 (and (= |$knormal:2| (- |$alpha-3:n| 1)) + (= (not (= 0 |$knormal:1|)) (<= |$alpha-3:n| 0)) + (not (not (= 0 |$knormal:1|))) + (|sum$unknown:5| |$knormal:3| |$knormal:2|) + true + (not true)))) + (=> a!1 true)))) +(assert (forall ((|$knormal:1| Int) + (|$alpha-3:n| Int) + (|$V-reftype:14| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:1|)) (<= |$alpha-3:n| 0)) + (= |$V-reftype:14| 0) + (not (= 0 |$knormal:1|)) + true))) + (=> a!1 (|sum$unknown:5| |$V-reftype:14| |$alpha-3:n|))))) +(assert (forall ((|$knormal:10| Int) (|$alpha-4:n| Int) (|$knormal:8| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:10|)) + (<= |$alpha-4:n| |$knormal:8|)) + (not (not (= 0 |$knormal:10|))) + (|sum$unknown:5| |$knormal:8| |$alpha-4:n|)))) + (=> a!1 false)))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0064.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0064.smt2 new file mode 100644 index 000000000..26c360005 --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0064.smt2 @@ -0,0 +1,65 @@ +;; Original file: adr_133.smt2 +(set-logic HORN) +(declare-fun |repeat$unknown:2| (Int Int) Bool) +(declare-fun |succ$unknown:6| (Int Int) Bool) +(declare-fun |repeat$unknown:4| (Int Int) Bool) + + +(assert (forall ((|$knormal:3| Int) + (|$alpha-3:n| Int) + (|$knormal:1| Int) + (|$V-reftype:6| Int) + (|$alpha-2:f| Int)) + (let ((a!1 (and (= |$knormal:3| (- |$alpha-3:n| 1)) + (= (not (= 0 |$knormal:1|)) (= |$alpha-3:n| 0)) + (not (not (= 0 |$knormal:1|))) + true + (|repeat$unknown:2| |$V-reftype:6| |$alpha-2:f|) + true))) + (=> a!1 (|repeat$unknown:2| |$V-reftype:6| |$alpha-2:f|))))) +(assert (forall ((|$V-reftype:13| Int) (succ Int)) + (=> (and (|succ$unknown:6| |$V-reftype:13| succ) true) + (|repeat$unknown:2| |$V-reftype:13| succ)))) +(assert (forall ((|$knormal:3| Int) + (|$alpha-3:n| Int) + (|$knormal:1| Int) + (|$V-reftype:18| Int) + (|$knormal:7| Int) + (|$knormal:5| Int)) + (let ((a!1 (and (= |$knormal:3| (- |$alpha-3:n| 1)) + (= (not (= 0 |$knormal:1|)) (= |$alpha-3:n| 0)) + (= |$V-reftype:18| |$knormal:7|) + (not (not (= 0 |$knormal:1|))) + (|repeat$unknown:4| |$knormal:5| |$knormal:3|) + true + (|repeat$unknown:2| |$knormal:7| |$knormal:5|)))) + (=> a!1 (|repeat$unknown:4| |$V-reftype:18| |$alpha-3:n|))))) +(assert (forall ((|$knormal:3| Int) + (|$alpha-3:n| Int) + (|$knormal:1| Int) + (|$knormal:5| Int)) + (let ((a!1 (and (= |$knormal:3| (- |$alpha-3:n| 1)) + (= (not (= 0 |$knormal:1|)) (= |$alpha-3:n| 0)) + (not (not (= 0 |$knormal:1|))) + (|repeat$unknown:4| |$knormal:5| |$knormal:3|) + true + (not true)))) + (=> a!1 true)))) +(assert (forall ((|$knormal:1| Int) + (|$alpha-3:n| Int) + (|$V-reftype:16| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:1|)) (= |$alpha-3:n| 0)) + (= |$V-reftype:16| 0) + (not (= 0 |$knormal:1|)) + true))) + (=> a!1 (|repeat$unknown:4| |$V-reftype:16| |$alpha-3:n|))))) +(assert (forall ((|$knormal:12| Int) (|$knormal:10| Int) (|$alpha-4:n| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:12|)) + (= |$knormal:10| |$alpha-4:n|)) + (not (not (= 0 |$knormal:12|))) + (|repeat$unknown:4| |$knormal:10| |$alpha-4:n|)))) + (=> a!1 false)))) +(assert (forall ((|$V-reftype:14| Int) (|$alpha-1:x| Int)) + (=> (and (= |$V-reftype:14| (+ |$alpha-1:x| 1)) true) + (|succ$unknown:6| |$V-reftype:14| |$alpha-1:x|)))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0068.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0068.smt2 new file mode 100644 index 000000000..58b1e1b7b --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0068.smt2 @@ -0,0 +1,95 @@ +;; Original file: adr_132.smt2 +(set-logic HORN) +(declare-fun |repeat$unknown:2| (Int Int) Bool) +(declare-fun |succ$unknown:7| (Int Int) Bool) +(declare-fun |repeat$unknown:5| (Int Int Int) Bool) + + +(assert (forall ((|$knormal:3| Int) + (|$alpha-3:n| Int) + (|$knormal:1| Int) + (|$V-reftype:6| Int) + (|$alpha-2:f| Int)) + (let ((a!1 (and (= |$knormal:3| (- |$alpha-3:n| 1)) + (= (not (= 0 |$knormal:1|)) (= |$alpha-3:n| 0)) + (not (not (= 0 |$knormal:1|))) + true + true + (|repeat$unknown:2| |$V-reftype:6| |$alpha-2:f|) + true))) + (=> a!1 (|repeat$unknown:2| |$V-reftype:6| |$alpha-2:f|))))) +(assert (forall ((|$knormal:13| Int) (|$V-reftype:15| Int) (succ Int)) + (=> (and (= |$knormal:13| 0) + (|succ$unknown:7| |$V-reftype:15| succ) + true) + (|repeat$unknown:2| |$V-reftype:15| succ)))) +(assert (forall ((|$knormal:3| Int) + (|$alpha-3:n| Int) + (|$knormal:1| Int) + (|$V-reftype:20| Int) + (|$knormal:9| Int) + (|$knormal:7| Int) + (|$alpha-4:s| Int)) + (let ((a!1 (and (= |$knormal:3| (- |$alpha-3:n| 1)) + (= (not (= 0 |$knormal:1|)) (= |$alpha-3:n| 0)) + (= |$V-reftype:20| |$knormal:9|) + (not (not (= 0 |$knormal:1|))) + (|repeat$unknown:5| + |$knormal:7| + |$alpha-4:s| + |$knormal:3|) + true + true + (|repeat$unknown:2| |$knormal:9| |$knormal:7|)))) + (=> a!1 + (|repeat$unknown:5| + |$V-reftype:20| + |$alpha-4:s| + |$alpha-3:n|))))) +(assert (forall ((|$knormal:3| Int) + (|$alpha-3:n| Int) + (|$knormal:1| Int) + (|$knormal:7| Int) + (|$alpha-4:s| Int)) + (let ((a!1 (and (= |$knormal:3| (- |$alpha-3:n| 1)) + (= (not (= 0 |$knormal:1|)) (= |$alpha-3:n| 0)) + (not (not (= 0 |$knormal:1|))) + (|repeat$unknown:5| + |$knormal:7| + |$alpha-4:s| + |$knormal:3|) + true + true + (not true)))) + (=> a!1 true)))) +(assert (forall ((|$knormal:1| Int) + (|$alpha-3:n| Int) + (|$V-reftype:18| Int) + (|$alpha-4:s| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:1|)) (= |$alpha-3:n| 0)) + (= |$V-reftype:18| |$alpha-4:s|) + (not (= 0 |$knormal:1|)) + true + true))) + (=> a!1 + (|repeat$unknown:5| + |$V-reftype:18| + |$alpha-4:s| + |$alpha-3:n|))))) +(assert (forall ((|$knormal:17| Int) + (|$knormal:15| Int) + (|$alpha-5:n| Int) + (|$knormal:13| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:17|)) + (>= |$knormal:15| |$alpha-5:n|)) + (= |$knormal:13| 0) + (not (not (= 0 |$knormal:17|))) + (|repeat$unknown:5| + |$knormal:15| + |$knormal:13| + |$alpha-5:n|)))) + (=> a!1 false)))) +(assert (forall ((|$V-reftype:16| Int) (|$alpha-1:x| Int)) + (=> (and (= |$V-reftype:16| (+ |$alpha-1:x| 1)) true) + (|succ$unknown:7| |$V-reftype:16| |$alpha-1:x|)))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0071.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0071.smt2 new file mode 100644 index 000000000..7b5c2562d --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0071.smt2 @@ -0,0 +1,36 @@ +;; Original file: inc.smt2 +(set-logic HORN) +(declare-fun P8 (Int) Bool) +(declare-fun P2 (Int Int) Bool) +(declare-fun P3 (Int Int Int) Bool) +(declare-fun P4 (Int Int Int Int) Bool) +(declare-fun P1 (Int Int) Bool) +(declare-fun P0 (Int) Bool) +(declare-fun P5 (Int Int Int Int Int) Bool) +(declare-fun P11 (Int Int Int) Bool) +(declare-fun P6 (Int Int Int Int) Bool) +(declare-fun P7 (Int) Bool) +(declare-fun P12 (Int Int Int) Bool) +(declare-fun P9 (Int Int) Bool) +(declare-fun P10 (Int Int) Bool) +(assert (forall ((x1 Int) (x0 Int)) (=> (and (P8 x1) (= x0 0)) (P10 x1 x0)))) +(assert (forall ((x2 Int) (x3 Int) (x0 Int) (x1 Int) (x4 Int)) (=> (and (P2 x2 x3) (P3 x2 x3 x0) (P4 x2 x3 x0 x1) (P3 x2 x3 x4) (= x1 x3) (= x4 x0)) (P5 x2 x3 x0 x1 x4)))) +(assert (forall ((x3 Int) (x1 Int) (x0 Int) (x2 Int)) (=> (and (P2 x0 x1) (P3 x0 x1 x2) (P4 x0 x1 x2 x3) (or (< x3 x1) (> x3 x1))) (P0 x3)))) +(assert (forall ((x0 Int) (x1 Int) (x2 Int) (x3 Int) (x4 Int)) (=> (and (P2 x0 x1) (P3 x0 x1 x2) (P4 x0 x1 x2 x3) (P1 x3 x4) (or (< x3 x1) (> x3 x1))) (P5 x0 x1 x2 x3 x4)))) +(assert (forall ((x0 Int) (x2 Int) (x1 Int)) (=> (and (P7 x0) (P12 x0 x1 x2) (<= 0 x2) (<= (+ 1 x2) x0)) (P9 x0 x2)))) +(assert (forall ((x2 Int) (x5 Int) (x3 Int) (x0 Int) (x4 Int) (x1 Int)) (=> (and (P7 x2) (P12 x2 x1 x3) (P11 x2 x3 x4) (P0 x5) (<= 0 x3) (<= (+ 1 x3) x2) (= x0 (+ 1 x4))) (P9 x2 x5)))) +(assert (forall ((x5 Int) (x6 Int) (x2 Int) (x4 Int) (x0 Int) (x3 Int) (x1 Int)) (=> (and (P7 x4) (P12 x4 x1 x2) (P11 x4 x2 x3) (P0 x5) (P11 x4 x5 x6) (<= 0 x2) (<= (+ 1 x2) x4) (= x0 (+ 1 x3))) (P1 x5 x6)))) +(assert (forall ((x3 Int) (x4 Int) (x2 Int) (x0 Int) (x1 Int)) (=> (and (P7 x2) (P11 x2 x4 x1) (P12 x2 x3 x4) (<= 0 x4) (<= (+ 1 x4) x2) (= x0 (+ 1 x1))) (P2 x3 x4)))) +(assert (forall ((x1 Int) (x3 Int) (x0 Int) (x2 Int) (x4 Int)) (=> (and (P7 x2) (P12 x2 x1 x3) (P11 x2 x3 x4) (<= 0 x3) (<= (+ 1 x3) x2) (= x0 (+ 1 x4))) (P3 x1 x3 x0)))) +(assert (forall ((x5 Int) (x3 Int) (x0 Int) (x4 Int) (x1 Int) (x2 Int)) (=> (and (P12 x5 x2 x3) (P11 x5 x3 x4) (P7 x5) (<= 0 x3) (<= (+ 1 x3) x5) (= x0 (+ 1 x4)) (= x1 (+ 1 x3))) (P7 x5)))) +(assert (forall ((x2 Int) (x3 Int) (x0 Int) (x6 Int) (x5 Int) (x4 Int) (x1 Int)) (=> (and (P12 x5 x2 x3) (P11 x5 x3 x4) (P7 x5) (P9 x5 x6) (<= 0 x3) (<= (+ 1 x3) x5) (= x0 (+ 1 x4)) (= x1 (+ 1 x3))) (P4 x2 x3 x0 x6)))) +(assert (forall ((x2 Int) (x6 Int) (x7 Int) (x4 Int) (x5 Int) (x1 Int) (x0 Int) (x3 Int)) (=> (and (P12 x2 x3 x4) (P11 x2 x4 x1) (P7 x2) (P9 x2 x6) (P5 x3 x4 x5 x6 x7) (<= 0 x4) (<= (+ 1 x4) x2) (= x5 (+ 1 x1)) (= x0 (+ 1 x4))) (P11 x2 x6 x7)))) +(assert (forall ((x6 Int) (x0 Int) (x2 Int) (x4 Int) (x1 Int) (x5 Int) (x3 Int)) (=> (and (P12 x6 x3 x4) (P11 x6 x4 x5) (P7 x6) (<= 0 x4) (<= (+ 1 x4) x6) (= x1 (+ 1 x5)) (= x2 (+ 1 x4))) (P12 x6 x0 x2)))) +(assert (forall ((x4 Int) (x1 Int) (x2 Int) (x7 Int) (x0 Int) (x3 Int) (x6 Int) (x5 Int)) (=> (and (P12 x4 x1 x2) (P11 x4 x2 x3) (P7 x4) (P6 x4 x5 x6 x7) (<= 0 x2) (<= (+ 1 x2) x4) (= x0 (+ 1 x3)) (= x6 (+ 1 x2))) (P6 x4 x1 x2 x7)))) +(assert (forall ((x1 Int) (x2 Int) (x3 Int) (x0 Int)) (=> (and (P7 x1) (P12 x1 x2 x3) (>= x3 x1)) (P6 x1 x2 x3 x0)))) +(assert (forall ((x0 Int)) (=> true (P7 x0)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (P9 x0 x1) (P8 x1)))) +(assert (forall ((x0 Int) (x1 Int) (x2 Int)) (=> (and (P9 x0 x1) (P10 x1 x2)) (P11 x0 x1 x2)))) +(assert (forall ((x0 Int) (x1 Int) (x2 Int)) (=> (= x2 0) (P12 x0 x1 x2)))) +(assert (forall ((x4 Int) (x2 Int) (x0 Int) (x1 Int) (x3 Int)) (=> (and (P7 x2) (P12 x2 x3 x4) (<= (+ 1 x4) x2) (or (not (> x0 0)) (not (> x1 0))) (or (and (> x0 0) (<= 0 x4)) (and (not (> x0 0)) (not (<= 0 x4)))) (or (and (> x1 0) (< x4 x2)) (and (not (> x1 0)) (not (< x4 x2))))) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0072.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0072.smt2 new file mode 100644 index 000000000..cca2fac90 --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0072.smt2 @@ -0,0 +1,88 @@ +;; Original file: adr_93.smt2 +(set-logic HORN) +(declare-fun |f$unknown:2| (Int Int) Bool) +(declare-fun |f$unknown:4| (Int Int) Bool) +(declare-fun |succ$unknown:6| (Int Int) Bool) + + +(assert (forall ((|$knormal:1| Int) (|$alpha-2:x| Int) (|$knormal:3| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:1|)) (>= |$alpha-2:x| 0)) + (not (not (= 0 |$knormal:1|))) + true + (|f$unknown:2| |$knormal:3| |$alpha-2:x|) + true + (not true)))) + (=> a!1 true)))) +(assert (forall ((|$knormal:1| Int) (|$alpha-2:x| Int) (|$knormal:3| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:1|)) (>= |$alpha-2:x| 0)) + (not (not (= 0 |$knormal:1|))) + true + (|f$unknown:2| |$knormal:3| |$alpha-2:x|) + true + (not true)))) + (=> a!1 true)))) +(assert (forall ((|$knormal:1| Int) + (|$alpha-2:x| Int) + (|$knormal:3| Int) + (|$V-reftype:3| Int) + (|$alpha-1:g| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:1|)) (>= |$alpha-2:x| 0)) + (not (not (= 0 |$knormal:1|))) + true + (|f$unknown:2| |$knormal:3| |$alpha-2:x|) + (|f$unknown:2| |$V-reftype:3| |$alpha-1:g|) + true))) + (=> a!1 (|f$unknown:2| |$V-reftype:3| |$alpha-1:g|))))) +(assert (forall ((|$knormal:1| Int) + (|$alpha-2:x| Int) + (|$V-reftype:7| Int) + (|$knormal:2| Int) + (|$knormal:3| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:1|)) (>= |$alpha-2:x| 0)) + (not (not (= 0 |$knormal:1|))) + (|f$unknown:4| |$V-reftype:7| |$knormal:2|) + true + (|f$unknown:2| |$knormal:3| |$alpha-2:x|) + true))) + (=> a!1 (|f$unknown:2| |$V-reftype:7| |$knormal:2|))))) +(assert (forall ((|$V-reftype:13| Int) (succ Int)) + (=> (and (|succ$unknown:6| |$V-reftype:13| succ) true) + (|f$unknown:2| |$V-reftype:13| succ)))) +(assert (forall ((|$knormal:1| Int) + (|$alpha-2:x| Int) + (|$V-reftype:16| Int) + (|$knormal:8| Int) + (|$knormal:3| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:1|)) (>= |$alpha-2:x| 0)) + (= |$V-reftype:16| |$knormal:8|) + (not (not (= 0 |$knormal:1|))) + (|f$unknown:4| |$knormal:8| |$knormal:3|) + true + (|f$unknown:2| |$knormal:3| |$alpha-2:x|)))) + (=> a!1 (|f$unknown:4| |$V-reftype:16| |$alpha-2:x|))))) +(assert (forall ((|$knormal:1| Int) (|$alpha-2:x| Int) (|$knormal:3| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:1|)) (>= |$alpha-2:x| 0)) + (not (not (= 0 |$knormal:1|))) + true + (|f$unknown:2| |$knormal:3| |$alpha-2:x|) + (not true)))) + (=> a!1 true)))) +(assert (forall ((|$knormal:1| Int) + (|$alpha-2:x| Int) + (|$V-reftype:15| Int) + (|$knormal:9| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:1|)) (>= |$alpha-2:x| 0)) + (= |$V-reftype:15| |$knormal:9|) + (not (= 0 |$knormal:1|)) + true + (|f$unknown:2| |$knormal:9| |$alpha-2:x|)))) + (=> a!1 (|f$unknown:4| |$V-reftype:15| |$alpha-2:x|))))) +(assert (forall ((|$knormal:14| Int) (|$knormal:12| Int) (|$alpha-4:n| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:14|)) (>= |$knormal:12| 0)) + (not (not (= 0 |$knormal:14|))) + (|f$unknown:4| |$knormal:12| |$alpha-4:n|)))) + (=> a!1 false)))) +(assert (forall ((|$V-reftype:17| Int) (|$alpha-3:x| Int)) + (=> (and (= |$V-reftype:17| (+ |$alpha-3:x| 1)) true) + (|succ$unknown:6| |$V-reftype:17| |$alpha-3:x|)))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0073.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0073.smt2 new file mode 100644 index 000000000..61bbc4248 --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0073.smt2 @@ -0,0 +1,88 @@ +;; Original file: adr_131.smt2 +(set-logic HORN) +(declare-fun |f$unknown:2| (Int Int) Bool) +(declare-fun |f$unknown:4| (Int Int) Bool) +(declare-fun |succ$unknown:6| (Int Int) Bool) + + +(assert (forall ((|$knormal:1| Int) (|$alpha-2:x| Int) (|$knormal:3| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:1|)) (>= |$alpha-2:x| 0)) + (not (not (= 0 |$knormal:1|))) + true + (|f$unknown:2| |$knormal:3| |$alpha-2:x|) + true + (not true)))) + (=> a!1 true)))) +(assert (forall ((|$knormal:1| Int) (|$alpha-2:x| Int) (|$knormal:3| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:1|)) (>= |$alpha-2:x| 0)) + (not (not (= 0 |$knormal:1|))) + true + (|f$unknown:2| |$knormal:3| |$alpha-2:x|) + true + (not true)))) + (=> a!1 true)))) +(assert (forall ((|$knormal:1| Int) + (|$alpha-2:x| Int) + (|$knormal:3| Int) + (|$V-reftype:3| Int) + (|$alpha-1:g| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:1|)) (>= |$alpha-2:x| 0)) + (not (not (= 0 |$knormal:1|))) + true + (|f$unknown:2| |$knormal:3| |$alpha-2:x|) + (|f$unknown:2| |$V-reftype:3| |$alpha-1:g|) + true))) + (=> a!1 (|f$unknown:2| |$V-reftype:3| |$alpha-1:g|))))) +(assert (forall ((|$knormal:1| Int) + (|$alpha-2:x| Int) + (|$V-reftype:7| Int) + (|$knormal:2| Int) + (|$knormal:3| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:1|)) (>= |$alpha-2:x| 0)) + (not (not (= 0 |$knormal:1|))) + (|f$unknown:4| |$V-reftype:7| |$knormal:2|) + true + (|f$unknown:2| |$knormal:3| |$alpha-2:x|) + true))) + (=> a!1 (|f$unknown:2| |$V-reftype:7| |$knormal:2|))))) +(assert (forall ((|$V-reftype:13| Int) (succ Int)) + (=> (and (|succ$unknown:6| |$V-reftype:13| succ) true) + (|f$unknown:2| |$V-reftype:13| succ)))) +(assert (forall ((|$knormal:1| Int) + (|$alpha-2:x| Int) + (|$V-reftype:16| Int) + (|$knormal:8| Int) + (|$knormal:3| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:1|)) (>= |$alpha-2:x| 0)) + (= |$V-reftype:16| |$knormal:8|) + (not (not (= 0 |$knormal:1|))) + (|f$unknown:4| |$knormal:8| |$knormal:3|) + true + (|f$unknown:2| |$knormal:3| |$alpha-2:x|)))) + (=> a!1 (|f$unknown:4| |$V-reftype:16| |$alpha-2:x|))))) +(assert (forall ((|$knormal:1| Int) (|$alpha-2:x| Int) (|$knormal:3| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:1|)) (>= |$alpha-2:x| 0)) + (not (not (= 0 |$knormal:1|))) + true + (|f$unknown:2| |$knormal:3| |$alpha-2:x|) + (not true)))) + (=> a!1 true)))) +(assert (forall ((|$knormal:1| Int) + (|$alpha-2:x| Int) + (|$V-reftype:15| Int) + (|$knormal:9| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:1|)) (>= |$alpha-2:x| 0)) + (= |$V-reftype:15| |$knormal:9|) + (not (= 0 |$knormal:1|)) + true + (|f$unknown:2| |$knormal:9| |$alpha-2:x|)))) + (=> a!1 (|f$unknown:4| |$V-reftype:15| |$alpha-2:x|))))) +(assert (forall ((|$knormal:14| Int) (|$knormal:12| Int) (|$alpha-4:n| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:14|)) (>= |$knormal:12| 0)) + (not (not (= 0 |$knormal:14|))) + (|f$unknown:4| |$knormal:12| |$alpha-4:n|)))) + (=> a!1 false)))) +(assert (forall ((|$V-reftype:17| Int) (|$alpha-3:x| Int)) + (=> (and (= |$V-reftype:17| (+ |$alpha-3:x| 1)) true) + (|succ$unknown:6| |$V-reftype:17| |$alpha-3:x|)))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0075.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0075.smt2 new file mode 100644 index 000000000..a4c2b8441 --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0075.smt2 @@ -0,0 +1,50 @@ +;; Original file: hors.smt2 +(set-logic HORN) +(declare-fun P17 (Int Int Int) Bool) +(declare-fun P11 (Int) Bool) +(declare-fun P2 (Int Int) Bool) +(declare-fun P1 (Int Int) Bool) +(declare-fun P5 (Int Int) Bool) +(declare-fun P7 (Int Int Int) Bool) +(declare-fun P8 (Int Int Int) Bool) +(declare-fun P0 (Int) Bool) +(declare-fun P3 (Int Int Int) Bool) +(declare-fun P4 (Int) Bool) +(declare-fun P14 (Int Int Int) Bool) +(declare-fun P6 (Int Int) Bool) +(declare-fun P10 (Int) Bool) +(declare-fun P15 (Int Int Int) Bool) +(declare-fun P9 (Int Int Int Int) Bool) +(declare-fun P12 (Int Int) Bool) +(declare-fun P13 (Int Int) Bool) +(declare-fun P18 (Int) Bool) +(declare-fun P19 (Int Int) Bool) +(declare-fun P16 (Int Int Int Int) Bool) +(assert (forall ((x1 Int) (x0 Int)) (=> (P11 x1) (P13 x1 x0)))) +(assert (forall ((x0 Int) (x1 Int) (x2 Int)) (=> (and (P2 x1 x2) (= x0 1)) (P0 x0)))) +(assert (forall ((x0 Int) (x1 Int) (x2 Int)) (=> (and (P2 x0 x1) (P1 1 x2)) (P3 x0 x1 x2)))) +(assert (forall ((x0 Int) (x1 Int) (x2 Int)) (=> (and (P8 x1 x2 0) (= x0 0)) (P4 x0)))) +(assert (forall ((x1 Int) (x0 Int) (x2 Int) (x3 Int)) (=> (and (P8 x1 x2 0) (P5 0 x3) (= x0 0)) (P6 x1 x0)))) +(assert (forall ((x3 Int) (x0 Int) (x1 Int) (x4 Int) (x2 Int)) (=> (and (P8 x3 x0 x1) (P5 0 x2) (P7 x3 0 x4) (= x1 0)) (P9 x3 x0 x1 x4)))) +(assert (forall ((x0 Int) (x2 Int) (x1 Int)) (=> (and (P10 x0) (P15 x0 x1 x2) (<= x0 0)) (P12 x0 x2)))) +(assert (forall ((x1 Int) (x0 Int) (x2 Int) (x3 Int)) (=> (and (P10 x1) (P15 x1 x0 x2) (P14 x1 x2 x3) (<= x1 0)) (P16 x1 x0 x2 x3)))) +(assert (forall ((x1 Int) (x4 Int) (x0 Int) (x2 Int) (x3 Int)) (=> (and (P10 x1) (P15 x1 x2 x3) (P0 x4) (>= x1 1) (= x1 (+ 1 x0))) (P12 x1 x4)))) +(assert (forall ((x4 Int) (x5 Int) (x3 Int) (x0 Int) (x1 Int) (x2 Int)) (=> (and (P10 x3) (P15 x3 x1 x2) (P0 x4) (P14 x3 x4 x5) (>= x3 1) (= x3 (+ 1 x0))) (P1 x4 x5)))) +(assert (forall ((x0 Int) (x1 Int) (x2 Int) (x3 Int)) (=> (and (P10 x1) (P15 x1 x2 x3) (>= x1 1) (= x1 (+ 1 x0))) (P10 x0)))) +(assert (forall ((x1 Int) (x4 Int) (x0 Int) (x3 Int) (x2 Int)) (=> (and (P10 x0) (P15 x0 x1 x2) (P12 x3 x4) (>= x0 1) (= x0 (+ 1 x3))) (P2 x1 x4)))) +(assert (forall ((x2 Int) (x4 Int) (x5 Int) (x0 Int) (x3 Int) (x1 Int)) (=> (and (P10 x0) (P15 x0 x3 x1) (P12 x2 x4) (P3 x3 x4 x5) (>= x0 1) (= x0 (+ 1 x2))) (P14 x2 x4 x5)))) +(assert (forall ((x1 Int) (x4 Int) (x0 Int) (x2 Int) (x3 Int)) (=> (and (P10 x1) (P15 x1 x2 x3) (P4 x4) (>= x1 1) (= x1 (+ 1 x0))) (P12 x1 x4)))) +(assert (forall ((x4 Int) (x5 Int) (x3 Int) (x0 Int) (x1 Int) (x2 Int)) (=> (and (P10 x3) (P15 x3 x1 x2) (P4 x4) (P14 x3 x4 x5) (>= x3 1) (= x3 (+ 1 x0))) (P5 x4 x5)))) +(assert (forall ((x1 Int) (x0 Int) (x6 Int) (x2 Int) (x3 Int) (x4 Int) (x5 Int)) (=> (and (P10 x2) (P15 x2 x3 x4) (P6 x5 x6) (>= x2 1) (= x2 (+ 1 x1))) (P15 x1 x0 x6)))) +(assert (forall ((x3 Int) (x6 Int) (x7 Int) (x0 Int) (x4 Int) (x1 Int) (x2 Int) (x5 Int)) (=> (and (P10 x0) (P15 x0 x1 x2) (P6 x3 x6) (P16 x4 x5 x6 x7) (>= x0 1) (= x0 (+ 1 x4))) (P7 x3 x6 x7)))) +(assert (forall ((x0 Int) (x1 Int) (x5 Int) (x3 Int) (x2 Int) (x4 Int)) (=> (and (P10 x3) (P15 x3 x4 x5) (>= x3 1) (= x3 (+ 1 x2))) (P8 x0 x1 x5)))) +(assert (forall ((x1 Int) (x2 Int) (x5 Int) (x6 Int) (x0 Int) (x3 Int) (x4 Int)) (=> (and (P10 x1) (P15 x1 x2 x5) (P9 x3 x4 x5 x6) (>= x1 1) (= x1 (+ 1 x0))) (P16 x1 x2 x5 x6)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (and (P19 x1 x0) (P18 x1)) (P10 x1)))) +(assert (forall ((x2 Int) (x1 Int) (x0 Int)) (=> (and (P19 x1 x0) (P18 x1) (P12 x1 x2)) (P11 x2)))) +(assert (forall ((x1 Int) (x2 Int) (x3 Int) (x0 Int)) (=> (and (P19 x1 x0) (P18 x1) (P12 x1 x2) (P13 x2 x3)) (P14 x1 x2 x3)))) +(assert (forall ((x1 Int) (x0 Int) (x2 Int)) (=> (and (P18 x1) (P19 x1 x2)) (P15 x1 x0 x2)))) +(assert (forall ((x0 Int) (x2 Int) (x3 Int) (x1 Int)) (=> (and (P18 x0) (P19 x0 x2) (P16 x0 x1 x2 x3)) (P17 x0 x2 x3)))) +(assert (forall ((x0 Int)) (=> true (P18 x0)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (= x1 0) (P19 x0 x1)))) +(assert (forall ((x2 Int) (x0 Int) (x1 Int)) (=> (and (P8 x0 x1 x2) (or (< x2 0) (> x2 0))) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0079.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0079.smt2 new file mode 100644 index 000000000..05841f1a7 --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0079.smt2 @@ -0,0 +1,106 @@ +;; Original file: adr_75.smt2 +(set-logic HORN) +(declare-fun |zip$unknown:2| (Int Int) Bool) +(declare-fun |zip$unknown:3| (Int Int Int) Bool) + + +(assert (forall ((|$alpha-3:n| Int)) + (=> true (|zip$unknown:2| |$alpha-3:n| |$alpha-3:n|)))) +(assert (forall ((|$knormal:5| Int) + (|$alpha-2:y| Int) + (|$knormal:3| Int) + (|$alpha-1:x| Int) + (|$knormal:2| Int) + (|$knormal:1| Int) + (|$V-reftype:17| Int) + (|$knormal:7| Int)) + (let ((a!1 (and (= |$knormal:5| (- |$alpha-2:y| 1)) + (= |$knormal:3| (- |$alpha-1:x| 1)) + (= (not (= 0 |$knormal:2|)) (= |$alpha-2:y| 0)) + (= (not (= 0 |$knormal:1|)) (= |$alpha-1:x| 0)) + (= |$V-reftype:17| (+ 1 |$knormal:7|)) + (not (not (= 0 |$knormal:2|))) + (not (not (= 0 |$knormal:1|))) + (|zip$unknown:3| |$knormal:7| + |$knormal:5| + |$knormal:3|) + (|zip$unknown:2| |$alpha-2:y| |$alpha-1:x|) + true))) + (=> a!1 + (|zip$unknown:3| |$V-reftype:17| |$alpha-2:y| |$alpha-1:x|))))) +(assert (forall ((|$knormal:9| Int) + (|$alpha-2:y| Int) + (|$knormal:1| Int) + (|$alpha-1:x| Int) + (|$V-reftype:11| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:9|)) (= |$alpha-2:y| 0)) + (= (not (= 0 |$knormal:1|)) (= |$alpha-1:x| 0)) + (= |$V-reftype:11| 0) + (not (= 0 |$knormal:9|)) + (not (= 0 |$knormal:1|)) + (|zip$unknown:2| |$alpha-2:y| |$alpha-1:x|) + true))) + (=> a!1 + (|zip$unknown:3| |$V-reftype:11| |$alpha-2:y| |$alpha-1:x|))))) +(assert (forall ((|$knormal:9| Int) + (|$alpha-2:y| Int) + (|$knormal:1| Int) + (|$alpha-1:x| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:9|)) (= |$alpha-2:y| 0)) + (= (not (= 0 |$knormal:1|)) (= |$alpha-1:x| 0)) + (not (not (= 0 |$knormal:9|))) + (not (= 0 |$knormal:1|)) + (|zip$unknown:2| |$alpha-2:y| |$alpha-1:x|) + true))) + (=> a!1 false)))) +(assert (forall ((|$knormal:2| Int) + (|$alpha-2:y| Int) + (|$knormal:1| Int) + (|$alpha-1:x| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:2|)) (= |$alpha-2:y| 0)) + (= (not (= 0 |$knormal:1|)) (= |$alpha-1:x| 0)) + (not (not (= 0 |$knormal:1|))) + (not (= 0 |$knormal:2|)) + (|zip$unknown:2| |$alpha-2:y| |$alpha-1:x|) + true))) + (=> a!1 false)))) +(assert (forall ((|$knormal:5| Int) + (|$alpha-2:y| Int) + (|$knormal:3| Int) + (|$alpha-1:x| Int) + (|$knormal:2| Int) + (|$knormal:1| Int)) + (let ((a!1 (and (= |$knormal:5| (- |$alpha-2:y| 1)) + (= |$knormal:3| (- |$alpha-1:x| 1)) + (= (not (= 0 |$knormal:2|)) (= |$alpha-2:y| 0)) + (= (not (= 0 |$knormal:1|)) (= |$alpha-1:x| 0)) + (not (not (= 0 |$knormal:2|))) + (not (not (= 0 |$knormal:1|))) + (|zip$unknown:2| |$alpha-2:y| |$alpha-1:x|) + true + (not true)))) + (=> a!1 true)))) +(assert (forall ((|$knormal:5| Int) + (|$alpha-2:y| Int) + (|$knormal:3| Int) + (|$alpha-1:x| Int) + (|$knormal:2| Int) + (|$knormal:1| Int)) + (let ((a!1 (and (= |$knormal:5| (- |$alpha-2:y| 1)) + (= |$knormal:3| (- |$alpha-1:x| 1)) + (= (not (= 0 |$knormal:2|)) (= |$alpha-2:y| 0)) + (= (not (= 0 |$knormal:1|)) (= |$alpha-1:x| 0)) + (not (not (= 0 |$knormal:2|))) + (not (not (= 0 |$knormal:1|))) + (|zip$unknown:2| |$alpha-2:y| |$alpha-1:x|) + true))) + (=> a!1 (|zip$unknown:2| |$knormal:5| |$knormal:3|))))) +(assert (forall ((|$knormal:14| Int) (|$knormal:12| Int) (|$alpha-3:n| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:14|)) + (= |$knormal:12| |$alpha-3:n|)) + (not (not (= 0 |$knormal:14|))) + (|zip$unknown:3| |$knormal:12| + |$alpha-3:n| + |$alpha-3:n|)))) + (=> a!1 false)))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0082.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0082.smt2 new file mode 100644 index 000000000..3334e40f7 --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0082.smt2 @@ -0,0 +1,116 @@ +;; Original file: adr_77.smt2 +(set-logic HORN) +(declare-fun |zip$unknown:2| (Int Int) Bool) +(declare-fun |zip$unknown:3| (Int Int Int) Bool) + + +(assert (forall ((|$alpha-3:n| Int)) + (=> true (|zip$unknown:2| |$alpha-3:n| |$alpha-3:n|)))) +(assert (forall ((|$knormal:5| Int) + (|$alpha-2:y| Int) + (|$knormal:3| Int) + (|$alpha-1:x| Int) + (|$knormal:2| Int) + (|$knormal:1| Int) + (|$V-reftype:17| Int) + (|$knormal:7| Int)) + (let ((a!1 (and (= |$knormal:5| (- |$alpha-2:y| 1)) + (= |$knormal:3| (- |$alpha-1:x| 1)) + (= (not (= 0 |$knormal:2|)) (= |$alpha-2:y| 0)) + (= (not (= 0 |$knormal:1|)) (= |$alpha-1:x| 0)) + (= |$V-reftype:17| (+ 1 |$knormal:7|)) + (not (not (= 0 |$knormal:2|))) + (not (not (= 0 |$knormal:1|))) + (|zip$unknown:3| |$knormal:7| + |$knormal:5| + |$knormal:3|) + (|zip$unknown:2| |$alpha-2:y| |$alpha-1:x|) + true))) + (=> a!1 + (|zip$unknown:3| |$V-reftype:17| |$alpha-2:y| |$alpha-1:x|))))) +(assert (forall ((|$knormal:9| Int) + (|$alpha-2:y| Int) + (|$knormal:1| Int) + (|$alpha-1:x| Int) + (|$V-reftype:11| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:9|)) (= |$alpha-2:y| 0)) + (= (not (= 0 |$knormal:1|)) (= |$alpha-1:x| 0)) + (= |$V-reftype:11| 0) + (not (= 0 |$knormal:9|)) + (not (= 0 |$knormal:1|)) + (|zip$unknown:2| |$alpha-2:y| |$alpha-1:x|) + true))) + (=> a!1 + (|zip$unknown:3| |$V-reftype:11| |$alpha-2:y| |$alpha-1:x|))))) +(assert (forall ((|$knormal:9| Int) + (|$alpha-2:y| Int) + (|$knormal:1| Int) + (|$alpha-1:x| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:9|)) (= |$alpha-2:y| 0)) + (= (not (= 0 |$knormal:1|)) (= |$alpha-1:x| 0)) + (not (not (= 0 |$knormal:9|))) + (not (= 0 |$knormal:1|)) + (|zip$unknown:2| |$alpha-2:y| |$alpha-1:x|) + true))) + (=> a!1 false)))) +(assert (forall ((|$knormal:2| Int) + (|$alpha-2:y| Int) + (|$knormal:1| Int) + (|$alpha-1:x| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:2|)) (= |$alpha-2:y| 0)) + (= (not (= 0 |$knormal:1|)) (= |$alpha-1:x| 0)) + (not (not (= 0 |$knormal:1|))) + (not (= 0 |$knormal:2|)) + (|zip$unknown:2| |$alpha-2:y| |$alpha-1:x|) + true))) + (=> a!1 false)))) +(assert (forall ((|$knormal:5| Int) + (|$alpha-2:y| Int) + (|$knormal:3| Int) + (|$alpha-1:x| Int) + (|$knormal:2| Int) + (|$knormal:1| Int)) + (let ((a!1 (and (= |$knormal:5| (- |$alpha-2:y| 1)) + (= |$knormal:3| (- |$alpha-1:x| 1)) + (= (not (= 0 |$knormal:2|)) (= |$alpha-2:y| 0)) + (= (not (= 0 |$knormal:1|)) (= |$alpha-1:x| 0)) + (not (not (= 0 |$knormal:2|))) + (not (not (= 0 |$knormal:1|))) + (|zip$unknown:2| |$alpha-2:y| |$alpha-1:x|) + true + (not true)))) + (=> a!1 true)))) +(assert (forall ((|$knormal:5| Int) + (|$alpha-2:y| Int) + (|$knormal:3| Int) + (|$alpha-1:x| Int) + (|$knormal:2| Int) + (|$knormal:1| Int)) + (let ((a!1 (and (= |$knormal:5| (- |$alpha-2:y| 1)) + (= |$knormal:3| (- |$alpha-1:x| 1)) + (= (not (= 0 |$knormal:2|)) (= |$alpha-2:y| 0)) + (= (not (= 0 |$knormal:1|)) (= |$alpha-1:x| 0)) + (not (not (= 0 |$knormal:2|))) + (not (not (= 0 |$knormal:1|))) + (|zip$unknown:2| |$alpha-2:y| |$alpha-1:x|) + true))) + (=> a!1 (|zip$unknown:2| |$knormal:5| |$knormal:3|))))) +(assert (forall ((|$knormal:12| Int) + (|$knormal:10| Int) + (|$knormal:11| Int) + (|$knormal:15| Int) + (|$alpha-3:n| Int)) + (let ((a!1 (= (not (= 0 |$knormal:12|)) + (and (not (= 0 |$knormal:10|)) + (not (= 0 |$knormal:11|)))))) + (let ((a!2 (and a!1 + (= (not (= 0 |$knormal:11|)) + (<= |$knormal:15| |$alpha-3:n|)) + (= (not (= 0 |$knormal:10|)) + (>= |$knormal:15| |$alpha-3:n|)) + (not (not (= 0 |$knormal:12|))) + (|zip$unknown:3| |$knormal:15| + |$alpha-3:n| + |$alpha-3:n|)))) + (=> a!2 false))))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0083.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0083.smt2 new file mode 100644 index 000000000..e74da5133 --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0083.smt2 @@ -0,0 +1,49 @@ +;; Original file: bcopy.smt2 +(set-logic HORN) +(declare-fun P14 (Int Int Int) Bool) +(declare-fun P15 (Int) Bool) +(declare-fun P7 (Int) Bool) +(declare-fun P2 (Int) Bool) +(declare-fun P3 (Int Int) Bool) +(declare-fun P4 (Int Int Int) Bool) +(declare-fun P0 (Int) Bool) +(declare-fun P1 (Int Int) Bool) +(declare-fun P10 (Int Int Int) Bool) +(declare-fun P5 (Int Int Int) Bool) +(declare-fun P6 (Int Int Int Int) Bool) +(declare-fun P8 (Int) Bool) +(declare-fun P9 (Int Int) Bool) +(declare-fun P11 (Int Int Int Int) Bool) +(declare-fun P16 (Int) Bool) +(declare-fun P18 (Int Int) Bool) +(declare-fun P12 (Int Int) Bool) +(declare-fun P13 (Int Int Int Int Int) Bool) +(declare-fun P17 (Int Int) Bool) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P15 x0) (P15 x1) (= x1 x0)) (P17 x0 x1)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P7 x0) (P7 x1) (= x1 x0)) (P12 x0 x1)))) +(assert (forall ((x1 Int) (x2 Int) (x3 Int) (x0 Int)) (=> (and (P2 x1) (P3 x1 x2) (P4 x1 x2 x3) (<= 0 x2) (<= (+ 1 x2) x1)) (P6 x1 x2 x3 x0)))) +(assert (forall ((x1 Int) (x2 Int) (x0 Int)) (=> (and (P0 x1) (P1 x1 x2) (<= 0 x2) (<= (+ 1 x2) x1) (= x0 0)) (P5 x1 x2 x0)))) +(assert (forall ((x1 Int) (x2 Int) (x3 Int) (x4 Int) (x0 Int)) (=> (and (P8 x1) (P9 x1 x2) (P10 x1 x2 x3) (P11 x1 x2 x3 x4) (>= x3 x4)) (P13 x1 x2 x3 x4 x0)))) +(assert (forall ((x3 Int) (x1 Int) (x2 Int) (x0 Int)) (=> (and (P9 x3 x0) (P10 x3 x0 x1) (P11 x3 x0 x1 x2) (P8 x3) (<= (+ 1 x1) x2)) (P0 x3)))) +(assert (forall ((x1 Int) (x3 Int) (x0 Int) (x2 Int)) (=> (and (P8 x1) (P9 x1 x2) (P11 x1 x2 x3 x0) (P10 x1 x2 x3) (<= (+ 1 x3) x0)) (P1 x1 x3)))) +(assert (forall ((x4 Int) (x1 Int) (x0 Int) (x3 Int) (x2 Int)) (=> (and (P8 x3) (P10 x3 x4 x1) (P11 x3 x4 x1 x0) (P5 x3 x1 x2) (P9 x3 x4) (<= (+ 1 x1) x0)) (P2 x4)))) +(assert (forall ((x3 Int) (x4 Int) (x0 Int) (x2 Int) (x1 Int)) (=> (and (P8 x2) (P9 x2 x3) (P11 x2 x3 x4 x0) (P5 x2 x4 x1) (P10 x2 x3 x4) (<= (+ 1 x4) x0)) (P3 x3 x4)))) +(assert (forall ((x0 Int) (x3 Int) (x4 Int) (x1 Int) (x2 Int)) (=> (and (P8 x2) (P9 x2 x0) (P10 x2 x0 x3) (P11 x2 x0 x3 x1) (P5 x2 x3 x4) (<= (+ 1 x3) x1)) (P4 x0 x3 x4)))) +(assert (forall ((x6 Int) (x3 Int) (x1 Int) (x0 Int) (x2 Int) (x4 Int) (x5 Int)) (=> (and (P9 x6 x2) (P10 x6 x2 x3) (P11 x6 x2 x3 x1) (P5 x6 x3 x4) (P6 x2 x3 x4 x5) (P8 x6) (<= (+ 1 x3) x1) (= x0 (+ 1 x3))) (P8 x6)))) +(assert (forall ((x5 Int) (x6 Int) (x2 Int) (x1 Int) (x0 Int) (x3 Int) (x4 Int)) (=> (and (P10 x5 x6 x2) (P11 x5 x6 x2 x1) (P5 x5 x2 x3) (P6 x6 x2 x3 x4) (P8 x5) (P9 x5 x6) (<= (+ 1 x2) x1) (= x0 (+ 1 x2))) (P9 x5 x6)))) +(assert (forall ((x5 Int) (x6 Int) (x0 Int) (x2 Int) (x1 Int) (x3 Int) (x4 Int)) (=> (and (P10 x5 x6 x2) (P11 x5 x6 x2 x1) (P5 x5 x2 x3) (P6 x6 x2 x3 x4) (P8 x5) (P9 x5 x6) (<= (+ 1 x2) x1) (= x0 (+ 1 x2))) (P10 x5 x6 x0)))) +(assert (forall ((x3 Int) (x4 Int) (x0 Int) (x6 Int) (x5 Int) (x1 Int) (x2 Int)) (=> (and (P10 x3 x4 x5) (P5 x3 x5 x1) (P6 x4 x5 x1 x2) (P8 x3) (P9 x3 x4) (P11 x3 x4 x5 x6) (<= (+ 1 x5) x6) (= x0 (+ 1 x5))) (P11 x3 x4 x0 x6)))) +(assert (forall ((x3 Int) (x4 Int) (x2 Int) (x6 Int) (x7 Int) (x5 Int) (x0 Int) (x1 Int)) (=> (and (P10 x3 x4 x2) (P5 x3 x2 x0) (P6 x4 x2 x0 x1) (P8 x3) (P9 x3 x4) (P11 x3 x4 x2 x6) (P13 x3 x4 x5 x6 x7) (<= (+ 1 x2) x6) (= x5 (+ 1 x2))) (P13 x3 x4 x2 x6 x7)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (and (P18 x1 x0) (P16 x1)) (P7 x1)))) +(assert (forall ((x2 Int) (x0 Int) (x1 Int)) (=> (and (P18 x2 x0) (P12 x2 x1) (P16 x2)) (P8 x2)))) +(assert (forall ((x1 Int) (x2 Int) (x0 Int)) (=> (and (P12 x1 x0) (P16 x1) (P18 x1 x2)) (P9 x1 x2)))) +(assert (forall ((x2 Int) (x3 Int) (x0 Int) (x1 Int)) (=> (and (P12 x2 x1) (P16 x2) (P18 x2 x3) (= x0 0)) (P10 x2 x3 x0)))) +(assert (forall ((x2 Int) (x1 Int) (x0 Int) (x3 Int)) (=> (and (P16 x2) (P18 x2 x1) (P12 x2 x3) (= x0 0)) (P11 x2 x1 x0 x3)))) +(assert (forall ((x0 Int) (x1 Int) (x3 Int) (x2 Int)) (=> (and (P16 x0) (P18 x0 x1) (P12 x0 x2) (P13 x0 x1 0 x2 x3)) (P14 x0 x1 x3)))) +(assert (forall ((x0 Int)) (=> true (P15 x0)))) +(assert (forall ((x0 Int) (x1 Int) (x2 Int)) (=> (P17 x1 x2) (P15 x0)))) +(assert (forall ((x3 Int) (x2 Int) (x0 Int) (x1 Int)) (=> (and (P17 x0 x1) (P17 x2 x3) (<= x2 x0)) (P16 x3)))) +(assert (forall ((x1 Int) (x3 Int) (x0 Int) (x2 Int)) (=> (and (P17 x0 x1) (P17 x2 x3) (<= x0 x2)) (P18 x1 x3)))) +(assert (forall ((x0 Int) (x1 Int) (x3 Int) (x2 Int) (x4 Int)) (=> (and (P2 x2) (P3 x2 x3) (P4 x2 x3 x4) (or (not (> x0 0)) (not (> x1 0))) (or (and (> x0 0) (<= 0 x3)) (and (not (> x0 0)) (not (<= 0 x3)))) (or (and (> x1 0) (< x3 x2)) (and (not (> x1 0)) (not (< x3 x2))))) false))) +(assert (forall ((x0 Int) (x1 Int) (x3 Int) (x2 Int)) (=> (and (P0 x2) (P1 x2 x3) (or (not (> x0 0)) (not (> x1 0))) (or (and (> x0 0) (<= 0 x3)) (and (not (> x0 0)) (not (<= 0 x3)))) (or (and (> x1 0) (< x3 x2)) (and (not (> x1 0)) (not (< x3 x2))))) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0084.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0084.smt2 new file mode 100644 index 000000000..4d61c34fb --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0084.smt2 @@ -0,0 +1,45 @@ +;; Original file: bcopy2.smt2 +(set-logic HORN) +(declare-fun P7 (Int) Bool) +(declare-fun P11 (Int Int) Bool) +(declare-fun P0 (Int) Bool) +(declare-fun P1 (Int Int) Bool) +(declare-fun P4 (Int Int Int Int) Bool) +(declare-fun P3 (Int Int Int Int) Bool) +(declare-fun P2 (Int Int Int) Bool) +(declare-fun P14 (Int Int Int Int) Bool) +(declare-fun P15 (Int Int Int Int) Bool) +(declare-fun P10 (Int Int Int) Bool) +(declare-fun P5 (Int Int Int Int Int) Bool) +(declare-fun P8 (Int) Bool) +(declare-fun P6 (Int Int Int Int Int) Bool) +(declare-fun P9 (Int Int) Bool) +(declare-fun P12 (Int Int Int) Bool) +(declare-fun P13 (Int Int Int) Bool) +(assert (forall ((x1 Int) (x2 Int) (x0 Int)) (=> (and (P7 x1) (P11 x1 x2) (<= 0 x2) (<= (+ 1 x2) x1) (= x0 0)) (P13 x1 x2 x0)))) +(assert (forall ((x0 Int) (x1 Int) (x4 Int) (x2 Int) (x3 Int)) (=> (and (P0 x0) (P1 x0 x1) (P4 x0 x1 x2 x3) (P0 x4) (= x4 x0)) (P2 x0 x1 x4)))) +(assert (forall ((x4 Int) (x3 Int) (x1 Int) (x2 Int) (x0 Int) (x5 Int)) (=> (and (P0 x4) (P1 x4 x3) (P4 x4 x3 x1 x2) (P3 x4 x3 x4 x5)) (P5 x4 x3 x1 x2 x0)))) +(assert (forall ((x1 Int) (x2 Int) (x3 Int) (x4 Int) (x0 Int)) (=> (and (P8 x1) (P15 x1 x2 x3 x4) (>= x4 x1)) (P6 x1 x2 x3 x4 x0)))) +(assert (forall ((x0 Int) (x3 Int) (x1 Int) (x2 Int)) (=> (and (P8 x0) (P15 x0 x1 x2 x3) (<= (+ 1 x3) x0)) (P9 x0 x3)))) +(assert (forall ((x4 Int) (x1 Int) (x0 Int) (x2 Int) (x3 Int)) (=> (and (P8 x1) (P10 x1 x4 x0) (P15 x1 x2 x3 x4) (<= (+ 1 x4) x1)) (P0 x4)))) +(assert (forall ((x2 Int) (x4 Int) (x0 Int) (x1 Int) (x3 Int)) (=> (and (P15 x4 x0 x1 x2) (P10 x4 x2 x3) (P8 x4) (<= (+ 1 x2) x4)) (P1 x2 x4)))) +(assert (forall ((x4 Int) (x0 Int) (x5 Int) (x3 Int) (x1 Int) (x2 Int)) (=> (and (P8 x4) (P15 x4 x0 x1 x3) (P10 x4 x3 x2) (P2 x3 x4 x5) (<= (+ 1 x3) x4)) (P12 x4 x0 x5)))) +(assert (forall ((x2 Int) (x3 Int) (x5 Int) (x6 Int) (x4 Int) (x0 Int) (x1 Int)) (=> (and (P8 x3) (P15 x3 x4 x0 x2) (P10 x3 x2 x1) (P2 x2 x3 x5) (P14 x3 x4 x5 x6) (<= (+ 1 x2) x3)) (P3 x2 x3 x5 x6)))) +(assert (forall ((x3 Int) (x2 Int) (x1 Int) (x4 Int) (x0 Int)) (=> (and (P8 x2) (P15 x2 x0 x1 x3) (P10 x2 x3 x4) (<= (+ 1 x3) x2)) (P4 x3 x2 x1 x4)))) +(assert (forall ((x6 Int) (x2 Int) (x0 Int) (x1 Int) (x3 Int) (x4 Int) (x5 Int)) (=> (and (P15 x6 x1 x3 x2) (P10 x6 x2 x4) (P5 x2 x6 x3 x4 x5) (P8 x6) (<= (+ 1 x2) x6) (= x0 (+ 1 x2))) (P8 x6)))) +(assert (forall ((x6 Int) (x7 Int) (x2 Int) (x0 Int) (x1 Int) (x3 Int) (x4 Int) (x5 Int)) (=> (and (P15 x6 x1 x3 x2) (P10 x6 x2 x4) (P5 x2 x6 x3 x4 x5) (P8 x6) (P9 x6 x7) (<= (+ 1 x2) x6) (= x0 (+ 1 x2))) (P9 x6 x7)))) +(assert (forall ((x6 Int) (x7 Int) (x8 Int) (x2 Int) (x0 Int) (x1 Int) (x3 Int) (x4 Int) (x5 Int)) (=> (and (P15 x6 x1 x3 x2) (P10 x6 x2 x4) (P5 x2 x6 x3 x4 x5) (P8 x6) (P9 x6 x7) (P10 x6 x7 x8) (<= (+ 1 x2) x6) (= x0 (+ 1 x2))) (P10 x6 x7 x8)))) +(assert (forall ((x6 Int) (x1 Int) (x8 Int) (x2 Int) (x0 Int) (x3 Int) (x4 Int) (x5 Int) (x7 Int)) (=> (and (P15 x6 x1 x3 x2) (P10 x6 x2 x4) (P5 x2 x6 x3 x4 x5) (P8 x6) (P12 x6 x7 x8) (<= (+ 1 x2) x6) (= x0 (+ 1 x2))) (P12 x6 x1 x8)))) +(assert (forall ((x6 Int) (x5 Int) (x8 Int) (x9 Int) (x1 Int) (x0 Int) (x7 Int) (x2 Int) (x3 Int) (x4 Int)) (=> (and (P15 x6 x7 x2 x1) (P10 x6 x1 x3) (P5 x1 x6 x2 x3 x4) (P8 x6) (P12 x6 x5 x8) (P14 x6 x7 x8 x9) (<= (+ 1 x1) x6) (= x0 (+ 1 x1))) (P14 x6 x5 x8 x9)))) +(assert (forall ((x8 Int) (x0 Int) (x1 Int) (x2 Int) (x4 Int) (x3 Int) (x5 Int) (x6 Int) (x7 Int)) (=> (and (P15 x8 x3 x5 x4) (P10 x8 x4 x6) (P5 x4 x8 x5 x6 x7) (P8 x8) (<= (+ 1 x4) x8) (= x2 (+ 1 x4))) (P15 x8 x0 x1 x2)))) +(assert (forall ((x5 Int) (x0 Int) (x2 Int) (x1 Int) (x9 Int) (x8 Int) (x3 Int) (x4 Int) (x6 Int) (x7 Int)) (=> (and (P15 x5 x0 x2 x1) (P10 x5 x1 x3) (P5 x1 x5 x2 x3 x4) (P8 x5) (P6 x5 x6 x7 x8 x9) (<= (+ 1 x1) x5) (= x8 (+ 1 x1))) (P6 x5 x0 x2 x1 x9)))) +(assert (forall ((x0 Int)) (=> true (P7 x0)))) +(assert (forall ((x0 Int)) (=> true (P7 x0)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (and (<= x1 x0) (>= x1 1)) (P8 x1)))) +(assert (forall ((x1 Int) (x2 Int) (x0 Int)) (=> (and (P9 x1 x2) (<= x1 x0) (>= x1 1)) (P11 x1 x2)))) +(assert (forall ((x1 Int) (x2 Int) (x3 Int) (x0 Int)) (=> (and (P9 x1 x2) (P13 x1 x2 x3) (<= x1 x0) (>= x1 1)) (P10 x1 x2 x3)))) +(assert (forall ((x0 Int) (x3 Int) (x1 Int) (x2 Int)) (=> (and (P12 x1 x2 x3) (<= x1 x0) (>= x1 1)) (P11 x0 x3)))) +(assert (forall ((x0 Int) (x1 Int) (x3 Int) (x4 Int) (x2 Int)) (=> (and (P12 x0 x1 x3) (P13 x2 x3 x4) (<= x0 x2) (>= x0 1)) (P14 x0 x1 x3 x4)))) +(assert (forall ((x3 Int) (x0 Int) (x1 Int) (x4 Int) (x2 Int)) (=> (and (<= x3 x2) (>= x3 1) (= x4 0)) (P15 x3 x0 x1 x4)))) +(assert (forall ((x0 Int) (x1 Int) (x3 Int) (x2 Int)) (=> (and (P7 x2) (P11 x2 x3) (or (not (> x0 0)) (not (> x1 0))) (or (and (> x0 0) (<= 0 x3)) (and (not (> x0 0)) (not (<= 0 x3)))) (or (and (> x1 0) (< x3 x2)) (and (not (> x1 0)) (not (< x3 x2))))) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0088.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0088.smt2 new file mode 100644 index 000000000..047a5f248 --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0088.smt2 @@ -0,0 +1,145 @@ +;; Original file: adr_74.smt2 +(set-logic HORN) +(declare-fun |append$unknown:3| (Int Int Int) Bool) +(declare-fun |rev$unknown:5| (Int Int) Bool) + + +(assert (forall ((|$knormal:2| Int) + (|$alpha-1:x| Int) + (|$knormal:1| Int) + (|$V-reftype:17| Int) + (|$knormal:5| Int) + (|$alpha-2:y| Int)) + (let ((a!1 (and (= |$knormal:2| (- |$alpha-1:x| 1)) + (= (not (= 0 |$knormal:1|)) (= |$alpha-1:x| 0)) + (= |$V-reftype:17| (+ 1 |$knormal:5|)) + (not (not (= 0 |$knormal:1|))) + (|append$unknown:3| + |$knormal:5| + |$alpha-2:y| + |$knormal:2|) + true + true))) + (=> a!1 + (|append$unknown:3| + |$V-reftype:17| + |$alpha-2:y| + |$alpha-1:x|))))) +(assert (forall ((|$knormal:1| Int) + (|$alpha-1:x| Int) + (|$V-reftype:15| Int) + (|$alpha-2:y| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:1|)) (= |$alpha-1:x| 0)) + (= |$V-reftype:15| |$alpha-2:y|) + (not (= 0 |$knormal:1|)) + true + true))) + (=> a!1 + (|append$unknown:3| + |$V-reftype:15| + |$alpha-2:y| + |$alpha-1:x|))))) +(assert (forall ((|$knormal:8| Int) + (|$alpha-3:n| Int) + (|$knormal:7| Int) + (|$knormal:12| Int) + (|$V-reftype:22| Int) + (|$knormal:14| Int) + (|$knormal:9| Int)) + (let ((a!1 (and (= |$knormal:8| (- |$alpha-3:n| 1)) + (= (not (= 0 |$knormal:7|)) (= |$alpha-3:n| 0)) + (= |$knormal:12| 1) + (= |$V-reftype:22| |$knormal:14|) + (not (not (= 0 |$knormal:7|))) + (|rev$unknown:5| |$knormal:9| |$knormal:8|) + true + (|append$unknown:3| + |$knormal:14| + |$knormal:12| + |$knormal:9|)))) + (=> a!1 (|rev$unknown:5| |$V-reftype:22| |$alpha-3:n|))))) +(assert (forall ((|$knormal:23| Int) + (|$knormal:21| Int) + (|$alpha-4:n| Int) + (|$knormal:20| Int) + (|$knormal:17| Int) + (|$knormal:19| Int) + (|$alpha-5:m| Int) + (|$alpha-6:$$tmp::1| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:23|)) + (= |$knormal:21| |$alpha-4:n|)) + (= (not (= 0 |$knormal:20|)) + (= |$knormal:17| |$knormal:19|)) + (= |$knormal:19| (+ |$alpha-4:n| |$alpha-5:m|)) + (= |$alpha-6:$$tmp::1| 1) + (not (not (= 0 |$knormal:20|))) + (not (= 0 |$knormal:23|)) + (|rev$unknown:5| |$knormal:21| |$alpha-4:n|) + (|append$unknown:3| + |$knormal:17| + |$alpha-5:m| + |$alpha-4:n|)))) + (=> a!1 false)))) +(assert (forall ((|$knormal:8| Int) + (|$alpha-3:n| Int) + (|$knormal:7| Int) + (|$knormal:12| Int) + (|$knormal:9| Int)) + (let ((a!1 (and (= |$knormal:8| (- |$alpha-3:n| 1)) + (= (not (= 0 |$knormal:7|)) (= |$alpha-3:n| 0)) + (= |$knormal:12| 1) + (not (not (= 0 |$knormal:7|))) + (|rev$unknown:5| |$knormal:9| |$knormal:8|) + true + (not true)))) + (=> a!1 true)))) +(assert (forall ((|$knormal:8| Int) + (|$alpha-3:n| Int) + (|$knormal:7| Int) + (|$knormal:12| Int) + (|$knormal:9| Int)) + (let ((a!1 (and (= |$knormal:8| (- |$alpha-3:n| 1)) + (= (not (= 0 |$knormal:7|)) (= |$alpha-3:n| 0)) + (= |$knormal:12| 1) + (not (not (= 0 |$knormal:7|))) + (|rev$unknown:5| |$knormal:9| |$knormal:8|) + true + (not true)))) + (=> a!1 true)))) +(assert (forall ((|$knormal:7| Int) + (|$alpha-3:n| Int) + (|$V-reftype:19| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:7|)) (= |$alpha-3:n| 0)) + (= |$V-reftype:19| 0) + (not (= 0 |$knormal:7|)) + true))) + (=> a!1 (|rev$unknown:5| |$V-reftype:19| |$alpha-3:n|))))) +(assert (forall ((|$knormal:23| Int) + (|$knormal:21| Int) + (|$alpha-4:n| Int) + (|$alpha-6:$$tmp::1| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:23|)) + (= |$knormal:21| |$alpha-4:n|)) + (= |$alpha-6:$$tmp::1| 1) + (not (= 0 |$knormal:23|)) + (|rev$unknown:5| |$knormal:21| |$alpha-4:n|) + (not true)))) + (=> a!1 true)))) +(assert (forall ((|$knormal:23| Int) + (|$knormal:21| Int) + (|$alpha-4:n| Int) + (|$alpha-6:$$tmp::1| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:23|)) + (= |$knormal:21| |$alpha-4:n|)) + (= |$alpha-6:$$tmp::1| 1) + (not (= 0 |$knormal:23|)) + (|rev$unknown:5| |$knormal:21| |$alpha-4:n|) + (not true)))) + (=> a!1 true)))) +(assert (forall ((|$knormal:23| Int) (|$knormal:21| Int) (|$alpha-4:n| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:23|)) + (= |$knormal:21| |$alpha-4:n|)) + (not (not (= 0 |$knormal:23|))) + (|rev$unknown:5| |$knormal:21| |$alpha-4:n|)))) + (=> a!1 false)))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0089.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0089.smt2 new file mode 100644 index 000000000..b8dfbc9dc --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0089.smt2 @@ -0,0 +1,54 @@ +;; Original file: j_157.smt2 +(set-logic HORN) +(declare-fun star_exec_inv_2 (Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_1 (Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_3 (Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_4 (Int Int Int Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_5 (Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_6 (Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_7 (Int) Bool) +(declare-fun star_exec_inv_9 (Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_8 (Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_10 (Int) Bool) +(declare-fun star_exec_inv_12 (Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_11 (Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_13 (Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_14 (Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_15 (Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_16 (Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_17 (Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_18 (Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_19 (Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_20 (Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_21 (Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_22 (Int Int) Bool) +(declare-fun star_exec_inv_23 (Int Int) Bool) +(declare-fun star_exec_inv_24 (Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_25 (Int Int Int Int Int) Bool) + +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int) (I Int) (J Int) (K Int)) (=> (star_exec_inv_2 A B C D E) (star_exec_inv_1 A B C D E A B C D F G H I J K)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (L Int) (H Int) (I Int) (J Int) (K Int) (G Int)) (=> (and (star_exec_inv_1 A B C D E A B C D F L H I J K) (= G 1)) (star_exec_inv_3 A B C D E A B C D F G H I J K)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (K Int) (F Int) (G Int) (H Int) (I Int) (J Int)) (=> (and (star_exec_inv_3 A B C D E A B C D K F G H I J) (= B 109) (>= D 0)) (star_exec_inv_4 A B C D E A B C D F G H I J)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (K Int) (L Int) (G Int) (H Int) (I Int) (J Int) (E Int) (F Int)) (=> (star_exec_inv_4 A B C D K A B C D L G H I J) (star_exec_inv_5 A B C D E F D G H I J)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int) (I Int) (J Int)) (=> (star_exec_inv_4 A B C D E A B C D F G H I J) (star_exec_inv_6 A B C D E F)))) +(assert (forall ((B Int) (C Int) (D Int) (E Int) (F Int) (A Int)) (=> (star_exec_inv_6 B C D E F A) (star_exec_inv_7 A)))) +(assert (forall ((G Int) (H Int) (I Int) (J Int) (F Int) (A Int) (B Int) (C Int) (D Int) (E Int)) (=> (and (star_exec_inv_9 G H I J F) (star_exec_inv_6 A B C D E G)) (star_exec_inv_8 A B C D E F)))) +(assert (forall ((B Int) (C Int) (D Int) (E Int) (F Int) (A Int)) (=> (star_exec_inv_8 B C D E F A) (star_exec_inv_10 A)))) +(assert (forall ((J Int) (F Int) (G Int) (H Int) (I Int) (A Int) (B Int) (C Int) (D Int) (E Int)) (=> (and (star_exec_inv_12 J F G H I) (star_exec_inv_8 A B C D E J)) (star_exec_inv_11 A B C D E F G H I)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int) (I Int)) (=> (star_exec_inv_11 A B C D E F G H I) (star_exec_inv_13 A B C D E F G H I)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int) (I Int)) (=> (star_exec_inv_13 A B C D E F G H I) (star_exec_inv_14 A B C D E F G H I)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int) (I Int)) (=> (star_exec_inv_14 A B C D E F G H I) (star_exec_inv_15 A B C D E F G H I)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int)) (=> (star_exec_inv_7 A) (star_exec_inv_16 A B C D A)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int)) (=> (star_exec_inv_16 A B C D A) (star_exec_inv_17 A B C D A)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (H Int) (E Int) (F Int) (G Int)) (=> (and (star_exec_inv_17 A B C D H) (= E 0) (= F 0) (= G 0)) (star_exec_inv_18 A B C D E F G H)))) +(assert (forall ((F Int) (G Int) (H Int) (C Int) (I Int) (J Int) (K Int) (L Int) (A Int) (B Int) (E Int) (D Int)) (=> (and (star_exec_inv_18 F G H C I J K L) (= A (- 1)) (= B 293) (= E 1)) (star_exec_inv_19 A B C D E)))) +(assert (forall ((A Int) (F Int) (G Int) (H Int) (B Int) (C Int) (D Int) (E Int)) (=> (star_exec_inv_18 A F G H B C D E) (star_exec_inv_20 A B C D E)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int)) (=> (star_exec_inv_20 A B C D E) (star_exec_inv_21 A B C D E)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int)) (=> (star_exec_inv_21 A B C D E) (star_exec_inv_9 A B C D E)))) +(assert (forall ((A Int)) (=> (star_exec_inv_10 A) (star_exec_inv_22 A A)))) +(assert (forall ((A Int)) (=> (star_exec_inv_22 A A) (star_exec_inv_23 A A)))) +(assert (forall ((A Int) (E Int) (B Int) (C Int) (D Int)) (=> (and (star_exec_inv_23 A E) (= B 0) (= C 0) (= D 0)) (star_exec_inv_24 A B C D E)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int)) (=> (star_exec_inv_24 A B C D E) (star_exec_inv_25 A B C D E)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int)) (=> (star_exec_inv_25 A B C D E) (star_exec_inv_12 A B C D E)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int)) (=> true (star_exec_inv_2 A B C D E)))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0090.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0090.smt2 new file mode 100644 index 000000000..f9923bcb2 --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0090.smt2 @@ -0,0 +1,152 @@ +;; Original file: adr_105.smt2 +(set-logic HORN) +(declare-fun |loop$unknown:3| (Int Int Int) Bool) + + +(assert (forall ((|$knormal:3| Int) + (|$alpha-1:x| Int) + (|$knormal:2| Int) + (|$knormal:10| Int) + (|$alpha-2:i| Int) + (|$knormal:1| Int) + (|$V-reftype:17| Int) + (|$knormal:12| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:3|)) (> |$alpha-1:x| 2)) + (= (not (= 0 |$knormal:2|)) (< |$alpha-1:x| 1)) + (= |$knormal:10| (- |$alpha-2:i| 1)) + (= (not (= 0 |$knormal:1|)) (< |$alpha-2:i| 0)) + (= |$V-reftype:17| |$knormal:12|) + (not (not (= 0 |$knormal:2|))) + (not (not (= 0 |$knormal:1|))) + (not (= 0 |$knormal:3|)) + (|loop$unknown:3| |$knormal:12| + |$knormal:10| + |$alpha-1:x|) + true + true))) + (=> a!1 + (|loop$unknown:3| |$V-reftype:17| |$alpha-2:i| |$alpha-1:x|))))) +(assert (forall ((|$knormal:2| Int) + (|$alpha-1:x| Int) + (|$knormal:15| Int) + (|$alpha-2:i| Int) + (|$knormal:13| Int) + (|$knormal:1| Int) + (|$V-reftype:14| Int) + (|$knormal:17| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:2|)) (< |$alpha-1:x| 1)) + (= |$knormal:15| (- |$alpha-2:i| 1)) + (= |$knormal:13| (- |$alpha-1:x| 1)) + (= (not (= 0 |$knormal:1|)) (< |$alpha-2:i| 0)) + (= |$V-reftype:14| |$knormal:17|) + (not (not (= 0 |$knormal:1|))) + (not (= 0 |$knormal:2|)) + (|loop$unknown:3| |$knormal:17| + |$knormal:15| + |$knormal:13|) + true + true))) + (=> a!1 + (|loop$unknown:3| |$V-reftype:14| |$alpha-2:i| |$alpha-1:x|))))) +(assert (forall ((|$knormal:6| Int) + (|$alpha-2:i| Int) + (|$knormal:4| Int) + (|$alpha-1:x| Int) + (|$knormal:3| Int) + (|$knormal:2| Int) + (|$knormal:1| Int) + (|$V-reftype:20| Int) + (|$knormal:8| Int)) + (let ((a!1 (and (= |$knormal:6| (- |$alpha-2:i| 1)) + (= |$knormal:4| (- 3 |$alpha-1:x|)) + (= (not (= 0 |$knormal:3|)) (> |$alpha-1:x| 2)) + (= (not (= 0 |$knormal:2|)) (< |$alpha-1:x| 1)) + (= (not (= 0 |$knormal:1|)) (< |$alpha-2:i| 0)) + (= |$V-reftype:20| |$knormal:8|) + (not (not (= 0 |$knormal:3|))) + (not (not (= 0 |$knormal:2|))) + (not (not (= 0 |$knormal:1|))) + (|loop$unknown:3| |$knormal:8| + |$knormal:6| + |$knormal:4|) + true + true))) + (=> a!1 + (|loop$unknown:3| |$V-reftype:20| |$alpha-2:i| |$alpha-1:x|))))) +(assert (forall ((|$knormal:1| Int) + (|$alpha-2:i| Int) + (|$V-reftype:10| Int) + (|$alpha-1:x| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:1|)) (< |$alpha-2:i| 0)) + (= |$V-reftype:10| |$alpha-1:x|) + (not (= 0 |$knormal:1|)) + true + true))) + (=> a!1 + (|loop$unknown:3| |$V-reftype:10| |$alpha-2:i| |$alpha-1:x|))))) +(assert (forall ((|$knormal:29| Int) + (|$knormal:27| Int) + (|$knormal:24| Int) + (|$knormal:23| Int) + (|$knormal:21| Int) + (|$knormal:18| Int) + (|$alpha-4:$$tmp::1| Int) + (|$alpha-3:n| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:29|)) (>= |$knormal:27| 3)) + (= |$knormal:24| 3) + (= (not (= 0 |$knormal:23|)) (>= |$knormal:21| 0)) + (= |$knormal:18| 1) + (= |$alpha-4:$$tmp::1| 1) + (not (not (= 0 |$knormal:23|))) + (not (= 0 |$knormal:29|)) + (|loop$unknown:3| |$knormal:27| + |$alpha-3:n| + |$knormal:24|) + (|loop$unknown:3| |$knormal:21| + |$alpha-3:n| + |$knormal:18|)))) + (=> a!1 false)))) +(assert (forall ((|$knormal:29| Int) + (|$knormal:27| Int) + (|$knormal:24| Int) + (|$knormal:18| Int) + (|$alpha-4:$$tmp::1| Int) + (|$alpha-3:n| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:29|)) (>= |$knormal:27| 3)) + (= |$knormal:24| 3) + (= |$knormal:18| 1) + (= |$alpha-4:$$tmp::1| 1) + (not (= 0 |$knormal:29|)) + (|loop$unknown:3| |$knormal:27| + |$alpha-3:n| + |$knormal:24|) + (not true)))) + (=> a!1 true)))) +(assert (forall ((|$knormal:29| Int) + (|$knormal:27| Int) + (|$knormal:24| Int) + (|$knormal:18| Int) + (|$alpha-4:$$tmp::1| Int) + (|$alpha-3:n| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:29|)) (>= |$knormal:27| 3)) + (= |$knormal:24| 3) + (= |$knormal:18| 1) + (= |$alpha-4:$$tmp::1| 1) + (not (= 0 |$knormal:29|)) + (|loop$unknown:3| |$knormal:27| + |$alpha-3:n| + |$knormal:24|) + (not true)))) + (=> a!1 true)))) +(assert (forall ((|$knormal:29| Int) + (|$knormal:27| Int) + (|$knormal:24| Int) + (|$alpha-3:n| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:29|)) (>= |$knormal:27| 3)) + (= |$knormal:24| 3) + (not (not (= 0 |$knormal:29|))) + (|loop$unknown:3| |$knormal:27| + |$alpha-3:n| + |$knormal:24|)))) + (=> a!1 false)))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0092.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0092.smt2 new file mode 100644 index 000000000..f531cab20 --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0092.smt2 @@ -0,0 +1,165 @@ +;; Original file: adr_91.smt2 +(set-logic HORN) +(declare-fun |gib$unknown:4| (Int Int Int Int) Bool) + + +(assert (forall ((|$knormal:6| Int) + (|$alpha-3:n| Int) + (|$knormal:2| Int) + (|$knormal:13| Int) + (|$knormal:1| Int) + (|$V-reftype:21| Int) + (|$knormal:8| Int) + (|$knormal:15| Int) + (|$alpha-2:b| Int) + (|$alpha-1:a| Int)) + (let ((a!1 (and (= |$knormal:6| (- |$alpha-3:n| 1)) + (= (not (= 0 |$knormal:2|)) (= |$alpha-3:n| 1)) + (= |$knormal:13| (- |$alpha-3:n| 2)) + (= (not (= 0 |$knormal:1|)) (= |$alpha-3:n| 0)) + (= |$V-reftype:21| (+ |$knormal:8| |$knormal:15|)) + (not (not (= 0 |$knormal:2|))) + (not (not (= 0 |$knormal:1|))) + (|gib$unknown:4| |$knormal:8| + |$knormal:6| + |$alpha-2:b| + |$alpha-1:a|) + (|gib$unknown:4| |$knormal:15| + |$knormal:13| + |$alpha-2:b| + |$alpha-1:a|) + true + true + true))) + (=> a!1 + (|gib$unknown:4| |$V-reftype:21| + |$alpha-3:n| + |$alpha-2:b| + |$alpha-1:a|))))) +(assert (forall ((|$knormal:6| Int) + (|$alpha-3:n| Int) + (|$knormal:2| Int) + (|$knormal:13| Int) + (|$knormal:1| Int) + (|$knormal:8| Int) + (|$alpha-2:b| Int) + (|$alpha-1:a| Int)) + (let ((a!1 (and (= |$knormal:6| (- |$alpha-3:n| 1)) + (= (not (= 0 |$knormal:2|)) (= |$alpha-3:n| 1)) + (= |$knormal:13| (- |$alpha-3:n| 2)) + (= (not (= 0 |$knormal:1|)) (= |$alpha-3:n| 0)) + (not (not (= 0 |$knormal:2|))) + (not (not (= 0 |$knormal:1|))) + (|gib$unknown:4| |$knormal:8| + |$knormal:6| + |$alpha-2:b| + |$alpha-1:a|) + true + true + true + (not true)))) + (=> a!1 true)))) +(assert (forall ((|$knormal:6| Int) + (|$alpha-3:n| Int) + (|$knormal:2| Int) + (|$knormal:13| Int) + (|$knormal:1| Int) + (|$knormal:8| Int) + (|$alpha-2:b| Int) + (|$alpha-1:a| Int)) + (let ((a!1 (and (= |$knormal:6| (- |$alpha-3:n| 1)) + (= (not (= 0 |$knormal:2|)) (= |$alpha-3:n| 1)) + (= |$knormal:13| (- |$alpha-3:n| 2)) + (= (not (= 0 |$knormal:1|)) (= |$alpha-3:n| 0)) + (not (not (= 0 |$knormal:2|))) + (not (not (= 0 |$knormal:1|))) + (|gib$unknown:4| |$knormal:8| + |$knormal:6| + |$alpha-2:b| + |$alpha-1:a|) + true + true + true + (not true)))) + (=> a!1 true)))) +(assert (forall ((|$knormal:6| Int) + (|$alpha-3:n| Int) + (|$knormal:2| Int) + (|$knormal:13| Int) + (|$knormal:1| Int) + (|$knormal:8| Int) + (|$alpha-2:b| Int) + (|$alpha-1:a| Int)) + (let ((a!1 (and (= |$knormal:6| (- |$alpha-3:n| 1)) + (= (not (= 0 |$knormal:2|)) (= |$alpha-3:n| 1)) + (= |$knormal:13| (- |$alpha-3:n| 2)) + (= (not (= 0 |$knormal:1|)) (= |$alpha-3:n| 0)) + (not (not (= 0 |$knormal:2|))) + (not (not (= 0 |$knormal:1|))) + (|gib$unknown:4| |$knormal:8| + |$knormal:6| + |$alpha-2:b| + |$alpha-1:a|) + true + true + true + (not true)))) + (=> a!1 true)))) +(assert (forall ((|$knormal:1| Int) + (|$alpha-3:n| Int) + (|$V-reftype:16| Int) + (|$alpha-1:a| Int) + (|$alpha-2:b| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:1|)) (= |$alpha-3:n| 0)) + (= |$V-reftype:16| |$alpha-1:a|) + (not (= 0 |$knormal:1|)) + true + true + true))) + (=> a!1 + (|gib$unknown:4| |$V-reftype:16| + |$alpha-3:n| + |$alpha-2:b| + |$alpha-1:a|))))) +(assert (forall ((|$knormal:2| Int) + (|$alpha-3:n| Int) + (|$knormal:1| Int) + (|$V-reftype:18| Int) + (|$alpha-2:b| Int) + (|$alpha-1:a| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:2|)) (= |$alpha-3:n| 1)) + (= (not (= 0 |$knormal:1|)) (= |$alpha-3:n| 0)) + (= |$V-reftype:18| |$alpha-2:b|) + (not (not (= 0 |$knormal:1|))) + (not (= 0 |$knormal:2|)) + true + true + true))) + (=> a!1 + (|gib$unknown:4| |$V-reftype:18| + |$alpha-3:n| + |$alpha-2:b| + |$alpha-1:a|))))) +(assert (forall ((|$knormal:26| Int) + (|$knormal:24| Int) + (|$knormal:19| Int) + (|$knormal:17| Int) + (|$knormal:18| Int) + (|$alpha-6:b| Int) + (|$alpha-5:a| Int) + (|$alpha-4:n| Int)) + (let ((a!1 (= (not (= 0 |$knormal:19|)) + (and (not (= 0 |$knormal:17|)) + (not (= 0 |$knormal:18|)))))) + (let ((a!2 (and (= (not (= 0 |$knormal:26|)) (>= |$knormal:24| 0)) + a!1 + (= (not (= 0 |$knormal:18|)) (>= |$alpha-6:b| 0)) + (= (not (= 0 |$knormal:17|)) (>= |$alpha-5:a| 0)) + (not (not (= 0 |$knormal:26|))) + (not (= 0 |$knormal:19|)) + (|gib$unknown:4| |$knormal:24| + |$alpha-4:n| + |$alpha-6:b| + |$alpha-5:a|)))) + (=> a!2 false))))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0102.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0102.smt2 new file mode 100644 index 000000000..2c780363f --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0102.smt2 @@ -0,0 +1,440 @@ +;; Original file: adr_40.smt2 +(set-logic HORN) +(declare-fun |array_max$unknown:4| (Int Int Int Int) Bool) +(declare-fun |array_max$unknown:6| (Int Int Int Int) Bool) +(declare-fun |make_array$unknown:9| (Int Int Int) Bool) + + +(assert (forall ((|$knormal:3| Int) + (|$alpha-4:i| Int) + (|$knormal:10| Int) + (|$knormal:11| Int) + (|$alpha-6:m| Int) + (|$knormal:1| Int) + (|$alpha-3:n| Int)) + (let ((a!1 (and (= |$knormal:3| (+ |$alpha-4:i| 1)) + (= (not (= 0 |$knormal:10|)) + (> |$knormal:11| |$alpha-6:m|)) + (= (not (= 0 |$knormal:1|)) + (>= |$alpha-4:i| |$alpha-3:n|)) + (not (not (= 0 |$knormal:1|))) + (not (= 0 |$knormal:10|)) + true + (|array_max$unknown:4| + |$knormal:11| + |$alpha-4:i| + |$alpha-4:i| + |$alpha-3:n|) + true + true + true + (not true)))) + (=> a!1 true)))) +(assert (forall ((|$knormal:3| Int) + (|$alpha-4:i| Int) + (|$knormal:10| Int) + (|$knormal:11| Int) + (|$alpha-6:m| Int) + (|$knormal:1| Int) + (|$alpha-3:n| Int)) + (let ((a!1 (and (= |$knormal:3| (+ |$alpha-4:i| 1)) + (= (not (= 0 |$knormal:10|)) + (> |$knormal:11| |$alpha-6:m|)) + (= (not (= 0 |$knormal:1|)) + (>= |$alpha-4:i| |$alpha-3:n|)) + (not (not (= 0 |$knormal:10|))) + (not (not (= 0 |$knormal:1|))) + true + (|array_max$unknown:4| + |$knormal:11| + |$alpha-4:i| + |$alpha-4:i| + |$alpha-3:n|) + true + true + true + (not true)))) + (=> a!1 true)))) +(assert (forall ((|$knormal:3| Int) + (|$alpha-4:i| Int) + (|$knormal:10| Int) + (|$knormal:11| Int) + (|$alpha-6:m| Int) + (|$knormal:1| Int) + (|$alpha-3:n| Int) + (|$V-reftype:7| Int) + (|$alpha-5:a| Int)) + (let ((a!1 (and (= |$knormal:3| (+ |$alpha-4:i| 1)) + (= (not (= 0 |$knormal:10|)) + (> |$knormal:11| |$alpha-6:m|)) + (= (not (= 0 |$knormal:1|)) + (>= |$alpha-4:i| |$alpha-3:n|)) + (not (not (= 0 |$knormal:1|))) + (not (= 0 |$knormal:10|)) + true + (|array_max$unknown:4| + |$knormal:11| + |$alpha-4:i| + |$alpha-4:i| + |$alpha-3:n|) + (|array_max$unknown:4| + |$V-reftype:7| + |$alpha-5:a| + |$alpha-4:i| + |$alpha-3:n|) + true + true + true))) + (=> a!1 + (|array_max$unknown:4| + |$V-reftype:7| + |$alpha-5:a| + |$knormal:3| + |$alpha-3:n|))))) +(assert (forall ((|$knormal:3| Int) + (|$alpha-4:i| Int) + (|$knormal:10| Int) + (|$knormal:11| Int) + (|$alpha-6:m| Int) + (|$knormal:1| Int) + (|$alpha-3:n| Int) + (|$V-reftype:7| Int) + (|$alpha-5:a| Int)) + (let ((a!1 (and (= |$knormal:3| (+ |$alpha-4:i| 1)) + (= (not (= 0 |$knormal:10|)) + (> |$knormal:11| |$alpha-6:m|)) + (= (not (= 0 |$knormal:1|)) + (>= |$alpha-4:i| |$alpha-3:n|)) + (not (not (= 0 |$knormal:10|))) + (not (not (= 0 |$knormal:1|))) + true + (|array_max$unknown:4| + |$knormal:11| + |$alpha-4:i| + |$alpha-4:i| + |$alpha-3:n|) + (|array_max$unknown:4| + |$V-reftype:7| + |$alpha-5:a| + |$alpha-4:i| + |$alpha-3:n|) + true + true + true))) + (=> a!1 + (|array_max$unknown:4| + |$V-reftype:7| + |$alpha-5:a| + |$knormal:3| + |$alpha-3:n|))))) +(assert (forall ((|$knormal:3| Int) + (|$alpha-4:i| Int) + (|$knormal:10| Int) + (|$knormal:11| Int) + (|$alpha-6:m| Int) + (|$knormal:1| Int) + (|$alpha-3:n| Int) + (|$V-reftype:29| Int) + (|$knormal:9| Int)) + (let ((a!1 (and (= |$knormal:3| (+ |$alpha-4:i| 1)) + (= (not (= 0 |$knormal:10|)) + (> |$knormal:11| |$alpha-6:m|)) + (= (not (= 0 |$knormal:1|)) + (>= |$alpha-4:i| |$alpha-3:n|)) + (= |$V-reftype:29| |$knormal:9|) + (not (not (= 0 |$knormal:10|))) + (not (not (= 0 |$knormal:1|))) + (|array_max$unknown:6| + |$knormal:9| + |$alpha-6:m| + |$knormal:3| + |$alpha-3:n|) + true + (|array_max$unknown:4| + |$knormal:11| + |$alpha-4:i| + |$alpha-4:i| + |$alpha-3:n|) + true + true))) + (=> a!1 + (|array_max$unknown:6| + |$V-reftype:29| + |$alpha-6:m| + |$alpha-4:i| + |$alpha-3:n|))))) +(assert (forall ((|$knormal:3| Int) + (|$alpha-4:i| Int) + (|$knormal:10| Int) + (|$knormal:11| Int) + (|$alpha-6:m| Int) + (|$knormal:1| Int) + (|$alpha-3:n| Int) + (|$V-reftype:27| Int) + (|$knormal:9| Int)) + (let ((a!1 (and (= |$knormal:3| (+ |$alpha-4:i| 1)) + (= (not (= 0 |$knormal:10|)) + (> |$knormal:11| |$alpha-6:m|)) + (= (not (= 0 |$knormal:1|)) + (>= |$alpha-4:i| |$alpha-3:n|)) + (= |$V-reftype:27| |$knormal:9|) + (not (not (= 0 |$knormal:1|))) + (not (= 0 |$knormal:10|)) + (|array_max$unknown:6| + |$knormal:9| + |$knormal:11| + |$knormal:3| + |$alpha-3:n|) + true + (|array_max$unknown:4| + |$knormal:11| + |$alpha-4:i| + |$alpha-4:i| + |$alpha-3:n|) + true + true))) + (=> a!1 + (|array_max$unknown:6| + |$V-reftype:27| + |$alpha-6:m| + |$alpha-4:i| + |$alpha-3:n|))))) +(assert (forall ((|$knormal:3| Int) + (|$alpha-4:i| Int) + (|$knormal:10| Int) + (|$knormal:11| Int) + (|$alpha-6:m| Int) + (|$knormal:1| Int) + (|$alpha-3:n| Int)) + (let ((a!1 (and (= |$knormal:3| (+ |$alpha-4:i| 1)) + (= (not (= 0 |$knormal:10|)) + (> |$knormal:11| |$alpha-6:m|)) + (= (not (= 0 |$knormal:1|)) + (>= |$alpha-4:i| |$alpha-3:n|)) + (not (not (= 0 |$knormal:1|))) + (not (= 0 |$knormal:10|)) + true + (|array_max$unknown:4| + |$knormal:11| + |$alpha-4:i| + |$alpha-4:i| + |$alpha-3:n|) + true + true + (not true)))) + (=> a!1 true)))) +(assert (forall ((|$knormal:3| Int) + (|$alpha-4:i| Int) + (|$knormal:10| Int) + (|$knormal:11| Int) + (|$alpha-6:m| Int) + (|$knormal:1| Int) + (|$alpha-3:n| Int)) + (let ((a!1 (and (= |$knormal:3| (+ |$alpha-4:i| 1)) + (= (not (= 0 |$knormal:10|)) + (> |$knormal:11| |$alpha-6:m|)) + (= (not (= 0 |$knormal:1|)) + (>= |$alpha-4:i| |$alpha-3:n|)) + (not (not (= 0 |$knormal:1|))) + (not (= 0 |$knormal:10|)) + true + (|array_max$unknown:4| + |$knormal:11| + |$alpha-4:i| + |$alpha-4:i| + |$alpha-3:n|) + true + true + (not true)))) + (=> a!1 true)))) +(assert (forall ((|$knormal:3| Int) + (|$alpha-4:i| Int) + (|$knormal:10| Int) + (|$knormal:11| Int) + (|$alpha-6:m| Int) + (|$knormal:1| Int) + (|$alpha-3:n| Int)) + (let ((a!1 (and (= |$knormal:3| (+ |$alpha-4:i| 1)) + (= (not (= 0 |$knormal:10|)) + (> |$knormal:11| |$alpha-6:m|)) + (= (not (= 0 |$knormal:1|)) + (>= |$alpha-4:i| |$alpha-3:n|)) + (not (not (= 0 |$knormal:1|))) + (not (= 0 |$knormal:10|)) + true + (|array_max$unknown:4| + |$knormal:11| + |$alpha-4:i| + |$alpha-4:i| + |$alpha-3:n|) + true + true + (not true)))) + (=> a!1 true)))) +(assert (forall ((|$knormal:3| Int) + (|$alpha-4:i| Int) + (|$knormal:10| Int) + (|$knormal:11| Int) + (|$alpha-6:m| Int) + (|$knormal:1| Int) + (|$alpha-3:n| Int)) + (let ((a!1 (and (= |$knormal:3| (+ |$alpha-4:i| 1)) + (= (not (= 0 |$knormal:10|)) + (> |$knormal:11| |$alpha-6:m|)) + (= (not (= 0 |$knormal:1|)) + (>= |$alpha-4:i| |$alpha-3:n|)) + (not (not (= 0 |$knormal:10|))) + (not (not (= 0 |$knormal:1|))) + true + (|array_max$unknown:4| + |$knormal:11| + |$alpha-4:i| + |$alpha-4:i| + |$alpha-3:n|) + true + true + (not true)))) + (=> a!1 true)))) +(assert (forall ((|$knormal:3| Int) + (|$alpha-4:i| Int) + (|$knormal:10| Int) + (|$knormal:11| Int) + (|$alpha-6:m| Int) + (|$knormal:1| Int) + (|$alpha-3:n| Int)) + (let ((a!1 (and (= |$knormal:3| (+ |$alpha-4:i| 1)) + (= (not (= 0 |$knormal:10|)) + (> |$knormal:11| |$alpha-6:m|)) + (= (not (= 0 |$knormal:1|)) + (>= |$alpha-4:i| |$alpha-3:n|)) + (not (not (= 0 |$knormal:10|))) + (not (not (= 0 |$knormal:1|))) + true + (|array_max$unknown:4| + |$knormal:11| + |$alpha-4:i| + |$alpha-4:i| + |$alpha-3:n|) + true + true + (not true)))) + (=> a!1 true)))) +(assert (forall ((|$knormal:3| Int) + (|$alpha-4:i| Int) + (|$knormal:10| Int) + (|$knormal:11| Int) + (|$alpha-6:m| Int) + (|$knormal:1| Int) + (|$alpha-3:n| Int)) + (let ((a!1 (and (= |$knormal:3| (+ |$alpha-4:i| 1)) + (= (not (= 0 |$knormal:10|)) + (> |$knormal:11| |$alpha-6:m|)) + (= (not (= 0 |$knormal:1|)) + (>= |$alpha-4:i| |$alpha-3:n|)) + (not (not (= 0 |$knormal:10|))) + (not (not (= 0 |$knormal:1|))) + true + (|array_max$unknown:4| + |$knormal:11| + |$alpha-4:i| + |$alpha-4:i| + |$alpha-3:n|) + true + true + (not true)))) + (=> a!1 true)))) +(assert (forall ((|$knormal:1| Int) + (|$alpha-4:i| Int) + (|$alpha-3:n| Int) + (|$V-reftype:24| Int) + (|$alpha-6:m| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:1|)) + (>= |$alpha-4:i| |$alpha-3:n|)) + (= |$V-reftype:24| |$alpha-6:m|) + (not (= 0 |$knormal:1|)) + true + true + true))) + (=> a!1 + (|array_max$unknown:6| + |$V-reftype:24| + |$alpha-6:m| + |$alpha-4:i| + |$alpha-3:n|))))) +(assert (forall ((|$knormal:25| Int) + (|$knormal:16| Int) + (|$knormal:12| Int) + (|$knormal:15| Int) + (|$knormal:13| Int) + (|$knormal:14| Int) + (|$alpha-10:i| Int) + (|$alpha-9:n| Int) + (|$V-reftype:21| Int) + (|$knormal:18| Int)) + (let ((a!1 (= (not (= 0 |$knormal:16|)) + (and (not (= 0 |$knormal:12|)) + (not (= 0 |$knormal:15|))))) + (a!2 (= (not (= 0 |$knormal:15|)) + (and (not (= 0 |$knormal:13|)) + (not (= 0 |$knormal:14|)))))) + (let ((a!3 (and (= |$knormal:25| (- 1)) + a!1 + a!2 + (= (not (= 0 |$knormal:14|)) (<= |$alpha-10:i| 0)) + (= (not (= 0 |$knormal:13|)) (>= |$alpha-10:i| 0)) + (= (not (= 0 |$knormal:12|)) (> |$alpha-9:n| 0)) + (not (= 0 |$knormal:16|)) + (|make_array$unknown:9| + |$V-reftype:21| + |$knormal:18| + |$alpha-9:n|) + true))) + (=> a!3 + (|array_max$unknown:4| + |$V-reftype:21| + |$knormal:18| + |$alpha-10:i| + |$alpha-9:n|)))))) +(assert (forall ((|$knormal:25| Int) + (|$knormal:17| Int) + (|$knormal:27| Int) + (|$alpha-9:n| Int) + (|$knormal:16| Int) + (|$knormal:12| Int) + (|$knormal:15| Int) + (|$knormal:13| Int) + (|$knormal:14| Int) + (|$alpha-10:i| Int)) + (let ((a!1 (= (not (= 0 |$knormal:16|)) + (and (not (= 0 |$knormal:12|)) + (not (= 0 |$knormal:15|))))) + (a!2 (= (not (= 0 |$knormal:15|)) + (and (not (= 0 |$knormal:13|)) + (not (= 0 |$knormal:14|)))))) + (let ((a!3 (and (= |$knormal:25| (- 1)) + (= (not (= 0 |$knormal:17|)) + (>= |$knormal:27| |$alpha-9:n|)) + a!1 + a!2 + (= (not (= 0 |$knormal:14|)) (<= |$alpha-10:i| 0)) + (= (not (= 0 |$knormal:13|)) (>= |$alpha-10:i| 0)) + (= (not (= 0 |$knormal:12|)) (> |$alpha-9:n| 0)) + (not (not (= 0 |$knormal:17|))) + (not (= 0 |$knormal:16|)) + (|array_max$unknown:6| + |$knormal:27| + |$knormal:25| + |$alpha-10:i| + |$alpha-9:n|)))) + (=> a!3 false))))) +(assert (forall ((|$V-reftype:22| Int) + (|$alpha-1:n| Int) + (|$alpha-2:i| Int)) + (=> (and (= |$V-reftype:22| (- |$alpha-1:n| |$alpha-2:i|)) + true + true) + (|make_array$unknown:9| + |$V-reftype:22| + |$alpha-2:i| + |$alpha-1:n|)))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0106.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0106.smt2 new file mode 100644 index 000000000..f57644c82 --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0106.smt2 @@ -0,0 +1,423 @@ +;; Original file: adr_53.smt2 +(set-logic HORN) +(declare-fun |bcopy_aux$unknown:6| (Int Int) Bool) +(declare-fun |bcopy_aux$unknown:3| (Int Int Int) Bool) +(declare-fun |bcopy_aux$unknown:2| (Int Int) Bool) +(declare-fun |bcopy_aux$unknown:4| (Int Int) Bool) +(declare-fun |bcopy_aux$unknown:5| (Int Int Int) Bool) +(declare-fun |update$unknown:11| (Int) Bool) +(declare-fun |update$unknown:12| (Int Int) Bool) +(declare-fun |bcopy_aux$unknown:7| (Int Int Int) Bool) +(declare-fun |make_array$unknown:9| (Int Int) Bool) +(declare-fun |make_array$unknown:10| (Int Int Int) Bool) +(declare-fun |update$unknown:15| (Int Int Int) Bool) +(declare-fun |update$unknown:16| (Int Int Int Int) Bool) + + +(assert (forall ((|$knormal:6| Int) + (|$alpha-11:i| Int) + (|$alpha-8:m| Int) + (|$knormal:12| Int) + (|$knormal:15| Int) + (|$V-reftype:3| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:6|)) + (>= |$alpha-11:i| |$alpha-8:m|)) + (= |$knormal:12| (+ |$alpha-11:i| 1)) + (not (not (= 0 |$knormal:6|))) + (|bcopy_aux$unknown:6| |$alpha-11:i| |$alpha-8:m|) + (|bcopy_aux$unknown:3| + |$knormal:15| + |$alpha-11:i| + |$alpha-8:m|) + (|bcopy_aux$unknown:2| |$V-reftype:3| |$alpha-8:m|) + true))) + (=> a!1 (|bcopy_aux$unknown:2| |$V-reftype:3| |$alpha-8:m|))))) +(assert (forall ((|$knormal:6| Int) + (|$alpha-11:i| Int) + (|$alpha-8:m| Int) + (|$knormal:12| Int) + (|$knormal:15| Int) + (|$V-reftype:5| Int) + (|$alpha-9:src| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:6|)) + (>= |$alpha-11:i| |$alpha-8:m|)) + (= |$knormal:12| (+ |$alpha-11:i| 1)) + (not (not (= 0 |$knormal:6|))) + (|bcopy_aux$unknown:6| |$alpha-11:i| |$alpha-8:m|) + (|bcopy_aux$unknown:3| + |$knormal:15| + |$alpha-11:i| + |$alpha-8:m|) + (|bcopy_aux$unknown:3| + |$V-reftype:5| + |$alpha-9:src| + |$alpha-8:m|) + (|bcopy_aux$unknown:2| |$alpha-9:src| |$alpha-8:m|) + true))) + (=> a!1 + (|bcopy_aux$unknown:3| + |$V-reftype:5| + |$alpha-9:src| + |$alpha-8:m|))))) +(assert (forall ((|$knormal:6| Int) + (|$alpha-11:i| Int) + (|$alpha-8:m| Int) + (|$knormal:12| Int) + (|$V-reftype:7| Int) + (|$knormal:15| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:6|)) + (>= |$alpha-11:i| |$alpha-8:m|)) + (= |$knormal:12| (+ |$alpha-11:i| 1)) + (not (not (= 0 |$knormal:6|))) + (|bcopy_aux$unknown:6| |$alpha-11:i| |$alpha-8:m|) + (|bcopy_aux$unknown:4| |$V-reftype:7| |$alpha-8:m|) + (|bcopy_aux$unknown:3| + |$knormal:15| + |$alpha-11:i| + |$alpha-8:m|) + true))) + (=> a!1 (|bcopy_aux$unknown:4| |$V-reftype:7| |$alpha-8:m|))))) +(assert (forall ((|$knormal:6| Int) + (|$alpha-11:i| Int) + (|$alpha-8:m| Int) + (|$knormal:12| Int) + (|$V-reftype:9| Int) + (|$alpha-10:des| Int) + (|$knormal:15| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:6|)) + (>= |$alpha-11:i| |$alpha-8:m|)) + (= |$knormal:12| (+ |$alpha-11:i| 1)) + (not (not (= 0 |$knormal:6|))) + (|bcopy_aux$unknown:6| |$alpha-11:i| |$alpha-8:m|) + (|bcopy_aux$unknown:5| + |$V-reftype:9| + |$alpha-10:des| + |$alpha-8:m|) + (|bcopy_aux$unknown:4| |$alpha-10:des| |$alpha-8:m|) + (|bcopy_aux$unknown:3| + |$knormal:15| + |$alpha-11:i| + |$alpha-8:m|) + true))) + (=> a!1 + (|bcopy_aux$unknown:5| + |$V-reftype:9| + |$alpha-10:des| + |$alpha-8:m|))))) +(assert (forall ((|$knormal:6| Int) + (|$alpha-11:i| Int) + (|$alpha-8:m| Int) + (|$alpha-10:des| Int) + (|$V-reftype:9| Int) + (|$knormal:15| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:6|)) + (>= |$alpha-11:i| |$alpha-8:m|)) + (not (not (= 0 |$knormal:6|))) + (|update$unknown:11| |$alpha-10:des|) + (|bcopy_aux$unknown:6| |$alpha-11:i| |$alpha-8:m|) + (|bcopy_aux$unknown:5| + |$V-reftype:9| + |$alpha-10:des| + |$alpha-8:m|) + (|bcopy_aux$unknown:3| + |$knormal:15| + |$alpha-11:i| + |$alpha-8:m|) + true))) + (=> a!1 (|update$unknown:12| |$V-reftype:9| |$alpha-10:des|))))) +(assert (forall ((|$knormal:6| Int) + (|$alpha-11:i| Int) + (|$alpha-8:m| Int) + (|$knormal:12| Int) + (|$V-reftype:46| Int) + (|$knormal:14| Int) + (|$knormal:15| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:6|)) + (>= |$alpha-11:i| |$alpha-8:m|)) + (= |$knormal:12| (+ |$alpha-11:i| 1)) + (= |$V-reftype:46| |$knormal:14|) + (not (not (= 0 |$knormal:6|))) + (|bcopy_aux$unknown:7| + |$knormal:14| + |$knormal:12| + |$alpha-8:m|) + (|bcopy_aux$unknown:6| |$alpha-11:i| |$alpha-8:m|) + (|bcopy_aux$unknown:3| + |$knormal:15| + |$alpha-11:i| + |$alpha-8:m|) + true))) + (=> a!1 + (|bcopy_aux$unknown:7| + |$V-reftype:46| + |$alpha-11:i| + |$alpha-8:m|))))) +(assert (forall ((|$knormal:6| Int) + (|$alpha-11:i| Int) + (|$alpha-8:m| Int) + (|$V-reftype:24| Int) + (|$knormal:15| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:6|)) + (>= |$alpha-11:i| |$alpha-8:m|)) + (not (not (= 0 |$knormal:6|))) + (|update$unknown:11| |$V-reftype:24|) + (|bcopy_aux$unknown:6| |$alpha-11:i| |$alpha-8:m|) + (|bcopy_aux$unknown:3| + |$knormal:15| + |$alpha-11:i| + |$alpha-8:m|) + true))) + (=> a!1 (|bcopy_aux$unknown:4| |$V-reftype:24| |$alpha-8:m|))))) +(assert (forall ((|$knormal:6| Int) + (|$alpha-11:i| Int) + (|$alpha-8:m| Int) + (|$knormal:12| Int) + (|$knormal:15| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:6|)) + (>= |$alpha-11:i| |$alpha-8:m|)) + (= |$knormal:12| (+ |$alpha-11:i| 1)) + (not (not (= 0 |$knormal:6|))) + (|bcopy_aux$unknown:6| |$alpha-11:i| |$alpha-8:m|) + (|bcopy_aux$unknown:3| + |$knormal:15| + |$alpha-11:i| + |$alpha-8:m|) + true + (not true)))) + (=> a!1 true)))) +(assert (forall ((|$knormal:6| Int) + (|$alpha-11:i| Int) + (|$alpha-8:m| Int) + (|$knormal:12| Int) + (|$knormal:15| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:6|)) + (>= |$alpha-11:i| |$alpha-8:m|)) + (= |$knormal:12| (+ |$alpha-11:i| 1)) + (not (not (= 0 |$knormal:6|))) + (|bcopy_aux$unknown:6| |$alpha-11:i| |$alpha-8:m|) + (|bcopy_aux$unknown:3| + |$knormal:15| + |$alpha-11:i| + |$alpha-8:m|) + true))) + (=> a!1 (|bcopy_aux$unknown:6| |$knormal:12| |$alpha-8:m|))))) +(assert (forall ((|$knormal:6| Int) + (|$alpha-11:i| Int) + (|$alpha-8:m| Int) + (|$knormal:15| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:6|)) + (>= |$alpha-11:i| |$alpha-8:m|)) + (not (not (= 0 |$knormal:6|))) + (|bcopy_aux$unknown:6| |$alpha-11:i| |$alpha-8:m|) + (|bcopy_aux$unknown:3| + |$knormal:15| + |$alpha-11:i| + |$alpha-8:m|) + true + (not true)))) + (=> a!1 true)))) +(assert (forall ((|$knormal:6| Int) + (|$alpha-11:i| Int) + (|$alpha-8:m| Int) + (|$knormal:15| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:6|)) + (>= |$alpha-11:i| |$alpha-8:m|)) + (not (not (= 0 |$knormal:6|))) + (|bcopy_aux$unknown:6| |$alpha-11:i| |$alpha-8:m|) + (|bcopy_aux$unknown:3| + |$knormal:15| + |$alpha-11:i| + |$alpha-8:m|) + true + (not true)))) + (=> a!1 true)))) +(assert (forall ((|$knormal:6| Int) + (|$alpha-11:i| Int) + (|$alpha-8:m| Int) + (|$V-reftype:44| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:6|)) + (>= |$alpha-11:i| |$alpha-8:m|)) + (= |$V-reftype:44| 1) + (not (= 0 |$knormal:6|)) + (|bcopy_aux$unknown:6| |$alpha-11:i| |$alpha-8:m|) + true))) + (=> a!1 + (|bcopy_aux$unknown:7| + |$V-reftype:44| + |$alpha-11:i| + |$alpha-8:m|))))) +(assert (forall ((|$knormal:6| Int) (|$alpha-11:i| Int) (|$alpha-8:m| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:6|)) + (>= |$alpha-11:i| |$alpha-8:m|)) + (not (not (= 0 |$knormal:6|))) + (|bcopy_aux$unknown:6| |$alpha-11:i| |$alpha-8:m|) + true))) + (=> a!1 (|bcopy_aux$unknown:2| |$alpha-11:i| |$alpha-8:m|))))) +(assert (forall ((|$knormal:28| Int) + (|$knormal:22| Int) + (|$alpha-13:n| Int) + (|$alpha-14:m| Int) + (|$V-reftype:3| Int)) + (let ((a!1 (and (= |$knormal:28| 0) + (= (not (= 0 |$knormal:22|)) + (<= |$alpha-13:n| |$alpha-14:m|)) + (not (= 0 |$knormal:22|)) + (|bcopy_aux$unknown:2| |$V-reftype:3| |$alpha-13:n|)))) + (=> a!1 (|make_array$unknown:9| |$V-reftype:3| |$alpha-13:n|))))) +(assert (forall ((|$knormal:28| Int) + (|$knormal:22| Int) + (|$alpha-13:n| Int) + (|$alpha-14:m| Int) + (|$V-reftype:23| Int) + (|$knormal:32| Int)) + (let ((a!1 (and (= |$knormal:28| 0) + (= (not (= 0 |$knormal:22|)) + (<= |$alpha-13:n| |$alpha-14:m|)) + (not (= 0 |$knormal:22|)) + (|make_array$unknown:10| + |$V-reftype:23| + |$knormal:32| + |$alpha-13:n|) + (|bcopy_aux$unknown:2| |$knormal:32| |$alpha-13:n|)))) + (=> a!1 + (|bcopy_aux$unknown:3| + |$V-reftype:23| + |$knormal:32| + |$alpha-13:n|))))) +(assert (forall ((|$knormal:28| Int) + (|$knormal:22| Int) + (|$alpha-13:n| Int) + (|$alpha-14:m| Int) + (|$V-reftype:7| Int)) + (let ((a!1 (and (= |$knormal:28| 0) + (= (not (= 0 |$knormal:22|)) + (<= |$alpha-13:n| |$alpha-14:m|)) + (not (= 0 |$knormal:22|)) + (|bcopy_aux$unknown:4| |$V-reftype:7| |$alpha-13:n|)))) + (=> a!1 (|make_array$unknown:9| |$V-reftype:7| |$alpha-14:m|))))) +(assert (forall ((|$knormal:28| Int) + (|$knormal:22| Int) + (|$alpha-13:n| Int) + (|$alpha-14:m| Int) + (|$V-reftype:23| Int) + (|$knormal:31| Int)) + (let ((a!1 (and (= |$knormal:28| 0) + (= (not (= 0 |$knormal:22|)) + (<= |$alpha-13:n| |$alpha-14:m|)) + (not (= 0 |$knormal:22|)) + (|make_array$unknown:10| + |$V-reftype:23| + |$knormal:31| + |$alpha-14:m|) + (|bcopy_aux$unknown:4| |$knormal:31| |$alpha-13:n|)))) + (=> a!1 + (|bcopy_aux$unknown:5| + |$V-reftype:23| + |$knormal:31| + |$alpha-13:n|))))) +(assert (forall ((|$knormal:3| Int) + (|$knormal:1| Int) + (|$knormal:2| Int) + (|$alpha-2:i| Int) + (|$alpha-1:n| Int) + (|$alpha-3:$$tmp::1| Int) + (|$V-reftype:39| Int)) + (let ((a!1 (= (not (= 0 |$knormal:3|)) + (and (not (= 0 |$knormal:1|)) (not (= 0 |$knormal:2|)))))) + (let ((a!2 (and a!1 + (= (not (= 0 |$knormal:2|)) + (< |$alpha-2:i| |$alpha-1:n|)) + (= (not (= 0 |$knormal:1|)) (<= 0 |$alpha-2:i|)) + (= |$alpha-3:$$tmp::1| 1) + (= |$V-reftype:39| 0) + (not (= 0 |$knormal:3|)) + (|make_array$unknown:9| |$alpha-2:i| |$alpha-1:n|) + true))) + (=> a!2 + (|make_array$unknown:10| + |$V-reftype:39| + |$alpha-2:i| + |$alpha-1:n|)))))) +(assert (forall ((|$knormal:3| Int) + (|$knormal:1| Int) + (|$knormal:2| Int) + (|$alpha-2:i| Int) + (|$alpha-1:n| Int)) + (let ((a!1 (= (not (= 0 |$knormal:3|)) + (and (not (= 0 |$knormal:1|)) (not (= 0 |$knormal:2|)))))) + (let ((a!2 (and a!1 + (= (not (= 0 |$knormal:2|)) + (< |$alpha-2:i| |$alpha-1:n|)) + (= (not (= 0 |$knormal:1|)) (<= 0 |$alpha-2:i|)) + (not (not (= 0 |$knormal:3|))) + (|make_array$unknown:9| |$alpha-2:i| |$alpha-1:n|) + true))) + (=> a!2 false))))) +(assert (forall ((|$knormal:4| Int) + (|$alpha-5:i| Int) + (|$alpha-7:j| Int) + (|$V-reftype:42| Int) + (|$knormal:5| Int) + (|$alpha-6:x| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:4|)) + (= |$alpha-5:i| |$alpha-7:j|)) + (= |$V-reftype:42| |$knormal:5|) + (not (not (= 0 |$knormal:4|))) + (|update$unknown:15| + |$alpha-7:j| + |$alpha-6:x| + |$alpha-5:i|) + true + true + (|update$unknown:12| |$knormal:5| |$alpha-5:i|)))) + (=> a!1 + (|update$unknown:16| + |$V-reftype:42| + |$alpha-7:j| + |$alpha-6:x| + |$alpha-5:i|))))) +(assert (forall ((|$knormal:4| Int) + (|$alpha-5:i| Int) + (|$alpha-7:j| Int) + (|$V-reftype:41| Int) + (|$alpha-6:x| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:4|)) + (= |$alpha-5:i| |$alpha-7:j|)) + (= |$V-reftype:41| |$alpha-6:x|) + (not (= 0 |$knormal:4|)) + (|update$unknown:15| + |$alpha-7:j| + |$alpha-6:x| + |$alpha-5:i|) + true + true))) + (=> a!1 + (|update$unknown:16| + |$V-reftype:41| + |$alpha-7:j| + |$alpha-6:x| + |$alpha-5:i|))))) +(assert (forall ((|$knormal:4| Int) + (|$alpha-5:i| Int) + (|$alpha-7:j| Int) + (|$alpha-6:x| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:4|)) + (= |$alpha-5:i| |$alpha-7:j|)) + (not (not (= 0 |$knormal:4|))) + (|update$unknown:15| + |$alpha-7:j| + |$alpha-6:x| + |$alpha-5:i|) + true + true))) + (=> a!1 (|update$unknown:11| |$alpha-5:i|))))) +(assert (forall ((|$knormal:28| Int) + (|$knormal:22| Int) + (|$alpha-13:n| Int) + (|$alpha-14:m| Int)) + (let ((a!1 (and (= |$knormal:28| 0) + (= (not (= 0 |$knormal:22|)) + (<= |$alpha-13:n| |$alpha-14:m|)) + (not (= 0 |$knormal:22|))))) + (=> a!1 (|bcopy_aux$unknown:6| |$knormal:28| |$alpha-13:n|))))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0114.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0114.smt2 new file mode 100644 index 000000000..99b71872e --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0114.smt2 @@ -0,0 +1,89 @@ +;; Original file: j_124.smt2 +(set-logic HORN) +(declare-fun star_exec_inv_2 (Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_1 (Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_3 (Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_4 (Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_5 (Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_6 (Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_8 (Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_7 (Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_9 (Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_11 (Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_10 (Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_12 (Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_14 (Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_13 (Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_15 (Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_16 (Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_17 (Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_19 (Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_18 (Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_20 (Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_21 (Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_22 (Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_23 (Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_24 (Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_25 (Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_26 (Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_27 (Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_28 (Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_29 (Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_30 (Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_31 (Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_32 (Int Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_33 (Int Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_34 (Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_35 (Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_36 (Int Int Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_37 (Int Int Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_38 (Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_39 (Int Int Int Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_40 (Int Int Int Int Int Int Int Int Int Int Int Int Int Int) Bool) +(declare-fun star_exec_inv_41 (Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int Int) Bool) + +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int) (I Int) (J Int) (K Int) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) (R Int) (S Int) (T Int) (U Int) (V Int) (W Int)) (=> (star_exec_inv_2 A B C D E F G H I J) (star_exec_inv_1 A B C D E F G H I J K L M N O A B C D P Q R S T U V W F G H I J)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int) (I Int) (J Int) (V Int) (W Int) (X Int) (Y Int) (Z Int) (A1 Int) (K Int) (B1 Int) (C1 Int) (M Int) (N Int) (O Int) (P Int) (Q Int) (R Int) (S Int) (T Int) (U Int) (L Int)) (=> (and (star_exec_inv_1 A B C D E F G H I J V W X Y Z A B C D A1 K B1 C1 M N O P Q R S T U) (= L 1)) (star_exec_inv_3 A B C D E F G H I J A B C D K L M N O P Q R S T U)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int) (I Int) (J Int) (U Int) (K Int) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) (R Int) (S Int) (T Int)) (=> (and (star_exec_inv_3 A B C D E F G H I J A B C D U K L M N O P Q R S T) (= B 109) (>= D 0)) (star_exec_inv_4 A B C D E F G H I J A B C D K L M N O P Q R S T)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int) (I Int) (J Int) (K Int) (Q Int) (N Int) (O Int) (P Int) (L Int) (M Int) (R Int) (S Int) (T Int)) (=> (and (star_exec_inv_4 A B C D E F G H I J A B C D K Q N O P L M R S T) (= A 1)) (star_exec_inv_5 A B C D E F G H I J K L M N O P)))) +(assert (forall ((G Int) (H Int) (I Int) (J Int) (K Int) (L Int) (M Int) (N Int) (O Int) (P Int) (A Int) (B Int) (C Int) (D Int) (E Int) (F Int)) (=> (star_exec_inv_5 G H I J K L M N O P A B C D E F) (star_exec_inv_6 A B C D E F)))) +(assert (forall ((Q Int) (R Int) (S Int) (T Int) (U Int) (V Int) (W Int) (X Int) (Y Int) (K Int) (L Int) (M Int) (N Int) (O Int) (P Int) (A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int) (I Int) (J Int)) (=> (and (star_exec_inv_8 Q R S T U V W X Y K L M N O P) (star_exec_inv_5 A B C D E F G H I J Q R S T U V)) (star_exec_inv_7 A B C D E F G H I J K L M N O P)))) +(assert (forall ((G Int) (H Int) (I Int) (J Int) (K Int) (L Int) (M Int) (N Int) (O Int) (P Int) (A Int) (B Int) (C Int) (D Int) (E Int) (F Int)) (=> (star_exec_inv_7 G H I J K L M N O P A B C D E F) (star_exec_inv_9 A B C D E F)))) +(assert (forall ((Q Int) (R Int) (S Int) (T Int) (U Int) (V Int) (W Int) (X Int) (Y Int) (K Int) (L Int) (M Int) (N Int) (O Int) (P Int) (A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int) (I Int) (J Int)) (=> (and (star_exec_inv_11 Q R S T U V W X Y K L M N O P) (star_exec_inv_7 A B C D E F G H I J Q R S T U V)) (star_exec_inv_10 A B C D E F G H I J K L M N O P)))) +(assert (forall ((G Int) (H Int) (I Int) (J Int) (K Int) (L Int) (M Int) (N Int) (O Int) (P Int) (A Int) (B Int) (C Int) (D Int) (E Int) (F Int)) (=> (star_exec_inv_10 G H I J K L M N O P A B C D E F) (star_exec_inv_12 A B C D E F)))) +(assert (forall ((U Int) (V Int) (W Int) (X Int) (Y Int) (Z Int) (K Int) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) (R Int) (S Int) (T Int) (A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int) (I Int) (J Int)) (=> (and (star_exec_inv_14 U V W X Y Z K L M N O P Q R S T) (star_exec_inv_10 A B C D E F G H I J U V W X Y Z)) (star_exec_inv_13 A B C D E F G H I J K L M N O P Q R S T)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int) (I Int) (J Int) (S Int) (T Int) (U Int) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) (R Int) (K Int)) (=> (and (star_exec_inv_13 A B C D E F G H I J S T U L M N O P Q R) (= K 1) (not (= S 0))) (star_exec_inv_15 A B C D E F G H I J K L M N O P Q R)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int) (I Int) (J Int) (S Int) (T Int) (U Int) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) (R Int) (K Int)) (=> (and (star_exec_inv_13 A B C D E F G H I J S T U L M N O P Q R) (= K 0) (= S 0)) (star_exec_inv_15 A B C D E F G H I J K L M N O P Q R)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int) (I Int) (J Int) (R Int) (K Int) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int)) (=> (star_exec_inv_15 A B C D E F G H I J R K L M N O P Q) (star_exec_inv_16 A B C D E F G H I J K L M N O P Q)))) +(assert (forall ((H Int) (I Int) (J Int) (K Int) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) (A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int)) (=> (star_exec_inv_16 H I J K L M N O P Q A B C D E F G) (star_exec_inv_17 A B C D E F G)))) +(assert (forall ((U Int) (V Int) (W Int) (X Int) (Y Int) (Z Int) (A1 Int) (K Int) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) (R Int) (S Int) (T Int) (A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int) (I Int) (J Int)) (=> (and (star_exec_inv_19 U V W X Y Z A1 K L M N O P Q R S T) (star_exec_inv_16 A B C D E F G H I J U V W X Y Z A1)) (star_exec_inv_18 A B C D E F G H I J K L M N O P Q R S T)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int) (I Int) (J Int) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) (R Int) (S Int) (T Int) (U Int) (K Int)) (=> (and (star_exec_inv_18 A B C D E F G H I J L M N O P Q R S T U) (= K 1) (not (= L 0))) (star_exec_inv_20 A B C D E F G H I J K L M N O P Q R S T U)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int) (I Int) (J Int) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) (R Int) (S Int) (T Int) (U Int) (K Int)) (=> (and (star_exec_inv_18 A B C D E F G H I J L M N O P Q R S T U) (= K 0) (= L 0)) (star_exec_inv_20 A B C D E F G H I J K L M N O P Q R S T U)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int) (I Int) (J Int) (U Int) (K Int) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) (R Int) (S Int) (T Int)) (=> (star_exec_inv_20 A B C D E F G H I J U K L M N O P Q R S T) (star_exec_inv_21 A B C D E F G H I J K L M N O P Q R S T)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int) (I Int) (J Int) (K Int) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) (R Int) (S Int) (T Int)) (=> (and (star_exec_inv_21 A B C D E F G H I J K L M N O P Q R S T) (= N 0)) (star_exec_inv_22 A B C D E F G H I J K L M N O P Q R S T)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int) (I Int) (J Int) (K Int) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) (R Int) (S Int) (T Int)) (=> (and (star_exec_inv_21 A B C D E F G H I J K L M N O P Q R S T) (not (= N 0))) (star_exec_inv_23 A B C D E F G H I J K L M N O P Q R S T)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int) (I Int) (J Int) (K Int) (L Int) (M Int) (T Int) (N Int) (O Int) (P Int) (Q Int) (R Int) (S Int)) (=> (star_exec_inv_22 A B C D E F G H I J K L M T N O P Q R S) (star_exec_inv_24 A B C D E F G H I J K L M N O P Q R S)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int) (I Int) (J Int) (K Int) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) (R Int) (S Int) (T Int)) (=> (star_exec_inv_23 A B C D E F G H I J K L M N O P Q R S T) (star_exec_inv_25 A B C D E F G H I J K L M N O P Q R S T)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int) (I Int) (J Int) (K Int) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) (R Int) (S Int) (T Int)) (=> (star_exec_inv_25 A B C D E F G H I J K L M N O P Q R S T) (star_exec_inv_22 A B C D E F G H I J K L M N O P Q R S T)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int) (I Int) (J Int) (K Int) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) (R Int) (S Int)) (=> (star_exec_inv_24 A B C D E F G H I J K L M N O P Q R S) (star_exec_inv_26 A B C D E F G H I J K L M N O P Q R S)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int) (I Int)) (=> (star_exec_inv_6 A B C D E F) (star_exec_inv_27 A B C D E F G H I A B C D E F)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int) (I Int) (J Int) (K Int) (L Int) (M Int) (N Int)) (=> (star_exec_inv_27 A B C D E F G H I A J K L M N) (star_exec_inv_28 A B C D E F G H I A J K L M N)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int) (I Int) (M Int) (N Int) (O Int) (P Int) (Q Int) (R Int) (J Int) (K Int) (L Int)) (=> (and (star_exec_inv_28 A B C D E F G H I M N O P Q R) (= J 0) (= K 0) (= L 0)) (star_exec_inv_29 A B C D E F G H I J K L M N O P Q R)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (P Int) (Q Int) (R Int) (G Int) (H Int) (I Int) (J Int) (S Int) (T Int) (M Int) (N Int) (O Int) (L Int) (K Int)) (=> (and (star_exec_inv_29 A B C D E F P Q R G H I J S T M N O) (= L 1)) (star_exec_inv_30 A B C D E F G H I J K L M N O)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int) (I Int) (J Int) (K Int) (L Int) (M Int) (N Int) (O Int)) (=> (star_exec_inv_30 A B C D E F G H I J K L M N O) (star_exec_inv_31 A B C D E F G H I J K L M N O)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int) (I Int) (J Int) (K Int) (L Int) (M Int) (N Int) (O Int)) (=> (star_exec_inv_31 A B C D E F G H I J K L M N O) (star_exec_inv_8 A B C D E F G H I J K L M N O)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int)) (=> (star_exec_inv_9 A B C D E F) (star_exec_inv_32 A B C D E F A B C D E F)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int) (I Int) (J Int) (K Int)) (=> (star_exec_inv_32 A B C D E F A G H I J K) (star_exec_inv_33 A B C D E F A G H I J K)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (J Int) (K Int) (L Int) (M Int) (N Int) (O Int) (G Int) (H Int) (I Int)) (=> (and (star_exec_inv_33 A B C D E F J K L M N O) (= G 0) (= H 0) (= I 0)) (star_exec_inv_34 A B C D E F G H I J K L M N O)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int) (I Int) (J Int) (K Int) (L Int) (M Int) (N Int) (O Int)) (=> (star_exec_inv_34 A B C D E F G H I J K L M N O) (star_exec_inv_35 A B C D E F G H I J K L M N O)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int) (I Int) (J Int) (K Int) (L Int) (M Int) (N Int) (O Int)) (=> (star_exec_inv_35 A B C D E F G H I J K L M N O) (star_exec_inv_11 A B C D E F G H I J K L M N O)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int)) (=> (star_exec_inv_12 A B C D E F) (star_exec_inv_36 A B C D E F G A B C D E F)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int) (I Int) (J Int) (K Int) (L Int)) (=> (star_exec_inv_36 A B C D E F G A H I J K L) (star_exec_inv_37 A B C D E F G A H I J K L)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (K Int) (L Int) (M Int) (N Int) (O Int) (P Int) (H Int) (I Int) (J Int)) (=> (and (star_exec_inv_37 A B C D E F G K L M N O P) (= H 0) (= I 0) (= J 0)) (star_exec_inv_38 A B C D E F G H I J K L M N O P)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (J Int) (G Int) (H Int) (I Int) (K Int) (L Int) (M Int) (N Int) (O Int) (P Int)) (=> (star_exec_inv_38 A B C D E F J G H I K L M N O P) (star_exec_inv_14 A B C D E F G H I J K L M N O P)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int)) (=> (star_exec_inv_17 A B C D E F G) (star_exec_inv_39 A B C D E F G H B C D E F G)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int) (I Int) (J Int) (K Int) (L Int) (M Int)) (=> (star_exec_inv_39 A B C D E F G H B I J K L M) (star_exec_inv_40 A B C D E F G H B I J K L M)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int) (I Int) (J Int) (K Int)) (=> (and (star_exec_inv_40 A B C D E F G H L M N O P Q) (= I 0) (= J 0) (= K 0)) (star_exec_inv_41 A B C D E F G H I J K L M N O P Q)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (K Int) (H Int) (I Int) (J Int) (L Int) (M Int) (N Int) (O Int) (P Int) (Q Int)) (=> (star_exec_inv_41 A B C D E F G K H I J L M N O P Q) (star_exec_inv_19 A B C D E F G H I J K L M N O P Q)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int) (I Int) (J Int)) (=> true (star_exec_inv_2 A B C D E F G H I J)))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0126.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0126.smt2 new file mode 100644 index 000000000..5dc68cb6c --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0126.smt2 @@ -0,0 +1,557 @@ +;; Original file: adr_54.smt2 +(set-logic HORN) +(declare-fun |$innerFunc:1-bcopy$unknown:1| (Int) Bool) +(declare-fun |$innerFunc:1-bcopy$unknown:3| (Int Int Int) Bool) +(declare-fun |bcopy_aux$unknown:13| (Int Int Int) Bool) +(declare-fun |$innerFunc:1-bcopy$unknown:5| (Int Int Int) Bool) +(declare-fun |bcopy_aux$unknown:15| (Int Int Int) Bool) +(declare-fun |bcopy_aux$unknown:17| (Int Int Int) Bool) +(declare-fun |$innerFunc:1-bcopy$unknown:6| (Int Int) Bool) +(declare-fun |bcopy_aux$unknown:16| (Int Int) Bool) +(declare-fun |array1$unknown:8| (Int Int) Bool) +(declare-fun |array2$unknown:10| (Int Int) Bool) +(declare-fun |update$unknown:23| (Int Int Int Int) Bool) +(declare-fun |update$unknown:19| (Int Int) Bool) + + +(assert (forall ((|$alpha-13:n| Int)) + (=> true (|$innerFunc:1-bcopy$unknown:1| |$alpha-13:n|)))) +(assert (forall ((|$knormal:32| Int) + (|$V-reftype:5| Int) + (|$alpha-15:src| Int) + (|$alpha-14:n| Int)) + (=> (and (= |$knormal:32| 0) + true + (|$innerFunc:1-bcopy$unknown:3| + |$V-reftype:5| + |$alpha-15:src| + |$alpha-14:n|) + (|$innerFunc:1-bcopy$unknown:1| |$alpha-14:n|)) + (|bcopy_aux$unknown:13| + |$V-reftype:5| + |$alpha-15:src| + |$alpha-14:n|)))) +(assert (forall ((|$knormal:32| Int) + (|$V-reftype:9| Int) + (|$alpha-16:des| Int) + (|$alpha-14:n| Int)) + (=> (and (= |$knormal:32| 0) + true + (|$innerFunc:1-bcopy$unknown:5| + |$V-reftype:9| + |$alpha-16:des| + |$alpha-14:n|) + (|$innerFunc:1-bcopy$unknown:1| |$alpha-14:n|)) + (|bcopy_aux$unknown:15| + |$V-reftype:9| + |$alpha-16:des| + |$alpha-14:n|)))) +(assert (forall ((|$knormal:32| Int) (|$alpha-14:n| Int)) + (=> (and (= |$knormal:32| 0) + true + (|$innerFunc:1-bcopy$unknown:1| |$alpha-14:n|) + (not true)) + true))) +(assert (forall ((|$knormal:32| Int) (|$alpha-14:n| Int)) + (=> (and (= |$knormal:32| 0) + true + (|$innerFunc:1-bcopy$unknown:1| |$alpha-14:n|) + (not true)) + true))) +(assert (forall ((|$knormal:32| Int) + (|$V-reftype:60| Int) + (|$knormal:34| Int) + (|$alpha-14:n| Int)) + (=> (and (= |$knormal:32| 0) + (= |$V-reftype:60| |$knormal:34|) + (|bcopy_aux$unknown:17| + |$knormal:34| + |$knormal:32| + |$alpha-14:n|) + (|$innerFunc:1-bcopy$unknown:1| |$alpha-14:n|)) + (|$innerFunc:1-bcopy$unknown:6| |$V-reftype:60| |$alpha-14:n|)))) +(assert (forall ((|$knormal:32| Int) (|$alpha-14:n| Int)) + (=> (and (= |$knormal:32| 0) + (|$innerFunc:1-bcopy$unknown:1| |$alpha-14:n|) + (not true)) + true))) +(assert (forall ((|$knormal:32| Int) (|$alpha-14:n| Int)) + (=> (and (= |$knormal:32| 0) + (|$innerFunc:1-bcopy$unknown:1| |$alpha-14:n|)) + (|bcopy_aux$unknown:16| |$knormal:32| |$alpha-14:n|)))) +(assert (forall ((|$V-reftype:14| Int) (array1 Int) (|$alpha-13:n| Int)) + (=> (and (|array1$unknown:8| |$V-reftype:14| array1) true) + (|$innerFunc:1-bcopy$unknown:3| + |$V-reftype:14| + array1 + |$alpha-13:n|)))) +(assert (forall ((|$V-reftype:17| Int) (array2 Int) (|$alpha-13:n| Int)) + (=> (and (|array2$unknown:10| |$V-reftype:17| array2) true) + (|$innerFunc:1-bcopy$unknown:5| + |$V-reftype:17| + array2 + |$alpha-13:n|)))) +(assert (forall ((|$V-reftype:45| Int) (|$alpha-1:i| Int)) + (=> (and (= |$V-reftype:45| 0) true) + (|array1$unknown:8| |$V-reftype:45| |$alpha-1:i|)))) +(assert (forall ((|$V-reftype:46| Int) (|$alpha-2:i| Int)) + (=> (and (= |$V-reftype:46| 0) true) + (|array2$unknown:10| |$V-reftype:46| |$alpha-2:i|)))) +(assert (forall ((|$knormal:9| Int) + (|$alpha-10:i| Int) + (|$knormal:3| Int) + (|$alpha-7:m| Int) + (|$knormal:21| Int) + (|$knormal:19| Int) + (|$knormal:20| Int) + (|$alpha-11:$$tmp::1| Int) + (|$knormal:12| Int)) + (let ((a!1 (= (not (= 0 |$knormal:21|)) + (and (not (= 0 |$knormal:19|)) + (not (= 0 |$knormal:20|)))))) + (let ((a!2 (and (= |$knormal:9| (+ |$alpha-10:i| 1)) + (= (not (= 0 |$knormal:3|)) + (>= |$alpha-10:i| |$alpha-7:m|)) + a!1 + (= (not (= 0 |$knormal:20|)) + (<= |$alpha-10:i| |$alpha-7:m|)) + (= (not (= 0 |$knormal:19|)) (<= 0 |$alpha-10:i|)) + (= |$alpha-11:$$tmp::1| 1) + (not (not (= 0 |$knormal:3|))) + (not (= 0 |$knormal:21|)) + (|bcopy_aux$unknown:16| |$alpha-10:i| |$alpha-7:m|) + (|bcopy_aux$unknown:13| + |$knormal:12| + |$alpha-10:i| + |$alpha-7:m|) + true + true + (not true)))) + (=> a!2 true))))) +(assert (forall ((|$knormal:9| Int) + (|$alpha-10:i| Int) + (|$knormal:3| Int) + (|$alpha-7:m| Int) + (|$knormal:21| Int) + (|$knormal:19| Int) + (|$knormal:20| Int) + (|$alpha-11:$$tmp::1| Int) + (|$knormal:12| Int) + (|$V-reftype:22| Int) + (|$alpha-8:src| Int)) + (let ((a!1 (= (not (= 0 |$knormal:21|)) + (and (not (= 0 |$knormal:19|)) + (not (= 0 |$knormal:20|)))))) + (let ((a!2 (and (= |$knormal:9| (+ |$alpha-10:i| 1)) + (= (not (= 0 |$knormal:3|)) + (>= |$alpha-10:i| |$alpha-7:m|)) + a!1 + (= (not (= 0 |$knormal:20|)) + (<= |$alpha-10:i| |$alpha-7:m|)) + (= (not (= 0 |$knormal:19|)) (<= 0 |$alpha-10:i|)) + (= |$alpha-11:$$tmp::1| 1) + (not (not (= 0 |$knormal:3|))) + (not (= 0 |$knormal:21|)) + (|bcopy_aux$unknown:16| |$alpha-10:i| |$alpha-7:m|) + (|bcopy_aux$unknown:13| + |$knormal:12| + |$alpha-10:i| + |$alpha-7:m|) + (|bcopy_aux$unknown:13| + |$V-reftype:22| + |$alpha-8:src| + |$alpha-7:m|) + true + true))) + (=> a!2 + (|bcopy_aux$unknown:13| + |$V-reftype:22| + |$alpha-8:src| + |$alpha-7:m|)))))) +(assert (forall ((|$knormal:9| Int) + (|$alpha-10:i| Int) + (|$knormal:3| Int) + (|$alpha-7:m| Int) + (|$knormal:21| Int) + (|$knormal:19| Int) + (|$knormal:20| Int) + (|$alpha-11:$$tmp::1| Int) + (|$knormal:12| Int)) + (let ((a!1 (= (not (= 0 |$knormal:21|)) + (and (not (= 0 |$knormal:19|)) + (not (= 0 |$knormal:20|)))))) + (let ((a!2 (and (= |$knormal:9| (+ |$alpha-10:i| 1)) + (= (not (= 0 |$knormal:3|)) + (>= |$alpha-10:i| |$alpha-7:m|)) + a!1 + (= (not (= 0 |$knormal:20|)) + (<= |$alpha-10:i| |$alpha-7:m|)) + (= (not (= 0 |$knormal:19|)) (<= 0 |$alpha-10:i|)) + (= |$alpha-11:$$tmp::1| 1) + (not (not (= 0 |$knormal:3|))) + (not (= 0 |$knormal:21|)) + (|bcopy_aux$unknown:16| |$alpha-10:i| |$alpha-7:m|) + true + (|bcopy_aux$unknown:13| + |$knormal:12| + |$alpha-10:i| + |$alpha-7:m|) + true + (not true)))) + (=> a!2 true))))) +(assert (forall ((|$knormal:9| Int) + (|$alpha-10:i| Int) + (|$knormal:3| Int) + (|$alpha-7:m| Int) + (|$knormal:21| Int) + (|$knormal:19| Int) + (|$knormal:20| Int) + (|$alpha-11:$$tmp::1| Int) + (|$V-reftype:44| Int) + (|$knormal:18| Int) + (|$knormal:12| Int)) + (let ((a!1 (= (not (= 0 |$knormal:21|)) + (and (not (= 0 |$knormal:19|)) + (not (= 0 |$knormal:20|)))))) + (let ((a!2 (and (= |$knormal:9| (+ |$alpha-10:i| 1)) + (= (not (= 0 |$knormal:3|)) + (>= |$alpha-10:i| |$alpha-7:m|)) + a!1 + (= (not (= 0 |$knormal:20|)) + (<= |$alpha-10:i| |$alpha-7:m|)) + (= (not (= 0 |$knormal:19|)) (<= 0 |$alpha-10:i|)) + (= |$alpha-11:$$tmp::1| 1) + (not (not (= 0 |$knormal:3|))) + (not (= 0 |$knormal:21|)) + (|update$unknown:23| + |$V-reftype:44| + |$knormal:18| + |$knormal:12| + |$alpha-10:i|) + (|bcopy_aux$unknown:16| |$alpha-10:i| |$alpha-7:m|) + true + (|bcopy_aux$unknown:13| + |$knormal:12| + |$alpha-10:i| + |$alpha-7:m|) + true))) + (=> a!2 + (|bcopy_aux$unknown:15| + |$V-reftype:44| + |$knormal:18| + |$alpha-7:m|)))))) +(assert (forall ((|$knormal:3| Int) + (|$alpha-10:i| Int) + (|$alpha-7:m| Int) + (|$knormal:21| Int) + (|$knormal:19| Int) + (|$knormal:20| Int) + (|$alpha-11:$$tmp::1| Int) + (|$V-reftype:26| Int) + (|$alpha-9:des| Int) + (|$knormal:12| Int)) + (let ((a!1 (= (not (= 0 |$knormal:21|)) + (and (not (= 0 |$knormal:19|)) + (not (= 0 |$knormal:20|)))))) + (let ((a!2 (and (= (not (= 0 |$knormal:3|)) + (>= |$alpha-10:i| |$alpha-7:m|)) + a!1 + (= (not (= 0 |$knormal:20|)) + (<= |$alpha-10:i| |$alpha-7:m|)) + (= (not (= 0 |$knormal:19|)) (<= 0 |$alpha-10:i|)) + (= |$alpha-11:$$tmp::1| 1) + (not (not (= 0 |$knormal:3|))) + (not (= 0 |$knormal:21|)) + true + (|bcopy_aux$unknown:16| |$alpha-10:i| |$alpha-7:m|) + (|bcopy_aux$unknown:15| + |$V-reftype:26| + |$alpha-9:des| + |$alpha-7:m|) + (|bcopy_aux$unknown:13| + |$knormal:12| + |$alpha-10:i| + |$alpha-7:m|) + true))) + (=> a!2 (|update$unknown:19| |$V-reftype:26| |$alpha-9:des|)))))) +(assert (forall ((|$knormal:9| Int) + (|$alpha-10:i| Int) + (|$knormal:3| Int) + (|$alpha-7:m| Int) + (|$knormal:21| Int) + (|$knormal:19| Int) + (|$knormal:20| Int) + (|$alpha-11:$$tmp::1| Int) + (|$V-reftype:57| Int) + (|$knormal:11| Int) + (|$knormal:12| Int)) + (let ((a!1 (= (not (= 0 |$knormal:21|)) + (and (not (= 0 |$knormal:19|)) + (not (= 0 |$knormal:20|)))))) + (let ((a!2 (and (= |$knormal:9| (+ |$alpha-10:i| 1)) + (= (not (= 0 |$knormal:3|)) + (>= |$alpha-10:i| |$alpha-7:m|)) + a!1 + (= (not (= 0 |$knormal:20|)) + (<= |$alpha-10:i| |$alpha-7:m|)) + (= (not (= 0 |$knormal:19|)) (<= 0 |$alpha-10:i|)) + (= |$alpha-11:$$tmp::1| 1) + (= |$V-reftype:57| |$knormal:11|) + (not (not (= 0 |$knormal:3|))) + (not (= 0 |$knormal:21|)) + (|bcopy_aux$unknown:17| + |$knormal:11| + |$knormal:9| + |$alpha-7:m|) + (|bcopy_aux$unknown:16| |$alpha-10:i| |$alpha-7:m|) + (|bcopy_aux$unknown:13| + |$knormal:12| + |$alpha-10:i| + |$alpha-7:m|) + true))) + (=> a!2 + (|bcopy_aux$unknown:17| + |$V-reftype:57| + |$alpha-10:i| + |$alpha-7:m|)))))) +(assert (forall ((|$knormal:3| Int) + (|$alpha-10:i| Int) + (|$alpha-7:m| Int) + (|$knormal:21| Int) + (|$knormal:19| Int) + (|$knormal:20| Int) + (|$alpha-11:$$tmp::1| Int) + (|$knormal:12| Int)) + (let ((a!1 (= (not (= 0 |$knormal:21|)) + (and (not (= 0 |$knormal:19|)) + (not (= 0 |$knormal:20|)))))) + (let ((a!2 (and (= (not (= 0 |$knormal:3|)) + (>= |$alpha-10:i| |$alpha-7:m|)) + a!1 + (= (not (= 0 |$knormal:20|)) + (<= |$alpha-10:i| |$alpha-7:m|)) + (= (not (= 0 |$knormal:19|)) (<= 0 |$alpha-10:i|)) + (= |$alpha-11:$$tmp::1| 1) + (not (not (= 0 |$knormal:3|))) + (not (= 0 |$knormal:21|)) + true + (|bcopy_aux$unknown:16| |$alpha-10:i| |$alpha-7:m|) + (|bcopy_aux$unknown:13| + |$knormal:12| + |$alpha-10:i| + |$alpha-7:m|) + true + (not true)))) + (=> a!2 true))))) +(assert (forall ((|$knormal:3| Int) + (|$alpha-10:i| Int) + (|$alpha-7:m| Int) + (|$knormal:21| Int) + (|$knormal:19| Int) + (|$knormal:20| Int) + (|$alpha-11:$$tmp::1| Int) + (|$knormal:12| Int)) + (let ((a!1 (= (not (= 0 |$knormal:21|)) + (and (not (= 0 |$knormal:19|)) + (not (= 0 |$knormal:20|)))))) + (let ((a!2 (and (= (not (= 0 |$knormal:3|)) + (>= |$alpha-10:i| |$alpha-7:m|)) + a!1 + (= (not (= 0 |$knormal:20|)) + (<= |$alpha-10:i| |$alpha-7:m|)) + (= (not (= 0 |$knormal:19|)) (<= 0 |$alpha-10:i|)) + (= |$alpha-11:$$tmp::1| 1) + (not (not (= 0 |$knormal:3|))) + (not (= 0 |$knormal:21|)) + (|bcopy_aux$unknown:16| |$alpha-10:i| |$alpha-7:m|) + (|bcopy_aux$unknown:13| + |$knormal:12| + |$alpha-10:i| + |$alpha-7:m|) + true + (not true)))) + (=> a!2 true))))) +(assert (forall ((|$knormal:3| Int) + (|$alpha-10:i| Int) + (|$alpha-7:m| Int) + (|$knormal:21| Int) + (|$knormal:19| Int) + (|$knormal:20| Int) + (|$alpha-11:$$tmp::1| Int) + (|$knormal:12| Int)) + (let ((a!1 (= (not (= 0 |$knormal:21|)) + (and (not (= 0 |$knormal:19|)) + (not (= 0 |$knormal:20|)))))) + (let ((a!2 (and (= (not (= 0 |$knormal:3|)) + (>= |$alpha-10:i| |$alpha-7:m|)) + a!1 + (= (not (= 0 |$knormal:20|)) + (<= |$alpha-10:i| |$alpha-7:m|)) + (= (not (= 0 |$knormal:19|)) (<= 0 |$alpha-10:i|)) + (= |$alpha-11:$$tmp::1| 1) + (not (not (= 0 |$knormal:3|))) + (not (= 0 |$knormal:21|)) + (|bcopy_aux$unknown:16| |$alpha-10:i| |$alpha-7:m|) + (|bcopy_aux$unknown:13| + |$knormal:12| + |$alpha-10:i| + |$alpha-7:m|) + true + (not true)))) + (=> a!2 true))))) +(assert (forall ((|$knormal:9| Int) + (|$alpha-10:i| Int) + (|$knormal:3| Int) + (|$alpha-7:m| Int) + (|$knormal:21| Int) + (|$knormal:19| Int) + (|$knormal:20| Int) + (|$alpha-11:$$tmp::1| Int) + (|$knormal:12| Int)) + (let ((a!1 (= (not (= 0 |$knormal:21|)) + (and (not (= 0 |$knormal:19|)) + (not (= 0 |$knormal:20|)))))) + (let ((a!2 (and (= |$knormal:9| (+ |$alpha-10:i| 1)) + (= (not (= 0 |$knormal:3|)) + (>= |$alpha-10:i| |$alpha-7:m|)) + a!1 + (= (not (= 0 |$knormal:20|)) + (<= |$alpha-10:i| |$alpha-7:m|)) + (= (not (= 0 |$knormal:19|)) (<= 0 |$alpha-10:i|)) + (= |$alpha-11:$$tmp::1| 1) + (not (not (= 0 |$knormal:3|))) + (not (= 0 |$knormal:21|)) + (|bcopy_aux$unknown:16| |$alpha-10:i| |$alpha-7:m|) + (|bcopy_aux$unknown:13| + |$knormal:12| + |$alpha-10:i| + |$alpha-7:m|) + true + (not true)))) + (=> a!2 true))))) +(assert (forall ((|$knormal:9| Int) + (|$alpha-10:i| Int) + (|$knormal:3| Int) + (|$alpha-7:m| Int) + (|$knormal:21| Int) + (|$knormal:19| Int) + (|$knormal:20| Int) + (|$alpha-11:$$tmp::1| Int) + (|$knormal:12| Int)) + (let ((a!1 (= (not (= 0 |$knormal:21|)) + (and (not (= 0 |$knormal:19|)) + (not (= 0 |$knormal:20|)))))) + (let ((a!2 (and (= |$knormal:9| (+ |$alpha-10:i| 1)) + (= (not (= 0 |$knormal:3|)) + (>= |$alpha-10:i| |$alpha-7:m|)) + a!1 + (= (not (= 0 |$knormal:20|)) + (<= |$alpha-10:i| |$alpha-7:m|)) + (= (not (= 0 |$knormal:19|)) (<= 0 |$alpha-10:i|)) + (= |$alpha-11:$$tmp::1| 1) + (not (not (= 0 |$knormal:3|))) + (not (= 0 |$knormal:21|)) + (|bcopy_aux$unknown:16| |$alpha-10:i| |$alpha-7:m|) + (|bcopy_aux$unknown:13| + |$knormal:12| + |$alpha-10:i| + |$alpha-7:m|) + true))) + (=> a!2 (|bcopy_aux$unknown:16| |$knormal:9| |$alpha-7:m|)))))) +(assert (forall ((|$knormal:3| Int) + (|$alpha-10:i| Int) + (|$alpha-7:m| Int) + (|$knormal:21| Int) + (|$knormal:19| Int) + (|$knormal:20| Int) + (|$alpha-11:$$tmp::1| Int)) + (let ((a!1 (= (not (= 0 |$knormal:21|)) + (and (not (= 0 |$knormal:19|)) + (not (= 0 |$knormal:20|)))))) + (let ((a!2 (and (= (not (= 0 |$knormal:3|)) + (>= |$alpha-10:i| |$alpha-7:m|)) + a!1 + (= (not (= 0 |$knormal:20|)) + (<= |$alpha-10:i| |$alpha-7:m|)) + (= (not (= 0 |$knormal:19|)) (<= 0 |$alpha-10:i|)) + (= |$alpha-11:$$tmp::1| 1) + (not (not (= 0 |$knormal:3|))) + (not (= 0 |$knormal:21|)) + (|bcopy_aux$unknown:16| |$alpha-10:i| |$alpha-7:m|) + true + (not true)))) + (=> a!2 true))))) +(assert (forall ((|$knormal:3| Int) + (|$alpha-10:i| Int) + (|$alpha-7:m| Int) + (|$V-reftype:51| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:3|)) + (>= |$alpha-10:i| |$alpha-7:m|)) + (= |$V-reftype:51| 1) + (not (= 0 |$knormal:3|)) + (|bcopy_aux$unknown:16| |$alpha-10:i| |$alpha-7:m|) + true))) + (=> a!1 + (|bcopy_aux$unknown:17| + |$V-reftype:51| + |$alpha-10:i| + |$alpha-7:m|))))) +(assert (forall ((|$knormal:3| Int) + (|$alpha-10:i| Int) + (|$alpha-7:m| Int) + (|$knormal:21| Int) + (|$knormal:19| Int) + (|$knormal:20| Int)) + (let ((a!1 (= (not (= 0 |$knormal:21|)) + (and (not (= 0 |$knormal:19|)) + (not (= 0 |$knormal:20|)))))) + (let ((a!2 (and (= (not (= 0 |$knormal:3|)) + (>= |$alpha-10:i| |$alpha-7:m|)) + a!1 + (= (not (= 0 |$knormal:20|)) + (<= |$alpha-10:i| |$alpha-7:m|)) + (= (not (= 0 |$knormal:19|)) (<= 0 |$alpha-10:i|)) + (not (not (= 0 |$knormal:3|))) + (not (not (= 0 |$knormal:21|))) + (|bcopy_aux$unknown:16| |$alpha-10:i| |$alpha-7:m|) + true))) + (=> a!2 false))))) +(assert (forall ((|$knormal:1| Int) + (|$alpha-6:j| Int) + (|$alpha-4:i| Int) + (|$V-reftype:49| Int) + (|$knormal:2| Int) + (|$alpha-5:x| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:1|)) + (= |$alpha-6:j| |$alpha-4:i|)) + (= |$V-reftype:49| |$knormal:2|) + (not (not (= 0 |$knormal:1|))) + true + true + true + (|update$unknown:19| |$knormal:2| |$alpha-6:j|)))) + (=> a!1 + (|update$unknown:23| + |$V-reftype:49| + |$alpha-6:j| + |$alpha-5:x| + |$alpha-4:i|))))) +(assert (forall ((|$knormal:1| Int) + (|$alpha-6:j| Int) + (|$alpha-4:i| Int) + (|$V-reftype:48| Int) + (|$alpha-5:x| Int)) + (let ((a!1 (and (= (not (= 0 |$knormal:1|)) + (= |$alpha-6:j| |$alpha-4:i|)) + (= |$V-reftype:48| |$alpha-5:x|) + (not (= 0 |$knormal:1|)) + true + true + true))) + (=> a!1 + (|update$unknown:23| + |$V-reftype:48| + |$alpha-6:j| + |$alpha-5:x| + |$alpha-4:i|))))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0144.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0144.smt2 new file mode 100644 index 000000000..1a30f6f7d --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0144.smt2 @@ -0,0 +1,797 @@ +;; Original file: phi_4.smt2 +(set-logic HORN) +(declare-fun REC_f_ (Int Int Int ) Bool) +(declare-fun REC__f (Int Int Int ) Bool) +(declare-fun REC_f_f (Int Int Int Int Int Int ) Bool) + + +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int)) + (let ((a!1 (not (>= (+ F (- 1)) 0)))) + (let ((a!2 (and (not (= A (+ B 1))) + (= (+ C (- 1)) D) + (= (* (- 1) E) (- 1)) + (REC_f_ D E A) + (= (+ F (- 1)) 0) + a!1 + (= G 0) + (>= (+ C (- 1)) 0) + (not (= C 0)) + (= C F) + (= G B)))) + (=> a!2 false))))) +(assert (forall ((A Int) + (B Int) + (C Int) + (D Int) + (E Int) + (F Int) + (G Int) + (H Int) + (I Int) + (J Int) + (K Int)) + (let ((a!1 (not (= (+ C (- 1)) 0))) (a!2 (not (>= (+ C (- 1)) 0)))) + (let ((a!3 (and (not (= A B)) + (= (+ C (- 1)) D) + (REC__f D E B) + (= (+ F (- 1)) G) + (= (* (- 1) H) (- 1)) + (= (+ I (- 1)) J) + (REC_f_f G H A C J E) + a!1 + a!2 + (= K 0) + (>= (+ F (- 1)) 0) + (not (= F 0)) + (= F C) + (= K I)))) + (=> a!3 false))))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int)) + (let ((a!1 (and (not (= A (+ B 1))) + (= (+ C (- 1)) D) + (= (* (- 1) E) (- 1)) + (REC_f_ D E A) + (= (+ F (- 1)) 0) + (not (= B 0)) + (= G 0) + (>= (+ C (- 1)) 0) + (not (= C 0)) + (= C F) + (= G B)))) + (=> a!1 false)))) +(assert (forall ((A Int) + (B Int) + (C Int) + (D Int) + (E Int) + (F Int) + (G Int) + (H Int) + (I Int) + (J Int) + (K Int)) + (let ((a!1 (not (= (+ C (- 1)) 0)))) + (let ((a!2 (and (not (= A B)) + (= (+ C (- 1)) D) + (REC__f D E B) + (= (+ F (- 1)) G) + (= (* (- 1) H) (- 1)) + (= (+ I (- 1)) J) + (REC_f_f G H A C J E) + a!1 + (not (= I 0)) + (= K 0) + (>= (+ F (- 1)) 0) + (not (= F 0)) + (= F C) + (= K I)))) + (=> a!2 false))))) +(assert (forall ((A Int) + (B Int) + (C Int) + (D Int) + (E Int) + (F Int) + (G Int) + (H Int) + (I Int) + (J Int)) + (let ((a!1 (and (not (= A B)) + (= (+ C (- 1)) D) + (= (* (- 1) E) (- 1)) + (= (+ F (- 1)) G) + (= (* (- 1) H) (- 1)) + (REC_f_f D E A G H B) + (= I 0) + (>= (+ F (- 1)) 0) + (= J 0) + (>= (+ C (- 1)) 0) + (not (= C 0)) + (= C F) + (= J I)))) + (=> a!1 false)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int)) + (let ((a!1 (not (>= (+ H (- 1)) 0)))) + (let ((a!2 (and (not (= A (+ B 1))) + (= (+ C (- 1)) D) + (REC_f_ D E A) + (= (+ F (- 1)) G) + (REC_f_ C G E) + (= (+ H (- 1)) 0) + a!1 + (not (= F 0)) + (not (= C 0)) + (= C H) + (= F B)))) + (=> a!2 false))))) +(assert (forall ((A Int) + (B Int) + (C Int) + (D Int) + (E Int) + (F Int) + (G Int) + (H Int) + (I Int) + (J Int) + (K Int) + (L Int)) + (let ((a!1 (not (= (+ E (- 1)) 0))) (a!2 (not (>= (+ E (- 1)) 0)))) + (let ((a!3 (and (not (= A B)) + (= (+ C (- 1)) D) + (= (+ E (- 1)) F) + (REC_f_f D G A F H B) + (= (+ I (- 1)) J) + (= (+ K (- 1)) L) + (REC_f_f C J G E L H) + a!1 + a!2 + (not (= I 0)) + (not (= C 0)) + (= C E) + (= I K)))) + (=> a!3 false))))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int)) + (let ((a!1 (and (not (= A (+ B 1))) + (= (+ C (- 1)) D) + (REC_f_ D E A) + (= (+ F (- 1)) G) + (REC_f_ C G E) + (= (+ H (- 1)) 0) + (not (= B 0)) + (not (= F 0)) + (not (= C 0)) + (= C H) + (= F B)))) + (=> a!1 false)))) +(assert (forall ((A Int) + (B Int) + (C Int) + (D Int) + (E Int) + (F Int) + (G Int) + (H Int) + (I Int) + (J Int) + (K Int) + (L Int)) + (let ((a!1 (not (= (+ E (- 1)) 0)))) + (let ((a!2 (and (not (= A B)) + (= (+ C (- 1)) D) + (= (+ E (- 1)) F) + (REC_f_f D G A F H B) + (= (+ I (- 1)) J) + (= (+ K (- 1)) L) + (REC_f_f C J G E L H) + a!1 + (not (= K 0)) + (not (= I 0)) + (not (= C 0)) + (= C E) + (= I K)))) + (=> a!2 false))))) +(assert (forall ((A Int) + (B Int) + (C Int) + (D Int) + (E Int) + (F Int) + (G Int) + (H Int) + (I Int) + (J Int) + (K Int)) + (let ((a!1 (and (not (= A B)) + (= (+ C (- 1)) D) + (REC_f_ D E A) + (= (+ F (- 1)) G) + (= (+ H (- 1)) I) + (= (* (- 1) J) (- 1)) + (REC_f_f C G E I J B) + (= K 0) + (>= (+ H (- 1)) 0) + (not (= F 0)) + (not (= C 0)) + (= C H) + (= F K)))) + (=> a!1 false)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int)) + (let ((a!1 (not (>= (+ H (- 1)) 0))) (a!2 (not (>= (+ C (- 1)) 0)))) + (let ((a!3 (and (not (= A (+ B 1))) + (= (+ C (- 1)) D) + (REC_f_ D E A) + (= (+ F (- 1)) G) + (REC_f_ C G E) + (= (+ H (- 1)) 0) + a!1 + a!2 + (not (= C 0)) + (= C H) + (= F B)))) + (=> a!3 false))))) +(assert (forall ((A Int) + (B Int) + (C Int) + (D Int) + (E Int) + (F Int) + (G Int) + (H Int) + (I Int) + (J Int) + (K Int) + (L Int)) + (let ((a!1 (not (= (+ E (- 1)) 0))) + (a!2 (not (>= (+ E (- 1)) 0))) + (a!3 (not (>= (+ C (- 1)) 0)))) + (let ((a!4 (and (not (= A B)) + (= (+ C (- 1)) D) + (= (+ E (- 1)) F) + (REC_f_f D G A F H B) + (= (+ I (- 1)) J) + (= (+ K (- 1)) L) + (REC_f_f C J G E L H) + a!1 + a!2 + a!3 + (not (= C 0)) + (= C E) + (= I K)))) + (=> a!4 false))))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int)) + (let ((a!1 (not (>= (+ C (- 1)) 0)))) + (let ((a!2 (and (not (= A (+ B 1))) + (= (+ C (- 1)) D) + (REC_f_ D E A) + (= (+ F (- 1)) G) + (REC_f_ C G E) + (= (+ H (- 1)) 0) + (not (= B 0)) + a!1 + (not (= C 0)) + (= C H) + (= F B)))) + (=> a!2 false))))) +(assert (forall ((A Int) + (B Int) + (C Int) + (D Int) + (E Int) + (F Int) + (G Int) + (H Int) + (I Int) + (J Int) + (K Int) + (L Int)) + (let ((a!1 (not (= (+ E (- 1)) 0))) (a!2 (not (>= (+ C (- 1)) 0)))) + (let ((a!3 (and (not (= A B)) + (= (+ C (- 1)) D) + (= (+ E (- 1)) F) + (REC_f_f D G A F H B) + (= (+ I (- 1)) J) + (= (+ K (- 1)) L) + (REC_f_f C J G E L H) + a!1 + (not (= K 0)) + a!2 + (not (= C 0)) + (= C E) + (= I K)))) + (=> a!3 false))))) +(assert (forall ((A Int) + (B Int) + (C Int) + (D Int) + (E Int) + (F Int) + (G Int) + (H Int) + (I Int) + (J Int) + (K Int)) + (let ((a!1 (not (>= (+ C (- 1)) 0)))) + (let ((a!2 (and (not (= A B)) + (= (+ C (- 1)) D) + (REC_f_ D E A) + (= (+ F (- 1)) G) + (= (+ H (- 1)) I) + (= (* (- 1) J) (- 1)) + (REC_f_f C G E I J B) + (= K 0) + (>= (+ H (- 1)) 0) + a!1 + (not (= C 0)) + (= C H) + (= F K)))) + (=> a!2 false))))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int)) + (let ((a!1 (and (not (= (+ A 1) B)) + (= (+ C (- 1)) D) + (= (* (- 1) E) (- 1)) + (REC__f D E B) + (= F 0) + (>= (+ C (- 1)) 0) + (= G 0) + (= G C) + (= A F)))) + (=> a!1 false)))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int)) + (let ((a!1 (not (= (+ C (- 1)) 0)))) + (let ((a!2 (and (not (= (+ A 1) B)) + (= (+ C (- 1)) D) + (REC__f D E B) + (= (+ F (- 1)) G) + (REC__f C G E) + a!1 + (not (= F 0)) + (= H 0) + (= H C) + (= A F)))) + (=> a!2 false))))) +(assert (forall ((A Int) (B Int) (C Int) (D Int) (E Int) (F Int) (G Int) (H Int)) + (let ((a!1 (not (= (+ C (- 1)) 0))) (a!2 (not (>= (+ C (- 1)) 0)))) + (let ((a!3 (and (not (= (+ A 1) B)) + (= (+ C (- 1)) D) + (REC__f D E B) + (= (+ F (- 1)) G) + (REC__f C G E) + a!1 + a!2 + (= H 0) + (= H C) + (= A F)))) + (=> a!3 false))))) +(assert (forall ((B Int) (C Int) (A Int)) + (=> (and (= (+ B 1) C) (= A 0)) (REC_f_ A B C)))) +(assert (forall ((A Int) (D Int) (E Int) (C Int) (B Int) (F Int)) + (let ((a!1 (not (>= (+ A (- 1)) 0)))) + (let ((a!2 (and (= (+ A (- 1)) D) + (REC_f_ D E C) + (= (+ B (- 1)) F) + (REC_f_ A F E) + a!1 + (not (= A 0))))) + (=> a!2 (REC_f_ A B C)))))) +(assert (forall ((A Int) (D Int) (E Int) (C Int) (B Int) (F Int)) + (let ((a!1 (and (= (+ A (- 1)) D) + (REC_f_ D E C) + (= (+ B (- 1)) F) + (REC_f_ A F E) + (not (= B 0)) + (not (= A 0))))) + (=> a!1 (REC_f_ A B C))))) +(assert (forall ((A Int) (D Int) (E Int) (C Int) (B Int)) + (let ((a!1 (and (= (+ A (- 1)) D) + (= (* (- 1) E) (- 1)) + (REC_f_ D E C) + (= B 0) + (>= (+ A (- 1)) 0) + (not (= A 0))))) + (=> a!1 (REC_f_ A B C))))) +(assert (forall ((B Int) (C Int) (E Int) (F Int) (D Int) (A Int)) + (let ((a!1 (not (>= (+ D (- 1)) 0)))) + (let ((a!2 (and (= (+ B 1) C) (= (+ E 1) F) (= (+ D (- 1)) 0) a!1 (= A 0)))) + (=> a!2 (REC_f_f A B C D E F)))))) +(assert (forall ((B Int) + (C Int) + (D Int) + (G Int) + (H Int) + (F Int) + (E Int) + (I Int) + (A Int)) + (let ((a!1 (not (= (+ D (- 1)) 0))) (a!2 (not (>= (+ D (- 1)) 0)))) + (let ((a!3 (and (= (+ B 1) C) + (= (+ D (- 1)) G) + (REC__f G H F) + (= (+ E (- 1)) I) + (REC__f D I H) + a!1 + a!2 + (= A 0)))) + (=> a!3 (REC_f_f A B C D E F)))))) +(assert (forall ((B Int) (C Int) (E Int) (F Int) (D Int) (A Int)) + (let ((a!1 (and (= (+ B 1) C) + (= (+ E 1) F) + (= (+ D (- 1)) 0) + (not (= E 0)) + (= A 0)))) + (=> a!1 (REC_f_f A B C D E F))))) +(assert (forall ((B Int) + (C Int) + (D Int) + (G Int) + (H Int) + (F Int) + (E Int) + (I Int) + (A Int)) + (let ((a!1 (not (= (+ D (- 1)) 0)))) + (let ((a!2 (and (= (+ B 1) C) + (= (+ D (- 1)) G) + (REC__f G H F) + (= (+ E (- 1)) I) + (REC__f D I H) + a!1 + (not (= E 0)) + (= A 0)))) + (=> a!2 (REC_f_f A B C D E F)))))) +(assert (forall ((B Int) (C Int) (D Int) (G Int) (H Int) (F Int) (E Int) (A Int)) + (let ((a!1 (and (= (+ B 1) C) + (= (+ D (- 1)) G) + (= (* (- 1) H) (- 1)) + (REC__f G H F) + (= E 0) + (>= (+ D (- 1)) 0) + (= A 0)))) + (=> a!1 (REC_f_f A B C D E F))))) +(assert (forall ((A Int) + (G Int) + (H Int) + (C Int) + (B Int) + (I Int) + (D Int) + (J Int) + (K Int) + (F Int) + (E Int)) + (let ((a!1 (not (>= (+ A (- 1)) 0)))) + (let ((a!2 (and (= (+ A (- 1)) G) + (REC_f_ G H C) + (= (+ B (- 1)) I) + (= (+ D (- 1)) J) + (= (* (- 1) K) (- 1)) + (REC_f_f A I H J K F) + (= E 0) + (>= (+ D (- 1)) 0) + a!1 + (not (= A 0))))) + (=> a!2 (REC_f_f A B C D E F)))))) +(assert (forall ((A Int) + (G Int) + (D Int) + (H Int) + (I Int) + (C Int) + (J Int) + (F Int) + (B Int) + (K Int) + (E Int) + (L Int)) + (let ((a!1 (not (= (+ D (- 1)) 0))) (a!2 (not (>= (+ A (- 1)) 0)))) + (let ((a!3 (and (= (+ A (- 1)) G) + (= (+ D (- 1)) H) + (REC_f_f G I C H J F) + (= (+ B (- 1)) K) + (= (+ E (- 1)) L) + (REC_f_f A K I D L J) + a!1 + (not (= E 0)) + a!2 + (not (= A 0))))) + (=> a!3 (REC_f_f A B C D E F)))))) +(assert (forall ((E Int) + (F Int) + (A Int) + (G Int) + (H Int) + (C Int) + (B Int) + (I Int) + (D Int)) + (let ((a!1 (not (>= (+ A (- 1)) 0)))) + (let ((a!2 (and (= (+ E 1) F) + (= (+ A (- 1)) G) + (REC_f_ G H C) + (= (+ B (- 1)) I) + (REC_f_ A I H) + (= (+ D (- 1)) 0) + (not (= E 0)) + a!1 + (not (= A 0))))) + (=> a!2 (REC_f_f A B C D E F)))))) +(assert (forall ((A Int) + (G Int) + (D Int) + (H Int) + (I Int) + (C Int) + (J Int) + (F Int) + (B Int) + (K Int) + (E Int) + (L Int)) + (let ((a!1 (not (= (+ D (- 1)) 0))) + (a!2 (not (>= (+ D (- 1)) 0))) + (a!3 (not (>= (+ A (- 1)) 0)))) + (let ((a!4 (and (= (+ A (- 1)) G) + (= (+ D (- 1)) H) + (REC_f_f G I C H J F) + (= (+ B (- 1)) K) + (= (+ E (- 1)) L) + (REC_f_f A K I D L J) + a!1 + a!2 + a!3 + (not (= A 0))))) + (=> a!4 (REC_f_f A B C D E F)))))) +(assert (forall ((E Int) + (F Int) + (A Int) + (G Int) + (H Int) + (C Int) + (B Int) + (I Int) + (D Int)) + (let ((a!1 (not (>= (+ D (- 1)) 0))) (a!2 (not (>= (+ A (- 1)) 0)))) + (let ((a!3 (and (= (+ E 1) F) + (= (+ A (- 1)) G) + (REC_f_ G H C) + (= (+ B (- 1)) I) + (REC_f_ A I H) + (= (+ D (- 1)) 0) + a!1 + a!2 + (not (= A 0))))) + (=> a!3 (REC_f_f A B C D E F)))))) +(assert (forall ((A Int) + (G Int) + (H Int) + (C Int) + (B Int) + (I Int) + (D Int) + (J Int) + (K Int) + (F Int) + (E Int)) + (let ((a!1 (and (= (+ A (- 1)) G) + (REC_f_ G H C) + (= (+ B (- 1)) I) + (= (+ D (- 1)) J) + (= (* (- 1) K) (- 1)) + (REC_f_f A I H J K F) + (= E 0) + (>= (+ D (- 1)) 0) + (not (= B 0)) + (not (= A 0))))) + (=> a!1 (REC_f_f A B C D E F))))) +(assert (forall ((A Int) + (G Int) + (D Int) + (H Int) + (I Int) + (C Int) + (J Int) + (F Int) + (B Int) + (K Int) + (E Int) + (L Int)) + (let ((a!1 (not (= (+ D (- 1)) 0)))) + (let ((a!2 (and (= (+ A (- 1)) G) + (= (+ D (- 1)) H) + (REC_f_f G I C H J F) + (= (+ B (- 1)) K) + (= (+ E (- 1)) L) + (REC_f_f A K I D L J) + a!1 + (not (= E 0)) + (not (= B 0)) + (not (= A 0))))) + (=> a!2 (REC_f_f A B C D E F)))))) +(assert (forall ((E Int) + (F Int) + (A Int) + (G Int) + (H Int) + (C Int) + (B Int) + (I Int) + (D Int)) + (let ((a!1 (and (= (+ E 1) F) + (= (+ A (- 1)) G) + (REC_f_ G H C) + (= (+ B (- 1)) I) + (REC_f_ A I H) + (= (+ D (- 1)) 0) + (not (= E 0)) + (not (= B 0)) + (not (= A 0))))) + (=> a!1 (REC_f_f A B C D E F))))) +(assert (forall ((A Int) + (G Int) + (D Int) + (H Int) + (I Int) + (C Int) + (J Int) + (F Int) + (B Int) + (K Int) + (E Int) + (L Int)) + (let ((a!1 (not (= (+ D (- 1)) 0))) (a!2 (not (>= (+ D (- 1)) 0)))) + (let ((a!3 (and (= (+ A (- 1)) G) + (= (+ D (- 1)) H) + (REC_f_f G I C H J F) + (= (+ B (- 1)) K) + (= (+ E (- 1)) L) + (REC_f_f A K I D L J) + a!1 + a!2 + (not (= B 0)) + (not (= A 0))))) + (=> a!3 (REC_f_f A B C D E F)))))) +(assert (forall ((E Int) + (F Int) + (A Int) + (G Int) + (H Int) + (C Int) + (B Int) + (I Int) + (D Int)) + (let ((a!1 (not (>= (+ D (- 1)) 0)))) + (let ((a!2 (and (= (+ E 1) F) + (= (+ A (- 1)) G) + (REC_f_ G H C) + (= (+ B (- 1)) I) + (REC_f_ A I H) + (= (+ D (- 1)) 0) + a!1 + (not (= B 0)) + (not (= A 0))))) + (=> a!2 (REC_f_f A B C D E F)))))) +(assert (forall ((A Int) + (G Int) + (H Int) + (D Int) + (I Int) + (J Int) + (C Int) + (F Int) + (E Int) + (B Int)) + (let ((a!1 (and (= (+ A (- 1)) G) + (= (* (- 1) H) (- 1)) + (= (+ D (- 1)) I) + (= (* (- 1) J) (- 1)) + (REC_f_f G H C I J F) + (= E 0) + (>= (+ D (- 1)) 0) + (= B 0) + (>= (+ A (- 1)) 0) + (not (= A 0))))) + (=> a!1 (REC_f_f A B C D E F))))) +(assert (forall ((D Int) + (G Int) + (H Int) + (F Int) + (A Int) + (I Int) + (J Int) + (E Int) + (K Int) + (C Int) + (B Int)) + (let ((a!1 (not (= (+ D (- 1)) 0)))) + (let ((a!2 (and (= (+ D (- 1)) G) + (REC__f G H F) + (= (+ A (- 1)) I) + (= (* (- 1) J) (- 1)) + (= (+ E (- 1)) K) + (REC_f_f I J C D K H) + a!1 + (not (= E 0)) + (= B 0) + (>= (+ A (- 1)) 0) + (not (= A 0))))) + (=> a!2 (REC_f_f A B C D E F)))))) +(assert (forall ((E Int) (F Int) (A Int) (G Int) (H Int) (C Int) (D Int) (B Int)) + (let ((a!1 (and (= (+ E 1) F) + (= (+ A (- 1)) G) + (= (* (- 1) H) (- 1)) + (REC_f_ G H C) + (= (+ D (- 1)) 0) + (not (= E 0)) + (= B 0) + (>= (+ A (- 1)) 0) + (not (= A 0))))) + (=> a!1 (REC_f_f A B C D E F))))) +(assert (forall ((D Int) + (G Int) + (H Int) + (F Int) + (A Int) + (I Int) + (J Int) + (E Int) + (K Int) + (C Int) + (B Int)) + (let ((a!1 (not (= (+ D (- 1)) 0))) (a!2 (not (>= (+ D (- 1)) 0)))) + (let ((a!3 (and (= (+ D (- 1)) G) + (REC__f G H F) + (= (+ A (- 1)) I) + (= (* (- 1) J) (- 1)) + (= (+ E (- 1)) K) + (REC_f_f I J C D K H) + a!1 + a!2 + (= B 0) + (>= (+ A (- 1)) 0) + (not (= A 0))))) + (=> a!3 (REC_f_f A B C D E F)))))) +(assert (forall ((E Int) (F Int) (A Int) (G Int) (H Int) (C Int) (D Int) (B Int)) + (let ((a!1 (not (>= (+ D (- 1)) 0)))) + (let ((a!2 (and (= (+ E 1) F) + (= (+ A (- 1)) G) + (= (* (- 1) H) (- 1)) + (REC_f_ G H C) + (= (+ D (- 1)) 0) + a!1 + (= B 0) + (>= (+ A (- 1)) 0) + (not (= A 0))))) + (=> a!2 (REC_f_f A B C D E F)))))) +(assert (forall ((A Int) (D Int) (E Int) (C Int) (B Int)) + (let ((a!1 (and (= (+ A (- 1)) D) + (= (* (- 1) E) (- 1)) + (REC__f D E C) + (= B 0) + (>= (+ A (- 1)) 0)))) + (=> a!1 (REC__f A B C))))) +(assert (forall ((A Int) (D Int) (E Int) (C Int) (B Int) (F Int)) + (let ((a!1 (not (= (+ A (- 1)) 0)))) + (let ((a!2 (and (= (+ A (- 1)) D) + (REC__f D E C) + (= (+ B (- 1)) F) + (REC__f A F E) + a!1 + (not (= B 0))))) + (=> a!2 (REC__f A B C)))))) +(assert (forall ((B Int) (C Int) (A Int)) + (let ((a!1 (and (= (+ B 1) C) (= (+ A (- 1)) 0) (not (= B 0))))) + (=> a!1 (REC__f A B C))))) +(assert (forall ((A Int) (D Int) (E Int) (C Int) (B Int) (F Int)) + (let ((a!1 (not (= (+ A (- 1)) 0))) (a!2 (not (>= (+ A (- 1)) 0)))) + (let ((a!3 (and (= (+ A (- 1)) D) + (REC__f D E C) + (= (+ B (- 1)) F) + (REC__f A F E) + a!1 + a!2))) + (=> a!3 (REC__f A B C)))))) +(assert (forall ((B Int) (C Int) (A Int)) + (let ((a!1 (not (>= (+ A (- 1)) 0)))) + (let ((a!2 (and (= (+ B 1) C) (= (+ A (- 1)) 0) a!1))) + (=> a!2 (REC__f A B C)))))) +(check-sat) diff --git a/bench_horn_nonlin/parallel_05.smt2 b/bench_horn_nonlin/parallel_05.smt2 new file mode 100644 index 000000000..3093d79d3 --- /dev/null +++ b/bench_horn_nonlin/parallel_05.smt2 @@ -0,0 +1,21 @@ +(declare-rel inv2 (Int)) +(declare-rel inv3 (Int)) +(declare-rel inv4 (Int Int)) +(declare-var x Int) +(declare-var x1 Int) +(declare-var y Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (=> (= x 12) (inv2 x))) +(rule (=> (= x 7) (inv3 x))) + +(rule (=> (and (inv2 x) (= x1 (+ x 2))) (inv2 x1))) +(rule (=> (and (inv3 y) (= y1 (- y 3))) (inv3 y1))) + +(rule (=> (and (inv2 x) (inv3 y)) (inv4 x y))) + +(rule (=> (and (inv4 x y) (not (> x y))) fail)) + +(query fail) diff --git a/bench_horn_nonlin/parallel_06.smt2 b/bench_horn_nonlin/parallel_06.smt2 index 11d0ad549..3f8aa3090 100644 --- a/bench_horn_nonlin/parallel_06.smt2 +++ b/bench_horn_nonlin/parallel_06.smt2 @@ -1,4 +1,3 @@ -(declare-rel inv1 (Int Int)) (declare-rel inv2 (Int)) (declare-rel inv3 (Int)) (declare-rel inv4 (Int)) diff --git a/bench_horn_nonlin/vacuity_01.smt2 b/bench_horn_nonlin/vacuity_01.smt2 new file mode 100644 index 000000000..4d184a359 --- /dev/null +++ b/bench_horn_nonlin/vacuity_01.smt2 @@ -0,0 +1,11 @@ +(declare-rel f (Int)) +(declare-rel g (Int)) + +(declare-var x Int) + +(declare-rel fail ()) + +(rule (=> (< x 0) (f x))) +(rule (=> (and (f x) (g x) (not (>= x 0))) fail)) + +(query fail) diff --git a/bench_horn_nonlin/vacuity_02.smt2 b/bench_horn_nonlin/vacuity_02.smt2 new file mode 100644 index 000000000..df7d717dc --- /dev/null +++ b/bench_horn_nonlin/vacuity_02.smt2 @@ -0,0 +1,14 @@ +(declare-rel f (Int)) +(declare-rel g (Int)) +(declare-rel h (Int)) + +(declare-var x Int) +(declare-var y Int) + +(declare-rel fail ()) + +(rule (=> (and (h x) (h y)) (f (- x y)))) +(rule (=> (and (h x) (h y)) (g (+ x y)))) +(rule (=> (and (f x) (g y) (not (>= (- x y) 0))) fail)) + +(query fail) diff --git a/bench_horn_nonlin/vacuity_03.smt2 b/bench_horn_nonlin/vacuity_03.smt2 new file mode 100644 index 000000000..73058045d --- /dev/null +++ b/bench_horn_nonlin/vacuity_03.smt2 @@ -0,0 +1,14 @@ +(declare-rel f (Int)) +(declare-rel g (Int)) +(declare-rel h (Int)) + +(declare-var x Int) +(declare-var y Int) + +(declare-rel fail ()) + +(rule (=> (and (h x) (h y)) (f (+ x y)))) +(rule (=> (and (h x) (h y)) (g (+ x y)))) +(rule (=> (and (f x) (g y) (not (>= (+ x y) -100))) fail)) + +(query fail) diff --git a/bench_horn_nonlin/vacuity_04.smt2 b/bench_horn_nonlin/vacuity_04.smt2 new file mode 100644 index 000000000..8fee07fef --- /dev/null +++ b/bench_horn_nonlin/vacuity_04.smt2 @@ -0,0 +1,17 @@ +(declare-rel f (Int)) +(declare-rel g (Int)) +(declare-rel h (Int)) +(declare-rel k (Int)) +(declare-rel l (Int)) + +(declare-var x Int) +(declare-var y Int) + +(declare-rel fail ()) + +(rule (=> (= x -1) (k x))) +(rule (=> (and (k x) (h y)) (f (+ x y)))) +(rule (=> (and (l x) (h y)) (g (+ x y)))) +(rule (=> (and (f x) (g y) (not (>= (+ x y) -2))) fail)) + +(query fail) diff --git a/bench_horn_nonlin/vacuity_05.smt2 b/bench_horn_nonlin/vacuity_05.smt2 new file mode 100644 index 000000000..0478df8dc --- /dev/null +++ b/bench_horn_nonlin/vacuity_05.smt2 @@ -0,0 +1,16 @@ +(declare-rel f (Int)) +(declare-rel g (Int)) +(declare-rel h (Int)) +(declare-rel k (Int)) + +(declare-var x Int) +(declare-var y Int) + +(declare-rel fail ()) + +(rule (=> (= x -1) (k x))) +(rule (=> (and (k x) (h y)) (f (+ x y)))) +(rule (=> (g x) (g (- x)))) +(rule (=> (and (f x) (g y) (not (= x y))) fail)) + +(query fail) diff --git a/bench_horn_nonlin/vacuity_06.smt2 b/bench_horn_nonlin/vacuity_06.smt2 new file mode 100644 index 000000000..e247ecdfe --- /dev/null +++ b/bench_horn_nonlin/vacuity_06.smt2 @@ -0,0 +1,17 @@ +(declare-rel f (Int)) +(declare-rel g (Int)) +(declare-rel h (Int)) +(declare-rel k (Int)) +(declare-rel l (Int)) + +(declare-var x Int) +(declare-var y Int) + +(declare-rel fail ()) + +(rule (=> (= x -1) (k x))) +(rule (=> (and (k x) (h y)) (f (+ x y)))) +(rule (=> (and (l x) (h y)) (g (+ x y)))) +(rule (=> (and (f x) (g y) (not (= x y))) fail)) + +(query fail) diff --git a/bench_horn_nonlin/vacuity_07.smt2 b/bench_horn_nonlin/vacuity_07.smt2 new file mode 100644 index 000000000..a4735d60c --- /dev/null +++ b/bench_horn_nonlin/vacuity_07.smt2 @@ -0,0 +1,16 @@ +(declare-rel f (Int Int)) +(declare-rel g (Int)) + +(declare-var x Int) +(declare-var y Int) +(declare-var z Int) +(declare-var x1 Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x 0) (= y 0)) (f x y))) +(rule (=> (and (f x y) (= x1 (+ x 1)) (= y1 (+ y x))) (f x1 y1))) +(rule (=> (and (f x y) (g z) (not (>= y z))) fail)) + +(query fail) diff --git a/bench_horn_nonlin/vacuity_08.smt2 b/bench_horn_nonlin/vacuity_08.smt2 new file mode 100644 index 000000000..595975c5d --- /dev/null +++ b/bench_horn_nonlin/vacuity_08.smt2 @@ -0,0 +1,17 @@ +(declare-rel f (Int Int)) +(declare-rel g (Int)) +(declare-rel h (Int Int)) + +(declare-var x Int) +(declare-var y Int) +(declare-var z Int) +(declare-var x1 Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (=> (g z) (g (* 2 z)))) +(rule (=> (and (f x y) (h x1 x) (= y1 (+ y x))) (f x1 y1))) +(rule (=> (and (f x y) (g z) (not (>= y (* 2 z)))) fail)) + +(query fail) diff --git a/bench_horn_nonlin/vacuity_09.smt2 b/bench_horn_nonlin/vacuity_09.smt2 new file mode 100644 index 000000000..9981e6dbd --- /dev/null +++ b/bench_horn_nonlin/vacuity_09.smt2 @@ -0,0 +1,16 @@ +(declare-rel f (Int)) +(declare-rel g (Int)) + +(declare-var x Int) +(declare-var y Int) +(declare-var x1 Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (=> (= x 134) (f x))) +(rule (=> (and (f x) (= x1 (+ x 1))) (f x1))) +(rule (=> (and (g x) (f y) (= x1 (ite (< y 65) 52 87))) (g x1))) +(rule (=> (and (g x) (g y) (not (= x y))) fail)) + +(query fail) diff --git a/bench_horn_nonlin/vacuity_10.smt2 b/bench_horn_nonlin/vacuity_10.smt2 new file mode 100644 index 000000000..8f95c920c --- /dev/null +++ b/bench_horn_nonlin/vacuity_10.smt2 @@ -0,0 +1,17 @@ +(declare-rel f (Int)) +(declare-rel g (Int)) + +(declare-var x Int) +(declare-var y Int) +(declare-var z Int) +(declare-var w Int) +(declare-var x1 Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (=> (and (f x) (= x1 (+ x 1))) (f x1))) +(rule (=> (and (g x) (= x1 (- x 1))) (g x1))) +(rule (=> (and (g x) (g y) (f z) (f w) (not (< (+ x y) (+ z w)))) fail)) + +(query fail) diff --git a/bench_horn_nonlin/vacuity_11.smt2 b/bench_horn_nonlin/vacuity_11.smt2 new file mode 100644 index 000000000..bf203faf4 --- /dev/null +++ b/bench_horn_nonlin/vacuity_11.smt2 @@ -0,0 +1,17 @@ +(declare-rel f (Int)) +(declare-rel g (Int Int)) +(declare-rel h (Int)) + +(declare-var x Int) +(declare-var y Int) +(declare-var x1 Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (=> (< x 0) (h x))) +(rule (=> (and (f x) (= x1 (+ x 1))) (f x1))) +(rule (=> (and (f x) (h y)) (g x y))) +(rule (=> (and (g x y) (= x y)) fail)) + +(query fail) diff --git a/bench_horn_nonlin/vacuity_12.smt2 b/bench_horn_nonlin/vacuity_12.smt2 new file mode 100644 index 000000000..6f3684e26 --- /dev/null +++ b/bench_horn_nonlin/vacuity_12.smt2 @@ -0,0 +1,17 @@ +(declare-rel f (Int)) +(declare-rel g (Int)) +(declare-rel h (Int)) + +(declare-var x Int) +(declare-var y Int) +(declare-var x1 Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (=> (= x 14) (h x))) +(rule (=> (and (f x) (= x1 (+ x 1))) (g x1))) +(rule (=> (and (g x) (= x1 (- x 1))) (f x1))) +(rule (=> (and (g x) (h y) (= x y)) fail)) + +(query fail) diff --git a/bench_horn_nonlin/vacuity_13.smt2 b/bench_horn_nonlin/vacuity_13.smt2 new file mode 100644 index 000000000..20fc7c1a0 --- /dev/null +++ b/bench_horn_nonlin/vacuity_13.smt2 @@ -0,0 +1,17 @@ +(declare-rel f (Int)) +(declare-rel g (Int)) +(declare-rel h (Int)) +(declare-rel k (Int)) + +(declare-var x Int) +(declare-var y Int) +(declare-var x1 Int) + +(declare-rel fail ()) + +(rule (=> (and (f x) (k y) (= x1 (+ x y))) (f x1))) +(rule (=> (and (g x) (f y) (= x1 (+ x y 2))) (g x1))) +(rule (=> (and (h x) (f y) (= x1 (- (- x y) 3))) (h x1))) +(rule (=> (and (g x) (h y) (not (< x y))) fail)) + +(query fail) diff --git a/bench_horn_nonlin/vacuity_14.smt2 b/bench_horn_nonlin/vacuity_14.smt2 new file mode 100644 index 000000000..4bf891fc5 --- /dev/null +++ b/bench_horn_nonlin/vacuity_14.smt2 @@ -0,0 +1,11 @@ +(declare-rel f (Int)) + +(declare-var x Int) +(declare-var x1 Int) + +(declare-rel fail ()) + +(rule (=> (and (f x) (= x1 (+ x 2))) (f x1))) +(rule (=> (and (f x) (f (+ x 1))) fail)) + +(query fail) diff --git a/include/ae/AeValSolver.hpp b/include/ae/AeValSolver.hpp index 22a3b2bd9..2583a6cf9 100644 --- a/include/ae/AeValSolver.hpp +++ b/include/ae/AeValSolver.hpp @@ -301,7 +301,7 @@ namespace ufo if (everywhere) { pprs = pprsTmp; - common.insert(a); + if (!isOpX(a)) common.insert(a); } } @@ -311,15 +311,18 @@ namespace ufo cnjs.insert(conjoin(p, efac)); } - if (!cnjs.empty()) common.insert(simplifyBool(disjoin(cnjs, efac))); + if (!cnjs.empty()) + { + Expr tmp = simplifyBool(disjoin(cnjs, efac)); + if (!isOpX(tmp)) common.insert(tmp); + } prs = conjoin(common, efac); } else { prs = disjoin(projections, efac); } - if (isOpX(s)) return prs; - return mk(s, prs); + return simplifyBool(mk(s, prs)); } /** diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index 73078e18e..cdc36da2e 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -2976,12 +2976,11 @@ namespace ufo Expr cExpr = exp->right(); int c = abs(lexical_cast(cExpr)); if (c > 1) - { - Expr cand = mk(mk(srcVars[i], - mkTerm (mpz_class (c), exp->getFactory())), - mkTerm (mpz_class (0), exp->getFactory())); - deltas.insert(cand); - } + for (int j = 0; j < c; j++) + deltas.insert(mk(mk( + srcVars[i], + mkTerm (mpz_class (c), exp->getFactory())), + mkTerm (mpz_class (j), exp->getFactory()))); } } } @@ -3357,7 +3356,7 @@ namespace ufo } else { - guesses.insert(c); + guesses.insert(simplifyArithm(c)); } } else if (isOp(c)) @@ -3388,7 +3387,7 @@ namespace ufo guesses.insert(c); } } - else if (isOpX(c)) +/* else if (isOpX(c)) { ExprSet terms; getDisj(c, terms); @@ -3404,7 +3403,7 @@ namespace ufo c = disjoin(newTerms, c->getFactory()); disjs.insert(c); guesses.insert(c); - } + }*/ else guesses.insert(c); } @@ -3441,7 +3440,8 @@ namespace ufo } } - guesses.insert(ineqs.begin(), ineqs.end()); + for (auto & a : ineqs) guesses.insert(simplifyArithm(a)); +// guesses.insert(ineqs.begin(), ineqs.end()); for (auto & e : eqs) { @@ -3459,7 +3459,7 @@ namespace ufo else if (in->right() == e->right() && !evalLeq(in->left(), e->left())) g = mk(in->left(), e->left()); - if (g != NULL) guesses.insert(g); + if (g != NULL) guesses.insert(simplifyArithm(g)); } } @@ -3476,7 +3476,7 @@ namespace ufo if (evalLeq(in1->right(), in2->left()) && !evalLeq(in1->left(), in2->right())) { - guesses.insert(mk(in1->left(), in2->right())); + guesses.insert(simplifyArithm(mk(in1->left(), in2->right()))); } } } diff --git a/include/deep/NonlinCHCsolver.hpp b/include/deep/NonlinCHCsolver.hpp index 72311a612..b43eb6fc0 100644 --- a/include/deep/NonlinCHCsolver.hpp +++ b/include/deep/NonlinCHCsolver.hpp @@ -38,6 +38,8 @@ namespace ufo ExprVector ssaSteps; map candidates; bool hasArrays = false; + ExprSet declsVisited; + map> abdHistory; public: @@ -45,7 +47,7 @@ namespace ufo Expr quantifierElimination(Expr& cond, ExprSet& vars) { - if (vars.size() == 0) return cond; + if (vars.size() == 0) return simplifyBool(cond); Expr newCond; if (isNonlinear(cond)) { newCond = simpleQE(cond, vars, true, true); @@ -97,6 +99,31 @@ namespace ufo return !u.isSat(checkList); } + void shrinkCnjs(ExprSet & cnjs) + { + ExprSet shrunk; + ExprSet cnjsTmp = cnjs; + for (auto c1 = cnjsTmp.begin(); c1 != cnjsTmp.end(); ++c1) + { + if (isOpX(*c1)) continue; + for (auto c2 = cnjs.begin(); c2 != cnjs.end();) + { + if (!isOpX(*c2)) { ++c2; continue; }; + ExprSet dsjs; + ExprSet newDsjs; + getDisj(*c2, dsjs); + for (auto & d : dsjs) + if (u.isSat(*c1, d)) + newDsjs.insert(d); + shrunk.insert(disjoin(newDsjs, m_efac)); + c2 = cnjs.erase(c2); + cnjs.insert(disjoin(newDsjs, m_efac)); + } + cnjs.insert(shrunk.begin(), shrunk.end()); + shrunk.clear(); + } + } + void preproGuessing(Expr e, ExprVector& ev1, ExprVector& ev2, ExprSet& guesses, bool backward = false, bool mutate = true) { ExprSet ev3; @@ -109,77 +136,62 @@ namespace ufo e = quantifierElimination(e, ev3); if (backward) e = mkNeg(e); - ExprSet cnjs; +// ExprSet cnjs; +// getConj(e, cnjs); +// shrinkCnjs(cnjs); +// e = conjoin(cnjs, m_efac); +// e = simplifyBool(e); - getConj(e, cnjs); - for (auto & c1 : cnjs) - { - if (isOpX(c1)) continue; - for (auto & c2 : cnjs) - { - if (!isOpX(c2)) continue; - ExprSet dsjs; - ExprSet newDsjs; - getDisj(c2, dsjs); - for (auto & d : dsjs) - { - if (u.implies(c1, d)) - { - e = replaceAll(e, c2, mk(m_efac)); - newDsjs.clear(); - break; - } - if (!u.implies(mkNeg(c1), d)) newDsjs.insert(d); - } - if (newDsjs.size() > 0) e = replaceAll(e, c2, disjoin(newDsjs, m_efac)); - } - } if (!ev2.empty()) e = replaceAll(e, ev1, ev2); // rename variables only if ev2 is nonempty if (mutate) mutateHeuristic(e, guesses); else - { - e = simplifyBool(e); getConj(e, guesses); - } } - void bootstrapping() + // search for a CHC having the form r1 /\ .. /\ rn => rel, where rel \not\in {r1, .., rn} + bool hasNoDef(Expr rel) { + for (auto & hr : ruleManager.chcs) + if (hr.dstRelation == rel && + find (hr.srcRelations.begin(), hr.srcRelations.end(), rel) == hr.srcRelations.end()) + return false; + return true; + } + + // lightweight (non-inductive) candidate propagation both ways + // subsumes bootstrapping (ssince facts and queries are considered) + void propagate(bool fwd = true) + { + int szInit = declsVisited.size(); for (auto & hr : ruleManager.chcs) { - if (hr.isQuery) + bool dstVisited = declsVisited.find(hr.dstRelation) != declsVisited.end(); + bool srcVisited = hr.isFact || (hr.isInductive && hasNoDef(hr.dstRelation)); + for (auto & a : hr.srcRelations) + srcVisited |= declsVisited.find(a) != declsVisited.end(); + + if (fwd && srcVisited && !dstVisited) { - if (containsOp(hr.body)) - { - hasArrays = true; - } - else - { - for (int i = 0; i < hr.srcVars.size(); i++) - { - ExprSet vars; - vars.insert(hr.locVars.begin(), hr.locVars.end()); - Expr q = quantifierElimination(hr.body, vars); //we shouldn't do it here; to fix - preproGuessing(mk(q), hr.srcVars[i], - ruleManager.invVars[hr.srcRelations[i]], candidates[hr.srcRelations[i]]); - } - } + propagateCandidatesForward(hr); + declsVisited.insert(hr.dstRelation); } - else + else if (!fwd && !hr.isInductive && !srcVisited && dstVisited) { - Expr rel = hr.head->left(); - preproGuessing(hr.body, hr.dstVars, ruleManager.invVars[rel], candidates[hr.dstRelation]); + propagateCandidatesBackward(hr); + declsVisited.insert(hr.srcRelations.begin(), hr.srcRelations.end()); } } + + if (declsVisited.size() != szInit) propagate(fwd); } - void propagateCandidatesForward() + void propagateCandidatesForward(HornRuleExt& hr) { - for (auto & hr : ruleManager.chcs) +// for (auto & hr : ruleManager.chcs) { - if (hr.isQuery) continue; + if (hr.isQuery) return; ExprSet all; all.insert(hr.body); for (int i = 0; i < hr.srcVars.size(); i++) @@ -189,18 +201,21 @@ namespace ufo for (auto & c : candidates[rel]) all.insert(replaceAll(c, ruleManager.invVars[rel], hr.srcVars[i])); } - preproGuessing(conjoin(all, m_efac), hr.dstVars, - ruleManager.invVars[hr.dstRelation], candidates[hr.dstRelation]); + + if (hr.isInductive) // get candidates of form [ mod = ] + retrieveDeltas (hr.body, hr.srcVars[0], hr.dstVars, candidates[hr.dstRelation]); + + preproGuessing(conjoin(all, m_efac), hr.dstVars, ruleManager.invVars[hr.dstRelation], candidates[hr.dstRelation]); } } - void propagateCandidatesBackward() + void propagateCandidatesBackward(HornRuleExt& hr) { if (hasArrays) return; // something is wrong, currently - for (auto & hr : ruleManager.chcs) +// for (auto & hr : ruleManager.chcs) { - if (hr.isFact || hr.isInductive) continue; + if (hr.isFact) return; Expr dstRel = hr.dstRelation; ExprVector& rels = hr.srcRelations; @@ -228,12 +243,44 @@ namespace ufo else cands = candidates[dstRel]; ExprSet mixedCands; + ExprVector curCnd; + + for (int i = 0; i < rels.size(); i++) + curCnd.push_back(replaceAll(conjoin(candidates[rels[i]], m_efac), + ruleManager.invVars[rels[i]], hr.srcVars[i])); + for (auto & c : cands) { - ExprSet all; + ExprSet all, newCnd; all.insert(hr.body); all.insert(mkNeg(replaceAll(c, ruleManager.invVars[dstRel], hr.dstVars))); - preproGuessing(conjoin(all, m_efac), srcVars, invVars, mixedCands, true, true); + all.insert(curCnd.begin(), curCnd.end()); + + // TODO: add more sophisticated blocking based on unseccussful tries from abdHistory + + preproGuessing(conjoin(all, m_efac), srcVars, invVars, newCnd, true, false); + + if (!(u.isSat(conjoin(curCnd, m_efac), conjoin(newCnd, m_efac)))) + { + // simple heuristic: find if some current guess was already created by abduction + // then, delete it and try again + if (!hr.isInductive) + for (auto & t : abdHistory[&hr]) + for (int j = 0; j < t.size(); j++) + if (u.implies(conjoin(candidates[rels[j]], m_efac), t[j])) + candidates[rels[j]].clear(); + continue; + } + + // oftentimes, newCnd is a disjunction that can be simplified + // by considering other candidates in curCnd + auto tmp = newCnd; + tmp.insert(curCnd.begin(), curCnd.end()); + shrinkCnjs(tmp); + + for (auto & b : tmp) + if (find(curCnd.begin(), curCnd.end(), b) == curCnd.end()) + mixedCands.insert(b); } if (hr.srcVars.size() == 1) @@ -242,13 +289,43 @@ namespace ufo { // decomposition here + // fairness heuristic: prioritize candidates for all relations, which are true + // TODO: find a way to disable it if for some reason some invariant should only be true + vector trueCands; + ExprSet trueRels; + int numTrueCands = 0; + for (int i = 0; i < rels.size(); i++) + { + trueCands.push_back(u.isTrue(curCnd[i])); + if (trueCands.back()) + { + trueRels.insert(rels[i]); + numTrueCands++; + } + } + + // numTrueCands = 0; // GF: hack to disable fairness + + ExprSet allGuessesInit; + if (numTrueCands > 0) // at least one curCnd should be true + for (int i = 0; i < rels.size(); i++) + if (!trueCands[i]) + allGuessesInit.insert(curCnd[i]); + for (auto & a : mixedCands) { - ExprSet processed, allGuesses; + ExprSet processed; + ExprSet allGuesses = allGuessesInit; + ExprVector histRec; - for (auto & r : rels) + for (int i = 0; i < rels.size(); i++) { - if (!u.isSat(a)) return; // need to recheck because the solver has been reset + // skip the relation if it already has a candidate and there exists a relation with no candidate + // (existing candidates are already in allGuesses) + if (numTrueCands > 0 && !trueCands[i]) continue; + + Expr r = rels[i]; + if (!u.isSat(a, conjoin(curCnd, m_efac))) return; // need to recheck because the solver has been reset if (processed.find(r) != processed.end()) continue; invVars.clear(); @@ -270,7 +347,9 @@ namespace ufo // model-based cartesian decomposition ExprSet all = allGuesses; all.insert(mkNeg(a)); - all.insert(u.getModel(allVarsExcept)); + + if (trueRels.size() != 1) // again, for fairness heuristic: + all.insert(u.getModel(allVarsExcept)); // in the case of nonlin, invVars is empty, so no renaming happens: preproGuessing(conjoin(all, m_efac), vars, invVars, backGuesses, true, false); @@ -278,12 +357,12 @@ namespace ufo if (occursNum[r].size() == 1) { candidates[r].insert(backGuesses.begin(), backGuesses.end()); + histRec.push_back(conjoin(backGuesses, m_efac)); allGuesses.insert(backGuesses.begin(), backGuesses.end()); } else { // nonlinear case; proceed to isomorphic decomposition for each candidate - map multiabdVars; for (auto it2 = occursNum[r].begin(); it2 != occursNum[r].end(); ++it2) @@ -292,7 +371,7 @@ namespace ufo cloneVar(v, mkTerm ( "__multiabd_var" + lexical_cast(*v) + "_" + to_string(*it2), m_efac))); - for (auto & b : backGuesses) + Expr b = conjoin(backGuesses, m_efac); { ExprSet sol; int iter = 0; @@ -330,6 +409,7 @@ namespace ufo if (!u.isSat(mknary(args), sol.empty() ? mk(m_efac) : disjoin(negModels, m_efac))) { candidates[r].insert(sol.begin(), sol.end()); + histRec.push_back(conjoin(sol, m_efac)); for (auto it2 = occursNum[r].begin(); it2 != occursNum[r].end(); ++it2) allGuesses.insert(replaceAll(conjoin(sol, m_efac), ruleManager.invVars[r], hr.srcVars[*it2])); break; @@ -370,12 +450,33 @@ namespace ufo } processed.insert(r); } + abdHistory[&hr].push_back(histRec); // outs () << "sanity check: " << u.implies(conjoin(allGuesses, m_efac), a) << "\n"; } } } } + // inductive strengthening of candidates (by abduction) + void strengthen(int deep = 0) + { + if (deep > 1) return; // hardcoded bound + + // currently, relies on the order in CHC file; TBD: proper backwards traversing + for (auto hr = ruleManager.chcs.rbegin(); hr != ruleManager.chcs.rend(); hr++) + { + if (!hr->isFact) + { + filterUnsat(); + if (!checkCHC(*hr, candidates)) + { + propagateCandidatesBackward(*hr); + strengthen(deep+1); + } + } + } + } + void getImplicationGuesses(map& postconds) { map preconds; @@ -419,7 +520,7 @@ namespace ufo } } - void printCands(bool unsat = true, bool simplify = true) + void printCands(bool unsat = true, bool simplify = false) { if (unsat) outs () << "unsat\n"; @@ -433,7 +534,11 @@ namespace ufo outs () << ") Bool\n "; ExprSet lms = a.second; - if (simplify) u.removeRedundantConjuncts(lms); + if (simplify) + { + shrinkCnjs(lms); + u.removeRedundantConjuncts(lms); + } Expr res = simplifyArithm(conjoin(lms, m_efac)); u.print(res); outs () << ")\n"; @@ -446,7 +551,7 @@ namespace ufo for (auto & a : candidates) if (!u.isSat(a.second)) for (auto & hr : ruleManager.chcs) - if (hr.dstRelation == a.first) worklist.push_back(&hr); + if (hr.dstRelation == a.first && hr.isFact) worklist.push_back(&hr); multiHoudini(worklist, false); @@ -709,36 +814,48 @@ namespace ufo } } - // very restricted version of FreqHorn (no grammars, limited use of arrays) - void guessAndSolve() + bool equalCands(map& cands) { - bootstrapping(); - - auto post = candidates; - filterUnsat(); - - propagateCandidatesForward(); - filterUnsat(); - propagateCandidatesBackward(); - filterUnsat(); + for (auto & a : candidates) + { + if (a.second.size() != cands[a.first].size()) return false; + if (!u.isEquiv(conjoin(a.second, m_efac), conjoin(cands[a.first], m_efac))) return false; + } + return true; + } + void guessAndSolve() + { vector worklist; - for (auto & hr : ruleManager.chcs) worklist.push_back(&hr); // todo: wto - multiHoudini(worklist); + for (auto & hr : ruleManager.chcs) + { + if (containsOp(hr.body)) hasArrays = true; + worklist.push_back(&hr); + } - if (checkAllOver(true)) return printCands(); + while (true) + { + auto candidatesTmp = candidates; + for (bool fwd : { false, true }) + { + declsVisited.clear(); + declsVisited.insert(ruleManager.failDecl); + propagate(fwd); + filterUnsat(); + if (fwd) multiHoudini(worklist); // i.e., weaken + else strengthen(); + if (checkAllOver(true)) return printCands(); + } + if (equalCands(candidatesTmp)) break; + } - getImplicationGuesses(post); + getImplicationGuesses(candidates); // seems broken now; to revisit completely filterUnsat(); - multiHoudini(worklist); - if (checkAllOver(true)) return printCands(); for (auto tgt : ruleManager.decls) arrayGuessing(tgt->left()); filterUnsat(); - - multiHoudini(worklist); if (checkAllOver(true)) return printCands(); outs () << "unknown\n"; From daae6ceba04e82b5408096c740aaf970282adfc4 Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Wed, 13 May 2020 01:39:11 -0400 Subject: [PATCH 141/236] better fairness implementation for the decomposition --- bench_horn_nonlin/vacuity_16.smt2 | 12 ++++++++ bench_horn_nonlin/vacuity_17.smt2 | 16 ++++++++++ include/deep/NonlinCHCsolver.hpp | 50 +++++++++++++++++++++++++++++-- 3 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 bench_horn_nonlin/vacuity_16.smt2 create mode 100644 bench_horn_nonlin/vacuity_17.smt2 diff --git a/bench_horn_nonlin/vacuity_16.smt2 b/bench_horn_nonlin/vacuity_16.smt2 new file mode 100644 index 000000000..60382ea09 --- /dev/null +++ b/bench_horn_nonlin/vacuity_16.smt2 @@ -0,0 +1,12 @@ +(declare-rel f (Int)) +(declare-rel g (Int)) + +(declare-var x Int) +(declare-var y Int) + +(declare-rel fail ()) + +(rule (=> (< x 20) (f x))) +(rule (=> (and (f x) (g y) (not (>= y x))) fail)) + +(query fail) diff --git a/bench_horn_nonlin/vacuity_17.smt2 b/bench_horn_nonlin/vacuity_17.smt2 new file mode 100644 index 000000000..c98f0fb6b --- /dev/null +++ b/bench_horn_nonlin/vacuity_17.smt2 @@ -0,0 +1,16 @@ +(declare-rel f (Int)) +(declare-rel g (Int)) +(declare-rel h (Int)) + +(declare-var x Int) +(declare-var y Int) +(declare-var z Int) + +(declare-rel fail ()) + +(rule (=> (<= x 5) (f x))) +(rule (=> (<= x 7) (g x))) + +(rule (=> (and (f x) (g y) (h z) (not (<= (+ x y) z))) fail)) + +(query fail) diff --git a/include/deep/NonlinCHCsolver.hpp b/include/deep/NonlinCHCsolver.hpp index b43eb6fc0..1994f08cf 100644 --- a/include/deep/NonlinCHCsolver.hpp +++ b/include/deep/NonlinCHCsolver.hpp @@ -312,12 +312,15 @@ namespace ufo if (!trueCands[i]) allGuessesInit.insert(curCnd[i]); - for (auto & a : mixedCands) + for (auto it = mixedCands.begin(); it != mixedCands.end(); ) { + Expr a = *it; ExprSet processed; ExprSet allGuesses = allGuessesInit; ExprVector histRec; + auto candidatesTmp = candidates; + for (int i = 0; i < rels.size(); i++) { // skip the relation if it already has a candidate and there exists a relation with no candidate @@ -450,7 +453,50 @@ namespace ufo } processed.insert(r); } - abdHistory[&hr].push_back(histRec); + + // fairness heuristic (need to be tested properly): + { + bool tryAgain = false; + if (!abdHistory[&hr].empty() && abdHistory[&hr].back() == histRec) + { + candidates = candidatesTmp; + + for (int i = 0; i < histRec.size(); i++) + { + if (curCnd[i] != histRec[i]) + { + trueCands[i] = false; + allGuessesInit.insert(curCnd[i]); + } + else + { + numTrueCands++; + trueCands[i] = true; + trueRels.insert(rels[i]); + } + } + + tryAgain = true; // to keep + } + + abdHistory[&hr].push_back(histRec); + + if (tryAgain) + { + if (abdHistory[&hr].size() > 2 /*hardcoded bound*/) + { + tryAgain = false; + for (int i = 0; i < 2 /*hardcoded bound*/; i++) + if (abdHistory[&hr][abdHistory[&hr].size() - 1 - i] != histRec) + { + tryAgain = true; + break; + } + } + } + + if (!tryAgain) ++it; + } // outs () << "sanity check: " << u.implies(conjoin(allGuesses, m_efac), a) << "\n"; } } From c3909290c71cd1f6b25806d9f85953416d923b18 Mon Sep 17 00:00:00 2001 From: vnkommu Date: Thu, 11 Jun 2020 12:13:13 -0400 Subject: [PATCH 142/236] Changed CMakeLists.txt to the contents at https://github.com/grigoryfedyukovich/aeval/blob/mu/CMakeLists.txt. Explicitly cast boost::logic::tribool to bool in SMTUtils.hpp and NonlinCHCsolver.hpp --- CMakeLists.txt | 11 +---------- include/ae/SMTUtils.hpp | 8 ++++---- include/deep/NonlinCHCsolver.hpp | 2 +- 3 files changed, 6 insertions(+), 15 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e74dc3eea..16e21b6de 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -181,15 +181,6 @@ else() set(GMPXX_LIB "") endif() -find_package(OpenMP) -set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${OpenMP_CXX_FLAGS}") - -find_package(Armadillo) -if (ARMADILLO_FOUND) - add_definitions(-DHAVE_ARMADILLO) - include_directories(${ARMADILLO_INCLUDE_DIR}) -endif() - install(DIRECTORY include/ DESTINATION include FILES_MATCHING @@ -226,4 +217,4 @@ include_directories(BEFORE ${CMAKE_CURRENT_SOURCE_DIR}/include ${CMAKE_CURRENT_BINARY_DIR}/include) -add_subdirectory(tools) +add_subdirectory(tools) \ No newline at end of file diff --git a/include/ae/SMTUtils.hpp b/include/ae/SMTUtils.hpp index 2967b4ae9..56432ba5d 100644 --- a/include/ae/SMTUtils.hpp +++ b/include/ae/SMTUtils.hpp @@ -126,7 +126,7 @@ namespace ufo { if (isOpX(b)) return true; if (isOpX(a)) return true; - return ! isSat(a, mkNeg(b)); + return bool(!isSat(a, mkNeg(b))); } /** @@ -134,7 +134,7 @@ namespace ufo */ bool isTrue(Expr a){ if (isOpX(a)) return true; - return !isSat(mkNeg(a)); + return bool(!isSat(mkNeg(a))); } /** @@ -143,7 +143,7 @@ namespace ufo bool isFalse(Expr a){ if (isOpX(a)) return true; if (isOpX(a) && a->left() == a->right()) return true; - return !isSat(a); + return bool(!isSat(a)); } /** @@ -159,7 +159,7 @@ namespace ufo ExprSet assumptions; assumptions.insert(mk(v, val)); - return (!isSat(assumptions, false)); + return bool((!isSat(assumptions, false))); } /** diff --git a/include/deep/NonlinCHCsolver.hpp b/include/deep/NonlinCHCsolver.hpp index 1994f08cf..80b20464a 100644 --- a/include/deep/NonlinCHCsolver.hpp +++ b/include/deep/NonlinCHCsolver.hpp @@ -96,7 +96,7 @@ namespace ufo for (auto a : lms) negged.insert(mkNeg(replaceAll(a, ruleManager.invVars[rel], hr.dstVars))); checkList.insert(disjoin(negged, m_efac)); } - return !u.isSat(checkList); + return bool(!u.isSat(checkList)); } void shrinkCnjs(ExprSet & cnjs) From 8428376ecbbda4f601e200461548aa59a1bcc09d Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Mon, 15 Jun 2020 22:39:02 -0400 Subject: [PATCH 143/236] improved the simplification passes --- include/ae/ExprSimpl.hpp | 54 +++++++++++++++++++++++++++++++--------- 1 file changed, 42 insertions(+), 12 deletions(-) diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index cdc36da2e..0c447a1bc 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -877,6 +877,32 @@ namespace ufo else if (c1 < c2) plusOpsRight.push_back(mkTerm (mpz_class (c2 - c1), efac)); + if (plusOpsLeft.size() == 0 && plusOpsRight.size() == 0) + { + if (isOpX(exp) || isOpX(exp) || isOpX(exp)) + return mk(efac); + else + return mk(efac); + } + + if (plusOpsLeft.size() == 0 && plusOpsRight.size() == 1 && + isOpX(*plusOpsRight.begin())) + { + if (evaluateCmpConsts(exp, 0, lexical_cast(*plusOpsRight.begin()))) + return mk(efac); + else + return mk(efac); + } + + if (plusOpsLeft.size() == 1 && plusOpsRight.size() == 0 && + isOpX(*plusOpsLeft.begin())) + { + if (evaluateCmpConsts(exp, lexical_cast(*plusOpsLeft.begin()), 0)) + return mk(efac); + else + return mk(efac); + } + return reBuildCmp(exp, mkplus(plusOpsLeft, efac), mkplus(plusOpsRight, efac)); } @@ -1091,7 +1117,9 @@ namespace ufo ExprSet dsjs; ExprSet newDsjs; getDisj(exp, dsjs); - for (auto & a : dsjs){ + for (auto a : dsjs) + { + a = simplifyBool(a); if (isOpX(a)) { return mk(efac); @@ -1100,7 +1128,7 @@ namespace ufo { continue; } - newDsjs.insert(simplifyBool(a)); + newDsjs.insert(a); } return disjoin (newDsjs, efac); } @@ -1110,7 +1138,9 @@ namespace ufo ExprSet cnjs; ExprSet newCnjs; getConj(exp, cnjs); - for (auto & a : cnjs){ + for (auto a : cnjs) + { + a = simplifyBool(a); if (isOpX(a)) { return mk(efac); @@ -1119,7 +1149,7 @@ namespace ufo { continue; } - newCnjs.insert(simplifyBool(a)); + newCnjs.insert(a); } return conjoin (newCnjs, efac); } @@ -1344,7 +1374,7 @@ namespace ufo Expr var = NULL; for (auto & a : ops) { - if (isNumericConst(a)) + if (isOpX(a)) { coef *= lexical_cast(a); } @@ -1384,7 +1414,7 @@ namespace ufo { return e->left(); } - else if (isNumericConst(e)) + else if (isOpX(e)) { return mkTerm (mpz_class (-lexical_cast(e)), e->getFactory()); } @@ -2347,9 +2377,9 @@ namespace ufo if (term->arg(0) == term->arg(1)) return true; if (isOp(term)) - if (isNumericConst(term->arg(0)) && isNumericConst(term->arg(1))) + if (isOpX(term->arg(0)) && isOpX(term->arg(1))) return evaluateCmpConsts(term, - lexical_cast(term->arg(0)), lexical_cast(term->arg(1))); + lexical_cast(term->arg(0)), lexical_cast(term->arg(1))); ExprSet cnjs; getConj(term, cnjs); @@ -2425,8 +2455,8 @@ namespace ufo Expr rewritten = ineqMover(d, var); - if (isNumericConst(rewritten->arg(0)) && - isNumericConst(rewritten->arg(1))) { + if (isOpX(rewritten->arg(0)) && + isOpX(rewritten->arg(1))) { if (evaluateCmpConsts(rewritten, lexical_cast(rewritten->arg(0)), lexical_cast(rewritten->arg(1)))){ @@ -2442,7 +2472,7 @@ namespace ufo if (rewritten->arg(0) != var) { ++it; continue; } } - if (!isNumericConst(rewritten->arg(1))) { ++it; continue; } + if (!isOpX(rewritten->arg(1))) { ++it; continue; } int c = lexical_cast(rewritten->arg(1)); @@ -2564,7 +2594,7 @@ namespace ufo for (auto &e : all) { - if (isNumericConst(e)) + if (isOpX(e)) { intconst += lexical_cast(e); } From bc08a00c7141fdbdec85a72da8a1c1ae8c109a29 Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Thu, 25 Jun 2020 13:05:26 -0400 Subject: [PATCH 144/236] arbitrary-precision arithmetic simplifications --- bench_horn_nonlin/nonlinear_11.smt2 | 16 + include/ae/ExprSimpl.hpp | 1406 ++++++++++++++++----------- include/deep/NonlinCHCsolver.hpp | 16 +- 3 files changed, 884 insertions(+), 554 deletions(-) create mode 100644 bench_horn_nonlin/nonlinear_11.smt2 diff --git a/bench_horn_nonlin/nonlinear_11.smt2 b/bench_horn_nonlin/nonlinear_11.smt2 new file mode 100644 index 000000000..b4e02869a --- /dev/null +++ b/bench_horn_nonlin/nonlinear_11.smt2 @@ -0,0 +1,16 @@ +(declare-rel f (Int)) +(declare-rel g (Int)) +(declare-rel h (Int)) +(declare-var a Int) +(declare-var a1 Int) + +(declare-rel fail ()) + +(rule (=> (= a 11) (f a))) +(rule (=> (and (f a) (= a1 (- a 2))) (f a1))) +(rule (=> (< a 12) (g a))) +(rule (=> (and (> a 9) (f a) (g a)) (h a))) +(rule (=> (and (h a) (= a1 (+ a 2))) (h a1))) +(rule (=> (and (h a) (= a 12)) fail)) + +(query fail) diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index 0c447a1bc..4506983bd 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -1,39 +1,42 @@ #ifndef EXPRSIMPL__HPP__ #define EXPRSIMPL__HPP__ #include +#include #include "ufo/Smt/EZ3.hh" using namespace std; using namespace boost; +using namespace boost::multiprecision; + namespace ufo { template static Expr conjoin(Range& conjs, ExprFactory &efac){ return - (conjs.size() == 0) ? mk(efac) : - (conjs.size() == 1) ? *conjs.begin() : - mknary(conjs); + (conjs.size() == 0) ? mk(efac) : + (conjs.size() == 1) ? *conjs.begin() : + mknary(conjs); } template static Expr disjoin(Range& disjs, ExprFactory &efac){ return - (disjs.size() == 0) ? mk(efac) : - (disjs.size() == 1) ? *disjs.begin() : - mknary(disjs); + (disjs.size() == 0) ? mk(efac) : + (disjs.size() == 1) ? *disjs.begin() : + mknary(disjs); } template static Expr mkplus(Range& terms, ExprFactory &efac){ return - (terms.size() == 0) ? mkTerm (mpz_class (0), efac) : - (terms.size() == 1) ? *terms.begin() : - mknary(terms); + (terms.size() == 0) ? mkTerm (mpz_class (0), efac) : + (terms.size() == 1) ? *terms.begin() : + mknary(terms); } template static Expr mkmult(Range& terms, ExprFactory &efac){ return - (terms.size() == 0) ? mkTerm (mpz_class (1), efac) : - (terms.size() == 1) ? *terms.begin() : - mknary(terms); + (terms.size() == 0) ? mkTerm (mpz_class (1), efac) : + (terms.size() == 1) ? *terms.begin() : + mknary(terms); } template static bool emptyIntersect(Range1& av, Range2& bv){ @@ -128,6 +131,9 @@ namespace ufo for (unsigned i = 0; i < a->arity(); i++){ getMultOps(a->arg(i), ops); } + } else if (isOpX(a) && isNumeric(a->left())){ + ops.push_back(mkTerm (mpz_class (-1), a->getFactory())); + ops.push_back(a->left()); } else { ops.push_back(a); } @@ -143,7 +149,7 @@ namespace ufo return mk(mkTerm (mpz_class (1), e->getFactory()), e); } } - + /** * Represent Zero as multiplication */ @@ -164,7 +170,7 @@ namespace ufo ExprSet newE; newE.insert(multiplier->right()); multiplier = multiplier->left(); - + for (unsigned i = 1; i < e->arity (); i++){ Expr a = mult(e->arg(i)); if (isOpX(a)){ @@ -182,7 +188,7 @@ namespace ufo } return e; } - + /** * Self explanatory */ @@ -195,17 +201,72 @@ namespace ufo return true; } } - + return false; } - + + static void getAddTerm (Expr a, ExprVector &terms); + /** * Self explanatory */ - inline static Expr additiveInverse(Expr e){ - if (isOpX(e)){ + inline static Expr additiveInverse(Expr e) + { + if (isOpX(e)) + { + cpp_int coef = 1; + ExprVector ops; + getMultOps (e, ops); + + ExprVector rem; + for (auto & a : ops) + { + if (isOpX(a)) + { + coef *= lexical_cast(a); + } + else + { + rem.push_back(a); + } + } + + Expr num = mkTerm (mpz_class (string (-coef)), e->getFactory()); + if (rem.empty() || coef == 0) return num; + + Expr remTerm = mkmult(rem, e->getFactory()); + if (coef == -1) return remTerm; + + return mk(num, remTerm); + } + else if (isOpX(e)) + { + ExprVector terms; + for (auto it = e->args_begin (), end = e->args_end (); it != end; ++it) + { + getAddTerm(additiveInverse(*it), terms); + } + return mkplus(terms, e->getFactory()); + } + else if (isOpX(e)) + { + ExprVector terms; + getAddTerm(additiveInverse(*e->args_begin ()), terms); + auto it = e->args_begin () + 1; + for (auto end = e->args_end (); it != end; ++it) + { + getAddTerm(*it, terms); + } + return mkplus(terms, e->getFactory()); + } + else if (isOpX(e)) + { return e->left(); } + else if (isOpX(e)) + { + return mkTerm (mpz_class (string (-lexical_cast(e))), e->getFactory()); + } else if (isOpX(e)){ string val = lexical_cast(e); int delim = val.find("/"); @@ -218,22 +279,10 @@ namespace ufo return mkTerm (mpq_class (inv_val), e->getFactory()); } } - else if (isOpX(e)){ - int val = lexical_cast(e); - return mkTerm (mpz_class (-val), e->getFactory()); - } - else if (isOpX(e)){ - if (lexical_cast(e->left()) == "-1"){ - return e->right(); - } else if (e->arity() == 2) { - Expr c = additiveInverse(e->left()); - return mk(c, e->right()); - } - } - +// return mk(mkTerm (mpz_class (-1), e->getFactory()), e); return mk(e); } - + /** * Commutativity in Addition */ @@ -244,41 +293,43 @@ namespace ufo for (auto it = e->args_begin(), end = e->args_end(); it != end; ++it){ expClauses.insert(*it); } - res = mknary(expClauses); + res = mkplus(expClauses, e->getFactory()); } - + if (isOpX(e)) { if (lexical_cast(e->left()) == "-1"){ Expr l = e->right(); - + if (isOpX(l)) { ExprSet expClauses; for (auto it = l->args_begin(), end = l->args_end(); it != end; ++it){ expClauses.insert(additiveInverse(*it)); } - res = mknary(expClauses); + res = mkplus(expClauses, e->getFactory()); } } } - + return res; } - + /** * Helper used in ineqReverter */ template static Expr rewriteHelperN(Expr e){ assert(e->arity() == 2); - - if (!isOpX(e->left()) && - !(isOpX(e->left()))) - { - if (lexical_cast(e->left()->left()) == "-1") return e; - } + Expr tmp = additiveInverse(e->left()); + if (isOpX(e->left())) + return mk(additiveInverse(e->left()), additiveInverse(e->right())); + + if (isOpX(tmp)) + if (isOpX(tmp->left())) + if (lexical_cast(tmp->left()) > 0) + return mk(tmp, additiveInverse(e->right())); - return mk(additiveInverse(e->left()), additiveInverse(exprDistributor(e->right()))); + return e; } - + /** * Helper used in ineqMover */ @@ -287,9 +338,9 @@ namespace ufo Expr r = e->right(); ExprVector lhs; // expressions containing var ExprVector rhs; // the rest of e - + // first, parse l; - + if (isOpX(l)){ for (unsigned i = 0; i < l->arity (); i++){ Expr a = l->arg(i); @@ -317,9 +368,9 @@ namespace ufo rhs.push_back(additiveInverse(l)); } } - + // second, parse r; - + if (isOpX(r)){ for (unsigned i = 0; i < r->arity (); i++){ Expr a = r->arg(i); @@ -347,9 +398,9 @@ namespace ufo rhs.push_back(r); } } - + // third, combine results; - + int coef = 0; for (auto &a : lhs) { @@ -369,12 +420,11 @@ namespace ufo return mk(l,r); } - + /** * Helper used in exprMover */ template static Expr rewriteHelperE(Expr e, Expr var){ - //todo: debug: clean = false -> shared_ptr.hpp:418: Assertion `px != 0' failed assert(e->arity() == 2); Expr l = e->left(); Expr r = e->right(); @@ -382,7 +432,7 @@ namespace ufo l = exprSorted(l); return mk(r, l); } - + if (isOpX(r)){ if (r->left() == var || r->right() == var){ l = exprSorted(l); @@ -391,7 +441,7 @@ namespace ufo } return e; } - + /** * Merge adjacent inequalities * (a <= b && a >= b) -> (a == b) @@ -417,7 +467,7 @@ namespace ufo } } } - + /** * Merge adjacent inequalities * (a <= b && b <= a) -> (a == b) @@ -439,7 +489,7 @@ namespace ufo } } } - + /** * Merge adjacent inequalities * (a <= 0 && -a <= 0) -> (a == 0) @@ -466,7 +516,7 @@ namespace ufo } } } - + /** * Trivial simplifier: * (-1*a <= -1*b) -> (a >= b) @@ -489,7 +539,7 @@ namespace ufo } return e; } - + inline static Expr ineqNegReverter(Expr a){ if (isOpX(a)){ Expr e = a->arg(0); @@ -509,7 +559,7 @@ namespace ufo } return a; } - + /** * Transform the inequalities by the following rules: * (a + .. + var + .. + b <= c ) -> (var <= -1*a + .. + -1*b + c) @@ -535,7 +585,7 @@ namespace ufo } return e; } - + /** * Move "var" to the left hand side of expression: * (a <= var) -> (var >= b) @@ -547,14 +597,18 @@ namespace ufo return rewriteHelperE(e, var); } else if (isOpX(e)){ return rewriteHelperE(e, var); + } else if (isOpX(e)){ + return rewriteHelperE(e, var); + } else if (isOpX(e)){ + return rewriteHelperE(e, var); } if (isOpX(e)){ return rewriteHelperE(e, var); - } if (isOpX(e)){ - return mk(exprMover(e->arg(0), var)); + } if (isOpX(e)){ + return rewriteHelperE(e, var); } return e; } - + /** * */ @@ -566,7 +620,7 @@ namespace ufo } return e; } - + /** * Search for an equality */ @@ -585,7 +639,7 @@ namespace ufo } return false; } - + /** * Simplifier Wrapper */ @@ -600,11 +654,10 @@ namespace ufo cl = ineqReverter (cl); substsMap.insert(cl); } - + ineqMerger(substsMap); equalitySearch(substsMap, v); return conjoin(substsMap, v->getFactory()); - } return exp; } @@ -613,169 +666,151 @@ namespace ufo if (find(v.begin(), v.end(), e) == v.end()) v.push_back(e); } - template - struct RW + template struct RW { std::shared_ptr _r; - + RW (std::shared_ptr r) : _r(r) {} RW (T *r) : _r (r) {} - - + VisitAction operator() (Expr exp) { // -- apply the rewriter if (exp->arity() == 0) // -- do not descend into non-boolean operators return VisitAction::skipKids (); - + return VisitAction::changeDoKidsRewrite (exp, _r); - } }; - inline static void getPlusTerms (Expr a, ExprVector &terms) - { - if (isOpX(a)){ - for (unsigned i = 0; i < a->arity(); i++){ - getPlusTerms(a->arg(i), terms); - } - } - else if (isOpX(a)){ - // assume only two args - terms.push_back(a->left()); - terms.push_back(additiveInverse(a->right())); - } else { - terms.push_back(a); - } - } - // not very pretty method, but.. - inline static Expr reBuildCmp(Expr term, Expr lhs, Expr rhs) + inline static Expr reBuildCmp(Expr fla, Expr lhs, Expr rhs) { - if (isOpX(term)) + if (isOpX(fla)) { return mk(lhs, rhs); } - if (isOpX(term)) + if (isOpX(fla)) { return mk(lhs, rhs); } - if (isOpX(term)) + if (isOpX(fla)) { return mk(lhs, rhs); } - if (isOpX(term)) + if (isOpX(fla)) { return mk(lhs, rhs); } - if (isOpX(term)) + if (isOpX(fla)) { return mk(lhs, rhs); } - assert(isOpX(term)); + assert(isOpX(fla)); return mk(lhs, rhs); } - inline static Expr reBuildNegCmp(Expr term, Expr lhs, Expr rhs) + inline static Expr reBuildNegCmp(Expr fla, Expr lhs, Expr rhs) { - if (isOpX(term)) + if (isOpX(fla)) { return mk(lhs, rhs); } - if (isOpX(term)) + if (isOpX(fla)) { return mk(lhs, rhs); } - if (isOpX(term)) + if (isOpX(fla)) { return mk(lhs, rhs); } - if (isOpX(term)) + if (isOpX(fla)) { return mk(lhs, rhs); } - if (isOpX(term)) + if (isOpX(fla)) { return mk(lhs, rhs); } - assert(isOpX(term)); + assert(isOpX(fla)); return mk(lhs, rhs); } // not very pretty method, but.. - inline static bool evaluateCmpConsts(Expr term, int a, int b) + inline static bool evaluateCmpConsts(Expr fla, cpp_int a, cpp_int b) { - if (isOpX(term)) + if (isOpX(fla)) { return (a == b); } - if (isOpX(term)) + if (isOpX(fla)) { return (a != b); } - if (isOpX(term)) + if (isOpX(fla)) { return (a <= b); } - if (isOpX(term)) + if (isOpX(fla)) { return (a >= b); } - if (isOpX(term)) + if (isOpX(fla)) { return (a < b); } - assert(isOpX(term)); + assert(isOpX(fla)); return (a > b); } - inline static Expr mkNeg(Expr term) + inline static Expr mkNeg(Expr fla) { - if (isOpX(term)) + if (isOpX(fla)) { - return term->arg(0); + return fla->arg(0); } - else if (isOpX(term)) + else if (isOpX(fla)) { - return mk(term->getFactory()); + return mk(fla->getFactory()); } - else if (isOpX(term)) + else if (isOpX(fla)) { - return mk(term->getFactory()); + return mk(fla->getFactory()); } - else if (isOpX(term) || isOpX(term)) + else if (isOpX(fla) || isOpX(fla)) { ExprSet args; - for (int i = 0; i < term->arity(); i++){ - args.insert(mkNeg(term->arg(i))); + for (int i = 0; i < fla->arity(); i++){ + args.insert(mkNeg(fla->arg(i))); } - return isOpX(term) ? disjoin(args, term->getFactory()) : - conjoin (args, term->getFactory()); + return isOpX(fla) ? + disjoin(args, fla->getFactory()) : + conjoin (args, fla->getFactory()); } - else if (isOp(term)) + else if (isOp(fla)) { - return reBuildNegCmp(term, term->arg(0), term->arg(1)); + return reBuildNegCmp(fla, fla->arg(0), fla->arg(1)); } - else if (isOpX(term)) + else if (isOpX(fla)) { - return mk(term->left(), mkNeg(term->right())); + return mk(fla->left(), mkNeg(fla->right())); } - else if (isOpX(term)) + else if (isOpX(fla)) { - return mkNeg(term->last()); + return mkNeg(fla->last()); } - return mk(term); + return mk(fla); } - inline static int separateConst(ExprVector& plsOps) + inline static cpp_int separateConst(ExprVector& plsOps) { - int c = 0; + cpp_int c = 0; for (auto it = plsOps.begin(); it != plsOps.end(); ) { if (isOpX(*it)) { - c += lexical_cast(*it); + c += lexical_cast(*it); it = plsOps.erase(it); continue; } @@ -784,16 +819,45 @@ namespace ufo return c; } - inline static Expr simplifyPlus (Expr exp){ + inline static Expr simplifyPlus (Expr exp) + { ExprVector plsOps; - getPlusTerms (exp, plsOps); - // GF: to extend - int c = separateConst(plsOps); - if (c != 0) plsOps.push_back(mkTerm (mpz_class (c), exp->getFactory())); + getAddTerm (exp, plsOps); + cpp_int c = separateConst(plsOps); + std::sort(plsOps.begin(), plsOps.end(), [](Expr& x, Expr& y) {return x < y;}); + // GF: to write some kind of a fold-operator that counts the numbers of occurences + if (c != 0) plsOps.push_back(mkTerm (mpz_class (string(c)), exp->getFactory())); return mkplus(plsOps, exp->getFactory()); } - static void getAddTerm (Expr a, ExprVector &terms); // declaration only + inline static Expr simplifyMult (Expr e) + { + if (isOpX(e)) + { + cpp_int coef = 1; + ExprVector ops; + getMultOps (e, ops); + + ExprVector rem; + for (auto a : ops) + { + if (isOpX(a)) + coef *= lexical_cast(a); + else + rem.push_back(a); + } + + Expr num = mkTerm (mpz_class (string (coef)), e->getFactory()); + if (rem.empty() || coef == 0) return num; + + Expr remTerm = mkmult(rem, e->getFactory()); + if (coef == 1) return remTerm; + + return mk(num, remTerm); + } + return e; + } + inline static Expr simplifyIte (Expr exp) // simple version, on the syntactic level { @@ -846,11 +910,11 @@ namespace ufo ExprVector plusOpsLeft; ExprVector plusOpsRight; - getPlusTerms(exp->left(), plusOpsLeft); - getPlusTerms(exp->right(), plusOpsRight); + getAddTerm(exp->left(), plusOpsLeft); + getAddTerm(exp->right(), plusOpsRight); - int c1 = separateConst(plusOpsLeft); - int c2 = separateConst(plusOpsRight); + cpp_int constLeft = separateConst(plusOpsLeft); + cpp_int constRight = separateConst(plusOpsRight); for (auto it1 = plusOpsLeft.begin(); it1 != plusOpsLeft.end(); ) { @@ -872,10 +936,23 @@ namespace ufo else ++it1; } - if (c1 > c2) - plusOpsLeft.push_back(mkTerm (mpz_class (c1 - c2), efac)); - else if (c1 < c2) - plusOpsRight.push_back(mkTerm (mpz_class (c2 - c1), efac)); + // processing of constLeft/Right to prepare for further simplifyArithmDisjunctions/Conjunctions + if (constLeft != 0 || constRight != 0) + { + if (plusOpsLeft.size() == 0) + { + constLeft = constLeft - constRight; + constRight = 0; + } + else + { + constRight = constRight - constLeft; + constLeft = 0; + } + } + + if (constLeft != 0) plusOpsLeft.push_back(mkTerm (mpz_class (string (constLeft)), efac)); + if (constRight != 0) plusOpsRight.push_back(mkTerm (mpz_class (string (constRight)), efac)); if (plusOpsLeft.size() == 0 && plusOpsRight.size() == 0) { @@ -888,7 +965,7 @@ namespace ufo if (plusOpsLeft.size() == 0 && plusOpsRight.size() == 1 && isOpX(*plusOpsRight.begin())) { - if (evaluateCmpConsts(exp, 0, lexical_cast(*plusOpsRight.begin()))) + if (evaluateCmpConsts(exp, 0, lexical_cast(*plusOpsRight.begin()))) return mk(efac); else return mk(efac); @@ -897,7 +974,7 @@ namespace ufo if (plusOpsLeft.size() == 1 && plusOpsRight.size() == 0 && isOpX(*plusOpsLeft.begin())) { - if (evaluateCmpConsts(exp, lexical_cast(*plusOpsLeft.begin()), 0)) + if (evaluateCmpConsts(exp, lexical_cast(*plusOpsLeft.begin()), 0)) return mk(efac); else return mk(efac); @@ -911,30 +988,29 @@ namespace ufo ExprVector args; Expr ret; bool f = false; - + for (ENode::args_iterator it = exp->args_begin(), end = exp->args_end(); it != end; ++it){ if (*it == to_skip) f = true; else args.push_back (*it); } - if (f == false) - { + if (f == false) { args.push_back(additiveInverse(to_skip)); } - + if (args.size() == 1) { ret = args[0]; } - + else if (args.size() == 2){ if (isOpX(args[0]) && !isOpX(args[1])) ret = mk(args[1], args[0]->left()); else if (!isOpX(args[0]) && isOpX(args[1])) ret = mk(args[0], args[1]->left()); - + else ret = mknary(args); - + } else { ret = mknary(args); } @@ -943,6 +1019,7 @@ namespace ufo // return a - b inline static Expr simplifiedMinus (Expr a, Expr b){ + // GF: to rewrite/remove Expr ret = mk(a, b); if (a == b) { @@ -994,29 +1071,18 @@ namespace ufo return ret; } + static Expr simplifyArithmDisjunctions(Expr fla, bool keepRedundandDisj); + static Expr simplifyArithmConjunctions(Expr fla, bool keepRedundandConj); + struct SimplifyArithmExpr { + Expr e; ExprFactory &efac; + bool keepRedundandDisj; + bool keepRedundandConj; - Expr zero; - Expr one; - Expr minus_one; - - SimplifyArithmExpr (ExprFactory& _efac, bool isInt = true) : efac(_efac) - { - if (isInt) - { - zero = mkTerm (mpz_class (0), efac); - one = mkTerm (mpz_class (1), efac); - minus_one = mkTerm (mpz_class (-1), efac); - } - else - { - zero = mkTerm (mpq_class (0), efac); - one = mkTerm (mpq_class (1), efac); - minus_one = mkTerm (mpq_class (-1), efac); - } - }; + SimplifyArithmExpr (Expr& _e, bool _d, bool _c) : + e(_e), efac(_e->getFactory()), keepRedundandDisj(_d), keepRedundandConj(_c) {}; Expr operator() (Expr exp) { @@ -1032,26 +1098,12 @@ namespace ufo if (isOpX(exp)) { - if (exp->left() == zero) return zero; - if (exp->right() == zero) return zero; - if (exp->left() == one) return exp->right(); - if (exp->right() == one) return exp->left(); - if (exp->left() == minus_one) return additiveInverse(exp->right()); - if (exp->right() == minus_one) return additiveInverse(exp->left()); + return simplifyMult(exp); } if (isOpX(exp)) { - Expr uneg = exp->left(); - if (uneg == zero) return zero; - if (uneg == minus_one) return one; - if (isOpX(uneg)) return uneg->left(); - if (isOpX(uneg)){ - Expr unegl = uneg->left(); - Expr unegr = uneg->right(); - if (isOpX(unegl)) return mk(unegl->left(), unegr); - if (isOpX(unegr)) return mk(unegr->left(), unegl); - } + return additiveInverse(exp->left()); } if (isOpX(exp)) @@ -1068,18 +1120,28 @@ namespace ufo { return simplifyIte(exp); } + + if (isOpX(exp)) + { + return simplifyArithmDisjunctions(exp, keepRedundandDisj && (e == exp)); + } + + if (isOpX(exp)) + { + return simplifyArithmConjunctions(exp, keepRedundandConj && (e == exp)); + } return exp; } }; - - inline static Expr simplifyBool (Expr exp); + + static Expr simplifyBool (Expr exp); struct SimplifyBoolExpr { ExprFactory &efac; - + SimplifyBoolExpr (ExprFactory& _efac) : efac(_efac){}; - + Expr operator() (Expr exp) { // GF: to enhance @@ -1090,10 +1152,10 @@ namespace ufo return mk(efac); if (isOpX(exp->right())) - return mk(exp->left()); - - return (mk( - mk(exp->left()), + return mkNeg(exp->left()); + + return simplifyBool(mk( + mkNeg(exp->left()), exp->right())); } @@ -1106,10 +1168,25 @@ namespace ufo return exp->right(); if (isOpX(exp->right())) - return mk(exp->left()); + return mkNeg(exp->left()); + + if (isOpX(exp->left())) + return mkNeg(exp->right()); + } + + if (isOpX(exp)) + { + if (isOpX(exp->right())) + return exp->left(); if (isOpX(exp->left())) - return mk(exp->right()); + return exp->right(); + + if (isOpX(exp->right())) + return mkNeg(exp->left()); + + if (isOpX(exp->left())) + return mkNeg(exp->right()); } if (isOpX(exp)) @@ -1154,7 +1231,8 @@ namespace ufo return conjoin (newCnjs, efac); } - if (isOpX(exp)){ + if (isOpX(exp)) + { Expr cond = exp->arg(0); if (isOpX(cond)) { @@ -1187,20 +1265,19 @@ namespace ufo } }; - inline static Expr simplifyArithm (Expr exp) + inline static Expr simplifyArithm (Expr exp, bool keepRedundandDisj = false, bool keepRedundandConj = false) { - RW rw(new SimplifyArithmExpr(exp->getFactory())); + RW rw(new + SimplifyArithmExpr(exp, keepRedundandDisj, keepRedundandConj)); return dagVisit (rw, exp); } - + inline static Expr simplifyBool (Expr exp) { RW rw(new SimplifyBoolExpr(exp->getFactory())); return dagVisit (rw, exp); } - static Expr mkNeg(Expr term); - inline static void simplBoolReplCnjHlp(ExprVector& hardVars, ExprSet& cnjs, ExprVector& facts, ExprVector& repls) { bool toRestart; @@ -1245,7 +1322,7 @@ namespace ufo if (isTrue) a = simplifyBool(a->right()); else if (isFalse) { - a = simplifyBool(mk(a->right())); + a = simplifyBool(mkNeg(a->right())); } } @@ -1263,7 +1340,7 @@ namespace ufo toRestart = true; facts.push_back(c); repls.push_back(mk(a->getFactory())); - facts.push_back(mk(c)); + facts.push_back(mkNeg(c)); repls.push_back(mk(a->getFactory())); } else @@ -1361,66 +1438,7 @@ namespace ufo } return -1; } - - inline static Expr arithmInverse(Expr e) - { - bool success = true; - if (isOpX(e)) - { - int coef = 1; - ExprVector ops; - getMultOps (e, ops); - Expr var = NULL; - for (auto & a : ops) - { - if (isOpX(a)) - { - coef *= lexical_cast(a); - } - else if (bind::isIntConst(a) && var == NULL) - { - var = a; - } - else - { - success = false; - } - } - if (success && coef != 0) return mk(mkTerm (mpz_class (-coef), e->getFactory()), e->right()); - if (coef == 0) return mkTerm (mpz_class (0), e->getFactory()); - } - else if (isOpX(e)) - { - ExprVector terms; - for (auto it = e->args_begin (), end = e->args_end (); it != end; ++it) - { - getAddTerm(arithmInverse(*it), terms); - } - return mknary(terms); - } - else if (isOpX(e)) - { - ExprVector terms; - getAddTerm(arithmInverse(*e->args_begin ()), terms); - auto it = e->args_begin () + 1; - for (auto end = e->args_end (); it != end; ++it) - { - getAddTerm(*it, terms); - } - return mknary(terms); - } - else if (isOpX(e)) - { - return e->left(); - } - else if (isOpX(e)) - { - return mkTerm (mpz_class (-lexical_cast(e)), e->getFactory()); - } - return mk(mkTerm (mpz_class (-1), e->getFactory()), e); - } - inline static void getAddTerm (Expr a, ExprVector &terms) // implementation (mutually recursive) { if (isOpX(a)) @@ -1438,36 +1456,39 @@ namespace ufo ++it; for (; it != end; ++it) { - getAddTerm(arithmInverse(*it), terms); + getAddTerm(additiveInverse(*it), terms); } } else if (isOpX(a)) { - getAddTerm(arithmInverse(a->left()), terms); + ExprVector tmp; + getAddTerm(a->left(), tmp); + for (auto & t : tmp) + terms.push_back(additiveInverse(t)); } else { terms.push_back(a); } } - + struct AddMultDistr { AddMultDistr () {}; - + Expr operator() (Expr exp) { if (isOpX(exp)) { Expr lhs = exp->left(); Expr rhs = exp->right(); - + ExprVector alllhs; getAddTerm(lhs, alllhs); - + ExprVector allrhs; getAddTerm(rhs, allrhs); - + ExprVector unf; for (auto &a : alllhs) { @@ -1478,25 +1499,25 @@ namespace ufo } return mkplus(unf, exp->getFactory()); } - + return exp; } }; - + inline static Expr rewriteMultAdd (Expr exp) { RW mu(new AddMultDistr()); return dagVisit (mu, exp); } - + struct FindNonlinAndRewrite { ExprVector& vars; ExprMap& extraVars; - + FindNonlinAndRewrite (ExprVector& _vars, ExprMap& _extraVars) : vars(_vars), extraVars(_extraVars) {}; - + Expr operator() (Expr t) { if (isOpX(t)) @@ -1506,14 +1527,14 @@ namespace ufo getMultOps(t, ops); ExprVector nonlinPart; - int linPart = 1; + cpp_int linPart = 1; for (auto & a : ops) { ExprVector av; filter (a, bind::IsConst (), inserter(av, av.begin())); if (av.size() == 0) { - linPart = linPart * lexical_cast(a); + linPart = linPart * lexical_cast(a); continue; } for (auto & b : av) @@ -1524,7 +1545,7 @@ namespace ufo for (auto & c : extraVars) if (c.second == b) { found = true; break; } if (! found) { - outs () << "WARNING. Wrong symbol at " << *t << ".\n"; + errs () << "WARNING. Wrong symbol at " << *t << ".\n"; return mk(t->getFactory()); } } @@ -1544,7 +1565,7 @@ namespace ufo } if (linPart == 1) return extraVars[multedVars]; - else return mk( mkTerm (mpz_class (linPart), t->getFactory()), extraVars[multedVars]); + else return mk( mkTerm (mpz_class (string(linPart)), t->getFactory()), extraVars[multedVars]); } else if (isOpX(t) || isOpX(t) || isOpX
(t)) { @@ -1555,7 +1576,7 @@ namespace ufo if (indl >= 0) key = replaceAll(key, t->left(), vars[indl]); if (indr >= 0) key = replaceAll(key, t->right(), vars[indr]); - if (isOpX(t->left()) && lexical_cast(t->left()) == 0) + if (isOpX(t->left()) && lexical_cast(t->left()) == 0) return mkTerm (mpz_class (0), t->getFactory()); if (extraVars[key] == NULL) @@ -1647,10 +1668,7 @@ namespace ufo ExprSet conjs; getConj(a, conjs); getConj(b, conjs); - return - (conjs.size() == 0) ? mk(a->getFactory()) : - (conjs.size() == 1) ? *conjs.begin() : - mknary(conjs); + return conjoin(conjs, a->getFactory()); } inline int intersectSize(ExprVector& a, ExprVector& b){ @@ -1660,15 +1678,13 @@ namespace ufo return c.size(); } - inline static Expr simplifyArithmDisjunctions(Expr term); - inline static void productAnd (ExprSet& as, ExprSet& bs, ExprSet& ps) { for (auto &a : as) { for (auto &b : bs) { - Expr orredExpr = simplifyArithmDisjunctions(mk(a, b)); + Expr orredExpr = simplifyArithmDisjunctions(mk(a, b), false); if (!isOpX(orredExpr)) ps.insert(orredExpr); } @@ -1685,7 +1701,7 @@ namespace ufo getDisj(exp, disjs); if (disjs.size() == 1) return disjoin(disjs, exp->getFactory()); - + vector dconjs; for (auto &a : disjs) { @@ -1744,51 +1760,48 @@ namespace ufo return false; } - inline static Expr convertToGEandGT(Expr term) + inline static Expr convertToGEandGT(Expr fla) { - if (isOpX(term)) return mk(term->right(), term->left()); + Expr lhs = fla->left(); + Expr rhs = fla->right(); - if (isOpX(term)) return mk(term->right(), term->left()); + if (isOpX(fla)) return mkNeg(convertToGEandGT(lhs)); - if (isOpX(term)) - { - if (hasBoolSort(term->left())) return - mk(mk(term->left(), term->right()), - mk(mkNeg(term->left()), mkNeg(term->right()))); - else if (isNumeric(term->left())) return mk( - mk(term->left(), term->right()), - mk(term->right(), term->left())); - else return term; - } + if (isOpX(fla)) return mk(rhs, lhs); + + if (isOpX(fla)) return mk(rhs, lhs); - if (isOpX(term)) + if (isOpX(fla)) { - if (hasBoolSort(term->left())) return - mk(mk(term->left(), mkNeg(term->right())), - mk(mkNeg(term->left()), term->right())); - else if (isNumeric(term->left())) return mk( - mk(term->left(), term->right()), - mk(term->right(), term->left())); - else return term; + if (hasBoolSort(lhs)) return + mk(mk(lhs, rhs), + mk(mkNeg(lhs), mkNeg(rhs))); + else if (isNumeric(lhs)) return mk( + mk(lhs, rhs), mk(rhs, lhs)); + else return fla; } - if (isOpX(term)) + if (isOpX(fla)) { - return mk(convertToGEandGT(term->last())); + if (hasBoolSort(lhs)) return + mk(mk(lhs, mkNeg(rhs)), + mk(mkNeg(lhs), rhs)); + else if (isNumeric(lhs)) return mk( + mk(lhs, rhs), mk(rhs, lhs)); + else return fla; } - if (isOpX(term) || isOpX(term)) + if (isOpX(fla) || isOpX(fla)) { ExprSet args; - for (int i = 0; i < term->arity(); i++){ - args.insert(convertToGEandGT(term->arg(i))); + for (int i = 0; i < fla->arity(); i++){ + args.insert(convertToGEandGT(fla->arg(i))); } - return isOpX(term) ? conjoin (args, term->getFactory()) : - disjoin (args, term->getFactory()); - + return isOpX(fla) ? conjoin (args, fla->getFactory()) : + disjoin (args, fla->getFactory()); } - return term; + return fla; } /* find expressions of type expr = arrayVar in e and store it in output */ @@ -1885,7 +1898,7 @@ namespace ufo Expr iteCond = unfoldITE (term->arg(0)); Expr iteC1 = unfoldITE (term->arg(1)); Expr iteC2 = unfoldITE (term->arg(2)); - + return mk( mk(iteCond, iteC1), mk(mkNeg(iteCond), iteC2)); } @@ -1906,19 +1919,19 @@ namespace ufo { Expr lhs = term->arg(0); Expr rhs = term->arg(1); - + if (isOpX(rhs)) { Expr iteCond = unfoldITE (rhs->arg(0)); Expr iteC1 = rhs->arg(1); Expr iteC2 = rhs->arg(2); - + Expr newCmp1 = unfoldITE (reBuildCmp(term, lhs, iteC1)); Expr newCmp2 = unfoldITE (reBuildCmp(term, lhs, iteC2)); - + Expr transformed = mk( mk(iteCond, newCmp1), mk(mkNeg(iteCond), newCmp2)); - + // outs () << " [1b] ---> " << *term << "\n"; // outs () << " [1e] ---> " << *transformed << "\n\n"; return transformed; @@ -1926,17 +1939,17 @@ namespace ufo else if (isOpX(lhs)) { // GF: symmetric case to the one above - + Expr iteCond = unfoldITE (lhs->arg(0)); Expr iteC1 = lhs->arg(1); Expr iteC2 = lhs->arg(2); - + Expr newCmp1 = unfoldITE (reBuildCmp(term, iteC1, rhs)); Expr newCmp2 = unfoldITE (reBuildCmp(term, iteC2, rhs)); - + Expr transformed = mk( mk(iteCond, newCmp1), mk(mkNeg(iteCond), newCmp2)); - + // outs () << " [2b] ---> " << *term << "\n"; // outs () << " [2e] ---> " << *transformed << "\n\n"; return transformed; @@ -1949,7 +1962,7 @@ namespace ufo for (auto it = rhs->args_begin(), end = rhs->args_end(); it != end; ++it) { // make sure that only one ITE is found - + if (!found && isOpX(*it)) { found = true; @@ -1965,20 +1978,20 @@ namespace ufo Expr iteCond = unfoldITE (iteArg->arg(0)); Expr iteC1 = iteArg->arg(1); Expr iteC2 = iteArg->arg(2); - + newArgs.push_back(iteC1); Expr e1 = unfoldITE (reBuildCmp(term, lhs, mknary(newArgs))); // GF: "unfoldITE" gives error... - + newArgs.pop_back(); newArgs.push_back(iteC2); Expr e2 = unfoldITE (reBuildCmp(term, lhs, mknary(newArgs))); - + Expr transformed = mk(mk(iteCond, e1), mk(mkNeg(iteCond),e2)); - + // outs () << " [3b] ---> " << *term << "\n"; // outs () << " [3e] ---> " << *transformed << "\n\n"; - + return transformed; } } @@ -2000,26 +2013,26 @@ namespace ufo newArgs.push_back(*it); } } - + if (found) { Expr iteCond = unfoldITE (iteArg->arg(0)); Expr iteC1 = iteArg->arg(1); Expr iteC2 = iteArg->arg(2); - + newArgs.push_back(iteC1); Expr e1 = unfoldITE (reBuildCmp(term, mknary(newArgs), rhs)); - + newArgs.pop_back(); newArgs.push_back(iteC2); Expr e2 = unfoldITE (reBuildCmp(term, mknary(newArgs), rhs)); - + Expr transformed = mk(mk(iteCond,e1), mk(mkNeg(iteCond),e2)); - + // outs () << " [4b] ---> " << *term << "\n"; // outs () << " [4e] ---> " << *transformed << "\n\n"; - + return transformed; } } @@ -2071,7 +2084,7 @@ namespace ufo } return term; } - + struct MoveInsideITEr { MoveInsideITEr () {}; @@ -2371,18 +2384,18 @@ namespace ufo } // very simple check if tautology (SMT-based check is expensive) - inline static bool isTautology(Expr term) + inline static bool isTautology(Expr fla) { - if (isOpX(term)) - if (term->arg(0) == term->arg(1)) return true; + if (isOpX(fla)) + if (fla->arg(0) == fla->arg(1)) return true; - if (isOp(term)) - if (isOpX(term->arg(0)) && isOpX(term->arg(1))) - return evaluateCmpConsts(term, - lexical_cast(term->arg(0)), lexical_cast(term->arg(1))); + if (isOp(fla)) + if (isOpX(fla->arg(0)) && isOpX(fla->arg(1))) + return evaluateCmpConsts(fla, + lexical_cast(fla->arg(0)), lexical_cast(fla->arg(1))); ExprSet cnjs; - getConj(term, cnjs); + getConj(fla, cnjs); if (cnjs.size() < 2) return false; bool res = true; @@ -2417,117 +2430,497 @@ namespace ufo return false; } - inline static Expr simplifyArithmDisjunctions(Expr term) + // similar to simplifyArithmDisjunctions + inline static Expr simplifyArithmConjunctions(Expr fla, bool keep_redundand = false) { - // a simple simplifier; to be enhanced + ExprFactory& efac = fla->getFactory(); + ExprSet cnjs, newCnjs; + getConj(fla, cnjs); + if (cnjs.size() == 1) return *cnjs.begin(); + ExprSet lin_coms; - ExprSet dsjs; - getDisj(term, dsjs); - if (dsjs.size() < 2) return term; + // search for a var, const*var or whatever exists in any conjunct + for (auto & d : cnjs) { + if (!isOp(d) || + !isNumeric(d->arg(0))) { + newCnjs.insert(d); + continue; + } + + Expr tmp = simplifyArithm( + reBuildCmp(d, mk(d->arg(0), additiveInverse(d->arg(1))), + mkTerm (mpz_class (0), efac))); + tmp = ineqReverter(tmp); + + newCnjs.insert(tmp); + lin_coms.insert(tmp->arg(0)); + } - ExprSet vars; + if (lin_coms.size() == 0) return conjoin(cnjs, efac); + + for (auto &lin_com : lin_coms) { + + cpp_int cur_max_gt; + cpp_int cur_max_ge; + cpp_int cur_min_lt; + cpp_int cur_min_le; + + bool cur_max_gt_bl = false; + bool cur_max_ge_bl = false; + bool cur_min_lt_bl = false; + bool cur_min_le_bl = false; + + set all_diseqs; + + for (auto it = newCnjs.begin(); it != newCnjs.end(); ) { + auto d = *it; + + if (!isOp(d) || + d->arg(0) != lin_com || + !isOpX(d->arg(1))) { + ++it; + continue; + } + + cpp_int c = lexical_cast(d->arg(1)); + + if (isOpX(d)) { + all_diseqs.insert(c); + } + if (isOpX(d)) { + cur_min_le = cur_min_le_bl ? min(cur_min_le, c) : c; + cur_min_le_bl = true; + } + if (isOpX(d)) { + cur_max_ge = cur_max_ge_bl ? max(cur_max_ge, c) : c; + cur_max_ge_bl = true; + } + if (isOpX(d)) { + cur_min_lt = cur_min_lt_bl ? min(cur_min_lt, c) : c; + cur_min_lt_bl = true; + } + if (isOpX(d)) { + cur_max_gt = cur_max_gt_bl ? max(cur_max_gt, c) : c; + cur_max_gt_bl = true; + } + if (isOpX(d)) { + cur_max_ge = cur_max_ge_bl ? max(cur_max_ge, c) : c; + cur_min_le = cur_min_le_bl ? min(cur_min_le, c) : c; + cur_max_ge_bl = true; + cur_min_le_bl = true; + } + if (keep_redundand) it++; + else newCnjs.erase (it++); + } + + if (cur_min_le_bl) + while (true) { + auto tmp = cur_min_le; + for (auto it = all_diseqs.begin(); it != all_diseqs.end(); ) { + if (*it == cur_min_le) { + cur_min_le--; + if (keep_redundand) + newCnjs.insert(mk(lin_com, mkTerm (mpz_class (string (cur_min_le)), efac))); + it = all_diseqs.erase(it); + } else if (*it > cur_min_le) { // remove redundand, e.g., (x != 7 /\ x <= 5) + if (keep_redundand) + newCnjs.insert(mk(lin_com, mkTerm (mpz_class (string (*it)), efac))); + it = all_diseqs.erase(it); + } + else ++it; + } + if (tmp == cur_min_le) break; + } + + if (cur_min_lt_bl) + while (true) { + auto tmp = cur_min_lt; + for (auto it = all_diseqs.begin(); it != all_diseqs.end(); ) { + if (*it == cur_min_lt - 1) { + cur_min_lt--; + if (keep_redundand) + newCnjs.insert(mk(lin_com, mkTerm (mpz_class (string (cur_min_lt)), efac))); + it = all_diseqs.erase(it); + } else if (*it >= cur_min_lt) { // remove redundand, e.g., (x != 5 /\ x < 5) + if (keep_redundand) + newCnjs.insert(mk(lin_com, mkTerm (mpz_class (string (*it)), efac))); + it = all_diseqs.erase(it); + } + else ++it; + } + if (tmp == cur_min_lt) break; + } + + if (cur_max_ge_bl) + while (true) { + auto tmp = cur_max_ge; + for (auto it = all_diseqs.begin(); it != all_diseqs.end(); ) { + if (*it == cur_max_ge) { + cur_max_ge++; + if (keep_redundand) + newCnjs.insert(mk(lin_com, mkTerm (mpz_class (string (cur_max_ge)), efac))); + it = all_diseqs.erase(it); + } else if (*it < cur_max_ge) { // remove redundand, e.g., (x != 4 /\ x >= 5) + if (keep_redundand) + newCnjs.insert(mk(lin_com, mkTerm (mpz_class (string (*it)), efac))); + it = all_diseqs.erase(it); + } + else ++it; + } + if (tmp == cur_max_ge) break; + } + + if (cur_max_gt_bl) + while (true) { + auto tmp = cur_max_gt; + for (auto it = all_diseqs.begin(); it != all_diseqs.end(); ) { + if (*it == cur_max_gt + 1) { + cur_max_gt++; + if (keep_redundand) + newCnjs.insert(mk(lin_com, mkTerm (mpz_class (string (cur_max_gt)), efac))); + it = all_diseqs.erase(it); + } else if (*it <= cur_max_gt) { // remove redundand, e.g., (x != 5 /\ x > 5) + if (keep_redundand) + newCnjs.insert(mk(lin_com, mkTerm (mpz_class (string (*it)), efac))); + it = all_diseqs.erase(it); + } + else ++it; + } + if (tmp == cur_max_gt) break; + } + + for (auto c : all_diseqs) { + newCnjs.insert (mk(lin_com, mkTerm (mpz_class (string (c)), efac))); + } + + if ((cur_max_gt_bl && cur_min_lt_bl && cur_max_gt >= cur_min_lt - 1) || // e.g., (x > 3 /\ x < 4) + (cur_max_ge_bl && cur_min_lt_bl && cur_max_ge >= cur_min_lt) || + (cur_max_gt_bl && cur_min_le_bl && cur_max_gt >= cur_min_le) || + (cur_max_ge_bl && cur_min_le_bl && cur_max_ge >= cur_min_le + 1)) + return mk(efac); + + if (cur_max_ge_bl && cur_min_le_bl && cur_max_ge == cur_min_le && newCnjs.empty()) + { + Expr res = mk(lin_com, mkTerm (mpz_class (string (cur_min_le)), efac)); + if (keep_redundand) newCnjs.insert(res); + else return res; + } + + if (cur_max_gt_bl && cur_min_le_bl && cur_max_gt + 1 == cur_min_le && newCnjs.empty()) + { + Expr res = mk(lin_com, mkTerm (mpz_class (string (cur_min_le)), efac)); + if (keep_redundand) newCnjs.insert(res); + else return res; + } + + if (cur_max_ge_bl && cur_min_lt_bl && cur_max_ge + 1 == cur_min_lt && newCnjs.empty()) + { + Expr res = mk(lin_com, mkTerm (mpz_class (string (cur_max_ge)), efac)); + if (keep_redundand) newCnjs.insert(res); + else return res; + } + + if (cur_max_gt_bl && cur_min_lt_bl && cur_max_gt + 2 == cur_min_lt && newCnjs.empty()) + { + Expr res = mk(lin_com, mkTerm (mpz_class (string (cur_max_gt + 1)), efac)); + if (keep_redundand) newCnjs.insert(res); + else return res; + } + + if (cur_min_le_bl && cur_min_lt_bl) { + if (cur_min_le >= cur_min_lt) { + newCnjs.insert(mk(lin_com, mkTerm (mpz_class (string (cur_min_lt)), efac))); + } + else { + newCnjs.insert(mk(lin_com, mkTerm (mpz_class (string (cur_min_le)), efac))); + } + } + else { + if (cur_min_le_bl) { + newCnjs.insert(mk(lin_com, mkTerm (mpz_class (string (cur_min_le)), efac))); + } + if (cur_min_lt_bl) { + newCnjs.insert(mk(lin_com, mkTerm (mpz_class (string (cur_min_lt)), efac))); + } + } + + if (cur_max_ge_bl && cur_max_gt_bl) { + if (cur_max_ge <= cur_max_gt) { // e.g., x > 5 /\ x >= 5 + newCnjs.insert(mk(lin_com, mkTerm (mpz_class (string (cur_max_gt)), efac))); + } + else { + newCnjs.insert(mk(lin_com, mkTerm (mpz_class (string (cur_max_ge)), efac))); + } + } + else { + if (cur_max_ge_bl) { + newCnjs.insert(mk(lin_com, mkTerm (mpz_class (string (cur_max_ge)), efac))); + } + if (cur_max_gt_bl) { + newCnjs.insert(mk(lin_com, mkTerm (mpz_class (string (cur_max_gt)), efac))); + } + } + } + + return conjoin(newCnjs, efac); + } + + // symmetric to simplifyArithmConjunctions + inline static Expr simplifyArithmDisjunctions(Expr fla, bool keep_redundand = false) + { + ExprFactory& efac = fla->getFactory(); + ExprSet dsjs, newDsjs; + getDisj(fla, dsjs); + if (dsjs.size() == 1) return *dsjs.begin(); + + ExprSet lin_coms; // search for a var, const*var or whatever exists in any disjunct for (auto & d : dsjs) { - if (isOpX(d)) return d; - if (!isOp(d)) continue; + if (!isOp(d) || + !isNumeric(d->arg(0))) { + newDsjs.insert(d); + continue; + } - Expr lhs = d->arg(0); - Expr rhs = d->arg(1); - if (isLinearCombination(lhs)) vars.insert(lhs); - if (isLinearCombination(rhs)) vars.insert(rhs); + Expr tmp = simplifyArithm( + reBuildCmp(d, mk(d->arg(0), additiveInverse(d->arg(1))), + mkTerm (mpz_class (0), efac))); + tmp = ineqReverter(tmp); + newDsjs.insert(tmp); + lin_coms.insert(tmp->arg(0)); } - if (vars.size() == 0) return term; - - for (auto &var : vars) { + if (lin_coms.size() == 0) return disjoin(dsjs, efac); - int cur_min_gt = INT_MAX; // maintain several vars - int cur_min_ge = INT_MAX; // to avoid introducing new constants - int cur_max_lt = INT_MIN; - int cur_max_le = INT_MIN; + for (auto &lin_com : lin_coms) { - for (auto it = dsjs.begin(); it != dsjs.end(); ) { - auto d = *it; + cpp_int cur_min_gt; + cpp_int cur_min_ge; + cpp_int cur_max_lt; + cpp_int cur_max_le; - if (!isOpX(d) && !isOpX(d) && !isOpX(d) && !isOpX(d)) { ++it; continue; } + bool cur_min_gt_bl = false; + bool cur_min_ge_bl = false; + bool cur_max_lt_bl = false; + bool cur_max_le_bl = false; - Expr rewritten = ineqMover(d, var); + set all_eqs; - if (isOpX(rewritten->arg(0)) && - isOpX(rewritten->arg(1))) { + for (auto it = newDsjs.begin(); it != newDsjs.end(); ) { + auto d = *it; - if (evaluateCmpConsts(rewritten, lexical_cast(rewritten->arg(0)), - lexical_cast(rewritten->arg(1)))){ - return mk(d->getFactory()); - } else { - dsjs.erase(it++); - continue; + if (!isOp(d) || + d->arg(0) != lin_com || + !isOpX(d->arg(1))) { + ++it; + continue; + } + + cpp_int c = lexical_cast(d->arg(1)); + + if (isOpX(d)) { + all_eqs.insert(c); + } + if (isOpX(d)) { + cur_max_le = cur_max_le_bl ? max(cur_max_le, c) : c; + cur_max_le_bl = true; + } + if (isOpX(d)) { + cur_min_ge = cur_min_ge_bl ? min(cur_min_ge, c) : c; + cur_min_ge_bl = true; + } + if (isOpX(d)) { + cur_max_lt = cur_max_lt_bl ? max(cur_max_lt, c) : c; + cur_max_lt_bl = true; + } + if (isOpX(d)) { + cur_min_gt = cur_min_gt_bl ? min(cur_min_gt, c) : c; + cur_min_gt_bl = true; + } + if (isOpX(d)) { + cur_min_gt = cur_min_gt_bl ? min(cur_min_gt, c) : c; + cur_max_lt = cur_max_lt_bl ? max(cur_max_lt, c) : c; + cur_min_gt_bl = true; + cur_max_lt_bl = true; + } + if (keep_redundand) it++; + else newDsjs.erase (it++); + } + + if (cur_max_le_bl) + while (true) { + auto tmp = cur_max_le; + for (auto it = all_eqs.begin(); it != all_eqs.end(); ) { + if (*it == cur_max_le + 1) { + cur_max_le++; + if (keep_redundand) + newDsjs.insert(mk(lin_com, mkTerm (mpz_class (string (cur_max_le)), efac))); + it = all_eqs.erase(it); + } else if (*it <= cur_max_le) { // remove redundand, e.g., (x = 3 \/ x <= 5) + if (keep_redundand) + newDsjs.insert(mk(lin_com, mkTerm (mpz_class (string (*it)), efac))); + it = all_eqs.erase(it); + } + else ++it; } + if (tmp == cur_max_le) break; + } + + if (cur_max_lt_bl) + while (true) { + auto tmp = cur_max_lt; + for (auto it = all_eqs.begin(); it != all_eqs.end(); ) { + if (*it == cur_max_lt) { + cur_max_lt++; + if (keep_redundand) + newDsjs.insert(mk(lin_com, mkTerm (mpz_class (string (cur_max_lt)), efac))); + it = all_eqs.erase(it); + } else if (*it < cur_max_lt) { // remove redundand, e.g., (x = 4 \/ x < 5) + if (keep_redundand) + newDsjs.insert(mk(lin_com, mkTerm (mpz_class (string (*it)), efac))); + it = all_eqs.erase(it); + } + else ++it; + } + if (tmp == cur_max_lt) break; + } + + if (cur_min_ge_bl) + while (true) { + auto tmp = cur_min_ge; + for (auto it = all_eqs.begin(); it != all_eqs.end(); ) { + if (*it == cur_min_ge - 1) { + cur_min_ge--; + if (keep_redundand) + newDsjs.insert(mk(lin_com, mkTerm (mpz_class (string (cur_min_ge)), efac))); + it = all_eqs.erase(it); + } else if (*it >= cur_min_ge) { // remove redundand, e.g., (x = 9 \/ x >= 5) + if (keep_redundand) + newDsjs.insert(mk(lin_com, mkTerm (mpz_class (string (*it)), efac))); + it = all_eqs.erase(it); + } + else ++it; + } + if (tmp == cur_min_ge) break; + } + + if (cur_min_gt_bl) + while (true) { + auto tmp = cur_min_gt; + for (auto it = all_eqs.begin(); it != all_eqs.end(); ) { + if (*it == cur_min_gt) { + cur_min_gt--; + if (keep_redundand) + newDsjs.insert(mk(lin_com, mkTerm (mpz_class (string (cur_min_gt)), efac))); + it = all_eqs.erase(it); + } else if (*it > cur_min_gt) { // remove redundand, e.g., (x = 6 \/ x > 5) + if (keep_redundand) + newDsjs.insert(mk(lin_com, mkTerm (mpz_class (string (*it)), efac))); + it = all_eqs.erase(it); + } + else ++it; + } + if (tmp == cur_min_gt) break; } - if (rewritten->arg(0) != var) { - rewritten = ineqReverter(rewritten); - if (rewritten->arg(0) != var) { ++it; continue; } - } + for (auto c : all_eqs) { + newDsjs.insert (mk(lin_com, mkTerm (mpz_class (string (c)), efac))); + } - if (!isOpX(rewritten->arg(1))) { ++it; continue; } + if ((cur_min_gt_bl && cur_max_lt_bl && cur_min_gt <= cur_max_lt - 1) || + (cur_min_ge_bl && cur_max_lt_bl && cur_min_ge <= cur_max_lt) || + (cur_min_gt_bl && cur_max_le_bl && cur_min_gt <= cur_max_le) || + (cur_min_ge_bl && cur_max_le_bl && cur_min_ge <= cur_max_le + 1)) + return mk(efac); - int c = lexical_cast(rewritten->arg(1)); + if (cur_min_gt_bl && cur_max_lt_bl && cur_min_gt == cur_max_lt && newDsjs.empty()) + { + Expr res = mk(lin_com, mkTerm (mpz_class (string (cur_max_lt)), efac)); + if (keep_redundand) newDsjs.insert(res); + else return res; + } - if (isOpX(rewritten)) { cur_max_le = max(cur_max_le, c); } - if (isOpX(rewritten)) { cur_min_ge = min(cur_min_ge, c); } - if (isOpX(rewritten)) { cur_max_lt = max(cur_max_lt, c); } - if (isOpX(rewritten)) { cur_min_gt = min(cur_min_gt, c); } + if (cur_min_ge_bl && cur_max_lt_bl && cur_min_ge - 1 == cur_max_lt && newDsjs.empty()) + { + Expr res = mk(lin_com, mkTerm (mpz_class (string (cur_max_lt)), efac)); + if (keep_redundand) newDsjs.insert(res); + else return res; + } - if (max(cur_max_le+1, cur_max_lt) > min(cur_min_ge-1,cur_min_gt)) - return mk(term->getFactory()); + if (cur_min_gt_bl && cur_max_le_bl && cur_min_gt - 1 == cur_max_le && newDsjs.empty()) + { + Expr res = mk(lin_com, mkTerm (mpz_class (string (cur_min_gt)), efac)); + if (keep_redundand) newDsjs.insert(res); + else return res; + } - dsjs.erase(it++); + if (cur_min_ge_bl && cur_max_le_bl && cur_min_ge - 2 == cur_max_le && newDsjs.empty()) + { + Expr res = mk(lin_com, mkTerm (mpz_class (string (cur_min_ge - 1)), efac)); + if (keep_redundand) newDsjs.insert(res); + else return res; } - if (cur_min_ge != INT_MAX) { - Expr minExpr = mk(var, mkTerm (mpz_class (cur_min_ge), term->getFactory())); - dsjs.insert(minExpr); + if (cur_max_le_bl && cur_max_lt_bl) { + if (cur_max_le >= cur_max_lt) { + newDsjs.insert(mk(lin_com, mkTerm (mpz_class (string (cur_max_le)), efac))); + } + else { + newDsjs.insert(mk(lin_com, mkTerm (mpz_class (string (cur_max_lt)), efac))); + } } - if (cur_min_gt != INT_MAX) { - Expr minExpr = mk(var, mkTerm (mpz_class (cur_min_gt), term->getFactory())); - dsjs.insert(minExpr); + else { + if (cur_max_le_bl) { + newDsjs.insert(mk(lin_com, mkTerm (mpz_class (string (cur_max_le)), efac))); + } + if (cur_max_lt_bl) { + newDsjs.insert(mk(lin_com, mkTerm (mpz_class (string (cur_max_lt)), efac))); + } } - if (cur_max_le != INT_MIN) { - Expr maxExpr = mk(var, mkTerm (mpz_class (cur_max_le), term->getFactory())); - dsjs.insert(maxExpr); + + if (cur_min_ge_bl && cur_min_gt_bl) { + if (cur_min_ge <= cur_min_gt) { + newDsjs.insert(mk(lin_com, mkTerm (mpz_class (string (cur_min_ge)), efac))); + } + else { + newDsjs.insert(mk(lin_com, mkTerm (mpz_class (string (cur_min_gt)), efac))); + } } - if (cur_max_lt != INT_MIN) { - Expr maxExpr = mk(var, mkTerm (mpz_class (cur_max_lt), term->getFactory())); - dsjs.insert(maxExpr); + else { + if (cur_min_ge_bl) { + newDsjs.insert(mk(lin_com, mkTerm (mpz_class (string (cur_min_ge)), efac))); + } + if (cur_min_gt_bl) { + newDsjs.insert(mk(lin_com, mkTerm (mpz_class (string (cur_min_gt)), efac))); + } } } - return disjoin(dsjs, term->getFactory()); + return disjoin(newDsjs, efac); } - inline static Expr normalizeAtom(Expr term, ExprVector& intVars) + inline static Expr normalizeAtom(Expr fla, ExprVector& intVars) { - if (isOp(term)) + if (isOp(fla)) { - Expr lhs = term->left(); - Expr rhs = term->right(); - + Expr lhs = fla->left(); + Expr rhs = fla->right(); + ExprVector all; ExprVector allrhs; - + getAddTerm(lhs, all); getAddTerm(rhs, allrhs); for (auto & a : allrhs) { - all.push_back(arithmInverse(a)); + all.push_back(additiveInverse(a)); } ExprSet newlhs; for (auto &v : intVars) { - int coef = 0; + cpp_int coef = 0; string s1 = lexical_cast(v); for (auto it = all.begin(); it != all.end();) { @@ -2556,7 +2949,7 @@ namespace ufo ExprVector ops; getMultOps (*it, ops); - int c = 1; + cpp_int c = 1; bool success = true; for (auto & a : ops) { @@ -2566,7 +2959,7 @@ namespace ufo } else if (isOpX(a)) { - c = c * lexical_cast(a); + c = c * lexical_cast(a); } else { @@ -2586,26 +2979,26 @@ namespace ufo ++it; } } - if (coef != 0) newlhs.insert(mk(mkTerm (mpz_class (coef), term->getFactory()), v)); + if (coef != 0) newlhs.insert(mk(mkTerm (mpz_class (string(coef)), fla->getFactory()), v)); } - + bool success = true; - int intconst = 0; - + cpp_int intconst = 0; + for (auto &e : all) { if (isOpX(e)) { - intconst += lexical_cast(e); + intconst += lexical_cast(e); } else if (isOpX(e)) { // GF: sometimes it fails (no idea why) - int thisTerm = 1; + cpp_int thisTerm = 1; for (auto it = e->args_begin (), end = e->args_end (); it != end; ++it) { if (isOpX(*it)) - thisTerm *= lexical_cast(*it); + thisTerm *= lexical_cast(*it); else success = false; } @@ -2616,23 +3009,23 @@ namespace ufo success = false; } } - + if (success && newlhs.size() == 0) { - return (evaluateCmpConsts(term, 0, -intconst)) ? mk(term->getFactory()) : - mk(term->getFactory()); + return (evaluateCmpConsts(fla, 0, -intconst)) ? mk(fla->getFactory()) : + mk(fla->getFactory()); } - + if (success) { Expr pl = (newlhs.size() == 1) ? *newlhs.begin(): mknary(newlhs); - Expr c = mkTerm (mpz_class (-intconst), term->getFactory()); - return reBuildCmp(term, pl, c); + Expr c = mkTerm (mpz_class (string (-intconst)), fla->getFactory()); + return reBuildCmp(fla, pl, c); } } - return term; + return fla; } - + inline static Expr normalizeDisj(Expr exp, ExprVector& intVars) { ExprSet disjs; @@ -2646,8 +3039,8 @@ namespace ufo } return disjoin(newDisjs, exp->getFactory()); } - - inline static bool getLinCombCoefs(Expr ex, set& intCoefs) + + inline static bool getLinCombCoefs(Expr ex, set& intCoefs) { bool res = true; if (isOpX(ex)) @@ -2665,7 +3058,7 @@ namespace ufo if (isOpX(*it)) // else, it is 1, and we will add it anyway; { if (isOpX((*it)->left())) - intCoefs.insert(lexical_cast ((*it)->left())); + intCoefs.insert(lexical_cast ((*it)->left())); else return false; } } @@ -2673,7 +3066,7 @@ namespace ufo else if (isOpX(lhs)) { if (isOpX(lhs->left())) - intCoefs.insert(lexical_cast (lhs->left())); + intCoefs.insert(lexical_cast (lhs->left())); else return false; } else @@ -2684,7 +3077,7 @@ namespace ufo return res; } - inline static void getLinCombConsts(Expr ex, set& intConsts) + inline static void getLinCombConsts(Expr ex, set& intConsts) { if (isOpX(ex)) { @@ -2693,7 +3086,7 @@ namespace ufo } else if (isOp(ex)) // assuming the lin.combination is on the left side { - intConsts.insert(lexical_cast (ex->right())); + intConsts.insert(lexical_cast (ex->right())); } } @@ -2737,93 +3130,6 @@ namespace ufo return isOpX(exp); } - // very naive version, to extend - inline ExprSet orifyCmpConstraintsSet(ExprSet& es, int bnd = 10) - { - assert (es.size() > 0); - if (es.size() == 1) - { - ExprSet newDsjs; - getDisj(*es.begin(), newDsjs); - return newDsjs; - } - - bool toDisj; - ExprFactory &efac = (*es.begin())->getFactory(); - Expr lhs; - int lowerBnd = INT_MIN; - int upperBnd = INT_MAX; - for (auto & a : es) - { - toDisj = false; - if (!isOp(a)) break; - if (isOpX(a)) - { - ExprSet newDsjs; - newDsjs.insert(a); - return newDsjs; - } - - if (lhs == NULL) lhs = a->left(); - else - if (0 != lexical_cast(lhs).compare(lexical_cast(a->left()))) break; - - if (!isOpX(a->right())) break; - - if (isOpX(a)) lowerBnd = max(lowerBnd, lexical_cast(a->right())); - else if (isOpX(a)) lowerBnd = max(lowerBnd, lexical_cast(a->right()) + 1); - else if (isOpX(a)) upperBnd = min(upperBnd, lexical_cast(a->right())); - else if (isOpX(a)) upperBnd = min(upperBnd, lexical_cast(a->right()) - 1); - - toDisj = true; - } - - ExprSet newDsjs; - if (toDisj) - { - for (int i = 0; i < min(bnd, upperBnd - lowerBnd); i++) - { - newDsjs.insert(mk(lhs, mkTerm (mpz_class (lowerBnd + i), efac))); - } - if (upperBnd - lowerBnd > bnd) - { - newDsjs.insert(mk - (mk(lhs, mkTerm (mpz_class (lowerBnd + bnd), efac)), - mk(lhs, mkTerm (mpz_class (upperBnd), efac)))); - } - } - else - { - newDsjs.insert(conjoin(es, efac)); - } - return newDsjs; - } - - inline void getNondets (Expr e, std::map& nondets) - { - ExprSet lin; - getConj(e, lin); - std::map constraints; - for (auto & a : lin) - { - if (isOpX(a) || isOpX(a) || isOpX(a) || isOpX(a) || isOpX(a) || isOpX(a)) - { - ExprVector av; - filter (a, bind::IsConst (), inserter(av, av.begin())); - if (av.size() == 0 || av.size() > 1) continue; - // current limitation: only nondeterminism w.r.t. one variable; to extend - - Expr a1 = (unfoldITE(a)); - a1 = simplifyBool(a1); - getConj(a1, constraints[*av.begin()]); - } - } - - for (auto & a : constraints){ - nondets[a.first] = orifyCmpConstraintsSet(a.second); - } - } - Expr processNestedStores (Expr exp, ExprSet& cnjs) { // TODO: double check if cells are overwritten @@ -2995,7 +3301,7 @@ namespace ufo if ((av[0] == srcVars[i] && av[1] == dstVars[i]) || (av[1] == srcVars[i] && av[0] == dstVars[i])) { - set coefs; + set coefs; exp = normalizeAtom(exp, av); if (!getLinCombCoefs(exp, coefs)) continue; @@ -3004,12 +3310,12 @@ namespace ufo if (success) { Expr cExpr = exp->right(); - int c = abs(lexical_cast(cExpr)); + cpp_int c = abs(lexical_cast(cExpr)); if (c > 1) for (int j = 0; j < c; j++) deltas.insert(mk(mk( srcVars[i], - mkTerm (mpz_class (c), exp->getFactory())), + mkTerm (mpz_class (string(c)), exp->getFactory())), mkTerm (mpz_class (j), exp->getFactory()))); } } @@ -3151,7 +3457,7 @@ namespace ufo { if (a->left() == b->right()) tr.insert(mk(b->left(), a->right())); if (b->left() == a->right()) tr.insert(mk(a->left(), b->right())); - + if (isSymmetric(a)) { if (a->left() == b->left()) tr.insert(mk(a->right(), b->right())); @@ -3186,26 +3492,26 @@ namespace ufo return exp; } }; - + inline static Expr enhanceWithMoreClauses (Expr exp) { RW tr(new TransClAdder()); return dagVisit (tr, exp); } - + inline static Expr propagateEqualities (Expr exp) { ExprSet cnjs; ExprSet eqs; ExprSet trEqs; - + getConj(exp, cnjs); - + for (auto &a : cnjs) if (isOpX(a)) eqs.insert(a); if (eqs.size() == 0) return exp; - + computeTransitiveClosure(eqs, trEqs); - + for (auto &a : trEqs) { if (isOpX(a)) @@ -3234,13 +3540,13 @@ namespace ufo bool eq3 = (repl2 == repl1); if (eq1 && eq2 && eq3) cnjs.insert(a); - else if (eq1) cnjs.insert (mk (mk(neg, repl2))); - else if (eq2) cnjs.insert (mk (mk(neg, repl1))); - else cnjs.insert(mk (mk(neg, mk(repl1, repl2)))); + else if (eq1) cnjs.insert (mkNeg (mk(neg, repl2))); + else if (eq2) cnjs.insert (mkNeg (mk(neg, repl1))); + else cnjs.insert(mkNeg (mk(neg, mk(repl1, repl2)))); } } */ } - + return conjoin(cnjs, exp->getFactory()); } @@ -3360,7 +3666,7 @@ namespace ufo inline static bool evalLeq(Expr a, Expr b) { if (isOpX(a) && isOpX(b)) - return (lexical_cast(a) <= lexical_cast(b)); + return (lexical_cast(a) <= lexical_cast(b)); else return (a == b); // GF: to extend } @@ -3396,18 +3702,18 @@ namespace ufo else if (isOpX(c)) { if (isOpX(c->left())) - ineqs.insert(mk(c->right(), mkTerm (mpz_class (lexical_cast(c->left())-1), exp->getFactory()))); + ineqs.insert(mk(c->right(), mkTerm (mpz_class (string (lexical_cast(c->left())-1)), exp->getFactory()))); else if(isOpX(c->right())) - ineqs.insert(mk(mkTerm (mpz_class (lexical_cast(c->right())+1), exp->getFactory()), c->left())); + ineqs.insert(mk(mkTerm (mpz_class (string (lexical_cast(c->right())+1)), exp->getFactory()), c->left())); else ineqs.insert(mk(c->right(), mk(c->left(), mkTerm (mpz_class (1), exp->getFactory())))); } else if (isOpX(c)) { if (isOpX(c->left())) - ineqs.insert(mk(mkTerm (mpz_class (lexical_cast(c->left())+1), exp->getFactory()), c->right())); + ineqs.insert(mk(mkTerm (mpz_class (string (lexical_cast(c->left())+1)), exp->getFactory()), c->right())); else if(isOpX(c->right())) - ineqs.insert(mk(c->left(), mkTerm (mpz_class (lexical_cast(c->right())-1), exp->getFactory()))); + ineqs.insert(mk(c->left(), mkTerm (mpz_class (string (lexical_cast(c->right())-1)), exp->getFactory()))); else ineqs.insert(mk(c->left(), mk(c->right(), mkTerm (mpz_class (1), exp->getFactory())))); } diff --git a/include/deep/NonlinCHCsolver.hpp b/include/deep/NonlinCHCsolver.hpp index 80b20464a..de1a0afc1 100644 --- a/include/deep/NonlinCHCsolver.hpp +++ b/include/deep/NonlinCHCsolver.hpp @@ -52,17 +52,20 @@ namespace ufo if (isNonlinear(cond)) { newCond = simpleQE(cond, vars, true, true); if (!u.implies(cond, newCond)) { - newCond = mk(m_efac); + return mk(m_efac); } } else { AeValSolver ae(mk(m_efac), cond, vars); // exists quantified . formula if (ae.solve()) { newCond = ae.getValidSubset(); } else { - newCond = mk(m_efac); + return mk(m_efac); } } - + if (!emptyIntersect(newCond, vars)) // sanity check + { + return mk(m_efac); + } return simplifyBool(newCond); } @@ -133,8 +136,10 @@ namespace ufo if (find(ev1.begin(), ev1.end(), *it) == ev1.end()) ++it; else it = ev3.erase(it); } + e = quantifierElimination(e, ev3); if (backward) e = mkNeg(e); + e = simplifyBool(simplifyArithm(e, false, true)); // ExprSet cnjs; // getConj(e, cnjs); @@ -580,12 +585,15 @@ namespace ufo outs () << ") Bool\n "; ExprSet lms = a.second; + Expr res = simplifyBool(simplifyArithm(conjoin(lms, m_efac))); if (simplify) { + lms.clear(); + getConj(res, lms); shrinkCnjs(lms); u.removeRedundantConjuncts(lms); + res = conjoin(lms, m_efac); } - Expr res = simplifyArithm(conjoin(lms, m_efac)); u.print(res); outs () << ")\n"; } From 3279d35dbc6cc931b9371c26ac93e59ae04b3fdd Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Tue, 30 Jun 2020 21:51:21 -0400 Subject: [PATCH 145/236] extended the input language; improved the preprocessing and handling of arrays --- bench_horn/array_altern_copy.smt2 | 19 + bench_horn/array_altern_copy_positive.smt2 | 26 + bench_horn/array_altern_shift.smt2 | 16 + bench_horn/array_altern_swap.smt2 | 17 + include/ae/AeValSolver.hpp | 21 +- include/ae/ExprSimpl.hpp | 382 ++++------ include/ae/SMTUtils.hpp | 20 +- include/deep/Horn.hpp | 816 --------------------- include/deep/HornNonlin.hpp | 138 ++-- include/deep/NonlinCHCsolver.hpp | 110 ++- include/ufo/Expr.hpp | 3 +- include/ufo/Smt/Z3n.hpp | 19 - include/ufo/Smt/ZExprConverter.hpp | 40 +- 13 files changed, 430 insertions(+), 1197 deletions(-) create mode 100644 bench_horn/array_altern_copy.smt2 create mode 100644 bench_horn/array_altern_copy_positive.smt2 create mode 100644 bench_horn/array_altern_shift.smt2 create mode 100644 bench_horn/array_altern_swap.smt2 delete mode 100755 include/deep/Horn.hpp diff --git a/bench_horn/array_altern_copy.smt2 b/bench_horn/array_altern_copy.smt2 new file mode 100644 index 000000000..e4b4b025c --- /dev/null +++ b/bench_horn/array_altern_copy.smt2 @@ -0,0 +1,19 @@ +(declare-var a (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var b1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var n Int) + +(declare-rel inv ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv a b 0 n)) + +(rule (=> (and (inv a b i n) (< i n) (= (store b i (select a i)) b1) (= i1 (+ i 1))) (inv a b1 i1 n))) + +(rule (=> (and (inv a b i n) (not (< i n)) + (not (forall ((j1 Int)) (=> (and (>= j1 0) (< j1 i)) ; TBD: support full ranges + (exists ((i2 Int)) (= (select b j1) (select a i2))))))) fail)) + +(query fail) diff --git a/bench_horn/array_altern_copy_positive.smt2 b/bench_horn/array_altern_copy_positive.smt2 new file mode 100644 index 000000000..c73a60b98 --- /dev/null +++ b/bench_horn/array_altern_copy_positive.smt2 @@ -0,0 +1,26 @@ +(declare-var a (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var b1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var j Int) +(declare-var j1 Int) +(declare-var n Int) + +(declare-rel inv ((Array Int Int) (Array Int Int) Int Int Int)) +(declare-rel fail ()) + +(rule (inv a b 0 0 n)) + +(rule (=> (and (inv a b i j n) + (< i n) + (= i1 (+ i 1)) + (= b1 (ite (>= (select a i) 0) (store b j (select a i)) b)) + (= j1 (ite (>= (select a i) 0) (+ j 1) j))) + (inv a b1 i1 j1 n))) + +(rule (=> (and (inv a b i j n) (not (< i n)) + (not (forall ((j1 Int)) (=> (and (>= j1 0) (< j1 j)) + (exists ((i2 Int)) (= (select b j1) (select a i2))))))) fail)) + +(query fail) diff --git a/bench_horn/array_altern_shift.smt2 b/bench_horn/array_altern_shift.smt2 new file mode 100644 index 000000000..bc9243b90 --- /dev/null +++ b/bench_horn/array_altern_shift.smt2 @@ -0,0 +1,16 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var j Int) + +(declare-rel inv ((Array Int Int) Int)) +(declare-rel fail ()) + +(rule (=> (and (forall ((j Int)) (> (select a j) 0)) (> i 0)) (inv a i))) + +(rule (=> (and (inv a i) + (forall ((j Int)) (= (select a1 j) (+ i (select a j))))) (inv a1 i))) + +(rule (=> (and (inv a i) (not (> (select a j) 0))) fail)) + +(query fail) diff --git a/bench_horn/array_altern_swap.smt2 b/bench_horn/array_altern_swap.smt2 new file mode 100644 index 000000000..21d8a9b30 --- /dev/null +++ b/bench_horn/array_altern_swap.smt2 @@ -0,0 +1,17 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var b (Array Int Int)) +(declare-var i Int) +(declare-var j Int) + +(declare-rel inv ((Array Int Int) (Array Int Int))) +(declare-rel fail ()) + +(rule (inv a a)) + +(rule (=> (and (inv a b) (= a1 (store (store a j (select a i)) i (select a j)))) (inv a1 b))) + +(rule (=> (and (inv a b) + (not (forall ((j2 Int)) (exists ((i2 Int)) (= (select a i2) (select b j2)))))) fail)) + +(query fail) diff --git a/include/ae/AeValSolver.hpp b/include/ae/AeValSolver.hpp index 2583a6cf9..f1c36ac56 100644 --- a/include/ae/AeValSolver.hpp +++ b/include/ae/AeValSolver.hpp @@ -470,12 +470,13 @@ namespace ufo /** * Return "e + c" */ - Expr getPlusConst(Expr e, bool isInt, int c) + Expr getPlusConst(Expr e, bool isInt, cpp_int c) { if (isOpX(e) && isInt) - return mkTerm (mpz_class (c + boost::lexical_cast (e)), efac); + return mkTerm (mpz_class (string (c + boost::lexical_cast (e))), efac); - Expr ce = isInt ? mkTerm (mpz_class (c), efac) : mkTerm (mpq_class (c), efac); + Expr ce = isInt ? mkTerm (mpz_class (string(c)), efac) : + mkTerm (mpq_class (string(c)), efac); return mk(e, ce); } @@ -485,7 +486,7 @@ namespace ufo Expr getAssignmentForVar(Expr var, Expr exp) { if (debug) outs () << "getAssignmentForVar " << *var << " in " << *exp << "\n"; - + bool isInt = bind::isIntConst(var); if (isOp(exp)) @@ -710,13 +711,13 @@ namespace ufo inline void aeSolveAndSkolemize(Expr s, Expr t) { ExprSet s_vars; - ExprSet t_vars; - + ExprSet t_quantified; + filter (s, bind::IsConst (), inserter (s_vars, s_vars.begin())); - filter (t, bind::IsConst (), inserter (t_vars, t_vars.begin())); - - ExprSet t_quantified = minusSets(t_vars, s_vars); - + filter (t, bind::IsConst (), inserter (t_quantified, t_quantified.begin())); + + minusSets(t_quantified, s_vars); + outs() << "S: " << *s << "\n"; outs() << "T: \\exists "; for (auto &a: t_quantified) outs() << *a << ", "; diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index 4506983bd..96f62f708 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -327,6 +327,9 @@ namespace ufo if (lexical_cast(tmp->left()) > 0) return mk(tmp, additiveInverse(e->right())); + if (bind::isIntConst(tmp) || bind::isRealConst(tmp)) + return mk(tmp, additiveInverse(e->right())); + return e; } @@ -336,76 +339,45 @@ namespace ufo template static Expr rewriteHelperM(Expr e, Expr var){ Expr l = e->left(); Expr r = e->right(); - ExprVector lhs; // expressions containing var - ExprVector rhs; // the rest of e + ExprVector orig_lhs, orig_rhs, lhs, rhs; - // first, parse l; + // parse - if (isOpX(l)){ - for (unsigned i = 0; i < l->arity (); i++){ - Expr a = l->arg(i); - if (isConstOrItsAdditiveInverse(a, var)){ - lhs.push_back(a); - } else { - rhs.push_back(additiveInverse(a)); - } - } - } else if (isOpX(l)){ - if (isConstOrItsAdditiveInverse(l->left(), var)){ - lhs.push_back(l->left()); - } else { - rhs.push_back(additiveInverse(l->left())); - } - if (isConstOrItsAdditiveInverse(l->right(), var)){ - lhs.push_back(additiveInverse(l->right())); - } else { - rhs.push_back(l); - } - } else { - if (isConstOrItsAdditiveInverse(l, var)){ - lhs.push_back(l); - } else if (lexical_cast(l) != "0"){ - rhs.push_back(additiveInverse(l)); - } + getAddTerm(l, orig_lhs); + getAddTerm(r, orig_rhs); + for (auto & a : orig_lhs) + { + if (contains (a, var)) lhs.push_back(a); + else rhs.push_back(additiveInverse(a)); + } + for (auto & a : orig_rhs) + { + if (contains (a, var)) lhs.push_back(additiveInverse(a)); + else rhs.push_back(a); } - // second, parse r; + // combine results - if (isOpX(r)){ - for (unsigned i = 0; i < r->arity (); i++){ - Expr a = r->arg(i); - if (isConstOrItsAdditiveInverse(a, var)){ - lhs.push_back(additiveInverse(a)); - } else { - rhs.push_back(a); - } - } - } else if (isOpX(r)){ - if (isConstOrItsAdditiveInverse(r->left(), var)){ - lhs.push_back(additiveInverse(r->left())); - } else { - rhs.push_back(r->left()); - } - if (isConstOrItsAdditiveInverse(r->right(), var)){ - lhs.push_back(r->right()); - } else { - rhs.push_back(r->right()); - } - } else { - if (isConstOrItsAdditiveInverse(r, var)){ - lhs.push_back(additiveInverse(r)); - } else if (lexical_cast(r) != "0"){ - rhs.push_back(r); + cpp_int coef = 0; + for (auto it = lhs.begin(); it != lhs.end(); ) + { + bool found = false; + if (*it == var) { coef++; found = true; } + if (isOpX(*it) && (*it)->left() == var) { coef--; found = true; } + if (isOpX(*it) && 2 == (*it)->arity() && isOpX((*it)->left()) && (*it)->right() == var) { + coef += lexical_cast((*it)->left()); + found = true; } - } - // third, combine results; + if (found) { it = lhs.erase(it); continue; } + else ++it; + } - int coef = 0; - for (auto &a : lhs) + if (!lhs.empty()) { - if (a == var) coef++; - if (var == additiveInverse(a)) coef--; +// errs() << "WARNING: COULD NOT NORMALIZE w.r.t. " << *var << ": " +// << *conjoin (lhs, e->getFactory()) << "\n"; + return e; } r = mkplus(rhs, e->getFactory()); @@ -415,7 +387,7 @@ namespace ufo } else if (coef == 1){ l = var; } else { - l = mk(mkTerm (mpz_class (coef), e->getFactory()), var); + l = mk(mkTerm (mpz_class (string(coef)), e->getFactory()), var); } return mk(l,r); @@ -609,56 +581,28 @@ namespace ufo return e; } - /** - * - */ - inline static Expr eqDiffMover(Expr e){ - if(isOpX(e)){ - if (isOpX(e->left()) && e->left()->arity() == 2 && lexical_cast(e->right()) == "0"){ - return mk(e->left()->left(), e->left()->right()); - } - } - return e; - } - - /** - * Search for an equality - */ - inline static bool equalitySearch(ExprSet& expClauses, Expr var){ - for (auto &e: expClauses){ - if (isOpX(e)){ - Expr l = e->left(); - Expr r = e->right(); - if (l == var || r == var){ - ExprSet singleton; - singleton.insert(e); - expClauses = singleton; - return true; - } - } - } - return false; - } + static Expr simplifyArithm (Expr exp, bool keepRedundandDisj, bool keepRedundandConj); /** - * Simplifier Wrapper + * Move var v to LHS of each expression and simplify */ - inline static Expr ineqSimplifier(Expr v, Expr exp){ + inline static Expr ineqSimplifier(Expr v, Expr exp, bool merge = false){ ExprSet substsMap; if (isOpX(exp)){ - for (ENode::args_iterator it = exp->args_begin(), end = exp->args_end(); - it != end; ++it){ - Expr cl = *it; - cl = exprMover(*it, v); - cl = ineqMover(cl, v); - cl = ineqReverter (cl); - substsMap.insert(cl); - } + ExprSet cnjs; + getConj(exp, cnjs); + for (Expr cl : cnjs) + substsMap.insert(ineqSimplifier(v, cl)); - ineqMerger(substsMap); - equalitySearch(substsMap, v); + if (merge) ineqMerger(substsMap); return conjoin(substsMap, v->getFactory()); } + else if (isOp(exp)) + { + exp = ineqMover(exp, v); + exp = simplifyArithm(exp, false, false); + exp = ineqReverter(exp); + } return exp; } @@ -796,9 +740,14 @@ namespace ufo { return mk(fla->left(), mkNeg(fla->right())); } - else if (isOpX(fla)) + else if (isOpX(fla) || isOpX(fla)) { - return mkNeg(fla->last()); + ExprVector args; + for (int i = 0; i < fla->arity() - 1; i++) + args.push_back(fla->arg(i)); + args.push_back(mkNeg(fla->last())); + return isOpX(fla) ? + mknary(args) : mknary(args); } return mk(fla); } @@ -857,7 +806,25 @@ namespace ufo } return e; } - + + inline static Expr simplifyMod (Expr e) + { + if (isOpX(e) && isOpX(e->right())) + { + cpp_int coef = 1; + cpp_int divider = lexical_cast(e->right()); + ExprVector ops; + getMultOps (e->left(), ops); + + for (auto a : ops) + if (isOpX(a)) + coef *= lexical_cast(a); + + if (coef % divider == 0) + return mkTerm (mpz_class (0), e->getFactory()); + } + return e; + } inline static Expr simplifyIte (Expr exp) // simple version, on the syntactic level { @@ -1101,6 +1068,11 @@ namespace ufo return simplifyMult(exp); } + if (isOpX(exp)) + { + return simplifyMod(exp); + } + if (isOpX(exp)) { return additiveInverse(exp->left()); @@ -1291,14 +1263,6 @@ namespace ufo continue; } - if (isOpX(*it)) - { - Expr negged = mkNeg((*it)->left()); - it = cnjs.erase(it); - cnjs.insert(negged); - continue; - } - Expr a = replaceAll(*it, facts, repls); if (isOpX(a)) @@ -1364,27 +1328,6 @@ namespace ufo toInsert.insert(c); } } - else if (isOpX(c)) - { - if (bind::isIntConst(c->left()) && - find(hardVars.begin(), hardVars.end(), c->left()) == hardVars.end()) - { - toRestart = true; - facts.push_back(c->left()); - repls.push_back(c->right()); - } - else if (bind::isIntConst(c->right()) && - find(hardVars.begin(), hardVars.end(), c->right()) == hardVars.end()) - { - toRestart = true; - facts.push_back(c->right()); - repls.push_back(c->left()); - } - else - { - toInsert.insert(c); - } - } else { toInsert.insert(c); @@ -1410,17 +1353,13 @@ namespace ufo simplBoolReplCnjHlp(hardVars, cnjs, facts, repls); } - inline static ExprSet minusSets(ExprSet& v1, ExprSet& v2){ - ExprSet v3; - bool res; - for (auto &var1: v1){ - res = true; - for (auto &var2: v2){ - if (var1 == var2) { res = false; break;} - } - if (res) v3.insert(var1); + // rewrites v1 to contain v1 \ v2 + template static void minusSets(ExprSet& v1, Range& v2){ + for (auto it = v1.begin(); it != v1.end(); ){ + if (find(v2.begin(), v2.end(), *it) != v2.end()) + it = v1.erase(it); + else ++it; } - return v3; } inline static bool isNumericConst(Expr e) @@ -1439,6 +1378,8 @@ namespace ufo return -1; } + static Expr rewriteMultAdd (Expr exp); + inline static void getAddTerm (Expr a, ExprVector &terms) // implementation (mutually recursive) { if (isOpX(a)) @@ -1466,6 +1407,12 @@ namespace ufo for (auto & t : tmp) terms.push_back(additiveInverse(t)); } + else if (isOpX(a)) + { + Expr tmp = rewriteMultAdd(a); + if (tmp == a) terms.push_back(a); + else getAddTerm(tmp, terms); + } else { terms.push_back(a); @@ -1478,7 +1425,7 @@ namespace ufo Expr operator() (Expr exp) { - if (isOpX(exp)) + if (isOpX(exp) && exp->arity() == 2) { Expr lhs = exp->left(); Expr rhs = exp->right(); @@ -1545,7 +1492,7 @@ namespace ufo for (auto & c : extraVars) if (c.second == b) { found = true; break; } if (! found) { - errs () << "WARNING. Wrong symbol at " << *t << ".\n"; +// errs () << "WARNING. Wrong symbol at " << *t << ".\n"; return mk(t->getFactory()); } } @@ -2242,7 +2189,7 @@ namespace ufo VisitAction operator() (Expr exp) { - if (isOp(exp)) + if (isOp(exp) || isOp(exp)) { for (int i = 0; i < exp->arity() - 1; i++) { @@ -2259,95 +2206,88 @@ namespace ufo dagVisit (qe, exp); } - template static void update_min_value(ExprMap& m, Expr key, Expr value, Range& quantified, ExprSet& newCnjs) + inline static void getQuantifiedFormulas (Expr a, ExprSet &flas) { - // just heuristic - if (m[key] == NULL) - { - m[key] = value; - } - else if (emptyIntersect(value, quantified) || treeSize(value) < treeSize(m[key])) - { - newCnjs.insert(mk(key, m[key])); - m[key] = value; - } - else newCnjs.insert(mk(key, value)); + if (isOpX(a) || isOpX(a)) + flas.insert(a); + else // TODO: remove/generalize later + for (unsigned i = 0; i < a->arity(); i++) + getQuantifiedFormulas(a->arg(i), flas); } - template static Expr simpleQE(Expr exp, Range& quantified, bool removeUsed = true, bool strict = false) + // rewrite just equalities + template static Expr simpleQE(Expr exp, Range& quantified) { - // rewrite just equalities - ExprSet cnjs; - ExprSet newCnjs; - ExprMap eqs; - getConj(exp, cnjs); - for (auto & a : cnjs) + ExprFactory& efac = exp->getFactory(); + ExprSet cnjsSet; + getConj(exp, cnjsSet); + ExprVector cnjs; + cnjs.insert(cnjs.end(), cnjsSet.begin(), cnjsSet.end()); + for (auto & var : quantified) { - bool eq = false; - if (isOpX(a)) + ExprSet eqs; + for (unsigned it = 0; it < cnjs.size(); ) { - for (auto & b : quantified) - { - if (a->left() == b && (!strict || emptyIntersect(a->right(), quantified))) - { - eq = true; - update_min_value(eqs, b, a->right(), quantified, newCnjs); - break; - } - else if (a->right() == b && (!strict || emptyIntersect(a->left(), quantified))) - { - eq = true; - update_min_value(eqs, b, a->left(), quantified, newCnjs); - break; - } - } - } - if (!eq) newCnjs.insert(a); - } + Expr cnj = cnjs[it]; + if (!isOpX(cnj) || !contains(cnj, var)) + { it++; continue;} - Expr qed = conjoin(newCnjs, exp->getFactory()); - ExprSet used; - while (true) - { - bool toBreak = true; - for (auto & a : eqs) - { - if (a.first == NULL || a.second == NULL) continue; - if (!emptyIntersect(a.first, qed)) + Expr normalized = cnj; + if (isNumeric(var) && isNumeric(cnj->left())) { - qed = replaceAll(qed, a.first, a.second); - if (removeUsed) used.insert(a.first); - toBreak = false; + normalized = simplifyArithm( + mk(mk(cnj->arg(0), additiveInverse(cnj->arg(1))), + mkTerm (mpz_class (0), efac))); + normalized = ineqSimplifier(var, normalized); } - for (auto & b : eqs) + + // after the normalization, var can be eliminated + if (!isOpX(normalized) || !contains(normalized, var)) + { it++; continue;} + + if (!contains (normalized->right(), var)) { - if (a == b) continue; - if (!emptyIntersect(a.first, b.second)) + if (var == normalized->left()) + { + eqs.insert(normalized->right()); + cnjs.erase (cnjs.begin()+it); + continue; + } + else if (isOpX(normalized->left()) && isOpX(normalized->left()->left())) { - b.second = replaceAll(b.second, a.first, a.second); + cnjs.push_back(mk(mk(normalized->right(), normalized->left()->left()), + mkTerm (mpz_class (0), efac))); } } + +// errs() << "WARNING: COULD NOT NORMALIZE w.r.t. " << *var << ": " +// << *normalized << " [[ " << *cnj << " ]]\n"; + + cnjs[it] = normalized; + it++; } - if (toBreak) break; - } - newCnjs.clear(); - getConj(qed, newCnjs); - if (strict) - { - for (auto it = newCnjs.begin(); it != newCnjs.end(); ) - if (emptyIntersect(*it, quantified)) ++it; - else it = newCnjs.erase(it); - return conjoin(newCnjs, exp->getFactory()); - } + if (eqs.empty()) continue; + + Expr repl = *eqs.begin(); + int min_sz = INT_MAX; + + // first, search for a non-constant replacement, if possible + for (auto cnj = std::next(eqs.begin()); cnj != eqs.end(); cnj++) + if (treeSize(*cnj) < min_sz && !isOpX(*cnj)) + { repl = *cnj; min_sz = treeSize(*cnj); } + + // second, make sure that all replacements are equal + for (auto cnj = eqs.begin(); cnj != eqs.end(); cnj++) + if (*cnj != repl) cnjs.push_back(mk(repl, *cnj)); + + // finally, replace the remaining cnjs + for (unsigned it = 0; it < cnjs.size(); it++) + cnjs[it] = replaceAll(cnjs[it], var, repl); - for (auto & a : eqs) - { - if (find(used.begin(), used.end(), a.first) == used.end()) - newCnjs.insert(mk(a.first, a.second)); } - qed = conjoin(newCnjs, exp->getFactory()); - return qed; + + return (conjoin(cnjs, exp->getFactory())); } struct QESubexpr diff --git a/include/ae/SMTUtils.hpp b/include/ae/SMTUtils.hpp index 56432ba5d..7145bc7ce 100644 --- a/include/ae/SMTUtils.hpp +++ b/include/ae/SMTUtils.hpp @@ -68,28 +68,12 @@ namespace ufo for (auto & c : cnjs) { filter (c, bind::IsConst (), inserter (allVars, allVars.begin())); - if (isOpX(c)) - { - ExprVector varz; - for (int i = 0; i < c->arity() - 1; i++) - { - varz.push_back(bind::fapp(c->arg(i))); - } - smt.assertForallExpr(varz, c->last()); - } - else if (isOpX(c)) - { - smt.assertExpr(c->last()); - } - else - { - if (containsOp(c)) return logic::indeterminate; - smt.assertExpr(c); - } + smt.assertExpr(c); } boost::tribool res = smt.solve (); return res; } + /** * SMT-check */ diff --git a/include/deep/Horn.hpp b/include/deep/Horn.hpp deleted file mode 100755 index e32ffd72d..000000000 --- a/include/deep/Horn.hpp +++ /dev/null @@ -1,816 +0,0 @@ -#ifndef HORN__HPP__ -#define HORN__HPP__ - -#include "ae/AeValSolver.hpp" - -using namespace std; -using namespace boost; - -namespace ufo -{ - inline bool rewriteHelperConsts(Expr& body, Expr v1, Expr v2) - { - if (isOpX(v1)) - { - body = mk(body, mk(v1, v2)); - return true; - } - else if (isOpX(v1)) - { - body = mk(body, v2); - return true; - } - else if (isOpX(v1)) - { - body = mk(body, mk(v2)); - return true; - } - return false; - } - - struct HornRuleExt - { - ExprVector srcVars; - ExprVector dstVars; - ExprVector locVars; - - Expr body; - Expr head; - - Expr srcRelation; - Expr dstRelation; - - bool isFact; - bool isQuery; - bool isInductive; - - void assignVarsAndRewrite (ExprVector& _srcVars, ExprVector& invVarsSrc, - ExprVector& _dstVars, ExprVector& invVarsDst) - { - for (int i = 0; i < _srcVars.size(); i++) - { - srcVars.push_back(invVarsSrc[i]); - body = mk(body, mk(_srcVars[i], srcVars[i])); - } - - for (int i = 0; i < _dstVars.size(); i++) - { - // primed copy of var: - Expr new_name = mkTerm (lexical_cast(invVarsDst[i]) + "'", body->getFactory()); - Expr var = cloneVar(invVarsDst[i], new_name); - dstVars.push_back(var); - body = mk(body, mk(_dstVars[i], dstVars[i])); - } - } - }; - - class CHCs - { - private: - set indeces; - string varname = "_FH_"; - - public: - - ExprFactory &m_efac; - EZ3 &m_z3; - - Expr failDecl; - vector chcs; - vector wtoCHCs; - ExprVector wtoDecls; - ExprSet decls; - map invVars; - map> outgs; - vector> prefixes; // for cycles - vector> cycles; - bool hasArrays = false; - - CHCs(ExprFactory &efac, EZ3 &z3) : m_efac(efac), m_z3(z3) {}; - - void preprocess (Expr term, ExprVector& srcVars, Expr &srcRelation, ExprSet& lin) - { - if (isOpX(term)) - { - for (auto it = term->args_begin(), end = term->args_end(); it != end; ++it) - { - preprocess(*it, srcVars, srcRelation, lin); - } - } - else - { - if (bind::isBoolConst(term)) - { - lin.insert(term); - } - if (isOpX(term)) - { - if (term->arity() > 0) - { - if (isOpX(term->arg(0))) - { - Expr rel = term->arg(0); - if (term->arg(0)->arity() > 2) - { - addDecl(rel); - if (srcRelation != NULL) - { - outs() << "Nonlinear CHCs are currently unsupported:\n "; - outs () << *srcRelation << " /\\ " << *rel->arg(0) << "\n"; - exit(0); - } - srcRelation = rel->arg(0); - for (auto it = term->args_begin()+1, end = term->args_end(); it != end; ++it) - srcVars.push_back(*it); - } - } - } - } - else - { - lin.insert(term); - } - } - } - - void addDecl (Expr a) - { - if (a->arity() == 2) - { - addFailDecl(a->arg(0)); - } - else if (invVars[a->arg(0)].size() == 0) - { - decls.insert(a); - for (int i = 1; i < a->arity()-1; i++) - { - Expr new_name = mkTerm (varname + to_string(i - 1), m_efac); - Expr var; - if (isOpX (a->arg(i))) - var = bind::intConst(new_name); - else if (isOpX (a->arg(i))) - var = bind::realConst(new_name); - else if (isOpX (a->arg(i))) - var = bind::boolConst(new_name); - else if (isOpX (a->arg(i))) // GF: currently support only arrays over Ints - { - var = bind::mkConst(new_name, mk - (mk (m_efac), mk (m_efac))); - hasArrays = true; - } - invVars[a->arg(0)].push_back(var); - } - } - } - - void parse(string smt) - { - std::unique_ptr > m_fp; - m_fp.reset (new ZFixedPoint (m_z3)); - ZFixedPoint &fp = *m_fp; - fp.loadFPfromFile(smt); - - for (auto &r: fp.m_rules) - { - bool toReplace = false; - chcs.push_back(HornRuleExt()); - HornRuleExt& hr = chcs.back(); - Expr rule = r; - while (isOpX(r)) - { - toReplace = true; - for (int i = 0; i < r->arity() - 1; i++) - { - hr.locVars.push_back(bind::fapp(r->arg(i))); - } - r = r->last(); - } - - if (isOpX(r) && isOpX(r->first())) - { - toReplace = true; - for (int i = 0; i < r->first()->arity() - 1; i++) - hr.locVars.push_back(bind::fapp(r->first()->arg(i))); - - rule = mk(r->first()->last(), mk(m_efac)); - r = rule; - } - - if (toReplace) - { - if (isOpX(r)) - { - rule = mk(r->first(), mk(m_efac)); - } - else if (isOpX(r) && r->arity() == 2 && isOpX(r->left()) && hasUninterp(r->left())) - { - rule = mk(r->left()->left(), r->right()); - } - else if (isOpX(r) && r->arity() == 2 && isOpX(r->right()) && hasUninterp(r->right())) - { - rule = mk(r->right()->left(), r->left()); - } - else - { - rule = r; - } - - ExprVector actual_vars; - expr::filter (rule, bind::IsVar(), std::inserter (actual_vars, actual_vars.begin ())); -// if (actual_vars.size() == 0) -// { -// chcs.pop_back(); -// continue; -// } - - assert(actual_vars.size() <= hr.locVars.size()); - - ExprVector repl_vars; - for (int i = 0; i < actual_vars.size(); i++) - { - string a1 = lexical_cast(bind::name(actual_vars[i])); - int ind = hr.locVars.size() - 1 - atoi(a1.substr(1).c_str()); - repl_vars.push_back(hr.locVars[ind]); - } - rule = replaceAll(rule, actual_vars, repl_vars); - } - - if (!isOpX(rule)) rule = mk(mk(m_efac), rule); - - Expr body = rule->arg(0); - Expr head = rule->arg(1); - - if (isOpX(head)) - { - addDecl(head->arg(0)); - hr.head = head->arg(0); - hr.dstRelation = head->arg(0)->arg(0); - } - else - { - if (!isOpX(head)) body = mk(body, mk(head)); - addFailDecl(mk(m_efac)); - hr.head = mk(m_efac); - hr.dstRelation = mk(m_efac); - } - - ExprVector origSrcSymbs; - ExprSet lin; - preprocess(body, origSrcSymbs, hr.srcRelation, lin); - if (hr.srcRelation == NULL) - { - if (hasUninterp(body)) - { - outs () << "Unsupported format\n"; - outs () << " " << *body << "\n"; - exit (0); - } - hr.srcRelation = mk(m_efac); - } - - hr.isFact = isOpX(hr.srcRelation); - hr.isQuery = (hr.dstRelation == failDecl); - hr.isInductive = (hr.srcRelation == hr.dstRelation); - ExprVector allOrigSymbs = origSrcSymbs; - ExprVector origDstSymbs; - if (!hr.isQuery) - { - for (auto it = head->args_begin()+1, end = head->args_end(); it != end; ++it) - origDstSymbs.push_back(*it); - } - allOrigSymbs.insert(allOrigSymbs.end(), origDstSymbs.begin(), origDstSymbs.end()); - simplBoolReplCnj(allOrigSymbs, lin); - hr.body = conjoin(lin, m_efac); - hr.assignVarsAndRewrite (origSrcSymbs, invVars[hr.srcRelation], - origDstSymbs, invVars[hr.dstRelation]); - hr.body = simpleQE(simpleQE(hr.body, hr.locVars), hr.dstVars, false); - } - - // remove useless rules - if (failShrink(failDecl)) - for (auto rit = indeces.rbegin(); rit != indeces.rend(); ++rit) - chcs.erase(chcs.begin() + *rit); - - indeces.clear(); - chcSliceBwd(failDecl); - vector tmpChcs; - for (auto i : indeces) tmpChcs.push_back(chcs[i]); - chcs = tmpChcs; - for (int i = 0; i < chcs.size(); i++) - outgs[chcs[i].srcRelation].push_back(i); - - // sort rules - wtoSort(); - } - - bool failShrink (Expr dstRel) - { - if (hasArrays) return false; // current limitations - - for (int i = 0; i < chcs.size(); i++) - { - if (chcs[i].dstRelation != dstRel) continue; - - ExprSet quantified; - quantified.insert(chcs[i].dstVars.begin(), chcs[i].dstVars.end()); - quantified.insert(chcs[i].locVars.begin(), chcs[i].locVars.end()); - Expr tmp = chcs[i].body; - - // current limitations - if (findNonlin(tmp) || containsOp(tmp) || containsOp(tmp)) return false; - - if (quantified.size() > 0) - { - AeValSolver ae(mk(m_efac), tmp, quantified); - ae.solve(); - tmp = ae.getValidSubset(); - } - - if (isOpX(tmp)) - { - failShrink(chcs[i].srcRelation); - indeces.insert(i); - return true; - } - } - for (int i = 0; i < chcs.size(); i++) - { - if (chcs[i].dstRelation == dstRel) - { - chcs[i].isQuery = true; - chcs[i].dstRelation = failDecl; - } - } - return true; - } - - void chcSliceBwd (Expr dstRel) - { - for (int i = 0; i < chcs.size(); i++) - { - if (chcs[i].dstRelation == dstRel) - { - bool alreadyIn = find(indeces.begin(), indeces.end(), i) != indeces.end(); - indeces.insert(i); - if (!alreadyIn) chcSliceBwd(chcs[i].srcRelation); - } - } - chcSliceFwd (dstRel); - } - - void chcSliceFwd (Expr srcRel) - { - for (int i = 0; i < chcs.size(); i++) - { - if (chcs[i].srcRelation == srcRel) - { - bool alreadyIn = find(indeces.begin(), indeces.end(), i) != indeces.end(); - indeces.insert(i); - if (!alreadyIn) chcSliceFwd(chcs[i].dstRelation); - } - } - } - - bool hasCycles() - { - if (cycles.size() > 0) return true; - - for (int i = 0; i < chcs.size(); i++) - { - if (chcs[i].isFact) findCycles(i, vector()); - } - - assert (cycles.size() == prefixes.size()); -// for (auto & c : cycles) -// { -// outs () << " cycle: "; -// for (auto & chcNum : c) outs () << *chcs[chcNum].srcRelation << " -> "; -// outs () << " ["; -// for (auto & chcNum : c) outs () << chcNum << " -> "; -// outs () << "]\n"; -// } - return (cycles.size() > 0); - } - - void findCycles(int chcNum, vector vec) - { - Expr srcRel = chcs[chcNum].srcRelation; - Expr dstRel = chcs[chcNum].dstRelation; - bool res = false; - for (int i = 0; i < vec.size(); i++) - { - auto c = vec[i]; - bool newCycle = (chcs[c].srcRelation == srcRel); - // TODO: some cycles can be redundant - if (newCycle) - { - cycles.push_back(vector()); - prefixes.push_back(vector()); - for (int j = 0; j < i; j++) prefixes.back().push_back(vec[j]); - res = true; - } - if (res) - { - cycles.back().push_back(c); - } - } - - if (! res) - { - vec.push_back(chcNum); - - for (auto & i : outgs[dstRel]) - { - if (chcs[i].dstRelation == failDecl) continue; - bool newRel = true; - for (auto & c : cycles) - { - if (c[0] == i) - { - newRel = false; - break; - } - } - if (newRel) findCycles(i, vec); - } - } - } - - void getCycleForRel(Expr rel, vector& cycle) - { - for (auto & c : cycles) - { - if (chcs[c[0]].srcRelation == rel) - { - cycle.insert(std::end(cycle), c.begin(), c.end()); - return; - } - } - } - - HornRuleExt* getNestedRel (Expr rel) - { - vector cycle; - getCycleForRel(rel, cycle); - if (cycle.size() > 0 && !chcs[cycle[0]].isInductive) - return &chcs[cycle[0]]; - else - return NULL; - } - - HornRuleExt* getFirstRuleOutside (Expr rel) - { - for (auto & c : cycles) - { - if (chcs[c[0]].srcRelation == rel) - { - for (auto & a : outgs[rel]) - { - if (a != c.back()) return &chcs[a]; - } - } - } - return NULL; - } - - void addRule (HornRuleExt* r) - { - chcs.push_back(*r); - Expr srcRel = r->srcRelation; - if (!isOpX(srcRel)) - { - if (invVars[srcRel].size() == 0) - { - addDeclAndVars(srcRel, r->srcVars); - } - } - outgs[srcRel].push_back(chcs.size()-1); - } - - void addDeclAndVars(Expr rel, ExprVector& args) - { - ExprVector types; - for (auto &var: args) { - types.push_back (bind::typeOf (var)); - } - types.push_back (mk (m_efac)); - - decls.insert(bind::fdecl (rel, types)); - for (auto & v : args) - { - invVars[rel].push_back(v); - } - } - - void addFailDecl(Expr decl) - { - if (failDecl == NULL) - { - failDecl = decl; - } - else - { - if (failDecl != decl) - outs () << "Multiple queries are unsupported\n"; - exit(0); - } - } - - Expr getPrecondition (HornRuleExt* hr) - { - ExprSet cnjs; - ExprSet newCnjs; - getConj(hr->body, cnjs); - for (auto &a : cnjs) - { - if (emptyIntersect(a, hr->dstVars) && emptyIntersect(a, hr->locVars)) newCnjs.insert(a); - } - return conjoin(newCnjs, m_efac); - } - - Expr getPrecondition (Expr decl) - { - for (auto &a : chcs) - if (a.srcRelation == decl->left() && a.dstRelation == decl->left()) - return getPrecondition(&a); - return mk(m_efac); - } - - void wtoSort() - { - hasCycles(); - if (wtoCHCs.size() > 0) - { - outs () << "Already sorted\n"; - return; - } - - int r1 = 0; - - for (auto & c : cycles) - { - unique_push_back(chcs[c[0]].srcRelation, wtoDecls); - for (int i = 1; i < c.size(); i++) - { - unique_push_back(chcs[c[i]].dstRelation, wtoDecls); - unique_push_back(&chcs[c[i]], wtoCHCs); - } - } - - int r2 = wtoDecls.size(); - if (r2 == 0) return; - - while (r1 != r2) - { - for (int i = r1; i < r2; i++) - { - auto dcl = wtoDecls[i]; - for (auto &hr : chcs) - { - if (find(wtoCHCs.begin(), wtoCHCs.end(), &hr) != wtoCHCs.end()) continue; - - if (hr.srcRelation == dcl) - { - unique_push_back(hr.dstRelation, wtoDecls); - unique_push_back(&hr, wtoCHCs); - } - else if (hr.dstRelation == dcl) - { - unique_push_back(hr.srcRelation, wtoDecls); - unique_push_back(&hr, wtoCHCs); - } - } - } - r1 = r2; - r2 = wtoDecls.size(); - } - - assert(wtoCHCs.size() == chcs.size()); - - // filter wtoDecls - for (auto it = wtoDecls.begin(); it != wtoDecls.end();) - { - if (*it == failDecl || isOpX(*it)) it = wtoDecls.erase(it); - else ++it; - } - } - - // Transformations - - void mergeIterations(Expr decl, int num) - { - HornRuleExt* hr; - for (auto &a : chcs) if (a.srcRelation == decl->left() && a.dstRelation == decl->left()) hr = &a; - Expr pre = getPrecondition(decl); - ExprSet newCnjs; - newCnjs.insert(mk(pre)); - for (int i = 0; i < hr->srcVars.size(); i++) - { - newCnjs.insert(mk(hr->dstVars[i], hr->srcVars[i])); - } - Expr body2 = conjoin(newCnjs, m_efac); - - // adaping the code from BndExpl.hpp - ExprVector ssa; - ExprVector bindVars1; - ExprVector bindVars2; - ExprVector newLocals; - int bindVar_index = 0; - int locVar_index = 0; - - for (int c = 0; c < num; c++) - { - Expr body = hr->body; - bindVars2.clear(); - if (c != 0) - { - body = replaceAll(mk(body, body2), hr->srcVars, bindVars1); - for (int i = 0; i < hr->locVars.size(); i++) - { - Expr new_name = mkTerm ("__loc_var_" + to_string(locVar_index++), m_efac); - Expr var = cloneVar(hr->locVars[i], new_name); - body = replaceAll(body, hr->locVars[i], var); - newLocals.push_back(var); - } - } - - if (c != num-1) - { - for (int i = 0; i < hr->dstVars.size(); i++) - { - Expr new_name = mkTerm ("__bnd_var_" + to_string(bindVar_index++), m_efac); - bindVars2.push_back(cloneVar(hr->dstVars[i], new_name)); - body = replaceAll(body, hr->dstVars[i], bindVars2[i]); - newLocals.push_back(bindVars2[i]); - } - } - ssa.push_back(body); - bindVars1 = bindVars2; - } - hr->body = conjoin(ssa, m_efac); - hr->locVars.insert(hr->locVars.end(), newLocals.begin(), newLocals.end()); - } - - void slice (Expr decl, ExprSet& vars) - { - HornRuleExt* hr; - for (auto &a : chcs) if (a.srcRelation == decl->left() && a.dstRelation == decl->left()) hr = &a; - ExprSet cnjs; - ExprSet newCnjs; - getConj(hr->body, cnjs); - map deps; - - for (auto &a : cnjs) - { - ExprSet cnj_vars; - ExprSet cnj_vars_cmpl; - expr::filter (a, bind::IsConst(), std::inserter (cnj_vars, cnj_vars.begin ())); - for (auto & a : cnj_vars) - { - int index = getVarIndex(a, hr->srcVars); - if (index >= 0) - { - cnj_vars_cmpl.insert(hr->dstVars[index]); - continue; - } - index = getVarIndex(a, hr->dstVars); - if (index >= 0) - { - cnj_vars_cmpl.insert(hr->srcVars[index]); - } - } - cnj_vars.insert(cnj_vars_cmpl.begin(), cnj_vars_cmpl.end()); - deps[a] = cnj_vars; - } - - while (vars.size() > 0) - { - for (auto vit = vars.begin(); vit != vars.end(); ) - { - for (auto cit = cnjs.begin(); cit != cnjs.end(); ) - { - ExprSet& d = deps[*cit]; - if (find(d.begin(), d.end(), *vit) != d.end()) - { - newCnjs.insert(*cit); - cit = cnjs.erase(cit); - vars.insert(d.begin(), d.end()); - } - else - { - ++cit; - } - } - vit = vars.erase (vit); - } - } - hr->body = conjoin(newCnjs, m_efac); - } - - bool checkWithSpacer() - { - bool success = false; - - // fixed-point object - ZFixedPoint fp (m_z3); - ZParams params (m_z3); - params.set (":engine", "spacer"); - params.set (":xform.slice", false); - params.set (":pdr.utvpi", false); - params.set (":use_heavy_mev", true); - params.set (":xform.inline-linear", false); - params.set (":xform.inline-eager", false); - params.set (":xform.inline-eager", false); - - fp.set (params); - - fp.registerRelation (bind::boolConstDecl(failDecl)); - - for (auto & dcl : decls) fp.registerRelation (dcl); - Expr errApp; - - for (auto & r : chcs) - { - ExprSet allVars; - allVars.insert(r.srcVars.begin(), r.srcVars.end()); - allVars.insert(r.dstVars.begin(), r.dstVars.end()); - allVars.insert(r.locVars.begin(), r.locVars.end()); - - if (!r.isQuery) - { - for (auto & dcl : decls) - { - if (dcl->left() == r.dstRelation) - { - r.head = bind::fapp (dcl, r.dstVars); - break; - } - } - } - else - { - r.head = bind::fapp(bind::boolConstDecl(failDecl)); - errApp = r.head; - } - - Expr pre; - if (!r.isFact) - { - for (auto & dcl : decls) - { - if (dcl->left() == r.srcRelation) - { - pre = bind::fapp (dcl, r.srcVars); - break; - } - } - } - else - { - pre = mk(m_efac); - } - - fp.addRule(allVars, boolop::limp (mk(pre, r.body), r.head)); - } - try { - success = !fp.query(errApp); - } catch (z3::exception &e){ - char str[3000]; - strncpy(str, e.msg(), 300); - outs() << "Z3 ex: " << str << "...\n"; - exit(55); - } - return success; - } - - void print() - { - outs() << "CHCs:\n"; - for (auto &hr: chcs){ - if (hr.isFact) outs() << " INIT:\n"; - if (hr.isInductive) outs() << " TRANSITION RELATION:\n"; - if (hr.isQuery) outs() << " BAD:\n"; - - outs () << " " << * hr.srcRelation; - if (hr.srcVars.size() > 0) - { - outs () << " ("; - for(auto &a: hr.srcVars) outs() << *a << ", "; - outs () << "\b\b)"; - } - outs () << " -> " << * hr.dstRelation; - - if (hr.dstVars.size() > 0) - { - outs () << " ("; - for(auto &a: hr.dstVars) outs() << *a << ", "; - outs () << "\b\b)"; - } - outs() << "\n body: " << * hr.body << "\n"; - } - } - }; -} - - -#endif diff --git a/include/deep/HornNonlin.hpp b/include/deep/HornNonlin.hpp index c9f3a64f5..689137648 100755 --- a/include/deep/HornNonlin.hpp +++ b/include/deep/HornNonlin.hpp @@ -89,7 +89,7 @@ namespace ufo int qCHCNum; // index of the query in chc int total_var_cnt = 0; - CHCs(ExprFactory &efac, EZ3 &z3) : m_efac(efac), m_z3(z3) {}; + CHCs(ExprFactory &efac, EZ3 &z3) : m_efac(efac), m_z3(z3) {}; bool isFapp (Expr e) { @@ -168,87 +168,75 @@ namespace ufo } } - void parse(string smt) + bool normalize (Expr& r, HornRuleExt& hr) { - std::unique_ptr > m_fp; - m_fp.reset (new ZFixedPoint (m_z3)); - ZFixedPoint &fp = *m_fp; - fp.loadFPfromFile(smt); + r = regularizeQF(r); - for (auto &r: fp.m_rules) + // TODO: support more syntactic replacements + while (isOpX(r)) { - bool toReplace = false; - chcs.push_back(HornRuleExt()); - HornRuleExt& hr = chcs.back(); - Expr rule = r; - while (isOpX(r)) + for (int i = 0; i < r->arity() - 1; i++) { - toReplace = true; - for (int i = 0; i < r->arity() - 1; i++) - { - hr.locVars.push_back(bind::fapp(r->arg(i))); - } - r = r->last(); + hr.locVars.push_back(bind::fapp(r->arg(i))); } + r = r->last(); + } - if (isOpX(r) && isOpX(r->first())) - { - toReplace = true; - for (int i = 0; i < r->first()->arity() - 1; i++) - hr.locVars.push_back(bind::fapp(r->first()->arg(i))); + if (isOpX(r) && isOpX(r->first())) + { + for (int i = 0; i < r->first()->arity() - 1; i++) + hr.locVars.push_back(bind::fapp(r->first()->arg(i))); - rule = mk(r->first()->last(), mk(m_efac)); - r = rule; - } + r = mk(r->first()->last(), mk(m_efac)); + } - if (toReplace) + if (isOpX(r)) + { + r = mk(r->first(), mk(m_efac)); + } + else if (isOpX(r) && r->arity() == 2 && isOpX(r->left()) && hasUninterp(r->left())) + { + r = mk(r->left()->left(), r->right()); + } + else if (isOpX(r) && r->arity() == 2 && isOpX(r->right()) && hasUninterp(r->right())) + { + r = mk(r->right()->left(), r->left()); + } + + if (isOpX(r) && !isFapp(r->right()) && !isOpX(r->right())) + { + if (isOpX(r->right())) { - if (isOpX(r)) - { - rule = mk(r->first(), mk(m_efac)); - } - else if (isOpX(r) && r->arity() == 2 && isOpX(r->left()) && hasUninterp(r->left())) - { - rule = mk(r->left()->left(), r->right()); - } - else if (isOpX(r) && r->arity() == 2 && isOpX(r->right()) && hasUninterp(r->right())) - { - rule = mk(r->right()->left(), r->left()); - } - else - { - rule = r; - } + return false; + } + r = mk(mk(r->left(), mk(r->right())), mk(m_efac)); + } - ExprVector actual_vars; - expr::filter (rule, bind::IsVar(), std::inserter (actual_vars, actual_vars.begin ())); + if (!isOpX(r)) r = mk(mk(m_efac), r); - assert(actual_vars.size() <= hr.locVars.size()); + return true; + } - ExprVector repl_vars; - for (int i = 0; i < actual_vars.size(); i++) - { - string a1 = lexical_cast(bind::name(actual_vars[i])); - int ind = hr.locVars.size() - 1 - atoi(a1.substr(1).c_str()); - repl_vars.push_back(hr.locVars[ind]); - } - rule = replaceAll(rule, actual_vars, repl_vars); - } + void parse(string smt) + { + std::unique_ptr > m_fp; + m_fp.reset (new ZFixedPoint (m_z3)); + ZFixedPoint &fp = *m_fp; + fp.loadFPfromFile(smt); - if (isOpX(rule) && !isFapp(rule->right()) && !isOpX(rule->right())) + for (auto &r: fp.m_rules) + { + chcs.push_back(HornRuleExt()); + HornRuleExt& hr = chcs.back(); + + if (!normalize(r, hr)) { - if (isOpX(rule->right())) - { - chcs.pop_back(); - continue; - } - rule = mk(mk(rule->left(), mk(rule->right())), mk(m_efac)); + chcs.pop_back(); + continue; } - if (!isOpX(rule)) rule = mk(mk(m_efac), rule); - - Expr body = rule->arg(0); - Expr head = rule->arg(1); + Expr body = r->arg(0); + Expr head = r->arg(1); vector origSrcSymbs; ExprSet lin; @@ -257,8 +245,8 @@ namespace ufo { if (hasUninterp(body)) { - outs () << "Unsupported format\n"; - outs () << " " << *body << "\n"; + errs () << "Unsupported format\n"; + errs () << " " << *body << "\n"; exit (0); } } @@ -299,10 +287,10 @@ namespace ufo origDstSymbs.push_back(*it); } allOrigSymbs.insert(allOrigSymbs.end(), origDstSymbs.begin(), origDstSymbs.end()); - simplBoolReplCnj(allOrigSymbs, lin); + simplBoolReplCnj(allOrigSymbs, lin); // perhaps, not a very important optimization now; consider removing hr.body = conjoin(lin, m_efac); - vector tmp; + vector tmp; // we may have several applications of the same predicate symbol in the body: for (int i = 0; i < hr.srcRelations.size(); i++) { @@ -328,6 +316,7 @@ namespace ufo } hr.assignVarsAndRewrite (origSrcSymbs, tmp, origDstSymbs, invVars[hr.dstRelation]); + hr.body = simpleQE(hr.body, hr.locVars); // GF: ideally, hr.locVars should be empty after QE, @@ -356,7 +345,7 @@ namespace ufo { if (failDecl != decl) { - outs () << "Multiple queries are not supported\n"; + errs () << "Multiple queries are not supported\n"; exit(0); } } @@ -381,7 +370,11 @@ namespace ufo void print() { outs() << "CHCs:\n"; - for (auto &hr: chcs){ + for (auto &hr: chcs) print(hr); + } + + void print(HornRuleExt& hr) + { if (hr.isFact) outs() << " INIT:\n"; if (hr.isInductive) outs() << " TRANSITION RELATION:\n"; if (hr.isQuery) outs() << " BAD:\n"; @@ -405,7 +398,6 @@ namespace ufo outs () << "\b\b)"; } outs() << "\n body: " << * hr.body << "\n"; - } } }; } diff --git a/include/deep/NonlinCHCsolver.hpp b/include/deep/NonlinCHCsolver.hpp index de1a0afc1..ffb9b424c 100644 --- a/include/deep/NonlinCHCsolver.hpp +++ b/include/deep/NonlinCHCsolver.hpp @@ -48,9 +48,13 @@ namespace ufo Expr quantifierElimination(Expr& cond, ExprSet& vars) { if (vars.size() == 0) return simplifyBool(cond); + + if (containsOp(cond) || containsOp(cond)) + return mk(m_efac); + Expr newCond; if (isNonlinear(cond)) { - newCond = simpleQE(cond, vars, true, true); + newCond = simpleQE(cond, vars); if (!u.implies(cond, newCond)) { return mk(m_efac); } @@ -197,18 +201,24 @@ namespace ufo // for (auto & hr : ruleManager.chcs) { if (hr.isQuery) return; + + Expr body = getQuantifiedCands(true, hr); + ExprSet all; - all.insert(hr.body); + all.insert(body); for (int i = 0; i < hr.srcVars.size(); i++) { Expr rel = hr.srcRelations[i]; - // currently, tries all candidates; but in principle, should try various subsets - for (auto & c : candidates[rel]) - all.insert(replaceAll(c, ruleManager.invVars[rel], hr.srcVars[i])); + if (!hasArrays) // we need "clean" invariants in the case of arrays (to be used as ranges) + { + // currently, tries all candidates; but in principle, should try various subsets + for (auto & c : candidates[rel]) + all.insert(replaceAll(c, ruleManager.invVars[rel], hr.srcVars[i])); + } } if (hr.isInductive) // get candidates of form [ mod = ] - retrieveDeltas (hr.body, hr.srcVars[0], hr.dstVars, candidates[hr.dstRelation]); + retrieveDeltas (body, hr.srcVars[0], hr.dstVars, candidates[hr.dstRelation]); preproGuessing(conjoin(all, m_efac), hr.dstVars, ruleManager.invVars[hr.dstRelation], candidates[hr.dstRelation]); } @@ -216,8 +226,6 @@ namespace ufo void propagateCandidatesBackward(HornRuleExt& hr) { - if (hasArrays) return; // something is wrong, currently - // for (auto & hr : ruleManager.chcs) { if (hr.isFact) return; @@ -244,7 +252,11 @@ namespace ufo if (hr.srcVars.size() == 1) invVars = ruleManager.invVars[rels[0]]; ExprSet cands; - if (hr.isQuery) cands.insert(mk(m_efac)); + if (hr.isQuery) + { + if (getQuantifiedCands(false, hr) == NULL) return; + else cands.insert(mk(m_efac)); + } else cands = candidates[dstRel]; ExprSet mixedCands; @@ -624,6 +636,61 @@ namespace ufo return true; } + Expr getQuantifiedCands(bool fwd, HornRuleExt& hr) + { + ExprSet qVars; + Expr body = hr.body; + if (fwd && hr.isFact) + { + getQuantifiedVars(hr.body, qVars); + if (!qVars.empty()) // immediately try proving properties if already quantified + { + // make sure that we can use it as a property (i.e., variables check) + + ExprSet allVars; + filter (hr.body, bind::IsConst (), inserter (allVars, allVars.begin())); + minusSets(allVars, qVars); + bool allGood = true; + for (auto & v : allVars) + if (find (hr.dstVars.begin(), hr.dstVars.end(), v) == hr.dstVars.end()) + { allGood = false; break; } + if (allGood) + { + ExprSet tmpSet; + getQuantifiedFormulas(hr.body, tmpSet); + for (auto c : tmpSet) + { + // over-approximate the body such that it can pass through the seed mining etc.. + body = replaceAll(body, c, mk(m_efac)); + c = replaceAll(c, hr.dstVars, ruleManager.invVars[hr.dstRelation]); + candidates[hr.dstRelation].insert(c); + } + } + } + } + if (!fwd && hr.isQuery) // similar for the query + { + getQuantifiedVars(hr.body, qVars); + if (!qVars.empty()) + { + ExprSet allVars; + filter (hr.body, bind::IsConst (), inserter (allVars, allVars.begin())); + minusSets(allVars, qVars); + for (int i = 0; i < hr.srcVars.size(); i++) + { + bool toCont = false; + for (auto & v : allVars) + if (find (hr.srcVars[i].begin(), hr.srcVars[i].end(), v) == hr.srcVars[i].end()) + { toCont = true; break; } + if (toCont) continue; + getQuantifiedFormulas(mkNeg(hr.body), candidates[hr.srcRelations[i]]); + } + return NULL; // just as an indicator that everything went well + } + } + return body; + } + bool hasQuantifiedCands(map& cands) { for (auto & a : cands) @@ -718,8 +785,9 @@ namespace ufo hr = &a; getCounters(a.body, counters); - for (auto & c : counters) + for (Expr c : counters) { + c = simplifyArithm(c); ind = getVarIndex(c, a.srcVars[0] /*hack for now*/); if (ind < 0) continue; @@ -745,15 +813,23 @@ namespace ufo { if (!a.isInductive && a.dstRelation == tgt) { - ExprSet cnjs; - getConj(a.body, cnjs); - for (Expr e : cnjs) + int max_sz = INT_MAX; + for (Expr e : candidates[tgt]) { - if (isOpX(e) && (e->left() == a.dstVars[ind] || e->right() == a.dstVars[ind])) + if ((iterGrows && + ((isOpX(e) && iterator == e->left()) || + (isOpX(e) && iterator == e->right()))) || + (!iterGrows && + ((isOpX(e) && iterator == e->right()) || + (isOpX(e) && iterator == e->left())))) { - Expr bound = (e->left() == a.dstVars[ind]) ? e->right() : e->left(); - range = iterGrows ? mk(mk(bound, qVar), mk(qVar, iterator)) : - mk(mk(iterator, qVar), mk(qVar, bound)); + Expr bound = (e->left() == iterator) ? e->right() : e->left(); + if (treeSize(bound) < max_sz) + { + range = iterGrows ? mk(mk(bound, qVar), mk(qVar, iterator)) : + mk(mk(iterator, qVar), mk(qVar, bound)); + max_sz = treeSize(bound); + } } } } diff --git a/include/ufo/Expr.hpp b/include/ufo/Expr.hpp index fde0c38c1..b2b434666 100644 --- a/include/ufo/Expr.hpp +++ b/include/ufo/Expr.hpp @@ -2330,7 +2330,8 @@ namespace expr if (isOpX(v)) return typeOf(v->last()); if (isOpX(v)) return sort::arrayTy(v->right(), v->last()); - if (isOpX(v)) return typeOf(v->right()); + if (isOpX(v)) return sort::arrayTy(v->left(), v->right()); std::cerr << "WARNING: could not infer type of: " << *v << "\n"; diff --git a/include/ufo/Smt/Z3n.hpp b/include/ufo/Smt/Z3n.hpp index 8cd2a7908..300b70897 100644 --- a/include/ufo/Smt/Z3n.hpp +++ b/include/ufo/Smt/Z3n.hpp @@ -572,25 +572,6 @@ namespace ufo return out; } - - /// Asserts (forall vars body). Work-around until quantifiers are - /// properly supported by Expr - template - void assertForallExpr (const Range &vars, Expr body) - { - z3::ast ast (z3.toAst (body)); - std::vector bound; - bound.reserve (boost::size (vars)); - for (const Expr &v : vars) - bound.push_back (Z3_to_app (ctx, z3.toAst (v))); - - Z3_ast forall = Z3_mk_forall_const (ctx, 0, - bound.size (), &bound[0], - 0, NULL, ast); - Z3_solver_assert (ctx, solver, forall); - ctx.check_error (); - } - void assertExpr (Expr e) { z3::ast ast (z3.toAst (e)); diff --git a/include/ufo/Smt/ZExprConverter.hpp b/include/ufo/Smt/ZExprConverter.hpp index 42a141f5d..45ec26eb0 100644 --- a/include/ufo/Smt/ZExprConverter.hpp +++ b/include/ufo/Smt/ZExprConverter.hpp @@ -232,28 +232,24 @@ namespace ufo /** quantifier */ else if (isOpX (e) || isOpX (e)) { - unsigned num_bound = bind::numBound (e); - z3::ast_vector pinned (ctx); - pinned.resize (num_bound); - std::vector bound_sorts; - bound_sorts.reserve (num_bound); - std::vector bound_names; - bound_names.reserve (num_bound); - - for (unsigned i = 0; i < num_bound; ++i) - { - z3::ast z (marshal (bind::decl (e, i), ctx, cache, seen)); - pinned.push_back (z); - - Z3_func_decl decl = Z3_to_func_decl (ctx, z); - bound_sorts.push_back (Z3_get_range (ctx, decl)); - bound_names.push_back (Z3_get_decl_name (ctx, decl)); - } - - - z3::ast body (marshal (bind::body (e), ctx, cache, seen)); - res = Z3_mk_quantifier (ctx, isOpX (e), 0, 0, NULL, - num_bound, &bound_sorts[0], &bound_names[0], body); + ExprVector vars; + for (int i = 0; i < e->arity() - 1; i++) + vars.push_back(bind::fapp(e->arg(i))); + + z3::ast ast (marshal (e->last(), ctx, cache, seen)); //z3.toAst (e->last())); + std::vector bound; + bound.reserve (boost::size (vars)); + for (const Expr &v : vars) + bound.push_back (Z3_to_app (ctx, marshal (v, ctx, cache, seen))); + + if (isOpX (e)) + res = Z3_mk_forall_const (ctx, 0, + bound.size (), &bound[0], + 0, NULL, ast); + else + res = Z3_mk_exists_const (ctx, 0, + bound.size (), &bound[0], + 0, NULL, ast); } // -- cache the result for unmarshaling From 4391345ef1e9310e197b17e823f2bcfb10e7c7a7 Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Thu, 2 Jul 2020 15:25:11 -0400 Subject: [PATCH 146/236] added/moved some benchmarks --- bench_horn/array_find.smt2 | 17 ++++++ bench_horn/array_password_naive.smt2 | 16 ++++++ bench_horn/array_password_standard.smt2 | 21 ++++++++ bench_horn/array_standard_password.smt2 | 17 ------ bench_horn/s_mutants_25.smt2 | 21 ++++++++ .../count_lin_bnd_2.smt2 | 0 .../count_nonlin_bnd_2.smt2 | 0 .../nonlinear_5.smt2 | 0 .../nonlinear_9.smt2 | 0 bench_horn_multiple/array_aws_01.smt2 | 41 +++++++++++++++ bench_horn_nonlin/chc-lia-nonlin-0055.smt2 | 27 ++++++++++ bench_horn_nonlin/chc-lia-nonlin-0056.smt2 | 27 ++++++++++ bench_horn_nonlin/chc-lia-nonlin-0093.smt2 | 52 +++++++++++++++++++ bench_horn_nonlin/isodec_13.smt2 | 13 +++++ bench_horn_nonlin/vacuity_15.smt2 | 29 +++++++++++ bench_horn_nonlin/vacuity_18.smt2 | 13 +++++ bench_horn_nonlin/vacuity_19.smt2 | 17 ++++++ bench_horn_nonlin/vacuity_20.smt2 | 15 ++++++ bench_horn_nonlin/vacuity_21.smt2 | 16 ++++++ 19 files changed, 325 insertions(+), 17 deletions(-) create mode 100644 bench_horn/array_find.smt2 create mode 100644 bench_horn/array_password_naive.smt2 create mode 100644 bench_horn/array_password_standard.smt2 delete mode 100644 bench_horn/array_standard_password.smt2 create mode 100644 bench_horn/s_mutants_25.smt2 rename {bench_horn_nonlin => bench_horn_cex}/count_lin_bnd_2.smt2 (100%) rename {bench_horn_nonlin => bench_horn_cex}/count_nonlin_bnd_2.smt2 (100%) rename {bench_horn_nonlin => bench_horn_cex}/nonlinear_5.smt2 (100%) rename {bench_horn_nonlin => bench_horn_cex}/nonlinear_9.smt2 (100%) create mode 100644 bench_horn_multiple/array_aws_01.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0055.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0056.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0093.smt2 create mode 100644 bench_horn_nonlin/isodec_13.smt2 create mode 100644 bench_horn_nonlin/vacuity_15.smt2 create mode 100644 bench_horn_nonlin/vacuity_18.smt2 create mode 100644 bench_horn_nonlin/vacuity_19.smt2 create mode 100644 bench_horn_nonlin/vacuity_20.smt2 create mode 100644 bench_horn_nonlin/vacuity_21.smt2 diff --git a/bench_horn/array_find.smt2 b/bench_horn/array_find.smt2 new file mode 100644 index 000000000..75aeda62d --- /dev/null +++ b/bench_horn/array_find.smt2 @@ -0,0 +1,17 @@ +(declare-var a (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var n Int) +(declare-var x Int) + +(declare-rel inv ((Array Int Int) Int Int Int)) +(declare-rel fail ()) + +(rule (inv a 0 x n)) + +(rule (=> (and (inv a i x n) (< i n) (not (= (select a i) x)) (= i1 (+ i 1))) (inv a i1 x n))) + +(rule (=> (and (inv a i x n) (or (not (< i n)) (= (select a i) x)) + (and (>= i1 0) (< i1 i)) (= (select a i1) x)) fail)) + +(query fail) diff --git a/bench_horn/array_password_naive.smt2 b/bench_horn/array_password_naive.smt2 new file mode 100644 index 000000000..7ea198b14 --- /dev/null +++ b/bench_horn/array_password_naive.smt2 @@ -0,0 +1,16 @@ +(declare-var p (Array Int Int)) +(declare-var g (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var N Int) + +(declare-rel inv ((Array Int Int) (Array Int Int) Int Int)) +(declare-rel fail ()) + +(rule (inv p g 0 N)) + +(rule (=> (and (inv p g i N) (< i N) (= (select p i) (select g i)) (= i1 (+ i 1))) (inv p g i1 N))) + +(rule (=> (and (inv p g i N) (= (select p i) (select g i)) (<= 0 i1) (< i1 i) (not (= (select p i1) (select g i1)))) fail)) + +(query fail) diff --git a/bench_horn/array_password_standard.smt2 b/bench_horn/array_password_standard.smt2 new file mode 100644 index 000000000..c97eb9306 --- /dev/null +++ b/bench_horn/array_password_standard.smt2 @@ -0,0 +1,21 @@ +(declare-var p (Array Int Int)) +(declare-var g (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var res Int) +(declare-var res1 Int) +(declare-var N Int) + +(declare-rel inv ((Array Int Int) (Array Int Int) Int Int Int)) +(declare-rel fail ()) + +(rule (inv p g 0 1 N)) + +(rule (=> (and (inv p g i res N) (< i N) + (= res1 (ite (= (select p i) (select g i)) res 0)) + (= i1 (+ i 1))) (inv p g i1 res1 N))) + +(rule (=> (and (inv p g i res N) (not (< i N)) (= res 1) + (<= 0 i1) (< i1 N) (not (= (select p i1) (select g i1)))) fail)) + +(query fail) diff --git a/bench_horn/array_standard_password.smt2 b/bench_horn/array_standard_password.smt2 deleted file mode 100644 index e1c4daa2e..000000000 --- a/bench_horn/array_standard_password.smt2 +++ /dev/null @@ -1,17 +0,0 @@ -(declare-var p (Array Int Int)) -(declare-var g (Array Int Int)) -(declare-var i Int) -(declare-var j Int) -(declare-var i1 Int) -(declare-var j1 Int) - -(declare-rel inv1 ((Array Int Int) (Array Int Int) Int Int)) -(declare-rel fail ()) - -(rule (inv1 p g 0 0)) - -(rule (=> (and (inv1 p g i j) (= j 0) (= j1 (ite (= (select p i) (select g i)) 0 1)) (= i1 (+ i 1))) (inv1 p g i1 j1))) - -(rule (=> (and (inv1 p g i j) (not (= j 0)) (<= 0 i1) (< i1 (- i 1)) (not (= (select p i1) (select g i1)))) fail)) - -(query fail) diff --git a/bench_horn/s_mutants_25.smt2 b/bench_horn/s_mutants_25.smt2 new file mode 100644 index 000000000..475dd467e --- /dev/null +++ b/bench_horn/s_mutants_25.smt2 @@ -0,0 +1,21 @@ +(declare-rel inv (Int Int)) +(declare-var x0 Int) +(declare-var x1 Int) +(declare-var y0 Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x0 0) (= y0 0)) (inv x0 y0))) + +(rule (=> (and + (inv x0 y0) + (= x1 (+ x0 1)) + (= y1 (ite (>= y0 x0) 0 (+ y0 2)))) + (inv x1 y1))) + +(rule (=> (and (inv x0 y0) (= x0 y0) + (not (= 0 (mod x0 2)))) fail)) + +(query fail :print-certificate true) + diff --git a/bench_horn_nonlin/count_lin_bnd_2.smt2 b/bench_horn_cex/count_lin_bnd_2.smt2 similarity index 100% rename from bench_horn_nonlin/count_lin_bnd_2.smt2 rename to bench_horn_cex/count_lin_bnd_2.smt2 diff --git a/bench_horn_nonlin/count_nonlin_bnd_2.smt2 b/bench_horn_cex/count_nonlin_bnd_2.smt2 similarity index 100% rename from bench_horn_nonlin/count_nonlin_bnd_2.smt2 rename to bench_horn_cex/count_nonlin_bnd_2.smt2 diff --git a/bench_horn_nonlin/nonlinear_5.smt2 b/bench_horn_cex/nonlinear_5.smt2 similarity index 100% rename from bench_horn_nonlin/nonlinear_5.smt2 rename to bench_horn_cex/nonlinear_5.smt2 diff --git a/bench_horn_nonlin/nonlinear_9.smt2 b/bench_horn_cex/nonlinear_9.smt2 similarity index 100% rename from bench_horn_nonlin/nonlinear_9.smt2 rename to bench_horn_cex/nonlinear_9.smt2 diff --git a/bench_horn_multiple/array_aws_01.smt2 b/bench_horn_multiple/array_aws_01.smt2 new file mode 100644 index 000000000..86bbd4a3c --- /dev/null +++ b/bench_horn_multiple/array_aws_01.smt2 @@ -0,0 +1,41 @@ +(declare-rel f (Int Int Int (Array Int Int))) +(declare-rel g (Int Int Int (Array Int Int))) + +(declare-var json (Array Int Int)) +(declare-var end Int) +(declare-var end1 Int) +(declare-var start Int) +(declare-var len Int) + +(declare-rel fail ()) + +(rule (=> (and (> len 0) + (and (= (select json start) 1) + (or (= start 0) (not (= (select json (- start 1)) 2)))) + (= end (+ start 1))) + (f end start len json))) + +(rule (=> (and (f end start len json) + (< end len) + (not (and (= (select json end) 1) + (or (= end 0) (not (= (select json (- end 1)) 2))))) + (= end1 (+ end 1))) (f end1 start len json))) + +(rule (=> (and + (f end start len json) + (not (and (< end len) + (not (and (= (select json end) 1) + (or (= end 0) (not (= (select json (- end 1)) 2))))))) + (= end1 (ite (and (< end len) + (and (= (select json end) 1) + (or (= end 0) (not (= (select json (- end 1)) 2))))) (+ end 1) (+ len 1)))) + (g end1 start len json))) + +(rule (=> (and (g end start len json) (not + (or (= end (+ len 1)) + (and (< start len) (<= (+ start 2) end) (<= end len) + (and (= (select json (- end 1)) 1) + (or (= (- end 1) 0) (not (= (select json (- (- end 1) 1)) 2)))))))) + fail)) + +(query fail) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0055.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0055.smt2 new file mode 100644 index 000000000..ce508a186 --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0055.smt2 @@ -0,0 +1,27 @@ +;; Original file: enc-zip_map.smt2 +(set-logic HORN) +(declare-fun P0 (Int) Bool) +(declare-fun P1 (Int Int) Bool) +(declare-fun P2 (Int) Bool) +(declare-fun P3 (Int Int) Bool) +(declare-fun P4 (Int) Bool) +(declare-fun P5 (Int Int Int) Bool) +(declare-fun P6 (Int Int) Bool) +(assert (forall ((x0 Int)) (=> (P0 x0) (P0 x0)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P0 x0) (P1 x0 x1)) (P1 x0 x1)))) +(assert (forall ((x1 Int) (x2 Int) (x0 Int)) (=> (and (P2 x1) (P3 x1 x2) (= x0 0) (= x1 0) (= x2 0)) (P5 x1 x2 x0)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P2 0) (P3 0 x1) (or (< x1 0) (> x1 0))) (P0 x0)))) +(assert (forall ((x0 Int) (x1 Int) (x3 Int) (x2 Int)) (=> (and (P2 x0) (P3 x0 x1) (P1 x2 x3) (or (< x1 0) (> x1 0)) (= x0 0)) (P5 x0 x1 x3)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P2 x1) (P3 x1 0) (or (< x1 0) (> x1 0))) (P0 x0)))) +(assert (forall ((x0 Int) (x1 Int) (x3 Int) (x2 Int)) (=> (and (P2 x0) (P3 x0 x1) (P1 x2 x3) (or (< x0 0) (> x0 0)) (= x1 0)) (P5 x0 x1 x3)))) +(assert (forall ((x1 Int) (x2 Int) (x3 Int) (x0 Int)) (=> (and (P2 x2) (P3 x2 x3) (or (< x2 0) (> x2 0)) (or (< x3 0) (> x3 0)) (= x3 (+ 1 x0)) (= x2 (+ 1 x1))) (P2 x1)))) +(assert (forall ((x0 Int) (x1 Int) (x2 Int) (x3 Int)) (=> (and (P2 x2) (P3 x2 x3) (or (< x2 0) (> x2 0)) (or (< x3 0) (> x3 0)) (= x2 (+ 1 x0)) (= x3 (+ 1 x1))) (P3 x0 x1)))) +(assert (forall ((x1 Int) (x2 Int) (x0 Int) (x3 Int) (x4 Int) (x5 Int)) (=> (and (P2 x1) (P3 x1 x2) (P5 x3 x4 x5) (or (< x1 0) (> x1 0)) (or (< x2 0) (> x2 0)) (= x1 (+ 1 x3)) (= x2 (+ 1 x4)) (= x0 (+ 1 x5))) (P5 x1 x2 x0)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (and (P4 x1) (= x0 0) (= x1 0)) (P6 x1 x0)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P4 x1) (or (< x1 0) (> x1 0)) (= x1 (+ 1 x0))) (P4 x0)))) +(assert (forall ((x1 Int) (x0 Int) (x2 Int) (x3 Int)) (=> (and (P4 x1) (P6 x2 x3) (or (< x1 0) (> x1 0)) (= x1 (+ 1 x2)) (= x0 (+ 1 x3))) (P6 x1 x0)))) +(assert (forall ((x0 Int)) (=> true (P2 x0)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (= x0 x1) (P3 x1 x0)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (P5 x0 x0 x1) (P4 x1)))) +(assert (forall ((x2 Int) (x0 Int) (x1 Int)) (=> (and (P5 x0 x0 x1) (P6 x1 x2) (<= (+ 1 x2) x0)) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0056.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0056.smt2 new file mode 100644 index 000000000..d6120b282 --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0056.smt2 @@ -0,0 +1,27 @@ +;; Original file: zip_map_int2.smt2 +(set-logic HORN) +(declare-fun P0 (Int) Bool) +(declare-fun P1 (Int Int) Bool) +(declare-fun P2 (Int) Bool) +(declare-fun P3 (Int Int) Bool) +(declare-fun P4 (Int) Bool) +(declare-fun P5 (Int Int Int) Bool) +(declare-fun P6 (Int Int) Bool) +(assert (forall ((x0 Int)) (=> (P0 x0) (P0 x0)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P0 x0) (P1 x0 x1)) (P1 x0 x1)))) +(assert (forall ((x0 Int) (x1 Int) (x2 Int)) (=> (and (P2 x0) (P3 x0 x1) (P2 x2) (= x2 x0) (= x0 0) (= x1 0)) (P5 x0 x1 x2)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P2 0) (P3 0 x1) (or (< x1 0) (> x1 0))) (P0 x0)))) +(assert (forall ((x0 Int) (x1 Int) (x3 Int) (x2 Int)) (=> (and (P2 x0) (P3 x0 x1) (P1 x2 x3) (or (< x1 0) (> x1 0)) (= x0 0)) (P5 x0 x1 x3)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P2 x1) (P3 x1 0) (or (< x1 0) (> x1 0))) (P0 x0)))) +(assert (forall ((x0 Int) (x1 Int) (x3 Int) (x2 Int)) (=> (and (P2 x0) (P3 x0 x1) (P1 x2 x3) (or (< x0 0) (> x0 0)) (= x1 0)) (P5 x0 x1 x3)))) +(assert (forall ((x1 Int) (x2 Int) (x3 Int) (x0 Int)) (=> (and (P2 x2) (P3 x2 x3) (or (< x2 0) (> x2 0)) (or (< x3 0) (> x3 0)) (= x3 (+ 1 x0)) (= x2 (+ 1 x1))) (P2 x1)))) +(assert (forall ((x0 Int) (x1 Int) (x2 Int) (x3 Int)) (=> (and (P2 x2) (P3 x2 x3) (or (< x2 0) (> x2 0)) (or (< x3 0) (> x3 0)) (= x2 (+ 1 x0)) (= x3 (+ 1 x1))) (P3 x0 x1)))) +(assert (forall ((x1 Int) (x2 Int) (x0 Int) (x3 Int) (x4 Int) (x5 Int)) (=> (and (P2 x1) (P3 x1 x2) (P5 x3 x4 x5) (or (< x1 0) (> x1 0)) (or (< x2 0) (> x2 0)) (= x1 (+ 1 x3)) (= x2 (+ 1 x4)) (= x0 (+ 1 x5))) (P5 x1 x2 x0)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P4 x0) (P4 x1) (= x0 0) (= x1 x0)) (P6 x0 x1)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P4 x1) (or (< x1 0) (> x1 0)) (= x1 (+ 1 x0))) (P4 x0)))) +(assert (forall ((x1 Int) (x0 Int) (x2 Int) (x3 Int)) (=> (and (P4 x1) (P6 x2 x3) (or (< x1 0) (> x1 0)) (= x1 (+ 1 x2)) (= x0 (+ 1 x3))) (P6 x1 x0)))) +(assert (forall ((x0 Int)) (=> true (P2 x0)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (= x0 x1) (P3 x1 x0)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (P5 x0 x0 x1) (P4 x1)))) +(assert (forall ((x2 Int) (x0 Int) (x1 Int)) (=> (and (P5 x0 x0 x1) (P6 x1 x2) (or (< x2 x0) (> x2 x0))) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0093.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0093.smt2 new file mode 100644 index 000000000..2dac3ea9f --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0093.smt2 @@ -0,0 +1,52 @@ +;; Original file: bsearch.smt2 +(set-logic HORN) +(declare-fun P0 (Int Int Int Int) Bool) +(declare-fun P14 (Int Int Int) Bool) +(declare-fun P15 (Int) Bool) +(declare-fun P7 (Int) Bool) +(declare-fun P1 (Int) Bool) +(declare-fun P2 (Int Int) Bool) +(declare-fun P3 (Int Int Int) Bool) +(declare-fun P4 (Int) Bool) +(declare-fun P5 (Int Int) Bool) +(declare-fun P8 (Int) Bool) +(declare-fun P9 (Int Int) Bool) +(declare-fun P10 (Int Int Int) Bool) +(declare-fun P11 (Int Int Int Int) Bool) +(declare-fun P6 (Int Int Int) Bool) +(declare-fun P12 (Int Int) Bool) +(declare-fun P16 (Int) Bool) +(declare-fun P18 (Int Int) Bool) +(declare-fun P13 (Int Int Int Int Int) Bool) +(declare-fun P17 (Int Int) Bool) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P15 x0) (P15 x1) (= x1 x0)) (P17 x0 x1)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P7 x0) (P7 x1) (= x1 x0)) (P12 x0 x1)))) +(assert (forall ((x1 Int) (x2 Int) (x3 Int) (x0 Int)) (=> (and (P1 x1) (P2 x1 x2) (P3 x1 x2 x3) (<= 0 x2) (<= (+ 1 x2) x1)) (P0 x1 x2 x3 x0)))) +(assert (forall ((x1 Int) (x2 Int) (x0 Int)) (=> (and (P4 x1) (P5 x1 x2) (<= 0 x2) (<= (+ 1 x2) x1) (= x0 0)) (P6 x1 x2 x0)))) +(assert (forall ((x1 Int) (x2 Int) (x3 Int) (x4 Int) (x0 Int)) (=> (and (P8 x1) (P9 x1 x2) (P10 x1 x2 x3) (P11 x1 x2 x3 x4) (<= (+ 1 x4) x3) (= x0 -1)) (P13 x1 x2 x3 x4 x0)))) +(assert (forall ((x6 Int) (x2 Int) (x0 Int) (x4 Int) (x3 Int) (x1 Int) (x5 Int)) (=> (and (P8 x5) (P10 x5 x6 x3) (P11 x5 x6 x3 x4) (P9 x5 x6) (<= (* 2 x2) x0) (>= (+ 1 (* 2 x2)) x0) (>= x4 x3) (= x4 (+ x0 x3)) (= x1 (+ x3 x2))) (P4 x6)))) +(assert (forall ((x4 Int) (x1 Int) (x2 Int) (x0 Int) (x6 Int) (x5 Int) (x3 Int)) (=> (and (P8 x3) (P9 x3 x4) (P10 x3 x4 x5) (P11 x3 x4 x5 x6) (<= (* 2 x2) x0) (>= (+ 1 (* 2 x2)) x0) (>= x6 x5) (= x6 (+ x0 x5)) (= x1 (+ x5 x2))) (P5 x4 x1)))) +(assert (forall ((x8 Int) (x1 Int) (x0 Int) (x4 Int) (x3 Int) (x7 Int) (x6 Int) (x2 Int) (x5 Int)) (=> (and (P9 x8 x5) (P10 x8 x5 x3) (P11 x8 x5 x3 x4) (P6 x5 x6 x7) (P8 x8) (<= (* 2 x1) x0) (>= (+ 1 (* 2 x1)) x0) (>= x4 x3) (<= (+ 1 x7) x8) (= x4 (+ x0 x3)) (= x6 (+ x3 x1)) (= x2 (+ 1 x6))) (P8 x8)))) +(assert (forall ((x7 Int) (x8 Int) (x1 Int) (x0 Int) (x4 Int) (x3 Int) (x6 Int) (x5 Int) (x2 Int)) (=> (and (P10 x7 x8 x3) (P11 x7 x8 x3 x4) (P6 x8 x5 x6) (P8 x7) (P9 x7 x8) (<= (* 2 x1) x0) (>= (+ 1 (* 2 x1)) x0) (>= x4 x3) (<= (+ 1 x6) x7) (= x4 (+ x0 x3)) (= x5 (+ x3 x1)) (= x2 (+ 1 x5))) (P9 x7 x8)))) +(assert (forall ((x7 Int) (x8 Int) (x2 Int) (x1 Int) (x0 Int) (x4 Int) (x3 Int) (x6 Int) (x5 Int)) (=> (and (P10 x7 x8 x3) (P11 x7 x8 x3 x4) (P6 x8 x5 x6) (P8 x7) (P9 x7 x8) (<= (* 2 x1) x0) (>= (+ 1 (* 2 x1)) x0) (>= x4 x3) (<= (+ 1 x6) x7) (= x4 (+ x0 x3)) (= x5 (+ x3 x1)) (= x2 (+ 1 x5))) (P10 x7 x8 x2)))) +(assert (forall ((x5 Int) (x6 Int) (x2 Int) (x8 Int) (x1 Int) (x0 Int) (x7 Int) (x4 Int) (x3 Int)) (=> (and (P10 x5 x6 x7) (P6 x6 x3 x4) (P8 x5) (P9 x5 x6) (P11 x5 x6 x7 x8) (<= (* 2 x1) x0) (>= (+ 1 (* 2 x1)) x0) (>= x8 x7) (<= (+ 1 x4) x5) (= x8 (+ x0 x7)) (= x3 (+ x7 x1)) (= x2 (+ 1 x3))) (P11 x5 x6 x2 x8)))) +(assert (forall ((x5 Int) (x6 Int) (x4 Int) (x8 Int) (x9 Int) (x1 Int) (x0 Int) (x3 Int) (x2 Int) (x7 Int)) (=> (and (P10 x5 x6 x4) (P6 x6 x2 x3) (P8 x5) (P9 x5 x6) (P11 x5 x6 x4 x8) (P13 x5 x6 x7 x8 x9) (<= (* 2 x1) x0) (>= (+ 1 (* 2 x1)) x0) (>= x8 x4) (<= (+ 1 x3) x5) (= x8 (+ x0 x4)) (= x2 (+ x4 x1)) (= x7 (+ 1 x2))) (P13 x5 x6 x4 x8 x9)))) +(assert (forall ((x8 Int) (x2 Int) (x1 Int) (x4 Int) (x3 Int) (x7 Int) (x0 Int) (x6 Int) (x5 Int)) (=> (and (P9 x8 x5) (P10 x8 x5 x3) (P11 x8 x5 x3 x4) (P6 x5 x6 x7) (P8 x8) (<= (* 2 x2) x1) (>= (+ 1 (* 2 x2)) x1) (>= x4 x3) (>= x7 (+ 1 x8)) (= (+ x3 x2) (+ 1 x0)) (= x4 (+ x1 x3)) (= x6 (+ x3 x2))) (P8 x8)))) +(assert (forall ((x7 Int) (x8 Int) (x2 Int) (x1 Int) (x4 Int) (x3 Int) (x6 Int) (x0 Int) (x5 Int)) (=> (and (P10 x7 x8 x3) (P11 x7 x8 x3 x4) (P6 x8 x5 x6) (P8 x7) (P9 x7 x8) (<= (* 2 x2) x1) (>= (+ 1 (* 2 x2)) x1) (>= x4 x3) (>= x6 (+ 1 x7)) (= (+ x3 x2) (+ 1 x0)) (= x4 (+ x1 x3)) (= x5 (+ x3 x2))) (P9 x7 x8)))) +(assert (forall ((x6 Int) (x7 Int) (x8 Int) (x2 Int) (x1 Int) (x3 Int) (x5 Int) (x0 Int) (x4 Int)) (=> (and (P11 x6 x7 x8 x3) (P6 x7 x4 x5) (P8 x6) (P9 x6 x7) (P10 x6 x7 x8) (<= (* 2 x2) x1) (>= (+ 1 (* 2 x2)) x1) (>= x3 x8) (>= x5 (+ 1 x6)) (= (+ x8 x2) (+ 1 x0)) (= x3 (+ x1 x8)) (= x4 (+ x8 x2))) (P10 x6 x7 x8)))) +(assert (forall ((x6 Int) (x7 Int) (x8 Int) (x0 Int) (x2 Int) (x1 Int) (x3 Int) (x5 Int) (x4 Int)) (=> (and (P11 x6 x7 x8 x3) (P6 x7 x4 x5) (P8 x6) (P9 x6 x7) (P10 x6 x7 x8) (<= (* 2 x2) x1) (>= (+ 1 (* 2 x2)) x1) (>= x3 x8) (>= x5 (+ 1 x6)) (= (+ x8 x2) (+ 1 x0)) (= x3 (+ x1 x8)) (= x4 (+ x8 x2))) (P11 x6 x7 x8 x0)))) +(assert (forall ((x5 Int) (x6 Int) (x7 Int) (x2 Int) (x9 Int) (x1 Int) (x0 Int) (x4 Int) (x8 Int) (x3 Int)) (=> (and (P11 x5 x6 x7 x2) (P6 x6 x3 x4) (P8 x5) (P9 x5 x6) (P10 x5 x6 x7) (P13 x5 x6 x7 x8 x9) (<= (* 2 x1) x0) (>= (+ 1 (* 2 x1)) x0) (>= x2 x7) (>= x4 (+ 1 x5)) (= (+ x7 x1) (+ 1 x8)) (= x2 (+ x0 x7)) (= x3 (+ x7 x1))) (P13 x5 x6 x7 x2 x9)))) +(assert (forall ((x6 Int) (x4 Int) (x2 Int) (x3 Int) (x5 Int) (x1 Int) (x0 Int)) (=> (and (P8 x6) (P9 x6 x4) (P10 x6 x4 x2) (P11 x6 x4 x2 x3) (P6 x4 x5 x6) (<= (* 2 x1) x0) (>= (+ 1 (* 2 x1)) x0) (>= x3 x2) (= x3 (+ x0 x2)) (= x5 (+ x2 x1))) (P13 x6 x4 x2 x3 x5)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (and (P16 x0) (P18 x0 x1)) (P7 x1)))) +(assert (forall ((x3 Int) (x2 Int) (x0 Int) (x1 Int)) (=> (and (P18 x3 x1) (P12 x1 x2) (P16 x3) (= x2 (+ 1 x0))) (P8 x3)))) +(assert (forall ((x2 Int) (x3 Int) (x1 Int) (x0 Int)) (=> (and (P12 x3 x1) (P16 x2) (P18 x2 x3) (= x1 (+ 1 x0))) (P9 x2 x3)))) +(assert (forall ((x3 Int) (x4 Int) (x0 Int) (x2 Int) (x1 Int)) (=> (and (P12 x4 x2) (P16 x3) (P18 x3 x4) (= x0 0) (= x2 (+ 1 x1))) (P10 x3 x4 x0)))) +(assert (forall ((x3 Int) (x4 Int) (x0 Int) (x1 Int) (x2 Int)) (=> (and (P12 x4 x2) (P16 x3) (P18 x3 x4) (= x0 0) (= x2 (+ 1 x1))) (P11 x3 x4 x0 x1)))) +(assert (forall ((x1 Int) (x2 Int) (x4 Int) (x0 Int) (x3 Int)) (=> (and (P12 x2 x0) (P16 x1) (P18 x1 x2) (P13 x1 x2 0 x3 x4) (= x0 (+ 1 x3))) (P14 x1 x2 x4)))) +(assert (forall ((x0 Int)) (=> true (P15 x0)))) +(assert (forall ((x0 Int) (x1 Int) (x2 Int)) (=> (P17 x1 x2) (P15 x0)))) +(assert (forall ((x2 Int) (x1 Int) (x0 Int)) (=> (and (P17 x1 x0) (P17 x1 x2) (<= 0 x1)) (P16 x2)))) +(assert (forall ((x0 Int) (x2 Int) (x1 Int)) (=> (and (P17 x1 x0) (P17 x1 x2) (<= 0 x1)) (P18 x0 x2)))) +(assert (forall ((x0 Int) (x1 Int) (x3 Int) (x2 Int) (x4 Int)) (=> (and (P1 x2) (P2 x2 x3) (P3 x2 x3 x4) (or (not (> x0 0)) (not (> x1 0))) (or (and (> x0 0) (<= 0 x3)) (and (not (> x0 0)) (not (<= 0 x3)))) (or (and (> x1 0) (< x3 x2)) (and (not (> x1 0)) (not (< x3 x2))))) false))) +(assert (forall ((x0 Int) (x1 Int) (x3 Int) (x2 Int)) (=> (and (P4 x2) (P5 x2 x3) (or (not (> x0 0)) (not (> x1 0))) (or (and (> x0 0) (<= 0 x3)) (and (not (> x0 0)) (not (<= 0 x3)))) (or (and (> x1 0) (< x3 x2)) (and (not (> x1 0)) (not (< x3 x2))))) false))) +(check-sat) diff --git a/bench_horn_nonlin/isodec_13.smt2 b/bench_horn_nonlin/isodec_13.smt2 new file mode 100644 index 000000000..390df1615 --- /dev/null +++ b/bench_horn_nonlin/isodec_13.smt2 @@ -0,0 +1,13 @@ +(declare-rel pre (Int)) +(declare-var x Int) + +(declare-rel fail ()) + +(rule (=> false (pre x))) + +(rule (=> (and (pre (+ x 1)) (pre (- x 1)) + (not (and + (< (- 2) (* 2 x)) + (< (* 2 x) 4)))) fail)) + +(query fail) diff --git a/bench_horn_nonlin/vacuity_15.smt2 b/bench_horn_nonlin/vacuity_15.smt2 new file mode 100644 index 000000000..d621d160a --- /dev/null +++ b/bench_horn_nonlin/vacuity_15.smt2 @@ -0,0 +1,29 @@ +(declare-rel f (Int Int)) + +(declare-var x Int) +(declare-var x1 Int) +(declare-var b Int) + +(declare-rel fail ()) + +; to continue + +(rule (=> (and (f x b) (>= x 0) (= x1 (ite (= b 1) (- x) x)) (not (>= x1 0))) fail)) + +(query fail) + +; +; unsat +; (define-fun f ((x Int) (b Bool)) Bool +; (or (not b) (< x 0) (>= (ite b (- x) x) 0))) +; +; (>= (ite b (- x) x) 0) <=> b = (<= x 0) +; + +; +; (define-fun f ((x Int) (b Int)) Bool +; (or (< x 0) (and (or (distinct b 1) (<= x 0)) (or (= b 1) (>= x 0))))) +; +; <==> ite (b = 1, x <= 0, x >= 0) +; +; diff --git a/bench_horn_nonlin/vacuity_18.smt2 b/bench_horn_nonlin/vacuity_18.smt2 new file mode 100644 index 000000000..0c6d96919 --- /dev/null +++ b/bench_horn_nonlin/vacuity_18.smt2 @@ -0,0 +1,13 @@ +(declare-rel f (Int)) +(declare-rel g (Int)) + +(declare-var x Int) +(declare-var y Int) + +(declare-rel fail ()) + +(rule (=> (= x 20) (f x))) +(rule (=> (and (f x) (= y (- x 1))) (f y))) +(rule (=> (and (f x) (g y) (not (>= y x))) fail)) + +(query fail) diff --git a/bench_horn_nonlin/vacuity_19.smt2 b/bench_horn_nonlin/vacuity_19.smt2 new file mode 100644 index 000000000..444540731 --- /dev/null +++ b/bench_horn_nonlin/vacuity_19.smt2 @@ -0,0 +1,17 @@ +(declare-rel f (Int Int)) +(declare-rel g (Int)) + +(declare-var x Int) +(declare-var y Int) +(declare-var z Int) +(declare-var x1 Int) +(declare-var y1 Int) + + +(declare-rel fail ()) + +(rule (=> (and (= x 13) (= y 42)) (f x y))) +(rule (=> (and (f x y) (= x1 (- x y)) (= y1 (+ y 1))) (f x1 y1))) +(rule (=> (and (f x z) (g y) (not (>= y x))) fail)) + +(query fail) diff --git a/bench_horn_nonlin/vacuity_20.smt2 b/bench_horn_nonlin/vacuity_20.smt2 new file mode 100644 index 000000000..5c0a7c6b8 --- /dev/null +++ b/bench_horn_nonlin/vacuity_20.smt2 @@ -0,0 +1,15 @@ +(declare-rel f (Int)) +(declare-rel g (Int)) +(declare-rel h (Int)) + +(declare-var x Int) +(declare-var y Int) +(declare-var z Int) + +(declare-rel fail ()) + +(rule (=> (= x 20) (f x))) +(rule (=> (and (f x) (h z) (= y (+ x z))) (f y))) +(rule (=> (and (f x) (g y) (not (>= y x))) fail)) + +(query fail) diff --git a/bench_horn_nonlin/vacuity_21.smt2 b/bench_horn_nonlin/vacuity_21.smt2 new file mode 100644 index 000000000..4440c3772 --- /dev/null +++ b/bench_horn_nonlin/vacuity_21.smt2 @@ -0,0 +1,16 @@ +(declare-rel f (Int Int)) +(declare-rel g (Int )) +(declare-rel h (Int )) + +(declare-var x Int) +(declare-var y Int) +(declare-var x1 Int) +(declare-var y1 Int) + +(declare-rel fail ()) + +(rule (=> (and (= x 0) (= y 0)) (f x y))) +(rule (=> (and (f x y) (h x) (= x1 (+ x 1)) (= y1 (+ y 1))) (f x1 y1))) +(rule (=> (and (f x y) (g x) (not (= y 200))) fail)) +(rule (=> (and (f x y) (g x) (h x)) fail)) +(query fail) From 43d7273d06c068a62d201aa30e77efc0532c7515 Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Tue, 7 Jul 2020 17:26:00 -0400 Subject: [PATCH 147/236] using QE for quantifier-free array invariants --- bench_horn/array_fixed_range_01.smt2 | 23 ++++++++ bench_horn/array_fixed_range_02.smt2 | 27 +++++++++ include/ae/AeValSolver.hpp | 82 ++++++++++++++++++++-------- include/ae/ExprSimpl.hpp | 19 +++++++ include/deep/NonlinCHCsolver.hpp | 70 ++++++++++++------------ include/ufo/Expr.hpp | 15 +++-- 6 files changed, 171 insertions(+), 65 deletions(-) create mode 100644 bench_horn/array_fixed_range_01.smt2 create mode 100644 bench_horn/array_fixed_range_02.smt2 diff --git a/bench_horn/array_fixed_range_01.smt2 b/bench_horn/array_fixed_range_01.smt2 new file mode 100644 index 000000000..f16b93c31 --- /dev/null +++ b/bench_horn/array_fixed_range_01.smt2 @@ -0,0 +1,23 @@ +(declare-rel inv ((Array Int Int))) +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-rel fail ()) + +(rule (inv (store (store (store (store a 0 0) 1 0) 2 0) 3 0))) + +(rule (=> + (and + (inv a) + (= a1 (store + (store + (store + (store a 0 (+ 1 (select a 0))) + 1 (+ (select a 0) (select a 1))) + 2 (+ (select a 1) (select a 2))) + 3 (+ (select a 2) (select a 3))))) + (inv a1))) + +(rule (=> (and (inv a) (not (>= (select a 3) 0))) fail)) + +(query fail) + diff --git a/bench_horn/array_fixed_range_02.smt2 b/bench_horn/array_fixed_range_02.smt2 new file mode 100644 index 000000000..a6a8c773d --- /dev/null +++ b/bench_horn/array_fixed_range_02.smt2 @@ -0,0 +1,27 @@ +(declare-rel inv ((Array Int Int) Int Int Int Int)) +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var c1 Int) +(declare-var c2 Int) +(declare-var c3 Int) +(declare-var c4 Int) +(declare-rel fail ()) + +(rule (inv (store (store (store (store a c1 0) c2 0) c3 0) c4 0) c1 c2 c3 c4)) + +(rule (=> + (and + (inv a c1 c2 c3 c4) + (= a1 (store + (store + (store + (store a c1 (+ 1 (select a c1))) + c2 (+ (select a c1) (select a c2))) + c3 (+ (select a c2) (select a c3))) + c4 (+ (select a c3) (select a c4))))) + (inv a1 c1 c2 c3 c4))) + +(rule (=> (and (inv a c1 c2 c3 c4) (not (>= (select a c4) 0))) fail)) + +(query fail) + diff --git a/include/ae/AeValSolver.hpp b/include/ae/AeValSolver.hpp index f1c36ac56..d7c9164b2 100644 --- a/include/ae/AeValSolver.hpp +++ b/include/ae/AeValSolver.hpp @@ -686,7 +686,7 @@ namespace ufo m[var] = u.numericUnderapprox(mk(var, entr))->right(); } - + /** * Actually, just print it to cmd in the smt-lib2 format */ @@ -708,34 +708,70 @@ namespace ufo /** * Simple wrapper */ - inline void aeSolveAndSkolemize(Expr s, Expr t) + Expr eliminateQuantifiers(Expr cond, ExprSet& vars) { - ExprSet s_vars; - ExprSet t_quantified; - - filter (s, bind::IsConst (), inserter (s_vars, s_vars.begin())); - filter (t, bind::IsConst (), inserter (t_quantified, t_quantified.begin())); + ExprFactory &efac = cond->getFactory(); + SMTUtils u(efac); + if (vars.size() == 0) return simplifyBool(cond); - minusSets(t_quantified, s_vars); + if (containsOp(cond) || containsOp(cond)) + return mk(efac); - outs() << "S: " << *s << "\n"; - outs() << "T: \\exists "; - for (auto &a: t_quantified) outs() << *a << ", "; - outs() << *t << "\n"; - - AeValSolver ae(s, t, t_quantified); - - Expr res; - if (ae.solve()){ - res = ae.getValidSubset(); - outs() << "\nvalid subset:\n"; + Expr newCond = simpleQE(cond, vars); + if (isNonlinear(newCond)) { + newCond = simpleQE(newCond, vars); + if (!u.implies(cond, newCond)) { + return mk(efac); + } } else { - res = ae.getSimpleSkolemFunction(); - outs() << "\nextracted skolem:\n"; + AeValSolver ae(mk(efac), newCond, vars); // exists quantified . formula + if (ae.solve()) { + newCond = ae.getValidSubset(); + } else { + return mk(efac); + } } - - ae.serialize_formula(res); + if (!emptyIntersect(newCond, vars)) // sanity check + { + return mk(efac); + } + return simplifyBool(newCond); }; + + Expr abduce (Expr goal, Expr assm) + { + ExprFactory &efac = goal->getFactory(); + SMTUtils u(efac); + ExprSet complex; + findComplexNumerics(assm, complex); + findComplexNumerics(goal, complex); + ExprMap repls; + ExprMap replsRev; + for (auto & a : complex) + { + Expr repl = bind::intConst(mkTerm + ("__repl_" + lexical_cast(repls.size()), efac)); + repls[a] = repl; + replsRev[repl] = a; + } + Expr goalTmp = replaceAll(goal, repls); + Expr assmTmp = replaceAll(assm, repls); + + ExprSet vars; + filter (assmTmp, bind::IsConst (), inserter(vars, vars.begin())); + Expr tmp = mkNeg(eliminateQuantifiers(mkNeg(mk(assmTmp, goalTmp)), vars)); + tmp = replaceAll(tmp, replsRev); + + if (isOpX(tmp)) return NULL; // abduction unsuccessful + + // sanity check: + if (!u.implies(mk(tmp, assm), goal)) + { + errs () << "WARNING: abduction fail: "<< * mk(tmp, assm) << " does not imply " << *goal << "\n"; + return NULL; + } + return tmp; + } } #endif diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index 96f62f708..6f5b8179a 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -107,6 +107,24 @@ namespace ufo return bind::typeOf(a) == mk(a->getFactory()); } + inline static void findComplexNumerics (Expr a, ExprSet &terms) + { + if (bind::isIntConst(a) || isOpX(a)) return; + if (isNumeric(a)) + { + bool hasNoNumeric = false; + for (unsigned i = 0; i < a->arity(); i++) + if (!isNumeric(a->arg(i))) hasNoNumeric = true; + if (hasNoNumeric) + { + terms.insert(a); + return; + } + } + for (unsigned i = 0; i < a->arity(); i++) + findComplexNumerics(a->arg(i), terms); + } + inline static void getArrIneqs (Expr a, ExprSet &ineqs) { if (isOp(a) && containsOp(v)) return typeOf(v->right()); - if (isOpX(v)) return sort::arrayTy(v->left(), v->right()); + if (isOpX(v)) return sort::arrayTy(v->left(), typeOf(v->right())); - std::cerr << "WARNING: could not infer type of: " << *v << "\n"; - - assert (0 && "Unreachable"); - return Expr(); +// std::cerr << "WARNING: could not infer type of: " << *v << "\n"; +// assert (0 && "Unreachable"); + + return Expr(); } inline Expr sortOf (Expr v) {return typeOf (v);} - + struct FAPP_PS { static inline void print (std::ostream &OS, From aca656fce1d1870b9c90c8fb15a59fb07c4fef61 Mon Sep 17 00:00:00 2001 From: grigoryfedyukovich Date: Mon, 20 Jul 2020 00:54:09 -0400 Subject: [PATCH 148/236] improved preprocessing, propagation, and abduction (+ fixed the leftover bugs from arbitrary-precision conversion) --- bench_horn/array_init_depend.smt2 | 19 + bench_horn/array_init_depend_incr.smt2 | 19 + bench_horn/array_nonlin_init_depend.smt2 | 20 + bench_horn_nonlin/chc-lia-nonlin-0054.smt2 | 29 + bench_horn_nonlin/chc-lia-nonlin-0065.smt2 | 36 ++ bench_horn_nonlin/chc-lia-nonlin-0070.smt2 | 41 ++ bench_horn_nonlin/chc-lia-nonlin-0096.smt2 | 310 ++++++++++ bench_horn_nonlin/chc-lia-nonlin-0101.smt2 | 352 +++++++++++ bench_horn_nonlin/vacuity_22.smt2 | 13 + include/ae/AeValSolver.hpp | 46 +- include/ae/ExprSimpl.hpp | 649 ++++++++++++--------- include/deep/NonlinCHCsolver.hpp | 214 +++++-- include/ufo/Expr.hpp | 19 +- tools/nonlin/NonlinSolver.cpp | 18 +- 14 files changed, 1428 insertions(+), 357 deletions(-) create mode 100644 bench_horn/array_init_depend.smt2 create mode 100644 bench_horn/array_init_depend_incr.smt2 create mode 100644 bench_horn/array_nonlin_init_depend.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0054.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0065.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0070.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0096.smt2 create mode 100644 bench_horn_nonlin/chc-lia-nonlin-0101.smt2 create mode 100644 bench_horn_nonlin/vacuity_22.smt2 diff --git a/bench_horn/array_init_depend.smt2 b/bench_horn/array_init_depend.smt2 new file mode 100644 index 000000000..8ff141397 --- /dev/null +++ b/bench_horn/array_init_depend.smt2 @@ -0,0 +1,19 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var n Int) +(declare-var c Int) + +(declare-rel inv ((Array Int Int) Int Int Int)) +(declare-rel fail ()) + +(rule (inv a 0 c n)) + +(rule (=> (and (inv a i c n) (< i n) + (= a1 (ite (= i 0) (store a i c) (store a i (select a (- i 1))))) + (= i1 (+ i 1))) (inv a1 i1 c n))) + +(rule (=> (and (inv a i c n) (>= i n) (<= 0 i1) (< i1 n) (not (= (select a i1) c))) fail)) + +(query fail) diff --git a/bench_horn/array_init_depend_incr.smt2 b/bench_horn/array_init_depend_incr.smt2 new file mode 100644 index 000000000..9bf292c47 --- /dev/null +++ b/bench_horn/array_init_depend_incr.smt2 @@ -0,0 +1,19 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var n Int) +(declare-var c Int) + +(declare-rel inv ((Array Int Int) Int Int Int)) +(declare-rel fail ()) + +(rule (inv a 0 c n)) + +(rule (=> (and (inv a i c n) (< i n) + (= a1 (ite (= i 0) (store a i c) (store a i (+ 1 (select a (- i 1)))))) + (= i1 (+ i 1))) (inv a1 i1 c n))) + +(rule (=> (and (inv a i c n) (>= i n) (< 0 i1) (< i1 n) (not (= (select a i1) (+ c i1)))) fail)) + +(query fail) diff --git a/bench_horn/array_nonlin_init_depend.smt2 b/bench_horn/array_nonlin_init_depend.smt2 new file mode 100644 index 000000000..65e6b6d65 --- /dev/null +++ b/bench_horn/array_nonlin_init_depend.smt2 @@ -0,0 +1,20 @@ +(declare-var a (Array Int Int)) +(declare-var a1 (Array Int Int)) +(declare-var i Int) +(declare-var i1 Int) +(declare-var n Int) +(declare-var C1 Int) +(declare-var C2 Int) + +(declare-rel inv ((Array Int Int) Int Int Int Int)) +(declare-rel fail ()) + +(rule (inv a 0 C1 C2 n)) + +(rule (=> (and (inv a i C1 C2 n) (< i n) + (= a1 (ite (= i 0) (store a i C1) (store a i (+ (select a (- i 1)) C2)))) + (= i1 (+ i 1))) (inv a1 i1 C1 C2 n))) + +(rule (=> (and (inv a i C1 C2 n) (>= i n) (< 0 i1) (< i1 n) (not (= (select a i1) (+ C1 (* i1 C2))))) fail)) + +(query fail) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0054.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0054.smt2 new file mode 100644 index 000000000..c33a2446b --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0054.smt2 @@ -0,0 +1,29 @@ +;; Original file: max.smt2 +(set-logic HORN) +(declare-fun P3 (Int Int) Bool) +(declare-fun P4 (Int Int Int) Bool) +(declare-fun P5 (Int Int Int Int) Bool) +(declare-fun P2 (Int Int Int) Bool) +(declare-fun P6 (Int) Bool) +(declare-fun P7 (Int Int) Bool) +(declare-fun P0 (Int) Bool) +(declare-fun P1 (Int Int) Bool) +(declare-fun P8 (Int Int Int Int Int) Bool) +(declare-fun P9 (Int Int Int) Bool) +(assert (forall ((x3 Int) (x2 Int) (x0 Int) (x1 Int)) (=> (and (P4 x2 x3 x0) (P5 x2 x3 x0 x1) (P3 x2 x3)) (P0 x3)))) +(assert (forall ((x2 Int) (x3 Int) (x1 Int) (x0 Int)) (=> (and (P3 x1 x2) (P5 x1 x2 x3 x0) (P4 x1 x2 x3)) (P1 x2 x3)))) +(assert (forall ((x4 Int) (x0 Int) (x2 Int) (x3 Int) (x1 Int)) (=> (and (P3 x0 x2) (P4 x0 x2 x3) (P5 x0 x2 x3 x1) (P2 x2 x3 x4)) (P0 x4)))) +(assert (forall ((x0 Int) (x4 Int) (x1 Int) (x2 Int) (x3 Int)) (=> (and (P3 x1 x2) (P4 x1 x2 x3) (P2 x2 x3 x0) (P5 x1 x2 x3 x4)) (P1 x0 x4)))) +(assert (forall ((x0 Int) (x1 Int) (x2 Int) (x4 Int) (x5 Int) (x3 Int)) (=> (and (P3 x0 x1) (P4 x0 x1 x2) (P2 x1 x2 x3) (P5 x0 x1 x2 x4) (P2 x3 x4 x5)) (P8 x0 x1 x2 x4 x5)))) +(assert (forall ((x0 Int) (x1 Int) (x2 Int)) (=> (and (P6 x0) (P7 x0 x1) (P6 x2) (>= x0 x1) (= x2 x0)) (P9 x0 x1 x2)))) +(assert (forall ((x1 Int) (x0 Int) (x2 Int)) (=> (and (P6 x1) (P7 x1 x0) (P7 x1 x2) (< x1 x0) (= x2 x0)) (P9 x1 x0 x2)))) +(assert (forall ((x0 Int)) (=> (P0 x0) (P6 x0)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P0 x0) (P1 x0 x1)) (P7 x0 x1)))) +(assert (forall ((x0 Int) (x1 Int) (x2 Int)) (=> (and (P0 x0) (P1 x0 x1) (P9 x0 x1 x2)) (P2 x0 x1 x2)))) +(assert (forall ((x0 Int) (x1 Int)) (=> true (P3 x0 x1)))) +(assert (forall ((x0 Int) (x1 Int) (x2 Int)) (=> true (P4 x0 x1 x2)))) +(assert (forall ((x0 Int) (x1 Int) (x2 Int) (x3 Int)) (=> true (P5 x0 x1 x2 x3)))) +(assert (forall ((x1 Int) (x0 Int) (x2 Int) (x3 Int) (x4 Int)) (=> (P8 x0 x1 x2 x3 x4) (P6 x1)))) +(assert (forall ((x1 Int) (x4 Int) (x0 Int) (x2 Int) (x3 Int)) (=> (P8 x0 x1 x2 x3 x4) (P7 x1 x4)))) +(assert (forall ((x5 Int) (x4 Int) (x0 Int) (x3 Int) (x1 Int) (x2 Int)) (=> (and (P8 x0 x3 x1 x2 x4) (P9 x3 x4 x5) (or (< x5 x4) (> x5 x4))) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0065.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0065.smt2 new file mode 100644 index 000000000..a920885dd --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0065.smt2 @@ -0,0 +1,36 @@ +;; Original file: pow_inc.smt2 +(set-logic HORN) +(declare-fun P4 (Int Int Int) Bool) +(declare-fun P3 (Int Int Int) Bool) +(declare-fun P1 (Int Int) Bool) +(declare-fun P9 (Int Int) Bool) +(declare-fun P0 (Int) Bool) +(declare-fun P2 (Int Int) Bool) +(declare-fun P10 (Int Int) Bool) +(declare-fun P11 (Int Int Int) Bool) +(declare-fun P5 (Int Int Int Int) Bool) +(declare-fun P6 (Int) Bool) +(declare-fun P7 (Int) Bool) +(declare-fun P8 (Int Int) Bool) +(declare-fun P12 (Int Int Int Int) Bool) +(assert (forall ((x0 Int) (x2 Int) (x1 Int)) (=> (P4 x0 x1 x2) (P2 x0 x2)))) +(assert (forall ((x3 Int) (x1 Int) (x0 Int) (x2 Int)) (=> (and (P4 x1 x0 x2) (P3 x1 x2 x3)) (P0 x3)))) +(assert (forall ((x1 Int) (x0 Int) (x2 Int) (x4 Int) (x3 Int)) (=> (and (P4 x1 x0 x2) (P3 x1 x2 x3) (P1 x3 x4)) (P5 x1 x0 x2 x4)))) +(assert (forall ((x2 Int) (x1 Int) (x0 Int)) (=> (and (P10 x0 x1) (P11 x0 x1 x2) (<= x1 0)) (P7 x2)))) +(assert (forall ((x0 Int) (x1 Int) (x2 Int) (x3 Int)) (=> (and (P10 x0 x1) (P11 x0 x1 x2) (P9 x2 x3) (<= x1 0)) (P12 x0 x1 x2 x3)))) +(assert (forall ((x3 Int) (x2 Int) (x0 Int) (x1 Int)) (=> (and (P10 x1 x2) (P7 x3) (>= x2 1) (= x2 (+ 1 x0))) (P7 x3)))) +(assert (forall ((x3 Int) (x4 Int) (x2 Int) (x0 Int) (x1 Int)) (=> (and (P10 x1 x2) (P7 x3) (P9 x3 x4) (>= x2 1) (= x2 (+ 1 x0))) (P9 x3 x4)))) +(assert (forall ((x1 Int) (x0 Int) (x2 Int)) (=> (and (P10 x1 x2) (>= x2 1) (= x2 (+ 1 x0))) (P10 x1 x0)))) +(assert (forall ((x1 Int) (x0 Int) (x3 Int) (x2 Int)) (=> (and (P10 x1 x2) (P0 x3) (>= x2 1) (= x2 (+ 1 x0))) (P11 x1 x0 x3)))) +(assert (forall ((x3 Int) (x4 Int) (x0 Int) (x2 Int) (x1 Int)) (=> (and (P10 x1 x0) (P0 x3) (P12 x1 x2 x3 x4) (>= x0 1) (= x0 (+ 1 x2))) (P1 x3 x4)))) +(assert (forall ((x1 Int) (x0 Int) (x4 Int) (x2 Int) (x3 Int)) (=> (and (P10 x1 x2) (P2 x3 x4) (>= x2 1) (= x2 (+ 1 x0))) (P11 x1 x0 x4)))) +(assert (forall ((x1 Int) (x4 Int) (x5 Int) (x0 Int) (x3 Int) (x2 Int)) (=> (and (P10 x2 x0) (P2 x1 x4) (P12 x2 x3 x4 x5) (>= x0 1) (= x0 (+ 1 x3))) (P3 x1 x4 x5)))) +(assert (forall ((x0 Int) (x1 Int) (x5 Int) (x4 Int) (x2 Int) (x3 Int)) (=> (and (P10 x3 x4) (P11 x3 x4 x5) (>= x4 1) (= x4 (+ 1 x2))) (P4 x0 x1 x5)))) +(assert (forall ((x1 Int) (x2 Int) (x5 Int) (x6 Int) (x0 Int) (x3 Int) (x4 Int)) (=> (and (P10 x1 x2) (P11 x1 x2 x5) (P5 x3 x4 x5 x6) (>= x2 1) (= x2 (+ 1 x0))) (P12 x1 x2 x5 x6)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (and (P6 x1) (= x0 (+ 1 x1))) (P8 x1 x0)))) +(assert (forall ((x0 Int)) (=> (P7 x0) (P6 x0)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P7 x0) (P8 x0 x1)) (P9 x0 x1)))) +(assert (forall ((x0 Int) (x1 Int)) (=> true (P10 x0 x1)))) +(assert (forall ((x0 Int) (x1 Int) (x2 Int)) (=> true (P11 x0 x1 x2)))) +(assert (forall ((x3 Int) (x2 Int) (x0 Int) (x1 Int)) (=> (and (P12 x0 x1 x2 x3) (<= (+ 1 x3) x2)) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0070.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0070.smt2 new file mode 100644 index 000000000..97ac69a00 --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0070.smt2 @@ -0,0 +1,41 @@ +;; Original file: enc-zip_unzip.smt2 +(set-logic HORN) +(declare-fun P3 (Int Int) Bool) +(declare-fun P4 (Int Int Int) Bool) +(declare-fun P2 (Int Int Int) Bool) +(declare-fun P0 (Int) Bool) +(declare-fun P1 (Int Int) Bool) +(declare-fun P13 (Int Int Int Int) Bool) +(declare-fun P5 (Int Int Int Int) Bool) +(declare-fun P7 (Int) Bool) +(declare-fun P6 (Int Int Int) Bool) +(declare-fun P8 (Int) Bool) +(declare-fun P9 (Int Int) Bool) +(declare-fun P10 (Int Int) Bool) +(declare-fun P11 (Int Int Int) Bool) +(declare-fun P12 (Int Int Int) Bool) +(assert (forall ((x1 Int) (x0 Int) (x4 Int) (x3 Int) (x2 Int)) (=> (and (P3 x2 x3) (P4 x2 x3 x4) (= x0 (+ 1 x4)) (= x1 (+ 1 x3))) (P0 x1)))) +(assert (forall ((x0 Int) (x1 Int) (x3 Int) (x4 Int) (x2 Int)) (=> (and (P3 x2 x3) (P4 x2 x3 x4) (= x0 (+ 1 x3)) (= x1 (+ 1 x4))) (P1 x0 x1)))) +(assert (forall ((x0 Int) (x1 Int) (x2 Int) (x5 Int) (x3 Int) (x4 Int)) (=> (and (P3 x0 x1) (P4 x0 x1 x2) (P2 x3 x4 x5) (= x3 (+ 1 x1)) (= x4 (+ 1 x2))) (P5 x0 x1 x2 x5)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (and (P7 x1) (= x1 0) (= x0 0)) (P10 x1 x0)))) +(assert (forall ((x2 Int) (x0 Int) (x1 Int)) (=> (and (P7 x2) (= x0 0) (= x1 0) (= x2 0)) (P11 x2 x0 x1)))) +(assert (forall ((x1 Int) (x0 Int) (x2 Int)) (=> (and (P7 x1) (P13 x1 0 0 x2) (= x1 0)) (P6 x1 x0 x2)))) +(assert (forall ((x1 Int) (x2 Int) (x0 Int)) (=> (and (P7 x1) (P0 x2) (or (< x1 0) (> x1 0)) (= x1 (+ 1 x0))) (P10 x1 x2)))) +(assert (forall ((x1 Int) (x2 Int) (x3 Int) (x0 Int)) (=> (and (P7 x1) (P0 x2) (P1 x2 x3) (or (< x1 0) (> x1 0)) (= x1 (+ 1 x0))) (P11 x1 x2 x3)))) +(assert (forall ((x2 Int) (x3 Int) (x4 Int) (x1 Int) (x0 Int)) (=> (and (P7 x1) (P0 x2) (P1 x2 x3) (P13 x1 x2 x3 x4) (or (< x1 0) (> x1 0)) (= x1 (+ 1 x0))) (P2 x2 x3 x4)))) +(assert (forall ((x0 Int) (x1 Int)) (=> (and (P7 x1) (or (< x1 0) (> x1 0)) (= x1 (+ 1 x0))) (P7 x0)))) +(assert (forall ((x0 Int) (x3 Int) (x1 Int) (x2 Int)) (=> (and (P7 x1) (P10 x2 x3) (or (< x1 0) (> x1 0)) (= x1 (+ 1 x2))) (P3 x0 x3)))) +(assert (forall ((x0 Int) (x3 Int) (x4 Int) (x1 Int) (x2 Int)) (=> (and (P7 x1) (P10 x2 x3) (P11 x2 x3 x4) (or (< x1 0) (> x1 0)) (= x1 (+ 1 x2))) (P4 x0 x3 x4)))) +(assert (forall ((x1 Int) (x3 Int) (x4 Int) (x5 Int) (x0 Int) (x2 Int)) (=> (and (P7 x0) (P10 x1 x3) (P11 x1 x3 x4) (P5 x2 x3 x4 x5) (or (< x0 0) (> x0 0)) (= x0 (+ 1 x1))) (P13 x1 x3 x4 x5)))) +(assert (forall ((x1 Int) (x0 Int) (x4 Int) (x2 Int) (x3 Int)) (=> (and (P7 x1) (P6 x2 x3 x4) (or (< x1 0) (> x1 0)) (= x1 (+ 1 x2))) (P6 x1 x0 x4)))) +(assert (forall ((x1 Int) (x2 Int) (x0 Int)) (=> (and (P8 x1) (P9 x1 x2) (= x0 0) (= x1 0) (= x2 0)) (P12 x1 x2 x0)))) +(assert (forall ((x1 Int) (x2 Int) (x3 Int) (x0 Int)) (=> (and (P8 x2) (P9 x2 x3) (or (< x2 0) (> x2 0)) (or (< x3 0) (> x3 0)) (= x3 (+ 1 x0)) (= x2 (+ 1 x1))) (P8 x1)))) +(assert (forall ((x0 Int) (x1 Int) (x2 Int) (x3 Int)) (=> (and (P8 x2) (P9 x2 x3) (or (< x2 0) (> x2 0)) (or (< x3 0) (> x3 0)) (= x2 (+ 1 x0)) (= x3 (+ 1 x1))) (P9 x0 x1)))) +(assert (forall ((x1 Int) (x2 Int) (x0 Int) (x3 Int) (x4 Int) (x5 Int)) (=> (and (P8 x1) (P9 x1 x2) (P12 x3 x4 x5) (or (< x1 0) (> x1 0)) (or (< x2 0) (> x2 0)) (= x1 (+ 1 x3)) (= x2 (+ 1 x4)) (= x0 (+ 1 x5))) (P12 x1 x2 x0)))) +(assert (forall ((x0 Int)) (=> true (P7 x0)))) +(assert (forall ((x1 Int) (x0 Int)) (=> (P10 x0 x1) (P8 x1)))) +(assert (forall ((x1 Int) (x2 Int) (x0 Int)) (=> (and (P10 x0 x1) (P11 x0 x1 x2)) (P9 x1 x2)))) +(assert (forall ((x0 Int) (x1 Int) (x2 Int) (x3 Int)) (=> (and (P10 x0 x1) (P11 x0 x1 x2) (P12 x1 x2 x3)) (P13 x0 x1 x2 x3)))) +(assert (forall ((x0 Int)) (=> (and (P8 0) (P9 0 x0) (or (< x0 0) (> x0 0))) false))) +(assert (forall ((x0 Int)) (=> (and (P8 x0) (P9 x0 0) (or (< x0 0) (> x0 0))) false))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0096.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0096.smt2 new file mode 100644 index 000000000..bc536f05c --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0096.smt2 @@ -0,0 +1,310 @@ +;; Original file: phi_60.smt2 +(set-logic HORN) +(declare-fun INV1 (Int Int Int Int Int Int Int Int Int Int ) Bool) +(declare-fun INV3 (Int Int Int ) Bool) +(declare-fun INV2 (Int Int Int Int Int Int Int Int Int Int ) Bool) +(declare-fun INV4 (Int Int Int ) Bool) + + +(assert (forall ((D Int) + (B Int) + (E Int) + (C Int) + (F Int) + (G Int) + (A Int) + (H Int) + (I Int) + (J Int) + (K Int) + (L Int)) + (let ((a!1 (not (>= (+ (- F G) (- 1)) 0)))) + (let ((a!2 (and (= (+ D (- 1)) B) + (= (+ E 1) C) + a!1 + (>= (+ (- A E) (- 1)) 0) + (INV1 F H G A D E I J K L) + (= I K) + (= J L)))) + (=> a!2 (INV3 A B C)))))) +(assert (forall ((F Int) + (D Int) + (E Int) + (A Int) + (C Int) + (K Int) + (L Int) + (B Int) + (M Int) + (G Int) + (H Int) + (I Int) + (J Int)) + (let ((a!1 (not (>= (+ (- F D) (- 1)) 0))) + (a!2 (not (>= (+ (- A C) (- 1)) 0)))) + (let ((a!3 (and a!1 + (INV3 D E F) + a!2 + (>= (+ (- K L) (- 1)) 0) + (INV1 A B C K M L G H I J) + (= G I) + (= H J)))) + (=> a!3 (INV1 A B C D E F G H I J)))))) +(assert (forall ((D Int) + (A Int) + (E Int) + (B Int) + (C Int) + (F Int) + (G Int) + (H Int) + (I Int) + (J Int) + (K Int) + (L Int) + (M Int) + (N Int) + (O Int)) + (let ((a!1 (not (>= (+ (- F G) (- 1)) 0)))) + (let ((a!2 (and (= (+ D 1) A) + (= (+ E 1) B) + (>= (+ (- C D) (- 1)) 0) + (INV3 D E C) + a!1 + (>= (+ (- H I) (- 1)) 0) + (INV1 F J G H K I L M N O) + (= L N) + (= M O)))) + (=> a!2 (INV3 A B C)))))) +(assert (forall ((K Int) + (B Int) + (L Int) + (C Int) + (M Int) + (E Int) + (N Int) + (F Int) + (A Int) + (D Int) + (G Int) + (H Int) + (I Int) + (J Int)) + (let ((a!1 (and (= (+ K (- 2) 1) B) + (= (+ L 1) C) + (= (+ M (- 1)) E) + (= (+ N 1) F) + (>= (+ (- A L) (- 1)) 0) + (>= (+ (- D N) (- 1)) 0) + (INV1 A K L D M N G H I J) + (= G I) + (= H J)))) + (=> a!1 (INV2 A B C D E F G H I J))))) +(assert (forall ((F Int) + (D Int) + (C Int) + (A Int) + (B Int) + (E Int) + (G Int) + (H Int) + (I Int) + (J Int) + (K Int) + (L Int) + (M Int) + (N Int) + (O Int) + (P Int)) + (let ((a!1 (not (>= (+ (- F D) (- 1)) 0))) + (a!2 (not (>= (+ (- C A) (- 1)) 0)))) + (let ((a!3 (and a!1 + a!2 + (INV2 A B C D E F G H I J) + (>= (+ (- K L) (- 1)) 0) + (>= (+ (- M N) (- 1)) 0) + (INV1 K O L M P N G H I J) + (= G I) + (= H J)))) + (=> a!3 (INV1 A B C D E F G H I J)))))) +(assert (forall ((K Int) + (D Int) + (L Int) + (E Int) + (F Int) + (C Int) + (A Int) + (B Int) + (G Int) + (H Int) + (I Int) + (J Int) + (M Int) + (N Int) + (O Int) + (P Int) + (Q Int) + (R Int)) + (let ((a!1 (not (>= (+ (- C A) (- 1)) 0)))) + (let ((a!2 (and (= (+ K 1) D) + (= (+ L 1) E) + (>= (+ (- F K) (- 1)) 0) + a!1 + (INV2 A B C K L F G H I J) + (>= (+ (- M N) (- 1)) 0) + (>= (+ (- O P) (- 1)) 0) + (INV1 M Q N O R P G H I J) + (= G I) + (= H J)))) + (=> a!2 (INV2 A B C D E F G H I J)))))) +(assert (forall ((K Int) + (A Int) + (L Int) + (B Int) + (M Int) + (D Int) + (N Int) + (E Int) + (F Int) + (C Int) + (G Int) + (H Int) + (I Int) + (J Int) + (O Int) + (P Int) + (Q Int) + (R Int) + (S Int) + (T Int)) + (let ((a!1 (and (= (+ K 2 (- 1)) A) + (= (+ L 1) B) + (= (+ M 1) D) + (= (+ N 1) E) + (>= (+ (- F M) (- 1)) 0) + (>= (+ (- C K) (- 1)) 0) + (INV2 K L C M N F G H I J) + (>= (+ (- O P) (- 1)) 0) + (>= (+ (- Q R) (- 1)) 0) + (INV1 O S P Q T R G H I J) + (= G I) + (= H J)))) + (=> a!1 (INV2 A B C D E F G H I J))))) +(assert (forall ((K Int) + (A Int) + (L Int) + (B Int) + (F Int) + (D Int) + (C Int) + (E Int) + (G Int) + (H Int) + (I Int) + (J Int) + (M Int) + (N Int) + (O Int) + (P Int) + (Q Int) + (R Int)) + (let ((a!1 (not (>= (+ (- F D) (- 1)) 0)))) + (let ((a!2 (and (= (+ K 2 (- 1)) A) + (= (+ L 1) B) + a!1 + (>= (+ (- C K) (- 1)) 0) + (INV2 K L C D E F G H I J) + (>= (+ (- M N) (- 1)) 0) + (>= (+ (- O P) (- 1)) 0) + (INV1 M Q N O R P G H I J) + (= G I) + (= H J)))) + (=> a!2 (INV2 A B C D E F G H I J)))))) +(assert (forall ((D Int) + (A Int) + (E Int) + (B Int) + (C Int) + (F Int) + (G Int) + (H Int) + (I Int) + (J Int) + (K Int) + (L Int) + (M Int) + (N Int) + (O Int)) + (let ((a!1 (not (>= (+ (- H I) (- 1)) 0)))) + (let ((a!2 (and (= (+ D 2 (- 1)) A) + (= (+ E 1) B) + (>= (+ (- C D) (- 1)) 0) + (INV4 D E C) + (>= (+ (- F G) (- 1)) 0) + a!1 + (INV1 F J G H K I L M N O) + (= L N) + (= M O)))) + (=> a!2 (INV4 A B C)))))) +(assert (forall ((C Int) + (A Int) + (B Int) + (K Int) + (L Int) + (D Int) + (F Int) + (M Int) + (E Int) + (G Int) + (H Int) + (I Int) + (J Int)) + (let ((a!1 (not (>= (+ (- C A) (- 1)) 0))) + (a!2 (not (>= (+ (- D F) (- 1)) 0)))) + (let ((a!3 (and a!1 + (INV4 A B C) + (>= (+ (- K L) (- 1)) 0) + a!2 + (INV1 K M L D E F G H I J) + (= G I) + (= H J)))) + (=> a!3 (INV1 A B C D E F G H I J)))))) +(assert (forall ((D Int) + (B Int) + (E Int) + (C Int) + (A Int) + (F Int) + (G Int) + (H Int) + (I Int) + (J Int) + (K Int) + (L Int)) + (let ((a!1 (not (>= (+ (- F G) (- 1)) 0)))) + (let ((a!2 (and (= (+ D (- 2) 1) B) + (= (+ E 1) C) + (>= (+ (- A E) (- 1)) 0) + a!1 + (INV1 A D E F H G I J K L) + (= I K) + (= J L)))) + (=> a!2 (INV4 A B C)))))) +(assert (forall ((A Int) + (B Int) + (C Int) + (D Int) + (E Int) + (F Int) + (G Int) + (H Int) + (I Int) + (J Int)) + (let ((a!1 (not (>= (+ (- C D) (- 1)) 0))) + (a!2 (not (>= (+ (- E F) (- 1)) 0)))) + (=> (and (not (= A B)) a!1 a!2 (INV1 C A D E B F G H I J) (= G I) (= H J)) + false)))) +(assert (forall ((C Int) (F Int) (A Int) (D Int) (B Int) (E Int)) + (let ((a!1 (and (= (* (- 1) C) 0) (= (* (- 1) F) 0) (= A D) (= B E)))) + (=> a!1 (INV1 A B C D E F A B D E))))) +(check-sat) diff --git a/bench_horn_nonlin/chc-lia-nonlin-0101.smt2 b/bench_horn_nonlin/chc-lia-nonlin-0101.smt2 new file mode 100644 index 000000000..eebcd971e --- /dev/null +++ b/bench_horn_nonlin/chc-lia-nonlin-0101.smt2 @@ -0,0 +1,352 @@ +;; Original file: kind_481.smt2 +(set-logic HORN) +(declare-fun bool6_reset (Bool Bool Bool Bool Bool Bool Bool Bool) Bool) +(declare-fun bool6_step + (Bool Bool Bool Bool Bool Bool Bool Bool Bool Bool) + Bool) +(declare-fun int6I_reset (Int Bool Int Bool) Bool) +(declare-fun int6I_step (Bool Bool Int Bool Int Bool) Bool) +(declare-fun top_reset + (Int Bool Bool Bool Bool Bool Int Bool Bool Bool Bool Bool) + Bool) +(declare-fun top_step + (Bool + Bool + Int + Bool + Bool + Bool + Bool + Bool + Int + Bool + Bool + Bool + Bool + Bool) + Bool) +(declare-fun INIT_STATE () Bool) +(declare-fun MAIN (Int Bool Bool Bool Bool Bool Bool) Bool) + +(assert (forall ((bool6.__bool6_2_m Bool) + (bool6.__bool6_2_c Bool) + (bool6.__bool6_3_m Bool) + (bool6.__bool6_3_c Bool) + (bool6.__bool6_4_m Bool) + (bool6.__bool6_4_c Bool) + (bool6.ni_3._arrow._first_m Bool) + (bool6.ni_3._arrow._first_c Bool)) + (=> (and (= bool6.__bool6_2_m bool6.__bool6_2_c) + (= bool6.__bool6_3_m bool6.__bool6_3_c) + (= bool6.__bool6_4_m bool6.__bool6_4_c) + (= bool6.ni_3._arrow._first_m true)) + (bool6_reset bool6.__bool6_2_c + bool6.__bool6_3_c + bool6.__bool6_4_c + bool6.ni_3._arrow._first_c + bool6.__bool6_2_m + bool6.__bool6_3_m + bool6.__bool6_4_m + bool6.ni_3._arrow._first_m)))) +(assert (forall ((bool6.ni_3._arrow._first_m Bool) + (bool6.ni_3._arrow._first_c Bool) + (bool6.__bool6_1 Bool) + (bool6.ni_3._arrow._first_x Bool) + (bool6.c Bool) + (bool6.__bool6_4_c Bool) + (bool6.__bool6_2_c Bool) + (bool6.__bool6_3_c Bool) + (bool6.a Bool) + (bool6.out Bool) + (bool6.b Bool) + (bool6.__bool6_4_x Bool) + (bool6.__bool6_3_x Bool) + (bool6.__bool6_2_x Bool) + (bool6.x Bool)) + (let ((a!1 (and (= bool6.c + (and bool6.__bool6_4_c + (not bool6.__bool6_2_c) + bool6.__bool6_3_c + bool6.__bool6_2_c)) + (= bool6.a (not bool6.__bool6_2_c)))) + (a!2 (= bool6.b + (or (and (not bool6.__bool6_4_c) + (not bool6.__bool6_3_c) + bool6.__bool6_2_c) + (and bool6.__bool6_3_c (not bool6.__bool6_2_c)))))) + (let ((a!3 (and (= bool6.ni_3._arrow._first_m bool6.ni_3._arrow._first_c) + (= bool6.__bool6_1 + (ite bool6.ni_3._arrow._first_m true false)) + (= bool6.ni_3._arrow._first_x false) + (or (not (= bool6.__bool6_1 false)) a!1) + (or (not (= bool6.__bool6_1 true)) + (and (= bool6.c false) (= bool6.a false))) + (= bool6.out (and bool6.a bool6.c)) + (or (not (= bool6.__bool6_1 true)) (= bool6.b false)) + (or (not (= bool6.__bool6_1 false)) a!2) + (= bool6.__bool6_4_x bool6.c) + (= bool6.__bool6_3_x bool6.b) + (= bool6.__bool6_2_x bool6.a)))) + (=> a!3 + (bool6_step bool6.x + bool6.out + bool6.__bool6_2_c + bool6.__bool6_3_c + bool6.__bool6_4_c + bool6.ni_3._arrow._first_c + bool6.__bool6_2_x + bool6.__bool6_3_x + bool6.__bool6_4_x + bool6.ni_3._arrow._first_x)))))) +(assert (forall ((int6I.__int6I_2_m Int) + (int6I.__int6I_2_c Int) + (int6I.ni_2._arrow._first_m Bool) + (int6I.ni_2._arrow._first_c Bool)) + (=> (and (= int6I.__int6I_2_m int6I.__int6I_2_c) + (= int6I.ni_2._arrow._first_m true)) + (int6I_reset int6I.__int6I_2_c + int6I.ni_2._arrow._first_c + int6I.__int6I_2_m + int6I.ni_2._arrow._first_m)))) +(assert (forall ((int6I.__int6I_3 Bool) + (int6I.__int6I_2_c Int) + (int6I.ni_2._arrow._first_m Bool) + (int6I.ni_2._arrow._first_c Bool) + (int6I.__int6I_1 Bool) + (int6I.ni_2._arrow._first_x Bool) + (int6I.time Int) + (int6I.out Bool) + (int6I.__int6I_2_x Int) + (int6I.x Bool)) + (let ((a!1 (and (or (not (= int6I.__int6I_3 true)) (= int6I.time 1)) + (or (not (= int6I.__int6I_3 false)) + (= int6I.time (- int6I.__int6I_2_c 1)))))) + (let ((a!2 (and (= int6I.__int6I_3 (= int6I.__int6I_2_c 5)) + (= int6I.ni_2._arrow._first_m int6I.ni_2._arrow._first_c) + (= int6I.__int6I_1 + (ite int6I.ni_2._arrow._first_m true false)) + (= int6I.ni_2._arrow._first_x false) + (or (not (= int6I.__int6I_1 true)) (= int6I.time 0)) + (or (not (= int6I.__int6I_1 false)) a!1) + (= int6I.out (= int6I.time 5)) + (= int6I.__int6I_2_x int6I.time)))) + (=> a!2 + (int6I_step int6I.x + int6I.out + int6I.__int6I_2_c + int6I.ni_2._arrow._first_c + int6I.__int6I_2_x + int6I.ni_2._arrow._first_x)))))) +(assert (forall ((top.ni_1.bool6.__bool6_2_c Bool) + (top.ni_1.bool6.__bool6_3_c Bool) + (top.ni_1.bool6.__bool6_4_c Bool) + (top.ni_1.bool6.ni_3._arrow._first_c Bool) + (top.ni_1.bool6.__bool6_2_m Bool) + (top.ni_1.bool6.__bool6_3_m Bool) + (top.ni_1.bool6.__bool6_4_m Bool) + (top.ni_1.bool6.ni_3._arrow._first_m Bool) + (top.ni_0.int6I.__int6I_2_c Int) + (top.ni_0.int6I.ni_2._arrow._first_c Bool) + (top.ni_0.int6I.__int6I_2_m Int) + (top.ni_0.int6I.ni_2._arrow._first_m Bool)) + (=> (and (bool6_reset top.ni_1.bool6.__bool6_2_c + top.ni_1.bool6.__bool6_3_c + top.ni_1.bool6.__bool6_4_c + top.ni_1.bool6.ni_3._arrow._first_c + top.ni_1.bool6.__bool6_2_m + top.ni_1.bool6.__bool6_3_m + top.ni_1.bool6.__bool6_4_m + top.ni_1.bool6.ni_3._arrow._first_m) + (int6I_reset top.ni_0.int6I.__int6I_2_c + top.ni_0.int6I.ni_2._arrow._first_c + top.ni_0.int6I.__int6I_2_m + top.ni_0.int6I.ni_2._arrow._first_m)) + (top_reset top.ni_0.int6I.__int6I_2_c + top.ni_0.int6I.ni_2._arrow._first_c + top.ni_1.bool6.__bool6_2_c + top.ni_1.bool6.__bool6_3_c + top.ni_1.bool6.__bool6_4_c + top.ni_1.bool6.ni_3._arrow._first_c + top.ni_0.int6I.__int6I_2_m + top.ni_0.int6I.ni_2._arrow._first_m + top.ni_1.bool6.__bool6_2_m + top.ni_1.bool6.__bool6_3_m + top.ni_1.bool6.__bool6_4_m + top.ni_1.bool6.ni_3._arrow._first_m)))) +(assert (forall ((top.ni_1.bool6.__bool6_2_m Bool) + (top.ni_1.bool6.__bool6_2_c Bool) + (top.ni_1.bool6.__bool6_3_m Bool) + (top.ni_1.bool6.__bool6_3_c Bool) + (top.ni_1.bool6.__bool6_4_m Bool) + (top.ni_1.bool6.__bool6_4_c Bool) + (top.ni_1.bool6.ni_3._arrow._first_m Bool) + (top.ni_1.bool6.ni_3._arrow._first_c Bool) + (top.x Bool) + (top.b Bool) + (top.ni_1.bool6.__bool6_2_x Bool) + (top.ni_1.bool6.__bool6_3_x Bool) + (top.ni_1.bool6.__bool6_4_x Bool) + (top.ni_1.bool6.ni_3._arrow._first_x Bool) + (top.ni_0.int6I.__int6I_2_m Int) + (top.ni_0.int6I.__int6I_2_c Int) + (top.ni_0.int6I.ni_2._arrow._first_m Bool) + (top.ni_0.int6I.ni_2._arrow._first_c Bool) + (top.a Bool) + (top.ni_0.int6I.__int6I_2_x Int) + (top.ni_0.int6I.ni_2._arrow._first_x Bool) + (top.OK Bool)) + (=> (and (= top.ni_1.bool6.__bool6_2_m top.ni_1.bool6.__bool6_2_c) + (= top.ni_1.bool6.__bool6_3_m top.ni_1.bool6.__bool6_3_c) + (= top.ni_1.bool6.__bool6_4_m top.ni_1.bool6.__bool6_4_c) + (= top.ni_1.bool6.ni_3._arrow._first_m + top.ni_1.bool6.ni_3._arrow._first_c) + (bool6_step top.x + top.b + top.ni_1.bool6.__bool6_2_m + top.ni_1.bool6.__bool6_3_m + top.ni_1.bool6.__bool6_4_m + top.ni_1.bool6.ni_3._arrow._first_m + top.ni_1.bool6.__bool6_2_x + top.ni_1.bool6.__bool6_3_x + top.ni_1.bool6.__bool6_4_x + top.ni_1.bool6.ni_3._arrow._first_x) + (= top.ni_0.int6I.__int6I_2_m top.ni_0.int6I.__int6I_2_c) + (= top.ni_0.int6I.ni_2._arrow._first_m + top.ni_0.int6I.ni_2._arrow._first_c) + (int6I_step top.x + top.a + top.ni_0.int6I.__int6I_2_m + top.ni_0.int6I.ni_2._arrow._first_m + top.ni_0.int6I.__int6I_2_x + top.ni_0.int6I.ni_2._arrow._first_x) + (= top.OK (= top.a top.b))) + (top_step top.x + top.OK + top.ni_0.int6I.__int6I_2_c + top.ni_0.int6I.ni_2._arrow._first_c + top.ni_1.bool6.__bool6_2_c + top.ni_1.bool6.__bool6_3_c + top.ni_1.bool6.__bool6_4_c + top.ni_1.bool6.ni_3._arrow._first_c + top.ni_0.int6I.__int6I_2_x + top.ni_0.int6I.ni_2._arrow._first_x + top.ni_1.bool6.__bool6_2_x + top.ni_1.bool6.__bool6_3_x + top.ni_1.bool6.__bool6_4_x + top.ni_1.bool6.ni_3._arrow._first_x)))) +(assert (=> true INIT_STATE)) +(assert (forall ((top.ni_0.int6I.__int6I_2_c Int) + (top.ni_0.int6I.ni_2._arrow._first_c Bool) + (top.ni_1.bool6.__bool6_2_c Bool) + (top.ni_1.bool6.__bool6_3_c Bool) + (top.ni_1.bool6.__bool6_4_c Bool) + (top.ni_1.bool6.ni_3._arrow._first_c Bool) + (top.ni_0.int6I.__int6I_2_m Int) + (top.ni_0.int6I.ni_2._arrow._first_m Bool) + (top.ni_1.bool6.__bool6_2_m Bool) + (top.ni_1.bool6.__bool6_3_m Bool) + (top.ni_1.bool6.__bool6_4_m Bool) + (top.ni_1.bool6.ni_3._arrow._first_m Bool) + (top.x Bool) + (top.OK Bool) + (top.ni_0.int6I.__int6I_2_x Int) + (top.ni_0.int6I.ni_2._arrow._first_x Bool) + (top.ni_1.bool6.__bool6_2_x Bool) + (top.ni_1.bool6.__bool6_3_x Bool) + (top.ni_1.bool6.__bool6_4_x Bool) + (top.ni_1.bool6.ni_3._arrow._first_x Bool)) + (=> (and INIT_STATE + (top_reset top.ni_0.int6I.__int6I_2_c + top.ni_0.int6I.ni_2._arrow._first_c + top.ni_1.bool6.__bool6_2_c + top.ni_1.bool6.__bool6_3_c + top.ni_1.bool6.__bool6_4_c + top.ni_1.bool6.ni_3._arrow._first_c + top.ni_0.int6I.__int6I_2_m + top.ni_0.int6I.ni_2._arrow._first_m + top.ni_1.bool6.__bool6_2_m + top.ni_1.bool6.__bool6_3_m + top.ni_1.bool6.__bool6_4_m + top.ni_1.bool6.ni_3._arrow._first_m) + (top_step top.x + top.OK + top.ni_0.int6I.__int6I_2_m + top.ni_0.int6I.ni_2._arrow._first_m + top.ni_1.bool6.__bool6_2_m + top.ni_1.bool6.__bool6_3_m + top.ni_1.bool6.__bool6_4_m + top.ni_1.bool6.ni_3._arrow._first_m + top.ni_0.int6I.__int6I_2_x + top.ni_0.int6I.ni_2._arrow._first_x + top.ni_1.bool6.__bool6_2_x + top.ni_1.bool6.__bool6_3_x + top.ni_1.bool6.__bool6_4_x + top.ni_1.bool6.ni_3._arrow._first_x)) + (MAIN top.ni_0.int6I.__int6I_2_x + top.ni_0.int6I.ni_2._arrow._first_x + top.ni_1.bool6.__bool6_2_x + top.ni_1.bool6.__bool6_3_x + top.ni_1.bool6.__bool6_4_x + top.ni_1.bool6.ni_3._arrow._first_x + top.OK)))) +(assert (forall ((top.ni_0.int6I.__int6I_2_c Int) + (top.ni_0.int6I.ni_2._arrow._first_c Bool) + (top.ni_1.bool6.__bool6_2_c Bool) + (top.ni_1.bool6.__bool6_3_c Bool) + (top.ni_1.bool6.__bool6_4_c Bool) + (top.ni_1.bool6.ni_3._arrow._first_c Bool) + (dummytop.OK Bool) + (top.x Bool) + (top.OK Bool) + (top.ni_0.int6I.__int6I_2_x Int) + (top.ni_0.int6I.ni_2._arrow._first_x Bool) + (top.ni_1.bool6.__bool6_2_x Bool) + (top.ni_1.bool6.__bool6_3_x Bool) + (top.ni_1.bool6.__bool6_4_x Bool) + (top.ni_1.bool6.ni_3._arrow._first_x Bool)) + (=> (and (MAIN top.ni_0.int6I.__int6I_2_c + top.ni_0.int6I.ni_2._arrow._first_c + top.ni_1.bool6.__bool6_2_c + top.ni_1.bool6.__bool6_3_c + top.ni_1.bool6.__bool6_4_c + top.ni_1.bool6.ni_3._arrow._first_c + dummytop.OK) + (top_step top.x + top.OK + top.ni_0.int6I.__int6I_2_c + top.ni_0.int6I.ni_2._arrow._first_c + top.ni_1.bool6.__bool6_2_c + top.ni_1.bool6.__bool6_3_c + top.ni_1.bool6.__bool6_4_c + top.ni_1.bool6.ni_3._arrow._first_c + top.ni_0.int6I.__int6I_2_x + top.ni_0.int6I.ni_2._arrow._first_x + top.ni_1.bool6.__bool6_2_x + top.ni_1.bool6.__bool6_3_x + top.ni_1.bool6.__bool6_4_x + top.ni_1.bool6.ni_3._arrow._first_x)) + (MAIN top.ni_0.int6I.__int6I_2_x + top.ni_0.int6I.ni_2._arrow._first_x + top.ni_1.bool6.__bool6_2_x + top.ni_1.bool6.__bool6_3_x + top.ni_1.bool6.__bool6_4_x + top.ni_1.bool6.ni_3._arrow._first_x + top.OK)))) +(assert (forall ((top.OK Bool) + (top.ni_0.int6I.__int6I_2_x Int) + (top.ni_0.int6I.ni_2._arrow._first_x Bool) + (top.ni_1.bool6.__bool6_2_x Bool) + (top.ni_1.bool6.__bool6_3_x Bool) + (top.ni_1.bool6.__bool6_4_x Bool) + (top.ni_1.bool6.ni_3._arrow._first_x Bool) + (ERR Bool)) + (=> (and (not top.OK) + (MAIN top.ni_0.int6I.__int6I_2_x + top.ni_0.int6I.ni_2._arrow._first_x + top.ni_1.bool6.__bool6_2_x + top.ni_1.bool6.__bool6_3_x + top.ni_1.bool6.__bool6_4_x + top.ni_1.bool6.ni_3._arrow._first_x + top.OK)) + false))) +(check-sat) diff --git a/bench_horn_nonlin/vacuity_22.smt2 b/bench_horn_nonlin/vacuity_22.smt2 new file mode 100644 index 000000000..2868ab08b --- /dev/null +++ b/bench_horn_nonlin/vacuity_22.smt2 @@ -0,0 +1,13 @@ +(declare-rel f (Int)) +(declare-rel g (Int)) + +(declare-var x Int) +(declare-var y Int) +(declare-var x1 Int) + +(declare-rel fail ()) + +(rule (=> (= x -10) (g x))) +(rule (=> (and (f x) (= x1 (+ x 1))) (f x1))) +(rule (=> (and (f x) (g y) (= x y)) fail)) +(query fail) diff --git a/include/ae/AeValSolver.hpp b/include/ae/AeValSolver.hpp index d7c9164b2..bc3cffcce 100644 --- a/include/ae/AeValSolver.hpp +++ b/include/ae/AeValSolver.hpp @@ -7,6 +7,7 @@ using namespace std; using namespace boost; +using namespace expr::op::bind; namespace ufo { @@ -462,7 +463,7 @@ namespace ufo Expr getDefaultAssignment(Expr var) { if (bind::isBoolConst(var)) return mk(efac); - if (bind::isIntConst(var)) return mkTerm (mpz_class (0), efac); + if (bind::isIntConst(var)) return mkMPZ(0, efac); else // that is, isRealConst(var) == true return mkTerm (mpq_class (0), efac); } @@ -473,10 +474,10 @@ namespace ufo Expr getPlusConst(Expr e, bool isInt, cpp_int c) { if (isOpX(e) && isInt) - return mkTerm (mpz_class (string (c + boost::lexical_cast (e))), efac); + return mkMPZ(c + boost::lexical_cast (e), efac); - Expr ce = isInt ? mkTerm (mpz_class (string(c)), efac) : - mkTerm (mpq_class (string(c)), efac); + Expr ce = isInt ? mkMPZ(c, efac) : + mkTerm (mpq_class (lexical_cast(c)), efac); return mk(e, ce); } @@ -704,7 +705,7 @@ namespace ufo } } }; - + /** * Simple wrapper */ @@ -714,16 +715,11 @@ namespace ufo SMTUtils u(efac); if (vars.size() == 0) return simplifyBool(cond); - if (containsOp(cond) || containsOp(cond)) - return mk(efac); + Expr newCond = simplifyArithm(simpleQE(cond, vars)); - Expr newCond = simpleQE(cond, vars); - if (isNonlinear(newCond)) { - newCond = simpleQE(newCond, vars); - if (!u.implies(cond, newCond)) { - return mk(efac); - } - } else { + if (!emptyIntersect(newCond, vars) && + !containsOp(cond) && !containsOp(cond) && !isNonlinear(newCond)) + { AeValSolver ae(mk(efac), newCond, vars); // exists quantified . formula if (ae.solve()) { newCond = ae.getValidSubset(); @@ -731,11 +727,27 @@ namespace ufo return mk(efac); } } - if (!emptyIntersect(newCond, vars)) // sanity check + + ExprSet cnj; + getConj(newCond, cnj); + ineqMerger(cnj, true); + + for (auto it = cnj.begin(); it != cnj.end(); ) { - return mk(efac); + ExprVector av; + filter (*it, bind::IsConst (), inserter(av, av.begin())); + map qv; + getQVars (*it, qv); + for (auto & a : qv) + for (auto & b : a.second) + for (auto it1 = av.begin(); it1 != av.end(); ) + if (*it1 == b) { it1 = av.erase(it1); break; } + else ++it1; + + if (emptyIntersect(av, vars)) ++it; + else it = cnj.erase(it); } - return simplifyBool(newCond); + return (conjoin(cnj, efac)); }; Expr abduce (Expr goal, Expr assm) diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index 6f5b8179a..95b22a76e 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -1,11 +1,11 @@ #ifndef EXPRSIMPL__HPP__ #define EXPRSIMPL__HPP__ #include -#include #include "ufo/Smt/EZ3.hh" using namespace std; +using namespace expr::op::bind; using namespace boost; using namespace boost::multiprecision; @@ -27,14 +27,14 @@ namespace ufo template static Expr mkplus(Range& terms, ExprFactory &efac){ return - (terms.size() == 0) ? mkTerm (mpz_class (0), efac) : + (terms.size() == 0) ? mkMPZ (0, efac) : (terms.size() == 1) ? *terms.begin() : mknary(terms); } template static Expr mkmult(Range& terms, ExprFactory &efac){ return - (terms.size() == 0) ? mkTerm (mpz_class (1), efac) : + (terms.size() == 0) ? mkMPZ (1, efac) : (terms.size() == 1) ? *terms.begin() : mknary(terms); } @@ -48,13 +48,13 @@ namespace ufo template static bool emptyIntersect(Expr a, Range& bv){ ExprVector av; - filter (a, bind::IsConst (), inserter(av, av.begin())); + filter (a, IsConst (), inserter(av, av.begin())); return emptyIntersect(av, bv); } inline static bool emptyIntersect(Expr a, Expr b){ ExprVector bv; - filter (b, bind::IsConst (), inserter(bv, bv.begin())); + filter (b, IsConst (), inserter(bv, bv.begin())); return emptyIntersect(a, bv); } @@ -104,13 +104,13 @@ namespace ufo inline static bool isNumeric(Expr a) { - return bind::typeOf(a) == mk(a->getFactory()); + return typeOf(a) == mk(a->getFactory()); } inline static void findComplexNumerics (Expr a, ExprSet &terms) { - if (bind::isIntConst(a) || isOpX(a)) return; - if (isNumeric(a)) + if (isIntConst(a) || isOpX(a)) return; + if (isNumeric(a) && !isOpX(a)) { bool hasNoNumeric = false; for (unsigned i = 0; i < a->arity(); i++) @@ -150,7 +150,7 @@ namespace ufo getMultOps(a->arg(i), ops); } } else if (isOpX(a) && isNumeric(a->left())){ - ops.push_back(mkTerm (mpz_class (-1), a->getFactory())); + ops.push_back(mkMPZ ((-1), a->getFactory())); ops.push_back(a->left()); } else { ops.push_back(a); @@ -164,7 +164,7 @@ namespace ufo if (isOpX(e)){ return e; } else { - return mk(mkTerm (mpz_class (1), e->getFactory()), e); + return mk(mkMPZ (1, e->getFactory()), e); } } @@ -249,7 +249,7 @@ namespace ufo } } - Expr num = mkTerm (mpz_class (string (-coef)), e->getFactory()); + Expr num = mkMPZ (-coef, e->getFactory()); if (rem.empty() || coef == 0) return num; Expr remTerm = mkmult(rem, e->getFactory()); @@ -283,7 +283,7 @@ namespace ufo } else if (isOpX(e)) { - return mkTerm (mpz_class (string (-lexical_cast(e))), e->getFactory()); + return mkMPZ(-lexical_cast(e), e->getFactory()); } else if (isOpX(e)){ string val = lexical_cast(e); @@ -297,7 +297,10 @@ namespace ufo return mkTerm (mpq_class (inv_val), e->getFactory()); } } -// return mk(mkTerm (mpz_class (-1), e->getFactory()), e); + else if (isOpX(e)){ + return mk(e->left(), additiveInverse(e->right()), additiveInverse(e->last())); + } +// return mk(mkMPZ ((-1), e->getFactory()), e); return mk(e); } @@ -305,30 +308,11 @@ namespace ufo * Commutativity in Addition */ inline static Expr exprSorted(Expr e){ - Expr res = e; - if (isOpX(e)) { - ExprSet expClauses; - for (auto it = e->args_begin(), end = e->args_end(); it != end; ++it){ - expClauses.insert(*it); - } - res = mkplus(expClauses, e->getFactory()); - } - - if (isOpX(e)) { - if (lexical_cast(e->left()) == "-1"){ - Expr l = e->right(); - - if (isOpX(l)) { - ExprSet expClauses; - for (auto it = l->args_begin(), end = l->args_end(); it != end; ++it){ - expClauses.insert(additiveInverse(*it)); - } - res = mkplus(expClauses, e->getFactory()); - } - } - } - - return res; + if (!isNumeric(e)) return e; + ExprVector addTrms; + getAddTerm(e, addTrms); + std::sort(addTrms.begin(), addTrms.end(), [](Expr& x, Expr& y) {return x < y;}); + return mkplus(addTrms, e->getFactory()); } /** @@ -345,7 +329,7 @@ namespace ufo if (lexical_cast(tmp->left()) > 0) return mk(tmp, additiveInverse(e->right())); - if (bind::isIntConst(tmp) || bind::isRealConst(tmp)) + if (isIntConst(tmp) || isRealConst(tmp)) return mk(tmp, additiveInverse(e->right())); return e; @@ -401,11 +385,11 @@ namespace ufo r = mkplus(rhs, e->getFactory()); if (coef == 0){ - l = mkTerm (mpz_class (0), e->getFactory()); + l = mkMPZ (0, e->getFactory()); } else if (coef == 1){ l = var; } else { - l = mk(mkTerm (mpz_class (string(coef)), e->getFactory()), var); + l = mk(mkMPZ(coef, e->getFactory()), var); } return mk(l,r); @@ -437,74 +421,28 @@ namespace ufo * (a <= b && a >= b) -> (a == b) */ inline static void ineqMerger(ExprSet& expClauses, bool clean = false){ - for (auto &e: expClauses){ - if (isOpX(e)){ - for (auto &e2: expClauses){ - if (isOpX(e2)){ - if (e->left() == e2->left()){ - Expr e1r = exprSorted(e->right()); - Expr e2r = exprSorted(e2->right()); - if ( e1r == e2r ){ - if (clean){ - expClauses.erase(e); - expClauses.erase(e2); - } - expClauses.insert(mk(e->left(), e1r)); - } - } - } - } - } - } - } - - /** - * Merge adjacent inequalities - * (a <= b && b <= a) -> (a == b) - */ - template static void ineqMergerSwap(ExprSet& expClauses, bool clean = false){ - for (auto &e: expClauses){ - if (isOpX(e)){ - for (auto &e2: expClauses){ - if (isOpX(e2)){ - if (e->left() == e2->right() && e->right() == e2->left()){ + vector tmp; + ExprSet newClauses; + for (auto it1 = expClauses.begin(); it1 != expClauses.end(); ++it1){ + if (isOpX(*it1)){ + for (auto it2 = expClauses.begin(); it2 != expClauses.end(); ++it2){ + if (isOpX(*it2)){ + Expr e1l = exprSorted(mk((*it1)->left(), (*it1)->right())); + Expr e2l = exprSorted(mk((*it2)->left(), (*it2)->right())); + if ( e1l == e2l ){ + newClauses.insert(mk(e1l, mkMPZ(0, e1l->getFactory()))); if (clean){ - expClauses.erase(e); - expClauses.erase(e2); - } - expClauses.insert(mk(e->left(), e->right())); - } - } - } - } - } - } - - /** - * Merge adjacent inequalities - * (a <= 0 && -a <= 0) -> (a == 0) - * (a >= 0 && -a >= 0) -> (a == 0) - */ - template static void ineqMergerSwapMinus(ExprSet& expClauses, bool clean = false){ - for (auto &e: expClauses){ - if (isOpX(e)){ - for (auto &e2: expClauses){ - if (isOpX(e2)){ - if (e->right() == e2->right() && e2->right() == mkTerm (mpz_class (0), e2->getFactory())){ - Expr l1 = exprSorted(additiveInverse(e->left())); - Expr l2 = exprSorted(e2->left()); - if (l1 == l2){ - if (clean){ - expClauses.erase(e); - expClauses.erase(e2); - } - expClauses.insert(mk(e->left(), e->right())); + tmp.push_back (it1); + tmp.push_back (it2); + break; } } } } } } + for (auto & it : tmp) expClauses.erase(it); + expClauses.insert(newClauses.begin(), newClauses.end()); } /** @@ -612,7 +550,7 @@ namespace ufo for (Expr cl : cnjs) substsMap.insert(ineqSimplifier(v, cl)); - if (merge) ineqMerger(substsMap); + if (merge) ineqMerger(substsMap, true); return conjoin(substsMap, v->getFactory()); } else if (isOp(exp)) @@ -793,7 +731,7 @@ namespace ufo cpp_int c = separateConst(plsOps); std::sort(plsOps.begin(), plsOps.end(), [](Expr& x, Expr& y) {return x < y;}); // GF: to write some kind of a fold-operator that counts the numbers of occurences - if (c != 0) plsOps.push_back(mkTerm (mpz_class (string(c)), exp->getFactory())); + if (c != 0) plsOps.push_back(mkMPZ(c, exp->getFactory())); return mkplus(plsOps, exp->getFactory()); } @@ -814,7 +752,7 @@ namespace ufo rem.push_back(a); } - Expr num = mkTerm (mpz_class (string (coef)), e->getFactory()); + Expr num = mkMPZ (coef, e->getFactory()); if (rem.empty() || coef == 0) return num; Expr remTerm = mkmult(rem, e->getFactory()); @@ -839,7 +777,7 @@ namespace ufo coef *= lexical_cast(a); if (coef % divider == 0) - return mkTerm (mpz_class (0), e->getFactory()); + return mkMPZ (0, e->getFactory()); } return e; } @@ -936,8 +874,8 @@ namespace ufo } } - if (constLeft != 0) plusOpsLeft.push_back(mkTerm (mpz_class (string (constLeft)), efac)); - if (constRight != 0) plusOpsRight.push_back(mkTerm (mpz_class (string (constRight)), efac)); + if (constLeft != 0) plusOpsLeft.push_back(mkMPZ(constLeft, efac)); + if (constRight != 0) plusOpsRight.push_back(mkMPZ(constRight, efac)); if (plusOpsLeft.size() == 0 && plusOpsRight.size() == 0) { @@ -965,7 +903,24 @@ namespace ufo return mk(efac); } - return reBuildCmp(exp, mkplus(plusOpsLeft, efac), mkplus(plusOpsRight, efac)); + Expr l = mkplus(plusOpsLeft, efac); + Expr r = mkplus(plusOpsRight, efac); + + // small ITE-optimization; to extend: + if (isOpX(exp) && isOpX(l) && isOpX(r) && + isOpX(l->right()) && isOpX(l->last()) && l->right() != l->last()) + { + if (l->right() == r) return l->left(); + if (l->left() == r) return mkNeg(l->left()); + } + else if (isOpX(exp) && isOpX(r) && isOpX(l) && + isOpX(r->right()) && isOpX(r->last()) && r->right() != r->last()) + { + if (r->right() == l) return r->left(); + if (r->left() == l) return mkNeg(r->left()); + } + + return reBuildCmp(exp, l, r); } // GF: to rewrite/remove @@ -1008,7 +963,7 @@ namespace ufo Expr ret = mk(a, b); if (a == b) { - ret = mkTerm (mpz_class (0), a->getFactory()); + ret = mkMPZ (0, a->getFactory()); } else if (isOpX(a)){ @@ -1029,22 +984,22 @@ namespace ufo } else if (isOpX(b)) { - if (b->left() == mkTerm (mpz_class (0), a->getFactory())) { + if (b->left() == mkMPZ (0, a->getFactory())) { ret = a; } else { ret = mk(a,b->left()); } } else - if (mkTerm (mpz_class (-1), a->getFactory()) == b) { - ret = simplifiedPlus(a, mkTerm (mpz_class (1), a->getFactory())); + if (mkMPZ ((-1), a->getFactory()) == b) { + ret = simplifiedPlus(a, mkMPZ (1, a->getFactory())); } else - if (b == mkTerm (mpz_class (0), a->getFactory())) { + if (b == mkMPZ (0, a->getFactory())) { ret = a; } else - if (a == mkTerm (mpz_class (0), a->getFactory())){ + if (a == mkMPZ (0, a->getFactory())){ if (isOpX(b)){ ret = b->left(); } @@ -1144,9 +1099,9 @@ namespace ufo if (isOpX(exp->right())) return mkNeg(exp->left()); - return simplifyBool(mk( - mkNeg(exp->left()), - exp->right())); +// return simplifyBool(mk( +// mkNeg(exp->left()), +// exp->right())); } if (isOpX(exp)) @@ -1314,7 +1269,7 @@ namespace ufo for (auto & c : splitted) { - if (bind::isBoolConst(c)) + if (isBoolConst(c)) { bool nothard = find(hardVars.begin(), hardVars.end(), c) == hardVars.end(); if (nothard) @@ -1330,7 +1285,7 @@ namespace ufo toInsert.insert(c); } } - else if (isOpX(c) && bind::isBoolConst(c->left())) + else if (isOpX(c) && isBoolConst(c->left())) { bool nothardLeft = find(hardVars.begin(), hardVars.end(), c->left()) == hardVars.end(); if (nothardLeft) @@ -1380,6 +1335,14 @@ namespace ufo } } + // is v1 a subset of v2? + template static bool isSubset(Range1& v1, Range2& v2){ + for (auto it = v1.begin(); it != v1.end(); ++it) + if (find(v2.begin(), v2.end(), *it) == v2.end()) + return false; + return true; + } + inline static bool isNumericConst(Expr e) { return isOpX(e) || isOpX(e); @@ -1423,7 +1386,20 @@ namespace ufo ExprVector tmp; getAddTerm(a->left(), tmp); for (auto & t : tmp) - terms.push_back(additiveInverse(t)); + { + bool toadd = true; + for (auto it = terms.begin(); it != terms.end(); ) + { + if (*it == t) + { + terms.erase(it); + toadd = false; + break; + } + else ++it; + } + if (toadd) terms.push_back(additiveInverse(t)); + } } else if (isOpX(a)) { @@ -1431,9 +1407,20 @@ namespace ufo if (tmp == a) terms.push_back(a); else getAddTerm(tmp, terms); } - else + else if (lexical_cast(a) != "0") { - terms.push_back(a); + bool found = false; + for (auto it = terms.begin(); it != terms.end(); ) + { + if (additiveInverse(*it) == a) + { + terms.erase(it); + found = true; + break; + } + else ++it; + } + if (!found) terms.push_back(a); } } @@ -1496,7 +1483,7 @@ namespace ufo for (auto & a : ops) { ExprVector av; - filter (a, bind::IsConst (), inserter(av, av.begin())); + filter (a, IsConst (), inserter(av, av.begin())); if (av.size() == 0) { linPart = linPart * lexical_cast(a); @@ -1518,19 +1505,19 @@ namespace ufo nonlinPart.push_back(a); } - if (linPart == 0) return mkTerm (mpz_class (0), t->getFactory()); + if (linPart == 0) return mkMPZ (0, t->getFactory()); if (nonlinPart.size() <= 1) return t; Expr multedVars = mkmult(nonlinPart, t->getFactory()); if (extraVars[multedVars] == NULL) { Expr new_name = mkTerm ("__e__" + to_string(extraVars.size()), t->getFactory()); - Expr var = bind::intConst(new_name); + Expr var = intConst(new_name); extraVars[multedVars] = var; } if (linPart == 1) return extraVars[multedVars]; - else return mk( mkTerm (mpz_class (string(linPart)), t->getFactory()), extraVars[multedVars]); + else return mk( mkMPZ(linPart, t->getFactory()), extraVars[multedVars]); } else if (isOpX(t) || isOpX(t) || isOpX
(t)) { @@ -1542,12 +1529,12 @@ namespace ufo if (indr >= 0) key = replaceAll(key, t->right(), vars[indr]); if (isOpX(t->left()) && lexical_cast(t->left()) == 0) - return mkTerm (mpz_class (0), t->getFactory()); + return mkMPZ (0, t->getFactory()); if (extraVars[key] == NULL) { Expr new_name = mkTerm ("__e__" + to_string(extraVars.size()), t->getFactory()); - Expr var = bind::intConst(new_name); + Expr var = intConst(new_name); extraVars[key] = var; } return extraVars[key]; @@ -1581,7 +1568,7 @@ namespace ufo for (unsigned j = 0; j < exp->arity(); j++) { Expr q = exp->arg(j); - if (bind::isIntConst(q)) v++; // GF: a simple counter, to extend + if (isIntConst(q)) v++; // GF: a simple counter, to extend } if (v > 1) @@ -1601,34 +1588,6 @@ namespace ufo return fn.found; } - struct FindArray : public std::unary_function - { - bool found; - - FindArray () : found (false) {} - - VisitAction operator() (Expr exp) - { - if (found) - { - return VisitAction::skipKids (); - } - else if (bind::isConst (exp)) - { - found = true; - return VisitAction::skipKids (); - } - return VisitAction::doKids (); - } - }; - - inline bool findArray (Expr e1) - { - FindArray fn; - dagVisit (fn, e1); - return fn.found; - } - inline static Expr simplifiedAnd (Expr a, Expr b){ ExprSet conjs; getConj(a, conjs); @@ -1664,7 +1623,7 @@ namespace ufo int maxConjs = 0; ExprSet disjs; getDisj(exp, disjs); - if (disjs.size() == 1) + if (disjs.size() <= 1) return disjoin(disjs, exp->getFactory()); vector dconjs; @@ -1705,24 +1664,23 @@ namespace ufo inline static Expr cloneVar(Expr var, Expr new_name) // ... and give a new_name to the clone { - if (bind::isIntConst(var)) - return bind::intConst(new_name); - else if (bind::isRealConst(var)) - return bind::realConst(new_name); - else if (bind::isBoolConst(var)) - return bind::boolConst(new_name); - else if (bind::isConst (var)) - return bind::mkConst(new_name, mk ( + if (isIntConst(var)) + return intConst(new_name); + else if (isRealConst(var)) + return realConst(new_name); + else if (isBoolConst(var)) + return boolConst(new_name); + else if (isConst (var)) + return mkConst(new_name, mk ( mk (new_name->getFactory()), mk (new_name->getFactory()))); // GF: currently, only Arrays over Ints else return NULL; } - inline static bool hasBoolSort(Expr e) + inline static bool isBool(Expr e) { - if (bind::isBoolConst(e) || isOp(e)) return true; - return false; + return typeOf(e) == mk(e->getFactory()); } inline static Expr convertToGEandGT(Expr fla) @@ -1738,7 +1696,7 @@ namespace ufo if (isOpX(fla)) { - if (hasBoolSort(lhs)) return + if (isBool(lhs)) return mk(mk(lhs, rhs), mk(mkNeg(lhs), mkNeg(rhs))); else if (isNumeric(lhs)) return mk( @@ -1748,7 +1706,7 @@ namespace ufo if (isOpX(fla)) { - if (hasBoolSort(lhs)) return + if (isBool(lhs)) return mk(mk(lhs, mkNeg(rhs)), mk(mkNeg(lhs), rhs)); else if (isNumeric(lhs)) return mk( @@ -1858,7 +1816,7 @@ namespace ufo inline static Expr unfoldITE(Expr term) { - if (isOpX(term)) + if (isOpX(term) && isBool (term->last())) { Expr iteCond = unfoldITE (term->arg(0)); Expr iteC1 = unfoldITE (term->arg(1)); @@ -2185,7 +2143,7 @@ namespace ufo if (isOpX(exp) || isOpX(exp)) && !findArray(exp->right())) + if ((isOpX(s)) continue; s = replaceAll(s, iterator, qVar); ExprVector args; @@ -894,23 +992,14 @@ namespace ufo if (newRange == NULL) continue; - ExprSet vvv; - filter (s, bind::IsConst (), inserter (vvv, vvv.begin())); // prepare vars - for (auto c : cnjs) - { - // naive prop through equalities; works only for some benchs; TODO: extend - if (!isOpX(c)) continue; - if (find(vvv.begin(), vvv.end(), c->left()) != vvv.end()) s = replaceAll(s, c->left(), c->right()); - else if (find(vvv.begin(), vvv.end(), c->right()) != vvv.end()) s = replaceAll(s, c->right(), c->left()); - } - ExprVector args; args.push_back(qVar->left()); args.push_back(mk(newRange, s)); - Expr newCand = mknary(args); + Expr newCand = getForallCnj( + simpleQE( + mk(hr2.body,mknary(args)), hr2.srcVars[0])); newCand = replaceAll(newCand, hr2.dstVars, ruleManager.invVars[hr2.dstRelation]); - // finally, try the propagated guess: candidates[hr2.dstRelation].insert(newCand); } @@ -946,6 +1035,15 @@ namespace ufo } } + Expr getForallCnj (Expr cands) + { + ExprSet cnj; + getConj(cands, cnj); + for (auto & cand : cnj) + if (isOpX(cand)) return cand; + return NULL; + } + bool equalCands(map& cands) { for (auto & a : candidates) @@ -970,6 +1068,11 @@ namespace ufo auto candidatesTmp = candidates; for (bool fwd : { false, true }) { + if (debug) + { + outs () << "iter " << globalIter << "." << fwd << "\nCurrent candidates:\n"; + printCands(false); + } declsVisited.clear(); declsVisited.insert(ruleManager.failDecl); propagate(fwd); @@ -979,6 +1082,7 @@ namespace ufo if (checkAllOver(true)) return printCands(); } if (equalCands(candidatesTmp)) break; + if (hasArrays) break; // just one iteration is enough for arrays (for speed) } getImplicationGuesses(candidates); // seems broken now; to revisit completely @@ -1082,13 +1186,13 @@ namespace ufo } }; - inline void solveNonlin(string smt, bool inv = true) + inline void solveNonlin(string smt, bool inv, int stren) { ExprFactory m_efac; EZ3 z3(m_efac); CHCs ruleManager(m_efac, z3); ruleManager.parse(smt); - NonlinCHCsolver nonlin(ruleManager); + NonlinCHCsolver nonlin(ruleManager, stren); if (inv) nonlin.guessAndSolve(); else diff --git a/include/ufo/Expr.hpp b/include/ufo/Expr.hpp index 94e81d76d..21189acd0 100644 --- a/include/ufo/Expr.hpp +++ b/include/ufo/Expr.hpp @@ -49,6 +49,7 @@ DM-0002198 #include #include #include +#include #define mk_it_range boost::make_iterator_range @@ -2312,6 +2313,7 @@ namespace expr return rangeTy (v->left ()); } + if (isOpX(v)) return typeOf(v->last()); if (isOp(v) || isOp (v)) return mk (v->efac ()); if (isOpX (v)) return mk (v->efac ()); if (isOpX (v)) return mk (v->efac ()); @@ -2326,19 +2328,28 @@ namespace expr return mk (v->efac ()); if (isOp(v)) return typeOf(v->left()); - if (isOpX(v)) return typeOf(v->last()); if (isOpX(v)) return sort::arrayTy(typeOf(v->right()), typeOf(v->last())); if (isOpX(exp)) + { + if (isOpX(exp->left()) && exp->right() == exp->left()->right()) + { + return exp->left()->last(); + } + if (isOpX(exp->left()) && // exp->right() != exp->left()->right() && + bind::typeOf(exp->left())->last() == mk (exp->efac ())) + { + return mk( + mk(mk(exp->right(), exp->left()->right()), + exp->left()->last()), + mk(mk(exp->right(), exp->left()->right()), + mk(exp->right(), exp->left()->right()), exp->left()->last())); + } + if (isOpX(exp->right()) && exp->left() == exp->right()->left()) + { + return simplifyArr(mk(mk(exp->left()) && isOpX(exp->left()->left()) && + exp->right() == exp->left()->left()->last()) + { + return mk( + mk(exp->left()->right(), exp->left()->left()->right()), + mk(mk(exp->right()) && isOpX(exp->right()->left()) && + exp->left() == exp->right()->left()->last()) + { + return mk( + mk(exp->right()->right(), exp->right()->left()->right()), + mk(mk(exp->right())) + { + Expr cmp = simplifyCmp(mk(ind, exp->right()->right())); + return simplifyIte(mk(cmp, + mk(efac), exp)); + } + return exp; + } + }; + inline static Expr rewriteSelectStore(Expr exp); struct SelectStoreRewriter @@ -2115,19 +2238,28 @@ namespace ufo return mk(mk(exp->right(), exp->left()->right()), exp->left()->last(), mk(exp->left(), exp->right()->right()))); - return conjoin (tmp, exp->getFactory()); + if (isOpX(exp->right())) { sel = exp->right(); val = exp->left(); } + if (isOpX(exp->left())) { sel = exp->left(); val = exp->right(); } } - if (isOpX(exp) && isOpX(exp->left())) + + if (sel != NULL) { - ExprSet tmp; - tmp.insert(rewriteSelectStore(mk(exp->right(), exp->left()->left()))); - tmp.insert(mk(exp->left()->last(), mk(val, sel->right())); + if (containsOp(sel->left())) + { + Expr nested = rewriteSelectStore(mk(val, sel->left())); + RW + a(new SelectStoreRewriterHelpRepairer(sel->right())); + return mk(dagVisit (a, nested), main); + } + return main; } return exp; } @@ -2202,6 +2334,8 @@ namespace ufo for (auto & var : quantified) { ExprSet eqs; + Expr store; // todo: extend to ExprSet + for (unsigned it = 0; it < cnjs.size(); ) { Expr cnj = cnjs[it]; @@ -2240,6 +2374,13 @@ namespace ufo } } + if (store == NULL && containsOp(normalized) && isOpX(normalized) && + emptyIntersect(normalized->left(), quantified) && + isOpX(normalized->right()) && var == normalized->right()->left()) { + // one level of storing (to be extended) + store = normalized; + } + // errs() << "WARNING: COULD NOT NORMALIZE w.r.t. " << *var << ": " // << *normalized << " [[ " << *cnj << " ]]\n"; @@ -2247,6 +2388,24 @@ namespace ufo it++; } + if (store != NULL) { + // assume "store" = (A = store(var, x, y)) + for (unsigned it = 0; it < cnjs.size(); it++) { + ExprVector se; + filter (cnjs[it], IsSelect (), inserter(se, se.begin())); + for (auto s : se) { + if (contains(store, s)) continue; + if (s->left() == var) { + Expr cmp = simplifyCmp(mk(store->right()->right(), s->right())); + cnjs[it] = replaceAll(cnjs[it], s, simplifyIte( + mk(cmp, + store->right()->last(), + mk(a) || isOpX(a)){ - cntrs.push_back(a->right()); - } else { - for (unsigned i = 0; i < a->arity(); i++) - getCounters(a->arg(i), cntrs); - } - } - - inline static bool isNumeric(Expr a) - { - return typeOf(a) == mk(a->getFactory()); - } - - inline static void findComplexNumerics (Expr a, ExprSet &terms) - { - if (isIntConst(a) || isOpX(a)) return; - if (isNumeric(a) && !isOpX(a)) - { - bool hasNoNumeric = false; - for (unsigned i = 0; i < a->arity(); i++) - if (!isNumeric(a->arg(i))) hasNoNumeric = true; - if (hasNoNumeric) - { - terms.insert(a); - return; - } - } - for (unsigned i = 0; i < a->arity(); i++) - findComplexNumerics(a->arg(i), terms); - } - - inline static void getArrIneqs (Expr a, ExprSet &ineqs) - { - if (isOp(a) && containsOp(a) || isOpX(a)) + && !containsOp(a)){ + if (isOpX(a) && isNumeric(a->left())) + { + ineqs.insert(mk(a->left(), a->right())); + ineqs.insert(mk(a->left(), a->right())); + } + else + { + ineqs.insert(a); + } + } else { + for (unsigned i = 0; i < a->arity(); i++) + getArrIneqs(a->arg(i), ineqs); + } + } + + inline static void getChainOfStores (Expr a, ExprSet &stores) + { + if (isOpX(a)) + { + stores.insert(a); + getChainOfStores(a->left(), stores); + } + else if (isOpX(a)) + { + for (unsigned i = 1; i <= 2; i++) + getChainOfStores(a->arg(i), stores); + } } - else if (isOpX(e)) + + inline static void getMultOps (Expr a, ExprVector &ops) { - return mkMPZ(-lexical_cast(e), e->getFactory()); + if (isOpX(a)){ + for (unsigned i = 0; i < a->arity(); i++){ + getMultOps(a->arg(i), ops); + } + } else if (isOpX(a) && isNumeric(a->left())){ + ops.push_back(mkMPZ ((-1), a->getFactory())); + ops.push_back(a->left()); + } else { + ops.push_back(a); + } } - else if (isOpX(e)){ - string val = lexical_cast(e); - int delim = val.find("/"); - int val1 = stoi(val.substr(0, delim)); - int val2 = stoi(val.substr(delim + 1)); - if (delim < 0) { - return mkTerm (mpq_class (-val1), e->getFactory()); - } else { - string inv_val = to_string(-val1) + "/" + to_string(val2); - return mkTerm (mpq_class (inv_val), e->getFactory()); - } + + /** + * Represent Expr as multiplication + */ + inline static Expr mult(Expr e){ + if (isOpX(e)){ + return e; + } else { + return mk(mkMPZ (1, e->getFactory()), e); + } } - else if (isOpX(e)){ - return mk(e->left(), additiveInverse(e->right()), additiveInverse(e->last())); + + /** + * Represent Zero as multiplication + */ + inline static Expr multZero(Expr e, Expr multiplier){ + if (lexical_cast(e) == "0") + return mk(multiplier, e); + else return e; } + + /** + * Rewrites distributivity rule: + * a*b + a*c -> a*(b + c) + * (assume, all common multipliers might be only in the first place) + */ + inline static Expr exprDistributor(Expr e){ + if (e->arity () == 0) return e; + Expr multiplier = mult(e->arg(0)); + ExprSet newE; + newE.insert(multiplier->right()); + multiplier = multiplier->left(); + + for (unsigned i = 1; i < e->arity (); i++){ + Expr a = mult(e->arg(i)); + if (isOpX(a)){ + if (a->left() == multiplier){ + newE.insert(a->right()); + } else { + return e; + } + } else { + return e; + } + } + if (isOpX(e)){ + return mk(multiplier, mknary(newE)); + } + return e; + } + + /** + * Self explanatory + */ + inline static bool isConstOrItsAdditiveInverse(Expr e, Expr var){ + if (e == var) { + return true; + } + if (isOpX(e)){ + if (lexical_cast(e->left()) == "-1" && e->right() == var){ + return true; + } + } + + return false; + } + + static void getAddTerm (Expr a, ExprVector &terms); + + /** + * Self explanatory + */ + inline static Expr additiveInverse(Expr e) + { + if (isOpX(e)) + { + cpp_int coef = 1; + ExprVector ops; + getMultOps (e, ops); + + ExprVector rem; + for (auto & a : ops) + { + if (isOpX(a)) + { + coef *= lexical_cast(a); + } + else + { + rem.push_back(a); + } + } + + Expr num = mkMPZ (-coef, e->getFactory()); + if (rem.empty() || coef == 0) return num; + + Expr remTerm = mkmult(rem, e->getFactory()); + if (coef == -1) return remTerm; + + return mk(num, remTerm); + } + else if (isOpX(e)) + { + ExprVector terms; + for (auto it = e->args_begin (), end = e->args_end (); it != end; ++it) + { + getAddTerm(additiveInverse(*it), terms); + } + return mkplus(terms, e->getFactory()); + } + else if (isOpX(e)) + { + ExprVector terms; + getAddTerm(additiveInverse(*e->args_begin ()), terms); + auto it = e->args_begin () + 1; + for (auto end = e->args_end (); it != end; ++it) + { + getAddTerm(*it, terms); + } + return mkplus(terms, e->getFactory()); + } + else if (isOpX(e)) + { + return e->left(); + } + else if (isOpX(e)) + { + return mkMPZ(-lexical_cast(e), e->getFactory()); + } + else if (isOpX(e)){ + string val = lexical_cast(e); + int delim = val.find("/"); + int val1 = stoi(val.substr(0, delim)); + int val2 = stoi(val.substr(delim + 1)); + if (delim < 0) { + return mkTerm (mpq_class (-val1), e->getFactory()); + } else { + string inv_val = to_string(-val1) + "/" + to_string(val2); + return mkTerm (mpq_class (inv_val), e->getFactory()); + } + } + else if (isOpX(e)){ + return mk(e->left(), additiveInverse(e->right()), additiveInverse(e->last())); + } // return mk(mkMPZ ((-1), e->getFactory()), e); - return mk(e); - } + return mk(e); + } - /** + /** * Commutativity in Addition */ - inline static Expr exprSorted(Expr e){ - if (!isNumeric(e)) return e; - ExprVector addTrms; - getAddTerm(e, addTrms); - std::sort(addTrms.begin(), addTrms.end(), [](Expr& x, Expr& y) {return x < y;}); - return mkplus(addTrms, e->getFactory()); - } - - /** + inline static Expr exprSorted(Expr e){ + if (!isNumeric(e)) return e; + ExprVector addTrms; + getAddTerm(e, addTrms); + std::sort(addTrms.begin(), addTrms.end(), [](Expr& x, Expr& y) {return x < y;}); + return mkplus(addTrms, e->getFactory()); + } + + /** * Helper used in ineqReverter */ - template static Expr rewriteHelperN(Expr e){ - assert(e->arity() == 2); - Expr tmp = additiveInverse(e->left()); - if (isOpX(e->left())) - return mk(additiveInverse(e->left()), additiveInverse(e->right())); + template static Expr rewriteHelperN(Expr e){ + assert(e->arity() == 2); + Expr tmp = additiveInverse(e->left()); + if (isOpX(e->left())) + return mk(additiveInverse(e->left()), additiveInverse(e->right())); - if (isOpX(tmp)) - if (isOpX(tmp->left())) - if (lexical_cast(tmp->left()) > 0) - return mk(tmp, additiveInverse(e->right())); + if (isOpX(tmp)) + if (isOpX(tmp->left())) + if (lexical_cast(tmp->left()) > 0) + return mk(tmp, additiveInverse(e->right())); - if (isIntConst(tmp) || isRealConst(tmp)) - return mk(tmp, additiveInverse(e->right())); + if (isIntConst(tmp) || isRealConst(tmp)) + return mk(tmp, additiveInverse(e->right())); - return e; - } + return e; + } - /** + /** * Helper used in ineqMover */ - template static Expr rewriteHelperM(Expr e, Expr var){ - Expr l = e->left(); - Expr r = e->right(); - ExprVector orig_lhs, orig_rhs, lhs, rhs; + template static Expr rewriteHelperM(Expr e, Expr var){ + Expr l = e->left(); + Expr r = e->right(); + ExprVector orig_lhs, orig_rhs, lhs, rhs; - // parse + // parse - getAddTerm(l, orig_lhs); - getAddTerm(r, orig_rhs); - for (auto & a : orig_lhs) - { - if (contains (a, var)) lhs.push_back(a); - else rhs.push_back(additiveInverse(a)); - } - for (auto & a : orig_rhs) - { - if (contains (a, var)) lhs.push_back(additiveInverse(a)); - else rhs.push_back(a); - } + getAddTerm(l, orig_lhs); + getAddTerm(r, orig_rhs); + for (auto & a : orig_lhs) + { + if (contains (a, var)) lhs.push_back(a); + else rhs.push_back(additiveInverse(a)); + } + for (auto & a : orig_rhs) + { + if (contains (a, var)) lhs.push_back(additiveInverse(a)); + else rhs.push_back(a); + } - // combine results + // combine results - cpp_int coef = 0; - for (auto it = lhs.begin(); it != lhs.end(); ) - { - bool found = false; - if (*it == var) { coef++; found = true; } - if (isOpX(*it) && (*it)->left() == var) { coef--; found = true; } - if (isOpX(*it) && 2 == (*it)->arity() && isOpX((*it)->left()) && (*it)->right() == var) { - coef += lexical_cast((*it)->left()); - found = true; - } + cpp_int coef = 0; + for (auto it = lhs.begin(); it != lhs.end(); ) + { + bool found = false; + if (*it == var) { coef++; found = true; } + if (isOpX(*it) && (*it)->left() == var) { coef--; found = true; } + if (isOpX(*it) && 2 == (*it)->arity() && isOpX((*it)->left()) && (*it)->right() == var) { + coef += lexical_cast((*it)->left()); + found = true; + } - if (found) { it = lhs.erase(it); continue; } - else ++it; - } + if (found) { it = lhs.erase(it); continue; } + else ++it; + } - if (!lhs.empty()) - { + if (!lhs.empty()) + { // errs() << "WARNING: COULD NOT NORMALIZE w.r.t. " << *var << ": " // << *conjoin (lhs, e->getFactory()) << "\n"; - return e; - } + return e; + } - r = mkplus(rhs, e->getFactory()); + r = mkplus(rhs, e->getFactory()); - if (coef == 0){ - l = mkMPZ (0, e->getFactory()); - } else if (coef == 1){ - l = var; - } else { - l = mk(mkMPZ(coef, e->getFactory()), var); - } + if (coef == 0){ + l = mkMPZ (0, e->getFactory()); + } else if (coef == 1){ + l = var; + } else { + l = mk(mkMPZ(coef, e->getFactory()), var); + } - return mk(l,r); - } + return mk(l,r); + } - /** + /** * Helper used in exprMover */ - template static Expr rewriteHelperE(Expr e, Expr var){ - assert(e->arity() == 2); - Expr l = e->left(); - Expr r = e->right(); - if (r == var) { - l = exprSorted(l); - return mk(r, l); - } + template static Expr rewriteHelperE(Expr e, Expr var){ + assert(e->arity() == 2); + Expr l = e->left(); + Expr r = e->right(); + if (r == var) { + l = exprSorted(l); + return mk(r, l); + } - if (isOpX(r)){ - if (r->left() == var || r->right() == var){ - l = exprSorted(l); - return mk(r, l); - } + if (isOpX(r)){ + if (r->left() == var || r->right() == var){ + l = exprSorted(l); + return mk(r, l); + } + } + return e; } - return e; - } - /** + /** * Merge adjacent inequalities * (a <= b && a >= b) -> (a == b) */ - inline static void ineqMerger(ExprSet& expClauses, bool clean = false){ - vector tmp; - ExprSet newClauses; - for (auto it1 = expClauses.begin(); it1 != expClauses.end(); ++it1){ - if (isOpX(*it1)){ - for (auto it2 = expClauses.begin(); it2 != expClauses.end(); ++it2){ - if (isOpX(*it2)){ - Expr e1l = exprSorted(mk((*it1)->left(), (*it1)->right())); - Expr e2l = exprSorted(mk((*it2)->left(), (*it2)->right())); - if ( e1l == e2l ){ - newClauses.insert(mk(e1l, mkMPZ(0, e1l->getFactory()))); - if (clean){ - tmp.push_back (it1); - tmp.push_back (it2); - break; - } + inline static void ineqMerger(ExprSet& expClauses, bool clean = false){ + vector tmp; + ExprSet newClauses; + for (auto it1 = expClauses.begin(); it1 != expClauses.end(); ++it1){ + if (isOpX(*it1)){ + for (auto it2 = expClauses.begin(); it2 != expClauses.end(); ++it2){ + if (isOpX(*it2)){ + Expr e1l = exprSorted(mk((*it1)->left(), (*it1)->right())); + Expr e2l = exprSorted(mk((*it2)->left(), (*it2)->right())); + if ( e1l == e2l ){ + newClauses.insert(mk(e1l, mkMPZ(0, e1l->getFactory()))); + if (clean){ + tmp.push_back (it1); + tmp.push_back (it2); + break; + } + } + } + } } - } } - } + for (auto & it : tmp) expClauses.erase(it); + expClauses.insert(newClauses.begin(), newClauses.end()); } - for (auto & it : tmp) expClauses.erase(it); - expClauses.insert(newClauses.begin(), newClauses.end()); - } - /** + /** * Trivial simplifier: * (-1*a <= -1*b) -> (a >= b) * (-1*a >= -1*b) -> (a <= b) * (-1*a == -1*b) -> (a == b) */ - inline static Expr ineqReverter(Expr e){ - if (isOpX(e)){ - return rewriteHelperN(e); - } else if (isOpX(e)){ - return rewriteHelperN(e); - } else if (isOpX(e)){ - return rewriteHelperN(e); - } else if (isOpX(e)){ - return rewriteHelperN(e); - } else if (isOpX(e)){ - return rewriteHelperN(e); - } else if (isOpX(e)){ - return rewriteHelperN(e); - } - return e; - } - - inline static Expr ineqNegReverter(Expr a){ - if (isOpX(a)){ - Expr e = a->arg(0); - if (isOpX(e)){ - return mk(e->arg(0), e->arg(1)); - } else if (isOpX(e)){ - return mk(e->arg(0), e->arg(1)); - } else if (isOpX(e)){ - return mk(e->arg(0), e->arg(1)); - } else if (isOpX(e)){ - return mk(e->arg(0), e->arg(1)); - } else if (isOpX(e)){ - return mk(e->arg(0), e->arg(1)); - } else if (isOpX(e)){ - return mk(e->arg(0), e->arg(1)); - } - } - return a; - } - - /** + inline static Expr ineqReverter(Expr e){ + if (isOpX(e)){ + return rewriteHelperN(e); + } else if (isOpX(e)){ + return rewriteHelperN(e); + } else if (isOpX(e)){ + return rewriteHelperN(e); + } else if (isOpX(e)){ + return rewriteHelperN(e); + } else if (isOpX(e)){ + return rewriteHelperN(e); + } else if (isOpX(e)){ + return rewriteHelperN(e); + } + return e; + } + + inline static Expr ineqNegReverter(Expr a){ + if (isOpX(a)){ + Expr e = a->arg(0); + if (isOpX(e)){ + return mk(e->arg(0), e->arg(1)); + } else if (isOpX(e)){ + return mk(e->arg(0), e->arg(1)); + } else if (isOpX(e)){ + return mk(e->arg(0), e->arg(1)); + } else if (isOpX(e)){ + return mk(e->arg(0), e->arg(1)); + } else if (isOpX(e)){ + return mk(e->arg(0), e->arg(1)); + } else if (isOpX(e)){ + return mk(e->arg(0), e->arg(1)); + } + } + return a; + } + + /** * Transform the inequalities by the following rules: * (a + .. + var + .. + b <= c ) -> (var <= -1*a + .. + -1*b + c) * (a + .. + -1*var + .. + b <= c) -> (-1*var <= -1*a + .. + -1*b + c ) @@ -511,3177 +652,3468 @@ namespace ufo * * same for >= */ - inline static Expr ineqMover(Expr e, Expr var){ - if (isOpX(e)){ - return rewriteHelperM(e, var); - } else if (isOpX(e)){ - return rewriteHelperM(e, var); - } else if (isOpX(e)){ - return rewriteHelperM(e, var); - } else if (isOpX(e)){ - return rewriteHelperM(e, var); - } else if (isOpX(e)){ - return rewriteHelperM(e, var); - } else if (isOpX(e)){ - return rewriteHelperM(e, var); - } - return e; - } - - /** + inline static Expr ineqMover(Expr e, Expr var){ + if (isOpX(e)){ + return rewriteHelperM(e, var); + } else if (isOpX(e)){ + return rewriteHelperM(e, var); + } else if (isOpX(e)){ + return rewriteHelperM(e, var); + } else if (isOpX(e)){ + return rewriteHelperM(e, var); + } else if (isOpX(e)){ + return rewriteHelperM(e, var); + } else if (isOpX(e)){ + return rewriteHelperM(e, var); + } + return e; + } + + /** * Move "var" to the left hand side of expression: * (a <= var) -> (var >= b) * (a >= var) -> (var <= b) * (a == var) -> (var == b) */ - inline static Expr exprMover(Expr e, Expr var){ - if (isOpX(e)){ - return rewriteHelperE(e, var); - } else if (isOpX(e)){ - return rewriteHelperE(e, var); - } else if (isOpX(e)){ - return rewriteHelperE(e, var); - } else if (isOpX(e)){ - return rewriteHelperE(e, var); - } if (isOpX(e)){ - return rewriteHelperE(e, var); - } if (isOpX(e)){ - return rewriteHelperE(e, var); - } - return e; - } - - static Expr simplifyArithm (Expr exp, bool keepRedundandDisj, bool keepRedundandConj); - - /** + inline static Expr exprMover(Expr e, Expr var){ + if (isOpX(e)){ + return rewriteHelperE(e, var); + } else if (isOpX(e)){ + return rewriteHelperE(e, var); + } else if (isOpX(e)){ + return rewriteHelperE(e, var); + } else if (isOpX(e)){ + return rewriteHelperE(e, var); + } if (isOpX(e)){ + return rewriteHelperE(e, var); + } if (isOpX(e)){ + return rewriteHelperE(e, var); + } + return e; + } + + static Expr simplifyArithm (Expr exp, bool keepRedundandDisj, bool keepRedundandConj); + + /** * Move var v to LHS of each expression and simplify */ - inline static Expr ineqSimplifier(Expr v, Expr exp, bool merge = false){ - ExprSet substsMap; - if (isOpX(exp)){ - ExprSet cnjs; - getConj(exp, cnjs); - for (Expr cl : cnjs) - substsMap.insert(ineqSimplifier(v, cl)); - - if (merge) ineqMerger(substsMap, true); - return conjoin(substsMap, v->getFactory()); - } - else if (isOp(exp)) - { - exp = ineqMover(exp, v); - exp = simplifyArithm(exp, false, false); - exp = ineqReverter(exp); + inline static Expr ineqSimplifier(Expr v, Expr exp, bool merge = false){ + ExprSet substsMap; + if (isOpX(exp)){ + ExprSet cnjs; + getConj(exp, cnjs); + for (Expr cl : cnjs) + substsMap.insert(ineqSimplifier(v, cl)); + + if (merge) ineqMerger(substsMap, true); + return conjoin(substsMap, v->getFactory()); + } + else if (isOp(exp)) + { + exp = ineqMover(exp, v); + exp = simplifyArithm(exp, false, false); + exp = ineqReverter(exp); + } + return exp; } - return exp; - } - template static void unique_push_back(T e, vector& v) { - if (find(v.begin(), v.end(), e) == v.end()) v.push_back(e); - } + template static void unique_push_back(T e, vector& v) { + if (find(v.begin(), v.end(), e) == v.end()) v.push_back(e); + } - template struct RW - { - std::shared_ptr _r; + template struct RW + { + std::shared_ptr _r; - RW (std::shared_ptr r) : _r(r) {} - RW (T *r) : _r (r) {} + RW (std::shared_ptr r) : _r(r) {} + RW (T *r) : _r (r) {} - VisitAction operator() (Expr exp) - { - // -- apply the rewriter - if (exp->arity() == 0) - // -- do not descend into non-boolean operators - return VisitAction::skipKids (); + VisitAction operator() (Expr exp) + { + // -- apply the rewriter + if (exp->arity() == 0) + // -- do not descend into non-boolean operators + return VisitAction::skipKids (); - return VisitAction::changeDoKidsRewrite (exp, _r); - } - }; + return VisitAction::changeDoKidsRewrite (exp, _r); + } + }; // not very pretty method, but.. - inline static Expr reBuildCmp(Expr fla, Expr lhs, Expr rhs) - { - if (isOpX(fla)) - { - return mk(lhs, rhs); - } - if (isOpX(fla)) - { - return mk(lhs, rhs); - } - if (isOpX(fla)) - { - return mk(lhs, rhs); - } - if (isOpX(fla)) - { - return mk(lhs, rhs); - } - if (isOpX(fla)) + inline static Expr reBuildCmp(Expr fla, Expr lhs, Expr rhs) { - return mk(lhs, rhs); + if (isOpX(fla)) + { + return mk(lhs, rhs); + } + if (isOpX(fla)) + { + return mk(lhs, rhs); + } + if (isOpX(fla)) + { + return mk(lhs, rhs); + } + if (isOpX(fla)) + { + return mk(lhs, rhs); + } + if (isOpX(fla)) + { + return mk(lhs, rhs); + } + assert(isOpX(fla)); + return mk(lhs, rhs); } - assert(isOpX(fla)); - return mk(lhs, rhs); - } - inline static Expr reBuildNegCmp(Expr fla, Expr lhs, Expr rhs) - { - if (isOpX(fla)) - { - return mk(lhs, rhs); - } - if (isOpX(fla)) - { - return mk(lhs, rhs); - } - if (isOpX(fla)) - { - return mk(lhs, rhs); - } - if (isOpX(fla)) - { - return mk(lhs, rhs); - } - if (isOpX(fla)) + inline static Expr reBuildCmpSym(Expr fla, Expr lhs, Expr rhs) { - return mk(lhs, rhs); + if (isOpX(fla)){ + return mk(rhs, lhs); + } + if (isOpX(fla)){ + return mk(rhs, lhs); + } + if (isOpX(fla)){ + return mk(rhs, lhs); + } + if (isOpX(fla)){ + return mk(rhs, lhs); + } + if (isOpX(fla)){ + return mk(rhs, lhs); + } + assert(isOpX(fla)); + return mk(rhs, lhs); } - assert(isOpX(fla)); - return mk(lhs, rhs); - } - // not very pretty method, but.. - inline static bool evaluateCmpConsts(Expr fla, cpp_int a, cpp_int b) - { - if (isOpX(fla)) - { - return (a == b); - } - if (isOpX(fla)) - { - return (a != b); - } - if (isOpX(fla)) + inline static Expr reBuildNegCmp(Expr fla, Expr lhs, Expr rhs) { - return (a <= b); - } - if (isOpX(fla)) - { - return (a >= b); - } - if (isOpX(fla)) - { - return (a < b); + if (isOpX(fla)) + { + return mk(lhs, rhs); + } + if (isOpX(fla)) + { + return mk(lhs, rhs); + } + if (isOpX(fla)) + { + return mk(lhs, rhs); + } + if (isOpX(fla)) + { + return mk(lhs, rhs); + } + if (isOpX(fla)) + { + return mk(lhs, rhs); + } + assert(isOpX(fla)); + return mk(lhs, rhs); } - assert(isOpX(fla)); - return (a > b); - } - inline static Expr mkNeg(Expr fla) - { - if (isOpX(fla)) + // not very pretty method, but.. + inline static bool evaluateCmpConsts(Expr fla, cpp_int a, cpp_int b) { - return fla->arg(0); + if (isOpX(fla)) + { + return (a == b); + } + if (isOpX(fla)) + { + return (a != b); + } + if (isOpX(fla)) + { + return (a <= b); + } + if (isOpX(fla)) + { + return (a >= b); + } + if (isOpX(fla)) + { + return (a < b); + } + assert(isOpX(fla)); + return (a > b); } - else if (isOpX(fla)) + + inline static Expr mkNeg(Expr fla) { - return mk(fla->getFactory()); + if (isOpX(fla)) + { + return fla->arg(0); + } + else if (isOpX(fla)) + { + return mk(fla->getFactory()); + } + else if (isOpX(fla)) + { + return mk(fla->getFactory()); + } + else if (isOpX(fla) || isOpX(fla)) + { + ExprSet args; + for (int i = 0; i < fla->arity(); i++){ + args.insert(mkNeg(fla->arg(i))); + } + return isOpX(fla) ? + disjoin(args, fla->getFactory()) : + conjoin (args, fla->getFactory()); + } + else if (isOpX(fla) && fla->arity() == 2) + { + return mk(fla->arg(0), fla->arg(1)); + } + else if (isOp(fla)) + { + return reBuildNegCmp(fla, fla->arg(0), fla->arg(1)); + } + else if (isOpX(fla)) + { + return mk(fla->left(), mkNeg(fla->right())); + } + else if (isOpX(fla) || isOpX(fla)) + { + ExprVector args; + for (int i = 0; i < fla->arity() - 1; i++) + args.push_back(fla->arg(i)); + args.push_back(mkNeg(fla->last())); + return isOpX(fla) ? + mknary(args) : mknary(args); + } + return mk(fla); } - else if (isOpX(fla)) + + inline static cpp_int separateConst(ExprVector& plsOps) { - return mk(fla->getFactory()); + cpp_int c = 0; + for (auto it = plsOps.begin(); it != plsOps.end(); ) + { + if (isOpX(*it)) + { + c += lexical_cast(*it); + it = plsOps.erase(it); + continue; + } + else ++it; + } + return c; } - else if (isOpX(fla) || isOpX(fla)) + + inline static Expr simplifyPlus (Expr exp) { - ExprSet args; - for (int i = 0; i < fla->arity(); i++){ - args.insert(mkNeg(fla->arg(i))); - } - return isOpX(fla) ? - disjoin(args, fla->getFactory()) : - conjoin (args, fla->getFactory()); + ExprVector plsOps; + getAddTerm (exp, plsOps); + cpp_int c = separateConst(plsOps); + std::sort(plsOps.begin(), plsOps.end(), [](Expr& x, Expr& y) {return x < y;}); + // GF: to write some kind of a fold-operator that counts the numbers of occurences + if (c != 0) plsOps.push_back(mkMPZ(c, exp->getFactory())); + return mkplus(plsOps, exp->getFactory()); } - else if (isOp(fla)) + + inline static Expr simplifyMult (Expr e) { - return reBuildNegCmp(fla, fla->arg(0), fla->arg(1)); + if (isOpX(e)) + { + cpp_int coef = 1; + ExprVector ops; + getMultOps (e, ops); + + ExprVector rem; + for (auto a : ops) + { + if (isOpX(a)) + coef *= lexical_cast(a); + else + rem.push_back(a); + } + + Expr num = mkMPZ (coef, e->getFactory()); + if (rem.empty() || coef == 0) return num; + + Expr remTerm = mkmult(rem, e->getFactory()); + if (coef == 1) return remTerm; + + return mk(num, remTerm); + } + return e; } - else if (isOpX(fla)) + + inline static Expr simplifyMod (Expr e) { - return mk(fla->left(), mkNeg(fla->right())); + if (isOpX(e) && isOpX(e->right())) + { + cpp_int coef = 1; + cpp_int divider = lexical_cast(e->right()); + ExprVector ops; + getMultOps (e->left(), ops); + + for (auto a : ops) + if (isOpX(a)) + coef *= lexical_cast(a); + + if (coef % divider == 0) + return mkMPZ (0, e->getFactory()); + } + return e; } - else if (isOpX(fla) || isOpX(fla)) + + inline static Expr simplifyDiv (Expr e) { - ExprVector args; - for (int i = 0; i < fla->arity() - 1; i++) - args.push_back(fla->arg(i)); - args.push_back(mkNeg(fla->last())); - return isOpX(fla) ? - mknary(args) : mknary(args); + if (isOpX(e) && isOpX(e->right())) + { + cpp_int coef = 1; + cpp_int divider = lexical_cast(e->right()); + ExprVector ops; + getMultOps (e->left(), ops); + + bool onlyNum = true; + for (auto a : ops) + if (isOpX(a)) + coef *= lexical_cast(a); + else + onlyNum = false; + + if (coef == 0) + return mkMPZ (0, e->getFactory()); + if (onlyNum) + return mkMPZ (coef / divider, e->getFactory()); + } + return e; } - return mk(fla); - } - inline static cpp_int separateConst(ExprVector& plsOps) - { - cpp_int c = 0; - for (auto it = plsOps.begin(); it != plsOps.end(); ) + inline static Expr simplifyIte (Expr exp) // simple version, on the syntactic level { - if (isOpX(*it)) - { - c += lexical_cast(*it); - it = plsOps.erase(it); - continue; - } - else ++it; - } - return c; - } - - inline static Expr simplifyPlus (Expr exp) - { - ExprVector plsOps; - getAddTerm (exp, plsOps); - cpp_int c = separateConst(plsOps); - std::sort(plsOps.begin(), plsOps.end(), [](Expr& x, Expr& y) {return x < y;}); - // GF: to write some kind of a fold-operator that counts the numbers of occurences - if (c != 0) plsOps.push_back(mkMPZ(c, exp->getFactory())); - return mkplus(plsOps, exp->getFactory()); - } - - inline static Expr simplifyMult (Expr e) - { - if (isOpX(e)) - { - cpp_int coef = 1; - ExprVector ops; - getMultOps (e, ops); - - ExprVector rem; - for (auto a : ops) - { - if (isOpX(a)) - coef *= lexical_cast(a); - else - rem.push_back(a); - } + ExprFactory &efac = exp->getFactory(); + ExprVector plusOpsLeft; + ExprVector plusOpsRight; + ExprVector commonTerms; + Expr b1; + Expr b2; + bool added = false; + if (isNumeric(exp->right())) + { + getAddTerm(exp->right(), plusOpsLeft); + getAddTerm(exp->last(), plusOpsRight); - Expr num = mkMPZ (coef, e->getFactory()); - if (rem.empty() || coef == 0) return num; + for (auto it1 = plusOpsLeft.begin(); it1 != plusOpsLeft.end(); ) + { + bool found = false; + for (auto it2 = plusOpsRight.begin(); it2 != plusOpsRight.end(); ) + { + if (*it1 == *it2) + { + if (lexical_cast(*it1) != "0") + commonTerms.push_back(*it1); + found = true; + plusOpsRight.erase(it2); + break; + } + else + { + ++it2; + } + } + if (found) it1 = plusOpsLeft.erase(it1); + else ++it1; + } - Expr remTerm = mkmult(rem, e->getFactory()); - if (coef == 1) return remTerm; + b1 = simplifyPlus(mkplus(plusOpsLeft, efac)); + b2 = simplifyPlus(mkplus(plusOpsRight, efac)); + if (b1 == b2) + { + if (lexical_cast(b1) != "0") + commonTerms.push_back(b1); + added = true; + } + } + else + { + b1 = exp->right(); + b2 = exp->last(); + } - return mk(num, remTerm); + if (!added) // some redundancy with the ITE-handling in simplifyBool + { + if (isOpX(exp->left())) + commonTerms.push_back(b1); + else if (isOpX(exp->left())) + commonTerms.push_back(b2); + else + commonTerms.push_back(mk(exp->left(), b1, b2)); + } + return mkplus(commonTerms, efac); } - return e; - } - inline static Expr simplifyMod (Expr e) - { - if (isOpX(e) && isOpX(e->right())) + inline static Expr simplifyCmp (Expr exp) { - cpp_int coef = 1; - cpp_int divider = lexical_cast(e->right()); - ExprVector ops; - getMultOps (e->left(), ops); + ExprFactory &efac = exp->getFactory(); - for (auto a : ops) - if (isOpX(a)) - coef *= lexical_cast(a); + ExprVector plusOpsLeft; + ExprVector plusOpsRight; + getAddTerm(exp->left(), plusOpsLeft); + getAddTerm(exp->right(), plusOpsRight); - if (coef % divider == 0) - return mkMPZ (0, e->getFactory()); - } - return e; - } + cpp_int constLeft = separateConst(plusOpsLeft); + cpp_int constRight = separateConst(plusOpsRight); - inline static Expr simplifyIte (Expr exp) // simple version, on the syntactic level - { - ExprFactory &efac = exp->getFactory(); - ExprVector plusOpsLeft; - ExprVector plusOpsRight; - ExprVector commonTerms; - Expr b1; - Expr b2; - bool added = false; - if (isNumeric(exp->right())) - { - getAddTerm(exp->right(), plusOpsLeft); - getAddTerm(exp->last(), plusOpsRight); + for (auto it1 = plusOpsLeft.begin(); it1 != plusOpsLeft.end(); ) + { + bool found = false; + for (auto it2 = plusOpsRight.begin(); it2 != plusOpsRight.end(); ) + { + if (*it1 == *it2) + { + found = true; + plusOpsRight.erase(it2); + break; + } + else + { + ++it2; + } + } + if (found) it1 = plusOpsLeft.erase(it1); + else ++it1; + } - for (auto it1 = plusOpsLeft.begin(); it1 != plusOpsLeft.end(); ) - { - bool found = false; - for (auto it2 = plusOpsRight.begin(); it2 != plusOpsRight.end(); ) - { - if (*it1 == *it2) - { - if (lexical_cast(*it1) != "0") - commonTerms.push_back(*it1); - found = true; - plusOpsRight.erase(it2); - break; - } - else - { - ++it2; - } - } - if (found) it1 = plusOpsLeft.erase(it1); - else ++it1; - } - - b1 = simplifyPlus(mkplus(plusOpsLeft, efac)); - b2 = simplifyPlus(mkplus(plusOpsRight, efac)); - if (b1 == b2) - { - if (lexical_cast(b1) != "0") - commonTerms.push_back(b1); - added = true; - } - } - else - { - b1 = exp->right(); - b2 = exp->last(); - } + // processing of constLeft/Right to prepare for further simplifyArithmDisjunctions/Conjunctions + if (constLeft != 0 || constRight != 0) + { + if (plusOpsLeft.size() == 0) + { + constLeft = constLeft - constRight; + constRight = 0; + } + else + { + constRight = constRight - constLeft; + constLeft = 0; + } + } - if (!added) // some redundancy with the ITE-handling in simplifyBool - { - if (isOpX(exp->left())) - commonTerms.push_back(b1); - else if (isOpX(exp->left())) - commonTerms.push_back(b2); - else - commonTerms.push_back(mk(exp->left(), b1, b2)); - } - return mkplus(commonTerms, efac); - } + if (constLeft != 0) plusOpsLeft.push_back(mkMPZ(constLeft, efac)); + if (constRight != 0) plusOpsRight.push_back(mkMPZ(constRight, efac)); + + if (plusOpsLeft.size() == 0 && plusOpsRight.size() == 0) + { + if (isOpX(exp) || isOpX(exp) || isOpX(exp)) + return mk(efac); + else + return mk(efac); + } - inline static Expr simplifyCmp (Expr exp) - { - ExprFactory &efac = exp->getFactory(); + if (plusOpsLeft.size() == 0 && plusOpsRight.size() == 1 && + isOpX(*plusOpsRight.begin())) + { + if (evaluateCmpConsts(exp, 0, lexical_cast(*plusOpsRight.begin()))) + return mk(efac); + else + return mk(efac); + } - ExprVector plusOpsLeft; - ExprVector plusOpsRight; - getAddTerm(exp->left(), plusOpsLeft); - getAddTerm(exp->right(), plusOpsRight); + if (plusOpsLeft.size() == 1 && plusOpsRight.size() == 0 && + isOpX(*plusOpsLeft.begin())) + { + if (evaluateCmpConsts(exp, lexical_cast(*plusOpsLeft.begin()), 0)) + return mk(efac); + else + return mk(efac); + } - cpp_int constLeft = separateConst(plusOpsLeft); - cpp_int constRight = separateConst(plusOpsRight); + Expr l = mkplus(plusOpsLeft, efac); + Expr r = mkplus(plusOpsRight, efac); - for (auto it1 = plusOpsLeft.begin(); it1 != plusOpsLeft.end(); ) - { - bool found = false; - for (auto it2 = plusOpsRight.begin(); it2 != plusOpsRight.end(); ) - { - if (*it1 == *it2) + // small ITE-optimization; to extend: + if (isOpX(exp) && isOpX(l) && isOpX(r) && + isOpX(l->right()) && isOpX(l->last()) && l->right() != l->last()) { - found = true; - plusOpsRight.erase(it2); - break; + if (l->right() == r) return l->left(); + if (l->left() == r) return mkNeg(l->left()); } - else + else if (isOpX(exp) && isOpX(r) && isOpX(l) && + isOpX(r->right()) && isOpX(r->last()) && r->right() != r->last()) { - ++it2; + if (r->right() == l) return r->left(); + if (r->left() == l) return mkNeg(r->left()); } - } - if (found) it1 = plusOpsLeft.erase(it1); - else ++it1; - } - // processing of constLeft/Right to prepare for further simplifyArithmDisjunctions/Conjunctions - if (constLeft != 0 || constRight != 0) - { - if (plusOpsLeft.size() == 0) - { - constLeft = constLeft - constRight; - constRight = 0; - } - else - { - constRight = constRight - constLeft; - constLeft = 0; - } + return reBuildCmp(exp, l, r); } - if (constLeft != 0) plusOpsLeft.push_back(mkMPZ(constLeft, efac)); - if (constRight != 0) plusOpsRight.push_back(mkMPZ(constRight, efac)); + static Expr simplifyArithmDisjunctions(Expr fla, bool keepRedundandDisj); + static Expr simplifyArithmConjunctions(Expr fla, bool keepRedundandConj); - if (plusOpsLeft.size() == 0 && plusOpsRight.size() == 0) + struct SimplifyArithmExpr { - if (isOpX(exp) || isOpX(exp) || isOpX(exp)) - return mk(efac); - else - return mk(efac); - } + Expr e; + ExprFactory &efac; + bool keepRedundandDisj; + bool keepRedundandConj; - if (plusOpsLeft.size() == 0 && plusOpsRight.size() == 1 && - isOpX(*plusOpsRight.begin())) - { - if (evaluateCmpConsts(exp, 0, lexical_cast(*plusOpsRight.begin()))) - return mk(efac); - else - return mk(efac); - } + SimplifyArithmExpr (Expr& _e, bool _d, bool _c) : + e(_e), efac(_e->getFactory()), keepRedundandDisj(_d), keepRedundandConj(_c) {}; - if (plusOpsLeft.size() == 1 && plusOpsRight.size() == 0 && - isOpX(*plusOpsLeft.begin())) - { - if (evaluateCmpConsts(exp, lexical_cast(*plusOpsLeft.begin()), 0)) - return mk(efac); - else - return mk(efac); - } + Expr operator() (Expr exp) + { + if (isOpX(exp) || isOpX(exp)) + { + return simplifyPlus(exp); + } + + if (isOpX(exp)) + { + return simplifyMult(exp); + } - Expr l = mkplus(plusOpsLeft, efac); - Expr r = mkplus(plusOpsRight, efac); + if (isOpX(exp)) + { + return simplifyMod(exp); + } - // small ITE-optimization; to extend: - if (isOpX(exp) && isOpX(l) && isOpX(r) && - isOpX(l->right()) && isOpX(l->last()) && l->right() != l->last()) - { - if (l->right() == r) return l->left(); - if (l->left() == r) return mkNeg(l->left()); - } - else if (isOpX(exp) && isOpX(r) && isOpX(l) && - isOpX(r->right()) && isOpX(r->last()) && r->right() != r->last()) + if (isOpX(exp)) + { + return simplifyDiv(exp); + } + + if (isOpX(exp)) + { + return additiveInverse(exp->left()); + } + + if (isOp(exp) && isNumeric(exp->right())) + { + return simplifyCmp(exp); + } + + if (isOpX(exp) && isNumeric(exp->right())) + { + return simplifyIte(exp); + } + + if (isOpX(exp)) + { + return simplifyArithmDisjunctions(exp, keepRedundandDisj && (e == exp)); + } + + if (isOpX(exp)) + { + return simplifyArithmConjunctions(exp, keepRedundandConj && (e == exp)); + } + return exp; + } + }; + + static Expr simplifyBool (Expr exp); + + struct SimplifyBoolExpr { - if (r->right() == l) return r->left(); - if (r->left() == l) return mkNeg(r->left()); - } + ExprFactory &efac; - return reBuildCmp(exp, l, r); - } + SimplifyBoolExpr (ExprFactory& _efac) : efac(_efac){}; - // GF: to rewrite/remove - inline static Expr simplifiedPlus (Expr exp, Expr to_skip){ - ExprVector args; - Expr ret; - bool f = false; + Expr operator() (Expr exp) + { + // GF: to enhance - for (ENode::args_iterator it = exp->args_begin(), - end = exp->args_end(); it != end; ++it){ - if (*it == to_skip) f = true; - else args.push_back (*it); - } + if (isOpX(exp)) + { + if (exp->left() == exp->right()) + return mk(efac); - if (f == false) { - args.push_back(additiveInverse(to_skip)); - } + if (isOpX(exp->right())) + return mk(efac); - if (args.size() == 1) { - ret = args[0]; - } + if (isOpX(exp->left())) + return mk(efac); - else if (args.size() == 2){ - if (isOpX(args[0]) && !isOpX(args[1])) - ret = mk(args[1], args[0]->left()); - else if (!isOpX(args[0]) && isOpX(args[1])) - ret = mk(args[0], args[1]->left()); + if (isOpX(exp->right())) + return mkNeg(exp->left()); - else ret = mknary(args); +// return simplifyBool(mk( +// mkNeg(exp->left()), +// exp->right())); + } - } else { - ret = mknary(args); - } - return ret; - } + if (isOpX(exp)) + { + if (exp->left() == exp->right()) + return mk(efac); - // return a - b - inline static Expr simplifiedMinus (Expr a, Expr b){ - // GF: to rewrite/remove - Expr ret = mk(a, b); + if (isOpX(exp->right())) + return exp->left(); - if (a == b) { - ret = mkMPZ (0, a->getFactory()); - } else + if (isOpX(exp->left())) + return exp->right(); - if (isOpX(a)){ - return simplifiedPlus(a, b); - } else + if (isOpX(exp->right())) + return mkNeg(exp->left()); + + if (isOpX(exp->left())) + return mkNeg(exp->right()); + } - if (isOpX(b)){ - Expr res = simplifiedPlus(b, a); - return mk(res); - } else + if (exp->arity() == 2 && (isOpX(exp) || isOpX(exp))) + { + if (exp->left() == exp->right()) + return mk(efac); - if (isOpX(a)){ - if (a->left() == b) ret = mk(a->right()); - } else + if (isOpX(exp->right())) + return exp->left(); - if (isOpX(b)){ - if (a == b->right()) ret = mk(b->left()); - } else + if (isOpX(exp->left())) + return exp->right(); - if (isOpX(b)) { - if (b->left() == mkMPZ (0, a->getFactory())) { - ret = a; - } else { - ret = mk(a,b->left()); + if (isOpX(exp->right())) + { + return mkNeg(exp->left()); } - } else - if (mkMPZ ((-1), a->getFactory()) == b) { - ret = simplifiedPlus(a, mkMPZ (1, a->getFactory())); - } else + if (isOpX(exp->left())) + return mkNeg(exp->right()); + } - if (b == mkMPZ (0, a->getFactory())) { - ret = a; - } else + if (isOpX(exp)) + { + ExprSet dsjs; + ExprSet newDsjs; + getDisj(exp, dsjs); + for (auto a : dsjs) + { + a = simplifyBool(a); + if (isOpX(a)) + { + return mk(efac); + } + if (isOpX(a)) + { + continue; + } + newDsjs.insert(a); + } + if (newDsjs.size() == 2) + { + Expr lhs = *newDsjs.begin(); + Expr rhs = *(std::next(newDsjs.begin())); + if (lhs == mkNeg(rhs)) return mk(efac); + if (rhs == mkNeg(lhs)) return mk(efac); + } + return disjoin (newDsjs, efac); + } - if (a == mkMPZ (0, a->getFactory())){ - if (isOpX(b)){ - ret = b->left(); - } - else { - ret = mk(b); - } + if (isOpX(exp)) + { + ExprSet cnjs; + ExprSet newCnjs; + getConj(exp, cnjs); + for (auto a : cnjs) + { + a = simplifyBool(a); + if (isOpX(a)) + { + return mk(efac); } + if (isOpX(a)) + { + continue; + } + newCnjs.insert(a); + } + return conjoin (newCnjs, efac); + } - return ret; - } + if (isOpX(exp)) + { + Expr cond = exp->arg(0); + if (isOpX(cond)) + { + return exp->arg(1); + } + else if (isOpX(cond)) + { + return exp->arg(2); + } + else if (isOpX(exp->arg(1)) && isOpX(exp->arg(2))) + { + return cond; + } + else if (isOpX(exp->arg(1)) && isOpX(exp->arg(2))) + { + return mkNeg(cond); + } + else if (exp->arg(1) == exp->arg(2)) + { + return exp->arg(1); + } + } - static Expr simplifyArithmDisjunctions(Expr fla, bool keepRedundandDisj); - static Expr simplifyArithmConjunctions(Expr fla, bool keepRedundandConj); + if (isOpX(exp) && + (isOp(exp->left()) || + isOpX(exp->left()) || isOpX(exp->left()))) + return mkNeg(exp->left()); - struct SimplifyArithmExpr - { - Expr e; - ExprFactory &efac; - bool keepRedundandDisj; - bool keepRedundandConj; + return exp; + } + }; - SimplifyArithmExpr (Expr& _e, bool _d, bool _c) : - e(_e), efac(_e->getFactory()), keepRedundandDisj(_d), keepRedundandConj(_c) {}; + static Expr simplifyArr (Expr exp); - Expr operator() (Expr exp) + struct SimplifyArrExpr { - if (isOpX(exp)) - { - return simplifyPlus(exp); - } - - if (isOpX(exp) && exp->arity() == 2) - { - return simplifiedMinus(exp->left(), exp->right()); - } + SimplifyArrExpr () {}; - if (isOpX(exp)) - { - return simplifyMult(exp); - } - - if (isOpX(exp)) - { - return simplifyMod(exp); - } + Expr operator() (Expr exp) + { + // GF: to enhance - if (isOpX(exp)) - { - return additiveInverse(exp->left()); - } + if (isOpX(exp)) + { + ExprSet stores; + getChainOfStores(exp->left(), stores); + for (auto s : stores) + if (exp->right() == s->right()) // cell overwritten + exp = replaceAll(exp, s, s->left()); + } - if (isOpX(exp)) - { - if (isOpX(exp->right())) return mk(exp->left(), exp->right()->left()); - } + if (isOpX(exp->left()->left(), exp->last()))); + } + } - if (isOp(exp) && isNumeric(exp->right())) - { - return simplifyCmp(exp); - } + if (isOpX(exp)) + { + if (isOpX(exp->left()) && exp->right() == exp->left()->left()) + { + return simplifyArr(mk(mk(exp->left(), exp->right()->right()), exp->right()->last())); + } + if (isOpX(exp->left()->left()->left(), exp->left()->right()), exp->right())); + } + if (isOpX(exp->right()->left()->left(), exp->right()->right()), exp->left())); + } + } + return exp; + } + }; - if (isOpX(exp) && isNumeric(exp->right())) - { - return simplifyIte(exp); - } + inline static Expr simplifyArr (Expr exp) + { + if (containsOp(exp) || containsOp(exp)) return exp; + RW rw(new SimplifyArrExpr()); + return dagVisit (rw, exp); + } - if (isOpX(exp)) - { - return simplifyArithmDisjunctions(exp, keepRedundandDisj && (e == exp)); - } + inline static Expr simplifyArithm (Expr exp, bool keepRedundandDisj = false, bool keepRedundandConj = false) + { + RW rw(new + SimplifyArithmExpr(exp, keepRedundandDisj, keepRedundandConj)); + return dagVisit (rw, exp); + } - if (isOpX(exp)) - { - return simplifyArithmConjunctions(exp, keepRedundandConj && (e == exp)); - } - return exp; + inline static Expr simplifyBool (Expr exp) + { + RW rw(new SimplifyBoolExpr(exp->getFactory())); + return dagVisit (rw, exp); } - }; - static Expr simplifyBool (Expr exp); + inline static void simplify(function foo, ExprSet& exps){ + ExprSet expsn; + for (auto e : exps) + { + e = foo(e); + if (!isOpX(e)) + expsn.insert(e); + } + exps = expsn; + } - struct SimplifyBoolExpr - { - ExprFactory &efac; + inline static void simplify(ExprSet& exps, bool arr = true) + { + if (exps.empty()) return; + simplify([](Expr in){ return simplifyArithm(in, false, false); }, exps); + simplify(simplifyBool, exps); + if (arr && containsOp(conjoin(exps, (*exps.begin())->getFactory()))) + { + simplify(simplifyArr, exps); + simplify(exps, false); // arrays may introduce additional arithm/bool structures + } + } - SimplifyBoolExpr (ExprFactory& _efac) : efac(_efac){}; + // helper used in `constantPropagationRec`: + template static bool contradictionCheck(Expr bc, Expr defVal, Range& hardVars, + ExprSet& cnjs, ExprSet& toInsertHard, ExprMap& repls) + { + if (emptyIntersect(bc, hardVars)) + { + if (repls[bc] == NULL) repls[bc] = defVal; + else if (repls[bc] != defVal) + { + cnjs.clear(); + cnjs.insert(mk(bc->getFactory())); // contradiction is found, like b /\ ~b + return true; + } + // otherwise, the constraint is already there + } + else toInsertHard.insert(isOpX(defVal) ? bc : mk(bc)); + return false; + } - Expr operator() (Expr exp) + template static void constantPropagationRec(Range& hardVars, ExprSet& cnjs, ExprMap& repls, bool doArithm) { - // GF: to enhance + ExprSet toInsert, toInsertHard; + for (auto it = cnjs.begin(); it != cnjs.end(); ) + { + Expr a = *it; + if (isOpX(a)) + { + it = cnjs.erase(it); + continue; + } + if (isOpX(a)) + { + cnjs.clear(); + cnjs.insert(mk(a->getFactory())); + return; + } - if (isOpX(exp)) - { - if (isOpX(exp->right())) - return mk(efac); + if (isOpX(a)) + { + Expr lhs = a->left(); - if (isOpX(exp->right())) - return mkNeg(exp->left()); + if (isOpX(lhs)) a = a->right(); + else if (isOpX(lhs)) + { + it = cnjs.erase(it); + continue; + } + } -// return simplifyBool(mk( -// mkNeg(exp->left()), -// exp->right())); - } + if (isOpX(a)) + { + Expr lhs = a->left(); + Expr rhs = a->right(); + if ((isOpX(lhs) && isOpX(rhs)) || + (isOpX(lhs) && isOpX(rhs))) + { + it = cnjs.erase(it); + continue; + } + else if (isOpX(lhs)) a = rhs; + else if (isOpX(lhs)) a = mkNeg(rhs); + else if (isOpX(rhs)) a = lhs; + else if (isOpX(rhs)) a = mkNeg(lhs); + } - if (isOpX(exp)) - { - if (isOpX(exp->right())) - return exp->left(); + if (a->arity() == 2 && (isOpX(a) || isOpX(a))) + { + Expr lhs = a->left(); + Expr rhs = a->right(); + if ((isOpX(lhs) && isOpX(rhs)) || + (isOpX(lhs) && isOpX(rhs))) + { + it = cnjs.erase(it); + continue; + } + else if (isOpX(lhs)) a = mkNeg(rhs); + else if (isOpX(lhs)) a = rhs; + else if (isOpX(rhs)) a = mkNeg(lhs); + else if (isOpX(rhs)) a = lhs; + } - if (isOpX(exp->left())) - return exp->right(); + ExprSet splitted; + getConj(a, splitted); - if (isOpX(exp->right())) - return mkNeg(exp->left()); + for (auto c : splitted) + { + if (isOpX(c) && !isBoolConst(c->left())) + c = mkNeg(c->left()); + + if (doArithm && isOpX(c)) + { + Expr cons = NULL; + Expr rest = NULL; + if (isNumericConst(c->left())) + { + cons = c->left(); + rest = c->right(); + } + else if (isNumericConst(c->right())) + { + cons = c->right(); + rest = c->left(); + } - if (isOpX(exp->left())) - return mkNeg(exp->right()); - } + if (cons != NULL && IsConst()(rest)) + { + if (emptyIntersect(rest, hardVars)) + { + if (repls[rest] == NULL) + repls[rest] = cons; + else if (repls[rest] != cons) + { + cnjs.clear(); + cnjs.insert(mk(a->getFactory())); // contradiction is found, like a = 0 /\ a = 1 + return; + } + } + else + toInsertHard.insert(c); + } + else toInsert.insert(c); + } + else if (isBoolConst(c)) + { + if (contradictionCheck(c, mk(a->getFactory()), hardVars, cnjs, toInsertHard, repls)) + return; + } + else if (isOpX(c) && isBoolConst(c->left())) + { + if (contradictionCheck(c->left(), mk(a->getFactory()), hardVars, cnjs, toInsertHard, repls)) + return; + } + else + toInsert.insert(c); + } - if (isOpX(exp)) - { - if (isOpX(exp->right())) - return exp->left(); + it = cnjs.erase(it); + } - if (isOpX(exp->left())) - return exp->right(); + bool toRestart = false; + for (auto & a : toInsert) + { + Expr b = replaceAll(a, repls); + if (doArithm) b = simplifyArithm(b); + b = simplifyBool(b); + if (!toRestart && a != b) toRestart = true; + cnjs.insert(b); + } + cnjs.insert(toInsertHard.begin(), toInsertHard.end()); - if (isOpX(exp->right())) - return mkNeg(exp->left()); + if (toRestart) + constantPropagationRec(hardVars, cnjs, repls, doArithm); + } - if (isOpX(exp->left())) - return mkNeg(exp->right()); - } + // simplification based on boolean replacements + template static void constantPropagation(Range& hardVars, ExprSet& cnjs, bool doArithm = true) + { + ExprMap repls; + constantPropagationRec(hardVars, cnjs, repls, doArithm); + } - if (isOpX(exp)) - { - ExprSet dsjs; - ExprSet newDsjs; - getDisj(exp, dsjs); - for (auto a : dsjs) - { - a = simplifyBool(a); - if (isOpX(a)) - { - return mk(efac); - } - if (isOpX(a)) - { - continue; - } - newDsjs.insert(a); - } - return disjoin (newDsjs, efac); - } - - if (isOpX(exp)) - { - ExprSet cnjs; - ExprSet newCnjs; - getConj(exp, cnjs); - for (auto a : cnjs) - { - a = simplifyBool(a); - if (isOpX(a)) - { - return mk(efac); - } - if (isOpX(a)) - { - continue; - } - newCnjs.insert(a); - } - return conjoin (newCnjs, efac); - } - - if (isOpX(exp)) - { - Expr cond = exp->arg(0); - if (isOpX(cond)) - { - return exp->arg(1); - } - else if (isOpX(cond)) + // simplification based on equivalence classes + template static Expr simpEquivClasses(Range& hardVars, ExprSet& cnjs, ExprFactory& efac) + { + set equivs; + Expr res = conjoin(cnjs, efac); + + // get classes + for (auto it = cnjs.begin(); it != cnjs.end(); it = cnjs.erase(it)) { - return exp->arg(2); + Expr e = *it; + if (isOpX(e)) + { + bool found = false; + for (auto eq : equivs) + { + bool foundLeft = find(eq->begin(), eq->end(), e->left()) != eq->end(); + bool foundRight = find(eq->begin(), eq->end(), e->right()) != eq->end(); + if (foundLeft && !foundRight) { found = true; eq->push_back(e->right()); break; } + else if (!foundLeft && foundRight) { found = true; eq->push_back(e->left()); break; } + } + if (!found) + { + ExprVector* n = new ExprVector(); + n->push_back(e->left()); + n->push_back(e->right()); + equivs.insert(n); + } + } } - else if (isOpX(exp->arg(1)) && isOpX(exp->arg(2))) + + // do rewriting + bool toRepeat = false; + ExprSet removed; + for (auto & eq : equivs) { - return cond; + Expr hardVar = NULL; + for (auto & a : hardVars) + { + for (auto it = eq->begin(); it != eq->end(); ++it) + if (contains(*it, a)) // for the case of selects + { hardVar = *it; break; } + if (hardVar != NULL) break; + } + + if (hardVar == NULL) continue; + + for (auto it = eq->begin(); it != eq->end(); ++it) + { + ExprVector av; + filter (*it, IsConst (), inserter(av, av.begin())); + if (av.size() > 0 && emptyIntersect(av, hardVars) && // don't replace constants and hardVars + emptyIntersect(hardVar, removed) && IsConst()(*it)) + { + removed.insert(*it); + res = replaceAll(res, *it, hardVar); + toRepeat = true; + } + } + free(eq); } - else if (isOpX(exp->arg(1)) && isOpX(exp->arg(2))) + res = simplifyBool(res); + if (toRepeat) { - return mkNeg(cond); + getConj(res, cnjs); + return simpEquivClasses(hardVars, cnjs, efac); } - else if (exp->arg(1) == exp->arg(2)) + return res; + } + + struct SimplifyQuantsExpr + { + SimplifyQuantsExpr () {}; + + Expr operator() (Expr exp) { - return exp->arg(1); + if (isOpX(exp) || isOpX(exp)) + { + ExprVector args; + for (int i = 0; i < exp->arity() - 1; i++) + { + Expr v = exp->arg(i); + if (contains(exp->last(), v)) + args.push_back(v); + } + if (args.empty()) return exp->last(); + args.push_back(exp->last()); + if (isOpX(exp)) return mknary(args); + else return mknary(args); + } + return exp; } - } + }; + + inline static Expr simplifyQuants (Expr exp) + { + RW rw(new SimplifyQuantsExpr()); + return dagVisit (rw, exp); + } + + void getQVars (Expr exp, map& vars); - if (isOpX(exp) && - (isOp(exp->left()) || - isOpX(exp->left()) || isOpX(exp->left()))) - return mkNeg(exp->left()); + template static Expr weakenForVars(Expr fla, Range& vars) + { + ExprSet cnj; + getConj(fla, cnj); +// ineqMerger(cnj, true); - return exp; + for (auto it = cnj.begin(); it != cnj.end(); ) + { + ExprVector av; + filter (*it, bind::IsConst (), inserter(av, av.begin())); + map qv; + getQVars (*it, qv); + for (auto & a : qv) + for (auto & b : a.second) + for (auto it1 = av.begin(); it1 != av.end(); ) + if (*it1 == b) { + it1 = av.erase(it1); break; } + else ++it1; + + if (emptyIntersect(av, vars)) ++it; + else it = cnj.erase(it); + } + return simplifyBool(conjoin(cnj, fla->getFactory())); } - }; - static Expr simplifyArr (Expr exp); + template static Expr weakenForHardVars(Expr fla, Range& vars) + { + ExprSet qVars; + filter (fla, bind::IsConst (), inserter (qVars, qVars.begin())); + minusSets(qVars, vars); + return weakenForVars(fla, qVars); + } - struct SimplifyArrExpr - { - SimplifyArrExpr () {}; + void getExtraVars(Expr fla, ExprVector& vars, ExprSet& allVars) + { + filter (fla, bind::IsConst (), inserter (allVars, allVars.begin())); + minusSets(allVars, vars); + map qv; + getQVars (fla, qv); + for (auto & q : qv) minusSets(allVars, q.second); + } - Expr operator() (Expr exp) + bool hasOnlyVars(Expr fla, ExprVector& vars) { - // GF: to enhance + ExprSet allVars; + getExtraVars(fla, vars, allVars); + return allVars.empty(); + } - if (isOpX(exp)) - { - ExprSet stores; - getChainOfStores(exp->left(), stores); - for (auto s : stores) - if (exp->right() == s->right()) // cell overwritten - exp = replaceAll(exp, s, s->left()); - } - - if (isOpX(exp->left()->left(), exp->last()))); + for (auto it = a->args_begin (), end = a->args_end (); it != end; ++it) + { + getAddTerm(*it, terms); + } } - } - - if (isOpX(exp)) - { - if (isOpX(exp->left()) && exp->right() == exp->left()->left()) + else if (isOpX(a)) { - return simplifyArr(mk(mk(exp->left(), exp->right()->right()), exp->right()->last())); + ExprVector tmp; + getAddTerm(a->left(), tmp); + for (auto & t : tmp) + { + bool toadd = true; + for (auto it = terms.begin(); it != terms.end(); ) + { + if (*it == t) + { + terms.erase(it); + toadd = false; + break; + } + else ++it; + } + if (toadd) terms.push_back(additiveInverse(t)); + } } - if (isOpX(exp->left()->left()->left(), exp->left()->right()), exp->right())); + Expr tmp = rewriteMultAdd(a); + if (tmp == a) terms.push_back(a); + else getAddTerm(tmp, terms); } - if (isOpX(exp->right()->left()->left(), exp->right()->right()), exp->left())); + bool found = false; + for (auto it = terms.begin(); it != terms.end(); ) + { + if (additiveInverse(*it) == a) + { + terms.erase(it); + found = true; + break; + } + else ++it; + } + if (!found) terms.push_back(a); } - } - return exp; } - }; - inline static Expr simplifyArr (Expr exp) - { - if (containsOp(exp) || containsOp(exp)) return exp; - RW rw(new SimplifyArrExpr()); - return dagVisit (rw, exp); - } + struct AddMultDistr + { + AddMultDistr () {}; + + Expr operator() (Expr exp) + { + if (isOpX(exp) && exp->arity() == 2) + { + Expr lhs = exp->left(); + Expr rhs = exp->right(); - inline static Expr simplifyArithm (Expr exp, bool keepRedundandDisj = false, bool keepRedundandConj = false) - { - RW rw(new - SimplifyArithmExpr(exp, keepRedundandDisj, keepRedundandConj)); - return dagVisit (rw, exp); - } + ExprVector alllhs; + getAddTerm(lhs, alllhs); - inline static Expr simplifyBool (Expr exp) - { - RW rw(new SimplifyBoolExpr(exp->getFactory())); - return dagVisit (rw, exp); - } + ExprVector allrhs; + getAddTerm(rhs, allrhs); + + ExprVector unf; + for (auto &a : alllhs) + { + for (auto &b : allrhs) + { + unf.push_back(mk(a, b)); + } + } + return mkplus(unf, exp->getFactory()); + } - inline static void simplBoolReplCnjHlp(ExprVector& hardVars, ExprSet& cnjs, ExprVector& facts, ExprVector& repls) - { - bool toRestart; - ExprSet toInsert; + return exp; + } + }; - for (auto it = cnjs.begin(); it != cnjs.end(); ) + inline static Expr rewriteMultAdd (Expr exp) { - if (isOpX(*it)) - { - it = cnjs.erase(it); - continue; - } + RW mu(new AddMultDistr()); + return dagVisit (mu, exp); + } + + struct FindNonlinAndRewrite + { + ExprVector& vars; + ExprMap& extraVars; + bool arrays; - Expr a = replaceAll(*it, facts, repls); + FindNonlinAndRewrite (ExprVector& _vars, ExprMap& _extraVars, bool _arrays) : + vars(_vars), extraVars(_extraVars), arrays(_arrays) {}; - if (isOpX(a)) - { - Expr lhs = simplifyBool(a->left()); - bool isTrue = isOpX(lhs); - bool isFalse = isOpX(lhs); + Expr operator() (Expr t) + { + if (isOpX(t)) + { + // using the communativity of multiplication + ExprVector ops; + getMultOps(t, ops); + + ExprVector nonlinPart; + cpp_int linPart = 1; + for (auto & a : ops) + { + ExprVector av; + filter (a, IsConst (), inserter(av, av.begin())); + if (av.size() == 0) + { + linPart = linPart * lexical_cast(a); + continue; + } + for (auto & b : av) + { + if (find(vars.begin(), vars.end(), b) == vars.end()) + { + bool found = false; + for (auto & c : extraVars) if (c.second == b) { found = true; break; } + if (! found) + { +// errs () << "WARNING. Wrong symbol at " << *t << ".\n"; + return mk(t->getFactory()); + } + } + } + nonlinPart.push_back(a); + } - if (isTrue) a = simplifyBool(a->right()); - else if (isFalse) continue; - } + if (linPart == 0) return mkMPZ (0, t->getFactory()); + if (nonlinPart.size() <= 1) return t; - if (isOpX(a)) - { - // TODO: this could be symmetric + Expr multedVars = mkmult(nonlinPart, t->getFactory()); + if (extraVars[multedVars] == NULL) + { + Expr new_name = mkTerm ("__e__" + to_string(extraVars.size()), t->getFactory()); + Expr var = intConst(new_name); + extraVars[multedVars] = var; + } - Expr lhs = simplifyBool(a->left()); - bool isTrue = isOpX(lhs); - bool isFalse = isOpX(lhs); + if (linPart == 1) return extraVars[multedVars]; + else return mk( mkMPZ(linPart, t->getFactory()), extraVars[multedVars]); + } + else if (isOpX(t) || isOpX(t) || isOpX
(t) || (arrays && isOpX(rhs)) + { + Expr arrVar = rhs->left(); + if (isOpX(arrVar)) + { + return unfoldITE (reBuildCmp(term, + mk(arrVar->left(), + mk(arrVar->last(), rhs->right())), lhs)); + } + } + } + return term; + } - Expr transformed = mk( mk(iteCond, newCmp1), - mk(mkNeg(iteCond), newCmp2)); + struct MoveInsideITEr + { + MoveInsideITEr () {}; - // outs () << " [2b] ---> " << *term << "\n"; - // outs () << " [2e] ---> " << *transformed << "\n\n"; - return transformed; - } - if (isOpX(rhs)) - { - bool found = false; - Expr iteArg; - ExprVector newArgs; - for (auto it = rhs->args_begin(), end = rhs->args_end(); it != end; ++it) + Expr operator() (Expr exp) { - // make sure that only one ITE is found + if (isOpX(exp)) + { + Expr ite = exp->arg(0); + if (isOpX(ite)) + { + return mk(ite->arg(0), + mk(ite->arg(1), exp->arg(1)), + mk(ite->arg(2), exp->arg(1))); + } + } + if (isOpX(exp)) + { + ExprVector args; + Expr ite; + for (auto it = exp->args_begin(), end = exp->args_end(); it != end; ++it) + { + if (isOpX(*it)) + { + if (ite != NULL) return exp; + ite = *it; + } + else + { + args.push_back(*it); + } + } - if (!found && isOpX(*it)) - { - found = true; - iteArg = *it; - } - else - { - newArgs.push_back(*it); - } - } - if (found) - { - Expr iteCond = unfoldITE (iteArg->arg(0)); - Expr iteC1 = iteArg->arg(1); - Expr iteC2 = iteArg->arg(2); + if (ite == NULL) return exp; - newArgs.push_back(iteC1); - Expr e1 = unfoldITE (reBuildCmp(term, lhs, mknary(newArgs))); // GF: "unfoldITE" gives error... + Expr multiplier = mkmult (args, exp->getFactory()); + return mk(ite->arg(0), + mk(multiplier, ite->arg(1)), + mk(multiplier, ite->arg(2))); + } - newArgs.pop_back(); - newArgs.push_back(iteC2); - Expr e2 = unfoldITE (reBuildCmp(term, lhs, mknary(newArgs))); + return exp; + } + }; - Expr transformed = mk(mk(iteCond, e1), - mk(mkNeg(iteCond),e2)); + inline static Expr moveInsideITE (Expr exp) + { + RW a(new MoveInsideITEr()); + return dagVisit (a, exp); + } - // outs () << " [3b] ---> " << *term << "\n"; - // outs () << " [3e] ---> " << *transformed << "\n\n"; + struct RAVSUBEXPR: public std::unary_function + { + Expr s; + Expr t; + Expr p; - return transformed; - } - } - if (isOpX(lhs)) - { - // symmetric to the above case - bool found = false; - Expr iteArg; - ExprVector newArgs; - for (auto it = lhs->args_begin(), end = lhs->args_end(); it != end; ++it) + RAVSUBEXPR (Expr _s, Expr _t, Expr _p) : s(_s), t(_t), p(_p) {} + VisitAction operator() (Expr exp) const { - if (!found && isOpX(*it)) - { - found = true; - iteArg = *it; - } - else - { - newArgs.push_back(*it); - } + return exp == s ? + VisitAction::changeTo (replaceAll(exp, t, p)) : + VisitAction::doKids (); } + }; + + // -- replace all occurrences of t by p in a subexpression s of exp + inline Expr replaceInSubexpr (Expr exp, Expr s, Expr t, Expr p) + { + RAVSUBEXPR rav(s, t, p); + return dagVisit (rav, exp); + } - if (found) + struct NegAndRewriter + { + NegAndRewriter () {}; + + Expr operator() (Expr exp) { - Expr iteCond = unfoldITE (iteArg->arg(0)); - Expr iteC1 = iteArg->arg(1); - Expr iteC2 = iteArg->arg(2); + if (isOpX(exp) && isOpX(exp->arg(0))) + { + ExprSet cnjs; + getConj(exp->arg(0), cnjs); + ExprSet neggedCnjs; + for (auto & c : cnjs) neggedCnjs.insert(mkNeg(c)); + return disjoin(neggedCnjs, exp->getFactory()); + } + return exp; + } + }; - newArgs.push_back(iteC1); - Expr e1 = unfoldITE (reBuildCmp(term, mknary(newArgs), rhs)); + struct SelectStoreRewriterHelpRepairer + { + Expr ind; + ExprFactory& efac; + SelectStoreRewriterHelpRepairer (Expr _ind) : + ind(_ind), efac(ind->getFactory()) {}; - newArgs.pop_back(); - newArgs.push_back(iteC2); - Expr e2 = unfoldITE (reBuildCmp(term, mknary(newArgs), rhs)); + Expr operator() (Expr exp) + { + if (isOpX(exp) && isOpX(exp) && isOpX(exp->left())) + { + if (exp->right() == exp->left()->right()) + return exp->left()->last(); + else + return mk(mk(exp->right(), exp->left()->right()), + exp->left()->last(), mk(val, sel->right())); + if (containsOp(sel->left())) + { + Expr nested = rewriteSelectStore(mk(val, sel->left())); + RW + a(new SelectStoreRewriterHelpRepairer(sel->right())); + return mk(dagVisit (a, nested), main); + } + return main; + } + return exp; } - } - if (isOpX(rhs)) - { - Expr arrVar = rhs->left(); - if (isOpX(arrVar)) + }; + + struct SelectReplacer : public std::unary_function + { + ExprMap& sels; + SelectReplacer (ExprMap& _sels) : sels(_sels) {}; + + Expr operator() (Expr exp) { - Expr ifExpr = unfoldITE (reBuildCmp(term, arrVar->right(), lhs)); - Expr elseExpr = unfoldITE (reBuildCmp(term, arrVar->last(), lhs)); + if (isOpX(rhs)) - { - Expr arrVar = rhs->left(); - if (isOpX(arrVar)) + QuantifiedVarsFilter (ExprSet& _vars): vars(_vars) {}; + + VisitAction operator() (Expr exp) { - return unfoldITE (reBuildCmp(term, - mk(arrVar->left(), - mk(arrVar->last(), rhs->right())), lhs)); + if (isOp(exp) || isOp(exp)) + { + for (int i = 0; i < exp->arity() - 1; i++) + { + vars.insert(fapp(exp->arg(i))); + } + } + return VisitAction::doKids (); } - } + }; + + inline void getQuantifiedVars (Expr exp, ExprSet& vars) + { + QuantifiedVarsFilter qe (vars); + dagVisit (qe, exp); + } + + inline static void getQuantifiedFormulas (Expr a, ExprSet &flas) + { + if (isOpX(a) || isOpX(a)) + flas.insert(a); + else // TODO: remove/generalize later + for (unsigned i = 0; i < a->arity(); i++) + getQuantifiedFormulas(a->arg(i), flas); } - return term; - } - struct MoveInsideITEr - { - MoveInsideITEr () {}; + template static Expr mkQFla (Expr def, Range& vars, bool forall = false) + { + if (vars.empty()) return def; + ExprVector args; + for (auto & a : vars) args.push_back(a->last()); + args.push_back(def); + if (forall) return mknary(args); + else return mknary(args); + } - Expr operator() (Expr exp) + // rewrite just equalities + template static Expr simpleQE(Expr exp, Range& quantified) { - if (isOpX(exp)) - { - Expr ite = exp->arg(0); - if (isOpX(ite)) + ExprFactory& efac = exp->getFactory(); + ExprSet cnjsSet, dsjsSet; + getDisj(exp, dsjsSet); + if (dsjsSet.size() > 1) { - return mk(ite->arg(0), - mk(ite->arg(1), exp->arg(1)), - mk(ite->arg(2), exp->arg(1))); + ExprSet newDsjs; + for (auto & d : dsjsSet) newDsjs.insert(simpleQE(d, quantified)); + return disjoin(newDsjs, efac); } - } - if (isOpX(exp)) - { - ExprVector args; - Expr ite; - for (auto it = exp->args_begin(), end = exp->args_end(); it != end; ++it) + + getConj(exp, cnjsSet); + ExprVector cnjs; + ineqMerger(cnjsSet, true); + cnjs.insert(cnjs.end(), cnjsSet.begin(), cnjsSet.end()); + for (auto & var : quantified) { - if (isOpX(*it)) - { - if (ite != NULL) return exp; - ite = *it; - } - else - { - args.push_back(*it); - } - } + ExprSet eqs; + + for (unsigned it = 0; it < cnjs.size(); ) + { + Expr cnj = cnjs[it]; + if (!isOpX(cnj) || !contains(cnj, var)) + { it++; continue;} + + Expr normalized = cnj; + if (isNumeric(var) && isNumeric(cnj->left())) + { + normalized = simplifyArithm( + mk(mk(cnj->arg(0), additiveInverse(cnj->arg(1))), + mkMPZ (0, efac))); + normalized = ineqSimplifier(var, normalized); + } + else if (var == normalized->right()) + { + normalized = mk(var, normalized->left()); + } + + // after the normalization, var can be eliminated + if (!isOpX(normalized) || !contains(normalized, var)) + { it++; continue;} + + if (var == normalized->left()) + { + eqs.insert(normalized->right()); + cnjs.erase (cnjs.begin()+it); + continue; + } + else if (isOpX(normalized->left()) && isOpX(normalized->left()->left())) + { + cnjs.push_back(mk(mk(normalized->right(), normalized->left()->left()), + mkMPZ (0, efac))); + } + else if (isArray(var) && containsNum(exp, var) == 1) + { + Expr store = NULL; + if (isOpX(normalized->right()) && var == normalized->right()->left() && + emptyIntersect(normalized->left(), quantified)) + { + // one level of storing (to be extended) + store = normalized; + } + else if (isOpX(normalized->left()) && var == normalized->left()->left() && + emptyIntersect(normalized->right(), quantified)) + { + normalized = mk(normalized->right(), normalized->left()); + store = normalized; + } + + if (store != NULL) + { + // assume "store" = (A = store(var, x, y)) + cnjs[it] = mk(mk(exp->right())) - { - Expr cmp = simplifyCmp(mk(ind, exp->right()->right())); - return simplifyIte(mk(cmp, - mk(efac), exp)); - } - return exp; + RW a(new SelectStoreRewriter()); + return dagVisit (a, unfoldITE(simplifyArr(exp))); } - }; - inline static Expr rewriteSelectStore(Expr exp); - - struct SelectStoreRewriter - { - SelectStoreRewriter () {}; - - Expr operator() (Expr exp) + // very simple check if tautology (SMT-based check is expensive) + inline static bool isTautology(Expr fla) { - if (isOpX(exp->left()->left(), exp->right())); - } + if (isOpX(fla)) + if (fla->arg(0) == fla->arg(1)) return true; - // to avoid this, try unfoldITE first - if (containsOp(exp)) return exp; + if (isOp(fla)) + if (isOpX(fla->arg(0)) && isOpX(fla->arg(1))) + return evaluateCmpConsts(fla, + lexical_cast(fla->arg(0)), lexical_cast(fla->arg(1))); - Expr sel, val; - if (isOpX(exp)) - { - if (isOpX(exp->right())) { sel = exp->right(); val = exp->left(); } - if (isOpX(exp->left())) { sel = exp->left(); val = exp->right(); } - } + ExprSet cnjs; + getConj(fla, cnjs); + if (cnjs.size() < 2) return false; - if (sel != NULL) - { - Expr main = mk(sel->last(), mk(exp)) - { - if (sels[exp] != NULL) return sels[exp]; - Expr repl = intConst(mkTerm ("sel_" + lexical_cast(sels.size()), exp->getFactory())); - sels[exp] = repl; - return repl; - } - return exp; + // an approximation of.. + if (isNumericConst(term)) { + return false; + } + else if (isIntConst(term)) { + return true; + } + else if (isOpX(term)) { + bool res = false; + for (auto it = term->args_begin(), end = term->args_end(); it != end; ++it){ + res = res || isLinearCombination(*it); + } + return res; + } + else if (isOpX(term) || isOpX(term) || isOpX(term)) { + bool res = true; + for (auto it = term->args_begin(), end = term->args_end(); it != end; ++it){ + res = res && isLinearCombination(*it); + } + return res; + } + return false; } - }; - - inline static Expr replaceSelects(Expr exp, ExprMap& sels) - { - RW a(new SelectReplacer(sels)); - return dagVisit (a, exp); - } - struct QuantifiedVarsFilter : public std::unary_function - { - ExprSet& vars; + // similar to simplifyArithmDisjunctions + inline static Expr simplifyArithmConjunctions(Expr fla, bool keep_redundand = false) + { + ExprFactory& efac = fla->getFactory(); + ExprSet cnjs, newCnjs; + getConj(fla, cnjs); + if (cnjs.size() == 1) return *cnjs.begin(); + ExprSet lin_coms; + + // search for a var, const*var or whatever exists in any conjunct + for (auto & d : cnjs) { + if (!isOp(d) || + !isNumeric(d->arg(0))) { + newCnjs.insert(d); + continue; + } - QuantifiedVarsFilter (ExprSet& _vars): vars(_vars) {}; + Expr tmp = simplifyArithm( + reBuildCmp(d, mk(d->arg(0), additiveInverse(d->arg(1))), + mkMPZ (0, efac))); + tmp = ineqReverter(tmp); - VisitAction operator() (Expr exp) - { - if (isOp(exp) || isOp(exp)) - { - for (int i = 0; i < exp->arity() - 1; i++) - { - vars.insert(fapp(exp->arg(i))); - } - } - return VisitAction::doKids (); - } - }; - - inline void getQuantifiedVars (Expr exp, ExprSet& vars) - { - QuantifiedVarsFilter qe (vars); - dagVisit (qe, exp); - } - - inline static void getQuantifiedFormulas (Expr a, ExprSet &flas) - { - if (isOpX(a) || isOpX(a)) - flas.insert(a); - else // TODO: remove/generalize later - for (unsigned i = 0; i < a->arity(); i++) - getQuantifiedFormulas(a->arg(i), flas); - } - - // rewrite just equalities - template static Expr simpleQE(Expr exp, Range& quantified) - { - ExprFactory& efac = exp->getFactory(); - ExprSet cnjsSet; - getConj(exp, cnjsSet); - ExprVector cnjs; - cnjs.insert(cnjs.end(), cnjsSet.begin(), cnjsSet.end()); - for (auto & var : quantified) - { - ExprSet eqs; - Expr store; // todo: extend to ExprSet - - for (unsigned it = 0; it < cnjs.size(); ) - { - Expr cnj = cnjs[it]; - if (!isOpX(cnj) || !contains(cnj, var)) - { it++; continue;} + if (isOpX(tmp)) continue; + if (isOpX(tmp)) return tmp; - Expr normalized = cnj; - if (isNumeric(var) && isNumeric(cnj->left())) - { - normalized = simplifyArithm( - mk(mk(cnj->arg(0), additiveInverse(cnj->arg(1))), - mkMPZ (0, efac))); - normalized = ineqSimplifier(var, normalized); + newCnjs.insert(tmp); + lin_coms.insert(tmp->arg(0)); } - else if (var == normalized->right()) + + if (lin_coms.size() == 0) { - normalized = mk(normalized->right(), normalized->left()); + if (!keep_redundand) ineqMerger(cnjs, true); + return conjoin(cnjs, efac); } - // after the normalization, var can be eliminated - if (!isOpX(normalized) || !contains(normalized, var)) - { it++; continue;} + for (auto &lin_com : lin_coms) { - if (!contains (normalized->right(), var)) - { - if (var == normalized->left()) - { - eqs.insert(normalized->right()); - cnjs.erase (cnjs.begin()+it); - continue; - } - else if (isOpX(normalized->left()) && isOpX(normalized->left()->left())) - { - cnjs.push_back(mk(mk(normalized->right(), normalized->left()->left()), - mkMPZ (0, efac))); - } - } + cpp_int cur_max_gt; + cpp_int cur_max_ge; + cpp_int cur_min_lt; + cpp_int cur_min_le; - if (store == NULL && containsOp(normalized) && isOpX(normalized) && - emptyIntersect(normalized->left(), quantified) && - isOpX(normalized->right()) && var == normalized->right()->left()) { - // one level of storing (to be extended) - store = normalized; - } + bool cur_max_gt_bl = false; + bool cur_max_ge_bl = false; + bool cur_min_lt_bl = false; + bool cur_min_le_bl = false; -// errs() << "WARNING: COULD NOT NORMALIZE w.r.t. " << *var << ": " -// << *normalized << " [[ " << *cnj << " ]]\n"; + set all_diseqs; + + for (auto it = newCnjs.begin(); it != newCnjs.end(); ) { + auto d = *it; + + if (!isOp(d) || + d->arg(0) != lin_com || + !isOpX(d->arg(1))) { + ++it; + continue; + } - cnjs[it] = normalized; - it++; - } + cpp_int c = lexical_cast(d->arg(1)); - if (store != NULL) { - // assume "store" = (A = store(var, x, y)) - for (unsigned it = 0; it < cnjs.size(); it++) { - ExprVector se; - filter (cnjs[it], IsSelect (), inserter(se, se.begin())); - for (auto s : se) { - if (contains(store, s)) continue; - if (s->left() == var) { - Expr cmp = simplifyCmp(mk(store->right()->right(), s->right())); - cnjs[it] = replaceAll(cnjs[it], s, simplifyIte( - mk(cmp, - store->right()->last(), - mk(arrVar, indVar), valVar)); + return arrVar; + } - ExprVector all; - ExprVector allrhs; + struct TransitionOverapprox + { + ExprVector& srcVars; + ExprVector& dstVars; - getAddTerm(lhs, all); - getAddTerm(rhs, allrhs); - for (auto & a : allrhs) - { - all.push_back(additiveInverse(a)); - } - ExprSet newlhs; - for (auto &v : intVars) - { - cpp_int coef = 0; - string s1 = lexical_cast(v); - for (auto it = all.begin(); it != all.end();) - { - if (!contains(*it, v)) { ++it; continue; } - string s2 = lexical_cast(*it); + TransitionOverapprox (ExprVector& _srcVars, ExprVector& _dstVars): + srcVars(_srcVars), dstVars(_dstVars) {}; - if (s1 == s2) - { - coef++; - it = all.erase(it); - } - else if (isOpX(*it)) - { - string s3 = lexical_cast((*it)->left()); - if (s1 == s3) + Expr operator() (Expr exp) + { + if (isOp(exp) && !containsOp(exp)) { - coef--; - it = all.erase(it); + ExprSet tmp; + if (isOpX(exp->left())) + { + processNestedStores(exp->left(), tmp); + return conjoin(tmp, exp->getFactory()); + } + else if (isOpX(exp->right())) + { + processNestedStores(exp->right(), tmp); + return conjoin(tmp, exp->getFactory()); + } + + ExprVector av; + filter (exp, IsConst (), inserter(av, av.begin())); + if (!emptyIntersect(av, srcVars) && !emptyIntersect(av, dstVars)) + return mk(exp->getFactory()); } - else + else if (isOpX(exp)) { - ++it; + ExprSet newDsjs; + for (unsigned i = 0; i < exp->arity (); i++) + { + ExprSet cnjs; + getConj(exp->arg(i), cnjs); + map sels; + bool allselects = true; + bool noselects = true; + for (auto & a : cnjs) + { + sels[a] = containsOp(exp) || isOpX(exp)) && !containsOp(exp->right())) + { + accs.insert(exp->right()); + } + return VisitAction::doKids (); } - else + }; + + struct DeltaRetriever : public std::unary_function + { + ExprVector& srcVars; + ExprVector& dstVars; + ExprSet& deltas; + + DeltaRetriever (ExprVector& _srcVars, ExprVector& _dstVars, ExprSet& _deltas): + srcVars(_srcVars), dstVars(_dstVars), deltas(_deltas) {}; + + VisitAction operator() (Expr exp) { - success = false; + if (isOpX(exp)) + { + ExprVector av; + filter (exp, IsConst (), inserter(av, av.begin())); + if (av.size() != 2) return VisitAction::skipKids ();; + for (int i = 0; i < srcVars.size(); i++) + { + if ((av[0] == srcVars[i] && av[1] == dstVars[i]) || + (av[1] == srcVars[i] && av[0] == dstVars[i])) + { + set coefs; + exp = normalizeAtom(exp, av); + if (!getLinCombCoefs(exp, coefs)) continue; + + bool success = true; + for (auto i : coefs) success = success && (i == -1 || i == 1); + if (success) + { + Expr cExpr = exp->right(); + cpp_int c = abs(lexical_cast(cExpr)); + if (c > 1) + for (int j = 0; j < 2 /*c*/; j++) // GF: for large c it gives many cands + deltas.insert(mk(mk( + srcVars[i], + mkMPZ(c, exp->getFactory())), + mkMPZ ((j), exp->getFactory()))); + } + } + } + return VisitAction::skipKids (); + } + return VisitAction::doKids (); } - } - - if (success && newlhs.size() == 0) - { - return (evaluateCmpConsts(fla, 0, -intconst)) ? mk(fla->getFactory()) : - mk(fla->getFactory()); - } + }; - if (success) - { - Expr pl = (newlhs.size() == 1) ? *newlhs.begin(): mknary(newlhs); - Expr c = mkMPZ (-intconst, fla->getFactory()); - return reBuildCmp(fla, pl, c); - } - } - return fla; - } - - inline static Expr normalizeDisj(Expr exp, ExprVector& intVars) - { - ExprSet disjs; - ExprSet newDisjs; - getDisj(exp, disjs); - for (auto &d : disjs) - { - Expr norm = normalizeAtom(d, intVars); - if ( isOpX (norm)) return norm; - if (!isOpX(norm)) newDisjs.insert(norm); - } - return disjoin(newDisjs, exp->getFactory()); - } - - inline static Expr normalize(Expr fla) - { - ExprVector vars; - filter (fla, IsConst (), inserter(vars, vars.begin())); - if (isOpX(fla) || isOpX(fla)) - { - ExprSet args; - for (int i = 0; i < fla->arity(); i++){ - args.insert(normalizeAtom(fla->arg(i), vars)); - } - - return simplifyBool(isOpX(fla) ? conjoin (args, fla->getFactory()) : - disjoin (args, fla->getFactory())); - } - return normalizeAtom(fla, vars); - } - - inline static bool getLinCombCoefs(Expr ex, set& intCoefs) - { - bool res = true; - if (isOpX(ex)) return false; - if (isOpX(ex)) - { - for (auto it = ex->args_begin (), end = ex->args_end (); it != end; ++it) - res = res && getLinCombCoefs(*it, intCoefs); - } - else if (isOp(ex)) // assuming the lin.combination is on the left side - { - if (!isOpX(ex->right())) return false; - ExprVector addt; - getAddTerm (ex->left(), addt); - for (auto & t : addt) - { - if (isOpX(t) && t->arity() == 2 && - isOpX(t->left()) && !isOpX(t->right())) - intCoefs.insert(lexical_cast (t->left())); - else return false; - } + inline Expr rewriteBoolEq (Expr exp) + { + RW tr(new BoolEqRewriter()); + return dagVisit (tr, exp); } - return res; - } - inline static bool getLinCombConsts(Expr ex, set& intConsts) - { - if (isOpX(ex)) + inline void retrieveDeltas (Expr exp, ExprVector& srcVars, ExprVector& dstVars, ExprSet& deltas) { - bool res = true; - for (auto it = ex->args_begin (), end = ex->args_end (); it != end; ++it) - res &= getLinCombConsts(*it, intConsts); - return res; + DeltaRetriever dr (srcVars, dstVars, deltas); + dagVisit (dr, exp); } - else if (isOp(ex)) // assuming the lin.combination is on the left side + + inline void retrieveConds (Expr exp, ExprSet& conds) { - if (isOpX(ex->right())) - intConsts.insert(lexical_cast (ex->right())); - else - return false; + CondRetriever dr (conds); + dagVisit (dr, exp); } - return true; - } - inline static void normalizeSelects(Expr& body) - { - ExprVector se; - filter (body, IsSelect (), inserter(se, se.begin())); - for (auto & s : se) + inline void retrieveAccFuns (Expr exp, ExprSet& accs) { - if (!isIntConst(s->right())) - { - Expr var_it = intConst(mkTerm ("it_" + lexical_cast(&s), body->getFactory())); - body = mk(replaceInSubexpr(body, s, s->right(), var_it), mk(s->right(), var_it)); - } + AccessRetriever dr (accs); + dagVisit (dr, exp); } - } - - inline static void uniqueizeSelects(Expr& body) - { - ExprVector se; - filter (body, IsSelect (), inserter(se, se.begin())); - if (se.size() < 2) return; - ExprSet seenIterators; - for (auto & s : se) + inline void retrieveTransitions (Expr exp, ExprVector& srcVars, ExprVector& dstVars, ExprSet& transitions) { - if (find(seenIterators.begin(), seenIterators.end(), s->right()) == seenIterators.end()) - { - seenIterators.insert(s->right()); - } - else - { - Expr var_it = intConst(mkTerm ("it_" + lexical_cast(&s), body->getFactory())); - body = mk(replaceInSubexpr(body, s, s->right(), var_it), mk(s->right(), var_it)); - } - } - } - - inline static bool isSymmetric (Expr exp) - { - return isOpX(exp); - } - - Expr processNestedStores (Expr exp, ExprSet& cnjs) - { - // TODO: double check if cells are overwritten - Expr arrVar = exp->left(); - if (isOpX(arrVar)) arrVar = processNestedStores(arrVar, cnjs); - Expr indVar = exp->right(); - Expr valVar = exp->last(); - cnjs.insert(mk(mk(a); - if (sels[a]) noselects = false; - else allselects = false; - } - if (!noselects && ! allselects) - { - ExprSet newCnjs; - for (auto & a : cnjs) - if (sels[a]) newCnjs.insert(a); - newDsjs.insert(conjoin(newCnjs,exp->getFactory())); - } - } - return disjoin(newDsjs,exp->getFactory()); - } - return exp; + TransitionMiner trm (srcVars, dstVars, transitions); + dagVisit (trm, exp); } - }; - - // opposite to TransitionOverapprox - struct TransitionMiner : public std::unary_function - { - ExprVector& srcVars; - ExprVector& dstVars; - ExprSet& transitions; - - TransitionMiner (ExprVector& _srcVars, ExprVector& _dstVars, ExprSet& _transitions): - srcVars(_srcVars), dstVars(_dstVars), transitions(_transitions) {}; - VisitAction operator() (Expr exp) + inline static Expr overapproxTransitions (Expr exp, ExprVector& srcVars, ExprVector& dstVars) { - if (isOp(exp) && !containsOp(exp)) - { - ExprVector av; - filter (exp, IsConst (), inserter(av, av.begin())); - if (!emptyIntersect(av, srcVars) && !emptyIntersect(av, dstVars)) - { - transitions.insert(exp); - } - return VisitAction::skipKids (); - } - return VisitAction::doKids (); + RW rw(new TransitionOverapprox(srcVars, dstVars)); + return dagVisit (rw, exp); } - }; - struct BoolEqRewriter - { - BoolEqRewriter () {}; - - Expr operator() (Expr exp) + inline static Expr mergeIneqs (Expr e1, Expr e2) { - if (isOpX(exp)) - { - Expr lhs = exp->left(); - Expr rhs = exp->right(); - if (isBoolConst(lhs) || isBoolConst(rhs) || - isOpX(lhs) || isOpX(rhs)) - { - return mk(mk(mkNeg(lhs), rhs), - mk(lhs, mkNeg(rhs))); - } - return exp; - } - return exp; - } - }; + if (isOpX(e1)) e1 = mkNeg(e1->last()); + if (isOpX(e2)) e2 = mkNeg(e2->last()); + + if (isOpX(e1) && isOpX(e2) && e1->right() == e2->left()) + return mk(e1->left(), e2->right()); + if (isOpX(e1) && isOpX(e2) && e1->right() == e2->left()) + return mk(e1->left(), e2->right()); + if (isOpX(e1) && isOpX(e2) && e1->right() == e2->left()) + return mk(e1->left(), e2->right()); + if (isOpX(e1) && isOpX(e2) && e1->right() == e2->left()) + return mk(e1->left(), e2->right()); + if (isOpX(e1) && isOpX(e2) && (e1->left() == e2->right())) + return mk(e2->left(), e1->right()); + + if (isOpX(e1) && isOpX(e2) && e1->right() == e2->left()) + return mk(e1->left(), e2->right()); + if (isOpX(e1) && isOpX(e2) && e1->right() == e2->left()) + return mk(e1->left(), e2->right()); + if (isOpX(e1) && isOpX(e2) && e1->right() == e2->left()) + return mk(e1->left(), e2->right()); + if (isOpX(e1) && isOpX(e2) && e1->right() == e2->left()) + return mk(e1->left(), e2->right()); + + if (isOpX(e1) && isOpX(e2) && e2->right() == e1->left()) + return mk(e2->left(), e1->right()); + if (isOpX(e2) && isOpX(e1) && e2->right() == e1->left()) + return mk(e2->left(), e1->right()); + if (isOpX(e2) && isOpX(e1) && e2->right() == e1->left()) + return mk(e2->left(), e1->right()); + if (isOpX(e2) && isOpX(e1) && e2->right() == e1->left()) + return mk(e2->left(), e1->right()); + + if (isOpX(e1) && isOpX(e2) && e1->right() == e2->right()) + return mk(e1->left(), e2->left()); + if (isOpX(e1) && isOpX(e2) && e1->right() == e2->right()) + return mk(e1->left(), e2->left()); + if (isOpX(e1) && isOpX(e2) && e1->right() == e2->right()) + return mk(e1->left(), e2->left()); + if (isOpX(e1) && isOpX(e2) && e1->right() == e2->right()) + return mk(e1->left(), e2->left()); + + if (isOpX(e1) && isOpX(e2) && e1->left() == e2->left()) + return mk(e2->right(), e1->right()); + if (isOpX(e1) && isOpX(e2) && e1->left() == e2->left()) + return mk(e2->right(), e1->right()); + if (isOpX(e1) && isOpX(e2) && e1->left() == e2->left()) + return mk(e2->right(), e1->right()); + if (isOpX(e1) && isOpX(e2) && e1->left() == e2->left()) + return mk(e2->right(), e1->right()); + + if (isOpX(e1) && isOpX(e2) && e1->right() == e2->right()) + return mk(e1->left(), e2->left()); + if (isOpX(e1) && isOpX(e2) && e1->right() == e2->right()) + return mk(e1->left(), e2->left()); + if (isOpX(e1) && isOpX(e2) && e1->right() == e2->right()) + return mk(e1->left(), e2->left()); + if (isOpX(e1) && isOpX(e2) && e1->right() == e2->right()) + return mk(e1->left(), e2->left()); + + // TODO: support more cases + return NULL; + } + + inline static Expr mergeIneqsWithVar (Expr e, Expr var) + { + ExprSet cnjs; + ExprVector cnjs2; + ExprSet cnjs3; + getConj(e, cnjs); + for (auto & a : cnjs) + if (contains(a, var)) cnjs2.push_back(a); + else cnjs3.insert(a); - struct CondRetriever : public std::unary_function - { - ExprSet& conds; + if (cnjs2.size() != 2) return e; - CondRetriever (ExprSet& _conds) : conds(_conds) {}; + if(mergeIneqs(cnjs2[0], cnjs2[1]) == NULL) return NULL; - VisitAction operator() (Expr exp) - { - if (isOpX(exp) && !containsOp(exp->arg(0))) - { - conds.insert(exp->arg(0)); - } - return VisitAction::doKids (); + cnjs3.insert(mergeIneqs(cnjs2[0], cnjs2[1])); + return conjoin(cnjs3, e->getFactory()); } - }; - - struct AccessRetriever : public std::unary_function - { - ExprSet& accs; - - AccessRetriever (ExprSet& _accs) : accs(_accs) {}; - VisitAction operator() (Expr exp) + template static void computeTransitiveClosure(ExprSet& r, ExprSet& tr) { - if ((isOpX(bindVars[l1][arrInds[ai]], bindVars[l1 - 1][-1 * var - 1]); +// allVars.insert(bindVars[l1][arrInds[ai]]); +// ai++; +// } +// vers.push_back(bvar); +// } +// versVars.push_back(vers); +// allVars.insert(vers.begin(), vers.end()); +// } +// } + + void getOptimConstr(vector& versVars, int vs, ExprVector& diseqs) { - auto & r = ruleManager.chcs[i]; - if (i != loop[0] && !r.isQuery && r.srcRelation == srcRel) - { - trace.push_back(i); - break; - } + for (auto v : versVars) + for (int i = 0; i < v.size(); i++) + for (int j = i + 1; j < v.size(); j++) + diseqs.push_back(mk(mk(v[i], v[j]), mkMPZ(1, m_efac), mkMPZ(0, m_efac))); + + for (int i = 0; i < vs; i++) + for (int j = 0; j < versVars.size(); j++) + for (int k = j + 1; k < versVars.size(); k++) + diseqs.push_back(mk(mk(versVars[j][i], versVars[k][i]), mkMPZ(1, m_efac), mkMPZ(0, m_efac))); } - ExprVector ssa; - getSSA(trace, ssa); - bindVars.pop_back(); - - toContinue = false; - while (true) + // used for a loop and a splitter +// bool unrollAndExecuteSplitter( +// Expr srcRel, +// ExprVector& srcVars, +// vector >& models, +// Expr splitter, Expr invs, int k = 10) +// { +// assert (splitter != NULL); +// +// // helper var +// string str = to_string(numeric_limits::max()); +// str = str.substr(0, str.find('.')); +// cpp_int max_double = lexical_cast(str); +// +// for (auto & a : ruleManager.cycles) +// { +// for (int cyc = 0; cyc < a.second.size(); cyc++) +// { +// vector mainInds; +// vector arrInds; +// auto & loop = a.second[cyc]; +// if (srcRel != ruleManager.chcs[loop[0]].srcRelation) continue; +// if (models.size() > 0) continue; +// +// ExprVector vars; +// for (int i = 0; i < ruleManager.chcs[loop[0]].srcVars.size(); i++) +// { +// Expr var = ruleManager.chcs[loop[0]].srcVars[i]; +// if (bind::isIntConst(var)) +// { +// mainInds.push_back(i); +// vars.push_back(var); +// } +// else if (isConst (var) && ruleManager.hasArrays[srcRel]) +// { +// for (auto it : ruleManager.iterators[srcRel]) +// { +// vars.push_back(mk(bvar)) bvar = bvar->left(); +// Expr m = allModels[bvar]; +// if (m == NULL) { toSkip = true; break; } +// equalities.insert(mk(srcVar, m)); +// } +// if (toSkip) continue; +// equalities.insert(splitter); +// +// if (u2.isSat(equalities)) //exclude models that don't satisfy splitter +// { +// vector model; +// +// for (int i = 0; i < vars.size(); i++) { +// Expr bvar = versVars[j][i]; +// Expr m = allModels[bvar]; +// double value; +// if (m != NULL && isOpX(m)) +// { +// if (lexical_cast(m) > max_double || +// lexical_cast(m) < -max_double) +// { +// toSkip = true; +// break; +// } +// value = lexical_cast(m); +// } +// else +// { +// toSkip = true; +// break; +// } +// model.push_back(value); +// if (debug) outs () << *bvar << " = " << *m << ", "; +// // if (j == 0) +// // { +// // if (isOpX(var, ruleManager.chcs[loop[0]].srcVars[it])); +// mainInds.push_back(-1 * it - 1); // to be on the negative side +// arrInds.push_back(i); +// } +// } +// } +// +// if (vars.size() < 2 && cyc == ruleManager.cycles.size() - 1) +// continue; // does not make much sense to run with only one var when it is the last cycle +// srcVars[srcRel] = vars; +// +// auto prefix = ruleManager.getPrefix(srcRel); +// vector trace; +// Expr lastModel = mk(m_efac); +// +// for (int p = 0; p < prefix.size(); p++) +// { +// if (chcsConsidered[prefix[p]] == true) +// { +// Expr lastModelTmp = exprModels[prefix[p]]; +// if (lastModelTmp != NULL) lastModel = lastModelTmp; +// trace.clear(); // to avoid CHCs at the beginning +// } +// trace.push_back(prefix[p]); +// } +// +// int l = trace.size() - 1; // starting index (before the loop) +// if (ruleManager.hasArrays[srcRel]) l++; // first iter is usually useless +// +// for (int j = 0; j < k; j++) +// for (int m = 0; m < loop.size(); m++) +// trace.push_back(loop[m]); +// +// int backCHC = -1; +// for (int i = 0; i < ruleManager.chcs.size(); i++) +// { +// auto & r = ruleManager.chcs[i]; +// if (i != loop[0] && !r.isQuery && r.srcRelation == srcRel) +// { +// backCHC = i; +// chcsConsidered[i] = true; // entry condition for the next loop +// trace.push_back(i); +// break; +// } +// } +// +// ExprVector ssa; +// getSSA(trace, ssa); +// bindVars.pop_back(); +// int traceSz = trace.size(); +// +// // compute vars for opt constraint +// vector versVars; +// ExprSet allVars; +// ExprVector diseqs; +// fillVars(srcRel, vars, l, loop.size(), mainInds, arrInds, versVars, allVars); +// getOptimConstr(versVars, vars.size(), diseqs); +// +// Expr cntvar = bind::intConst(mkTerm ("_FH_cnt", m_efac)); +// allVars.insert(cntvar); +// allVars.insert(bindVars.back().begin(), bindVars.back().end()); +// ssa.insert(ssa.begin(), mk(cntvar, mkplus(diseqs, m_efac))); +// +// bool toContinue = false; +// bool noopt = false; +// while (true) +// { +// if (ssa.size() - loop.size() < 2) +// { +// if (debug) outs () << "Unable to find a suitable unrolling for " << *srcRel << "\n"; +// toContinue = true; +// break; +// } +// +// if (u.isSat(lastModel, conjoin(ssa, m_efac))) +// { +// if (backCHC != -1 && trace.back() != backCHC && +// trace.size() != traceSz - 1) // finalizing the unrolling (exit CHC) +// { +// trace.push_back(backCHC); +// ssa.clear(); // encode from scratch +// getSSA(trace, ssa); +// bindVars.pop_back(); +// noopt = true; // TODO: support optimization queries +// } +// else break; +// } +// else +// { +// noopt = true; // TODO: support +// if (trace.size() == traceSz) +// { +// trace.pop_back(); +// ssa.pop_back(); +// bindVars.pop_back(); +// } +// else +// { +// trace.resize(trace.size()-loop.size()); +// ssa.resize(ssa.size()-loop.size()); +// bindVars.resize(bindVars.size()-loop.size()); +// } +// } +// } +// +// if (toContinue) continue; +// map ms; +// +// ExprMap allModels; +// if (noopt) +// u.getModel(allVars, allModels); +// else +// u.getOptModel(allVars, allModels, cntvar); +// +// if (debug) outs () << "\nUnroll and execute the cycle for " << srcRel << "\n"; +// for (int j = 0; j < versVars.size(); j++) +// { +// vector model; +// bool toSkip = false; +// if (debug) outs () << " model for " << j << ": ["; +// +// for (int i = 0; i < vars.size(); i++) { +// Expr bvar = versVars[j][i]; +// Expr m = allModels[bvar]; +// double value; +// if (m != NULL && isOpX(m)) +// { +// if (lexical_cast(m) > max_double || +// lexical_cast(m) < -max_double) +// { +// toSkip = true; +// break; +// } +// value = lexical_cast(m); +// } +// else +// { +// toSkip = true; +// break; +// } +// model.push_back(value); +// if (debug) outs () << *bvar << " = " << *m << ", "; +// if (!containsOp(bvar)) +// ms[i].insert(mk(vars[i], m)); +// } +// if (toSkip) +// { +// if (debug) outs () << "\b\b < skipping > ]\n"; +// } +// else +// { +// models[srcRel].push_back(model); +// if (debug) outs () << "\b\b]\n"; +// } +// } +// +// // for (auto & a : ms) +// // concrInvs[srcRel].insert(simplifyArithm(disjoin(a.second, m_efac))); +// +// // although we care only about integer variables for the matrix above, +// // we still keep the entire model to bootstrap the model generation for the next loop +// if (chcsConsidered[trace.back()]) +// { +// ExprSet mdls; +// for (auto & a : bindVars.back()) +// if (allModels[a] != NULL) +// mdls.insert(mk(a, allModels[a])); +// exprModels[trace.back()] = replaceAll(conjoin(mdls, m_efac), +// bindVars.back(), ruleManager.chcs[trace.back()].srcVars); +// } +// } +// } +// return true; +// } + + bool findTest(map & newTest) { - if (ssa.size() < 2) - { - outs () << "Unable to find a suitable unrolling for " << *srcRel << "\n"; - toContinue = true; - break; - } - - m_smt_solver.reset(); - m_smt_solver.assertExpr(conjoin(lastModel, m_efac)); - m_smt_solver.assertExpr(conjoin(ssa, m_efac)); - - if (m_smt_solver.solve()) - { - break; - } - else - { - ssa.pop_back(); - bindVars.pop_back(); - } + // kVersVals : vector > + for (auto & a : kVersVals) + { + // a : map + bool allTrue = true; + for (auto & b : a) + { + if (b.second.size() == newTest[b.first].size()) + { + for (int i = 0; i < b.second.size(); i++) + { + if (b.second[i] != newTest[b.first][i]) + { + allTrue = false; + break; + } + } + } + else allTrue = false; + if (!allTrue) break; + } + if (allTrue) + { + if (debug) outs () << "test already generated\n"; + return true; + } + } + return false; } - if (toContinue) continue; - - ZSolver::Model m = m_smt_solver.getModel(); - - for (; l < bindVars.size(); l = l + loop.size()) + ExprVector bodiesCnjs; + bool getTest(bool tryAgain = true, int threshold = 50) { - auto & vars = bindVars[l]; - vector model; -// outs () << "model for " << l << ": "; - for (auto var : vars) { - int value; - if (var != m.eval(var)) { - stringstream tmpstream; - tmpstream << m.eval(var); - tmpstream >> value; - } else { - value = guessUniformly(1000)-500; - cout << "random guess for: " << var << endl; //DEBUG + map newTest; + ExprVector extra, toCmp; + Expr ten = mkMPZ(threshold, m_efac); + for (auto k : kVers) + for (auto & a : k.second) + { + Expr val = u.getModel(a); + if (val == a) val = mkMPZ(0, m_efac); + assert (isNumeric(val) || isBoolean(val)); + + // heuristic to get small models + if (tryAgain && isNumeric(val) && lexical_cast(val) > threshold) + extra.push_back(mk(a, ten)); + toCmp.push_back(mk(a, val)); + newTest[k.first].push_back(val); + } + + if (debug) + { + outs () << "cur model:\n"; + pprint(toCmp, 3); } - model.push_back(value); -// outs () << *var << " = " << value << ", "; - } -// outs () << "\b\b]\n"; - models[srcRel].push_back(model); - } - } - return true; - } - - bool unrollAndExecute(const Expr & invRel, ufo::ZSolver & m_smt_solver, vector > & models, int k = 10, Expr initCondn = nullptr) - { + if (extra.size() > 0) + { + if (!bodiesCnjs.empty()) // maintained outside + extra.insert(extra.end(), bodiesCnjs.begin(), bodiesCnjs.end()); + + if (true == u.isSat(conjoin(extra, m_efac), false)) + { + if (debug) outs () << "smaller model found\n"; + return getTest(false, threshold); + } + } - int initIndex; - int trIndex; - bool initFound = false; + if (findTest(newTest)) return false; - for (int i = 0; i < ruleManager.chcs.size(); i++) { - auto & r = ruleManager.chcs[i]; - if (r.isFact) { - initIndex = i; - initFound = true; - } - if (r.isInductive && r.srcRelation == invRel && r.dstRelation == invRel) { - trIndex = i; - } - } - - if (!initFound && initCondn == nullptr) { - cout << "ERR: init not found for given transition (index: " << trIndex << ")" << endl; - return false; - } - - Expr init = initCondn == nullptr ? ruleManager.chcs[initIndex].body : initCondn; - - HornRuleExt& tr = ruleManager.chcs[trIndex]; - - for (int i = 0; i < tr.srcVars.size(); i++) { - init = replaceAll(init, tr.dstVars[i], tr.srcVars[i]); - } - - - vector trace; - for (int i = 0; i < k; i++) { - trace.push_back(trIndex); - } - - Expr unrolledTr = toExpr(trace); - - // cout << init << " && " << unrolledTr << endl; - - m_smt_solver.reset(); - m_smt_solver.assertExpr(init); - m_smt_solver.assertExpr(unrolledTr); - - if (!m_smt_solver.solve()) { - cout << init << " && " << unrolledTr << "\nfound to be unsat\n"; - return false; - } - - ZSolver::Model m = m_smt_solver.getModel(); - - for (auto vars : bindVars) { - vector model; - for (auto var : vars) { - int value; - if (var != m.eval(var)) { - stringstream tmpstream; - tmpstream << m.eval(var); - tmpstream >> value; - } else { - value = guessUniformly(1000)-500; - cout << "random guess for: " << var << endl; //DEBUG - } - cout << value << "\t";//DEBUG - model.push_back(value); + kVersVals.push_back(newTest); + if (debug) + { + outs () << "adding new test case:"; + pprint(toCmp); + outs () << "\n"; + } + return true; } - cout << endl;//DEBUG - models.push_back(model); - } - - return true; - } - }; - - inline void unrollAndCheck(string smt, int bnd1, int bnd2) - { - ExprFactory m_efac; - EZ3 z3(m_efac); - CHCs ruleManager(m_efac, z3); - ruleManager.parse(smt); - BndExpl ds(ruleManager); - ds.exploreTraces(bnd1, bnd2, true); - }; - - inline bool kInduction(CHCs& ruleManager, int bnd) - { - if (ruleManager.chcs.size() != 3) - { - outs () << "currently not supported\n"; - return false; - } - BndExpl ds(ruleManager); + void printTest() + { + ofstream testfile; + testfile.open ("testgen_" + lexical_cast(kVersVals.size() - 1) + ".h"); + testfile << "#include \n"; + testfile << "int precisions = 10;\n"; - bool success = false; - int i; - for (i = 2; i < bnd; i++) - { - if (ds.kIndIter(i, i)) - { - success = true; - break; - } - } - - outs () << "\n" << - (success ? "K-induction succeeded " : "Unknown result ") << - "after " << (i-1) << " iterations\n"; - - return success; - }; - - inline void kInduction(string smt, int bnd) - { - ExprFactory m_efac; - EZ3 z3(m_efac); - CHCs ruleManager(m_efac, z3); - ruleManager.parse(smt); - kInduction(ruleManager, bnd); - }; + for (auto k : mKeys) + { + testfile << "int cnt_" << k.first << " = 0;\n"; + testfile << "int tot_" << k.first << " = " << kVers[k.first].size() << ";\n"; + } + testfile << "\n"; + testfile << "void print_value(int v){\n"; + testfile << " FILE* f = fopen(\"number.txt\", \"a\");\n"; + testfile << " if (f != NULL){\n"; + testfile << " fprintf(f, \"%d \", v); \n"; + testfile << " fclose(f); f = NULL;\n"; + testfile << " }\n"; + testfile << "}\n"; + for (auto k : mKeys) + { + testfile << "static const int inp_" << k.first << "[] = {"; + auto& l = kVersVals.back()[k.first]; + + for (int v = 0; v < l.size(); v++) + { + if (isOpX(l[v])) testfile << "1"; + else if (isOpX(l[v])) testfile << "0"; + else testfile << l[v]; + if (v < l.size() - 1) testfile << ", "; + } + testfile << "};\n"; + } + testfile << "\n"; + for (auto k : mKeys) + { + testfile << "const int nondet_" << k.first << "(){\n"; + testfile << " if (cnt_" << k.first << " < tot_" << k.first << "){\n"; + testfile << " print_value(inp_" << k.first << "[cnt_" << k.first << "]);\n"; + testfile << " return inp_" << k.first << "[cnt_" << k.first << "++];}\n"; + testfile << " else {int rr = rand() % precisions; print_value(rr); return rr;}\n"; + testfile << "}\n\n"; + } + testfile.close(); + } + }; + +// inline void unrollAndCheck(string smt, int bnd1, int bnd2, int to, bool skip_elim, int debug) +// { +// ExprFactory m_efac; +// EZ3 z3(m_efac); +// CHCs ruleManager(m_efac, z3, debug); +// if (!ruleManager.parse(smt, !skip_elim)) return; +// BndExpl bnd(ruleManager, to, debug); +// bnd.exploreTraces(bnd1, bnd2, true); +// }; } #endif diff --git a/include/deep/Horn.hpp b/include/deep/Horn.hpp new file mode 100755 index 000000000..9db65dc25 --- /dev/null +++ b/include/deep/Horn.hpp @@ -0,0 +1,1269 @@ +#ifndef HORN__HPP__ +#define HORN__HPP__ + +#include "fstream" +#include "ae/AeValSolver.hpp" +#include "ae/NumUtils.hpp" + +using namespace std; +using namespace boost; + +namespace ufo +{ + inline bool rewriteHelperConsts(Expr& body, Expr v1, Expr v2) + { + if (isOpX(v1)) + { + body = mk(body, mk(v1, v2)); + return true; + } + else if (isOpX(v1)) + { + body = mk(body, v2); + return true; + } + else if (isOpX(v1)) + { + body = mk(body, mk(v2)); + return true; + } + return false; + } + + struct HornRuleExt + { + ExprVector srcVars; + ExprVector dstVars; + ExprVector locVars; + + Expr body; + Expr bodyShort; + Expr head; + + // for TG: + ExprVector bodies; + int bodiesSz; + vector covered; + + Expr srcRelation; + Expr dstRelation; + + bool isFact; + bool isQuery; + bool isInductive; + + void assignVarsAndRewrite (ExprVector& _srcVars, ExprVector& invVarsSrc, + ExprVector& _dstVars, ExprVector& invVarsDst, ExprSet& lin) + { + for (int i = 0; i < _srcVars.size(); i++) + { + srcVars.push_back(invVarsSrc[i]); + lin.insert(mk(_srcVars[i], srcVars[i])); + } + + for (int i = 0; i < _dstVars.size(); i++) + { + dstVars.push_back(invVarsDst[i]); + lin.insert(mk(_dstVars[i], dstVars[i])); + } + } + + void shrinkLocVars() + { + for (auto it = locVars.begin(); it != locVars.end();) + if (contains(body, *it)) ++it; + else it = locVars.erase(it); + } + + Expr getBody(bool sh) + { + if (sh && bodiesSz == 1) return bodyShort; + return body; + } + }; + + class CHCs + { + private: + set indeces; + string varname = "_FH_"; + SMTUtils u; + + public: + + ExprFactory &m_efac; + EZ3 &m_z3; + + Expr failDecl; + vector chcs, chcsOrig, chcsTmp; + vector wtoCHCs; + ExprVector loopheads; + ExprSet decls, declsTmp; + map invVars, invVarsPrime; + map> outgs; + map hasArrays; + map> iterators; + bool hasAnyArrays; + int debug; + set chcsToCheck1, chcsToCheck2, toEraseChcs, redChcs; + int glob_ind = 0; + mmtree deps; + bool cycleSearchDone = false; + map>> cycles, prefixes; + vector> acyclic; + map>>::iterator cyclesIt; + + CHCs(ExprFactory &efac, EZ3 &z3, int d = false) : + u(efac), m_efac(efac), m_z3(z3), hasAnyArrays(false), debug(d) {}; + + bool isFapp (Expr e) + { + if (isOpX(e)) + if (e->arity() > 0) + if (isOpX(e->left())) + if (e->left()->arity() >= 2) + return true; + return false; + } + + bool splitBody (HornRuleExt& hr, ExprVector& srcVars, ExprSet& lin) + { + getConj (simplifyBool(hr.body), lin); + for (auto c = lin.begin(); c != lin.end(); ) + { + Expr cnj = *c; + if (isOpX(cnj) && isOpX(cnj->left()) && + find(decls.begin(), decls.end(), cnj->left()) != decls.end()) + { + Expr rel = cnj->left(); + if (hr.srcRelation != NULL) + { + errs () << "Nonlinear CHC is currently unsupported: [" + << *hr.srcRelation << " /\\ " << *rel->left() << " -> " + << *hr.dstRelation << "]\n"; + return false; + } + hr.srcRelation = rel->left(); + for (auto it = cnj->args_begin()+1, end = cnj->args_end(); it != end; ++it) + srcVars.push_back(*it); + c = lin.erase(c); + } + else ++c; + } + return true; + } + + void addDecl (Expr a) + { + if (invVars[a->left()].size() == 0) + { + decls.insert(a); + for (int i = 1; i < a->arity()-1; i++) + { + Expr new_name = mkTerm (varname + to_string(i - 1), m_efac); + Expr arg = a->arg(i); + if (!isOpX (arg) && !isOpX (arg) && !isOpX (arg) && !isOpX (arg)) + { + errs() << "Argument #" << i << " of " << a << " is not supported\n"; + exit(1); + } + Expr var = fapp (constDecl (new_name, a->arg(i))); + new_name = mkTerm (lexical_cast(var) + "'", m_efac); + invVars[a->left()].push_back(var); + invVarsPrime[a->left()].push_back(cloneVar(var, new_name)); + } + } + } + + bool normalize (Expr& r, HornRuleExt& hr) + { + r = regularizeQF(r); + + // TODO: support more syntactic replacements + while (isOpX(r)) + { + for (int i = 0; i < r->arity() - 1; i++) + { + hr.locVars.push_back(bind::fapp(r->arg(i))); + } + r = r->last(); + } + + if (isOpX(r) && isOpX(r->first())) + { + for (int i = 0; i < r->first()->arity() - 1; i++) + hr.locVars.push_back(bind::fapp(r->first()->arg(i))); + + r = mk(r->first()->last(), mk(m_efac)); + } + + if (isOpX(r)) + { + r = mk(r->first(), mk(m_efac)); + } + else if (isOpX(r) && r->arity() == 2 && isOpX(r->left()) && hasUninterp(r->left())) + { + r = mk(r->left()->left(), r->right()); + } + else if (isOpX(r) && r->arity() == 2 && isOpX(r->right()) && hasUninterp(r->right())) + { + r = mk(r->right()->left(), r->left()); + } + + if (isOpX(r) && !isFapp(r->right()) && !isOpX(r->right())) + { + if (isOpX(r->right())) + { + return false; + } + r = mk(mk(r->left(), mk(r->right())), mk(m_efac)); + } + + if (!isOpX(r)) r = mk(mk(m_efac), r); + + return true; + } + + bool parse(string smt, int doElim = 2, bool doArithm = true) + { + if (debug > 0) outs () << "\nPARSING" << "\n=======\n"; + std::unique_ptr > m_fp; + m_fp.reset (new ZFixedPoint (m_z3)); + ZFixedPoint &fp = *m_fp; + fp.loadFPfromFile(smt); + chcs.reserve(fp.m_rules.size()); + + for (auto &r: fp.m_rules) + { + hasAnyArrays |= containsOp(r); + chcs.push_back(HornRuleExt()); + HornRuleExt& hr = chcs.back(); + + if (!normalize(r, hr)) + { + chcs.pop_back(); + continue; + } + + hr.body = r->left(); + hr.head = r->right(); + if (isOpX(hr.head)) + { + if (hr.head->left()->arity() == 2 && + (find(fp.m_queries.begin(), fp.m_queries.end(), r->right()) != + fp.m_queries.end())) + addFailDecl(hr.head->left()->left()); + else + addDecl(hr.head->left()); + hr.dstRelation = hr.head->left()->left(); + } + else + { + if (!isOpX(hr.head)) hr.body = mk(hr.body, mk(hr.head)); + addFailDecl(mk(m_efac)); + hr.head = mk(m_efac); + hr.dstRelation = mk(m_efac); + } + } + + if (debug > 0) outs () << "Reserved space for " << chcs.size() << " CHCs and " << decls.size() << " declarations\n"; + + bool allGood = true; + // the second loop is needed because we want to distunguish + // uninterpreted functions used as variables from relations to be synthesized + for (auto it = chcs.begin(); it != chcs.end();) + { + auto & hr = *it; + ExprVector origSrcSymbs; + ExprSet lin; + if (!splitBody(hr, origSrcSymbs, lin)) + { + it = chcs.erase(it); + allGood = false; + continue; + } + if (hr.srcRelation == NULL) + { + if (hasUninterp(hr.body)) + { + errs () << "Unsupported format\n"; + errs () << " " << *hr.body << "\n"; + exit (1); + } + hr.srcRelation = mk(m_efac); + } + + hr.isFact = isOpX(hr.srcRelation); + hr.isQuery = (hr.dstRelation == failDecl); + hr.isInductive = (hr.srcRelation == hr.dstRelation); + + ExprVector origDstSymbs; + if (!hr.isQuery) + { + for (auto it = hr.head->args_begin()+1, end = hr.head->args_end(); it != end; ++it) + origDstSymbs.push_back(*it); + hr.head = hr.head->left(); + } + + hr.assignVarsAndRewrite (origSrcSymbs, invVars[hr.srcRelation], + origDstSymbs, invVarsPrime[hr.dstRelation], lin); + + hr.body = conjoin(lin, m_efac); + // if (doElim >= 1 && !hr.isQuery) + { + hr.bodyShort = eliminateQuantifiers(hr.body, hr.locVars, doArithm); +// hr.bodyShort = u.removeITE(hr.bodyShort); + hr.shrinkLocVars(); + chcsOrig.push_back(hr); // reserve copy + } + ++it; + } + + if (debug > 0) outs () << "After parsing: " << chcs.size() << " CHCs and " << decls.size() << " declarations\n"; + if (!allGood) exit(0); + + if (doElim >= 2) + { + int sz = chcs.size(); + for (int c = 0; c < chcs.size(); c++) + { + chcsToCheck1.insert(c); + chcsToCheck2.insert(c); + } + if (!eliminateDecls()) return false; + + chcsTmp = chcs; + // eliminating all at once, otherwise elements at chcsToCheck* need updates + for (auto it = toEraseChcs.rbegin(); it != toEraseChcs.rend(); ++it) + { + chcs.erase(chcs.begin() + *it); + } + toEraseChcs.clear(); + } + for (int i = 0; i < chcs.size(); i++) + outgs[chcs[i].srcRelation].push_back(i); + + if (doElim) + findCycles(); + + if (debug >= 2) + for (auto & d : decls){ + outs () << "outgs from " << *d->left() << ":\n"; + for (auto & o : outgs[d->left()]) + outs () << " (" << o << ") -> " << *chcs[o].dstRelation << "\n"; } + + if (debug >= 2) + { + outs () << (doElim ? " Simplified " : " Parsed ") << "CHCs:\n"; + print(debug >= 3, true); + } + return true; + } + + void reParse(bool lb = false, bool cycl = true) + { + chcs = chcsOrig; + for (auto it = redChcs.rbegin(); it != redChcs.rend(); ++it) + if (*it < chcs.size()) + chcs.erase(chcs.begin() + *it); + + decls.insert(declsTmp.begin(), declsTmp.end()); + + // actually, add more CHCs + int sz = chcs.size(); + vector toErase; + for (int i = 0; i < sz; i++) + { + // if (chcs[i].isQuery) continue; + ExprVector vars2keep; + u.flatten(chcs[i].body, chcs[i].bodies, false, vars2keep, [](Expr a, ExprVector& b){return a;}); + chcs[i].bodiesSz = chcs[i].bodies.size(); + if (!lb && chcs[i].bodiesSz > 1) + { + toErase.push_back(i); + for (auto & p : chcs[i].bodies) + { + auto n = chcs[i]; + n.body = p; + n.bodies.clear(); + chcs.push_back(n); + } + chcs[i].bodies.clear(); + } + if (lb && chcs[i].bodiesSz > 1) + { + ExprVector tmp; + for (int j = 0; j < chcs[i].bodies.size(); j++) + { + chcs[i].locVars.push_back(bind::boolConst + (mkTerm ("_aux_" + lexical_cast(j), m_efac))); + tmp.push_back(mk(chcs[i].locVars.back(), chcs[i].bodies[j])); + } + chcs[i].body = disjoin(tmp, m_efac); + } + } + + if (cycl) + { + for (auto it = toErase.rbegin(); it != toErase.rend(); ++it) + chcs.erase(chcs.begin() + *it); + + if (debug > 0) outs () << "Contextualized: " << chcs.size() + << " CHCs and " << decls.size() << " declarations\n"; + outgs.clear(); + prefixes.clear(); + cycles.clear(); + + for (int i = 0; i < chcs.size(); i++) + outgs[chcs[i].srcRelation].push_back(i); + + findCycles(); // maybe expensive, to optimize + + if (debug >= 2) + for (auto & d : decls){ + outs () << "outgs from " << *d->left() << ":\n"; + for (auto & o : outgs[d->left()]) + outs () << " (" << o << ") -> " << *chcs[o].dstRelation << "\n"; } + + print(debug >= 3, true); + } + } + + void propagateInvs(ExprMap& cands) + { + for (auto & i : redChcs) + { + set r; + closure(i, deps, r); + for (auto j : r) redChcs.insert(j); + } + + while (!declsTmp.empty()) + { + int sz = declsTmp.size(); + for (auto d = declsTmp.begin(); d != declsTmp.end(); ) + { + bool found = true; + ExprSet invs; + for (int i = 0; i < chcsTmp.size(); i++) + { + auto c = &chcsTmp[i]; + if (c->dstRelation != (*d)->left()) continue; + if (find(redChcs.begin(), redChcs.end(), i) != redChcs.end()) continue; + if (c->isFact) invs.insert(c->body); + else if (cands[c->srcRelation] != NULL) + invs.insert(mk(cands[c->srcRelation], c->body)); + else + found = false; + } + if (found) + { + Expr inv = keepQuantifiers(disjoin(invs, m_efac), invVarsPrime[(*d)->left()]); + inv = weakenForHardVars(inv, invVarsPrime[(*d)->left()]); + cands[(*d)->left()] = replaceAll(inv, invVarsPrime[(*d)->left()], invVars[(*d)->left()]); + + decls.insert(*d); + d = declsTmp.erase(d); + } + else ++d; + } + if (sz == declsTmp.size()) + { +// outs () << "cannot derive; remaining decls "; +// pprint(declsTmp,2); + for (auto d : declsTmp) cands[d->left()] = mk(m_efac); + return; + } + } + } + + bool eliminateTrivTrueOrFalse() + { + return true; // disabled for testgen + set toEraseChcsTmp; + for (int i = 0; i < chcs.size(); i++) + { + if (find(toEraseChcs.begin(), toEraseChcs.end(), i) != toEraseChcs.end()) continue; + if (find(toEraseChcsTmp.begin(), toEraseChcsTmp.end(), i) != toEraseChcsTmp.end()) continue; + + auto c = &chcs[i]; + if (c->isQuery && !c->isFact) + { + auto f = find(chcsToCheck1.begin(), chcsToCheck1.end(), i); + if (f != chcsToCheck1.end()) + { + if (u.isTrue(c->body)) + { + // thus, c->srcRelation should be false + for (int j = 0; j < chcs.size(); j++) + { + if (find(toEraseChcs.begin(), toEraseChcs.end(), j) != toEraseChcs.end()) continue; + if (find(toEraseChcsTmp.begin(), toEraseChcsTmp.end(), j) != toEraseChcsTmp.end()) continue; + + HornRuleExt* s = &chcs[j]; + if (s->srcRelation == c->srcRelation) + { + // search for vacuous cases where s == inv -> inv2 and c == inv /\ true -> false + // then, inv can only be false, thus s does not give any constraint + toEraseChcsTmp.insert(j); // could erase here, but ther will be a mess with pointers + } + else if (s->dstRelation == c->srcRelation) + { + s->isQuery = true; + s->dstRelation = failDecl; + s->locVars.insert(s->locVars.end(), s->dstVars.begin(), s->dstVars.end()); + s->dstVars.clear(); + chcsToCheck1.insert(j); + chcsToCheck2.insert(j); + } + } + decls.erase(c->srcRelation); + declsTmp.insert(c->srcRelation); + } + chcsToCheck1.erase(f); + } + } + else if (c->isQuery && c->isFact) + if (u.isSat(c->body)) + { + outs () << "Counterexample found (during preprocessing)\n"; + return false; + } + } + + if (toEraseChcsTmp.empty()) return true; + + for (auto it = toEraseChcsTmp.rbegin(); it != toEraseChcsTmp.rend(); ++it) + { + if (debug >= 2) outs () << " Eliminating vacuous CHC: " << chcs[*it].srcRelation << " -> " << chcs[*it].dstRelation << "\n"; + if (debug >= 3) outs () << " its body is true: " << chcs[*it].body << "\n"; + toEraseChcs.insert(*it); + } + + return eliminateTrivTrueOrFalse(); // recursive call + } + + bool eliminateDecls() + { + int preElim = decls.size(); + if (debug > 0) outs () << "Reducing the number of CHCs: " << (chcs.size() - toEraseChcs.size()) << + "; and the number of declarations: " << decls.size() << "...\n"; + if (debug >= 3) + { + outs () << " Current CHC topology:\n"; + print(false); + } + + if (!eliminateTrivTrueOrFalse()) return false; // first, remove relations which are trivially false + // and find any trivially unsatisfiable queries + Expr declToRemove = NULL; + vector srcMax, dstMax; + set toEraseChcsTmp; + + for (auto d = decls.begin(); d != decls.end();) + { + vector src, dst; + for (int i = 0; i < chcs.size(); i++) + { + if (find(toEraseChcs.begin(), toEraseChcs.end(), i) != toEraseChcs.end()) continue; + if (find(toEraseChcsTmp.begin(), toEraseChcsTmp.end(), i) != toEraseChcsTmp.end()) continue; + + if (chcs[i].srcRelation == (*d)->left()) src.push_back(i); + if (chcs[i].dstRelation == (*d)->left()) dst.push_back(i); + } + + if ((src.size() > 0 && dst.size() > 0) && + emptyIntersect(src, dst)) + { + if (declToRemove != NULL) + if (declToRemove->arity() > (*d)->arity()) + { ++d; continue; } + if (declToRemove != NULL) + if (declToRemove->arity() == (*d)->arity() && + src.size() * dst.size() > srcMax.size() * dstMax.size()) + { ++d; continue; } + + srcMax = src; + dstMax = dst; + declToRemove = *d; + } + + if (src.size() == 0) // found dangling CHCs + { + toEraseChcsTmp.insert(dst.begin(), dst.end()); + declsTmp.insert(*d); + d = decls.erase(d); + } + else ++d; + } + + // first, it will remove dangling CHCs since it's cheaper + if (declToRemove != NULL && toEraseChcsTmp.empty()) + { + for (int i : srcMax) + for (int j : dstMax) + concatenateCHCs(i, j); + + toEraseChcsTmp.insert(srcMax.begin(), srcMax.end()); + toEraseChcsTmp.insert(dstMax.begin(), dstMax.end()); + decls.erase(declToRemove); + declsTmp.insert(declToRemove); + } + + for (auto a = toEraseChcsTmp.rbegin(); a != toEraseChcsTmp.rend(); ++a) + { + if (debug >= 2) outs () << " Eliminating CHC: " << chcs[*a].srcRelation << " -> " << chcs[*a].dstRelation << "\n"; + toEraseChcs.insert(*a); + } + + removeTautologies(); // get rid of CHCs that don't add any _new_ constraints + if (preElim > decls.size()) + return eliminateDecls(); + else + { + // currently disabled +// if (!hasAnyArrays) slice(); // remove unrelated constraints and shrink arities of predicates + + int preComb = (chcs.size() - toEraseChcs.size()); + combineCHCs(); + if (preComb > (chcs.size() - toEraseChcs.size())) + return eliminateDecls(); + } + return true; + } + + void concatenateCHCs(int i, int j) + { + for (int k : {i, j}) deps[chcs.size()].insert(k); + chcs.push_back(HornRuleExt()); + HornRuleExt* s = &chcs[i]; + HornRuleExt* d = &chcs[j]; + HornRuleExt* n = &chcs.back(); + if (debug >= 2) + { + outs () << " Concatenating two CHCs: " + << d->srcRelation << " -> " << d->dstRelation << " and " + << s->srcRelation << " -> " << s->dstRelation << "\n"; + } + n->srcRelation = d->srcRelation; + n->dstRelation = s->dstRelation; + n->srcVars = d->srcVars; + n->dstVars = d->dstVars; + + ExprVector newVars; + for (int i = 0; i < d->dstVars.size(); i++) + { + Expr new_name = mkTerm ("__bnd_var_" + to_string(glob_ind++), m_efac); + newVars.push_back(cloneVar(d->dstVars[i], new_name)); + } + Expr mergedBody = replaceAll(s->body, s->srcVars, newVars); + n->dstVars.insert(n->dstVars.end(), d->locVars.begin(), d->locVars.end()); + for (int i = 0; i < d->locVars.size(); i++) + { + Expr new_name = mkTerm ("__loc_var_" + to_string(glob_ind++), m_efac); + newVars.push_back(cloneVar(d->locVars[i], new_name)); + } + mergedBody = mk(replaceAll(d->body, n->dstVars, newVars), mergedBody); + n->locVars = newVars; + n->locVars.insert(n->locVars.end(), s->locVars.begin(), s->locVars.end()); + n->body = simpleQE(mergedBody, n->locVars); + n->shrinkLocVars(); + n->dstVars = s->dstVars; + n->isInductive = n->srcRelation == n->dstRelation; + n->isFact = isOpX(n->srcRelation); + n->isQuery = n->dstRelation == failDecl; + + chcsToCheck1.insert(chcs.size()-1); + chcsToCheck2.insert(chcs.size()-1); + } + + void removeTautologies() + { + for (int i = 0; i < chcs.size(); i++) + { + if (find(toEraseChcs.begin(), toEraseChcs.end(), i) != toEraseChcs.end()) continue; + + auto h = &chcs[i]; + auto f = find(chcsToCheck2.begin(), chcsToCheck2.end(), i); + if (f != chcsToCheck2.end()) + { + if (u.isFalse(h->body)) + { + if (debug >= 2) outs () << " Eliminating CHC: " << h->srcRelation << " -> " << h->dstRelation << "\n"; + if (debug >= 3) outs () << " its body is false: " << h->body << "\n"; + toEraseChcs.insert(i); + continue; + } + chcsToCheck2.erase(f); + } + + bool found = false; + if (h->isInductive) + { + found = true; + for (int j = 0; j < h->srcVars.size(); j++) + { + if (u.isSat(h->body, mkNeg(mk(h->srcVars[j], h->dstVars[j])))) + { + found = false; + break; + } + } + } + if (found) + { + if (debug >= 2) outs () << " Eliminating CHC: " << h->srcRelation << " -> " << h->dstRelation << "\n"; + if (debug >= 3) outs () << " inductive but does not change vars: " << h->body << "\n"; + toEraseChcs.insert(i); + redChcs.insert(i); + } + else ++h; + } + } + + void combineCHCs() + { + for (int i = 0; i < chcs.size(); i++) + { + if (find(toEraseChcs.begin(), toEraseChcs.end(), i) != toEraseChcs.end()) continue; + + set toComb = {i}; + HornRuleExt& s = chcs[i]; + for (int j = i + 1; j < chcs.size(); j++) + { + if (find(toEraseChcs.begin(), toEraseChcs.end(), j) != toEraseChcs.end()) continue; + + HornRuleExt& d = chcs[j]; + if (s.srcRelation == d.srcRelation && s.dstRelation == d.dstRelation) + { + for (int k = 0; k < s.srcVars.size(); k++) assert (s.srcVars[k] == d.srcVars[k]); + for (int k = 0; k < s.dstVars.size(); k++) assert (s.dstVars[k] == d.dstVars[k]); + toComb.insert(j); + } + } + if (toComb.size() > 1) + { + if (debug >= 2) + { + outs () << " Disjoing bodies of " << toComb.size() << " CHCs: " + << s.srcRelation << " -> " << s.dstRelation << "\n"; + } + ExprVector all; + for (auto it = toComb.rbegin(); it != toComb.rend(); ++it) + { + all.push_back(chcs[*it].body); + if (*it != i) + { + toEraseChcs.insert(*it); + deps[i].insert(*it); + } + } + s.body = distribDisjoin(all, m_efac); + chcsToCheck1.insert(i); + chcsToCheck2.insert(i); + return combineCHCs(); + } + } + } + + // (recursive) multi-stage slicing begins here + set chcsToVisit; + map varsSlice; + + void updateTodo(Expr decl, int num) + { + for (int i = 0; i < chcs.size(); i++) + { + if (find(toEraseChcs.begin(), toEraseChcs.end(), i) != toEraseChcs.end()) continue; + + if (i != num && + !chcs[i].isQuery && + (chcs[i].srcRelation == decl || chcs[i].dstRelation == decl)) + chcsToVisit.insert(i); + } + } + + void slice() + { + chcsToVisit.clear(); + varsSlice.clear(); + // first, compute sets of dependent variables + for (int i = 0; i < chcs.size(); i++) + { + if (find(toEraseChcs.begin(), toEraseChcs.end(), i) != toEraseChcs.end()) continue; + + if (chcs[i].isQuery) + { + chcs[i].body = keepQuantifiers(chcs[i].body, chcs[i].srcVars); + Expr decl = chcs[i].srcRelation; + filter (chcs[i].body, bind::IsConst(), + std::inserter (varsSlice[decl], varsSlice[decl].begin ())); + updateTodo(chcs[i].srcRelation, i); + } + } + while (!chcsToVisit.empty()) slice(*chcsToVisit.begin()); + + // now, prepare for variable elimination + for (auto & d : varsSlice) + { +// if (invVars[d.first].size() > d.second.size()) +// outs () << "sliced for " << *d.first << ": " << invVars[d.first].size() +// << " -> " << d.second.size() << "\n"; + ExprSet varsPrime; + for (auto & v : d.second) + { + Expr pr = replaceAll(v, invVars[d.first], invVarsPrime[d.first]); + varsPrime.insert(pr); + } + + keepOnly(invVars[d.first], d.second); + keepOnly(invVarsPrime[d.first], varsPrime); + } + + // finally, update bodies and variable vectors + for (int i = 0; i < chcs.size(); i++) + { + if (find(toEraseChcs.begin(), toEraseChcs.end(), i) != toEraseChcs.end()) continue; + auto & c = chcs[i]; + + if (u.isFalse(c.body) || u.isTrue(c.body)) continue; + + ExprSet bd; + getConj(c.body, bd); + for (auto b = bd.begin(); b != bd.end();) + { + if (emptyIntersect(*b, invVars[c.srcRelation]) && + emptyIntersect(*b, invVarsPrime[c.dstRelation])) + b = bd.erase(b); + else ++b; + } + if (!c.isFact) c.srcVars = invVars[c.srcRelation]; + if (!c.isQuery) c.dstVars = invVarsPrime[c.dstRelation]; + c.body = conjoin(bd, m_efac); + } + } + + void slice(int num) + { + HornRuleExt* hr = &chcs[num]; + assert (!hr->isQuery); + ExprSet srcCore, dstCore, srcDep, dstDep, varDeps, cnjs; + + if (qeUnsupported(hr->body)) + { + varDeps.insert(hr->srcVars.begin(), hr->srcVars.end()); + varDeps.insert(hr->locVars.begin(), hr->locVars.end()); + varDeps.insert(hr->dstVars.begin(), hr->dstVars.end()); + } + else + { + varDeps = varsSlice[hr->srcRelation]; + filter (getPrecondition(hr), bind::IsConst(), // all src vars from the preconditions are dependent + std::inserter (varDeps, varDeps.begin ())); + + for (auto & v : varsSlice[hr->dstRelation]) + varDeps.insert(replaceAll(v, invVars[hr->dstRelation], hr->dstVars)); + + srcCore = varsSlice[hr->dstRelation]; + dstCore = varDeps; + + getConj(hr->body, cnjs); + while(true) + { + int vars_sz = varDeps.size(); + for (auto & c : cnjs) + { + ExprSet varsCnj; + filter (c, bind::IsConst(), + std::inserter (varsCnj, varsCnj.begin ())); + if (!emptyIntersect(varDeps, varsCnj)) + varDeps.insert(varsCnj.begin(), varsCnj.end()); + } + if (hr->isInductive) + { + for (auto & v : varDeps) + { + varDeps.insert(replaceAll(v, hr->dstVars, hr->srcVars)); + varDeps.insert(replaceAll(v, hr->srcVars, hr->dstVars)); + } + } + if (vars_sz == varDeps.size()) break; + } + } + + bool updateSrc = false; + bool updateDst = false; + if (!hr->isFact) + { + ExprSet& srcVars = varsSlice[hr->srcRelation]; + for (auto v = varDeps.begin(); v != varDeps.end();) + { + if (find(hr->srcVars.begin(), hr->srcVars.end(), *v) != hr->srcVars.end()) + { + if (find(srcVars.begin(), srcVars.end(), *v) == srcVars.end()) + { + updateSrc = true; + srcVars.insert(*v); + } + v = varDeps.erase(v); + } + else ++v; + } + } + + srcDep = varsSlice[hr->srcRelation]; + dstDep = varDeps; + + if (!hr->isQuery) + { + ExprSet& dstVars = varsSlice[hr->dstRelation]; + for (auto v = varDeps.begin(); v != varDeps.end();) + { + if (find(hr->dstVars.begin(), hr->dstVars.end(), *v) != hr->dstVars.end()) + { + Expr vp = replaceAll(*v, hr->dstVars, invVars[hr->dstRelation]); + if (find(dstVars.begin(), dstVars.end(), vp) == dstVars.end()) + { + updateDst = true; + dstVars.insert(vp); + } + v = varDeps.erase(v); + } + else ++v; + } + } + + if (!varDeps.empty()) + hr->body = eliminateQuantifiers(hr->body, varDeps, false); + + if (updateSrc) updateTodo(hr->srcRelation, num); + if (updateDst) updateTodo(hr->dstRelation, num); + chcsToVisit.erase(num); + } + + void getAllTraces (Expr src, Expr dst, int len, vector trace, + vector>& traces, bool once = false) + { + if (len == 1) + { + for (auto a : outgs[src]) + { + if (chcs[a].dstRelation == dst) + { + if (once && find(trace.begin(), trace.end(), a) != trace.end()) + continue; + vector newtrace = trace; + newtrace.push_back(a); + traces.push_back(newtrace); + } + } + } + else + { + for (auto a : outgs[src]) + { + if (once && find(trace.begin(), trace.end(), a) != trace.end()) + continue; + vector newtrace = trace; + newtrace.push_back(a); + getAllTraces(chcs[a].dstRelation, dst, len-1, newtrace, traces, once); + } + } + } + + bool isRelVisited(vector& trace, ExprVector& av, Expr rel) + { + for (auto t : trace) + if (chcs[t].dstRelation == rel) + return true; + return find(av.begin(), av.end(), rel) != av.end(); + } + + void getAllAcyclicTraces (Expr src, Expr dst, int len, vector trace, + vector>& traces, ExprVector& av) + { + if (len == 1) + { + for (auto a : outgs[src]) + { + if (chcs[a].dstRelation == dst) + { + vector newtrace = trace; + newtrace.push_back(a); + traces.push_back(newtrace); + } + } + } + else + { + for (auto a : outgs[src]) + { + if (chcs[a].dstRelation == dst || + isRelVisited(trace, av, chcs[a].dstRelation)) + continue; + vector newtrace = trace; + newtrace.push_back(a); + getAllAcyclicTraces(chcs[a].dstRelation, dst, len-1, newtrace, traces, av); + } + } + } + + void findCycles() + { + ExprVector av; + ExprVector endRels = {failDecl}; + for (auto & d : decls) + { + if (outgs[d->left()].empty()) + endRels.push_back(d->left()); + + // heuristics for SeaHorn-encoding: + if (lexical_cast(d).find(".exit.") !=std::string::npos) + endRels.push_back(d->left()); + } + + for (auto & r : endRels) + findCycles(mk(m_efac), r, av); + // print(false, true); + outs () << "global traces num: " << acyclic.size() << "\n"; + for (auto & a : cycles) + outs () << " traces num for: " << a.first << ": " << a.second.size() << "\n"; + + cycleSearchDone = true; + cyclesIt = cycles.begin(); + } + + bool findCycles(Expr src, Expr dst, ExprVector& avoid) + { + if (debug >= 2) outs () << "\nfindCycles: " << src << " => " << dst << "\n"; + vector> nonCycleTraces; + ExprVector highLevelRels; + for (int i = 1; i < chcs.size(); i++) + { + if (debug >= 2) + { + outs () << "."; + outs().flush(); + } + getAllAcyclicTraces(src, dst, i, vector(), nonCycleTraces, avoid); + } + + bool tracesFound = nonCycleTraces.size() > 0; + map >> prefs; + for (auto & d : nonCycleTraces) + { + vector tmp; + for (auto & chcNum : d) + { + if (chcs[chcNum].isQuery) break; // last iter anyway + Expr& r = chcs[chcNum].dstRelation; + tmp.push_back(chcNum); + if (find(avoid.begin(), avoid.end(), r) == avoid.end()) + { + prefs[r].push_back(tmp); + unique_push_back(r, highLevelRels); + } + } + } + + if (tracesFound) + { + if (src == dst) + { + if (debug) + outs () << "traces num for " << src << ": " << nonCycleTraces.size() << "\n"; + for (auto & c : nonCycleTraces) + unique_push_back(c, cycles[src]); + } + else + { + for (auto & c : nonCycleTraces) + unique_push_back(c, acyclic); + } + } + else + { + assert(src == dst); + } + + ExprVector avoid2 = avoid; + for (auto & d : highLevelRels) + { + avoid2.push_back(d); + bool nestedCycle = findCycles(d, d, avoid2); + if (nestedCycle) + { + prefixes[d] = prefs[d]; // to debug + } + } + + // WTO sorting is here now: + if (tracesFound) + { + if (src == dst) + { + unique_push_back(src, loopheads); // could there be duplicates? + if (debug) outs () << " loophead found: " << src << "\n"; + } + else if (debug) outs () << " global:\n"; + } + + for (auto c : nonCycleTraces) + { + if (debug > 5) + { + outs () << " trace: " << chcs[c[0]].srcRelation; + for (auto h : c) + outs () << " -> " << chcs[h].dstRelation << " "; + outs () << "\n"; + } + else if (debug) + { + outs () << "traces num for " << chcs[c[0]].srcRelation << ": " + << c.size() << "\n"; + } + + for (auto h : c) + unique_push_back(&chcs[h], wtoCHCs); + } + + return tracesFound; + } + + vector getPrefix(Expr rel) // get only first one; to extend + { + assert(!cycles[rel].empty()); + assert(!prefixes[rel].empty()); + vector pref = prefixes[rel][0]; + assert(!pref.empty()); + if (chcs[pref[0]].isFact) + return pref; + vector ppref = getPrefix(chcs[pref[0]].srcRelation); + ppref.insert(ppref.end(), pref.begin(), pref.end()); + return ppref; + } + + bool hasCycles() + { + if (cycleSearchDone) return cycles.size() > 0; + findCycles(); + + // assert (cycles.size() == prefixes.size()); + /* + if (debug >= 3) + for (int i = 0; i < cycles.size(); i++) + { + auto & c = prefixes[i]; + outs () << " pref: "; + for (auto & chcNum : c) outs () << *chcs[chcNum].srcRelation << " -> "; + outs () << " ["; + for (auto & chcNum : c) outs () << chcNum << " -> "; + outs () << "] "; + auto & d = cycles[i]; + outs () << "\n cycle: "; + for (auto & chcNum : d) outs () << *chcs[chcNum].srcRelation << " -> "; + outs () << " ["; + for (auto & chcNum : d) outs () << chcNum << " -> "; + outs () << "]\n\n"; + } + */ + return (cycles.size() > 0); + } + + Expr getNextCycle() + { + Expr rel = cyclesIt->first; + cyclesIt++; + if (cyclesIt == cycles.end()) cyclesIt = cycles.begin(); + return rel; + } + + void addFailDecl(Expr decl) + { + if (failDecl == NULL) + { + failDecl = decl; + } + else + { + if (failDecl != decl) + { + errs () << "Multiple queries are unsupported\n"; + exit (1); + } + } + } + + Expr getPrecondition (HornRuleExt* hr) + { + Expr tmp = keepQuantifiers(hr->body, hr->srcVars); + return weakenForHardVars(tmp, hr->srcVars); + } + + void print (bool full = false, bool dump_cfg = false) + { + std::ofstream enc_chc; + if (dump_cfg) + { + enc_chc.open("chc.dot"); + enc_chc <<("digraph print {\n"); + } + for (int i = 0; i < chcs.size(); i++) + { + if (find(toEraseChcs.begin(), toEraseChcs.end(), i) != toEraseChcs.end()) + continue; + auto & hr = chcs[i]; + if (full) + { + if (hr.isFact) outs() << " INIT:\n"; + else if (hr.isInductive) outs() << " TR:\n"; + else if (hr.isQuery) outs() << " BAD:\n"; + else outs() << " CHC:\n"; + } + + outs () << " " << * hr.srcRelation; + if (full && hr.srcVars.size() > 0) + { + outs () << " ("; + pprint(hr.srcVars); + outs () << ")"; + } + else outs () << "[#" << hr.srcVars.size() << "]"; + outs () << " -> " << * hr.dstRelation; + + if (full && hr.dstVars.size() > 0) + { + outs () << " ("; + pprint(hr.dstVars); + outs () << ")"; + } + else outs () << "[#" << hr.dstVars.size() << "]"; + if (full) + { + outs() << "\n body: \n"; + if (treeSize(hr.body) < 1000) + pprint(hr.body, 4); + else outs () << " < . . . . too large . . . . >\n"; + } + else outs() << "\n"; + if (dump_cfg) + { + enc_chc << " \"" << hr.srcRelation; + enc_chc << "\" -> "; + enc_chc << "\"" << hr.dstRelation; + enc_chc << "\"\n"; + } + } + if (dump_cfg) + { + enc_chc <<("}"); + enc_chc.close(); + // this needs a graphiz package installed: + system("dot -Tpdf -o chc.pdf chc.dot"); + } + } + }; +} + + +#endif diff --git a/include/deep/HornNonlin.hpp b/include/deep/HornNonlin.hpp index 69760cec3..2b0f920a3 100755 --- a/include/deep/HornNonlin.hpp +++ b/include/deep/HornNonlin.hpp @@ -9,7 +9,7 @@ using namespace boost; namespace ufo { // all adapted from Horn.hpp; experimental; to merge with Horn.hpp at some point - inline bool rewriteHelperConsts(Expr& body, Expr v1, Expr v2) + inline bool rewriteHelperConsts_nonlinear(Expr& body, Expr v1, Expr v2) { if (isOpX(v1)) { @@ -90,6 +90,14 @@ namespace ufo int total_var_cnt = 0; string infile; + //ToDo: Remove later on; move from Horn.hpp + map> outgs; + map>> cycles, prefixes; + bool cycleSearchDone = false; + vector> acyclic; + map>>::iterator cyclesIt; + int debug; + CHCs(ExprFactory &efac, EZ3 &z3) : m_efac(efac), m_z3(z3) {}; bool isFapp (Expr e) @@ -401,6 +409,170 @@ namespace ufo } outs() << "\n body: " << * hr.body << "\n"; } + +//ToDo: Remove later on; move from Horn.hpp + vector getPrefix(Expr rel) // get only first one; to extend + { + assert(!cycles[rel].empty()); + assert(!prefixes[rel].empty()); + vector pref = prefixes[rel][0]; + assert(!pref.empty()); + if (chcs[pref[0]].isFact) + return pref; + auto it1 = chcs[pref[0]].srcRelations.begin(); + vector ppref = getPrefix(*it1);//ToDo: ilia update + ppref.insert(ppref.end(), pref.begin(), pref.end()); + return ppref; + } + + bool hasCycles() + { + if (cycleSearchDone) return cycles.size() > 0; + findCycles(); + + // assert (cycles.size() == prefixes.size()); + /* + if (debug >= 3) + for (int i = 0; i < cycles.size(); i++) + { + auto & c = prefixes[i]; + outs () << " pref: "; + for (auto & chcNum : c) outs () << *chcs[chcNum].srcRelation << " -> "; + outs () << " ["; + for (auto & chcNum : c) outs () << chcNum << " -> "; + outs () << "] "; + auto & d = cycles[i]; + outs () << "\n cycle: "; + for (auto & chcNum : d) outs () << *chcs[chcNum].srcRelation << " -> "; + outs () << " ["; + for (auto & chcNum : d) outs () << chcNum << " -> "; + outs () << "]\n\n"; + } + */ + return (cycles.size() > 0); + } + + void findCycles() + { + ExprVector av; + ExprVector endRels = {failDecl}; + for (auto & d : decls) + { + if (outgs[d->left()].empty()) + endRels.push_back(d->left()); + + // heuristics for SeaHorn-encoding: + if (lexical_cast(d).find(".exit.") !=std::string::npos) + endRels.push_back(d->left()); + } + + for (auto & r : endRels) + findCycles(mk(m_efac), r, av); + // print(false, true); + outs () << "global traces num: " << acyclic.size() << "\n"; + for (auto & a : cycles) + outs () << " traces num for: " << a.first << ": " << a.second.size() << "\n"; + + cycleSearchDone = true; + cyclesIt = cycles.begin(); + } + + bool findCycles(Expr src, Expr dst, ExprVector& avoid) + { + if (debug >= 2) outs () << "\nfindCycles: " << src << " => " << dst << "\n"; + vector> nonCycleTraces; + ExprVector highLevelRels; + for (int i = 1; i < chcs.size(); i++) + { + if (debug >= 2) + { + outs () << "."; + outs().flush(); + } +// getAllAcyclicTraces(src, dst, i, vector(), nonCycleTraces, avoid); + } + + bool tracesFound = nonCycleTraces.size() > 0; + map >> prefs; + for (auto & d : nonCycleTraces) + { + vector tmp; + for (auto & chcNum : d) + { + if (chcs[chcNum].isQuery) break; // last iter anyway + Expr& r = chcs[chcNum].dstRelation; + tmp.push_back(chcNum); + if (find(avoid.begin(), avoid.end(), r) == avoid.end()) + { + prefs[r].push_back(tmp); + unique_push_back(r, highLevelRels); + } + } + } + + if (tracesFound) + { + if (src == dst) + { + if (debug) + outs () << "traces num for " << src << ": " << nonCycleTraces.size() << "\n"; + for (auto & c : nonCycleTraces) + unique_push_back(c, cycles[src]); + } + else + { + for (auto & c : nonCycleTraces) + unique_push_back(c, acyclic); + } + } + else + { + assert(src == dst); + } + + ExprVector avoid2 = avoid; + for (auto & d : highLevelRels) + { + avoid2.push_back(d); + bool nestedCycle = findCycles(d, d, avoid2); + if (nestedCycle) + { + prefixes[d] = prefs[d]; // to debug + } + } + + // WTO sorting is here now: + if (tracesFound) + { + if (src == dst) + { +// unique_push_back(src, loopheads); // could there be duplicates? + if (debug) outs () << " loophead found: " << src << "\n"; + } + else if (debug) outs () << " global:\n"; + } + + for (auto c : nonCycleTraces) + { + if (debug > 5) + { +// outs () << " trace: " << chcs[c[0]].srcRelation; + for (auto h : c) + outs () << " -> " << chcs[h].dstRelation << " "; + outs () << "\n"; + } + else if (debug) + { +// outs () << "traces num for " << chcs[c[0]].srcRelation << ": " +// << c.size() << "\n"; + } + +// for (auto h : c) +// unique_push_back(&chcs[h], wtoCHCs); + } + + return tracesFound; + } }; } #endif diff --git a/include/deep/LBExpl.hpp b/include/deep/LBExpl.hpp new file mode 100644 index 000000000..29b8ecebd --- /dev/null +++ b/include/deep/LBExpl.hpp @@ -0,0 +1,661 @@ +#ifndef LBEXPL__HPP__ +#define LBEXPL__HPP__ + +#include "BndExpl.hpp" + +using namespace std; +using namespace boost; +namespace ufo +{ + class LBExpl : public BndExpl + { + protected: + bool prio; + + public: + + LBExpl (CHCs& r, int l, bool p, bool d = false) : + BndExpl(r, l, d), prio(p) {} + +// bool checkCovered(int tr, int c, int &tot) +// { +// auto & chc = ruleManager.chcs[c]; +// if (chc.bodies.size() <= 1) +// { +// tot++; +// return true; +// } +// +// for (int i = 0; i < chc.bodies.size(); i++) +// { +// Expr b = chc.bodies[i]; +// if (find(chc.covered.begin(), chc.covered.end(), i) == chc.covered.end()) +// { +// if (!chc.isQuery) +// b = replaceAll(b, chc.dstVars, bindVars[tr]); +// if (!chc.isFact) +// b = replaceAll(b, chc.srcVars, bindVars[tr-1]); +// +// b = replaceAll(b, chc.locVars, bindLocVars[tr]); +// if (bool(u.eval(b))) +// { +// bodiesCnjs.push_back(chc.bodies[i]); +// chc.covered.push_back(i); +// tot++; +// } +// } +// } +// return chc.covered.size() == chc.bodies.size(); +// } +//ToDo ilia updated + + set todoCHCs; +// void fillTodos() +// { +// // get points of control-flow divergence +// for (auto & d : ruleManager.decls) +// if (ruleManager.outgs[d->left()].size() > 1) +// for (auto & o : ruleManager.outgs[d->left()]) +// todoCHCs.insert(o); +// +// // add bodies with disjs +// for (int i = 0; i < ruleManager.chcs.size(); i++) +// if (ruleManager.chcs[i].bodies.size() > 1) +// { +// // outs () << " Hyper egde detected: " << i << "\n"; +// todoCHCs.insert(i); +// } +// +// // if the code is straight, just add queries +// if (todoCHCs.empty()) +// for (int i = 0; i < ruleManager.chcs.size(); i++) +// if (ruleManager.chcs[i].isQuery) +// todoCHCs.insert(i); +// } +//ToDo ilia updated + + int getNumUnvis(vector &g) + { + int n = 0; + for (auto i : g) + if (find(todoCHCs.begin(), todoCHCs.end(), i) != todoCHCs.end()) + n++; + return n; + } + + Expr getPost(Expr loophead, vector &o, int end) + { + for (auto & a : postsRev[loophead]) + { + int i = end; + int j = a.first.size() - 1; + while (i >= 0 && j >= 0) + { + if (o[i] != a.first[j]) break; + i--; + j--; + } + if (j == -1) return a.second; + } + return mk(m_efac); + } + +// void unroll(vector &o, vector> &n) +// { +// for (Expr l : ruleManager.loopheads) +// { +// for (int i = o.size() - 1; i >= 0; i--) +// { +// if (ruleManager.chcs[o[i]].dstRelation == l) +// { +// Expr tmp = getPost(l, o, i); +// // outs () << " unroll: " << tmp << ": " << postPre[l][tmp].size() <<"\n"; +// for (auto & a : (isOpX(tmp) ? ruleManager.cycles[l] : postPre[l][tmp])) +// { +// if (ruleManager.chcs[a.back()].dstRelation != l) continue; +// if (emptCycls[a]) +// { +// if (emptCyclsVisited[a]) continue; +// else emptCyclsVisited[a] = true; // unroll only once +// } +// vector nn = o; +// nn.insert(nn.begin()+i+1, a.begin(), a.end()); +// if (getNumUnvis(nn) == 0) continue; +// unique_push_back(nn, n); +// } +// break; // experiment: exit early, unroll only at the end +// } +// } +// } +// } +//ToDo ilia updated + +// void pruneLast(vector &a) +// { +// while (!a.empty()) +// { +// if (find(todoCHCs.begin(), todoCHCs.end(), a.back()) == todoCHCs.end() && +// find(ruleManager.loopheads.begin(), ruleManager.loopheads.end(), +// ruleManager.chcs[a.back()].dstRelation) == ruleManager.loopheads.end()) +// a.pop_back(); +// else break; +// } +// } +//ToDo ilia updated + + int weight(int i) + { + if (find(todoCHCs.begin(), todoCHCs.end(), i) == todoCHCs.end()) + return 0; + return 1; + // TODO: if (chc.bodies.size() > 1) return.... + // TODO: num of conjuncts + } + +// void print(vector &g) +// { +// outs () << " "; +// for (auto f : g) +// outs () << " " << ruleManager.chcs[f].dstRelation << "(" +// << ruleManager.chcs[f].covered.size() << "/" +// << ruleManager.chcs[f].bodies.size() << ")" << " -> "; +// outs () << "\n"; +// } +//ToDo ilia updated + + bool getNext(vector> & cntr, vector>::iterator & n) + { + int curMax = 0; + for (auto it = cntr.begin(); it != cntr.end();) + { + int cur = 0; + auto & g = *it; + for (auto i : g) cur += weight(i); + if (cur > curMax) + { + n = it; + curMax = cur; + } + ++it; + } + return curMax > 0; + } + +// void success(vector& g, vector> & cntr, vector> & prio1, +// vector> & prio2) +// { +// int rem = todoCHCs.size(); +// int tot = 0; +// for (int i = 0; i < g.size(); i++) +// if (find(todoCHCs.begin(), todoCHCs.end(), g[i]) != todoCHCs.end()) +// if (checkCovered(i, g[i], tot)) +// todoCHCs.erase(g[i]); +// +// if (tot > 0) +// { +// outs () << "\nNEW TEST: "; +// print(g); +// outs () << "\n\n"; +// if (getTest(false)) printTest(); +// } +// +// if (rem == todoCHCs.size()) +// { +// pruneLast(g); +// unique_push_back(g, prio2); +// } +// else +// { +// outs () << "Rem TODOs: " << todoCHCs.size() +// << " (sz = " << g.size() << ")" << "\n"; +// outs().flush(); +// auto f = find(cntr.begin(), cntr.end(), g); +// if (f != cntr.end()) cntr.erase(f); +// pruneLast(g); +// unique_push_back(g, prio1); +// } +// } +//ToDo ilia updated + +// Expr addDisjContr (vector & g) +// { +// ExprVector blocked; +// for (int s = 0; s < g.size(); s++) +// { +// auto & chc = ruleManager.chcs[g[s]]; +// if (chc.bodiesSz > 1) +// { +// ExprVector varsToDisable; +// for (int i = chc.locVars.size() - chc.bodiesSz, j = 0; +// i < chc.locVars.size(); i++, j++) +// if (find(chc.covered.begin(), chc.covered.end(), j) != +// chc.covered.end()) +// varsToDisable.push_back(mk(bindLocVars[s][i])); +// +// if (!varsToDisable.empty()) +// blocked.push_back(conjoin(varsToDisable, m_efac)); +// } +// } +// if (blocked.empty()) return NULL; +// return disjoin(blocked, m_efac); +// } +//ToDo ilia updated + +// void oneRound(vector> & cntr, vector> & prio1, +// vector>& prio2, vector>& prio3) +// { +// int sz; +// while (true) +// { +// vector>::iterator git; +// if (!getNext(cntr, git)) break; +// +// vector g = *git; +// ExprVector ssa; +// getSSA(g, ssa); +// Expr tmp = addDisjContr(g); +// bool added = tmp != NULL; +// if (added) ssa.push_back(tmp);; +// +// auto res = u.isSatIncrem(ssa, sz); +// if (true == res) +// { +// success(g, cntr, prio1, prio2); +// } +// else if (false == res) +// { +// cntr.erase(git); +// if (sz > 0) +// { +// if (ruleManager.chcs[g.back()].isQuery) +// { +// auto h = g; +// h.resize(g.size()-1); +// if (true == u.reSolve(added ? 2 : 1)) +// success(h, cntr, prio1, prio2); +// } +// +// int i; +// for (i = 0; i < g.size() && i < sz; i++) +// if (ruleManager.chcs[g[i]].bodies.size() > 1 || +// ruleManager.chcs[g[i]].covered.size() > 0) +// break; +// if (i == sz || i == g.size()) +// { +// g.resize(i); +// unsat_prefs.insert(g); // currently unuses? TODO +// } +// +// pruneLast(g); +// unique_push_back(g, prio3); +// } +// } +// else +// { +// if (debug) assert(0 && "indeterminate"); +// } +// } +// +// vector> tmp; +// for (auto & a : cntr) +// { +// pruneLast(a); +// unique_push_back(a, tmp); +// } +// cntr = tmp; +// } +//ToDo ilia updated + +// void exploreRec(vector> & traces, int lvl, string name) +// { +// outs () << "\n-----------------\nentering lvl: " << lvl << ", \"" << name << "\"\n"; +// vector> traces_prt; +// +// if (lvl == 0) +// traces_prt = traces; +// else +// for (int j = 0; j < traces.size(); j++) +// unroll(traces[j], traces_prt); +// +// if (traces_prt.empty()) return; +// outs () << "considering " << traces_prt.size() << " traces\n"; +// +// vector> traces_prio, traces_unsat_cond, traces_unsat; +// oneRound(traces_prt, traces_prio, traces_unsat_cond, traces_unsat); +// +// if (!prio) // TODO: check for duplicates, play with order +// { +// traces_prt.insert(traces_prt.end(), traces_prio.begin(), traces_prio.end()); +// traces_prt.insert(traces_prt.end(), traces_unsat_cond.begin(), traces_unsat_cond.end()); +// traces_prt.insert(traces_prt.end(), traces_unsat.begin(), traces_unsat.end()); +// } +// +// // rec.calls : +// exploreRec(traces_prt, lvl + 1, "next"); +// +// if (prio) +// { +// exploreRec(traces_prio, lvl + 1, "prio sats"); +// exploreRec(traces_unsat_cond, lvl + 1, "unsats cond"); +// exploreRec(traces_unsat, lvl + 1, "unsats"); +// } +// +// outs () << "exiting lvl: " << lvl << "\n"; +// } +//ToDo ilia updated + + map>>> pres, posts; + map, Expr>> postsRev; + + // mainly for local comp now, but might be used incrementally? + map, Expr> ppprefs, ppsuffs; + map>>> postPre; + +// void computePrePost(vector & t) +// { +// ExprVector ssa; +// getSSA(t, ssa); +// Expr srcRel = ruleManager.chcs[t[0]].srcRelation; +// Expr dstRel = ruleManager.chcs[t.back()].dstRelation; +// Expr pre = mk(m_efac); +// Expr post = mk(m_efac); +// auto & srcVars = ruleManager.invVars[srcRel]; +// auto & dstVars = ruleManager.invVars[dstRel]; +// +// int sz; +// bool done = false; +// if (!dstVars.empty()) +// { +// for (auto & b : posts[dstRel]) +// { +// ExprVector tmp = ssa; +// tmp.push_back(mkNeg(b.first)); +// if (false == u.isSatIncrem(tmp, sz)) +// { +// b.second.push_back(t); +// postsRev[dstRel][t] = post; +// done = true; +// break; +// } +// } +// +// if (!done) +// { +// for (int i = t.size() < lookahead ? 0 : t.size() - lookahead; i < ssa.size(); i++) +// { +// vector tmp; +// tmp.insert(tmp.begin(), t.begin(), t.begin() + i + 1); +// if (ppprefs[tmp] == NULL) +// { +// post = keepQuantifiers(mk(post, ssa[i]), bindVars[i]); +// ppprefs[tmp] = post; +// } +// else +// { +// post = ppprefs[tmp]; +// } +// } +// post = replaceAll(post, bindVars.back(), dstVars); +// posts[dstRel][post].push_back(t); +// postsRev[dstRel][t] = post; +// } +// } +// if (!srcVars.empty()) +// { +// done = false; +// for (auto & b : pres[srcRel]) +// { +// ExprVector tmp = ssa; +// tmp.push_back(mkNeg(b.first)); +// if (false == u.isSatIncrem(tmp, sz)) +// { +// b.second.push_back(t); +// done = true; +// break; +// } +// } +// if (!done) +// { +// for(int i = t.size() <= lookahead ? ssa.size() - 1 : lookahead; i >= 0; i--) +// { +// vector tmp; +// tmp.insert(tmp.begin(), t.begin() + i, t.end()); +// if (ppsuffs[tmp] == NULL) +// { +// pre = keepQuantifiers(mk(pre, ssa[i]), +// (i == 0 ? srcVars : bindVars[i - 1])); +// ppsuffs[tmp] = pre; +// } +// else +// { +// pre = ppsuffs[tmp]; +// } +// } +// +// pres[srcRel][pre].push_back(t); +// } +// } +// } +//ToDo ilia updated + +// void getPrePostConds() +// { +// SMTUtils u2(m_efac); // to free mem +// +// // proto, for now. to merge +// for (auto it = ruleManager.acyclic.begin(); it != ruleManager.acyclic.end(); ++it) +// { +// auto & t = *it; +// int i = 0; +// int j = 0; +// while (j < t.size()) +// { +// bool lhfound = false; +// for (Expr l : ruleManager.loopheads) +// { +// if (ruleManager.chcs[t[j]].dstRelation == l || j == t.size() - 1) +// { +// vector tmp; +// for (int k = i; k <= j; k++) tmp.push_back(t[k]); +// ExprVector ssa; +// getSSA(tmp, ssa); +// computePrePost(tmp); +// outs () << "."; +// outs ().flush(); +// lhfound = true; +// break; +// } +// } +// if (lhfound) i = j + 1; +// j++; +// } +// } +// +// for (auto & a : ruleManager.cycles) +// { +// int k = 0; +// outs () << "total for " << a.first << ": " << a.second.size() << "\n"; +// for (auto & t : a.second) +// { +// computePrePost(t); +// outs () << '.'; +// outs().flush(); +// } +// outs () << "\n total pres: " << pres[a.first].size() << "\n"; +// outs () << " total posts: " << posts[a.first].size() << "\n"; +// +// for (auto & d : posts[a.first]) +// for (auto & b : pres[a.first]) +// if (true == u2.isSat(b.first, d.first)) +// postPre[a.first][d.first].insert(postPre[a.first][d.first].end(), +// b.second.begin(), b.second.end()); +// } +// } +//ToDo ilia updated + + map, bool> emptCycls, emptCyclsVisited; +// void findUselessPaths() +// { +// SMTUtils u2(m_efac); // to free mem +// outs () << "total for global: " << ruleManager.acyclic.size() << "\n"; +// for (auto it = ruleManager.acyclic.begin(); it != ruleManager.acyclic.end(); ) +// { +// auto & t = *it; +// int i = 0; +// int j = 0; +// bool unsat = false; +// while (j < t.size() && !unsat) +// { +// bool lhfound = false; +// for (Expr l : ruleManager.loopheads) +// { +// if (ruleManager.chcs[t[j]].dstRelation == l || j == t.size() - 1) +// { +// vector tmp; +// for (int k = i; k <= j; k++) tmp.push_back(t[k]); +// ExprVector ssa; +// getSSA(tmp, ssa); +// int sz; +// if (false == u2.isSatIncrem(ssa, sz)) unsat = true; +// lhfound = true; +// break; +// } +// } +// if (lhfound) i = j + 1; +// j++; +// } +// if (unsat) it = ruleManager.acyclic.erase(it); +// else ++it; +// } +// +// outs () << "upd for global: " << ruleManager.acyclic.size() << "\n"; +// +// for (auto & a : ruleManager.cycles) +// { +// outs () << "total for " << a.first << ": " << a.second.size() << "\n"; +// for (auto it = a.second.begin(); it != a.second.end(); ) +// { +// auto & t = *it; +// ExprVector ssa; +// getSSA(t, ssa); +// auto & v1 = ruleManager.chcs[t[0]].srcVars; +// auto & v2 = bindVars.back(); +// assert(v1.size() == v2.size()); +// ExprVector tmp; +// for (int i = 0; i < v1.size(); i++) +// tmp.push_back(mk(v1[i], v2[i])); +// ssa.push_back(mk(conjoin(tmp, m_efac))); +// +// int sz; +// auto res = u2.isSatIncrem(ssa, sz); +// if (res == false && sz != -1) +// { +// if (sz == ssa.size()) emptCycls[t] = true; +// else +// { +// it = a.second.erase(it); +// continue; +// } +// } +// it++; +// } +// outs () << "upd for " << a.first << ": " << a.second.size() << "\n"; +// } +// } +//ToDo ilia updated + +// void exploreTracesMaxLb() +// { +// outs () << "LB-MAX\n"; +// findUselessPaths(); +// getPrePostConds(); +// +// fillTodos(); +// outs () << "Total TODOs: " << todoCHCs.size() << "\n"; +// exploreRec(ruleManager.acyclic, 0, "init"); +// } +//ToDo ilia updated + + // original version; similar to TACAS'22 +// void exploreTracesLBTG(int cur_bnd, int bnd) +// { +// outs () << "exploreTracesLBTG\n"; +// fillTodos(); +// +// while (cur_bnd <= bnd && !todoCHCs.empty()) +// { +// outs () << "new iter with cur_bnd = "<< cur_bnd <<"\n"; +// set toErCHCs; +// for (auto & a : todoCHCs) +// { +// if (find(toErCHCs.begin(), toErCHCs.end(), a) != toErCHCs.end()) +// continue; +// vector> traces; +// getAllTracesTG(mk(m_efac), a, cur_bnd, vector(), traces); +// outs () << " exploring traces (" << traces.size() << ") of length " +// << cur_bnd << "; # of todos = " +// << (todoCHCs.size() - toErCHCs.size()) << "\n"; +// +// int tot = 0; +// bool toBreak = false; +// for (int trNum = 0; trNum < traces.size() && !todoCHCs.empty() && !toBreak; ) +// { +// auto & t = traces[trNum]; +// set apps; +// for (int i = 0; i < t.size(); i++) +// if (find(todoCHCs.begin(), todoCHCs.end(), t[i]) != todoCHCs.end() && +// find(toErCHCs.begin(), toErCHCs.end(), t[i]) == toErCHCs.end()) +// apps.insert(i); +// if (apps.empty()) +// { +// trNum++; +// continue; // should not happen +// } +// tot++; +// +// auto & hr = ruleManager.chcs[t.back()]; +// Expr lms = invs[hr.srcRelation]; +// if (lms != NULL && (bool)u.isFalse(mk(lms, hr.body))) +// { +// outs () << "\n unreachable: " << t.back() << "\n"; +// toErCHCs.insert(t.back()); +// unreach_chcs.insert(t.back()); +// unsat_prefs.insert(t); +// trNum++; +// continue; +// } +// +// if (bool(u.isSat(toExpr(t)))) +// { +// bodiesCnjs.clear(); +// int tot = 0; +// for (auto & b : apps) +// if (checkCovered(b, t[b], tot)) +// { +// toErCHCs.insert(t[b]); +// if (b == t.size() - 1) +// toBreak = true; +// } +// if (tot > 0) +// if (getTest()) printTest(); +// } +// else +// { +// if (ruleManager.chcs[t.back()].bodies.size() <= 1 || +// ruleManager.chcs[t.back()].covered.size() == 0) +// unsat_prefs.insert(t); +// trNum++; +// } +// } +// outs () << " -> actually explored: " << tot << ", |unsat prefs| = " << unsat_prefs.size() << "\n"; +// } +// for (auto a : toErCHCs) todoCHCs.erase(a); +// cur_bnd++; +// } +// outs () << "Done with LBTG\n"; +// } +//ToDo ilia updated + }; +} + +#endif diff --git a/include/deep/RndLearner.hpp b/include/deep/RndLearner.hpp index 1ea5243c6..f9c72accf 100644 --- a/include/deep/RndLearner.hpp +++ b/include/deep/RndLearner.hpp @@ -1,7 +1,7 @@ #ifndef RNDLEARNER__HPP__ #define RNDLEARNER__HPP__ -#include "Horn.hpp" +#include "HornNonlin.hpp" #include "BndExpl.hpp" #include "ae/SMTUtils.hpp" #include "sampl/SeedMiner.hpp" @@ -14,794 +14,680 @@ using namespace std; using namespace boost; namespace ufo { - class RndLearner - { + class RndLearner + { protected: - ExprFactory &m_efac; - EZ3 &m_z3; - SMTUtils u; - ufo::ZSolver m_smt_solver; - vector> m_smt_safety_solvers; - map safety_progress; + ExprFactory &m_efac; + EZ3 &m_z3; + SMTUtils u; + ufo::ZSolver m_smt_solver; + vector> m_smt_safety_solvers; + map safety_progress; - CHCs& ruleManager; - vector decls; - vector> sfs; - vector curCandidates; + CHCs& ruleManager; + ExprVector decls; + vector> sfs; + ExprVector curCandidates; - vector> invarVars; + vector> invarVars; + vector invarVarsShort; - // for arrays - vector arrCands; - vector arrAccessVars; - vector arrIterRanges; + // for arrays + vector arrCands; + vector arrAccessVars; + vector arrIterRanges; - int invNumber; - int numOfSMTChecks; + int invNumber; + int numOfSMTChecks; - bool kind_succeeded; // interaction with k-induction - bool oneInductiveProof; + bool kind_succeeded; // interaction with k-induction + bool oneInductiveProof; - bool densecode; // catch various statistics about the code (mostly, frequences) and setup the prob.distribution based on them - bool addepsilon; // add some small probability to features that never happen in the code - bool aggressivepruning; // aggressive pruning of the search space based on SAT/UNSAT (WARNING: may miss some invariants) + bool densecode; // catch various statistics about the code (mostly, frequences) and setup the prob.distribution based on them + bool addepsilon; // add some small probability to features that never happen in the code + bool aggressivepruning; // aggressive pruning of the search space based on SAT/UNSAT (WARNING: may miss some invariants) - bool printLog; + bool statsInitialized; + int printLog; public: - RndLearner (ExprFactory &efac, EZ3 &z3, CHCs& r, bool k, bool b1, bool b2, bool b3) : - m_efac(efac), m_z3(z3), ruleManager(r), m_smt_solver (z3), u(efac), - invNumber(0), numOfSMTChecks(0), oneInductiveProof(true), kind_succeeded (!k), - densecode(b1), addepsilon(b2), aggressivepruning(b3), - printLog(false){} + RndLearner (ExprFactory &efac, EZ3 &z3, CHCs& r, unsigned to, bool k, bool b1, bool b2, bool b3, int debug) : + m_efac(efac), m_z3(z3), ruleManager(r), m_smt_solver (z3), u(efac, to), + invNumber(0), numOfSMTChecks(0), oneInductiveProof(true), kind_succeeded (!k), + densecode(b1), addepsilon(b2), aggressivepruning(b3), + statsInitialized(false), printLog(debug){} - bool isTautology (Expr a) // adjusted for big disjunctions - { - if (isOpX(a)) return true; - - ExprSet disjs; - getDisj(a, disjs); - if (disjs.size() == 1) return false; - - map varComb; - for (auto &a : disjs) - { - ExprSet avars; - expr::filter (a, bind::IsConst(), std::inserter (avars, avars.begin ())); - if (avars.size() == 0) continue; - varComb[avars].insert(mkNeg(a)); - } - - if (varComb.size() == 0) return false; - - m_smt_solver.reset(); - - bool res = false; - for (auto &v : varComb) - { - m_smt_solver.assertExpr(conjoin(v.second, m_efac)); - if (!m_smt_solver.solve ()) + bool isTautology (Expr a) // adjusted for big disjunctions { - res = true; break; - } - } - return res; - } + if (isOpX(a)) return true; - bool checkCandidates() - { - for (auto &hr: ruleManager.chcs) - { - if (hr.isQuery) continue; - - m_smt_solver.reset(); - - int ind1; // to be identified later - int ind2 = getVarIndex(hr.dstRelation, decls); - - // pushing body - m_smt_solver.assertExpr (hr.body); - Expr cand1; - Expr cand2; - Expr lmApp; - - // pushing src relation - if (!isOpX(hr.srcRelation)) - { - ind1 = getVarIndex(hr.srcRelation, decls); - SamplFactory& sf1 = sfs[ind1].back(); - - cand1 = curCandidates[ind1]; - - for (auto & v : invarVars[ind1]) - { - cand1 = replaceAll(cand1, v.second, hr.srcVars[v.first]); - } - m_smt_solver.assertExpr(cand1); - - lmApp = sf1.getAllLemmas(); - for (auto & v : invarVars[ind1]) - { - lmApp = replaceAll(lmApp, v.second, hr.srcVars[v.first]); - } - m_smt_solver.assertExpr(lmApp); - } - - // pushing dst relation - cand2 = curCandidates[ind2]; + ExprSet disjs; + getDisj(a, disjs); + if (disjs.size() == 1) return false; - for (auto & v : invarVars[ind2]) - { - cand2 = replaceAll(cand2, v.second, hr.dstVars[v.first]); - } - - m_smt_solver.assertExpr(mk(cand2)); - - numOfSMTChecks++; - boost::tribool res = m_smt_solver.solve (); - if (res) // SAT == candidate failed - { - curCandidates[ind2] = mk(m_efac); - return checkCandidates(); - } - } + map varComb; + for (auto &a : disjs) + { + ExprSet avars; + expr::filter (a, bind::IsConst(), std::inserter (avars, avars.begin ())); + if (avars.size() == 0) continue; + varComb[avars].insert(mkNeg(a)); + } - bool res = false; - for (auto &cand : curCandidates) res = !isOpX(cand); - return res; - } + if (varComb.size() == 0) return false; - void assignPriorities() - { - for (int i = 0; i < invNumber; i++) - { - SamplFactory& sf = sfs[i].back(); - if (isOpX(curCandidates[i])) sf.assignPrioritiesForFailed(); - else sf.assignPrioritiesForLearned(); - } - } - - void reportCheckingResults(bool doRedundancyOptim = true) - { - for (int i = 0; i < invNumber; i++) - { - Expr cand = curCandidates[i]; - SamplFactory& sf = sfs[i].back(); - if (isOpX(cand)) - { - if (printLog) outs () << " => bad candidate for " << *decls[i] << "\n"; - } - else - { - if (printLog) outs () << " => learned lemma for " << *decls[i] << "\n"; + m_smt_solver.reset(); - if (doRedundancyOptim) - { - Expr allLemmas = sf.getAllLemmas(); - if (u.implies(allLemmas, cand)) - { - curCandidates[i] = mk(m_efac); - } - else + bool res = false; + for (auto &v : varComb) { - sf.learnedExprs.insert(cand); + m_smt_solver.assertExpr(conjoin(v.second, m_efac)); + if (!m_smt_solver.solve ()) + { + res = true; break; + } } - } + return res; } - } - } - void resetlearnedLemmas() - { - for (auto & sf : sfs) sf.back().learnedExprs.clear(); - } - - bool checkWithKInduction() - { - if (ruleManager.chcs.size() != 3) return false; // current limitation - if (sfs.size() != 1) return false; // current limitation - if (kind_succeeded) return false; - - Expr cand = curCandidates[0]; - if (isOpX(cand)) return false; - - SamplFactory& sf = sfs[0].back(); - Expr allLemmas = sf.getAllLemmas(); - - // get lemmas to be included to inductive rule - for (int i = 0; i < ruleManager.chcs.size(); i++) - { - auto & hr = ruleManager.chcs[i]; - if (!hr.isInductive) continue; - - for (auto & v : invarVars[0]) - { - allLemmas = replaceAll(allLemmas, v.second, hr.srcVars[v.first]); - } - } - - BndExpl bnd(ruleManager, allLemmas); - - int i; - for (i = 2; i < 5; i++) // 2 - a reasanoble lowerbound, 5 - a hardcoded upperbound - { - kind_succeeded = bnd.kIndIter(i, i); - numOfSMTChecks += i; - if (kind_succeeded) break; - } - - if (kind_succeeded) - { - outs () << "\n" << "K-induction succeeded after " << (i-1) << " iterations\n"; - oneInductiveProof = (i == 2); - if (oneInductiveProof) // can complete the invariant only when the proof is 1-inductive + bool checkCandidates() { - curCandidates[0] = bnd.getInv(); - bool addedRemainingLemma = checkCandidates() && checkSafety(); - if (addedRemainingLemma) sf.learnedExprs.insert(curCandidates[0]); // for serialization only + for (auto &hr: ruleManager.chcs) + { + if (hr.isQuery) continue; + + m_smt_solver.reset(); + + int ind1; // to be identified later + int ind2 = getVarIndex(hr.dstRelation, decls); + + // pushing body + m_smt_solver.assertExpr (hr.body); + Expr cand1; + Expr cand2; + Expr lmApp; + + // pushing src relation +// if (!isOpX(hr.srcRelation)) +// { +// ind1 = getVarIndex(hr.srcRelation, decls); +// SamplFactory& sf1 = sfs[ind1].back(); +// +// cand1 = curCandidates[ind1]; +// +// for (auto & v : invarVars[ind1]) +// { +// cand1 = replaceAll(cand1, v.second, hr.srcVars[v.first]); +// } +// m_smt_solver.assertExpr(cand1); +// +// lmApp = sf1.getAllLemmas(); +// for (auto & v : invarVars[ind1]) +// { +// lmApp = replaceAll(lmApp, v.second, hr.srcVars[v.first]); +// } +// m_smt_solver.assertExpr(lmApp); +// }//ToDo ilia updated + + // pushing dst relation + cand2 = curCandidates[ind2]; + + for (auto & v : invarVars[ind2]) + { + cand2 = replaceAll(cand2, v.second, hr.dstVars[v.first]); + } + + m_smt_solver.assertExpr(mk(cand2)); + + numOfSMTChecks++; + boost::tribool res = m_smt_solver.solve (); + if (res) // SAT == candidate failed + { + curCandidates[ind2] = mk(m_efac); + return checkCandidates(); + } + } - if (printLog) outs () << "remaining lemma(s): " << *curCandidates[0] << - "\nsanity check: " << addedRemainingLemma << "\n"; + bool res = false; + for (auto &cand : curCandidates) res = !isOpX(cand); + return res; } - } - - return kind_succeeded; - } - void bootstrapBoundedProofs (int bnd, ExprSet& cands) - { - for (auto &hr: ruleManager.chcs) - if (findNonlin(hr.body)) - { - outs () << "Nonlinear arithmetic detected.\nInterpolation is skipped\n"; - return; - } - - BndExpl be(ruleManager); - Expr cand; - int k = 0; - while (k < bnd) - { - cand = be.getBoundedItp(k); - k++; - if (cand == NULL) + void assignPriorities() { - outs () << "Counterexample is found.\nThe system does not have a solution.\n"; - exit(0); - } - - ExprSet cnjs; - getConj(cand, cnjs); - - for (auto & a : cnjs) cands.insert(a); - } - } - - bool checkBoundedProofs (ExprSet& itpCandidates) - { - if (invNumber == 1) return false; // not supported yet - - for (auto it = itpCandidates.begin(), end = itpCandidates.end(); it != end; ) - { - curCandidates[0] = *it; // current limitation - - if (printLog) outs () << "itp candidate for " << *decls[0] << ": " << **it << "\n"; - - if (checkCandidates()) - { - reportCheckingResults(); - itpCandidates.erase(it++); - - if (checkSafety()) - { - return true; - } - } - else - { - ++it; + for (int i = 0; i < invNumber; i++) + { + SamplFactory& sf = sfs[i].back(); + if (isOpX(curCandidates[i])) sf.assignPrioritiesForFailed(); + else sf.assignPrioritiesForLearned(); + } } - } - return false; - } - void resetSafetySolver() - { - int num = 0; - for (auto &hr: ruleManager.chcs) - { - if (!hr.isQuery) continue; - - m_smt_safety_solvers[num].reset(); - m_smt_safety_solvers[num].assertExpr (hr.body); - safety_progress[num] = false; - num++; - } - } - - bool checkSafety() - { - int num = 0; - for (auto &hr: ruleManager.chcs) - { - if (!hr.isQuery) continue; - num++; - - int ind = getVarIndex(hr.srcRelation, decls); - Expr invApp = curCandidates[ind]; - if (safety_progress[num-1] == true) continue; - - for (auto & v : invarVars[ind]) + void reportCheckingResults(bool doRedundancyOptim = true) { - invApp = replaceAll(invApp, v.second, hr.srcVars[v.first]); + for (int i = 0; i < invNumber; i++) + { + Expr cand = curCandidates[i]; + SamplFactory& sf = sfs[i].back(); + if (isOpX(cand)) + { + if (printLog) outs () << " => bad candidate for " << *decls[i] << "\n"; + } + else + { + if (printLog) outs () << " => learned lemma for " << *decls[i] << "\n"; + + if (doRedundancyOptim) + { + Expr allLemmas = sf.getAllLemmas(); + if (u.implies(allLemmas, cand)) + { + curCandidates[i] = mk(m_efac); + } + else + { + sf.learnedExprs.insert(cand); + } + } + } + } } - m_smt_safety_solvers[num-1].assertExpr(invApp); - safety_progress[num-1] = !m_smt_safety_solvers[num-1].solve (); - - numOfSMTChecks++; - } - - for (auto a : safety_progress) if (a.second == false) return false; - return true; - } - - void setupSafetySolver() - { - // setup the safety solver - for (auto &hr: ruleManager.chcs) - { - if (hr.isQuery) + void resetlearnedLemmas() { - m_smt_safety_solvers.push_back(ufo::ZSolver(m_z3)); - m_smt_safety_solvers.back().assertExpr (hr.body); - safety_progress[safety_progress.size()] = false; + for (auto & sf : sfs) sf.back().learnedExprs.clear(); } - } - } - - void serializeInvariants(vector& invs, const char * outfile) - { - if (!oneInductiveProof) - { - outs() << "\nCurrently unable to serialize k-inductive invariants\n"; - return; - } - - ofstream invfile; - invfile.open (string(outfile)); - m_smt_solver.reset(); - - for (auto & i : invs) m_smt_solver.assertExpr(conjoin(i, m_efac)); - - m_smt_solver.toSmtLib (invfile); - invfile.flush (); - outs () << "\nInvariant serialized to " << outfile << "\n"; - } - void updateRels() - { - // this should not affect the learning process for a CHC system with one (declare-rel ...) - - set rels2update; - - for (int ind = 0; ind < invNumber; ind++) - { - Expr cand = curCandidates[ind]; - SamplFactory& sf = sfs[ind].back(); - if (!isOpX(cand)) +// void bootstrapBoundedProofs (int bnd, ExprSet& cands) +// { +// for (auto &hr: ruleManager.chcs) +// if (findNonlin(hr.body)) +// { +// outs () << "Nonlinear arithmetic detected.\nInterpolation is skipped\n"; +// return; +// } +// +// BndExpl be(ruleManager, printLog); +// Expr cand; +// int k = 0; +// while (k < bnd) +// { +// cand = be.getBoundedItp(k); +// k++; +// if (cand == NULL) +// { +// outs () << "Counterexample is found.\nThe system does not have a solution.\n"; +// exit(0); +// } +// +// ExprSet cnjs; +// getConj(cand, cnjs); +// +// for (auto & a : cnjs) cands.insert(a); +// } +// } +//ToDo ilia updated + + +// bool checkBoundedProofs (ExprSet& itpCandidates) +// { +// if (invNumber == 1) return false; // not supported yet +// +// for (auto it = itpCandidates.begin(), end = itpCandidates.end(); it != end; ) +// { +// curCandidates[0] = *it; // current limitation +// +// if (printLog) outs () << "itp candidate for " << *decls[0] << ": " << **it << "\n"; +// +// if (checkCandidates()) +// { +// reportCheckingResults(); +// itpCandidates.erase(it++); +// +// if (checkSafety()) +// { +// return true; +// } +// } +// else +// { +// ++it; +// } +// } +// return false; +// } +//ToDo ilia updated + + + void resetSafetySolver() { - for (auto &hr : ruleManager.chcs) - { - if (hr.srcRelation == decls[ind] && - hr.dstRelation != decls[ind] && - !hr.isQuery) + int num = 0; + for (auto &hr: ruleManager.chcs) { - Expr lemma2add = curCandidates[ind]; - - for (auto & v : invarVars[ind]) - { - lemma2add = replaceAll(lemma2add, v.second, hr.srcVars[v.first]); - } + if (!hr.isQuery) continue; - numOfSMTChecks++; - if (u.implies(hr.body, lemma2add)) continue; - - hr.body = mk(hr.body, lemma2add); - - rels2update.insert(getVarIndex(hr.dstRelation, decls)); + m_smt_safety_solvers[num].reset(); + m_smt_safety_solvers[num].assertExpr (hr.body); + safety_progress[num] = false; + num++; } - } - } - } - - for(auto ind : rels2update) - { - vector& sf = sfs[ind]; - sf.push_back(SamplFactory (m_efac, aggressivepruning)); - - SamplFactory& sf_before = sf[sf.size()-2]; - SamplFactory& sf_after = sf.back(); - - for (auto & var : invarVars[ind]) sf_after.addVar(var.second); - sf_after.lf.nonlinVars = sf_before.lf.nonlinVars; - - ExprSet stub; - doSeedMining(decls[ind], stub); - - sf_after.calculateStatistics(densecode, addepsilon); - for (auto a : sf_before.learnedExprs) - { - sf_after.learnedExprs.insert(a); - sf_after.exprToSampl(a); - sf_after.assignPrioritiesForLearned(); } - } - } - void initializeDecl(Expr invDecl) - { - assert (invDecl->arity() > 2); - assert(decls.size() == invNumber); - assert(sfs.size() == invNumber); - assert(curCandidates.size() == invNumber); - - decls.push_back(invDecl->arg(0)); - invarVars.push_back(map()); - - curCandidates.push_back(NULL); - - sfs.push_back(vector ()); - sfs.back().push_back(SamplFactory (m_efac, aggressivepruning)); - SamplFactory& sf = sfs.back().back(); - - for (int i = 0; i < ruleManager.invVars[decls.back()].size(); i++) - { - Expr var = ruleManager.invVars[decls.back()][i]; - if (sf.addVar(var)) invarVars[invNumber][i] = var; - } - - arrCands.push_back(ExprSet()); - arrAccessVars.push_back(ExprSet()); - arrIterRanges.push_back(ExprSet()); - - invNumber++; - } - - void doSeedMining(Expr invRel, ExprSet& cands, bool analizeCode = true) - { - vector css; - set progConstsTmp; - set progConsts; - set intCoefs; - - int ind = getVarIndex(invRel, decls); - SamplFactory& sf = sfs[ind].back(); - - bool analizedExtras = false; - // analize each rule separately: - for (auto &hr : ruleManager.chcs) - { - if (hr.dstRelation != invRel && hr.srcRelation != invRel) continue; - - css.push_back(SeedMiner(hr, invRel, invarVars[ind], sf.lf.nonlinVars)); - if (analizeCode) css.back().analizeCode(); - - if (!analizedExtras && hr.srcRelation == invRel) +// bool checkSafety() +// { +// int num = 0; +// for (auto &hr: ruleManager.chcs) +// { +// if (!hr.isQuery) continue; +// num++; +// +// int ind = getVarIndex(hr.srcRelation, decls); +// Expr invApp = curCandidates[ind]; +// if (safety_progress[num-1] == true) continue; +// +// for (auto & v : invarVars[ind]) +// { +// invApp = replaceAll(invApp, v.second, hr.srcVars[v.first]); +// } +// +// m_smt_safety_solvers[num-1].assertExpr(invApp); +// safety_progress[num-1] = bool(!m_smt_safety_solvers[num-1].solve ()); +// +// numOfSMTChecks++; +// } +// +// for (auto a : safety_progress) if (a.second == false) return false; +// return true; +// } +//ToDo ilia updated + + void setupSafetySolver() { - css.back().analizeExtras (cands); - analizedExtras = true; + // setup the safety solver + for (auto &hr: ruleManager.chcs) + { + if (hr.isQuery) + { + m_smt_safety_solvers.push_back(ufo::ZSolver(m_z3)); + m_smt_safety_solvers.back().assertExpr (hr.body); + safety_progress[safety_progress.size()] = false; + } + } } - // convert intConsts to progConsts and add additive inverses (if applicable): - for (auto &a : css.back().intConsts) +// void updateRels() +// { +// // this should not affect the learning process for a CHC system with one (declare-rel ...) +// +// set rels2update; +// +// for (int ind = 0; ind < invNumber; ind++) +// { +// Expr cand = curCandidates[ind]; +// SamplFactory& sf = sfs[ind].back(); +// if (!isOpX(cand)) +// { +// for (auto &hr : ruleManager.chcs) +// { +// if (hr.srcRelation == decls[ind] && +// hr.dstRelation != decls[ind] && +// !hr.isQuery) +// { +// Expr lemma2add = curCandidates[ind]; +// +// for (auto & v : invarVars[ind]) +// { +// lemma2add = replaceAll(lemma2add, v.second, hr.srcVars[v.first]); +// } +// +// numOfSMTChecks++; +// if (u.implies(hr.body, lemma2add)) continue; +// +// hr.body = mk(hr.body, lemma2add); +// +// rels2update.insert(getVarIndex(hr.dstRelation, decls)); +// } +// } +// } +// } +// +// for(auto ind : rels2update) +// { +// vector& sf = sfs[ind]; +// sf.push_back(SamplFactory (m_efac, aggressivepruning)); +// +// SamplFactory& sf_before = sf[sf.size()-2]; +// SamplFactory& sf_after = sf.back(); +// +// for (auto & var : invarVars[ind]) sf_after.addVar(var.second); +// sf_after.lf.nonlinVars = sf_before.lf.nonlinVars; +// +// set progConsts, intCoefs; +// ExprSet cands; +// doSeedMining(decls[ind], cands, progConsts, intCoefs); +// initializeSamlp(decls[ind], cands, progConsts, intCoefs); +// +// sf_after.calculateStatistics(densecode, addepsilon); +// for (auto a : sf_before.learnedExprs) +// { +// sf_after.learnedExprs.insert(a); +// sf_after.exprToSampl(a); +// sf_after.assignPrioritiesForLearned(); +// } +// } +// } + + void initializeDecl(Expr invDecl) { - progConstsTmp.insert( a); - progConstsTmp.insert(-a); - } + if (printLog) outs () << "\nINITIALIZE PREDICATE " << invDecl << "\n====================\n"; +// assert (invDecl->arity() > 2); + assert(decls.size() == invNumber); + assert(sfs.size() == invNumber); + assert(curCandidates.size() == invNumber); - // same for intCoefs - for (auto &a : css.back().intCoefs) intCoefs.insert(a); - } + decls.push_back(invDecl); + invarVars.push_back(map()); + invarVarsShort.push_back(ExprVector()); - cands.clear(); + curCandidates.push_back(NULL); - if (sf.lf.nonlinVars.size() > 0) - { - if (printLog) outs() << "Multed vars: "; - for (auto &a : sf.lf.nonlinVars) - { - if (printLog) outs() << *a.first << " = " << *a.second << "\n"; - sf.lf.addVar(a.second); - Expr b = a.first->right(); - if (isNumericConst(b)) intCoefs.insert(lexical_cast(b)); - } - } + sfs.push_back(vector ()); + sfs.back().push_back(SamplFactory (m_efac, aggressivepruning)); + SamplFactory& sf = sfs.back().back(); - for (auto &a : intCoefs) intCoefs.insert(-a); - for (auto &a : intCoefs) if (a != 0) sf.lf.addIntCoef(a); + for (int i = 0; i < ruleManager.invVars[invDecl].size(); i++) + { + Expr var = ruleManager.invVars[invDecl][i]; + if (sf.addVar(var)) + { + invarVars[invNumber][i] = var; + invarVarsShort[invNumber].push_back(var); + } + } - for (auto &a : intCoefs) - { - for (auto &b : progConstsTmp) - { - progConsts.insert(a*b); - } - } + arrCands.push_back(ExprSet()); + arrAccessVars.push_back(ExprVector()); + arrIterRanges.push_back(ExprSet()); - // sort progConsts and push to vector: - while (progConsts.size() > 0) - { - int min = INT_MAX; - for (auto c : progConsts) - { - if (c < min) - { - min = c; - } + invNumber++; } - progConsts.erase(min); - sf.lf.addConst(min); - } - - sf.initialize(arrCands[ind], arrAccessVars[ind], arrIterRanges[ind]); - ExprSet allCands; - for (auto &cs : css) - { - for (auto &cand : cs.candidates) + bool initializedDecl(Expr invDecl) { - allCands.insert(cand); + return find (decls.begin(), decls.end(), invDecl) != decls.end(); } - } - // normalize samples obtained from CHCs - for (auto & cand : allCands) - { - Sampl& s = sf.exprToSampl(cand); - if (s.arity() > 0) +// virtual void doSeedMining(Expr invRel, ExprSet& cands, set& progConsts, set& intCoefs) +// { +// int ind = getVarIndex(invRel, decls); +// SamplFactory& sf = sfs[ind].back(); +// +// // analyze each rule separately: +// for (auto &hr : ruleManager.chcs) +// { +// if (hr.dstRelation != invRel && hr.srcRelation != invRel) continue; +// +// SeedMiner sm(hr, invRel, invarVars[ind], sf.lf.nonlinVars); +// sm.analyzeCode(); +// +// // convert intConsts to progConsts and add additive inverses (if applicable): +// for (auto &a : sm.intConsts) progConsts.insert(a); +// for (auto &a : sm.intCoefs) intCoefs.insert(a); // same for intCoefs +// for (auto &a : sm.candidates) cands.insert(a); +// } +// } + + void initializeSamlp(Expr invRel, ExprSet& cands, set& progConsts, set& intCoefs) { - cands.insert(sf.sampleToExpr(s)); - } - } - } + int ind = getVarIndex(invRel, decls); + SamplFactory& sf = sfs[ind].back(); + if (sf.lf.nonlinVars.size() > 0) + { + if (printLog >= 3) outs() << "Multed vars: "; + for (auto &a : sf.lf.nonlinVars) + { + if (printLog >= 3) outs() << *a.first << " = " << *a.second << "\n"; + sf.lf.addVar(a.second); + Expr b = a.first->right(); + if (isNumericConst(b)) intCoefs.insert(lexical_cast(b)); + } + } - void calculateStatistics() - { - for (int i = 0; i < invNumber; i++) - { - sfs[i].back().calculateStatistics(densecode, addepsilon); + for (auto &c : progConsts) progConsts.insert(-c); + for (auto &a : intCoefs) intCoefs.insert(-a); + for (auto &a : intCoefs) if (a != 0) sf.lf.addIntCoef(a); - if (printLog) - { - outs() << "\nStatistics for " << *decls[i] << "\n"; - sfs[i].back().printStatistics(); - } - } - } + auto progConstsTmp = progConsts; + for (auto &a : progConstsTmp) + for (auto &b : intCoefs) + progConsts.insert(a*b); - void synthesize(int maxAttempts, char * outfile, ExprSet& itpCands) - { - bool success = false; - int iter = 1; + // sort progConsts and push to vector: + while (progConsts.size() > 0) + { + cpp_int min = *progConsts.begin(); + for (auto c : progConsts) + { + if (c < min) + { + min = c; + } + } + progConsts.erase(min); + sf.lf.addConst(min); + } - for (int i = 0; i < maxAttempts; i++) - { - // first, guess candidates for each inv.declaration + sf.initialize(arrCands[ind], arrAccessVars[ind], arrIterRanges[ind]); - bool skip = false; - for (int j = 0; j < invNumber; j++) - { - if (curCandidates[j] != NULL) continue; // if the current candidate is good enough - SamplFactory& sf = sfs[j].back(); - Expr cand = sf.getFreshCandidate(); - if (cand == NULL) - { - skip = true; - break; - } - - if (isTautology(cand)) // keep searching - { - sf.assignPrioritiesForLearned(); - skip = true; - break; - } - - if (sf.lf.nonlinVars.size() > 0 && u.isFalse(cand)) // keep searching - { - sf.assignPrioritiesForFailed(); - skip = true; - break; - } - - curCandidates[j] = cand; + // normalize samples obtained from CHCs + for (auto & cand : cands) Sampl& s = sf.exprToSampl(cand); } - if (skip) continue; - - if (printLog) +// void prepareSeeds (Expr invRel, ExprSet& cands) +// { +// int invNum = getVarIndex(invRel, decls); +// if (invNum < 0) +// { +// if (printLog >= 3) outs () << "\nNo seed mining for " << invRel << " since it was not initialized\n"; +// return; +// } +// if (printLog) outs () << "\nSEED MINING for " << invRel << "\n===========\n"; +// set progConsts, intCoefs; +// doSeedMining(invRel, cands, progConsts, intCoefs); +// initializeSamlp(invRel, cands, progConsts, intCoefs); +// } + + void calculateStatistics() { - outs() << "\n ---- new iteration " << iter << " ----\n"; - for (int j = 0; j < invNumber; j++) - outs () << "candidate for " << *decls[j] << ": " << *curCandidates[j] << "\n"; - } - - iter++; - - // check all the candidates at once for all CHCs : - - int isInductive = checkCandidates(); - if (isInductive) success = checkSafety(); // query is checked here + statsInitialized = true; + for (int i = 0; i < invNumber; i++) + { + sfs[i].back().calculateStatistics(densecode, addepsilon); - reportCheckingResults(); - if (success) break; + if (printLog >= 3) + { + outs() << "\nSTATISTICS for " << *decls[i] << "\n==========\n"; + sfs[i].back().printStatistics(); + } + } + } - if (isInductive) +// void synthesize(int maxAttempts, ExprSet& itpCands) +// { +// if (printLog) outs () << "\nSAMPLING\n========\n"; +// bool success = false; +// int iter = 1; +// +// for (int i = 0; i < maxAttempts; i++) +// { +// // first, guess candidates for each inv.declaration +// +// bool skip = false; +// for (int j = 0; j < invNumber; j++) +// { +// if (curCandidates[j] != NULL) continue; // if the current candidate is good enough +// SamplFactory& sf = sfs[j].back(); +// Expr cand = sf.getFreshCandidate(); +// if (cand == NULL) +// { +// skip = true; +// break; +// } +// +// if (isTautology(cand)) // keep searching +// { +// sf.assignPrioritiesForLearned(); +// skip = true; +// break; +// } +// +// if (sf.lf.nonlinVars.size() > 0 && u.isFalse(cand)) // keep searching +// { +// sf.assignPrioritiesForFailed(); +// skip = true; +// break; +// } +// +// curCandidates[j] = cand; +// } +// +// if (skip) continue; +// +// if (printLog) +// { +// outs() << "\n ---- iteration " << iter << " ----\n"; +// for (int j = 0; j < invNumber; j++) +// outs () << "candidate for " << *decls[j] << ": " << *curCandidates[j] << "\n"; +// } +// +// iter++; +// +// // check all the candidates at once for all CHCs : +// +// int isInductive = checkCandidates(); +// if (isInductive) success = checkSafety(); // query is checked here +// +// reportCheckingResults(); +// if (success) break; +// +// if (isInductive) +// success = checkBoundedProofs(itpCands); +// +// if (success) break; +// +// assignPriorities(); +// updateRels(); +// +// for (auto &cand : curCandidates) cand = NULL; // preparing for the next iteration +// } +// +// if (success) outs () << "Success after " << --iter << " iterations\n"; +// else outs () << "Unknown after " << maxAttempts << " iterations\n"; +// +// if (printLog) +// for (int j = 0; j < invNumber; j++) +// outs () << " number of sampled lemmas for " << *decls[j] << ": " +// << sfs[j].back().learnedExprs.size() << "\n"; +// +// if (printLog) outs () << " number of SMT checks: " << numOfSMTChecks << "\n"; +// if (success) printSolution(); +// } +//ToDo ilia updated + +// void checkAllLemmas(vector& lms, vector& curMinLms, int& numTries, int invInd) +// { +// numTries++; +// resetSafetySolver(); +// resetlearnedLemmas(); +// for (int i = 0; i < invNumber; i++) curCandidates[i] = conjoin(lms[i], m_efac); +// +// if (checkCandidates() && checkSafety()) +// { +// if (lms[invInd].size() < curMinLms[invInd].size()) curMinLms[invInd] = lms[invInd]; +// +// for (auto & a : lms[invInd]) +// { +// vector lmsTry = lms; +// lmsTry[invInd].erase(a); +// +// checkAllLemmas(lmsTry, curMinLms, numTries, invInd); +// } +// } +// } +//ToDo ilia updated + + void simplifyLemmas() { - success = checkWithKInduction(); - success = checkBoundedProofs(itpCands); + for (int i = 0; i < decls.size(); i++) + { + Expr rel = decls[i]; + SamplFactory& sf = sfs[i].back(); + u.removeRedundantConjuncts(sf.learnedExprs); + } } - if (success) break; - - assignPriorities(); - updateRels(); - - for (auto &cand : curCandidates) cand = NULL; // preparing for the next iteration - } - - if (success) outs () << "\n -----> Success after " << --iter << " iterations\n"; - else outs () << "\nNo success after " << maxAttempts << " iterations\n"; - - for (int j = 0; j < invNumber; j++) - outs () << " number of sampled lemmas for " << *decls[j] << ": " - << sfs[j].back().learnedExprs.size() << "\n"; - - outs () << " number of SMT checks: " << numOfSMTChecks << "\n"; - - if (success && outfile != NULL) - { - vector invs; - for (auto & sf : sfs) invs.push_back(sf.back().learnedExprs); - serializeInvariants(invs, outfile); - } - } - - void checkAllLemmas(vector& lms, vector& curMinLms, int& numTries, int invInd) - { - numTries++; - resetSafetySolver(); - resetlearnedLemmas(); - for (int i = 0; i < invNumber; i++) curCandidates[i] = conjoin(lms[i], m_efac); - - if (checkCandidates() && checkSafety()) - { - if (lms[invInd].size() < curMinLms[invInd].size()) curMinLms[invInd] = lms[invInd]; - - for (auto & a : lms[invInd]) + void printSolution(bool simplify = true) { - vector lmsTry = lms; - lmsTry[invInd].erase(a); - - checkAllLemmas(lmsTry, curMinLms, numTries, invInd); + for (int i = 0; i < decls.size(); i++) + { + Expr rel = decls[i]; + SamplFactory& sf = sfs[i].back(); + ExprSet lms = sf.learnedExprs; + outs () << "(define-fun " << *rel << " ("; + for (auto & b : ruleManager.invVars[rel]) + outs () << "(" << *b << " " << u.varType(b) << ")"; + outs () << ") Bool\n "; + Expr tmp = conjoin(lms, m_efac); + if (simplify && !containsOp(tmp)) u.removeRedundantConjuncts(lms); + Expr res = simplifyArithm(conjoin(lms, m_efac)); + u.print(res); + outs () << ")\n"; + assert(hasOnlyVars(res, ruleManager.invVars[rel])); + } } - } - } - }; - - inline void learnInvariants(string smt, char * outfile, int maxAttempts, - bool kind=false, int itp=0, bool b1=true, bool b2=true, bool b3=true) - { - ExprFactory m_efac; - EZ3 z3(m_efac); - - CHCs ruleManager(m_efac, z3); - ruleManager.parse(smt); - RndLearner ds(m_efac, z3, ruleManager, kind, b1, b2, b3); - - ds.setupSafetySolver(); - std::srand(std::time(0)); - ExprSet itpCands; - - if (ruleManager.hasArrays) - { - outs () << "Arrays are not supported in this mode\n"; - exit(0); - } - if (ruleManager.decls.size() > 1) - { - outs () << "WARNING: learning multiple invariants is currently unstable\n" - << " it is suggested to disable \'aggressivepruning\'\n"; - } - else if (itp > 0) - { - outs () << "WARNING: For more efficient itp-based bootstrapping,\n" - << " it is recommended to run --v2\n"; - // current limitation: ruleManager.decls.size() == 0 - ds.bootstrapBoundedProofs(itp, itpCands); - } - - ExprSet stub; - for (auto& dcl: ruleManager.decls) - { - ds.initializeDecl(dcl); - ds.doSeedMining(dcl->arg(0), stub); - } - - ds.calculateStatistics(); - - ds.synthesize(maxAttempts, outfile, itpCands); - }; - - - inline void getInductiveValidityCore (const char * chcfile, const char * invfile) - { - ExprFactory m_efac; - EZ3 z3(m_efac); - - CHCs ruleManager(m_efac, z3); - ruleManager.parse(string(chcfile)); - RndLearner ds(m_efac, z3, ruleManager, false, false, false, false); - ds.setupSafetySolver(); - - vector invNames; - for (auto& dcl: ruleManager.decls) - { - ds.initializeDecl(dcl); - invNames.push_back(lexical_cast(dcl->arg(0))); - } - - Expr invTmp = z3_from_smtlib_file (z3, invfile); - - vector invs; - if (ruleManager.decls.size() == 1) invs.push_back(invTmp); - else - { - // each assert in invfile corresponds to an invariant - // after deserialization, all asserts are conjoined; so we need to split them now - for (int i = 0; i < ruleManager.decls.size(); i++) - { - invs.push_back(invTmp->arg(i)); - } - } - - vector lms; - vector> sizeHistories; - - for (auto & inv : invs) - { - vector sizeHistory; - sizeHistory.push_back(isOpX(inv) ? inv->arity() : (isOpX(inv) ? 0 : 1)); - - SMTUtils u(m_efac); - inv = u.removeRedundantConjuncts(inv); // rough simplification first - - sizeHistory.push_back(isOpX(inv) ? inv->arity() : (isOpX(inv) ? 0 : 1)); - sizeHistories.push_back(sizeHistory); - - ExprSet lm; - getConj(inv, lm); - lms.push_back(lm); - } - - vector lmsMin = lms; - - for (int i = 0; i < invs.size(); i++) - { - outs () << "Size reduction for " << invNames[i] << ": "; - for (auto a : sizeHistories[i]) outs () << a << " -> "; - int numTries = 0; - ds.checkAllLemmas(lms, lmsMin, numTries, i); // accurate simplification then - assert (numTries > 1); + }; + +// inline void learnInvariants(string smt, unsigned to, int maxAttempts, +// bool kind, int itp, bool b1, bool b2, bool b3, int debug) +// { +// ExprFactory m_efac; +// EZ3 z3(m_efac); +// +// CHCs ruleManager(m_efac, z3); +// ruleManager.parse(smt); +// RndLearner ds(m_efac, z3, ruleManager, to, kind, b1, b2, b3, debug); +// +// ds.setupSafetySolver(); +// std::srand(std::time(0)); +// ExprSet itpCands; +// +// if (ruleManager.decls.size() > 1) +// { +// outs () << "WARNING: learning multiple invariants is currently unstable\n" +// << " it is suggested to disable \'aggressivepruning\'\n"; +// } +// else if (itp > 0) +// { +// outs () << "WARNING: For more efficient itp-based bootstrapping,\n" +// << " it is recommended to run --v2\n"; +// // current limitation: ruleManager.decls.size() == 0 +// ds.bootstrapBoundedProofs(itp, itpCands); +// } +// +// for (auto& dcl: ruleManager.decls) +// { +// ds.initializeDecl(dcl->left()); +// ds.prepareSeeds(dcl->left(), itpCands); // itpCands isn't used +// } +// +// ds.calculateStatistics(); +// ds.synthesize(maxAttempts, itpCands); +// }; +//ToDo ilia updated - outs () << lmsMin[i].size() << "\n"; - } - ds.serializeInvariants(lmsMin, invfile); - } } #endif diff --git a/include/deep/RndLearnerV2.hpp b/include/deep/RndLearnerV2.hpp index bb5a0b1fe..bd7e600bf 100644 --- a/include/deep/RndLearnerV2.hpp +++ b/include/deep/RndLearnerV2.hpp @@ -7,389 +7,385 @@ using namespace std; using namespace boost; namespace ufo { - class RndLearnerV2 : public RndLearner - { + class RndLearnerV2 : public RndLearner + { private: - map modelsOfFailures; + map modelsOfFailures; - vector tr; - vector fc; - vector qr; + vector tr; + vector fc; + vector qr; - ExprSet deferredLearned; - ExprSet deferredFailed; - ExprSet deferredBlocked; + ExprSet deferredLearned; + ExprSet deferredFailed; + ExprSet deferredBlocked; public: - RndLearnerV2 (ExprFactory &efac, EZ3 &z3, CHCs& r, bool freqs, bool aggp) : - RndLearner (efac, z3, r, /*k-induction*/ false, freqs, /*epsilon*/ true, aggp){} + RndLearnerV2 (ExprFactory &efac, EZ3 &z3, CHCs& r, unsigned to, bool freqs, bool aggp, int debug) : + RndLearner (efac, z3, r, to, /*k-induction*/ false, freqs, /*epsilon*/ true, aggp, debug){} - Expr getModel(ExprVector& vars) - { - ExprVector eqs; - ZSolver::Model m = m_smt_solver.getModel(); - for (auto & v : vars) - { - Expr e = m.eval(v); - if (e == NULL) - { - return NULL; - } - else if (e != v) - { - eqs.push_back(mk(v, e)); - } - else + Expr getModel(ExprVector& vars) { - if (bind::isBoolConst(v)) - eqs.push_back(mk(v, mk(m_efac))); - else if (bind::isIntConst(v)) - eqs.push_back(mk(v, mkTerm (mpz_class (guessUniformly (1000)-500), m_efac))); + ExprVector eqs; + ZSolver::Model m = m_smt_solver.getModel(); + for (auto & v : vars) + { + Expr e = m.eval(v); + if (e == NULL) + { + return NULL; + } + else if (e != v) + { + eqs.push_back(mk(v, e)); + } + else + { + if (bind::isBoolConst(v)) + eqs.push_back(mk(v, mk(m_efac))); + else if (bind::isIntConst(v)) + eqs.push_back(mk(v, mkTerm (mpz_class (guessUniformly (1000)-500), m_efac))); + } + } + return conjoin (eqs, m_efac); } - } - return conjoin (eqs, m_efac); - } - - ExprSet& getlearnedLemmas(int num) - { - return sfs[num].back().learnedExprs; - } - - void categorizeCHCs() - { - for (auto & a : ruleManager.chcs) - if (a.isInductive) tr.push_back(&a); - else if (a.isFact) fc.push_back(&a); - else if (a.isQuery) qr.push_back(&a); - } - int redundancyCheck (ExprVector& lemmas, bool deferPriorities) - { - int num = 0; - SamplFactory& sf = sfs[0].back(); - for (auto & l : lemmas) - { - if (deferPriorities) - { - deferredLearned.insert(l); - } - else + ExprSet& getlearnedLemmas(int num) { - Sampl& s = sf.exprToSampl(l); - if (!s.empty()) sf.assignPrioritiesForLearned(); + return sfs[num].back().learnedExprs; } - numOfSMTChecks++; - if (!u.implies(sf.getAllLemmas(), l)) - { - sf.learnedExprs.insert(l); - num++; - } - } - return num; - } - bool checkSafetyAndReset(HornRuleExt* qu) - { - m_smt_solver.reset(); - m_smt_solver.assertExpr (qu->body); - - int ind = getVarIndex(qu->srcRelation, decls); - SamplFactory& sf = sfs[ind].back(); - - Expr lmApp = sf.getAllLemmas(); - for (int i = 0; i < qu->srcVars.size(); i++) - { - lmApp = replaceAll(lmApp, invarVars[ind][i], qu->srcVars[i]); - } - m_smt_solver.assertExpr(lmApp); - - numOfSMTChecks++; - return !m_smt_solver.solve (); - } - - void getIS(HornRuleExt* hr, ExprVector& candSet, bool deferPriorities) - { - if (candSet.size() == 0) return; - SamplFactory& sf = sfs[0].back(); - - Expr cands = conjoin (candSet, m_efac); - - for (int i = candSet.size() - 1; i >= 0; i--) - { - Expr candPrime = candSet[i]; - - for (int j = 0; j < hr->srcVars.size(); j++) + void categorizeCHCs() { - candPrime = replaceAll(candPrime, hr->srcVars[j], hr->dstVars[j]); + for (auto & a : ruleManager.chcs) + if (a.isInductive) tr.push_back(&a); + else if (a.isFact) fc.push_back(&a); + else if (a.isQuery) qr.push_back(&a); } - m_smt_solver.reset(); - m_smt_solver.assertExpr (hr->body); - m_smt_solver.assertExpr (cands); - m_smt_solver.assertExpr (sf.getAllLemmas()); - m_smt_solver.assertExpr (mk(candPrime)); - - numOfSMTChecks++; - if (m_smt_solver.solve ()) - { - modelsOfFailures[getModel(hr->srcVars)].insert(candSet[i]); - - if (deferPriorities) - { - deferredBlocked.insert(candSet[i]); - } - else - { - // GF: to debug (esp. nonlin opers) - Sampl& s = sf.exprToSampl(candSet[i]); - sf.assignPrioritiesForBlocked(); - } - - candSet.erase(candSet.begin() + i); - - getIS(hr, candSet, deferPriorities); - return; - } - } - return; - } - - bool initCheckCand(HornRuleExt* fc, Expr cand) - { - Expr candPrime = cand; - - for (int j = 0; j < fc->dstVars.size(); j++) - { - candPrime = replaceAll(candPrime, invarVars[0][j], fc->dstVars[j]); - } - - m_smt_solver.reset(); - m_smt_solver.assertExpr (fc->body); - m_smt_solver.assertExpr (mk(candPrime)); - - numOfSMTChecks++; - return (!m_smt_solver.solve ()); - } - - bool houdini (ExprSet& cands, bool deferPriorities, bool skipInit) - { - SamplFactory& sf = sfs[0].back(); - ExprVector exprs; - for (auto & a : cands) exprs.push_back(a); - - // initiation: remove crap first - if (!skipInit) - { - for (auto a : fc) + int redundancyCheck (ExprVector& lemmas, bool deferPriorities) { - for (int i = exprs.size() - 1; i >= 0; i--) - { - if (!initCheckCand(a, exprs[i])) + int num = 0; + SamplFactory& sf = sfs[0].back(); + for (auto & l : lemmas) { - if (deferPriorities) - { - deferredFailed.insert(exprs[i]); - } - else - { - Sampl& s = sf.exprToSampl(exprs[i]); - if (!s.empty()) sf.assignPrioritiesForFailed(); - } - exprs.erase(exprs.begin()+i); + if (deferPriorities) + { + deferredLearned.insert(l); + } + else + { + Sampl& s = sf.exprToSampl(l); + if (!s.empty()) sf.assignPrioritiesForLearned(); + } + numOfSMTChecks++; + if (!u.implies(sf.getAllLemmas(), l)) + { + sf.learnedExprs.insert(l); + num++; + } } - } + return num; } - } - - // consecution - for (auto a : tr) getIS(a, exprs, deferPriorities); - - // safety: - int num = exprs.size(); - int newLemmaAdded = redundancyCheck(exprs, deferPriorities); - - if (newLemmaAdded == 0) return false; - - for (auto a : qr) if (!checkSafetyAndReset(a)) return false; - - return true; - } - void prioritiesDeferred() - { - SamplFactory& sf = sfs[0].back(); - - for (auto & a : deferredLearned) - { - Sampl& s = sf.exprToSampl(a); - sf.assignPrioritiesForLearned(); - } - for (auto & a : deferredFailed) - { - Sampl& s = sf.exprToSampl(a); - sf.assignPrioritiesForFailed(); - } - for (auto & a : deferredBlocked) - { - Sampl& s = sf.exprToSampl(a); - sf.assignPrioritiesForBlocked(); - } - } - - bool synthesize(int maxAttempts, int batchSz, int scndChSz) - { - assert(sfs.size() == 1); // current limitation - - SamplFactory& sf = sfs[0].back(); - - ExprVector candsBatch; - - bool success = false; - int iter = 1; - int triggerSecondChance = 0; - int numFailInit = 0; - - for (int i = 0; i < maxAttempts; i++) - { - candsBatch.clear(); - - if (printLog) outs() << "\n ---- new iteration " << iter << " ----\n"; - - while (candsBatch.size() < batchSz) +// bool checkSafetyAndReset(HornRuleExt* qu) +// { +// m_smt_solver.reset(); +// m_smt_solver.assertExpr (qu->body); +// +// int ind = getVarIndex(qu->srcRelation, decls); +// SamplFactory& sf = sfs[ind].back(); +// +// Expr lmApp = sf.getAllLemmas(); +// for (int i = 0; i < qu->srcVars.size(); i++) +// { +// lmApp = replaceAll(lmApp, invarVars[ind][i], qu->srcVars[i]); +// } +// m_smt_solver.assertExpr(lmApp); +// +// numOfSMTChecks++; +// return bool(!m_smt_solver.solve ()); +// } +//ToDo ilia updated + +// void getIS(HornRuleExt* hr, ExprVector& candSet, bool deferPriorities) +// { +// if (candSet.size() == 0) return; +// SamplFactory& sf = sfs[0].back(); +// +// Expr cands = conjoin (candSet, m_efac); +// +// for (int i = candSet.size() - 1; i >= 0; i--) +// { +// Expr candPrime = candSet[i]; +// +// for (int j = 0; j < hr->srcVars.size(); j++) +// { +// candPrime = replaceAll(candPrime, hr->srcVars[j], hr->dstVars[j]); +// } +// +// m_smt_solver.reset(); +// m_smt_solver.assertExpr (hr->body); +// m_smt_solver.assertExpr (cands); +// m_smt_solver.assertExpr (sf.getAllLemmas()); +// m_smt_solver.assertExpr (mk(candPrime)); +// +// numOfSMTChecks++; +// if (m_smt_solver.solve ()) +// { +// modelsOfFailures[getModel(hr->srcVars)].insert(candSet[i]); +// +// if (deferPriorities) +// { +// deferredBlocked.insert(candSet[i]); +// } +// else +// { +// // GF: to debug (esp. nonlin opers) +// Sampl& s = sf.exprToSampl(candSet[i]); +// sf.assignPrioritiesForBlocked(); +// } +// +// candSet.erase(candSet.begin() + i); +// +// getIS(hr, candSet, deferPriorities); +// return; +// } +// } +// return; +// } +//ToDo ilia updated + +// bool initCheckCand(HornRuleExt* fc, Expr cand) +// { +// Expr candPrime = cand; +// +// for (int j = 0; j < fc->dstVars.size(); j++) +// { +// candPrime = replaceAll(candPrime, invarVars[0][j], fc->dstVars[j]); +// } +// +// m_smt_solver.reset(); +// m_smt_solver.assertExpr (fc->body); +// m_smt_solver.assertExpr (mk(candPrime)); +// +// numOfSMTChecks++; +// return bool(!m_smt_solver.solve ()); +// } + +// bool houdini (ExprSet& cands, bool deferPriorities, bool skipInit) +// { +// SamplFactory& sf = sfs[0].back(); +// ExprVector exprs; +// for (auto & a : cands) exprs.push_back(a); +// +// // initiation: remove crap first +// if (!skipInit) +// { +// for (auto a : fc) +// { +// for (int i = exprs.size() - 1; i >= 0; i--) +// { +// if (!initCheckCand(a, exprs[i])) +// { +// if (deferPriorities) +// { +// deferredFailed.insert(exprs[i]); +// } +// else +// { +// Sampl& s = sf.exprToSampl(exprs[i]); +// if (!s.empty()) sf.assignPrioritiesForFailed(); +// } +// exprs.erase(exprs.begin()+i); +// } +// } +// } +// } +// +// // consecution +// for (auto a : tr) getIS(a, exprs, deferPriorities); +// +// // safety: +// int num = exprs.size(); +// int newLemmaAdded = redundancyCheck(exprs, deferPriorities); +// +// if (newLemmaAdded == 0) return false; +// +// for (auto a : qr) if (!checkSafetyAndReset(a)) return false; +// +// return true; +// } + + void prioritiesDeferred() { - Expr cand = sf.getFreshCandidate(); - if (cand == NULL) continue; - - if (isTautology(cand)) // keep searching - { - sf.assignPrioritiesForLearned(); - continue; - } - - if (sf.lf.nonlinVars.size() > 0 && !u.isSat(cand)) // keep searching - { - sf.assignPrioritiesForFailed(); - continue; - } + SamplFactory& sf = sfs[0].back(); - iter++; - - bool toskip = false; - for (auto a : fc) - { - if (!initCheckCand(a, cand)) + for (auto & a : deferredLearned) { - numFailInit++; - sf.assignPrioritiesForFailed(); - toskip = true; - break; + Sampl& s = sf.exprToSampl(a); + sf.assignPrioritiesForLearned(); + } + for (auto & a : deferredFailed) + { + Sampl& s = sf.exprToSampl(a); + sf.assignPrioritiesForFailed(); + } + for (auto & a : deferredBlocked) + { + Sampl& s = sf.exprToSampl(a); + sf.assignPrioritiesForBlocked(); } - } - if (toskip) continue; - - if (printLog) outs () << " candidate for " << *decls[0] << ": " << *cand << "\n"; - - candsBatch.push_back(cand); - } - - for (auto a : tr) getIS(a, candsBatch, false); // houdini - - if (candsBatch.size() == 0) continue; - - success = true; - for (auto a : qr) success = success && checkSafetyAndReset(a); - if (success) break; - - // second chance candidates - triggerSecondChance += redundancyCheck(candsBatch, false); - if (triggerSecondChance < scndChSz) continue; - - triggerSecondChance = 0; - - ExprSet secondChanceCands; - for (auto it = modelsOfFailures.begin(); it != modelsOfFailures.end(); ) - { - m_smt_solver.reset(); - m_smt_solver.assertExpr (it->first); - m_smt_solver.assertExpr (sf.getAllLemmas()); - - numOfSMTChecks++; - if (!m_smt_solver.solve ()) // CE violated - { - for (auto & e : it->second) secondChanceCands.insert(e); - modelsOfFailures.erase(it++); - } - else ++it; } - if (secondChanceCands.size() > 0) success = houdini(secondChanceCands, false, true); - if (success) break; - } - - return success; - } - }; - - inline void learnInvariants2(string smt, char * outfile, int maxAttempts, - int itp, int batch, int retry, bool freqs, bool aggp) - { - ExprFactory m_efac; - EZ3 z3(m_efac); - - CHCs ruleManager(m_efac, z3); - ruleManager.parse(smt); - RndLearnerV2 ds(m_efac, z3, ruleManager, freqs, aggp); - ds.categorizeCHCs(); - - std::srand(std::time(0)); - - if (ruleManager.hasArrays) - { - outs () << "Arrays are not supported in this mode\n"; - exit(0); - } - if (ruleManager.decls.size() > 1) - { - outs() << "WARNING: learning multiple invariants is currently unsupported in --v2.\n" - << " Run --v1\n"; - return; - } - - for (auto& dcl: ruleManager.decls) ds.initializeDecl(dcl); - - ExprSet cands; - - if (itp > 0) ds.bootstrapBoundedProofs(itp, cands); - - for (auto& dcl: ruleManager.decls) ds.doSeedMining (dcl->arg(0), cands); - - bool success = ds.houdini(cands, true, false); - outs () << "Number of bootstrapped lemmas: " << ds.getlearnedLemmas(0).size() << "\n"; - if (success) - { - outs () << "Success after the bootstrapping\n"; - } - else - { - ds.calculateStatistics(); - ds.prioritiesDeferred(); - - success = ds.synthesize(maxAttempts, batch, retry); - if (success) outs () << "Total number of learned lemmas: " << ds.getlearnedLemmas(0).size() << "\n"; - - if (success) outs () << "\nSuccess after the sampling\n"; - else outs () << "\nNo success after " << maxAttempts << " iterations\n"; - } - - if (success && outfile != NULL) - { - vector invs; - invs.push_back(ds.getlearnedLemmas(0)); - ds.serializeInvariants(invs, outfile); - } - } +// bool synthesize(int maxAttempts, int batchSz, int scndChSz) +// { +// assert(sfs.size() == 1); // current limitation +// +// SamplFactory& sf = sfs[0].back(); +// +// ExprVector candsBatch; +// +// bool success = false; +// int iter = 1; +// int triggerSecondChance = 0; +// int numFailInit = 0; +// +// for (int i = 0; i < maxAttempts; i++) +// { +// candsBatch.clear(); +// +// if (printLog) outs() << "\n ---- new iteration " << iter << " ----\n"; +// +// while (candsBatch.size() < batchSz) +// { +// Expr cand = sf.getFreshCandidate(); +// if (cand == NULL) continue; +// +// if (isTautology(cand)) // keep searching +// { +// sf.assignPrioritiesForLearned(); +// continue; +// } +// +// if (sf.lf.nonlinVars.size() > 0 && !u.isSat(cand)) // keep searching +// { +// sf.assignPrioritiesForFailed(); +// continue; +// } +// +// iter++; +// +// bool toskip = false; +// for (auto a : fc) +// { +// if (!initCheckCand(a, cand)) +// { +// numFailInit++; +// sf.assignPrioritiesForFailed(); +// toskip = true; +// break; +// } +// } +// if (toskip) continue; +// +// if (printLog) outs () << " candidate for " << *decls[0] << ": " << *cand << "\n"; +// +// candsBatch.push_back(cand); +// } +// +// for (auto a : tr) getIS(a, candsBatch, false); // houdini +// +// if (candsBatch.size() == 0) continue; +// +// success = true; +// for (auto a : qr) success = success && checkSafetyAndReset(a); +// if (success) break; +// +// // second chance candidates +// triggerSecondChance += redundancyCheck(candsBatch, false); +// if (triggerSecondChance < scndChSz) continue; +// +// triggerSecondChance = 0; +// +// ExprSet secondChanceCands; +// for (auto it = modelsOfFailures.begin(); it != modelsOfFailures.end(); ) +// { +// m_smt_solver.reset(); +// m_smt_solver.assertExpr (it->first); +// m_smt_solver.assertExpr (sf.getAllLemmas()); +// +// numOfSMTChecks++; +// if (!m_smt_solver.solve ()) // CE violated +// { +// for (auto & e : it->second) secondChanceCands.insert(e); +// modelsOfFailures.erase(it++); +// } +// else ++it; +// } +// +// if (secondChanceCands.size() > 0) success = houdini(secondChanceCands, false, true); +// if (success) break; +// } +// +// return success; +// } +//ToDo ilia updated + }; + +// inline void learnInvariants2(string smt, unsigned to, int maxAttempts, +// int itp, int batch, int retry, bool freqs, bool aggp, int debug) +// { +// ExprFactory m_efac; +// EZ3 z3(m_efac); +// +// CHCs ruleManager(m_efac, z3); +// ruleManager.parse(smt); +// RndLearnerV2 ds(m_efac, z3, ruleManager, to, freqs, aggp, debug); +// ds.categorizeCHCs(); +// +// std::srand(std::time(0)); +// +// if (ruleManager.decls.size() > 1) +// { +// outs() << "WARNING: learning multiple invariants is unsupported in --v2.\n" +// << " Run --v3\n"; +// return; +// } +// +// for (auto& dcl: ruleManager.decls) ds.initializeDecl(dcl->left()); +// +// ExprSet cands; +// +// if (itp > 0) ds.bootstrapBoundedProofs(itp, cands); +// +// for (auto& dcl: ruleManager.decls) ds.prepareSeeds(dcl->arg(0), cands); // cands isn't used +// +// bool success = ds.houdini(cands, true, false); +// +// if (debug) +// outs () << "Number of bootstrapped lemmas: " << ds.getlearnedLemmas(0).size() << "\n"; +// +// if (success) +// outs () << "Success after the bootstrapping\n"; +// else +// { +// ds.calculateStatistics(); +// ds.prioritiesDeferred(); +// +// success = ds.synthesize(maxAttempts, batch, retry); +// if (debug) +// if (success) outs () << "Total number of learned lemmas: " << ds.getlearnedLemmas(0).size() << "\n"; +// +// if (success) outs () << "Success after sampling\n"; +// else outs () << "No success after " << maxAttempts << " iterations\n"; +// } +// +// if (success) ds.printSolution(); +// } +//ToDo ilia updated } #endif diff --git a/include/deep/RndLearnerV3.hpp b/include/deep/RndLearnerV3.hpp index edc9ae8a3..9399410cf 100644 --- a/include/deep/RndLearnerV3.hpp +++ b/include/deep/RndLearnerV3.hpp @@ -1,7 +1,8 @@ #ifndef RNDLEARNERV3__HPP__ #define RNDLEARNERV3__HPP__ -#include "RndLearner.hpp" +#include "RndLearnerV2.hpp" +#include "LBExpl.hpp" #ifdef HAVE_ARMADILLO #include "DataLearner.hpp" @@ -11,1190 +12,1820 @@ using namespace std; using namespace boost; namespace ufo { - class RndLearnerV3 : public RndLearnerV2 - { - private: + struct ArrAccessIter + { + bool grows; + Expr iter; + Expr qv; + Expr precond; + Expr range; + }; + + static bool (*weakeningPriorities[])(Expr, tribool) = +{ + [](Expr cand, tribool val) { return bool(!val); }, +[](Expr cand, tribool val) { return indeterminate(val) && containsOp(cand); }, +[](Expr cand, tribool val) { return indeterminate(val); } +}; + +class RndLearnerV3 : public RndLearnerV2 +{ +private: ExprSet checked; + set propped; map candidates; - int updCount = 1; + map> deferredCandidates; + map tmpFailed; + bool boot = true; + + // extra options for disjunctive invariants + unsigned dCandNum = 0; + unsigned dAttNum = 100; + unsigned dDepNum = 2; + bool dAllMbp; + bool dAddProp; + bool dAddDat; + bool dStrenMbp; + int mbpEqs; - map iterators; // per cycle - map preconds; map postconds; map ssas; - map qvars; - map iterGrows; - - public: + map prefs; + map mbps; - RndLearnerV3 (ExprFactory &efac, EZ3 &z3, CHCs& r, bool freqs, bool aggp) : - RndLearnerV2 (efac, z3, r, freqs, aggp){} - - bool checkInit(Expr rel) - { - vector adjacent; - for (auto &hr: ruleManager.chcs) - { - if (hr.isFact && hr.dstRelation == rel) - { - adjacent.push_back(&hr); - } - } - if (adjacent.empty()) return true; - return multiHoudini(adjacent); - } + map> qvits; // per cycle + map qvars; - bool checkInductiveness(Expr rel) +public: + + RndLearnerV3 (ExprFactory &efac, EZ3 &z3, CHCs& r, unsigned to, bool freqs, bool aggp, int _m, + bool _dAllMbp, bool _dAddProp, bool _dAddDat, bool _dStrenMbp, int debug) : + RndLearnerV2 (efac, z3, r, to, freqs, aggp, debug), + mbpEqs(_m), dAllMbp(_dAllMbp), dAddProp(_dAddProp), dAddDat(_dAddDat), dStrenMbp(_dStrenMbp) {} + +// bool checkInit(Expr rel) +// { +// vector adjacent; +// for (auto &hr: ruleManager.chcs) +// { +// if (hr.isFact && hr.dstRelation == rel) +// { +// adjacent.push_back(&hr); +// } +// } +// if (adjacent.empty()) return true; +// return multiHoudini(adjacent); +// } +//ToDo ilia updated + +// bool checkInductiveness(Expr rel) +// { +// vector adjacent; +// for (auto &hr: ruleManager.chcs) +// { +// bool checkedSrc = find(checked.begin(), checked.end(), hr.srcRelation) != checked.end(); +// bool checkedDst = find(checked.begin(), checked.end(), hr.dstRelation) != checked.end(); +// if ((hr.srcRelation == rel && hr.dstRelation == rel) || +// (hr.srcRelation == rel && checkedDst) || +// (hr.dstRelation == rel && checkedSrc) || +// (checkedSrc && checkedDst) || +// (hr.isFact && checkedDst)) +// { +// if (!hr.isQuery) adjacent.push_back(&hr); +// } +// } +// if (adjacent.empty()) return true; +// return multiHoudini(adjacent); +// } +//ToDo ilia updated + + ArrAccessIter* getQvit (int invNum, Expr it) { - vector adjacent; - for (auto &hr: ruleManager.chcs) - { - bool checkedSrc = find(checked.begin(), checked.end(), hr.srcRelation) != checked.end(); - bool checkedDst = find(checked.begin(), checked.end(), hr.dstRelation) != checked.end(); - if ((hr.srcRelation == rel && hr.dstRelation == rel) || - (hr.srcRelation == rel && checkedDst) || - (hr.dstRelation == rel && checkedSrc) || - (checkedSrc && checkedDst) || - (hr.isFact && checkedDst)) - { - if (!hr.isQuery) adjacent.push_back(&hr); - } - } - if (adjacent.empty()) return true; - return multiHoudini(adjacent); + for (auto a : qvits[invNum]) if (a->qv == it) return a; + return NULL; } Expr renameCand(Expr newCand, ExprVector& varsRenameFrom, int invNum) { - for (auto & v : invarVars[invNum]) - newCand = replaceAll(newCand, varsRenameFrom[v.first], v.second); - return newCand; + for (auto & v : invarVars[invNum]) + newCand = replaceAll(newCand, varsRenameFrom[v.first], v.second); + return newCand; } - Expr eliminateQuantifiers(Expr formula, ExprVector& varsRenameFrom, int invNum) + Expr eliminateQuantifiers(Expr e, ExprVector& varsRenameFrom, int invNum, bool bwd) { - ExprSet allVars; - ExprSet quantified; - ExprSet forallQuantified; - getQuantifiedVars(formula, forallQuantified); - expr::filter (formula, bind::IsConst(), std::inserter (allVars, allVars.begin ())); - for (auto & v : allVars) - if (find(varsRenameFrom.begin(), varsRenameFrom.end(), v) == varsRenameFrom.end()) - if (find(forallQuantified.begin(), forallQuantified.end(), v) == forallQuantified.end()) - quantified.insert(v); - - if (containsOp(formula)) - { - Expr newCand = simpleQE(formula, quantified, true); - ExprSet ops; - getConj(newCand, ops); - for (auto & a : ops) + Expr eTmp = keepQuantifiersRepl(e, varsRenameFrom); + eTmp = weakenForHardVars(eTmp, varsRenameFrom); + if (bwd) eTmp = mkNeg(eTmp); + eTmp = simplifyBool(/*simplifyArithm*/(eTmp /*, false, true*/)); + eTmp = unfoldITE(eTmp); + eTmp = renameCand(eTmp, varsRenameFrom, invNum); + if (printLog >= 4) { - if (isOpX(a)) - { - newCand = a; - break; - } + outs () << " QE: " << e << "\n vars ((("; pprint(varsRenameFrom); outs () << ")))\n"; + outs () << " QE res: " << eTmp << "\n"; } - return renameCand(newCand, varsRenameFrom, invNum); - } - - if (findNonlin(formula) || findArray(formula) || containsOp(formula) || containsOp(formula)) - { - Expr newCand = simpleQE(formula, quantified, true, true); - return renameCand(newCand, varsRenameFrom, invNum); - } - - AeValSolver ae(mk(m_efac), formula, quantified); - if (ae.solve()) - { - Expr newCand = ae.getValidSubset(); - return renameCand(newCand, varsRenameFrom, invNum); - } - return mk(m_efac); + return eTmp; } - bool getCandForAdjacentRel(Expr candToProp, Expr constraint, Expr relFrom, ExprVector& varsRenameFrom, Expr rel, bool seed, bool fwd) - { - Expr formula = mk(candToProp, constraint); - if (!containsOp(candToProp) && !u.isSat(formula)) return false; // sometimes, maybe we should return true. - - int invNum = getVarIndex(rel, decls); - Expr newCand; +// void addPropagatedArrayCands(Expr rel, int invNum, Expr candToProp) +// { +// vector tmp = ruleManager.cycles[rel][0]; // todo: extend +// if (tmp.size() != 1) return; // todo: support +// +// Expr fls = candToProp->last()->right(); +// for (auto & q : qvits[invNum]) +// fls = replaceAll(fls, q->qv, q->iter); +// Expr bdy = rewriteSelectStore(ruleManager.chcs[tmp[0]].body); +// +// ExprVector ev; +// for (int h = 0; h < ruleManager.chcs[tmp[0]].dstVars.size(); h++) +// { +// Expr var = ruleManager.chcs[tmp[0]].srcVars[h]; +// bool pushed = false; +// for (auto & q : qvits[invNum]) +// { +// if (q->iter == var) +// { +// ev.push_back(var); +// pushed = true; +// } +// } +// if (!pushed) ev.push_back(ruleManager.chcs[tmp[0]].dstVars[h]); +// } +// +// ExprSet cnjs; +// Expr newCand2; +// cnjs.clear(); +// getConj(eliminateQuantifiers(mk(fls, bdy), ev, invNum, false), cnjs); +// for (auto & c : cnjs) +// { +// if (u.isTrue(c) || u.isFalse(c)) continue; +// Expr e = ineqNegReverter(c); +// if (isOp(e)) +// { +// for (auto & q : qvits[invNum]) +// { +// if (containsOp(e) && !emptyIntersect(q->iter, e)) +// { +// e = replaceAll(e, q->iter, q->qv); +// e = renameCand(e, ruleManager.chcs[tmp[0]].dstVars, invNum); +// +// // workaround: it works only during bootstrapping now +// arrCands[invNum].insert(e); +// } +// } +// } +// } +// } +//ToDo ilia updated + +// bool getCandForAdjacentRel(Expr candToProp, Expr constraint, Expr relFrom, ExprVector& varsRenameFrom, Expr rel, bool seed, bool fwd) +// { +// if (!containsOp(candToProp) && !u.isSat(candToProp, constraint)) +// return false; // sometimes, maybe we should return true. +// +// int invNum = getVarIndex(rel, decls); +// int invNumFrom = getVarIndex(relFrom, decls); +// +// if (containsOp(candToProp)) +// { +// // GF: not tested for backward propagation +// if (fwd == false) return true; +// if (finalizeArrCand(candToProp, constraint, relFrom)) +// { +// assert (isOpX(candToProp)); +// Expr qvar = getQvit(invNumFrom, bind::fapp(candToProp->arg(0)))->qv; // TODO: support nested loops with several qvars +// +// addPropagatedArrayCands(rel, invNum, candToProp); +// Expr newCand = getForallCnj(eliminateQuantifiers( +// mk(candToProp, constraint), varsRenameFrom, invNum, false)); +// if (newCand == NULL) return true; +// +// auto candsTmp = candidates; +// candidates[invNum].push_back(newCand); +// +// bool res = checkCand(invNum, false) && +// propagateRec(rel, conjoin(candidates[invNum], m_efac), false); +// if (!candidates[invNum].empty()) return res; +// +// for (auto & q : qvits[invNum]) +// { +// Expr newCand1 = replaceAll(newCand, qvar->last(), q->qv->last()); +// newCand1 = replaceArrRangeForIndCheck(invNum, newCand1, true); +// if (newCand1 == NULL) continue; +// candidates = candsTmp; +// candidates[invNum].push_back(newCand1); +// if (checkCand(invNum, false) && +// propagateRec(rel, conjoin(candidates[invNum], m_efac), false)) +// res = true; +// } +// return res; +// } +// else +// { +// // very ugly at the moment, to be revisited +// Expr newCand = getForallCnj(eliminateQuantifiers( +// mk(candToProp, constraint), varsRenameFrom, invNum, false)); +// if (newCand == NULL) return true; +// candidates[invNum].push_back(newCand); +// return checkCand(invNum, false) && +// propagateRec(rel, conjoin(candidates[invNum], m_efac), false); +// } +// } +// +// Expr newCand = eliminateQuantifiers( +// (fwd ? mk(candToProp, constraint) : +// mk(constraint, mkNeg(candToProp))), +// varsRenameFrom, invNum, !fwd); +// ExprSet cnjs; +// getConj(newCand, cnjs); +// addCandidates(rel, cnjs); +// +// if (seed) +// { +// if (u.isTrue(newCand)) return true; +// else return propagateRec(rel, newCand, true); +// } +// else +// { +// checkCand(invNum, false); +// return propagateRec(rel, conjoin(candidates[invNum], m_efac), false); +// } +// } +//ToDo ilia updated - if (containsOp(candToProp)) - { - // GF: not tested for backward propagation - if (fwd == false) return true; - if (finalizeArrCand(candToProp, constraint, relFrom)) - { - newCand = eliminateQuantifiers(mk(candToProp, constraint), varsRenameFrom, invNum); - // GF: temporary workaround: - // need to support Houdini for arrays, to be able to add newCand and newCand1 at the same time - Expr newCand1 = replaceArrRangeForIndCheck(invNum, newCand, true); - auto candsTmp = candidates; - candidates[invNum].push_back(newCand); - bool res0 = checkCand(invNum); - if (!candidates[invNum].empty()) return res0; - candidates = candsTmp; - candidates[invNum].push_back(newCand1); - return checkCand(invNum); - } - else - { - // very ugly at the moment, to be revisited - newCand = eliminateQuantifiers(mk(candToProp, constraint), varsRenameFrom, invNum); - candidates[invNum].push_back(newCand); - return checkCand(invNum); - } - } - - ExprSet dsjs; - getDisj(candToProp, dsjs); - ExprSet newSeedDsjs; - for (auto & d : dsjs) - { - Expr r = eliminateQuantifiers(mk(d, constraint), varsRenameFrom, invNum); - newSeedDsjs.insert(r); - } - newCand = disjoin(newSeedDsjs, m_efac); - - if (seed) - { - ExprSet cnjs; - ExprSet newCnjs; - getConj(newCand, cnjs); - for (auto & cnd : cnjs) + bool addCandidate(int invNum, Expr cnd) + { + if (printLog >= 3) outs () << " Adding candidate [" << invNum << "]: " << cnd << "\n"; + SamplFactory& sf = sfs[invNum].back(); + Expr allLemmas = sf.getAllLemmas(); + if (containsOp(cnd) || containsOp(allLemmas)) { - newCnjs.insert(cnd); - addCandidate(invNum, cnd); + if (containsOp(cnd)) + cnd = replaceArrRangeForIndCheck (invNum, cnd); + candidates[invNum].push_back(cnd); + return true; } + if (!isOpX(allLemmas) && u.implies(allLemmas, cnd)) return false; - newCand = conjoin(newCnjs, m_efac); - if (isOpX(newCand)) return true; - else return propagate(invNum, newCand, true); - } - else - { - ExprSet cnjs; - getConj(newCand, cnjs); - for (auto & a : cnjs) addCandidate(invNum, a); - return checkCand(invNum); - } + for (auto & a : candidates[invNum]) + if (a == cnd) return false; + candidates[invNum].push_back(cnd); + return true; } - bool addCandidate(int invNum, Expr cnd) + void addCandidates(Expr rel, ExprSet& cands) { - SamplFactory& sf = sfs[invNum].back(); - Expr allLemmas = sf.getAllLemmas(); - if (containsOp(cnd) || containsOp(allLemmas)) - { - if (containsOp(cnd)) + int invNum = getVarIndex(rel, decls); + for (auto & a : cands) { - auto hr = ruleManager.getFirstRuleOutside(decls[invNum]); - assert(hr != NULL); - - ExprSet cnjs; - ExprSet newCnjs; - Expr it = iterators[invNum]; - if (it != NULL) cnd = replaceArrRangeForIndCheck (invNum, cnd); + ExprSet tmp; +// addAllStrengthenings(a, tmp); +// for (auto & b : tmp) + addCandidate(invNum, a); } - candidates[invNum].push_back(cnd); - return true; - } - if (!isOpX(allLemmas) && u.implies(allLemmas, cnd)) return false; - - for (auto & a : candidates[invNum]) - { - if (u.isEquiv(a, cnd)) return false; - } - candidates[invNum].push_back(cnd); - return true; } bool finalizeArrCand(Expr& cand, Expr constraint, Expr relFrom) { - // only forward currently - if (!isOpX(cand)) return false; - if (!findArray(cand)) return false; + // only forward currently + if (!isOpX(cand)) return false; + if (!containsOp(cand)) return false; + + // need to make sure the candidate is finalized (i.e., not a nested loop) + int invNum = getVarIndex(relFrom, decls); + if (u.isSat(postconds[invNum], constraint)) return false; - // need to make sure the candidate is finalized (i.e., not a nested loop) - int invNum = getVarIndex(relFrom, decls); - if (u.isSat(postconds[invNum], constraint)) return false; + ExprSet cnj; + for (int i = 0; i < cand->arity()-1; i++) + { + Expr qv = bind::fapp(cand->arg(i)); + auto q = getQvit(invNum, qv); + getConj(q->range, cnj); + } - cand = replaceAll(cand, cand->last()->left(), conjoin(arrIterRanges[invNum], m_efac)); - return true; + cand = replaceAll(cand, cand->last()->left(), conjoin(cnj, m_efac)); + return true; } - Expr replaceArrRangeForIndCheck(int invNum, Expr cand, bool fwd = false) + Expr getForallCnj (Expr cands) { - Expr itRepl = iterators[invNum]; - Expr post = postconds[invNum]; - ExprSet cnjs; - ExprSet newCnjs; - getConj(cand->last()->left(), cnjs); - - // TODO: support the case when there are two or more quantified vars - - Expr it = bind::fapp(cand->arg(0)); - ExprSet extr; - if (iterGrows[invNum] && fwd) extr.insert(mk(it, itRepl)); - else if (iterGrows[invNum] && !fwd) extr.insert(mk(it, itRepl)); - else if (!iterGrows[invNum] && fwd) extr.insert(mk(it, itRepl)); - else if (!iterGrows[invNum] && !fwd) extr.insert(mk(it, itRepl)); - - extr.insert(cand->last()->left()); - return replaceAll(cand, cand->last()->left(), conjoin(extr, m_efac)); + ExprSet cnj; + getConj(cands, cnj); + for (auto & cand : cnj) + if (isOpX(cand)) return cand; + return NULL; } - bool propagate(int invNum, Expr cand, bool seed) + Expr replaceArrRangeForIndCheck(int invNum, Expr cand, bool fwd = false) { - bool res = true; - Expr rel = decls[invNum]; - - checked.insert(rel); - for (auto & hr : ruleManager.chcs) - { - if (hr.srcRelation == hr.dstRelation || hr.isQuery) continue; - - SamplFactory* sf1; - SamplFactory* sf2; - - // adding lemmas to the body. GF: disabled because something is wrong with them and arrays - Expr constraint = hr.body; - sf2 = &sfs[getVarIndex(hr.dstRelation, decls)].back(); -// Expr lm2 = sf2->getAllLemmas(); -// for (auto & v : invarVars[getVarIndex(hr.dstRelation, decls)]) -// lm2 = replaceAll(lm2, v.second, hr.dstVars[v.first]); -// constraint = mk(constraint, lm2); - - if (!hr.isFact) - { - sf1 = &sfs[getVarIndex(hr.srcRelation, decls)].back(); -// constraint = mk(constraint, sf1->getAllLemmas()); - } - - // forward: - if (hr.srcRelation == rel && find(checked.begin(), checked.end(), hr.dstRelation) == checked.end()) + assert(isOpX(cand)); + ExprSet cnjs; + getConj(cand->last()->left(), cnjs); + for (int i = 0; i < cand->arity()-1; i++) { - Expr replCand = cand; - for (int i = 0; i < 3; i++) for (auto & v : sf1->lf.nonlinVars) replCand = replaceAll(replCand, v.second, v.first); - for (auto & v : invarVars[invNum]) replCand = replaceAll(replCand, v.second, hr.srcVars[v.first]); - res = res && getCandForAdjacentRel (replCand, constraint, rel, hr.dstVars, hr.dstRelation, seed, true); - } + auto qv = bind::fapp(cand->arg(i)); + auto str = getQvit(invNum, qv); + Expr itRepl = str->iter; - // backward (very similarly): - if (hr.dstRelation == rel && find(checked.begin(), checked.end(), hr.srcRelation) == checked.end() && !hr.isFact) - { - Expr replCand = cand; - for (int i = 0; i < 3; i++) for (auto & v : sf2->lf.nonlinVars) replCand = replaceAll(replCand, v.second, v.first); - for (auto & v : invarVars[invNum]) replCand = replaceAll(replCand, v.second, hr.dstVars[v.first]); - res = res && getCandForAdjacentRel (replCand, constraint, rel, hr.srcVars, hr.srcRelation, seed, false); + if (contains(cand->last()->right(), qv)) + { + if (str->grows && fwd) cnjs.insert(mk(qv, itRepl)); + else if (str->grows && !fwd) cnjs.insert(mk(qv, itRepl)); + else if (!str->grows && fwd) cnjs.insert(mk(qv, itRepl)); + else if (!str->grows && !fwd) cnjs.insert(mk(qv, itRepl)); + } + else + { + for (auto it = cnjs.begin(); it != cnjs.end(); ) + { + if (contains (*it, qv)) it = cnjs.erase(it); + else ++it; + } + } + cand = replaceAll(cand, cand->last()->left(), conjoin(cnjs, m_efac)); } - } - return res; + return simplifyQuants(cand); } - bool checkCand(int invNum) +// bool propagate(int invNum, Expr cand, bool seed) { return propagate(decls[invNum], cand, seed); } +//ToDo ilia updated +// bool propagate(Expr rel, Expr cand, bool seed) +// { +// propped.clear(); +// checked.clear(); +// return propagateRec(rel, cand, seed); +// } +//ToDo ilia updated + +// bool propagateRec(Expr rel, Expr cand, bool seed) +// { +// if (printLog >= 3) outs () << " Propagate: " << cand << "\n"; +// bool res = true; +// checked.insert(rel); +// for (auto & hr : ruleManager.chcs) +// { +// if (hr.isQuery || hr.isFact) continue; +// +// Expr constraint = hr.body; +// +// // forward: +// if (hr.srcRelation == rel && find(propped.begin(), propped.end(), &hr) == propped.end()) +// { +// if (hr.isInductive && ruleManager.hasArrays[rel]) continue; // temporary workarond +// propped.insert(&hr); +// SamplFactory* sf1 = &sfs[getVarIndex(hr.srcRelation, decls)].back(); +// Expr replCand = replaceAllRev(cand, sf1->lf.nonlinVars); +// replCand = replaceAll(replCand, ruleManager.invVars[rel], hr.srcVars); +// res = res && getCandForAdjacentRel (replCand, constraint, rel, hr.dstVars, hr.dstRelation, seed, true); +// } +// // backward (very similarly): +// if (hr.dstRelation == rel && find(propped.begin(), propped.end(), &hr) == propped.end()) +// { +// propped.insert(&hr); +// SamplFactory* sf2 = &sfs[getVarIndex(hr.dstRelation, decls)].back(); +// Expr replCand = replaceAllRev(cand, sf2->lf.nonlinVars); +// replCand = replaceAll(replCand, ruleManager.invVars[rel], hr.dstVars); +// res = res && getCandForAdjacentRel (replCand, constraint, rel, hr.srcVars, hr.srcRelation, seed, false); +// } +// } +// return res; +// } +//ToDo ilia updated + +// bool checkCand(int invNum, bool propa = true) +// { +// Expr rel = decls[invNum]; +// if (!checkInit(rel)) return false; +// if (!checkInductiveness(rel)) return false; +// +// return !propa || propagate(invNum, conjoin(candidates[invNum], m_efac), false); +// } +//ToDo ilia updated + + void addLemma (SamplFactory& sf, Expr l) { - Expr rel = decls[invNum]; - if (!checkInit(rel)) return false; - if (!checkInductiveness(rel)) return false; - - return propagate(invNum, conjoin(candidates[invNum], m_efac), false); + if (printLog) outs () << "Added lemma " << l << "\n"; + sf.learnedExprs.insert(l); } // a simple method to generate properties of a larger Array range, given already proven ranges void generalizeArrInvars (SamplFactory& sf) { - if (sf.learnedExprs.size() > 1) - { - ExprVector posts; - ExprVector pres; - map tmp; - ExprVector tmpVars; - ExprVector arrVars; - Expr tmpIt = bind::intConst(mkTerm ("_tmp_it", m_efac)); - - for (auto & a : sf.learnedExprs) + if (sf.learnedExprs.size() > 1) { - if (!isOpX(a)) continue; - Expr learnedQF = a->last(); - if (!isOpX(learnedQF)) continue; - ExprVector se; - filter (learnedQF->last(), bind::IsSelect (), inserter(se, se.begin())); - - // filter out accesses via non-quantified indeces - for (auto it = se.begin(); it != se.end();) - { - bool found = false; - for (int i = 0; i < a->arity(); i++) + ExprVector posts; + ExprVector pres; + map tmp; + ExprVector tmpVars; + ExprVector arrVars; + Expr tmpIt = bind::intConst(mkTerm ("_tmp_it", m_efac)); + + for (auto & a : sf.learnedExprs) { - if (contains(se[0]->right(), a->arg(0))) - { - found = true; - break; - } - } - if (!found) it = se.erase(it); - else ++it; - } + if (!isOpX(a)) continue; + Expr learnedQF = a->last(); + if (!isOpX(learnedQF)) continue; + ExprVector se; + filter (learnedQF->last(), bind::IsSelect (), inserter(se, se.begin())); + + // filter out accesses via non-quantified indeces + for (auto it = se.begin(); it != se.end();) + { + bool found = false; + for (int i = 0; i < a->arity(); i++) + { + if (contains(se[0]->right(), a->arg(0))) + { + found = true; + break; + } + } + if (!found) it = se.erase(it); + else ++it; + } - bool multipleIndex = false; - for (auto & s : se) { - if (se[0]->right() != s->right()) { - multipleIndex = true; - break; - } - } + bool multipleIndex = false; + for (auto & s : se) { + if (se[0]->right() != s->right()) { + multipleIndex = true; + break; + } + } - if (se.size() == 0 || multipleIndex) continue; + if (se.size() == 0 || multipleIndex) continue; - if (arrVars.size() == 0) { - for (int index = 0; index < se.size(); index++) { - arrVars.push_back(se[index]->left()); - tmpVars.push_back(bind::intConst(mkTerm ("_tmp_var_" + lexical_cast(index), m_efac))); - } - } else { - bool toContinue = false; - for (auto & s : se) { - if (find(arrVars.begin(), arrVars.end(), s->left()) == arrVars.end()) { - toContinue = true; - break; - } - } - if (toContinue) continue; - } + if (arrVars.size() == 0) { + for (int index = 0; index < se.size(); index++) { + arrVars.push_back(se[index]->left()); + tmpVars.push_back(bind::intConst(mkTerm ("_tmp_var_" + lexical_cast(index), m_efac))); + } + } else { + bool toContinue = false; + for (auto & s : se) { + if (find(arrVars.begin(), arrVars.end(), s->left()) == arrVars.end()) { + toContinue = true; + break; + } + } + if (toContinue) continue; + } - Expr postReplaced = learnedQF->right(); - for (int index = 0; index < se.size() && index < tmpVars.size(); index++) - postReplaced = replaceAll(postReplaced, se[index], tmpVars[index]); + Expr postReplaced = learnedQF->right(); + for (int index = 0; index < se.size() && index < tmpVars.size(); index++) + postReplaced = replaceAll(postReplaced, se[index], tmpVars[index]); - ExprSet postVars; - filter(postReplaced, bind::IsConst(), inserter(postVars, postVars.begin())); - for (auto & fhVar : sf.lf.getVars()) postVars.erase(fhVar); - for (auto & tmpVar : tmpVars) postVars.erase(tmpVar); - if (postVars.size() > 0) - { - AeValSolver ae(mk(m_efac), mk(postReplaced, mk(tmpIt, se[0]->right())), postVars); - if (ae.solve()) - { - Expr pr = ae.getValidSubset(); - ExprSet conjs; - getConj(pr, conjs); - if (conjs.size() > 1) - { - for (auto conjItr = conjs.begin(); conjItr != conjs.end();) + ExprSet postVars; + filter(postReplaced, bind::IsConst(), inserter(postVars, postVars.begin())); + for (auto & fhVar : sf.lf.getVars()) postVars.erase(fhVar); + for (auto & tmpVar : tmpVars) postVars.erase(tmpVar); + if (postVars.size() > 0) { - ExprVector conjVars; - filter (*conjItr, bind::IsConst(), inserter(conjVars, conjVars.begin())); - bool found = false; - for (auto & conjVar : conjVars) - { - if (find (tmpVars.begin(), tmpVars.end(), conjVar) != tmpVars.end()) + AeValSolver ae(mk(m_efac), mk(postReplaced, mk(tmpIt, se[0]->right())), postVars); + if (ae.solve()) { - found = true; - break; + Expr pr = ae.getValidSubset(); + ExprSet conjs; + getConj(pr, conjs); + if (conjs.size() > 1) + { + for (auto conjItr = conjs.begin(); conjItr != conjs.end();) + { + ExprVector conjVars; + filter (*conjItr, bind::IsConst(), inserter(conjVars, conjVars.begin())); + bool found = false; + for (auto & conjVar : conjVars) + { + if (find (tmpVars.begin(), tmpVars.end(), conjVar) != tmpVars.end()) + { + found = true; + break; + } + } + if (!found) conjItr = conjs.erase(conjItr); + else ++conjItr; + } + } + postReplaced = conjoin(conjs, m_efac); } - } - if (!found) conjItr = conjs.erase(conjItr); - else ++conjItr; } - } - postReplaced = conjoin(conjs, m_efac); - } - } - pres.push_back(learnedQF->left()); - posts.push_back(postReplaced); - tmp[mk(learnedQF->left(), postReplaced)].push_back(se[0]->right()); - } + pres.push_back(learnedQF->left()); + posts.push_back(postReplaced); + tmp[mk(learnedQF->left(), postReplaced)].push_back(se[0]->right()); + } - if (tmp.size() > 0) - { - for (auto & a : tmp) - { - if (a.second.size() > 1) + if (tmp.size() > 0) { - Expr disjIts = mk(m_efac); - for (auto & b : a.second) disjIts = mk(disjIts, mk(tmpIt, b)); - ExprSet elementaryIts; - filter (disjIts, bind::IsConst (), inserter(elementaryIts, elementaryIts.begin())); - for (auto & a : sf.lf.getVars()) elementaryIts.erase(a); - elementaryIts.erase(tmpIt); - if (elementaryIts.size() == 1) - { - AeValSolver ae(mk(m_efac), mk(disjIts, a.first->left()), elementaryIts); - if (ae.solve()) + for (auto & a : tmp) { - ExprVector args; - Expr it = *elementaryIts.begin(); - args.push_back(it->left()); - Expr newPre = replaceAll(ae.getValidSubset(), tmpIt, it); - Expr newPost = replaceAll(a.first->right(), tmpIt, it); - for (int index = 0; index < tmpVars.size() && index < arrVars.size(); index++) - newPost = replaceAll(newPost, tmpVars[index], mk(arrVars[index], it)); + args.push_back(mk(newPre, newPost)); + Expr newCand = mknary(args); + addLemma(sf, newCand); + } + } + } } - } } - } } - } } void assignPrioritiesForLearned() { -// bool progress = true; - for (auto & cand : candidates) - { - if (cand.second.size() > 0) + for (auto & cand : candidates) { - SamplFactory& sf = sfs[cand.first].back(); - for (auto & b : cand.second) - { - if (containsOp(b)) - { - sf.learnedExprs.insert(b); - } - else + if (cand.second.size() > 0) { - ExprVector invVars; - for (auto & a : invarVars[cand.first]) invVars.push_back(a.second); - Expr learnedCand = normalizeDisj(b, invVars); - Sampl& s = sf.exprToSampl(learnedCand); - sf.assignPrioritiesForLearned(); - if (!u.implies(sf.getAllLemmas(), learnedCand)) - sf.learnedExprs.insert(learnedCand); + SamplFactory& sf = sfs[cand.first].back(); + for (auto b : cand.second) + { + b = simplifyArithm(b); + if (!statsInitialized || containsOp(b) + || containsOp(b) || findNonlin(b)) + addLemma(sf, b); + else + { + Expr learnedCand = normalizeDisj(b, invarVarsShort[cand.first]); + Sampl& s = sf.exprToSampl(learnedCand); + sf.assignPrioritiesForLearned(); + if (!u.implies(sf.getAllLemmas(), learnedCand)) + addLemma(sf, learnedCand); + } + } } -// else progress = false; - } } - } -// if (progress) updateGrammars(); // GF: doesn't work great :( } - bool synthesize(int maxAttempts, char * outfile) +// void deferredPriorities() +// { +// for (auto & dcl: ruleManager.loopheads) +// { +// int invNum = getVarIndex(dcl, decls); +// SamplFactory& sf = sfs[invNum].back(); +// for (auto & l : sf.learnedExprs) +// { +// if (containsOp(l) || findNonlin(l) || containsOp(l)) continue; +// Expr learnedCand = normalizeDisj(l, invarVarsShort[invNum]); +// Sampl& s = sf.exprToSampl(learnedCand); +// sf.assignPrioritiesForLearned(); +// } +// for (auto & failedCand : tmpFailed[invNum]) +// { +// Sampl& s = sf.exprToSampl(failedCand); +// sf.assignPrioritiesForFailed(); +// } +// } +// } +//ToDo ilia updated + + Expr mkImplCnd(Expr pre, Expr cand, bool out = true) { - ExprSet cands; - for (int i = 0; i < maxAttempts; i++) - { - // next cand (to be sampled) - // TODO: find a smarter way to calculate; make parametrizable - int tmp = ruleManager.cycles[i % ruleManager.cycles.size()][0]; - int invNum = getVarIndex(ruleManager.chcs[tmp].srcRelation, decls); - checked.clear(); - candidates.clear(); - SamplFactory& sf = sfs[invNum].back(); - Expr cand = sf.getFreshCandidate(i < 25); // try simple array candidates first - if (cand != NULL && isOpX(cand) && isOpX(cand->last())) + Expr im; + if (isOpX(cand)) { - if (!u.isSat(cand->last()->left())) cand = NULL; + Expr tmp = cand->last()->right(); + im = replaceAll(cand, tmp, mkImplCnd(pre, tmp, false)); } - if (cand == NULL) continue; -// outs () << " - - - sampled cand: #" << i << ": " << *cand << "\n"; - - if (!addCandidate(invNum, cand)) continue; - if (checkCand(invNum)) - { - assignPrioritiesForLearned(); - generalizeArrInvars(sf); - if (checkAllLemmas()) - { - outs () << "Success after " << (i+1) << " iterations\n"; - printSolution(); - return true; - } - } - } - return false; + else im = mk(pre, cand); + if (printLog >= 2 && out) + outs () << " - - - Implication candidate: " << im << "\n"; + return im; } - bool filterUnsat() +// bool synthesizeDisjLemmas(int invNum, Expr rel, Expr cnd, Expr splitter, +// Expr ind, unsigned depth, Expr lastModel = NULL) +// { +// if (printLog >= 2) outs () << " Try finding splitter for " << cnd << "\n"; +// if (dCandNum++ == dAttNum || depth == dDepNum) return true; +// Expr invs = conjoin(sfs[invNum].back().learnedExprs, m_efac); +// +// if (isOpX(cnd)) cnd = replaceArrRangeForIndCheck (invNum, cnd); +// +// vector& cycle = ruleManager.cycles[rel][0]; // todo: extend +// ExprVector& srcVars = ruleManager.chcs[cycle[0]].srcVars; +// ExprVector& dstVars = ruleManager.chcs[cycle.back()].dstVars; +// Expr cndPrime = replaceAll(cnd, srcVars, dstVars); +// Expr cndSsa = mk(cnd, ssas[invNum]); +// Expr cndSsaPr = mk(cndSsa, cndPrime); +// +// ExprVector cur_mbps; +// +// while (true) +// { +// Expr avail = mkNeg(disjoin(cur_mbps, m_efac)); +// Expr fla = mk(splitter, cndSsa); // to weaken MBP further +// +// if (lastModel == NULL) { +// if (isOpX(splitter) && u.isSat(avail, prefs[invNum], cndSsaPr)) { +// fla = mk(prefs[invNum], cndSsaPr); +// } else if (u.isSat(avail, splitter, cndSsaPr)) { +// fla = mk(splitter, cndSsaPr); +// } else if (u.isSat(avail, splitter, cndSsa)) { +// fla = mk(splitter, cndSsa); +// } else break; +// +// lastModel = u.getModel(); +// } +// +// if (lastModel == NULL) break; +// Expr mbp = getMbp(invNum, lastModel); +// if (isOpX(mbp)) break; +// mbp = u.getImplDecomp(mbp, invs); +// mbp = u.getWeakerMBP(mbp, fla, srcVars); +// if (printLog >= 2) outs() << " Found MBP: " << mbp << "\n"; +// +// bool toadd = true; +// for (int j = 0; j < cur_mbps.size(); j++) +// if (u.isSat(cur_mbps[j], mbp)) +// { +// cur_mbps[j] = mk(cur_mbps[j], mbp); +// toadd = false; +// break; +// } +// if (toadd) cur_mbps.push_back(mbp); +// if (isOpX(cnd)) break; // temporary workaround for arrays (z3 might fail in giving models) +// if (dAllMbp) +// lastModel = NULL; +// else +// break; +// } +// +// for (auto mbp : cur_mbps) +// { +// if (!u.isSat(invs, mbp, splitter)) return true; +// +// if (dStrenMbp) +// { +// ExprSet tmp, tmp2; +// getConj(mbp, tmp); +// +// if (u.implies (prefs[invNum], cnd)) mutateHeuristic(prefs[invNum], tmp2); +// tmp2.insert(sfs[invNum].back().learnedExprs.begin(), sfs[invNum].back().learnedExprs.end()); +// +// for (auto m : tmp) +// { +// if (!isOp(m)) continue; +// for (auto t : tmp2) +// { +// if (!isOp(t)) continue; +// Expr t1 = mergeIneqs(t, m); +// if (t1 == NULL) continue; +// t1 = simplifyArithm(t1); +// if (u.implies(mk(t1, ssas[invNum]), replaceAll(t1, srcVars, dstVars))) // && u.isSat(ind, t1)) +// ind = mk(ind, t1); +// } +// } +// } +// +// if (u.isEquiv(mbp, splitter)) { +// candidates[invNum].push_back(mkImplCnd(mk(mbp, ind), cnd)); +// candidates[invNum].push_back(mkImplCnd(mbp, cnd)); +// return true; +// } +// +// Expr candImpl; +// if (isOpX(cnd)) +// { +// Expr splitterArr = mk(splitter, mbp); +// for (auto & q : qvits[invNum]) +// splitterArr = replaceAll(splitterArr, q->iter, q->qv); +// candImpl = mkImplCnd(splitterArr, cnd); +// } +// else +// { +// candImpl = mkImplCnd(mk(splitter, mbp), cnd); //mkImplCnd(mk(mk(splitter, ind), mbp), cnd); +// candidates[invNum].push_back(mkImplCnd(mk(splitter, ind), cnd)); // heuristic to add a candidate with weaker precond +// candidates[invNum].push_back(mkImplCnd(mk(mk(splitter, ind), mbp), cnd)); +// } +// +// if (find(candidates[invNum].begin(), candidates[invNum].end(), candImpl) != candidates[invNum].end()) +// return true; +// candidates[invNum].push_back(candImpl); +// +// // use multiHoudini here to give more chances to array candidates +// auto candidatesTmp = candidates; +// if (multiHoudini(ruleManager.wtoCHCs)) assignPrioritiesForLearned(); +// else candidates = candidatesTmp; +// +// map cands; +// +// if (dAddProp) +// { +// ExprSet s = {mbp, splitter, ind, ssas[invNum], +// mkNeg(replaceAll(mk(mk(splitter, ind), mbp), srcVars, dstVars))}; +// ExprVector vars = dstVars; +// if (isOpX(cnd)) +// { +// s.insert(cnd->last()); +// for (int i = 0; i < cnd->arity()-1; i++) +// vars.push_back(bind::fapp(cnd->arg(i))); +// } +// else +// s.insert(cnd); +// Expr newCand = keepQuantifiers (conjoin(s, m_efac), vars); +// newCand = u.removeITE(replaceAll(newCand, dstVars, srcVars)); +// if (isOpX(cnd)) +// cands[rel].insert(replaceAll(cnd, cnd->last(), newCand)); +// else +// getConj(newCand, cands[rel]); +// } +// +// // Expr nextModel; +// ExprSet qfInvs, candsToDat; //, se; +// if (dAddDat) +// { +//// getArrInds(ssas[invNum], se); +// if (isOpX(cnd)) +// qfInvs.insert(cnd->right()->right()); // only the actual inv without the splitter/mbp +// else +// candsToDat.insert(candImpl); +// for (auto & inv : sfs[invNum].back().learnedExprs) // basically, invs +// if (isOpX(inv)) +// qfInvs.insert(inv->right()->right()); +// else +// candsToDat.insert(inv); +//// for (auto & s : se) +// { +// Expr candToDat = conjoin(qfInvs, m_efac); +// for (auto & q : qvits[invNum]) +// candToDat = replaceAll(candToDat, q->qv, q->iter); // s); +// ExprVector vars2keep; +// for (int i = 0; i < srcVars.size(); i++) +// if (containsOp(srcVars[i])) +// candToDat = replaceAll(candToDat, srcVars[i], dstVars[i]); +// candsToDat.insert(candToDat); +// } +// getDataCandidates(cands, rel, mkNeg(mbp), conjoin(candsToDat, m_efac)); +// } +// +// // postprocess behavioral arrCands +// if (ruleManager.hasArrays[rel]) +// { +// for (auto &a : arrCands[invNum]) +// { +// Expr arrCand = a; +// for (auto &q : qvits[invNum]) +// arrCand = replaceAll(arrCand, q->iter, q->qv); +// cands[rel].insert(sfs[invNum].back().af.getSimplCand(arrCand)); +// } +// arrCands[invNum].clear(); +// } +// +// for (auto & c : cands[rel]) +// { +// if (isOpX(cnd) && !isOpX(c)) continue; +// synthesizeDisjLemmas(invNum, rel, c, mk(splitter, mkNeg(mbp)), ind, depth + 1); +// } +// } +// return true; +// } +//ToDo ilia updated + +// bool synthesize(unsigned maxAttempts, bool doDisj) +// { +// if (printLog >= 3) +// for (auto & a : deferredCandidates) +// for (auto & b : a.second) +// outs () << " Deferred cand for " << a.first << ": " << b << "\n"; +// if (printLog) outs () << "\nSAMPLING\n========\n"; +// +// ExprSet cands; +// for (int i = 0; i < maxAttempts; i++) +// { +// // next cand (to be sampled) +// Expr rel = ruleManager.getNextCycle(); +// int invNum = getVarIndex(rel, decls); +// candidates.clear(); +// SamplFactory& sf = sfs[invNum].back(); +// Expr cand; +// if (deferredCandidates[invNum].empty()) +// cand = sf.getFreshCandidate(i < 25); // try simple array candidates first +// else { +// cand = deferredCandidates[invNum].back(); +// deferredCandidates[invNum].pop_back(); +// } +// if (cand != NULL && isOpX(cand) && isOpX(cand->last())) +// { +// if (!u.isSat(cand->last()->left())) cand = NULL; +// } +// if (cand == NULL) continue; +// if (printLog) outs () << " - - - Sampled cand (#" << i << ") for " << decls[invNum] << ": " << cand << "\n"; +// if (!addCandidate(invNum, cand)) continue; +// +// bool lemma_found = checkCand(invNum); +// if (doDisj && (isOp(cand) || isOpX(cand))) +// { +// dCandNum = 0; +// lemma_found = true; +// synthesizeDisjLemmas(invNum, rel, cand, mk(m_efac), mk(m_efac), 0); +// multiHoudini(ruleManager.wtoCHCs); +// if (printLog) outs () << "\n"; +// } +// if (lemma_found) +// { +// assignPrioritiesForLearned(); +// generalizeArrInvars(sf); +// if (checkAllLemmas()) +// { +// outs () << "Success after " << (i+1) << " iterations " +// << (deferredCandidates[invNum].empty() ? "(+ rnd)" : "") << "\n"; +// printSolution(); +// return true; +// } +// } +// } +// outs() << "unknown\n"; +// return false; +// } +//ToDo ilia updated + +// bool filterUnsat() +// { +// vector worklist; +// for (int i = 0; i < invNumber; i++) +// { +// if (!u.isSat(candidates[i])) +// { +// for (auto & hr : ruleManager.chcs) +// { +// if (hr.dstRelation == decls[i]) worklist.push_back(&hr); +// } +// } +// } +// +// // basically, just checks initiation and immediately removes bad candidates +// multiHoudini(worklist, false); +// +// for (int i = 0; i < invNumber; i++) +// { +// if (!u.isSat(candidates[i])) +// { +// ExprVector cur; +// deque def; +// u.splitUnsatSets(candidates[i], cur, def); +// deferredCandidates[i] = def; +// candidates[i] = cur; +// } +// } +// +// return true; +// } +//ToDo ilia updated + + bool weaken (int invNum, ExprVector& ev, + map& vals, HornRuleExt* hr, SamplFactory& sf, + function cond, bool singleCand) { - vector worklist; - for (int i = 0; i < invNumber; i++) - { - if (!u.isSat(conjoin(candidates[i], m_efac))) + bool weakened = false; + for (auto it = ev.begin(); it != ev.end(); ) { - for (auto & hr : ruleManager.chcs) - { - if (hr.dstRelation == decls[i]) worklist.push_back(&hr); - } - } - } - - // basically, just checks initiation and immediately removes bad candidates - multiHoudini(worklist, false); - - for (int i = 0; i < invNumber; i++) - { - if (!u.isSat(conjoin(candidates[i], m_efac))) - { - ExprVector tmp; - ExprVector stub; // TODO: try greedy search, maybe some lemmas are in stub? - u.splitUnsatSets(candidates[i], tmp, stub); - candidates[i] = tmp; - } - } - - return true; - } - - bool hasQuantifiedCands(map& cands) - { - for (auto & a : cands) - { - for (auto & b : a.second) - { - if (isOpX(b)) return true; - } - } - return false; - } - - bool multiHoudini(vector worklist, bool recur = true) - { - if (!anyProgress(worklist)) return false; - map candidatesTmp = candidates; - bool res1 = true; - for (auto &h: worklist) - { - HornRuleExt& hr = *h; - - if (hr.isQuery) continue; - - if (!checkCHC(hr, candidatesTmp)) - { - bool res2 = true; - int ind = getVarIndex(hr.dstRelation, decls); - Expr model = getModel(hr.dstVars); - if (model == NULL || hasQuantifiedCands(candidatesTmp)) - { - // something went wrong with z3. do aggressive weakening (TODO: try bruteforce): - candidatesTmp[ind].clear(); - res2 = false; - } - else - { - ExprVector& ev = candidatesTmp[ind]; - ExprVector invVars; - for (auto & a : invarVars[ind]) invVars.push_back(a.second); - SamplFactory& sf = sfs[ind].back(); - - for (auto it = ev.begin(); it != ev.end(); ) + if (cond(*it, vals[*it])) { - Expr repl = *it; - for (auto & v : invarVars[ind]) repl = replaceAll(repl, v.second, hr.dstVars[v.first]); - - if (!u.isSat(model, repl)) - { - if (hr.isFact) + weakened = true; + if (printLog >= 3) outs () << " Failed cand for " << hr->dstRelation << ": " << *it << "\n"; + if (hr->isFact && !containsOp(*it) && !containsOp(*it) && !findNonlin(*it)) + { + Expr failedCand = normalizeDisj(*it, invarVarsShort[invNum]); + if (statsInitialized) + { + Sampl& s = sf.exprToSampl(failedCand); + sf.assignPrioritiesForFailed(); + } + else tmpFailed[invNum].insert(failedCand); + } + if (boot) { - Expr failedCand = normalizeDisj(*it, invVars); -// outs () << "failed cand for " << *hr.dstRelation << ": " << *failedCand << "\n"; - Sampl& s = sf.exprToSampl(failedCand); - sf.assignPrioritiesForFailed(); + if (isOpX(*it)) deferredCandidates[invNum].push_back(*it); // prioritize equalities + else deferredCandidates[invNum].push_front(*it); } it = ev.erase(it); - res2 = false; - } - else - { + if (singleCand) break; + } + else + { ++it; - } } - } - - if (recur && !res2) - { - res1 = false; - break; - } } - } - candidates = candidatesTmp; - if (!recur) return false; - if (res1) return anyProgress(worklist); - else return multiHoudini(worklist); + return weakened; } +// bool multiHoudini (vector worklist, bool recur = true) +// { +// if (printLog >= 3) outs () << "MultiHoudini\n"; +// if (printLog >= 4) printCands(); +// +// bool res1 = true; +// for (auto &hr: worklist) +// { +// if (printLog >= 3) outs () << " Doing CHC check (" << hr->srcRelation << " -> " +// << hr->dstRelation << ")\n"; +// if (hr->isQuery) continue; +// tribool b = checkCHC(*hr, candidates); +// if (b || indeterminate(b)) +// { +// if (printLog >= 3) outs () << " CHC check failed\n"; +// int invNum = getVarIndex(hr->dstRelation, decls); +// SamplFactory& sf = sfs[invNum].back(); +// +// map vals; +// for (auto & cand : candidates[invNum]) +// { +// Expr repl = cand; +// for (auto & v : invarVars[invNum]) +// repl = replaceAll(repl, v.second, hr->dstVars[v.first]); +// vals[cand] = u.eval(repl); +// } +// +// // first try to remove candidates immediately by their models (i.e., vals) +// // then, invalidate (one-by-one) all candidates for which Z3 failed to find a model +// +// for (int i = 0; i < 3 /*weakeningPriorities.size() */; i++) +// if (weaken (invNum, candidates[invNum], vals, hr, sf, (*weakeningPriorities[i]), i > 0)) +// break; +// +// if (recur) +// { +// res1 = false; +// break; +// } +// } +// else if (printLog >= 3) outs () << " CHC check succeeded\n"; +// } +// if (!recur) return false; +// if (res1) return anyProgress(worklist); +// else return multiHoudini(worklist); +// } +//ToDo ilia updated + bool findInvVar(int invNum, Expr expr, ExprVector& ve) { - ExprSet vars; - filter (expr, bind::IsConst (), inserter(vars, vars.begin())); + ExprSet vars; + filter (expr, bind::IsConst (), inserter(vars, vars.begin())); - for (auto & v : vars) - { - bool found = false; - for (auto & w : invarVars[invNum]) + for (auto & v : vars) { - if (w.second == v) - { - found = true; - break; - } - } - if (!found) - { - if (find (ve.begin(), ve.end(), v) == ve.end()) - return false; + bool found = false; + for (auto & w : invarVars[invNum]) + { + if (w.second == v) + { + found = true; + break; + } + } + if (!found) + { + if (find (ve.begin(), ve.end(), v) == ve.end()) + return false; + } } - } - return true; + return true; } - bool toCont(int invNum, Expr expr, ExprVector& ve) + void generateMbps(int invNum, Expr ssa, ExprVector& srcVars, ExprVector& dstVars, ExprSet& cands) { - ExprSet vars; - filter (expr, bind::IsConst (), inserter(vars, vars.begin())); - bool toCont = true; - for (auto & expr : vars) - { - if (!findInvVar(invNum, expr, ve)) - { - toCont = false; - break; - } - } - return toCont; - } + ExprVector vars2keep, prjcts1, prjcts2; + bool hasArray = false; + for (int i = 0; i < srcVars.size(); i++) + if (containsOp(srcVars[i])) + { + hasArray = true; + vars2keep.push_back(dstVars[i]); + } + else + vars2keep.push_back(srcVars[i]); - // heuristic to instantiate a quantified candidate for some particular instances - void createGroundInstances (ExprSet& vals, ExprSet& res, Expr qcand, Expr iterVar) - { - ExprSet se; - filter (qcand, bind::IsSelect (), inserter(se, se.begin())); + if (mbpEqs != 0) + u.flatten(ssa, prjcts1, false, vars2keep, keepQuantifiersRepl); + if (mbpEqs != 1) + u.flatten(ssa, prjcts2, true, vars2keep, keepQuantifiersRepl); - for (auto & a : se) - { - if (iterVar == a->right()) + prjcts1.insert(prjcts1.end(), prjcts2.begin(), prjcts2.end()); + for (auto p : prjcts1) { - for (auto & v : vals) - { - res.insert(replaceAll(qcand, iterVar, v)); - } + if (hasArray) + { + getConj(replaceAll(p, dstVars, srcVars), cands); + p = ufo::eliminateQuantifiers(p, dstVars); + p = weakenForVars(p, dstVars); + } + else + { + p = weakenForVars(p, dstVars); + // addAllStrengthenings(p, cands); // GF: to debug + getConj(p, cands); + } + p = simplifyArithm(p); + mbps[invNum].insert(p); + if (printLog >= 2) outs() << "Generated MBP: " << p << "\n"; } - } } - // heuristic to replace weird variables in candidates - bool prepareArrCand (Expr& replCand, ExprMap& replLog, ExprVector& av, - ExprSet& tmpRanges, ExprSet& concreteVals, int ind, int i = 0) + void addAllStrengthenings(Expr p, ExprSet& cands) { - if (av.empty()) return false; - - ExprSet se; - filter (replCand, bind::IsSelect (), inserter(se, se.begin())); - - for (auto & a : se) - { - if (isOpX(a->right()) || (!findInvVar(ind, a->right(), av))) + getConj(p, cands); + ExprSet d; + getDisj(p, d); + for (auto & a : d) { - if (isOpX(a->right())) - { - tmpRanges.insert(mk(av[i], a->right())); - concreteVals.insert(a->right()); - } - // TODO: try other combinations of replacements - if (i >= av.size()) return false; - replLog[a->right()] = av[i]; - replCand = replaceAll(replCand, a->right(), replLog[a->right()]); - - return prepareArrCand (replCand, replLog, av, tmpRanges, concreteVals, ind, i + 1); + ExprSet tmp = d; + tmp.erase(a); + addAllStrengthenings(disjoin(tmp, m_efac), cands); } - } - return true; } - // adapted from doSeedMining - void getSeeds(Expr invRel, map& cands, bool analizeCode = true) + Expr getMbp(int invNum, Expr lastModel) { - int ind = getVarIndex(invRel, decls); - SamplFactory& sf = sfs[ind].back(); - ExprSet candsFromCode; - bool analizedExtras = false; - bool isFalse = false; - - // for Arrays - ExprSet tmpArrAccess; - ExprSet tmpArrSelects; - ExprSet tmpArrCands; - ExprVector tmpArrAccessVars; - for (auto &hr : ruleManager.chcs) - { - if (hr.dstRelation != invRel && hr.srcRelation != invRel) continue; - - SeedMiner sm (hr, invRel, invarVars[ind], sf.lf.nonlinVars); - if (analizeCode) sm.analizeCode(); - else sm.candidates.clear(); - if (!analizedExtras && hr.srcRelation == invRel) - { - sm.analizeExtras (cands[invRel]); - analizedExtras = true; - } - - for (auto &cand : sm.candidates) candsFromCode.insert(cand); + ExprSet cur_mbps; + for (auto & m : mbps[invNum]) + if (u.isSat(m, lastModel)) cur_mbps.insert(m); + return disjoin(cur_mbps, m_efac); + } - // for arrays - if (analizeCode && ruleManager.hasArrays) + // overloaded, called from `prepareSeeds` +// void doSeedMining(Expr invRel, ExprSet& cands, set& progConsts, set& intCoefs) +// { +// int invNum = getVarIndex(invRel, decls); +// +// ExprVector& srcVars = ruleManager.invVars[invRel]; +// ExprVector& dstVars = ruleManager.invVarsPrime[invRel]; +// +// Expr ssa = ssas[invNum]; +// if (ssa != NULL) +// { +// ssa = rewriteSelectStore(ssa); +// retrieveDeltas(ssa, srcVars, dstVars, cands); +// generateMbps(invNum, ssa, srcVars, dstVars, cands); // collect and add mbps as candidates +// } +// +// SamplFactory& sf = sfs[invNum].back(); +// ExprSet candsFromCode, tmpArrAccess, tmpArrSelects, tmpArrCands, tmpArrFuns; +// bool analyzedExtras = false, isFalse = false, hasArrays = false; +// +// for (auto &hr : ruleManager.chcs) +// { +// if (hr.dstRelation != invRel && hr.srcRelation != invRel) continue; +// SeedMiner sm (hr, invRel, invarVars[invNum], sf.lf.nonlinVars); +// +// // limit only to queries: +// if (hr.isQuery) sm.analyzeCode(); +// if (!analyzedExtras && hr.srcRelation == invRel) +// { +// sm.analyzeExtras (cands); +// analyzedExtras = true; +// } +// for (auto &cand : sm.candidates) candsFromCode.insert(cand); +// for (auto &a : sm.intConsts) progConsts.insert(a); +// for (auto &a : sm.intCoefs) intCoefs.insert(a); +// // for arrays +// if (ruleManager.hasArrays[invRel]) +// { +// tmpArrCands.insert(sm.arrCands.begin(), sm.arrCands.end()); +// tmpArrSelects.insert(sm.arrSelects.begin(), sm.arrSelects.end()); +// tmpArrFuns.insert(sm.arrFs.begin(), sm.arrFs.end()); +// hasArrays = true; +// } +// } +// +// if (hasArrays) +// { +// for (int qNum = 0; qNum < qvits[invNum].size(); qNum++) +// { +// auto & q = qvits[invNum][qNum]; +// Expr pre = q->precond; +// Expr qVar = bind::intConst(mkTerm("_FH_arr_it_" + lexical_cast(qNum), m_efac)); +// q->qv = qVar; +// arrAccessVars[invNum].push_back(qVar); +// +// assert (isOpX(pre)); // TODO: support more +// +// ExprVector invAndIterVarsAll = invarVarsShort[invNum]; +// invAndIterVarsAll.push_back(qVar); +// +// Expr fla = (q->grows) ? mk(qVar, pre->right()) : +// mk(qVar, pre->right()); +// +// ExprSet tmp; +// getConj(postconds[invNum], tmp); +// for (auto it = tmp.begin(); it != tmp.end(); ) +// if (contains(*it, q->iter)) ++it; else it = tmp.erase(it); +// +// q->range = normalizeDisj(mk(fla, +// replaceAll(conjoin(tmp, m_efac), q->iter, qVar)), invAndIterVarsAll); +// arrIterRanges[invNum].insert(q->range); +// +// // repair behavioral arrCands +// if (!arrCands[invNum].empty()) +// { +// ExprSet repCands; +// for (auto & a : arrCands[invNum]) +// repCands.insert(replaceAll(a, q->iter, qVar)); +// arrCands[invNum] = repCands; +// } +// } +// +// // TODO: revisit handling of nested loops +// /* +// auto nested = ruleManager.getNestedRel(invRel); +// if (nested != NULL) +// { +// int invNumTo = getVarIndex(nested->dstRelation, decls); +// // only one variable for now. TBD: find if we need more +// Expr qVar2 = bind::intConst(mkTerm ("_FH_nst_it", m_efac)); +// arrAccessVars[invNum].push_back(qVar2); +// +// Expr range = conjoin (arrIterRanges[invNumTo], m_efac); +// ExprSet quantified; +// for (int i = 0; i < nested->dstVars.size(); i++) +// { +// range = replaceAll(range, invarVars[invNumTo][i], nested->dstVars[i]); +// quantified.insert(nested->dstVars[i]); +// } +// +// // naive propagation of ranges +// ExprSet cnjs; +// getConj(nested->body, cnjs); +// for (auto & a : cnjs) +// { +// for (auto & b : quantified) +// { +// if (isOpX(a) && a->right() == b) +// { +// range = replaceAll(range, b, a->left()); +// } +// else if (isOpX(a) && a->left() == b) +// { +// range = replaceAll(range, b, a->right()); +// } +// } +// } +// arrIterRanges[invNum].insert( +// replaceAll(replaceAll(range, *arrAccessVars[invNumTo].begin(), qVar2), +// q->iter, *arrAccessVars[invNum].begin())); +// } +// */ +// +// // process all quantified seeds +// for (auto & a : tmpArrCands) +// { +// if (u.isTrue(a) || u.isFalse(a)) continue; +// Expr replCand = replaceAllRev(a, sf.lf.nonlinVars); +// ExprSet allVars; +// getExtraVars(replCand, srcVars, allVars); +// if (allVars.size() < 2 && +// !u.isTrue(replCand) && !u.isFalse(replCand)) +// { +// if (allVars.size() == 0) +// { +// candsFromCode.insert(replCand); +// for (auto & q : qvits[invNum]) +// replCand = replaceAll(replCand, q->iter, q->qv); +// arrCands[invNum].insert(replCand); +// } +// else +// for (auto & q : qvits[invNum]) +// if (typeOf(*allVars.begin()) == typeOf(q->qv)) +// arrCands[invNum].insert(replaceAll(replCand, *allVars.begin(), q->qv)); +// } +// } +// +// // trick for tiling benchs +// ExprSet afs; +// for (auto & a : tmpArrFuns) +// { +// ExprVector vars; +// filter (a, bind::IsConst(), std::inserter (vars, vars.begin ())); +// if (vars.size() != 1 || *vars.begin() == a) continue; +// afs.insert(replaceAll(a, *vars.begin(), arrAccessVars[invNum][0])); +// } +// +//// for (auto & s : afs) +//// { +//// for (auto & qcand : arrCands[invNum]) +//// { +//// outs () << " qcand: " << *qcand << "\n"; +//// ExprSet se; +//// filter (qcand, bind::IsSelect (), inserter(se, se.begin())); +//// for (auto & arrsel : se) +//// { +//// Expr qcandTmp = replaceAll(qcand, arrsel->right(), s); +//// arrCands[invNum].insert(qcandTmp); +//// outs () << " prepro: " << *qcandTmp << "\n"; +//// } +//// } +//// } +// } +// // process all quantifier-free seeds +// +// cands = candsFromCode; +// +// for (auto & cand : candsFromCode) +// { +// Expr replCand = replaceAllRev(cand, sf.lf.nonlinVars); +// addCandidate(invNum, replCand); +// } +// } +//ToDo ilia updated + +// bool anyProgress(vector worklist) +// { +// for (int i = 0; i < invNumber; i++) +// // subsumption check +// for (auto & hr : worklist) +// if (hr->srcRelation == decls[i] || hr->dstRelation == decls[i]) +// if (candidates[i].size() > 0) +// if (!u.implies (conjoin(sfs[i].back().learnedExprs, m_efac), +// conjoin(candidates[i], m_efac))) +// return true; +// return false; +// } +//ToDo ilia updated + + Expr getDataCandidates(map& cands, Expr srcRel = NULL, + Expr splitter = NULL, Expr invs = NULL){ + Expr model; // for splitters +#ifdef HAVE_ARMADILLO + if (printLog && splitter == NULL) outs () << "\nDATA LEARNING\n=============\n"; + if (splitter == NULL) assert(invs == NULL && srcRel == NULL); + map poly; + DataLearner dl(ruleManager, m_z3, printLog); + if (splitter == NULL) + { + // run at the beginning, compute data once + dl.computeData(); + for (auto & dcl : decls) { - tmpArrCands.insert(sm.arrCands.begin(), sm.arrCands.end()); - tmpArrSelects.insert(sm.arrSelects.begin(), sm.arrSelects.end()); + int invNum = getVarIndex(dcl, decls); + dl.computePolynomials(dcl, poly[dcl]); } } - - if (ruleManager.hasArrays) + else { - if (preconds[ind] != NULL) - { - Expr qVar = bind::intConst(mkTerm ("_FH_arr_it", m_efac)); - tmpArrAccessVars.push_back(qVar); - - assert (isOpX(preconds[ind])); // TODO: support more - - ExprVector invAndIterVarsAll; - for (auto & a : invarVars[ind]) invAndIterVarsAll.push_back(a.second); - invAndIterVarsAll.push_back(qVar); - - Expr fla; - if (preconds[ind]->right() == iterators[ind]) - fla = (iterGrows[ind]) ? mk(qVar, preconds[ind]->left()) : - mk(qVar, preconds[ind]->left()); - else if (preconds[ind]->left() == iterators[ind]) - fla = (iterGrows[ind]) ? mk(qVar, preconds[ind]->right()) : - mk(qVar, preconds[ind]->right()); - - arrIterRanges[ind].insert(normalizeDisj(fla, invAndIterVarsAll)); - arrIterRanges[ind].insert(normalizeDisj( - replaceAll(postconds[ind], iterators[ind], qVar), invAndIterVarsAll)); - } - - auto nested = ruleManager.getNestedRel(invRel); - if (nested != NULL) - { - int invNumTo = getVarIndex(nested->dstRelation, decls); - // only one variable for now. TBD: find if we need more - Expr qVar2 = bind::intConst(mkTerm ("_FH_nst_it", m_efac)); - tmpArrAccessVars.push_back(qVar2); - - Expr range = conjoin (arrIterRanges[invNumTo], m_efac); - ExprSet quantified; - for (int i = 0; i < nested->dstVars.size(); i++) - { - range = replaceAll(range, invarVars[invNumTo][i], nested->dstVars[i]); - quantified.insert(nested->dstVars[i]); - } - - // naive propagation of ranges - ExprSet cnjs; - getConj(nested->body, cnjs); - for (auto & a : cnjs) + // run at `synthesizeDisjLemmas` + for (auto & dcl : decls) { + int invNum = getVarIndex(dcl, decls); + if (srcRel == dcl) { - for (auto & b : quantified) - { - if (isOpX(a) && a->right() == b) - { - range = replaceAll(range, b, a->left()); - } - else if (isOpX(a) && a->left() == b) - { - range = replaceAll(range, b, a->right()); - } - } - } - arrIterRanges[ind].insert( - replaceAll(replaceAll(range, *arrAccessVars[invNumTo].begin(), qVar2), - iterators[ind], tmpArrAccessVars[0])); - } - - arrAccessVars[ind].insert(tmpArrAccessVars.begin(), tmpArrAccessVars.end()); - - // process all quantified seeds - for (auto & a : tmpArrCands) - { - Expr replCand = a; - for (int i = 0; i < 3; i++) - for (auto & v : sf.lf.nonlinVars) - replCand = replaceAll(replCand, v.second, v.first); - if (!u.isEquiv(replCand, mk(m_efac)) && !u.isEquiv(replCand, mk(m_efac))) - { - ExprMap replLog; - ExprSet tmpRanges; - ExprSet concreteVals; - if ( prepareArrCand (replCand, replLog, tmpArrAccessVars, tmpRanges, concreteVals, ind) && - (contains(replCand, iterators[ind]) || !emptyIntersect(replCand, tmpArrAccessVars))) - { - // very cheeky heuristic: sometimes restrict, but sometimes extend the range - // depending on existing constants - if (u.isSat(conjoin(tmpRanges, m_efac), conjoin(arrIterRanges[ind], m_efac))) - { - arrIterRanges[ind].insert(tmpRanges.begin(), tmpRanges.end()); - } - else - { - for (auto & a : tmpArrCands) - createGroundInstances (concreteVals, candsFromCode, a, iterators[ind]); - } - - // at this point it should not happen, but sometimes it does. To debug. - if (!findInvVar(ind, replCand, tmpArrAccessVars)) continue; - - for (auto iter : tmpArrAccessVars) - arrCands[ind].insert(replaceAll(replCand, iterators[ind], iter)); - } - else candsFromCode.insert(a); - } - } - - // trick for tiling benchs - ExprSet sels; - for (auto & sel : tmpArrSelects) - { - if (!toCont(ind, sel, tmpArrAccessVars)) continue; - for (auto iter : tmpArrAccessVars) - sels.insert(replaceAll(sel, iterators[ind], iter)); - } - - for (auto & qcand : arrCands[ind]) - { - ExprSet se; - filter (qcand, bind::IsSelect (), inserter(se, se.begin())); - for (auto & s : se) { - for (auto & arrsel : sels) { - if (se.find(arrsel) != se.end()) continue; - Expr qcandTmp = replaceAll(qcand, s, arrsel); - arrCands[ind].insert(qcandTmp); - } + dl.computeData(srcRel, splitter, invs); + dl.computePolynomials(dcl, poly[dcl]); + break; } } } - // process all quantifier-free seeds - for (auto & cand : candsFromCode) - { - checked.clear(); - Expr replCand = cand; - for (int i = 0; i < 3; i++) - for (auto & v : sf.lf.nonlinVars) - replCand = replaceAll(replCand, v.second, v.first); - - // sanity check for replCand: - if (toCont (ind, replCand, tmpArrAccessVars) && addCandidate(ind, replCand)) - propagate (ind, replCand, true); - } - } - - void refreshCands(map& cands) - { - cands.clear(); - for (auto & a : candidates) + // mutations after all + for (auto & p : poly) { - cands[decls[a.first]].insert(a.second.begin(), a.second.end()); - } - } - - bool anyProgress(vector worklist) - { - for (int i = 0; i < invNumber; i++) - { - // simple check if there is a non-empty candidate - for (auto & hr : worklist) + if (ruleManager.hasArrays[p.first]) // heuristic to remove cands irrelevant to counters and arrays { - if (hr->srcRelation == decls[i] || hr->dstRelation == decls[i]) - { - if (candidates[i].size() > 0) - { - return true; - } - } - } - } - return false; - } - -#ifdef HAVE_ARMADILLO - void getDataCandidates(map& cands, const vector & behaviorfiles){ - int fileIndex = 0; - for (auto & dcl : decls) { - DataLearner dl(ruleManager, m_z3); - dl.initialize(dcl, true /*multipleLoops*/); - string filename(""); - if (fileIndex < behaviorfiles.size()) { - filename = behaviorfiles[fileIndex]; - fileIndex++; + ExprSet its; + int invNum = getVarIndex(p.first, decls); + for (auto q : qvits[invNum]) its.insert(q->iter); + for (auto it = p.second.begin(); it != p.second.end();) + if (emptyIntersect(simplifyArithm(*it), its)) + it = p.second.erase(it); + else + ++it; } - if (!dl.computeData(filename)) continue; - (void)dl.computePolynomials(cands[dcl]); + mutateHeuristicEq(p.second, cands[p.first], p.first, (splitter == NULL)); } - } +#else + if (printLog) outs() << "Skipping learning from data as required library (armadillo) not found\n"; #endif + return model; + } - bool bootstrap() + void mutateHeuristicEq(ExprSet& src, ExprSet& dst, Expr dcl, bool toProp) { - filterUnsat(); - - if (multiHoudini(ruleManager.wtoCHCs)) - { - assignPrioritiesForLearned(); - if (checkAllLemmas()) - { - outs () << "Success after bootstrapping\n"; - printSolution(); - return true; - } - } - - // try array candidates one-by-one (adapted from `synthesize`) - // TODO: batching - if (ruleManager.hasArrays) - { - for (auto & dcl: ruleManager.wtoDecls) - { - int i = getVarIndex(dcl, decls); - SamplFactory& sf = sfs[i].back(); - for (auto & c : arrCands[i]) - { - checked.clear(); - Expr cand = sf.af.getSimplCand(c); -// outs () << " - - - bootstrapped cand for " << i << ": " << *cand << "\n"; + int invNum = getVarIndex(dcl, decls); + ExprSet src2; + map substs; + Expr (*ops[])(Expr, Expr) = {mk, mk}; // operators used in the mutations - if (!addCandidate(i, cand)) continue; - if (checkCand(i)) + for (auto a1 = src.begin(); a1 != src.end(); ++a1) + if (isNumericEq(*a1)) { - assignPrioritiesForLearned(); - generalizeArrInvars(sf); - if (checkAllLemmas()) - { - outs () << "Success after bootstrapping\n"; - printSolution(); - return true; - } - } - } - } + for (auto a2 = std::next(a1); a2 != src.end(); ++a2) // create various combinations + if (isNumericEq(*a2)) + { + const ExprVector m1[] = {{(*a1)->left(), (*a2)->left()}, {(*a1)->left(), (*a2)->right()}}; + const ExprVector m2[] = {{(*a1)->right(), (*a2)->right()}, {(*a1)->right(), (*a2)->left()}}; + for (int i : {0, 1}) + for (Expr (*op) (Expr, Expr) : ops) + src2.insert(simplifyArithm(normalize( + mk((*op)(m1[i][0], m1[i][1]), (*op)(m2[i][0], m2[i][1]))))); + } - // second round of bootstrapping (to be removed after Houdini supports arrays) + // before pushing them to the cand set, we do some small mutations to get rid of specific consts + Expr a = simplifyArithm(normalize(*a1)); + if (isOpX(a) && isIntConst(a->left()) && + isNumericConst(a->right()) && lexical_cast(a->right()) != "0") + substs[a->right()].push_back(a->left()); + src2.insert(a); + } - candidates.clear(); - ExprVector empt; - for (auto &hr: ruleManager.chcs) - { - if (hr.isQuery) - { - int invNum = getVarIndex(hr.srcRelation, decls); - ExprSet cnjs; - getConj(hr.body, cnjs); - for (auto & a : cnjs) + bool printedAny = false; + if (printLog >= 2) outs () << "Mutated candidates:\n"; + for (auto a : src2) + if (!u.isFalse(a) && !u.isTrue(a)) { - if (isOpX(a) && findInvVar(invNum, a, empt)) - { - candidates[invNum].push_back(a->left()); - break; - } - } - break; - } - } - if (multiHoudini(ruleManager.wtoCHCs)) - { - assignPrioritiesForLearned(); - if (checkAllLemmas()) - { - outs () << "Success after bootstrapping\n"; - printSolution(); - return true; - } - } - } + if (printLog >= 2) { outs () << " " << a << "\n"; printedAny = true; } - return false; - } + if (containsOp(a)) + arrCands[invNum].insert(a); + else + dst.insert(a); - void updateGrammars() - { - // convert candidates to curCandidates and run the method from RndLearner - for (int ind = 0; ind < invNumber; ind++) - { - if (candidates[ind].size() == 0) curCandidates[ind] = mk(m_efac); - else curCandidates[ind] = conjoin(candidates[ind], m_efac); - } - updateRels(); - updCount++; + if (isNumericConst(a->right())) + { + cpp_int i1 = lexical_cast(a->right()); + for (auto b : substs) + { + cpp_int i2 = lexical_cast(b.first); + + if (i1 % i2 == 0 && i1/i2 != 0) + for (auto c : b.second) + { + Expr e = simplifyArithm(normalize(mk(a->left(), mk(mkMPZ(i1/i2, m_efac), c)))); + if (!u.isSat(mk(e))) continue; + if (containsOp(e)) + arrCands[invNum].insert(e); + else + dst.insert(e); + + if (printLog >= 2) { outs () << " " << e << "\n"; printedAny = true; } + } + } + } + } + if (printLog >= 2 && !printedAny) outs () << " none\n"; } - bool checkAllLemmas() +// bool bootstrap(bool doDisj) +// { +// if (printLog) outs () << "\nBOOTSTRAPPING\n=============\n"; +// filterUnsat(); +// if (multiHoudini(ruleManager.wtoCHCs)) +// { +// assignPrioritiesForLearned(); +// if (checkAllLemmas()) +// { +// outs () << "Success after bootstrapping\n"; +// printSolution(); +// return true; +// } +// } +// +// if (!doDisj) simplifyLemmas(); +// boot = false; +// +// // try array candidates one-by-one (adapted from `synthesize`) +// // TODO: batching +// bool arrs = false; +// for (auto & dcl: ruleManager.loopheads) +// { +// if (ruleManager.hasArrays[dcl]) +// { +// arrs = true; +// int invNum = getVarIndex(dcl, decls); +// SamplFactory& sf = sfs[invNum].back(); +// for (auto it = arrCands[invNum].begin(); it != arrCands[invNum].end(); +// it = arrCands[invNum].erase(it)) +// { +// Expr c = *it; +// if (u.isTrue(c) || u.isFalse(c)) continue; +// +// Expr cand = sf.af.getSimplCand(c); +// if (printLog) outs () << "- - - Bootstrapped cand for " << dcl << ": " << cand << "\n"; +// +// auto candidatesTmp = candidates[invNum]; // save for later +// if (!addCandidate(invNum, cand)) continue; +// if (checkCand(invNum)) +// { +// assignPrioritiesForLearned(); +// generalizeArrInvars(sf); +// if (checkAllLemmas()) +// { +// outs () << "Success after bootstrapping\n"; +// printSolution(); +// return true; +// } +// } +// else +// { +// if (isOpX(c)) // prioritize equality cands +// deferredCandidates[invNum].push_back(cand); +// else +// deferredCandidates[invNum].push_front(cand); +// if (candidates[invNum].empty()) candidates[invNum] = candidatesTmp; +// } +// } +// } +// } +// // second round of bootstrapping (to be removed after Houdini supports arrays) +// +// if (arrs) +// { +// candidates.clear(); +// ExprVector empt; +// for (auto &hr: ruleManager.chcs) +// { +// if (hr.isQuery) +// { +// int invNum = getVarIndex(hr.srcRelation, decls); +// ExprSet cnjs; +// getConj(hr.body, cnjs); +// for (auto & a : cnjs) +// { +// if (isOpX(a) && findInvVar(invNum, a, empt)) +// { +// candidates[invNum].push_back(a->left()); +// break; +// } +// } +// break; +// } +// } +// if (multiHoudini(ruleManager.wtoCHCs)) +// { +// assignPrioritiesForLearned(); +// if (checkAllLemmas()) +// { +// outs () << "Success after bootstrapping\n"; +// printSolution(); +// return true; +// } +// } +// } +// +// outs () << "Incomplete "; +// printSolution(false); +// return false; +// } +//ToDo ilia updated + +// bool checkAllLemmas() +// { +// candidates.clear(); +// for (int i = ruleManager.wtoCHCs.size() - 1; i >= 0; i--) +// { +// auto & hr = *ruleManager.wtoCHCs[i]; +// tribool b = checkCHC(hr, candidates, true); +// if (b) { +// if (!hr.isQuery) +// { +// if (printLog) outs() << "WARNING: Something went wrong" << +// (ruleManager.hasArrays[hr.srcRelation] || ruleManager.hasArrays[hr.dstRelation] ? +// " (possibly, due to quantifiers)" : "") << +// ". Restarting...\n"; +// +// for (int i = 0; i < decls.size(); i++) +// { +// SamplFactory& sf = sfs[i].back(); +// for (auto & l : sf.learnedExprs) candidates[i].push_back(l); +// sf.learnedExprs.clear(); +// } +// multiHoudini(ruleManager.wtoCHCs); +// assignPrioritiesForLearned(); +// +// return false; +// } +// else +// return false; // TODO: use this fact somehow +// } +// else if (indeterminate(b)) return false; +// } +// return true; +// } +//ToDo ilia updated + +// tribool checkCHC (HornRuleExt& hr, map& annotations, bool checkAll = false) +// { +// int srcNum = getVarIndex(hr.srcRelation, decls); +// int dstNum = getVarIndex(hr.dstRelation, decls); +// +// if (!hr.isQuery) // shortcuts +// { +// if (dstNum < 0) +// { +// if (printLog >= 3) outs () << " Trivially true since " << hr.dstRelation << " is not initialized\n"; +// return false; +// } +// if (checkAll && annotations[dstNum].empty()) +// return false; +// } +// +// ExprSet exprs = {hr.body}; +// +// if (!hr.isFact) +// { +// ExprSet lms = sfs[srcNum].back().learnedExprs; +// for (auto & a : annotations[srcNum]) lms.insert(a); +// for (auto a : lms) +// { +// for (auto & v : invarVars[srcNum]) a = replaceAll(a, v.second, hr.srcVars[v.first]); +// exprs.insert(a); +// } +// } +// +// if (!hr.isQuery) +// { +// ExprSet lms = sfs[dstNum].back().learnedExprs; +// ExprSet negged; +// for (auto & a : annotations[dstNum]) lms.insert(a); +// for (auto a : lms) +// { +// for (auto & v : invarVars[dstNum]) a = replaceAll(a, v.second, hr.dstVars[v.first]); +// negged.insert(mkNeg(a)); +// } +// exprs.insert(disjoin(negged, m_efac)); +// } +// return u.isSat(exprs); +// } +//ToDo ilia updated + + // it used to be called initArrayStuff, but now it does more stuff than just for arrays +// void initializeAux(Expr rel, BndExpl& bnd, int cycleNum, Expr pref) +// { +// vector& cycle = ruleManager.cycles[rel][cycleNum]; +// HornRuleExt* hr = &ruleManager.chcs[cycle[0]]; +// assert(rel == hr->srcRelation); +// ExprVector& srcVars = hr->srcVars; +// ExprVector& dstVars = ruleManager.chcs[cycle.back()].dstVars; +// assert(srcVars.size() == dstVars.size()); +// +// int invNum = getVarIndex(rel, decls); +// +// prefs[invNum] = pref; +// Expr e = bnd.toExpr(cycle); +// ssas[invNum] = replaceAll(e, bnd.bindVars.back(), dstVars); +// return; // currently skip arrays +// +// if (qvits[invNum].size() > 0) return; +// +// ExprSet ssa; +// if (!containsOp(ssas[invNum])) return; // todo: support +// +// getConj(ssas[invNum], ssa); +// +// filter (ssas[invNum], bind::IsConst (), inserter(qvars[invNum], qvars[invNum].begin())); +// postconds[invNum] = ruleManager.getPrecondition(hr); +// +// ExprSet itersCur; +// for (int i = 0; i < dstVars.size(); i++) +// { +// Expr a = srcVars[i]; +// Expr b = dstVars[i]; +// if (!bind::isIntConst(a) /*|| !contains(postconds[invNum], a)*/) continue; +// +// bool implDecr = (bool)u.implies(ssas[invNum], mk(a, b)); +// bool implGrow = !implDecr && (bool)u.implies(ssas[invNum], mk(a, b)); +// if (implDecr || implGrow) +// { +// ArrAccessIter* ar = new ArrAccessIter(); +// ar->iter = a; +// ar->grows = implGrow; +// qvits[invNum].push_back(ar); +// ruleManager.iterators[rel].push_back(i); +// itersCur.insert(a); +// } +// } +// +// ssa.clear(); +// getConj(pref, ssa); +// AeValSolver ae(mk(m_efac), pref, itersCur); +// ae.solve(); +// Expr skol = u.simplifyITE(ae.getSimpleSkolemFunction(), ae.getValidSubset()); +// if (!isOpX(skol)) +// for (auto & q : qvits[invNum]) +// q->precond = mk(q->iter, projectITE (skol, q->iter)); +// if (!qvits[invNum].empty()) ruleManager.hasArrays[rel] = true; +// +// if (printLog >= 2) +// { +// outs () << "In total, found " << qvits[invNum].size() << " iterator" +// << (qvits[invNum].size() == 1 ? "" : "s") +// << " for " << *rel << ":\n"; +// for (auto & q : qvits[invNum]) +// outs () << " " << *q->iter +// << " " << (q->grows ? "increases" : "decreases") +// << " init value: " << *q->precond << "\n"; +// } +// } +//ToDo ilia updated + + void getInvs(ExprMap& invs) { - candidates.clear(); - for (int i = ruleManager.wtoCHCs.size() - 1; i >= 0; i--) - { - auto & hr = *ruleManager.wtoCHCs[i]; - if (!checkCHC(hr, candidates)) { - if (!hr.isQuery) - assert(0); // only queries are allowed to fail - else - return false; // TODO: use this fact somehow + for (int i = 0; i < decls.size(); i++) + { + Expr rel = decls[i]; + SamplFactory& sf = sfs[i].back(); + ExprSet lms = sf.learnedExprs; + invs[rel] = conjoin(lms, m_efac); } - } - return true; } - bool checkCHC (HornRuleExt& hr, map& annotations) + void printCands() { - m_smt_solver.reset(); - m_smt_solver.assertExpr (hr.body); - - if (!hr.isFact) - { - int ind = getVarIndex(hr.srcRelation, decls); - SamplFactory& sf = sfs[ind].back(); - ExprSet lms = sf.learnedExprs; - for (auto & a : annotations[ind]) lms.insert(a); - for (auto a : lms) - { - for (auto & v : invarVars[ind]) a = replaceAll(a, v.second, hr.srcVars[v.first]); - if (isOpX(a)) - { - ExprVector varz; - for (int i = 0; i < a->arity() - 1; i++) + for (auto & c : candidates) + if (c.second.size() > 0) { - varz.push_back(bind::fapp(a->arg(i))); + outs() << " Candidates for " << *decls[c.first] << ":\n"; + pprint(c.second, 4); } - m_smt_solver.assertForallExpr(varz, a->last()); - } - else - { - m_smt_solver.assertExpr(a); - } - } - } - - if (!hr.isQuery) - { - int ind = getVarIndex(hr.dstRelation, decls); - SamplFactory& sf = sfs[ind].back(); - ExprSet lms = sf.learnedExprs; - ExprSet negged; - for (auto & a : annotations[ind]) lms.insert(a); - for (auto a : lms) - { - for (auto & v : invarVars[ind]) a = replaceAll(a, v.second, hr.dstVars[v.first]); - negged.insert(mkNeg(a)); - } - m_smt_solver.assertExpr(disjoin(negged, m_efac)); - } - return !m_smt_solver.solve (); } +}; - void initArrayStuff(BndExpl& bnd, int cycleNum, Expr pref) - { - vector& cycle = ruleManager.cycles[cycleNum]; - int invNum = getVarIndex(ruleManager.chcs[cycle[0]].srcRelation, decls); - if (iterators[invNum] != NULL) return; // GF: TODO more sanity checks (if needed) - - ExprSet ssa; - ssas[invNum] = bnd.toExpr(cycle); - getConj(ssas[invNum], ssa); - - filter (ssas[invNum], bind::IsConst (), inserter(qvars[invNum], qvars[invNum].begin())); - postconds[invNum] = ruleManager.getPrecondition(&ruleManager.chcs[cycle[0]]); - - for (int i = 0; i < bnd.bindVars.back().size(); i++) - { - Expr a = ruleManager.chcs[cycle[0]].srcVars[i]; - Expr b = bnd.bindVars.back()[i]; - if (!bind::isIntConst(a) /*|| !contains(postconds[invNum], a)*/) continue; - - // TODO: pick one if there are multiple available - if (u.implies(ssas[invNum], mk(a, b))) - { - iterators[invNum] = a; - iterGrows[invNum] = false; - break; - } - else if (u.implies(ssas[invNum], mk(a, b))) - { - iterators[invNum] = a; - iterGrows[invNum] = true; - } - } +inline void testgen(string smt, set& nums, unsigned maxAttempts, unsigned to, + bool freqs, bool aggp, bool enableDataLearning, bool doElim, + bool doDisj, int doProp, bool dAllMbp, bool dAddProp, bool dAddDat, + bool dStrenMbp, bool toSkip, int invMode, int lookahead, + bool lb, bool lmax, bool prio, int debug) +{ + ExprFactory m_efac; + EZ3 z3(m_efac); + ExprMap invs; + CHCs ruleManager(m_efac, z3); - ssa.clear(); - getConj(pref, ssa); - for (auto & a : ssa) - { - if (contains(a, iterators[invNum])) - { - preconds[invNum] = a; - break; - } - } - } - void printSolution(bool simplify = true) + if (invMode == 0) { - for (int i = 0; i < decls.size(); i++) - { - Expr rel = decls[i]; - SamplFactory& sf = sfs[i].back(); - ExprSet lms = sf.learnedExprs; - outs () << "(define-fun " << *rel << " ("; - for (auto & b : ruleManager.invVars[rel]) - outs () << "(" << *b << " " << u.varType(b) << ")"; - outs () << ") Bool\n "; - if (simplify) u.removeRedundantConjuncts(lms); - Expr res = simplifyArithm(conjoin(lms, m_efac)); - u.print(res); - outs () << ")\n"; - } + ruleManager.parse(smt); + ruleManager.print(); +// ruleManager.reParse(lb, lmax); } - }; +// else +// { +// if (lb) +// { +// outs () << "LBTG currently does not support invariants\n"; +// return; +// } +// ruleManager.parse(smt, 2); // used to be doElim +// if (ruleManager.cycles.size() > 0) +// { +// BndExpl bnd(ruleManager, false); +// +// RndLearnerV3 ds(m_efac, z3, ruleManager, to, freqs, aggp, 1, dAllMbp, dAddProp, dAddDat, dStrenMbp, debug); +// +// map cands; +// for (auto & a : ruleManager.cycles) +// { +// Expr dcl = a.first; +// for (int i = 0; i < a.second.size(); i++) +// { +// if (ds.initializedDecl(dcl)) continue; +// ds.initializeDecl(dcl); +// if (invMode == 1) continue; +// Expr pref = bnd.compactPrefix(dcl); +// ExprSet tmp; +// getConj(pref, tmp); +// for (auto & t : tmp) +// if (hasOnlyVars(t, ruleManager.invVars[dcl])) +// cands[dcl].insert(t); +// +// ds.mutateHeuristicEq(cands[dcl], cands[dcl], dcl, true); +// ds.initializeAux(dcl, bnd, i, pref); +// } +// } +// +// if (enableDataLearning) ds.getDataCandidates(cands); +// +// for (auto & dcl: ruleManager.loopheads) +// { +// for (int i = 0; i < doProp; i++) +// for (auto & a : cands[dcl]) ds.propagate(dcl, a, true); +// ds.addCandidates(dcl, cands[dcl]); +// ds.prepareSeeds(dcl, cands[dcl]); +// } +// +// ds.bootstrap(doDisj); +// ds.synthesize(maxAttempts, doDisj); +// ds.getInvs(invs); +// +// ruleManager.propagateInvs(invs); +// ruleManager.reParse(true); +// +// // for sanity check (can be removed): +// { +// outs () << "======== Propagating invariants to all CHCs ======\n"; +// RndLearnerV3 dss(m_efac, z3, ruleManager, to, freqs, aggp, 0, 1, dAddProp, dAddDat, dStrenMbp, 0); +// for (auto& rel: ruleManager.decls) +// { +// dss.initializeDecl(rel->left()); +// ExprSet tmp; +// getConj(invs[rel->left()], tmp); +// dss.addCandidates(rel->left(), tmp); +// } +// dss.bootstrap(doDisj); +// invs.clear(); +// dss.getInvs(invs); +// } +// } +// else +// { +// ruleManager.reParse(); +// } +// } +// +// if (nums.size() > 0) +// { +// LBExpl bnd1(ruleManager, lookahead, prio, false); +// bnd1.initKeys(nums, lb); +// bnd1.setInvs(invs); +// if (lb && lmax) +// bnd1.exploreTracesMaxLb(); +// else if (lb) +// bnd1.exploreTracesLBTG(1, 1000); +// else +// bnd1.exploreTracesTG(1, 1000, toSkip); +// } +} - inline void learnInvariants3(string smt, char * outfile, int maxAttempts, bool freqs, bool aggp, bool enableDataLearning, const vector & behaviorfiles) - { +// GF: not synchronized with the `rnd` branch (yet) +inline void learnInvariants3(string smt, unsigned maxAttempts, unsigned to, bool freqs, bool aggp, + bool enableDataLearning, bool doElim, bool doDisj, int doProp, + bool dAllMbp, bool dAddProp, bool dAddDat, bool dStrenMbp, int debug) +{ ExprFactory m_efac; EZ3 z3(m_efac); +// CHCs ruleManager(m_efac, z3, debug);//ToDo ilia updated CHCs ruleManager(m_efac, z3); +// ruleManager.parse(smt, doElim);//ToDo ilia updated ruleManager.parse(smt); - BndExpl bnd(ruleManager); + BndExpl bnd(ruleManager, debug); +// if (!ruleManager.hasCycles()) +// { +// bnd.exploreTraces(1, ruleManager.chcs.size(), true); +// return; +// }//ToDo ilia updated - if (!ruleManager.hasCycles()) - { - bnd.exploreTraces(1, ruleManager.chcs.size(), true); - return; - } + RndLearnerV3 ds(m_efac, z3, ruleManager, to, freqs, aggp, 0, dAllMbp, dAddProp, dAddDat, dStrenMbp, debug); - RndLearnerV3 ds(m_efac, z3, ruleManager, freqs, aggp); map cands; - for (auto& dcl: ruleManager.decls) ds.initializeDecl(dcl); - - if (enableDataLearning) { -#ifdef HAVE_ARMADILLO - ds.getDataCandidates(cands, behaviorfiles); -#else - outs() << "Skipping learning from data as required library (armadillo) not found\n"; -#endif - } +// for (auto & a : ruleManager.cycles) +// { +// Expr dcl = a.first; +// for (int i = 0; i < a.second.size(); i++) +// { +// if (ds.initializedDecl(dcl)) continue; +// ds.initializeDecl(dcl); +// Expr pref = bnd.compactPrefix(dcl); +// ExprSet tmp; +// getConj(pref, tmp); +// for (auto & t : tmp) +// if (hasOnlyVars(t, ruleManager.invVars[dcl])) +// cands[dcl].insert(t); +// +// ds.mutateHeuristicEq(cands[dcl], cands[dcl], dcl, true); +// ds.initializeAux(dcl, bnd, i, pref); +// } +// } +//ToDo ilia updated + + if (enableDataLearning) ds.getDataCandidates(cands); + +// for (auto & dcl: ruleManager.loopheads) +// { +// for (int i = 0; i < doProp; i++) +// for (auto & a : cands[dcl]) +// ds.propagate(dcl, a, true); +// ds.addCandidates(dcl, cands[dcl]); +// ds.prepareSeeds(dcl, cands[dcl]); +// }//ToDo ilia updated + +// if (ds.bootstrap(doDisj)) return; +//ToDo ilia updated - for (int i = 0; i < ruleManager.cycles.size(); i++) - { - Expr pref = bnd.compactPrefix(i); - cands[ruleManager.chcs[ruleManager.cycles[i][0]].srcRelation].insert(pref); - if (ruleManager.hasArrays) ds.initArrayStuff(bnd, i, pref); - } - - for (auto& dcl: ruleManager.wtoDecls) ds.getSeeds(dcl, cands); - ds.refreshCands(cands); - for (auto& dcl: ruleManager.decls) ds.doSeedMining(dcl->arg(0), cands[dcl->arg(0)], false); ds.calculateStatistics(); - if (ds.bootstrap()) return; +// ds.deferredPriorities();//ToDo ilia updated std::srand(std::time(0)); - ds.synthesize(maxAttempts, outfile); - } +// ds.synthesize(maxAttempts, doDisj);//ToDo ilia updated + +} } #endif diff --git a/include/sampl/ArrCom.hpp b/include/sampl/ArrCom.hpp index e66585739..d6e40d912 100644 --- a/include/sampl/ArrCom.hpp +++ b/include/sampl/ArrCom.hpp @@ -10,127 +10,135 @@ using namespace boost; namespace ufo { - class ARRfactory - { + class ARRfactory + { private: - ExprFactory &m_efac; - ExprVector vars; - ExprVector forall_args; - LAfactory preFac; - LAfactory postFac; - Expr pre; - density postOrAritiesDensity; + ExprFactory &m_efac; + ExprVector vars; + ExprVector forall_args; + LAfactory preFac; + LAfactory postFac; + Expr pre; + density postOrAritiesDensity; public: - ARRfactory(ExprFactory &_efac, bool _false) : - m_efac(_efac), preFac(_efac, false), postFac(_efac, false) {}; - - void addVar(Expr var) - { - vars.push_back(var); // currently, not used. TODO: at least some sanity checks later - } + ARRfactory(ExprFactory &_efac, bool _false) : + m_efac(_efac), preFac(_efac, false), postFac(_efac, false) {}; - void initializeLAfactory (LAfactory& lf, ExprSet& cands, ExprVector& intVars, int eps) - { - set arrConsts; - set arrCoefs; - for (auto & a : cands) - { - if (getLinCombCoefs(a, arrCoefs)) + void addVar(Expr var) { - getLinCombConsts(a, arrConsts); + vars.push_back(var); // currently, not used. TODO: at least some sanity checks later } - } - for (auto & a : intVars) lf.addVar(a); - for (auto & a : arrConsts) lf.addConst(a); - for (auto & a : arrCoefs) lf.addIntCoef(a); - - lf.initialize(); - set orArities; - vector laDisjs; - for (auto & a : cands) - { - LAdisj b; - lf.exprToLAdisj(a, b); - laDisjs.push_back(b); - int ar = b.arity; - postOrAritiesDensity[ar] ++; - orArities.insert(ar); - } - - lf.initDensities(orArities); - for (auto & b : laDisjs) lf.calculateStatistics(b, b.arity, 0, 0); - for (auto & ar : orArities) lf.stabilizeDensities(ar, eps, 1); - } - - void initialize(ExprVector& intVars, ExprSet& arrCands, ExprSet& arrAccessVars, ExprSet& arrRange) - { - for (auto & it : arrAccessVars) - { - if (bind::isIntConst(it)) + + void initializeLAfactory (LAfactory& lf, ExprSet& cands, ExprVector& intVars, int eps) { - postFac.addVar(it); - preFac.addVar(it); - if (find(intVars.begin(), intVars.end(), it) == intVars.end()) - forall_args.push_back(it->left()); + for (auto & a : intVars) lf.addVar(a); + set arrConsts; + set arrCoefs; + ExprSet normCands; + for (auto a : cands) + { + a = normalizeDisj(a, lf.getVars()); + if (getLinCombCoefs(a, arrCoefs) && getLinCombConsts(a, arrConsts)) + normCands.insert(a); + } + for (auto & a : arrConsts) lf.addConst(lexical_cast(a)); + for (auto & a : arrCoefs) lf.addIntCoef(lexical_cast(a)); + + lf.initialize(); + set orArities; + vector laDisjs; + for (auto & a : normCands) + { + LAdisj b; + lf.exprToLAdisj(a, b); + laDisjs.push_back(b); + int ar = b.arity; + postOrAritiesDensity[ar] ++; + orArities.insert(ar); + } + + lf.initDensities(orArities); + for (auto & b : laDisjs) lf.calculateStatistics(b, b.arity, 0, 0); + for (auto & ar : orArities) lf.stabilizeDensities(ar, eps, 1); } - } - pre = conjoin(arrRange, m_efac); + void initialize(ExprVector& intVars, ExprSet& arrCands, ExprVector& arrAccessVars, ExprSet& arrRange) + { + for (auto & it : arrAccessVars) + { + if (bind::isIntConst(it)) + { + postFac.addVar(it); + preFac.addVar(it); + if (find(intVars.begin(), intVars.end(), it) == intVars.end()) + forall_args.push_back(it->left()); + } + } + + ExprSet se; + for (auto & a : arrCands) + { + filter (a, bind::IsSelect (), inserter(se, se.begin())); + } + + for (auto & b : se) postFac.addVar(b); + + pre = conjoin(arrRange, m_efac); + + initializeLAfactory(preFac, arrRange, intVars, 1); + initializeLAfactory(postFac, arrCands, intVars, 0); + } - initializeLAfactory(preFac, arrRange, intVars, 1); - initializeLAfactory(postFac, arrCands, intVars, 0); - } + Expr guessTerm () + { + LAdisj expr1; + LAdisj expr2; + // GF: fixed guesses, currently + // TODO: 1) pruning based on dependencies of pre and expr1, + // 2) pruning based on dependencies of expr1 and expr2, + // 3) conjunctive and disjunctive expr1 and expr2 + int arity = chooseByWeight(postOrAritiesDensity); + if (preFac.guessTerm(expr1, 1, 1) && postFac.guessTerm(expr2, arity, arity)) + { + ExprVector args = forall_args; + args.push_back(mk(mk(pre, preFac.toExpr(expr1)), postFac.toExpr(expr2))); + Expr forallExpr = mknary (args); + return forallExpr; + } + else + { + return NULL; + } + } - Expr guessTerm () - { - LAdisj expr1; - LAdisj expr2; - // GF: fixed guesses, currently - // TODO: 1) pruning based on dependencies of pre and expr1, - // 2) pruning based on dependencies of expr1 and expr2, - // 3) conjunctive and disjunctive expr1 and expr2 - int arity = chooseByWeight(postOrAritiesDensity); - if (preFac.guessTerm(expr1, 1) && postFac.guessTerm(expr2, arity)) - { - ExprVector args = forall_args; - args.push_back(mk(mk(pre, preFac.toExpr(expr1)), postFac.toExpr(expr2))); - Expr forallExpr = mknary (args); - return forallExpr; - } - else - { - return NULL; - } - } - - // used for bootstrapping where `post` is one of the `arrCands` - Expr getSimplCand(Expr post) - { - ExprVector args = forall_args; - args.push_back(mk(pre, post)); - return mknary (args); - } + // used for bootstrapping where `post` is one of the `arrCands` + Expr getSimplCand(Expr post) + { + ExprVector args = forall_args; + args.push_back(mk(pre, post)); + return mknary (args); + } - Expr guessSimplTerm () - { - LAdisj expr2; - int arity = chooseByWeight(postOrAritiesDensity); - if (postFac.guessTerm(expr2, arity)) - { - ExprVector args = forall_args; - args.push_back(mk(pre, postFac.toExpr(expr2))); - Expr forallExpr = mknary (args); - return forallExpr; - } - else - { - return NULL; - } - } - }; + Expr guessSimplTerm () + { + LAdisj expr2; + int arity = chooseByWeight(postOrAritiesDensity); + if (postFac.guessTerm(expr2, arity, arity)) + { + ExprVector args = forall_args; + args.push_back(mk(pre, postFac.toExpr(expr2))); + Expr forallExpr = mknary (args); + return forallExpr; + } + else + { + return NULL; + } + } + }; } diff --git a/include/sampl/LinCom.hpp b/include/sampl/LinCom.hpp index 89e2e1ba9..a1af62586 100644 --- a/include/sampl/LinCom.hpp +++ b/include/sampl/LinCom.hpp @@ -15,1321 +15,1284 @@ using namespace boost; namespace ufo { - typedef vector> lincoms; + typedef vector> lincoms; - class LAterm - { + class LAterm + { public: - std::vector vcs; + std::vector vcs; - int arity; - int cmpop; - int intconst; + int arity; + int cmpop; + int intconst; - LAterm(){} + LAterm(){} - int getSize() - { - return 3 + 2 * arity; - } + int getSize() + { + return 3 + 2 * arity; + } - void normalizePlus() - { - int j; - map varsM; - - for (j = 0; j < vcs.size(); j += 2) - { - varsM[vcs[j]] = vcs[j+1]; - } - - // fill again - j = 0; - - for (map::iterator it=varsM.begin(); it!=varsM.end(); ++it) - { - vcs[j++] = it->first; - vcs[j++] = it->second; - } - } - }; + void normalizePlus() + { + int j; + map varsM; + + for (j = 0; j < vcs.size(); j += 2) + { + varsM[vcs[j]] = vcs[j+1]; + } - inline bool operator== (LAterm& a, LAterm& b) - { - if (a.arity != b.arity) return false; - if (a.cmpop != b.cmpop) return false; - if (a.intconst != b.intconst) return false; + // fill again + j = 0; - for (int i = 0; i < a.vcs.size(); i++) + for (map::iterator it=varsM.begin(); it!=varsM.end(); ++it) + { + vcs[j++] = it->first; + vcs[j++] = it->second; + } + } + }; + + inline bool operator== (LAterm& a, LAterm& b) { - if (a.vcs[i] != b.vcs[i]) return false; + if (a.arity != b.arity) return false; + if (a.cmpop != b.cmpop) return false; + if (a.intconst != b.intconst) return false; + + for (int i = 0; i < a.vcs.size(); i++) + { + if (a.vcs[i] != b.vcs[i]) return false; + } + return true; } - return true; - } - class LAdisj - { + class LAdisj + { private: - lincoms id; + lincoms id; public: - int arity = 0; - vector dstate; // i.e., disjunctive-state - - LAdisj(){} + int arity = 0; + vector dstate; // i.e., disjunctive-state - bool empty() - { - return arity == 0; - } + LAdisj(){} - LAterm& newDisj() - { - arity++; - dstate.push_back(LAterm()); - return dstate.back(); - } - - void addDisj(LAterm& s) - { - arity++; - dstate.push_back(s); - } + bool empty() + { + return arity == 0; + } - void printLAdisj() - { - outs () << "Cur LAdisj (OR arity = " << arity << "): \n"; - for (int i = 0; i < arity; i++) - { - outs() << " disj #" << i << ":\n"; - LAterm& s = dstate[i]; + LAterm& newDisj() + { + arity++; + dstate.push_back(LAterm()); + return dstate.back(); + } - outs() << " ** arity +: " << s.arity << "\n"; - outs() << " ** comparison op: " << s.cmpop << "\n"; - outs() << " ** const: " << s.intconst << "\n"; + void addDisj(LAterm& s) + { + arity++; + dstate.push_back(s); + } - for (int j = 0; j < s.vcs.size(); ) + void printLAdisj() { - outs() << " ** var: " << s.vcs[j++] << "\n"; - outs() << " ** coef: " << s.vcs[j++] << "\n"; + outs () << "Cur LAdisj (OR arity = " << arity << "): \n"; + for (int i = 0; i < arity; i++) + { + outs() << " disj #" << i << ":\n"; + LAterm& s = dstate[i]; + + outs() << " ** arity +: " << s.arity << "\n"; + outs() << " ** comparison op: " << s.cmpop << "\n"; + outs() << " ** const: " << s.intconst << "\n"; + + for (int j = 0; j < s.vcs.size(); ) + { + outs() << " ** var: " << s.vcs[j++] << "\n"; + outs() << " ** coef: " << s.vcs[j++] << "\n"; + } + } + outs() << "\n"; } - } - outs() << "\n"; - } - void normalizePlus() - { - for (int i = 0; i < dstate.size(); i++) - { - LAterm& s = dstate[i]; - s.normalizePlus(); - } - } + void normalizePlus() + { + for (int i = 0; i < dstate.size(); i++) + { + LAterm& s = dstate[i]; + s.normalizePlus(); + } + } - lincoms& getId() - { - if (id.size() == 0) - { - for (int i = 0; i < dstate.size(); i++) + lincoms& getId() { - id.push_back(dstate[i].vcs); + if (id.size() == 0) + { + for (int i = 0; i < dstate.size(); i++) + { + id.push_back(dstate[i].vcs); + } + } + + return id; } - } - return id; - } + void clear() + { + arity = 0; + dstate.clear(); + id.clear(); + } + }; - void clear() - { - arity = 0; - dstate.clear(); - id.clear(); - } - }; - - inline void clone(LAterm& s, LAterm& t) - { - t.intconst = s.intconst; - t.arity = s.arity; - t.cmpop = s.cmpop; - for (int i = 0; i < s.vcs.size(); i++) + inline void clone(LAterm& s, LAterm& t) { - t.vcs.push_back(s.vcs[i]); + t.intconst = s.intconst; + t.arity = s.arity; + t.cmpop = s.cmpop; + for (int i = 0; i < s.vcs.size(); i++) + { + t.vcs.push_back(s.vcs[i]); + } } - } - inline void clone(LAdisj& s, LAdisj& t) - { - for (int i = 0; i < s.arity; i++) + inline void clone(LAdisj& s, LAdisj& t) { - t.addDisj(s.dstate[i]); + for (int i = 0; i < s.arity; i++) + { + t.addDisj(s.dstate[i]); + } } - } - inline void dropDisj(LAdisj& s, LAdisj& t, int ind) - { - assert (s.arity > 1); - for (int i = 0; i < s.arity; i++) + inline void dropDisj(LAdisj& s, LAdisj& t, int ind) { - if (i != ind) t.addDisj(s.dstate[i]); + assert (s.arity > 1); + for (int i = 0; i < s.arity; i++) + { + if (i != ind) t.addDisj(s.dstate[i]); + } } - } - inline int getVarIndex(int var, vector& vec) - { - int i = 0; - for (int e: vec) + class LAfactory { - if (var == e) return i; - i++; - } - return -1; - } - - class LAfactory - { private: - ExprFactory &m_efac; - ExprVector vars; + ExprFactory &m_efac; + ExprVector vars; - vector varInds; - vector intCoefs; - vector intConsts; + vector varInds; + vector intCoefs; + vector intConsts; - ExprVector intCoefsE; // symmetric vectors with Expressions - ExprVector intConstsE; - ExprVector cmpOps; + ExprVector intCoefsE; // symmetric vectors with Expressions + ExprVector intConstsE; + ExprVector cmpOps; - Expr auxVar1; - Expr auxVar2; + Expr auxVar1; + Expr auxVar2; - int indexGT; - int indexGE; + int indexGT; + int indexGE; - ExprSet nonlinVarsSet; + ExprSet nonlinVarsSet; public: - ExprMap nonlinVars; + ExprMap nonlinVars; - // set of fields related to guessing: + // set of fields related to guessing: - int prVarsDistrRange; - set orArities; - map plusAritiesDensity; - map intConstDensity; - map cmpOpDensity; - map> varDensity; - map> coefDensity; - vector>> varCombinations; + int prVarsDistrRange; + set orArities; + map plusAritiesDensity; + map intConstDensity; + map cmpOpDensity; + map> varDensity; + map> coefDensity; + vector>> varCombinations; - map> ineqPriors; - map> visited; - bool aggressivepruning; + map> ineqPriors; + map> visited; + bool aggressivepruning; - LAfactory(ExprFactory &_efac, bool _aggressivepruning) : - m_efac(_efac), aggressivepruning(_aggressivepruning){}; + LAfactory(ExprFactory &_efac, bool _aggressivepruning) : + m_efac(_efac), aggressivepruning(_aggressivepruning){}; - void addVar(Expr var) - { - vars.push_back(var); - } + void addVar(Expr var) + { + vars.push_back(var); + } - void addConst(int c) - { - intConsts.push_back(c); - } + void addConst(cpp_int c) + { + intConsts.push_back(c); + } - void addIntCoef(int coef) - { - intCoefs.push_back(coef); - } + void addIntCoef(cpp_int coef) + { + intCoefs.push_back(coef); + } - void initialize() // should be called after addVar, addConst, and addIntCoef - { + void initialize() // should be called after addVar, addConst, and addIntCoef + { // assert (intCoefs.size() > 0); // assert (intConsts.size() > 0); // assert (vars.size() > 0); - prVarsDistrRange = 2 * intConsts.size(); + prVarsDistrRange = 2 * intConsts.size(); - // auxiliary variables for inequations: - auxVar1 = bind::intVar(mkTerm("aux_deephorn_1", m_efac)); - auxVar2 = bind::intVar(mkTerm("aux_deephorn_2", m_efac)); + // auxiliary variables for inequations: + auxVar1 = bind::intVar(mkTerm("aux_deephorn_1", m_efac)); + auxVar2 = bind::intVar(mkTerm("aux_deephorn_2", m_efac)); - for (int i = 0; i < vars.size(); i++) varInds.push_back(i); + for (int i = 0; i < vars.size(); i++) varInds.push_back(i); - // two comparison operators (> and >=), so indexGT < indexGE - cmpOps.push_back(mk (auxVar1, auxVar2)); - indexGT = cmpOps.size() - 1; + // two comparison operators (> and >=), so indexGT < indexGE + cmpOps.push_back(mk (auxVar1, auxVar2)); + indexGT = cmpOps.size() - 1; - cmpOps.push_back(mk (auxVar1, auxVar2)); - indexGE = cmpOps.size() - 1; + cmpOps.push_back(mk (auxVar1, auxVar2)); + indexGE = cmpOps.size() - 1; // // finally, map values to expressions - for (auto a : intCoefs) intCoefsE.push_back(mkTerm (mpz_class (a), m_efac)); // assemble expressions - for (auto a : intConsts) intConstsE.push_back(mkTerm (mpz_class (a), m_efac)); // - - for (auto &a : nonlinVars) nonlinVarsSet.insert(a.second); - } - - vector& getConsts() - { - return intConsts; - } - - ExprVector& getVars() - { - return vars; - } - - int getVar(int ind) - { - return varInds[ind]; - } + for (auto &a : intCoefs) intCoefsE.push_back(mkMPZ(a, m_efac)); // assemble expressions + for (auto &a : intConsts) intConstsE.push_back(mkMPZ(a, m_efac)); // - int getIndexGT() - { - return indexGT; - } - - int getIndexGE() - { - return indexGE; - } - - int switchCmpOp(int ind) - { - // recall that there are two ops: >=, > - assert (cmpOps.size() == 2); - - return (ind == 0) ? 1 : 0; - } - - int getIntCoef(int i) - { - return intCoefs[i]; - } - - int getIntCoefsSize() - { - return intCoefs.size(); - } - - int getCmpOpsSize() - { - return cmpOps.size(); - } - - Expr getAtom(Expr templ, Expr var1, Expr var2) - { - Expr res = templ; - res = replaceAll(res, auxVar1, var1); - res = replaceAll(res, auxVar2, var2); - return res; - } + for (auto &a : nonlinVars) nonlinVarsSet.insert(a.second); + } - Expr assembleLinComb(LAterm& s) - { - ExprVector apps; + vector& getConsts() + { + return intConsts; + } - for (int i = 0; i < s.vcs.size(); i = i + 2) - { - Expr var = vars [ s.vcs[i] ]; - Expr coef = intCoefsE [ s.vcs[i + 1] ]; - apps.push_back(mk(coef, var)); - } + ExprVector& getVars() + { + return vars; + } - if (s.arity == 1) return apps[0]; + int getVar(int ind) + { + return varInds[ind]; + } - return mknary (apps); - } + int getIndexGT() + { + return indexGT; + } - Expr toExpr (LAterm& s, bool replaceNonlin=true) - { - Expr templ = cmpOps [ s.cmpop ]; - Expr ic = intConstsE [ s.intconst ]; - Expr lc = assembleLinComb(s); - Expr ineq = getAtom(templ, lc, ic); - - if (replaceNonlin && nonlinVarsSet.size() > 0) - { - while (!emptyIntersect(ineq, nonlinVarsSet)) // replace cascadically + int getIndexGE() { - for (auto &a : nonlinVars) ineq = replaceAll(ineq, a.second, a.first); + return indexGE; } - } - return ineq; - } + int switchCmpOp(int ind) + { + // recall that there are two ops: >=, > + assert (cmpOps.size() == 2); - Expr toExpr (LAdisj& curCandCode) - { - int ar = curCandCode.arity; - - ExprSet dsj; - for (int i = 0; i < ar; i++) - { - dsj.insert(toExpr (curCandCode.dstate[i])); - } - return disjoin(dsj, m_efac); - } + return (ind == 0) ? 1 : 0; + } - void exprToLAdisj(Expr ex, LAdisj& sample) - { - if (isOpX(ex)) - { - for (auto it = ex->args_begin (), end = ex->args_end (); it != end; ++it) - exprToLAdisj(*it, sample); - } - else if (isOpX(ex) || isOpX(ex)) - { - LAterm s; - Expr lhs = ex->left(); - ExprVector all; - if (isOpX(lhs)) + cpp_int getIntCoef(int i) { - for (auto it = lhs->args_begin (), end = lhs->args_end (); it != end; ++it) - { - all.push_back(*it); - } + return intCoefs[i]; } - else + + int getIntCoefsSize() { - all.push_back(lhs); + return intCoefs.size(); } - Expr aux = reBuildCmp(ex, auxVar1, auxVar2); - - s.arity = all.size(); - s.cmpop = getVarIndex(aux, cmpOps); - s.intconst = getVarIndex(lexical_cast(ex->right()), intConsts); + int getCmpOpsSize() + { + return cmpOps.size(); + } - if (s.intconst == -1 || s.cmpop == -1) return; + Expr getAtom(Expr templ, Expr var1, Expr var2) + { + Expr res = templ; + res = replaceAll(res, auxVar1, var1); + res = replaceAll(res, auxVar2, var2); + return res; + } - for (auto &e : all) + Expr assembleLinComb(LAterm& s) { - Expr curVar; - int curCoef; + ExprVector apps; - if (isOpX(e)) - { - if (isNumericConst(e->left())) - { - curVar = e->right(); - curCoef = lexical_cast(e->left()); - } - else + for (int i = 0; i < s.vcs.size(); i = i + 2) { - curVar = e->left(); - curCoef = lexical_cast(e->right()); + Expr var = vars [ s.vcs[i] ]; + Expr coef = intCoefsE [ s.vcs[i + 1] ]; + apps.push_back(mk(coef, var)); } - } - else if (isOpX(e)) - { - curVar = e->left(); - curCoef = -1; - } - else - { - curVar = e; - curCoef = 1; - } - - int varind = getVarIndex(curVar, vars); - int coefind = getVarIndex(curCoef, intCoefs); - - if (varind == -1 || coefind == -1) return; - - s.vcs.push_back(varind); - s.vcs.push_back(coefind); + return mkplus (apps, m_efac); } - for(int v : s.vcs) if (v < 0) return; - - if (s.vcs.size() != 2*(s.arity)) return; - - addDisjFilter(s, sample); - } - } - - int equalCoefs(LAterm& s) - { - int pat = intCoefs[ s.vcs[1] ]; - for (int j = 3; j < s.vcs.size(); j = j+2) - if (pat != intCoefs[ s.vcs[j] ]) - return 0; - - return pat; - } + Expr toExpr (LAterm& s, bool replaceNonlin=true) + { + Expr templ = cmpOps [ s.cmpop ]; + Expr ic = intConstsE [ s.intconst ]; + Expr lc = assembleLinComb(s); + Expr ineq = getAtom(templ, lc, ic); - void invertTerm(LAterm& s, LAterm& t) - { - clone(s, t); - for (int i = 1; i < s.vcs.size(); i = i+2) - { - int coef = intCoefs[ s.vcs[i] ]; - int invcoef = getVarIndex(-coef, intCoefs); - assert(invcoef != -1); - - t.vcs[i] = invcoef; - } - - int iconst = intConsts[ s.intconst ]; - int invconst = getVarIndex(-iconst, intConsts); - assert(invconst != -1); - - t.intconst = invconst; - t.cmpop = switchCmpOp(s.cmpop); - } + if (replaceNonlin && nonlinVarsSet.size() > 0) + { + while (!emptyIntersect(ineq, nonlinVarsSet)) // replace cascadically + { + for (auto &a : nonlinVars) ineq = replaceAll(ineq, a.second, a.first); + } + } - void invertDisj(LAdisj& s, LAdisj& t, int ind) - { - for (int i = 0; i < s.arity; i++) - { - if (i != ind) - { - t.addDisj(s.dstate[i]); - } - else - { - invertTerm(s.dstate[i], t.newDisj()); + return ineq; } - } - } - bool mergeDisj(LAdisj& s1, LAdisj& s2, LAdisj& t) - { - for (int i = 0; i < s1.arity; i++) - { - t.addDisj(s1.dstate[i]); - } - for (int i = 0; i < s2.arity; i++) - { - for (int j = 0; j < s1.arity; j++) + Expr toExpr (LAdisj& curCandCode) { - if (equivLinCom(s2.dstate[i], s1.dstate[j])) - return false; - } - t.addDisj(s2.dstate[i]); - } - return true; - } + int ar = curCandCode.arity; - bool equivLinCom(LAterm& a, LAterm& b) - { - // decide equivalence gradually: + ExprSet dsj; + for (int i = 0; i < ar; i++) + { + dsj.insert(toExpr (curCandCode.dstate[i])); + } + return disjoin(dsj, m_efac); + } - if (a.arity != b.arity) return false; + void exprToLAdisj(Expr ex, LAdisj& sample) + { + if (isOpX(ex)) + { + for (auto it = ex->args_begin (), end = ex->args_end (); it != end; ++it) + exprToLAdisj(*it, sample); + } + else if (isOpX(ex) || isOpX(ex)) + { + LAterm s; + if (!isNumericConst(ex->right())) return; - // check equivalence of vars - for (int i = 0; i < a.vcs.size(); i = i + 2) - { - if (a.vcs[i] != b.vcs[i]) return false; - } + ExprVector all; + getAddTerm (ex->left(), all); + Expr aux = reBuildCmp(ex, auxVar1, auxVar2); - if (a.vcs.size() == 2) return (a.vcs[1] == b.vcs[1]); + s.arity = all.size(); + s.cmpop = getVarIndex(aux, cmpOps); + s.intconst = getVarIndex(lexical_cast(ex->right()), intConsts); - // finally, coefficients - float c1 = (float)intCoefs[a.vcs[1]] / (float)intCoefs[b.vcs[1]]; + if (s.intconst == -1 || s.cmpop == -1) return; - if (c1 < 0) return false; + for (auto &e : all) + { + Expr curVar = NULL; + cpp_int curCoef; - for (int i = 3; i < a.vcs.size(); i = i + 2) - { - float c2 = (float)intCoefs[a.vcs[i]] / (float)intCoefs[b.vcs[i]]; - if (c2 < 0) return false; + ExprVector ops; + getMultOps (e, ops); + for (auto & o : ops) + { + if (isNumericConst(o)) curCoef = lexical_cast(o); + else if (curVar != NULL) return; + else curVar = o; + } - if (fabs(c1 - c2) > 0.0001 ) return false; // hardcode here - } + int varind = getVarIndex(curVar, vars); + int coefind = getVarIndex(curCoef, intCoefs); - return true; - } + if (varind == -1 || coefind == -1) return; - // very approximate result as for equivLinCom (used in the aggressive mode) - bool approxRedund(LAterm& a, LAterm& b) - { - // decide equivalence gradually: + s.vcs.push_back(varind); + s.vcs.push_back(coefind); - if (a.arity != b.arity) return false; + } - // check equivalence of vars - for (int i = 0; i < a.vcs.size(); i = i + 2) - { - if (a.vcs[i] != b.vcs[i]) return false; - } + for(int v : s.vcs) if (v < 0) return; - for (int i = 1; i < a.vcs.size(); i = i + 2) - { - if (intCoefs[a.vcs[i]] >= 0 != intCoefs[b.vcs[i]] >= 0) return false; - } + if (s.vcs.size() != 2*(s.arity)) return; + addDisjFilter(s, sample); + } + } - return true; - } + cpp_int equalCoefs(LAterm& s) + { + cpp_int pat = intCoefs[ s.vcs[1] ]; + for (int j = 3; j < s.vcs.size(); j = j+2) + if (pat != intCoefs[ s.vcs[j] ]) + return 0; - // identifies some logical implications, e.g., x + 2y > 0 is stronger than x + 2y >= 10 - // false means "we don't know" - bool stronger(LAterm& s, LAterm& t) - { - if (s.vcs.size() != t.vcs.size()) return false; + return pat; + } - for (int i = 0; i < s.vcs.size(); i++) - { - if (s.vcs[i] != t.vcs[i]) return false; - } + void invertTerm(LAterm& s, LAterm& t) + { + clone(s, t); + for (int i = 1; i < s.vcs.size(); i = i+2) + { + auto coef = intCoefs[ s.vcs[i] ]; + int invcoef = getVarIndex(-coef, intCoefs); + assert(invcoef != -1); - // Ax > b stronger than Ax >= b - if (s.intconst == t.intconst) - return (s.cmpop <= t.cmpop); // the smaller index the stronger formula + t.vcs[i] = invcoef; + } - // Ax > / >= b stronger than Ax > / >= c iff b > c - return (s.intconst > t.intconst); - } + auto iconst = intConsts[ s.intconst ]; + int invconst = getVarIndex(-iconst, intConsts); + assert(invconst != -1); - // symmetric to stronger - bool weaker(LAterm& s, LAterm& t) - { - if (s.vcs.size() != t.vcs.size()) return false; + t.intconst = invconst; + t.cmpop = switchCmpOp(s.cmpop); + } - for (int i = 0; i < s.vcs.size(); i++) - { - if (s.vcs[i] != t.vcs[i]) return false; - } + void invertDisj(LAdisj& s, LAdisj& t, int ind) + { + for (int i = 0; i < s.arity; i++) + { + if (i != ind) + { + t.addDisj(s.dstate[i]); + } + else + { + invertTerm(s.dstate[i], t.newDisj()); + } + } + } - if (s.intconst == t.intconst) - return (s.cmpop >= t.cmpop); + bool mergeDisj(LAdisj& s1, LAdisj& s2, LAdisj& t) + { + for (int i = 0; i < s1.arity; i++) + { + t.addDisj(s1.dstate[i]); + } + for (int i = 0; i < s2.arity; i++) + { + for (int j = 0; j < s1.arity; j++) + { + if (equivLinCom(s2.dstate[i], s1.dstate[j])) + return false; + } + t.addDisj(s2.dstate[i]); + } + return true; + } - return (s.intconst < t.intconst); - } + bool equivLinCom(LAterm& a, LAterm& b) + { + // decide equivalence gradually: - void getEquivalentFormulas(LAdisj& sample, vector& equivs) - { - equivs.push_back(sample); - lincoms& id = sample.getId(); + if (a.arity != b.arity) return false; - for (int i = 0; i < sample.arity; i++) - { - LAterm& s = sample.dstate[i]; - Expr cmpop = cmpOps[ s.cmpop ]; - int intconst = intConsts [ s.intconst ]; + // check equivalence of vars + for (int i = 0; i < a.vcs.size(); i = i + 2) + { + if (a.vcs[i] != b.vcs[i]) return false; + } - // get the formulas equivalent to this one, and run the same procedure for them: + if (a.vcs.size() == 2) return (a.vcs[1] == b.vcs[1]); - // if (ax + ax > a) then we can replace a by b, c,... of the same sign + // finally, coefficients + float c1 = (float)intCoefs[a.vcs[1]] / (float)intCoefs[b.vcs[1]]; - int coef = equalCoefs(s); + if (c1 < 0) return false; - if (coef != 0 && coef == intconst) - { - for (int j = 0; j < intCoefs.size(); j++) - { - int thisConst = intCoefs[j]; - if (thisConst == coef) continue; - if ((thisConst<0) != (coef<0)) continue; - - int indProg = getVarIndex(thisConst, intConsts); // GF? - if (indProg == -1) continue; - - LAdisj c; - clone(sample, c); - c.dstate[i].intconst = indProg; - for (int k = 0; k < c.dstate[i].vcs.size(); k ++) + for (int i = 3; i < a.vcs.size(); i = i + 2) { - if (k % 2 == 1) c.dstate[i].vcs[k] = j; + float c2 = (float)intCoefs[a.vcs[i]] / (float)intCoefs[b.vcs[i]]; + if (c2 < 0) return false; + + if (fabs(c1 - c2) > 0.0001 ) return false; // hardcode here } - equivs.push_back(c); - } - } - // if (ax + ax > 0) then we can replace a by b,c,... of the same sign + return true; + } - else if (coef != 0 && 0 == intconst) + // very approximate result as for equivLinCom (used in the aggressive mode) + bool approxRedund(LAterm& a, LAterm& b) { + // decide equivalence gradually: - for (int j = 0; j < intCoefs.size(); j++) - { - int thisConst = intCoefs[j]; - if (thisConst == coef) continue; - if ((thisConst<0) != (coef<0)) continue; + if (a.arity != b.arity) return false; - LAdisj c; - clone(sample, c); - for (int k = 0; k < c.dstate[i].vcs.size(); k ++) + // check equivalence of vars + for (int i = 0; i < a.vcs.size(); i = i + 2) { - if (k % 2 == 1) c.dstate[i].vcs[k] = j; + if (a.vcs[i] != b.vcs[i]) return false; } - equivs.push_back(c); - } - } - } - } - bool addDisjFilter(LAterm& s, LAdisj& d) - { - int skip = false; - for (int j = 0; j < d.arity; j++) - { - LAterm& t = d.dstate[j]; - if (stronger(s, t)) - { - // disjunction of s and t is equal t, so s can be ignored - skip = true; - break; - } - else if (weaker(s, t)) - { - // disjunction of s and t is equal s, so swap these two guys: - t.cmpop = s.cmpop; - t.intconst = s.intconst; + for (int i = 1; i < a.vcs.size(); i = i + 2) + { + if (intCoefs[a.vcs[i]] >= 0 != intCoefs[b.vcs[i]] >= 0) return false; + } - skip = true; - break; + return true; } - else + + // identifies some logical implications, e.g., x + 2y > 0 is stronger than x + 2y >= 10 + // false means "we don't know" + bool stronger(LAterm& s, LAterm& t) { - LAterm u; - invertTerm(t, u); - if (stronger(u, s)) - { - // disjunction of s and t is equal to true, to the entire LAdisj& d is a tautology - return false; - } - } - } - if (!skip) - { - d.addDisj(s); - } - return true; - } + if (s.vcs.size() != t.vcs.size()) return false; - bool guessTerm (LAdisj& curTerm, int arity) - { - if (isEmpty(plusAritiesDensity[arity])) return false; + for (int i = 0; i < s.vcs.size(); i++) + { + if (s.vcs[i] != t.vcs[i]) return false; + } - vector> varcombs; - vector terms; + // Ax > b stronger than Ax >= b + if (s.intconst == t.intconst) + return (s.cmpop <= t.cmpop); // the smaller index the stronger formula - // first, guess var combinations: + // Ax > / >= b stronger than Ax > / >= c iff b > c + return (s.intconst > t.intconst); + } - for (int i = 0; i < arity; i++) - { - terms.push_back(LAterm()); - LAterm& la = terms.back(); - la.arity = chooseByWeight(plusAritiesDensity[arity]); + // symmetric to stronger + bool weaker(LAterm& s, LAterm& t) + { + if (s.vcs.size() != t.vcs.size()) return false; - vector>& varCombination = varCombinations[la.arity]; - int comb = chooseByWeight(varDensity[arity][la.arity]); - varcombs.push_back(varCombination[comb]); - } + for (int i = 0; i < s.vcs.size(); i++) + { + if (s.vcs[i] != t.vcs[i]) return false; + } - // then, guess coefficients to complete the lin. combination + if (s.intconst == t.intconst) + return (s.cmpop >= t.cmpop); - for (int i = 0; i < arity; i++) - { - LAterm& la = terms[i]; - for (int v : varcombs[i]) - { - la.vcs.push_back( v ); - int coef = chooseByWeight(coefDensity[arity][v]); - la.vcs.push_back(coef); + return (s.intconst < t.intconst); } - if (i != 0) + void getEquivalentFormulas(LAdisj& sample, vector& equivs) { - for (int j = 0; j < i; j++) - { + equivs.push_back(sample); + lincoms& id = sample.getId(); - if (!aggressivepruning && equivLinCom(la, curTerm.dstate[j])) + for (int i = 0; i < sample.arity; i++) { - return false; + LAterm& s = sample.dstate[i]; + Expr cmpop = cmpOps[ s.cmpop ]; + auto intconst = intConsts [ s.intconst ]; + + // get the formulas equivalent to this one, and run the same procedure for them: + + // if (ax + ax > a) then we can replace a by b, c,... of the same sign + + cpp_int coef = equalCoefs(s); + + if (coef != 0 && coef == intconst) + { + for (int j = 0; j < intCoefs.size(); j++) + { + auto thisConst = intCoefs[j]; + if (thisConst == coef) continue; + if ((thisConst<0) != (coef<0)) continue; + + int indProg = getVarIndex(thisConst, intConsts); // GF? + if (indProg == -1) continue; + + LAdisj c; + clone(sample, c); + c.dstate[i].intconst = indProg; + for (int k = 0; k < c.dstate[i].vcs.size(); k ++) + { + if (k % 2 == 1) c.dstate[i].vcs[k] = j; + } + equivs.push_back(c); + } + } + + // if (ax + ax > 0) then we can replace a by b,c,... of the same sign + + else if (coef != 0 && 0 == intconst) + { + + for (int j = 0; j < intCoefs.size(); j++) + { + auto thisConst = intCoefs[j]; + if (thisConst == coef) continue; + if ((thisConst<0) != (coef<0)) continue; + + LAdisj c; + clone(sample, c); + for (int k = 0; k < c.dstate[i].vcs.size(); k ++) + { + if (k % 2 == 1) c.dstate[i].vcs[k] = j; + } + equivs.push_back(c); + } + } } - else if (aggressivepruning && approxRedund(la, curTerm.dstate[j])) + } + + bool addDisjFilter(LAterm& s, LAdisj& d) + { + int skip = false; + for (int j = 0; j < d.arity; j++) { - return false; + LAterm& t = d.dstate[j]; + if (stronger(s, t)) + { + // disjunction of s and t is equal t, so s can be ignored + skip = true; + break; + } + else if (weaker(s, t)) + { + // disjunction of s and t is equal s, so swap these two guys: + t.cmpop = s.cmpop; + t.intconst = s.intconst; + + skip = true; + break; + } + else + { + LAterm u; + invertTerm(t, u); + if (stronger(u, s)) + { + // disjunction of s and t is equal to true, to the entire LAdisj& d is a tautology + return false; + } + } } - } + if (!skip) + { + d.addDisj(s); + } + return true; } - curTerm.addDisj(la); - - } - - // finally, guess operator and constant based on the information we learned from the previous samples: - // WARNING: if aggressivepruning, we may skip checking some candidates - if (aggressivepruning && isSampleVisitedWeak(curTerm)) return false; - - if (!aggressivepruning && isSampleVisitedStrong(curTerm)) return false; + // here, arity belongs to the whole candidate (incl. the boolean part), + // while linArity is the number of clauses only in arithmetic + bool guessTerm (LAdisj& curTerm, int arity, int linArity) + { + if (isEmpty(plusAritiesDensity[arity])) return false; - lincoms& id = curTerm.getId(); + vector> varcombs; + vector terms; - for (int i = 0; i < arity; i++) // finally, guess operator and constant - { - LAterm& la = curTerm.dstate[i]; - guessNewInequality(id, i, la, arity); + // first, guess var combinations: - // GF: currently disabled: - /* if (aggressivepruning) - { - for (int k = 0; k < learnedLemmas.size(); k++) - { - LAdisj& lcs = samples[ learnedLemmas [k] ]; - if (lcs.arity == 1 && lcs.dstate[0] == la) return false; - } - } */ - } - return true; - } + for (int i = 0; i < linArity; i++) + { + terms.push_back(LAterm()); + LAterm& la = terms.back(); + la.arity = chooseByWeight(plusAritiesDensity[arity]); - void guessNewInequality (lincoms& id, int disj, LAterm& curLAterm, int ar) - { - vector& distrs = ineqPriors[id]; - initDistrs(distrs, id.size(), prVarsDistrRange); - - if (!aggressivepruning) - { - // re-initialize distribution (if empty) - reInitialize(id, disj); - } - - if (isDefault(distrs[disj])) // if it's the first time we look at this lin.combination, - { // we might want to guess a candidate based on the code - curLAterm.intconst = chooseByWeight(intConstDensity[ar]); - curLAterm.cmpop = chooseByWeight(cmpOpDensity[ar]); - } - else // otherwise, some info about this lin.combination - { // is already kmown from the previous checks - int ch = chooseByWeight(distrs[disj]); - double chd = (double)ch / 2; - curLAterm.intconst = chd; - curLAterm.cmpop = (ch % 2 == 0) ? getIndexGE() : getIndexGT(); - } - } + vector>& varCombination = varCombinations[la.arity]; + int comb = chooseByWeight(varDensity[arity][la.arity]); + varcombs.push_back(varCombination[comb]); + } - bool isSampleVisitedStrong(LAdisj& tmpl) - { - // we should exhaust the search space of all the disjuncts - // before abandon the entire disjunction + // then, guess coefficients to complete the lin. combination - // currently, works for disjunctions with one disjunct - // (for others, may keep throwing the same candidates again and again) - lincoms& id = tmpl.getId(); + for (int i = 0; i < linArity; i++) + { + LAterm& la = terms[i]; + for (int v : varcombs[i]) + { + la.vcs.push_back( v ); + int coef = chooseByWeight(coefDensity[arity][v]); + la.vcs.push_back(coef); + } + + if (i != 0) + { + for (int j = 0; j < i; j++) + { + + if (!aggressivepruning && equivLinCom(la, curTerm.dstate[j])) + { + return false; + } + else if (aggressivepruning && approxRedund(la, curTerm.dstate[j])) + { + return false; + } + } + } + curTerm.addDisj(la); - if (visited[id].size() == tmpl.arity) - { - return true; - } - return false; - } + } - bool isSampleVisitedWeak(LAdisj& tmpl) - { - // once the search space for one of the disjuncts is exhauseted - // we abandoned the entire disjunction - lincoms& id = tmpl.getId(); + // finally, guess operator and constant based on the information we learned from the previous samples: - if (visited[id].size() > 0) - { - return true; - } - return false; - } + // WARNING: if aggressivepruning, we may skip checking some candidates + if (aggressivepruning && isSampleVisitedWeak(curTerm)) return false; - bool isVisited(lincoms& id, int disj) - { - set& s = visited[id]; + if (!aggressivepruning && isSampleVisitedStrong(curTerm)) return false; - if (std::find(std::begin(s), std::end(s), disj) != std::end(s)) - return true; + lincoms& id = curTerm.getId(); - weights& d = ineqPriors[id][disj]; + for (int i = 0; i < linArity; i++) // finally, guess operator and constant + { + LAterm& la = curTerm.dstate[i]; + guessNewInequality(id, i, la, arity); + + // GF: currently disabled: + /* if (aggressivepruning) + { + for (int k = 0; k < learnedLemmas.size(); k++) + { + LAdisj& lcs = samples[ learnedLemmas [k] ]; + if (lcs.arity == 1 && lcs.dstate[0] == la) return false; + } + } */ + } + return true; + } - if (ineqPriors[id].size() == 0) - { - outs() << "WARNING: Priorities are not set up here\n"; - return false; - } + void guessNewInequality (lincoms& id, int disj, LAterm& curLAterm, int ar) + { + vector& distrs = ineqPriors[id]; + initDistrs(distrs, id.size(), prVarsDistrRange); - for (int i = 0; i < d.size(); i++) - { - if (d[i] != PRIORNOVISIT) return false; - } - s.insert(disj); - return true; - } + if (!aggressivepruning) + { + // re-initialize distribution (if empty) + reInitialize(id, disj); + } - void reInitialize(lincoms& id, int disj, int def = 1000) - { - set& s = visited[id]; + if (isDefault(distrs[disj])) // if it's the first time we look at this lin.combination, + { // we might want to guess a candidate based on the code + curLAterm.intconst = chooseByWeight(intConstDensity[ar]); + curLAterm.cmpop = chooseByWeight(cmpOpDensity[ar]); + } + else // otherwise, some info about this lin.combination + { // is already kmown from the previous checks + int ch = chooseByWeight(distrs[disj]); + double chd = (double)ch / 2; + curLAterm.intconst = chd; + curLAterm.cmpop = (ch % 2 == 0) ? getIndexGE() : getIndexGT(); + } + } - if (std::find(std::begin(s), std::end(s), disj) == std::end(s)) return; + bool isSampleVisitedStrong(LAdisj& tmpl) + { + // we should exhaust the search space of all the disjuncts + // before abandon the entire disjunction - weights& d = ineqPriors[id][disj]; + // currently, works for disjunctions with one disjunct + // (for others, may keep throwing the same candidates again and again) + lincoms& id = tmpl.getId(); - for (int i = 0; i < d.size(); i++) d[i] = def; - } + if (visited[id].size() == tmpl.arity) + { + return true; + } + return false; + } - void prioritiesBlocked(LAdisj& failed) - { - lincoms& id = failed.getId(); - vector& distrs = ineqPriors[id]; + bool isSampleVisitedWeak(LAdisj& tmpl) + { + // once the search space for one of the disjuncts is exhauseted + // we abandoned the entire disjunction + lincoms& id = tmpl.getId(); - initDistrs(distrs, failed.arity, prVarsDistrRange); + if (visited[id].size() > 0) + { + return true; + } + return false; + } - for (int i = 0; i < failed.arity; i++) - { - LAterm& s = failed.dstate[i]; - distrs[i][s.intconst * 2 + (getIndexGT() == s.cmpop ? 1 : 0)] = PRIORNOVISIT; - isVisited(id, i); - } - } + bool isVisited(lincoms& id, int disj) + { + set& s = visited[id]; - void prioritiesFailed(LAdisj& failed) - { - lincoms& id = failed.getId(); - vector& distrs = ineqPriors[id]; + if (std::find(std::begin(s), std::end(s), disj) != std::end(s)) + return true; - initDistrs(distrs, failed.arity, prVarsDistrRange); + weights& d = ineqPriors[id][disj]; - for (int i = 0; i < failed.arity; i++) - { - LAterm& s = failed.dstate[i]; + if (ineqPriors[id].size() == 0) + { + outs() << "WARNING: Priorities are not set up here\n"; + return false; + } - int lim = s.intconst * 2 + (getIndexGT() == s.cmpop ? 1 : 0); - for (int j = 0; j < prVarsDistrRange ; j++) - { - if (j >= lim) - { - // block all constants which are greater or equal than intconst - distrs[i][j] = PRIORNOVISIT; - } - else - { - // the farther constant from s.intconst the higher priority to visit it later - distrs[i][j] = min ( distrs[i][j], (lim - j) * PRIORSTEP ); - } + for (int i = 0; i < d.size(); i++) + { + if (d[i] != PRIORNOVISIT) return false; + } + s.insert(disj); + return true; } - isVisited(id, i); - } - } + void reInitialize(lincoms& id, int disj, int def = 1000) + { + set& s = visited[id]; - void prioritiesLearned(LAdisj& learned) - { - lincoms& id = learned.getId(); - vector& distrs = ineqPriors[id]; + if (std::find(std::begin(s), std::end(s), disj) == std::end(s)) return; - initDistrs(distrs, learned.arity, prVarsDistrRange); + weights& d = ineqPriors[id][disj]; - for (int i = 0; i < learned.arity; i++) - { - LAterm& s = learned.dstate[i]; + for (int i = 0; i < d.size(); i++) d[i] = def; + } - int lim = s.intconst * 2 + (getIndexGT() == s.cmpop ? 1 : 0); - for (int j = 0; j < prVarsDistrRange ; j++) + void prioritiesBlocked(LAdisj& failed) { - if (j < lim) - { - // block all constants which are less or equal than intconst - distrs[i][j] = PRIORNOVISIT; - } - else - { - // the farther constant from intconst the higher priority to visit it later - distrs[i][j] = min ( distrs[i][j], (j - lim) * PRIORSTEP ); - } - } + lincoms& id = failed.getId(); + vector& distrs = ineqPriors[id]; - isVisited(id, i); - } - } + initDistrs(distrs, failed.arity, prVarsDistrRange); - void assignPrioritiesForLearned(LAdisj& learned) - { - if (!aggressivepruning) return; - - vector eqs; - getEquivalentFormulas(learned, eqs); - for (auto &a : eqs) prioritiesLearned (a); - - if (learned.arity == 1) - { - LAdisj t; - invertDisj (learned, t, 0); // this is guaranteed to fail - assignPrioritiesForFailed(t); - } - - // GF: currently disabled - /* - else - { - vector invTerms; - for (int i = 0; i < learned.arity; i++) - { - invTerms.push_back(LAterm()); - invertTerm(learned.dstate[i], invTerms.back()); + for (int i = 0; i < failed.arity; i++) + { + LAterm& s = failed.dstate[i]; + distrs[i][s.intconst * 2 + (getIndexGT() == s.cmpop ? 1 : 0)] = PRIORNOVISIT; + isVisited(id, i); + } } - for (int i = 0; i < learned.arity; i++) + void prioritiesFailed(LAdisj& failed) { - bool canblock = true; - for (int j = 0; j < learned.arity; j++) - { - if (i == j) continue; - // search for invTerms[j] among learned lemmas - bool found = false; - for (int k = 0; k < learnedLemmas.size(); k++) + lincoms& id = failed.getId(); + vector& distrs = ineqPriors[id]; + + initDistrs(distrs, failed.arity, prVarsDistrRange); + + for (int i = 0; i < failed.arity; i++) { - LAdisj& lcs = samples[ learnedLemmas [k] ]; - if (lcs.arity > 1) continue; - if (stronger(lcs.dstate[0], invTerms[j])) - { - // outs() << "stronger formula: " << - // *toExpr(lcs.dstate[0]) << " ===> " << - // *toExpr(invTerms[j]) << "\n"; - found = true; - break; - } + LAterm& s = failed.dstate[i]; + + int lim = s.intconst * 2 + (getIndexGT() == s.cmpop ? 1 : 0); + for (int j = 0; j < prVarsDistrRange ; j++) + { + if (j >= lim) + { + // block all constants which are greater or equal than intconst + distrs[i][j] = PRIORNOVISIT; + } + else + { + // the farther constant from s.intconst the higher priority to visit it later + distrs[i][j] = min ( distrs[i][j], (lim - j) * PRIORSTEP ); + } + } + + isVisited(id, i); } - if (!found) + } + + void prioritiesLearned(LAdisj& learned) + { + lincoms& id = learned.getId(); + vector& distrs = ineqPriors[id]; + + initDistrs(distrs, learned.arity, prVarsDistrRange); + + for (int i = 0; i < learned.arity; i++) { - canblock = false; - break; + LAterm& s = learned.dstate[i]; + + int lim = s.intconst * 2 + (getIndexGT() == s.cmpop ? 1 : 0); + for (int j = 0; j < prVarsDistrRange ; j++) + { + if (j < lim) + { + // block all constants which are less or equal than intconst + distrs[i][j] = PRIORNOVISIT; + } + else + { + // the farther constant from intconst the higher priority to visit it later + distrs[i][j] = min ( distrs[i][j], (j - lim) * PRIORSTEP ); + } + } + + isVisited(id, i); } - } - if (canblock) - { - LAdisj lcs; - lcs.addDisj(invTerms[i]); - assignPrioritiesForFailed(lcs); - } } - } */ - } - void assignPrioritiesForFailed(LAdisj& failed) - { - if (!aggressivepruning) return; + void assignPrioritiesForLearned(LAdisj& learned) + { + if (!aggressivepruning) return; - vector eqs; - getEquivalentFormulas(failed, eqs); - for (auto &a : eqs) prioritiesFailed (a); - } + vector eqs; + getEquivalentFormulas(learned, eqs); + for (auto &a : eqs) prioritiesLearned (a); - void assignPrioritiesForBlocked(LAdisj& failed) - { - if (!aggressivepruning) return; - - vector eqs; - getEquivalentFormulas(failed, eqs); - for (auto &a : eqs) prioritiesBlocked (a); - } + if (learned.arity == 1) + { + LAdisj t; + invertDisj (learned, t, 0); // this is guaranteed to fail + assignPrioritiesForFailed(t); + } - void initDensities(set& arities) - { - // preparing var combinations; - varCombinations.push_back(vector>()); // empty ones; not used - for (int i = 1; i <= vars.size(); i++) - { - varCombinations.push_back(vector>()); - getCombinations(varInds, 0, i, varCombinations.back()); - } - - for (auto ar : arities) initDensities(ar); - } + // GF: currently disabled + /* + else + { + vector invTerms; + for (int i = 0; i < learned.arity; i++) + { + invTerms.push_back(LAterm()); + invertTerm(learned.dstate[i], invTerms.back()); + } - void initDensities(int ar) - { - for (int i = 1; i < vars.size() + 1; i++) - { - plusAritiesDensity[ar][i] = 0; + for (int i = 0; i < learned.arity; i++) + { + bool canblock = true; + for (int j = 0; j < learned.arity; j++) + { + if (i == j) continue; + // search for invTerms[j] among learned lemmas + bool found = false; + for (int k = 0; k < learnedLemmas.size(); k++) + { + LAdisj& lcs = samples[ learnedLemmas [k] ]; + if (lcs.arity > 1) continue; + if (stronger(lcs.dstate[0], invTerms[j])) + { + // outs() << "stronger formula: " << + // *toExpr(lcs.dstate[0]) << " ===> " << + // *toExpr(invTerms[j]) << "\n"; + found = true; + break; + } + } + if (!found) + { + canblock = false; + break; + } + } + if (canblock) + { + LAdisj lcs; + lcs.addDisj(invTerms[i]); + assignPrioritiesForFailed(lcs); + } + } + } */ + } - for (int j = 0; j < intCoefs.size(); j++) + void assignPrioritiesForFailed(LAdisj& failed) { - coefDensity[ar][i-1][j] = 0; + if (!aggressivepruning) return; + + vector eqs; + getEquivalentFormulas(failed, eqs); + for (auto &a : eqs) prioritiesFailed (a); } - } - for (int i = 0; i < intConsts.size(); i++) - { - intConstDensity[ar][i] = 0; - } + void assignPrioritiesForBlocked(LAdisj& failed) + { + if (!aggressivepruning) return; - for (int i = 0; i < cmpOps.size(); i++) - { - cmpOpDensity[ar][i] = 0; - } + vector eqs; + getEquivalentFormulas(failed, eqs); + for (auto &a : eqs) prioritiesBlocked (a); + } - // preparing var densities; - varDensity[ar].push_back(density()); + void initDensities(set& arities) + { + // preparing var combinations; + varCombinations.push_back(vector>()); // empty ones; not used + for (int i = 1; i <= vars.size(); i++) + { + varCombinations.push_back(vector>()); + getCombinations(varInds, 0, i, varCombinations.back()); + } - for (int i = 1; i <= vars.size(); i++) - { - varDensity[ar].push_back(density()); + for (auto ar : arities) initDensities(ar); + } - for (int j = 0; j < varCombinations[i].size(); j++) + void initDensities(int ar) { - varDensity[ar].back()[j] = 0; - } - } - } + for (int i = 1; i < vars.size() + 1; i++) + { + plusAritiesDensity[ar][i] = 0; - int getEpsilon(int min_freq, int num_zeros) - { - if (num_zeros == 0) return 1; + for (int j = 0; j < intCoefs.size(); j++) + { + coefDensity[ar][i-1][j] = 0; + } + } - // somewhat naive function; could be made dependent on other parameters, - // not only on the minimum frequency and number of zero-frequencies... - return 1 + - ((min_freq == INT_MAX) ? 0 : - guessUniformly(min_freq) / num_zeros / EPSILONFRACTION); - } + for (int i = 0; i < intConsts.size(); i++) + { + intConstDensity[ar][i] = 0; + } - void stabilizeDensities(int ar, bool addEpsilon, bool freqs) - { - int freqCoef = freqs ? FREQCOEF : 1; - int min_freq = INT_MAX; - int num_zeros = 0; - int eps = 0; - - for (auto & pl : plusAritiesDensity[ar]) - { - if (pl.second == 0) num_zeros++; - else - { - pl.second *= freqCoef; - min_freq = min(min_freq, pl.second); - } - } - - if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); - else if (num_zeros == plusAritiesDensity[ar].size()) eps = 1; - else eps = 0; - - for (auto & pl : plusAritiesDensity[ar]) - { - if (pl.second == 0) pl.second = eps; - } - - for (int i = 0; i < vars.size(); i++) - { - min_freq = INT_MAX; - num_zeros = 0; - for (auto & c : coefDensity[ar][i]) - { - if (c.second == 0) num_zeros++; - else - { - c.second *= freqCoef; - min_freq = min(min_freq, c.second); - } - } + for (int i = 0; i < cmpOps.size(); i++) + { + cmpOpDensity[ar][i] = 0; + } - if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); - else if (num_zeros == coefDensity[ar][i].size()) eps = 1; - else eps = 0; + // preparing var densities; + varDensity[ar].push_back(density()); - for (auto & c : coefDensity[ar][i]) - { - if (c.second == 0) c.second = eps; - } - } - - min_freq = INT_MAX; - num_zeros = 0; - for (auto & c : intConstDensity[ar]) - { - if (c.second == 0) num_zeros++; - else - { - c.second *= freqCoef; - min_freq = min(min_freq, c.second); + for (int i = 1; i <= vars.size(); i++) + { + varDensity[ar].push_back(density()); + + for (int j = 0; j < varCombinations[i].size(); j++) + { + varDensity[ar].back()[j] = 0; + } + } } - } - - if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); - else if (num_zeros == intConstDensity[ar].size()) eps = 1; - else eps = 0; - - for (auto & c : intConstDensity[ar]) - { - if (c.second == 0) c.second = eps; - } - - min_freq = INT_MAX; - num_zeros = 0; - for (auto & c : cmpOpDensity[ar]) - { - if (c.second == 0) num_zeros++; - else + + int getEpsilon(int min_freq, int num_zeros) { - c.second *= freqCoef; - min_freq = min(min_freq, c.second); + if (num_zeros == 0) return 1; + + // somewhat naive function; could be made dependent on other parameters, + // not only on the minimum frequency and number of zero-frequencies... + return 1 + + ((min_freq == INT_MAX) ? 0 : + guessUniformly(min_freq) / num_zeros / EPSILONFRACTION); } - } - - if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); - else if (num_zeros == cmpOpDensity[ar].size()) eps = 1; - else eps = 0; - - for (auto & c : cmpOpDensity[ar]) - { - if (c.second == 0) c.second = eps; - } - - for (int i = 0; i < varDensity[ar].size(); i++) - { - min_freq = INT_MAX; - num_zeros = 0; - for (auto &b : varDensity[ar][i]) + + void stabilizeDensities(int ar, bool addEpsilon, bool freqs) { - if (b.second == 0) num_zeros++; - else - { - b.second *= freqCoef; - min_freq = min(min_freq, b.second); - } - } + int freqCoef = freqs ? FREQCOEF : 1; + int min_freq = INT_MAX; + int num_zeros = 0; + int eps = 0; + + for (auto & pl : plusAritiesDensity[ar]) + { + if (pl.second == 0) num_zeros++; + else + { + pl.second *= freqCoef; + min_freq = min(min_freq, pl.second); + } + } - if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); - else if (num_zeros == varDensity[ar][i].size()) eps = 1; + if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); + else if (num_zeros == plusAritiesDensity[ar].size()) eps = 1; else eps = 0; - for (auto &b : varDensity[ar][i]) - { - if (b.second == 0) b.second = eps; - } - } - } + for (auto & pl : plusAritiesDensity[ar]) + { + if (pl.second == 0) pl.second = eps; + } - void calculateStatistics(LAdisj& lcs, int ar, bool freqs, bool addepsilon) - { - if (freqs) - { - // collect number of occurrences.... + for (int i = 0; i < vars.size(); i++) + { + min_freq = INT_MAX; + num_zeros = 0; + for (auto & c : coefDensity[ar][i]) + { + if (c.second == 0) num_zeros++; + else + { + c.second *= freqCoef; + min_freq = min(min_freq, c.second); + } + } + + if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); + else if (num_zeros == coefDensity[ar][i].size()) eps = 1; + else eps = 0; + + for (auto & c : coefDensity[ar][i]) + { + if (c.second == 0) c.second = eps; + } + } - for (auto & lc : lcs.dstate) - { - // of arities of application of PLUS - plusAritiesDensity[ar][lc.arity] ++; + min_freq = INT_MAX; + num_zeros = 0; + for (auto & c : intConstDensity[ar]) + { + if (c.second == 0) num_zeros++; + else + { + c.second *= freqCoef; + min_freq = min(min_freq, c.second); + } + } - // of constants - intConstDensity[ar][lc.intconst] ++; + if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); + else if (num_zeros == intConstDensity[ar].size()) eps = 1; + else eps = 0; - // of comparison operations - cmpOpDensity[ar][lc.cmpop] ++; + for (auto & c : intConstDensity[ar]) + { + if (c.second == 0) c.second = eps; + } - set vars; - int vars_id = -1; - for (int j = 0; j < lc.vcs.size(); j = j+2) vars.insert(lc.vcs[j]); - for (int j = 0; j < varCombinations[lc.arity].size(); j++) - { - if (varCombinations[lc.arity][j] == vars) + min_freq = INT_MAX; + num_zeros = 0; + for (auto & c : cmpOpDensity[ar]) { - vars_id = j; - break; + if (c.second == 0) num_zeros++; + else + { + c.second *= freqCoef; + min_freq = min(min_freq, c.second); + } } - } - assert(vars_id >= 0); - // of variable combinations - varDensity[ar][lc.arity][vars_id] ++; + if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); + else if (num_zeros == cmpOpDensity[ar].size()) eps = 1; + else eps = 0; + + for (auto & c : cmpOpDensity[ar]) + { + if (c.second == 0) c.second = eps; + } - // of variable coefficients - for (int j = 1; j < lc.vcs.size(); j = j+2) - { - coefDensity[ ar ][ lc.vcs [j-1] ] [lc.vcs [j] ] ++; - } + for (int i = 0; i < varDensity[ar].size(); i++) + { + min_freq = INT_MAX; + num_zeros = 0; + for (auto &b : varDensity[ar][i]) + { + if (b.second == 0) num_zeros++; + else + { + b.second *= freqCoef; + min_freq = min(min_freq, b.second); + } + } + + if (addEpsilon) eps = getEpsilon(min_freq, num_zeros); + else if (num_zeros == varDensity[ar][i].size()) eps = 1; + else eps = 0; + + for (auto &b : varDensity[ar][i]) + { + if (b.second == 0) b.second = eps; + } + } } - } - else - { - // same thing as in above; but instead of precise frequencies, we gather a rough presence - for (auto & lc : lcs.dstate) + void calculateStatistics(LAdisj& lcs, int ar, bool freqs, bool addepsilon) { - // of arities of application of PLUS - plusAritiesDensity[ar][lc.arity] = 1; - - // of constants - intConstDensity[ar][lc.intconst] = 1; + if (freqs) + { + // collect number of occurrences.... + + for (auto & lc : lcs.dstate) + { + // of arities of application of PLUS + plusAritiesDensity[ar][lc.arity] ++; + + // of constants + intConstDensity[ar][lc.intconst] ++; + + // of comparison operations + cmpOpDensity[ar][lc.cmpop] ++; + + set vars; + int vars_id = -1; + for (int j = 0; j < lc.vcs.size(); j = j+2) vars.insert(lc.vcs[j]); + for (int j = 0; j < varCombinations[lc.arity].size(); j++) + { + if (varCombinations[lc.arity][j] == vars) + { + vars_id = j; + break; + } + } + assert(vars_id >= 0); + + // of variable combinations + varDensity[ar][lc.arity][vars_id] ++; + + // of variable coefficients + for (int j = 1; j < lc.vcs.size(); j = j+2) + { + coefDensity[ ar ][ lc.vcs [j-1] ] [lc.vcs [j] ] ++; + } + } + } + else + { + // same thing as in above; but instead of precise frequencies, we gather a rough presence + + for (auto & lc : lcs.dstate) + { + // of arities of application of PLUS + plusAritiesDensity[ar][lc.arity] = 1; + + // of constants + intConstDensity[ar][lc.intconst] = 1; + + // of comparison operations + cmpOpDensity[ar][lc.cmpop] = 1; + + set vars; + int vars_id = -1; + for (int j = 0; j < lc.vcs.size(); j = j+2) vars.insert(lc.vcs[j]); + for (int j = 0; j < varCombinations[lc.arity].size(); j++) + { + if (varCombinations[lc.arity][j] == vars) + { + vars_id = j; + break; + } + } + assert(vars_id >= 0); + + // of variable combinations + varDensity[ar][lc.arity][vars_id] = 1; + + // of variable coefficients + for (int j = 1; j < lc.vcs.size(); j = j+2) + { + coefDensity[ ar ][ lc.vcs [j-1] ] [lc.vcs [j] ] = 1; + } + } + } + } - // of comparison operations - cmpOpDensity[ar][lc.cmpop] = 1; + void printCodeStatistics(int ar) + { + outs () << "(OR arity = " << ar << "):\n"; - set vars; - int vars_id = -1; - for (int j = 0; j < lc.vcs.size(); j = j+2) vars.insert(lc.vcs[j]); - for (int j = 0; j < varCombinations[lc.arity].size(); j++) - { - if (varCombinations[lc.arity][j] == vars) + for (auto &a : plusAritiesDensity[ar]) { - vars_id = j; - break; + outs() << " Plus arity density: " << a.first << " |--> " << a.second << "\n"; } - } - assert(vars_id >= 0); - // of variable combinations - varDensity[ar][lc.arity][vars_id] = 1; + for (auto &a : intConstDensity[ar]) + { + outs() << " IntConst density: " << *intConstsE[ a.first ] << " |--> " << a.second << "\n"; + } - // of variable coefficients - for (int j = 1; j < lc.vcs.size(); j = j+2) - { - coefDensity[ ar ][ lc.vcs [j-1] ] [lc.vcs [j] ] = 1; - } - } - } - } + for (auto &a : cmpOpDensity[ar]) + { + outs() << " Operator density: " << (a.first == indexGT ? ">" : ">=") << " |--> " << a.second << "\n"; + } - void printCodeStatistics(int ar) - { - outs () << "(OR arity = " << ar << "):\n"; - - for (auto &a : plusAritiesDensity[ar]) - { - outs() << " Plus arity density: " << a.first << " |--> " << a.second << "\n"; - } - - for (auto &a : intConstDensity[ar]) - { - outs() << " IntConst density: " << intConsts[ a.first ] << " |--> " << a.second << "\n"; - } - - for (auto &a : cmpOpDensity[ar]) - { - outs() << " Operator density: " << (a.first == indexGT ? ">" : ">=") << " |--> " << a.second << "\n"; - } - - for (int i = 0; i < varDensity[ar].size(); i++) - { - for (auto &b : varDensity[ar][i]) - { - outs() << " Var Combination density: "; + for (int i = 0; i < varDensity[ar].size(); i++) + { + for (auto &b : varDensity[ar][i]) + { + outs() << " Var Combination density: "; - for (int j : varCombinations[i][b.first]) - { - outs() << *vars[j] << ", "; - } + for (int j : varCombinations[i][b.first]) + { + outs() << *vars[j] << ", "; + } - outs() << "\b\b |--> " << b.second << "\n"; - } - } + outs() << "\b\b |--> " << b.second << "\n"; + } + } - for (int i = 0; i < vars.size(); i++) - { - for (int j = 0; j < getIntCoefsSize(); j++) - { - outs() << " Var Coefficient density: [" << getIntCoef(j) << " * " - << *vars[i] << "] : " << coefDensity[ar][i][j] << "\n"; + for (int i = 0; i < vars.size(); i++) + { + for (int j = 0; j < getIntCoefsSize(); j++) + { + outs() << " Var Coefficient density: [" << *intCoefsE[j] << " * " + << *vars[i] << "] : " << coefDensity[ar][i][j] << "\n"; + } + } } - } - } - }; + }; } diff --git a/include/sampl/Sampl.hpp b/include/sampl/Sampl.hpp index 308af9b85..72437e1ad 100644 --- a/include/sampl/Sampl.hpp +++ b/include/sampl/Sampl.hpp @@ -12,293 +12,296 @@ using namespace boost; namespace ufo { - // wrapper for LinCom.hpp, BoolCom.hpp, etc (in the future) - class Sampl - { + // wrapper for LinCom.hpp, BoolCom.hpp, etc (in the future) + class Sampl + { public: - Bdisj b_part; - LAdisj l_part; + Bdisj b_part; + LAdisj l_part; - int arity() - { - return l_part.arity + ((b_part.arity > 0) ? 1 : 0); - } + int arity() + { + return l_part.arity + ((b_part.arity > 0) ? 1 : 0); + } - bool empty() { return arity() == 0; } + bool empty() { return arity() == 0; } - Sampl() {} + Sampl() {} - }; + }; - class SamplFactory - { + class SamplFactory + { private: - ExprFactory &m_efac; + ExprFactory &m_efac; - vector samples; + vector samples; - density hasBooleanComb; - density orAritiesDensity; - bool hasArrays = false; + density hasBooleanComb; + density orAritiesDensity; + bool hasArrays = false; public: - LAfactory lf; - Bfactory bf; - ARRfactory af; + LAfactory lf; + Bfactory bf; + ARRfactory af; - ExprSet learnedExprs; + ExprSet learnedExprs; - bool initilized = true; + int initialized = 0; - SamplFactory(ExprFactory &_efac, bool aggp) : - m_efac(_efac), lf(_efac, aggp), bf(_efac), af(_efac, aggp) {} + SamplFactory(ExprFactory &_efac, bool aggp) : + m_efac(_efac), lf(_efac, aggp), bf(_efac), af(_efac, aggp) {} - Expr getAllLemmas() - { - return conjoin(learnedExprs, m_efac); - } - - bool addVar(Expr var) - { - bool added = false; - if (bind::isBoolConst(var)) - { - bf.addVar(var); - added = true; - } - else if (bind::isIntConst(var)) - { - lf.addVar(var); - added = true; - } - else if (bind::isConst (var)) - { - af.addVar(var); - added = true; - hasArrays = true; - } - return added; - } - - void initialize(ExprSet& arrCands, ExprSet& arrSelects, ExprSet& arrRange) - { - bf.initialize(); - lf.initialize(); - if (hasArrays) - { - if (arrSelects.empty() || arrRange.empty()) + Expr getAllLemmas() { - initilized = false; + return conjoin(learnedExprs, m_efac); } - else + + bool addVar(Expr var) { - af.initialize(lf.getVars(), arrCands, arrSelects, arrRange); + bool added = false; + if (bind::isBoolConst(var)) + { + bf.addVar(var); + added = true; + } + else if (bind::isIntConst(var)) + { + lf.addVar(var); + added = true; + } + else if (bind::isConst (var)) + { + af.addVar(var); + added = true; + hasArrays = true; + } + return added; } - } - } - - Sampl& exprToSampl(Expr ex) - { - samples.push_back(Sampl()); - Bdisj& bcs = samples.back().b_part; - LAdisj& lcs = samples.back().l_part; - bf.exprToBdisj(ex, bcs); - lf.exprToLAdisj(ex, lcs); + void initialize(ExprSet& arrCands, ExprVector& arrAccessVars, ExprSet& arrRange) + { + bf.initialize(); + lf.initialize(); + if (hasArrays) + { + if (!arrAccessVars.empty() && !arrRange.empty()) + { + af.initialize(lf.getVars(), arrCands, arrAccessVars, arrRange); + initialized++; + } + } + initialized++; + } - if (!lcs.empty()) lcs.normalizePlus(); - if (!bcs.empty()) bcs.normalizeOr(); + Sampl& exprToSampl(Expr ex) + { + samples.push_back(Sampl()); + Bdisj& bcs = samples.back().b_part; + LAdisj& lcs = samples.back().l_part; - return samples.back(); - } + bf.exprToBdisj(ex, bcs); + lf.exprToLAdisj(ex, lcs); - Expr sampleToExpr(Sampl& s) - { - if (s.l_part.arity == 0 && s.b_part.arity == 0) - return NULL; - if (s.l_part.arity == 0) - return bf.toExpr(s.b_part); - if (s.b_part.arity == 0) - return lf.toExpr(s.l_part); + if (!lcs.empty()) lcs.normalizePlus(); + if (!bcs.empty()) bcs.normalizeOr(); - return mk(bf.toExpr(s.b_part), lf.toExpr(s.l_part)); - } + return samples.back(); + } - void calculateStatistics(bool freqs, bool addepsilon) - { - int maxArity = 0; - set orArities; - - if (lf.getVars().size() > 0 && samples.size() == 0) - { - // artificially add one default sample in case there is nothing here - // TODO: find a better solution - exprToSampl (mk(lf.getVars()[0], mkTerm (mpz_class (0), m_efac))); - } - - for (auto &s : samples) - { - maxArity = max (maxArity, s.arity()); - orArities.insert(s.arity()); - orAritiesDensity[s.arity()] ++; - } - - for (int i = 0; i < maxArity; i++) - { - if (orAritiesDensity[i] == 0) - orArities.insert(i); - } - - lf.initDensities(orArities); - bf.initDensities(); - - for (auto &s : samples) - { - LAdisj& l = s.l_part; - Bdisj& b = s.b_part; - if (!l.empty()) + Expr sampleToExpr(Sampl& s) { - lf.calculateStatistics(l, s.arity(), freqs, addepsilon); + if (s.l_part.arity == 0 && s.b_part.arity == 0) + return NULL; + if (s.l_part.arity == 0) + return bf.toExpr(s.b_part); + if (s.b_part.arity == 0) + return lf.toExpr(s.l_part); + + return mk(bf.toExpr(s.b_part), lf.toExpr(s.l_part)); } - if (!b.empty()) + + void calculateStatistics(bool freqs, bool addepsilon) { - bf.calculateStatistics(b, freqs); - hasBooleanComb[1]++; + int maxArity = 0; + set orArities; + + if (lf.getVars().size() > 0 && samples.size() == 0) + { + // artificially add one default sample in case there is nothing here + // TODO: find a better solution + exprToSampl (mk(lf.getVars()[0], mkTerm (mpz_class (0), m_efac))); + } + + for (auto &s : samples) + { + maxArity = max (maxArity, s.arity()); + orArities.insert(s.arity()); + orAritiesDensity[s.arity()] ++; + } + + for (int i = 0; i < maxArity; i++) + { + if (orAritiesDensity[i] == 0) + orArities.insert(i); + } + + lf.initDensities(orArities); + bf.initDensities(); + + for (auto &s : samples) + { + LAdisj& l = s.l_part; + Bdisj& b = s.b_part; + if (!l.empty()) + { + lf.calculateStatistics(l, s.arity(), freqs, addepsilon); + } + if (!b.empty()) + { + bf.calculateStatistics(b, freqs); + hasBooleanComb[1]++; + } + else + { + // frequency of empty bool combinations + hasBooleanComb[0]++; + } + } + + // now, stabilization: + + if (!freqs) + { + for (auto & ar : orAritiesDensity) + { + ar.second = 1; + } + } + + bf.stabilizeDensities(addepsilon, freqs); + + for (auto & ar : orAritiesDensity) + { + lf.stabilizeDensities(ar.first, addepsilon, freqs); + } } - else + + Expr getFreshCandidate(bool arrSimpl = true) { - // frequency of empty bool combinations - hasBooleanComb[0]++; + // for now, if a CHC system has arrays, we try candidates only with array + // in the future, we will need arithmetic candidates as well + if (hasArrays && initialized == 2) + { + Expr cand = arrSimpl ? af.guessSimplTerm() : af.guessTerm(); + if (cand != NULL) + { + for (auto & v : lf.nonlinVars) cand = replaceAll(cand, v.second, v.first); + return cand; + } + } + + if (orAritiesDensity.empty()) return NULL; + + int arity = chooseByWeight(orAritiesDensity); + int hasBool = chooseByWeight(hasBooleanComb); + int hasLin = arity - hasBool; + samples.push_back(Sampl()); + Sampl& curCand = samples.back(); + + Expr lExpr; + if (hasLin > 0) + { + if (!lf.guessTerm(curCand.l_part, arity, hasLin)) return NULL; + curCand.l_part.normalizePlus(); + lExpr = lf.toExpr(curCand.l_part); + } + + Expr bExpr; + if (hasBool > 0) + { + if (!bf.guessTerm(curCand.b_part)) return NULL; + bExpr = bf.toExpr(curCand.b_part); + } + + if (hasBool > 0 && hasLin > 0) + { + return mk(bExpr, lExpr); + } + else if (hasBool > 0) + { + return bExpr; + } + else + { + return lExpr; + } } - } - // now, stabilization: - - if (!freqs) - { - for (auto & ar : orAritiesDensity) + void assignPrioritiesForLearned(Sampl& s) { - ar.second = 1; - } - } + if (s.b_part.empty()) + lf.assignPrioritiesForLearned(s.l_part); - bf.stabilizeDensities(addepsilon, freqs); + if (s.l_part.empty()) + bf.assignPrioritiesForBlocked(s.b_part); + } - for (auto & ar : orAritiesDensity) - { - lf.stabilizeDensities(ar.first, addepsilon, freqs); - } - } + void assignPrioritiesForFailed(Sampl& s) + { + if (s.b_part.empty()) + lf.assignPrioritiesForFailed(s.l_part); - Expr getFreshCandidate(bool arrSimpl = true) - { - // for now, if a CHC system has arrays, we try candidates only with array - // in the future, we will need arithmetic candidates as well - if (hasArrays && initilized) - { - Expr cand = arrSimpl ? af.guessSimplTerm() : af.guessTerm(); - for (auto & v : lf.nonlinVars) cand = replaceAll(cand, v.second, v.first); - return cand; - } - - int arity = chooseByWeight(orAritiesDensity); - int hasBool = chooseByWeight(hasBooleanComb); - int hasLin = arity - hasBool; - samples.push_back(Sampl()); - Sampl& curCand = samples.back(); - - Expr lExpr; - if (hasLin > 0) - { - if (!lf.guessTerm(curCand.l_part, hasLin)) return NULL; - curCand.l_part.normalizePlus(); - lExpr = lf.toExpr(curCand.l_part); - } - - Expr bExpr; - if (hasBool > 0) - { - if (!bf.guessTerm(curCand.b_part)) return NULL; - bExpr = bf.toExpr(curCand.b_part); - } - - if (hasBool > 0 && hasLin > 0) - { - return mk(bExpr, lExpr); - } - else if (hasBool > 0) - { - return bExpr; - } - else - { - return lExpr; - } - } - - void assignPrioritiesForLearned(Sampl& s) - { - if (s.b_part.empty()) - lf.assignPrioritiesForLearned(s.l_part); + if (s.l_part.empty()) + bf.assignPrioritiesForBlocked(s.b_part); + } - if (s.l_part.empty()) - bf.assignPrioritiesForBlocked(s.b_part); - } + void assignPrioritiesForBlocked(Sampl& s) + { + if (s.b_part.empty()) + lf.assignPrioritiesForBlocked(s.l_part); - void assignPrioritiesForFailed(Sampl& s) - { - if (s.b_part.empty()) - lf.assignPrioritiesForFailed(s.l_part); + if (s.l_part.empty()) + bf.assignPrioritiesForBlocked(s.b_part); + } - if (s.l_part.empty()) - bf.assignPrioritiesForBlocked(s.b_part); - } + void assignPrioritiesForLearned() + { + assignPrioritiesForLearned(samples.back()); + } - void assignPrioritiesForBlocked(Sampl& s) - { - if (s.b_part.empty()) - lf.assignPrioritiesForBlocked(s.l_part); + void assignPrioritiesForFailed() + { + assignPrioritiesForFailed(samples.back()); + } - if (s.l_part.empty()) - bf.assignPrioritiesForBlocked(s.b_part); - } + void assignPrioritiesForBlocked() + { + assignPrioritiesForBlocked(samples.back()); + } - void assignPrioritiesForLearned() - { - assignPrioritiesForLearned(samples.back()); - } + void printStatistics() + { + for (auto &a : orAritiesDensity) + { + outs() << "OR arity density: " << a.first << " |--> " << a.second << "\n"; + } - void assignPrioritiesForFailed() - { - assignPrioritiesForFailed(samples.back()); - } + bf.printCodeStatistics(); - void assignPrioritiesForBlocked() - { - assignPrioritiesForBlocked(samples.back()); - } + if (lf.getConsts().size() > 0) + { + outs() << "\nInt consts:\n"; + for (auto &form: lf.getConsts()) outs() << lexical_cast(form) << ", "; + outs() << "\b\b \n"; - void printStatistics() - { - for (auto &a : orAritiesDensity) - { - outs() << "OR arity density: " << a.first << " |--> " << a.second << "\n"; - } - - bf.printCodeStatistics(); - - if (lf.getConsts().size() > 0) - { - outs() << "\nInt consts:\n"; - for (auto &form: lf.getConsts()) outs() << form << ", "; - outs() << "\b\b \n"; - - for (auto &ar : orAritiesDensity) lf.printCodeStatistics(ar.first); - } - } - }; + for (auto &ar : orAritiesDensity) lf.printCodeStatistics(ar.first); + } + } + }; } #endif diff --git a/include/sampl/SeedMiner.hpp b/include/sampl/SeedMiner.hpp index 27631066d..becb3065c 100644 --- a/include/sampl/SeedMiner.hpp +++ b/include/sampl/SeedMiner.hpp @@ -9,404 +9,383 @@ using namespace boost; namespace ufo { - class SeedMiner - { + class SeedMiner + { public: - // for arrays - ExprSet arrCands; - ExprSet arrSelects; - ExprSet arrIterRanges; - ExprSet arrAccessVars; + // for arrays + ExprSet arrCands; + ExprSet arrSelects; + ExprSet arrIterRanges; + ExprSet arrAccessVars; + ExprSet arrFs; - ExprSet candidates; - set intConsts; - set intCoefs; + ExprSet candidates; + set intConsts; + set intCoefs; - HornRuleExt& hr; - Expr invRel; - map& invVars; - ExprMap& extraVars; + HornRuleExt& hr; + Expr invRel; + map& invVars; + ExprMap& extraVars; - ExprFactory &m_efac; + ExprFactory &m_efac; - SeedMiner(HornRuleExt& r, Expr& d, map& v, ExprMap& e) : - hr(r), invRel(d), invVars(v), extraVars(e), m_efac(d->getFactory()) {}; + SeedMiner(HornRuleExt& r, Expr& d, map& v, ExprMap& e) : + hr(r), invRel(d), invVars(v), extraVars(e), m_efac(d->getFactory()) {}; - void getArrRange (Expr tmpl) - { - // keep using this method for a while; to replace by something smarter - ExprSet dsjs; - ExprSet tmp; - getDisj(tmpl, dsjs); - ExprVector invAndIterVarsAll; - for (auto & a : invVars) invAndIterVarsAll.push_back(a.second); - - for (auto dsj : dsjs) - { - ExprSet se; - filter (dsj, bind::IsSelect (), inserter(se, se.begin())); - if (se.size() == 0) + void getArrRange (Expr tmpl) { - tmp.insert(mkNeg(dsj)); - continue; - } - - for (auto & a : se) - { - Expr var = a->right(); - if (isOpX(var)) - { - string varName = "_FH_tmp_iter_" + lexical_cast(var); - Expr newVar = bind::intConst(mkTerm (varName, m_efac)); - tmp.insert(mk(newVar, var)); - var = newVar; - } - if (bind::isIntConst(var) && find(invAndIterVarsAll.begin(), - invAndIterVarsAll.end(), var) == invAndIterVarsAll.end()) - { - arrAccessVars.insert(var); - if (find(invAndIterVarsAll.begin(), invAndIterVarsAll.end(), - var) == invAndIterVarsAll.end()) - invAndIterVarsAll.push_back(var); - } - } - } - - for (auto & e : tmp) - { - if (emptyIntersect(e, arrAccessVars)) continue; - ExprSet rangeTmp; - getConj(convertToGEandGT(e), rangeTmp); - for (auto & a : rangeTmp) arrIterRanges.insert(normalizeDisj(a, invAndIterVarsAll)); - } - } - - Expr rename(Expr cand) - { - for (int i = 0; i < hr.dstVars.size(); i++) - { - cand = replaceAll(cand, hr.dstVars[i], invVars[i]); - } - return cand; - } - - void addArrCand (Expr tmpl) - { - ExprSet dsjs; - ExprSet newDsjs; - getDisj(rename(tmpl), dsjs); - - for (auto dsj : dsjs) - { - ExprSet se; - filter (dsj, bind::IsSelect (), inserter(se, se.begin())); - if (se.size() == 0) continue; - - ExprVector invAndIterVars; - for (auto & a : invVars) invAndIterVars.push_back(a.second); - - for (auto & a : se) - { - if (isOpX(a->first()) || - isOpX(a->first())) - { - // FIXME: should not fall here - return; - } - Expr cand = rename(a); - arrSelects.insert(cand); - unique_push_back(cand, invAndIterVars); - - ExprSet vrs; - filter (cand, bind::IsConst(), std::inserter (vrs, vrs.begin ())); - for (auto & v : vrs) unique_push_back(v, invAndIterVars); - } + // keep using this method for a while; to replace by something smarter + ExprSet dsjs; + ExprSet tmp; + getDisj(tmpl, dsjs); + ExprVector invAndIterVarsAll; + for (auto & a : invVars) invAndIterVarsAll.push_back(a.second); + + for (auto dsj : dsjs) + { + ExprSet se; + filter (dsj, bind::IsSelect (), inserter(se, se.begin())); + if (se.size() == 0) + { + tmp.insert(mkNeg(dsj)); + continue; + } + + for (auto & a : se) + { + Expr var = a->right(); + if (isOpX(var)) + { + string varName = "_FH_tmp_iter_" + lexical_cast(var); + Expr newVar = bind::intConst(mkTerm (varName, m_efac)); + tmp.insert(mk(newVar, var)); + var = newVar; + } + if (bind::isIntConst(var) && find(invAndIterVarsAll.begin(), + invAndIterVarsAll.end(), var) == invAndIterVarsAll.end()) + { + arrAccessVars.insert(var); + if (find(invAndIterVarsAll.begin(), invAndIterVarsAll.end(), + var) == invAndIterVarsAll.end()) + invAndIterVarsAll.push_back(var); + } + } + } - ExprSet arrCandsTmp; - getConj(convertToGEandGT(dsj), arrCandsTmp); - for (auto & a : arrCandsTmp) - { - Expr tmpl = findNonlinAndRewrite(a, invAndIterVars, extraVars); - for (auto &b : extraVars) invAndIterVars.push_back(b.second); - Expr normalized = normalizeDisj(tmpl, invAndIterVars); - if (!containsOp(normalized)) continue; + + ExprSet vrs; + filter (normalized, bind::IsConst(), std::inserter (vrs, vrs.begin ())); + bool sanitized = true; + for (auto & b : vrs) + { + if (emptyIntersect(b, invAndIterVars)) + { + sanitized = false; + break; + } + } + if (sanitized) newDsjs.insert(normalized); + } + } - for (auto &v : actualVars) - { - int index = getVarIndex(v, vars); - if (index >= 0) - { - tmpl = replaceAll(tmpl, v, invVars[index]); + if (newDsjs.size() > 0) + { + Expr cand = disjoin(newDsjs, m_efac); + arrCands.insert(cand); + } } - } - - tmpl = findNonlinAndRewrite(tmpl, invVarsCstm, extraVars); - for (auto &a : extraVars) invVarsCstm.push_back(a.second); - tmpl = normalizeDisj(tmpl, invVarsCstm); - - if (!isOpX (tmpl) && !isOpX (tmpl)) - { - // get int constants from the normalized candidate - ExprSet intConstsE; - filter (tmpl, bind::IsHardIntConst(), std::inserter (intConstsE, intConstsE.begin ())); - for (auto &a : intConstsE) intConsts.insert(lexical_cast(a)); - if (getLinCombCoefs(tmpl, intCoefs)) candidates.insert(tmpl); - } - } - - void addSeed(Expr term) - { - if (containsOp(fla) || containsOp(fla)) +// { +// if (containsOp(fla) || containsOp(fla) || containsOp(fla)) +// { +// Expr term2 = unfoldITE(rewriteSelectStore(unfoldITE(fla))); +// if (fla == term2) +// return; +// else // mutual recursive call: extra processing for arrays +// obtainSeeds(term2); +// } +// else +// addArrCand(fla); +// } +// +// ExprSet actualVars; +// filter (fla, bind::IsConst(), std::inserter (actualVars, actualVars.begin ())); +// +// fla = rewriteMultAdd(fla); +// +// bool locals = false; +// if (actualVars.size() == 0 || isTautology(fla)) return; +// +// // split each fla to two seeds (for srcVars and dstVars) +// +// if (hr.srcRelation == invRel) +// { +// addSeedHlp(fla, hr.srcVars, actualVars); +// } +// +// if (hr.dstRelation == invRel) +// { +// addSeedHlp(fla, hr.dstVars, actualVars); +// } +// } + +// void obtainSeeds(Expr fla) +// { +// if (bind::isBoolConst(fla)) +// { +// addSeed(fla); +// } +// else if (isOpX(fla)) +// { +// Expr negged = fla->last(); +// if (bind::isBoolConst(negged)) +// addSeed(fla); +// else if (isOp(negged)) +// obtainSeeds(mkNeg(negged)); +// else +// obtainSeeds(negged); +// } +// else if (isOpX(fla)) +// { +// if (containsOp(fla)) +// { +// Expr term2 = convertToGEandGT(rewriteOrAnd(fla)); +// obtainSeeds(term2); +// } +// else +// { +// Expr simplified = simplifyArithmDisjunctions(fla); +// addSeed(convertToGEandGT(simplified)); +// } +// } +// else if (isOpX(fla)) +// { +// for (int i = 0; i < fla->arity(); i++) +// { +// obtainSeeds(fla->arg(i)); +// } +// } +// else if (isOpX(fla)) +// { +// Expr term2 = mk(mkNeg(fla->left()), fla->right()); +// obtainSeeds(term2); +// } +// else if (isOpX(fla) || isOpX(fla)) +// { +// addSeed(fla); // get rid of ITEs first +// } +// else if (isOp(fla)) +// { +// if (containsOp(fla)) addSeed(fla); +// else +// { +// Expr tmp = convertToGEandGT(fla); +// if (tmp != fla) +// obtainSeeds(tmp); +// else +// { +// errs () << "COULD NOT SEEDMINE: " << *tmp << "\n"; +// return; +// } +// } +// } +// } + +// void coreProcess(Expr e) +// { +// e = rewriteBoolEq(e); +// e = moveInsideITE(e); +// e = unfoldITE(e); +// e = convertToGEandGT(e); +// e = rewriteNegAnd(e); +// obtainSeeds(e); +// } + +// void analyzeExtra(Expr extra) +// { +// Expr e = propagateEqualities(extra); +// e = rewriteSelectStore(e); +// coreProcess(e); +// } + +// void analyzeExtras(ExprSet& extra) +// { +// for (auto &cnj : extra) analyzeExtra(cnj); +// } + +// void analyzeCode() +// { +// if (containsOp(hr.body) || containsOp(hr.body)) return; +// // todo: support +// +// Expr body = hr.body; +// +// // get a set of all access functions before any transformation +// // since some sensitive information can be lost: +// retrieveAccFuns(body, arrFs); +// +// ExprSet quantified; +// for (auto &v : hr.locVars) quantified.insert(v); +// if (hr.srcRelation != invRel) for (auto &v : hr.srcVars) quantified.insert(v); +// if (hr.dstRelation != invRel) for (auto &v : hr.dstVars) quantified.insert(v); +// +// if (hr.srcRelation == invRel) +// for (int i = 0; i < hr.srcVars.size(); i++) +// if (invVars[i] == NULL) quantified.insert(hr.srcVars[i]); +// +// if (hr.dstRelation == invRel) +// for (int i = 0; i < hr.dstVars.size(); i++) +// if (invVars[i] == NULL) quantified.insert(hr.dstVars[i]); +// +// body = rewriteSelectStore(body); +// body = eliminateQuantifiers(body, quantified); +// body = weakenForVars(body, quantified); +// +// // get seeds and normalize +// ExprSet conds; +// retrieveConds(body, conds); +// for (auto & a : conds) obtainSeeds(a); +// +// // for the query: add a negation of the entire non-recursive part: +// if (hr.isQuery) +// { +// Expr massaged = mkNeg(propagateEqualities(hr.body)); +// coreProcess(massaged); +// getArrRange(massaged); +// } +// else if (hr.isFact) +// { +// Expr e = unfoldITE(body); +// e = propagateEqualities(e); +// coreProcess(e); +// } +// else +// { +// // hr.isInductive +// Expr e = unfoldITE(body); +// ExprSet deltas; // some magic here for enhancing the grammar +// retrieveDeltas(e, hr.srcVars, hr.dstVars, deltas); +// for (auto & a : deltas) obtainSeeds(a); +// ExprVector vars2elim; +// for (int i = 0; i < hr.srcVars.size(); i++) +// if (containsOp(hr.srcVars[i])) +// vars2elim.push_back(hr.srcVars[i]); +// else +// vars2elim.push_back(hr.dstVars[i]); +// e = eliminateQuantifiersRepl(e, vars2elim); +// e = simplifyBool(e); +// e = rewriteBoolEq(e); +// e = convertToGEandGT(e); +// e = rewriteNegAnd(e); +// obtainSeeds(e); +// } +// } + }; } #endif diff --git a/include/ufo/Expr.hpp b/include/ufo/Expr.hpp index 206ff9898..c262cf1aa 100644 --- a/include/ufo/Expr.hpp +++ b/include/ufo/Expr.hpp @@ -67,3449 +67,3475 @@ DM-0002198 namespace expr { - /* create a namespace op */ - namespace op {} - - using namespace expr::op; - - class ENode; - class ExprFactory; - class ExprFactoryAllocator; - - typedef boost::intrusive_ptr Expr; - typedef std::set ExprSet; - typedef std::vector ExprVector; - typedef std::pair ExprPair; - typedef std::map ExprMap; - - /* Helper functions to convert from different wrappers over - expressions into a pointer to an expression node */ - inline ENode* eptr (ENode *p) { return p; } - inline const ENode* eptr (const ENode *p) { return p; } - inline ENode* eptr (ENode &p) { return &p; } - inline const ENode* eptr (const ENode &p) { return &p; } - inline ENode* eptr (const Expr &e) { return e.get (); } - inline ENode* eptr (Expr &e) { return e.get (); } - //inline ENode* eptr (Expr e) { return e.get (); } - - class Operator; - - /* An operator (a.k.a. a tag) of an expression node */ - class Operator - { - public: - virtual ~Operator () {}; - - /** Print an expression rooted at the operator - OS -- the output strream - args -- the arguments of the operator - depth -- indentation level for any new line - brkt -- whether the context in which the operator is printed - -- might be ambiguous and brakets might be required - **/ - virtual void Print (std::ostream &OS, - const std::vector &args, - int depth = 0, - bool brkt = true) const = 0; - virtual bool operator== (const Operator& rhs) const = 0; - virtual bool operator< (const Operator& rhs) const = 0; - virtual size_t hash () const = 0; - virtual bool isMutable () const { return false; } - /* Returns a heap-allocated clone of this */ - virtual Operator* clone (ExprFactoryAllocator &allocator) const = 0; - }; - - - inline std::ostream &operator<<(std::ostream &OS, const Operator &V) { - std::vector x; - V.Print (OS, x); - return OS; - } - - - /* An expression node (a.k.a. an enode). A pointer into an - expression tree (or DAG) */ - class ENode - { - private: - // // -- no default constructor - ENode () : id(0), count(0), fac(NULL) {} - // // -- no copy constructor - ENode (const ENode &) : count(0), fac(NULL) {} - protected: - /** unique identifier of this expression node */ - unsigned int id; - /** reference counter */ - unsigned int count; - - ExprFactory *fac; - std::vector args; - - std::shared_ptr oper; - - - void Deref () { if (count > 0) count--; } - - - /** assigns a unique id to the node */ - void setId (unsigned int v) { id = v; } - - - public: - ENode (ExprFactory &f, const Operator &o); - ~ENode(); - - ExprFactory& getFactory () const {return *fac; } - ExprFactory& efac () const { return getFactory (); } - - /** returns the unique id of this expression */ - unsigned int getId () const { return id; } - - void Ref () { count++; } - bool isGarbage () const { return count == 0; } - bool isMutable () const { return oper->isMutable (); } - - unsigned int use_count () { return count; } - - ENode* operator[] (size_t p) { return arg (p); } - ENode* arg (size_t p) { return args [p]; } - - ENode* left () - { return (args.size () > 0) ? args [0] : NULL; } - - ENode* right () - { return (args.size () > 1) ? args [1] : NULL; } - - ENode *first () { return left (); } - ENode *last () - { return args.size () > 0 ? args [args.size () - 1] : NULL; } - - - typedef std::vector::const_iterator args_iterator; - - bool args_empty () const { return args.empty () ; } - args_iterator args_begin () const { return args.begin (); } - args_iterator args_end () const { return args.end (); } + /* create a namespace op */ + namespace op {} + + using namespace expr::op; + + class ENode; + class ExprFactory; + class ExprFactoryAllocator; + + typedef boost::intrusive_ptr Expr; + typedef std::set ExprSet; + typedef std::vector ExprVector; + typedef std::pair ExprPair; + typedef std::map ExprMap; + + /* Helper functions to convert from different wrappers over + expressions into a pointer to an expression node */ + inline ENode* eptr (ENode *p) { return p; } + inline const ENode* eptr (const ENode *p) { return p; } + inline ENode* eptr (ENode &p) { return &p; } + inline const ENode* eptr (const ENode &p) { return &p; } + inline ENode* eptr (const Expr &e) { return e.get (); } + inline ENode* eptr (Expr &e) { return e.get (); } + //inline ENode* eptr (Expr e) { return e.get (); } + + class Operator; + + /* An operator (a.k.a. a tag) of an expression node */ + class Operator + { + public: + virtual ~Operator () {}; + + /** Print an expression rooted at the operator + OS -- the output strream + args -- the arguments of the operator + depth -- indentation level for any new line + brkt -- whether the context in which the operator is printed + -- might be ambiguous and brakets might be required + **/ + virtual void Print (std::ostream &OS, + const std::vector &args, + int depth = 0, + bool brkt = true) const = 0; + virtual bool operator== (const Operator& rhs) const = 0; + virtual bool operator< (const Operator& rhs) const = 0; + virtual size_t hash () const = 0; + virtual bool isMutable () const { return false; } + /* Returns a heap-allocated clone of this */ + virtual Operator* clone (ExprFactoryAllocator &allocator) const = 0; + }; - template - void renew_args (iterator b, iterator e); - - void push_back (ENode* a) { args.push_back (a); a->Ref (); } - - size_t arity () const { return args.size (); } - - const Operator& op () const { return *oper; } - void Print (std::ostream &OS, int depth = 0, bool brkt = true) const - { oper->Print (OS, args, depth, brkt); } - - friend struct LessENode; - friend class ExprFactory; - friend struct std::less; - }; - - - - inline std::ostream &operator<<(std::ostream &OS, const ENode &V) { - V.Print(OS); - return OS; - } - inline std::ostream &operator<<(std::ostream &OS, const ENode *v) - { - if (v == NULL) OS << "NULL"; - else OS << *v; - return OS; - } - - struct ENodeUniqueHash - { - std::size_t operator() (const ENode *e) const - { - size_t res = e->op ().hash (); - - size_t a = e->arity (); - if (a == 0) return res; - - ENode::args_iterator it = e->args_begin (); - if (a >= 1) - boost::hash_combine (res, *it); - - if (a >= 2) - boost::hash_combine (res, - boost::hash_range (it, e->args_end ())); - - return res; - - // if (a == 2) - // { - // boost::hash_combine (res, *it); - // ++it; - // boost::hash_combine (res, *it); - // return res; - // } - // if (a == 3) - // { - // boost::hash_combine (res, *it); - // it++; - // boost::hash_combine (res, *it); - // it++; - // boost::hash_combine (res, *it); - // return res; - // } - - // // -- n-arry with more than 3 children - // boost::hash_combine (res, - // boost::hash_range (e->args_begin (), - // e->args_end ())); - // return res; - + + inline std::ostream &operator<<(std::ostream &OS, const Operator &V) { + std::vector x; + V.Print (OS, x); + return OS; } - }; - - struct ENodeUniqueEqual - { - bool operator () (ENode* const &e1, ENode* const &e2) const - { - // -- same type - if (typeid (e1->op ()) == typeid (e2->op ())) - // -- same number of children - if (e1->arity () == e2->arity ()) - // -- operators (if have data) are equal - if (e1->op () == e2->op ()) - // -- children are equal as pointers - return std::equal (e1->args_begin (), - e1->args_end (), - e2->args_begin ()); - return false; + + + /* An expression node (a.k.a. an enode). A pointer into an + expression tree (or DAG) */ + class ENode + { + private: + // // -- no default constructor + ENode () : id(0), count(0), fac(NULL) {} + // // -- no copy constructor + ENode (const ENode &) : count(0), fac(NULL) {} + protected: + /** unique identifier of this expression node */ + unsigned int id; + /** reference counter */ + unsigned int count; + + ExprFactory *fac; + std::vector args; + + std::shared_ptr oper; + + + void Deref () { if (count > 0) count--; } + + + /** assigns a unique id to the node */ + void setId (unsigned int v) { id = v; } + + + public: + ENode (ExprFactory &f, const Operator &o); + ~ENode(); + + ExprFactory& getFactory () const {return *fac; } + ExprFactory& efac () const { return getFactory (); } + + /** returns the unique id of this expression */ + unsigned int getId () const { return id; } + + void Ref () { count++; } + bool isGarbage () const { return count == 0; } + bool isMutable () const { return oper->isMutable (); } + + unsigned int use_count () { return count; } + + ENode* operator[] (size_t p) { return arg (p); } + ENode* arg (size_t p) { return args [p]; } + + ENode* left () + { return (args.size () > 0) ? args [0] : NULL; } + + ENode* right () + { return (args.size () > 1) ? args [1] : NULL; } + + ENode *first () { return left (); } + ENode *last () + { return args.size () > 0 ? args [args.size () - 1] : NULL; } + + + typedef std::vector::const_iterator args_iterator; + + bool args_empty () const { return args.empty () ; } + args_iterator args_begin () const { return args.begin (); } + args_iterator args_end () const { return args.end (); } + + template + void renew_args (iterator b, iterator e); + + void push_back (ENode* a) { args.push_back (a); a->Ref (); } + + size_t arity () const { return args.size (); } + + const Operator& op () const { return *oper; } + void Print (std::ostream &OS, int depth = 0, bool brkt = true) const + { oper->Print (OS, args, depth, brkt); } + + friend struct LessENode; + friend class ExprFactory; + friend struct std::less; + }; + + + + inline std::ostream &operator<<(std::ostream &OS, const ENode &V) { + V.Print(OS); + return OS; } - }; - - - struct LessENode - { - bool operator() (ENode* e1, ENode* e2) - { - if (typeid (e1->op ()) == typeid (e2->op ())) - { - if (e1->op () == e2->op ()) - return lexicographical_compare (e1->args_begin (), - e1->args_end (), - e2->args_begin (), - e2->args_end ()); - else - return e1->op () < e2->op (); - } - - // -- when all fails, order by type - return typeid (e1->op ()).before (typeid (e2->op ())); + inline std::ostream &operator<<(std::ostream &OS, const ENode *v) + { + if (v == NULL) OS << "NULL"; + else OS << *v; + return OS; } - }; - - - /** - * A type erasure of a cache - */ - struct CacheStub - { - /** true if the stub own the cahce pointer by p */ - virtual bool owns (const void *p) = 0; - /** erases val from the underlying cache */ - virtual void erase (ENode *val) = 0; - virtual ~CacheStub () { } - }; - - - template - struct CacheStubTmpl : CacheStub - { - C &cache; - - CacheStubTmpl (C &c): cache(c) {}; - - virtual bool owns (const void *p) { return p == static_cast (&cache); } - virtual void erase (ENode *val) { cache.erase (val); } - }; - - - - struct EFADeleter - { - ExprFactoryAllocator &m_efa; - EFADeleter (ExprFactoryAllocator &efa) : m_efa (efa) {} - void operator() (void *p); - }; - - - class ExprFactoryAllocator : boost::noncopyable - { - private: - /** pool for tiny objects */ - boost::pool<> tiny; - /** pool for small objects */ - boost::pool<> small; - - public: - ExprFactoryAllocator () : tiny(8, 65536), small (64, 65536) {}; - - void *allocate (size_t n); - void free (void *block); - - EFADeleter get_deleter (); - }; - - - - class ExprFactory : boost::noncopyable - { - protected: + + struct ENodeUniqueHash + { + std::size_t operator() (const ENode *e) const + { + size_t res = e->op ().hash (); + + size_t a = e->arity (); + if (a == 0) return res; + + ENode::args_iterator it = e->args_begin (); + if (a >= 1) + boost::hash_combine (res, *it); + + if (a >= 2) + boost::hash_combine (res, + boost::hash_range (it, e->args_end ())); + + return res; + + // if (a == 2) + // { + // boost::hash_combine (res, *it); + // ++it; + // boost::hash_combine (res, *it); + // return res; + // } + // if (a == 3) + // { + // boost::hash_combine (res, *it); + // it++; + // boost::hash_combine (res, *it); + // it++; + // boost::hash_combine (res, *it); + // return res; + // } + + // // -- n-arry with more than 3 children + // boost::hash_combine (res, + // boost::hash_range (e->args_begin (), + // e->args_end ())); + // return res; + + } + }; + + struct ENodeUniqueEqual + { + bool operator () (ENode* const &e1, ENode* const &e2) const + { + // -- same type + if (typeid (e1->op ()) == typeid (e2->op ())) + // -- same number of children + if (e1->arity () == e2->arity ()) + // -- operators (if have data) are equal + if (e1->op () == e2->op ()) + // -- children are equal as pointers + return std::equal (e1->args_begin (), + e1->args_end (), + e2->args_begin ()); + return false; + } + }; + + + struct LessENode + { + bool operator() (ENode* e1, ENode* e2) + { + if (typeid (e1->op ()) == typeid (e2->op ())) + { + if (e1->op () == e2->op ()) + return lexicographical_compare (e1->args_begin (), + e1->args_end (), + e2->args_begin (), + e2->args_end ()); + else + return e1->op () < e2->op (); + } + + // -- when all fails, order by type + return typeid (e1->op ()).before (typeid (e2->op ())); + } + }; + + + /** + * A type erasure of a cache + */ + struct CacheStub + { + /** true if the stub own the cahce pointer by p */ + virtual bool owns (const void *p) = 0; + /** erases val from the underlying cache */ + virtual void erase (ENode *val) = 0; + virtual ~CacheStub () { } + }; + + + template + struct CacheStubTmpl : CacheStub + { + C &cache; + + CacheStubTmpl (C &c): cache(c) {}; + + virtual bool owns (const void *p) { return p == static_cast (&cache); } + virtual void erase (ENode *val) { cache.erase (val); } + }; + + + + struct EFADeleter + { + ExprFactoryAllocator &m_efa; + EFADeleter (ExprFactoryAllocator &efa) : m_efa (efa) {} + void operator() (void *p); + }; + + + class ExprFactoryAllocator : boost::noncopyable + { + private: + /** pool for tiny objects */ + boost::pool<> tiny; + /** pool for small objects */ + boost::pool<> small; + + public: + ExprFactoryAllocator () : tiny(8, 65536), small (64, 65536) {}; + + void *allocate (size_t n); + void free (void *block); + + EFADeleter get_deleter (); + }; + + + + class ExprFactory : boost::noncopyable + { + protected: #define UNORDERED_SET_UNIQUE_TABLE 1 #ifndef UNORDERED_SET_UNIQUE_TABLE - // -- type of unique table entry + // -- type of unique table entry typedef std::set unique_entry_type; #else - typedef std::unordered_set unique_entry_type; + typedef std::unordered_set unique_entry_type; #endif - typedef const char* unique_key_type; - // -- type of the unique table - typedef std::map unique_type; - - typedef boost::ptr_vector caches_type; - - - /** pool allocator */ - ExprFactoryAllocator allocator; - - /** list of registered caches */ - caches_type caches; - - // -- unique table - unique_type unique; - - /** counter for assigning unique ids*/ - unsigned int idCount; - - /** returns a unique id > 0 */ - unsigned int uniqueId () { return ++idCount; } - - /** - * Remove value from unique table - */ - void Remove (ENode *val) - { - clearCaches (val); - if (!val->isMutable ()) - { - unique_type::iterator it = unique.find (typeid (val->op ()).name ()); - // -- can only remove things that have been inserted before - assert (it != unique.end ()); - it->second.erase (val); - if (it->second.empty ()) unique.erase (it); - } - - freeNode (val); + typedef const char* unique_key_type; + // -- type of the unique table + typedef std::map unique_type; + + typedef boost::ptr_vector caches_type; + + + /** pool allocator */ + ExprFactoryAllocator allocator; + + /** list of registered caches */ + caches_type caches; + + // -- unique table + unique_type unique; + + /** counter for assigning unique ids*/ + unsigned int idCount; + + /** returns a unique id > 0 */ + unsigned int uniqueId () { return ++idCount; } + + /** + * Remove value from unique table + */ + void Remove (ENode *val) + { + clearCaches (val); + if (!val->isMutable ()) + { + unique_type::iterator it = unique.find (typeid (val->op ()).name ()); + // -- can only remove things that have been inserted before + assert (it != unique.end ()); + it->second.erase (val); + if (it->second.empty ()) unique.erase (it); + } + + freeNode (val); + } + + /** + * Clear val from all registered caches + */ + void clearCaches (ENode *val) { for (CacheStub &c : caches) c.erase (val); } + + + + /** + * Return the canonical (unique) representetive of the input + */ + ENode* canonize (ENode* v) + { + if (v->isMutable ()) + { + v->setId (uniqueId ()); + return v; + } + + + std::pair x = + unique [typeid (v->op ()).name ()].insert (v); + if (x.second) + { + v->setId (uniqueId ()); + return v; + } + else + { + freeNode (v); + return *x.first; + } + } + + ENode* mkExpr (const Operator &op) + { return canonize (allocNode (op)); } + + template + ENode* mkExpr (const Operator &op, etype e) + { + ENode* eVal = allocNode (op); + eVal->push_back (eptr (e)); + return canonize (eVal); + } + + /** binary */ + template + ENode* mkExpr (const Operator &op, + etype e1, + etype e2) + { + ENode* eVal = allocNode (op); + eVal->push_back (eptr (e1)); + eVal->push_back (eptr (e2)); + return canonize (eVal); + } + + /** ternary */ + template + ENode* mkExpr (const Operator &op, + etype e1, + etype e2, + etype e3) + { + ENode* eVal = allocNode (op); + eVal->push_back (eptr (e1)); + eVal->push_back (eptr (e2)); + eVal->push_back (eptr (e3)); + return canonize (eVal); + } + + /* n-ary + iterator ranges over cost ENode* + */ + template + ENode* mkNExpr (const Operator &op, + iterator begin, + iterator end) + { + ENode* eVal = allocNode (op); + for (; begin != end; ++begin) + eVal->push_back (eptr (*begin)); + return canonize (eVal); + } + + private: + + +#define FREE_LIST_MAX_SIZE 1024*4 + std::vector freeList; + void freeNode (ENode *n); + ENode *allocNode (const Operator &op); + + + + + public: + ExprFactory () : idCount(0) {} + + /** Derefernce a value */ + void Deref (ENode* val) + { + val->Deref (); + if (val->isGarbage ()) Remove (val); + } + + /** User functions */ + Expr mkTerm (const Operator &o) { return Expr (mkExpr (o)); } + Expr mkUnary (const Operator &o, Expr e) + { return Expr (mkExpr (o, e.get ())); } + Expr mkBin (const Operator &o, Expr e1, Expr e2) + { return Expr (mkExpr (o, e1.get (), e2.get ())); } + Expr mkTern (const Operator &o, Expr e1, Expr e2, + Expr e3) + { return Expr (mkExpr (o, e1.get (), e2.get (), e3.get ())); } + template + Expr mkNary (const Operator &o, iterator b, iterator e) + { return Expr (mkNExpr (o, b, e)); } + + template + Expr mkNary (const Operator &o, const Range &r) + { return mkNary (o, begin (r), end (r)); } + + + template + void registerCache (Cache &cache) + { + // -- to avoid double registration + unregisterCache (cache); + caches.push_back (static_cast (new CacheStubTmpl (cache))); + } + + template + bool unregisterCache (const Cache &cache) + { + const void *ptr = static_cast (&cache); + + for (caches_type::iterator it = caches.begin (), end = caches.end (); + it != end; ++it) + if (it->owns (ptr)) + { + caches.erase (it); + return true; + } + return false; + } + + friend class ENode; + }; + + inline ENode::ENode (ExprFactory &f, const Operator &o) : + count(0), fac(&f), + oper(o.clone (f.allocator), + f.allocator.get_deleter (), + boost::pool_allocator ()) {} +} + +inline void * operator new (size_t n, expr::ExprFactoryAllocator &alloc) +{ return alloc.allocate (n); } + +inline void operator delete (void *p, expr::ExprFactoryAllocator &alloc) +{ alloc.free (p); } + +namespace expr +{ + inline void ExprFactory::freeNode (ENode *n) + { + if (freeList.size () < FREE_LIST_MAX_SIZE) + { + for (ENode *a : n->args) Deref (a); + n->args.clear (); + n->oper.reset (); + + if (freeList.size () < FREE_LIST_MAX_SIZE) + { + assert (n->count == 0); + freeList.push_back (n); + return; + } + } + + operator delete (static_cast(n), allocator); + } + + inline ENode *ExprFactory::allocNode (const Operator &op) + { + if (freeList.empty ()) + return new(allocator) ENode (*this, op); + + ENode *res = freeList.back (); + freeList.pop_back (); + res->oper.reset (op.clone (allocator), + allocator.get_deleter (), + boost::pool_allocator ()); + assert (res->count == 0); + return res; + } + + + inline void *ExprFactoryAllocator::allocate (size_t n) + { + if (n <= tiny.get_requested_size ()) return tiny.malloc (); + else if (n <= small.get_requested_size ()) return small.malloc (); + + return static_cast (new char[n]); + } + + + inline void ExprFactoryAllocator::free (void *block) + { + if (tiny.is_from (block)) tiny.free (block); + else if (small.is_from (block)) small.free (block); + else delete [] static_cast (block); } - /** - * Clear val from all registered caches - */ - void clearCaches (ENode *val) { for (CacheStub &c : caches) c.erase (val); } - - + inline EFADeleter ExprFactoryAllocator::get_deleter () + { return EFADeleter (*this); } + + inline void EFADeleter::operator() (void *p) + { operator delete (p, m_efa); } + + template + struct TerminalTrait {}; + + template > + class Terminal : public Operator + { + protected: + T val; + public: + typedef T base_type; + typedef P terminal_type; + typedef Terminal this_type; + + Terminal (const base_type &v) : val(v) {} + + base_type get () const { return val; } + + this_type* clone (ExprFactoryAllocator &allocator) const + { return new (allocator) this_type (val); } + + + + void Print (std::ostream &OS, + const std::vector &args, + int depth = 0, + bool brkt = true) const + { + terminal_type::print (OS, val, depth, brkt); + } + + bool operator== (const this_type &rhs) const + { return terminal_type::equal_to (val, rhs.val); } + + bool operator< (const this_type &rhs) const + { return terminal_type::less (val, rhs.val); } + + bool operator== (const Operator& rhs) const + { + if (&rhs == this) return true; + + const this_type *prhs = dynamic_cast (&rhs); + if (prhs == NULL) return false; + return terminal_type::equal_to (val, prhs->val); + } + + bool operator< (const Operator& rhs) const + { + // x < x is false + if (&rhs == this) return false; + + const this_type *prhs = dynamic_cast (&rhs); + + return (prhs == NULL) ? + typeid(this_type).before (typeid (rhs)) : + terminal_type::less (val, prhs->val); + } + + size_t hash () const { return terminal_type::hash (val); } + + }; + + template<> struct TerminalTrait + { + static inline void print (std::ostream &OS, + const std::string &s, + int depth, bool brkt) + { OS << s; } + static inline bool less (const std::string &s1, const std::string &s2) + { return s1 < s2; } + static inline bool equal_to (const std::string &s1, const std::string &s2) + { return s1 == s2; } + static inline size_t hash (const std::string &s) + { + std::hash hasher; + return hasher (s); + } + + }; + + template<> struct TerminalTrait + { + static inline void print (std::ostream &OS, int s, int depth, bool brkt) + { OS << s; } + static inline bool less (const int &i1, const int &i2) + { return i1 < i2; } + static inline bool equal_to (int i1, int i2) + { return i1 == i2; } + static inline size_t hash (int i) + { + std::hash hasher; + return hasher (i); + } + }; + + template<> struct TerminalTrait + { + static inline void print (std::ostream &OS, unsigned int s, + int depth, bool brkt) + { OS << s; } + static inline bool less (const unsigned int &i1, const unsigned int &i2) + { return i1 < i2; } + static inline bool equal_to (unsigned int i1, unsigned int i2) + { return i1 == i2; } + static inline size_t hash (unsigned int i) + { + std::hash hasher; + return hasher (i); + } + }; + + template<> struct TerminalTrait + { + static inline void print (std::ostream &OS, + unsigned long s, int depth, bool brkt) + { OS << s; } + static inline bool less (const unsigned long &i1, const unsigned long &i2) + { return i1 < i2; } + static inline bool equal_to (unsigned long l1, unsigned long l2) + { + return l1 == l2; + } + static inline size_t hash (unsigned long i) + { + std::hash hasher; + return hasher (i); + } + }; + + + template <> struct TerminalTrait + { + static inline void print (std::ostream &OS, const mpz_class &v, + int depth, bool brkt) + { + /* print large numbers in hex + if (v >= 65535 || v <= -65535) + OS << std::hex << std::showbase; */ + + OS << v; + + OS << std::dec << std::noshowbase; + } + + static inline bool less(const mpz_class &v1, const mpz_class &v2) + { return v1 < v2; } + + static inline bool equal_to (const mpz_class &v1, const mpz_class &v2) + { return v1 == v2; } + + static inline size_t hash (const mpz_class &v) + { + std::string str = boost::lexical_cast (v); + std::hash hasher; + return hasher (str); + } + + + + + }; + + + template <> + struct TerminalTrait + { + static inline void print (std::ostream &OS, const mpq_class &v, + int depth, bool brkt) + { OS << v; } + + static inline bool less(const mpq_class &v1, const mpq_class &v2) + { return v1 < v2; } + + static inline bool equal_to (const mpq_class &v1, const mpq_class &v2) + { return v1 == v2; } + + static inline size_t hash (const mpq_class &v) + { + std::string str = boost::lexical_cast (v); + std::hash hasher; + return hasher (str); + } + }; + + + namespace op + { + typedef Terminal STRING; + typedef Terminal INT; + typedef Terminal UINT; + typedef Terminal ULONG; + + typedef Terminal MPQ; + typedef Terminal MPZ; + } + + namespace ps + { + inline std::ostream &space (std::ostream &OS, size_t c) + { + for (size_t i = 0; i < c; i++) OS << " "; + return OS; + } + + struct PREFIX + { + static inline void print (std::ostream &OS, + int depth, + bool brkt, + const std::string &name, + const std::vector &args) + { + if (args.size () >= 2) OS << "["; + if (args.size () == 1 && brkt) OS << "("; + + OS << name; + if (args.empty ()) return; + + if (args.size () == 1) + { + //OS << " "; + args [0]->Print (OS, depth + 2, true); + if (brkt) OS << ")"; + return; + } + + + for (std::vector::const_iterator it = args.begin (), + end = args.end (); it != end; ++it) + { + OS << " "; +// space (OS, depth + 2); + (*it)->Print (OS, depth + 2, false); + } + +// OS << "\n"; +// space (OS, depth); + OS << "]"; + } + }; + + + struct INFIX + { + static inline void print (std::ostream &OS, + int depth, + bool brkt, + const std::string &name, + const std::vector &args) + { + + if (args.size () != 2) + { + PREFIX::print (OS, depth, brkt, name, args); + return; + } + + if (brkt) OS << "("; + args[0]->Print (OS, depth, true); + OS << name; + args[1]->Print (OS, depth, true); + if (brkt) OS << ")"; + } + }; + + + + struct FUNCTIONAL + { + static inline void print (std::ostream &OS, + int depth, + bool brkt, + const std::string &name, + const std::vector &args) + { + OS << name << "("; + + + bool first = true; + for (std::vector::const_iterator it = args.begin (), + end = args.end (); it != end; ++it) + { + if (!first) OS << ", "; + (*it)->Print (OS, depth+2, false); + first = false; + } + + OS << ")"; + } + }; + + struct LISP + { + static inline void print (std::ostream &OS, + int depth, + bool brkt, + const std::string &name, + const std::vector &args) + { + OS << "(" << name << " "; + + bool first = true; + for (std::vector::const_iterator it = args.begin (), + end = args.end (); it != end; ++it) + { + if (!first) OS << " "; + (*it)->Print (OS, depth + 2, true); + first = false; + } + + OS << ")"; + } + }; + } + using namespace ps; + + + + // compare two operators based on their address + template + inline bool addrLT (const T &lhs, const Operator* rhs) + { + if (rhs == NULL || lhs == *rhs) return false; + + const T *prhs = dynamic_cast(rhs); + + if (prhs == NULL) + return typeid(T).before (typeid (*rhs)); + + return &lhs < rhs; + } + + + // compare two operators based on their types + inline bool typeLT (const Operator *lhs, const Operator* rhs) + { + if (lhs == NULL && rhs != NULL) return true; + if (lhs == NULL && rhs == NULL) return false; + + if (rhs == NULL || *lhs == *rhs) return false; + + if (typeid (*lhs) == typeid (*rhs)) return false; + + return typeid(*lhs).before (typeid (*rhs)); + } + + inline size_t typeHash (const Operator *op) + { + if (op == NULL) return 0; + std::hash hasher; + return hasher (static_cast(const_cast (typeid (*op).name ()))); + } + + + template + struct DefOp : public B + { + typedef DefOp this_type; + typedef B base_type; + typedef T op_type; + typedef P ps_type; + + void Print (std::ostream &OS, + const std::vector &args, + int depth = 0, + bool brkt = true) const + { ps_type::print (OS, depth, brkt, op_type::name (), args); } + + bool operator== (const Operator& rhs) const + { return typeid (*this) == typeid (rhs); } + + + bool operator< (const Operator& rhs) const + { return typeLT (this, &rhs); } + + size_t hash () const { return typeHash (this); } + + this_type * clone (ExprFactoryAllocator &allocator) const + { return new (allocator) this_type (*this); } + + }; + + inline ENode::~ENode () + { + for (args_iterator b = args.begin (), e = args.end (); + b != e; ++b) + efac().Deref (*b); + } + + + + template + void ENode::renew_args (iterator b, iterator e) + { + std::vector old = args; + args = std::vector (); + + // -- increment reference count of all new arguments + for (; b != e; ++b) + this->push_back (eptr (*b)); + + // -- decrement reference count of all old arguments + for (args_iterator b = old.begin (), e = old.end (); + b != e; ++b) + efac().Deref (*b); + } + + + /** Required by boost::intrusive_ptr */ + inline void intrusive_ptr_add_ref (ENode *v) + { + v->Ref (); + } + + inline void intrusive_ptr_release (ENode *v) + { + v->efac ().Deref (v); + } + + struct BoolExprFn + { + virtual ~BoolExprFn () {} + virtual bool apply (Expr e) = 0; + }; + + struct TrueBoolExprFn : BoolExprFn + { + bool apply (Expr e) { return true; } + }; + + struct FalseBoolExprFn : BoolExprFn + { + bool apply (Expr e) { return false; } + }; + + + struct IdentityRewriter + { + IdentityRewriter () {}; + Expr operator() (Expr e) { return e; } + }; + + struct ExprFn + { + virtual ~ExprFn () {} + virtual Expr apply (Expr e) = 0; + }; + + namespace + { + template + struct ExprFunctionoid : public ExprFn + { + typedef std::shared_ptr fn_type; + + fn_type fn; + + ExprFunctionoid (T* f) : fn_type (fn) {} + ExprFunctionoid (fn_type f) : fn(f) {} + Expr apply (Expr e) { return (*fn)(e); } + }; + + } + + + class VisitAction + { + public: + + // skipKids or doKids + VisitAction (bool kids = false) : + _skipKids (kids), fn (new ExprFunctionoid + (std::make_shared ())) {} + + // changeTo or doKidsRewrite + template + VisitAction (Expr e, bool kids = false, + std::shared_ptr r = std::make_shared ()) : + _skipKids(kids), expr(e), fn(new ExprFunctionoid (r)) {} + + bool isSkipKids () { return _skipKids && expr.get () == NULL; } + bool isChangeTo () { return _skipKids && expr.get () != NULL; } + bool isDoKids () { return !_skipKids && expr.get () == NULL; } + bool isChangeDoKidsRewrite () { return !_skipKids && expr.get () != NULL; } + + Expr rewrite (Expr v) { return fn->apply (v); } + + Expr getExpr () { return expr; } + + static inline VisitAction skipKids () { return VisitAction (true); } + static inline VisitAction doKids () { return VisitAction (false); } + static inline VisitAction changeTo (Expr e) + { return VisitAction (e, true, std::make_shared ());} + + static inline VisitAction changeDoKids (Expr e) + { return VisitAction (e, false, std::make_shared ());} + + template + static inline VisitAction changeDoKidsRewrite (Expr e, std::shared_ptr r) + { return VisitAction (e, false, r); } + + protected: + bool _skipKids; + Expr expr; + private: + std::shared_ptr fn; + }; + + + typedef std::unordered_map DagVisitCache; + + template + Expr visit (ExprVisitor &v, Expr expr, DagVisitCache &cache) + { + if (expr->use_count () > 1) + { + DagVisitCache::const_iterator cit + = cache.find (&*expr); + if (cit != cache.end ()) return cit->second; + } + + + VisitAction va = v(expr); + Expr res; + + if (va.isSkipKids ()) + res = expr; + else if (va.isChangeTo ()) + res = va.getExpr (); + else + { + res = va.isChangeDoKidsRewrite () ? va.getExpr () : expr; + if (res->arity () > 0) + { + bool changed = false; + std::vector kids; + + for (ENode::args_iterator b = res->args_begin (), + e = res->args_end (); + b != e; ++b) + { + Expr k = visit (v, *b, cache); + kids.push_back (k); + changed = (changed || k.get () != *b); + } + + if (changed) + { + if (!res->isMutable ()) + res = res->getFactory ().mkNary (res->op (), + kids.begin (), + kids.end ()); + else + res->renew_args (kids.begin (), kids.end ()); + } + } + + res = va.rewrite (res); + } + + if (expr->use_count () > 1) + { + expr->Ref (); + cache[&*expr] = res; + } + + return res; + } + + inline void clearDagVisitCache (DagVisitCache &cache) + { + for (DagVisitCache::value_type &kv : cache) + kv.first->efac ().Deref (kv.first); + cache.clear (); + } + + + template + struct DagVisit : public std::unary_function + { + ExprVisitor &m_v; + DagVisitCache m_cache; + + DagVisit (ExprVisitor &v) : m_v (v) {} + DagVisit (const DagVisit &o) : m_v (o.m_v) {} + ~DagVisit () { clearDagVisitCache (m_cache); } + + Expr operator() (Expr e) { return visit (m_v, e, m_cache); } + + }; + + template + Expr dagVisit (ExprVisitor &v, Expr expr) + { + DagVisit dv (v); + return dv (expr); + } + + template + void dagVisit (ExprVector &v, ExprVector &vec) + { + DagVisit dv (v); + for (auto &e : vec) e = dv (e); + } + + template + Expr visit (ExprVisitor &v, Expr expr) + { + VisitAction va = v (expr); + + if (va.isSkipKids ()) return expr; + + if (va.isChangeTo ()) return va.getExpr (); + + Expr res = va.isChangeDoKidsRewrite () ? va.getExpr () : expr; + + if (res->arity () == 0) return va.rewrite (res); + + bool changed = false; + std::vector kids; + + for (ENode::args_iterator b = res->args_begin (), + e = res->args_end (); + b != e; ++b) + { + Expr k = visit (v, *b); + kids.push_back (k); + changed = (changed || k.get () != *b); + } + + if (changed) + { + if (!res->isMutable ()) + res = res->getFactory ().mkNary (res->op (), + kids.begin (), + kids.end ()); + else + res->renew_args (kids.begin (), kids.end ()); + } + + res = va.rewrite (res); + + return res; + } + + /**********************************************************************/ + /**********************************************************************/ + /* PUBLIC API */ + /**********************************************************************/ + /**********************************************************************/ + + /**********************************************************************/ + /* Inspection */ + /**********************************************************************/ + + // -- usage isOp(EXPR) . Returns true if top operator of + // -- expression is a subclass of TYPE. + template bool isOp (T e) + { + const Operator *op = & (eptr(e)->op ()); + const O *top = dynamic_cast(op); + return top != NULL; + } + + // -- usage isOpX(EXPR) . Returns true if top operator of + // -- expression is of type TYPE. + template bool isOpX (T e) + { return typeid (eptr (e)->op ()) == typeid (O); } + + /**********************************************************************/ + /* Creation */ + /**********************************************************************/ + + /* Creates a nullary expression with operator T. + * Usage: mk (efac) + */ + template Expr mk (ExprFactory &f) + { return f.mkTerm (T()); } + + + /* Creates a terminal expression with a given terminal value + * Usage: mk (5, efac) + */ + template Expr mkTerm (T v, ExprFactory &f) + { + Terminal op(v); + return f.mkTerm (op); + } + + template T getTerm (Expr e) + { + typedef Terminal term_type; + return dynamic_cast(e->op ()).get (); + } + + + /* Creates a unary expression with a given operator. + * Usage: mk (exp) + */ + template Expr mk (Expr e) + { return e->efac ().mkUnary (T(), e); } + + template Expr mk (Expr e1, Expr e2) + { return e1->efac ().mkBin (T(), e1, e2); } + + template Expr mk (Expr e1, + Expr e2, + Expr e3) + { return e1->efac ().mkTern (T(), e1, e2, e3); } + + /** + * Creates an nary expression with a given operator. + * The arguments are given as first and last iterators. + * Usage: mknary (v.begin (), v.end ()) + */ + template + Expr mknary (iterator bgn, iterator end) + { return eptr (*bgn)->efac ().mkNary (T(), bgn, end); } + + template + Expr mknary (Expr base, iterator bgn, iterator end) + { + if (bgn == end) return base; + if (std::distance (bgn, end) == 1) return eptr (*bgn); + return mknary(bgn, end); + } + + /** boost::range versions of mknary */ + + template + Expr mknary (const Range &r) + { return mknary (boost::begin(r), boost::end(r)); } + + template + Expr mknary (Expr base, const Range &r) + { return mknary (base, boost::begin (r), boost::end (r)); } + + + + + + /**********************************************************************/ + /* Constructors that accept explicit operators. Only use those if + the ones above are not applicable.*/ + /**********************************************************************/ + + /* Creates a nullary expression with a given operator. + * Usage: mk (op, efac) + */ + inline Expr mk (const Operator &op, ExprFactory &f) + { return f.mkTerm (op); } + + inline Expr mk (const Operator &o, Expr e) + { return e->efac ().mkUnary (o, e); } + + inline Expr mk (const Operator &o, Expr e1, Expr e2) + { return e1->efac ().mkBin (o, e1, e2); } + + inline Expr mk (const Operator &o, Expr e1, Expr e2, Expr e3) + { return e1->efac ().mkTern (o, e1, e2, e3); } + + template + Expr mknary (const Operator &o, iterator bgn, iterator end) + { return eptr (*bgn)->efac ().mkNary (o, bgn, end); } + + + /**********************************************************************/ + /* Operators */ + /**********************************************************************/ + + + namespace op + { + // -- Boolean opearators + NOP_BASE(BoolOp) + + /* operator definitions */ + NOP(TRUE,"true",PREFIX,BoolOp) + NOP(FALSE,"false",PREFIX,BoolOp) + NOP(AND,"&&",INFIX,BoolOp) + NOP(OR,"||",INFIX,BoolOp) + NOP(XOR,"^",INFIX,BoolOp) + NOP(NEG,"!",PREFIX,BoolOp) + NOP(IMPL,"->",INFIX,BoolOp) + NOP(ITE,"ite",FUNCTIONAL,BoolOp) + NOP(IFF,"<->",INFIX,BoolOp) + + namespace boolop + { + // -- logical AND. Applies simplifications + inline Expr land (Expr e1, Expr e2) + { + if (e1 == e2) return e1; + + if (isOpX(e1)) return e2; + if (isOpX(e2)) return e1; + if (isOpX(e1) || isOpX(e2)) + return mk(e1->efac ()); + + return mk(e1, e2); + } + + inline Expr lor (Expr e1, Expr e2) + { + if (isOpX(e1)) return e2; + if (isOpX(e2)) return e1; + if (isOpX(e1) || isOpX(e2)) return mk(e1->efac ()); + return mk(e1, e2); + } + + inline Expr limp (Expr e1, Expr e2) + { + // TRUE -> x IS x + if (isOpX (e1)) return e2; + // x -> TRUE IS TRUE + if (isOpX (e2)) return e2; + // FALSE -> x IS TRUE + if (isOpX (e1)) return mk (e1->efac ()); + // x -> x IS TRUE + if (e1 == e2) return mk (e1->efac ()); + + // x -> FALSE is missing since it adds a negation + + return mk(e1, e2); + } + + inline Expr lite (Expr c, Expr t, Expr e) + { + if (isOpX (c)) return t; + if (isOpX (c)) return e; + if (t == e) return t; + + return mk (c, t, e); + } + + inline Expr lneg(Expr e1) + { + if (isOpX(e1)) return mk (e1->efac ()); + if (isOpX(e1)) return mk (e1->efac ()); + + if (isOpX(e1)) return e1->left(); + + return mk(e1); + } + + template + Expr land (const R &r) + { + assert (boost::begin (r) != boost::end (r)); + + // -- reduce unary AND to the operand + if (boost::size (r) == 1) return *boost::begin (r); + + // XXX add more logical simplifications + return mknary (r); + } + + struct CIRCSIZE : public std::unary_function + { + unsigned ands; + unsigned ors; + unsigned inputs; + + CIRCSIZE () : ands (0), ors (0), inputs (0) {} + + + VisitAction operator() (Expr e) + { + if (isOpX (e)) ands++; + else if (isOpX (e)) ors++; + else if (!isOpX (e)) + { + inputs++; + return VisitAction::skipKids (); + } + return VisitAction::doKids (); + } + + unsigned size () { return ands + ors + inputs; } + + }; + + /// size of an expression in terms of ANDs, ORs, and inputs. + /// NEG is not counted, other BoolOps are treated as inputs. + inline unsigned circSize (Expr e) + { + CIRCSIZE csz; + dagVisit (csz, e); + return csz.size (); + } + + + /** trivial simplifier for Boolean Operators */ + struct TrivialSimplifier : public std::unary_function + { + ExprFactory &efac; + + Expr trueE; + Expr falseE; + + TrivialSimplifier (const TrivialSimplifier &o) : + efac (o.efac), trueE (o.trueE), falseE (o.falseE) {} + + TrivialSimplifier (ExprFactory &fac) : + efac(fac), trueE(mk (efac)), falseE(mk (efac)) {} + + Expr operator() (Expr exp) + { + if (exp == trueE || exp == falseE) return exp; + + if (!isOp (exp)) return exp; + + if (isOpX(exp)) + { + // TRUE -> x == x + if (trueE == exp->left ()) return exp->right(); + + // FALSE -> x == TRUE + if (falseE == exp->left ()) return trueE; + + // x -> TRUE == TRUE + if (trueE == exp->right ()) return trueE; + + // x -> FALSE == !x + if (falseE == exp->right ()) return lneg (exp->left ()); + + return exp; + } + + if (isOpX (exp)) + { + if (exp->left () == exp->right ()) return exp->left (); + if (trueE == exp->left ()) return exp->right (); + if (falseE == exp->left ()) return lneg (exp->right ()); + if (trueE == exp->right ()) return exp->left (); + if (falseE == exp->right ()) return lneg (exp->left ()); + + return exp; + } + + if (isOpX(exp)) + { + // -- !TRUE -> FALSE + if (trueE == exp->left()) return falseE; + // -- !FALSE -> TRUE + if (falseE == exp->left()) return trueE; + // -- ! ! x -> x + if (isOpX (exp->left ())) return exp->left ()->left (); + return exp; + } + + int arity = exp->arity (); + if (isOpX (exp)) + { + if (arity == 0) return falseE; + if (arity == 1) return exp->left (); + if (arity == 2) + { + ENode* lhs = exp->left (); + ENode* rhs = exp->right (); + + if (lhs == rhs) return lhs; + if (trueE == lhs || trueE == rhs) return trueE; + if (falseE == lhs) return rhs; + if (falseE == rhs) return lhs; + // (!a || a) + if (isOpX(lhs) && lhs->left () == rhs) return trueE; + // (a || !a) + if (isOpX(rhs) && rhs->left () == lhs) return trueE; + + return exp; + } + + // -- arity > 2, check if one arguments is true + for (ENode *arg : mk_it_range (exp->args_begin (), exp->args_end ())) + if (trueE == arg) return trueE; + return exp; + } + + if (isOpX(exp)) + { + if (arity == 0) return trueE; + if (arity == 1) return exp->left(); + + if (exp->arity () == 2) + { + ENode *lhs = exp->left (); + ENode *rhs = exp->right (); + + if (lhs == rhs) return lhs; + if (falseE == lhs || falseE == rhs) return falseE; + if (trueE == lhs) return rhs; + if (trueE == rhs) return lhs; + if (isOpX(lhs) && lhs->left () == rhs) return falseE; + if (isOpX(rhs) && rhs->left () == lhs) return falseE; + + return exp; + } + + // -- arity > 2, check if one arguments is false + for (ENode * arg : mk_it_range (exp->args_begin (), + exp->args_end ())) + if (falseE == arg) return falseE; + return exp; + } + + return exp; + } + }; + + /** Rewriter that gathers Boolean operators into n-ary ones */ + struct GatherOps : public std::unary_function + { + Expr trueE; + Expr falseE; + + GatherOps () : trueE (0), falseE (0) {} + + GatherOps (const GatherOps &o) : trueE(o.trueE), falseE (o.falseE) {} + + + Expr operator() (Expr exp) + { + // -- create true/false constants for convinience + if (trueE == NULL) + { + trueE = mk (exp->efac ()); + falseE = mk (exp->efac ()); + } + + // -- skip terminals + if (exp->arity () == 0) return exp; + //if (!isBoolOp (exp)) return exp; + // -- skip anything that is not AND/OR + if (! (isOpX (exp) || isOpX (exp)) ) return exp; + + const Operator &op = exp->op (); + Expr top; + Expr bot; + if (isOpX (exp)) + { + top = trueE; + bot = falseE; + } + else + { + top = falseE; + bot = trueE; + } + + ExprSet newArgs; + for (Expr a : mk_it_range (exp->args_begin (), exp->args_end ())) + if (! (op == a->op ()) ) + { + if (a == bot) return bot; + else if (a != top) newArgs.insert (a); + } + else /* descend into kids that have the same top-level operator */ + for (Expr ka : mk_it_range (a->args_begin (), a->args_end ())) + if (ka == bot) return bot; + else if (ka != top) newArgs.insert (ka); + + if (newArgs.empty ()) return top; + if (newArgs.size () == 1) return *(newArgs.begin ()); + return exp->efac ().mkNary (op, newArgs.begin (), newArgs.end ()); + } + }; + + /** Rewriter that normalizes AND/OR operators */ + struct NormalizeOps : public std::unary_function + { + Expr trueE; + Expr falseE; + + NormalizeOps () : trueE (0), falseE (0) {} + + NormalizeOps (const NormalizeOps &o) : + trueE (o.trueE), falseE (o.falseE) {} + + Expr operator() (Expr exp) + { + // -- create true/false constants for convinience + if (trueE == NULL) + { + trueE = mk (exp->efac ()); + falseE = mk (exp->efac ()); + } + + // -- skip anything that is not AND/OR + if (! (isOpX (exp) || isOpX (exp)) ) return exp; + if (exp->arity () == 1) return exp->left (); + + const Operator &op = exp->op (); + Expr top, bot; + if (isOpX (exp)) + { + top = trueE; + bot = falseE; + } + else + { + top = falseE; + bot = trueE; + } + + if (exp->arity () == 0) return top; + + if (exp->arity () == 2) + { + if (isOpX (exp)) return land (exp->left (), exp->right ()); + else /* isOpX */ return lor (exp->left (), exp->right ()); + } + + ExprSet newArgs; + for (Expr a : mk_it_range (exp->args_begin (), exp->args_end ())) + if (! (op == a->op ()) ) + { + if (a == bot) return bot; + else if (a != top) newArgs.insert (a); + } + else /* descend into kids that have the same top-level operator */ + for (Expr ka : mk_it_range (a->args_begin (), a->args_end ())) + if (ka == bot) return bot; + else if (ka != top) newArgs.insert (ka); + + if (newArgs.empty ()) return top; + if (newArgs.size () == 1) return *(newArgs.begin ()); + + boost::container::flat_set args (newArgs.begin (), + newArgs.end ()); + Expr res = top; + for (Expr arg : boost::adaptors::reverse(args)) + res = isOpX (exp) ? land (arg, res) : lor (arg, res); + + return res; + } + + Expr land (Expr f, Expr g) + { + /** base cases */ + if (f == trueE) return g; + if (g == trueE) return f; + if (f == falseE || g == falseE) return falseE; + if (f == g) return f; + if (f == boolop::lneg (g) || boolop::lneg (f) == g) return falseE; + + // -- both not AND operators. Order in some way + if (!isOpX (f) && !isOpX (g)) + return g < f ? mk (f, g) : mk (g, f); + + Expr topf = isOpX (f) ? f->left () : f; + Expr topg = isOpX (g) ? g->left () : g; + + Expr top, restF, restG; + if (topf < topg || topf == topg) + { + top = topf; + restF = isOpX (f) ? f->right () : trueE; + } + else + restF = f; + + if (topg < topf || topg == topf) + { + top = topg; + restG = isOpX (g) ? g->right () : trueE; + } + else + restG = g; + + return boolop::land (top, land (restF, restG)); + } + + Expr lor (Expr f, Expr g) + { + /** base cases */ + if (f == falseE) return g; + if (g == falseE) return f; + if (f == trueE || g == trueE) return trueE; + if (f == g) return f; + if (f == boolop::lneg (g) || boolop::lneg (f) == g) return trueE; + + // -- both not AND operators. Order in some way + if (!isOpX (f) && !isOpX (g)) + return g < f ? mk (f, g) : mk (g, f); + + Expr topf = isOpX (f) ? f->left () : f; + Expr topg = isOpX (g) ? g->left () : g; + + Expr top, restF, restG; + if (topf < topg || topf == topg) + { + top = topf; + restF = isOpX (f) ? f->right () : falseE; + } + else + restF = f; + + if (topg < topf || topg == topf) + { + top = topg; + restG = isOpX (g) ? g->right () : falseE; + } + else + restG = g; + + return boolop::lor (top, lor (restF, restG)); + } + }; + + + + /** puts an expression into NNF */ + struct NNF : public std::unary_function + { + ExprFactory &efac; + std::shared_ptr r; + + NNF (const NNF &o) : efac (o.efac), r (o.r) {} + + NNF (ExprFactory &fac) : efac (fac), + r (std::make_shared (efac)) {} + + VisitAction operator() (Expr exp) + { + if (exp->arity () == 0) return VisitAction::skipKids (); + + // -- AND / OR -- run the simplifier + if (isOpX (exp) || isOpX (exp)) + return VisitAction::changeDoKidsRewrite (exp, r); + + // -- not a negation, then do not touch, must be non-Boolean + if (!isOpX (exp)) return VisitAction::skipKids (); + + // -- if here, top operator is negation, push it in + Expr lhs = exp->left (); + if (lhs == r->falseE) return VisitAction::changeTo (r->trueE); + if (lhs == r->trueE) return VisitAction::changeTo (r->falseE); + + + // -- !!x -- Trivial simplifer will get rid of unary AND + if (isOpX (lhs)) + return VisitAction::changeDoKidsRewrite (mk (lhs->left ()), r); + + + // -- ! (x & b) ==> !x || !b + if (isOpX (lhs) || isOpX (lhs)) + { + // -- negate arguments + ExprVector args; + for (Expr arg : mk_it_range (lhs->args_begin (), + lhs->args_end ())) + args.push_back (lneg (arg)); + + // -- flip operator + Expr res = isOpX (lhs) ? + mknary (args.begin (), args.end ()) : + mknary (args.begin (), args.end ()); + return VisitAction::changeDoKidsRewrite (res, r); + } + + // -- negation of anything else, don't descend + return VisitAction::skipKids (); + } + }; + + + } + + } + + + /// Gates + /// Gates are mutable and are not structurally hashed + namespace op + { + struct GateOp : public expr::Operator + { virtual bool isMutable () const { return true;} }; + + /// an output gate + NOP(OUT_G,"OUT_G",PREFIX,GateOp) + NOP(AND_G,"/\\",INFIX,GateOp); + NOP(OR_G,"\\/",INFIX,GateOp); + NOP(NEG_G,"~",PREFIX,GateOp); + + + namespace gate + { + inline Expr land (Expr e1, Expr e2) + { + if (e1 == e2) return e1; + + if (isOpX(e1)) return e2; + if (isOpX(e2)) return e1; + if (isOpX(e1) || isOpX(e2)) + return mk(e1->efac ()); + + return mk(e1, e2); + } + + inline Expr lor (Expr e1, Expr e2) + { + if (isOpX(e1)) return e2; + if (isOpX(e2)) return e1; + if (isOpX(e1) || isOpX(e2)) return mk(e1->efac ()); + return mk(e1, e2); + } + + inline Expr lneg (Expr e1) + { + if (isOpX(e1)) return mk (e1->efac ()); + if (isOpX(e1)) return mk (e1->efac ()); + + if (isOpX(e1) || isOpX (e1)) return e1->left(); + + return mk(e1); + } + } + } + + + namespace op + { + // -- Numeric operators + NOP_BASE(NumericOp) + + NOP(PLUS,"+",INFIX,NumericOp) + NOP(MINUS,"-",INFIX,NumericOp) + NOP(MULT,"*",INFIX,NumericOp) + NOP(DIV,"/",INFIX,NumericOp) + NOP(IDIV,"/",INFIX,NumericOp); + NOP(MOD,"mod",INFIX,NumericOp) + NOP(REM,"%",INFIX,NumericOp) + NOP(UN_MINUS,"-",PREFIX,NumericOp) + NOP(ABS,"abs",FUNCTIONAL,NumericOp) + + NOP(PINFTY,"oo",PREFIX,NumericOp) + NOP(NINFTY,"-oo",PREFIX,NumericOp) + + namespace numeric + { + struct ITV_PS + { + static inline void print (std::ostream &OS, + int depth, + bool brkt, + const std::string &name, + const std::vector &args) + { + OS << "["; + args [0]->Print (OS, depth, false); + OS << ","; + args [1]->Print (OS, depth, false); + OS << "]"; + } + }; + } + NOP(ITV,"itv",numeric::ITV_PS,NumericOp) + } + + + namespace op + { + // -- Comparisson operators + NOP_BASE(ComparissonOp) + + NOP(EQ,"=",INFIX,ComparissonOp) + NOP(NEQ,"!=",INFIX,ComparissonOp) + NOP(LEQ,"<=",INFIX,ComparissonOp) + NOP(GEQ,">=",INFIX,ComparissonOp) + NOP(LT,"<",INFIX,ComparissonOp) + NOP(GT,">",INFIX,ComparissonOp) + } + + namespace op + { + // -- Not yet sorted operators + NOP_BASE(MiscOp) + + /** A non-deterministic value */ + NOP (NONDET,"nondet",FUNCTIONAL,MiscOp) + /** An assumption */ + NOP(ASM,"ASM", PREFIX, MiscOp) + /** A tupple */ + NOP (TUPLE,"tuple",FUNCTIONAL,MiscOp) + } + + namespace op + { + namespace variant + { + struct PS + { + static inline void print (std::ostream &OS, + int depth, + bool brkt, + const std::string &name, + const std::vector &args) + { + args [1]->Print (OS, depth, true); + OS << "_"; + args [0]->Print (OS, depth, true); + } + }; + + struct PS_TAG + { + static inline void print (std::ostream &OS, + int depth, + bool brkt, + const std::string &name, + const std::vector &args) + { + args [1]->Print (OS, depth, true); + OS << "!"; + args [0]->Print (OS, depth, true); + } + }; + } + NOP_BASE(VariantOp) + NOP(VARIANT,"variant",variant::PS,VariantOp) + NOP(TAG,"tag",variant::PS_TAG,VariantOp) + + namespace variant + { + /** Creates a variant of an expression. For example, + `variant (1, e)` creates an expression `e_1` + */ + inline Expr variant (int v, Expr e) + { return mk(mkTerm(v, e->efac ()), e); } + + inline Expr next (Expr e) { return variant (1, e); } + inline Expr aux (Expr e) { return variant (2, e); } + + + inline Expr mainVariant (Expr e) { return e->right (); } + inline int variantNum (Expr e) + { + const INT &v = dynamic_cast (e->left ()->op ()); + return v.get (); + } + + inline Expr prime (Expr e) { return variant (1, e); } + inline bool isPrime (Expr e) { return variantNum (e) == 1; } + + /** Creates an expression tagged by another expression (or + string). For example, `variant::tag (e, h)` creates an + expression `e!h`. + */ + + inline Expr tag (Expr e, Expr tag) + { return mk (tag, e); } + + inline Expr tag (Expr e, const std::string &t) + {return tag (e, mkTerm (t, e->efac ()));} + + inline Expr getTag (Expr e) + { return e->left (); } + + inline std::string getTagStr (Expr e) + {return getTerm (getTag (e));} + } + } + + + namespace op + { + NOP_BASE(SimpleTypeOp) + + NOP(INT_TY,"INT",PREFIX,SimpleTypeOp) + NOP(CHAR_TY,"CHAR",PREFIX,SimpleTypeOp) + NOP(REAL_TY,"REAL",PREFIX,SimpleTypeOp) + NOP(VOID_TY,"VOID",PREFIX,SimpleTypeOp) + NOP(BOOL_TY,"BOOL",PREFIX,SimpleTypeOp) + /** Uninterpreted Type */ + NOP(UNINT_TY,"UNINT",PREFIX,SimpleTypeOp) + /** Array Type */ + NOP(ARRAY_TY,"ARRAY",PREFIX,SimpleTypeOp) + /** stub for ADTs **/ + NOP(AD_TY,"",PREFIX,SimpleTypeOp) + } + + namespace op + { + namespace sort + { + inline Expr intTy (ExprFactory &efac) {return mk (efac);} + inline Expr boolTy (ExprFactory &efac) {return mk (efac);} + inline Expr realTy (ExprFactory &efac) {return mk (efac);} + inline Expr adTy (Expr name) {return mk (name);} + inline Expr arrayTy (Expr indexTy, Expr valTy) + {return mk (indexTy, valTy);} + + inline Expr arrayIndexTy (Expr a) {return a->left ();} + inline Expr arrayValTy (Expr a) {return a->right ();} + } + } + + + namespace op + { + /// Array operators + NOP_BASE (ArrayOp) + + NOP (SELECT, "select", FUNCTIONAL, ArrayOp) + NOP (STORE, "store", FUNCTIONAL, ArrayOp) + NOP (CONST_ARRAY, "const-array", FUNCTIONAL, ArrayOp) + NOP (ARRAY_MAP, "array-map", FUNCTIONAL, ArrayOp) + NOP (ARRAY_DEFAULT, "array-default", FUNCTIONAL, ArrayOp) + NOP (AS_ARRAY, "as-array", FUNCTIONAL, ArrayOp) + } + + namespace op + { + namespace array + { + inline Expr select (Expr a, Expr idx) {return mk(v)) return typeOf(v->right()); + if (isOpX(v)) return sort::arrayTy(v->left(), typeOf(v->right())); + +// std::cerr << "WARNING: could not infer type of: " << *v << "\n"; +// assert (0 && "Unreachable"); + + return Expr(); + } + inline Expr sortOf (Expr v) {return typeOf (v);} + + Expr mkMPZ(boost::multiprecision::cpp_int a, ExprFactory& efac) + { + return mkTerm (mpz_class (boost::lexical_cast(a)), efac); + } + + Expr mkMPZ(int a, ExprFactory& efac) + { + return mkTerm (mpz_class (a), efac); + } + + struct FAPP_PS + { + static inline void print (std::ostream &OS, + int depth, + int brkt, + const std::string &name, + const std::vector &args) + { + if (args.size () > 1) OS << "("; + + // -- strip fdecl if there is one + ENode *fname = args [0]; + if (isOpX (fname)) fname = fname->arg (0); + fname->Print (OS, depth+2, false); + + for (unsigned i = 1; i < args.size (); ++i) + { + OS << " "; + args [i]->Print (OS, depth+2, false); + } + + if (args.size () > 1) OS << ")"; + } + + }; + + /// Creates a new fdecl with the same signature as the given + /// fdecl and a new name + inline Expr rename (Expr fdecl, Expr name) + { + assert (isOpX (fdecl)); + ExprVector _args; + _args.reserve (fdecl->arity ()); + _args.push_back (name); + _args.insert (_args.end (), ++(fdecl->args_begin ()), fdecl->args_end ()); + return mknary (_args); + } + + /// construct a new expression by applying fdecl to the same + /// arguments as fapp. For example, reapp of g(a,b) and f is f(a, b) + inline Expr reapp (Expr fapp, Expr fdecl) + { + assert (isOpX (fdecl)); + assert (isOpX (fapp)); + + ExprVector _args; + _args.reserve (fapp->arity ()); + _args.push_back (fdecl); + _args.insert (_args.end (), ++(fapp->args_begin ()), fapp->args_end ()); + return mknary (_args); + } + } + + + namespace bind + { + /// returns true if an expression is int constant + class IsHardIntConst : public std::unary_function + { + public: + bool operator () (Expr e) + { + return isOpX (e); + } + }; + + class IsFApp : public std::unary_function + { + public: + bool operator () (Expr e) + { + return isOpX (e) && isOpX (fname (e)); + } + }; + + /// returns true if an expression is a constant + class IsConst : public std::unary_function + { + public: + bool operator () (Expr e) + { + if (isOpX (e)) return this->operator() (variant::mainVariant (e)); + + return isOpX (e) && e->arity () == 1 && isOpX (fname (e)); + } + }; + + /// returns true if an expression is a variable + class IsVar : public std::unary_function + { + public: + bool operator () (Expr e) + { + return isIntVar(e) || isRealVar(e) || isBoolVar(e) || isVar (e); + } + }; + + class IsSelect : public std::unary_function + { + public: + bool operator () (Expr e) + { + return isOpX (a, idx);} - inline Expr store (Expr a, Expr idx, Expr v) {return mk (a, idx, v);} - inline Expr constArray (Expr domain, Expr v) {return mk (domain, v);} - inline Expr aDefault (Expr a) {return mk (a);} - } - } - - - namespace op - { - - namespace bind - { - struct SCOPE_PS - { - static inline void print (std::ostream &OS, - int depth, - bool brkt, - const std::string &name, - const std::vector &args) - { - OS << "[" << name << " "; - args[0]->Print (OS, depth+2, false); - OS << " in "; - args[1]->Print (OS, depth+2, false); - OS << "]"; - } - }; - struct FAPP_PS; - } - NOP_BASE(BindOp) - - NOP(BIND,":",INFIX,BindOp) - /** Function declaration */ - NOP(FDECL,"fdecl",PREFIX,BindOp) - /** Function application */ - NOP(FAPP,"fapp",bind::FAPP_PS,BindOp) - - namespace bind - { - inline Expr bind (Expr name, Expr value) - { return mk (name, value); } - inline Expr name (Expr e) { return e->left (); } - inline Expr type (Expr e) { return e->right (); } - inline Expr value (Expr e) { return e->right (); } - - inline Expr var (Expr name, Expr type) { return bind (name, type); } - inline Expr intVar (Expr name) - { return var (name, mk(name->efac ())); } - inline Expr realVar (Expr name) - { return var (name, mk(name->efac ())); } - inline Expr boolVar (Expr name) - { return var (name, mk(name->efac ())); } - inline Expr charVar (Expr name) - { return var (name, mk(name->efac ())); } - inline Expr unintVar (Expr name) - { return var (name, mk (name->efac ())); } - - template bool isVar (Expr v) - { - return isOpX(v) && isOpX(bind::type (v)); - } - inline bool isBoolVar (Expr v) { return isVar (v); } - inline bool isIntVar (Expr v) { return isVar (v); } - inline bool isRealVar (Expr v) { return isVar (v); } - - inline Expr constDecl (Expr name, Expr type) - { return mk (name, type); } - inline Expr boolConstDecl (Expr name) - { return constDecl (name, mk (name->efac ())); } - inline Expr intConstDecl (Expr name) - { return constDecl (name, mk (name->efac ())); } - inline Expr realConstDecl (Expr name) - { return constDecl (name, mk (name->efac ())); } - inline Expr adtConstDecl (Expr name) - { return constDecl (name, mk (name->efac ())); } - - template - Expr fdecl (Expr fname, const Range &args) - { - // -- at least one value for range type - assert (boost::size (args) > 0); - ExprVector _args; - _args.push_back (fname); - _args.insert (_args.end (), boost::begin (args), boost::end (args)); - return mknary (_args); - } - - inline bool isFdecl (Expr fdecl) { return isOpX (fdecl); } - inline Expr fname (Expr fdecl) { return fdecl->first (); } - - inline Expr fapp (Expr fdecl) { return mk (fdecl); } - - template - Expr fapp (Expr fdecl, const Range &args) - { - ExprVector _args; - _args.push_back (fdecl); - _args.insert (_args.end (), boost::begin (args), boost::end (args)); - return mknary (_args); - } - - inline Expr fapp (Expr fdecl, Expr a0, Expr a1 = Expr(), - Expr a2 = Expr()) - { - ExprVector args; - args.push_back (fdecl); - - if (a0) - args.push_back (a0); - if (a1) - args.push_back (a1); - if (a2) - args.push_back (a2); - return mknary (args); - } - - - - inline bool isFapp (Expr fapp) { return isOpX (fapp); } - - inline Expr rangeTy (Expr fdecl) { return fdecl->last (); } - - inline size_t domainSz (Expr fdecl) - { - assert (fdecl->arity () >= 2); - return fdecl->arity () - 2; - } - - inline Expr domainTy (Expr fdecl, size_t n) - { - assert (n + 2 < fdecl->arity ()); - return fdecl->arg (n+1); - } - - template bool isFdecl (Expr v) - { - return isOpX (v) && isOpX (rangeTy (v)); - } - - - /** constant is an applied nullary function */ - template bool isConst (Expr v) - { - return isOpX (v) && - v->arity () == 1 && - isFdecl (fname (v)); - } - - inline Expr mkConst (Expr name, Expr sort) {return fapp (constDecl (name, sort));} - inline Expr boolConst (Expr name) { return fapp (boolConstDecl (name)); } - inline Expr intConst (Expr name) { return fapp (intConstDecl (name)); } - inline Expr realConst (Expr name) { return fapp (realConstDecl (name)); } - inline Expr adtConst (Expr name) { return fapp (adtConstDecl (name)); } - - inline bool isBoolConst (Expr v) { return isConst (v); } - inline bool isIntConst (Expr v) { return isConst (v); } - inline bool isRealConst (Expr v) { return isConst (v); } - inline bool isAdtConst (Expr v) { return isConst (v); } - - inline Expr typeOf (Expr v) - { - using namespace bind; - if (isOpX (v)) return typeOf (variant::mainVariant (v)); - - if (isOpX (v)) - { - assert (isOpX (v->left ())); - return rangeTy (v->left ()); - } + struct const_iterator + { + ExprPair pair; + const_iterator () : pair (Expr(), Expr()) {} - if (isOpX(v)) return typeOf(v->last()); - if (isOp(v) || isOp (v)) return mk (v->efac ()); - if (isOpX (v)) return mk (v->efac ()); - if (isOpX (v)) return mk (v->efac ()); + const_iterator (Expr u, Expr v) : pair (u, v) {} - if (isOpX (v)) return bind::type (v); - - if (isBoolVar (v) || isBoolConst (v)) - return mk (v->efac ()); - if (isIntVar (v) || isIntConst (v)) - return mk (v->efac ()); - if (isRealVar (v) || isRealConst (v)) - return mk (v->efac ()); + bool operator== (const const_iterator &other) const + { return pair == other.pair; } - if (isOp(v)) return typeOf(v->left()); + const ExprPair &operator*() const { return pair; } + const ExprPair *operator->() const { return &pair; } + }; - if (isOpX(v)) return sort::arrayTy(typeOf(v->right()), typeOf(v->last())); - if (isOpX (e); - } - }; + template + fn_map mk_fn_map (const F &fn) { return fn_map (fn); } + + template + Expr replace (Expr exp, const M &map) + { + RV rv(map); + return dagVisit (rv, exp); } - } -} -namespace expr -{ - namespace op - { - namespace bind - { - struct BoundVar - { - unsigned var; - - BoundVar (unsigned v) : var (v) {} - BoundVar (const BoundVar &o) : var (o.var) {} - - - bool operator< (const BoundVar &b) const { return var < b.var; } - bool operator== (const BoundVar &b) const { return var == b.var; } - bool operator!= (const BoundVar &b) const { return var != b.var; } - - size_t hash () const - { - std::hash hasher; - return hasher (var); - } - - void Print (std::ostream &OS) const { OS << "B" << var; } - }; - inline std::ostream &operator<< (std::ostream &OS, const BoundVar &b) - { - b.Print (OS); - return OS; - } + + /** Replace and simplify */ + template + Expr replaceSimplify (Expr exp, const M &map) + { + RVSIMP rv(exp->efac (), map); + return dagVisit (rv, exp); } - } - - template<> struct TerminalTrait - { - static inline void print (std::ostream &OS, - const op::bind::BoundVar &b, - int depth, bool brkt) { OS << b; } - static inline bool less (const op::bind::BoundVar &b1, - const op::bind::BoundVar &b2) - { return b1 < b2; } - - static inline bool equal_to (const op::bind::BoundVar &b1, - const op::bind::BoundVar &b2) - { return b1 == b2; } - - static inline size_t hash (const op::bind::BoundVar &b) - { return b.hash (); } - }; - - namespace op - { - typedef Terminal BVAR; - - - namespace bind - { - inline Expr bvar (unsigned idx, Expr type) - { return var (mkTerm (BoundVar (idx), type->efac ()), type); } - inline Expr intBVar (unsigned idx, ExprFactory &efac) - { return intVar (mkTerm (BoundVar (idx), efac )); } - inline Expr boolBVar (unsigned idx, ExprFactory &efac) - { return boolVar (mkTerm (BoundVar (idx), efac )); } - inline Expr realBVar (unsigned idx, ExprFactory &efac) - { return realVar (mkTerm (BoundVar (idx), efac )); } - inline Expr unintBVar (unsigned idx, ExprFactory &efac) - { return unintVar (mkTerm (BoundVar (idx), efac)); } - - inline bool isBVar (Expr e) - { - return isOpX(e) && isOpX (bind::name (e)); - } - - inline unsigned bvarId (Expr e) - { - Expr t = e; - if (isBVar (e)) t = bind::name (e); - assert (isOpX (t)); - return getTerm(t).var; - } - + + + /** Returns true if e1 contains e2 as a sub-expression */ + inline bool contains (Expr e1, Expr e2) + { + CV cv(e2); + dagVisit (cv, e1); + return cv.found; } - } - - namespace details - { - template - Expr absConstants (const Range &r, Expr e); - - template - Expr subBndVars (const Range &r, Expr e); - } - - namespace op - { - - /** - Binders with Locally Nameless representation. - - Arthur Charguéraud: The Locally Nameless - Representation. J. Autom. Reasoning 49(3): 363-408 (2012) - */ - - namespace bind + + /** Returns true if e1 contains applications of T */ + template inline bool containsOp (Expr e1) { - struct BINDER - { - static inline void print (std::ostream &OS, - int depth, - bool brkt, - const std::string &name, - const std::vector &args) - { - OS << "(" << name << " "; - - OS << "("; - for (auto it = args.begin (), end = args.end () - 1; it != end; ++it) - { - (*it)->last ()->Print (OS, depth + 2, true); - if (it + 1 != end) OS << " "; - } - OS << ") "; - - args.back ()->Print (OS, depth + 2, true); - - OS << ")"; - } - }; + ContainsOp co; + dagVisit (co, e1); + return co.found; } - - NOP_BASE(BinderOp) - /** Forall quantifier */ - NOP (FORALL, "forall", bind::BINDER, BinderOp) - /** Exists */ - NOP (EXISTS, "exists", bind::BINDER, BinderOp) - /** Lambda */ - NOP (LAMBDA, "lambda", bind::BINDER, BinderOp) - - namespace bind - { - inline unsigned numBound (Expr e) - { - assert (e->arity () > 0); - return e->arity () - 1; - } - inline Expr decl (Expr e, unsigned i) {return e->arg (i);} - inline Expr boundName (Expr e, unsigned i) - {return fname (decl (e, i));} - inline Expr boundSort (Expr e, unsigned i) - {return rangeTy (decl (e, i));} - - - inline Expr body (Expr e) {return *(--(e->args_end ()));} - - - template - Expr abs (const Range &r, Expr e) - { - Expr abs = expr::details::absConstants (r, e); - if (abs == e) return e; - - ExprVector args; - args.reserve (std::distance (std::begin(r), std::end(r)) + 1); - for (auto &v : r) - { - assert (bind::IsConst() (v)); - args.push_back (bind::fname (v)); - } - - args.push_back (abs); - - return mknary (args); - } - - template - Expr abs (Expr v, Expr e) - { - std::array a = {v} ; - return abs (a, e); - } - - template - Expr abs (Expr v0, Expr v1, Expr e) - { - std::array a = {v0,v1}; - return abs (a, e); - } - - template - Expr abs (Expr v0, Expr v1, Expr v2, Expr e) - { - std::array a = {v0,v1,v2}; - return abs (a, e); - } - - - template - Expr sub (const Range &r, Expr e) {return expr::details::subBndVars (r, e);} - - inline Expr sub (Expr v0, Expr e) - { - std::array a = {v0}; - return sub (a, e); - } - - inline Expr sub (Expr v0, Expr v1, Expr e) - { - std::array a = {v0,v1}; - return sub (a, e); - } - - inline Expr sub (Expr v0, Expr v1, Expr v2, Expr e) - { - std::array a = {v0,v1,v2}; - return sub (a, e); - } - - - template - Expr betaReduce (Expr lambda, const Range &r) - { - // -- nullptr - if (!lambda) return lambda; - // -- not lambda - if (!isOpX (lambda)) return lambda; - - // -- nullary - if (numBound (lambda) == 0) return body (lambda); - - // -- number of arguments must match number of bound variables - assert (std::distance(std::begin(r), std::end(r)) == numBound(lambda)); - - // -- replace bound variables - // XXX Need to decide on the order, this might be opposite from what clients expect - return sub(r, body(lambda)); - } - - inline Expr betaReduce (Expr lambda, Expr v0) - { - std::array a = {v0}; - return betaReduce (lambda, a); - } - inline Expr betaReduce (Expr lambda, Expr v0, Expr v1) - { - std::array a = {v0, v1}; - return betaReduce (lambda, a); - } - inline Expr betaReduce (Expr lambda, Expr v0, Expr v1, Expr v2) - { - std::array a = {v0, v1, v2}; - return betaReduce (lambda, a); - } - inline Expr betaReduce (Expr lambda, Expr v0, Expr v1, Expr v2, Expr v3) - { - std::array a = {v0, v1, v2, v3}; - return betaReduce (lambda, a); - } + + inline bool hasUninterp (Expr e1) + { + HasUninterp co; + dagVisit (co, e1); + return co.found; } - } - - + namespace op + { + namespace boolop + { + namespace + { + template + struct BS + { + std::shared_ptr _r; - + BS (std::shared_ptr r) : _r(r) {} + BS (T *r) : _r (r) {} - + VisitAction operator() (Expr exp) + { + // -- apply the rewriter + if (isOp (exp)) + return VisitAction::changeDoKidsRewrite (exp, _r); + // -- do not descend into non-boolean operators + return VisitAction::skipKids (); + } + }; + } - /**********************************************************************/ - /* Visitors */ - /**********************************************************************/ - namespace - { - /* Visitors are hidden. Only to be used internally. */ + /** + * Very simple simplifier for Boolean Operators + */ + inline Expr simplify (Expr exp) + { + BS bs(std::make_shared (exp->efac ())); + return dagVisit (bs, exp); + } - struct RAV: public std::unary_function - { - Expr s; - Expr t; + /** + * Very simple normalizer for AND/OR expressions + */ + inline Expr norm (Expr exp) + { + BS bs (new NormalizeOps ()); + return dagVisit (bs, exp); + } - RAV (const RAV &o) : s(o.s), t(o.t) {} - RAV (Expr _s, Expr _t) : s(_s), t(_t) {} - VisitAction operator() (Expr exp) const - { return exp == s ? VisitAction::changeTo (t) : VisitAction::doKids (); } - }; - struct RAVALL: public std::unary_function - { - ExprVector* s; - ExprVector* t; - unsigned int sz; - - RAVALL (ExprVector* _s, ExprVector* _t) : s(_s), t(_t), sz(_s->size()) { } - VisitAction operator() (Expr exp) const - { - // TODO: could be optimized further, - // e.g., when all elements of s and t have the same type... - for (unsigned int i = 0; i < sz; i++ ) - if (exp == s->at(i)) return VisitAction::changeTo (t->at(i)); - return VisitAction::doKids (); - } - }; + /** Gather binary Boolean operators into n-ary ones. Helps + readability. Best done after NNF */ + inline Expr gather (Expr exp) + { + BS go (new GatherOps ()); + return dagVisit (go, exp); + } - struct RAVALLM: public std::unary_function - { - ExprMap& m; - RAVALLM (ExprMap& _m) : m(_m) { } - VisitAction operator() (Expr exp) const - { - if (m[exp] != NULL) return VisitAction::changeTo (m[exp]); - return VisitAction::doKids (); - } - }; + /** + * Converts to NNF. Assumes the only Boolean operators of exp + * are AND/OR/NEG. + */ + inline Expr nnf (Expr exp) + { + NNF n(exp->efac ()); + return dagVisit (n, exp); + } - struct RAVSIMP: public std::unary_function - { - Expr s; - Expr t; + /** Makes an expression pretty for printing */ + inline Expr pp (Expr exp) { return gather (nnf (exp)); } - std::shared_ptr r; + } + } +} - RAVSIMP (const RAVSIMP &o) : s(o.s), t(o.t), r(o.r) {} - RAVSIMP (Expr _s, Expr _t) : - s(_s), t(_t), r(std::make_shared (s->efac ())) {} +#include "ExprBv.hh" - VisitAction operator() (Expr exp) const - { - if (exp == s) return VisitAction::changeTo (t); - return VisitAction::changeDoKidsRewrite (exp, r); - } - }; +namespace std +{ + /** standard order of expressions by their id */ + template <> struct less + { + bool operator() (const expr::ENode *x, const expr::ENode *y) const + { + if (x == NULL) return y != NULL; + if (y == NULL) return false; + return x->getId () < y->getId (); + } - template - struct FV : public std::unary_function - { - F filter; - - OutputIterator out; - ExprSet seen; - - typedef FV this_type; - FV (const this_type &o) : filter (o.filter), out(o.out), seen (o.seen) - { assert (0); } - - FV (F f, OutputIterator o) : filter (f), out (o) {} - VisitAction operator() (Expr exp) - { - if (seen.count (exp) > 0) return VisitAction::skipKids (); - seen.insert (exp); - - if (filter (exp)) - { - *(out++) = exp; - return VisitAction::doKids (); - } - - return VisitAction::doKids (); - } - }; - - template - struct RV : public std::unary_function - { - typedef typename M::const_iterator const_iterator; - - const M ↦ - RV (const M &m) : map (m) {} - VisitAction operator() (Expr exp) const - { - const_iterator it = map.find (exp); - - return it == map.end () ? VisitAction::doKids () : - VisitAction::changeTo (it->second); - } }; - - template - struct RVSIMP : public std::unary_function - { - typedef typename M::const_iterator const_iterator; - - const M ↦ - - std::shared_ptr r; - - typedef RVSIMP this_type; - - RVSIMP (const this_type &o) : map (o.map), r (o.r) {} - RVSIMP (ExprFactory &fac, const M &m) : - map (m), - r (std::make_shared (fac)) - {} - - VisitAction operator() (Expr exp) const - { - const_iterator it = map.find (exp); - - if (it == map.end ()) - return VisitAction::changeDoKidsRewrite (exp, r); - - return VisitAction::changeTo (it->second); - } - }; +} - struct CV : public std::unary_function - { - Expr e; - bool found; - ExprSet seen; - - CV (const CV &o) : e(o.e), found (o.found), seen (o.seen) - { assert (0); } - - CV (Expr exp) : e(exp), found(false) {} - - VisitAction operator() (Expr exp) - { - if (found || - seen.count (exp) > 0 || - e == exp) - { - found = true; - return VisitAction::skipKids (); - } - seen.insert (e); - return VisitAction::doKids (); - } - }; +#include +#include +#include +namespace expr +{ + using namespace boost; + /** LRU Cache */ template - struct ContainsOp : public std::unary_function + class ExprCache { - bool found; + typedef boost::bimaps::bimap, + boost::bimaps::list_of > cache_type; + typedef typename cache_type::left_value_type value_type; + typedef typename cache_type::right_iterator right_iterator; - ContainsOp () : found(false) {} - VisitAction operator() (Expr exp) - { - if (found || isOpX(exp)) - { - found = true; - return VisitAction::skipKids (); - } - return VisitAction::doKids (); - } - }; + cache_type cache; + size_t capacity; + + public: + typedef typename cache_type::left_const_iterator const_iterator; + typedef typename cache_type::left_iterator iterator; - struct HasUninterp : public std::unary_function - { - bool found; - HasUninterp () : found(false) {} + public: + ExprCache (size_t c) : capacity(c) {} - VisitAction operator() (Expr exp) - { - if (found || isOpX(exp)) + ~ExprCache () { clear (); } + + void clear () { - if (exp->arity() > 0) - { - if (isOpX(exp->arg(0)) && - "BOOL" == boost::lexical_cast (exp->arg(0)->last()) && - exp->arg(0)->arity() > 2) + for (iterator it = cache.left.begin (), end = cache.left.end (); + it != end; ++it) { - found = true; - return VisitAction::skipKids (); + ENode *n = it->first; + n->efac ().Deref (n); } - } + cache.clear (); } - return VisitAction::doKids (); - } - }; - - struct SIZE : public std::unary_function - { - size_t count; - - SIZE () : count(0) {} - - VisitAction operator() (Expr exp) - { - count++; - return VisitAction::doKids (); - } - }; - - template - struct RW : public std::unary_function - { - std::shared_ptr _r; - - typedef RW this_type; - - RW (const this_type &o) : _r (o._r) {} - RW(std::shared_ptr r) : _r(r) {} - - VisitAction operator() (Expr exp) - { - return VisitAction::changeDoKidsRewrite (exp, _r); - } - }; - - } - - /**********************************************************************/ - /* Utility Functions */ - /**********************************************************************/ - - /** Applies a rewriter */ - template - Expr rewrite (std::shared_ptr r, Expr e) - { - RW rw(r); - return dagVisit (rw, e); - } - - /** Size of an expression as a DAG */ - inline size_t dagSize (Expr e) - { - SIZE sz; - dagVisit (sz, e); - return sz.count; - } - - /** Size of an expression as a tree */ - inline size_t treeSize (Expr e) - { - SIZE sz; - visit (sz, e); - return sz.count; - } - - - // -- replace all occurrences of s by t - inline Expr replaceAll (Expr exp, Expr s, Expr t) - { - RAV rav(s,t); - return dagVisit (rav, exp); - } - - // pairwise replacing - inline Expr replaceAll (Expr exp, ExprVector& s, ExprVector& t) - { - assert(s.size() == t.size()); - RAVALL rav(&s, &t); - return dagVisit (rav, exp); - } - - // pairwise replacing - inline Expr replaceAll (Expr exp, ExprMap& m) - { - RAVALLM rav(m); - return dagVisit (rav, exp); - } - - /** Replace all occurrences of s by t while simplifying the result */ - inline Expr replaceAllSimplify (Expr exp, Expr s, Expr t) - { - RAVSIMP rav(s,t); - return dagVisit (rav, exp); - } - - // -- collect all sub-expressions of exp that satisfy the filter - template - void filter (Expr exp, F filter, OutputIterator out) - { - FV fv(filter, out); - dagVisit (fv, exp); - } - - // template - // void filter (Expr exp, F f, ExprSet &out) - // { - // filter (exp, f, std::inserter (out, out.begin ())); - // } - - - /** A wrapper to use any functional object as a replace-map */ - template - struct fn_map - { - struct const_iterator - { - ExprPair pair; - const_iterator () : pair (Expr(), Expr()) {} - - const_iterator (Expr u, Expr v) : pair (u, v) {} - - bool operator== (const const_iterator &other) const - { return pair == other.pair; } - - const ExprPair &operator*() const { return pair; } - const ExprPair *operator->() const { return &pair; } - }; - const_iterator end_iterator; + const_iterator find (Expr e) + { + const_iterator it = cache.left.find (&*e); + if (it != cache.left.end ()) + cache.right.relocate (cache.right.end (), + cache.project_right (it)); + return it; + } - /** the function */ - F f; - fn_map (const F &fn) : f(fn) {} - - const_iterator find (Expr exp) const - { - Expr res = f(exp); - if (res) return const_iterator (exp, res); - return end (); - } + const_iterator end () const + { + return cache.left.end (); + } - const_iterator end () const - { - return end_iterator; - } - }; - - - template - fn_map mk_fn_map (const F &fn) { return fn_map (fn); } - - template - Expr replace (Expr exp, const M &map) - { - RV rv(map); - return dagVisit (rv, exp); - } - - - /** Replace and simplify */ - template - Expr replaceSimplify (Expr exp, const M &map) - { - RVSIMP rv(exp->efac (), map); - return dagVisit (rv, exp); - } - - - /** Returns true if e1 contains e2 as a sub-expression */ - inline bool contains (Expr e1, Expr e2) - { - CV cv(e2); - dagVisit (cv, e1); - return cv.found; - } - - /** Returns true if e1 contains applications of T */ - template inline bool containsOp (Expr e1) - { - ContainsOp co; - dagVisit (co, e1); - return co.found; - } - - inline bool hasUninterp (Expr e1) - { - HasUninterp co; - dagVisit (co, e1); - return co.found; - } - - namespace op - { - namespace boolop - { - namespace - { - template - struct BS - { - std::shared_ptr _r; - - BS (std::shared_ptr r) : _r(r) {} - BS (T *r) : _r (r) {} - - - VisitAction operator() (Expr exp) - { - // -- apply the rewriter - if (isOp (exp)) - return VisitAction::changeDoKidsRewrite (exp, _r); - - // -- do not descend into non-boolean operators - return VisitAction::skipKids (); - } - }; - } - - /** - * Very simple simplifier for Boolean Operators - */ - inline Expr simplify (Expr exp) - { - BS bs(std::make_shared (exp->efac ())); - return dagVisit (bs, exp); - } - - /** - * Very simple normalizer for AND/OR expressions - */ - inline Expr norm (Expr exp) - { - BS bs (new NormalizeOps ()); - return dagVisit (bs, exp); - } - - - /** Gather binary Boolean operators into n-ary ones. Helps - readability. Best done after NNF */ - inline Expr gather (Expr exp) - { - BS go (new GatherOps ()); - return dagVisit (go, exp); - } - - - /** - * Converts to NNF. Assumes the only Boolean operators of exp - * are AND/OR/NEG. - */ - inline Expr nnf (Expr exp) - { - NNF n(exp->efac ()); - return dagVisit (n, exp); - } - - /** Makes an expression pretty for printing */ - inline Expr pp (Expr exp) { return gather (nnf (exp)); } - - } - } -} + std::pair insert (Expr e, T &v) + { + if (cache.size () == capacity) + { + right_iterator it = cache.right.begin (); + // -- dereference a key that is about to be deleted + ENode *old = it->second; + old->efac ().Deref (old); + cache.right.erase (it); + } + ENode *n = &*e; + n->Ref (); + return cache.left.insert (value_type (n, v)); + } -#include "ExprBv.hh" + size_t size () const { return cache.size (); } -namespace std -{ - /** standard order of expressions by their id */ - template <> struct less - { - bool operator() (const expr::ENode *x, const expr::ENode *y) const - { - if (x == NULL) return y != NULL; - if (y == NULL) return false; - - return x->getId () < y->getId (); - } - - }; + }; } - -#include -#include -#include namespace expr { - using namespace boost; - - /** LRU Cache */ - template - class ExprCache - { - typedef boost::bimaps::bimap, - boost::bimaps::list_of > cache_type; - typedef typename cache_type::left_value_type value_type; - typedef typename cache_type::right_iterator right_iterator; - - - cache_type cache; - size_t capacity; - - public: - typedef typename cache_type::left_const_iterator const_iterator; - typedef typename cache_type::left_iterator iterator; - - - public: - ExprCache (size_t c) : capacity(c) {} - - ~ExprCache () { clear (); } - - void clear () - { - for (iterator it = cache.left.begin (), end = cache.left.end (); - it != end; ++it) - { - ENode *n = it->first; - n->efac ().Deref (n); - } - cache.clear (); - } - - const_iterator find (Expr e) - { - const_iterator it = cache.left.find (&*e); - if (it != cache.left.end ()) - cache.right.relocate (cache.right.end (), - cache.project_right (it)); - return it; - } - - const_iterator end () const + inline size_t hash_value (Expr e) { - return cache.left.end (); + std::hash hasher; + return hasher (e.get ()); } - - std::pair insert (Expr e, T &v) - { - if (cache.size () == capacity) - { - right_iterator it = cache.right.begin (); - // -- dereference a key that is about to be deleted - ENode *old = it->second; - old->efac ().Deref (old); - cache.right.erase (it); - } - ENode *n = &*e; - n->Ref (); - return cache.left.insert (value_type (n, v)); - } - - size_t size () const { return cache.size (); } - - - }; -} - -namespace expr -{ - inline size_t hash_value (Expr e) - { - std::hash hasher; - return hasher (e.get ()); - } } /// implement boost::hash namespace boost { - template<> struct hash : - public std::unary_function - { - std::size_t operator() (const expr::Expr &v) const + template<> struct hash : + public std::unary_function { - return expr::hash_value (v); - } - }; + std::size_t operator() (const expr::Expr &v) const + { + return expr::hash_value (v); + } + }; } /// implement std::hash namespace std { - template<> struct hash : - public std::unary_function - { - std::size_t operator() (const expr::Expr &v) const + template<> struct hash : + public std::unary_function { - return expr::hash_value (v); - } - }; + std::size_t operator() (const expr::Expr &v) const + { + return expr::hash_value (v); + } + }; } namespace expr { - namespace details - { - template struct ABSCST; - - template - struct AbsCst - { - typedef AbsCst this_type; - - const Range &m_r; - std::unordered_map m_evmap; - - std::vector > m_pinned; - - typedef std::map > > cache_type; - cache_type m_cache; - - AbsCst (const Range &r); - DagVisit > &cachedVisitor (unsigned offset); - - }; - - template - struct ABSCST : public std::unary_function - { - Abs &m_a; - unsigned m_offset; - - inline ABSCST (Abs &a, unsigned offset); - inline VisitAction operator() (Expr exp) const; - }; - - template - AbsCst::AbsCst (const Range &r) : m_r(r) + namespace details { - unsigned cnt = std::distance (std::begin(r), std::end(r)); - for (const Expr &v : m_r) m_evmap[v] = --cnt; - } - - template - DagVisit > > &AbsCst::cachedVisitor (unsigned offset) - { - typedef AbsCst this_type; - - auto it = m_cache.find (offset); - if (it != m_cache.end ()) return it->second; - - m_pinned.push_back (ABSCST (*this, offset)); - - auto v = m_cache.insert - (std::make_pair(offset, DagVisit > (m_pinned.back ()))); - return (v.first)->second; - } - - - template - ABSCST::ABSCST (Abs &a, unsigned offset) : - m_a(a), m_offset (offset) {} - - template - VisitAction ABSCST::operator() (Expr exp) const - { - if (op::bind::isFdecl (exp)) return VisitAction::skipKids (); - - if (op::bind::IsConst() (exp)) - { - auto it = m_a.m_evmap.find (exp); - if (it != m_a.m_evmap.end ()) - { - Expr b = bind::bvar (m_offset + it->second, bind::sortOf (exp)); - return VisitAction::changeTo (b); + template struct ABSCST; + + template + struct AbsCst + { + typedef AbsCst this_type; + + const Range &m_r; + std::unordered_map m_evmap; + + std::vector > m_pinned; + + typedef std::map > > cache_type; + cache_type m_cache; + + AbsCst (const Range &r); + DagVisit > &cachedVisitor (unsigned offset); + + }; + + template + struct ABSCST : public std::unary_function + { + Abs &m_a; + unsigned m_offset; + + inline ABSCST (Abs &a, unsigned offset); + inline VisitAction operator() (Expr exp) const; + }; + + template + AbsCst::AbsCst (const Range &r) : m_r(r) + { + unsigned cnt = std::distance (std::begin(r), std::end(r)); + for (const Expr &v : m_r) m_evmap[v] = --cnt; } - return VisitAction::skipKids (); - } - else if (isOp (exp)) - { - auto &dv = m_a.cachedVisitor (m_offset + 1); - ExprVector kids (exp->args_begin (), exp->args_end ()); - Expr &last = kids.back (); - last = dv (last); - return VisitAction::changeTo (exp->efac ().mkNary (exp->op (), kids)); - } - - return VisitAction::doKids (); - } - - - template - Expr absConstants (const Range &r, Expr e) - { - AbsCst a(r); - auto v = ABSCST > (a, 0); - return dagVisit (v, e); - } + template + DagVisit > > &AbsCst::cachedVisitor (unsigned offset) + { + typedef AbsCst this_type; - - template struct SUBBND; - - template - struct SubBnd - { - typedef SubBnd this_type; - - const Range &m_r; - unsigned m_sz; - std::vector > m_pinned; - typedef std::map > > cache_type; - cache_type m_cache; - - SubBnd (const Range &r) : m_r (r) - {m_sz = std::distance (std::begin (m_r), std::end (m_r));} - - DagVisit > &cachedVisitor (unsigned offset); - - Expr sub (unsigned idx) - { - if (idx >= m_sz) return Expr (0); - auto it = std::end (m_r) - 1 - idx; - return *it; - } - - }; - - template - struct SUBBND : public std::unary_function - { - Sub &m_a; - unsigned m_offset; + auto it = m_cache.find (offset); + if (it != m_cache.end ()) return it->second; + + m_pinned.push_back (ABSCST (*this, offset)); + + auto v = m_cache.insert + (std::make_pair(offset, DagVisit > (m_pinned.back ()))); + return (v.first)->second; + } + + + template + ABSCST::ABSCST (Abs &a, unsigned offset) : + m_a(a), m_offset (offset) {} + + template + VisitAction ABSCST::operator() (Expr exp) const + { + if (op::bind::isFdecl (exp)) return VisitAction::skipKids (); + + if (op::bind::IsConst() (exp)) + { + auto it = m_a.m_evmap.find (exp); + if (it != m_a.m_evmap.end ()) + { + Expr b = bind::bvar (m_offset + it->second, bind::sortOf (exp)); + return VisitAction::changeTo (b); + } + return VisitAction::skipKids (); + } + else if (isOp (exp)) + { + auto &dv = m_a.cachedVisitor (m_offset + 1); + ExprVector kids (exp->args_begin (), exp->args_end ()); + Expr &last = kids.back (); + last = dv (last); + return VisitAction::changeTo (exp->efac ().mkNary (exp->op (), kids)); + } + + return VisitAction::doKids (); + } + + + + template + Expr absConstants (const Range &r, Expr e) + { + AbsCst a(r); + auto v = ABSCST > (a, 0); + return dagVisit (v, e); + } + + + template struct SUBBND; + + template + struct SubBnd + { + typedef SubBnd this_type; + + const Range &m_r; + unsigned m_sz; + std::vector > m_pinned; + typedef std::map > > cache_type; + cache_type m_cache; - SUBBND (Sub &a, unsigned offset) : m_a (a), m_offset (offset) {}; + SubBnd (const Range &r) : m_r (r) + {m_sz = std::distance (std::begin (m_r), std::end (m_r));} - VisitAction operator() (Expr exp) const - { - if (bind::isFdecl (exp)) return VisitAction::skipKids (); - else if (bind::isBVar (exp)) + DagVisit > &cachedVisitor (unsigned offset); + + Expr sub (unsigned idx) + { + if (idx >= m_sz) return Expr (0); + auto it = std::end (m_r) - 1 - idx; + return *it; + } + + }; + + template + struct SUBBND : public std::unary_function + { + Sub &m_a; + unsigned m_offset; + + SUBBND (Sub &a, unsigned offset) : m_a (a), m_offset (offset) {}; + + VisitAction operator() (Expr exp) const + { + if (bind::isFdecl (exp)) return VisitAction::skipKids (); + else if (bind::isBVar (exp)) + { + unsigned idx = bind::bvarId (exp); + if (idx < m_offset) return VisitAction::skipKids (); + + Expr u = m_a.sub (idx - m_offset); + return u ? VisitAction::changeTo (u) : VisitAction::skipKids (); + } + else if (isOp (exp)) + { + auto &dv = m_a.cachedVisitor (m_offset + 1); + ExprVector kids (exp->args_begin (), exp->args_end ()); + Expr &last = kids.back (); + last = dv (last); + return VisitAction::changeTo (exp->efac ().mkNary (exp->op (), kids)); + } + return VisitAction::doKids (); + } + }; + + template + DagVisit > > &SubBnd::cachedVisitor (unsigned offset) { - unsigned idx = bind::bvarId (exp); - if (idx < m_offset) return VisitAction::skipKids (); - - Expr u = m_a.sub (idx - m_offset); - return u ? VisitAction::changeTo (u) : VisitAction::skipKids (); + typedef SubBnd this_type; + auto it = m_cache.find (offset); + if (it != m_cache.end ()) return it->second; + + m_pinned.push_back (SUBBND (*this, offset)); + auto v = m_cache.insert + (std::make_pair (offset, DagVisit > (m_pinned.back ()))); + return (v.first)->second; } - else if (isOp (exp)) + + + template + Expr subBndVars (const Range &r, Expr e) { - auto &dv = m_a.cachedVisitor (m_offset + 1); - ExprVector kids (exp->args_begin (), exp->args_end ()); - Expr &last = kids.back (); - last = dv (last); - return VisitAction::changeTo (exp->efac ().mkNary (exp->op (), kids)); + SubBnd a(r); + auto v = SUBBND > (a, 0); + return dagVisit (v, e); } - return VisitAction::doKids (); - } - }; - - template - DagVisit > > &SubBnd::cachedVisitor (unsigned offset) - { - typedef SubBnd this_type; - auto it = m_cache.find (offset); - if (it != m_cache.end ()) return it->second; - - m_pinned.push_back (SUBBND (*this, offset)); - auto v = m_cache.insert - (std::make_pair (offset, DagVisit > (m_pinned.back ()))); - return (v.first)->second; } - - - template - Expr subBndVars (const Range &r, Expr e) - { - SubBnd a(r); - auto v = SUBBND > (a, 0); - return dagVisit (v, e); - } - } } -#endif +#endif \ No newline at end of file diff --git a/include/ufo/Smt/Z3n.hpp b/include/ufo/Smt/Z3n.hpp index 97d05cf88..f778e1071 100644 --- a/include/ufo/Smt/Z3n.hpp +++ b/include/ufo/Smt/Z3n.hpp @@ -18,9 +18,9 @@ DM-0002198 #ifndef __UFO_Z3N_HPP_ #define __UFO_Z3N_HPP_ -/** - New Z3 interface based of Z3 v4. - +/**getModelPtr + New Z3 interface based of Z3 v4. + */ #include "z3.h" @@ -46,22 +46,22 @@ DM-0002198 namespace z3 { - struct ast_ptr_hash : public std::unary_function - { - std::size_t operator() (const ast &ast) const + struct ast_ptr_hash : public std::unary_function { - std::hash hasher; - return hasher (static_cast (ast)); - } - }; - - struct ast_ptr_equal_to : public std::binary_function - { - bool operator() (const ast &a1, const ast &a2) const + std::size_t operator() (const ast &ast) const + { + std::hash hasher; + return hasher (static_cast (ast)); + } + }; + + struct ast_ptr_equal_to : public std::binary_function { - return static_cast(a1) == static_cast(a2); - } - }; + bool operator() (const ast &a1, const ast &a2) const + { + return static_cast(a1) == static_cast(a2); + } + }; } namespace z3 @@ -88,7 +88,7 @@ namespace z3 void insert (ast const &k, ast const &v) { Z3_ast_map_insert(ctx(), m_map, k, v); check_error(); }; ast find (ast const &k) { Z3_ast res = Z3_ast_map_find(ctx(), m_map, k); check_error(); return ast (ctx (), res); }; ast_vector get_keys() { Z3_ast_vector res = Z3_ast_map_keys(ctx(), m_map); check_error(); return ast_vector (ctx (), res); }; - + friend std::ostream & operator<<(std::ostream & out, ast_map const & v) { out << Z3_ast_map_to_string(v.ctx(), v); return out; } }; } @@ -96,118 +96,118 @@ namespace z3 namespace ufo { - using namespace expr; + using namespace expr; - inline boost::tribool z3l_to_tribool (Z3_lbool l) - { - if (l == Z3_L_TRUE) return true; - else if (l == Z3_L_FALSE) return false; - return boost::indeterminate; - } + inline boost::tribool z3l_to_tribool (Z3_lbool l) + { + if (l == Z3_L_TRUE) return true; + else if (l == Z3_L_FALSE) return false; + return boost::indeterminate; + } - template - Expr z3_lite_simplify (Z &z3, Expr e) - { - z3::context &ctx = z3.get_ctx (); - z3::ast ast (z3.toAst (e)); + template + Expr z3_lite_simplify (Z &z3, Expr e) + { + z3::context &ctx = z3.get_ctx (); + z3::ast ast (z3.toAst (e)); - return z3.toExpr (z3::ast (ctx, Z3_simplify (ctx, ast))); - } + return z3.toExpr (z3::ast (ctx, Z3_simplify (ctx, ast))); + } - template - Expr z3_simplify (Z &z3, Expr e) - { - return z3_lite_simplify (z3, e); - } + template + Expr z3_simplify (Z &z3, Expr e) + { + return z3_lite_simplify (z3, e); + } - template - Expr z3_forall_elim (Z &z3, Expr e, const ExprSet &vars) - { - z3::context &ctx = z3.get_ctx (); + template + Expr z3_forall_elim (Z &z3, Expr e, const ExprSet &vars) + { + z3::context &ctx = z3.get_ctx (); - z3::ast ast (z3.toAst (e)); - std::vector bound (vars.size ()); - z3::ast_vector pinned (ctx); + z3::ast ast (z3.toAst (e)); + std::vector bound (vars.size ()); + z3::ast_vector pinned (ctx); - size_t cnt = 0; - for (Expr var : vars) - { - z3::ast a (z3.toAst (var)); - pinned.push_back (a); - assert (a.kind () == Z3_APP_AST); + size_t cnt = 0; + for (Expr var : vars) + { + z3::ast a (z3.toAst (var)); + pinned.push_back (a); + assert (a.kind () == Z3_APP_AST); - bound [cnt++] = Z3_to_app (ctx, a); - } + bound [cnt++] = Z3_to_app (ctx, a); + } - z3::ast qexpr = z3::ast (ctx, - Z3_mk_forall_const (ctx, 0, - bound.size (), &bound[0], - 0, NULL, ast)); + z3::ast qexpr = z3::ast (ctx, + Z3_mk_forall_const (ctx, 0, + bound.size (), &bound[0], + 0, NULL, ast)); - z3::goal goal (ctx); - Z3_goal_assert (ctx, goal, qexpr); + z3::goal goal (ctx); + Z3_goal_assert (ctx, goal, qexpr); - z3::tactic qe (ctx, "qe"); - ctx.check_error (); + z3::tactic qe (ctx, "qe"); + ctx.check_error (); - z3::apply_result ares = qe (goal); - ctx.check_error (); + z3::apply_result ares = qe (goal); + ctx.check_error (); - assert (ares.size () == 1); - goal = ares [0]; + assert (ares.size () == 1); + goal = ares [0]; - ExprVector res; - for (unsigned i = 0; i < goal.size (); ++i) - { - z3::ast gast (ctx, Z3_goal_formula (ctx, goal, i)); - res.push_back (z3.toExpr (gast)); - } + ExprVector res; + for (unsigned i = 0; i < goal.size (); ++i) + { + z3::ast gast (ctx, Z3_goal_formula (ctx, goal, i)); + res.push_back (z3.toExpr (gast)); + } + + return mknary (mk (e->efac ()), res); + } - return mknary (mk (e->efac ()), res); - } + template + Expr z3_from_smtlib (Z &z3, std::string smt) + { + z3::context &ctx = z3.get_ctx (); - template - Expr z3_from_smtlib (Z &z3, std::string smt) - { - z3::context &ctx = z3.get_ctx (); + Z3_ast_vector b = Z3_parse_smtlib2_string (ctx, smt.c_str (), 0, NULL, NULL, 0, NULL, NULL); + Z3_ast* args = new Z3_ast[Z3_ast_vector_size(ctx, b)]; - Z3_ast_vector b = Z3_parse_smtlib2_string (ctx, smt.c_str (), 0, NULL, NULL, 0, NULL, NULL); - Z3_ast* args = new Z3_ast[Z3_ast_vector_size(ctx, b)]; + for (unsigned i = 0; i < Z3_ast_vector_size(ctx, b); ++i) { + args[i] = Z3_ast_vector_get(ctx, b, i); + } - for (unsigned i = 0; i < Z3_ast_vector_size(ctx, b); ++i) { - args[i] = Z3_ast_vector_get(ctx, b, i); + z3::ast ast (ctx, Z3_mk_and(ctx, Z3_ast_vector_size(ctx, b), args)); + ctx.check_error (); + return z3.toExpr (ast); } - z3::ast ast (ctx, Z3_mk_and(ctx, Z3_ast_vector_size(ctx, b), args)); - ctx.check_error (); - return z3.toExpr (ast); - } + template + Expr z3_from_smtlib_file (Z &z3, const char *fname) + { + z3::context &ctx = z3.get_ctx (); - template - Expr z3_from_smtlib_file (Z &z3, const char *fname) - { - z3::context &ctx = z3.get_ctx (); + Z3_ast_vector b = Z3_parse_smtlib2_file (ctx, fname, 0, NULL, NULL, 0, NULL, NULL); + Z3_ast* args = new Z3_ast[Z3_ast_vector_size(ctx, b)]; - Z3_ast_vector b = Z3_parse_smtlib2_file (ctx, fname, 0, NULL, NULL, 0, NULL, NULL); - Z3_ast* args = new Z3_ast[Z3_ast_vector_size(ctx, b)]; + for (unsigned i = 0; i < Z3_ast_vector_size(ctx, b); ++i) { + args[i] = Z3_ast_vector_get(ctx, b, i); + } - for (unsigned i = 0; i < Z3_ast_vector_size(ctx, b); ++i) { - args[i] = Z3_ast_vector_get(ctx, b, i); + z3::ast ast (ctx, Z3_mk_and(ctx, Z3_ast_vector_size(ctx, b), args)); + ctx.check_error (); + return z3.toExpr (ast); } - z3::ast ast (ctx, Z3_mk_and(ctx, Z3_ast_vector_size(ctx, b), args)); - ctx.check_error (); - return z3.toExpr (ast); - } + template + std::string z3_to_smtlib (Z &z3, Expr e) + { return z3.toSmtLib (e); } - template - std::string z3_to_smtlib (Z &z3, Expr e) - { return z3.toSmtLib (e); } - - template - Expr z3_qe_model_project_skolem (Z &z3, M &model, Expr v, Expr body, ExprMap &map) + template + Expr z3_qe_model_project_skolem (Z &z3, M &model, Expr v, Expr body, ExprMap &map) { z3::context &ctx = z3.get_ctx (); z3::ast b (ctx, z3.toAst (body)); @@ -217,9 +217,9 @@ namespace ufo pinned.push_back (a); bound.push_back (Z3_to_app (ctx, a)); assert (a.kind () == Z3_APP_AST); - + z3::ast_map emap (ctx); - + z3::ast res (ctx, Z3_qe_model_project_skolem (ctx, model.get_model (), bound.size (), &bound [0], b, emap)); @@ -238,860 +238,869 @@ namespace ufo namespace ufo { - typedef std::unordered_map ast_expr_map; - - typedef std::unordered_map expr_ast_map; - - template class ZSolver; - template class ZModel; - template class ZFixedPoint; - template class ZParams; - - template - void z3n_set_param (char const *p, V v) { z3::set_param (p, v); } - inline void z3n_reset_params () { z3::reset_params (); } - - using namespace boost; - - /** - * AST manager. Responsible for converting between Z3 ast and Expr. - * - * \tparam M marshaler that converts from Expr to z3::ast - * \tparam U unmarshaler that converts from z3::ast to Expr - */ - template - class ZContext : boost::noncopyable - { - private: - typedef ZContext this_type; - typedef ZModel this_model_type; - typedef bimap< bimaps::unordered_set_of, - bimaps::unordered_set_of > cache_type; - - ExprFactory& efac; - z3::context ctx; - - cache_type cache; - - void init () - { - Z3_set_ast_print_mode (ctx, Z3_PRINT_SMTLIB2_COMPLIANT); - } + typedef std::unordered_map ast_expr_map; - protected: - z3::context &get_ctx () { return ctx; } + typedef std::unordered_map expr_ast_map; - z3::ast toAst (Expr e) - { - expr_ast_map seen; - return M::marshal (e, get_ctx (), cache.left, seen); - } + template class ZSolver; + template class ZModel; + template class ZFixedPoint; + template class ZParams; - Expr toExpr (z3::ast a) - { - if (!a) return Expr(); + template + void z3n_set_param (char const *p, V v) { z3::set_param (p, v); } + inline void z3n_reset_params () { z3::reset_params (); } - ast_expr_map seen; - return U::unmarshal (a, get_efac (), cache.right, seen); - } - ExprFactory &get_efac () { return efac; } - typedef std::unordered_set Z3_func_decl_set; + using namespace boost; - void allDecls (Z3_ast a, Z3_func_decl_set &seen) + /** + * AST manager. Responsible for converting between Z3 ast and Expr. + * + * \tparam M marshaler that converts from Expr to z3::ast + * \tparam U unmarshaler that converts from z3::ast to Expr + */ + template + class ZContext : boost::noncopyable { - if (Z3_get_ast_kind (ctx, a) != Z3_APP_AST) return; + private: + typedef ZContext this_type; + typedef ZModel this_model_type; + typedef bimap< bimaps::unordered_set_of, + bimaps::unordered_set_of > cache_type; - Z3_app app = Z3_to_app (ctx, a); - Z3_func_decl fdecl = Z3_get_app_decl (ctx, app); - if (seen.count (fdecl) > 0) return; + ExprFactory& efac; + z3::context ctx; - if (Z3_get_decl_kind (ctx, fdecl) == Z3_OP_UNINTERPRETED && - Z3_get_domain_size (ctx, fdecl) == 0) - seen.insert (fdecl); + cache_type cache; - for (unsigned i = 0; i < Z3_get_app_num_args (ctx, app); i++) - allDecls (Z3_get_app_arg (ctx, app, i), seen); - } + void init () + { + Z3_set_ast_print_mode (ctx, Z3_PRINT_SMTLIB2_COMPLIANT); + } + + protected: + z3::context &get_ctx () { return ctx; } + + z3::ast toAst (Expr e) + { + expr_ast_map seen; + return M::marshal (e, get_ctx (), cache.left, seen); + } + Expr toExpr (z3::ast a) + { + if (!a) return Expr(); + ast_expr_map seen; + return U::unmarshal (a, get_efac (), cache.right, seen); + } - public: + ExprFactory &get_efac () { return efac; } - ZContext (ExprFactory &ef) : efac(ef) { init (); } - ZContext (ExprFactory &ef, z3::config &c) : efac (ef), ctx(c) { init (); } + typedef std::unordered_set Z3_func_decl_set; - ~ZContext () { cache.clear (); } + void allDecls (Z3_ast a, Z3_func_decl_set &seen) + { + if (Z3_get_ast_kind (ctx, a) != Z3_APP_AST) return; - template - void set (char const *p, V v) { ctx.set (p, v); } + Z3_app app = Z3_to_app (ctx, a); + Z3_func_decl fdecl = Z3_get_app_decl (ctx, app); + if (seen.count (fdecl) > 0) return; - std::string toSmtLib (Expr e) - { return boost::lexical_cast (this->toAst (e)); } + if (Z3_get_decl_kind (ctx, fdecl) == Z3_OP_UNINTERPRETED && + Z3_get_domain_size (ctx, fdecl) == 0) + seen.insert (fdecl); - std::string toSmtLibDecls (Expr e) - { - std::ostringstream out; - Z3_func_decl_set seen; - z3::ast a (toAst (e)); - allDecls (static_cast(a), seen); - for (Z3_func_decl fdecl : seen) - out << Z3_func_decl_to_string (ctx, fdecl) << "\n"; - return out.str (); - } + for (unsigned i = 0; i < Z3_get_app_num_args (ctx, app); i++) + { + allDecls (Z3_get_app_arg (ctx, app, i), seen); + } + } - template - std::string toSmtLibDecls (const Range &rng) - { return toSmtLibDecls (mknary (mk (efac), rng)); } + public: - ExprFactory &getExprFactory () { return get_efac (); } + ZContext (ExprFactory &ef) : efac(ef) { init (); } + ZContext (ExprFactory &ef, z3::config &c) : efac (ef), ctx(c) { init (); } - friend class ZParams; - friend class ZSolver; - friend class ZModel; - friend class ZFixedPoint; - - friend Expr z3_qe_model_project_skolem - (this_type &z3, this_model_type &model, Expr v, Expr body, ExprMap &map); - friend Expr z3_lite_simplify (this_type &z3, Expr e); - friend Expr z3_simplify (this_type &z3, Expr e); - friend Expr z3_forall_elim (this_type &z3, Expr e, - const ExprSet &vars); - friend Expr z3_from_smtlib (this_type &z3, std::string smt); - friend Expr z3_from_smtlib_file (this_type &z3, - const char *fname); + ~ZContext () { cache.clear (); } - friend std::string z3_to_smtlib (this_type &z3, Expr e); - }; + template + void set (char const *p, V v) { ctx.set (p, v); } + std::string toSmtLib (Expr e) + { return boost::lexical_cast (this->toAst (e)); } - template - class ZModel : public std::unary_function - { - private: - typedef ZModel this_type; + std::string toSmtLibDecls (Expr e) + { + std::ostringstream out; + Z3_func_decl_set seen; + z3::ast a (toAst (e)); + allDecls (static_cast(a), seen); + for (Z3_func_decl fdecl : seen) + out << Z3_func_decl_to_string (ctx, fdecl) << "\n"; + return out.str (); + } - Z& z3; - z3::context &ctx; - Z3_model model; + template + std::string toSmtLibDecls (const Range &rng) + { return toSmtLibDecls (mknary (mk (efac), rng)); } - ExprFactory &efac; - bool isAsArray (const z3::ast &v) - { - if (v.kind () != Z3_APP_AST) return false; - - Z3_app app = Z3_to_app (ctx, v); - Z3_func_decl fdecl = Z3_get_app_decl (ctx, app); - return Z3_get_decl_kind (ctx, fdecl) == Z3_OP_AS_ARRAY; - } + ExprFactory &getExprFactory () { return get_efac (); } - Expr finterpToExpr (const z3::func_interp &zfunc) - { - ExprVector entries; - for (unsigned i = 0, sz = zfunc.num_entries (); i < sz; ++i) - entries.push_back (fentryToExpr (zfunc.entry (i))); + friend class ZParams; + friend class ZSolver; + friend class ZModel; + friend class ZFixedPoint; + + friend Expr z3_qe_model_project_skolem + (this_type &z3, this_model_type &model, Expr v, Expr body, ExprMap &map); + friend Expr z3_lite_simplify (this_type &z3, Expr e); + friend Expr z3_simplify (this_type &z3, Expr e); + friend Expr z3_forall_elim (this_type &z3, Expr e, + const ExprSet &vars); + friend Expr z3_from_smtlib (this_type &z3, std::string smt); + friend Expr z3_from_smtlib_file (this_type &z3, + const char *fname); + + friend std::string z3_to_smtlib (this_type &z3, Expr e); + }; - z3::ast elseV (ctx, Z3_func_interp_get_else (ctx, zfunc)); - Expr res = mdl::ftable (entries, z3.toExpr (elseV)); - return res; - } - Expr fentryToExpr (const z3::func_entry &zentry) + template + class ZModel : public std::unary_function { - ExprVector args; - for (unsigned i = 0, sz = zentry.num_args(); i < sz; ++i) - { - z3::ast arg (ctx, Z3_func_entry_get_arg (ctx, zentry, i)); - args.push_back (z3.toExpr (arg)); - } - z3::ast zval (ctx, Z3_func_entry_get_value (ctx, zentry)); - Expr res = mdl::fentry (args, z3.toExpr (zval)); - return res; - } + private: + typedef ZModel this_type; + Z& z3; + z3::context &ctx; + Z3_model model; - public: + ExprFactory &efac; - ZModel (Z &z) : - z3(z), ctx (z.get_ctx ()), model(nullptr), efac(z.get_efac ()) {} + bool isAsArray (const z3::ast &v) + { + if (v.kind () != Z3_APP_AST) return false; - ZModel (Z &z, const z3::model &m) : - z3(z), ctx(z.get_ctx ()), model (m), efac (z.get_efac ()) - {Z3_model_inc_ref (ctx, model);} + Z3_app app = Z3_to_app (ctx, v); + Z3_func_decl fdecl = Z3_get_app_decl (ctx, app); + return Z3_get_decl_kind (ctx, fdecl) == Z3_OP_AS_ARRAY; + } - ZModel (const this_type &o) : z3(o.z3), ctx(z3.get_ctx ()), - model (o.model), efac (z3.get_efac ()) - {if (model) Z3_model_inc_ref (ctx, model);} + Expr finterpToExpr (const z3::func_interp &zfunc) + { + ExprVector entries; + for (unsigned i = 0, sz = zfunc.num_entries (); i < sz; ++i) + entries.push_back (fentryToExpr (zfunc.entry (i))); - ~ZModel () - { - if (model) Z3_model_dec_ref (ctx, model); - model = nullptr; - } + z3::ast elseV (ctx, Z3_func_interp_get_else (ctx, zfunc)); + Expr res = mdl::ftable (entries, z3.toExpr (elseV)); + return res; + } - this_type &operator= (this_type other) - {swap (*this, other); return *this;} - - Z3_model &get_model () { return model; } + Expr fentryToExpr (const z3::func_entry &zentry) + { + ExprVector args; + for (unsigned i = 0, sz = zentry.num_args(); i < sz; ++i) + { + z3::ast arg (ctx, Z3_func_entry_get_arg (ctx, zentry, i)); + args.push_back (z3.toExpr (arg)); + } + z3::ast zval (ctx, Z3_func_entry_get_value (ctx, zentry)); + Expr res = mdl::fentry (args, z3.toExpr (zval)); + return res; + } - friend void swap (this_type &src, this_type &dst) - { - // -- only allow swap between models from the same context - assert (&src.z3 == &dst.z3); - swap (src.model, dst.model); - } - - Expr eval (Expr e, bool completion = false) - { - assert (model); - z3::ast ast (z3.toAst (e)); - Z3_ast raw_val = NULL; - if (Z3_model_eval (ctx, model, ast, completion, &raw_val) && raw_val) - { - z3::ast val (ctx, raw_val); - ctx.check_error (); - if (!isAsArray (val)) return z3.toExpr (val); - - - Z3_func_decl fdecl = Z3_get_as_array_func_decl (ctx, val); - z3::func_interp zfunc (ctx, Z3_model_get_func_interp (ctx, model, fdecl)); - ctx.check_error (); - return finterpToExpr (zfunc); - } - ctx.check_error (); - return mk (efac); - } + public: - ExprFactory &getExprFactory () { return z3.getExprFactory (); } - Expr operator() (Expr e) { return eval (e); } + ZModel (Z &z) : + z3(z), ctx (z.get_ctx ()), model(nullptr), efac(z.get_efac ()) {} - template - friend OutputStream &operator<< (OutputStream &out, this_type &model) - { - out << Z3_model_to_string (model.ctx, model.model); - return out; - } + ZModel (Z &z, const z3::model &m) : + z3(z), ctx(z.get_ctx ()), model (m), efac (z.get_efac ()) + {Z3_model_inc_ref (ctx, model);} - }; - - template - class ZParams - { - private: - typedef ZParams this_type; - - Z& z3; - z3::context &ctx; - z3::params params; - - public: - ZParams (Z &z) : z3(z), ctx(z.get_ctx ()), params (z.get_ctx ()) {} - void set (std::string k, bool b) { params.set (k.c_str (), b); } - void set (std::string k, unsigned n) { params.set (k.c_str (), n); } - void set (std::string k, double n) { params.set (k.c_str (), n); } - void set (std::string k, std::string v) - { params.set (k.c_str (), ctx.str_symbol (v.c_str ())); } - - void set (char const * k, bool b) { params.set (k, b); } - void set (char const * k, unsigned n) { params.set (k, n); } - void set (char const * k, double n) { params.set (k, n); } - void set (char const * k, char const *v ) - { params.set (k, ctx.str_symbol (v)); } - - operator z3::params () const { return params; } - operator Z3_params () const { return static_cast (params); } - - }; - - - template - class ZSolver - { - private: - Z& z3; - z3::context &ctx; - z3::solver solver; - ExprFactory &efac; - - public: - typedef ZSolver this_type; - typedef ZModel Model; - - ZSolver (Z &z) : - z3(z), ctx (z.get_ctx ()), solver (z.get_ctx ()), efac (z.get_efac ()) {} - - ZSolver (Z &z, const char *logic) : - z3(z), ctx (z.get_ctx ()), solver (z.get_ctx (), logic), efac (z.get_efac ()) {} - - ZSolver (Z &z, unsigned to) : - z3(z), ctx (z.get_ctx ()), solver (z.get_ctx ()), efac (z.get_efac ()) { - ZParams p(z); - p.set("timeout", to); - solver.set(p); - } + ZModel (const this_type &o) : z3(o.z3), ctx(z3.get_ctx ()), + model (o.model), efac (z3.get_efac ()) + {if (model) Z3_model_inc_ref (ctx, model);} - Z& getContext () {return z3;} - void set (const ZParams &p) { solver.set (p); } + ~ZModel () + { + if (model) Z3_model_dec_ref (ctx, model); + model = nullptr; + } - template - OutputStream &toSmtLib (OutputStream &out) - { - ExprVector v; - return toSmtLibAssuming (out, v); - } + this_type &operator= (this_type other) + {swap (*this, other); return *this;} + Z3_model &get_model () { return model; } - template - OutputStream &toSmtLibAssuming (OutputStream &out, - const Range &rng) - { - ExprVector asserts; - assertions (std::back_inserter (asserts)); - out << z3.toSmtLibDecls (asserts); - out << "\n"; - for (const Expr &a : asserts) - out << "(assert " << z3.toSmtLib (a) << ")\n"; - - out << "(check-sat"; - for (const Expr &a : rng) out << " " << *a; - out << ")\n"; - return out; - } + friend void swap (this_type &src, this_type &dst) + { + // -- only allow swap between models from the same context + assert (&src.z3 == &dst.z3); + swap (src.model, dst.model); + } - /// Asserts (forall vars body). Work-around until quantifiers are - /// properly supported by Expr - template - void assertForallExpr (const Range &vars, Expr body) - { - z3::ast ast (z3.toAst (body)); - std::vector bound; - bound.reserve (boost::size (vars)); - for (const Expr &v : vars) - bound.push_back (Z3_to_app (ctx, z3.toAst (v))); - - Z3_ast forall = Z3_mk_forall_const (ctx, 0, - bound.size (), &bound[0], - 0, NULL, ast); - Z3_solver_assert (ctx, solver, forall); - ctx.check_error (); - } + Expr eval (Expr e, bool completion = false) + { + assert (model); + z3::ast ast (z3.toAst (e)); + + Z3_ast raw_val = NULL; + if (Z3_model_eval (ctx, model, ast, completion, &raw_val) && raw_val) + { + z3::ast val (ctx, raw_val); + ctx.check_error (); + if (!isAsArray (val)) return z3.toExpr (val); + + + Z3_func_decl fdecl = Z3_get_as_array_func_decl (ctx, val); + z3::func_interp zfunc (ctx, Z3_model_get_func_interp (ctx, model, fdecl)); + ctx.check_error (); + return finterpToExpr (zfunc); + } + ctx.check_error (); + return mk (efac); + } - void assertExpr (Expr e) - { - z3::ast ast (z3.toAst (e)); - Z3_solver_assert (ctx, solver, ast); - ctx.check_error (); - } + ExprFactory &getExprFactory () { return z3.getExprFactory (); } + Expr operator() (Expr e) { return eval (e); } - /// return assertions currently in the solver - template - void assertions (OutputIterator out) const - { - z3::ast_vector r (ctx, Z3_solver_get_assertions (ctx, solver)); - ctx.check_error (); - for (unsigned i = 0; i < r.size (); ++i) - *(out++) = z3.toExpr (r [i]); - } + template + friend OutputStream &operator<< (OutputStream &out, this_type &model) + { + out << Z3_model_to_string (model.ctx, model.model); + return out; + } + }; - boost::tribool solve () + template + class ZParams { - boost::tribool res = z3l_to_tribool (Z3_solver_check (ctx, solver)); - ctx.check_error (); - return res; - } + private: + typedef ZParams this_type; - template - boost::tribool solveAssuming (const Range &lits) - { - z3::ast_vector av (ctx); - for (Expr a : lits) av.push_back (z3.toAst (a)); - - std::vector raw_av (av.size ()); - for (unsigned i = 0; i < av.size (); ++i) - raw_av [i] = Z3_ast_vector_get (ctx, av, i); - - boost::tribool res = - z3l_to_tribool (Z3_solver_check_assumptions (ctx, solver, - raw_av.size (), - &raw_av[0])); - ctx.check_error (); - return res; - } + Z& z3; + z3::context &ctx; + z3::params params; - template - void unsatCore (OutputIterator out) const - { - z3::ast_vector core (ctx, Z3_solver_get_unsat_core (ctx, solver)); - ctx.check_error (); + public: + ZParams (Z &z) : z3(z), ctx(z.get_ctx ()), params (z.get_ctx ()) {} + void set (std::string k, bool b) { params.set (k.c_str (), b); } + void set (std::string k, unsigned n) { params.set (k.c_str (), n); } + void set (std::string k, double n) { params.set (k.c_str (), n); } + void set (std::string k, std::string v) + { params.set (k.c_str (), ctx.str_symbol (v.c_str ())); } + + void set (char const * k, bool b) { params.set (k, b); } + void set (char const * k, unsigned n) { params.set (k, n); } + void set (char const * k, double n) { params.set (k, n); } + void set (char const * k, char const *v ) + { params.set (k, ctx.str_symbol (v)); } + + operator z3::params () const { return params; } + operator Z3_params () const { return static_cast (params); } - for (unsigned i = 0; i < core.size (); ++i) - *(out++) = z3.toExpr (core [i]); - } + }; - /** - * Combines solveAssuming(lits) and unsatCore (out) - */ - template - boost::tribool solveAssuming (const Range &lits, OutputIterator out) + + template + class ZSolver { - boost::tribool res = solveAssuming (lits); - if (!res) unsatCore (out); - return res; - } + private: + Z& z3; + z3::context &ctx; + z3::solver solver; + ExprFactory &efac; + public: + typedef ZSolver this_type; + typedef ZModel Model; - Model getModel () const - { - z3::model m (ctx, Z3_solver_get_model (ctx, solver)); - return ZModel (z3, m); - } + ZSolver (Z &z) : + z3(z), ctx (z.get_ctx ()), solver (z.get_ctx ()), efac (z.get_efac ()) {} - void push () { solver.push (); } - void pop (unsigned n = 1) { solver.pop (n); } - void reset () { solver.reset (); } - }; + ZSolver (Z &z, const char *logic) : + z3(z), ctx (z.get_ctx ()), solver (z.get_ctx (), logic), efac (z.get_efac ()) {} + ZSolver (Z &z, unsigned to) : + z3(z), ctx (z.get_ctx ()), solver (z.get_ctx ()), efac (z.get_efac ()) { + ZParams p(z); + p.set("timeout", to); + solver.set(p); + } - template - class ZFixedPoint - { - private: + Z& getContext () {return z3;} + void set (const ZParams &p) { solver.set (p); } - typedef ZFixedPoint this_type; + template + OutputStream &toSmtLib (OutputStream &out) + { + ExprVector v; + return toSmtLibAssuming (out, v); + } - Z& z3; - z3::context &ctx; - z3::fixedpoint fp; - ExprFactory &efac; - public: - - ExprVector m_rels; - ExprVector m_vars; - ExprVector m_rules; - ExprVector m_queries; - - ZFixedPoint (Z &z) : - z3(z), ctx(z.get_ctx ()), fp (z.get_ctx ()), efac(z.get_efac ()) {} + template + OutputStream &toSmtLibAssuming (OutputStream &out, + const Range &rng) + { + ExprVector asserts; + assertions (std::back_inserter (asserts)); + out << z3.toSmtLibDecls (asserts); + out << "\n"; + for (const Expr &a : asserts) + out << "(assert " << z3.toSmtLib (a) << ")\n"; + + out << "(check-sat"; + for (const Expr &a : rng) out << " " << *a; + out << ")\n"; + return out; + } - Z& getContext () {return z3;} - void set (const ZParams &p) { fp.set (p); } + /// Asserts (forall vars body). Work-around until quantifiers are + /// properly supported by Expr + template + void assertForallExpr (const Range &vars, Expr body) + { + z3::ast ast (z3.toAst (body)); + std::vector bound; + bound.reserve (boost::size (vars)); + for (const Expr &v : vars) + bound.push_back (Z3_to_app (ctx, z3.toAst (v))); + + Z3_ast forall = Z3_mk_forall_const (ctx, 0, + bound.size (), &bound[0], + 0, NULL, ast); + Z3_solver_assert (ctx, solver, forall); + ctx.check_error (); + } - void registerRelation (Expr fdecl) - { - m_rels.push_back (fdecl); - Z3_fixedpoint_register_relation (ctx, fp, - Z3_to_func_decl (ctx, z3.toAst (fdecl))); - } + void assertExpr (Expr e) + { + z3::ast ast (z3.toAst (e)); + Z3_solver_assert (ctx, solver, ast); + ctx.check_error (); + } - template - void addRule (const Range &vars, Expr rule) - { - if (isOpX (rule)) return; - - boost::copy (vars, std::back_inserter (m_vars)); - m_rules.push_back (rule); + /// return assertions currently in the solver + template + void assertions (OutputIterator out) const + { + z3::ast_vector r (ctx, Z3_solver_get_assertions (ctx, solver)); + ctx.check_error (); + for (unsigned i = 0; i < r.size (); ++i) + *(out++) = z3.toExpr (r [i]); + } - z3::ast ast (z3.toAst (rule)); - z3::ast qexpr (ast); + boost::tribool solve () + { + boost::tribool res = z3l_to_tribool (Z3_solver_check (ctx, solver)); + ctx.check_error (); + return res; + } - // -- universally quantify all free variables - if (boost::distance (vars) > 0) - { - z3::ast_vector pinned(ctx); - pinned.resize (boost::distance(vars)); - std::vector bound (boost::distance(vars)); + template + boost::tribool solveAssuming (const Range &lits) + { + z3::ast_vector av (ctx); + for (Expr a : lits) av.push_back (z3.toAst (a)); + + std::vector raw_av (av.size ()); + for (unsigned i = 0; i < av.size (); ++i) + raw_av [i] = Z3_ast_vector_get (ctx, av, i); + + boost::tribool res = + z3l_to_tribool (Z3_solver_check_assumptions (ctx, solver, + raw_av.size (), + &raw_av[0])); + ctx.check_error (); + return res; + } - size_t cnt = 0; - for (Expr v : vars) + template + void unsatCore (OutputIterator out) const { - z3::ast zv (z3.toAst (v)); - pinned.push_back (zv); - bound [cnt++] = Z3_to_app (ctx, zv); + z3::ast_vector core (ctx, Z3_solver_get_unsat_core (ctx, solver)); + ctx.check_error (); + + for (unsigned i = 0; i < core.size (); ++i) + *(out++) = z3.toExpr (core [i]); } + /** + * Combines solveAssuming(lits) and unsatCore (out) + */ + template + boost::tribool solveAssuming (const Range &lits, OutputIterator out) + { + boost::tribool res = solveAssuming (lits); + if (!res) unsatCore (out); + return res; + } - qexpr = z3::ast (ctx, Z3_mk_forall_const (ctx, 0, bound.size (), - &bound[0], - 0, NULL, ast)); - } + Model getModel () const + { + z3::model m (ctx, Z3_solver_get_model (ctx, solver)); + return ZModel (z3, m); + } - Z3_fixedpoint_add_rule (ctx, fp, qexpr, static_cast(0)); - } + ZSolver::Model* getModelPtr () const + { + z3::model m (ctx, Z3_solver_get_model (ctx, solver)); + return new ZModel (z3, m); + } - void addQuery (Expr q) {m_queries.push_back (q);} + void push () { solver.push (); } + void pop (unsigned n = 1) { solver.pop (n); } + void reset () { solver.reset (); } + }; - void addQueries (ExprVector qs) - { - std::copy (qs.begin (), qs.end (), - std::back_inserter (m_queries)); - } - boost::tribool query (Expr q = Expr()) + template + class ZFixedPoint { - if (q) m_queries.push_back (q); + private: - std::vector qs; - for (Expr e : m_queries) - qs.push_back (z3.toAst (e)); + typedef ZFixedPoint this_type; - z3::ast ast = z3::ast (ctx, Z3_mk_and (ctx, qs.size (), &qs [0])); + Z& z3; + z3::context &ctx; + z3::fixedpoint fp; + ExprFactory &efac; - // -- existentially quantify all variables - if (!m_vars.empty ()) - { - // getVars() removes duplicates - const ExprVector &vars = getVars (); - z3::ast_vector pinned(ctx); - pinned.resize (vars.size ()); - std::vector bound (vars.size ()); + public: + + ExprVector m_rels; + ExprVector m_vars; + ExprVector m_rules; + ExprVector m_queries; + + ZFixedPoint (Z &z) : + z3(z), ctx(z.get_ctx ()), fp (z.get_ctx ()), efac(z.get_efac ()) {} + + Z& getContext () {return z3;} - unsigned cnt = 0; - for (Expr v : vars) + void set (const ZParams &p) { fp.set (p); } + + void registerRelation (Expr fdecl) { - z3::ast zv (z3.toAst (v)); - pinned.push_back (zv); - bound [cnt++] = Z3_to_app (ctx, zv); + m_rels.push_back (fdecl); + Z3_fixedpoint_register_relation (ctx, fp, + Z3_to_func_decl (ctx, z3.toAst (fdecl))); } - ast = z3::ast (ctx, Z3_mk_exists_const (ctx, 0, bound.size (), - &bound [0], 0, NULL, ast)); - } - - tribool res = z3l_to_tribool (Z3_fixedpoint_query (ctx, fp, ast)); - ctx.check_error (); - return res; - } - std::string toString (Expr query = Expr()) - { - if (query) m_queries.push_back (query); + template + void addRule (const Range &vars, Expr rule) + { + if (isOpX (rule)) return; - std::vector qs; - for (Expr e : m_queries) - qs.push_back (z3.toAst (e)); + boost::copy (vars, std::back_inserter (m_vars)); + m_rules.push_back (rule); - z3::ast ast = z3::ast (ctx, Z3_mk_and (ctx, qs.size (), &qs [0])); + z3::ast ast (z3.toAst (rule)); - // -- existentially quantify all variables - if (!m_vars.empty ()) - { - // getVars() removes duplicates - const ExprVector &vars = getVars (); - z3::ast_vector pinned(ctx); - pinned.resize (vars.size ()); - std::vector bound (vars.size ()); + z3::ast qexpr (ast); + + // -- universally quantify all free variables + if (boost::distance (vars) > 0) + { + z3::ast_vector pinned(ctx); + pinned.resize (boost::distance(vars)); + std::vector bound (boost::distance(vars)); + + size_t cnt = 0; + for (Expr v : vars) + { + z3::ast zv (z3.toAst (v)); + pinned.push_back (zv); + bound [cnt++] = Z3_to_app (ctx, zv); + } - unsigned cnt = 0; - for (Expr v : vars) + + qexpr = z3::ast (ctx, Z3_mk_forall_const (ctx, 0, bound.size (), + &bound[0], + 0, NULL, ast)); + } + + Z3_fixedpoint_add_rule (ctx, fp, qexpr, static_cast(0)); + } + + void addQuery (Expr q) {m_queries.push_back (q);} + + void addQueries (ExprVector qs) { - z3::ast zv (z3.toAst (v)); - pinned.push_back (zv); - bound [cnt++] = Z3_to_app (ctx, zv); + std::copy (qs.begin (), qs.end (), + std::back_inserter (m_queries)); } - ast = z3::ast (ctx, Z3_mk_exists_const (ctx, 0, bound.size (), - &bound [0], 0, NULL, ast)); - } - - - Z3_ast qptr = static_cast (ast); - Z3_string str = Z3_fixedpoint_to_string (ctx, fp, 1, &qptr); - return std::string (str); - } - const ExprVector &getVars () - { - boost::sort (m_vars); - m_vars.resize (std::distance (m_vars.begin (), - std::unique (m_vars.begin (), - m_vars.end ()))); - return m_vars; - } + boost::tribool query (Expr q = Expr()) + { + if (q) m_queries.push_back (q); + + std::vector qs; + for (Expr e : m_queries) + qs.push_back (z3.toAst (e)); + + z3::ast ast = z3::ast (ctx, Z3_mk_and (ctx, qs.size (), &qs [0])); + + // -- existentially quantify all variables + if (!m_vars.empty ()) + { + // getVars() removes duplicates + const ExprVector &vars = getVars (); + z3::ast_vector pinned(ctx); + pinned.resize (vars.size ()); + std::vector bound (vars.size ()); + + unsigned cnt = 0; + for (Expr v : vars) + { + z3::ast zv (z3.toAst (v)); + pinned.push_back (zv); + bound [cnt++] = Z3_to_app (ctx, zv); + } + ast = z3::ast (ctx, Z3_mk_exists_const (ctx, 0, bound.size (), + &bound [0], 0, NULL, ast)); + } + + tribool res = z3l_to_tribool (Z3_fixedpoint_query (ctx, fp, ast)); + ctx.check_error (); + return res; + } + std::string toString (Expr query = Expr()) + { + if (query) m_queries.push_back (query); + + std::vector qs; + for (Expr e : m_queries) + qs.push_back (z3.toAst (e)); + + z3::ast ast = z3::ast (ctx, Z3_mk_and (ctx, qs.size (), &qs [0])); + + // -- existentially quantify all variables + if (!m_vars.empty ()) + { + // getVars() removes duplicates + const ExprVector &vars = getVars (); + z3::ast_vector pinned(ctx); + pinned.resize (vars.size ()); + std::vector bound (vars.size ()); + + unsigned cnt = 0; + for (Expr v : vars) + { + z3::ast zv (z3.toAst (v)); + pinned.push_back (zv); + bound [cnt++] = Z3_to_app (ctx, zv); + } + ast = z3::ast (ctx, Z3_mk_exists_const (ctx, 0, bound.size (), + &bound [0], 0, NULL, ast)); + } + + + Z3_ast qptr = static_cast (ast); + Z3_string str = Z3_fixedpoint_to_string (ctx, fp, 1, &qptr); + return std::string (str); + } - template - friend OutputStream &operator<< (OutputStream &out, this_type &fp) - { - for (Expr decl : fp.m_rels) - { - out << "(declare-rel " << *bind::fname (decl) << " ("; - for (unsigned i = 0; i < bind::domainSz (decl); i++) + const ExprVector &getVars () { - Expr ty = bind::domainTy (decl, i); - if (isOpX (ty)) out << "Bool "; - else if (isOpX (ty)) out << "Real "; - else if (isOpX (ty)) out << "Int "; - else if (isOpX (ty)) - { - out << "(Array "; - if (isOpX (sort::arrayIndexTy (ty))) - out << "Int "; - else out << "UfoUnknownSort "; - if (isOpX (sort::arrayValTy (ty))) - out << "Int"; - else out << "UfoUnknownSort"; - out << ") "; - } - - else out << "UfoUnknownSort "; + boost::sort (m_vars); + m_vars.resize (std::distance (m_vars.begin (), + std::unique (m_vars.begin (), + m_vars.end ()))); + return m_vars; } - out << "))\n"; - } - - - for (const Expr &v : fp.getVars ()) - { - assert (bind::IsConst() (v)); - out << "(declare-var " << fp.z3.toSmtLib (v) << " "; - Expr ty = bind::typeOf (v); - if (isOpX (ty)) out << "Bool "; - else if (isOpX (ty)) out << "Real "; - else if (isOpX (ty)) out << "Int "; - else if (isOpX (ty)) + + + template + friend OutputStream &operator<< (OutputStream &out, this_type &fp) { - out << "(Array "; - if (isOpX (sort::arrayIndexTy (ty))) - out << "Int "; - else out << "UfoUnknownSort "; - if (isOpX (sort::arrayValTy (ty))) - out << "Int"; - else out << "UfoUnknownSort"; - out << ") "; + for (Expr decl : fp.m_rels) + { + out << "(declare-rel " << *bind::fname (decl) << " ("; + for (unsigned i = 0; i < bind::domainSz (decl); i++) + { + Expr ty = bind::domainTy (decl, i); + if (isOpX (ty)) out << "Bool "; + else if (isOpX (ty)) out << "Real "; + else if (isOpX (ty)) out << "Int "; + else if (isOpX (ty)) + { + out << "(Array "; + if (isOpX (sort::arrayIndexTy (ty))) + out << "Int "; + else out << "UfoUnknownSort "; + if (isOpX (sort::arrayValTy (ty))) + out << "Int"; + else out << "UfoUnknownSort"; + out << ") "; + } + + else out << "UfoUnknownSort "; + } + out << "))\n"; + } + + + for (const Expr &v : fp.getVars ()) + { + assert (bind::IsConst() (v)); + out << "(declare-var " << fp.z3.toSmtLib (v) << " "; + Expr ty = bind::typeOf (v); + if (isOpX (ty)) out << "Bool "; + else if (isOpX (ty)) out << "Real "; + else if (isOpX (ty)) out << "Int "; + else if (isOpX (ty)) + { + out << "(Array "; + if (isOpX (sort::arrayIndexTy (ty))) + out << "Int "; + else out << "UfoUnknownSort "; + if (isOpX (sort::arrayValTy (ty))) + out << "Int"; + else out << "UfoUnknownSort"; + out << ") "; + } + else out << "UfoUnknownSort "; + out << ")\n"; + } + + for (Expr &rule : fp.m_rules) + out << "(rule " << fp.z3.toSmtLib (rule) << ")\n"; + + for (auto q: fp.m_queries) + out << "(query " << fp.z3.toSmtLib (q) << ")\n"; + return out; } - else out << "UfoUnknownSort "; - out << ")\n"; - } - for (Expr &rule : fp.m_rules) - out << "(rule " << fp.z3.toSmtLib (rule) << ")\n"; + /** + * Given a function application P(x, y, z) returns the set of + * current lemmas of P in terms of variables x, y, z + */ + Expr getCoverDelta (Expr pred, int lvl = -1) + { + assert (bind::isFapp (pred)); + z3::ast zpred (ctx, z3.toAst (pred)); + Z3_app app = Z3_to_app (ctx, zpred); - for (auto q: fp.m_queries) - out << "(query " << fp.z3.toSmtLib (q) << ")\n"; - return out; - } - /** - * Given a function application P(x, y, z) returns the set of - * current lemmas of P in terms of variables x, y, z - */ - Expr getCoverDelta (Expr pred, int lvl = -1) - { - assert (bind::isFapp (pred)); - z3::ast zpred (ctx, z3.toAst (pred)); - Z3_app app = Z3_to_app (ctx, zpred); + unsigned arity = Z3_get_app_num_args (ctx, app); + std::vector to (arity); + for (unsigned i = 0; i < arity; ++i) + to [i] = Z3_get_app_arg (ctx, app, i); + Z3_func_decl zdecl = Z3_get_app_decl (ctx, app); - unsigned arity = Z3_get_app_num_args (ctx, app); - std::vector to (arity); - for (unsigned i = 0; i < arity; ++i) - to [i] = Z3_get_app_arg (ctx, app, i); + z3::ast lemma (ctx, Z3_fixedpoint_get_cover_delta (ctx, fp, lvl, zdecl)); - Z3_func_decl zdecl = Z3_get_app_decl (ctx, app); + z3::ast res (ctx, lemma); + if (Z3_get_bool_value (ctx, res) == Z3_L_UNDEF) + { + assert (arity > 0); + res = z3::ast (ctx, Z3_substitute_vars (ctx, lemma, arity, &to[0])); + } - z3::ast lemma (ctx, Z3_fixedpoint_get_cover_delta (ctx, fp, lvl, zdecl)); + return z3.toExpr (res); + } - z3::ast res (ctx, lemma); - if (Z3_get_bool_value (ctx, res) == Z3_L_UNDEF) - { - assert (arity > 0); - res = z3::ast (ctx, Z3_substitute_vars (ctx, lemma, arity, &to[0])); - } + /** + * Given a function application P(x, y, z), adds a given lemma to + * the given level of P. The lemma must be in terms of x, y, z + */ + void addCover (Expr pred, Expr lemma, int lvl = -1) + { + if (isOpX (lemma)) return; + + assert (bind::isFapp (pred)); + z3::ast zpred (ctx, z3.toAst (pred)); + Z3_app app = Z3_to_app (ctx, zpred); + + if (isOpX (lemma)) + { + Z3_fixedpoint_add_cover (ctx, fp, lvl, Z3_get_app_decl (ctx, app), + Z3_mk_false (ctx)); + ctx.check_error (); + return; + } + + unsigned arg_size = Z3_get_app_num_args (ctx, app); + std::vector from (arg_size); + std::vector to (arg_size); + + // -- saves content of 'to' from garbage collection + z3::ast_vector pinned (ctx); + + for (unsigned i = 0; i < Z3_get_app_num_args (ctx, app); ++i) + { + Z3_ast arg = Z3_get_app_arg (ctx, app, i); + assert (Z3_is_app (ctx, arg)); + + Z3_app arg_app = Z3_to_app (ctx, arg); + Z3_func_decl arg_decl = Z3_get_app_decl (ctx, arg_app); + assert (Z3_get_domain_size (ctx, arg_decl) == 0); + + from [i] = arg; + to [i] = Z3_mk_bound (ctx, i, Z3_get_range (ctx, arg_decl)); + pinned.push_back (z3::ast (ctx, to [i])); + } + + assert (from.size () > 0); + z3::ast zlemma (ctx, Z3_substitute (ctx, z3.toAst (lemma), + from.size (), &from [0], &to [0])); + + Z3_fixedpoint_add_cover (ctx, fp, lvl, + Z3_get_app_decl (ctx, app), zlemma); + ctx.check_error (); + } - return z3.toExpr (res); - } - /** - * Given a function application P(x, y, z), adds a given lemma to - * the given level of P. The lemma must be in terms of x, y, z - */ - void addCover (Expr pred, Expr lemma, int lvl = -1) - { - if (isOpX (lemma)) return; - - assert (bind::isFapp (pred)); - z3::ast zpred (ctx, z3.toAst (pred)); - Z3_app app = Z3_to_app (ctx, zpred); - - if (isOpX (lemma)) - { - Z3_fixedpoint_add_cover (ctx, fp, lvl, Z3_get_app_decl (ctx, app), - Z3_mk_false (ctx)); - ctx.check_error (); - return; - } + unsigned getNumLevels (Expr pred) + { + z3::func_decl pdecl (ctx, Z3_to_func_decl (ctx, z3.toAst (pred))); + return Z3_fixedpoint_get_num_levels (ctx, fp, pdecl); + } + + std::string getAnswer () + { + z3::ast res (ctx, Z3_fixedpoint_get_answer (ctx, fp)); + //return z3.toExpr (res); + return std::string (Z3_ast_to_string (ctx, res)); + } + + /** + ** Return a bottom-up (from query) formula of ground predicates + ** that together from a ground derivation to query + **/ + Expr getGroundSatAnswer () + { + z3::ast res (ctx, Z3_fixedpoint_get_ground_sat_answer (ctx, fp)); + return z3.toExpr (res); + } - unsigned arg_size = Z3_get_app_num_args (ctx, app); - std::vector from (arg_size); - std::vector to (arg_size); + Expr getCex () + { + z3::ast res (ctx, Z3_fixedpoint_get_answer (ctx, fp)); + return z3.toExpr (res); + } - // -- saves content of 'to' from garbage collection - z3::ast_vector pinned (ctx); + void getCexRules (ExprVector &res) + { + z3::ast_vector rules (ctx, + Z3_fixedpoint_get_rules_along_trace (ctx, fp)); + for (unsigned i = 0; i < rules.size (); ++i) + { + z3::ast rule (rules [i]); + // XXX strip quantifiers because we do not support them in Expr + if (rule.kind () == Z3_QUANTIFIER_AST) + rule = z3::ast (ctx, Z3_get_quantifier_body (ctx, rule)); + res.push_back (z3.toExpr (rule)); + } + } - for (unsigned i = 0; i < Z3_get_app_num_args (ctx, app); ++i) - { - Z3_ast arg = Z3_get_app_arg (ctx, app, i); - assert (Z3_is_app (ctx, arg)); + void loadFPfromFile(std::string smt){ + z3::ast_vector queries (ctx, Z3_fixedpoint_from_file(ctx, fp, smt.c_str ())); + ctx.check_error (); - Z3_app arg_app = Z3_to_app (ctx, arg); - Z3_func_decl arg_decl = Z3_get_app_decl (ctx, arg_app); - assert (Z3_get_domain_size (ctx, arg_decl) == 0); + z3::ast_vector rules (ctx, Z3_fixedpoint_get_rules(ctx, fp)); + z3::ast_vector asss (ctx, Z3_fixedpoint_get_assertions(ctx, fp)); - from [i] = arg; - to [i] = Z3_mk_bound (ctx, i, Z3_get_range (ctx, arg_decl)); - pinned.push_back (z3::ast (ctx, to [i])); - } + for (unsigned i = 0; i < rules.size (); ++i){ + Expr rule = z3.toExpr (rules [i]); + m_rules.push_back(rule); + } - assert (from.size () > 0); - z3::ast zlemma (ctx, Z3_substitute (ctx, z3.toAst (lemma), - from.size (), &from [0], &to [0])); + for (unsigned i = 0; i < asss.size (); ++i){ + Expr rule = z3.toExpr (asss [i]); + m_rules.push_back(rule); + } - Z3_fixedpoint_add_cover (ctx, fp, lvl, - Z3_get_app_decl (ctx, app), zlemma); - ctx.check_error (); - } + for (unsigned i = 0; i < queries.size (); ++i){ + m_queries.push_back(z3.toExpr (queries [i])); + } + //TODO: vars + } + }; - unsigned getNumLevels (Expr pred) - { - z3::func_decl pdecl (ctx, Z3_to_func_decl (ctx, z3.toAst (pred))); - return Z3_fixedpoint_get_num_levels (ctx, fp, pdecl); - } - std::string getAnswer () + +} + +namespace ufo +{ + template + boost::tribool z3_is_sat (Z &z3, Expr e) { - z3::ast res (ctx, Z3_fixedpoint_get_answer (ctx, fp)); - //return z3.toExpr (res); - return std::string (Z3_ast_to_string (ctx, res)); + ZSolver s(z3); + s.assertExpr (e); + return s.solve (); } - /** - ** Return a bottom-up (from query) formula of ground predicates - ** that together from a ground derivation to query - **/ - Expr getGroundSatAnswer () + template + boost::tribool z3_is_sat_assuming (Z &z3, Expr e, + const Range &assumptions, + OutputIterator out) { - z3::ast res (ctx, Z3_fixedpoint_get_ground_sat_answer (ctx, fp)); - return z3.toExpr (res); + ZSolver s(z3); + + s.assertExpr (e); + boost::tribool res = s.solveAssuming (assumptions); + if (!res) s.unsatCore (out); + return res; } - Expr getCex () + template + boost::tribool z3_is_sat_assuming (Z &z3, Expr e, const Range &assumptions, + ExprSet &result) { - z3::ast res (ctx, Z3_fixedpoint_get_answer (ctx, fp)); - return z3.toExpr (res); + return + z3_is_sat_assuming (z3, e, assumptions, + std::inserter (result, result.begin ())); } - void getCexRules (ExprVector &res) + template + Expr z3_all_sat (Z &z3, Expr e, const Range &terms) { - z3::ast_vector rules (ctx, - Z3_fixedpoint_get_rules_along_trace (ctx, fp)); - for (unsigned i = 0; i < rules.size (); ++i) - { - z3::ast rule (rules [i]); - // XXX strip quantifiers because we do not support them in Expr - if (rule.kind () == Z3_QUANTIFIER_AST) - rule = z3::ast (ctx, Z3_get_quantifier_body (ctx, rule)); - res.push_back (z3.toExpr (rule)); - } - } - - void loadFPfromFile(std::string smt){ - z3::ast_vector queries (ctx, Z3_fixedpoint_from_file(ctx, fp, smt.c_str ())); - ctx.check_error (); - - z3::ast_vector rules (ctx, Z3_fixedpoint_get_rules(ctx, fp)); - z3::ast_vector asss (ctx, Z3_fixedpoint_get_assertions(ctx, fp)); + // -- z3 must be configured to produce models for this to work - for (unsigned i = 0; i < rules.size (); ++i){ - Expr rule = z3.toExpr (rules [i]); - m_rules.push_back(rule); - } + ZSolver s (z3); + s.assertExpr (e); - for (unsigned i = 0; i < asss.size (); ++i){ - Expr rule = z3.toExpr (asss [i]); - m_rules.push_back(rule); - } + Expr res (mk (e->efac ())); - for (unsigned i = 0; i < queries.size (); ++i){ - m_queries.push_back(z3.toExpr (queries [i])); + while (s.solve ()) + { + ZModel m = s.getModel (); + + Expr cube = mk (e->efac ()); + for (Expr t : terms) + { + Expr v = m.eval (t); + if (isOpX (v)) cube = boolop::land (cube, t); + else if (isOpX (v)) + cube = boolop::land (cube, boolop::lneg (t)); + } + res = boolop::lor (res, cube); + s.assertExpr (boolop::lneg (cube)); } - - //TODO: vars + return res; } - }; - - - -} - -namespace ufo -{ - template - boost::tribool z3_is_sat (Z &z3, Expr e) - { - ZSolver s(z3); - s.assertExpr (e); - return s.solve (); - } - - template - boost::tribool z3_is_sat_assuming (Z &z3, Expr e, - const Range &assumptions, - OutputIterator out) - { - ZSolver s(z3); - - s.assertExpr (e); - boost::tribool res = s.solveAssuming (assumptions); - if (!res) s.unsatCore (out); - return res; - } - - template - boost::tribool z3_is_sat_assuming (Z &z3, Expr e, const Range &assumptions, - ExprSet &result) - { - return - z3_is_sat_assuming (z3, e, assumptions, - std::inserter (result, result.begin ())); - } - - template - Expr z3_all_sat (Z &z3, Expr e, const Range &terms) - { - // -- z3 must be configured to produce models for this to work - - ZSolver s (z3); - s.assertExpr (e); - - Expr res (mk (e->efac ())); - - while (s.solve ()) - { - ZModel m = s.getModel (); - - Expr cube = mk (e->efac ()); - for (Expr t : terms) - { - Expr v = m.eval (t); - if (isOpX (v)) cube = boolop::land (cube, t); - else if (isOpX (v)) - cube = boolop::land (cube, boolop::lneg (t)); - } - res = boolop::lor (res, cube); - s.assertExpr (boolop::lneg (cube)); - } - return res; - } } diff --git a/tools/nonlin/CMakeLists.txt b/tools/nonlin/CMakeLists.txt index bb1ba4954..29d0a222a 100644 --- a/tools/nonlin/CMakeLists.txt +++ b/tools/nonlin/CMakeLists.txt @@ -1,3 +1,3 @@ -add_executable (hornspec NonlinSolver.cpp) -target_link_libraries (hornspec ${Z3_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${GMPXX_LIB} ${GMP_LIB}) -install(TARGETS hornspec RUNTIME DESTINATION bin) +add_executable (tgnonlin NonlinSolver.cpp) +target_link_libraries (tgnonlin ${Z3_LIBRARY} ${Boost_SYSTEM_LIBRARY} ${GMPXX_LIB} ${GMP_LIB}) +install(TARGETS tgnonlin RUNTIME DESTINATION bin) diff --git a/tools/nonlin/NonlinSolver.cpp b/tools/nonlin/NonlinSolver.cpp index 9b43ef914..7edd74007 100644 --- a/tools/nonlin/NonlinSolver.cpp +++ b/tools/nonlin/NonlinSolver.cpp @@ -1,118 +1,137 @@ -#include "deep/NonlinCHCsolver.hpp" +#include "deep/RndLearnerV3.hpp" using namespace ufo; using namespace std; -static inline bool getBoolValue(const char * opt, bool defValue, int argc, char ** argv) +bool getBoolValue(const char * opt, bool defValue, int argc, char ** argv) { - for (int i = 1; i < argc; i++) - { - if (strcmp(argv[i], opt) == 0) return true; - } - return defValue; + for (int i = 1; i < argc; i++) + { + if (strcmp(argv[i], opt) == 0) return true; + } + return defValue; } -int getIntValue(const char * opt, int defValue, int argc, char ** argv) +char * getStrValue(const char * opt, char * defValue, int argc, char ** argv) { - for (int i = 1; i < argc-1; i++) - { - if (strcmp(argv[i], opt) == 0) + for (int i = 1; i < argc-1; i++) { - return atoi(argv[i+1]); + if (strcmp(argv[i], opt) == 0) + { + return argv[i+1]; + } } - } - return defValue; + return defValue; } -string getStrValue(const char * opt, string defValue, int argc, char ** argv) +int getIntValue(const char * opt, int defValue, int argc, char ** argv) { - for (int i = 1; i < argc-1; i++) - { - if (strcmp(argv[i], opt) == 0) + for (int i = 1; i < argc-1; i++) { - return string(argv[i+1]); + if (strcmp(argv[i], opt) == 0) + { + char* p; + int num = strtol(argv[i+1], &p, 10); + if (*p) return 1; // if used w/o arg, return boolean + else return num; + } } - } - return defValue; + return defValue; } - -vector getCommaSepStrValues(const char * opt, vector defValue, int argc, char ** argv) +void getStrValues(const char * opt, vector & values, int argc, char ** argv) { - for (int i = 1; i < argc-1; i++) - { - if (strcmp(argv[i], opt) == 0) + for (int i = 1; i < argc-1; i++) { - stringstream tmpss(argv[i+1]); - vector values; - while (tmpss.good()) { - string tmpstr; - getline(tmpss, tmpstr, ','); - values.push_back(tmpstr); - } - return values; + if (strcmp(argv[i], opt) == 0) + { + values.push_back(string(argv[i+1])); + } } - } - return defValue; } -int main (int argc, char ** argv) +static inline void getNums(set& nums, char * str) { - if (getBoolValue("--help", false, argc, argv) || argc == 1){ - outs () << - "* * * HornSpec v.1.0 - Copyright (C) 2021 * * *\n" << - " Sumanth Prabhu and Grigory Fedyukovich \n\n" << - "Usage: Purpose:\n" << - " hornspec [--help] show help\n" << - " hornspec [options] discover invariants/specifications for a CHC system\n\n" << - "Options:\n" << -// " --stren number of strengthening iterations (by default, 1) \n" << -// " --cex search for counterexamples of given length \n" << - " --skip-maximal return after the first iteration (i.e., could be non-maximal) \n" << -// " --rel-order comma separated list of relations to follow while finding maximal solution\n" << - " --use-smt-model weakening with Z3 models (disabled by default)\n" << - " --sygus \"\" weakening with CVC4 (a path to external binary + options, disabled by default)\n" << - " (for CVC4, use options \"--sygus-add-const-grammar --sygus-out=status-or-def\")\n"; - //These are experimental options - // " --useuc Use underconstrained relations\n" - // " --fixcrel Fix constrained relations after getting initial solution\n" - // " --newenc Use the new encoding\n"; + if (str == NULL) return; + int len = strlen(str); + char* pch = strchr(str, ','); + int pos1 = 0; + int pos2 = 0; + while (pch != NULL) + { + pos2 = pch - str; + char* substr = (char*)malloc(pos2 - pos1); + strncpy(substr, str + pos1, pos2 - pos1); + nums.insert(atoi(substr)); + pch = strchr(pch + 1, ','); + pos1 = pos2 + 1; + } + if (pos1 == len) return; + char* substr = (char*)malloc(len - pos1); + strncpy(substr, str + pos1, len - pos1); + nums.insert(atoi(substr)); +} - return 0; - } - int cex = getIntValue("--cex", 0, argc, argv); - int str = getIntValue("--stren", 1, argc, argv); - bool maximal = !getBoolValue("--skip-maximal", false, argc, argv); - vector relsOrder = getCommaSepStrValues("--rel-order", vector(), argc, argv); - bool noGAS = getBoolValue("--use-smt-model", false, argc, argv); - string syguspath = getStrValue("--sygus", "", argc, argv); - bool usesygus = syguspath != ""; - bool useUC = getBoolValue("--useuc", false, argc, argv); - bool newenc = getBoolValue("--newenc", false, argc, argv); - bool fixcrel = getBoolValue("--fixcrel", false, argc, argv); +const char *OPT_HELP = "--help"; +const char *OPT_MAX_ATTEMPTS = "--attempts"; +const char *OPT_TO = "--to"; +const char *OPT_LB = "--lb"; +const char *OPT_LMAX = "--max"; +const char *OPT_ELIM = "--skip-elim"; +const char *OPT_ARITHM = "--skip-arithm"; +const char *OPT_SEED = "--inv-mode"; +const char *OPT_GET_FREQS = "--freqs"; +const char *OPT_ADD_EPSILON = "--eps"; +const char *OPT_AGG_PRUNING = "--aggp"; +const char *OPT_DATA_LEARNING = "--data"; +const char *OPT_PROP = "--prop"; +const char *OPT_DISJ = "--disj"; +const char *OPT_D1 = "--all-mbp"; +const char *OPT_D2 = "--phase-prop"; +const char *OPT_D3 = "--phase-data"; +const char *OPT_D4 = "--stren-mbp"; +const char *OPT_MBP = "--eqs-mbp"; +const char *OPT_DEBUG = "--debug"; - if (fixcrel && !useUC) { - outs() << "Can't use --fixcrel wihout --useuc\n"; - return 1; - } +int main (int argc, char ** argv) +{ + set nums; + getNums(nums, getStrValue("--keys", NULL, argc, argv)); + bool to_skip = getBoolValue("--no-term", false, argc, argv); + int lookahead = getIntValue("--lookahead", 3, argc, argv); + bool prio = getBoolValue("--prio", false, argc, argv); + bool lb = getBoolValue(OPT_LB, false, argc, argv); + bool lmax = getBoolValue(OPT_LMAX, false, argc, argv); - std::ifstream infile(argv[argc-1]); - if (!infile.good()) - { - outs() << "Could not read file \"" << argv[argc-1] << "\"\n"; - return 0; - } + // All other attrs are inherited from FreqHorn: + int max_attempts = getIntValue(OPT_MAX_ATTEMPTS, 10, argc, argv); + int to = getIntValue(OPT_TO, 1000, argc, argv); + bool densecode = getBoolValue(OPT_GET_FREQS, false, argc, argv); + bool aggressivepruning = getBoolValue(OPT_AGG_PRUNING, false, argc, argv); + bool do_elim = !getBoolValue(OPT_ELIM, false, argc, argv); + bool do_arithm = !getBoolValue(OPT_ARITHM, false, argc, argv); + int invMode = getIntValue(OPT_SEED, 0, argc, argv); + int do_prop = getIntValue(OPT_PROP, 0, argc, argv); + int do_disj = getBoolValue(OPT_DISJ, false, argc, argv); + bool do_dl = getBoolValue(OPT_DATA_LEARNING, false, argc, argv); + int mbp_eqs = getIntValue(OPT_MBP, 0, argc, argv); + bool d_m = getBoolValue(OPT_D1, false, argc, argv); + bool d_p = getBoolValue(OPT_D2, false, argc, argv); + bool d_d = getBoolValue(OPT_D3, false, argc, argv); + bool d_s = getBoolValue(OPT_D4, false, argc, argv); + int debug = getIntValue(OPT_DEBUG, 0, argc, argv); - if (usesygus) - { - string toolname = syguspath.substr(0, syguspath.find(" ")); - std::ifstream cvc4file(toolname); - if (!cvc4file.good()) + if (do_disj && (!d_p && !d_d)) { - outs() << "Could not read file \"" << toolname << "\"\n"; - return 0; + errs() << "WARNING: either \"" << OPT_D2 << "\" or \"" << OPT_D3 << "\" should be enabled\n" + << "enabling \"" << OPT_D3 << "\"\n"; + d_d = true; } - } - solveNonlin(string(argv[argc-1]), cex, str, maximal, relsOrder, !noGAS, usesygus, useUC, newenc, fixcrel, syguspath); - return 0; + if (d_m || d_p || d_d || d_s) do_disj = true; + if (do_disj) do_dl = true; + + testgen(string(argv[argc-1]), nums, max_attempts, to, densecode, aggressivepruning, + do_dl, do_elim, do_disj, do_prop, d_m, d_p, d_d, d_s, + to_skip, invMode, lookahead, lb, lmax, prio, debug); + return 0; } From cee0d046ee597a7e4831d99275ce66ae25f14aa5 Mon Sep 17 00:00:00 2001 From: izlatkin Date: Fri, 20 May 2022 18:42:10 -0400 Subject: [PATCH 158/236] Nonliner parse update + simplification + rid from rnrlinearVX solution --- include/ae/ExprSimpl.hpp | 18 + include/deep/BndExpl.hpp | 160 +- include/deep/Horn.hpp | 1269 -------------- include/deep/HornNonlin.hpp | 34 +- include/deep/NonlinCHCsolver.hpp | 2643 ++++-------------------------- include/deep/RndLearnerV3.hpp | 25 +- tools/nonlin/NonlinSolver.cpp | 2 +- 7 files changed, 442 insertions(+), 3709 deletions(-) delete mode 100755 include/deep/Horn.hpp diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index 8f2895830..ad4476e45 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -4654,6 +4654,24 @@ namespace ufo ExprVector repls; simplBoolReplCnjHlp(hardVars, cnjs, facts, repls); } + + inline static void getKeyVars (Expr fla, Expr key, Expr &var) + { + if (isOpX(fla) && isOpX(fla->right()) && fla->right()->right() == key){ + //assert (var == NULL); + var = fla->left(); + } else if (isOpX(fla) && isOpX(fla->right()) && fla->right()->right() == mk(key)){ + //assert (var == NULL); + var = fla->left(); + } else if (isOpX(fla) && isOpX(fla->right()) && + isOpX(fla->right()->right()) && fla->right()->right()->left() == key){ + //assert (var == NULL); + var = fla->left(); + } else { + for (unsigned i = 0; i < fla->arity(); i++) + getKeyVars(fla->arg(i), key, var); + } + } } #endif diff --git a/include/deep/BndExpl.hpp b/include/deep/BndExpl.hpp index cb2b8087e..5188a516c 100644 --- a/include/deep/BndExpl.hpp +++ b/include/deep/BndExpl.hpp @@ -288,24 +288,6 @@ namespace ufo // ssaBindVars[trace] = bindVars; // } - inline static void getKeyVars (Expr fla, Expr key, Expr &var) - { - if (isOpX(fla) && isOpX(fla->right()) && fla->right()->right() == key){ - //assert (var == NULL); - var = fla->left(); - } else if (isOpX(fla) && isOpX(fla->right()) && fla->right()->right() == mk(key)){ - //assert (var == NULL); - var = fla->left(); - } else if (isOpX(fla) && isOpX(fla->right()) && - isOpX(fla->right()->right()) && fla->right()->right()->left() == key){ - //assert (var == NULL); - var = fla->left(); - } else { - for (unsigned i = 0; i < fla->arity(); i++) - getKeyVars(fla->arg(i), key, var); - } - } - map eKeys; set> unsat_prefs; @@ -326,6 +308,14 @@ namespace ufo for (auto it = eKeys.begin(); it != eKeys.end(); ++it) { Expr var = NULL; +// outs() << hr.body << "\n"; +// outs() << hr.head << "\n"; +// for (int i = 0; i < hr.srcRelations.size(); i++) { +// auto &a = hr.srcRelations[i]; +// outs() << i << " : " << a << "\n"; +// } +// outs() << "dstRelation : "<< hr.dstRelation << "\n"; + getKeyVars(hr.body, (*it).second, var); if (var != NULL) { @@ -354,64 +344,70 @@ namespace ufo } } -// void exploreTracesTG(int cur_bnd, int bnd, bool skipTerm) -// { -// set todoCHCs; -// -// // first, get points of control-flow divergence -// for (auto & d : ruleManager.decls) -// if (ruleManager.outgs[d->left()].size() > 1) -// for (auto & o : ruleManager.outgs[d->left()]) -// todoCHCs.insert(o); -// -// // if the code is straight, just add queries -// if (todoCHCs.empty()) -// for (int i = 0; i < ruleManager.chcs.size(); i++) -// if (ruleManager.chcs[i].isQuery) -// todoCHCs.insert(i); -// -// -// while (cur_bnd <= bnd && !todoCHCs.empty()) -// { -// outs () << "new iter with cur_bnd = "<< cur_bnd <<"\n"; -// set toErCHCs; -// for (auto & a : todoCHCs) -// { -// if (find(toErCHCs.begin(), toErCHCs.end(), a) != toErCHCs.end()) -// continue; -// vector> traces; + void exploreTracesTG(int cur_bnd, int bnd, bool skipTerm) + { + set todoCHCs; + + // first, get points of control-flow divergence + for (auto & d : ruleManager.decls) + if (ruleManager.outgs[d->left()].size() > 1) + for (auto & o : ruleManager.outgs[d->left()]) + todoCHCs.insert(o); + + // if the code is straight, just add queries + if (todoCHCs.empty()) + for (int i = 0; i < ruleManager.chcs.size(); i++) + if (ruleManager.chcs[i].isQuery) + todoCHCs.insert(i); + + + while (cur_bnd <= bnd && !todoCHCs.empty()) + { + outs () << "new iter with cur_bnd = "<< cur_bnd <<"\n"; + set toErCHCs; + for (auto & a : todoCHCs) + { + if (find(toErCHCs.begin(), toErCHCs.end(), a) != toErCHCs.end()) + continue; + vector> traces; + //ToDo: update for Nonlinear // getAllTracesTG(mk(m_efac), a, cur_bnd, vector(), traces); -// outs () << " exploring traces (" << traces.size() << ") of length " -// << cur_bnd << "; # of todos = " << todoCHCs.size() << "\n"; -// /* for (auto & b : todoCHCs) -// { -// outs () << b << ", "; -// } -// outs () << "\b\b)\n";*/ -// -// int tot = 0; -// for (int trNum = 0; trNum < traces.size() && !todoCHCs.empty(); trNum++) -// { -// auto & t = traces[trNum]; -// set apps; -// for (auto c : t) -// if (find(todoCHCs.begin(), todoCHCs.end(), c) != todoCHCs.end() && -// find(toErCHCs.begin(), toErCHCs.end(), c) == toErCHCs.end()) -// apps.insert(c); -// if (apps.empty()) continue; // should not happen -// -// tot++; -// -// auto & hr = ruleManager.chcs[t.back()]; + outs () << " exploring traces (" << traces.size() << ") of length " + << cur_bnd << "; # of todos = " << todoCHCs.size() << "\n"; + /* for (auto & b : todoCHCs) + { + outs () << b << ", "; + } + outs () << "\b\b)\n";*/ + + int tot = 0; + for (int trNum = 0; trNum < traces.size() && !todoCHCs.empty(); trNum++) + { + auto & t = traces[trNum]; + set apps; + for (auto c : t) + if (find(todoCHCs.begin(), todoCHCs.end(), c) != todoCHCs.end() && + find(toErCHCs.begin(), toErCHCs.end(), c) == toErCHCs.end()) + apps.insert(c); + if (apps.empty()) continue; // should not happen + + tot++; + + auto & hr = ruleManager.chcs[t.back()]; + //ToDo: update for Nonlinear + Expr lms; + for (int i = 0; i < hr.srcRelations.size(); i++) { + lms = invs[hr.srcRelations[i]]; + } // Expr lms = invs[hr.srcRelation]; -// if (lms != NULL && (bool)u.isFalse(mk(lms, hr.body))) -// { -// outs () << "\n unreachable: " << t.back() << "\n"; -// toErCHCs.insert(t.back()); -// unreach_chcs.insert(t.back()); -// unsat_prefs.insert(t); -// continue; -// } + if (lms != NULL && (bool)u.isFalse(mk(lms, hr.body))) + { + outs () << "\n unreachable: " << t.back() << "\n"; + toErCHCs.insert(t.back()); + unreach_chcs.insert(t.back()); + unsat_prefs.insert(t); + continue; + } // // int suff = 1; // bool suffFound = false; @@ -473,14 +469,14 @@ namespace ufo // } // } // } -// } -// outs () << " -> actually explored: " << tot << ", |unsat prefs| = " << unsat_prefs.size() << "\n"; -// } -// for (auto a : toErCHCs) todoCHCs.erase(a); -// cur_bnd++; -// } -// outs () << "Done with TG\n"; -// } + } + outs () << " -> actually explored: " << tot << ", |unsat prefs| = " << unsat_prefs.size() << "\n"; + } + for (auto a : toErCHCs) todoCHCs.erase(a); + cur_bnd++; + } + outs () << "Done with TG\n"; + } void letItRun(Expr model, Expr src, set& todoCHCs, set& toErCHCs, int lh, map tmp) { diff --git a/include/deep/Horn.hpp b/include/deep/Horn.hpp deleted file mode 100755 index 9db65dc25..000000000 --- a/include/deep/Horn.hpp +++ /dev/null @@ -1,1269 +0,0 @@ -#ifndef HORN__HPP__ -#define HORN__HPP__ - -#include "fstream" -#include "ae/AeValSolver.hpp" -#include "ae/NumUtils.hpp" - -using namespace std; -using namespace boost; - -namespace ufo -{ - inline bool rewriteHelperConsts(Expr& body, Expr v1, Expr v2) - { - if (isOpX(v1)) - { - body = mk(body, mk(v1, v2)); - return true; - } - else if (isOpX(v1)) - { - body = mk(body, v2); - return true; - } - else if (isOpX(v1)) - { - body = mk(body, mk(v2)); - return true; - } - return false; - } - - struct HornRuleExt - { - ExprVector srcVars; - ExprVector dstVars; - ExprVector locVars; - - Expr body; - Expr bodyShort; - Expr head; - - // for TG: - ExprVector bodies; - int bodiesSz; - vector covered; - - Expr srcRelation; - Expr dstRelation; - - bool isFact; - bool isQuery; - bool isInductive; - - void assignVarsAndRewrite (ExprVector& _srcVars, ExprVector& invVarsSrc, - ExprVector& _dstVars, ExprVector& invVarsDst, ExprSet& lin) - { - for (int i = 0; i < _srcVars.size(); i++) - { - srcVars.push_back(invVarsSrc[i]); - lin.insert(mk(_srcVars[i], srcVars[i])); - } - - for (int i = 0; i < _dstVars.size(); i++) - { - dstVars.push_back(invVarsDst[i]); - lin.insert(mk(_dstVars[i], dstVars[i])); - } - } - - void shrinkLocVars() - { - for (auto it = locVars.begin(); it != locVars.end();) - if (contains(body, *it)) ++it; - else it = locVars.erase(it); - } - - Expr getBody(bool sh) - { - if (sh && bodiesSz == 1) return bodyShort; - return body; - } - }; - - class CHCs - { - private: - set indeces; - string varname = "_FH_"; - SMTUtils u; - - public: - - ExprFactory &m_efac; - EZ3 &m_z3; - - Expr failDecl; - vector chcs, chcsOrig, chcsTmp; - vector wtoCHCs; - ExprVector loopheads; - ExprSet decls, declsTmp; - map invVars, invVarsPrime; - map> outgs; - map hasArrays; - map> iterators; - bool hasAnyArrays; - int debug; - set chcsToCheck1, chcsToCheck2, toEraseChcs, redChcs; - int glob_ind = 0; - mmtree deps; - bool cycleSearchDone = false; - map>> cycles, prefixes; - vector> acyclic; - map>>::iterator cyclesIt; - - CHCs(ExprFactory &efac, EZ3 &z3, int d = false) : - u(efac), m_efac(efac), m_z3(z3), hasAnyArrays(false), debug(d) {}; - - bool isFapp (Expr e) - { - if (isOpX(e)) - if (e->arity() > 0) - if (isOpX(e->left())) - if (e->left()->arity() >= 2) - return true; - return false; - } - - bool splitBody (HornRuleExt& hr, ExprVector& srcVars, ExprSet& lin) - { - getConj (simplifyBool(hr.body), lin); - for (auto c = lin.begin(); c != lin.end(); ) - { - Expr cnj = *c; - if (isOpX(cnj) && isOpX(cnj->left()) && - find(decls.begin(), decls.end(), cnj->left()) != decls.end()) - { - Expr rel = cnj->left(); - if (hr.srcRelation != NULL) - { - errs () << "Nonlinear CHC is currently unsupported: [" - << *hr.srcRelation << " /\\ " << *rel->left() << " -> " - << *hr.dstRelation << "]\n"; - return false; - } - hr.srcRelation = rel->left(); - for (auto it = cnj->args_begin()+1, end = cnj->args_end(); it != end; ++it) - srcVars.push_back(*it); - c = lin.erase(c); - } - else ++c; - } - return true; - } - - void addDecl (Expr a) - { - if (invVars[a->left()].size() == 0) - { - decls.insert(a); - for (int i = 1; i < a->arity()-1; i++) - { - Expr new_name = mkTerm (varname + to_string(i - 1), m_efac); - Expr arg = a->arg(i); - if (!isOpX (arg) && !isOpX (arg) && !isOpX (arg) && !isOpX (arg)) - { - errs() << "Argument #" << i << " of " << a << " is not supported\n"; - exit(1); - } - Expr var = fapp (constDecl (new_name, a->arg(i))); - new_name = mkTerm (lexical_cast(var) + "'", m_efac); - invVars[a->left()].push_back(var); - invVarsPrime[a->left()].push_back(cloneVar(var, new_name)); - } - } - } - - bool normalize (Expr& r, HornRuleExt& hr) - { - r = regularizeQF(r); - - // TODO: support more syntactic replacements - while (isOpX(r)) - { - for (int i = 0; i < r->arity() - 1; i++) - { - hr.locVars.push_back(bind::fapp(r->arg(i))); - } - r = r->last(); - } - - if (isOpX(r) && isOpX(r->first())) - { - for (int i = 0; i < r->first()->arity() - 1; i++) - hr.locVars.push_back(bind::fapp(r->first()->arg(i))); - - r = mk(r->first()->last(), mk(m_efac)); - } - - if (isOpX(r)) - { - r = mk(r->first(), mk(m_efac)); - } - else if (isOpX(r) && r->arity() == 2 && isOpX(r->left()) && hasUninterp(r->left())) - { - r = mk(r->left()->left(), r->right()); - } - else if (isOpX(r) && r->arity() == 2 && isOpX(r->right()) && hasUninterp(r->right())) - { - r = mk(r->right()->left(), r->left()); - } - - if (isOpX(r) && !isFapp(r->right()) && !isOpX(r->right())) - { - if (isOpX(r->right())) - { - return false; - } - r = mk(mk(r->left(), mk(r->right())), mk(m_efac)); - } - - if (!isOpX(r)) r = mk(mk(m_efac), r); - - return true; - } - - bool parse(string smt, int doElim = 2, bool doArithm = true) - { - if (debug > 0) outs () << "\nPARSING" << "\n=======\n"; - std::unique_ptr > m_fp; - m_fp.reset (new ZFixedPoint (m_z3)); - ZFixedPoint &fp = *m_fp; - fp.loadFPfromFile(smt); - chcs.reserve(fp.m_rules.size()); - - for (auto &r: fp.m_rules) - { - hasAnyArrays |= containsOp(r); - chcs.push_back(HornRuleExt()); - HornRuleExt& hr = chcs.back(); - - if (!normalize(r, hr)) - { - chcs.pop_back(); - continue; - } - - hr.body = r->left(); - hr.head = r->right(); - if (isOpX(hr.head)) - { - if (hr.head->left()->arity() == 2 && - (find(fp.m_queries.begin(), fp.m_queries.end(), r->right()) != - fp.m_queries.end())) - addFailDecl(hr.head->left()->left()); - else - addDecl(hr.head->left()); - hr.dstRelation = hr.head->left()->left(); - } - else - { - if (!isOpX(hr.head)) hr.body = mk(hr.body, mk(hr.head)); - addFailDecl(mk(m_efac)); - hr.head = mk(m_efac); - hr.dstRelation = mk(m_efac); - } - } - - if (debug > 0) outs () << "Reserved space for " << chcs.size() << " CHCs and " << decls.size() << " declarations\n"; - - bool allGood = true; - // the second loop is needed because we want to distunguish - // uninterpreted functions used as variables from relations to be synthesized - for (auto it = chcs.begin(); it != chcs.end();) - { - auto & hr = *it; - ExprVector origSrcSymbs; - ExprSet lin; - if (!splitBody(hr, origSrcSymbs, lin)) - { - it = chcs.erase(it); - allGood = false; - continue; - } - if (hr.srcRelation == NULL) - { - if (hasUninterp(hr.body)) - { - errs () << "Unsupported format\n"; - errs () << " " << *hr.body << "\n"; - exit (1); - } - hr.srcRelation = mk(m_efac); - } - - hr.isFact = isOpX(hr.srcRelation); - hr.isQuery = (hr.dstRelation == failDecl); - hr.isInductive = (hr.srcRelation == hr.dstRelation); - - ExprVector origDstSymbs; - if (!hr.isQuery) - { - for (auto it = hr.head->args_begin()+1, end = hr.head->args_end(); it != end; ++it) - origDstSymbs.push_back(*it); - hr.head = hr.head->left(); - } - - hr.assignVarsAndRewrite (origSrcSymbs, invVars[hr.srcRelation], - origDstSymbs, invVarsPrime[hr.dstRelation], lin); - - hr.body = conjoin(lin, m_efac); - // if (doElim >= 1 && !hr.isQuery) - { - hr.bodyShort = eliminateQuantifiers(hr.body, hr.locVars, doArithm); -// hr.bodyShort = u.removeITE(hr.bodyShort); - hr.shrinkLocVars(); - chcsOrig.push_back(hr); // reserve copy - } - ++it; - } - - if (debug > 0) outs () << "After parsing: " << chcs.size() << " CHCs and " << decls.size() << " declarations\n"; - if (!allGood) exit(0); - - if (doElim >= 2) - { - int sz = chcs.size(); - for (int c = 0; c < chcs.size(); c++) - { - chcsToCheck1.insert(c); - chcsToCheck2.insert(c); - } - if (!eliminateDecls()) return false; - - chcsTmp = chcs; - // eliminating all at once, otherwise elements at chcsToCheck* need updates - for (auto it = toEraseChcs.rbegin(); it != toEraseChcs.rend(); ++it) - { - chcs.erase(chcs.begin() + *it); - } - toEraseChcs.clear(); - } - for (int i = 0; i < chcs.size(); i++) - outgs[chcs[i].srcRelation].push_back(i); - - if (doElim) - findCycles(); - - if (debug >= 2) - for (auto & d : decls){ - outs () << "outgs from " << *d->left() << ":\n"; - for (auto & o : outgs[d->left()]) - outs () << " (" << o << ") -> " << *chcs[o].dstRelation << "\n"; } - - if (debug >= 2) - { - outs () << (doElim ? " Simplified " : " Parsed ") << "CHCs:\n"; - print(debug >= 3, true); - } - return true; - } - - void reParse(bool lb = false, bool cycl = true) - { - chcs = chcsOrig; - for (auto it = redChcs.rbegin(); it != redChcs.rend(); ++it) - if (*it < chcs.size()) - chcs.erase(chcs.begin() + *it); - - decls.insert(declsTmp.begin(), declsTmp.end()); - - // actually, add more CHCs - int sz = chcs.size(); - vector toErase; - for (int i = 0; i < sz; i++) - { - // if (chcs[i].isQuery) continue; - ExprVector vars2keep; - u.flatten(chcs[i].body, chcs[i].bodies, false, vars2keep, [](Expr a, ExprVector& b){return a;}); - chcs[i].bodiesSz = chcs[i].bodies.size(); - if (!lb && chcs[i].bodiesSz > 1) - { - toErase.push_back(i); - for (auto & p : chcs[i].bodies) - { - auto n = chcs[i]; - n.body = p; - n.bodies.clear(); - chcs.push_back(n); - } - chcs[i].bodies.clear(); - } - if (lb && chcs[i].bodiesSz > 1) - { - ExprVector tmp; - for (int j = 0; j < chcs[i].bodies.size(); j++) - { - chcs[i].locVars.push_back(bind::boolConst - (mkTerm ("_aux_" + lexical_cast(j), m_efac))); - tmp.push_back(mk(chcs[i].locVars.back(), chcs[i].bodies[j])); - } - chcs[i].body = disjoin(tmp, m_efac); - } - } - - if (cycl) - { - for (auto it = toErase.rbegin(); it != toErase.rend(); ++it) - chcs.erase(chcs.begin() + *it); - - if (debug > 0) outs () << "Contextualized: " << chcs.size() - << " CHCs and " << decls.size() << " declarations\n"; - outgs.clear(); - prefixes.clear(); - cycles.clear(); - - for (int i = 0; i < chcs.size(); i++) - outgs[chcs[i].srcRelation].push_back(i); - - findCycles(); // maybe expensive, to optimize - - if (debug >= 2) - for (auto & d : decls){ - outs () << "outgs from " << *d->left() << ":\n"; - for (auto & o : outgs[d->left()]) - outs () << " (" << o << ") -> " << *chcs[o].dstRelation << "\n"; } - - print(debug >= 3, true); - } - } - - void propagateInvs(ExprMap& cands) - { - for (auto & i : redChcs) - { - set r; - closure(i, deps, r); - for (auto j : r) redChcs.insert(j); - } - - while (!declsTmp.empty()) - { - int sz = declsTmp.size(); - for (auto d = declsTmp.begin(); d != declsTmp.end(); ) - { - bool found = true; - ExprSet invs; - for (int i = 0; i < chcsTmp.size(); i++) - { - auto c = &chcsTmp[i]; - if (c->dstRelation != (*d)->left()) continue; - if (find(redChcs.begin(), redChcs.end(), i) != redChcs.end()) continue; - if (c->isFact) invs.insert(c->body); - else if (cands[c->srcRelation] != NULL) - invs.insert(mk(cands[c->srcRelation], c->body)); - else - found = false; - } - if (found) - { - Expr inv = keepQuantifiers(disjoin(invs, m_efac), invVarsPrime[(*d)->left()]); - inv = weakenForHardVars(inv, invVarsPrime[(*d)->left()]); - cands[(*d)->left()] = replaceAll(inv, invVarsPrime[(*d)->left()], invVars[(*d)->left()]); - - decls.insert(*d); - d = declsTmp.erase(d); - } - else ++d; - } - if (sz == declsTmp.size()) - { -// outs () << "cannot derive; remaining decls "; -// pprint(declsTmp,2); - for (auto d : declsTmp) cands[d->left()] = mk(m_efac); - return; - } - } - } - - bool eliminateTrivTrueOrFalse() - { - return true; // disabled for testgen - set toEraseChcsTmp; - for (int i = 0; i < chcs.size(); i++) - { - if (find(toEraseChcs.begin(), toEraseChcs.end(), i) != toEraseChcs.end()) continue; - if (find(toEraseChcsTmp.begin(), toEraseChcsTmp.end(), i) != toEraseChcsTmp.end()) continue; - - auto c = &chcs[i]; - if (c->isQuery && !c->isFact) - { - auto f = find(chcsToCheck1.begin(), chcsToCheck1.end(), i); - if (f != chcsToCheck1.end()) - { - if (u.isTrue(c->body)) - { - // thus, c->srcRelation should be false - for (int j = 0; j < chcs.size(); j++) - { - if (find(toEraseChcs.begin(), toEraseChcs.end(), j) != toEraseChcs.end()) continue; - if (find(toEraseChcsTmp.begin(), toEraseChcsTmp.end(), j) != toEraseChcsTmp.end()) continue; - - HornRuleExt* s = &chcs[j]; - if (s->srcRelation == c->srcRelation) - { - // search for vacuous cases where s == inv -> inv2 and c == inv /\ true -> false - // then, inv can only be false, thus s does not give any constraint - toEraseChcsTmp.insert(j); // could erase here, but ther will be a mess with pointers - } - else if (s->dstRelation == c->srcRelation) - { - s->isQuery = true; - s->dstRelation = failDecl; - s->locVars.insert(s->locVars.end(), s->dstVars.begin(), s->dstVars.end()); - s->dstVars.clear(); - chcsToCheck1.insert(j); - chcsToCheck2.insert(j); - } - } - decls.erase(c->srcRelation); - declsTmp.insert(c->srcRelation); - } - chcsToCheck1.erase(f); - } - } - else if (c->isQuery && c->isFact) - if (u.isSat(c->body)) - { - outs () << "Counterexample found (during preprocessing)\n"; - return false; - } - } - - if (toEraseChcsTmp.empty()) return true; - - for (auto it = toEraseChcsTmp.rbegin(); it != toEraseChcsTmp.rend(); ++it) - { - if (debug >= 2) outs () << " Eliminating vacuous CHC: " << chcs[*it].srcRelation << " -> " << chcs[*it].dstRelation << "\n"; - if (debug >= 3) outs () << " its body is true: " << chcs[*it].body << "\n"; - toEraseChcs.insert(*it); - } - - return eliminateTrivTrueOrFalse(); // recursive call - } - - bool eliminateDecls() - { - int preElim = decls.size(); - if (debug > 0) outs () << "Reducing the number of CHCs: " << (chcs.size() - toEraseChcs.size()) << - "; and the number of declarations: " << decls.size() << "...\n"; - if (debug >= 3) - { - outs () << " Current CHC topology:\n"; - print(false); - } - - if (!eliminateTrivTrueOrFalse()) return false; // first, remove relations which are trivially false - // and find any trivially unsatisfiable queries - Expr declToRemove = NULL; - vector srcMax, dstMax; - set toEraseChcsTmp; - - for (auto d = decls.begin(); d != decls.end();) - { - vector src, dst; - for (int i = 0; i < chcs.size(); i++) - { - if (find(toEraseChcs.begin(), toEraseChcs.end(), i) != toEraseChcs.end()) continue; - if (find(toEraseChcsTmp.begin(), toEraseChcsTmp.end(), i) != toEraseChcsTmp.end()) continue; - - if (chcs[i].srcRelation == (*d)->left()) src.push_back(i); - if (chcs[i].dstRelation == (*d)->left()) dst.push_back(i); - } - - if ((src.size() > 0 && dst.size() > 0) && - emptyIntersect(src, dst)) - { - if (declToRemove != NULL) - if (declToRemove->arity() > (*d)->arity()) - { ++d; continue; } - if (declToRemove != NULL) - if (declToRemove->arity() == (*d)->arity() && - src.size() * dst.size() > srcMax.size() * dstMax.size()) - { ++d; continue; } - - srcMax = src; - dstMax = dst; - declToRemove = *d; - } - - if (src.size() == 0) // found dangling CHCs - { - toEraseChcsTmp.insert(dst.begin(), dst.end()); - declsTmp.insert(*d); - d = decls.erase(d); - } - else ++d; - } - - // first, it will remove dangling CHCs since it's cheaper - if (declToRemove != NULL && toEraseChcsTmp.empty()) - { - for (int i : srcMax) - for (int j : dstMax) - concatenateCHCs(i, j); - - toEraseChcsTmp.insert(srcMax.begin(), srcMax.end()); - toEraseChcsTmp.insert(dstMax.begin(), dstMax.end()); - decls.erase(declToRemove); - declsTmp.insert(declToRemove); - } - - for (auto a = toEraseChcsTmp.rbegin(); a != toEraseChcsTmp.rend(); ++a) - { - if (debug >= 2) outs () << " Eliminating CHC: " << chcs[*a].srcRelation << " -> " << chcs[*a].dstRelation << "\n"; - toEraseChcs.insert(*a); - } - - removeTautologies(); // get rid of CHCs that don't add any _new_ constraints - if (preElim > decls.size()) - return eliminateDecls(); - else - { - // currently disabled -// if (!hasAnyArrays) slice(); // remove unrelated constraints and shrink arities of predicates - - int preComb = (chcs.size() - toEraseChcs.size()); - combineCHCs(); - if (preComb > (chcs.size() - toEraseChcs.size())) - return eliminateDecls(); - } - return true; - } - - void concatenateCHCs(int i, int j) - { - for (int k : {i, j}) deps[chcs.size()].insert(k); - chcs.push_back(HornRuleExt()); - HornRuleExt* s = &chcs[i]; - HornRuleExt* d = &chcs[j]; - HornRuleExt* n = &chcs.back(); - if (debug >= 2) - { - outs () << " Concatenating two CHCs: " - << d->srcRelation << " -> " << d->dstRelation << " and " - << s->srcRelation << " -> " << s->dstRelation << "\n"; - } - n->srcRelation = d->srcRelation; - n->dstRelation = s->dstRelation; - n->srcVars = d->srcVars; - n->dstVars = d->dstVars; - - ExprVector newVars; - for (int i = 0; i < d->dstVars.size(); i++) - { - Expr new_name = mkTerm ("__bnd_var_" + to_string(glob_ind++), m_efac); - newVars.push_back(cloneVar(d->dstVars[i], new_name)); - } - Expr mergedBody = replaceAll(s->body, s->srcVars, newVars); - n->dstVars.insert(n->dstVars.end(), d->locVars.begin(), d->locVars.end()); - for (int i = 0; i < d->locVars.size(); i++) - { - Expr new_name = mkTerm ("__loc_var_" + to_string(glob_ind++), m_efac); - newVars.push_back(cloneVar(d->locVars[i], new_name)); - } - mergedBody = mk(replaceAll(d->body, n->dstVars, newVars), mergedBody); - n->locVars = newVars; - n->locVars.insert(n->locVars.end(), s->locVars.begin(), s->locVars.end()); - n->body = simpleQE(mergedBody, n->locVars); - n->shrinkLocVars(); - n->dstVars = s->dstVars; - n->isInductive = n->srcRelation == n->dstRelation; - n->isFact = isOpX(n->srcRelation); - n->isQuery = n->dstRelation == failDecl; - - chcsToCheck1.insert(chcs.size()-1); - chcsToCheck2.insert(chcs.size()-1); - } - - void removeTautologies() - { - for (int i = 0; i < chcs.size(); i++) - { - if (find(toEraseChcs.begin(), toEraseChcs.end(), i) != toEraseChcs.end()) continue; - - auto h = &chcs[i]; - auto f = find(chcsToCheck2.begin(), chcsToCheck2.end(), i); - if (f != chcsToCheck2.end()) - { - if (u.isFalse(h->body)) - { - if (debug >= 2) outs () << " Eliminating CHC: " << h->srcRelation << " -> " << h->dstRelation << "\n"; - if (debug >= 3) outs () << " its body is false: " << h->body << "\n"; - toEraseChcs.insert(i); - continue; - } - chcsToCheck2.erase(f); - } - - bool found = false; - if (h->isInductive) - { - found = true; - for (int j = 0; j < h->srcVars.size(); j++) - { - if (u.isSat(h->body, mkNeg(mk(h->srcVars[j], h->dstVars[j])))) - { - found = false; - break; - } - } - } - if (found) - { - if (debug >= 2) outs () << " Eliminating CHC: " << h->srcRelation << " -> " << h->dstRelation << "\n"; - if (debug >= 3) outs () << " inductive but does not change vars: " << h->body << "\n"; - toEraseChcs.insert(i); - redChcs.insert(i); - } - else ++h; - } - } - - void combineCHCs() - { - for (int i = 0; i < chcs.size(); i++) - { - if (find(toEraseChcs.begin(), toEraseChcs.end(), i) != toEraseChcs.end()) continue; - - set toComb = {i}; - HornRuleExt& s = chcs[i]; - for (int j = i + 1; j < chcs.size(); j++) - { - if (find(toEraseChcs.begin(), toEraseChcs.end(), j) != toEraseChcs.end()) continue; - - HornRuleExt& d = chcs[j]; - if (s.srcRelation == d.srcRelation && s.dstRelation == d.dstRelation) - { - for (int k = 0; k < s.srcVars.size(); k++) assert (s.srcVars[k] == d.srcVars[k]); - for (int k = 0; k < s.dstVars.size(); k++) assert (s.dstVars[k] == d.dstVars[k]); - toComb.insert(j); - } - } - if (toComb.size() > 1) - { - if (debug >= 2) - { - outs () << " Disjoing bodies of " << toComb.size() << " CHCs: " - << s.srcRelation << " -> " << s.dstRelation << "\n"; - } - ExprVector all; - for (auto it = toComb.rbegin(); it != toComb.rend(); ++it) - { - all.push_back(chcs[*it].body); - if (*it != i) - { - toEraseChcs.insert(*it); - deps[i].insert(*it); - } - } - s.body = distribDisjoin(all, m_efac); - chcsToCheck1.insert(i); - chcsToCheck2.insert(i); - return combineCHCs(); - } - } - } - - // (recursive) multi-stage slicing begins here - set chcsToVisit; - map varsSlice; - - void updateTodo(Expr decl, int num) - { - for (int i = 0; i < chcs.size(); i++) - { - if (find(toEraseChcs.begin(), toEraseChcs.end(), i) != toEraseChcs.end()) continue; - - if (i != num && - !chcs[i].isQuery && - (chcs[i].srcRelation == decl || chcs[i].dstRelation == decl)) - chcsToVisit.insert(i); - } - } - - void slice() - { - chcsToVisit.clear(); - varsSlice.clear(); - // first, compute sets of dependent variables - for (int i = 0; i < chcs.size(); i++) - { - if (find(toEraseChcs.begin(), toEraseChcs.end(), i) != toEraseChcs.end()) continue; - - if (chcs[i].isQuery) - { - chcs[i].body = keepQuantifiers(chcs[i].body, chcs[i].srcVars); - Expr decl = chcs[i].srcRelation; - filter (chcs[i].body, bind::IsConst(), - std::inserter (varsSlice[decl], varsSlice[decl].begin ())); - updateTodo(chcs[i].srcRelation, i); - } - } - while (!chcsToVisit.empty()) slice(*chcsToVisit.begin()); - - // now, prepare for variable elimination - for (auto & d : varsSlice) - { -// if (invVars[d.first].size() > d.second.size()) -// outs () << "sliced for " << *d.first << ": " << invVars[d.first].size() -// << " -> " << d.second.size() << "\n"; - ExprSet varsPrime; - for (auto & v : d.second) - { - Expr pr = replaceAll(v, invVars[d.first], invVarsPrime[d.first]); - varsPrime.insert(pr); - } - - keepOnly(invVars[d.first], d.second); - keepOnly(invVarsPrime[d.first], varsPrime); - } - - // finally, update bodies and variable vectors - for (int i = 0; i < chcs.size(); i++) - { - if (find(toEraseChcs.begin(), toEraseChcs.end(), i) != toEraseChcs.end()) continue; - auto & c = chcs[i]; - - if (u.isFalse(c.body) || u.isTrue(c.body)) continue; - - ExprSet bd; - getConj(c.body, bd); - for (auto b = bd.begin(); b != bd.end();) - { - if (emptyIntersect(*b, invVars[c.srcRelation]) && - emptyIntersect(*b, invVarsPrime[c.dstRelation])) - b = bd.erase(b); - else ++b; - } - if (!c.isFact) c.srcVars = invVars[c.srcRelation]; - if (!c.isQuery) c.dstVars = invVarsPrime[c.dstRelation]; - c.body = conjoin(bd, m_efac); - } - } - - void slice(int num) - { - HornRuleExt* hr = &chcs[num]; - assert (!hr->isQuery); - ExprSet srcCore, dstCore, srcDep, dstDep, varDeps, cnjs; - - if (qeUnsupported(hr->body)) - { - varDeps.insert(hr->srcVars.begin(), hr->srcVars.end()); - varDeps.insert(hr->locVars.begin(), hr->locVars.end()); - varDeps.insert(hr->dstVars.begin(), hr->dstVars.end()); - } - else - { - varDeps = varsSlice[hr->srcRelation]; - filter (getPrecondition(hr), bind::IsConst(), // all src vars from the preconditions are dependent - std::inserter (varDeps, varDeps.begin ())); - - for (auto & v : varsSlice[hr->dstRelation]) - varDeps.insert(replaceAll(v, invVars[hr->dstRelation], hr->dstVars)); - - srcCore = varsSlice[hr->dstRelation]; - dstCore = varDeps; - - getConj(hr->body, cnjs); - while(true) - { - int vars_sz = varDeps.size(); - for (auto & c : cnjs) - { - ExprSet varsCnj; - filter (c, bind::IsConst(), - std::inserter (varsCnj, varsCnj.begin ())); - if (!emptyIntersect(varDeps, varsCnj)) - varDeps.insert(varsCnj.begin(), varsCnj.end()); - } - if (hr->isInductive) - { - for (auto & v : varDeps) - { - varDeps.insert(replaceAll(v, hr->dstVars, hr->srcVars)); - varDeps.insert(replaceAll(v, hr->srcVars, hr->dstVars)); - } - } - if (vars_sz == varDeps.size()) break; - } - } - - bool updateSrc = false; - bool updateDst = false; - if (!hr->isFact) - { - ExprSet& srcVars = varsSlice[hr->srcRelation]; - for (auto v = varDeps.begin(); v != varDeps.end();) - { - if (find(hr->srcVars.begin(), hr->srcVars.end(), *v) != hr->srcVars.end()) - { - if (find(srcVars.begin(), srcVars.end(), *v) == srcVars.end()) - { - updateSrc = true; - srcVars.insert(*v); - } - v = varDeps.erase(v); - } - else ++v; - } - } - - srcDep = varsSlice[hr->srcRelation]; - dstDep = varDeps; - - if (!hr->isQuery) - { - ExprSet& dstVars = varsSlice[hr->dstRelation]; - for (auto v = varDeps.begin(); v != varDeps.end();) - { - if (find(hr->dstVars.begin(), hr->dstVars.end(), *v) != hr->dstVars.end()) - { - Expr vp = replaceAll(*v, hr->dstVars, invVars[hr->dstRelation]); - if (find(dstVars.begin(), dstVars.end(), vp) == dstVars.end()) - { - updateDst = true; - dstVars.insert(vp); - } - v = varDeps.erase(v); - } - else ++v; - } - } - - if (!varDeps.empty()) - hr->body = eliminateQuantifiers(hr->body, varDeps, false); - - if (updateSrc) updateTodo(hr->srcRelation, num); - if (updateDst) updateTodo(hr->dstRelation, num); - chcsToVisit.erase(num); - } - - void getAllTraces (Expr src, Expr dst, int len, vector trace, - vector>& traces, bool once = false) - { - if (len == 1) - { - for (auto a : outgs[src]) - { - if (chcs[a].dstRelation == dst) - { - if (once && find(trace.begin(), trace.end(), a) != trace.end()) - continue; - vector newtrace = trace; - newtrace.push_back(a); - traces.push_back(newtrace); - } - } - } - else - { - for (auto a : outgs[src]) - { - if (once && find(trace.begin(), trace.end(), a) != trace.end()) - continue; - vector newtrace = trace; - newtrace.push_back(a); - getAllTraces(chcs[a].dstRelation, dst, len-1, newtrace, traces, once); - } - } - } - - bool isRelVisited(vector& trace, ExprVector& av, Expr rel) - { - for (auto t : trace) - if (chcs[t].dstRelation == rel) - return true; - return find(av.begin(), av.end(), rel) != av.end(); - } - - void getAllAcyclicTraces (Expr src, Expr dst, int len, vector trace, - vector>& traces, ExprVector& av) - { - if (len == 1) - { - for (auto a : outgs[src]) - { - if (chcs[a].dstRelation == dst) - { - vector newtrace = trace; - newtrace.push_back(a); - traces.push_back(newtrace); - } - } - } - else - { - for (auto a : outgs[src]) - { - if (chcs[a].dstRelation == dst || - isRelVisited(trace, av, chcs[a].dstRelation)) - continue; - vector newtrace = trace; - newtrace.push_back(a); - getAllAcyclicTraces(chcs[a].dstRelation, dst, len-1, newtrace, traces, av); - } - } - } - - void findCycles() - { - ExprVector av; - ExprVector endRels = {failDecl}; - for (auto & d : decls) - { - if (outgs[d->left()].empty()) - endRels.push_back(d->left()); - - // heuristics for SeaHorn-encoding: - if (lexical_cast(d).find(".exit.") !=std::string::npos) - endRels.push_back(d->left()); - } - - for (auto & r : endRels) - findCycles(mk(m_efac), r, av); - // print(false, true); - outs () << "global traces num: " << acyclic.size() << "\n"; - for (auto & a : cycles) - outs () << " traces num for: " << a.first << ": " << a.second.size() << "\n"; - - cycleSearchDone = true; - cyclesIt = cycles.begin(); - } - - bool findCycles(Expr src, Expr dst, ExprVector& avoid) - { - if (debug >= 2) outs () << "\nfindCycles: " << src << " => " << dst << "\n"; - vector> nonCycleTraces; - ExprVector highLevelRels; - for (int i = 1; i < chcs.size(); i++) - { - if (debug >= 2) - { - outs () << "."; - outs().flush(); - } - getAllAcyclicTraces(src, dst, i, vector(), nonCycleTraces, avoid); - } - - bool tracesFound = nonCycleTraces.size() > 0; - map >> prefs; - for (auto & d : nonCycleTraces) - { - vector tmp; - for (auto & chcNum : d) - { - if (chcs[chcNum].isQuery) break; // last iter anyway - Expr& r = chcs[chcNum].dstRelation; - tmp.push_back(chcNum); - if (find(avoid.begin(), avoid.end(), r) == avoid.end()) - { - prefs[r].push_back(tmp); - unique_push_back(r, highLevelRels); - } - } - } - - if (tracesFound) - { - if (src == dst) - { - if (debug) - outs () << "traces num for " << src << ": " << nonCycleTraces.size() << "\n"; - for (auto & c : nonCycleTraces) - unique_push_back(c, cycles[src]); - } - else - { - for (auto & c : nonCycleTraces) - unique_push_back(c, acyclic); - } - } - else - { - assert(src == dst); - } - - ExprVector avoid2 = avoid; - for (auto & d : highLevelRels) - { - avoid2.push_back(d); - bool nestedCycle = findCycles(d, d, avoid2); - if (nestedCycle) - { - prefixes[d] = prefs[d]; // to debug - } - } - - // WTO sorting is here now: - if (tracesFound) - { - if (src == dst) - { - unique_push_back(src, loopheads); // could there be duplicates? - if (debug) outs () << " loophead found: " << src << "\n"; - } - else if (debug) outs () << " global:\n"; - } - - for (auto c : nonCycleTraces) - { - if (debug > 5) - { - outs () << " trace: " << chcs[c[0]].srcRelation; - for (auto h : c) - outs () << " -> " << chcs[h].dstRelation << " "; - outs () << "\n"; - } - else if (debug) - { - outs () << "traces num for " << chcs[c[0]].srcRelation << ": " - << c.size() << "\n"; - } - - for (auto h : c) - unique_push_back(&chcs[h], wtoCHCs); - } - - return tracesFound; - } - - vector getPrefix(Expr rel) // get only first one; to extend - { - assert(!cycles[rel].empty()); - assert(!prefixes[rel].empty()); - vector pref = prefixes[rel][0]; - assert(!pref.empty()); - if (chcs[pref[0]].isFact) - return pref; - vector ppref = getPrefix(chcs[pref[0]].srcRelation); - ppref.insert(ppref.end(), pref.begin(), pref.end()); - return ppref; - } - - bool hasCycles() - { - if (cycleSearchDone) return cycles.size() > 0; - findCycles(); - - // assert (cycles.size() == prefixes.size()); - /* - if (debug >= 3) - for (int i = 0; i < cycles.size(); i++) - { - auto & c = prefixes[i]; - outs () << " pref: "; - for (auto & chcNum : c) outs () << *chcs[chcNum].srcRelation << " -> "; - outs () << " ["; - for (auto & chcNum : c) outs () << chcNum << " -> "; - outs () << "] "; - auto & d = cycles[i]; - outs () << "\n cycle: "; - for (auto & chcNum : d) outs () << *chcs[chcNum].srcRelation << " -> "; - outs () << " ["; - for (auto & chcNum : d) outs () << chcNum << " -> "; - outs () << "]\n\n"; - } - */ - return (cycles.size() > 0); - } - - Expr getNextCycle() - { - Expr rel = cyclesIt->first; - cyclesIt++; - if (cyclesIt == cycles.end()) cyclesIt = cycles.begin(); - return rel; - } - - void addFailDecl(Expr decl) - { - if (failDecl == NULL) - { - failDecl = decl; - } - else - { - if (failDecl != decl) - { - errs () << "Multiple queries are unsupported\n"; - exit (1); - } - } - } - - Expr getPrecondition (HornRuleExt* hr) - { - Expr tmp = keepQuantifiers(hr->body, hr->srcVars); - return weakenForHardVars(tmp, hr->srcVars); - } - - void print (bool full = false, bool dump_cfg = false) - { - std::ofstream enc_chc; - if (dump_cfg) - { - enc_chc.open("chc.dot"); - enc_chc <<("digraph print {\n"); - } - for (int i = 0; i < chcs.size(); i++) - { - if (find(toEraseChcs.begin(), toEraseChcs.end(), i) != toEraseChcs.end()) - continue; - auto & hr = chcs[i]; - if (full) - { - if (hr.isFact) outs() << " INIT:\n"; - else if (hr.isInductive) outs() << " TR:\n"; - else if (hr.isQuery) outs() << " BAD:\n"; - else outs() << " CHC:\n"; - } - - outs () << " " << * hr.srcRelation; - if (full && hr.srcVars.size() > 0) - { - outs () << " ("; - pprint(hr.srcVars); - outs () << ")"; - } - else outs () << "[#" << hr.srcVars.size() << "]"; - outs () << " -> " << * hr.dstRelation; - - if (full && hr.dstVars.size() > 0) - { - outs () << " ("; - pprint(hr.dstVars); - outs () << ")"; - } - else outs () << "[#" << hr.dstVars.size() << "]"; - if (full) - { - outs() << "\n body: \n"; - if (treeSize(hr.body) < 1000) - pprint(hr.body, 4); - else outs () << " < . . . . too large . . . . >\n"; - } - else outs() << "\n"; - if (dump_cfg) - { - enc_chc << " \"" << hr.srcRelation; - enc_chc << "\" -> "; - enc_chc << "\"" << hr.dstRelation; - enc_chc << "\"\n"; - } - } - if (dump_cfg) - { - enc_chc <<("}"); - enc_chc.close(); - // this needs a graphiz package installed: - system("dot -Tpdf -o chc.pdf chc.dot"); - } - } - }; -} - - -#endif diff --git a/include/deep/HornNonlin.hpp b/include/deep/HornNonlin.hpp index 2b0f920a3..90fe83bbb 100755 --- a/include/deep/HornNonlin.hpp +++ b/include/deep/HornNonlin.hpp @@ -90,13 +90,13 @@ namespace ufo int total_var_cnt = 0; string infile; - //ToDo: Remove later on; move from Horn.hpp - map> outgs; - map>> cycles, prefixes; - bool cycleSearchDone = false; - vector> acyclic; - map>>::iterator cyclesIt; - int debug; + //ToDo: Remove or recheck later on; move from Horn.hpp + map> outgs; //Todo: Should be map> outgs ? + map>> cycles, prefixes; + bool cycleSearchDone = false; + vector> acyclic; + map>>::iterator cyclesIt; + int debug; CHCs(ExprFactory &efac, EZ3 &z3) : m_efac(efac), m_z3(z3) {}; @@ -327,7 +327,7 @@ namespace ufo hr.assignVarsAndRewrite (origSrcSymbs, tmp, origDstSymbs, invVars[hr.dstRelation]); - hr.body = simpleQE(hr.body, hr.locVars); + // hr.body = simpleQE(hr.body, hr.locVars); // GF: ideally, hr.locVars should be empty after QE, // but the QE procedure is imperfect, so @@ -341,6 +341,12 @@ namespace ufo } } + for (int i = 0; i < chcs.size(); i++) { + if (chcs[i].srcRelations.size() > 0 ) { + outgs[chcs[i].srcRelations[0]].push_back(i); + } + } + for (int i = 0; i < chcs.size(); i++) incms[chcs[i].dstRelation].push_back(i); } @@ -394,7 +400,7 @@ namespace ufo for (int i = 0; i < hr.srcRelations.size(); i++) { outs () << * hr.srcRelations[i]; - outs () << " ("; + outs () << " srcRelations: ("; for(auto &a: hr.srcVars[i]) outs() << *a << ", "; outs () << "\b\b)"; outs () << " /\\ "; @@ -403,11 +409,19 @@ namespace ufo if (hr.dstVars.size() > 0) { - outs () << " ("; + outs () << " dstVars: ("; for(auto &a: hr.dstVars) outs() << *a << ", "; outs () << "\b\b)"; } outs() << "\n body: " << * hr.body << "\n"; + + if (hr.locVars.size() > 0) + { + outs () << " locVars: ("; + for(auto &a: hr.locVars) outs() << *a << ", "; + outs () << "\n)"; + } + //outs() << "\n locVars: " << * hr.locVars << "\n"; } //ToDo: Remove later on; move from Horn.hpp diff --git a/include/deep/NonlinCHCsolver.hpp b/include/deep/NonlinCHCsolver.hpp index 2aedd65cc..5b87e5d65 100644 --- a/include/deep/NonlinCHCsolver.hpp +++ b/include/deep/NonlinCHCsolver.hpp @@ -33,2410 +33,383 @@ namespace ufo } enum class Result_t {SAT=0, UNSAT, UNKNOWN}; - - class NonlinCHCsolver + struct KeyTG { - private: - - ExprFactory &m_efac; - SMTUtils u; - CHCs& ruleManager; - int varCnt = 0; - ExprVector ssaSteps; - map candidates; - bool hasArrays = false; - ExprSet declsVisited; - map> abdHistory; - int globalIter = 0; - int strenBound; - bool debug = false; - map extend; - ExprVector fixedRels; - map > reachChcs; - string SYGUS_BIN; + int key; + Expr eKey; + vector rule; + vector locPos; + }; - public: + class NonlinCHCsolver { + private: - NonlinCHCsolver (CHCs& r, int _b) : m_efac(r.m_efac), ruleManager(r), u(m_efac), strenBound(_b), SYGUS_BIN("") {} + ExprFactory &m_efac; + SMTUtils u; + CHCs &ruleManager; + int varCnt = 0; + ExprVector ssaSteps; + map candidates; + ExprMap invs; + bool debug = false; - bool checkAllOver (bool checkQuery = false) - { - for (auto & hr : ruleManager.chcs) - { - if (hr.isQuery && !checkQuery) continue; - if (!checkCHC(hr, candidates)) return false; - } - return true; - } + map eKeys; + map mKeys; + map kVers; + vector > kVersVals; - bool checkCHC (HornRuleExt& hr, map& annotations) - { - ExprSet checkList; - checkList.insert(hr.body); - Expr rel; - for (int i = 0; i < hr.srcRelations.size(); i++) - { - Expr rel = hr.srcRelations[i]; - ExprSet lms = annotations[rel]; - Expr overBody = replaceAll(conjoin(lms, m_efac), ruleManager.invVars[rel], hr.srcVars[i]); - getConj(overBody, checkList); - } - if (!hr.isQuery) - { - rel = hr.dstRelation; - ExprSet negged; - ExprSet lms = annotations[rel]; - for (auto a : lms) negged.insert(mkNeg(replaceAll(a, ruleManager.invVars[rel], hr.dstVars))); - checkList.insert(disjoin(negged, m_efac)); - } - return bool(!u.isSat(checkList)); - } + set unreach_chcs; + set> unsat_prefs; - void shrinkCnjs(ExprSet & cnjs) - { - ExprSet shrunk; - ExprSet cnjsTmp = cnjs; - for (auto c1 = cnjsTmp.begin(); c1 != cnjsTmp.end(); ++c1) - { - if (isOpX(*c1)) continue; - for (auto c2 = cnjs.begin(); c2 != cnjs.end();) - { - if (!isOpX(*c2)) { ++c2; continue; }; - ExprSet dsjs; - ExprSet newDsjs; - getDisj(*c2, dsjs); - for (auto & d : dsjs) - if (u.isSat(*c1, d)) - newDsjs.insert(d); - shrunk.insert(disjoin(newDsjs, m_efac)); - c2 = cnjs.erase(c2); - cnjs.insert(disjoin(newDsjs, m_efac)); - } - cnjs.insert(shrunk.begin(), shrunk.end()); - shrunk.clear(); - } - } + public: - void preproGuessing(Expr e, ExprVector& ev1, ExprVector& ev2, ExprSet& guesses, bool backward = false, bool mutate = true) - { - if (!containsOp(e)) e = rewriteSelectStore(e); - ExprSet complex; - findComplexNumerics(e, complex); - ExprMap repls; - ExprMap replsRev; - map replIngr; - for (auto & a : complex) - { - Expr repl = bind::intConst(mkTerm - ("__repl_" + lexical_cast(repls.size()), m_efac)); - repls[a] = repl; - replsRev[repl] = a; - ExprSet tmp; - filter (a, bind::IsConst (), inserter (tmp, tmp.begin())); - replIngr[repl] = tmp; - } - Expr eTmp = replaceAll(e, repls); + NonlinCHCsolver(CHCs &r) : m_efac(r.m_efac), ruleManager(r), u(m_efac) {} - ExprSet ev3; - filter (eTmp, bind::IsConst (), inserter (ev3, ev3.begin())); // prepare vars - for (auto it = ev3.begin(); it != ev3.end(); ) - { - if (find(ev1.begin(), ev1.end(), *it) != ev1.end()) it = ev3.erase(it); - else - { - Expr tmp = replsRev[*it]; - if (tmp == NULL) ++it; - else - { - ExprSet tmpSet = replIngr[*it]; - minusSets(tmpSet, ev1); - if (tmpSet.empty()) it = ev3.erase(it); - else ++it; + bool checkAllOver(bool checkQuery = false) { + for (auto &hr: ruleManager.chcs) { + if (hr.isQuery && !checkQuery) continue; + if (!checkCHC(hr, candidates)) return false; } - } - } - - eTmp = eliminateQuantifiers(eTmp, ev3); - if (backward) eTmp = mkNeg(eTmp); - eTmp = simplifyBool(simplifyArithm(eTmp, false, true)); - - ExprSet tmp; - - if (mutate) - mutateHeuristic(eTmp, tmp); - else - getConj(eTmp, tmp); - - for (auto g : tmp) - { - g = replaceAll (g, replsRev); - if (!ev2.empty()) - g = replaceAll(g, ev1, ev2); - guesses.insert(g); - } - } - - bool isFixedRel(const Expr & rel) - { - return find(fixedRels.begin(), fixedRels.end(), rel) != fixedRels.end(); - } - - void addFixedRel(Expr rel) - { - fixedRels.push_back(rel); - } - - // search for a CHC having the form r1 /\ .. /\ rn => rel, where rel \not\in {r1, .., rn} - bool hasNoDef(Expr rel) - { - for (auto & hr : ruleManager.chcs) - if (hr.dstRelation == rel && - find (hr.srcRelations.begin(), hr.srcRelations.end(), rel) == hr.srcRelations.end()) - return false; - return true; - } - - // lightweight (non-inductive) candidate propagation both ways - // subsumes bootstrapping (ssince facts and queries are considered) - void propagate(bool fwd = true) - { - // outs() << "Entry\n";//DEBUG - // printCands(false);//DEBUG - int szInit = declsVisited.size(); - for (auto & hr : ruleManager.chcs) - { - // outs() << "hrd: " << *(hr.dstRelation) << "\n";//DEBUG - - bool dstVisited = declsVisited.find(hr.dstRelation) != declsVisited.end(); - bool srcVisited = hr.isFact || (hr.isInductive && hasNoDef(hr.dstRelation) && extend.find(hr.dstRelation) == extend.end()); - bool dstFixed = isFixedRel(hr.dstRelation); - - // outs() << "sv: " << srcVisited << " fwd: " << fwd << " dv: " << dstVisited << "\n";//DEBUG - - for (auto & a : hr.srcRelations) - srcVisited |= declsVisited.find(a) != declsVisited.end(); - - // outs() << "sv: " << srcVisited << " fwd: " << fwd << " dv: " << dstVisited << "\n";//DEBUG - if (fwd && srcVisited && !dstVisited && !dstFixed) - { - propagateCandidatesForward(hr); - declsVisited.insert(hr.dstRelation); - } - else if (!fwd && !hr.isInductive && !srcVisited && dstVisited) - { - propagateCandidatesBackward(hr); - declsVisited.insert(hr.srcRelations.begin(), hr.srcRelations.end()); - } - // printCands(false);//DEBUG + return true; } - if (declsVisited.size() != szInit) propagate(fwd); - // outs() << "Exit\n";//DEBUG - // printCands(false);//DEBUG - } - - void propagateCandidatesForward(HornRuleExt& hr) - { -// for (auto & hr : ruleManager.chcs) - { - if (hr.isQuery) return; - - Expr body = getQuantifiedCands(true, hr); - - ExprSet all; - all.insert(body); - for (int i = 0; i < hr.srcVars.size(); i++) - { - Expr rel = hr.srcRelations[i]; - if (!hasArrays) // we need "clean" invariants in the case of arrays (to be used as ranges) - { - // currently, tries all candidates; but in principle, should try various subsets - for (auto & c : candidates[rel]) - all.insert(replaceAll(c, ruleManager.invVars[rel], hr.srcVars[i])); + bool checkCHC(HornRuleExt &hr, map &annotations) { + ExprSet checkList; + checkList.insert(hr.body); + Expr rel; + for (int i = 0; i < hr.srcRelations.size(); i++) { + Expr rel = hr.srcRelations[i]; + ExprSet lms = annotations[rel]; + Expr overBody = replaceAll(conjoin(lms, m_efac), ruleManager.invVars[rel], hr.srcVars[i]); + getConj(overBody, checkList); } - } - - // //DEBUG - // for (auto c : candidates[hr.dstRelation]) - // outs() << "before: " << *c << "\n"; - - if (hr.isInductive) // get candidates of form [ mod = ] - retrieveDeltas (body, hr.srcVars[0], hr.dstVars, candidates[hr.dstRelation]); - - preproGuessing(conjoin(all, m_efac), hr.dstVars, ruleManager.invVars[hr.dstRelation], candidates[hr.dstRelation]); - // //DEBUG - // for (auto c : candidates[hr.dstRelation]) - // outs() << "after: " << *c << "\n"; + if (!hr.isQuery) { + rel = hr.dstRelation; + ExprSet negged; + ExprSet lms = annotations[rel]; + for (auto a: lms) negged.insert(mkNeg(replaceAll(a, ruleManager.invVars[rel], hr.dstVars))); + checkList.insert(disjoin(negged, m_efac)); + } + return bool(!u.isSat(checkList)); } - } - - void propagateCandidatesBackward(HornRuleExt& hr, bool forceConv = false) - { - // outs() << "in backward\n";//DEBUG -// for (auto & hr : ruleManager.chcs) - { - if (hr.isFact) return; - - Expr dstRel = hr.dstRelation; - ExprVector& rels = hr.srcRelations; - - ExprVector invVars; - ExprVector srcVars; - - // identifying nonlinear cases (i.e., when size(occursNum[...]) > 1) - map> occursNum; - for (int i = 0; i < rels.size(); i++) - { - occursNum[rels[i]].insert(i); - for (int j = i+1; j < rels.size(); j++) - if (rels[i] == rels[j]) - occursNum[rels[i]].insert(j); - } - - for (int i = 0; i < hr.srcVars.size(); i++) - srcVars.insert(srcVars.end(), hr.srcVars[i].begin(), hr.srcVars[i].end()); - - if (hr.srcVars.size() == 1) invVars = ruleManager.invVars[rels[0]]; - - ExprSet cands; - if (hr.isQuery) - { - if (getQuantifiedCands(false, hr) == NULL) return; - else cands.insert(mk(m_efac)); - } - else cands.insert(simplifyBool(conjoin(candidates[dstRel], m_efac))); - - ExprSet mixedCands; - ExprVector curCnd; - - for (int i = 0; i < rels.size(); i++) - { - ExprSet tmp; - getConj(replaceAll(conjoin(candidates[rels[i]], m_efac), - ruleManager.invVars[rels[i]], hr.srcVars[i]), tmp); - curCnd.push_back(conjoin(tmp, m_efac)); - } - - // actually, just a single candidate, in the most recent setting; - // TODO: remove the loop (or find use of it) - for (auto & c : cands) - { - ExprSet all, newCnd; - all.insert(hr.body); - all.insert(mkNeg(replaceAll(c, ruleManager.invVars[dstRel], hr.dstVars))); - all.insert(curCnd.begin(), curCnd.end()); - // TODO: add more sophisticated blocking based on unseccussful tries from abdHistory - - preproGuessing(conjoin(all, m_efac), srcVars, invVars, newCnd, true, false); - - if (!(u.isSat(conjoin(curCnd, m_efac), conjoin(newCnd, m_efac)))) + // naive solving, without invariant generation + Result_t solveIncrementally(int bound, int unr, ExprVector &rels, vector &args) { + if (unr > bound) // maximum bound reached { - // simple heuristic: find if some current guess was already created by abduction - // then, delete it and try again - if (!hr.isInductive) - for (auto & t : abdHistory[&hr]) - for (int j = 0; j < t.size(); j++) - if (u.implies(conjoin(candidates[rels[j]], m_efac), t[j])) - candidates[rels[j]].clear(); - continue; - } - - // oftentimes, newCnd is a disjunction that can be simplified - // by considering other candidates in curCnd - ExprSet tmp, tmp2; - for (auto c : newCnd) getConj(c, tmp); - for (auto c : curCnd) getConj(c, tmp); - shrinkCnjs(tmp); - getConj(conjoin(tmp, m_efac), tmp2); - ineqMerger(tmp2, true); - simplifyPropagate(tmp2); - Expr stren = simplifyArithm(conjoin(tmp2, m_efac)); - mixedCands.insert(stren); - } - - if (hr.srcVars.size() == 1) - { - if (!isFixedRel(rels[0])) { - if (forceConv) forceConvergence(candidates[rels[0]], mixedCands); - for (auto & m : mixedCands) getConj(m, candidates[rels[0]]); - } - } - else - { - // decomposition here - // fairness heuristic: prioritize candidates for all relations, which are true - // TODO: find a way to disable it if for some reason some invariant should only be true - vector trueCands; - ExprSet trueRels; - int numTrueCands = 0; - for (int i = 0; i < rels.size(); i++) + return Result_t::UNKNOWN; + } else if (rels.empty()) // base case == init is reachable { - trueCands.push_back(u.isTrue(curCnd[i])); - if (trueCands.back()) - { - trueRels.insert(rels[i]); - numTrueCands++; - } + return Result_t::SAT; } - // numTrueCands = 0; // GF: hack to disable fairness - - ExprSet allGuessesInit; - if (numTrueCands > 0) // at least one curCnd should be true - for (int i = 0; i < rels.size(); i++) - if (!trueCands[i]) - allGuessesInit.insert(curCnd[i]); - - // actually, just a single candidate, in the most recent setting; - // TODO: remove the loop (or find use of it) - for (auto it = mixedCands.begin(); it != mixedCands.end(); ) - { - if (containsOp(*it)) { ++it; continue; } - Expr a = *it; - ExprSet processed; - ExprSet allGuesses = allGuessesInit; - ExprVector histRec; - - auto candidatesTmp = candidates; - - for (int i = 0; i < rels.size(); i++) - { - // skip the relation if it already has a candidate and there exists a relation with no candidate - // (existing candidates are already in allGuesses) - if (numTrueCands > 0 && !trueCands[i]) continue; - if (isFixedRel(rels[i])) continue; - Expr r = rels[i]; - - // Expr modelphi = conjoin(curCnd, m_efac); - - // if (rels.size() == 1) { - // if (extend.find(r) != extend.end()) { - // modelphi = mk(modelphi, replaceAll(extend[r], ruleManager.invVars[r], hr.srcVars[i])); - // } - // } else { - // for (int j = i+1; j < rels.size(); j++) { - // if (extend.find(rels[j]) != extend.end()) { - // modelphi = mk(modelphi, replaceAll(extend[rels[j]], ruleManager.invVars[rels[j]], hr.srcVars[j])); - // } - // } - // } + Result_t res = Result_t::UNSAT; - if (!u.isSat(a, conjoin(curCnd, m_efac))) return; // need to recheck because the solver has been reset - - if (processed.find(r) != processed.end()) continue; + // reserve copy; + auto ssaStepsTmp = ssaSteps; + int varCntTmp = varCnt; - invVars.clear(); - ExprSet backGuesses, allVarsExcept; - ExprVector vars; - for (int j = 0; j < rels.size(); j++) - { - Expr t = rels[j]; - if (processed.find(t) != processed.end()) continue; - if (t == r) - { - vars.insert(vars.begin(), hr.srcVars[j].begin(), hr.srcVars[j].end()); - if (occursNum[r].size() == 1) invVars = ruleManager.invVars[rels[j]]; - } - else - allVarsExcept.insert(hr.srcVars[j].begin(), hr.srcVars[j].end()); + vector > applicableRules; + for (int i = 0; i < rels.size(); i++) { + vector applicable; + for (auto &r: ruleManager.incms[rels[i]]) { + Expr body = ruleManager.chcs[r].body; //ruleManager.getPostcondition(r); + if (args.size() != 0) + body = replaceAll(body, ruleManager.chcs[r].dstVars, args[i]); + // identifying applicable rules + if (u.isSat(body, conjoin(ssaSteps, m_efac))) { + applicable.push_back(r); + } } - - // model-based cartesian decomposition - ExprSet all = allGuesses; - all.insert(mkNeg(a)); - - if (trueRels.size() != 1) // again, for fairness heuristic: - all.insert(u.getModel(allVarsExcept)); - - // outs() << "truerels.size: " << trueRels.size() << "\n";//DEBUG - // outs() << "model: " << *(u.getModel(allVarsExcept)) << "\n";//DEBUG - //DEBUG - // for (auto v : allVarsExcept) - // outs() << "allvarsexcept: " << *v << "\n"; - // for (auto a : all) - // outs() << "all: " << *a << "\n";//DEBUG - - // in the case of nonlin, invVars is empty, so no renaming happens: - - preproGuessing(conjoin(all, m_efac), vars, invVars, backGuesses, true, false); - - if (occursNum[r].size() == 1) - { - getConj(conjoin(backGuesses, m_efac), candidates[r]); - histRec.push_back(conjoin(backGuesses, m_efac)); - allGuesses.insert(backGuesses.begin(), backGuesses.end()); - //DEBUG - // for (auto ag : allGuesses) - // outs() << "AG: " << *ag << "\n"; + if (applicable.empty()) { + return Result_t::UNSAT; // nothing is reachable; thus it is safe here } - else - { - // nonlinear case; proceed to isomorphic decomposition for each candidate - map multiabdVars; - - for (auto it2 = occursNum[r].begin(); it2 != occursNum[r].end(); ++it2) - for (auto & v : ruleManager.invVars[r]) - multiabdVars[*it2].push_back( - cloneVar(v, mkTerm ( - "__multiabd_var" + lexical_cast(*v) + "_" + to_string(*it2), m_efac))); - - Expr b = conjoin(backGuesses, m_efac); - { - ExprSet sol; - int iter = 0; - while (++iter < 10 /*hardcode*/) - { - // preps for obtaining a new model - - ExprSet cnj; - for (auto it2 = occursNum[r].begin(); it2 != occursNum[r].end(); ++it2) - { - ExprSet dsj; - if (!sol.empty()) - dsj.insert(replaceAll(conjoin(sol, m_efac), ruleManager.invVars[r], hr.srcVars[*it2])); - for (auto it3 = occursNum[r].begin(); it3 != occursNum[r].end(); ++it3) - { - ExprSet modelCnj; - for (int i = 0; i < ruleManager.invVars[r].size(); i++) - modelCnj.insert(mk(hr.srcVars[*it2][i], multiabdVars[*it3][i])); - dsj.insert(conjoin(modelCnj, m_efac)); + applicableRules.push_back(applicable); + } + + vector > ruleCombinations; + getCombinations(applicableRules, ruleCombinations); + + for (auto &c: ruleCombinations) { + ssaSteps = ssaStepsTmp; + varCnt = varCntTmp; + ExprVector rels2; + vector args2; + + for (int i = 0; i < c.size(); i++) { + // clone all srcVars and rename in the body + auto &hr = ruleManager.chcs[c[i]]; + Expr body = hr.body; + if (!hr.dstVars.empty()) body = replaceAll(body, hr.dstVars, args[i]); + vector tmp; + for (int j = 0; j < hr.srcRelations.size(); j++) { + rels2.push_back(hr.srcRelations[j]); + ExprVector tmp1; + for (auto &a: hr.srcVars[j]) { + Expr new_name = mkTerm("_fh_" + to_string(varCnt++), m_efac); + tmp1.push_back(cloneVar(a, new_name)); } - cnj.insert(disjoin(dsj, m_efac)); - } - - // obtaining a new model - ExprVector args; - for (auto it2 = occursNum[r].begin(); it2 != occursNum[r].end(); ++it2) - for (auto & v : hr.srcVars[*it2]) - args.push_back(v->left()); - args.push_back(mk(conjoin(cnj, m_efac), b)); - - ExprSet negModels; - for (auto it2 = occursNum[r].begin(); it2 != occursNum[r].end(); ++it2) - negModels.insert(mkNeg(replaceAll(conjoin(sol, m_efac), ruleManager.invVars[r], multiabdVars[*it2]))); - - if (!u.isSat(extend.find(r) != extend.end() ? - mk(extend[r], mknary(args)) : - mknary(args), sol.empty() ? - mk(m_efac) : - disjoin(negModels, m_efac))) - { - candidates[r].insert(sol.begin(), sol.end()); - histRec.push_back(conjoin(sol, m_efac)); - for (auto it2 = occursNum[r].begin(); it2 != occursNum[r].end(); ++it2) - allGuesses.insert(replaceAll(conjoin(sol, m_efac), ruleManager.invVars[r], hr.srcVars[*it2])); - break; - } - else - { - ExprSet models; - for (auto it2 = occursNum[r].begin(); it2 != occursNum[r].end(); ++it2) - { - ExprSet elements; - for (int i = 0; i < ruleManager.invVars[r].size(); i++) - elements.insert(mk(ruleManager.invVars[r][i], u.getModel(multiabdVars[*it2][i]))); - models.insert(conjoin(elements, m_efac)); + args2.push_back(tmp1); + body = replaceAll(body, hr.srcVars[j], tmp1); + for (auto &a: hr.locVars) { + Expr new_name = mkTerm("_fh_" + to_string(varCnt++), m_efac); + body = replaceAll(body, a, cloneVar(a, new_name)); } - sol.insert (disjoin(models, m_efac)); // weakening sol by a new model - } - - // heuristic to accelerate convergence - ExprVector chk; - for (auto it2 = occursNum[r].begin(); it2 != occursNum[r].end(); ++it2) - chk.push_back(replaceAll(disjoin(sol, m_efac), ruleManager.invVars[r], hr.srcVars[*it2])); - sol.clear(); - for (auto it1 = occursNum[r].begin(); it1 != occursNum[r].end(); ++it1) - { - int cnt = 0; - for (auto it3 = occursNum[r].begin(); it3 != it1; ++it3, ++cnt) - chk[cnt] = replaceAll(conjoin(sol, m_efac), ruleManager.invVars[r], hr.srcVars[*it3]); - chk[cnt] = mk(m_efac); - - ExprSet allNonlin; - allNonlin.insert(mkNeg(b)); - allNonlin.insert(conjoin(chk, m_efac)); - preproGuessing(conjoin(allNonlin, m_efac), hr.srcVars[*it1], ruleManager.invVars[r], sol, true, false); - } - u.removeRedundantConjuncts(sol); } - } - } - processed.insert(r); - } - - // fairness heuristic (need to be tested properly): - { - bool tryAgain = false; - if (!abdHistory[&hr].empty() && equivVecs(abdHistory[&hr].back(), histRec)) - { - candidates = candidatesTmp; - for (int i = 0; i < histRec.size(); i++) - { - if (u.isEquiv(curCnd[i], histRec[i])) - { - numTrueCands++; - trueCands[i] = true; - trueRels.insert(rels[i]); - } - else - { - trueCands[i] = false; - allGuessesInit.insert(curCnd[i]); - } - } - tryAgain = true; // to keep + ssaSteps.push_back(body); } - abdHistory[&hr].push_back(histRec); - - if (tryAgain) + if (u.isSat(conjoin(ssaSteps, + m_efac))) // TODO: optimize with incremental SMT solving (i.e., using push / pop) { - if (abdHistory[&hr].size() > 5 /*hardcoded bound*/) - { - tryAgain = false; - for (int i = 0; i < 5 /*hardcoded bound*/; i++) - if (abdHistory[&hr][abdHistory[&hr].size() - 1 - i] != histRec) - { - tryAgain = true; - break; - } - } + Result_t res_tmp = solveIncrementally(bound, unr + 1, rels2, args2); + if (res_tmp == Result_t::SAT) return Result_t::SAT; // bug is found for some combination + else if (res_tmp == Result_t::UNKNOWN) res = Result_t::UNKNOWN; } - - if (!tryAgain) ++it; - } -// outs () << "sanity check: " << u.implies(conjoin(allGuesses, m_efac), a) << "\n"; - } - } - } - } - - // inductive strengthening of candidates (by abduction) - void strengthen(int deep = 0) - { - if (deep >= strenBound) return; - - // currently, relies on the order in CHC file; TBD: proper backwards traversing - for (auto hr = ruleManager.chcs.rbegin(); hr != ruleManager.chcs.rend(); hr++) - { - if (!hr->isFact) - { - filterUnsat(); - if (!checkCHC(*hr, candidates)) - { - // outs() << "in strengthen before\n";//DEBUG - // printCands(false);//DEBUG - propagateCandidatesBackward(*hr, deep == strenBound - 1); - // outs() << "in strengthen after\n";//DEBUG - // printCands(false);//DEBUG - strengthen(deep+1); } - } - } - } - - void forceConvergence (ExprSet& prev, ExprSet& next) - { - if (prev.size() < 1 || next.size() < 1) return; - ExprFactory& efac = (*next.begin())->getFactory(); - - ExprSet prevSplit, nextSplit, prevSplitDisj, nextSplitDisj, common; - - for (auto & a : prev) getConj (a, prevSplit); - for (auto & a : next) getConj (a, nextSplit); - - mergeDiseqs(prevSplit); - mergeDiseqs(nextSplit); - - if (prevSplit.size() != 1 || nextSplit.size() != 1) - return; // GF: to extend - - getDisj(*prevSplit.begin(), prevSplitDisj); - getDisj(*nextSplit.begin(), nextSplitDisj); - - for (auto & a : prevSplitDisj) - for (auto & b : nextSplitDisj) - if (a == b) common.insert(a); - - if (common.empty()) return; - next.clear(); - next.insert(disjoin(common, efac)); - } - - bool equivVecs (ExprVector e1, ExprVector e2) - { - if (e1.size() != e2.size()) return false; - for (int i = 0; i < e1.size(); i++) - { - if (!u.isEquiv(e1[i], e2[i])) return false; + return res; } - return true; - } - - void getImplicationGuesses(map& postconds) - { - map preconds; - for (auto & r : ruleManager.chcs) - { - if (r.isQuery) continue; - - int srcRelInd = -1; - Expr rel = r.head->left(); - - if (isFixedRel(rel)) continue; - - for (int i = 0; i < r.srcVars.size(); i++) if (r.srcRelations[i] == rel) srcRelInd = i; - if (srcRelInd >= 0) - preproGuessing(r.body, r.srcVars[srcRelInd], ruleManager.invVars[rel], preconds[rel]); - if (srcRelInd == -1) continue; - int tot = 0; - for (auto guess : postconds[rel]) - { - if (tot > 5) break; // empirically chosen bound - if (isOpX(guess) || isOpX(guess)) continue; // hack - - for (auto & pre : preconds[rel]) - { - if (u.implies(pre, guess)) continue; - tot++; - Expr newGuess = mk(pre, guess); - ExprVector tmp; - tmp.push_back(replaceAll(newGuess, ruleManager.invVars[rel], r.srcVars[srcRelInd])); - tmp.push_back(r.body); - // simple invariant check (for speed, need to be enhanced) - if (u.implies (conjoin(tmp, m_efac), replaceAll(newGuess, ruleManager.invVars[rel], r.dstVars))) - { - candidates[rel].insert(newGuess); - ExprSet newPost; - tmp.push_back(mkNeg(replaceAll(pre, ruleManager.invVars[rel], r.dstVars))); - preproGuessing(conjoin(tmp, m_efac), r.dstVars, ruleManager.invVars[rel], newPost); - for (auto & a : newPost) - candidates[rel].insert(mk(mk(pre), a)); - } + // naive solving, without invariant generation + void solveIncrementally(int bound) { + ExprVector query; + query.push_back(ruleManager.failDecl); + vector empt; + switch (solveIncrementally(bound, 0, query, empt)) { + case Result_t::SAT: + outs() << "sat\n"; + break; + case Result_t::UNSAT: + outs() << "unsat\n"; + break; + case Result_t::UNKNOWN: + outs() << "unknown\n"; + break; } - } } - } - void printCands(bool unsat = true, map partialsolns = map(), bool nonmaximal = false, bool simplify = false) - { - printCands(unsat, partialsolns, nonmaximal, simplify, outs()); - } - - template - void printCands(bool unsat = true, map partialsolns = map(), bool nonmaximal = false, bool simplify = false, OutputStream & out = outs()) - { - if (unsat) - { - out << "unsat"; - if (nonmaximal) - out << " (may not be maximal solution) \n"; - else - out << "\n"; - } + void setInvs(ExprMap& i) {invs = i;} - for (auto & a : partialsolns.empty() ? candidates : partialsolns) + void initKeys(set& keys, bool toElim = false) { - out << "(define-fun " << *a.first << " ("; - for (auto & b : ruleManager.invVars[a.first]) + for (auto & k : keys) { - out << "(" << *b << " " << u.varType(b) << ")"; + KeyTG* ar = new KeyTG(); + ar->eKey = mkMPZ(k, m_efac); + eKeys[k] = ar->eKey; + mKeys[k] = ar; } - out << ") Bool\n "; - - ExprSet lms = a.second; - Expr sol = conjoin(lms, m_efac); - - // sanity checks: - ExprSet allVars; - filter (sol, bind::IsConst (), inserter (allVars, allVars.begin())); - minusSets(allVars, ruleManager.invVars[a.first]); - map qv; - getQVars (sol, qv); - for (auto & q : qv) minusSets(allVars, q.second); - assert (allVars.empty()); -// if (!u.isSat(sol)) assert(0); - Expr res = simplifyBool(simplifyArithm(sol)); - if (simplify) + for (auto & hr : ruleManager.chcs) { - lms.clear(); - getConj(res, lms); - shrinkCnjs(lms); - u.removeRedundantConjuncts(lms); - res = conjoin(lms, m_efac); - } - u.print(res, out); - out << ")\n"; - } - } - - bool dropUnsat(map& annotations, const ExprVector & unsatCore, const map> & flagToCand) - { - for (auto & c : unsatCore) { - auto entry = flagToCand.find(c); - if (entry == flagToCand.end()) continue; - Expr rel = (entry->second).first; - Expr cand = (entry->second).second; - annotations[rel].erase(cand); - return true; - } - - return false; - } - - /* vacuity check based on SAT check */ - void vacCheck(map& annotations) - { - bool recurse = false; - - for (auto & hr : ruleManager.chcs) - { - if (hr.isFact) continue; - - ExprVector flags; - ExprSet finalExpr; - map> flagToCand; - bool hasArray = false; - - for (int i = 0; i < hr.srcRelations.size(); i++) { - Expr rel = hr.srcRelations[i]; - if (isFixedRel(rel)) { - for (auto cand : annotations[rel]) { - cand = replaceAll(cand, ruleManager.invVars[rel], hr.srcVars[i]); - finalExpr.insert(cand); - } - } else { - for (auto cand : annotations[rel]) { - if (!hasArray && containsOp(cand)) hasArray = true; - Expr flag = bind::boolConst(mkTerm("__unsatcoreVar__" + to_string(flags.size()+1), m_efac)); - flags.push_back(flag); - flagToCand[flag] = make_pair(rel, cand); - cand = replaceAll(cand, ruleManager.invVars[rel], hr.srcVars[i]); - finalExpr.insert(mk(flag, cand)); - } - } - } - - if (!hr.isQuery && u.isSat(hr.body)) { - finalExpr.insert(hr.body); - } + bool anyFound = toElim; + for (auto it = eKeys.begin(); it != eKeys.end(); ++it) + { + Expr var = NULL; + outs() << hr.body << "\n"; + outs() << hr.head << "\n"; + for (int i = 0; i < hr.srcRelations.size(); i++) { + auto &a = hr.srcRelations[i]; + outs() << i << " : " << a << "\n"; + } + outs() << "dstRelation : "<< hr.dstRelation << "\n"; - // outs() << "BODY: " << *(hr.body) << "\n"; - // for (auto f : finalExpr) - // outs() << *f << "\n"; + getKeyVars(hr.body, (*it).second, var); + if (var != NULL) + { + int varNum = getVarIndex(var, hr.locVars); + anyFound = true; + assert(varNum >= 0); - if (!hasArray) { - ExprVector unsatCore; - if (!u.isSatAssuming(finalExpr, flags, std::back_inserter(unsatCore))) { - // outs() << "failed hr: " << *(hr.body) << "\n"; - // outs() << "flags: " << flags.size() << "\n"; - // outs() << "unsatcore: " << unsatCore.size() << "\n"; - assert(dropUnsat(annotations, unsatCore, flagToCand)); - recurse = true; - } - } else { - if (!u.isSat(finalExpr)) { - ExprVector t1; - ExprVector t2; - u.splitUnsatSets(finalExpr, t1, t2); - for (int i = 0; i < hr.srcRelations.size(); i++) { - Expr rel = hr.srcRelations[i]; - - for (auto itr = annotations[rel].begin(); itr != annotations[rel].end();) { - Expr c = replaceAll(*itr, hr.srcVars[i], ruleManager.invVars[rel]); - if (find(t1.begin(), t1.end(), c) == t1.end()) { - itr = annotations[rel].erase(itr); - } else { - ++itr; - } - } + mKeys[(*it).first]->eKey = (*it).second; + mKeys[(*it).first]->rule.push_back(&hr); + mKeys[(*it).first]->locPos.push_back(varNum); } - recurse = true; } - } - - if (recurse) - return vacCheck(annotations); - } - } - - - void filterUnsat() - { - vector worklist; - for (auto & a : candidates) - if (!u.isSat(a.second)) { - assert(!isFixedRel(a.first)); - for (auto & hr : ruleManager.chcs) - if (hr.dstRelation == a.first && hr.isFact) - worklist.push_back(&hr); - } - - multiHoudini(worklist, false); - - for (auto & a : candidates) - { - if (!u.isSat(a.second)) - { - ExprVector tmp; - ExprVector stub; // TODO: try greedy search, maybe some lemmas are in stub? - u.splitUnsatSets(a.second, tmp, stub); - a.second.clear(); - a.second.insert(tmp.begin(), tmp.end()); - } - } - vacCheck(candidates); - } - - Expr getQuantifiedCands(bool fwd, HornRuleExt& hr) - { - ExprSet qVars; - Expr body = hr.body; - if (fwd && hr.isFact) - { - getQuantifiedVars(hr.body, qVars); - if (!qVars.empty()) // immediately try proving properties if already quantified - { - // make sure that we can use it as a property (i.e., variables check) - - ExprSet allVars; - filter (hr.body, bind::IsConst (), inserter (allVars, allVars.begin())); - minusSets(allVars, qVars); - bool allGood = true; - for (auto & v : allVars) - if (find (hr.dstVars.begin(), hr.dstVars.end(), v) == hr.dstVars.end()) - { allGood = false; break; } - if (allGood) + if (!anyFound) { - ExprSet tmpSet; - getQuantifiedFormulas(hr.body, tmpSet); - for (auto c : tmpSet) - { - // over-approximate the body such that it can pass through the seed mining etc.. - body = replaceAll(body, c, mk(m_efac)); - c = replaceAll(c, hr.dstVars, ruleManager.invVars[hr.dstRelation]); - candidates[hr.dstRelation].insert(c); - } + // optim since we don't need to use loc vars there + hr.body = eliminateQuantifiers(hr.body, hr.locVars); } } - } - if (!fwd && hr.isQuery) // similar for the query - { - getQuantifiedVars(hr.body, qVars); - if (!qVars.empty()) + for (auto it = eKeys.begin(); it != eKeys.end(); ++it) { - ExprSet allVars; - filter (hr.body, bind::IsConst (), inserter (allVars, allVars.begin())); - minusSets(allVars, qVars); - for (int i = 0; i < hr.srcVars.size(); i++) + if (mKeys[(*it).first]->locPos.empty()) { - bool toCont = false; - for (auto & v : allVars) - if (find (hr.srcVars[i].begin(), hr.srcVars[i].end(), v) == hr.srcVars[i].end()) - { toCont = true; break; } - if (toCont) continue; - getQuantifiedFormulas(mkNeg(hr.body), candidates[hr.srcRelations[i]]); + outs() << "Error: key " << (*it).second << " not found\n"; + //exit(1); } - return NULL; // just as an indicator that everything went well } } - return body; - } - bool isSkippable(Expr model, ExprVector vars, map& cands) + void exploreTracesNonLinearTG(int cur_bnd, int bnd, bool skipTerm) { - if (model == NULL) return true; + set todoCHCs; - for (auto v: vars) - { - if (!containsOp(v)) continue; - Expr tmp = u.getModel(v); - if (tmp != v && !isOpX(tmp) && !isOpX(tmp)) - { - return true; - } - } + // first, get points of control-flow divergence + for (auto & d : ruleManager.decls) + if (ruleManager.outgs[d->left()].size() > 1) + for (auto & o : ruleManager.outgs[d->left()]) + todoCHCs.insert(o); - for (auto & a : cands) - for (auto & b : a.second) - if (containsOp(b)) return true; + // if the code is straight, just add queries + if (todoCHCs.empty()) + for (int i = 0; i < ruleManager.chcs.size(); i++) + if (ruleManager.chcs[i].isQuery) + todoCHCs.insert(i); - return false; - } - // adapted from RndLearnerV3 - bool multiHoudini(vector& worklist, bool recur = true) - { - if (!anyProgress(worklist)) return false; - auto candidatesTmp = candidates; - bool res1 = true; - for (auto & hr : worklist) + while (cur_bnd <= bnd && !todoCHCs.empty()) { - if (hr->isQuery) continue; - if (isFixedRel(hr->dstRelation)) continue; - - if (!checkCHC(*hr, candidatesTmp)) + outs () << "new iter with cur_bnd = "<< cur_bnd <<"\n"; + set toErCHCs; + for (auto & a : todoCHCs) { - bool res2 = true; - Expr dstRel = hr->dstRelation; - - Expr model = u.getModel(hr->dstVars); - if (isSkippable(model, hr->dstVars, candidatesTmp)) - { - candidatesTmp[dstRel].clear(); - res2 = false; - } - else + if (find(toErCHCs.begin(), toErCHCs.end(), a) != toErCHCs.end()) + continue; + vector> traces; + //ToDo: update for Nonlinear +// getAllTracesTG(mk(m_efac), a, cur_bnd, vector(), traces); + outs () << " exploring traces (" << traces.size() << ") of length " + << cur_bnd << "; # of todos = " << todoCHCs.size() << "\n"; + /* for (auto & b : todoCHCs) + { + outs () << b << ", "; + } + outs () << "\b\b)\n";*/ + + int tot = 0; + for (int trNum = 0; trNum < traces.size() && !todoCHCs.empty(); trNum++) { - for (auto it = candidatesTmp[dstRel].begin(); it != candidatesTmp[dstRel].end(); ) - { - Expr repl = *it; - repl = replaceAll(*it, ruleManager.invVars[dstRel], hr->dstVars); + auto & t = traces[trNum]; + set apps; + for (auto c : t) + if (find(todoCHCs.begin(), todoCHCs.end(), c) != todoCHCs.end() && + find(toErCHCs.begin(), toErCHCs.end(), c) == toErCHCs.end()) + apps.insert(c); + if (apps.empty()) continue; // should not happen + + tot++; - if (!u.isSat(model, repl)) { it = candidatesTmp[dstRel].erase(it); res2 = false; } - else ++it; + auto & hr = ruleManager.chcs[t.back()]; + //ToDo: update for Nonlinear + Expr lms; + for (int i = 0; i < hr.srcRelations.size(); i++) { + lms = invs[hr.srcRelations[i]]; } - } +// Expr lms = invs[hr.srcRelation]; + if (lms != NULL && (bool)u.isFalse(mk(lms, hr.body))) + { + outs () << "\n unreachable: " << t.back() << "\n"; + toErCHCs.insert(t.back()); + unreach_chcs.insert(t.back()); + unsat_prefs.insert(t); + continue; + } +// +// int suff = 1; +// bool suffFound = false; +// Expr ssa = toExpr(t); +// if (bool(!u.isSat(ssa))) +// { +// unsat_prefs.insert(t); +// continue; +// } +// else +// { +// if (hr.dstRelation == ruleManager.failDecl || skipTerm) +// { +// for ( auto & b : apps) +// toErCHCs.insert(b); +// +// suffFound = true; +// if (getTest()) +// { +// printTest(); +// +// // try the lookahead method: to fix or remove +// if (lookahead > 0) +// { +// Expr mdl = replaceAll(u.getModel(bindVars.back()), bindVars.back(), ruleManager.invVars[hr.dstRelation]); +// outs () << "found: " << mdl << "\n"; +// letItRun(mdl, hr.dstRelation, todoCHCs, toErCHCs, lookahead, kVersVals.back()); +// } +// } +// } +// // default +// } +// +// while (!suffFound && suff < (bnd - cur_bnd)) +// { +//// outs () << " finding happy ending = " << suff; +// vector> tracesSuf; +// ruleManager.getAllTraces(hr.dstRelation, ruleManager.failDecl, suff++, vector(), tracesSuf); +//// outs () << " (" << tracesSuf.size() << ")\n"; +// for (auto tr : tracesSuf) +// { +// tr.insert(tr.begin(), t.begin(), t.end()); +// +// if (bool(u.isSat(toExpr(tr)))) +// { +//// outs () << "\n visited: "; +// for ( auto & b : apps) +// { +// toErCHCs.insert(b); +//// outs () << b << ", "; +// } +//// outs () << "\b\n SAT trace: true "; +//// for (auto c : t) outs () << " -> " << *ruleManager.chcs[c].dstRelation; +//// outs () << "\n Model:\n"; +// suffFound = true; +// if (getTest()) +// printTest(); +// break; +// } +// } +// } + } + outs () << " -> actually explored: " << tot << ", |unsat prefs| = " << unsat_prefs.size() << "\n"; + } + for (auto a : toErCHCs) todoCHCs.erase(a); + cur_bnd++; + } + outs () << "Done with TG\n"; + } + + inline void + solveNonlin(string smt, int inv, int stren, bool maximal, const vector &relsOrder, bool useGAS, + bool usesygus, bool useUC, bool newenc, bool fixCRels, string syguspath) { + ExprFactory m_efac; + EZ3 z3(m_efac); + CHCs ruleManager(m_efac, z3); + ruleManager.parse(smt); + NonlinCHCsolver nonlin(ruleManager); + + nonlin.solveIncrementally(inv); + }; + }; - if (recur && !res2) res1 = false; - if (!res1) break; - } - } - candidates = candidatesTmp; - if (!recur) return false; - if (res1) return anyProgress(worklist); - else return multiHoudini(worklist); - } - - bool anyProgress(vector& worklist) - { - for (auto & a : candidates) - for (auto & hr : worklist) - if (find(hr->srcRelations.begin(), hr->srcRelations.end(), a.first) != - hr->srcRelations.end() || hr->dstRelation == a.first) - if (!a.second.empty()) return true; - return false; - } - - // only one level of propagation here; to be extended - void arrayGuessing(Expr tgt) - { - bool arrFound = false; - for (auto & var : ruleManager.invVars[tgt]) - if (bind::isConst (var)) { - arrFound = true; - break; - } - if (!arrFound) return; - - int ind; - bool iterGrows; - Expr iterator; - Expr qVar = bind::intConst(mkTerm ("_FH_arr_it", m_efac)); - Expr range; - HornRuleExt *hr = 0; - HornRuleExt *qr = 0; - - // preprocessing - for (auto & a : ruleManager.chcs) - { - if (a.isQuery && a.srcRelations[0] == tgt /*hack for now*/ && - (containsOp(a.body) || containsOp(a.body))) - { - ExprVector counters; - hr = &a; - - getCounters(a.body, counters); - for (Expr c : counters) - { - ind = getVarIndex(c, a.srcVars[0] /*hack for now*/); - if (ind < 0) continue; - - if (u.implies(a.body, mk(c, a.dstVars[ind]))) - { - iterator = c; - iterGrows = false; - break; - } - else if (u.implies(a.body, mk(c, a.dstVars[ind]))) - { - iterator = c; - iterGrows = true; - } - } - } - } - - if (iterator == NULL) return; - - // range computation - for (auto & a : ruleManager.chcs) - { - if (!a.isInductive && a.dstRelation == tgt) - { - int max_sz = INT_MAX; - for (Expr e : candidates[tgt]) - { - if ((iterGrows && - ((isOpX(e) && iterator == e->left()) || - (isOpX(e) && iterator == e->right()))) || - (!iterGrows && - ((isOpX(e) && iterator == e->right()) || - (isOpX(e) && iterator == e->left())))) - { - Expr bound = (e->left() == iterator) ? e->right() : e->left(); - if (treeSize(bound) < max_sz) - { - range = iterGrows ? mk(mk(bound, qVar), mk(qVar, iterator)) : - mk(mk(iterator, qVar), mk(qVar, bound)); - max_sz = treeSize(bound); - } - } - } - } - } - - if (range == NULL) return; - - // cell property guessing - Expr body = hr->body; - body = unfoldITE(body); - body = rewriteSelectStore(body); - ExprSet tmp; - ExprVector qVars1, qVars2; - for (int i = 0; i < hr->dstVars.size(); i++) - { - if (ruleManager.invVars[hr->srcRelations[0]][i] == iterator) - { - qVars1.push_back(hr->dstVars[i]); - qVars2.push_back(iterator); - } - else - { - qVars1.push_back(ruleManager.invVars[hr->srcRelations[0]][i]); - qVars2.push_back(hr->dstVars[i]); - } - } - body = simpleQE(body, qVars1); - - preproGuessing(body, qVars2, ruleManager.invVars[hr->srcRelations[0]], tmp); - - for (auto s : tmp) - { - if (!containsOp(a->left()->left(), a->right()))); + return true; + } + } + } + + if (isOpX(assm->left())) + { + for (auto & a : stores) + { + if (assm->left()->left() == a->left() && + assm->left()->right() == a->right() && + isOpX(a->last())) + { + result.push_back(replaceAll(subgoal, a, a->left())); + return true; + } + } + } + } + } + return false; + } + + bool handleExists(Expr subgoal) + { + if (verbose) outs () << string(sp, ' ') << "existential quantifies are currently not supported\n"; + return false; + // to be done + } + + // this recursive method performs a naive search for a strategy + bool rewriteAssumptions(Expr subgoal) + { + if (u.isEquiv(subgoal, mk(efac))) + { + if (verbose) outs () << string(sp, ' ') << "rewriting done\n"; + return true; + } + + // check recursion depth + if (rewriteSequence.size() >= maxDepth) + { + if (verbose) outs() << string(sp, ' ') << "Maximum recursion depth reached\n"; + return false; + } + + // check consecutive applications of the same assumption + if (rewriteSequence.size() > maxGrow) + { + bool incr = true; + for (int i = 1; i < maxGrow + 1; i++) + { + if (treeSize(rewriteHistory[rewriteHistory.size() - i]) < treeSize(rewriteHistory[rewriteHistory.size() - i - 1])) + { + incr = false; + break; + } + } + + if (incr) + { + if (verbose) outs() << string(sp, ' ') << "sequence of rewrites only grows\n"; + return false; + } + } + + auto assumptionsTmp = assumptions; + bool toRem = false; + if (isOpX(subgoal)) + { + uniquePushConj(subgoal->left(), assumptions); + if (assumptions.size() != assumptionsTmp.size()) + { + eliminateEqualities(subgoal); + toRem = true; + if (mergeAssumptions()) + { + assumptions = assumptionsTmp; + if (verbose) outs() << string(sp, ' ') << "proven (merge assms after impl)\n"; + return true; + } + printAssumptions(); + } + subgoal = subgoal->right(); + if (verbose) outs() << string(sp, ' ') << "current subgoal: " << *subgoal << "\n"; + } + + if (isOpX(subgoal)) + { + return handleExists(subgoal); + } + + subgoal = liftITEs(subgoal); + subgoal = u.simplifyITE(subgoal); + subgoal = simplifyExists(subgoal); + subgoal = simplifyArr(subgoal); + subgoal = simplifyArithm(subgoal); + subgoal = simplifyBool(subgoal); + + + ExprSet subgoals; + if (isOpX(subgoal)) + { + subgoals.insert(mk(subgoal->left(), subgoal->right())); + subgoals.insert(mk(mkNeg(subgoal->left()), subgoal->last())); + } + else + { + getConj(subgoal, subgoals); + } + + if (subgoals.size() > 1) + { + while (subgoals.size() > 0) + { + int subgoalsSize = subgoals.size(); + int part = 1; + for (auto it = subgoals.begin(); it != subgoals.end();) + { + Expr s = *it; + if (verbose) + { + outs () << string(sp, ' ') << "proceed with (part " << part << "/" << subgoalsSize << "): " << *s << "\n"; + part++; + } + + bool tmpres = simpleSMTcheck(s); + if (tmpres) + { + if (verbose) outs() << string(sp, ' ') << "{\n" << string(sp+2, ' ') << + " proven trivially (with Z3)\n" << string(sp, ' ') << "}\n"; + } + else + { + auto rewriteHistoryTmp = rewriteHistory; + auto rewriteSequenceTmp = rewriteSequence; + auto assumptionsTmp = assumptions; + + if (verbose) outs() << string(sp, ' ') << "{\n"; + sp += 2; + tmpres= rewriteAssumptions(s); // recursive call + sp -= 2; + if (verbose) outs() << string(sp, ' ') << "}\n"; + + rewriteHistory = rewriteHistoryTmp; + rewriteSequence = rewriteSequenceTmp; + assumptions = assumptionsTmp; + } + if (tmpres) + { + if (verbose) outs () << string(sp, ' ') << "adding " << *s << " to assumptions\n"; + assumptions.push_back(s); + it = subgoals.erase(it); + } + else + { + ++it; + } + } + if (subgoals.size() == subgoalsSize) + { + if (verbose) outs() << string(sp, ' ') << "cannot prove " << subgoalsSize << " of the subgoals\n"; + return false; + } + else if (verbose && subgoals.size() > 0) outs () << string(sp, ' ') << "will try subgoals again\n"; + } + if (verbose) outs () << string(sp, ' ') << "all subgoals are proven\n"; + return true; + } + + // here, assume subgoals.size() == 1 + // thus, subgoal == *subgoals.begin() + + // quick syntactic check first: + for (int i = 0; i < assumptions.size(); i++) + { + if (assumptions[i] == subgoal) + { + if (toRem) assumptions = assumptionsTmp; + if (verbose) outs () << string(sp, ' ') << "rewriting [" << i << "] done\n"; + return true; + } + } + + map allAttempts; + + for (int i = 0; i < assumptions.size(); i++) + { + Expr a = assumptions[i]; + ExprVector result; + if (useAssumption(subgoal, a, result)) { +// if (verbose) outs () << string(sp, ' ') << "found " << result.size() << " substitution(s) for assumption " << i << "\n"; + for (auto & it : result) { + if (u.isTrue(it)) + { + if (verbose) outs () << string(sp, ' ') << "applied [" << i << "]\n"; + return true; + } + } + for (auto & it : result) { + if (find (rewriteHistory.begin(), rewriteHistory.end(), it) == rewriteHistory.end()) + allAttempts[i].push_back(it); + } + } + } + { + // vector orderedAttempts1; + // vector orderedAttempts2; + + // identifying an order for rewrites + // for (auto & a : allAttempts) + // { + // bool placed = false; + + // bool sw; + // if (earlySplit == 1) sw = treeSize(subgoal) >= treeSize(a.second); + // else sw = true; + + // if (sw) + // { + // for (int i = 0; i < orderedAttempts1.size(); i++) + // { + // if (treeSize(allAttempts[orderedAttempts1[i]]) > treeSize(a.second)) + // { + // orderedAttempts1.insert(orderedAttempts1.begin() + i, a.first); + // placed = true; + // break; + // } + // } + // if (!placed) orderedAttempts1.push_back(a.first); + // } + // else + // { + // for (int i = 0; i < orderedAttempts2.size(); i++) + // { + // if (treeSize(allAttempts[orderedAttempts2[i]]) > treeSize(a.second)) + // { + // orderedAttempts2.insert(orderedAttempts2.begin() + i, a.first); + // placed = true; + // break; + // } + // } + // if (!placed) orderedAttempts2.push_back(a.first); + // } + // } + } + + // first, try easier rewrites + if (tryRewriting(allAttempts, subgoal)) + { + if (toRem) assumptions = assumptionsTmp; + return true; + } + + if (splitDisjAssumptions(subgoal)) return true; + + // second, try harder rewrites + if (tryRewriting(allAttempts, subgoal)) + { + if (toRem) assumptions = assumptionsTmp; + return true; + } + + bool res = false; + + if (isOpX(subgoal)) res = splitByGoal(subgoal); +// if (!res) res = proveByContradiction(subgoal); +// if (!res) res = similarityHeuristic(subgoal); + if (toRem) assumptions = assumptionsTmp; + + return res; + } + + // try rewriting in a particular order + bool tryRewriting(map& allAttempts, Expr subgoal) + { + for (auto & a : allAttempts) { +// outs() << string(sp, ' ') << allAttempts.size() << "\n"; + int i = a.first; + for (auto & exp : a.second) { + if (verbose) outs() << string(sp, ' ') << "rewritten [" << i << "]: " << *exp << "\n"; + + // save history + rewriteHistory.push_back(exp); + rewriteSequence.push_back(i); + + if (rewriteAssumptions(exp)) + { + if (verbose) if (exp) outs () << string(sp, ' ') << "rewriting done\n"; + return true; + } + else + { + // failed attempt, remove history + rewriteHistory.pop_back(); + rewriteSequence.pop_back(); + } + + if (subgoal != exp && lev < 2 /* max meta-induction level, hardcoded for now */) + { + map occs; + getCommonSubterms(exp, occs); // get common subterms in `exp` to further replace by fresh symbols + auto it = occs.begin(); + for (int i = 0; i < occs.size() + 1; i++) + { + Expr expGen = exp; + if (it != occs.end()) // try generalizing based on the current subterm from occs + { + expGen = generalizeGoal(exp, it->first, it->second); + ++it; + if (expGen == NULL) continue; + } + else + { + // if nothing worked, try to prove it as is (exactly once, but if not very large) + if (getMonotDegree(expGen) > 2 || countFuns(expGen) > 3) // hand-selected heuristics + continue; + } + + auto assumptionsTmp = assumptions; + // nested induction + ADTSolver sol (expGen, assumptionsTmp, constructors, glob_ind, lev+1, + maxDepth, maxGrow, mergingIts, earlySplit, false, useZ3, to); + + if (sol.solveNoind(false)) + { + if (verbose) if (exp) outs () << string(sp, ' ') << "proven by induction: " << *expGen << "\n"; + return true; + } + } + } + // backtrack: + if (verbose) outs () << string(sp, ' ') << "backtrack to: " << *subgoal << "\n"; + } + } + return false; + } + + // a particular heuristic, to be extended + Expr generalizeGoal(Expr e, Expr subterm, int occs /* how often `subterm` occurs in `e` */) + { + if (occs < 2) return NULL; // `subterm` should occur at least twice + if (subterm->arity() == 0) return NULL; // it should not be a constant + if (isOpX(subterm) && + subterm->left()->arity() == 2) return NULL; // it should not be a variable + Expr expGen = e; + Expr s = bind::mkConst(mkTerm ("_w_" + to_string(glob_ind), efac), typeOf(subterm)); + glob_ind++; // create a fresh symmbol + expGen = replaceAll(expGen, subterm, s); + if (!emptyIntersect(expGen, subterm)) return NULL; // there should not be any leftovers after replacement + int cnt = countFuns(expGen); // check the result + if (cnt == 0 || cnt > 3) return NULL; + if (getMonotDegree(expGen) > 2) return NULL; // if it is still "too complex", scratch it + return expGen; + } + + bool proveByContradiction (Expr subgoal) + { + auto assumptionsTmp = assumptions; + uniquePushConj(mkNeg(subgoal), assumptions); + bool res = false; + eliminateEqualities(subgoal); + if (mergeAssumptions(1)) + { + res = true; + if (verbose) outs () << string(sp, ' ') << "proven by contradiction\n"; + } + assumptions = assumptionsTmp; + return res; + } + + bool splitByGoal (Expr subgoal) + { + // heuristically pick a split (currently, one one predicate) + ExprSet dsjs; + getDisj(subgoal, dsjs); + if (dsjs.size() < 2) return false; + + auto spl = dsjs.end(); + for (auto it = dsjs.begin(); it != dsjs.end(); ++it) + { + for (auto & a : assumptions) + { + if (contains (a, *it)) + { + if (isOp(*it)) spl = it; // try to find a comparisson + if (*spl == NULL) spl = it; // if none, find any + } + } + } + if (spl == dsjs.end()) spl = dsjs.begin(); + if (verbose) outs() << string(sp, ' ') << "deciding: " << **spl << "\n"; + + auto rewriteHistoryTmp = rewriteHistory; + auto rewriteSequenceTmp = rewriteSequence; + auto assumptionsTmp = assumptions; + + uniquePushConj(mkNeg(*spl), assumptions); + eliminateEqualities(subgoal); + if (mergeAssumptions()) + { + assumptions = assumptionsTmp; + return true; + } + printAssumptions(); + + dsjs.erase(spl); + subgoal = disjoin(dsjs, efac); + if (verbose) outs() << string(sp, ' ') << "current subgoal: " << *subgoal << "\n"; + + if (verbose) outs () << string(sp, ' ') << "{\n"; + sp += 2; + bool res = rewriteAssumptions(subgoal); + sp -= 2; + if (verbose) outs () << string(sp, ' ') << "}\n"; + + rewriteHistory = rewriteHistoryTmp; + rewriteSequence = rewriteSequenceTmp; + assumptions = assumptionsTmp; + if (res) + { + if (verbose) outs () << string(sp, ' ') << "succeeded\n"; + return true; + } + + return false; + } + + // potentially useful heuristic + bool similarityHeuristic (Expr subgoal) + { + // heuristically pick a split: first, using disjunctions + ExprSet cands; + for (auto & a : assumptions) + { + if (isOpX(a)) + { + ExprSet dsjs; + getDisj(a, dsjs); + if (dsjs.size() < 2) continue; + auto it = dsjs.begin(); + for (; it != dsjs.end(); ++it) + { + if (*it == subgoal) + { + it = dsjs.erase(it); + cands.insert(disjoin(dsjs, efac)); + break; + } + } + } + } + if (cands.empty()) // then, based on matching + { + ExprVector args; + filter(subgoal, bind::IsConst (), inserter(args, args.begin())); + for (auto & a : assumptions) + { + if (isOpX(a)) continue; + + ExprMap matching; + if (findMatching (subgoal, a, args, matching)) + { + ExprSet eqs; + for (auto & m : matching) + if (m.first != m.second) + eqs.insert(mk(m.first, m.second)); + cands.insert(mkNeg(conjoin(eqs, efac))); + } + } + if (cands.empty()) return false; + } + + bool changed = false; + for (auto & c : cands) + { + bool redund = false; + for (auto & a : assumptions) + { + if (isOpX(a)) continue; + if (u.implies(a, c)) + { + redund = true; + break; + } + } + if (redund) continue; + uniquePushConj(c, assumptions); + changed = true; + } + if (!changed) return false; + + if (mergeAssumptions()) + { + return true; + } + printAssumptions(); + + if (verbose) outs () << string(sp, ' ') << "current subgoal: " << *subgoal << "\n"; + if (verbose) outs () << string(sp, ' ') << "{\n"; + sp += 2; + bool res = rewriteAssumptions(subgoal); + sp -= 2; + if (verbose) outs () << string(sp, ' ') << "}\n"; + + return res; + } + + bool splitDisjAssumptions (Expr subgoal) + { + // more like a brute force splitting + set cands; + map origAssms; + for (auto it = assumptions.begin(); it != assumptions.end(); ) + { + Expr a = *it; + if (find (blockedAssms.begin(), blockedAssms.end(), *it) != blockedAssms.end()) + { + it = assumptions.erase(it); + continue; + } + if (isOpX(a)) + { + a = mk(mk(a->left(), a->right()), + mk(mkNeg(a->left()), a->last())); + } + a = simplifyBool(simplifyArr(a)); + if (isOpX(a)) + { + ExprSet dsjs; + getDisj(a, dsjs); + if (dsjs.size() < 2) continue; + cands.insert(dsjs); + origAssms[dsjs] = *it; + } + ++it; + } + + if (cands.empty()) return false; + ExprSet spl = *cands.begin(); + + if (spl.empty()) return false; + + blockedAssms.push_back(origAssms[spl]); + + int part = 1; + bool res = true; + + auto subgoalTmp = subgoal; + auto assumptionsTmp = assumptions; + auto rewriteHistoryTmp = rewriteHistory; + auto rewriteSequenceTmp = rewriteSequence; + + for (auto & s : spl) + { + if (verbose) outs () << string(sp, ' ') << "split for (part " << part << "/" + << spl.size()<< "): " << *s << "\n" << string(sp, ' ') << "{\n"; + sp += 2; + part++; + + uniquePushConj(s, assumptions); + eliminateEqualities(subgoal); + if (mergeAssumptions()) + { + assumptions = assumptionsTmp; + sp -= 2; + if (verbose) outs () << string(sp, ' ') << "}\n"; + continue; + } + for (auto it = assumptions.begin(); it != assumptions.end(); ++it) + { + if (origAssms[spl] == *it) + { + assumptions.erase(it); + break; + } + } + printAssumptions(); + + res = rewriteAssumptions(subgoal); + sp -= 2; + if (verbose) outs () << string(sp, ' ') << "}\n"; + + rewriteHistory = rewriteHistoryTmp; + rewriteSequence = rewriteSequenceTmp; + assumptions = assumptionsTmp; + subgoal = subgoalTmp; + if (!res) break; + } + + blockedAssms.pop_back(); + if (res) + { + if (verbose) outs () << string(sp, ' ') << "splitting succeeded\n"; + return true; + } + else + { + if (verbose) outs () << string(sp, ' ') << "unable to succeed\n"; + return false; + } + } + + // preprocessing of the main goal: + // - classify constructors for all ADTs that appear in the goal + // - replace all non-inductive ADTs + void unfoldGoal() + { + ExprVector goalArgs; + Expr unfoldedGoalQF = goal->last(); + bool toRebuild = false; + for (int i = 0; i < goal->arity() - 1; i++) + { + Expr type = goal->arg(i)->last(); + for (auto & a : constructors) + { + if (a->last() == type) + { + bool ind = false; + for (int i = 0; i < a->arity() - 1; i++) + { + if (a->last() == a->arg(i)) + { + ind = true; + if (indConstructors[type] != NULL && indConstructors[type] != a) + { + outs () << "Several inductive constructors are not supported\n"; + exit(1); + } + indConstructors[type] = a; + } + } + if (!ind) + { + if (baseConstructors[type] != NULL && baseConstructors[type] != a) + { + outs () << "Several base constructors are not supported\n"; + exit(1); + } + baseConstructors[type] = a; + } + } + } + if (baseConstructors[type] != NULL && indConstructors[type] == NULL) + { + toRebuild = true; + ExprVector args; + args.push_back(baseConstructors[type]); + for (int i = 1; i < baseConstructors[type]->arity() - 1; i++) + { + // TODO: make sure the name is unique + Expr s = bind::mkConst(mkTerm + ("_b_" + to_string(goalArgs.size()), efac), + baseConstructors[type]->arg(i)); + goalArgs.push_back(s->last()); + args.push_back(s); + } + Expr newApp = mknary(args); + unfoldedGoalQF = replaceAll(unfoldedGoalQF, bind::fapp(goal->arg(i)), newApp); + } + else + { + goalArgs.push_back(goal->arg(i)); + } + } + + if (toRebuild) + { + goalArgs.push_back(unfoldedGoalQF); + goal = mknary(goalArgs); + + // continue recursively, because newly introduced vars may again need unfolding + unfoldGoal(); + } + } + + // and to enable searching for RHS of assumptions + void insertSymmetricAssumption(Expr assm) + { + if (isOpX(assm)) + { + assumptions.push_back(mk(assm->right(), assm->left())); + } + else if (isOpX(assm) && isOpX(assm->last())) + { + ExprVector args; + for (int i = 0; i < assm->arity() - 1; i++) args.push_back(assm->arg(i)); + args.push_back(mk(assm->last()->right(), assm->last()->left())); + assumptions.push_back(mknary(args)); + } + } + + void printAssumptions() + { + if (!verbose) return; + outs () << string(sp, ' ') << "{\n"; + outs () << string(sp+2, ' ') << string(20, '=') << "\n"; + for (int i = 0; i < assumptions.size(); i++) + { + outs () << string(sp+2, ' ') << "| Assumptions [" << i << "]: " + << *assumptions[i] << "\n"; + } + outs () << string(sp+2, ' ') << string(20, '=') << "\n"; + outs () << string(sp, ' ') << "}\n"; + } + + bool induction(int num) + { + assert(num < goal->arity() - 1); + Expr typeDecl = goal->arg(num); + Expr type = goal->arg(num)->last(); + + Expr baseConstructor = baseConstructors[type]; + Expr indConstructor = indConstructors[type]; + + // instantiate every quantified variable (except the inductive one) in the goal + Expr goalQF = goal->last(); + for (int i = 0; i < goal->arity() - 1; i++) + { + if (i == num) continue; + // TODO: make sure the name is unique + Expr s = bind::mkConst(mkTerm ("_v_" + to_string(glob_ind), efac), goal->arg(i)->last()); + glob_ind++; + goalQF = replaceAll(goalQF, bind::fapp(goal->arg(i)), s); + } + + // prove the base case + Expr baseSubgoal = replaceAll(goalQF, typeDecl, baseConstructor); + ExprVector assumptionsTmp = assumptions; + if (isOpX(baseSubgoal)) + { + assumptions.push_back(baseSubgoal->left()); + baseSubgoal = baseSubgoal->right(); + } + + if (verbose) outs() << "\nBase case: " << *baseSubgoal << "\n{\n"; + bool baseres = simpleSMTcheck(baseSubgoal); + if (baseres) + { + if (verbose) outs() << " proven trivially\n"; + } + else + { + eliminateEqualities(baseSubgoal); + if (mergeAssumptions()) + { + if (verbose) outs() << " proven trivially\n"; + baseres = true; + assumptions = assumptionsTmp; + } + else + { + splitAssumptions(); + printAssumptions(); + + rewriteHistory.clear(); + rewriteSequence.clear(); + + baseres = rewriteAssumptions(baseSubgoal); + } + } + + if (verbose) outs () << "}\n"; + if (!baseres) baseres = doCaseSplitting(baseSubgoal); + if (!baseres) return false; + + if (!assumptionsTmp.empty()) assumptions = assumptionsTmp; + + // generate inductive hypotheses + ExprVector args; + ExprVector indHypotheses; + bool allQF = true; + for (int i = 1; i < indConstructor->arity() - 1; i++) + { + // TODO: make sure the name is unique + Expr s; + Expr singleCons = NULL; + for (auto & a : constructors) + { + if (a->last() == indConstructor->arg(i)) + { + if (singleCons != NULL) + { + singleCons = NULL; + break; + } + singleCons = a; + } + } + if (singleCons != NULL) + { + // unfold definitions, if possible + ExprVector argsCons; + for (int j = 1; j < singleCons->arity() - 1; j++) + { + argsCons.push_back(bind::mkConst(mkTerm ("_t_" + to_string(glob_ind), efac), singleCons->arg(j))); + glob_ind++; + } + s = bind::fapp (singleCons, argsCons); + } + else + { + s = bind::mkConst(mkTerm ("_t_" + to_string(glob_ind), efac), indConstructor->arg(i)); + glob_ind++; + } + + args.push_back(s); + + if (type == indConstructor->arg(i)) // type check + { + ExprVector argsIH; + for (int j = 0; j < goal->arity() - 1; j++) + { + if (j != num) argsIH.push_back(goal->arg(j)); + } + argsIH.push_back(replaceAll(goal->last(), bind::fapp(typeDecl), s)); + if (argsIH.size() == 1) + { + indHypotheses.push_back(argsIH.back()); + } + else + { + allQF = false; + indHypotheses.push_back(mknary(argsIH)); + } + } + } + for (auto & a : indHypotheses) + { + assumptions.push_back(a); + // always add symmetric IH? + insertSymmetricAssumption(a); + } + // prove the inductive step + Expr indConsApp = bind::fapp(indConstructor, args); + Expr indSubgoal = replaceAll(goalQF, bind::fapp(typeDecl), indConsApp); + + if (isOpX(indSubgoal)) + { + assumptions.push_back(indSubgoal->left()); + indSubgoal = indSubgoal->right(); + } + + eliminateEqualities(indSubgoal); + if (mergeAssumptions()) return true; + splitAssumptions(); + if (verbose) outs() << "Inductive step: " << * indSubgoal << "\n{\n"; + rewriteHistory.clear(); + rewriteSequence.clear(); + + bool indres = simpleSMTcheck(indSubgoal); + if (indres) + { + if (verbose) outs() << " proven trivially\n}\n"; + return true; + } + else + { + printAssumptions(); + indres = rewriteAssumptions(indSubgoal); + if (indres) + { + if (verbose) outs () << "}\n"; + return true; + } + } + // last resort so far + return doCaseSplitting(indSubgoal); + } + + bool doCaseSplitting(Expr goal) + { + for (int i = 0; i < assumptions.size(); i++) + { + Expr pre; + auto a = assumptions[i]; + if (isOpX(a) && isOpX(a->last())) + { + ExprSet pres; + getConj(a->last()->left(), pres); + + ExprVector varz; + for (int i = 0; i < a->arity() - 1; i++) varz.push_back(bind::fapp(a->arg(i))); + + for (auto & p : pres) + { + if (emptyIntersect(p, varz)) + { + pre = p; + break; + } + } + } + + if (isOpX(a)) pre = a->left(); + + if (pre != NULL) + { + // GF: to support if isOpX(pre) = true. + Expr d = destructDiseq(pre); + if (d != NULL) + { + assert(isOpX(d)); + if (verbose) outs () << string(sp, ' ') << "case splitting for " << *d->left() << ":\n"; + if (verbose) outs () << string(sp, ' ') << "case " << *d << "\n" << string(sp, ' ') << "{\n"; + auto assumptionsTmp = assumptions; + auto rewriteHistoryTmp = rewriteHistory; + auto rewriteSequenceTmp = rewriteSequence; + auto goalTmp = goal; + + goal = replaceAll(goal, d->left(), d->right()); + for (int j = 0; j < assumptions.size(); j++) + { + assumptions[j] = simplifyBool(replaceAll(assumptions[j], pre, mk(efac))); + assumptions[j] = replaceAll(assumptions[j], d->left(), d->right()); + } + + eliminateEqualities(goal); + mergeAssumptions(1); + sp += 2; + printAssumptions(); + if (verbose) outs () << string(sp, ' ') << "current subgoal: " << *goal << "\n"; + bool partiallyDone = rewriteAssumptions(goal); + sp -= 2; + + assumptions = assumptionsTmp; + rewriteHistory = rewriteHistoryTmp; + rewriteSequence = rewriteSequenceTmp; + goal = goalTmp; + + if (!partiallyDone) continue; + if (verbose) outs() << string(sp, ' ') << "}\n"; + + pre = mkNeg(pre); + assert(isOpX(pre) && pre->left() == d->left()); + if (verbose) outs () << string(sp, ' ') << "case " << *pre << "\n" << string(sp, ' ') << "{\n"; + + goal = replaceAll(goal, pre->left(), pre->right()); + for (int j = 0; j < assumptions.size(); j++) + { + assumptions[j] = simplifyBool(replaceAll(assumptions[j], pre, mk(efac))); + assumptions[j] = replaceAll(assumptions[j], pre->left(), pre->right()); + } + eliminateEqualities(goal); + mergeAssumptions(1); + sp += 2; + printAssumptions(); + if (verbose) outs () << string(sp, ' ') << "current subgoal: " << *goal << "\n"; + bool done = rewriteAssumptions(goal); + sp -= 2; + + assumptions = assumptionsTmp; + rewriteHistory = rewriteHistoryTmp; + rewriteSequence = rewriteSequenceTmp; + + if (done) + { + if (verbose) outs() << string(sp, ' ') << "\n}\n"; + return true; + } + } + } + } + return false; + } + + Expr destructDiseq(Expr e) + { + if (isOpX(e)) + { + e = mkNeg(e->left()); + } + if (isOp(e)) + { + Expr ty; + if (bind::isAdtConst(e->left())) + { + ty = e->left()->last()->last(); + } + else if (bind::isAdtConst(e->right())) + { + ty = e->right()->last()->last(); + } + + if (ty == NULL) return NULL; + + Expr t; + if (e->right()->last() == baseConstructors[ty]) + { + t = e->left(); + } + else if (e->left()->last() == baseConstructors[ty]) + { + t = e->right(); + } + + Expr indConstructor = indConstructors[ty]; + ExprVector args; + for (int i = 1; i < indConstructor->arity() - 1; i++) + { + // TODO: make sure the name is unique + Expr s = bind::mkConst(mkTerm ("_t_" + to_string(glob_ind), efac), indConstructor->arg(i)); + glob_ind++; + args.push_back(s); + } + Expr indConsApp = bind::fapp(indConstructor, args); + return mk(t, indConsApp); + } + + return NULL; + } + + bool solveNoind(int do_rewrite = true, int rounds = 2) + { + if (do_rewrite) + { + if (simpleSMTcheck(goal)) + { + if (verbose) outs () << "Proved (with Z3)\n"; + return true; + } + splitAssumptions(); + eliminateEqualities(goal); + auto assumptionsTmp = assumptions; + mergeAssumptions(rounds); + eliminateEqualities(goal); + printAssumptions(); + if (verbose) outs () << "=====\n" << *goal << "\n\n\n"; + if (rewriteAssumptions(goal)) + { + if (verbose) outs () << "\nProved\n"; + return true; + } + // revert and try induction: + assumptions = assumptionsTmp; + } + + ExprSet qFreeAssms; + Expr newGoal = NULL; + for (auto it = assumptions.begin(); it != assumptions.end(); ) + { + if (!isOpX(*it)) + { + if (isOpX(*it) || isOpX(*it) || isOpX(*it) || isOpX(*it) || isOpX(vars[arrVarInd], indexVar))); + else + cnjs.insert(mk(a, mk(a->right())) + arrayContent[a->left()].insert(replaceAllRev(a->right()->last(), varVersions)); + } + } + + // aux vars for indexes + for (int j = 0; j < types.size(); j++) + if (isOpX(types[j])) arrVarInd = j; + else if (types[j] == adtType) adtVarInd = j; + else if (vars[j] == indexVar) indexVarInd = j; + } + + void proc() + { + preprocessing(); + + // benchmarks with stack/queue are expected to fall into this category + if (accessTerm != NULL) guessScanBasedRelations(accessTerm); + // otherwise, "standard" relations (e.g., characteristic sets) + else guessRelations(); + + // check lemmas first + assumptions.push_back(baseRule); + assumptions.push_back(indRule); + + for (auto it = extraLemmas.begin(); it != extraLemmas.end(); ) + { + if (prove(assumptions, *it)) + { + outs () << "added lemma: "; + u.serialize_formula (*it); + ++it; + } + else + { + it = extraLemmas.erase(it); + } + } + + // extraLemmas are added to assumptions at the very end (to accelerate solving) + // however, for some cases it could be needed to use extraLemmas to prove some other extraLemmas + assumptions.insert(assumptions.end(), extraLemmas.begin(), extraLemmas.end()); + } + + bool prove (ExprVector lemmas, Expr fla, int rounds = 2, bool print = false) + { + ADTSolver sol (fla, lemmas, constructors, 7, 2, 3, 1, print); // last false is for verbosity + return isOpX(fla) ? sol.solve() : sol.solveNoind(rounds); + } + + Expr generalizeInductiveDef(Expr rel, ExprVector& argsInd, ExprVector& argsIndNested, ExprSet& cnjs) + { + Expr all = mkTerm (mpz_class (nonstateVars.size()), efac); + ExprSet pre; + + // nonstateVars computed by the recursive traversal of indCon + // so it is safe to look at them here instead of looking at indCon again + for (int i = 0; i < nonstateVars.size(); i++) + { + Expr cur = mkTerm (mpz_class (i + 1), efac); + Expr a = mk(nonstateVars[i], mk(argsInd[arrVarInd], newDecrement))); + cnjs.insert(disjoin(pre, efac)); + argsInd[adtVarInd] = indCon; + argsIndNested[indexVarInd] = newDecrement; + } + cnjs.insert(bind::fapp (rel, argsIndNested)); + return mk(bind::fapp (rel, argsInd), conjoin(cnjs, efac)); + } + + void printSol() + { + u.serialize_formula (baseRule); + u.serialize_formula (indRule); + } + }; +} + +#endif \ No newline at end of file From 47bdeecbd56f240c26c8a5c3522807d337de0b77 Mon Sep 17 00:00:00 2001 From: BritikovKI Date: Tue, 22 Aug 2023 18:31:19 +0200 Subject: [PATCH 190/236] ADT-CHC: quickfix in progress --- {tools => include}/adt/ADTSolver.hpp | 0 {tools => include}/adt/CHCSolver.hpp | 0 {tools => include}/adt/SimSynt.hpp | 0 include/ufo/Expr.hpp | 10 +++++----- {include => tools}/adt/Adt.cpp | 0 {include => tools}/adt/CHC.cpp | 0 {include => tools}/adt/CMakeLists.txt | 0 7 files changed, 5 insertions(+), 5 deletions(-) rename {tools => include}/adt/ADTSolver.hpp (100%) rename {tools => include}/adt/CHCSolver.hpp (100%) rename {tools => include}/adt/SimSynt.hpp (100%) rename {include => tools}/adt/Adt.cpp (100%) rename {include => tools}/adt/CHC.cpp (100%) rename {include => tools}/adt/CMakeLists.txt (100%) diff --git a/tools/adt/ADTSolver.hpp b/include/adt/ADTSolver.hpp similarity index 100% rename from tools/adt/ADTSolver.hpp rename to include/adt/ADTSolver.hpp diff --git a/tools/adt/CHCSolver.hpp b/include/adt/CHCSolver.hpp similarity index 100% rename from tools/adt/CHCSolver.hpp rename to include/adt/CHCSolver.hpp diff --git a/tools/adt/SimSynt.hpp b/include/adt/SimSynt.hpp similarity index 100% rename from tools/adt/SimSynt.hpp rename to include/adt/SimSynt.hpp diff --git a/include/ufo/Expr.hpp b/include/ufo/Expr.hpp index d13a0f665..b79c1df21 100644 --- a/include/ufo/Expr.hpp +++ b/include/ufo/Expr.hpp @@ -3049,11 +3049,11 @@ namespace expr } // pairwise replacing - inline Expr replaceAll (Expr exp, ExprMap& m) - { - RAVALLM rav(m); - return dagVisit (rav, exp); - } +// inline Expr replaceAll (Expr exp, ExprMap& m) +// { +// RAVALLM rav(m); +// return dagVisit (rav, exp); +// } /** Replace all occurrences of s by t while simplifying the result */ inline Expr replaceAllSimplify (Expr exp, Expr s, Expr t) diff --git a/include/adt/Adt.cpp b/tools/adt/Adt.cpp similarity index 100% rename from include/adt/Adt.cpp rename to tools/adt/Adt.cpp diff --git a/include/adt/CHC.cpp b/tools/adt/CHC.cpp similarity index 100% rename from include/adt/CHC.cpp rename to tools/adt/CHC.cpp diff --git a/include/adt/CMakeLists.txt b/tools/adt/CMakeLists.txt similarity index 100% rename from include/adt/CMakeLists.txt rename to tools/adt/CMakeLists.txt From 9f7472ead009002dbc45444e2f7509fe17047743 Mon Sep 17 00:00:00 2001 From: BritikovKI Date: Wed, 23 Aug 2023 16:53:36 +0200 Subject: [PATCH 191/236] ADT-CHC: Fixes for compilation --- include/deep/HornNonlin.hpp | 2 +- include/ufo/Expr.hpp | 2 +- include/ufo/Smt/ZExprConverter.hpp | 20 ++++++++------------ 3 files changed, 10 insertions(+), 14 deletions(-) diff --git a/include/deep/HornNonlin.hpp b/include/deep/HornNonlin.hpp index 08da47a63..a933b2312 100755 --- a/include/deep/HornNonlin.hpp +++ b/include/deep/HornNonlin.hpp @@ -349,7 +349,7 @@ namespace ufo else prune(); } - void parse(string smt, bool removeQuery = false) + void parse(string smt_file, bool removeQuery = false) { Expr e = z3_from_smtlib_file (m_z3, smt_file); for (auto & a : m_z3.getAdtConstructors()) { diff --git a/include/ufo/Expr.hpp b/include/ufo/Expr.hpp index b79c1df21..a937ca403 100644 --- a/include/ufo/Expr.hpp +++ b/include/ufo/Expr.hpp @@ -3042,7 +3042,7 @@ namespace expr return exp; } if (m.empty()) return exp; - RAVALLM rav(&m); + RAVALLM rav(m); Expr tmp = dagVisit (rav, exp); if (tmp == exp || !rec) return tmp; else return replaceAll(tmp, m, rec, iter+1); diff --git a/include/ufo/Smt/ZExprConverter.hpp b/include/ufo/Smt/ZExprConverter.hpp index 50097e62d..17f9d2b98 100644 --- a/include/ufo/Smt/ZExprConverter.hpp +++ b/include/ufo/Smt/ZExprConverter.hpp @@ -642,13 +642,11 @@ namespace ufo for (unsigned p = 0; p < Z3_get_domain_size (ctx, fdecl); ++p) { Z3_sort sort = Z3_get_domain (ctx, fdecl, p); - type.push_back - (unmarshal (z3::ast (ctx, Z3_sort_to_ast (ctx, sort)), + type.push_back(unmarshal (z3::ast (ctx, Z3_sort_to_ast (ctx, sort)), efac, cache, seen, adts_seen, adts, accessors)); } - type.push_back - (unmarshal (z3::ast (ctx, + type.push_back(unmarshal (z3::ast (ctx, Z3_sort_to_ast (ctx, Z3_get_range (ctx, fdecl))), efac, cache, seen, adts_seen, adts, accessors)); @@ -688,19 +686,17 @@ namespace ufo if (dkind == Z3_OP_NOT) { assert (Z3_get_app_num_args (ctx, app) == 1); - return mk (unmarshal - (z3::ast (ctx, Z3_get_app_arg (ctx, app, 0)), + return mk (unmarshal (z3::ast (ctx, Z3_get_app_arg (ctx, app, 0)), efac, cache, seen, adts_seen, adts, accessors)); } if (dkind == Z3_OP_UMINUS) - return mk (unmarshal - (z3::ast (ctx, Z3_get_app_arg (ctx, app, 0)), + return mk (unmarshal (z3::ast (ctx, Z3_get_app_arg (ctx, app, 0)), efac, cache, seen, adts_seen, adts, accessors)); // XXX ignore to_real and to_int operators if (dkind == Z3_OP_TO_REAL || dkind == Z3_OP_TO_INT) - return unmarshal (z3::ast (ctx, Z3_get_app_arg (ctx, app, 0)), - efac, cache, seen, adts_seen, adts, accessors)); + return unmarshal(z3::ast (ctx, Z3_get_app_arg (ctx, app, 0)), + efac, cache, seen, adts_seen, adts, accessors); if (dkind == Z3_OP_BNOT) return mk (unmarshal (z3::ast (ctx, Z3_get_app_arg (ctx, app, 0)), @@ -719,7 +715,7 @@ namespace ufo Expr sort = bv::bvsort (Z3_get_bv_sort_size (ctx, Z3_get_sort (ctx, z)), efac); Expr arg = unmarshal (z3::ast (ctx, Z3_get_app_arg (ctx, app, 0)), - efac, cache, seen, adts_seen, adts, accessors)); + efac, cache, seen, adts_seen, adts, accessors); switch (dkind) { case Z3_OP_SIGN_EXT: @@ -733,7 +729,7 @@ namespace ufo if (dkind == Z3_OP_EXTRACT) { Expr arg = unmarshal (z3::ast (ctx, Z3_get_app_arg (ctx, app, 0)), - efac, cache, seen, adts_seen, adts, accessors)); + efac, cache, seen, adts_seen, adts, accessors); Z3_func_decl d = Z3_get_app_decl (ctx, app); unsigned high = Z3_get_decl_int_parameter (ctx, d, 0); From 5cf545ea8ef0ef9752fc00c82a3e84572b3929ff Mon Sep 17 00:00:00 2001 From: BritikovKI Date: Wed, 23 Aug 2023 17:02:01 +0200 Subject: [PATCH 192/236] ADT-CHC: Fixes for compilation --- include/deep/HornNonlin.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/include/deep/HornNonlin.hpp b/include/deep/HornNonlin.hpp index a933b2312..f78f8201f 100755 --- a/include/deep/HornNonlin.hpp +++ b/include/deep/HornNonlin.hpp @@ -365,12 +365,12 @@ namespace ufo // ZFixedPoint &fp = *m_fp; // fp.loadFPfromFile(smt); - for (auto r1: cnjs) + for (auto r: cnjs) { chcs.push_back(HornRuleExt()); HornRuleExt& hr = chcs.back(); - Expr r = normalize(r1, hr); + normalize(r, hr); if (r == NULL) { chcs.pop_back(); From 1a201ebfecdc6be50d89bc894cf972f443064b44 Mon Sep 17 00:00:00 2001 From: BritikovKI Date: Thu, 24 Aug 2023 11:45:07 +0200 Subject: [PATCH 193/236] ADT-CHC: merged tg-nonlin with adt-chc to building condition --- include/ae/ExprSimpl.hpp | 579 +++++++++++++++++++++++++++++++++++- include/deep/HornNonlin.hpp | 6 +- 2 files changed, 574 insertions(+), 11 deletions(-) diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index 7c9f6e516..b3f7708a8 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -721,6 +721,13 @@ namespace ufo if (find(v.begin(), v.end(), e) == v.end()) v.push_back(e); } + static void uniquePushConj(Expr e, ExprVector& v) + { + ExprSet cnjs; + getConj(e, cnjs); + for (auto & g : cnjs) unique_push_back(g, v); + } + template struct RW { std::shared_ptr _r; @@ -1364,7 +1371,11 @@ namespace ufo struct SimplifyArrExpr { - SimplifyArrExpr () {}; + SimplifyArrExpr (ExprVector& _forallVars, ExprMap& _repls) : + forallVars(_forallVars), repls(_repls) {}; + + ExprVector& forallVars; + ExprMap& repls; Expr operator() (Expr exp) { @@ -1425,13 +1436,122 @@ namespace ufo } }; + static Expr simplifyExists (Expr exp); + + struct SimplifyExists + { + ExprFactory &efac; + SimplifyExists (ExprFactory& _efac): efac(_efac){ }; + + Expr operator() (Expr exp) + { + if (isOpX(exp)) + { + ExprVector args; + for (int i = 0; i < exp->arity() - 1; i++) + args.push_back(fapp(exp->arg(i))); + + Expr qFree = exp->last(); + + if (isOpX(qFree)) + { + ExprSet dsj; + getDisj(qFree, dsj); + ExprSet q; + ExprSet newDsj; + for (auto & c : dsj) + if (emptyIntersect(c, args)) newDsj.insert(c); + else q.insert(c); + + for (auto & a : q) + newDsj.insert(simplifyExists(replaceAll(exp, qFree, a))); + + return disjoin (newDsj, efac); + } + + // simplify first + ExprSet cnj; + getConj(qFree, cnj); + for (auto & c : cnj) + { + if (isOpX(c)) + { + if (find (args.begin(), args.end(), c->right()) == args.end() && + find (args.begin(), args.end(), c->left()) != args.end()) + qFree = replaceAll(qFree, c->left(), c->right()); + if (find (args.begin(), args.end(), c->left()) == args.end() && + find (args.begin(), args.end(), c->right()) != args.end()) + qFree = replaceAll(qFree, c->right(), c->left()); + } + } + qFree = simplifyBool(qFree); + + if (isOpX(qFree)) return qFree; + + // find a subset of conjuncts independent on quantifiers + cnj.clear(); + getConj(qFree, cnj); + ExprSet depCnj; + ExprSet indepCnj; + + for (auto & c : cnj) + if (emptyIntersect(c, args)) indepCnj.insert(c); + else depCnj.insert(c); + + if (indepCnj.empty()) return exp; + + indepCnj.insert(simplifyExists(replaceAll(exp, exp->last(), conjoin(depCnj, efac)))); + return conjoin (indepCnj, efac); + } + return exp; + } + }; + + inline static Expr simplifyExists (Expr exp) + { + RW rw(new SimplifyExists(exp->getFactory())); + return dagVisit (rw, exp); + } + + + static Expr createQuantifiedFormulaRestr(Expr def, ExprVector& vars, bool forall); inline static Expr simplifyArr (Expr exp) { - if (containsOp(exp) || containsOp(exp)) return exp; - RW rw(new SimplifyArrExpr()); - return dagVisit (rw, exp); + ExprVector forallVars; + ExprMap repls; + bool origForall = false; + if (isOpX(exp)) + { + origForall = true; + for (int i = 0; i < exp->arity() - 1; i++) + forallVars.push_back(fapp(exp->arg(i))); + } + RW rw(new SimplifyArrExpr(forallVars, repls)); + Expr tmp = dagVisit (rw, exp); + + for (auto it = forallVars.begin(); it != forallVars.end(); ) + { + if (repls[*it] != NULL) it = forallVars.erase(it); + else ++it; + } + + tmp = replaceAll(tmp, repls); + if (forallVars.empty()) + { + if (origForall) tmp = tmp->last(); + } + else tmp = createQuantifiedFormulaRestr (tmp->last(), forallVars, true); + + return tmp; } +// inline static Expr simplifyArr (Expr exp) +// { +// if (containsOp(exp) || containsOp(exp)) return exp; +// RW rw(new SimplifyArrExpr()); +// return dagVisit (rw, exp); +// } + inline static Expr simplifyArithm (Expr exp, bool keepRedundandDisj = false, bool keepRedundandConj = false) { RW rw(new @@ -2027,11 +2147,24 @@ namespace ufo return conjoin(conjs, a->getFactory()); } + inline void intersect(ExprVector& a, ExprVector& b, ExprSet& c){ + for (auto &var: a) + if (find(b.begin(), b.end(), var) != b.end()) + c.insert(var); + } + + inline void intersect(Expr a, Expr b, ExprSet& c){ + ExprVector av; + filter (a, IsConst (), inserter(av, av.begin())); + ExprVector bv; + filter (b, IsConst (), inserter(bv, bv.begin())); + intersect(av, bv, c); + } + inline int intersectSize(ExprVector& a, ExprVector& b){ - ExprSet c; - for (auto &var: a) - if (find(b.begin(), b.end(), var) != b.end()) c.insert(var); - return c.size(); + ExprSet c; + intersect(a, b, c); + return c.size(); } Expr projectITE(Expr ite, Expr var) @@ -2960,6 +3093,40 @@ namespace ufo return dagVisit (a, unfoldITE(simplifyArr(exp))); } + + inline static void getCounters (Expr a, ExprSet &cntrs) + { + if (isOpX(a)){ + sels.insert(a); + } else { + for (unsigned i = 0; i < a->arity(); i++) + getSelects(a->arg(i), sels); + } + } + + inline static void getStores (Expr a, ExprSet &st) + { + if (isOpX(a)){ + st.insert(a); + getStores(a->left(), st); + } else { + for (unsigned i = 0; i < a->arity(); i++) + getStores(a->arg(i), st); + } + } + // very simple check if tautology (SMT-based check is expensive) inline static bool isTautology(Expr fla) { @@ -4233,6 +4400,102 @@ namespace ufo return exp; } + inline static bool findMatching(Expr pattern, Expr exp, ExprVector& vars, ExprMap& matching) + { + if (pattern == exp && (isOpX(pattern) || isOpX(pattern) || + isOpX(exp) || isOpX(exp))) return true; + + // currently, workaround: + if (isOpX(pattern) && !isOpX(exp)) return false; + if (isOpX(pattern) && !isOpX(exp)) return false; + if (isOpX(exp) && !isOpX(pattern)) return false; + if (isOpX(exp) && !isOpX(pattern)) return false; + + if (!isOpX(exp) && !isOpX(exp) && + !isOpX(pattern) && !isOpX(pattern)) + if (typeOf(pattern) != typeOf(exp)) + { + return false; + } + + if (pattern->arity() == 1 && find(vars.begin(), vars.end(), pattern) != vars.end()) + { + if (matching[pattern] != NULL && matching[pattern] != exp) + { + return false; + } + else + { + matching[pattern] = exp; + return true; + } + } + + if ((isOpX(exp) && isOpX(pattern)) || + (isOpX(exp) && isOpX(pattern)) || + (isOpX(exp) && isOpX(pattern)) || + (isOpX(exp) && isOpX(pattern)) || + (isOpX(exp) && isOpX(pattern)) || + (isOpX(exp) && isOpX(pattern)) || + (isOpX(exp) && isOpX(pattern)) || + (isOpX(exp) && isOpX(pattern)) || + (isOpX(exp) && isOpX(pattern)) || + (isOpX(exp) && isOpX(pattern)) || + (isOpX(exp) && isOpX(pattern)) || + (isOpX(exp) && isOpX(pattern)) || + (isOpX(exp) && isOpX(pattern)) || + (isOpX(exp) && isOpX(pattern)) || + (isOpX(exp) && isOpX(pattern)) || + (isOpX(exp) && isOpX(pattern)) || + (isOpX(pattern)) || + (isOpX(exp) && isOpX(pattern)) || + (isOpX(exp) && isOpX(pattern)) || + (isOpX(exp) && isOpX(pattern) && + pattern->left() == exp->left())) + { + for (int i = 0; i < pattern->arity(); i++) + { + if (!findMatching(pattern->arg(i), exp->arg(i), vars, matching)) + { + return false; + } + } + return true; + } + return false; + } + + struct SubexprMatcher : public std::unary_function + { + bool found; + ExprVector& vars; + std::set& matchingSet; + Expr pattern; + SubexprMatcher (Expr _p, ExprVector& _v, std::set& _m) : + found(false), pattern(_p), vars(_v), matchingSet(_m) {} + + VisitAction operator() (Expr exp) + { + ExprMap matching; + if ((isOpX(exp) || isOp(exp) || + isOp(exp) || isOpX(m, getVar("this", fun)); // hack for now: could be something else instead of `this` + testfile << u.getModel(var); + if (i < b.second.size() - 1) + testfile << ", "; } } testfile << ")\n"; From 17ffa0d7c79907e586d5b120376121de13fda90e Mon Sep 17 00:00:00 2001 From: Grigory Fedyukovich Date: Thu, 4 Jan 2024 14:54:45 -0500 Subject: [PATCH 215/236] further processing of array models --- include/ae/ExprSimpl.hpp | 8493 ++++++++++++++---------------- include/deep/HornNonlin.hpp | 2 +- include/deep/NonlinCHCsolver.hpp | 32 +- 3 files changed, 4075 insertions(+), 4452 deletions(-) diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index b3f7708a8..51bafe899 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -1,7 +1,7 @@ #ifndef EXPRSIMPL__HPP__ #define EXPRSIMPL__HPP__ #include -// TODO: Haven't parsed to the end, maybe additional time needs to be spent here + #include "ufo/Smt/EZ3.hh" using namespace std; @@ -11,639 +11,658 @@ using namespace boost::multiprecision; namespace ufo { - template static Expr conjoin(Range& conjs, ExprFactory &efac){ - return - (conjs.size() == 0) ? mk(efac) : - (conjs.size() == 1) ? *conjs.begin() : - mknary(conjs); - } + template static int getVarIndex(T e, R& vec) + { + int i = 0; + for (auto v = vec.begin(); v != vec.end(); ++v, ++i) + if (*v == e) return i; + return -1; + } - template static Expr disjoin(Range& disjs, ExprFactory &efac){ - return - (disjs.size() == 0) ? mk(efac) : - (disjs.size() == 1) ? *disjs.begin() : - mknary(disjs); - } + template static bool contains(R& v, T e) { + return find(v.begin(), v.end(), e) != v.end(); + } - template static Expr mkplus(Range& terms, ExprFactory &efac){ - return - (terms.size() == 0) ? mkMPZ (0, efac) : - (terms.size() == 1) ? *terms.begin() : - mknary(terms); - } + template static void unique_push_back(T e, vector& v) { + if (!contains(v, e)) v.push_back(e); + } - template static Expr mkmult(Range& terms, ExprFactory &efac){ - return - (terms.size() == 0) ? mkMPZ (1, efac) : - (terms.size() == 1) ? *terms.begin() : - mknary(terms); - } + template static Expr conjoin(Range& conjs, ExprFactory &efac){ + return + (conjs.size() == 0) ? mk(efac) : + (conjs.size() == 1) ? *conjs.begin() : + mknary(conjs); + } - template static bool emptyIntersect(Range1& av, Range2& bv){ - for (auto &var1: av){ - for (auto &var2: bv) if (var1 == var2) return false; - } - return true; - } + template static Expr disjoin(Range& disjs, ExprFactory &efac){ + return + (disjs.size() == 0) ? mk(efac) : + (disjs.size() == 1) ? *disjs.begin() : + mknary(disjs); + } - template static bool emptyIntersect(Expr a, Range& bv){ - ExprVector av; - filter (a, IsConst (), inserter(av, av.begin())); - return emptyIntersect(av, bv); - } + template static Expr mkplus(Range& terms, ExprFactory &efac){ + return + (terms.size() == 0) ? mkMPZ (0, efac) : + (terms.size() == 1) ? *terms.begin() : + mknary(terms); + } - inline static bool emptyIntersect(Expr a, Expr b){ - ExprVector bv; - filter (b, IsConst (), inserter(bv, bv.begin())); - return emptyIntersect(a, bv); - } + template static Expr mkmult(Range& terms, ExprFactory &efac){ + return + (terms.size() == 0) ? mkMPZ (1, efac) : + (terms.size() == 1) ? *terms.begin() : + mknary(terms); + } - // if at the end disjs is empty, then a == true - inline static void getConj (Expr a, ExprSet &conjs) - { - if (isOpX(a)) return; - if (isOpX(a)){ - conjs.clear(); - conjs.insert(a); - return; - } else if (isOpX(a)){ - for (unsigned i = 0; i < a->arity(); i++){ - getConj(a->arg(i), conjs); - } - } else { - conjs.insert(a); - } + template static bool emptyIntersect(Range1& av, Range2& bv){ + for (auto &var1: av){ + for (auto &var2: bv) if (var1 == var2) return false; } + return true; + } - // if at the end disjs is empty, then a == false - inline static void getDisj (Expr a, ExprSet &disjs) - { - if (isOpX(a)) return; - if (isOpX(a)){ - disjs.clear(); - disjs.insert(a); - return; - } else if (isOpX(a)){ - for (unsigned i = 0; i < a->arity(); i++){ - getDisj(a->arg(i), disjs); - } - } else { - disjs.insert(a); - } - } + template static bool emptyIntersect(Expr a, Range& bv){ + ExprVector av; + filter (a, IsConst (), inserter(av, av.begin())); + return emptyIntersect(av, bv); + } - // rewrites v1 to contain v1 \ v2 - template static void minusSets(ExprSet& v1, Range& v2){ - for (auto it = v1.begin(); it != v1.end(); ){ - if (find(v2.begin(), v2.end(), *it) != v2.end()) - it = v1.erase(it); - else ++it; - } - } + inline static bool emptyIntersect(Expr a, Expr b){ + ExprVector bv; + filter (b, IsConst (), inserter(bv, bv.begin())); + return emptyIntersect(a, bv); + } - // rewrites v1 to contain only v2 - template static void keepOnly(Range1& v1, Range2& v2){ - for (auto it = v1.begin(); it != v1.end(); ){ - if (find(v2.begin(), v2.end(), *it) == v2.end()) - it = v1.erase(it); - else ++it; - } + // if at the end disjs is empty, then a == true + inline static void getConj (Expr a, ExprSet &conjs) + { + if (isOpX(a)) return; + if (isOpX(a)){ + conjs.clear(); + conjs.insert(a); + return; + } else if (isOpX(a)){ + for (unsigned i = 0; i < a->arity(); i++){ + getConj(a->arg(i), conjs); + } + } else { + conjs.insert(a); } + } - // is v1 a subset of v2? - template static bool isSubset(Range1& v1, Range2& v2){ - for (auto it = v1.begin(); it != v1.end(); ++it) - if (find(v2.begin(), v2.end(), *it) == v2.end()) - return false; - return true; + // if at the end disjs is empty, then a == false + inline static void getDisj (Expr a, ExprSet &disjs) + { + if (isOpX(a)) return; + if (isOpX(a)){ + disjs.clear(); + disjs.insert(a); + return; + } else if (isOpX(a)){ + for (unsigned i = 0; i < a->arity(); i++){ + getDisj(a->arg(i), disjs); + } + } else { + disjs.insert(a); } + } - inline static void distribDisjoin(ExprSet& dsj1, ExprSet& dsj2, ExprSet& comm) - { - for (auto it1 = dsj1.begin(); it1 != dsj1.end(); ) - { - bool found = false; - for (auto it2 = dsj2.begin(); it2 != dsj2.end(); ) - { - if (*it1 == *it2) - { - found = true; - comm.insert(*it1); - it1 = dsj1.erase(it1); - it2 = dsj2.erase(it2); - break; - } - else ++it2; - } - if (!found) ++it1; - } + // rewrites v1 to contain v1 \ v2 + template static void minusSets (Range1& v1, Range2& v2){ + for (auto it = v1.begin(); it != v1.end(); ){ + if (find(v2.begin(), v2.end(), *it) != v2.end()) + it = v1.erase(it); + else ++it; } + } - inline static Expr distribDisjoin(Expr d1, Expr d2) - { - auto & efac = d1->getFactory(); - ExprSet dsj1, dsj2, comm; - getConj(d1, dsj1); - getConj(d2, dsj2); - distribDisjoin (dsj1, dsj2, comm); - comm.insert(mk(conjoin(dsj1, efac), conjoin(dsj2, efac))); - return conjoin(comm, d1->getFactory()); + // rewrites v1 to contain only v2 + template static void keepOnly(Range1& v1, Range2& v2){ + for (auto it = v1.begin(); it != v1.end(); ){ + if (find(v2.begin(), v2.end(), *it) == v2.end()) + it = v1.erase(it); + else ++it; } + } - template static Expr distribDisjoin(T& d, ExprFactory &efac) - { - if (d.size() <= 1) return disjoin(d, efac); - - ExprSet comm; - vector dsjs; - dsjs.push_back(ExprSet()); - auto it = d.begin(); - getConj(*it, dsjs.back()); - comm = dsjs.back(); - for (it = std::next(it); it != d.end(); ++it) - { - ExprSet updComm, tmp; - dsjs.push_back(ExprSet()); - getConj(*it, dsjs.back()); - tmp = dsjs.back(); - distribDisjoin (comm, tmp, updComm); - comm = updComm; - } + // is v1 a subset of v2? + template static bool isSubset(Range1& v1, Range2& v2){ + for (auto it = v1.begin(); it != v1.end(); ++it) + if (find(v2.begin(), v2.end(), *it) == v2.end()) + return false; + return true; + } - ExprSet toDisj; - for (auto a : dsjs) + inline static void distribDisjoin(ExprSet& dsj1, ExprSet& dsj2, ExprSet& comm) + { + for (auto it1 = dsj1.begin(); it1 != dsj1.end(); ) + { + bool found = false; + for (auto it2 = dsj2.begin(); it2 != dsj2.end(); ) + { + if (*it1 == *it2) { - minusSets(a, comm); - toDisj.insert(conjoin(a, efac)); + found = true; + comm.insert(*it1); + it1 = dsj1.erase(it1); + it2 = dsj2.erase(it2); + break; } - comm.insert(disjoin(toDisj, efac)); - return conjoin(comm, efac); + else ++it2; + } + if (!found) ++it1; } + } - inline static void getArrInds (Expr a, ExprSet &inds) - { - if ((isOpX(a->right()) && !containsOp(a->right())) - inds.insert(a->right()); + inline static Expr distribDisjoin(Expr d1, Expr d2) + { + auto & efac = d1->getFactory(); + ExprSet dsj1, dsj2, comm; + getConj(d1, dsj1); + getConj(d2, dsj2); + distribDisjoin (dsj1, dsj2, comm); + comm.insert(mk(conjoin(dsj1, efac), conjoin(dsj2, efac))); + return conjoin(comm, d1->getFactory()); + } - for (unsigned i = 0; i < a->arity(); i++) - getArrInds(a->arg(i), inds); - } + template static Expr distribDisjoin(T& d, ExprFactory &efac) + { + if (d.size() <= 1) return disjoin(d, efac); - inline static void getITEs (Expr a, ExprVector &ites) + ExprSet comm; + vector dsjs; + dsjs.push_back(ExprSet()); + auto it = d.begin(); + getConj(*it, dsjs.back()); + comm = dsjs.back(); + for (it = std::next(it); it != d.end(); ++it) { - if (isOpX(a)){ - ites.push_back(a); - } else { - for (unsigned i = 0; i < a->arity(); i++) - getITEs(a->arg(i), ites); - } + ExprSet updComm, tmp; + dsjs.push_back(ExprSet()); + getConj(*it, dsjs.back()); + tmp = dsjs.back(); + distribDisjoin (comm, tmp, updComm); + comm = updComm; } - inline static bool isBoolean(Expr a) + ExprSet toDisj; + for (auto a : dsjs) { - Expr t = typeOf(a); - if (t == NULL) return false; - return isOpX(t); + minusSets(a, comm); + toDisj.insert(conjoin(a, efac)); } + comm.insert(disjoin(toDisj, efac)); + return conjoin(comm, efac); + } - inline static bool isNumeric(Expr a) + Expr projectVar(Expr fla, Expr var) + { + ExprSet cnjs; + getConj(fla, cnjs); + for (auto c = cnjs.begin(); c != cnjs.end(); ) { - Expr t = typeOf(a); - if (t == NULL) return false; - return isOpX(t); + if (contains(*c, var)) ++c; + else c = cnjs.erase(c); } + return conjoin(cnjs, fla->getFactory()); + } - inline static bool isReal(Expr a) - { - Expr t = typeOf(a); - if (t == NULL) return false; - return isOpX(t); - } + inline static void getArrInds (Expr a, ExprSet &inds) + { + if ((isOpX(a->right()) && !containsOp(a->right())) + inds.insert(a->right()); - inline static bool isArray(Expr a) - { - Expr t = typeOf(a); - if (t == NULL) return false; - return isOpX(t); - } + for (unsigned i = 0; i < a->arity(); i++) + getArrInds(a->arg(i), inds); + } - inline static bool isNumericEq(Expr a) - { - return isOpX(a) && isNumeric(a->left()); + inline static void getITEs (Expr a, ExprVector &ites) + { + if (isOpX(a)){ + ites.push_back(a); + } else { + for (unsigned i = 0; i < a->arity(); i++) + getITEs(a->arg(i), ites); } + } - inline static bool isNumericConst(Expr e) - { - return isOpX(e) || isOpX(e); - } + inline static bool isBoolean(Expr a) + { + Expr t = typeOf(a); + if (t == NULL) return false; + return isOpX(t); + } - inline static unsigned containsNum (Expr a, Expr b) - { - if (a == b) return 1; + inline static bool isNumeric(Expr a) + { + Expr t = typeOf(a); + if (t == NULL) return false; + return isOpX(t); + } - unsigned res = 0; - for (unsigned i = 0; i < a->arity(); i++) - res = res + containsNum(a->arg(i), b); - return res; - } + inline static bool isReal(Expr a) + { + Expr t = typeOf(a); + if (t == NULL) return false; + return isOpX(t); + } - inline static void findComplexNumerics (Expr a, ExprSet &terms) - { - if (isIntConst(a) || isOpX(a)) return; - if (isNumeric(a) && !isOpX(a)) - { - bool hasNoNumeric = false; - for (unsigned i = 0; i < a->arity(); i++) - if (!isNumeric(a->arg(i))) hasNoNumeric = true; - if (hasNoNumeric) - { - terms.insert(a); - return; - } - } - for (unsigned i = 0; i < a->arity(); i++) - findComplexNumerics(a->arg(i), terms); - } + inline static bool isArray(Expr a) + { + Expr t = typeOf(a); + if (t == NULL) return false; + return isOpX(t); + } + + inline static bool isNumericEq(Expr a) + { + return isOpX(a) && isNumeric(a->left()); + } + + inline static bool isNumericConst(Expr e) + { + return isOpX(e) || isOpX(e); + } + + inline static bool isValue(Expr a) + { + return (isNumericConst(a) || isOpX(a) || isOpX(a)); + } + + inline static unsigned containsNum (Expr a, Expr b) + { + if (a == b) return 1; + + unsigned res = 0; + for (unsigned i = 0; i < a->arity(); i++) + res = res + containsNum(a->arg(i), b); + return res; + } - inline static void getArrIneqs (Expr a, ExprSet &ineqs) + inline static void findComplexNumerics (Expr a, ExprSet &terms) + { + if (isIntConst(a) || isOpX(a) || isOp(a)) return; + if (isNumeric(a) && !isOpX(a)) { - if (isOp(a) && containsOp(a)){ + if (isOpX(a) && isNumeric(a->left())) + { + ineqs.insert(mk(a->left(), a->right())); + ineqs.insert(mk(a->left(), a->right())); + } + else + { + ineqs.insert(a); + } + } else { + for (unsigned i = 0; i < a->arity(); i++) + getArrIneqs(a->arg(i), ineqs); } + } - inline static void getMultOps (Expr a, ExprVector &ops) - { - if (isOpX(a)){ - for (unsigned i = 0; i < a->arity(); i++){ - getMultOps(a->arg(i), ops); - } - } else if (isOpX(a) && isNumeric(a->left())){ - ops.push_back(mkMPZ ((-1), a->getFactory())); - ops.push_back(a->left()); - } else { - ops.push_back(a); - } + inline static void getMultOps (Expr a, ExprVector &ops) + { + if (isOpX(a)){ + for (unsigned i = 0; i < a->arity(); i++){ + getMultOps(a->arg(i), ops); + } + } else if (isOpX(a) && isNumeric(a->left())){ + ops.push_back(mkMPZ ((-1), a->getFactory())); + ops.push_back(a->left()); + } else { + ops.push_back(a); } + } - /** + /** * Represent Expr as multiplication */ - inline static Expr mult(Expr e){ - if (isOpX(e)){ - return e; - } else { - return mk(mkMPZ (1, e->getFactory()), e); - } + inline static Expr mult(Expr e){ + if (isOpX(e)){ + return e; + } else { + return mk(mkMPZ (1, e->getFactory()), e); } + } - /** + /** * Represent Zero as multiplication */ - inline static Expr multZero(Expr e, Expr multiplier){ - if (lexical_cast(e) == "0") - return mk(multiplier, e); - else return e; - } + inline static Expr multZero(Expr e, Expr multiplier){ + if (lexical_cast(e) == "0") + return mk(multiplier, e); + else return e; + } - /** + /** * Rewrites distributivity rule: * a*b + a*c -> a*(b + c) * (assume, all common multipliers might be only in the first place) */ - inline static Expr exprDistributor(Expr e){ - if (e->arity () == 0) return e; - Expr multiplier = mult(e->arg(0)); - ExprSet newE; - newE.insert(multiplier->right()); - multiplier = multiplier->left(); - - for (unsigned i = 1; i < e->arity (); i++){ - Expr a = mult(e->arg(i)); - if (isOpX(a)){ - if (a->left() == multiplier){ - newE.insert(a->right()); - } else { - return e; - } - } else { - return e; - } - } - if (isOpX(e)){ - return mk(multiplier, mknary(newE)); + inline static Expr exprDistributor(Expr e){ + if (e->arity () == 0) return e; + Expr multiplier = mult(e->arg(0)); + ExprSet newE; + newE.insert(multiplier->right()); + multiplier = multiplier->left(); + + for (unsigned i = 1; i < e->arity (); i++){ + Expr a = mult(e->arg(i)); + if (isOpX(a)){ + if (a->left() == multiplier){ + newE.insert(a->right()); + } else { + return e; } + } else { return e; + } + } + if (isOpX(e)){ + return mk(multiplier, mknary(newE)); } + return e; + } - /** + /** * Self explanatory */ - inline static bool isConstOrItsAdditiveInverse(Expr e, Expr var){ - if (e == var) { - return true; - } - if (isOpX(e)){ - if (lexical_cast(e->left()) == "-1" && e->right() == var){ - return true; - } - } - - return false; + inline static bool isConstOrItsAdditiveInverse(Expr e, Expr var){ + if (e == var) { + return true; } + if (isOpX(e)){ + if (lexical_cast(e->left()) == "-1" && e->right() == var){ + return true; + } + } + + return false; + } - static void getAddTerm (Expr a, ExprVector &terms); + static void getAddTerm (Expr a, ExprVector &terms); - /** + /** * Self explanatory */ - inline static Expr additiveInverse(Expr e) + inline static Expr additiveInverse(Expr e) + { + if (isOpX(e)) { - if (isOpX(e)) - { - cpp_int coef = 1; - ExprVector ops; - getMultOps (e, ops); - - ExprVector rem; - for (auto & a : ops) - { - if (isOpX(a)) - { - coef *= lexical_cast(a); - } - else - { - rem.push_back(a); - } - } - - Expr num = mkMPZ (-coef, e->getFactory()); - if (rem.empty() || coef == 0) return num; - - Expr remTerm = mkmult(rem, e->getFactory()); - if (coef == -1) return remTerm; + cpp_int coef = 1; + ExprVector ops; + getMultOps (e, ops); - return mk(num, remTerm); - } - else if (isOpX(e)) - { - ExprVector terms; - for (auto it = e->args_begin (), end = e->args_end (); it != end; ++it) - { - getAddTerm(additiveInverse(*it), terms); - } - return mkplus(terms, e->getFactory()); - } - else if (isOpX(e)) - { - ExprVector terms; - getAddTerm(additiveInverse(*e->args_begin ()), terms); - auto it = e->args_begin () + 1; - for (auto end = e->args_end (); it != end; ++it) - { - getAddTerm(*it, terms); - } - return mkplus(terms, e->getFactory()); - } - else if (isOpX(e)) + ExprVector rem; + for (auto & a : ops) + { + if (isOpX(a)) { - return e->left(); + coef *= lexical_cast(a); } - else if (isOpX(e)) + else { - return mkMPZ(-lexical_cast(e), e->getFactory()); - } - else if (isOpX(e)){ - string val = lexical_cast(e); - int delim = val.find("/"); - int val1 = stoi(val.substr(0, delim)); - int val2 = stoi(val.substr(delim + 1)); - if (delim < 0) { - return mkTerm (mpq_class (-val1), e->getFactory()); - } else { - string inv_val = to_string(-val1) + "/" + to_string(val2); - return mkTerm (mpq_class (inv_val), e->getFactory()); - } - } - else if (isOpX(e)){ - return mk(e->left(), additiveInverse(e->right()), additiveInverse(e->last())); + rem.push_back(a); } -// return mk(mkMPZ ((-1), e->getFactory()), e); - return mk(e); + } + + Expr num = mkMPZ (-coef, e->getFactory()); + if (rem.empty() || coef == 0) return num; + + Expr remTerm = mkmult(rem, e->getFactory()); + if (coef == -1) return remTerm; + + return mk(num, remTerm); + } + else if (isOpX(e)) + { + ExprVector terms; + for (auto it = e->args_begin (), end = e->args_end (); it != end; ++it) + { + getAddTerm(additiveInverse(*it), terms); + } + return mkplus(terms, e->getFactory()); + } + else if (isOpX(e)) + { + ExprVector terms; + getAddTerm(additiveInverse(*e->args_begin ()), terms); + auto it = e->args_begin () + 1; + for (auto end = e->args_end (); it != end; ++it) + { + getAddTerm(*it, terms); + } + return mkplus(terms, e->getFactory()); + } + else if (isOpX(e)) + { + return e->left(); + } + else if (isOpX(e)) + { + return mkMPZ(-lexical_cast(e), e->getFactory()); + } + else if (isOpX(e)){ + string val = lexical_cast(e); + int delim = val.find("/"); + int val1 = stoi(val.substr(0, delim)); + int val2 = stoi(val.substr(delim + 1)); + if (delim < 0) { + return mkTerm (mpq_class (-val1), e->getFactory()); + } else { + string inv_val = to_string(-val1) + "/" + to_string(val2); + return mkTerm (mpq_class (inv_val), e->getFactory()); + } } + else if (isOpX(e)){ + return mk(e->left(), additiveInverse(e->right()), additiveInverse(e->last())); + } +// return mk(mkMPZ ((-1), e->getFactory()), e); + return mk(e); + } - /** + /** * Commutativity in Addition */ - inline static Expr exprSorted(Expr e){ - if (!isNumeric(e)) return e; - ExprVector addTrms; - getAddTerm(e, addTrms); - std::sort(addTrms.begin(), addTrms.end(), [](Expr& x, Expr& y) {return x < y;}); - return mkplus(addTrms, e->getFactory()); - } + inline static Expr exprSorted(Expr e){ + if (!isNumeric(e)) return e; + ExprVector addTrms; + getAddTerm(e, addTrms); + std::sort(addTrms.begin(), addTrms.end(), [](Expr& x, Expr& y) {return x < y;}); + return mkplus(addTrms, e->getFactory()); + } - /** + /** * Helper used in ineqReverter */ - template static Expr rewriteHelperN(Expr e){ - assert(e->arity() == 2); - Expr tmp = additiveInverse(e->left()); - if (isOpX(e->left())) - return mk(additiveInverse(e->left()), additiveInverse(e->right())); + template static Expr rewriteHelperN(Expr e){ + assert(e->arity() == 2); + Expr tmp = additiveInverse(e->left()); + if (isOpX(e->left())) + return mk(additiveInverse(e->left()), additiveInverse(e->right())); - if (isOpX(tmp)) - if (isOpX(tmp->left())) - if (lexical_cast(tmp->left()) > 0) - return mk(tmp, additiveInverse(e->right())); + if (isOpX(tmp)) + if (isOpX(tmp->left())) + if (lexical_cast(tmp->left()) > 0) + return mk(tmp, additiveInverse(e->right())); - if (isIntConst(tmp) || isRealConst(tmp)) - return mk(tmp, additiveInverse(e->right())); + if (isIntConst(tmp) || isRealConst(tmp)) + return mk(tmp, additiveInverse(e->right())); - return e; - } + return e; + } - /** + /** * Helper used in ineqMover */ - template static Expr rewriteHelperM(Expr e, Expr var){ - Expr l = e->left(); - Expr r = e->right(); - ExprVector orig_lhs, orig_rhs, lhs, rhs; + template static Expr rewriteHelperM(Expr e, Expr var){ + Expr l = e->left(); + Expr r = e->right(); + ExprVector orig_lhs, orig_rhs, lhs, rhs; - // parse + // parse - getAddTerm(l, orig_lhs); - getAddTerm(r, orig_rhs); - for (auto & a : orig_lhs) - { - if (contains (a, var)) lhs.push_back(a); - else rhs.push_back(additiveInverse(a)); - } - for (auto & a : orig_rhs) - { - if (contains (a, var)) lhs.push_back(additiveInverse(a)); - else rhs.push_back(a); - } + getAddTerm(l, orig_lhs); + getAddTerm(r, orig_rhs); + for (auto & a : orig_lhs) + { + if (contains (a, var)) lhs.push_back(a); + else rhs.push_back(additiveInverse(a)); + } + for (auto & a : orig_rhs) + { + if (contains (a, var)) lhs.push_back(additiveInverse(a)); + else rhs.push_back(a); + } - // combine results + // combine results - cpp_int coef = 0; - for (auto it = lhs.begin(); it != lhs.end(); ) - { - bool found = false; - if (*it == var) { coef++; found = true; } - if (isOpX(*it) && (*it)->left() == var) { coef--; found = true; } - if (isOpX(*it) && 2 == (*it)->arity() && isOpX((*it)->left()) && (*it)->right() == var) { - coef += lexical_cast((*it)->left()); - found = true; - } + cpp_int coef = 0; + for (auto it = lhs.begin(); it != lhs.end(); ) + { + bool found = false; + if (*it == var) { coef++; found = true; } + if (isOpX(*it) && (*it)->left() == var) { coef--; found = true; } + if (isOpX(*it) && 2 == (*it)->arity() && isOpX((*it)->left()) && (*it)->right() == var) { + coef += lexical_cast((*it)->left()); + found = true; + } - if (found) { it = lhs.erase(it); continue; } - else ++it; - } + if (found) { it = lhs.erase(it); continue; } + else ++it; + } - if (!lhs.empty()) - { + if (!lhs.empty()) + { // errs() << "WARNING: COULD NOT NORMALIZE w.r.t. " << *var << ": " // << *conjoin (lhs, e->getFactory()) << "\n"; - return e; - } - - r = mkplus(rhs, e->getFactory()); + return e; + } - if (coef == 0){ - l = mkMPZ (0, e->getFactory()); - } else if (coef == 1){ - l = var; - } else { - l = mk(mkMPZ(coef, e->getFactory()), var); - } + r = mkplus(rhs, e->getFactory()); - return mk(l,r); + if (coef == 0){ + l = mkMPZ (0, e->getFactory()); + } else if (coef == 1){ + l = var; + } else { + l = mk(mkMPZ(coef, e->getFactory()), var); } - /** - * Helper used in exprMover - */ - template static Expr rewriteHelperE(Expr e, Expr var){ - assert(e->arity() == 2); - Expr l = e->left(); - Expr r = e->right(); - if (r == var) { - l = exprSorted(l); - return mk(r, l); - } + return mk(l,r); + } - if (isOpX(r)){ - if (r->left() == var || r->right() == var){ - l = exprSorted(l); - return mk(r, l); - } - } - return e; + /** + * Helper used in exprMover + */ + template static Expr rewriteHelperE(Expr e, Expr var){ + assert(e->arity() == 2); + Expr l = e->left(); + Expr r = e->right(); + if (r == var) { + l = exprSorted(l); + return mk(r, l); + } + + if (isOpX(r)){ + if (r->left() == var || r->right() == var){ + l = exprSorted(l); + return mk(r, l); + } } + return e; + } - /** + /** * Merge adjacent inequalities * (a <= b && a >= b) -> (a == b) */ - inline static void ineqMerger(ExprSet& expClauses, bool clean = false){ - vector tmp; - ExprSet newClauses; - for (auto it1 = expClauses.begin(); it1 != expClauses.end(); ++it1){ - if (isOpX(*it1)){ - for (auto it2 = expClauses.begin(); it2 != expClauses.end(); ++it2){ - if (isOpX(*it2)){ - Expr e1l = exprSorted(mk((*it1)->left(), (*it1)->right())); - Expr e2l = exprSorted(mk((*it2)->left(), (*it2)->right())); - if ( e1l == e2l ){ - newClauses.insert(mk(e1l, mkMPZ(0, e1l->getFactory()))); - if (clean){ - tmp.push_back (it1); - tmp.push_back (it2); - break; - } - } - } - } + inline static void ineqMerger(ExprSet& expClauses, bool clean = false){ + vector tmp; + ExprSet newClauses; + for (auto it1 = expClauses.begin(); it1 != expClauses.end(); ++it1){ + if (isOpX(*it1)){ + for (auto it2 = expClauses.begin(); it2 != expClauses.end(); ++it2){ + if (isOpX(*it2)){ + Expr e1l = exprSorted(mk((*it1)->left(), (*it1)->right())); + Expr e2l = exprSorted(mk((*it2)->left(), (*it2)->right())); + if ( e1l == e2l ){ + newClauses.insert(mk(e1l, mkMPZ(0, e1l->getFactory()))); + if (clean){ + if (!contains(tmp, it1)) tmp.push_back (it1); + if (!contains(tmp, it2)) tmp.push_back (it2); + break; + } } + } } - for (auto & it : tmp) expClauses.erase(it); - expClauses.insert(newClauses.begin(), newClauses.end()); + } } + for (auto & it : tmp) expClauses.erase(it); + expClauses.insert(newClauses.begin(), newClauses.end()); + } - /** + /** * Trivial simplifier: * (-1*a <= -1*b) -> (a >= b) * (-1*a >= -1*b) -> (a <= b) * (-1*a == -1*b) -> (a == b) */ - inline static Expr ineqReverter(Expr e){ - if (isOpX(e)){ - return rewriteHelperN(e); - } else if (isOpX(e)){ - return rewriteHelperN(e); - } else if (isOpX(e)){ - return rewriteHelperN(e); - } else if (isOpX(e)){ - return rewriteHelperN(e); - } else if (isOpX(e)){ - return rewriteHelperN(e); - } else if (isOpX(e)){ - return rewriteHelperN(e); - } - return e; - } + inline static Expr ineqReverter(Expr e){ + if (isOpX(e)){ + return rewriteHelperN(e); + } else if (isOpX(e)){ + return rewriteHelperN(e); + } else if (isOpX(e)){ + return rewriteHelperN(e); + } else if (isOpX(e)){ + return rewriteHelperN(e); + } else if (isOpX(e)){ + return rewriteHelperN(e); + } else if (isOpX(e)){ + return rewriteHelperN(e); + } + return e; + } - inline static Expr ineqNegReverter(Expr a){ - if (isOpX(a)){ - Expr e = a->arg(0); - if (isOpX(e)){ - return mk(e->arg(0), e->arg(1)); - } else if (isOpX(e)){ - return mk(e->arg(0), e->arg(1)); - } else if (isOpX(e)){ - return mk(e->arg(0), e->arg(1)); - } else if (isOpX(e)){ - return mk(e->arg(0), e->arg(1)); - } else if (isOpX(e)){ - return mk(e->arg(0), e->arg(1)); - } else if (isOpX(e)){ - return mk(e->arg(0), e->arg(1)); - } - } - return a; + inline static Expr ineqNegReverter(Expr a){ + if (isOpX(a)){ + Expr e = a->arg(0); + if (isOpX(e)){ + return mk(e->arg(0), e->arg(1)); + } else if (isOpX(e)){ + return mk(e->arg(0), e->arg(1)); + } else if (isOpX(e)){ + return mk(e->arg(0), e->arg(1)); + } else if (isOpX(e)){ + return mk(e->arg(0), e->arg(1)); + } else if (isOpX(e)){ + return mk(e->arg(0), e->arg(1)); + } else if (isOpX(e)){ + return mk(e->arg(0), e->arg(1)); + } } + return a; + } - /** + /** * Transform the inequalities by the following rules: * (a + .. + var + .. + b <= c ) -> (var <= -1*a + .. + -1*b + c) * (a + .. + -1*var + .. + b <= c) -> (-1*var <= -1*a + .. + -1*b + c ) @@ -652,4148 +671,3073 @@ namespace ufo * * same for >= */ - inline static Expr ineqMover(Expr e, Expr var){ - if (isOpX(e)){ - return rewriteHelperM(e, var); - } else if (isOpX(e)){ - return rewriteHelperM(e, var); - } else if (isOpX(e)){ - return rewriteHelperM(e, var); - } else if (isOpX(e)){ - return rewriteHelperM(e, var); - } else if (isOpX(e)){ - return rewriteHelperM(e, var); - } else if (isOpX(e)){ - return rewriteHelperM(e, var); - } - return e; - } + inline static Expr ineqMover(Expr e, Expr var){ + if (isOpX(e)){ + return rewriteHelperM(e, var); + } else if (isOpX(e)){ + return rewriteHelperM(e, var); + } else if (isOpX(e)){ + return rewriteHelperM(e, var); + } else if (isOpX(e)){ + return rewriteHelperM(e, var); + } else if (isOpX(e)){ + return rewriteHelperM(e, var); + } else if (isOpX(e)){ + return rewriteHelperM(e, var); + } + return e; + } - /** + /** * Move "var" to the left hand side of expression: * (a <= var) -> (var >= b) * (a >= var) -> (var <= b) * (a == var) -> (var == b) */ - inline static Expr exprMover(Expr e, Expr var){ - if (isOpX(e)){ - return rewriteHelperE(e, var); - } else if (isOpX(e)){ - return rewriteHelperE(e, var); - } else if (isOpX(e)){ - return rewriteHelperE(e, var); - } else if (isOpX(e)){ - return rewriteHelperE(e, var); - } if (isOpX(e)){ - return rewriteHelperE(e, var); - } if (isOpX(e)){ - return rewriteHelperE(e, var); - } - return e; - } + inline static Expr exprMover(Expr e, Expr var){ + if (isOpX(e)){ + return rewriteHelperE(e, var); + } else if (isOpX(e)){ + return rewriteHelperE(e, var); + } else if (isOpX(e)){ + return rewriteHelperE(e, var); + } else if (isOpX(e)){ + return rewriteHelperE(e, var); + } if (isOpX(e)){ + return rewriteHelperE(e, var); + } if (isOpX(e)){ + return rewriteHelperE(e, var); + } + return e; + } - static Expr simplifyArithm (Expr exp, bool keepRedundandDisj, bool keepRedundandConj); + static Expr simplifyArithm (Expr exp, bool keepRedundandDisj, bool keepRedundandConj); - /** + /** * Move var v to LHS of each expression and simplify */ - inline static Expr ineqSimplifier(Expr v, Expr exp, bool merge = false){ - ExprSet substsMap; - if (isOpX(exp)){ - ExprSet cnjs; - getConj(exp, cnjs); - for (Expr cl : cnjs) - substsMap.insert(ineqSimplifier(v, cl)); - - if (merge) ineqMerger(substsMap, true); - return conjoin(substsMap, v->getFactory()); - } - else if (isOp(exp)) - { - exp = ineqMover(exp, v); - exp = simplifyArithm(exp, false, false); - exp = ineqReverter(exp); - } - return exp; - } + inline static Expr ineqSimplifier(Expr v, Expr exp, bool merge = false){ + ExprSet substsMap; + if (isOpX(exp)){ + ExprSet cnjs; + getConj(exp, cnjs); + for (Expr cl : cnjs) + substsMap.insert(ineqSimplifier(v, cl)); - template static void unique_push_back(T e, vector& v) { - if (find(v.begin(), v.end(), e) == v.end()) v.push_back(e); + if (merge) ineqMerger(substsMap, true); + return conjoin(substsMap, v->getFactory()); } - - static void uniquePushConj(Expr e, ExprVector& v) + else if (isOp(exp)) { - ExprSet cnjs; - getConj(e, cnjs); - for (auto & g : cnjs) unique_push_back(g, v); + exp = ineqMover(exp, v); + exp = simplifyArithm(exp, false, false); + exp = ineqReverter(exp); } + return exp; + } - template struct RW - { - std::shared_ptr _r; + template struct RW + { + std::shared_ptr _r; - RW (std::shared_ptr r) : _r(r) {} - RW (T *r) : _r (r) {} + RW (std::shared_ptr r) : _r(r) {} + RW (T *r) : _r (r) {} - VisitAction operator() (Expr exp) - { - // -- apply the rewriter - if (exp->arity() == 0) - // -- do not descend into non-boolean operators - return VisitAction::skipKids (); + VisitAction operator() (Expr exp) + { + // -- apply the rewriter + if (exp->arity() == 0) + // -- do not descend into non-boolean operators + return VisitAction::skipKids (); - return VisitAction::changeDoKidsRewrite (exp, _r); - } - }; + return VisitAction::changeDoKidsRewrite (exp, _r); + } + }; // not very pretty method, but.. - inline static Expr reBuildCmp(Expr fla, Expr lhs, Expr rhs) + inline static Expr reBuildCmp(Expr fla, Expr lhs, Expr rhs) + { + if (isOpX(fla)) { - if (isOpX(fla)) - { - return mk(lhs, rhs); - } - if (isOpX(fla)) - { - return mk(lhs, rhs); - } - if (isOpX(fla)) - { - return mk(lhs, rhs); - } - if (isOpX(fla)) - { - return mk(lhs, rhs); - } - if (isOpX(fla)) - { - return mk(lhs, rhs); - } - assert(isOpX(fla)); - return mk(lhs, rhs); + return mk(lhs, rhs); } - - inline static Expr reBuildCmpSym(Expr fla, Expr lhs, Expr rhs) + if (isOpX(fla)) { - if (isOpX(fla)){ - return mk(rhs, lhs); - } - if (isOpX(fla)){ - return mk(rhs, lhs); - } - if (isOpX(fla)){ - return mk(rhs, lhs); - } - if (isOpX(fla)){ - return mk(rhs, lhs); - } - if (isOpX(fla)){ - return mk(rhs, lhs); - } - assert(isOpX(fla)); - return mk(rhs, lhs); + return mk(lhs, rhs); } - - inline static Expr reBuildNegCmp(Expr fla, Expr lhs, Expr rhs) + if (isOpX(fla)) { - if (isOpX(fla)) - { - return mk(lhs, rhs); - } - if (isOpX(fla)) - { - return mk(lhs, rhs); - } - if (isOpX(fla)) - { - return mk(lhs, rhs); - } - if (isOpX(fla)) - { - return mk(lhs, rhs); - } - if (isOpX(fla)) - { - return mk(lhs, rhs); - } - assert(isOpX(fla)); - return mk(lhs, rhs); + return mk(lhs, rhs); + } + if (isOpX(fla)) + { + return mk(lhs, rhs); + } + if (isOpX(fla)) + { + return mk(lhs, rhs); } + assert(isOpX(fla)); + return mk(lhs, rhs); + } - // not very pretty method, but.. - inline static bool evaluateCmpConsts(Expr fla, cpp_int a, cpp_int b) + inline static Expr reBuildCmpSym(Expr fla, Expr lhs, Expr rhs) + { + if (isOpX(fla)){ + return mk(rhs, lhs); + } + if (isOpX(fla)){ + return mk(rhs, lhs); + } + if (isOpX(fla)){ + return mk(rhs, lhs); + } + if (isOpX(fla)){ + return mk(rhs, lhs); + } + if (isOpX(fla)){ + return mk(rhs, lhs); + } + assert(isOpX(fla)); + return mk(rhs, lhs); + } + + inline static Expr reBuildNegCmp(Expr fla, Expr lhs, Expr rhs) + { + if (isOpX(fla)) { - if (isOpX(fla)) - { - return (a == b); - } - if (isOpX(fla)) - { - return (a != b); - } - if (isOpX(fla)) - { - return (a <= b); - } - if (isOpX(fla)) - { - return (a >= b); - } - if (isOpX(fla)) - { - return (a < b); - } - assert(isOpX(fla)); - return (a > b); + return mk(lhs, rhs); + } + if (isOpX(fla)) + { + return mk(lhs, rhs); } + if (isOpX(fla)) + { + return mk(lhs, rhs); + } + if (isOpX(fla)) + { + return mk(lhs, rhs); + } + if (isOpX(fla)) + { + return mk(lhs, rhs); + } + assert(isOpX(fla)); + return mk(lhs, rhs); + } - inline static Expr mkNeg(Expr fla) + // not very pretty method, but.. + inline static bool evaluateCmpConsts(Expr fla, cpp_int a, cpp_int b) + { + if (isOpX(fla)) { - if (isOpX(fla)) - { - return fla->arg(0); - } - else if (isOpX(fla)) - { - return mk(fla->getFactory()); - } - else if (isOpX(fla)) - { - return mk(fla->getFactory()); - } - else if (isOpX(fla) || isOpX(fla)) - { - ExprSet args; - for (int i = 0; i < fla->arity(); i++){ - args.insert(mkNeg(fla->arg(i))); - } - return isOpX(fla) ? - disjoin(args, fla->getFactory()) : - conjoin (args, fla->getFactory()); - } - else if (isOpX(fla) && fla->arity() == 2) - { - return mk(fla->arg(0), fla->arg(1)); - } - else if (isOp(fla)) - { - return reBuildNegCmp(fla, fla->arg(0), fla->arg(1)); - } - else if (isOpX(fla)) - { - return mk(fla->left(), mkNeg(fla->right())); - } - else if (isOpX(fla) || isOpX(fla)) - { - ExprVector args; - for (int i = 0; i < fla->arity() - 1; i++) - args.push_back(fla->arg(i)); - args.push_back(mkNeg(fla->last())); - return isOpX(fla) ? - mknary(args) : mknary(args); - } - return mk(fla); + return (a == b); + } + if (isOpX(fla)) + { + return (a != b); + } + if (isOpX(fla)) + { + return (a <= b); + } + if (isOpX(fla)) + { + return (a >= b); + } + if (isOpX(fla)) + { + return (a < b); } + assert(isOpX(fla)); + return (a > b); + } - inline static cpp_int separateConst(ExprVector& plsOps) + inline static Expr mkNeg(Expr fla) + { + if (isOpX(fla)) { - cpp_int c = 0; - for (auto it = plsOps.begin(); it != plsOps.end(); ) - { - if (isOpX(*it)) - { - c += lexical_cast(*it); - it = plsOps.erase(it); - continue; - } - else ++it; - } - return c; + return fla->arg(0); + } + else if (isOpX(fla)) + { + return mk(fla->getFactory()); + } + else if (isOpX(fla)) + { + return mk(fla->getFactory()); + } + else if (isOpX(fla) || isOpX(fla)) + { + ExprSet args; + for (int i = 0; i < fla->arity(); i++){ + args.insert(mkNeg(fla->arg(i))); + } + return isOpX(fla) ? + disjoin(args, fla->getFactory()) : + conjoin (args, fla->getFactory()); + } + else if (isOpX(fla) && fla->arity() == 2) + { + return mk(fla->arg(0), fla->arg(1)); + } + else if (isOp(fla)) + { + return reBuildNegCmp(fla, fla->arg(0), fla->arg(1)); + } + else if (isOpX(fla)) + { + return mk(fla->left(), mkNeg(fla->right())); + } + else if (isOpX(fla) || isOpX(fla)) + { + ExprVector args; + for (int i = 0; i < fla->arity() - 1; i++) + args.push_back(fla->arg(i)); + args.push_back(mkNeg(fla->last())); + return isOpX(fla) ? + mknary(args) : mknary(args); } + return mk(fla); + } - inline static Expr simplifyPlus (Expr exp) + inline static cpp_int separateConst(ExprVector& plsOps) + { + cpp_int c = 0; + for (auto it = plsOps.begin(); it != plsOps.end(); ) { - ExprVector plsOps; - getAddTerm (exp, plsOps); - cpp_int c = separateConst(plsOps); - std::sort(plsOps.begin(), plsOps.end(), [](Expr& x, Expr& y) {return x < y;}); - // GF: to write some kind of a fold-operator that counts the numbers of occurences - if (c != 0) plsOps.push_back(mkMPZ(c, exp->getFactory())); - return mkplus(plsOps, exp->getFactory()); + if (isOpX(*it)) + { + c += lexical_cast(*it); + it = plsOps.erase(it); + continue; + } + else ++it; } + return c; + } + + inline static Expr simplifyPlus (Expr exp) + { + ExprVector plsOps; + getAddTerm (exp, plsOps); + cpp_int c = separateConst(plsOps); + std::sort(plsOps.begin(), plsOps.end(), [](Expr& x, Expr& y) {return x < y;}); + // GF: to write some kind of a fold-operator that counts the numbers of occurences + if (c != 0) plsOps.push_back(mkMPZ(c, exp->getFactory())); + return mkplus(plsOps, exp->getFactory()); + } - inline static Expr simplifyMult (Expr e) + inline static Expr simplifyMult (Expr e) + { + if (isOpX(e)) { - if (isOpX(e)) - { - cpp_int coef = 1; - ExprVector ops; - getMultOps (e, ops); + cpp_int coef = 1; + ExprVector ops; + getMultOps (e, ops); - ExprVector rem; - for (auto a : ops) - { - if (isOpX(a)) - coef *= lexical_cast(a); - else - rem.push_back(a); - } + ExprVector rem; + for (auto a : ops) + { + if (isOpX(a)) + coef *= lexical_cast(a); + else + rem.push_back(a); + } - Expr num = mkMPZ (coef, e->getFactory()); - if (rem.empty() || coef == 0) return num; + Expr num = mkMPZ (coef, e->getFactory()); + if (rem.empty() || coef == 0) return num; - Expr remTerm = mkmult(rem, e->getFactory()); - if (coef == 1) return remTerm; + Expr remTerm = mkmult(rem, e->getFactory()); + if (coef == 1) return remTerm; - return mk(num, remTerm); - } - return e; + return mk(num, remTerm); } + return e; + } - inline static Expr simplifyMod (Expr e) + inline static Expr simplifyMod (Expr e) + { + if (isOpX(e) && isOpX(e->right())) { - if (isOpX(e) && isOpX(e->right())) - { - cpp_int coef = 1; - cpp_int divider = lexical_cast(e->right()); - ExprVector ops; - getMultOps (e->left(), ops); + cpp_int coef = 1; + cpp_int divider = lexical_cast(e->right()); + ExprVector ops; + getMultOps (e->left(), ops); - for (auto a : ops) - if (isOpX(a)) - coef *= lexical_cast(a); + for (auto a : ops) + if (isOpX(a)) + coef *= lexical_cast(a); - if (coef % divider == 0) - return mkMPZ (0, e->getFactory()); - } - return e; + if (coef % divider == 0) + return mkMPZ (0, e->getFactory()); } + return e; + } - inline static Expr simplifyDiv (Expr e) + inline static Expr simplifyDiv (Expr e) + { + if (isOpX(e) && isOpX(e->right())) { - if (isOpX(e) && isOpX(e->right())) - { - cpp_int coef = 1; - cpp_int divider = lexical_cast(e->right()); - ExprVector ops; - getMultOps (e->left(), ops); - - bool onlyNum = true; - for (auto a : ops) - if (isOpX(a)) - coef *= lexical_cast(a); - else - onlyNum = false; - - if (coef == 0) - return mkMPZ (0, e->getFactory()); - if (onlyNum) - return mkMPZ (coef / divider, e->getFactory()); - } - return e; - } + cpp_int coef = 1; + cpp_int divider = lexical_cast(e->right()); + ExprVector ops; + getMultOps (e->left(), ops); - inline static Expr simplifyIte (Expr exp) // simple version, on the syntactic level - { - ExprFactory &efac = exp->getFactory(); - ExprVector plusOpsLeft; - ExprVector plusOpsRight; - ExprVector commonTerms; - Expr b1; - Expr b2; - bool added = false; - if (isNumeric(exp->right())) - { - getAddTerm(exp->right(), plusOpsLeft); - getAddTerm(exp->last(), plusOpsRight); + bool onlyNum = true; + for (auto a : ops) + if (isOpX(a)) + coef *= lexical_cast(a); + else + onlyNum = false; - for (auto it1 = plusOpsLeft.begin(); it1 != plusOpsLeft.end(); ) - { - bool found = false; - for (auto it2 = plusOpsRight.begin(); it2 != plusOpsRight.end(); ) - { - if (*it1 == *it2) - { - if (lexical_cast(*it1) != "0") - commonTerms.push_back(*it1); - found = true; - plusOpsRight.erase(it2); - break; - } - else - { - ++it2; - } - } - if (found) it1 = plusOpsLeft.erase(it1); - else ++it1; - } + if (coef == 0) + return mkMPZ (0, e->getFactory()); + if (onlyNum) + return mkMPZ (coef / divider, e->getFactory()); + } + return e; + } - b1 = simplifyPlus(mkplus(plusOpsLeft, efac)); - b2 = simplifyPlus(mkplus(plusOpsRight, efac)); - if (b1 == b2) - { - if (lexical_cast(b1) != "0") - commonTerms.push_back(b1); - added = true; - } - } - else + inline static Expr simplifyIte (Expr exp) // simple version, on the syntactic level + { + ExprFactory &efac = exp->getFactory(); + ExprVector plusOpsLeft; + ExprVector plusOpsRight; + ExprVector commonTerms; + Expr b1; + Expr b2; + bool added = false; + if (isNumeric(exp->right())) + { + getAddTerm(exp->right(), plusOpsLeft); + getAddTerm(exp->last(), plusOpsRight); + + for (auto it1 = plusOpsLeft.begin(); it1 != plusOpsLeft.end(); ) + { + bool found = false; + for (auto it2 = plusOpsRight.begin(); it2 != plusOpsRight.end(); ) { - b1 = exp->right(); - b2 = exp->last(); + if (*it1 == *it2) + { + if (lexical_cast(*it1) != "0") + commonTerms.push_back(*it1); + found = true; + plusOpsRight.erase(it2); + break; + } + else + { + ++it2; + } } + if (found) it1 = plusOpsLeft.erase(it1); + else ++it1; + } - if (!added) // some redundancy with the ITE-handling in simplifyBool - { - if (isOpX(exp->left())) - commonTerms.push_back(b1); - else if (isOpX(exp->left())) - commonTerms.push_back(b2); - else - commonTerms.push_back(mk(exp->left(), b1, b2)); - } - return mkplus(commonTerms, efac); + b1 = simplifyPlus(mkplus(plusOpsLeft, efac)); + b2 = simplifyPlus(mkplus(plusOpsRight, efac)); + if (b1 == b2) + { + if (lexical_cast(b1) != "0") + commonTerms.push_back(b1); + added = true; + } } - - inline static Expr simplifyCmp (Expr exp) + else { - ExprFactory &efac = exp->getFactory(); - - ExprVector plusOpsLeft; - ExprVector plusOpsRight; - getAddTerm(exp->left(), plusOpsLeft); - getAddTerm(exp->right(), plusOpsRight); + b1 = exp->right(); + b2 = exp->last(); + } - cpp_int constLeft = separateConst(plusOpsLeft); - cpp_int constRight = separateConst(plusOpsRight); + if (!added) // some redundancy with the ITE-handling in simplifyBool + { + if (isOpX(exp->left())) + commonTerms.push_back(b1); + else if (isOpX(exp->left())) + commonTerms.push_back(b2); + else + commonTerms.push_back(mk(exp->left(), b1, b2)); + } + return mkplus(commonTerms, efac); + } - for (auto it1 = plusOpsLeft.begin(); it1 != plusOpsLeft.end(); ) - { - bool found = false; - for (auto it2 = plusOpsRight.begin(); it2 != plusOpsRight.end(); ) - { - if (*it1 == *it2) - { - found = true; - plusOpsRight.erase(it2); - break; - } - else - { - ++it2; - } - } - if (found) it1 = plusOpsLeft.erase(it1); - else ++it1; - } + inline static Expr simplifyCmp (Expr exp) + { + ExprFactory &efac = exp->getFactory(); - // processing of constLeft/Right to prepare for further simplifyArithmDisjunctions/Conjunctions - if (constLeft != 0 || constRight != 0) - { - if (plusOpsLeft.size() == 0) - { - constLeft = constLeft - constRight; - constRight = 0; - } - else - { - constRight = constRight - constLeft; - constLeft = 0; - } - } + ExprVector plusOpsLeft; + ExprVector plusOpsRight; + getAddTerm(exp->left(), plusOpsLeft); + getAddTerm(exp->right(), plusOpsRight); - if (constLeft != 0) plusOpsLeft.push_back(mkMPZ(constLeft, efac)); - if (constRight != 0) plusOpsRight.push_back(mkMPZ(constRight, efac)); + cpp_int constLeft = separateConst(plusOpsLeft); + cpp_int constRight = separateConst(plusOpsRight); - if (plusOpsLeft.size() == 0 && plusOpsRight.size() == 0) + for (auto it1 = plusOpsLeft.begin(); it1 != plusOpsLeft.end(); ) + { + bool found = false; + for (auto it2 = plusOpsRight.begin(); it2 != plusOpsRight.end(); ) + { + if (*it1 == *it2) { - if (isOpX(exp) || isOpX(exp) || isOpX(exp)) - return mk(efac); - else - return mk(efac); + found = true; + plusOpsRight.erase(it2); + break; } - - if (plusOpsLeft.size() == 0 && plusOpsRight.size() == 1 && - isOpX(*plusOpsRight.begin())) + else { - if (evaluateCmpConsts(exp, 0, lexical_cast(*plusOpsRight.begin()))) - return mk(efac); - else - return mk(efac); + ++it2; } + } + if (found) it1 = plusOpsLeft.erase(it1); + else ++it1; + } - if (plusOpsLeft.size() == 1 && plusOpsRight.size() == 0 && - isOpX(*plusOpsLeft.begin())) - { - if (evaluateCmpConsts(exp, lexical_cast(*plusOpsLeft.begin()), 0)) - return mk(efac); - else - return mk(efac); - } + // processing of constLeft/Right to prepare for further simplifyArithmDisjunctions/Conjunctions + if (constLeft != 0 || constRight != 0) + { + if (plusOpsLeft.size() == 0) + { + constLeft = constLeft - constRight; + constRight = 0; + } + else + { + constRight = constRight - constLeft; + constLeft = 0; + } + } - Expr l = mkplus(plusOpsLeft, efac); - Expr r = mkplus(plusOpsRight, efac); + if (constLeft != 0) plusOpsLeft.push_back(mkMPZ(constLeft, efac)); + if (constRight != 0) plusOpsRight.push_back(mkMPZ(constRight, efac)); - // small ITE-optimization; to extend: - if (isOpX(exp) && isOpX(l) && isOpX(r) && - isOpX(l->right()) && isOpX(l->last()) && l->right() != l->last()) - { - if (l->right() == r) return l->left(); - if (l->left() == r) return mkNeg(l->left()); - } - else if (isOpX(exp) && isOpX(r) && isOpX(l) && - isOpX(r->right()) && isOpX(r->last()) && r->right() != r->last()) - { - if (r->right() == l) return r->left(); - if (r->left() == l) return mkNeg(r->left()); - } - - return reBuildCmp(exp, l, r); + if (plusOpsLeft.size() == 0 && plusOpsRight.size() == 0) + { + if (isOpX(exp) || isOpX(exp) || isOpX(exp)) + return mk(efac); + else + return mk(efac); } - static Expr simplifyArithmDisjunctions(Expr fla, bool keepRedundandDisj); - static Expr simplifyArithmConjunctions(Expr fla, bool keepRedundandConj); - - struct SimplifyArithmExpr + if (plusOpsLeft.size() == 0 && plusOpsRight.size() == 1 && + isOpX(*plusOpsRight.begin())) { - Expr e; - ExprFactory &efac; - bool keepRedundandDisj; - bool keepRedundandConj; - - SimplifyArithmExpr (Expr& _e, bool _d, bool _c) : - e(_e), efac(_e->getFactory()), keepRedundandDisj(_d), keepRedundandConj(_c) {}; - - Expr operator() (Expr exp) - { - if (isOpX(exp) || isOpX(exp)) - { - return simplifyPlus(exp); - } - - if (isOpX(exp)) - { - return simplifyMult(exp); - } - - if (isOpX(exp)) - { - return simplifyMod(exp); - } + if (evaluateCmpConsts(exp, 0, lexical_cast(*plusOpsRight.begin()))) + return mk(efac); + else + return mk(efac); + } - if (isOpX(exp)) - { - return simplifyDiv(exp); - } + if (plusOpsLeft.size() == 1 && plusOpsRight.size() == 0 && + isOpX(*plusOpsLeft.begin())) + { + if (evaluateCmpConsts(exp, lexical_cast(*plusOpsLeft.begin()), 0)) + return mk(efac); + else + return mk(efac); + } - if (isOpX(exp)) - { - return additiveInverse(exp->left()); - } + Expr l = mkplus(plusOpsLeft, efac); + Expr r = mkplus(plusOpsRight, efac); - if (isOp(exp) && isNumeric(exp->right())) - { - return simplifyCmp(exp); - } + // small ITE-optimization; to extend: + if (isOpX(exp) && isOpX(l) && isOpX(r) && + isOpX(l->right()) && isOpX(l->last()) && l->right() != l->last()) + { + if (l->right() == r) return l->left(); + if (l->left() == r) return mkNeg(l->left()); + } + else if (isOpX(exp) && isOpX(r) && isOpX(l) && + isOpX(r->right()) && isOpX(r->last()) && r->right() != r->last()) + { + if (r->right() == l) return r->left(); + if (r->left() == l) return mkNeg(r->left()); + } - if (isOpX(exp) && isNumeric(exp->right())) - { - return simplifyIte(exp); - } + return reBuildCmp(exp, l, r); + } - if (isOpX(exp)) - { - return simplifyArithmDisjunctions(exp, keepRedundandDisj && (e == exp)); - } + static Expr simplifyArithmDisjunctions(Expr fla, bool keepRedundandDisj); + static Expr simplifyArithmConjunctions(Expr fla, bool keepRedundandConj); - if (isOpX(exp)) - { - return simplifyArithmConjunctions(exp, keepRedundandConj && (e == exp)); - } - return exp; - } - }; + struct SimplifyArithmExpr + { + Expr e; + ExprFactory &efac; + bool keepRedundandDisj; + bool keepRedundandConj; - static Expr simplifyBool (Expr exp); + SimplifyArithmExpr (Expr& _e, bool _d, bool _c) : + e(_e), efac(_e->getFactory()), keepRedundandDisj(_d), keepRedundandConj(_c) {}; - struct SimplifyBoolExpr + Expr operator() (Expr exp) { - ExprFactory &efac; + if (isOpX(exp) || isOpX(exp)) + { + return simplifyPlus(exp); + } - SimplifyBoolExpr (ExprFactory& _efac) : efac(_efac){}; + if (isOpX(exp)) + { + return simplifyMult(exp); + } - Expr operator() (Expr exp) - { - // GF: to enhance + if (isOpX(exp)) + { + return simplifyMod(exp); + } - if (isOpX(exp)) - { - if (exp->left() == exp->right()) - return mk(efac); + if (isOpX(exp)) + { + return simplifyDiv(exp); + } - if (isOpX(exp->right())) - return mk(efac); + if (isOpX(exp)) + { + return additiveInverse(exp->left()); + } - if (isOpX(exp->left())) - return mk(efac); + if (isOp(exp) && isNumeric(exp->right())) + { + return simplifyCmp(exp); + } - if (isOpX(exp->right())) - return mkNeg(exp->left()); + if (isOpX(exp) && isNumeric(exp->right())) + { + return simplifyIte(exp); + } -// return simplifyBool(mk( -// mkNeg(exp->left()), -// exp->right())); - } + if (isOpX(exp)) + { + return simplifyArithmDisjunctions(exp, keepRedundandDisj && (e == exp)); + } - if (isOpX(exp)) - { - if (exp->left() == exp->right()) - return mk(efac); + if (isOpX(exp)) + { + return simplifyArithmConjunctions(exp, keepRedundandConj && (e == exp)); + } + return exp; + } + }; - if (isOpX(exp->right())) - return exp->left(); + static Expr simplifyBool (Expr exp); - if (isOpX(exp->left())) - return exp->right(); + struct SimplifyBoolExpr + { + ExprFactory &efac; - if (isOpX(exp->right())) - return mkNeg(exp->left()); + SimplifyBoolExpr (ExprFactory& _efac) : efac(_efac){}; - if (isOpX(exp->left())) - return mkNeg(exp->right()); - } + Expr operator() (Expr exp) + { + // GF: to enhance - if (exp->arity() == 2 && (isOpX(exp) || isOpX(exp))) - { - if (exp->left() == exp->right()) - return mk(efac); + if (isOpX(exp)) + { + if (exp->left() == exp->right()) + return mk(efac); - if (isOpX(exp->right())) - return exp->left(); + if (isOpX(exp->right())) + return mk(efac); - if (isOpX(exp->left())) - return exp->right(); + if (isOpX(exp->left())) + return mk(efac); - if (isOpX(exp->right())) - { - return mkNeg(exp->left()); - } + if (isOpX(exp->right())) + return mkNeg(exp->left()); - if (isOpX(exp->left())) - return mkNeg(exp->right()); - } +// return simplifyBool(mk( +// mkNeg(exp->left()), +// exp->right())); + } - if (isOpX(exp)) - { - ExprSet dsjs; - ExprSet newDsjs; - getDisj(exp, dsjs); - for (auto a : dsjs) - { - a = simplifyBool(a); - if (isOpX(a)) - { - return mk(efac); - } - if (isOpX(a)) - { - continue; - } - newDsjs.insert(a); - } - if (newDsjs.size() == 2) - { - Expr lhs = *newDsjs.begin(); - Expr rhs = *(std::next(newDsjs.begin())); - if (lhs == mkNeg(rhs)) return mk(efac); - if (rhs == mkNeg(lhs)) return mk(efac); - } - return disjoin (newDsjs, efac); - } + if (isOpX(exp)) + { + if (exp->left() == exp->right()) + return mk(efac); - if (isOpX(exp)) - { - ExprSet cnjs; - ExprSet newCnjs; - getConj(exp, cnjs); - for (auto a : cnjs) - { - a = simplifyBool(a); - if (isOpX(a)) - { - return mk(efac); - } - if (isOpX(a)) - { - continue; - } - newCnjs.insert(a); - } - return conjoin (newCnjs, efac); - } + if (isOpX(exp->right())) + return exp->left(); - if (isOpX(exp)) - { - Expr cond = exp->arg(0); - if (isOpX(cond)) - { - return exp->arg(1); - } - else if (isOpX(cond)) - { - return exp->arg(2); - } - else if (isOpX(exp->arg(1)) && isOpX(exp->arg(2))) - { - return cond; - } - else if (isOpX(exp->arg(1)) && isOpX(exp->arg(2))) - { - return mkNeg(cond); - } - else if (exp->arg(1) == exp->arg(2)) - { - return exp->arg(1); - } - } + if (isOpX(exp->left())) + return exp->right(); - if (isOpX(exp) && - (isOp(exp->left()) || - isOpX(exp->left()) || isOpX(exp->left()))) - return mkNeg(exp->left()); + if (isOpX(exp->right())) + return mkNeg(exp->left()); - return exp; - } - }; + if (isOpX(exp->left())) + return mkNeg(exp->right()); + } - static Expr simplifyArr (Expr exp); + if (exp->arity() == 2 && (isOpX(exp) || isOpX(exp))) + { + if (exp->left() == exp->right()) + return mk(efac); - struct SimplifyArrExpr - { - SimplifyArrExpr (ExprVector& _forallVars, ExprMap& _repls) : - forallVars(_forallVars), repls(_repls) {}; + if (isOpX(exp->right())) + return exp->left(); - ExprVector& forallVars; - ExprMap& repls; + if (isOpX(exp->left())) + return exp->right(); - Expr operator() (Expr exp) + if (isOpX(exp->right())) { - // GF: to enhance - - if (isOpX(exp)) - { - ExprSet stores; - getChainOfStores(exp->left(), stores); - for (auto s : stores) - if (exp->right() == s->right()) // cell overwritten - exp = replaceAll(exp, s, s->left()); - } - - if (isOpX(exp->left()->left(), exp->last()))); - } - } - - if (isOpX(exp)) - { - if (isOpX(exp->left()) && exp->right() == exp->left()->left()) - { - return simplifyArr(mk(mk(exp->left(), exp->right()->right()), exp->right()->last())); - } - if (isOpX(exp->left()->left()->left(), exp->left()->right()), exp->right())); - } - if (isOpX(exp->right()->left()->left(), exp->right()->right()), exp->left())); - } - } - return exp; + return mkNeg(exp->left()); } - }; - - static Expr simplifyExists (Expr exp); - struct SimplifyExists - { - ExprFactory &efac; - SimplifyExists (ExprFactory& _efac): efac(_efac){ }; + if (isOpX(exp->left())) + return mkNeg(exp->right()); + } - Expr operator() (Expr exp) + if (isOpX(exp)) + { + ExprSet dsjs; + ExprSet newDsjs; + getDisj(exp, dsjs); + for (auto a : dsjs) { - if (isOpX(exp)) + a = simplifyBool(a); + if (isOpX(a)) { - ExprVector args; - for (int i = 0; i < exp->arity() - 1; i++) - args.push_back(fapp(exp->arg(i))); - - Expr qFree = exp->last(); - - if (isOpX(qFree)) - { - ExprSet dsj; - getDisj(qFree, dsj); - ExprSet q; - ExprSet newDsj; - for (auto & c : dsj) - if (emptyIntersect(c, args)) newDsj.insert(c); - else q.insert(c); - - for (auto & a : q) - newDsj.insert(simplifyExists(replaceAll(exp, qFree, a))); - - return disjoin (newDsj, efac); - } - - // simplify first - ExprSet cnj; - getConj(qFree, cnj); - for (auto & c : cnj) - { - if (isOpX(c)) - { - if (find (args.begin(), args.end(), c->right()) == args.end() && - find (args.begin(), args.end(), c->left()) != args.end()) - qFree = replaceAll(qFree, c->left(), c->right()); - if (find (args.begin(), args.end(), c->left()) == args.end() && - find (args.begin(), args.end(), c->right()) != args.end()) - qFree = replaceAll(qFree, c->right(), c->left()); - } - } - qFree = simplifyBool(qFree); - - if (isOpX(qFree)) return qFree; + return mk(efac); + } + if (isOpX(a)) + { + continue; + } + newDsjs.insert(a); + } + if (newDsjs.size() == 2) + { + Expr lhs = *newDsjs.begin(); + Expr rhs = *(std::next(newDsjs.begin())); + if (lhs == mkNeg(rhs)) return mk(efac); + if (rhs == mkNeg(lhs)) return mk(efac); + } + return disjoin (newDsjs, efac); + } - // find a subset of conjuncts independent on quantifiers - cnj.clear(); - getConj(qFree, cnj); - ExprSet depCnj; - ExprSet indepCnj; + if (isOpX(exp)) + { + ExprSet cnjs; + ExprSet newCnjs; + getConj(exp, cnjs); + for (auto a : cnjs) + { + a = simplifyBool(a); + if (isOpX(a)) + { + return mk(efac); + } + if (isOpX(a)) + { + continue; + } + newCnjs.insert(a); + } + return conjoin (newCnjs, efac); + } - for (auto & c : cnj) - if (emptyIntersect(c, args)) indepCnj.insert(c); - else depCnj.insert(c); + if (isOpX(exp)) + { + Expr cond = exp->arg(0); + if (isOpX(cond)) + { + return exp->arg(1); + } + else if (isOpX(cond)) + { + return exp->arg(2); + } + else if (isOpX(exp->arg(1)) && isOpX(exp->arg(2))) + { + return cond; + } + else if (isOpX(exp->arg(1)) && isOpX(exp->arg(2))) + { + return mkNeg(cond); + } + else if (exp->arg(1) == exp->arg(2)) + { + return exp->arg(1); + } + } - if (indepCnj.empty()) return exp; + if (isOpX(exp) && + (isOp(exp->left()) || + isOpX(exp->left()) || isOpX(exp->left()))) + return mkNeg(exp->left()); - indepCnj.insert(simplifyExists(replaceAll(exp, exp->last(), conjoin(depCnj, efac)))); - return conjoin (indepCnj, efac); - } - return exp; - } - }; + return exp; + } + }; - inline static Expr simplifyExists (Expr exp) + static Expr unitPropagate (Expr exp) + { + ExprSet cnjs; + getConj(exp, cnjs); + auto exp2 = exp; + for (auto & a : cnjs) { - RW rw(new SimplifyExists(exp->getFactory())); - return dagVisit (rw, exp); + if (isOpX(a)) + { + exp2 = replaceAll(exp2, a, mk(exp->getFactory())); + exp2 = replaceAll(exp2, mkNeg(a), mk(exp->getFactory())); + assert(!contains(exp2, a)); + exp2 = simplifyBool(mk(exp2, a)); + } } + return exp2; + } + static Expr simplifyArr (Expr exp); - static Expr createQuantifiedFormulaRestr(Expr def, ExprVector& vars, bool forall); - inline static Expr simplifyArr (Expr exp) + Expr duplChainOfStores(Expr exp, Expr val) + { + if (isOpX(exp)) { - ExprVector forallVars; - ExprMap repls; - bool origForall = false; - if (isOpX(exp)) + if (exp->right() == val) { - origForall = true; - for (int i = 0; i < exp->arity() - 1; i++) - forallVars.push_back(fapp(exp->arg(i))); + return exp->left(); } - RW rw(new SimplifyArrExpr(forallVars, repls)); - Expr tmp = dagVisit (rw, exp); + Expr ret = duplChainOfStores(exp->left(), val); + return simplifyArr(mk(ret, exp->right(), exp->last())); + } + else return exp; + } - for (auto it = forallVars.begin(); it != forallVars.end(); ) + Expr simpConstArr(Expr exp) + { + ExprSet cnjs; + getConj(exp, cnjs); + Expr l = NULL, r = NULL; + for (auto & a : cnjs) + { + if (!isOpX(a)) continue; + if (isOpX(a->left())) { - if (repls[*it] != NULL) it = forallVars.erase(it); - else ++it; + l = a->left(); + r = a->right(); + break; } - - tmp = replaceAll(tmp, repls); - if (forallVars.empty()) + else if (isOpX(a->right())) { - if (origForall) tmp = tmp->last(); + r = a->left(); + l = a->right(); + break; } - else tmp = createQuantifiedFormulaRestr (tmp->last(), forallVars, true); - - return tmp; } + if (r == NULL) + return exp; + else + return mk(mk(l, r), replaceAll(exp, r, l)); + } -// inline static Expr simplifyArr (Expr exp) -// { -// if (containsOp(exp) || containsOp(exp)) return exp; -// RW rw(new SimplifyArrExpr()); -// return dagVisit (rw, exp); -// } + inline static Expr extractVal(Expr a, Expr k) + { + if (!isNumericConst(k)) return NULL; - inline static Expr simplifyArithm (Expr exp, bool keepRedundandDisj = false, bool keepRedundandConj = false) + if (isOpX(a)) { - RW rw(new - SimplifyArithmExpr(exp, keepRedundandDisj, keepRedundandConj)); - return dagVisit (rw, exp); + return a->last(); } - - inline static Expr simplifyBool (Expr exp) + else if (isOpX(a)) { - RW rw(new SimplifyBoolExpr(exp->getFactory())); - return dagVisit (rw, exp); + if (!isNumericConst(a->right())) return NULL; + if (!isNumericConst(a->last())) return NULL; + if (a->right() == k) return a->last(); + return extractVal(a->left(), k); } + return NULL; + } - inline static void simplify(function foo, ExprSet& exps){ - ExprSet expsn; - for (auto e : exps) - { - e = foo(e); - if (!isOpX(e)) - expsn.insert(e); - } - exps = expsn; - } + inline static Expr evalSelect(Expr e) + { + if (isOpX(exp)) + { + Expr s = exp->left(), c = exp->right(); + if (isOpX(s)) return s->right(); - it = cnjs.erase(it); - } + if (isOpX(s) && c == s->right()) + return s->last(); - bool toRestart = false; - for (auto & a : toInsert) + if (isOpX(s)) { - Expr b = replaceAll(a, repls); - if (doArithm) b = simplifyArithm(b); - b = simplifyBool(b); - if (!toRestart && a != b) toRestart = true; - cnjs.insert(b); + Expr b = s->right(); + if (isValue(c) && isValue(b) && c != b) + return mk(s->left(), c))); } - cnjs.insert(toInsertHard.begin(), toInsertHard.end()); - - if (toRestart) - constantPropagationRec(hardVars, cnjs, repls, doArithm); - } + } - // simplification based on boolean replacements - template static void constantPropagation(Range& hardVars, ExprSet& cnjs, bool doArithm = true) - { - ExprMap repls; - constantPropagationRec(hardVars, cnjs, repls, doArithm); + if (isOpX(exp)) + { + Expr l = exp->left(), r = exp->right(); + if (evalSelectEq(exp)) + return mk(exp->getFactory()); + if (isOpX(l) && r == l->left()) + return simplifyArr(mk(mk(l, r->right()), r->last())); + if (isOpX(l->left()->left(), l->right()), r)); + if (isOpX(r->left()->left(), r->right()), l)); + } + return exp; } + }; - // simplification based on equivalence classes - template static Expr simpEquivClasses(Range& hardVars, ExprSet& cnjs, ExprFactory& efac) - { - set equivs; - Expr res = conjoin(cnjs, efac); - - // get classes - for (auto it = cnjs.begin(); it != cnjs.end(); it = cnjs.erase(it)) - { - Expr e = *it; - if (isOpX(e)) - { - bool found = false; - for (auto eq : equivs) - { - bool foundLeft = find(eq->begin(), eq->end(), e->left()) != eq->end(); - bool foundRight = find(eq->begin(), eq->end(), e->right()) != eq->end(); - if (foundLeft && !foundRight) { found = true; eq->push_back(e->right()); break; } - else if (!foundLeft && foundRight) { found = true; eq->push_back(e->left()); break; } - } - if (!found) - { - ExprVector* n = new ExprVector(); - n->push_back(e->left()); - n->push_back(e->right()); - equivs.insert(n); - } - } - } + inline static Expr simplifyArr (Expr exp) + { + RW rw(new SimplifyArrExpr()); + return dagVisit (rw, exp); + } - // do rewriting - bool toRepeat = false; - ExprSet removed; - for (auto & eq : equivs) - { - Expr hardVar = NULL; - for (auto & a : hardVars) - { - for (auto it = eq->begin(); it != eq->end(); ++it) - if (contains(*it, a)) // for the case of selects - { hardVar = *it; break; } - if (hardVar != NULL) break; - } + inline static Expr simplifyArithm (Expr exp, bool keepRedundandDisj = false, bool keepRedundandConj = false) + { + RW rw(new + SimplifyArithmExpr(exp, keepRedundandDisj, keepRedundandConj)); + return dagVisit (rw, exp); + } - if (hardVar == NULL) continue; + inline static Expr simplifyBool (Expr exp) + { + RW rw(new SimplifyBoolExpr(exp->getFactory())); + return dagVisit (rw, exp); + } - for (auto it = eq->begin(); it != eq->end(); ++it) - { - ExprVector av; - filter (*it, IsConst (), inserter(av, av.begin())); - if (av.size() > 0 && emptyIntersect(av, hardVars) && // don't replace constants and hardVars - emptyIntersect(hardVar, removed) && IsConst()(*it)) - { - removed.insert(*it); - res = replaceAll(res, *it, hardVar); - toRepeat = true; - } - } - free(eq); - } - res = simplifyBool(res); - if (toRepeat) - { - getConj(res, cnjs); - return simpEquivClasses(hardVars, cnjs, efac); - } - return res; + inline static void simplify(function foo, ExprSet& exps){ + ExprSet expsn; + for (auto e : exps) + { + e = foo(e); + if (!isOpX(e)) + expsn.insert(e); } + exps = expsn; + } - struct SimplifyQuantsExpr + inline static void simplify(ExprSet& exps, bool arr = true) + { + if (exps.empty()) return; + simplify([](Expr in){ return simplifyArithm(in, false, false); }, exps); + simplify(simplifyBool, exps); + if (arr && containsOp(conjoin(exps, (*exps.begin())->getFactory()))) { - SimplifyQuantsExpr () {}; - - Expr operator() (Expr exp) - { - if (isOpX(exp) || isOpX(exp)) - { - ExprVector args; - for (int i = 0; i < exp->arity() - 1; i++) - { - Expr v = exp->arg(i); - if (contains(exp->last(), v)) - args.push_back(v); - } - if (args.empty()) return exp->last(); - args.push_back(exp->last()); - if (isOpX(exp)) return mknary(args); - else return mknary(args); - } - return exp; - } - }; + simplify(simplifyArr, exps); + simplify(exps, false); // arrays may introduce additional arithm/bool structures + } + } - inline static Expr simplifyQuants (Expr exp) + // helper used in `constantPropagationRec`: + template static bool contradictionCheck(Expr bc, Expr defVal, Range& hardVars, + ExprSet& cnjs, ExprSet& toInsertHard, ExprMap& repls) + { + if (emptyIntersect(bc, hardVars)) { - RW rw(new SimplifyQuantsExpr()); - return dagVisit (rw, exp); + if (repls[bc] == NULL) repls[bc] = defVal; + else if (repls[bc] != defVal) + { + cnjs.clear(); + cnjs.insert(mk(bc->getFactory())); // contradiction is found, like b /\ ~b + return true; + } + // otherwise, the constraint is already there } + else toInsertHard.insert(isOpX(defVal) ? bc : mk(bc)); + return false; + } - void getQVars (Expr exp, map& vars); - - template static Expr weakenForVars(Expr fla, Range& vars) + template static void constantPropagationRec(Range& hardVars, ExprSet& cnjs, ExprMap& repls, bool doArithm) + { + ExprSet toInsert, toInsertHard; + for (auto it = cnjs.begin(); it != cnjs.end(); ) { - ExprSet cnj; - getConj(fla, cnj); -// ineqMerger(cnj, true); + Expr a = *it; + if (isOpX(a)) + { + it = cnjs.erase(it); + continue; + } + if (isOpX(a)) + { + cnjs.clear(); + cnjs.insert(mk(a->getFactory())); + return; + } + + if (isOpX(a)) + { + Expr lhs = a->left(); - for (auto it = cnj.begin(); it != cnj.end(); ) + if (isOpX(lhs)) a = a->right(); + else if (isOpX(lhs)) { - ExprVector av; - filter (*it, bind::IsConst (), inserter(av, av.begin())); - map qv; - getQVars (*it, qv); - for (auto & a : qv) - for (auto & b : a.second) - for (auto it1 = av.begin(); it1 != av.end(); ) - if (*it1 == b) { - it1 = av.erase(it1); break; } - else ++it1; - - if (emptyIntersect(av, vars)) ++it; - else it = cnj.erase(it); + it = cnjs.erase(it); + continue; } - return simplifyBool(conjoin(cnj, fla->getFactory())); - } - - template static Expr weakenForHardVars(Expr fla, Range& vars) - { - ExprSet qVars; - filter (fla, bind::IsConst (), inserter (qVars, qVars.begin())); - minusSets(qVars, vars); - return weakenForVars(fla, qVars); - } + } - void getExtraVars(Expr fla, ExprVector& vars, ExprSet& allVars) - { - filter (fla, bind::IsConst (), inserter (allVars, allVars.begin())); - minusSets(allVars, vars); - map qv; - getQVars (fla, qv); - for (auto & q : qv) minusSets(allVars, q.second); - } + if (isOpX(a)) + { + Expr lhs = a->left(); + Expr rhs = a->right(); + if ((isOpX(lhs) && isOpX(rhs)) || + (isOpX(lhs) && isOpX(rhs))) + { + it = cnjs.erase(it); + continue; + } + else if (isOpX(lhs)) a = rhs; + else if (isOpX(lhs)) a = mkNeg(rhs); + else if (isOpX(rhs)) a = lhs; + else if (isOpX(rhs)) a = mkNeg(lhs); + } - bool hasOnlyVars(Expr fla, ExprVector& vars) - { - ExprSet allVars; - getExtraVars(fla, vars, allVars); - return allVars.empty(); - } + if (a->arity() == 2 && (isOpX(a) || isOpX(a))) + { + Expr lhs = a->left(); + Expr rhs = a->right(); + if ((isOpX(lhs) && isOpX(rhs)) || + (isOpX(lhs) && isOpX(rhs))) + { + it = cnjs.erase(it); + continue; + } + else if (isOpX(lhs)) a = mkNeg(rhs); + else if (isOpX(lhs)) a = rhs; + else if (isOpX(rhs)) a = mkNeg(lhs); + else if (isOpX(rhs)) a = lhs; + } - template static int getVarIndex(T e, R& vec) - { - int i = 0; - for (auto & v : vec) - { - if (v == e) return i; - i++; - } - return -1; - } + ExprSet splitted; + getConj(a, splitted); - static Expr rewriteMultAdd (Expr exp); + for (auto c : splitted) + { + if (isOpX(c) && !isBoolConst(c->left())) + c = mkNeg(c->left()); - inline static void getAddTerm (Expr a, ExprVector &terms) // implementation (mutually recursive) - { - if (isOpX(a)) - { - for (auto it = a->args_begin (), end = a->args_end (); it != end; ++it) - { - getAddTerm(*it, terms); - } - } - else if (isOpX(a)) + if (doArithm && isOpX(c)) { - auto it = a->args_begin (); - auto end = a->args_end (); - getAddTerm(*it, terms); - ++it; - for (; it != end; ++it) - { - getAddTerm(additiveInverse(*it), terms); - } - } - else if (isOpX(a)) - { - ExprVector tmp; - getAddTerm(a->left(), tmp); - for (auto & t : tmp) + Expr cons = NULL; + Expr rest = NULL; + if (isNumericConst(c->left())) + { + cons = c->left(); + rest = c->right(); + } + else if (isNumericConst(c->right())) + { + cons = c->right(); + rest = c->left(); + } + + if (cons != NULL && IsConst()(rest)) + { + if (emptyIntersect(rest, hardVars)) { - bool toadd = true; - for (auto it = terms.begin(); it != terms.end(); ) - { - if (*it == t) - { - terms.erase(it); - toadd = false; - break; - } - else ++it; - } - if (toadd) terms.push_back(additiveInverse(t)); + if (repls[rest] == NULL) + repls[rest] = cons; + else if (repls[rest] != cons) + { + cnjs.clear(); + cnjs.insert(mk(a->getFactory())); // contradiction is found, like a = 0 /\ a = 1 + return; + } } + else + toInsertHard.insert(c); + } + else toInsert.insert(c); } - else if (isOpX(a)) + else if (isBoolConst(c)) { - Expr tmp = rewriteMultAdd(a); - if (tmp == a) terms.push_back(a); - else getAddTerm(tmp, terms); + if (contradictionCheck(c, mk(a->getFactory()), hardVars, cnjs, toInsertHard, repls)) + return; } - else if (lexical_cast(a) != "0") + else if (isOpX(c) && isBoolConst(c->left())) { - bool found = false; - for (auto it = terms.begin(); it != terms.end(); ) - { - if (additiveInverse(*it) == a) - { - terms.erase(it); - found = true; - break; - } - else ++it; - } - if (!found) terms.push_back(a); + if (contradictionCheck(c->left(), mk(a->getFactory()), hardVars, cnjs, toInsertHard, repls)) + return; } + else + toInsert.insert(c); + } + + it = cnjs.erase(it); } - struct AddMultDistr + bool toRestart = false; + for (auto & a : toInsert) { - AddMultDistr () {}; + Expr b = replaceAll(a, repls); + if (doArithm) b = simplifyArithm(b); + b = simplifyBool(b); + if (!toRestart && a != b) toRestart = true; + cnjs.insert(b); + } + cnjs.insert(toInsertHard.begin(), toInsertHard.end()); - Expr operator() (Expr exp) - { - if (isOpX(exp) && exp->arity() == 2) - { - Expr lhs = exp->left(); - Expr rhs = exp->right(); - - ExprVector alllhs; - getAddTerm(lhs, alllhs); - - ExprVector allrhs; - getAddTerm(rhs, allrhs); - - ExprVector unf; - for (auto &a : alllhs) - { - for (auto &b : allrhs) - { - unf.push_back(mk(a, b)); - } - } - return mkplus(unf, exp->getFactory()); - } + if (toRestart) + constantPropagationRec(hardVars, cnjs, repls, doArithm); + } - return exp; - } - }; + // simplification based on boolean replacements + template static void constantPropagation(Range& hardVars, ExprSet& cnjs, bool doArithm = true) + { + ExprMap repls; + constantPropagationRec(hardVars, cnjs, repls, doArithm); + } - inline static Expr rewriteMultAdd (Expr exp) + // simplification based on equivalence classes + template static Expr simpEquivClasses(Range& hardVars, ExprSet& cnjs, ExprFactory& efac) + { + set equivs; + Expr res = conjoin(cnjs, efac); + + // get classes + for (auto it = cnjs.begin(); it != cnjs.end(); it = cnjs.erase(it)) { - RW mu(new AddMultDistr()); - return dagVisit (mu, exp); + Expr e = *it; + if (isOpX(e)) + { + bool found = false; + for (auto eq : equivs) + { + bool foundLeft = find(eq->begin(), eq->end(), e->left()) != eq->end(); + bool foundRight = find(eq->begin(), eq->end(), e->right()) != eq->end(); + if (foundLeft && !foundRight) { found = true; eq->push_back(e->right()); break; } + else if (!foundLeft && foundRight) { found = true; eq->push_back(e->left()); break; } + } + if (!found) + { + ExprVector* n = new ExprVector(); + n->push_back(e->left()); + n->push_back(e->right()); + equivs.insert(n); + } + } } - struct FindNonlinAndRewrite + // do rewriting + bool toRepeat = false; + ExprSet removed; + for (auto & eq : equivs) { - ExprVector& vars; - ExprMap& extraVars; - bool arrays; + Expr hardVar = NULL; + for (auto & a : hardVars) + { + for (auto it = eq->begin(); it != eq->end(); ++it) + if (contains(*it, a)) // for the case of selects + { hardVar = *it; break; } + if (hardVar != NULL) break; + } - FindNonlinAndRewrite (ExprVector& _vars, ExprMap& _extraVars, bool _arrays) : - vars(_vars), extraVars(_extraVars), arrays(_arrays) {}; + if (hardVar == NULL) continue; - Expr operator() (Expr t) + for (auto it = eq->begin(); it != eq->end(); ++it) + { + ExprVector av; + filter (*it, IsConst (), inserter(av, av.begin())); + if (av.size() > 0 && emptyIntersect(av, hardVars) && // don't replace constants and hardVars + emptyIntersect(hardVar, removed) && IsConst()(*it)) { - if (isOpX(t)) - { - // using the communativity of multiplication - ExprVector ops; - getMultOps(t, ops); - - ExprVector nonlinPart; - cpp_int linPart = 1; - for (auto & a : ops) - { - ExprVector av; - filter (a, IsConst (), inserter(av, av.begin())); - if (av.size() == 0) - { - linPart = linPart * lexical_cast(a); - continue; - } - for (auto & b : av) - { - if (find(vars.begin(), vars.end(), b) == vars.end()) - { - bool found = false; - for (auto & c : extraVars) if (c.second == b) { found = true; break; } - if (! found) - { -// errs () << "WARNING. Wrong symbol at " << *t << ".\n"; - return mk(t->getFactory()); - } - } - } - nonlinPart.push_back(a); - } - - if (linPart == 0) return mkMPZ (0, t->getFactory()); - if (nonlinPart.size() <= 1) return t; - - Expr multedVars = mkmult(nonlinPart, t->getFactory()); - if (extraVars[multedVars] == NULL) - { - Expr new_name = mkTerm ("__e__" + to_string(extraVars.size()), t->getFactory()); - Expr var = intConst(new_name); - extraVars[multedVars] = var; - } - - if (linPart == 1) return extraVars[multedVars]; - else return mk( mkMPZ(linPart, t->getFactory()), extraVars[multedVars]); - } - else if (isOpX(t) || isOpX(t) || isOpX
(t) || (arrays && isOpX(t))) + { + int indl = getVarIndex(t->left(), vars); + int indr = getVarIndex(t->right(), vars); + + Expr key = t; + if (indl >= 0) key = replaceAll(key, t->left(), vars[indl]); + if (indr >= 0) key = replaceAll(key, t->right(), vars[indr]); - return isOpX(fla) ? conjoin (args, fla->getFactory()) : - disjoin (args, fla->getFactory()); + if (isOpX(t->left()) && lexical_cast(t->left()) == 0) + return mkMPZ (0, t->getFactory()); + + if (extraVars[key] == NULL) + { + Expr new_name = mkTerm ("__e__" + to_string(extraVars.size()), t->getFactory()); + Expr var = intConst(new_name); + extraVars[key] = var; } - return fla; + return extraVars[key]; + } + return t; } + }; - /* find expressions of type expr = arrayVar in e and store it in output */ - inline static void getArrayEqualExprs(Expr e, Expr arrayVar, ExprVector & output) - { - if (e->arity() == 1) { - return; + inline static Expr findNonlinAndRewrite (Expr exp, ExprVector& vars, ExprMap& extraVars, bool arrays = false) + { + RW mu(new FindNonlinAndRewrite(vars, extraVars, arrays)); + return dagVisit (mu, exp); + } - } else if (e->arity() == 2) { - Expr lhs = e->left(); - Expr rhs = e->right(); - if (lhs == arrayVar) { - output.push_back(rhs); - return; + struct FindNonlin : public std::unary_function + { + bool found; - } else if (rhs == arrayVar) { - output.push_back(lhs); - return; - } + FindNonlin () : found (false) {} + + VisitAction operator() (Expr exp) + { + if (found) + { + found = true; + return VisitAction::skipKids (); + } + else if (isOpX(exp) || isOpX(exp) || isOpX
(exp) || isOpX(exp)) + { + int v = 0; + for (unsigned j = 0; j < exp->arity(); j++) + { + Expr q = exp->arg(j); + if (isIntConst(q)) v++; // GF: a simple counter, to extend } - for (int i = 0; i < e->arity(); i++) { - getArrayEqualExprs(e->arg(i), arrayVar, output); + if (v > 1) + { + found = true; + return VisitAction::skipKids (); } + } + return VisitAction::doKids (); } + }; - /* find all expressions in e of type expr = arrayVar */ - /* and replace it by STORE(expr, itr, val) = arrayVar*/ - inline static Expr propagateStore(Expr e, Expr itr, Expr val, Expr arrayVar) - { - Expr retExpr = e; - ExprVector exprvec; - getArrayEqualExprs(e, arrayVar, exprvec); - for (auto & ev : exprvec) - retExpr = replaceAll(retExpr, ev, mk(ev, itr, val)); - return retExpr; - } + inline bool findNonlin (Expr e1) + { + FindNonlin fn; + dagVisit (fn, e1); + return fn.found; + } - struct ITElifter - { - ITElifter () {}; + inline static Expr simplifiedAnd (Expr a, Expr b){ + ExprSet conjs; + getConj(a, conjs); + getConj(b, conjs); + return conjoin(conjs, a->getFactory()); + } - Expr operator() (Expr exp) - { - // currently, can lift only one ITE - if (isOpX(exp) || isOp(exp)) - { - ExprVector vars1; - ExprVector vars2; - Expr cond = NULL; - int i = 0; - if (isOpX(exp)) - { - vars1.push_back(exp->arg(0)); - vars2.push_back(exp->arg(0)); - i = 1; - } - for (; i < exp->arity(); i++) - { - if (isOpX(exp->arg(i)) && cond == NULL) - { - cond = exp->arg(i)->arg(0); - vars1.push_back(exp->arg(i)->arg(1)); - vars2.push_back(exp->arg(i)->arg(2)); - } - else - { - vars1.push_back(exp->arg(i)); - vars2.push_back(exp->arg(i)); - } - } - if (cond == NULL) return exp; - - if (isOpX(exp)) - return mk(cond, mknary(vars1), mknary(vars2)); - else - // isOp(exp) here; thus vars1.size() == vars2.size() == 2 - return mk(cond, reBuildCmp(exp, vars1[0], vars1[1]), reBuildCmp(exp, vars2[0], vars2[1])); - } - return exp; - } - }; + inline int intersectSize(ExprVector& a, ExprVector& b){ + ExprSet c; + for (auto &var: a) + if (find(b.begin(), b.end(), var) != b.end()) c.insert(var); + return c.size(); + } - inline static Expr liftITEs (Expr exp) + Expr projectITE(Expr ite, Expr var) + { + if (isOpX(ite)) { - RW rw(new ITElifter()); - return dagVisit (rw, exp); + return mk(ite->arg(0), projectITE(ite->arg(1), var), projectITE(ite->arg(2), var)); } - - inline static Expr unfoldITE(Expr term) + else { - if (isOpX(term) && isBool (term->last())) - { - Expr iteCond = unfoldITE (term->arg(0)); - Expr iteC1 = unfoldITE (term->arg(1)); - Expr iteC2 = unfoldITE (term->arg(2)); - - return mk( mk(iteCond, iteC1), - mk(mkNeg(iteCond), iteC2)); - } - else if (isOpX(term)) - { - return mkNeg(unfoldITE(term->last())); - } - else if (isOpX(term) || isOpX(term)) - { - ExprSet args; - for (int i = 0; i < term->arity(); i++){ - args.insert(unfoldITE(term->arg(i))); - } - return isOpX(term) ? conjoin (args, term->getFactory()) : - disjoin (args, term->getFactory()); - } - else if (isOp(term)) - { - Expr lhs = term->arg(0); - Expr rhs = term->arg(1); - - if (isOpX(rhs)) - { - Expr iteCond = unfoldITE (rhs->arg(0)); - Expr iteC1 = rhs->arg(1); - Expr iteC2 = rhs->arg(2); - - Expr newCmp1 = unfoldITE (reBuildCmp(term, lhs, iteC1)); - Expr newCmp2 = unfoldITE (reBuildCmp(term, lhs, iteC2)); - - Expr transformed = mk( mk(iteCond, newCmp1), - mk(mkNeg(iteCond), newCmp2)); - - // outs () << " [1b] ---> " << *term << "\n"; - // outs () << " [1e] ---> " << *transformed << "\n\n"; - return transformed; - } - else if (isOpX(lhs)) - { - // GF: symmetric case to the one above - - Expr iteCond = unfoldITE (lhs->arg(0)); - Expr iteC1 = lhs->arg(1); - Expr iteC2 = lhs->arg(2); - - Expr newCmp1 = unfoldITE (reBuildCmp(term, iteC1, rhs)); - Expr newCmp2 = unfoldITE (reBuildCmp(term, iteC2, rhs)); - - Expr transformed = mk( mk(iteCond, newCmp1), - mk(mkNeg(iteCond), newCmp2)); - - // outs () << " [2b] ---> " << *term << "\n"; - // outs () << " [2e] ---> " << *transformed << "\n\n"; - return transformed; - } - if (isOpX(rhs)) - { - bool found = false; - Expr iteArg; - ExprVector newArgs; - for (auto it = rhs->args_begin(), end = rhs->args_end(); it != end; ++it) - { - // make sure that only one ITE is found - - if (!found && isOpX(*it)) - { - found = true; - iteArg = *it; - } - else - { - newArgs.push_back(*it); - } - } - if (found) - { - Expr iteCond = unfoldITE (iteArg->arg(0)); - Expr iteC1 = iteArg->arg(1); - Expr iteC2 = iteArg->arg(2); - - newArgs.push_back(iteC1); - Expr e1 = unfoldITE (reBuildCmp(term, lhs, mknary(newArgs))); // GF: "unfoldITE" gives error... - - newArgs.pop_back(); - newArgs.push_back(iteC2); - Expr e2 = unfoldITE (reBuildCmp(term, lhs, mknary(newArgs))); - - Expr transformed = mk(mk(iteCond, e1), - mk(mkNeg(iteCond),e2)); - - // outs () << " [3b] ---> " << *term << "\n"; - // outs () << " [3e] ---> " << *transformed << "\n\n"; - - return transformed; - } - } - if (isOpX(lhs)) - { - // symmetric to the above case - bool found = false; - Expr iteArg; - ExprVector newArgs; - for (auto it = lhs->args_begin(), end = lhs->args_end(); it != end; ++it) - { - if (!found && isOpX(*it)) - { - found = true; - iteArg = *it; - } - else - { - newArgs.push_back(*it); - } - } - - if (found) - { - Expr iteCond = unfoldITE (iteArg->arg(0)); - Expr iteC1 = iteArg->arg(1); - Expr iteC2 = iteArg->arg(2); - - newArgs.push_back(iteC1); - Expr e1 = unfoldITE (reBuildCmp(term, mknary(newArgs), rhs)); - - newArgs.pop_back(); - newArgs.push_back(iteC2); - Expr e2 = unfoldITE (reBuildCmp(term, mknary(newArgs), rhs)); - - Expr transformed = mk(mk(iteCond,e1), - mk(mkNeg(iteCond),e2)); - - // outs () << " [4b] ---> " << *term << "\n"; - // outs () << " [4e] ---> " << *transformed << "\n\n"; - - return transformed; - } - } - if (isOpX(lhs)) - { - Expr arrVar = lhs->left(); - if (isOpX(arrVar)) - { - Expr ifExpr = unfoldITE(reBuildCmp(term, arrVar->right(), rhs)); - Expr elseExpr = unfoldITE(reBuildCmp(term, arrVar->last(), rhs)); - - ifExpr = propagateStore(ifExpr, lhs->right(), lhs->last(), rhs); - elseExpr = propagateStore(elseExpr, lhs->right(), lhs->last(), rhs); - - Expr condExpr = unfoldITE (arrVar->left()); - Expr retExpr = mk (mk(condExpr, ifExpr), mk(mkNeg(condExpr), elseExpr)); - - return retExpr; - } - } - if (isOpX(rhs)) - { - Expr arrVar = rhs->left(); - if (isOpX(arrVar)) - { - Expr ifExpr = unfoldITE (reBuildCmp(term, arrVar->right(), lhs)); - Expr elseExpr = unfoldITE (reBuildCmp(term, arrVar->last(), lhs)); - - ifExpr = propagateStore(ifExpr, rhs->right(), rhs->last(), lhs); - elseExpr = propagateStore(elseExpr, rhs->right(), rhs->last(), lhs); - - Expr condExpr = unfoldITE (arrVar->left()); - Expr retExpr = mk (mk(condExpr, ifExpr), mk(mkNeg(condExpr), elseExpr)); + ExprSet cnjs; + getConj(ite, cnjs); + for (auto & a : cnjs) + { + if (a->left() == var) return a->right(); + else if (a->right() == var) return a->left(); + } - return retExpr; - } - } - if (isOpX(arrVar->right(), rhs->right()), - mk(exp->right())) - { - Expr cmp = simplifyCmp(mk(ind, exp->right()->right())); - return simplifyIte(mk(cmp, - mk(efac), exp)); - } - return exp; + lhs = replaceAll(*it1, (*it1)->last(), d); + c1 = lexical_cast(d); + plusOpsLeft.erase(it1); + for (auto & a : plusOpsLeft) plusOpsRight.push_back(additiveInverse(a)); + plusOpsLeft.clear(); + break; } - }; - - inline static Expr rewriteSelectStore(Expr exp); + } + ++it1; + } + if (!plusOpsLeft.empty() || lhs == NULL) return fla; - struct SelectStoreRewriter - { - SelectStoreRewriter () {}; + Expr rhs = mkplus(plusOpsRight, fla->getFactory()); + rhs = simplifyArithm(rhs); + if (isNumericConst(rhs)) c2 = lexical_cast(rhs); + else return fla; - Expr operator() (Expr exp) - { - if (isOpX(exp->left()->left(), exp->right())); - } + ExprSet dsjs; + for (auto i = 0; i < c1; i++) + if (evaluateCmpConsts(fla, i, c2)) + dsjs.insert(mk(lhs, mkMPZ(i, fla->getFactory()))); - // to avoid this, try unfoldITE first - if (containsOp(exp)) return exp; + fla = disjoin(dsjs, fla->getFactory()); + return fla; + } - Expr sel, val; - if (isOpX(exp)) - { - if (isOpX(exp->right())) { sel = exp->right(); val = exp->left(); } - if (isOpX(exp->left())) { sel = exp->left(); val = exp->right(); } - } + inline static Expr convertToGEandGT(Expr fla) + { + Expr lhs = fla->left(); + Expr rhs = fla->right(); - if (sel != NULL) - { - Expr main = mk(sel->last(), mk(exp)) - { - if (sels[exp] != NULL) return sels[exp]; - Expr repl = intConst(mkTerm ("sel_" + lexical_cast(sels.size()), exp->getFactory())); - sels[exp] = repl; - return repl; - } - return exp; - } - }; + if (isOpX(fla)) return mk(rhs, lhs); - inline static Expr replaceSelects(Expr exp, ExprMap& sels) + if (isOpX(fla)) { - RW a(new SelectReplacer(sels)); - return dagVisit (a, exp); + if (isBool(lhs)) return + mk(mk(lhs, rhs), + mk(mkNeg(lhs), mkNeg(rhs))); + else if (isNumeric(lhs)) { + // heuristic for the divisibility constraints + if (isOpX(rhs) || isOpX(lhs)) { + return rewriteDivConstraints(fla); + } + else + return mk(mk(lhs, rhs), mk(rhs, lhs)); + } + else return fla; } - struct QuantifiedVarsFilter : public std::unary_function + if (isOpX(fla)) { - ExprSet& vars; - - QuantifiedVarsFilter (ExprSet& _vars): vars(_vars) {}; - - VisitAction operator() (Expr exp) - { - if (isOp(exp) || isOp(exp)) - { - for (int i = 0; i < exp->arity() - 1; i++) - { - vars.insert(fapp(exp->arg(i))); - } - } - return VisitAction::doKids (); + if (isBool(lhs)) return + mk(mk(lhs, mkNeg(rhs)), + mk(mkNeg(lhs), rhs)); + else if (isNumeric(lhs)) { + if (isOpX(rhs) || isOpX(lhs)) { + return rewriteDivConstraints(fla); } - }; - - inline void getQuantifiedVars (Expr exp, ExprSet& vars) - { - QuantifiedVarsFilter qe (vars); - dagVisit (qe, exp); + else return mk( + mk(lhs, rhs), mk(rhs, lhs)); + } + else return fla; } - inline static void getQuantifiedFormulas (Expr a, ExprSet &flas) + if (isOpX(fla) || isOpX(fla)) { - if (isOpX(a) || isOpX(a)) - flas.insert(a); - else // TODO: remove/generalize later - for (unsigned i = 0; i < a->arity(); i++) - getQuantifiedFormulas(a->arg(i), flas); + ExprSet args; + for (int i = 0; i < fla->arity(); i++){ + args.insert(convertToGEandGT(fla->arg(i))); + } + + return isOpX(fla) ? conjoin (args, fla->getFactory()) : + disjoin (args, fla->getFactory()); } + return fla; + } - template static Expr mkQFla (Expr def, Range& vars, bool forall = false) - { - if (vars.empty()) return def; - ExprVector args; - for (auto & a : vars) args.push_back(a->last()); - args.push_back(def); - if (forall) return mknary(args); - else return mknary(args); + /* find expressions of type expr = arrayVar in e and store it in output */ + inline static void getArrayEqualExprs(Expr e, Expr arrayVar, ExprVector & output) + { + if (e->arity() == 1) { + return; + + } else if (e->arity() == 2) { + Expr lhs = e->left(); + Expr rhs = e->right(); + if (lhs == arrayVar) { + output.push_back(rhs); + return; + + } else if (rhs == arrayVar) { + output.push_back(lhs); + return; + } } - static Expr mkQFla (Expr def, bool forall = false) - { - ExprSet vars; - filter (def, IsConst (), inserter(vars, vars.begin())); - return mkQFla(def, vars, forall); + for (int i = 0; i < e->arity(); i++) { + getArrayEqualExprs(e->arg(i), arrayVar, output); } + } + + /* find all expressions in e of type expr = arrayVar */ + /* and replace it by STORE(expr, itr, val) = arrayVar*/ + inline static Expr propagateStore(Expr e, Expr itr, Expr val, Expr arrayVar) + { + Expr retExpr = e; + ExprVector exprvec; + getArrayEqualExprs(e, arrayVar, exprvec); + for (auto & ev : exprvec) + retExpr = replaceAll(retExpr, ev, mk(ev, itr, val)); + return retExpr; + } + + struct ITElifter + { + ITElifter () {}; - // rewrite just equalities - template static Expr simpleQE(Expr exp, Range& quantified) + Expr operator() (Expr exp) { - ExprFactory& efac = exp->getFactory(); - ExprSet cnjsSet, dsjsSet; - getDisj(exp, dsjsSet); - if (dsjsSet.size() > 1) + // currently, can lift only one ITE + if (isOpX(exp) || isOp(exp)) + { + ExprVector vars1; + ExprVector vars2; + Expr cond = NULL; + int i = 0; + if (isOpX(exp)) { - ExprSet newDsjs; - for (auto & d : dsjsSet) newDsjs.insert(simpleQE(d, quantified)); - return disjoin(newDsjs, efac); + vars1.push_back(exp->arg(0)); + vars2.push_back(exp->arg(0)); + i = 1; } - - getConj(exp, cnjsSet); - ExprVector cnjs; - ineqMerger(cnjsSet, true); - cnjs.insert(cnjs.end(), cnjsSet.begin(), cnjsSet.end()); - for (auto & var : quantified) + for (; i < exp->arity(); i++) { - ExprSet eqs; - - for (unsigned it = 0; it < cnjs.size(); ) - { - Expr cnj = cnjs[it]; - if (!isOpX(cnj) || !contains(cnj, var)) - { it++; continue;} - - Expr normalized = cnj; - if (isNumeric(var) && isNumeric(cnj->left())) - { - normalized = simplifyArithm( - mk(mk(cnj->arg(0), additiveInverse(cnj->arg(1))), - mkMPZ (0, efac))); - normalized = ineqSimplifier(var, normalized); - } - else if (var == normalized->right()) - { - normalized = mk(var, normalized->left()); - } - - // after the normalization, var can be eliminated - if (!isOpX(normalized) || !contains(normalized, var)) - { it++; continue;} - - if (var == normalized->left()) - { - eqs.insert(normalized->right()); - cnjs.erase (cnjs.begin()+it); - continue; - } - else if (isOpX(normalized->left()) && isOpX(normalized->left()->left())) - { - cnjs.push_back(mk(mk(normalized->right(), normalized->left()->left()), - mkMPZ (0, efac))); - } - else if (isArray(var) && containsNum(exp, var) == 1) - { - Expr store = NULL; - if (isOpX(normalized->right()) && var == normalized->right()->left() && - emptyIntersect(normalized->left(), quantified)) - { - // one level of storing (to be extended) - store = normalized; - } - else if (isOpX(normalized->left()) && var == normalized->left()->left() && - emptyIntersect(normalized->right(), quantified)) - { - normalized = mk(normalized->right(), normalized->left()); - store = normalized; - } - - if (store != NULL) - { - // assume "store" = (A = store(var, x, y)) - cnjs[it] = mk(mk(a) || isOpX(a)){ - cntrs.insert(a->right()); - if (isOpX(a)) - getCounters(a->left(), cntrs); - } else { - for (unsigned i = 0; i < a->arity(); i++) - getCounters(a->arg(i), cntrs); + ExprSet args; + for (int i = 0; i < term->arity(); i++){ + args.insert(unfoldITE(term->arg(i))); } + return isOpX(term) ? conjoin (args, term->getFactory()) : + disjoin (args, term->getFactory()); } - - inline static void getSelects (Expr a, ExprSet &sels) + else if (isOp(term)) { - if (isOpX(rhs)) + { + Expr arrVar = rhs->left(); + if (isOpX(arrVar)) + { + return unfoldITE (reBuildCmp(term, + mk(arrVar->left(), + mk(arrVar->last(), rhs->right())), lhs)); + } + } + } + return term; + } - if (lin_coms.size() == 0) return disjoin(dsjs, efac); - - for (auto &lin_com : lin_coms) { - - cpp_int cur_min_gt; - cpp_int cur_min_ge; - cpp_int cur_max_lt; - cpp_int cur_max_le; - - bool cur_min_gt_bl = false; - bool cur_min_ge_bl = false; - bool cur_max_lt_bl = false; - bool cur_max_le_bl = false; - - set all_eqs; - - for (auto it = newDsjs.begin(); it != newDsjs.end(); ) { - auto d = *it; - - if (!isOp(d) || - d->arg(0) != lin_com || - !isOpX(d->arg(1))) { - ++it; - continue; - } - - cpp_int c = lexical_cast(d->arg(1)); - - if (isOpX(d)) { - all_eqs.insert(c); - } - if (isOpX(d)) { - cur_max_le = cur_max_le_bl ? max(cur_max_le, c) : c; - cur_max_le_bl = true; - } - if (isOpX(d)) { - cur_min_ge = cur_min_ge_bl ? min(cur_min_ge, c) : c; - cur_min_ge_bl = true; - } - if (isOpX(d)) { - cur_max_lt = cur_max_lt_bl ? max(cur_max_lt, c) : c; - cur_max_lt_bl = true; - } - if (isOpX(d)) { - cur_min_gt = cur_min_gt_bl ? min(cur_min_gt, c) : c; - cur_min_gt_bl = true; - } - if (isOpX(d)) { - cur_min_gt = cur_min_gt_bl ? min(cur_min_gt, c) : c; - cur_max_lt = cur_max_lt_bl ? max(cur_max_lt, c) : c; - cur_min_gt_bl = true; - cur_max_lt_bl = true; - } - if (keep_redundand) it++; - else newDsjs.erase (it++); - } - - if (cur_max_le_bl) - while (true) { - auto tmp = cur_max_le; - for (auto it = all_eqs.begin(); it != all_eqs.end(); ) { - if (*it == cur_max_le + 1) { - cur_max_le++; - if (keep_redundand) - newDsjs.insert(mk(lin_com, mkMPZ (cur_max_le, efac))); - it = all_eqs.erase(it); - } else if (*it <= cur_max_le) { // remove redundand, e.g., (x = 3 \/ x <= 5) - if (keep_redundand) - newDsjs.insert(mk(lin_com, mkMPZ (*it, efac))); - it = all_eqs.erase(it); - } - else ++it; - } - if (tmp == cur_max_le) break; - } - - if (cur_max_lt_bl) - while (true) { - auto tmp = cur_max_lt; - for (auto it = all_eqs.begin(); it != all_eqs.end(); ) { - if (*it == cur_max_lt) { - cur_max_lt++; - if (keep_redundand) - newDsjs.insert(mk(lin_com, mkMPZ (cur_max_lt, efac))); - it = all_eqs.erase(it); - } else if (*it < cur_max_lt) { // remove redundand, e.g., (x = 4 \/ x < 5) - if (keep_redundand) - newDsjs.insert(mk(lin_com, mkMPZ (*it, efac))); - it = all_eqs.erase(it); - } - else ++it; - } - if (tmp == cur_max_lt) break; - } - - if (cur_min_ge_bl) - while (true) { - auto tmp = cur_min_ge; - for (auto it = all_eqs.begin(); it != all_eqs.end(); ) { - if (*it == cur_min_ge - 1) { - cur_min_ge--; - if (keep_redundand) - newDsjs.insert(mk(lin_com, mkMPZ (cur_min_ge, efac))); - it = all_eqs.erase(it); - } else if (*it >= cur_min_ge) { // remove redundand, e.g., (x = 9 \/ x >= 5) - if (keep_redundand) - newDsjs.insert(mk(lin_com, mkMPZ (*it, efac))); - it = all_eqs.erase(it); - } - else ++it; - } - if (tmp == cur_min_ge) break; - } - - if (cur_min_gt_bl) - while (true) { - auto tmp = cur_min_gt; - for (auto it = all_eqs.begin(); it != all_eqs.end(); ) { - if (*it == cur_min_gt) { - cur_min_gt--; - if (keep_redundand) - newDsjs.insert(mk(lin_com, mkMPZ (cur_min_gt, efac))); - it = all_eqs.erase(it); - } else if (*it > cur_min_gt) { // remove redundand, e.g., (x = 6 \/ x > 5) - if (keep_redundand) - newDsjs.insert(mk(lin_com, mkMPZ (*it, efac))); - it = all_eqs.erase(it); - } - else ++it; - } - if (tmp == cur_min_gt) break; - } - - for (auto c : all_eqs) { - newDsjs.insert (mk(lin_com, mkMPZ (c, efac))); - } + struct MoveInsideITEr + { + MoveInsideITEr () {}; - if ((cur_min_gt_bl && cur_max_lt_bl && cur_min_gt <= cur_max_lt - 1) || - (cur_min_ge_bl && cur_max_lt_bl && cur_min_ge <= cur_max_lt) || - (cur_min_gt_bl && cur_max_le_bl && cur_min_gt <= cur_max_le) || - (cur_min_ge_bl && cur_max_le_bl && cur_min_ge <= cur_max_le + 1)) - return mk(efac); - - if (cur_min_gt_bl && cur_max_lt_bl && cur_min_gt == cur_max_lt && newDsjs.empty()) - { - Expr res = mk(lin_com, mkMPZ (cur_max_lt, efac)); - if (keep_redundand) newDsjs.insert(res); - else return res; - } + Expr operator() (Expr exp) + { + if (isOpX(exp)) + { + Expr ite = exp->arg(0); + if (isOpX(ite)) + { + return mk(ite->arg(0), + mk(ite->arg(1), exp->arg(1)), + mk(ite->arg(2), exp->arg(1))); + } + } + if (isOpX(exp)) + { + ExprVector args; + Expr ite; + for (auto it = exp->args_begin(), end = exp->args_end(); it != end; ++it) + { + if (isOpX(*it)) + { + if (ite != NULL) return exp; + ite = *it; + } + else + { + args.push_back(*it); + } + } - if (cur_min_ge_bl && cur_max_lt_bl && cur_min_ge - 1 == cur_max_lt && newDsjs.empty()) - { - Expr res = mk(lin_com, mkMPZ (cur_max_lt, efac)); - if (keep_redundand) newDsjs.insert(res); - else return res; - } + if (ite == NULL) return exp; - if (cur_min_gt_bl && cur_max_le_bl && cur_min_gt - 1 == cur_max_le && newDsjs.empty()) - { - Expr res = mk(lin_com, mkMPZ (cur_min_gt, efac)); - if (keep_redundand) newDsjs.insert(res); - else return res; - } + Expr multiplier = mkmult (args, exp->getFactory()); + return mk(ite->arg(0), + mk(multiplier, ite->arg(1)), + mk(multiplier, ite->arg(2))); + } - if (cur_min_ge_bl && cur_max_le_bl && cur_min_ge - 2 == cur_max_le && newDsjs.empty()) - { - Expr res = mk(lin_com, mkMPZ (cur_min_ge - 1, efac)); - if (keep_redundand) newDsjs.insert(res); - else return res; - } + return exp; + } + }; - if (cur_max_le_bl && cur_max_lt_bl) { - if (cur_max_le >= cur_max_lt) { - newDsjs.insert(mk(lin_com, mkMPZ (cur_max_le, efac))); - } - else { - newDsjs.insert(mk(lin_com, mkMPZ (cur_max_lt, efac))); - } - } - else { - if (cur_max_le_bl) { - newDsjs.insert(mk(lin_com, mkMPZ (cur_max_le, efac))); - } - if (cur_max_lt_bl) { - newDsjs.insert(mk(lin_com, mkMPZ (cur_max_lt, efac))); - } - } + inline static Expr moveInsideITE (Expr exp) + { + RW a(new MoveInsideITEr()); + return dagVisit (a, exp); + } - if (cur_min_ge_bl && cur_min_gt_bl) { - if (cur_min_ge <= cur_min_gt) { - newDsjs.insert(mk(lin_com, mkMPZ (cur_min_ge, efac))); - } - else { - newDsjs.insert(mk(lin_com, mkMPZ (cur_min_gt, efac))); - } - } - else { - if (cur_min_ge_bl) { - newDsjs.insert(mk(lin_com, mkMPZ (cur_min_ge, efac))); - } - if (cur_min_gt_bl) { - newDsjs.insert(mk(lin_com, mkMPZ (cur_min_gt, efac))); - } - } - } + struct RAVSUBEXPR: public std::unary_function + { + Expr s; + Expr t; + Expr p; - return disjoin(newDsjs, efac); + RAVSUBEXPR (Expr _s, Expr _t, Expr _p) : s(_s), t(_t), p(_p) {} + VisitAction operator() (Expr exp) const + { + return exp == s ? + VisitAction::changeTo (replaceAll(exp, t, p)) : + VisitAction::doKids (); } + }; - inline static Expr normalizeAtom(Expr fla, ExprVector& intVars) - { - if (isOp(fla) && isNumeric(fla->left())) - { - Expr lhs = fla->left(); - Expr rhs = fla->right(); + // -- replace all occurrences of t by p in a subexpression s of exp + inline Expr replaceInSubexpr (Expr exp, Expr s, Expr t, Expr p) + { + RAVSUBEXPR rav(s, t, p); + return dagVisit (rav, exp); + } - ExprVector all; - ExprVector allrhs; + struct NegAndRewriter + { + NegAndRewriter () {}; - getAddTerm(lhs, all); - getAddTerm(rhs, allrhs); - for (auto & a : allrhs) - { - all.push_back(additiveInverse(a)); - } - ExprSet newlhs; - for (auto &v : intVars) - { - cpp_int coef = 0; - string s1 = lexical_cast(v); - for (auto it = all.begin(); it != all.end();) - { - if (!contains(*it, v)) { ++it; continue; } - string s2 = lexical_cast(*it); - - if (s1 == s2) - { - coef++; - it = all.erase(it); - } - else if (isOpX(*it)) - { - string s3 = lexical_cast((*it)->left()); - if (s1 == s3) - { - coef--; - it = all.erase(it); - } - else - { - ++it; - } - } - else if (isOpX(*it)) - { - ExprVector ops; - getMultOps (*it, ops); - - cpp_int c = 1; - bool success = true; - for (auto & a : ops) - { - if (s1 == lexical_cast(a)) - { - // all good! - } - else if (isOpX(a)) - { - c = c * lexical_cast(a); - } - else - { - ++it; - success = false; - break; - } - } - if (success) - { - coef += c; - it = all.erase(it); - } - } - else - { - ++it; - } - } - if (coef != 0) newlhs.insert(mk(mkMPZ(coef, fla->getFactory()), v)); - } + Expr operator() (Expr exp) + { + if (isOpX(exp) && isOpX(exp->arg(0))) + { + ExprSet cnjs; + getConj(exp->arg(0), cnjs); + ExprSet neggedCnjs; + for (auto & c : cnjs) neggedCnjs.insert(mkNeg(c)); + return disjoin(neggedCnjs, exp->getFactory()); + } + return exp; + } + }; - bool success = true; - cpp_int intconst = 0; + struct SelectStoreRewriterHelpRepairer + { + Expr ind; + ExprFactory& efac; + SelectStoreRewriterHelpRepairer (Expr _ind) : + ind(_ind), efac(ind->getFactory()) {}; - for (auto &e : all) - { - if (isOpX(e)) - { - intconst += lexical_cast(e); - } - else if (isOpX(e)) - { - // GF: sometimes it fails (no idea why) - cpp_int thisTerm = 1; - for (auto it = e->args_begin (), end = e->args_end (); it != end; ++it) - { - if (isOpX(*it)) - thisTerm *= lexical_cast(*it); - else - success = false; - } - intconst += thisTerm; - } - else - { - success = false; - } - } + Expr operator() (Expr exp) + { + if (isOpX(exp) && isOpX(exp) && isOpX(exp->left())) + { + if (exp->right() == exp->left()->right()) + return exp->left()->last(); + else + return mk(mk(exp->right(), exp->left()->right()), + exp->left()->last(), mk(val, sel->right())); + if (containsOp(sel->left())) { - if (!isOpX(ex->right())) return false; - ExprVector addt; - getAddTerm (ex->left(), addt); - for (auto & t : addt) - { - if (isOpX(t) && t->arity() == 2 && - isOpX(t->left()) && !isOpX(t->right())) - intCoefs.insert(lexical_cast (t->left())); - else return false; - } + Expr nested = rewriteSelectStore(mk(val, sel->left())); + RW + a(new SelectStoreRewriterHelpRepairer(sel->right())); + return mk(dagVisit (a, nested), main); } - return res; + return main; + } + return exp; } + }; + + struct SelectReplacer : public std::unary_function + { + ExprMap& sels; + SelectReplacer (ExprMap& _sels) : sels(_sels) {}; - inline static bool getLinCombConsts(Expr ex, set& intConsts) + Expr operator() (Expr exp) { - if (isOpX(ex)) - { - bool res = true; - for (auto it = ex->args_begin (), end = ex->args_end (); it != end; ++it) - res &= getLinCombConsts(*it, intConsts); - return res; - } - else if (isOp(ex)) // assuming the lin.combination is on the left side - { - if (isOpX(ex->right())) - intConsts.insert(lexical_cast (ex->right())); - else - return false; - } - return true; + if (isOpX(arrVar, indVar), valVar)); - return arrVar; + ExprSet newDsjs; + for (auto & d : dsjsSet) newDsjs.insert(simpleQE(d, quantified)); + return disjoin(newDsjs, efac); } - struct TransitionOverapprox + getConj(exp, cnjsSet); + ExprVector cnjs; + ineqMerger(cnjsSet, true); + cnjs.insert(cnjs.end(), cnjsSet.begin(), cnjsSet.end()); + for (auto & var : quantified) { - ExprVector& srcVars; - ExprVector& dstVars; + ExprSet eqs; - TransitionOverapprox (ExprVector& _srcVars, ExprVector& _dstVars): - srcVars(_srcVars), dstVars(_dstVars) {}; + for (unsigned it = 0; it < cnjs.size(); ) + { + Expr cnj = cnjs[it]; + if (!isOpX(cnj) || !contains(cnj, var)) + { it++; continue;} - Expr operator() (Expr exp) + Expr normalized = cnj; + if (isNumeric(var) && isNumeric(cnj->left())) { - if (isOp(exp) && !containsOp(exp)) - { - ExprSet tmp; - if (isOpX(exp->left())) - { - processNestedStores(exp->left(), tmp); - return conjoin(tmp, exp->getFactory()); - } - else if (isOpX(exp->right())) - { - processNestedStores(exp->right(), tmp); - return conjoin(tmp, exp->getFactory()); - } - - ExprVector av; - filter (exp, IsConst (), inserter(av, av.begin())); - if (!emptyIntersect(av, srcVars) && !emptyIntersect(av, dstVars)) - return mk(exp->getFactory()); - } - else if (isOpX(exp)) - { - ExprSet newDsjs; - for (unsigned i = 0; i < exp->arity (); i++) - { - ExprSet cnjs; - getConj(exp->arg(i), cnjs); - map sels; - bool allselects = true; - bool noselects = true; - for (auto & a : cnjs) - { - sels[a] = containsOp(store->left(), store->right()->right()), + store->right()->last()); + } + it++; + continue; + } + else + { it++; continue;} - AccessRetriever (ExprSet& _accs) : accs(_accs) {}; +// errs() << "WARNING: COULD NOT NORMALIZE w.r.t. " << *var << ": " +// << *normalized << " [[ " << *cnj << " ]]\n"; - VisitAction operator() (Expr exp) - { - if ((isOpX(exp) && isOpX(exp) || isOpX(exp)) && - !(containsOp(exp) || containsOp(exp)) && - findMatching (pattern, exp, vars, matching)) - { - found = true; - matchingSet.insert(matching); - } - return VisitAction::doKids (); + if (!isOp(d) || + d->arg(0) != lin_com || + !isOpX(d->arg(1))) { + ++it; + continue; } - }; - - inline bool findMatchingSubexpr (Expr pattern, Expr exp, ExprVector& vars, std::set& matchingSet) - { - SubexprMatcher fn (pattern, vars, matchingSet); - dagVisit (fn, exp); - return fn.found; - } - - inline static bool evalLeq(Expr a, Expr b) - { - if (isOpX(a) && isOpX(b)) - return (lexical_cast(a) <= lexical_cast(b)); - else return (a == b); // GF: to extend - } - inline static void mutateHeuristic (Expr exp, ExprSet& guesses /*, int bnd = 100*/) - { - exp = unfoldITE(exp); - ExprSet cnjs; - getConj(exp, cnjs); - ExprSet ineqs; - ExprSet eqs; - ExprSet disjs; - for (auto c : cnjs) - { - if (isOpX(c)) c = mkNeg(c->left()); + cpp_int c = lexical_cast(d->arg(1)); - if (isOpX(c)) - { - if (isNumeric(c->left())) - { - eqs.insert(c); - ineqs.insert(mk(c->right(), c->left())); - ineqs.insert(mk(c->left(), c->right())); - } - else - { - guesses.insert(simplifyArithm(c)); - } - } - else if (isOp(c)) - { - if (isOpX(c)) ineqs.insert(c); - else if (isOpX(c)) ineqs.insert(mk(c->right(), c->left())); - else if (isOpX(c)) - { - if (isOpX(c->left())) - ineqs.insert(mk(c->right(), mkMPZ (lexical_cast(c->left())-1, exp->getFactory()))); - else if(isOpX(c->right())) - ineqs.insert(mk(mkMPZ (lexical_cast(c->right())+1, exp->getFactory()), c->left())); - else - ineqs.insert(mk(c->right(), mk(c->left(), mkMPZ (1, exp->getFactory())))); - } - else if (isOpX(c)) - { - if (isOpX(c->left())) - ineqs.insert(mk(mkMPZ (lexical_cast(c->left())+1, exp->getFactory()), c->right())); - else if(isOpX(c->right())) - ineqs.insert(mk(c->left(), mkMPZ (lexical_cast(c->right())-1, exp->getFactory()))); - else - ineqs.insert(mk(c->left(), mk(c->right(), mkMPZ (1, exp->getFactory())))); - } - else - { - assert (isOpX(c)); - guesses.insert(c); - } - } -/* else if (isOpX(c)) - { - ExprSet terms; - getDisj(c, terms); - ExprSet newTerms; - for (auto t : terms) - { - if (newTerms.size() > 2) continue; // don't consider large disjunctions - if (isOpX(t)) t = mkNeg(t->left()); - if (!isOp(t)) continue; - if (!isNumeric(t->left())) continue; - newTerms.insert(t); + if (isOpX(d)) { + all_eqs.insert(c); } - c = disjoin(newTerms, c->getFactory()); - disjs.insert(c); - guesses.insert(c); - }*/ - else guesses.insert(c); + if (isOpX(d)) { + cur_max_le = cur_max_le_bl ? max(cur_max_le, c) : c; + cur_max_le_bl = true; } + if (isOpX(d)) { + cur_min_ge = cur_min_ge_bl ? min(cur_min_ge, c) : c; + cur_min_ge_bl = true; + } + if (isOpX(d)) { + cur_max_lt = cur_max_lt_bl ? max(cur_max_lt, c) : c; + cur_max_lt_bl = true; + } + if (isOpX(d)) { + cur_min_gt = cur_min_gt_bl ? min(cur_min_gt, c) : c; + cur_min_gt_bl = true; + } + if (isOpX(d)) { + cur_min_gt = cur_min_gt_bl ? min(cur_min_gt, c) : c; + cur_max_lt = cur_max_lt_bl ? max(cur_max_lt, c) : c; + cur_min_gt_bl = true; + cur_max_lt_bl = true; + } + if (keep_redundand) it++; + else newDsjs.erase (it++); + } - for (auto & z : eqs) - { - for (auto & in : ineqs) - { - //if (bnd > guesses.size()) return; - if (!emptyIntersect(z, in)) continue; - ineqs.insert(mk(mk(in->left(), z->left()), mk(in->right(), z->right()))); - ineqs.insert(mk(mk(in->left(), z->right()), mk(in->right(), z->left()))); + if (cur_max_le_bl) + while (true) { + auto tmp = cur_max_le; + for (auto it = all_eqs.begin(); it != all_eqs.end(); ) { + if (*it == cur_max_le + 1) { + cur_max_le++; + if (keep_redundand) + newDsjs.insert(mk(lin_com, mkMPZ (cur_max_le, efac))); + it = all_eqs.erase(it); + } else if (*it <= cur_max_le) { // remove redundand, e.g., (x = 3 \/ x <= 5) + if (keep_redundand) + newDsjs.insert(mk(lin_com, mkMPZ (*it, efac))); + it = all_eqs.erase(it); } - - for (auto & d : disjs) - { - //if (bnd > guesses.size()) return; - ExprSet terms; - getDisj(d, terms); - ExprSet newTerms; - for (auto c : terms) - { - if (isOp(c)) - { - if (emptyIntersect(z, c)) - newTerms.insert(reBuildCmp(c, - mk(c->left(), z->left()), mk(c->right(), z->right()))); - else newTerms.insert(c); - } - else newTerms.insert(c); - } - if (newTerms.size() > 0) - guesses.insert(disjoin(newTerms, d->getFactory())); + else ++it; + } + if (tmp == cur_max_le) break; + } + + if (cur_max_lt_bl) + while (true) { + auto tmp = cur_max_lt; + for (auto it = all_eqs.begin(); it != all_eqs.end(); ) { + if (*it == cur_max_lt) { + cur_max_lt++; + if (keep_redundand) + newDsjs.insert(mk(lin_com, mkMPZ (cur_max_lt, efac))); + it = all_eqs.erase(it); + } else if (*it < cur_max_lt) { // remove redundand, e.g., (x = 4 \/ x < 5) + if (keep_redundand) + newDsjs.insert(mk(lin_com, mkMPZ (*it, efac))); + it = all_eqs.erase(it); } - } - - for (auto & a : ineqs) guesses.insert(simplifyArithm(a)); - // guesses.insert(ineqs.begin(), ineqs.end()); - - for (auto & e : eqs) - { - for (auto & in : ineqs) - { - //if (bnd > guesses.size()) return; - assert(isOpX(in)); - Expr g; - if (in->left() == e->left() && !evalLeq(e->right(), in->right())) - g = mk(e->right(), in->right()); - else if (in->left() == e->right() && !evalLeq(e->left(), in->right())) - g = mk(e->left(), in->right()); - else if (in->right() == e->left() && !evalLeq(in->left(), e->right())) - g = mk(in->left(), e->right()); - else if (in->right() == e->right() && !evalLeq(in->left(), e->left())) - g = mk(in->left(), e->left()); - - if (g != NULL) guesses.insert(simplifyArithm(g)); + else ++it; + } + if (tmp == cur_max_lt) break; + } + + if (cur_min_ge_bl) + while (true) { + auto tmp = cur_min_ge; + for (auto it = all_eqs.begin(); it != all_eqs.end(); ) { + if (*it == cur_min_ge - 1) { + cur_min_ge--; + if (keep_redundand) + newDsjs.insert(mk(lin_com, mkMPZ (cur_min_ge, efac))); + it = all_eqs.erase(it); + } else if (*it >= cur_min_ge) { // remove redundand, e.g., (x = 9 \/ x >= 5) + if (keep_redundand) + newDsjs.insert(mk(lin_com, mkMPZ (*it, efac))); + it = all_eqs.erase(it); + } + else ++it; + } + if (tmp == cur_min_ge) break; + } + + if (cur_min_gt_bl) + while (true) { + auto tmp = cur_min_gt; + for (auto it = all_eqs.begin(); it != all_eqs.end(); ) { + if (*it == cur_min_gt) { + cur_min_gt--; + if (keep_redundand) + newDsjs.insert(mk(lin_com, mkMPZ (cur_min_gt, efac))); + it = all_eqs.erase(it); + } else if (*it > cur_min_gt) { // remove redundand, e.g., (x = 6 \/ x > 5) + if (keep_redundand) + newDsjs.insert(mk(lin_com, mkMPZ (*it, efac))); + it = all_eqs.erase(it); } + else ++it; + } + if (tmp == cur_min_gt) break; } - for (auto & in1 : ineqs) - { - for (auto & in2 : ineqs) - { - // if (bnd > guesses.size()) return; - if (in1 == in2) continue; + for (auto c : all_eqs) { + newDsjs.insert (mk(lin_com, mkMPZ (c, efac))); + } - assert(isOpX(in1)); - assert(isOpX(in2)); + if ((cur_min_gt_bl && cur_max_lt_bl && cur_min_gt <= cur_max_lt - 1) || + (cur_min_ge_bl && cur_max_lt_bl && cur_min_ge <= cur_max_lt) || + (cur_min_gt_bl && cur_max_le_bl && cur_min_gt <= cur_max_le) || + (cur_min_ge_bl && cur_max_le_bl && cur_min_ge <= cur_max_le + 1)) + return mk(efac); - if (evalLeq(in1->right(), in2->left()) && - !evalLeq(in1->left(), in2->right())) - { - guesses.insert(simplifyArithm(mk(in1->left(), in2->right()))); - } - } - } - } - - inline static void simplifyPropagate (ExprSet& cnj) - { - bool toRepeat = false; - map vars; - for (auto & a : cnj) - { - filter (a, IsConst (), inserter(vars[a], vars[a].begin())); - } + if (cur_min_gt_bl && cur_max_lt_bl && cur_min_gt == cur_max_lt && newDsjs.empty()) + { + Expr res = mk(lin_com, mkMPZ (cur_max_lt, efac)); + if (keep_redundand) newDsjs.insert(res); + else return res; + } - vector tmp; - ExprSet newCnjs; + if (cur_min_ge_bl && cur_max_lt_bl && cur_min_ge - 1 == cur_max_lt && newDsjs.empty()) + { + Expr res = mk(lin_com, mkMPZ (cur_max_lt, efac)); + if (keep_redundand) newDsjs.insert(res); + else return res; + } - for (auto it0 = cnj.begin(); it0 != cnj.end(); ++it0) - { - if (find(tmp.begin(), tmp.end(), it0) != tmp.end()) continue; - Expr a = *it0; - for (auto it = cnj.begin(); it != cnj.end(); ++it) - { - Expr b = *it; - if (a == b) continue; - - if (contains(b, a)) - { - if (find(tmp.begin(), tmp.end(), it) != tmp.end()) - { - toRepeat = true; - continue; - } - newCnjs.insert(simplifyBool(replaceAll(b, a, mk(a->getFactory())))); - tmp.push_back(it); - continue; - } - - ExprSet& av = vars[a]; - ExprSet& bv = vars[b]; - if (av.size() != 2 || - !isOpX(a) || - !isSubset(av, bv)) continue; - - for (auto v : av) - { - Expr t = ineqMover(a, v); - if (t->left() == v) - { - if (find(tmp.begin(), tmp.end(), it) != tmp.end()) - { - toRepeat = true; - continue; - } - newCnjs.insert(simplifyBool(simplifyArithm(replaceAll(b, t->left(), t->right())))); - tmp.push_back(it); - break; - } - } - } - } + if (cur_min_gt_bl && cur_max_le_bl && cur_min_gt - 1 == cur_max_le && newDsjs.empty()) + { + Expr res = mk(lin_com, mkMPZ (cur_min_gt, efac)); + if (keep_redundand) newDsjs.insert(res); + else return res; + } - for (auto & it : tmp) cnj.erase(it); - cnj.insert(newCnjs.begin(), newCnjs.end()); - if (toRepeat) simplifyPropagate(cnj); - } + if (cur_min_ge_bl && cur_max_le_bl && cur_min_ge - 2 == cur_max_le && newDsjs.empty()) + { + Expr res = mk(lin_com, mkMPZ (cur_min_ge - 1, efac)); + if (keep_redundand) newDsjs.insert(res); + else return res; + } - void getLiterals (Expr exp, ExprSet& lits, bool splitEqs = true) - { - ExprFactory& efac = exp->getFactory(); - if (isOp(exp) && !splitEqs) - { - lits.insert(exp); + if (cur_max_le_bl && cur_max_lt_bl) { + if (cur_max_le >= cur_max_lt) { + newDsjs.insert(mk(lin_com, mkMPZ (cur_max_le, efac))); } - else if (isOpX(exp) && isNumeric(exp->left()) && !containsOp(exp)) - { - getLiterals(mk(exp->left(), exp->right()), lits, splitEqs); - getLiterals(mk(exp->left(), exp->right()), lits, splitEqs); - } - else if (isOpX(exp) && isNumeric(exp->left()) && !containsOp(exp)) - { - getLiterals(mk(exp->left(), exp->right()), lits, splitEqs); - getLiterals(mk(exp->left(), exp->right()), lits, splitEqs); + else { + newDsjs.insert(mk(lin_com, mkMPZ (cur_max_lt, efac))); } - else if ((isOpX(exp) || isOpX(exp) || isOpX(exp)) && isBoolean(exp->left())) - { - getLiterals(exp->left(), lits, splitEqs); - getLiterals(exp->right(), lits, splitEqs); - getLiterals(mkNeg(exp->left()), lits, splitEqs); - getLiterals(mkNeg(exp->right()), lits, splitEqs); + } + else { + if (cur_max_le_bl) { + newDsjs.insert(mk(lin_com, mkMPZ (cur_max_le, efac))); } - else if (isOpX(exp)) - { - if (bind::isBoolConst(exp->left())) - lits.insert(exp); - else - getLiterals(mkNeg(exp->left()), lits, splitEqs); + if (cur_max_lt_bl) { + newDsjs.insert(mk(lin_com, mkMPZ (cur_max_lt, efac))); } - else if (isOpX(exp)) - { - getLiterals(mkNeg(exp->left()), lits, splitEqs); - getLiterals(exp->right(), lits, splitEqs); + } + + if (cur_min_ge_bl && cur_min_gt_bl) { + if (cur_min_ge <= cur_min_gt) { + newDsjs.insert(mk(lin_com, mkMPZ (cur_min_ge, efac))); } - else if (isOpX(exp)) - { - getLiterals(mkNeg(exp->left()), lits, splitEqs); - getLiterals(exp->right(), lits, splitEqs); - getLiterals(mkNeg(exp->right()), lits, splitEqs); - getLiterals(exp->left(), lits, splitEqs); + else { + newDsjs.insert(mk(lin_com, mkMPZ (cur_min_gt, efac))); } - else if (bind::typeOf(exp) == mk(efac) && - !containsOp(exp) && !containsOp(exp)) - { - if (isOp(exp)) - { - exp = rewriteDivConstraints(exp); - exp = rewriteModConstraints(exp); - if (isOpX(exp) || isOpX(exp)) - getLiterals(exp, lits, splitEqs); - else lits.insert(exp); - } - else lits.insert(exp); - } - else if (isOpX(exp) || isOpX(exp)) - { - for (int i = 0; i < exp->arity(); i++) - getLiterals(exp->arg(i), lits, splitEqs); + } + else { + if (cur_min_ge_bl) { + newDsjs.insert(mk(lin_com, mkMPZ (cur_min_ge, efac))); } - else if (!isOpX(exp) && !isOpX(exp)) - { - errs () << "unable lit: " << *exp << "\n"; - assert(0); + if (cur_min_gt_bl) { + newDsjs.insert(mk(lin_com, mkMPZ (cur_min_gt, efac))); } + } } - inline static Expr normalizeTerm(Expr term) + return disjoin(newDsjs, efac); + } + + inline static Expr normalizeAtom(Expr fla, ExprVector& intVars) + { + if (isOp(fla) && isNumeric(fla->left())) { - ExprVector intVars; - filter (term, IsConst (), inserter(intVars, intVars.begin())); + Expr lhs = fla->left(); + Expr rhs = fla->right(); + ExprVector all; - getAddTerm(term, all); - ExprSet newtermPos; - ExprSet newtermNeg; + ExprVector allrhs; + + getAddTerm(lhs, all); + getAddTerm(rhs, allrhs); + for (auto & a : allrhs) + { + all.push_back(additiveInverse(a)); + } + ExprSet newlhs; for (auto &v : intVars) { cpp_int coef = 0; string s1 = lexical_cast(v); for (auto it = all.begin(); it != all.end();) { + if (!contains(*it, v)) { ++it; continue; } string s2 = lexical_cast(*it); if (s1 == s2) @@ -4840,356 +3784,895 @@ namespace ufo } if (success) { - coef += c; - it = all.erase(it); + coef += c; + it = all.erase(it); + } + } + else + { + ++it; + } + } + if (coef != 0) newlhs.insert(mk(mkMPZ(coef, fla->getFactory()), v)); + } + + bool success = true; + cpp_int intconst = 0; + + for (auto &e : all) + { + if (isOpX(e)) + { + intconst += lexical_cast(e); + } + else if (isOpX(e)) + { + // GF: sometimes it fails (no idea why) + cpp_int thisTerm = 1; + for (auto it = e->args_begin (), end = e->args_end (); it != end; ++it) + { + if (isOpX(*it)) + thisTerm *= lexical_cast(*it); + else + success = false; + } + intconst += thisTerm; + } + else + { + success = false; + } + } + + if (success && newlhs.size() == 0) + { + return (evaluateCmpConsts(fla, 0, -intconst)) ? mk(fla->getFactory()) : + mk(fla->getFactory()); + } + + if (success) + { + Expr pl = (newlhs.size() == 1) ? *newlhs.begin(): mknary(newlhs); + Expr c = mkMPZ (-intconst, fla->getFactory()); + return reBuildCmp(fla, pl, c); + } + } + return fla; + } + + inline static Expr normalizeDisj(Expr exp, ExprVector& intVars) + { + ExprSet disjs; + ExprSet newDisjs; + getDisj(exp, disjs); + for (auto &d : disjs) + { + Expr norm = normalizeAtom(d, intVars); + if ( isOpX (norm)) return norm; + if (!isOpX(norm)) newDisjs.insert(norm); + } + return disjoin(newDisjs, exp->getFactory()); + } + + inline static Expr normalize(Expr fla) + { + ExprVector vars; + filter (fla, IsConst (), inserter(vars, vars.begin())); + if (isOpX(fla) || isOpX(fla)) + { + ExprSet args; + for (int i = 0; i < fla->arity(); i++){ + args.insert(normalizeAtom(fla->arg(i), vars)); + } + + return simplifyBool(isOpX(fla) ? conjoin (args, fla->getFactory()) : + disjoin (args, fla->getFactory())); + } + return normalizeAtom(fla, vars); + } + + inline static bool getLinCombCoefs(Expr ex, set& intCoefs) + { + bool res = true; + if (isOpX(ex)) return false; + if (isOpX(ex)) + { + for (auto it = ex->args_begin (), end = ex->args_end (); it != end; ++it) + res = res && getLinCombCoefs(*it, intCoefs); + } + else if (isOp(ex)) // assuming the lin.combination is on the left side + { + if (!isOpX(ex->right())) return false; + ExprVector addt; + getAddTerm (ex->left(), addt); + for (auto & t : addt) + { + if (isOpX(t) && t->arity() == 2 && + isOpX(t->left()) && !isOpX(t->right())) + intCoefs.insert(lexical_cast (t->left())); + else return false; + } + } + return res; + } + + inline static bool getLinCombConsts(Expr ex, set& intConsts) + { + if (isOpX(ex)) + { + bool res = true; + for (auto it = ex->args_begin (), end = ex->args_end (); it != end; ++it) + res &= getLinCombConsts(*it, intConsts); + return res; + } + else if (isOp(ex)) // assuming the lin.combination is on the left side + { + if (isOpX(ex->right())) + intConsts.insert(lexical_cast (ex->right())); + else + return false; + } + return true; + } + + inline static void normalizeSelects(Expr& body) + { + ExprVector se; + filter (body, IsSelect (), inserter(se, se.begin())); + for (auto & s : se) + { + if (!isIntConst(s->right())) + { + Expr var_it = intConst(mkTerm ("it_" + lexical_cast(&s), body->getFactory())); + body = mk(replaceInSubexpr(body, s, s->right(), var_it), mk(s->right(), var_it)); + } + } + } + + inline static void uniqueizeSelects(Expr& body) + { + ExprVector se; + filter (body, IsSelect (), inserter(se, se.begin())); + if (se.size() < 2) return; + + ExprSet seenIterators; + for (auto & s : se) + { + if (find(seenIterators.begin(), seenIterators.end(), s->right()) == seenIterators.end()) + { + seenIterators.insert(s->right()); + } + else + { + Expr var_it = intConst(mkTerm ("it_" + lexical_cast(&s), body->getFactory())); + body = mk(replaceInSubexpr(body, s, s->right(), var_it), mk(s->right(), var_it)); + } + } + } + + inline static bool isSymmetric (Expr exp) + { + return isOpX(exp); + } + + Expr processNestedStores (Expr exp, ExprSet& cnjs) + { + // TODO: double check if cells are overwritten + Expr arrVar = exp->left(); + if (isOpX(arrVar)) arrVar = processNestedStores(arrVar, cnjs); + Expr indVar = exp->right(); + Expr valVar = exp->last(); + cnjs.insert(mk(mk(a); + if (sels[a]) noselects = false; + else allselects = false; + } + if (!noselects && ! allselects) + { + ExprSet newCnjs; + for (auto & a : cnjs) + if (sels[a]) newCnjs.insert(a); + newDsjs.insert(conjoin(newCnjs,exp->getFactory())); + } + } + return disjoin(newDsjs,exp->getFactory()); + } + return exp; + } + }; + + // opposite to TransitionOverapprox + struct TransitionMiner : public std::unary_function + { + ExprVector& srcVars; + ExprVector& dstVars; + ExprSet& transitions; + + TransitionMiner (ExprVector& _srcVars, ExprVector& _dstVars, ExprSet& _transitions): + srcVars(_srcVars), dstVars(_dstVars), transitions(_transitions) {}; + + VisitAction operator() (Expr exp) + { + if (isOp(exp) && !containsOp(exp)) + { + ExprVector av; + filter (exp, IsConst (), inserter(av, av.begin())); + if (!emptyIntersect(av, srcVars) && !emptyIntersect(av, dstVars)) + { + transitions.insert(exp); + } + return VisitAction::skipKids (); + } + return VisitAction::doKids (); + } + }; + + struct BoolEqRewriter + { + BoolEqRewriter () {}; + + Expr operator() (Expr exp) + { + if (isOpX(exp)) + { + Expr lhs = exp->left(); + Expr rhs = exp->right(); + if (isBoolConst(lhs) || isBoolConst(rhs) || + isOpX(lhs) || isOpX(rhs)) + { + return mk(mk(mkNeg(lhs), rhs), + mk(lhs, mkNeg(rhs))); + } + return exp; + } + return exp; + } + }; + + struct CondRetriever : public std::unary_function + { + ExprSet& conds; + + CondRetriever (ExprSet& _conds) : conds(_conds) {}; + + VisitAction operator() (Expr exp) + { + if (isOpX(exp) && !containsOp(exp->arg(0))) + { + conds.insert(exp->arg(0)); + } + return VisitAction::doKids (); + } + }; + + struct AccessRetriever : public std::unary_function + { + ExprSet& accs; + + AccessRetriever (ExprSet& _accs) : accs(_accs) {}; + + VisitAction operator() (Expr exp) + { + if ((isOpX(exp) && containsOp(exp)) + { + outs () << string(inden, ' ') << "select(\n"; + pprint(exp->left(), inden + 2); + pprint(exp->right(), inden + 2); + outs () << string(inden, ' ') << ")"; + if (upper) outs() << "\n"; + return; + } + if (flas.empty()) outs () << string(inden, ' ') << exp; + else + { + outs () << string(inden, ' '); + if (flas.size() > 0) outs () << "["; + outs () << (upper ? '\n' : ' '); + pprint(flas, upper ? inden + 2 : 0, op); + outs () << string(inden, ' '); + if (flas.size() > 0) outs () << (upper ? '\n' : ' ') << "]"; + } + if (upper) outs() << "\n"; + } +} #endif - diff --git a/include/deep/HornNonlin.hpp b/include/deep/HornNonlin.hpp index 08b5c87cb..19be6f386 100755 --- a/include/deep/HornNonlin.hpp +++ b/include/deep/HornNonlin.hpp @@ -495,7 +495,7 @@ namespace ufo origDstSymbs.push_back(*it1); } allOrigSymbs.insert(allOrigSymbs.end(), origDstSymbs.begin(), origDstSymbs.end()); - simplBoolReplCnj(allOrigSymbs, lin); // perhaps, not a very important optimization now; consider removing + // simplBoolReplCnj(allOrigSymbs, lin); // perhaps, not a very important optimization now; consider removing // origDstSymbs = hr.dstVars; if (isOpX(hr.head)) { diff --git a/include/deep/NonlinCHCsolver.hpp b/include/deep/NonlinCHCsolver.hpp index a6c6b7d39..97b7c88f6 100644 --- a/include/deep/NonlinCHCsolver.hpp +++ b/include/deep/NonlinCHCsolver.hpp @@ -517,20 +517,13 @@ namespace ufo for (auto & t : tree_map[fun]) { Expr acc = u.getAccessor(c, typeOf(t.first)); - Expr var = NULL; if (acc != NULL) { ExprVector args = {acc, t.second}; - var = mknary(args); + return mknary(args); } else if (regex_match(lexical_cast(t.first), r)) - { - var = t.second; - } - if (var != NULL) - { - return var; - } + return t.second; } return NULL; } @@ -667,10 +660,25 @@ namespace ufo Expr var = getVar(c, fun); if (var != NULL) { - Expr m = u.getModel(var); - if (isArray(m)) + Expr m = simplifyBool(simplifyArithm(simplifyArr(u.getModel(var)))); + if (c == "state") var = mk(v)) return typeOf(v->right()); if (isOpX(v)) return sort::arrayTy(v->left(), typeOf(v->right())); + if (isOpX(v)) return sort::adTy(v->right ()); // std::cerr << "WARNING: could not infer type of: " << *v << "\n"; // assert (0 && "Unreachable"); diff --git a/include/ufo/Smt/Z3n.hpp b/include/ufo/Smt/Z3n.hpp index 06972d28d..567ecf2ef 100644 --- a/include/ufo/Smt/Z3n.hpp +++ b/include/ufo/Smt/Z3n.hpp @@ -283,23 +283,26 @@ namespace ufo Z3_set_ast_print_mode (ctx, Z3_PRINT_SMTLIB2_COMPLIANT); } + public: + std::vector adts; + std::vector adts_seen; + protected: z3::context &get_ctx () { return ctx; } - std::vector adts; std::vector accessors; - + ast_expr_map seen_ast; + expr_ast_map seen_expr; z3::ast toAst (Expr e) { - expr_ast_map seen; - return M::marshal (e, get_ctx (), cache.left, seen); + return M::marshal (e, get_ctx (), cache.left, seen_expr, adts, adts_seen); } Expr toExpr (z3::ast a) { if (!a) return Expr(); - ast_expr_map seen; - std::vector adts_seen; - return U::unmarshal (a, get_efac (), cache.right, seen, adts_seen, adts, accessors); +// ast_expr_map seen; + auto res = U::unmarshal (a, get_efac (), cache.right, seen_ast, adts_seen, adts, accessors); + return res; } ExprFactory &get_efac () { return efac; } From b14e6525c2e993e86e0755c293068c3538fcd2d8 Mon Sep 17 00:00:00 2001 From: BritikovKI Date: Thu, 3 Oct 2024 12:55:45 +0200 Subject: [PATCH 226/236] Z3 bytevecs: marshaling fix --- include/ae/SMTUtils.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/ae/SMTUtils.hpp b/include/ae/SMTUtils.hpp index f0749ef57..45c4df9b6 100644 --- a/include/ae/SMTUtils.hpp +++ b/include/ae/SMTUtils.hpp @@ -30,7 +30,7 @@ namespace ufo SMTUtils (ExprFactory& _efac, unsigned _to) : efac(_efac), z3(efac), smt (z3, _to), can_get_model(0), m(NULL) {} - SMTUtils (ExprFactory& _efac, ExprVector& _accessors, unsigned _to, bool bv) : + SMTUtils (ExprFactory& _efac, ExprVector& _accessors, unsigned _to, bool _bv) : efac(_efac), z3(efac), smt (z3, _to), can_get_model(0), m(NULL) { approxBV = _bv; From 1d02c65021dc9de6172bc9efcc99ad8383a9db1e Mon Sep 17 00:00:00 2001 From: BritikovKI Date: Thu, 3 Oct 2024 12:56:32 +0200 Subject: [PATCH 227/236] Z3 bytevecs: marshaling fix --- include/ae/SMTUtils.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/ae/SMTUtils.hpp b/include/ae/SMTUtils.hpp index 45c4df9b6..008cea706 100644 --- a/include/ae/SMTUtils.hpp +++ b/include/ae/SMTUtils.hpp @@ -190,7 +190,7 @@ namespace ufo else { lastCand = conjoin(cnjs, efac); - if (...) +// if (...) // serialize_formula(lastCand); smt.assertExpr(lastCand); } From 042f1e75e7f3b4bbb288c36850d9e7789c62c290 Mon Sep 17 00:00:00 2001 From: BritikovKI Date: Fri, 4 Oct 2024 17:29:35 +0200 Subject: [PATCH 228/236] Z3 bytevecs: abstracting BVs away --- include/.DS_Store | Bin 0 -> 6148 bytes include/ae/ExprSimpl.hpp | 92 ++++++++++++++++- include/ae/SMTUtils.hpp | 10 +- include/ufo/.DS_Store | Bin 0 -> 6148 bytes include/ufo/Expr.hpp | 210 ++++++++++++++++++++------------------- include/ufo/ExprBv.hh | 3 +- 6 files changed, 209 insertions(+), 106 deletions(-) create mode 100644 include/.DS_Store create mode 100644 include/ufo/.DS_Store diff --git a/include/.DS_Store b/include/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..9f91342ca2f0fd1fb37dd2cb3361cf3e1080ed40 GIT binary patch literal 6148 zcmeHK!EVz)5S>k2>a;@20i<4#EcF`Eq^%H$iwWhxwMKA&Dz&iz3)dUP4mm`Te1?zV z%9rpjoZ!vuR%+64joNC*nti)FGrO86d)GrmYB)^?L|r2Cp^V-Rnl-|9)@#zTGaaDf zHT1`%&L{f_dI%|b&*{5v`j0Bjf}zX_?=OAZ$5u|IOqj~m1UgkkPg6%3-TU3Fq3mQ|g z;>jyt^=#9WK9OGW`m^5ajxcL;Uf~ugJJ~1$_U-p~H@d6a%rW2?xD5>O`4B)ELyL_; zIXcit2>|pkErP!M`~w4?0EQMDgP4IR6ACn;%9a?))(*;q!ya1y#-Ir&B|BpsyR)(t zin67L3dEgMXwbEe0mr~H18pe0J;2OukMj7}ALX*0u literal 0 HcmV?d00001 diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index 9e55bf53c..e240137dd 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -3,6 +3,7 @@ #include #include "ufo/Smt/EZ3.hh" +#include "ufo/Expr.hpp" using namespace std; using namespace expr::op::bind; @@ -55,6 +56,13 @@ namespace ufo mknary(terms); } + template static Expr mkbv(Range& terms, ExprFactory &efac){ + return + (terms.size() == 0) ? mkMPZ (1, efac) : + (terms.size() == 1) ? *terms.begin() : + mknary(terms); + } + template static bool emptyIntersect(Range1& av, Range2& bv){ for (auto &var1: av){ for (auto &var2: bv) if (var1 == var2) return false; @@ -256,6 +264,13 @@ namespace ufo return isOpX(t); } + inline static bool isBV(Expr a) + { + Expr t = typeOf(a); + if (t == NULL) return false; + return isOpX(t); + } + inline static bool isNumericEq(Expr a) { return isOpX(a) && isNumeric(a->left()); @@ -331,7 +346,19 @@ namespace ufo } } - /** + inline static void getBVOps (Expr a, ExprVector &ops) + { + if (isOpX(a)){ + for (unsigned i = 0; i < a->arity(); i++){ + getBVOps(a->arg(i), ops); + } + } else { + ops.push_back(a); + } + } + + + /** * Represent Expr as multiplication */ inline static Expr mult(Expr e){ @@ -2081,7 +2108,68 @@ namespace ufo return dagVisit (mu, exp); } - // TODO: Find BV And Rewrite + struct FindBVAndRewrite { + ExprVector& vars; + ExprMap& extraVars; + + FindBVAndRewrite (ExprVector& _vars, ExprMap& _extraVars) : + vars(_vars), extraVars(_extraVars) {}; + + Expr operator() (Expr t) + { + Expr key = t; + std::cout << t << "\n"; + bool tp = isBV(t->left()); + if(t->right()){ + tp = tp || isBV(t->right()); + } + for (ENode::args_iterator it = t->args_begin(), end = t->args_end(); + it != end; ++it){ + tp = tp || isBV(*it); + } +// || isBV(t->right()); + if (tp){ + std::cout << t << "\n"; + if (extraVars[key] == NULL) + { + Expr new_name = mkTerm ("__bvi__" + to_string(extraVars.size()), t->getFactory()); + Expr var = mkConst(new_name, typeOf(t)); + extraVars[key] = var; + } + return extraVars[key]; + } +// if (isOpX(t)) { +// std::cout << t << "\n"; +// if (extraVars[key] == NULL) +// { +// Expr new_name = mkTerm ("__bvi__" + to_string(extraVars.size()), t->getFactory()); +// Expr var = intConst(new_name); +// extraVars[key] = var; +// } +// return extraVars[key]; +// } +// if ( isOpX(t) || isOpX(t) || isOpX(t) || isOpX(t) || isOpX(t)) +// { +// std::cout << t << "\n"; +// if (extraVars[key] == NULL) +// { +// Expr new_name = mkTerm ("__bv__" + to_string(extraVars.size()), t->getFactory()); +// Expr var = mkConst(new_name, bv::bvsort(64, t->getFactory())); +// extraVars[key] = var; +// } +// return extraVars[key]; +// } + return t; + } + }; + + inline static Expr findBVAndRewrite (Expr exp, ExprVector& vars, ExprMap& extraVars) + { + RW mu(new FindBVAndRewrite(vars, extraVars)); + return dagVisit (mu, exp); + } + + // TODO: Find BV And Rewrite struct FindNonlinAndRewrite { ExprVector& vars; diff --git a/include/ae/SMTUtils.hpp b/include/ae/SMTUtils.hpp index 008cea706..a961b91d1 100644 --- a/include/ae/SMTUtils.hpp +++ b/include/ae/SMTUtils.hpp @@ -190,8 +190,16 @@ namespace ufo else { lastCand = conjoin(cnjs, efac); -// if (...) + approxBV = true; + if (approxBV){ + ExprVector invAndIterVars; + ExprMap extraVars; + lastCand = findBVAndRewrite(lastCand,invAndIterVars,extraVars); + invAndIterVars.push_back(lastCand); + dumpToFile(invAndIterVars); + } // serialize_formula(lastCand); + print(lastCand); smt.assertExpr(lastCand); } boost::tribool res = smt.solve (); diff --git a/include/ufo/.DS_Store b/include/ufo/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..2262fdc258ff961ce92342d3c918d678f7a5664d GIT binary patch literal 6148 zcmeHK&x;c=6n<%|&9E-?ps<&PfY-9NyNf7$8OPnjf+t7xpi(=w*umM!&`!5PDa?8O zW4!v8_`i74?1Nh(t6UbctF-B;ky;0L2dDcJ?i+xkwWz z%sY-~Lnf|zy?F0X!0=#yTF6ax^ZA`b;FUfR*HvVBegCG4eh8j_@%8%&Ua7Mi1 zw;10x82c;6CFNAo5PcQ9nBs7Qd2hvhK^c0x+C4_`b%R%@7`f&8xWv!hS;=ftxY2)4 ziY%R!oz4$Yt2gf4ZOW$Hlkek^p2cOqoKB+t_$@!Z(mG3)^?vd?9nN~K`_FY=_S1Yg zHiUFAM9RB2X+F@iNKf;@#BgKVAOjinS_kv_ljCk%bx%(gZ8d*-+-a-RlgEoiARjz@ zboR3MIlIdB4Mq+V_@5cucen(eznk-QJkB$ne?nxLz0C6H74Qmp1*`&YcaVEt5U+q& zz$>t!0Phb9&KNqZESjwYg}DL%8weXioj)0wqa20~D~o7>2}=c9s&H2fVd;n~mlry$ zELu7Vcli*mXW?!r!t{>!E0azlwCGE(fLCB$fx3Nc@%ex8=llOU$v=4oyaNA~0-|vq zpGTOIJ6pFV$7ijAe}J=bUS)AbLB$-!$mOH>0B#I%#T8)au(F5<%zp?N8GPXt_^S&1 E1_VuuN&o-= literal 0 HcmV?d00001 diff --git a/include/ufo/Expr.hpp b/include/ufo/Expr.hpp index b5adc7175..2a9afb3d7 100644 --- a/include/ufo/Expr.hpp +++ b/include/ufo/Expr.hpp @@ -2222,6 +2222,7 @@ namespace expr { return constDecl (name, mk (name->efac ())); } inline Expr adtConstDecl (Expr name) { return constDecl (name, mk (name->efac ())); } +// inline Expr bvConstDecl (Expr name, int size) template Expr fdecl (Expr fname, const Range &args) @@ -2306,106 +2307,6 @@ namespace expr inline bool isRealConst (Expr v) { return isConst (v); } inline bool isAdtConst (Expr v) { return isConst (v); } - inline Expr typeOf (Expr v) - { - using namespace bind; - if (isOpX (v)) return typeOf (variant::mainVariant (v)); - - if (isOpX (v)) - { - assert (isOpX (v->left ())); - return rangeTy (v->left ()); - } - - if (isOpX(v)) return typeOf(v->last()); - if (isOp(v) || isOp (v)) return mk (v->efac ()); - if (isOpX (v)) return mk (v->efac ()); - if (isOpX (v)) return mk (v->efac ()); - - if (isOpX (v)) return bind::type (v); - - if (isBoolVar (v) || isBoolConst (v)) - return mk (v->efac ()); - if (isIntVar (v) || isIntConst (v)) - return mk (v->efac ()); - if (isRealVar (v) || isRealConst (v)) - return mk (v->efac ()); - - if (isOp(v)) return typeOf(v->left()); - - if (isOpX(v)) return sort::arrayTy(typeOf(v->right()), typeOf(v->last())); - if (isOpX(v)) return typeOf(v->right()); + if (isOpX(v)) return sort::arrayTy(v->left(), typeOf(v->right())); + if (isOpX(v)) return sort::adTy(v->left ()); + if (isOpX(v)) return bv::bvsort (bv::width(v), v->efac()); + if (isOp(v)) return bv::bvsort (64, v->efac()); + + +// std::cerr << "WARNING: could not infer type of: " << *v << "\n"; +// assert (0 && "Unreachable"); + + return Expr(); + } + inline Expr sortOf (Expr v) {return typeOf (v);} + + Expr mkMPZ(boost::multiprecision::cpp_int a, ExprFactory& efac) + { + return mkTerm (mpz_class (boost::lexical_cast(a)), efac); + } + + Expr mkMPZ(int a, ExprFactory& efac) + { + return mkTerm (mpz_class (a), efac); + } + + struct FAPP_PS + { + static inline void print (std::ostream &OS, + int depth, + int brkt, + const std::string &name, + const std::vector &args) + { + if (args.size () > 1) OS << "("; + + // -- strip fdecl if there is one + ENode *fname = args [0]; + if (isOpX (fname)) fname = fname->arg (0); + fname->Print (OS, depth+2, false); + + for (unsigned i = 1; i < args.size (); ++i) + { + OS << " "; + args [i]->Print (OS, depth+2, false); + } + + if (args.size () > 1) OS << ")"; + } + + }; + + /// Creates a new fdecl with the same signature as the given + /// fdecl and a new name + inline Expr rename (Expr fdecl, Expr name) + { + assert (isOpX (fdecl)); + ExprVector _args; + _args.reserve (fdecl->arity ()); + _args.push_back (name); + _args.insert (_args.end (), ++(fdecl->args_begin ()), fdecl->args_end ()); + return mknary (_args); + } + + /// construct a new expression by applying fdecl to the same + /// arguments as fapp. For example, reapp of g(a,b) and f is f(a, b) + inline Expr reapp (Expr fapp, Expr fdecl) + { + assert (isOpX (fdecl)); + assert (isOpX (fapp)); + + ExprVector _args; + _args.reserve (fapp->arity ()); + _args.push_back (fdecl); + _args.insert (_args.end (), ++(fapp->args_begin ()), fapp->args_end ()); + return mknary (_args); + } + struct BoundVar { unsigned var; @@ -3241,8 +3249,6 @@ namespace expr } } -#include "ExprBv.hh" - namespace std { /** standard order of expressions by their id */ diff --git a/include/ufo/ExprBv.hh b/include/ufo/ExprBv.hh index f17ae3394..61b7f8bb4 100644 --- a/include/ufo/ExprBv.hh +++ b/include/ufo/ExprBv.hh @@ -141,7 +141,8 @@ namespace expr NOP(BEXT_ROTATE_RIGHT,"bvextrotright",FUNCTIONAL,BvOp) NOP(INT2BV,"int2bv",FUNCTIONAL,BvOp) NOP(BV2INT,"bv2int",FUNCTIONAL,BvOp) - + + namespace bv { /* XXX Add helper methods as needed */ From e9512c8fe0b0b754a1b1e583de731a7f9de8753b Mon Sep 17 00:00:00 2001 From: BritikovKI Date: Mon, 4 Nov 2024 12:12:07 +0100 Subject: [PATCH 229/236] BV siplification: simplification put in place --- include/ae/ExprSimpl.hpp | 41 +++++++----------------------- include/ae/SMTUtils.hpp | 24 ++++++++++------- include/deep/NonlinCHCsolver.hpp | 4 +-- include/deep/TGTree.hpp | 2 +- include/ufo/Expr.hpp | 3 +++ include/ufo/Smt/ZExprConverter.hpp | 2 -- 6 files changed, 30 insertions(+), 46 deletions(-) diff --git a/include/ae/ExprSimpl.hpp b/include/ae/ExprSimpl.hpp index e240137dd..193be8f88 100644 --- a/include/ae/ExprSimpl.hpp +++ b/include/ae/ExprSimpl.hpp @@ -2117,48 +2117,25 @@ namespace ufo Expr operator() (Expr t) { - Expr key = t; - std::cout << t << "\n"; - bool tp = isBV(t->left()); - if(t->right()){ - tp = tp || isBV(t->right()); + if(isBV(t)){ + return t; } + bool tp = false; for (ENode::args_iterator it = t->args_begin(), end = t->args_end(); it != end; ++it){ tp = tp || isBV(*it); } -// || isBV(t->right()); if (tp){ - std::cout << t << "\n"; - if (extraVars[key] == NULL) + std::cout << t << ":" << typeOf(t) << "\n"; +// std::cout << "\n"; + if (extraVars[t] == NULL) { - Expr new_name = mkTerm ("__bvi__" + to_string(extraVars.size()), t->getFactory()); + Expr new_name = mkTerm ("__bv__" + to_string(extraVars.size()), t->getFactory()); Expr var = mkConst(new_name, typeOf(t)); - extraVars[key] = var; + extraVars[t] = var; } - return extraVars[key]; + return extraVars[t]; } -// if (isOpX(t)) { -// std::cout << t << "\n"; -// if (extraVars[key] == NULL) -// { -// Expr new_name = mkTerm ("__bvi__" + to_string(extraVars.size()), t->getFactory()); -// Expr var = intConst(new_name); -// extraVars[key] = var; -// } -// return extraVars[key]; -// } -// if ( isOpX(t) || isOpX(t) || isOpX(t) || isOpX(t) || isOpX(t)) -// { -// std::cout << t << "\n"; -// if (extraVars[key] == NULL) -// { -// Expr new_name = mkTerm ("__bv__" + to_string(extraVars.size()), t->getFactory()); -// Expr var = mkConst(new_name, bv::bvsort(64, t->getFactory())); -// extraVars[key] = var; -// } -// return extraVars[key]; -// } return t; } }; diff --git a/include/ae/SMTUtils.hpp b/include/ae/SMTUtils.hpp index a961b91d1..4e4a14ecd 100644 --- a/include/ae/SMTUtils.hpp +++ b/include/ae/SMTUtils.hpp @@ -176,7 +176,7 @@ namespace ufo } } - template boost::tribool isSat(T& cnjs, bool reset=true) + template boost::tribool isSat(T& cnjs, bool reset=true, bool approxBV=false) { if (m != NULL) { free(m); m = NULL; } if (reset) smt.reset(); @@ -190,7 +190,6 @@ namespace ufo else { lastCand = conjoin(cnjs, efac); - approxBV = true; if (approxBV){ ExprVector invAndIterVars; ExprMap extraVars; @@ -198,8 +197,6 @@ namespace ufo invAndIterVars.push_back(lastCand); dumpToFile(invAndIterVars); } -// serialize_formula(lastCand); - print(lastCand); smt.assertExpr(lastCand); } boost::tribool res = smt.solve (); @@ -246,24 +243,33 @@ namespace ufo /** * SMT-check */ - boost::tribool isSat(Expr a, bool reset=true) + boost::tribool isSat(Expr a, bool reset=true, bool simpBv=true) { ExprSet cnjs; getConj(a, cnjs); - return isSat(cnjs, reset); + return isSat(cnjs, reset, simpBv); } /** * Incremental SMT-check */ - boost::tribool isSatIncrem(ExprVector& v, int& sz) + boost::tribool isSatIncrem(ExprVector& v, int& sz, bool approxBV=false) { sz = 0; while (sz < v.size()) { - auto res = isSat(v[sz], sz == 0); + Expr bla = v[sz]; + if(approxBV) { + ExprVector invAndIterVars; + ExprMap extraVars; + bla = findBVAndRewrite(bla, invAndIterVars, extraVars); + } + auto res = isSat(bla, sz == 0); sz++; - if (res == false || indeterminate(res)) return res; + if (res == false ) return res; + if (indeterminate(res)){ + return res; + } } return true; // sat } diff --git a/include/deep/NonlinCHCsolver.hpp b/include/deep/NonlinCHCsolver.hpp index aadfc57be..faabeb251 100644 --- a/include/deep/NonlinCHCsolver.hpp +++ b/include/deep/NonlinCHCsolver.hpp @@ -661,9 +661,9 @@ namespace ufo auto res = u.isSat(ssa); trees_checked_per_cur_bnd++; time_t my_time = time(NULL); - outs () << "rq_t : " << ctime(&my_time); + outs () << "rq_t : " << ctime(&my_time) << "\n"; stringstream strs; - strs << "dot_dump_cur_bnd_" << cur_bnd << "_depth_" << depth << "_ind_" << trees_checked_per_cur_bnd; + strs << "dot_dump_cur_bnd_" << cur_bnd << "_depth_" << depth << "_ind_" << trees_checked_per_cur_bnd << "\n"; if (false == res) { // strs << "_unsat.dot"; // string temp_str = strs.str(); char* dotFilename = (char*) temp_str.c_str(); diff --git a/include/deep/TGTree.hpp b/include/deep/TGTree.hpp index 3c63106af..83b37ab7c 100644 --- a/include/deep/TGTree.hpp +++ b/include/deep/TGTree.hpp @@ -687,7 +687,7 @@ namespace deep { void getNext(vector &complete_trees){ vector new_trees; - for (int i = 0; i < trees.size(); i++){ + for (int i = 0; i < trees.size() ; i++){ vector> all_permutations = trees[i]->get_all_permutations(); for (auto ap : all_permutations){ //clone tree diff --git a/include/ufo/Expr.hpp b/include/ufo/Expr.hpp index 2a9afb3d7..3812d744f 100644 --- a/include/ufo/Expr.hpp +++ b/include/ufo/Expr.hpp @@ -2406,6 +2406,9 @@ namespace expr if (isOpX(v)) return sort::arrayTy(v->left(), typeOf(v->right())); if (isOpX(v)) return sort::adTy(v->left ()); if (isOpX(v)) return bv::bvsort (bv::width(v), v->efac()); + if (isOpX(v) || isOpX(v) || isOpX(v) || isOpX(v) || isOpX(v) || + isOpX(v) || isOpX(v) || isOpX(v)) return mk (v->efac ()); + if (isOpX(v)) return mk (v->efac ()); if (isOp(v)) return bv::bvsort (64, v->efac()); diff --git a/include/ufo/Smt/ZExprConverter.hpp b/include/ufo/Smt/ZExprConverter.hpp index 1f9bfd718..2b3ddfb36 100644 --- a/include/ufo/Smt/ZExprConverter.hpp +++ b/include/ufo/Smt/ZExprConverter.hpp @@ -73,11 +73,9 @@ namespace ufo } else if (isOpX (e)){ res = reinterpret_cast (Z3_mk_int_sort (ctx)); - std::cout << e << "\n"; } else if (isOpX (e)) { res = reinterpret_cast (Z3_mk_real_sort(ctx)); - std::cout << e << "\n"; } else if (isOpX (e)) res = reinterpret_cast (Z3_mk_bool_sort (ctx)); From 0ead9e57dcbb6e095caf8a545d26125c60cf7761 Mon Sep 17 00:00:00 2001 From: Konstantin Britikov <31989062+BritikovKI@users.noreply.github.com> Date: Wed, 22 Jan 2025 14:48:35 +0100 Subject: [PATCH 230/236] Func summarization (#11) * Func summarization: initial steps * Func summarization: sratch working func summarization * Func summarization: cleaning of PR * Func summarization: cleaning of PR * Func summarization: adding comments * Nested Loops: printing the simplified formula --- include/ae/AeValSolver.hpp | 22 ++++ include/deep/HornNonlin.hpp | 25 +++++ include/deep/NonlinCHCsolver.hpp | 161 +++++++++++++++++++++++++++-- include/ufo/Smt/ZExprConverter.hpp | 11 +- 4 files changed, 207 insertions(+), 12 deletions(-) diff --git a/include/ae/AeValSolver.hpp b/include/ae/AeValSolver.hpp index 1a7c4c8fc..219199d5b 100644 --- a/include/ae/AeValSolver.hpp +++ b/include/ae/AeValSolver.hpp @@ -769,6 +769,28 @@ namespace ufo return coreQE(tmp, qVars); } + template static Expr eliminateQuantifiersExceptForVars(Expr fla, Range const & qVars, bool doArithm = true) + { + if (qVars.size() == 0) return fla; + ExprSet dsjs, newDsjs; + getDisj(fla, dsjs); + if (dsjs.size() > 1) + { + for (auto & d : dsjs) newDsjs.insert(eliminateQuantifiersExceptForVars(d, qVars)); + return disjoin(newDsjs, fla->getFactory()); + } + + ExprSet hardVars; + filter (fla, bind::IsConst (), inserter(hardVars, hardVars.begin())); + minusSets(hardVars, qVars); + ExprSet cnjs; + getConj(fla, cnjs); + constantPropagation(hardVars, cnjs, doArithm); + Expr tmp = simpEquivClasses(qVars, cnjs, fla->getFactory()); + tmp = simpleQE(tmp, hardVars); + return coreQE(tmp, hardVars); + } + template static Expr eliminateQuantifiersRepl(Expr fla, Range& vars) { ExprFactory &efac = fla->getFactory(); diff --git a/include/deep/HornNonlin.hpp b/include/deep/HornNonlin.hpp index eee88fe30..fa182b6a6 100755 --- a/include/deep/HornNonlin.hpp +++ b/include/deep/HornNonlin.hpp @@ -115,6 +115,31 @@ namespace ufo } + vector getParents(HornRuleExt chc) { + assert(std::find_if(chcs.begin(), chcs.end(), [chc](HornRuleExt comp) { return chc.body == comp.body; }) != chcs.end()); + if(chc.isFact) return {}; + auto parentsExpr = chc.srcRelations; + vector parents; + for(HornRuleExt candidate: chcs){ + if(std::find(parentsExpr.begin(), parentsExpr.end(), candidate.dstRelation) != parentsExpr.end() && + candidate.dstRelation != chc.dstRelation){ + parents.push_back(candidate); + } + } + return parents; + } + + HornRuleExt getChild(HornRuleExt const chc) { + assert(std::find_if(chcs.begin(), chcs.end(), [chc](HornRuleExt comp) { return chc.body == comp.body; }) != chcs.end()); + auto parentsExpr = chc.dstRelation; + HornRuleExt child = *std::find_if(chcs.begin(), chcs.end(), + [parentsExpr](HornRuleExt elem){ + return (std::find(elem.srcRelations.begin(), elem.srcRelations.end(), parentsExpr) != elem.srcRelations.end()); + }); + + return child; + } + void splitBody (HornRuleExt& hr, ExprVector& srcVars, ExprSet& lin) { getConj (hr.body, lin); diff --git a/include/deep/NonlinCHCsolver.hpp b/include/deep/NonlinCHCsolver.hpp index faabeb251..00859ad0f 100644 --- a/include/deep/NonlinCHCsolver.hpp +++ b/include/deep/NonlinCHCsolver.hpp @@ -578,10 +578,157 @@ namespace ufo return NULL; } + void inlineChc(std::vector &function, HornRuleExt & chc, std::string func_name) { + // We check that CHC we're trying to inline is not a loop + if (std::find(chc.srcRelations.begin(), chc.srcRelations.end(), chc.dstRelation) != chc.srcRelations.end() || chc.srcRelations.empty()) return; + + // We iterate over predicates in the CHC, inlining those which are "auxiliary" + // This is determined based on the function we are testing currently + // Currently "tested" function is provided via "func_name" + // (Coverage of functions called from within the "func_name" does not matter in this setting) + auto it = chc.srcRelations.begin(); + auto itVars = chc.srcVars.begin(); + while(it != chc.srcRelations.end()){ + auto source = *it; + string source_name = lexical_cast(source); + int dst = source_name.find(func_name); + if (dst != string::npos) { it++; itVars++; continue; } + Expr incomingFormula = mk (m_efac); + ExprVector dstVars; + bool entered = false; + // We iterate over the set of chcs, discovering chcs which "target" predicate is the source of simplified CHC + // All of the source "bodies" are disjoined and used to replace the source uninterpreted predicate + for(auto& fun: function){ + if(fun.dstRelation == source){ + entered = true; + inlineChc(function, fun, func_name); + dstVars = fun.dstVars; + ExprVector incomingVec = {incomingFormula, fun.body}; + incomingFormula = disjoin(incomingVec, m_efac); + incomingFormula = eliminateQuantifiersExceptForVars(incomingFormula, dstVars); + } + } + // CHC body of simplified formula is conjoined with extracted logical formula from the "source" predicates + ExprVector predicate_expl = {chc.body, incomingFormula}; + assert(dstVars.size() > 0); + chc.body = conjoin(predicate_expl, m_efac); + chc.body = replaceAll(chc.body, *itVars, dstVars); + chc.body = eliminateQuantifiers(chc.body, dstVars); + chc.srcRelations.erase(it); + chc.srcVars.erase(itVars); + } + } + + // All of the functions in the SolCMC encoding have "summary_*" predicate at the top level of the CHCs + // Therefor we can extract all of the public functions, parsing CHCs in this way + std::string extractFunctionName (Expr function) { + string pred_name = lexical_cast(function); + std::regex pattern(R"(summary_\d+_function_([a-zA-Z0-9]+))"); + std::smatch match; + std::regex_search(pred_name, match, pattern); + assert(match.size() == 2); + std::string func_name; + // Extracting the name of the function + func_name.append("_").append(match[1]).append("_"); + return func_name; + } + + std::vector preprocessFunction(std::vector &function) { + int fun_arg = 0; + for (; fun_arg < function[0].srcRelations.size(); fun_arg++) + // search for the exact tested function in the "core" CHC (which contains predicates of all public funcs) + if (function[0].srcRelations[fun_arg] != function[0].dstRelation) + break; + + std::string func_name = extractFunctionName(function[0].srcRelations[fun_arg]); + std::set simplifiedHeads; + // Find CHCs that would need to be simplified + // Those are CHCs which head is a different function(it can be derived from the predicate name) + for (int i=0; i(function[i].dstRelation); + if (destination_name.find(func_name) != string::npos) { + for (auto src: function[i].srcRelations) { + string source_name = lexical_cast(src); + int res = source_name.find(func_name); + if (res == string::npos) { + simplifiedHeads.insert(function[i].dstRelation); + break; + } + } + } + } + + // Simplifying all of the discovered predicates which relate to different functions + // By removing uninterpreted predicates in the body and replacing them with corresponding First Order formulae + for(auto & chc: ruleManager.chcs) { + if(std::find(simplifiedHeads.begin(), simplifiedHeads.end(), chc.dstRelation) != simplifiedHeads.end()){ + std::cout << "CHC before being merged: \n"; + std::cout << "Body: \n"; + pprint(chc.body); + std::cout << "Incoming UP: \n"; + pprint(chc.srcRelations); + std::cout << "\nHead: \n"; + pprint(chc.dstRelation); + inlineChc(function, chc, func_name); + std::cout << "CHC after being merged: \n"; + std::cout << "Body: \n"; + pprint(chc.body); + std::cout << "Incoming UP: \n"; + pprint(chc.srcRelations); + std::cout << "\nHead: \n"; + pprint(chc.dstRelation); + } + } + return function; + } + + void exploreFunctionTraces() { + + std::vector> function_chcs; + // Exploration of functions found in the CHC encoding + // building the full set of possible traces through the function + for(auto func: ruleManager.index_cycle_chc) { + function_chcs.push_back({ruleManager.chcs[func]}); + // getting initial parents, all of the functions communicate through single interface: index chc + // Therefore we can extract all of the public functions this way one by one, separating testing for them + // getting all of the public functions + for (int j = 0; j < function_chcs.back().size(); j++) { + auto child = function_chcs.back()[j]; + // pushing back all of the possible execution traces through chcs of the uncovered function + auto parents = ruleManager.getParents(child); + for(HornRuleExt parent: parents) { + if(std::find_if(function_chcs.back().begin(), function_chcs.back().end(), + [parent](HornRuleExt comp) { return parent.body == comp.body; }) == function_chcs.back().end()) { + function_chcs.back().push_back(parent); + } + } + } + // Getting the children of core chcs + for (int j = 0; j < function_chcs.back().size(); j++) { + HornRuleExt parent = function_chcs.back()[j]; + // pushing back all children of the uncovered function + if (parent.isQuery) continue; + auto child = ruleManager.getChild(parent); + if(std::find_if(function_chcs.back().begin(), function_chcs.back().end(), + [child](HornRuleExt comp) { return child.body == comp.body; }) == function_chcs.back().end()) { + function_chcs.back().push_back(child); + } + } + + } + + // for every function we do preprocessing + // merging internal function calls into a single logical formula instead of a tree + for(auto & func: function_chcs) { + preprocessFunction(func); + } + } + // TODO: skeleton of the new implementation void exploreTracesNonLinearTG(int bnd) { set todoCHCs; + exploreFunctionTraces(); int number_of_tests = 0; int chcs_original_size = ruleManager.chcs.size(); @@ -652,13 +799,7 @@ namespace ufo tree_map.clear(); varCnt = 0; treeToSMT(t->getRoot()); -// serialize(); -// for(auto e: ssa){ -// outs() << "Expr: " << (*e) << "\n"; -// } -// u.dumpToFile(ssa); -// pprint(ssa); - auto res = u.isSat(ssa); + auto res = u.isSat(ssa, true, true); trees_checked_per_cur_bnd++; time_t my_time = time(NULL); outs () << "rq_t : " << ctime(&my_time) << "\n"; @@ -671,6 +812,7 @@ namespace ufo outs () << "unrolling unsat\n"; } else if (true == res) { + u.dumpToFile(ssa); if (satTrees[id].size() > 0) { satTrees[id].push_back(deep::chcTree::clone(t)); } else { @@ -779,7 +921,10 @@ namespace ufo return; } } - else outs () << "unknown\n"; + else { + u.dumpToFile(ssa); + outs () << "unknown\n"; + } } for (auto t : trees){ t->deleteTree(); diff --git a/include/ufo/Smt/ZExprConverter.hpp b/include/ufo/Smt/ZExprConverter.hpp index 2b3ddfb36..dcb24dffb 100644 --- a/include/ufo/Smt/ZExprConverter.hpp +++ b/include/ufo/Smt/ZExprConverter.hpp @@ -8,6 +8,9 @@ #include "ufo/ExprLlvm.hpp" + +// TODO: REWORK OF ADTS HANDLING + namespace ufo { @@ -80,7 +83,8 @@ namespace ufo else if (isOpX (e)) res = reinterpret_cast (Z3_mk_bool_sort (ctx)); else if (isOpX (e)) { - res = reinterpret_cast (Z3_mk_datatype_sort(ctx, Z3_mk_string_symbol(ctx, lexical_cast(e->left ()).c_str()))); + res = reinterpret_cast (Z3_mk_int_sort (ctx)); +// res = reinterpret_cast (Z3_mk_datatype_sort(ctx, Z3_mk_string_symbol(ctx, lexical_cast(e->left ()).c_str()))); }// GF: hack for now else if (isOpX (e)) { @@ -216,8 +220,6 @@ namespace ufo reinterpret_cast (static_cast (marshal (bind::fname (e), ctx, cache, seen, adts, adts_seen)))); - - // -- marshall all arguments except for the first one // -- (which is the fdecl) std::vector args (e->arity ()); @@ -833,7 +835,8 @@ namespace ufo if (dkind == Z3_OP_DT_ACCESSOR) { Z3_sort srt = Z3_get_sort(ctx, z); - Z3_func_decl acc = Z3_get_datatype_sort_constructor_accessor(ctx, srt,1,1); + // TODO: CHANGE THIS HARDCODE OF ACCESSORS + Z3_func_decl acc = Z3_get_datatype_sort_constructor_accessor(ctx, srt, 1, 1); Expr res = bind::fapp (unmarshal (z3::func_decl (ctx, fdecl), efac, cache, seen, adts_seen, adts, accessors), args); accessors.push_back(bind::fname(res)); From 69d80acfbb34b99ef1aa304633cca65f0e9be0e5 Mon Sep 17 00:00:00 2001 From: BritikovKI Date: Thu, 23 Jan 2025 17:00:43 +0100 Subject: [PATCH 231/236] Refactoring: removed benchmark archives --- .gitignore | 12 +- bench/run-bench.sh | 49 - .../PRODUCER_CONSUMER_2_base_skolem.smt2 | 22 - .../PRODUCER_CONSUMER_2_extend_skolem.smt2 | 52 - ...SYNAPSE_2_e8_1118_e7_1043_base_skolem.smt2 | 21 - ...NAPSE_2_e8_1118_e7_1043_extend_skolem.smt2 | 46 - .../SYNAPSE_4_e8_420_e8_1525_base_skolem.smt2 | 26 - ...YNAPSE_4_e8_420_e8_1525_extend_skolem.smt2 | 28 - bench/skolems/car_1_extend_skolem.smt2 | 18 - bench/skolems/car_2_base1_skolem.smt2 | 14 - bench/skolems/car_2_base2_skolem.smt2 | 16 - bench/skolems/car_2_extend_skolem.smt2 | 18 - bench/skolems/car_3_base1_skolem.smt2 | 14 - bench/skolems/car_3_base2_skolem.smt2 | 16 - bench/skolems/car_3_e2_695_base1_skolem.smt2 | 14 - bench/skolems/car_3_e2_695_base2_skolem.smt2 | 16 - bench/skolems/car_3_e2_695_extend_skolem.smt2 | 18 - bench/skolems/car_3_e7_626_base_skolem.smt2 | 14 - bench/skolems/car_3_e7_626_extend_skolem.smt2 | 18 - bench/skolems/car_3_e8_33_base_skolem.smt2 | 14 - .../car_3_e8_33_e2_1010_base_skolem.smt2 | 14 - .../car_3_e8_33_e2_1010_extend_skolem.smt2 | 18 - .../car_3_e8_33_e7_220_base_skolem.smt2 | 14 - .../car_3_e8_33_e7_220_extend_skolem.smt2 | 18 - bench/skolems/car_3_e8_33_extend_skolem.smt2 | 18 - bench/skolems/car_3_extend_skolem.smt2 | 18 - .../car_4_e3_57_e4_1047_base_skolem.smt2 | 14 - .../car_4_e3_57_e4_1047_extend_skolem.smt2 | 18 - .../car_4_e3_57_e6_784_base_skolem.smt2 | 14 - .../car_4_e3_57_e6_784_extend_skolem.smt2 | 18 - bench/skolems/car_4_e7_592_base1_skolem.smt2 | 14 - bench/skolems/car_4_e7_592_base2_skolem.smt2 | 16 - bench/skolems/car_4_e7_592_extend_skolem.smt2 | 18 - bench/skolems/car_4_e8_118_base_skolem.smt2 | 14 - bench/skolems/car_4_e8_118_extend_skolem.smt2 | 18 - .../skolems/car_all_e2_108_base1_skolem.smt2 | 15 - .../skolems/car_all_e2_108_base2_skolem.smt2 | 19 - .../skolems/car_all_e2_108_extend_skolem.smt2 | 21 - .../car_all_e2_142_e8_194_base1_skolem.smt2 | 15 - .../car_all_e2_142_e8_194_base2_skolem.smt2 | 19 - .../car_all_e2_142_e8_194_extend_skolem.smt2 | 21 - .../car_all_e3_1068_e4_275_base_skolem.smt2 | 15 - .../car_all_e3_1068_e4_275_extend_skolem.smt2 | 21 - .../car_all_e3_1068_e6_790_base1_skolem.smt2 | 15 - .../car_all_e3_1068_e6_790_base2_skolem.smt2 | 19 - .../car_all_e3_1068_e6_790_extend_skolem.smt2 | 21 - .../skolems/car_all_e8_856_base1_skolem.smt2 | 15 - .../skolems/car_all_e8_856_base2_skolem.smt2 | 19 - .../skolems/car_all_e8_856_extend_skolem.smt2 | 21 - bench/skolems/cd_base1_skolem.smt2 | 40 - bench/skolems/cd_base2_skolem.smt2 | 53 - bench/skolems/cd_base3_skolem.smt2 | 69 - .../cd_e7_621_e8_714_base1_skolem.smt2 | 18 - .../cd_e7_621_e8_714_base2_skolem.smt2 | 33 - .../cd_e7_621_e8_714_extend_skolem.smt2 | 56 - bench/skolems/cd_extend_skolem.smt2 | 126 - .../cruise_controller_01_base_skolem.smt2 | 2454 ----------------- .../cruise_controller_02_base_skolem.smt2 | 2454 ----------------- .../cruise_controller_06_base_skolem.smt2 | 5 - .../cruise_controller_06_extend_skolem.smt2 | 5 - .../cruise_controller_07_base_skolem.smt2 | 5 - .../cruise_controller_07_extend_skolem.smt2 | 5 - .../cruise_controller_09_base_skolem.smt2 | 9 - .../cruise_controller_09_extend_skolem.smt2 | 18 - .../cruise_controller_11_base_skolem.smt2 | 6 - .../cruise_controller_11_extend_skolem.smt2 | 6 - .../cruise_controller_15_base_skolem.smt2 | 6 - .../cruise_controller_15_extend_skolem.smt2 | 6 - .../cruise_controller_16_base_skolem.smt2 | 6 - .../cruise_controller_16_extend_skolem.smt2 | 6 - .../cruise_controller_17_base1_skolem.smt2 | 9 - .../cruise_controller_17_base2_skolem.smt2 | 9 - .../cruise_controller_17_extend_skolem.smt2 | 10 - .../cruise_controller_20_base_skolem.smt2 | 9 - .../cruise_controller_20_extend_skolem.smt2 | 11 - .../cruise_controller_23_base_skolem.smt2 | 5 - .../cruise_controller_23_extend_skolem.smt2 | 5 - bench/skolems/ex3_e7_590_base_skolem.smt2 | 5 - .../ex3_e7_590_e7_590_base_skolem.smt2 | 5 - .../ex3_e7_590_e7_590_extend_skolem.smt2 | 8 - .../ex3_e7_590_e8_550_base_skolem.smt2 | 5 - .../ex3_e7_590_e8_550_extend_skolem.smt2 | 8 - bench/skolems/ex3_e7_590_extend_skolem.smt2 | 8 - bench/skolems/ex3_e8_120_base_skolem.smt2 | 5 - bench/skolems/ex3_e8_120_extend_skolem.smt2 | 8 - .../ex3_e8_381_e7_224_base_skolem.smt2 | 5 - .../ex3_e8_381_e7_224_extend_skolem.smt2 | 8 - bench/skolems/example_base1_skolem.smt2 | 18 - bench/skolems/example_base2_skolem.smt2 | 69 - bench/skolems/example_base3_skolem.smt2 | 67 - bench/skolems/example_extend_skolem.smt2 | 103 - .../fast_1_e7_2044_e8_1396_base_skolem.smt2 | 5 - .../fast_1_e7_2044_e8_1396_extend_skolem.smt2 | 15 - bench/skolems/fast_1_e8_747_base1_skolem.smt2 | 5 - bench/skolems/fast_1_e8_747_base2_skolem.smt2 | 14 - .../fast_1_e8_747_e8_1041_base_skolem.smt2 | 5 - .../fast_1_e8_747_e8_1041_extend_skolem.smt2 | 15 - .../skolems/fast_1_e8_747_extend_skolem.smt2 | 15 - .../fast_2_e7_2526_e8_1145_base1_skolem.smt2 | 37 - .../fast_2_e7_2526_e8_1145_base2_skolem.smt2 | 66 - .../fast_2_e7_2526_e8_1145_extend_skolem.smt2 | 72 - bench/skolems/fast_2_e8_460_base_skolem.smt2 | 37 - .../fast_2_e8_460_e8_1920_base_skolem.smt2 | 37 - .../fast_2_e8_460_e8_1920_extend_skolem.smt2 | 24 - .../skolems/fast_2_e8_460_extend_skolem.smt2 | 24 - bench/skolems/hysteresis_1_base_skolem.smt2 | 6 - bench/skolems/hysteresis_1_extend_skolem.smt2 | 6 - bench/skolems/hysteresis_2_base_skolem.smt2 | 5 - bench/skolems/hysteresis_2_extend_skolem.smt2 | 6 - bench/skolems/hysteresis_3_base_skolem.smt2 | 5 - bench/skolems/hysteresis_3_extend_skolem.smt2 | 6 - bench/skolems/hysteresis_all_base_skolem.smt2 | 6 - .../skolems/hysteresis_all_extend_skolem.smt2 | 11 - bench/skolems/newexample_base1_skolem.smt2 | 23 - bench/skolems/newexample_base2_skolem.smt2 | 56 - bench/skolems/newexample_base3_skolem.smt2 | 78 - bench/skolems/newexample_extend_skolem.smt2 | 93 - bench/skolems/rtp_1_base_skolem.smt2 | 115 - bench/skolems/rtp_1_extend_skolem.smt2 | 118 - bench/skolems/speed_e7_207_base_skolem.smt2 | 6 - .../speed_e7_207_e7_538_base_skolem.smt2 | 6 - .../speed_e7_207_e7_538_extend_skolem.smt2 | 6 - .../speed_e7_207_e8_507_base1_skolem.smt2 | 6 - .../speed_e7_207_e8_507_base2_skolem.smt2 | 6 - .../speed_e7_207_e8_507_extend_skolem.smt2 | 6 - bench/skolems/speed_e7_207_extend_skolem.smt2 | 6 - bench/skolems/speed_e8_136_base_skolem.smt2 | 6 - bench/skolems/speed_e8_136_extend_skolem.smt2 | 6 - .../speed_e8_649_e7_709_base_skolem.smt2 | 6 - .../speed_e8_649_e7_709_extend_skolem.smt2 | 6 - .../skolems/tramway_e7_1834_base1_skolem.smt2 | 76 - .../skolems/tramway_e7_1834_base2_skolem.smt2 | 109 - .../skolems/tramway_e7_1834_base3_skolem.smt2 | 109 - .../skolems/tramway_e7_1834_base4_skolem.smt2 | 109 - .../tramway_e7_1834_e7_2363_base1_skolem.smt2 | 79 - .../tramway_e7_1834_e7_2363_base2_skolem.smt2 | 108 - .../tramway_e7_1834_e7_2363_base3_skolem.smt2 | 108 - .../tramway_e7_1834_e7_2363_base4_skolem.smt2 | 108 - ...tramway_e7_1834_e7_2363_extend_skolem.smt2 | 215 -- .../tramway_e7_1834_extend_skolem.smt2 | 216 -- .../PRODUCER_CONSUMER_2_base_s_part.smt2 | 25 - .../PRODUCER_CONSUMER_2_base_t_part.smt2 | 25 - .../PRODUCER_CONSUMER_2_extend_s_part.smt2 | 26 - .../PRODUCER_CONSUMER_2_extend_t_part.smt2 | 26 - ...SYNAPSE_2_e8_1118_e7_1043_base_s_part.smt2 | 25 - ...SYNAPSE_2_e8_1118_e7_1043_base_t_part.smt2 | 25 - ...NAPSE_2_e8_1118_e7_1043_extend_s_part.smt2 | 26 - ...NAPSE_2_e8_1118_e7_1043_extend_t_part.smt2 | 26 - .../SYNAPSE_4_e8_420_e8_1525_base_s_part.smt2 | 23 - .../SYNAPSE_4_e8_420_e8_1525_base_t_part.smt2 | 23 - ...YNAPSE_4_e8_420_e8_1525_extend_s_part.smt2 | 24 - ...YNAPSE_4_e8_420_e8_1525_extend_t_part.smt2 | 24 - bench/tasks/car_1_extend_s_part.smt2 | 20 - bench/tasks/car_1_extend_t_part.smt2 | 20 - bench/tasks/car_2_base1_s_part.smt2 | 19 - bench/tasks/car_2_base1_t_part.smt2 | 18 - bench/tasks/car_2_base2_s_part.smt2 | 27 - bench/tasks/car_2_base2_t_part.smt2 | 18 - bench/tasks/car_2_extend_s_part.smt2 | 20 - bench/tasks/car_2_extend_t_part.smt2 | 19 - bench/tasks/car_3_base1_s_part.smt2 | 19 - bench/tasks/car_3_base1_t_part.smt2 | 17 - bench/tasks/car_3_base2_s_part.smt2 | 25 - bench/tasks/car_3_base2_t_part.smt2 | 24 - bench/tasks/car_3_e2_695_base1_s_part.smt2 | 18 - bench/tasks/car_3_e2_695_base1_t_part.smt2 | 17 - bench/tasks/car_3_e2_695_base2_s_part.smt2 | 27 - bench/tasks/car_3_e2_695_base2_t_part.smt2 | 24 - bench/tasks/car_3_e2_695_extend_s_part.smt2 | 20 - bench/tasks/car_3_e2_695_extend_t_part.smt2 | 18 - bench/tasks/car_3_e7_626_base_s_part.smt2 | 17 - bench/tasks/car_3_e7_626_base_t_part.smt2 | 17 - bench/tasks/car_3_e7_626_extend_s_part.smt2 | 18 - bench/tasks/car_3_e7_626_extend_t_part.smt2 | 18 - bench/tasks/car_3_e8_33_base_s_part.smt2 | 17 - bench/tasks/car_3_e8_33_base_t_part.smt2 | 17 - .../car_3_e8_33_e2_1010_base_s_part.smt2 | 17 - .../car_3_e8_33_e2_1010_base_t_part.smt2 | 17 - .../car_3_e8_33_e2_1010_extend_s_part.smt2 | 18 - .../car_3_e8_33_e2_1010_extend_t_part.smt2 | 18 - .../tasks/car_3_e8_33_e7_220_base_s_part.smt2 | 19 - .../tasks/car_3_e8_33_e7_220_base_t_part.smt2 | 17 - .../car_3_e8_33_e7_220_extend_s_part.smt2 | 20 - .../car_3_e8_33_e7_220_extend_t_part.smt2 | 18 - bench/tasks/car_3_e8_33_extend_s_part.smt2 | 18 - bench/tasks/car_3_e8_33_extend_t_part.smt2 | 18 - bench/tasks/car_3_extend_s_part.smt2 | 20 - bench/tasks/car_3_extend_t_part.smt2 | 19 - .../car_4_e3_57_e4_1047_base_s_part.smt2 | 19 - .../car_4_e3_57_e4_1047_base_t_part.smt2 | 17 - .../car_4_e3_57_e4_1047_extend_s_part.smt2 | 18 - .../car_4_e3_57_e4_1047_extend_t_part.smt2 | 18 - .../tasks/car_4_e3_57_e6_784_base_s_part.smt2 | 19 - .../tasks/car_4_e3_57_e6_784_base_t_part.smt2 | 17 - .../car_4_e3_57_e6_784_extend_s_part.smt2 | 20 - .../car_4_e3_57_e6_784_extend_t_part.smt2 | 18 - bench/tasks/car_4_e7_592_base1_s_part.smt2 | 19 - bench/tasks/car_4_e7_592_base1_t_part.smt2 | 17 - bench/tasks/car_4_e7_592_base2_s_part.smt2 | 25 - bench/tasks/car_4_e7_592_base2_t_part.smt2 | 23 - bench/tasks/car_4_e7_592_extend_s_part.smt2 | 20 - bench/tasks/car_4_e7_592_extend_t_part.smt2 | 18 - bench/tasks/car_4_e8_118_base_s_part.smt2 | 19 - bench/tasks/car_4_e8_118_base_t_part.smt2 | 17 - bench/tasks/car_4_e8_118_extend_s_part.smt2 | 20 - bench/tasks/car_4_e8_118_extend_t_part.smt2 | 18 - bench/tasks/car_all_e2_108_base1_s_part.smt2 | 19 - bench/tasks/car_all_e2_108_base1_t_part.smt2 | 19 - bench/tasks/car_all_e2_108_base2_s_part.smt2 | 30 - bench/tasks/car_all_e2_108_base2_t_part.smt2 | 26 - bench/tasks/car_all_e2_108_extend_s_part.smt2 | 20 - bench/tasks/car_all_e2_108_extend_t_part.smt2 | 20 - .../car_all_e2_142_e8_194_base1_s_part.smt2 | 19 - .../car_all_e2_142_e8_194_base1_t_part.smt2 | 19 - .../car_all_e2_142_e8_194_base2_s_part.smt2 | 30 - .../car_all_e2_142_e8_194_base2_t_part.smt2 | 26 - .../car_all_e2_142_e8_194_extend_s_part.smt2 | 20 - .../car_all_e2_142_e8_194_extend_t_part.smt2 | 20 - .../car_all_e3_1068_e4_275_base_s_part.smt2 | 19 - .../car_all_e3_1068_e4_275_base_t_part.smt2 | 19 - .../car_all_e3_1068_e4_275_extend_s_part.smt2 | 20 - .../car_all_e3_1068_e4_275_extend_t_part.smt2 | 20 - .../car_all_e3_1068_e6_790_base1_s_part.smt2 | 19 - .../car_all_e3_1068_e6_790_base1_t_part.smt2 | 19 - .../car_all_e3_1068_e6_790_base2_s_part.smt2 | 30 - .../car_all_e3_1068_e6_790_base2_t_part.smt2 | 26 - .../car_all_e3_1068_e6_790_extend_s_part.smt2 | 20 - .../car_all_e3_1068_e6_790_extend_t_part.smt2 | 20 - bench/tasks/car_all_e8_856_base1_s_part.smt2 | 19 - bench/tasks/car_all_e8_856_base1_t_part.smt2 | 19 - bench/tasks/car_all_e8_856_base2_s_part.smt2 | 28 - bench/tasks/car_all_e8_856_base2_t_part.smt2 | 26 - bench/tasks/car_all_e8_856_extend_s_part.smt2 | 20 - bench/tasks/car_all_e8_856_extend_t_part.smt2 | 20 - bench/tasks/cd_base1_s_part.smt2 | 37 - bench/tasks/cd_base1_t_part.smt2 | 37 - bench/tasks/cd_base2_s_part.smt2 | 55 - bench/tasks/cd_base2_t_part.smt2 | 53 - bench/tasks/cd_base3_s_part.smt2 | 73 - bench/tasks/cd_base3_t_part.smt2 | 69 - .../tasks/cd_e7_621_e8_714_base1_s_part.smt2 | 25 - .../tasks/cd_e7_621_e8_714_base1_t_part.smt2 | 25 - .../tasks/cd_e7_621_e8_714_base2_s_part.smt2 | 37 - .../tasks/cd_e7_621_e8_714_base2_t_part.smt2 | 35 - .../tasks/cd_e7_621_e8_714_extend_s_part.smt2 | 26 - .../tasks/cd_e7_621_e8_714_extend_t_part.smt2 | 26 - bench/tasks/cd_extend_s_part.smt2 | 38 - bench/tasks/cd_extend_t_part.smt2 | 38 - .../cruise_controller_01_base_s_part.smt2 | 161 -- .../cruise_controller_01_base_t_part.smt2 | 160 -- .../cruise_controller_01_extend_s_part.smt2 | 240 -- .../cruise_controller_01_extend_t_part.smt2 | 238 -- .../cruise_controller_02_base_s_part.smt2 | 160 -- .../cruise_controller_02_base_t_part.smt2 | 161 -- .../cruise_controller_02_extend_s_part.smt2 | 240 -- .../cruise_controller_02_extend_t_part.smt2 | 162 -- .../cruise_controller_06_base_s_part.smt2 | 9 - .../cruise_controller_06_base_t_part.smt2 | 9 - .../cruise_controller_06_extend_s_part.smt2 | 10 - .../cruise_controller_06_extend_t_part.smt2 | 10 - .../cruise_controller_07_base_s_part.smt2 | 9 - .../cruise_controller_07_base_t_part.smt2 | 9 - .../cruise_controller_07_extend_s_part.smt2 | 10 - .../cruise_controller_07_extend_t_part.smt2 | 10 - .../cruise_controller_09_base_s_part.smt2 | 11 - .../cruise_controller_09_base_t_part.smt2 | 11 - .../cruise_controller_09_extend_s_part.smt2 | 12 - .../cruise_controller_09_extend_t_part.smt2 | 12 - .../cruise_controller_11_base_s_part.smt2 | 11 - .../cruise_controller_11_base_t_part.smt2 | 11 - .../cruise_controller_11_extend_s_part.smt2 | 12 - .../cruise_controller_11_extend_t_part.smt2 | 12 - .../cruise_controller_15_base_s_part.smt2 | 11 - .../cruise_controller_15_base_t_part.smt2 | 11 - .../cruise_controller_15_extend_s_part.smt2 | 12 - .../cruise_controller_15_extend_t_part.smt2 | 12 - .../cruise_controller_16_base_s_part.smt2 | 11 - .../cruise_controller_16_base_t_part.smt2 | 11 - .../cruise_controller_16_extend_s_part.smt2 | 12 - .../cruise_controller_16_extend_t_part.smt2 | 12 - .../cruise_controller_17_base1_s_part.smt2 | 11 - .../cruise_controller_17_base1_t_part.smt2 | 11 - .../cruise_controller_17_base2_s_part.smt2 | 16 - .../cruise_controller_17_base2_t_part.smt2 | 14 - .../cruise_controller_17_extend_s_part.smt2 | 12 - .../cruise_controller_17_extend_t_part.smt2 | 12 - .../cruise_controller_20_base_s_part.smt2 | 11 - .../cruise_controller_20_base_t_part.smt2 | 11 - .../cruise_controller_20_extend_s_part.smt2 | 12 - .../cruise_controller_20_extend_t_part.smt2 | 12 - .../cruise_controller_23_base_s_part.smt2 | 9 - .../cruise_controller_23_base_t_part.smt2 | 9 - .../cruise_controller_23_extend_s_part.smt2 | 10 - .../cruise_controller_23_extend_t_part.smt2 | 10 - bench/tasks/ex3_e7_590_base_s_part.smt2 | 11 - bench/tasks/ex3_e7_590_base_t_part.smt2 | 11 - .../tasks/ex3_e7_590_e7_590_base_s_part.smt2 | 11 - .../tasks/ex3_e7_590_e7_590_base_t_part.smt2 | 11 - .../ex3_e7_590_e7_590_extend_s_part.smt2 | 12 - .../ex3_e7_590_e7_590_extend_t_part.smt2 | 12 - .../tasks/ex3_e7_590_e8_550_base_s_part.smt2 | 11 - .../tasks/ex3_e7_590_e8_550_base_t_part.smt2 | 11 - .../ex3_e7_590_e8_550_extend_s_part.smt2 | 12 - .../ex3_e7_590_e8_550_extend_t_part.smt2 | 12 - bench/tasks/ex3_e7_590_extend_s_part.smt2 | 12 - bench/tasks/ex3_e7_590_extend_t_part.smt2 | 12 - bench/tasks/ex3_e8_120_base_s_part.smt2 | 11 - bench/tasks/ex3_e8_120_base_t_part.smt2 | 11 - bench/tasks/ex3_e8_120_extend_s_part.smt2 | 12 - bench/tasks/ex3_e8_120_extend_t_part.smt2 | 12 - .../tasks/ex3_e8_381_e7_224_base_s_part.smt2 | 11 - .../tasks/ex3_e8_381_e7_224_base_t_part.smt2 | 11 - .../ex3_e8_381_e7_224_extend_s_part.smt2 | 12 - .../ex3_e8_381_e7_224_extend_t_part.smt2 | 12 - bench/tasks/example_base1_s_part.smt2 | 23 - bench/tasks/example_base1_t_part.smt2 | 23 - bench/tasks/example_base2_s_part.smt2 | 34 - bench/tasks/example_base2_t_part.smt2 | 32 - bench/tasks/example_base3_s_part.smt2 | 45 - bench/tasks/example_base3_t_part.smt2 | 41 - bench/tasks/example_extend_s_part.smt2 | 35 - bench/tasks/example_extend_t_part.smt2 | 33 - .../fast_1_e7_2044_e8_1396_base_s_part.smt2 | 15 - .../fast_1_e7_2044_e8_1396_base_t_part.smt2 | 15 - .../fast_1_e7_2044_e8_1396_extend_s_part.smt2 | 16 - .../fast_1_e7_2044_e8_1396_extend_t_part.smt2 | 16 - bench/tasks/fast_1_e8_747_base1_s_part.smt2 | 15 - bench/tasks/fast_1_e8_747_base1_t_part.smt2 | 15 - bench/tasks/fast_1_e8_747_base2_s_part.smt2 | 22 - bench/tasks/fast_1_e8_747_base2_t_part.smt2 | 20 - .../fast_1_e8_747_e8_1041_base_s_part.smt2 | 15 - .../fast_1_e8_747_e8_1041_base_t_part.smt2 | 15 - .../fast_1_e8_747_e8_1041_extend_s_part.smt2 | 16 - .../fast_1_e8_747_e8_1041_extend_t_part.smt2 | 16 - bench/tasks/fast_1_e8_747_extend_s_part.smt2 | 16 - bench/tasks/fast_1_e8_747_extend_t_part.smt2 | 16 - .../fast_2_e7_2526_e8_1145_base1_s_part.smt2 | 49 - .../fast_2_e7_2526_e8_1145_base1_t_part.smt2 | 49 - .../fast_2_e7_2526_e8_1145_base2_s_part.smt2 | 73 - .../fast_2_e7_2526_e8_1145_base2_t_part.smt2 | 71 - .../fast_2_e7_2526_e8_1145_extend_s_part.smt2 | 50 - .../fast_2_e7_2526_e8_1145_extend_t_part.smt2 | 50 - bench/tasks/fast_2_e8_460_base_s_part.smt2 | 49 - bench/tasks/fast_2_e8_460_base_t_part.smt2 | 49 - .../fast_2_e8_460_e8_1920_base_s_part.smt2 | 49 - .../fast_2_e8_460_e8_1920_base_t_part.smt2 | 49 - .../fast_2_e8_460_e8_1920_extend_s_part.smt2 | 50 - .../fast_2_e8_460_e8_1920_extend_t_part.smt2 | 50 - bench/tasks/fast_2_e8_460_extend_s_part.smt2 | 50 - bench/tasks/fast_2_e8_460_extend_t_part.smt2 | 50 - bench/tasks/hysteresis_1_base_s_part.smt2 | 11 - bench/tasks/hysteresis_1_base_t_part.smt2 | 11 - bench/tasks/hysteresis_1_extend_s_part.smt2 | 12 - bench/tasks/hysteresis_1_extend_t_part.smt2 | 12 - bench/tasks/hysteresis_2_base_s_part.smt2 | 11 - bench/tasks/hysteresis_2_base_t_part.smt2 | 11 - bench/tasks/hysteresis_2_extend_s_part.smt2 | 12 - bench/tasks/hysteresis_2_extend_t_part.smt2 | 12 - bench/tasks/hysteresis_3_base_s_part.smt2 | 11 - bench/tasks/hysteresis_3_base_t_part.smt2 | 11 - bench/tasks/hysteresis_3_extend_s_part.smt2 | 12 - bench/tasks/hysteresis_3_extend_t_part.smt2 | 12 - bench/tasks/hysteresis_all_base_s_part.smt2 | 11 - bench/tasks/hysteresis_all_base_t_part.smt2 | 11 - bench/tasks/hysteresis_all_extend_s_part.smt2 | 12 - bench/tasks/hysteresis_all_extend_t_part.smt2 | 12 - bench/tasks/newexample_base1_s_part.smt2 | 25 - bench/tasks/newexample_base1_t_part.smt2 | 25 - bench/tasks/newexample_base2_s_part.smt2 | 37 - bench/tasks/newexample_base2_t_part.smt2 | 35 - bench/tasks/newexample_base3_s_part.smt2 | 49 - bench/tasks/newexample_base3_t_part.smt2 | 45 - bench/tasks/newexample_extend_s_part.smt2 | 38 - bench/tasks/newexample_extend_t_part.smt2 | 36 - bench/tasks/rtp_1_base_s_part.smt2 | 37 - bench/tasks/rtp_1_base_t_part.smt2 | 37 - bench/tasks/rtp_1_extend_s_part.smt2 | 38 - bench/tasks/rtp_1_extend_t_part.smt2 | 38 - bench/tasks/speed_e7_207_base_s_part.smt2 | 11 - bench/tasks/speed_e7_207_base_t_part.smt2 | 11 - .../speed_e7_207_e7_538_base_s_part.smt2 | 11 - .../speed_e7_207_e7_538_base_t_part.smt2 | 11 - .../speed_e7_207_e7_538_extend_s_part.smt2 | 12 - .../speed_e7_207_e7_538_extend_t_part.smt2 | 12 - .../speed_e7_207_e8_507_base1_s_part.smt2 | 11 - .../speed_e7_207_e8_507_base1_t_part.smt2 | 11 - .../speed_e7_207_e8_507_base2_s_part.smt2 | 16 - .../speed_e7_207_e8_507_base2_t_part.smt2 | 14 - .../speed_e7_207_e8_507_extend_s_part.smt2 | 12 - .../speed_e7_207_e8_507_extend_t_part.smt2 | 12 - bench/tasks/speed_e7_207_extend_s_part.smt2 | 12 - bench/tasks/speed_e7_207_extend_t_part.smt2 | 12 - bench/tasks/speed_e8_136_base_s_part.smt2 | 11 - bench/tasks/speed_e8_136_base_t_part.smt2 | 11 - bench/tasks/speed_e8_136_extend_s_part.smt2 | 12 - bench/tasks/speed_e8_136_extend_t_part.smt2 | 12 - .../speed_e8_649_e7_709_base_s_part.smt2 | 11 - .../speed_e8_649_e7_709_base_t_part.smt2 | 11 - .../speed_e8_649_e7_709_extend_s_part.smt2 | 12 - .../speed_e8_649_e7_709_extend_t_part.smt2 | 12 - bench/tasks/tramway_e7_1834_base1_s_part.smt2 | 61 - bench/tasks/tramway_e7_1834_base1_t_part.smt2 | 61 - bench/tasks/tramway_e7_1834_base2_s_part.smt2 | 91 - bench/tasks/tramway_e7_1834_base2_t_part.smt2 | 89 - bench/tasks/tramway_e7_1834_base3_s_part.smt2 | 121 - bench/tasks/tramway_e7_1834_base3_t_part.smt2 | 117 - bench/tasks/tramway_e7_1834_base4_s_part.smt2 | 151 - bench/tasks/tramway_e7_1834_base4_t_part.smt2 | 145 - .../tramway_e7_1834_e7_2363_base1_s_part.smt2 | 61 - .../tramway_e7_1834_e7_2363_base1_t_part.smt2 | 61 - .../tramway_e7_1834_e7_2363_base2_s_part.smt2 | 91 - .../tramway_e7_1834_e7_2363_base2_t_part.smt2 | 89 - .../tramway_e7_1834_e7_2363_base3_s_part.smt2 | 121 - .../tramway_e7_1834_e7_2363_base3_t_part.smt2 | 117 - .../tramway_e7_1834_e7_2363_base4_s_part.smt2 | 151 - .../tramway_e7_1834_e7_2363_base4_t_part.smt2 | 145 - ...tramway_e7_1834_e7_2363_extend_s_part.smt2 | 62 - ...tramway_e7_1834_e7_2363_extend_t_part.smt2 | 63 - .../tasks/tramway_e7_1834_extend_s_part.smt2 | 62 - .../tasks/tramway_e7_1834_extend_t_part.smt2 | 62 - bench_adt/LEON/amortize-queue-goal1.smt2 | 68 - bench_adt/LEON/amortize-queue-goal10.smt2 | 95 - bench_adt/LEON/amortize-queue-goal11.smt2 | 98 - bench_adt/LEON/amortize-queue-goal12.smt2 | 101 - bench_adt/LEON/amortize-queue-goal13.smt2 | 104 - bench_adt/LEON/amortize-queue-goal14.smt2 | 107 - bench_adt/LEON/amortize-queue-goal15.smt2 | 110 - bench_adt/LEON/amortize-queue-goal2.smt2 | 71 - bench_adt/LEON/amortize-queue-goal3.smt2 | 74 - bench_adt/LEON/amortize-queue-goal4.smt2 | 77 - bench_adt/LEON/amortize-queue-goal5.smt2 | 80 - bench_adt/LEON/amortize-queue-goal6.smt2 | 83 - bench_adt/LEON/amortize-queue-goal7.smt2 | 86 - bench_adt/LEON/amortize-queue-goal8.smt2 | 89 - bench_adt/LEON/amortize-queue-goal9.smt2 | 92 - bench_adt/LEON/bsearch-tree-goal1.smt2 | 87 - bench_adt/LEON/bsearch-tree-goal10.smt2 | 114 - bench_adt/LEON/bsearch-tree-goal11.smt2 | 117 - bench_adt/LEON/bsearch-tree-goal12.smt2 | 120 - bench_adt/LEON/bsearch-tree-goal13.smt2 | 123 - bench_adt/LEON/bsearch-tree-goal14.smt2 | 126 - bench_adt/LEON/bsearch-tree-goal15.smt2 | 129 - bench_adt/LEON/bsearch-tree-goal16.smt2 | 132 - bench_adt/LEON/bsearch-tree-goal17.smt2 | 135 - bench_adt/LEON/bsearch-tree-goal18.smt2 | 138 - bench_adt/LEON/bsearch-tree-goal2.smt2 | 90 - bench_adt/LEON/bsearch-tree-goal3.smt2 | 93 - bench_adt/LEON/bsearch-tree-goal4.smt2 | 96 - bench_adt/LEON/bsearch-tree-goal5.smt2 | 99 - bench_adt/LEON/bsearch-tree-goal6.smt2 | 102 - bench_adt/LEON/bsearch-tree-goal7.smt2 | 105 - bench_adt/LEON/bsearch-tree-goal8.smt2 | 108 - bench_adt/LEON/bsearch-tree-goal9.smt2 | 111 - bench_adt/LEON/heap-goal1.smt2 | 91 - bench_adt/LEON/heap-goal10.smt2 | 118 - bench_adt/LEON/heap-goal11.smt2 | 121 - bench_adt/LEON/heap-goal12.smt2 | 124 - bench_adt/LEON/heap-goal13.smt2 | 127 - bench_adt/LEON/heap-goal2.smt2 | 94 - bench_adt/LEON/heap-goal3.smt2 | 97 - bench_adt/LEON/heap-goal4.smt2 | 100 - bench_adt/LEON/heap-goal5.smt2 | 103 - bench_adt/LEON/heap-goal6.smt2 | 106 - bench_adt/LEON/heap-goal7.smt2 | 109 - bench_adt/LEON/heap-goal8.smt2 | 112 - bench_adt/LEON/heap-goal9.smt2 | 115 - bench_adt/heap_insert.smt2 | 43 - bench_adt/heap_insert_eq.smt2 | 43 - bench_adt/heap_insert_multi.smt2 | 47 - bench_adt/heap_size.smt2 | 8 - bench_adt/list_append_ass.smt2 | 8 - bench_adt/list_append_contains.smt2 | 16 - bench_adt/list_append_len.smt2 | 12 - bench_adt/list_append_min.smt2 | 14 - bench_adt/list_append_nil.smt2 | 8 - bench_adt/list_append_sum.smt2 | 12 - bench_adt/list_len.smt2 | 8 - bench_adt/list_len_butlast.smt2 | 16 - bench_adt/list_len_stren.smt2 | 12 - bench_adt/list_min_max.smt2 | 12 - bench_adt/list_min_sum.smt2 | 12 - bench_adt/list_min_sum_len.smt2 | 16 - bench_adt/list_rev.smt2 | 15 - bench_adt/list_rev2.smt2 | 21 - bench_adt/list_rev2_append.smt2 | 15 - bench_adt/list_rev2_len.smt2 | 20 - bench_adt/list_rev_append.smt2 | 12 - bench_adt/queue_amort.smt2 | 32 - bench_adt/queue_len.smt2 | 33 - bench_adt/queue_popback.smt2 | 34 - bench_adt/queue_push.smt2 | 35 - bench_adt/queue_push_to_list.smt2 | 39 - bench_adt/run-bench.sh | 77 - bench_adt/simple_if.smt2 | 163 -- bench_adt/simple_if_min.smt2 | 163 -- bench_adt/tree_insert_all_size.smt2 | 21 - bench_adt/tree_insert_size.smt2 | 12 - bench_adt/tree_insert_sum.smt2 | 12 - bench_adt/tree_size.smt2 | 8 - bench_horn_adt/ADTIND/heap_size.smt2 | 11 - bench_horn_adt/ADTIND/list_append_ass.smt2 | 12 - bench_horn_adt/ADTIND/list_append_len.smt2 | 15 - bench_horn_adt/ADTIND/list_append_min.smt2 | 18 - bench_horn_adt/ADTIND/list_append_min2.smt2 | 18 - bench_horn_adt/ADTIND/list_append_nil.smt2 | 11 - bench_horn_adt/ADTIND/list_append_sum.smt2 | 18 - bench_horn_adt/ADTIND/list_interleave.smt2 | 20 - bench_horn_adt/ADTIND/list_len.smt2 | 11 - bench_horn_adt/ADTIND/list_len_butlast.smt2 | 17 - bench_horn_adt/ADTIND/list_len_stren.smt2 | 18 - bench_horn_adt/ADTIND/list_min_max.smt2 | 15 - bench_horn_adt/ADTIND/list_min_sum.smt2 | 16 - bench_horn_adt/ADTIND/list_min_sum_len.smt2 | 22 - bench_horn_adt/ADTIND/list_rev.smt2 | 24 - bench_horn_adt/ADTIND/list_rev2_append.smt2 | 25 - bench_horn_adt/ADTIND/list_rev2_len.smt2 | 29 - bench_horn_adt/ADTIND/list_rev_append.smt2 | 17 - bench_horn_adt/ADTIND/list_rev_len.smt2 | 26 - bench_horn_adt/ADTIND/queue_amort.smt2 | 41 - bench_horn_adt/ADTIND/queue_len.smt2 | 43 - bench_horn_adt/ADTIND/queue_popback.smt2 | 44 - bench_horn_adt/ADTIND/queue_push.smt2 | 47 - bench_horn_adt/ADTIND/queue_push_to_list.smt2 | 52 - .../ADTIND/tree_insert_all_size.smt2 | 30 - bench_horn_adt/ADTIND/tree_insert_size.smt2 | 20 - bench_horn_adt/ADTIND/tree_insert_sum.smt2 | 19 - bench_horn_adt/ADTIND/tree_size.smt2 | 11 - bench_horn_adt/LEON/amortize-queue-goal1.smt2 | 19 - .../LEON/amortize-queue-goal10.smt2 | 19 - .../LEON/amortize-queue-goal11.smt2 | 15 - .../LEON/amortize-queue-goal12.smt2 | 41 - .../LEON/amortize-queue-goal13.smt2 | 53 - .../LEON/amortize-queue-goal14.smt2 | 56 - .../LEON/amortize-queue-goal15.smt2 | 63 - bench_horn_adt/LEON/amortize-queue-goal2.smt2 | 25 - bench_horn_adt/LEON/amortize-queue-goal3.smt2 | 29 - bench_horn_adt/LEON/amortize-queue-goal4.smt2 | 26 - bench_horn_adt/LEON/amortize-queue-goal5.smt2 | 21 - bench_horn_adt/LEON/amortize-queue-goal6.smt2 | 51 - bench_horn_adt/LEON/amortize-queue-goal7.smt2 | 62 - bench_horn_adt/LEON/amortize-queue-goal8.smt2 | 15 - bench_horn_adt/LEON/amortize-queue-goal9.smt2 | 32 - bench_horn_adt/LEON/bsearch-tree-goal1.smt2 | 36 - bench_horn_adt/LEON/bsearch-tree-goal10.smt2 | 34 - bench_horn_adt/LEON/bsearch-tree-goal11.smt2 | 41 - bench_horn_adt/LEON/bsearch-tree-goal12.smt2 | 28 - bench_horn_adt/LEON/bsearch-tree-goal13.smt2 | 36 - bench_horn_adt/LEON/bsearch-tree-goal14.smt2 | 50 - bench_horn_adt/LEON/bsearch-tree-goal2.smt2 | 32 - bench_horn_adt/LEON/bsearch-tree-goal3.smt2 | 36 - bench_horn_adt/LEON/bsearch-tree-goal4.smt2 | 45 - bench_horn_adt/LEON/bsearch-tree-goal5.smt2 | 50 - bench_horn_adt/LEON/bsearch-tree-goal6.smt2 | 26 - bench_horn_adt/LEON/bsearch-tree-goal8.smt2 | 31 - bench_horn_adt/LEON/bsearch-tree-goal9.smt2 | 26 - bench_horn_adt/arrays/arr_map.smt2 | 55 - bench_horn_adt/arrays/arr_map_dup.smt2 | 49 - bench_horn_adt/arrays/arr_multiset.smt2 | 47 - bench_horn_adt/arrays/arr_multiset_clear.smt2 | 44 - bench_horn_adt/arrays/arr_queue.smt2 | 73 - bench_horn_adt/arrays/arr_queue_even.smt2 | 73 - bench_horn_adt/arrays/arr_set_remove.smt2 | 44 - bench_horn_adt/arrays/arr_set_removeall.smt2 | 45 - bench_horn_adt/arrays/arr_stack.smt2 | 60 - bench_horn_adt/arrays/arr_stack_even.smt2 | 60 - .../benchmarks-vmcai2015/clam/goal10.smt2 | 51 - .../benchmarks-vmcai2015/clam/goal11.smt2 | 54 - .../benchmarks-vmcai2015/clam/goal12.smt2 | 66 - .../benchmarks-vmcai2015/clam/goal17.smt2 | 57 - .../benchmarks-vmcai2015/clam/goal18.smt2 | 54 - .../benchmarks-vmcai2015/clam/goal19.smt2 | 55 - .../benchmarks-vmcai2015/clam/goal2.smt2 | 58 - .../benchmarks-vmcai2015/clam/goal20.smt2 | 84 - .../benchmarks-vmcai2015/clam/goal21.smt2 | 118 - .../benchmarks-vmcai2015/clam/goal27.smt2 | 65 - .../benchmarks-vmcai2015/clam/goal3.smt2 | 59 - .../benchmarks-vmcai2015/clam/goal4.smt2 | 56 - .../benchmarks-vmcai2015/clam/goal5.smt2 | 72 - .../benchmarks-vmcai2015/clam/goal6.smt2 | 75 - .../benchmarks-vmcai2015/clam/goal7.smt2 | 88 - .../benchmarks-vmcai2015/clam/goal72.smt2 | 37 - .../benchmarks-vmcai2015/clam/goal8.smt2 | 52 - .../benchmarks-vmcai2015/clam/goal9.smt2 | 55 - .../amortize-queue/amortize-queue-goal1.smt2 | 60 - .../amortize-queue/amortize-queue-goal10.smt2 | 91 - .../amortize-queue/amortize-queue-goal11.smt2 | 40 - .../amortize-queue/amortize-queue-goal12.smt2 | 124 - .../amortize-queue/amortize-queue-goal13.smt2 | 156 -- .../amortize-queue/amortize-queue-goal14.smt2 | 164 -- .../amortize-queue/amortize-queue-goal15.smt2 | 122 - .../amortize-queue/amortize-queue-goal2.smt2 | 74 - .../amortize-queue/amortize-queue-goal3.smt2 | 81 - .../amortize-queue/amortize-queue-goal4.smt2 | 58 - .../amortize-queue/amortize-queue-goal5.smt2 | 62 - .../amortize-queue/amortize-queue-goal6.smt2 | 133 - .../amortize-queue/amortize-queue-goal7.smt2 | 204 -- .../amortize-queue/amortize-queue-goal8.smt2 | 37 - .../amortize-queue/amortize-queue-goal9.smt2 | 77 - .../leon/bsearch-tree/bsearch-tree-goal1.smt2 | 75 - .../bsearch-tree/bsearch-tree-goal10.smt2 | 123 - .../bsearch-tree/bsearch-tree-goal12.smt2 | 131 - .../bsearch-tree/bsearch-tree-goal13.smt2 | 128 - .../bsearch-tree/bsearch-tree-goal15.smt2 | 188 -- .../bsearch-tree/bsearch-tree-goal16.smt2 | 141 - .../bsearch-tree/bsearch-tree-goal18.smt2 | 176 -- .../leon/bsearch-tree/bsearch-tree-goal2.smt2 | 92 - .../leon/bsearch-tree/bsearch-tree-goal3.smt2 | 114 - .../leon/bsearch-tree/bsearch-tree-goal4.smt2 | 89 - .../leon/bsearch-tree/bsearch-tree-goal5.smt2 | 106 - .../leon/bsearch-tree/bsearch-tree-goal6.smt2 | 139 - .../leon/bsearch-tree/bsearch-tree-goal7.smt2 | 169 -- .../leon/bsearch-tree/bsearch-tree-goal8.smt2 | 233 -- .../leon/bsearch-tree/bsearch-tree-goal9.smt2 | 94 - .../leon/heap/heap-goal1.smt2 | 210 -- .../leon/heap/heap-goal10.smt2 | 286 -- .../leon/heap/heap-goal12.smt2 | 301 -- .../leon/heap/heap-goal13.smt2 | 304 -- .../leon/heap/heap-goal2.smt2 | 227 -- .../leon/heap/heap-goal3.smt2 | 201 -- .../leon/heap/heap-goal4.smt2 | 201 -- .../leon/heap/heap-goal5.smt2 | 201 -- .../leon/heap/heap-goal6.smt2 | 224 -- .../leon/heap/heap-goal7.smt2 | 224 -- .../leon/heap/heap-goal8.smt2 | 233 -- .../leon/heap/heap-goal9.smt2 | 272 -- bench_horn_adt/list_remove.smt2 | 26 - .../heap_size.smt2.err | 0 .../heap_size.smt2.err.tmp | 0 .../heap_size.smt2.out | 4 - .../list_append_ass.smt2.err | 0 .../list_append_ass.smt2.err.tmp | 0 .../list_append_ass.smt2.out | 4 - .../list_append_len.smt2.err | 0 .../list_append_len.smt2.err.tmp | 0 .../list_append_len.smt2.out | 7 - .../list_append_min.smt2.err | 0 .../list_append_min.smt2.err.tmp | 0 .../list_append_min.smt2.out | 7 - .../list_append_min2.smt2.err | 0 .../list_append_min2.smt2.err.tmp | 0 .../list_append_min2.smt2.out | 7 - .../list_append_nil.smt2.err | 0 .../list_append_nil.smt2.err.tmp | 0 .../list_append_nil.smt2.out | 4 - .../list_append_sum.smt2.err | 0 .../list_append_sum.smt2.err.tmp | 0 .../list_append_sum.smt2.out | 7 - .../list_interleave.smt2.err | 0 .../list_interleave.smt2.err.tmp | 0 .../list_interleave.smt2.out | 0 .../log-2023-04-19-10-48-12/list_len.smt2.err | 0 .../list_len.smt2.err.tmp | 0 .../log-2023-04-19-10-48-12/list_len.smt2.out | 4 - .../list_len_butlast.smt2.err | 0 .../list_len_butlast.smt2.err.tmp | 0 .../list_len_butlast.smt2.out | 7 - .../list_len_stren.smt2.err | 0 .../list_len_stren.smt2.err.tmp | 0 .../list_len_stren.smt2.out | 7 - .../list_min_max.smt2.err | 0 .../list_min_max.smt2.err.tmp | 0 .../list_min_max.smt2.out | 7 - .../list_min_sum.smt2.err | 0 .../list_min_sum.smt2.err.tmp | 0 .../list_min_sum.smt2.out | 7 - .../list_min_sum_len.smt2.err | 0 .../list_min_sum_len.smt2.err.tmp | 0 .../list_min_sum_len.smt2.out | 10 - .../log-2023-04-19-10-48-12/list_rev.smt2.err | 0 .../list_rev.smt2.err.tmp | 0 .../log-2023-04-19-10-48-12/list_rev.smt2.out | 0 .../list_rev2_append.smt2.err | 0 .../list_rev2_append.smt2.err.tmp | 0 .../list_rev2_append.smt2.out | 7 - .../list_rev2_len.smt2.err | 0 .../list_rev2_len.smt2.err.tmp | 0 .../list_rev2_len.smt2.out | 0 .../list_rev_append.smt2.err | 0 .../list_rev_append.smt2.err.tmp | 0 .../list_rev_append.smt2.out | 7 - .../list_rev_len.smt2.err | 0 .../list_rev_len.smt2.err.tmp | 0 .../list_rev_len.smt2.out | 10 - .../queue_amort.smt2.err | 0 .../queue_amort.smt2.err.tmp | 0 .../queue_amort.smt2.out | 0 .../queue_len.smt2.err.tmp | 0 .../queue_len.smt2.out | 0 bench_horn_adt/remove_not_contained.smt2 | 25 - bench_horn_adt/run-bench.sh | 49 - bench_sim/list_arr_extra_1.smt2 | 20 - bench_sim/list_arr_extra_2.smt2 | 14 - bench_sim/list_arr_pop.smt2 | 22 - bench_sim/list_arr_push.smt2 | 32 - bench_sim/queue_arr_de.smt2 | 41 - bench_sim/queue_arr_en.smt2 | 39 - bench_sim/queue_arr_extra_1.smt2 | 18 - bench_sim/queue_arr_extra_2.smt2 | 37 - bench_sim/queue_arr_extra_3.smt2 | 17 - bench_sim/queue_arr_extra_4.smt2 | 18 - bench_sim/queue_rev_extra_1.smt2 | 14 - bench_sim/run-bench.sh | 49 - bench_sim/set_dupl_consume.smt2 | 34 - bench_sim/set_dupl_extra_1.smt2 | 11 - bench_sim/set_dupl_extra_2.smt2 | 16 - bench_sim/set_dupl_extra_3.smt2 | 16 - bench_sim/set_dupl_extra_4.smt2 | 25 - bench_sim/set_dupl_extra_5.smt2 | 16 - bench_sim/set_dupl_extra_6.smt2 | 16 - bench_sim/set_dupl_extra_7.smt2 | 22 - bench_sim/set_dupl_extra_8.smt2 | 23 - bench_sim/set_dupl_extra_9.smt2 | 23 - bench_sim/set_dupl_produce.smt2 | 27 - bench_sim/set_singl_consume.smt2 | 16 - bench_sim/set_singl_extra_1.smt2 | 15 - bench_sim/set_singl_produce.smt2 | 22 - 716 files changed, 11 insertions(+), 33941 deletions(-) delete mode 100755 bench/run-bench.sh delete mode 100644 bench/skolems/PRODUCER_CONSUMER_2_base_skolem.smt2 delete mode 100644 bench/skolems/PRODUCER_CONSUMER_2_extend_skolem.smt2 delete mode 100644 bench/skolems/SYNAPSE_2_e8_1118_e7_1043_base_skolem.smt2 delete mode 100644 bench/skolems/SYNAPSE_2_e8_1118_e7_1043_extend_skolem.smt2 delete mode 100644 bench/skolems/SYNAPSE_4_e8_420_e8_1525_base_skolem.smt2 delete mode 100644 bench/skolems/SYNAPSE_4_e8_420_e8_1525_extend_skolem.smt2 delete mode 100644 bench/skolems/car_1_extend_skolem.smt2 delete mode 100644 bench/skolems/car_2_base1_skolem.smt2 delete mode 100644 bench/skolems/car_2_base2_skolem.smt2 delete mode 100644 bench/skolems/car_2_extend_skolem.smt2 delete mode 100644 bench/skolems/car_3_base1_skolem.smt2 delete mode 100644 bench/skolems/car_3_base2_skolem.smt2 delete mode 100644 bench/skolems/car_3_e2_695_base1_skolem.smt2 delete mode 100644 bench/skolems/car_3_e2_695_base2_skolem.smt2 delete mode 100644 bench/skolems/car_3_e2_695_extend_skolem.smt2 delete mode 100644 bench/skolems/car_3_e7_626_base_skolem.smt2 delete mode 100644 bench/skolems/car_3_e7_626_extend_skolem.smt2 delete mode 100644 bench/skolems/car_3_e8_33_base_skolem.smt2 delete mode 100644 bench/skolems/car_3_e8_33_e2_1010_base_skolem.smt2 delete mode 100644 bench/skolems/car_3_e8_33_e2_1010_extend_skolem.smt2 delete mode 100644 bench/skolems/car_3_e8_33_e7_220_base_skolem.smt2 delete mode 100644 bench/skolems/car_3_e8_33_e7_220_extend_skolem.smt2 delete mode 100644 bench/skolems/car_3_e8_33_extend_skolem.smt2 delete mode 100644 bench/skolems/car_3_extend_skolem.smt2 delete mode 100644 bench/skolems/car_4_e3_57_e4_1047_base_skolem.smt2 delete mode 100644 bench/skolems/car_4_e3_57_e4_1047_extend_skolem.smt2 delete mode 100644 bench/skolems/car_4_e3_57_e6_784_base_skolem.smt2 delete mode 100644 bench/skolems/car_4_e3_57_e6_784_extend_skolem.smt2 delete mode 100644 bench/skolems/car_4_e7_592_base1_skolem.smt2 delete mode 100644 bench/skolems/car_4_e7_592_base2_skolem.smt2 delete mode 100644 bench/skolems/car_4_e7_592_extend_skolem.smt2 delete mode 100644 bench/skolems/car_4_e8_118_base_skolem.smt2 delete mode 100644 bench/skolems/car_4_e8_118_extend_skolem.smt2 delete mode 100644 bench/skolems/car_all_e2_108_base1_skolem.smt2 delete mode 100644 bench/skolems/car_all_e2_108_base2_skolem.smt2 delete mode 100644 bench/skolems/car_all_e2_108_extend_skolem.smt2 delete mode 100644 bench/skolems/car_all_e2_142_e8_194_base1_skolem.smt2 delete mode 100644 bench/skolems/car_all_e2_142_e8_194_base2_skolem.smt2 delete mode 100644 bench/skolems/car_all_e2_142_e8_194_extend_skolem.smt2 delete mode 100644 bench/skolems/car_all_e3_1068_e4_275_base_skolem.smt2 delete mode 100644 bench/skolems/car_all_e3_1068_e4_275_extend_skolem.smt2 delete mode 100644 bench/skolems/car_all_e3_1068_e6_790_base1_skolem.smt2 delete mode 100644 bench/skolems/car_all_e3_1068_e6_790_base2_skolem.smt2 delete mode 100644 bench/skolems/car_all_e3_1068_e6_790_extend_skolem.smt2 delete mode 100644 bench/skolems/car_all_e8_856_base1_skolem.smt2 delete mode 100644 bench/skolems/car_all_e8_856_base2_skolem.smt2 delete mode 100644 bench/skolems/car_all_e8_856_extend_skolem.smt2 delete mode 100644 bench/skolems/cd_base1_skolem.smt2 delete mode 100644 bench/skolems/cd_base2_skolem.smt2 delete mode 100644 bench/skolems/cd_base3_skolem.smt2 delete mode 100644 bench/skolems/cd_e7_621_e8_714_base1_skolem.smt2 delete mode 100644 bench/skolems/cd_e7_621_e8_714_base2_skolem.smt2 delete mode 100644 bench/skolems/cd_e7_621_e8_714_extend_skolem.smt2 delete mode 100644 bench/skolems/cd_extend_skolem.smt2 delete mode 100644 bench/skolems/cruise_controller_01_base_skolem.smt2 delete mode 100644 bench/skolems/cruise_controller_02_base_skolem.smt2 delete mode 100644 bench/skolems/cruise_controller_06_base_skolem.smt2 delete mode 100644 bench/skolems/cruise_controller_06_extend_skolem.smt2 delete mode 100644 bench/skolems/cruise_controller_07_base_skolem.smt2 delete mode 100644 bench/skolems/cruise_controller_07_extend_skolem.smt2 delete mode 100644 bench/skolems/cruise_controller_09_base_skolem.smt2 delete mode 100644 bench/skolems/cruise_controller_09_extend_skolem.smt2 delete mode 100644 bench/skolems/cruise_controller_11_base_skolem.smt2 delete mode 100644 bench/skolems/cruise_controller_11_extend_skolem.smt2 delete mode 100644 bench/skolems/cruise_controller_15_base_skolem.smt2 delete mode 100644 bench/skolems/cruise_controller_15_extend_skolem.smt2 delete mode 100644 bench/skolems/cruise_controller_16_base_skolem.smt2 delete mode 100644 bench/skolems/cruise_controller_16_extend_skolem.smt2 delete mode 100644 bench/skolems/cruise_controller_17_base1_skolem.smt2 delete mode 100644 bench/skolems/cruise_controller_17_base2_skolem.smt2 delete mode 100644 bench/skolems/cruise_controller_17_extend_skolem.smt2 delete mode 100644 bench/skolems/cruise_controller_20_base_skolem.smt2 delete mode 100644 bench/skolems/cruise_controller_20_extend_skolem.smt2 delete mode 100644 bench/skolems/cruise_controller_23_base_skolem.smt2 delete mode 100644 bench/skolems/cruise_controller_23_extend_skolem.smt2 delete mode 100644 bench/skolems/ex3_e7_590_base_skolem.smt2 delete mode 100644 bench/skolems/ex3_e7_590_e7_590_base_skolem.smt2 delete mode 100644 bench/skolems/ex3_e7_590_e7_590_extend_skolem.smt2 delete mode 100644 bench/skolems/ex3_e7_590_e8_550_base_skolem.smt2 delete mode 100644 bench/skolems/ex3_e7_590_e8_550_extend_skolem.smt2 delete mode 100644 bench/skolems/ex3_e7_590_extend_skolem.smt2 delete mode 100644 bench/skolems/ex3_e8_120_base_skolem.smt2 delete mode 100644 bench/skolems/ex3_e8_120_extend_skolem.smt2 delete mode 100644 bench/skolems/ex3_e8_381_e7_224_base_skolem.smt2 delete mode 100644 bench/skolems/ex3_e8_381_e7_224_extend_skolem.smt2 delete mode 100644 bench/skolems/example_base1_skolem.smt2 delete mode 100644 bench/skolems/example_base2_skolem.smt2 delete mode 100644 bench/skolems/example_base3_skolem.smt2 delete mode 100644 bench/skolems/example_extend_skolem.smt2 delete mode 100644 bench/skolems/fast_1_e7_2044_e8_1396_base_skolem.smt2 delete mode 100644 bench/skolems/fast_1_e7_2044_e8_1396_extend_skolem.smt2 delete mode 100644 bench/skolems/fast_1_e8_747_base1_skolem.smt2 delete mode 100644 bench/skolems/fast_1_e8_747_base2_skolem.smt2 delete mode 100644 bench/skolems/fast_1_e8_747_e8_1041_base_skolem.smt2 delete mode 100644 bench/skolems/fast_1_e8_747_e8_1041_extend_skolem.smt2 delete mode 100644 bench/skolems/fast_1_e8_747_extend_skolem.smt2 delete mode 100644 bench/skolems/fast_2_e7_2526_e8_1145_base1_skolem.smt2 delete mode 100644 bench/skolems/fast_2_e7_2526_e8_1145_base2_skolem.smt2 delete mode 100644 bench/skolems/fast_2_e7_2526_e8_1145_extend_skolem.smt2 delete mode 100644 bench/skolems/fast_2_e8_460_base_skolem.smt2 delete mode 100644 bench/skolems/fast_2_e8_460_e8_1920_base_skolem.smt2 delete mode 100644 bench/skolems/fast_2_e8_460_e8_1920_extend_skolem.smt2 delete mode 100644 bench/skolems/fast_2_e8_460_extend_skolem.smt2 delete mode 100644 bench/skolems/hysteresis_1_base_skolem.smt2 delete mode 100644 bench/skolems/hysteresis_1_extend_skolem.smt2 delete mode 100644 bench/skolems/hysteresis_2_base_skolem.smt2 delete mode 100644 bench/skolems/hysteresis_2_extend_skolem.smt2 delete mode 100644 bench/skolems/hysteresis_3_base_skolem.smt2 delete mode 100644 bench/skolems/hysteresis_3_extend_skolem.smt2 delete mode 100644 bench/skolems/hysteresis_all_base_skolem.smt2 delete mode 100644 bench/skolems/hysteresis_all_extend_skolem.smt2 delete mode 100644 bench/skolems/newexample_base1_skolem.smt2 delete mode 100644 bench/skolems/newexample_base2_skolem.smt2 delete mode 100644 bench/skolems/newexample_base3_skolem.smt2 delete mode 100644 bench/skolems/newexample_extend_skolem.smt2 delete mode 100644 bench/skolems/rtp_1_base_skolem.smt2 delete mode 100644 bench/skolems/rtp_1_extend_skolem.smt2 delete mode 100644 bench/skolems/speed_e7_207_base_skolem.smt2 delete mode 100644 bench/skolems/speed_e7_207_e7_538_base_skolem.smt2 delete mode 100644 bench/skolems/speed_e7_207_e7_538_extend_skolem.smt2 delete mode 100644 bench/skolems/speed_e7_207_e8_507_base1_skolem.smt2 delete mode 100644 bench/skolems/speed_e7_207_e8_507_base2_skolem.smt2 delete mode 100644 bench/skolems/speed_e7_207_e8_507_extend_skolem.smt2 delete mode 100644 bench/skolems/speed_e7_207_extend_skolem.smt2 delete mode 100644 bench/skolems/speed_e8_136_base_skolem.smt2 delete mode 100644 bench/skolems/speed_e8_136_extend_skolem.smt2 delete mode 100644 bench/skolems/speed_e8_649_e7_709_base_skolem.smt2 delete mode 100644 bench/skolems/speed_e8_649_e7_709_extend_skolem.smt2 delete mode 100644 bench/skolems/tramway_e7_1834_base1_skolem.smt2 delete mode 100644 bench/skolems/tramway_e7_1834_base2_skolem.smt2 delete mode 100644 bench/skolems/tramway_e7_1834_base3_skolem.smt2 delete mode 100644 bench/skolems/tramway_e7_1834_base4_skolem.smt2 delete mode 100644 bench/skolems/tramway_e7_1834_e7_2363_base1_skolem.smt2 delete mode 100644 bench/skolems/tramway_e7_1834_e7_2363_base2_skolem.smt2 delete mode 100644 bench/skolems/tramway_e7_1834_e7_2363_base3_skolem.smt2 delete mode 100644 bench/skolems/tramway_e7_1834_e7_2363_base4_skolem.smt2 delete mode 100644 bench/skolems/tramway_e7_1834_e7_2363_extend_skolem.smt2 delete mode 100644 bench/skolems/tramway_e7_1834_extend_skolem.smt2 delete mode 100755 bench/tasks/PRODUCER_CONSUMER_2_base_s_part.smt2 delete mode 100755 bench/tasks/PRODUCER_CONSUMER_2_base_t_part.smt2 delete mode 100755 bench/tasks/PRODUCER_CONSUMER_2_extend_s_part.smt2 delete mode 100755 bench/tasks/PRODUCER_CONSUMER_2_extend_t_part.smt2 delete mode 100755 bench/tasks/SYNAPSE_2_e8_1118_e7_1043_base_s_part.smt2 delete mode 100755 bench/tasks/SYNAPSE_2_e8_1118_e7_1043_base_t_part.smt2 delete mode 100755 bench/tasks/SYNAPSE_2_e8_1118_e7_1043_extend_s_part.smt2 delete mode 100755 bench/tasks/SYNAPSE_2_e8_1118_e7_1043_extend_t_part.smt2 delete mode 100755 bench/tasks/SYNAPSE_4_e8_420_e8_1525_base_s_part.smt2 delete mode 100755 bench/tasks/SYNAPSE_4_e8_420_e8_1525_base_t_part.smt2 delete mode 100755 bench/tasks/SYNAPSE_4_e8_420_e8_1525_extend_s_part.smt2 delete mode 100755 bench/tasks/SYNAPSE_4_e8_420_e8_1525_extend_t_part.smt2 delete mode 100755 bench/tasks/car_1_extend_s_part.smt2 delete mode 100755 bench/tasks/car_1_extend_t_part.smt2 delete mode 100755 bench/tasks/car_2_base1_s_part.smt2 delete mode 100755 bench/tasks/car_2_base1_t_part.smt2 delete mode 100755 bench/tasks/car_2_base2_s_part.smt2 delete mode 100755 bench/tasks/car_2_base2_t_part.smt2 delete mode 100755 bench/tasks/car_2_extend_s_part.smt2 delete mode 100755 bench/tasks/car_2_extend_t_part.smt2 delete mode 100755 bench/tasks/car_3_base1_s_part.smt2 delete mode 100755 bench/tasks/car_3_base1_t_part.smt2 delete mode 100755 bench/tasks/car_3_base2_s_part.smt2 delete mode 100755 bench/tasks/car_3_base2_t_part.smt2 delete mode 100755 bench/tasks/car_3_e2_695_base1_s_part.smt2 delete mode 100755 bench/tasks/car_3_e2_695_base1_t_part.smt2 delete mode 100755 bench/tasks/car_3_e2_695_base2_s_part.smt2 delete mode 100755 bench/tasks/car_3_e2_695_base2_t_part.smt2 delete mode 100755 bench/tasks/car_3_e2_695_extend_s_part.smt2 delete mode 100755 bench/tasks/car_3_e2_695_extend_t_part.smt2 delete mode 100755 bench/tasks/car_3_e7_626_base_s_part.smt2 delete mode 100755 bench/tasks/car_3_e7_626_base_t_part.smt2 delete mode 100755 bench/tasks/car_3_e7_626_extend_s_part.smt2 delete mode 100755 bench/tasks/car_3_e7_626_extend_t_part.smt2 delete mode 100755 bench/tasks/car_3_e8_33_base_s_part.smt2 delete mode 100755 bench/tasks/car_3_e8_33_base_t_part.smt2 delete mode 100755 bench/tasks/car_3_e8_33_e2_1010_base_s_part.smt2 delete mode 100755 bench/tasks/car_3_e8_33_e2_1010_base_t_part.smt2 delete mode 100755 bench/tasks/car_3_e8_33_e2_1010_extend_s_part.smt2 delete mode 100755 bench/tasks/car_3_e8_33_e2_1010_extend_t_part.smt2 delete mode 100755 bench/tasks/car_3_e8_33_e7_220_base_s_part.smt2 delete mode 100755 bench/tasks/car_3_e8_33_e7_220_base_t_part.smt2 delete mode 100755 bench/tasks/car_3_e8_33_e7_220_extend_s_part.smt2 delete mode 100755 bench/tasks/car_3_e8_33_e7_220_extend_t_part.smt2 delete mode 100755 bench/tasks/car_3_e8_33_extend_s_part.smt2 delete mode 100755 bench/tasks/car_3_e8_33_extend_t_part.smt2 delete mode 100755 bench/tasks/car_3_extend_s_part.smt2 delete mode 100755 bench/tasks/car_3_extend_t_part.smt2 delete mode 100755 bench/tasks/car_4_e3_57_e4_1047_base_s_part.smt2 delete mode 100755 bench/tasks/car_4_e3_57_e4_1047_base_t_part.smt2 delete mode 100755 bench/tasks/car_4_e3_57_e4_1047_extend_s_part.smt2 delete mode 100755 bench/tasks/car_4_e3_57_e4_1047_extend_t_part.smt2 delete mode 100755 bench/tasks/car_4_e3_57_e6_784_base_s_part.smt2 delete mode 100755 bench/tasks/car_4_e3_57_e6_784_base_t_part.smt2 delete mode 100755 bench/tasks/car_4_e3_57_e6_784_extend_s_part.smt2 delete mode 100755 bench/tasks/car_4_e3_57_e6_784_extend_t_part.smt2 delete mode 100755 bench/tasks/car_4_e7_592_base1_s_part.smt2 delete mode 100755 bench/tasks/car_4_e7_592_base1_t_part.smt2 delete mode 100755 bench/tasks/car_4_e7_592_base2_s_part.smt2 delete mode 100755 bench/tasks/car_4_e7_592_base2_t_part.smt2 delete mode 100755 bench/tasks/car_4_e7_592_extend_s_part.smt2 delete mode 100755 bench/tasks/car_4_e7_592_extend_t_part.smt2 delete mode 100755 bench/tasks/car_4_e8_118_base_s_part.smt2 delete mode 100755 bench/tasks/car_4_e8_118_base_t_part.smt2 delete mode 100755 bench/tasks/car_4_e8_118_extend_s_part.smt2 delete mode 100755 bench/tasks/car_4_e8_118_extend_t_part.smt2 delete mode 100755 bench/tasks/car_all_e2_108_base1_s_part.smt2 delete mode 100755 bench/tasks/car_all_e2_108_base1_t_part.smt2 delete mode 100755 bench/tasks/car_all_e2_108_base2_s_part.smt2 delete mode 100755 bench/tasks/car_all_e2_108_base2_t_part.smt2 delete mode 100755 bench/tasks/car_all_e2_108_extend_s_part.smt2 delete mode 100755 bench/tasks/car_all_e2_108_extend_t_part.smt2 delete mode 100755 bench/tasks/car_all_e2_142_e8_194_base1_s_part.smt2 delete mode 100755 bench/tasks/car_all_e2_142_e8_194_base1_t_part.smt2 delete mode 100755 bench/tasks/car_all_e2_142_e8_194_base2_s_part.smt2 delete mode 100755 bench/tasks/car_all_e2_142_e8_194_base2_t_part.smt2 delete mode 100755 bench/tasks/car_all_e2_142_e8_194_extend_s_part.smt2 delete mode 100755 bench/tasks/car_all_e2_142_e8_194_extend_t_part.smt2 delete mode 100755 bench/tasks/car_all_e3_1068_e4_275_base_s_part.smt2 delete mode 100755 bench/tasks/car_all_e3_1068_e4_275_base_t_part.smt2 delete mode 100755 bench/tasks/car_all_e3_1068_e4_275_extend_s_part.smt2 delete mode 100755 bench/tasks/car_all_e3_1068_e4_275_extend_t_part.smt2 delete mode 100755 bench/tasks/car_all_e3_1068_e6_790_base1_s_part.smt2 delete mode 100755 bench/tasks/car_all_e3_1068_e6_790_base1_t_part.smt2 delete mode 100755 bench/tasks/car_all_e3_1068_e6_790_base2_s_part.smt2 delete mode 100755 bench/tasks/car_all_e3_1068_e6_790_base2_t_part.smt2 delete mode 100755 bench/tasks/car_all_e3_1068_e6_790_extend_s_part.smt2 delete mode 100755 bench/tasks/car_all_e3_1068_e6_790_extend_t_part.smt2 delete mode 100755 bench/tasks/car_all_e8_856_base1_s_part.smt2 delete mode 100755 bench/tasks/car_all_e8_856_base1_t_part.smt2 delete mode 100755 bench/tasks/car_all_e8_856_base2_s_part.smt2 delete mode 100755 bench/tasks/car_all_e8_856_base2_t_part.smt2 delete mode 100755 bench/tasks/car_all_e8_856_extend_s_part.smt2 delete mode 100644 bench/tasks/car_all_e8_856_extend_t_part.smt2 delete mode 100755 bench/tasks/cd_base1_s_part.smt2 delete mode 100755 bench/tasks/cd_base1_t_part.smt2 delete mode 100755 bench/tasks/cd_base2_s_part.smt2 delete mode 100755 bench/tasks/cd_base2_t_part.smt2 delete mode 100755 bench/tasks/cd_base3_s_part.smt2 delete mode 100755 bench/tasks/cd_base3_t_part.smt2 delete mode 100755 bench/tasks/cd_e7_621_e8_714_base1_s_part.smt2 delete mode 100755 bench/tasks/cd_e7_621_e8_714_base1_t_part.smt2 delete mode 100755 bench/tasks/cd_e7_621_e8_714_base2_s_part.smt2 delete mode 100755 bench/tasks/cd_e7_621_e8_714_base2_t_part.smt2 delete mode 100755 bench/tasks/cd_e7_621_e8_714_extend_s_part.smt2 delete mode 100755 bench/tasks/cd_e7_621_e8_714_extend_t_part.smt2 delete mode 100755 bench/tasks/cd_extend_s_part.smt2 delete mode 100755 bench/tasks/cd_extend_t_part.smt2 delete mode 100755 bench/tasks/cruise_controller_01_base_s_part.smt2 delete mode 100755 bench/tasks/cruise_controller_01_base_t_part.smt2 delete mode 100755 bench/tasks/cruise_controller_01_extend_s_part.smt2 delete mode 100755 bench/tasks/cruise_controller_01_extend_t_part.smt2 delete mode 100755 bench/tasks/cruise_controller_02_base_s_part.smt2 delete mode 100755 bench/tasks/cruise_controller_02_base_t_part.smt2 delete mode 100755 bench/tasks/cruise_controller_02_extend_s_part.smt2 delete mode 100755 bench/tasks/cruise_controller_02_extend_t_part.smt2 delete mode 100755 bench/tasks/cruise_controller_06_base_s_part.smt2 delete mode 100755 bench/tasks/cruise_controller_06_base_t_part.smt2 delete mode 100755 bench/tasks/cruise_controller_06_extend_s_part.smt2 delete mode 100755 bench/tasks/cruise_controller_06_extend_t_part.smt2 delete mode 100755 bench/tasks/cruise_controller_07_base_s_part.smt2 delete mode 100755 bench/tasks/cruise_controller_07_base_t_part.smt2 delete mode 100755 bench/tasks/cruise_controller_07_extend_s_part.smt2 delete mode 100755 bench/tasks/cruise_controller_07_extend_t_part.smt2 delete mode 100755 bench/tasks/cruise_controller_09_base_s_part.smt2 delete mode 100644 bench/tasks/cruise_controller_09_base_t_part.smt2 delete mode 100755 bench/tasks/cruise_controller_09_extend_s_part.smt2 delete mode 100755 bench/tasks/cruise_controller_09_extend_t_part.smt2 delete mode 100755 bench/tasks/cruise_controller_11_base_s_part.smt2 delete mode 100755 bench/tasks/cruise_controller_11_base_t_part.smt2 delete mode 100755 bench/tasks/cruise_controller_11_extend_s_part.smt2 delete mode 100755 bench/tasks/cruise_controller_11_extend_t_part.smt2 delete mode 100755 bench/tasks/cruise_controller_15_base_s_part.smt2 delete mode 100755 bench/tasks/cruise_controller_15_base_t_part.smt2 delete mode 100755 bench/tasks/cruise_controller_15_extend_s_part.smt2 delete mode 100755 bench/tasks/cruise_controller_15_extend_t_part.smt2 delete mode 100755 bench/tasks/cruise_controller_16_base_s_part.smt2 delete mode 100755 bench/tasks/cruise_controller_16_base_t_part.smt2 delete mode 100755 bench/tasks/cruise_controller_16_extend_s_part.smt2 delete mode 100755 bench/tasks/cruise_controller_16_extend_t_part.smt2 delete mode 100755 bench/tasks/cruise_controller_17_base1_s_part.smt2 delete mode 100755 bench/tasks/cruise_controller_17_base1_t_part.smt2 delete mode 100755 bench/tasks/cruise_controller_17_base2_s_part.smt2 delete mode 100755 bench/tasks/cruise_controller_17_base2_t_part.smt2 delete mode 100755 bench/tasks/cruise_controller_17_extend_s_part.smt2 delete mode 100755 bench/tasks/cruise_controller_17_extend_t_part.smt2 delete mode 100755 bench/tasks/cruise_controller_20_base_s_part.smt2 delete mode 100755 bench/tasks/cruise_controller_20_base_t_part.smt2 delete mode 100755 bench/tasks/cruise_controller_20_extend_s_part.smt2 delete mode 100755 bench/tasks/cruise_controller_20_extend_t_part.smt2 delete mode 100755 bench/tasks/cruise_controller_23_base_s_part.smt2 delete mode 100755 bench/tasks/cruise_controller_23_base_t_part.smt2 delete mode 100755 bench/tasks/cruise_controller_23_extend_s_part.smt2 delete mode 100755 bench/tasks/cruise_controller_23_extend_t_part.smt2 delete mode 100755 bench/tasks/ex3_e7_590_base_s_part.smt2 delete mode 100755 bench/tasks/ex3_e7_590_base_t_part.smt2 delete mode 100755 bench/tasks/ex3_e7_590_e7_590_base_s_part.smt2 delete mode 100755 bench/tasks/ex3_e7_590_e7_590_base_t_part.smt2 delete mode 100755 bench/tasks/ex3_e7_590_e7_590_extend_s_part.smt2 delete mode 100755 bench/tasks/ex3_e7_590_e7_590_extend_t_part.smt2 delete mode 100755 bench/tasks/ex3_e7_590_e8_550_base_s_part.smt2 delete mode 100755 bench/tasks/ex3_e7_590_e8_550_base_t_part.smt2 delete mode 100755 bench/tasks/ex3_e7_590_e8_550_extend_s_part.smt2 delete mode 100755 bench/tasks/ex3_e7_590_e8_550_extend_t_part.smt2 delete mode 100755 bench/tasks/ex3_e7_590_extend_s_part.smt2 delete mode 100755 bench/tasks/ex3_e7_590_extend_t_part.smt2 delete mode 100755 bench/tasks/ex3_e8_120_base_s_part.smt2 delete mode 100755 bench/tasks/ex3_e8_120_base_t_part.smt2 delete mode 100755 bench/tasks/ex3_e8_120_extend_s_part.smt2 delete mode 100755 bench/tasks/ex3_e8_120_extend_t_part.smt2 delete mode 100755 bench/tasks/ex3_e8_381_e7_224_base_s_part.smt2 delete mode 100755 bench/tasks/ex3_e8_381_e7_224_base_t_part.smt2 delete mode 100755 bench/tasks/ex3_e8_381_e7_224_extend_s_part.smt2 delete mode 100755 bench/tasks/ex3_e8_381_e7_224_extend_t_part.smt2 delete mode 100755 bench/tasks/example_base1_s_part.smt2 delete mode 100755 bench/tasks/example_base1_t_part.smt2 delete mode 100755 bench/tasks/example_base2_s_part.smt2 delete mode 100755 bench/tasks/example_base2_t_part.smt2 delete mode 100755 bench/tasks/example_base3_s_part.smt2 delete mode 100755 bench/tasks/example_base3_t_part.smt2 delete mode 100755 bench/tasks/example_extend_s_part.smt2 delete mode 100755 bench/tasks/example_extend_t_part.smt2 delete mode 100755 bench/tasks/fast_1_e7_2044_e8_1396_base_s_part.smt2 delete mode 100755 bench/tasks/fast_1_e7_2044_e8_1396_base_t_part.smt2 delete mode 100755 bench/tasks/fast_1_e7_2044_e8_1396_extend_s_part.smt2 delete mode 100755 bench/tasks/fast_1_e7_2044_e8_1396_extend_t_part.smt2 delete mode 100755 bench/tasks/fast_1_e8_747_base1_s_part.smt2 delete mode 100755 bench/tasks/fast_1_e8_747_base1_t_part.smt2 delete mode 100755 bench/tasks/fast_1_e8_747_base2_s_part.smt2 delete mode 100755 bench/tasks/fast_1_e8_747_base2_t_part.smt2 delete mode 100755 bench/tasks/fast_1_e8_747_e8_1041_base_s_part.smt2 delete mode 100755 bench/tasks/fast_1_e8_747_e8_1041_base_t_part.smt2 delete mode 100755 bench/tasks/fast_1_e8_747_e8_1041_extend_s_part.smt2 delete mode 100755 bench/tasks/fast_1_e8_747_e8_1041_extend_t_part.smt2 delete mode 100755 bench/tasks/fast_1_e8_747_extend_s_part.smt2 delete mode 100755 bench/tasks/fast_1_e8_747_extend_t_part.smt2 delete mode 100755 bench/tasks/fast_2_e7_2526_e8_1145_base1_s_part.smt2 delete mode 100755 bench/tasks/fast_2_e7_2526_e8_1145_base1_t_part.smt2 delete mode 100755 bench/tasks/fast_2_e7_2526_e8_1145_base2_s_part.smt2 delete mode 100755 bench/tasks/fast_2_e7_2526_e8_1145_base2_t_part.smt2 delete mode 100755 bench/tasks/fast_2_e7_2526_e8_1145_extend_s_part.smt2 delete mode 100755 bench/tasks/fast_2_e7_2526_e8_1145_extend_t_part.smt2 delete mode 100755 bench/tasks/fast_2_e8_460_base_s_part.smt2 delete mode 100755 bench/tasks/fast_2_e8_460_base_t_part.smt2 delete mode 100755 bench/tasks/fast_2_e8_460_e8_1920_base_s_part.smt2 delete mode 100755 bench/tasks/fast_2_e8_460_e8_1920_base_t_part.smt2 delete mode 100755 bench/tasks/fast_2_e8_460_e8_1920_extend_s_part.smt2 delete mode 100755 bench/tasks/fast_2_e8_460_e8_1920_extend_t_part.smt2 delete mode 100755 bench/tasks/fast_2_e8_460_extend_s_part.smt2 delete mode 100755 bench/tasks/fast_2_e8_460_extend_t_part.smt2 delete mode 100755 bench/tasks/hysteresis_1_base_s_part.smt2 delete mode 100755 bench/tasks/hysteresis_1_base_t_part.smt2 delete mode 100755 bench/tasks/hysteresis_1_extend_s_part.smt2 delete mode 100755 bench/tasks/hysteresis_1_extend_t_part.smt2 delete mode 100755 bench/tasks/hysteresis_2_base_s_part.smt2 delete mode 100755 bench/tasks/hysteresis_2_base_t_part.smt2 delete mode 100755 bench/tasks/hysteresis_2_extend_s_part.smt2 delete mode 100755 bench/tasks/hysteresis_2_extend_t_part.smt2 delete mode 100755 bench/tasks/hysteresis_3_base_s_part.smt2 delete mode 100755 bench/tasks/hysteresis_3_base_t_part.smt2 delete mode 100755 bench/tasks/hysteresis_3_extend_s_part.smt2 delete mode 100755 bench/tasks/hysteresis_3_extend_t_part.smt2 delete mode 100755 bench/tasks/hysteresis_all_base_s_part.smt2 delete mode 100755 bench/tasks/hysteresis_all_base_t_part.smt2 delete mode 100755 bench/tasks/hysteresis_all_extend_s_part.smt2 delete mode 100755 bench/tasks/hysteresis_all_extend_t_part.smt2 delete mode 100755 bench/tasks/newexample_base1_s_part.smt2 delete mode 100755 bench/tasks/newexample_base1_t_part.smt2 delete mode 100755 bench/tasks/newexample_base2_s_part.smt2 delete mode 100755 bench/tasks/newexample_base2_t_part.smt2 delete mode 100755 bench/tasks/newexample_base3_s_part.smt2 delete mode 100755 bench/tasks/newexample_base3_t_part.smt2 delete mode 100755 bench/tasks/newexample_extend_s_part.smt2 delete mode 100755 bench/tasks/newexample_extend_t_part.smt2 delete mode 100755 bench/tasks/rtp_1_base_s_part.smt2 delete mode 100755 bench/tasks/rtp_1_base_t_part.smt2 delete mode 100755 bench/tasks/rtp_1_extend_s_part.smt2 delete mode 100755 bench/tasks/rtp_1_extend_t_part.smt2 delete mode 100755 bench/tasks/speed_e7_207_base_s_part.smt2 delete mode 100755 bench/tasks/speed_e7_207_base_t_part.smt2 delete mode 100755 bench/tasks/speed_e7_207_e7_538_base_s_part.smt2 delete mode 100755 bench/tasks/speed_e7_207_e7_538_base_t_part.smt2 delete mode 100755 bench/tasks/speed_e7_207_e7_538_extend_s_part.smt2 delete mode 100755 bench/tasks/speed_e7_207_e7_538_extend_t_part.smt2 delete mode 100755 bench/tasks/speed_e7_207_e8_507_base1_s_part.smt2 delete mode 100755 bench/tasks/speed_e7_207_e8_507_base1_t_part.smt2 delete mode 100755 bench/tasks/speed_e7_207_e8_507_base2_s_part.smt2 delete mode 100755 bench/tasks/speed_e7_207_e8_507_base2_t_part.smt2 delete mode 100755 bench/tasks/speed_e7_207_e8_507_extend_s_part.smt2 delete mode 100755 bench/tasks/speed_e7_207_e8_507_extend_t_part.smt2 delete mode 100755 bench/tasks/speed_e7_207_extend_s_part.smt2 delete mode 100755 bench/tasks/speed_e7_207_extend_t_part.smt2 delete mode 100755 bench/tasks/speed_e8_136_base_s_part.smt2 delete mode 100755 bench/tasks/speed_e8_136_base_t_part.smt2 delete mode 100755 bench/tasks/speed_e8_136_extend_s_part.smt2 delete mode 100755 bench/tasks/speed_e8_136_extend_t_part.smt2 delete mode 100755 bench/tasks/speed_e8_649_e7_709_base_s_part.smt2 delete mode 100755 bench/tasks/speed_e8_649_e7_709_base_t_part.smt2 delete mode 100755 bench/tasks/speed_e8_649_e7_709_extend_s_part.smt2 delete mode 100755 bench/tasks/speed_e8_649_e7_709_extend_t_part.smt2 delete mode 100755 bench/tasks/tramway_e7_1834_base1_s_part.smt2 delete mode 100755 bench/tasks/tramway_e7_1834_base1_t_part.smt2 delete mode 100755 bench/tasks/tramway_e7_1834_base2_s_part.smt2 delete mode 100755 bench/tasks/tramway_e7_1834_base2_t_part.smt2 delete mode 100755 bench/tasks/tramway_e7_1834_base3_s_part.smt2 delete mode 100755 bench/tasks/tramway_e7_1834_base3_t_part.smt2 delete mode 100755 bench/tasks/tramway_e7_1834_base4_s_part.smt2 delete mode 100755 bench/tasks/tramway_e7_1834_base4_t_part.smt2 delete mode 100755 bench/tasks/tramway_e7_1834_e7_2363_base1_s_part.smt2 delete mode 100755 bench/tasks/tramway_e7_1834_e7_2363_base1_t_part.smt2 delete mode 100755 bench/tasks/tramway_e7_1834_e7_2363_base2_s_part.smt2 delete mode 100755 bench/tasks/tramway_e7_1834_e7_2363_base2_t_part.smt2 delete mode 100755 bench/tasks/tramway_e7_1834_e7_2363_base3_s_part.smt2 delete mode 100755 bench/tasks/tramway_e7_1834_e7_2363_base3_t_part.smt2 delete mode 100755 bench/tasks/tramway_e7_1834_e7_2363_base4_s_part.smt2 delete mode 100755 bench/tasks/tramway_e7_1834_e7_2363_base4_t_part.smt2 delete mode 100755 bench/tasks/tramway_e7_1834_e7_2363_extend_s_part.smt2 delete mode 100755 bench/tasks/tramway_e7_1834_e7_2363_extend_t_part.smt2 delete mode 100755 bench/tasks/tramway_e7_1834_extend_s_part.smt2 delete mode 100755 bench/tasks/tramway_e7_1834_extend_t_part.smt2 delete mode 100644 bench_adt/LEON/amortize-queue-goal1.smt2 delete mode 100644 bench_adt/LEON/amortize-queue-goal10.smt2 delete mode 100644 bench_adt/LEON/amortize-queue-goal11.smt2 delete mode 100644 bench_adt/LEON/amortize-queue-goal12.smt2 delete mode 100644 bench_adt/LEON/amortize-queue-goal13.smt2 delete mode 100644 bench_adt/LEON/amortize-queue-goal14.smt2 delete mode 100644 bench_adt/LEON/amortize-queue-goal15.smt2 delete mode 100644 bench_adt/LEON/amortize-queue-goal2.smt2 delete mode 100644 bench_adt/LEON/amortize-queue-goal3.smt2 delete mode 100644 bench_adt/LEON/amortize-queue-goal4.smt2 delete mode 100644 bench_adt/LEON/amortize-queue-goal5.smt2 delete mode 100644 bench_adt/LEON/amortize-queue-goal6.smt2 delete mode 100644 bench_adt/LEON/amortize-queue-goal7.smt2 delete mode 100644 bench_adt/LEON/amortize-queue-goal8.smt2 delete mode 100644 bench_adt/LEON/amortize-queue-goal9.smt2 delete mode 100644 bench_adt/LEON/bsearch-tree-goal1.smt2 delete mode 100644 bench_adt/LEON/bsearch-tree-goal10.smt2 delete mode 100644 bench_adt/LEON/bsearch-tree-goal11.smt2 delete mode 100644 bench_adt/LEON/bsearch-tree-goal12.smt2 delete mode 100644 bench_adt/LEON/bsearch-tree-goal13.smt2 delete mode 100644 bench_adt/LEON/bsearch-tree-goal14.smt2 delete mode 100644 bench_adt/LEON/bsearch-tree-goal15.smt2 delete mode 100644 bench_adt/LEON/bsearch-tree-goal16.smt2 delete mode 100644 bench_adt/LEON/bsearch-tree-goal17.smt2 delete mode 100644 bench_adt/LEON/bsearch-tree-goal18.smt2 delete mode 100644 bench_adt/LEON/bsearch-tree-goal2.smt2 delete mode 100644 bench_adt/LEON/bsearch-tree-goal3.smt2 delete mode 100644 bench_adt/LEON/bsearch-tree-goal4.smt2 delete mode 100644 bench_adt/LEON/bsearch-tree-goal5.smt2 delete mode 100644 bench_adt/LEON/bsearch-tree-goal6.smt2 delete mode 100644 bench_adt/LEON/bsearch-tree-goal7.smt2 delete mode 100644 bench_adt/LEON/bsearch-tree-goal8.smt2 delete mode 100644 bench_adt/LEON/bsearch-tree-goal9.smt2 delete mode 100644 bench_adt/LEON/heap-goal1.smt2 delete mode 100644 bench_adt/LEON/heap-goal10.smt2 delete mode 100644 bench_adt/LEON/heap-goal11.smt2 delete mode 100644 bench_adt/LEON/heap-goal12.smt2 delete mode 100644 bench_adt/LEON/heap-goal13.smt2 delete mode 100644 bench_adt/LEON/heap-goal2.smt2 delete mode 100644 bench_adt/LEON/heap-goal3.smt2 delete mode 100644 bench_adt/LEON/heap-goal4.smt2 delete mode 100644 bench_adt/LEON/heap-goal5.smt2 delete mode 100644 bench_adt/LEON/heap-goal6.smt2 delete mode 100644 bench_adt/LEON/heap-goal7.smt2 delete mode 100644 bench_adt/LEON/heap-goal8.smt2 delete mode 100644 bench_adt/LEON/heap-goal9.smt2 delete mode 100644 bench_adt/heap_insert.smt2 delete mode 100644 bench_adt/heap_insert_eq.smt2 delete mode 100644 bench_adt/heap_insert_multi.smt2 delete mode 100644 bench_adt/heap_size.smt2 delete mode 100644 bench_adt/list_append_ass.smt2 delete mode 100644 bench_adt/list_append_contains.smt2 delete mode 100644 bench_adt/list_append_len.smt2 delete mode 100644 bench_adt/list_append_min.smt2 delete mode 100644 bench_adt/list_append_nil.smt2 delete mode 100644 bench_adt/list_append_sum.smt2 delete mode 100644 bench_adt/list_len.smt2 delete mode 100644 bench_adt/list_len_butlast.smt2 delete mode 100644 bench_adt/list_len_stren.smt2 delete mode 100644 bench_adt/list_min_max.smt2 delete mode 100644 bench_adt/list_min_sum.smt2 delete mode 100644 bench_adt/list_min_sum_len.smt2 delete mode 100644 bench_adt/list_rev.smt2 delete mode 100644 bench_adt/list_rev2.smt2 delete mode 100644 bench_adt/list_rev2_append.smt2 delete mode 100644 bench_adt/list_rev2_len.smt2 delete mode 100644 bench_adt/list_rev_append.smt2 delete mode 100644 bench_adt/queue_amort.smt2 delete mode 100644 bench_adt/queue_len.smt2 delete mode 100644 bench_adt/queue_popback.smt2 delete mode 100644 bench_adt/queue_push.smt2 delete mode 100644 bench_adt/queue_push_to_list.smt2 delete mode 100755 bench_adt/run-bench.sh delete mode 100644 bench_adt/simple_if.smt2 delete mode 100644 bench_adt/simple_if_min.smt2 delete mode 100644 bench_adt/tree_insert_all_size.smt2 delete mode 100644 bench_adt/tree_insert_size.smt2 delete mode 100644 bench_adt/tree_insert_sum.smt2 delete mode 100644 bench_adt/tree_size.smt2 delete mode 100644 bench_horn_adt/ADTIND/heap_size.smt2 delete mode 100644 bench_horn_adt/ADTIND/list_append_ass.smt2 delete mode 100644 bench_horn_adt/ADTIND/list_append_len.smt2 delete mode 100644 bench_horn_adt/ADTIND/list_append_min.smt2 delete mode 100644 bench_horn_adt/ADTIND/list_append_min2.smt2 delete mode 100644 bench_horn_adt/ADTIND/list_append_nil.smt2 delete mode 100644 bench_horn_adt/ADTIND/list_append_sum.smt2 delete mode 100644 bench_horn_adt/ADTIND/list_interleave.smt2 delete mode 100644 bench_horn_adt/ADTIND/list_len.smt2 delete mode 100644 bench_horn_adt/ADTIND/list_len_butlast.smt2 delete mode 100644 bench_horn_adt/ADTIND/list_len_stren.smt2 delete mode 100644 bench_horn_adt/ADTIND/list_min_max.smt2 delete mode 100644 bench_horn_adt/ADTIND/list_min_sum.smt2 delete mode 100644 bench_horn_adt/ADTIND/list_min_sum_len.smt2 delete mode 100644 bench_horn_adt/ADTIND/list_rev.smt2 delete mode 100644 bench_horn_adt/ADTIND/list_rev2_append.smt2 delete mode 100644 bench_horn_adt/ADTIND/list_rev2_len.smt2 delete mode 100644 bench_horn_adt/ADTIND/list_rev_append.smt2 delete mode 100644 bench_horn_adt/ADTIND/list_rev_len.smt2 delete mode 100644 bench_horn_adt/ADTIND/queue_amort.smt2 delete mode 100644 bench_horn_adt/ADTIND/queue_len.smt2 delete mode 100644 bench_horn_adt/ADTIND/queue_popback.smt2 delete mode 100644 bench_horn_adt/ADTIND/queue_push.smt2 delete mode 100644 bench_horn_adt/ADTIND/queue_push_to_list.smt2 delete mode 100644 bench_horn_adt/ADTIND/tree_insert_all_size.smt2 delete mode 100644 bench_horn_adt/ADTIND/tree_insert_size.smt2 delete mode 100644 bench_horn_adt/ADTIND/tree_insert_sum.smt2 delete mode 100644 bench_horn_adt/ADTIND/tree_size.smt2 delete mode 100644 bench_horn_adt/LEON/amortize-queue-goal1.smt2 delete mode 100644 bench_horn_adt/LEON/amortize-queue-goal10.smt2 delete mode 100644 bench_horn_adt/LEON/amortize-queue-goal11.smt2 delete mode 100644 bench_horn_adt/LEON/amortize-queue-goal12.smt2 delete mode 100644 bench_horn_adt/LEON/amortize-queue-goal13.smt2 delete mode 100644 bench_horn_adt/LEON/amortize-queue-goal14.smt2 delete mode 100644 bench_horn_adt/LEON/amortize-queue-goal15.smt2 delete mode 100644 bench_horn_adt/LEON/amortize-queue-goal2.smt2 delete mode 100644 bench_horn_adt/LEON/amortize-queue-goal3.smt2 delete mode 100644 bench_horn_adt/LEON/amortize-queue-goal4.smt2 delete mode 100644 bench_horn_adt/LEON/amortize-queue-goal5.smt2 delete mode 100644 bench_horn_adt/LEON/amortize-queue-goal6.smt2 delete mode 100644 bench_horn_adt/LEON/amortize-queue-goal7.smt2 delete mode 100644 bench_horn_adt/LEON/amortize-queue-goal8.smt2 delete mode 100644 bench_horn_adt/LEON/amortize-queue-goal9.smt2 delete mode 100644 bench_horn_adt/LEON/bsearch-tree-goal1.smt2 delete mode 100644 bench_horn_adt/LEON/bsearch-tree-goal10.smt2 delete mode 100644 bench_horn_adt/LEON/bsearch-tree-goal11.smt2 delete mode 100644 bench_horn_adt/LEON/bsearch-tree-goal12.smt2 delete mode 100644 bench_horn_adt/LEON/bsearch-tree-goal13.smt2 delete mode 100644 bench_horn_adt/LEON/bsearch-tree-goal14.smt2 delete mode 100644 bench_horn_adt/LEON/bsearch-tree-goal2.smt2 delete mode 100644 bench_horn_adt/LEON/bsearch-tree-goal3.smt2 delete mode 100644 bench_horn_adt/LEON/bsearch-tree-goal4.smt2 delete mode 100644 bench_horn_adt/LEON/bsearch-tree-goal5.smt2 delete mode 100644 bench_horn_adt/LEON/bsearch-tree-goal6.smt2 delete mode 100644 bench_horn_adt/LEON/bsearch-tree-goal8.smt2 delete mode 100644 bench_horn_adt/LEON/bsearch-tree-goal9.smt2 delete mode 100644 bench_horn_adt/arrays/arr_map.smt2 delete mode 100644 bench_horn_adt/arrays/arr_map_dup.smt2 delete mode 100644 bench_horn_adt/arrays/arr_multiset.smt2 delete mode 100644 bench_horn_adt/arrays/arr_multiset_clear.smt2 delete mode 100644 bench_horn_adt/arrays/arr_queue.smt2 delete mode 100644 bench_horn_adt/arrays/arr_queue_even.smt2 delete mode 100644 bench_horn_adt/arrays/arr_set_remove.smt2 delete mode 100644 bench_horn_adt/arrays/arr_set_removeall.smt2 delete mode 100644 bench_horn_adt/arrays/arr_stack.smt2 delete mode 100644 bench_horn_adt/arrays/arr_stack_even.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/clam/goal10.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/clam/goal11.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/clam/goal12.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/clam/goal17.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/clam/goal18.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/clam/goal19.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/clam/goal2.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/clam/goal20.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/clam/goal21.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/clam/goal27.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/clam/goal3.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/clam/goal4.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/clam/goal5.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/clam/goal6.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/clam/goal7.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/clam/goal72.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/clam/goal8.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/clam/goal9.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal1.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal10.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal11.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal12.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal13.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal14.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal15.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal2.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal3.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal4.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal5.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal6.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal7.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal8.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal9.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal1.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal10.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal12.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal13.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal15.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal16.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal18.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal2.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal3.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal4.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal5.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal6.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal7.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal8.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal9.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal1.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal10.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal12.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal13.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal2.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal3.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal4.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal5.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal6.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal7.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal8.smt2 delete mode 100644 bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal9.smt2 delete mode 100644 bench_horn_adt/list_remove.smt2 delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/heap_size.smt2.err delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/heap_size.smt2.err.tmp delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/heap_size.smt2.out delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_append_ass.smt2.err delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_append_ass.smt2.err.tmp delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_append_ass.smt2.out delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_append_len.smt2.err delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_append_len.smt2.err.tmp delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_append_len.smt2.out delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_append_min.smt2.err delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_append_min.smt2.err.tmp delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_append_min.smt2.out delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_append_min2.smt2.err delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_append_min2.smt2.err.tmp delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_append_min2.smt2.out delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_append_nil.smt2.err delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_append_nil.smt2.err.tmp delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_append_nil.smt2.out delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_append_sum.smt2.err delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_append_sum.smt2.err.tmp delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_append_sum.smt2.out delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_interleave.smt2.err delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_interleave.smt2.err.tmp delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_interleave.smt2.out delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_len.smt2.err delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_len.smt2.err.tmp delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_len.smt2.out delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_len_butlast.smt2.err delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_len_butlast.smt2.err.tmp delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_len_butlast.smt2.out delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_len_stren.smt2.err delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_len_stren.smt2.err.tmp delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_len_stren.smt2.out delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_min_max.smt2.err delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_min_max.smt2.err.tmp delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_min_max.smt2.out delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_min_sum.smt2.err delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_min_sum.smt2.err.tmp delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_min_sum.smt2.out delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_min_sum_len.smt2.err delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_min_sum_len.smt2.err.tmp delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_min_sum_len.smt2.out delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_rev.smt2.err delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_rev.smt2.err.tmp delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_rev.smt2.out delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_rev2_append.smt2.err delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_rev2_append.smt2.err.tmp delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_rev2_append.smt2.out delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_rev2_len.smt2.err delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_rev2_len.smt2.err.tmp delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_rev2_len.smt2.out delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_rev_append.smt2.err delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_rev_append.smt2.err.tmp delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_rev_append.smt2.out delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_rev_len.smt2.err delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_rev_len.smt2.err.tmp delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/list_rev_len.smt2.out delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/queue_amort.smt2.err delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/queue_amort.smt2.err.tmp delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/queue_amort.smt2.out delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/queue_len.smt2.err.tmp delete mode 100644 bench_horn_adt/log-2023-04-19-10-48-12/queue_len.smt2.out delete mode 100644 bench_horn_adt/remove_not_contained.smt2 delete mode 100755 bench_horn_adt/run-bench.sh delete mode 100644 bench_sim/list_arr_extra_1.smt2 delete mode 100644 bench_sim/list_arr_extra_2.smt2 delete mode 100644 bench_sim/list_arr_pop.smt2 delete mode 100644 bench_sim/list_arr_push.smt2 delete mode 100644 bench_sim/queue_arr_de.smt2 delete mode 100644 bench_sim/queue_arr_en.smt2 delete mode 100644 bench_sim/queue_arr_extra_1.smt2 delete mode 100644 bench_sim/queue_arr_extra_2.smt2 delete mode 100644 bench_sim/queue_arr_extra_3.smt2 delete mode 100644 bench_sim/queue_arr_extra_4.smt2 delete mode 100644 bench_sim/queue_rev_extra_1.smt2 delete mode 100755 bench_sim/run-bench.sh delete mode 100644 bench_sim/set_dupl_consume.smt2 delete mode 100644 bench_sim/set_dupl_extra_1.smt2 delete mode 100644 bench_sim/set_dupl_extra_2.smt2 delete mode 100644 bench_sim/set_dupl_extra_3.smt2 delete mode 100644 bench_sim/set_dupl_extra_4.smt2 delete mode 100644 bench_sim/set_dupl_extra_5.smt2 delete mode 100644 bench_sim/set_dupl_extra_6.smt2 delete mode 100644 bench_sim/set_dupl_extra_7.smt2 delete mode 100644 bench_sim/set_dupl_extra_8.smt2 delete mode 100644 bench_sim/set_dupl_extra_9.smt2 delete mode 100644 bench_sim/set_dupl_produce.smt2 delete mode 100644 bench_sim/set_singl_consume.smt2 delete mode 100644 bench_sim/set_singl_extra_1.smt2 delete mode 100644 bench_sim/set_singl_produce.smt2 diff --git a/.gitignore b/.gitignore index 6355c0b30..765f3720a 100644 --- a/.gitignore +++ b/.gitignore @@ -28,4 +28,14 @@ tools/deep_bench/**/.terraform tools/deep_bench/**/playbook.retry tools/deep_bench/**/playbook.retry tools/deep_bench/windows/clusterjobs.log -tools/deep_bench/windows/out-*.tar.gz \ No newline at end of file +tools/deep_bench/windows/out-*.tar.gz + +# Benchmarks + +bench/ +bench_adt/ +bench_horn_adt/ +bench_sim/ + +# .idea files +cmake-build-debug/ \ No newline at end of file diff --git a/bench/run-bench.sh b/bench/run-bench.sh deleted file mode 100755 index 6c8e41157..000000000 --- a/bench/run-bench.sh +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/bash -echo "This is the script for running regression tests" -echo " - date: $(date '+%Y-%m-%d at %H:%M.%S')" -echo " - host name $(hostname -f)" -echo " - script path: $(readlink -f $0)" - -adtchc=../adtchc -if [[ ! $# -eq 0 ]] ; then - #echo 'Setting path to' $1 - adtchc=$1 -fi - -# run the interpolating version of OpenSMT -adtchc=${adtchc}' -i' - -picky=./utils/picky.smt2 -lookahead=./utils/lookahead.smt2 - -tmpfolder=log-$(date '+%Y-%m-%d-%H-%M-%S') -mkdir ${tmpfolder} - -export outmod=false -export errmod=false -export rtmod=false -export err=false - -for file in $(find . -name '*.smt2' |sort); do - name=$(basename $file) - dir=$(dirname $file) - - sh -c "ulimit -St 60; ${adtchc} $dir/$name > $tmpfolder/$name.out 2>$tmpfolder/$name.err.tmp" 2>/dev/null - grep -v '^;' $tmpfolder/$name.err.tmp > $tmpfolder/$name.err - - if [ -s "$tmpfolder/$name.err" ]; then - echo "stderr not empty for benchmark $file"; - err=true; - fi - - -done -#echo "Stdout differs: ${outmod}, stderr differs: ${errmod}" - -if [[ ${err} == true ]]; then - echo "There were anomalies: check logs in ${tmpfolder}" - exit 1 -else - rm -rf ${tmpfolder} -fi - diff --git a/bench/skolems/PRODUCER_CONSUMER_2_base_skolem.smt2 b/bench/skolems/PRODUCER_CONSUMER_2_base_skolem.smt2 deleted file mode 100644 index 979f888b6..000000000 --- a/bench/skolems/PRODUCER_CONSUMER_2_base_skolem.smt2 +++ /dev/null @@ -1,22 +0,0 @@ -(declare-fun $V74_X$2 () Bool) -(declare-fun $V87_First$2 () Int) -(declare-fun $V79_Sofar$2 () Bool) -(declare-fun $etat1$0 () Bool) -(declare-fun $V31_env$2 () Bool) -(declare-fun $a_init$0 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V26_i$2 () Int) -(declare-fun $etat3$0 () Bool) -(declare-fun $etat2$0 () Bool) - -(assert (let ((a!1 (and (not $etat1$0) (not (and $etat2$0 $etat3$0)) (> $a_init$0 0)))) -(let ((a!2 (and (= $OK$2 (or (not a!1) (>= 0 0))) - (= $V31_env$2 a!1) - (= $V26_i$2 0) - (= $V79_Sofar$2 (not (and $etat2$0 $etat3$0))) - (= $V87_First$2 $a_init$0) - (= $V74_X$2 (not (and $etat2$0 $etat3$0)))))) - (ite (and $etat2$0 $etat3$0) - a!2 - (ite (or (not $etat2$0) (not $etat3$0)) a!2 true))))) -(check-sat) diff --git a/bench/skolems/PRODUCER_CONSUMER_2_extend_skolem.smt2 b/bench/skolems/PRODUCER_CONSUMER_2_extend_skolem.smt2 deleted file mode 100644 index 77da0e2b6..000000000 --- a/bench/skolems/PRODUCER_CONSUMER_2_extend_skolem.smt2 +++ /dev/null @@ -1,52 +0,0 @@ -(declare-fun $V87_First$2 () Int) -(declare-fun $V74_X$2 () Bool) -(declare-fun $etat1$0 () Bool) -(declare-fun $V26_i$2 () Int) -(declare-fun %init () Bool) -(declare-fun $V31_env$2 () Bool) -(declare-fun $V79_Sofar$~1 () Bool) -(declare-fun $V79_Sofar$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $V87_First$~1 () Int) -(declare-fun $a_init$0 () Int) -(declare-fun $etat3$0 () Bool) -(declare-fun $etat2$0 () Bool) - -(assert (let ((a!1 (and %init (= (+ (* (- 1) $a_init$0) $V87_First$~1) 0))) - (a!2 (ite %init - (not (and $etat2$0 $etat3$0)) - (and (not (and $etat2$0 $etat3$0)) $V79_Sofar$~1))) - (a!6 (and (not %init) (= (+ (* (- 1) $V87_First$~1) $a_init$0) 0)))) -(let ((a!3 (and (and (ite %init (not $etat1$0) true) a!2) (> $V87_First$~1 0))) - (a!5 (and (or (not $etat2$0) (not $etat3$0)) - (or %init (and (not %init) $V79_Sofar$~1)) - (or a!1 (not %init)))) - (a!7 (and (and (ite %init (not $etat1$0) true) a!2) (> $a_init$0 0))) - (a!9 (and (or (not $etat2$0) (not $etat3$0)) - (or %init (and (not %init) $V79_Sofar$~1)) - (or %init a!6)))) -(let ((a!4 (and (= $OK$2 (or (not a!3) (>= 0 0))) - (= $V31_env$2 a!3) - (= $V26_i$2 0) - (= $V79_Sofar$2 a!2) - (= $V87_First$2 $V87_First$~1) - (= $V74_X$2 (not (and $etat2$0 $etat3$0))))) - (a!8 (and (= $OK$2 (or (>= 0 0) (not a!7))) - (= $V31_env$2 a!7) - (= $V26_i$2 0) - (= $V79_Sofar$2 a!2) - (= $V87_First$2 $a_init$0) - (= $V74_X$2 (not (and $etat2$0 $etat3$0)))))) -(let ((a!10 (ite a!5 - a!4 - (ite (and $etat2$0 $etat3$0 (or %init a!6)) - a!8 - (ite a!9 a!8 true))))) -(let ((a!11 (ite (and (or (not $etat2$0) (not $etat3$0)) - (not %init) - (not $V79_Sofar$~1) - (or a!1 (not %init))) - a!4 - a!10))) - (ite (and $etat2$0 $etat3$0 (or a!1 (not %init))) a!4 a!11))))))) -(check-sat) diff --git a/bench/skolems/SYNAPSE_2_e8_1118_e7_1043_base_skolem.smt2 b/bench/skolems/SYNAPSE_2_e8_1118_e7_1043_base_skolem.smt2 deleted file mode 100644 index 8d7519d56..000000000 --- a/bench/skolems/SYNAPSE_2_e8_1118_e7_1043_base_skolem.smt2 +++ /dev/null @@ -1,21 +0,0 @@ -(declare-fun $V83_X$2 () Bool) -(declare-fun $V28_valid_s$2 () Int) -(declare-fun $V27_invalid_s$2 () Int) -(declare-fun $init_invalid_s$0 () Int) -(declare-fun $e_s2$0 () Bool) -(declare-fun $e_s3$0 () Bool) -(declare-fun $e_s1$0 () Bool) -(declare-fun $V29_dirty_s$2 () Int) -(declare-fun $V31_env$2 () Bool) -(declare-fun $OK$2 () Bool) - -(assert (let ((a!1 (and (not (or (and $e_s1$0 $e_s2$0 $e_s1$0 $e_s3$0) - (and $e_s2$0 $e_s3$0))) - (>= $init_invalid_s$0 0)))) - (and (= $OK$2 true) - (= $V31_env$2 a!1) - (= $V27_invalid_s$2 0) - (= $V28_valid_s$2 0) - (= $V29_dirty_s$2 0) - (= $V83_X$2 a!1)))) -(check-sat) diff --git a/bench/skolems/SYNAPSE_2_e8_1118_e7_1043_extend_skolem.smt2 b/bench/skolems/SYNAPSE_2_e8_1118_e7_1043_extend_skolem.smt2 deleted file mode 100644 index 8bec3e5e8..000000000 --- a/bench/skolems/SYNAPSE_2_e8_1118_e7_1043_extend_skolem.smt2 +++ /dev/null @@ -1,46 +0,0 @@ -(declare-fun $V83_X$2 () Bool) -(declare-fun $V29_dirty_s$2 () Int) -(declare-fun $V27_invalid_s$2 () Int) -(declare-fun $V31_env$2 () Bool) -(declare-fun $V31_env$~1 () Bool) -(declare-fun $V29_dirty_s$~1 () Int) -(declare-fun $V27_invalid_s$~1 () Int) -(declare-fun %init () Bool) -(declare-fun $V28_valid_s$~1 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $e_s3$0 () Bool) -(declare-fun $e_s1$0 () Bool) -(declare-fun $V28_valid_s$2 () Int) -(declare-fun $init_invalid_s$0 () Int) -(declare-fun $e_s2$0 () Bool) - -(assert (let ((a!1 (and (not (or (and $e_s1$0 $e_s2$0 $e_s1$0 $e_s3$0) - (and $e_s2$0 $e_s3$0))) - (>= $init_invalid_s$0 0))) - (a!2 (+ $V27_invalid_s$~1 - $V28_valid_s$~1 - $V29_dirty_s$~1 - (* (- 1) 0) - (* (- 1) 0)))) -(let ((a!3 (or (not (ite %init a!1 (or a!1 $V31_env$~1))) - (ite %init - true - (= (+ a!2 0 0) - (+ $V27_invalid_s$~1 $V28_valid_s$~1 $V29_dirty_s$~1)))))) -(let ((a!4 (and (= $OK$2 a!3) - (= $V31_env$2 (ite %init a!1 (or a!1 $V31_env$~1))) - (= $V27_invalid_s$2 a!2) - (= $V28_valid_s$2 0) - (= $V29_dirty_s$2 0) - (= $V83_X$2 a!1)))) -(let ((a!5 (ite (and (or (not $e_s1$0) (not $e_s2$0) (not $e_s3$0)) - (or (not $e_s2$0) (not $e_s3$0)) - (>= $init_invalid_s$0 0)) - a!4 - true))) - (ite (or (and $e_s1$0 $e_s2$0 $e_s3$0) - (and $e_s2$0 $e_s3$0) - (not (>= $init_invalid_s$0 0))) - a!4 - a!5)))))) -(check-sat) diff --git a/bench/skolems/SYNAPSE_4_e8_420_e8_1525_base_skolem.smt2 b/bench/skolems/SYNAPSE_4_e8_420_e8_1525_base_skolem.smt2 deleted file mode 100644 index fb26bcb56..000000000 --- a/bench/skolems/SYNAPSE_4_e8_420_e8_1525_base_skolem.smt2 +++ /dev/null @@ -1,26 +0,0 @@ -(declare-fun $V84_X$2 () Bool) -(declare-fun $V31_env$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $init_invalid_s$0 () Int) -(declare-fun $e_s3$0 () Bool) -(declare-fun $V28_valid_s$2 () Int) -(declare-fun $e_s2$0 () Bool) -(declare-fun $V29_dirty_s$2 () Int) -(declare-fun $e_s1$0 () Bool) - -(assert (let ((a!1 (and (not (and $e_s1$0 $e_s2$0 $e_s1$0 $e_s3$0 $e_s2$0 $e_s3$0)) - (>= $init_invalid_s$0 0)))) -(let ((a!2 (and (= $OK$2 (or (< 0 1) (not a!1) (< 0 1))) - (= $V31_env$2 a!1) - (= $V29_dirty_s$2 0) - (= $V28_valid_s$2 0) - (= $V84_X$2 a!1)))) -(let ((a!3 (ite (or (and $e_s1$0 $e_s2$0 $e_s3$0) - (not (>= $init_invalid_s$0 0))) - a!2 - true))) - (ite (and (or (not $e_s1$0) (not $e_s2$0) (not $e_s3$0)) - (>= $init_invalid_s$0 0)) - a!2 - a!3))))) -(check-sat) diff --git a/bench/skolems/SYNAPSE_4_e8_420_e8_1525_extend_skolem.smt2 b/bench/skolems/SYNAPSE_4_e8_420_e8_1525_extend_skolem.smt2 deleted file mode 100644 index f51cb0246..000000000 --- a/bench/skolems/SYNAPSE_4_e8_420_e8_1525_extend_skolem.smt2 +++ /dev/null @@ -1,28 +0,0 @@ -(declare-fun %init () Bool) -(declare-fun $init_invalid_s$0 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V84_X$2 () Bool) -(declare-fun $e_s3$0 () Bool) -(declare-fun $V28_valid_s$2 () Int) -(declare-fun $V29_dirty_s$2 () Int) -(declare-fun $V31_env$2 () Bool) -(declare-fun $V31_env$~1 () Bool) -(declare-fun $e_s2$0 () Bool) -(declare-fun $e_s1$0 () Bool) - -(assert (let ((a!1 (and (not (and $e_s1$0 $e_s2$0 $e_s1$0 $e_s3$0 $e_s2$0 $e_s3$0)) - (>= $init_invalid_s$0 0)))) -(let ((a!2 (or (< 0 1) (not (ite %init a!1 (and a!1 $V31_env$~1))) (< 0 1)))) -(let ((a!3 (and (= $OK$2 a!2) - (= $V31_env$2 (ite %init a!1 (and a!1 $V31_env$~1))) - (= $V29_dirty_s$2 0) - (= $V28_valid_s$2 0) - (= $V84_X$2 a!1)))) -(let ((a!4 (ite (and (or (not $e_s1$0) (not $e_s2$0) (not $e_s3$0)) - (>= $init_invalid_s$0 0)) - a!3 - true))) - (ite (or (and $e_s1$0 $e_s2$0 $e_s3$0) (not (>= $init_invalid_s$0 0))) - a!3 - a!4)))))) -(check-sat) diff --git a/bench/skolems/car_1_extend_skolem.smt2 b/bench/skolems/car_1_extend_skolem.smt2 deleted file mode 100644 index 0efbd5d0d..000000000 --- a/bench/skolems/car_1_extend_skolem.smt2 +++ /dev/null @@ -1,18 +0,0 @@ -(declare-fun $V91_X$2 () Bool) -(declare-fun $V27_dist$2 () Int) -(declare-fun $V33_env$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun %init () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $m$0 () Bool) - -(assert (let ((a!1 (and (and (not (and $m$0 $s$0)) (< 32766 32767)) $V33_env$~1)) - (a!3 (= $V91_X$2 (and (not (and $m$0 $s$0)) (< 32766 32767))))) -(let ((a!2 (ite %init (and (not (and $m$0 $s$0)) (< 32766 32767)) a!1))) -(let ((a!4 (and (= $OK$2 (or (not a!2) (>= 32766 0))) - (= $V33_env$2 a!2) - (= $V27_dist$2 32766) - a!3))) - (ite (or (not $m$0) (not $s$0)) a!4 (ite (and $m$0 $s$0) a!4 true)))))) -(check-sat) diff --git a/bench/skolems/car_2_base1_skolem.smt2 b/bench/skolems/car_2_base1_skolem.smt2 deleted file mode 100644 index 2a9966a3e..000000000 --- a/bench/skolems/car_2_base1_skolem.smt2 +++ /dev/null @@ -1,14 +0,0 @@ -(declare-fun $V91_X$2 () Bool) -(declare-fun $V27_dist$2 () Int) -(declare-fun $V33_env$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $m$0 () Bool) - -(assert (let ((a!1 (or (not (not (and $m$0 $s$0))) (< 10 11)))) -(let ((a!2 (and (= $OK$2 a!1) - (= $V33_env$2 (not (and $m$0 $s$0))) - (= $V27_dist$2 10) - (= $V91_X$2 (not (and $m$0 $s$0)))))) - (ite (and $m$0 $s$0) a!2 (ite (or (not $m$0) (not $s$0)) a!2 true))))) -(check-sat) diff --git a/bench/skolems/car_2_base2_skolem.smt2 b/bench/skolems/car_2_base2_skolem.smt2 deleted file mode 100644 index 2609d2754..000000000 --- a/bench/skolems/car_2_base2_skolem.smt2 +++ /dev/null @@ -1,16 +0,0 @@ -(declare-fun $V91_X$3 () Bool) -(declare-fun $OK$3 () Bool) -(declare-fun $V27_dist$3 () Int) -(declare-fun $V33_env$3 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $s$1 () Bool) -(declare-fun $m$1 () Bool) - -(assert (let ((a!1 (not (and $V33_env$0 (not (and $m$1 $s$1))))) - (a!2 (= $V33_env$3 (and $V33_env$0 (not (and $m$1 $s$1)))))) -(let ((a!3 (and (= $OK$3 (or a!1 (< 10 11))) - a!2 - (= $V27_dist$3 10) - (= $V91_X$3 (not (and $m$1 $s$1)))))) - (ite (or (not $m$1) (not $s$1)) a!3 (ite (and $m$1 $s$1) a!3 true))))) -(check-sat) diff --git a/bench/skolems/car_2_extend_skolem.smt2 b/bench/skolems/car_2_extend_skolem.smt2 deleted file mode 100644 index b58125073..000000000 --- a/bench/skolems/car_2_extend_skolem.smt2 +++ /dev/null @@ -1,18 +0,0 @@ -(declare-fun $V27_dist$2 () Int) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun %init () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $V91_X$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $m$0 () Bool) - -(assert (let ((a!1 (ite %init - (not (and $m$0 $s$0)) - (and (not (and $m$0 $s$0)) $V33_env$~1)))) -(let ((a!2 (and (= $OK$2 (or (not a!1) (< 10 11))) - (= $V33_env$2 a!1) - (= $V27_dist$2 10) - (= $V91_X$2 (not (and $m$0 $s$0)))))) - (ite (and $m$0 $s$0) a!2 (ite (or (not $m$0) (not $s$0)) a!2 true))))) -(check-sat) diff --git a/bench/skolems/car_3_base1_skolem.smt2 b/bench/skolems/car_3_base1_skolem.smt2 deleted file mode 100644 index 7aa585754..000000000 --- a/bench/skolems/car_3_base1_skolem.smt2 +++ /dev/null @@ -1,14 +0,0 @@ -(declare-fun $OK$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V90_X$2 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $m$0 () Bool) - -(assert (let ((a!1 (or (not (not (and $m$0 $s$0))) (< 3 4)))) -(let ((a!2 (and (= $OK$2 a!1) - (= $V33_env$2 (not (and $m$0 $s$0))) - (= $V28_speed$2 3) - (= $V90_X$2 (not (and $m$0 $s$0)))))) - (ite (and $m$0 $s$0) a!2 (ite (or (not $m$0) (not $s$0)) a!2 true))))) -(check-sat) diff --git a/bench/skolems/car_3_base2_skolem.smt2 b/bench/skolems/car_3_base2_skolem.smt2 deleted file mode 100644 index 83103df32..000000000 --- a/bench/skolems/car_3_base2_skolem.smt2 +++ /dev/null @@ -1,16 +0,0 @@ -(declare-fun $V28_speed$3 () Int) -(declare-fun $V33_env$3 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $OK$3 () Bool) -(declare-fun $s$1 () Bool) -(declare-fun $V90_X$3 () Bool) -(declare-fun $m$1 () Bool) - -(assert (let ((a!1 (not (and $V33_env$0 (not (and $m$1 $s$1))))) - (a!2 (= $V33_env$3 (and $V33_env$0 (not (and $m$1 $s$1)))))) -(let ((a!3 (and (= $OK$3 (or a!1 (< 3 4))) - a!2 - (= $V28_speed$3 3) - (= $V90_X$3 (not (and $m$1 $s$1)))))) - (ite (or (not $m$1) (not $s$1)) a!3 (ite (and $m$1 $s$1) a!3 true))))) -(check-sat) diff --git a/bench/skolems/car_3_e2_695_base1_skolem.smt2 b/bench/skolems/car_3_e2_695_base1_skolem.smt2 deleted file mode 100644 index 3ab464d68..000000000 --- a/bench/skolems/car_3_e2_695_base1_skolem.smt2 +++ /dev/null @@ -1,14 +0,0 @@ -(declare-fun $V28_speed$2 () Int) -(declare-fun $V90_X$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $m$0 () Bool) - -(assert (let ((a!1 (or (not (not (and $m$0 $s$0))) (< 3 4)))) -(let ((a!2 (and (= $OK$2 a!1) - (= $V33_env$2 (not (and $m$0 $s$0))) - (= $V28_speed$2 3) - (= $V90_X$2 (not (and $m$0 $s$0)))))) - (ite (and $m$0 $s$0) a!2 (ite (or (not $m$0) (not $s$0)) a!2 true))))) -(check-sat) diff --git a/bench/skolems/car_3_e2_695_base2_skolem.smt2 b/bench/skolems/car_3_e2_695_base2_skolem.smt2 deleted file mode 100644 index 8b8ded291..000000000 --- a/bench/skolems/car_3_e2_695_base2_skolem.smt2 +++ /dev/null @@ -1,16 +0,0 @@ -(declare-fun $V90_X$3 () Bool) -(declare-fun $V28_speed$3 () Int) -(declare-fun $V33_env$0 () Bool) -(declare-fun $OK$3 () Bool) -(declare-fun $s$1 () Bool) -(declare-fun $V33_env$3 () Bool) -(declare-fun $m$1 () Bool) - -(assert (let ((a!1 (not (and $V33_env$0 (not (and $m$1 $s$1))))) - (a!2 (= $V33_env$3 (and $V33_env$0 (not (and $m$1 $s$1)))))) -(let ((a!3 (and (= $OK$3 (or a!1 (< 3 4))) - a!2 - (= $V28_speed$3 3) - (= $V90_X$3 (not (and $m$1 $s$1)))))) - (ite (or (not $m$1) (not $s$1)) a!3 (ite (and $m$1 $s$1) a!3 true))))) -(check-sat) diff --git a/bench/skolems/car_3_e2_695_extend_skolem.smt2 b/bench/skolems/car_3_e2_695_extend_skolem.smt2 deleted file mode 100644 index b644d28c5..000000000 --- a/bench/skolems/car_3_e2_695_extend_skolem.smt2 +++ /dev/null @@ -1,18 +0,0 @@ -(declare-fun $V90_X$2 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun %init () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $m$0 () Bool) - -(assert (let ((a!1 (ite %init - (not (and $m$0 $s$0)) - (and (not (and $m$0 $s$0)) $V33_env$~1)))) -(let ((a!2 (and (= $OK$2 (or (not a!1) (< 3 4))) - (= $V33_env$2 a!1) - (= $V28_speed$2 3) - (= $V90_X$2 (not (and $m$0 $s$0)))))) - (ite (and $m$0 $s$0) a!2 (ite (or (not $m$0) (not $s$0)) a!2 true))))) -(check-sat) diff --git a/bench/skolems/car_3_e7_626_base_skolem.smt2 b/bench/skolems/car_3_e7_626_base_skolem.smt2 deleted file mode 100644 index 3ab464d68..000000000 --- a/bench/skolems/car_3_e7_626_base_skolem.smt2 +++ /dev/null @@ -1,14 +0,0 @@ -(declare-fun $V28_speed$2 () Int) -(declare-fun $V90_X$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $m$0 () Bool) - -(assert (let ((a!1 (or (not (not (and $m$0 $s$0))) (< 3 4)))) -(let ((a!2 (and (= $OK$2 a!1) - (= $V33_env$2 (not (and $m$0 $s$0))) - (= $V28_speed$2 3) - (= $V90_X$2 (not (and $m$0 $s$0)))))) - (ite (and $m$0 $s$0) a!2 (ite (or (not $m$0) (not $s$0)) a!2 true))))) -(check-sat) diff --git a/bench/skolems/car_3_e7_626_extend_skolem.smt2 b/bench/skolems/car_3_e7_626_extend_skolem.smt2 deleted file mode 100644 index f2b4170ab..000000000 --- a/bench/skolems/car_3_e7_626_extend_skolem.smt2 +++ /dev/null @@ -1,18 +0,0 @@ -(declare-fun $V28_speed$2 () Int) -(declare-fun $V33_env$2 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun %init () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $V90_X$2 () Bool) -(declare-fun $s$0 () Bool) - -(assert (let ((a!1 (ite %init - (not (and $m$0 $s$0)) - (or (not (and $m$0 $s$0)) $V33_env$~1)))) -(let ((a!2 (and (= $OK$2 (or (not a!1) (< 3 4))) - (= $V33_env$2 a!1) - (= $V28_speed$2 3) - (= $V90_X$2 (not (and $m$0 $s$0)))))) - (ite (and $m$0 $s$0) a!2 (ite (or (not $m$0) (not $s$0)) a!2 true))))) -(check-sat) diff --git a/bench/skolems/car_3_e8_33_base_skolem.smt2 b/bench/skolems/car_3_e8_33_base_skolem.smt2 deleted file mode 100644 index f48460363..000000000 --- a/bench/skolems/car_3_e8_33_base_skolem.smt2 +++ /dev/null @@ -1,14 +0,0 @@ -(declare-fun $OK$2 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V90_X$2 () Bool) -(declare-fun $s$0 () Bool) - -(assert (let ((a!1 (or (not (not (and $m$0 $s$0))) (< 3 4)))) -(let ((a!2 (and (= $OK$2 a!1) - (= $V33_env$2 (not (and $m$0 $s$0))) - (= $V28_speed$2 3) - (= $V90_X$2 (not (and $m$0 $s$0)))))) - (ite (and $m$0 $s$0) a!2 (ite (or (not $m$0) (not $s$0)) a!2 true))))) -(check-sat) diff --git a/bench/skolems/car_3_e8_33_e2_1010_base_skolem.smt2 b/bench/skolems/car_3_e8_33_e2_1010_base_skolem.smt2 deleted file mode 100644 index b15f3ad14..000000000 --- a/bench/skolems/car_3_e8_33_e2_1010_base_skolem.smt2 +++ /dev/null @@ -1,14 +0,0 @@ -(declare-fun $OK$2 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $V33_env$2 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V90_X$2 () Bool) -(declare-fun $m$0 () Bool) - -(assert (let ((a!1 (or (not (not (and $m$0 $s$0))) (< 3 4)))) -(let ((a!2 (and (= $OK$2 a!1) - (= $V33_env$2 (not (and $m$0 $s$0))) - (= $V28_speed$2 3) - (= $V90_X$2 (not (and $m$0 $s$0)))))) - (ite (and $m$0 $s$0) a!2 (ite (or (not $m$0) (not $s$0)) a!2 true))))) -(check-sat) diff --git a/bench/skolems/car_3_e8_33_e2_1010_extend_skolem.smt2 b/bench/skolems/car_3_e8_33_e2_1010_extend_skolem.smt2 deleted file mode 100644 index 0a37878c5..000000000 --- a/bench/skolems/car_3_e8_33_e2_1010_extend_skolem.smt2 +++ /dev/null @@ -1,18 +0,0 @@ -(declare-fun $V90_X$2 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $V33_env$~1 () Bool) -(declare-fun %init () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $OK$2 () Bool) - -(assert (let ((a!1 (ite %init - (not (and $m$0 $s$0)) - (or (not (and $m$0 $s$0)) $V33_env$~1)))) -(let ((a!2 (and (= $OK$2 (or (not a!1) (< 3 4))) - (= $V33_env$2 a!1) - (= $V28_speed$2 3) - (= $V90_X$2 (not (and $m$0 $s$0)))))) - (ite (and $m$0 $s$0) a!2 (ite (or (not $m$0) (not $s$0)) a!2 true))))) -(check-sat) diff --git a/bench/skolems/car_3_e8_33_e7_220_base_skolem.smt2 b/bench/skolems/car_3_e8_33_e7_220_base_skolem.smt2 deleted file mode 100644 index 478857cef..000000000 --- a/bench/skolems/car_3_e8_33_e7_220_base_skolem.smt2 +++ /dev/null @@ -1,14 +0,0 @@ -(declare-fun $V33_env$2 () Bool) -(declare-fun $V90_X$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $s$0 () Bool) -(declare-fun $m$0 () Bool) - -(assert (let ((a!1 (or (not (not (and $m$0 $s$0))) (< 3 4)))) -(let ((a!2 (and (= $OK$2 a!1) - (= $V33_env$2 (not (and $m$0 $s$0))) - (= $V28_speed$2 3) - (= $V90_X$2 (not (and $m$0 $s$0)))))) - (ite (and $m$0 $s$0) a!2 (ite (or (not $m$0) (not $s$0)) a!2 true))))) -(check-sat) diff --git a/bench/skolems/car_3_e8_33_e7_220_extend_skolem.smt2 b/bench/skolems/car_3_e8_33_e7_220_extend_skolem.smt2 deleted file mode 100644 index c91f5b68b..000000000 --- a/bench/skolems/car_3_e8_33_e7_220_extend_skolem.smt2 +++ /dev/null @@ -1,18 +0,0 @@ -(declare-fun $V90_X$2 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $V33_env$2 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun %init () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $m$0 () Bool) - -(assert (let ((a!1 (ite %init - (not (and $m$0 $s$0)) - (or (not (and $m$0 $s$0)) $V33_env$~1)))) -(let ((a!2 (and (= $OK$2 (or (not a!1) (< 3 4))) - (= $V33_env$2 a!1) - (= $V28_speed$2 3) - (= $V90_X$2 (not (and $m$0 $s$0)))))) - (ite (and $m$0 $s$0) a!2 (ite (or (not $m$0) (not $s$0)) a!2 true))))) -(check-sat) diff --git a/bench/skolems/car_3_e8_33_extend_skolem.smt2 b/bench/skolems/car_3_e8_33_extend_skolem.smt2 deleted file mode 100644 index b644d28c5..000000000 --- a/bench/skolems/car_3_e8_33_extend_skolem.smt2 +++ /dev/null @@ -1,18 +0,0 @@ -(declare-fun $V90_X$2 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun %init () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $m$0 () Bool) - -(assert (let ((a!1 (ite %init - (not (and $m$0 $s$0)) - (and (not (and $m$0 $s$0)) $V33_env$~1)))) -(let ((a!2 (and (= $OK$2 (or (not a!1) (< 3 4))) - (= $V33_env$2 a!1) - (= $V28_speed$2 3) - (= $V90_X$2 (not (and $m$0 $s$0)))))) - (ite (and $m$0 $s$0) a!2 (ite (or (not $m$0) (not $s$0)) a!2 true))))) -(check-sat) diff --git a/bench/skolems/car_3_extend_skolem.smt2 b/bench/skolems/car_3_extend_skolem.smt2 deleted file mode 100644 index 790641272..000000000 --- a/bench/skolems/car_3_extend_skolem.smt2 +++ /dev/null @@ -1,18 +0,0 @@ -(declare-fun $V28_speed$2 () Int) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun %init () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $V90_X$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $m$0 () Bool) - -(assert (let ((a!1 (ite %init - (not (and $m$0 $s$0)) - (and (not (and $m$0 $s$0)) $V33_env$~1)))) -(let ((a!2 (and (= $OK$2 (or (not a!1) (< 3 4))) - (= $V33_env$2 a!1) - (= $V28_speed$2 3) - (= $V90_X$2 (not (and $m$0 $s$0)))))) - (ite (and $m$0 $s$0) a!2 (ite (or (not $m$0) (not $s$0)) a!2 true))))) -(check-sat) diff --git a/bench/skolems/car_4_e3_57_e4_1047_base_skolem.smt2 b/bench/skolems/car_4_e3_57_e4_1047_base_skolem.smt2 deleted file mode 100644 index b7039899a..000000000 --- a/bench/skolems/car_4_e3_57_e4_1047_base_skolem.smt2 +++ /dev/null @@ -1,14 +0,0 @@ -(declare-fun $V33_env$2 () Bool) -(declare-fun $V90_X$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $m$0 () Bool) - -(assert (let ((a!1 (or (not (not (and $m$0 $s$0))) (>= 0 0)))) -(let ((a!2 (and (= $OK$2 a!1) - (= $V33_env$2 (not (and $m$0 $s$0))) - (= $V28_speed$2 0) - (= $V90_X$2 (not (and $m$0 $s$0)))))) - (ite (and $m$0 $s$0) a!2 (ite (or (not $m$0) (not $s$0)) a!2 true))))) -(check-sat) diff --git a/bench/skolems/car_4_e3_57_e4_1047_extend_skolem.smt2 b/bench/skolems/car_4_e3_57_e4_1047_extend_skolem.smt2 deleted file mode 100644 index d0f2d54dd..000000000 --- a/bench/skolems/car_4_e3_57_e4_1047_extend_skolem.smt2 +++ /dev/null @@ -1,18 +0,0 @@ -(declare-fun $V90_X$2 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun %init () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $m$0 () Bool) - -(assert (let ((a!1 (ite %init - (not (and $m$0 $s$0)) - (and (not (and $m$0 $s$0)) $V33_env$~1)))) -(let ((a!2 (and (= $OK$2 (or (not a!1) (>= 0 0))) - (= $V33_env$2 a!1) - (= $V28_speed$2 0) - (= $V90_X$2 (not (and $m$0 $s$0)))))) - (ite (and $m$0 $s$0) a!2 (ite (or (not $m$0) (not $s$0)) a!2 true))))) -(check-sat) diff --git a/bench/skolems/car_4_e3_57_e6_784_base_skolem.smt2 b/bench/skolems/car_4_e3_57_e6_784_base_skolem.smt2 deleted file mode 100644 index 3652b0a01..000000000 --- a/bench/skolems/car_4_e3_57_e6_784_base_skolem.smt2 +++ /dev/null @@ -1,14 +0,0 @@ -(declare-fun $V90_X$2 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $V33_env$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $m$0 () Bool) - -(assert (let ((a!1 (or (not (not (and $m$0 $s$0))) (>= 0 0)))) -(let ((a!2 (and (= $OK$2 a!1) - (= $V33_env$2 (not (and $m$0 $s$0))) - (= $V28_speed$2 0) - (= $V90_X$2 (not (and $m$0 $s$0)))))) - (ite (and $m$0 $s$0) a!2 (ite (or (not $m$0) (not $s$0)) a!2 true))))) -(check-sat) diff --git a/bench/skolems/car_4_e3_57_e6_784_extend_skolem.smt2 b/bench/skolems/car_4_e3_57_e6_784_extend_skolem.smt2 deleted file mode 100644 index 97ae70dba..000000000 --- a/bench/skolems/car_4_e3_57_e6_784_extend_skolem.smt2 +++ /dev/null @@ -1,18 +0,0 @@ -(declare-fun $V90_X$2 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $V33_env$2 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun %init () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $m$0 () Bool) - -(assert (let ((a!1 (ite %init - (not (and $m$0 $s$0)) - (and (not (and $m$0 $s$0)) $V33_env$~1)))) -(let ((a!2 (and (= $OK$2 (or (not a!1) (>= 0 0))) - (= $V33_env$2 a!1) - (= $V28_speed$2 0) - (= $V90_X$2 (not (and $m$0 $s$0)))))) - (ite (and $m$0 $s$0) a!2 (ite (or (not $m$0) (not $s$0)) a!2 true))))) -(check-sat) diff --git a/bench/skolems/car_4_e7_592_base1_skolem.smt2 b/bench/skolems/car_4_e7_592_base1_skolem.smt2 deleted file mode 100644 index 545535a5a..000000000 --- a/bench/skolems/car_4_e7_592_base1_skolem.smt2 +++ /dev/null @@ -1,14 +0,0 @@ -(declare-fun $V90_X$2 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $V33_env$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $s$0 () Bool) - -(assert (let ((a!1 (or (not (not (and $m$0 $s$0))) (>= 0 0)))) -(let ((a!2 (and (= $OK$2 a!1) - (= $V33_env$2 (not (and $m$0 $s$0))) - (= $V28_speed$2 0) - (= $V90_X$2 (not (and $m$0 $s$0)))))) - (ite (and $m$0 $s$0) a!2 (ite (or (not $m$0) (not $s$0)) a!2 true))))) -(check-sat) diff --git a/bench/skolems/car_4_e7_592_base2_skolem.smt2 b/bench/skolems/car_4_e7_592_base2_skolem.smt2 deleted file mode 100644 index 0f1ec4e1a..000000000 --- a/bench/skolems/car_4_e7_592_base2_skolem.smt2 +++ /dev/null @@ -1,16 +0,0 @@ -(declare-fun $V28_speed$3 () Int) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V33_env$3 () Bool) -(declare-fun $s$1 () Bool) -(declare-fun $V90_X$3 () Bool) -(declare-fun $OK$3 () Bool) -(declare-fun $m$1 () Bool) - -(assert (let ((a!1 (not (or $V33_env$0 (not (and $m$1 $s$1))))) - (a!2 (= $V33_env$3 (or $V33_env$0 (not (and $m$1 $s$1)))))) -(let ((a!3 (and (= $OK$3 (or a!1 (>= 0 0))) - a!2 - (= $V28_speed$3 0) - (= $V90_X$3 (not (and $m$1 $s$1)))))) - (ite (or (not $m$1) (not $s$1)) a!3 (ite (and $m$1 $s$1) a!3 true))))) -(check-sat) diff --git a/bench/skolems/car_4_e7_592_extend_skolem.smt2 b/bench/skolems/car_4_e7_592_extend_skolem.smt2 deleted file mode 100644 index 430ec31ab..000000000 --- a/bench/skolems/car_4_e7_592_extend_skolem.smt2 +++ /dev/null @@ -1,18 +0,0 @@ -(declare-fun $V28_speed$2 () Int) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun %init () Bool) -(declare-fun $V90_X$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $m$0 () Bool) - -(assert (let ((a!1 (ite %init - (not (and $m$0 $s$0)) - (or (not (and $m$0 $s$0)) $V33_env$~1)))) -(let ((a!2 (and (= $OK$2 (or (not a!1) (>= 0 0))) - (= $V33_env$2 a!1) - (= $V28_speed$2 0) - (= $V90_X$2 (not (and $m$0 $s$0)))))) - (ite (and $m$0 $s$0) a!2 (ite (or (not $m$0) (not $s$0)) a!2 true))))) -(check-sat) diff --git a/bench/skolems/car_4_e8_118_base_skolem.smt2 b/bench/skolems/car_4_e8_118_base_skolem.smt2 deleted file mode 100644 index 545535a5a..000000000 --- a/bench/skolems/car_4_e8_118_base_skolem.smt2 +++ /dev/null @@ -1,14 +0,0 @@ -(declare-fun $V90_X$2 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $V33_env$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $s$0 () Bool) - -(assert (let ((a!1 (or (not (not (and $m$0 $s$0))) (>= 0 0)))) -(let ((a!2 (and (= $OK$2 a!1) - (= $V33_env$2 (not (and $m$0 $s$0))) - (= $V28_speed$2 0) - (= $V90_X$2 (not (and $m$0 $s$0)))))) - (ite (and $m$0 $s$0) a!2 (ite (or (not $m$0) (not $s$0)) a!2 true))))) -(check-sat) diff --git a/bench/skolems/car_4_e8_118_extend_skolem.smt2 b/bench/skolems/car_4_e8_118_extend_skolem.smt2 deleted file mode 100644 index e2a06aa8f..000000000 --- a/bench/skolems/car_4_e8_118_extend_skolem.smt2 +++ /dev/null @@ -1,18 +0,0 @@ -(declare-fun $V28_speed$2 () Int) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun %init () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V90_X$2 () Bool) -(declare-fun $m$0 () Bool) - -(assert (let ((a!1 (ite %init - (not (and $m$0 $s$0)) - (and (not (and $m$0 $s$0)) $V33_env$~1)))) -(let ((a!2 (and (= $OK$2 (or (not a!1) (>= 0 0))) - (= $V33_env$2 a!1) - (= $V28_speed$2 0) - (= $V90_X$2 (not (and $m$0 $s$0)))))) - (ite (and $m$0 $s$0) a!2 (ite (or (not $m$0) (not $s$0)) a!2 true))))) -(check-sat) diff --git a/bench/skolems/car_all_e2_108_base1_skolem.smt2 b/bench/skolems/car_all_e2_108_base1_skolem.smt2 deleted file mode 100644 index a2c63ba2d..000000000 --- a/bench/skolems/car_all_e2_108_base1_skolem.smt2 +++ /dev/null @@ -1,15 +0,0 @@ -(declare-fun $V92_X$2 () Bool) -(declare-fun $V27_dist$2 () Int) -(declare-fun $V28_speed$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $m$0 () Bool) - -(assert (let ((a!1 (not (and (not (and $m$0 $s$0)) (< 10 32767)))) - (a!3 (= $V33_env$2 (and (not (and $m$0 $s$0)) (< 10 32767)))) - (a!4 (= $V92_X$2 (and (not (and $m$0 $s$0)) (< 10 32767))))) -(let ((a!2 (= $OK$2 (or a!1 (and (>= 0 0) (>= 10 0) (< 10 11) (< 0 4)))))) -(let ((a!5 (and a!2 a!3 (= $V27_dist$2 10) (= $V28_speed$2 0) a!4))) - (ite (and $m$0 $s$0) a!5 (ite (or (not $m$0) (not $s$0)) a!5 true)))))) -(check-sat) diff --git a/bench/skolems/car_all_e2_108_base2_skolem.smt2 b/bench/skolems/car_all_e2_108_base2_skolem.smt2 deleted file mode 100644 index ddf7916e0..000000000 --- a/bench/skolems/car_all_e2_108_base2_skolem.smt2 +++ /dev/null @@ -1,19 +0,0 @@ -(declare-fun $V92_X$3 () Bool) -(declare-fun $V28_speed$3 () Int) -(declare-fun $OK$3 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V27_dist$3 () Int) -(declare-fun $m$1 () Bool) -(declare-fun $V33_env$3 () Bool) -(declare-fun $s$1 () Bool) - -(assert (let ((a!1 (and $V33_env$0 (and (not (and $m$1 $s$1)) (< 10 32767)))) - (a!3 (= $V92_X$3 (and (not (and $m$1 $s$1)) (< 10 32767))))) -(let ((a!2 (= $OK$3 (or (not a!1) (and (>= 0 0) (>= 10 0) (< 10 11) (< 0 4)))))) -(let ((a!4 (and a!2 - (= $V33_env$3 a!1) - (= $V27_dist$3 10) - (= $V28_speed$3 0) - a!3))) - (ite (or (not $m$1) (not $s$1)) a!4 (ite (and $m$1 $s$1) a!4 true)))))) -(check-sat) diff --git a/bench/skolems/car_all_e2_108_extend_skolem.smt2 b/bench/skolems/car_all_e2_108_extend_skolem.smt2 deleted file mode 100644 index 5e82d3d39..000000000 --- a/bench/skolems/car_all_e2_108_extend_skolem.smt2 +++ /dev/null @@ -1,21 +0,0 @@ -(declare-fun $V92_X$2 () Bool) -(declare-fun $V27_dist$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun %init () Bool) -(declare-fun $m$0 () Bool) - -(assert (let ((a!1 (and (and (not (and $m$0 $s$0)) (< 10 32767)) $V33_env$~1)) - (a!4 (= $V92_X$2 (and (not (and $m$0 $s$0)) (< 10 32767))))) -(let ((a!2 (ite %init (and (not (and $m$0 $s$0)) (< 10 32767)) a!1))) -(let ((a!3 (= $OK$2 (or (not a!2) (and (>= 0 0) (>= 10 0) (< 10 11) (< 0 4)))))) -(let ((a!5 (and a!3 - (= $V33_env$2 a!2) - (= $V27_dist$2 10) - (= $V28_speed$2 0) - a!4))) - (ite (or (not $m$0) (not $s$0)) a!5 (ite (and $m$0 $s$0) a!5 true))))))) -(check-sat) diff --git a/bench/skolems/car_all_e2_142_e8_194_base1_skolem.smt2 b/bench/skolems/car_all_e2_142_e8_194_base1_skolem.smt2 deleted file mode 100644 index 91e123d27..000000000 --- a/bench/skolems/car_all_e2_142_e8_194_base1_skolem.smt2 +++ /dev/null @@ -1,15 +0,0 @@ -(declare-fun $V28_speed$2 () Int) -(declare-fun $V27_dist$2 () Int) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V92_X$2 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $m$0 () Bool) - -(assert (let ((a!1 (not (and (not (and $m$0 $s$0)) (< 10 32767)))) - (a!3 (= $V33_env$2 (and (not (and $m$0 $s$0)) (< 10 32767)))) - (a!4 (= $V92_X$2 (and (not (and $m$0 $s$0)) (< 10 32767))))) -(let ((a!2 (= $OK$2 (or a!1 (and (>= 0 0) (>= 10 0) (< 10 11) (< 0 4)))))) -(let ((a!5 (and a!2 a!3 (= $V27_dist$2 10) (= $V28_speed$2 0) a!4))) - (ite (and $m$0 $s$0) a!5 (ite (or (not $m$0) (not $s$0)) a!5 true)))))) -(check-sat) diff --git a/bench/skolems/car_all_e2_142_e8_194_base2_skolem.smt2 b/bench/skolems/car_all_e2_142_e8_194_base2_skolem.smt2 deleted file mode 100644 index 31d7b1c84..000000000 --- a/bench/skolems/car_all_e2_142_e8_194_base2_skolem.smt2 +++ /dev/null @@ -1,19 +0,0 @@ -(declare-fun $V92_X$3 () Bool) -(declare-fun $V28_speed$3 () Int) -(declare-fun $V27_dist$3 () Int) -(declare-fun $m$1 () Bool) -(declare-fun $V33_env$3 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $OK$3 () Bool) -(declare-fun $s$1 () Bool) - -(assert (let ((a!1 (and $V33_env$0 (and (not (and $m$1 $s$1)) (< 10 32767)))) - (a!3 (= $V92_X$3 (and (not (and $m$1 $s$1)) (< 10 32767))))) -(let ((a!2 (= $OK$3 (or (not a!1) (and (>= 0 0) (>= 10 0) (< 10 11) (< 0 4)))))) -(let ((a!4 (and a!2 - (= $V33_env$3 a!1) - (= $V27_dist$3 10) - (= $V28_speed$3 0) - a!3))) - (ite (or (not $m$1) (not $s$1)) a!4 (ite (and $m$1 $s$1) a!4 true)))))) -(check-sat) diff --git a/bench/skolems/car_all_e2_142_e8_194_extend_skolem.smt2 b/bench/skolems/car_all_e2_142_e8_194_extend_skolem.smt2 deleted file mode 100644 index 710244908..000000000 --- a/bench/skolems/car_all_e2_142_e8_194_extend_skolem.smt2 +++ /dev/null @@ -1,21 +0,0 @@ -(declare-fun $V92_X$2 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun %init () Bool) -(declare-fun $V27_dist$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $s$0 () Bool) - -(assert (let ((a!1 (and (and (not (and $m$0 $s$0)) (< 10 32767)) $V33_env$~1)) - (a!4 (= $V92_X$2 (and (not (and $m$0 $s$0)) (< 10 32767))))) -(let ((a!2 (ite %init (and (not (and $m$0 $s$0)) (< 10 32767)) a!1))) -(let ((a!3 (= $OK$2 (or (not a!2) (and (>= 0 0) (>= 10 0) (< 10 11) (< 0 4)))))) -(let ((a!5 (and a!3 - (= $V33_env$2 a!2) - (= $V27_dist$2 10) - (= $V28_speed$2 0) - a!4))) - (ite (or (not $m$0) (not $s$0)) a!5 (ite (and $m$0 $s$0) a!5 true))))))) -(check-sat) diff --git a/bench/skolems/car_all_e3_1068_e4_275_base_skolem.smt2 b/bench/skolems/car_all_e3_1068_e4_275_base_skolem.smt2 deleted file mode 100644 index 91e123d27..000000000 --- a/bench/skolems/car_all_e3_1068_e4_275_base_skolem.smt2 +++ /dev/null @@ -1,15 +0,0 @@ -(declare-fun $V28_speed$2 () Int) -(declare-fun $V27_dist$2 () Int) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V92_X$2 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $m$0 () Bool) - -(assert (let ((a!1 (not (and (not (and $m$0 $s$0)) (< 10 32767)))) - (a!3 (= $V33_env$2 (and (not (and $m$0 $s$0)) (< 10 32767)))) - (a!4 (= $V92_X$2 (and (not (and $m$0 $s$0)) (< 10 32767))))) -(let ((a!2 (= $OK$2 (or a!1 (and (>= 0 0) (>= 10 0) (< 10 11) (< 0 4)))))) -(let ((a!5 (and a!2 a!3 (= $V27_dist$2 10) (= $V28_speed$2 0) a!4))) - (ite (and $m$0 $s$0) a!5 (ite (or (not $m$0) (not $s$0)) a!5 true)))))) -(check-sat) diff --git a/bench/skolems/car_all_e3_1068_e4_275_extend_skolem.smt2 b/bench/skolems/car_all_e3_1068_e4_275_extend_skolem.smt2 deleted file mode 100644 index c3dec6a58..000000000 --- a/bench/skolems/car_all_e3_1068_e4_275_extend_skolem.smt2 +++ /dev/null @@ -1,21 +0,0 @@ -(declare-fun $V92_X$2 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $V27_dist$2 () Int) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun %init () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $m$0 () Bool) - -(assert (let ((a!1 (and (and (not (and $m$0 $s$0)) (< 10 32767)) $V33_env$~1)) - (a!4 (= $V92_X$2 (and (not (and $m$0 $s$0)) (< 10 32767))))) -(let ((a!2 (ite %init (and (not (and $m$0 $s$0)) (< 10 32767)) a!1))) -(let ((a!3 (= $OK$2 (or (not a!2) (and (>= 0 0) (>= 10 0) (< 10 11) (< 0 4)))))) -(let ((a!5 (and a!3 - (= $V33_env$2 a!2) - (= $V27_dist$2 10) - (= $V28_speed$2 0) - a!4))) - (ite (or (not $m$0) (not $s$0)) a!5 (ite (and $m$0 $s$0) a!5 true))))))) -(check-sat) diff --git a/bench/skolems/car_all_e3_1068_e6_790_base1_skolem.smt2 b/bench/skolems/car_all_e3_1068_e6_790_base1_skolem.smt2 deleted file mode 100644 index 0f7a20ecf..000000000 --- a/bench/skolems/car_all_e3_1068_e6_790_base1_skolem.smt2 +++ /dev/null @@ -1,15 +0,0 @@ -(declare-fun $V92_X$2 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V27_dist$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $m$0 () Bool) - -(assert (let ((a!1 (not (and (not (and $m$0 $s$0)) (< 10 32767)))) - (a!3 (= $V33_env$2 (and (not (and $m$0 $s$0)) (< 10 32767)))) - (a!4 (= $V92_X$2 (and (not (and $m$0 $s$0)) (< 10 32767))))) -(let ((a!2 (= $OK$2 (or a!1 (and (>= 0 0) (>= 10 0) (< 10 11) (< 0 4)))))) -(let ((a!5 (and a!2 a!3 (= $V27_dist$2 10) (= $V28_speed$2 0) a!4))) - (ite (and $m$0 $s$0) a!5 (ite (or (not $m$0) (not $s$0)) a!5 true)))))) -(check-sat) diff --git a/bench/skolems/car_all_e3_1068_e6_790_base2_skolem.smt2 b/bench/skolems/car_all_e3_1068_e6_790_base2_skolem.smt2 deleted file mode 100644 index ec5602e64..000000000 --- a/bench/skolems/car_all_e3_1068_e6_790_base2_skolem.smt2 +++ /dev/null @@ -1,19 +0,0 @@ -(declare-fun $V92_X$3 () Bool) -(declare-fun $V28_speed$3 () Int) -(declare-fun $V27_dist$3 () Int) -(declare-fun $V33_env$3 () Bool) -(declare-fun $OK$3 () Bool) -(declare-fun $s$1 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $m$1 () Bool) - -(assert (let ((a!1 (and $V33_env$0 (and (not (and $m$1 $s$1)) (< 10 32767)))) - (a!3 (= $V92_X$3 (and (not (and $m$1 $s$1)) (< 10 32767))))) -(let ((a!2 (= $OK$3 (or (not a!1) (and (>= 0 0) (>= 10 0) (< 10 11) (< 0 4)))))) -(let ((a!4 (and a!2 - (= $V33_env$3 a!1) - (= $V27_dist$3 10) - (= $V28_speed$3 0) - a!3))) - (ite (or (not $m$1) (not $s$1)) a!4 (ite (and $m$1 $s$1) a!4 true)))))) -(check-sat) diff --git a/bench/skolems/car_all_e3_1068_e6_790_extend_skolem.smt2 b/bench/skolems/car_all_e3_1068_e6_790_extend_skolem.smt2 deleted file mode 100644 index 0b1ef3f2c..000000000 --- a/bench/skolems/car_all_e3_1068_e6_790_extend_skolem.smt2 +++ /dev/null @@ -1,21 +0,0 @@ -(declare-fun $V28_speed$2 () Int) -(declare-fun $V33_env$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $V27_dist$2 () Int) -(declare-fun $s$0 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun %init () Bool) -(declare-fun $V92_X$2 () Bool) -(declare-fun $m$0 () Bool) - -(assert (let ((a!1 (and (and (not (and $m$0 $s$0)) (< 10 32767)) $V33_env$~1)) - (a!4 (= $V92_X$2 (and (not (and $m$0 $s$0)) (< 10 32767))))) -(let ((a!2 (ite %init (and (not (and $m$0 $s$0)) (< 10 32767)) a!1))) -(let ((a!3 (= $OK$2 (or (not a!2) (and (>= 0 0) (>= 10 0) (< 10 11) (< 0 4)))))) -(let ((a!5 (and a!3 - (= $V33_env$2 a!2) - (= $V27_dist$2 10) - (= $V28_speed$2 0) - a!4))) - (ite (or (not $m$0) (not $s$0)) a!5 (ite (and $m$0 $s$0) a!5 true))))))) -(check-sat) diff --git a/bench/skolems/car_all_e8_856_base1_skolem.smt2 b/bench/skolems/car_all_e8_856_base1_skolem.smt2 deleted file mode 100644 index 91e123d27..000000000 --- a/bench/skolems/car_all_e8_856_base1_skolem.smt2 +++ /dev/null @@ -1,15 +0,0 @@ -(declare-fun $V28_speed$2 () Int) -(declare-fun $V27_dist$2 () Int) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V92_X$2 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $m$0 () Bool) - -(assert (let ((a!1 (not (and (not (and $m$0 $s$0)) (< 10 32767)))) - (a!3 (= $V33_env$2 (and (not (and $m$0 $s$0)) (< 10 32767)))) - (a!4 (= $V92_X$2 (and (not (and $m$0 $s$0)) (< 10 32767))))) -(let ((a!2 (= $OK$2 (or a!1 (and (>= 0 0) (>= 10 0) (< 10 11) (< 0 4)))))) -(let ((a!5 (and a!2 a!3 (= $V27_dist$2 10) (= $V28_speed$2 0) a!4))) - (ite (and $m$0 $s$0) a!5 (ite (or (not $m$0) (not $s$0)) a!5 true)))))) -(check-sat) diff --git a/bench/skolems/car_all_e8_856_base2_skolem.smt2 b/bench/skolems/car_all_e8_856_base2_skolem.smt2 deleted file mode 100644 index 7904bc567..000000000 --- a/bench/skolems/car_all_e8_856_base2_skolem.smt2 +++ /dev/null @@ -1,19 +0,0 @@ -(declare-fun $V28_speed$3 () Int) -(declare-fun $V27_dist$3 () Int) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V92_X$3 () Bool) -(declare-fun $s$1 () Bool) -(declare-fun $OK$3 () Bool) -(declare-fun $V33_env$3 () Bool) -(declare-fun $m$1 () Bool) - -(assert (let ((a!1 (and $V33_env$0 (and (not (and $m$1 $s$1)) (< 10 32767)))) - (a!3 (= $V92_X$3 (and (not (and $m$1 $s$1)) (< 10 32767))))) -(let ((a!2 (= $OK$3 (or (not a!1) (and (>= 0 0) (>= 10 0) (< 10 11) (< 0 4)))))) -(let ((a!4 (and a!2 - (= $V33_env$3 a!1) - (= $V27_dist$3 10) - (= $V28_speed$3 0) - a!3))) - (ite (or (not $m$1) (not $s$1)) a!4 (ite (and $m$1 $s$1) a!4 true)))))) -(check-sat) diff --git a/bench/skolems/car_all_e8_856_extend_skolem.smt2 b/bench/skolems/car_all_e8_856_extend_skolem.smt2 deleted file mode 100644 index 5e82d3d39..000000000 --- a/bench/skolems/car_all_e8_856_extend_skolem.smt2 +++ /dev/null @@ -1,21 +0,0 @@ -(declare-fun $V92_X$2 () Bool) -(declare-fun $V27_dist$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun %init () Bool) -(declare-fun $m$0 () Bool) - -(assert (let ((a!1 (and (and (not (and $m$0 $s$0)) (< 10 32767)) $V33_env$~1)) - (a!4 (= $V92_X$2 (and (not (and $m$0 $s$0)) (< 10 32767))))) -(let ((a!2 (ite %init (and (not (and $m$0 $s$0)) (< 10 32767)) a!1))) -(let ((a!3 (= $OK$2 (or (not a!2) (and (>= 0 0) (>= 10 0) (< 10 11) (< 0 4)))))) -(let ((a!5 (and a!3 - (= $V33_env$2 a!2) - (= $V27_dist$2 10) - (= $V28_speed$2 0) - a!4))) - (ite (or (not $m$0) (not $s$0)) a!5 (ite (and $m$0 $s$0) a!5 true))))))) -(check-sat) diff --git a/bench/skolems/cd_base1_skolem.smt2 b/bench/skolems/cd_base1_skolem.smt2 deleted file mode 100644 index 4c1e8079c..000000000 --- a/bench/skolems/cd_base1_skolem.smt2 +++ /dev/null @@ -1,40 +0,0 @@ -(declare-fun $Property~0.cpt$2 () Int) -(declare-fun $Property~0.acceptable$2 () Bool) -(declare-fun $Property~0.speed$2 () Int) -(declare-fun $speed$2 () Int) -(declare-fun $Sofar~0.X$2 () Bool) -(declare-fun $minus$2 () Bool) -(declare-fun $Environment~0.minus$2 () Bool) -(declare-fun $diff$0 () Int) -(declare-fun $plus$2 () Bool) -(declare-fun $Environment~0.plus$2 () Bool) -(declare-fun $Environment~0.diff$2 () Int) -(declare-fun $Property~0.ok$2 () Bool) -(declare-fun $Sofar~0.Sofar$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $realistic$2 () Bool) -(declare-fun $Environment~0.ok$2 () Bool) - -(assert (let ((a!1 (and true (>= $diff$0 1) (<= $diff$0 4) (<= (- 0 4) $diff$0)))) -(let ((a!2 (and (= $realistic$2 a!1) - (= $Environment~0.ok$2 a!1) - (= $OK$2 true) - (= $Sofar~0.Sofar$2 (and (< 8 16) a!1 (<= 0 8))) - (= $Property~0.ok$2 true) - (= $Environment~0.diff$2 $diff$0) - (= $Environment~0.plus$2 false) - (= $plus$2 false) - (= $Environment~0.minus$2 false) - (= $minus$2 false) - (= $Sofar~0.X$2 (and (< 8 16) a!1 (<= 0 8))) - (= $speed$2 8) - (= $Property~0.speed$2 8) - (= $Property~0.acceptable$2 true) - (= $Property~0.cpt$2 0)))) -(let ((a!3 (ite (or (not (<= (- 4) $diff$0)) - (not (<= $diff$0 4)) - (not (>= $diff$0 1))) - a!2 - true))) - (ite (and (<= (- 4) $diff$0) (<= $diff$0 4) (>= $diff$0 1)) a!2 a!3))))) -(check-sat) diff --git a/bench/skolems/cd_base2_skolem.smt2 b/bench/skolems/cd_base2_skolem.smt2 deleted file mode 100644 index 7a4967503..000000000 --- a/bench/skolems/cd_base2_skolem.smt2 +++ /dev/null @@ -1,53 +0,0 @@ -(declare-fun $Property~0.acceptable$3 () Bool) -(declare-fun $speed$3 () Int) -(declare-fun $minus$3 () Bool) -(declare-fun $plus$3 () Bool) -(declare-fun $Environment~0.plus$3 () Bool) -(declare-fun $Environment~0.diff$3 () Int) -(declare-fun $Sofar~0.Sofar$3 () Bool) -(declare-fun $realistic$3 () Bool) -(declare-fun $OK$3 () Bool) -(declare-fun $Environment~0.minus$3 () Bool) -(declare-fun $diff$1 () Int) -(declare-fun $Environment~0.plus$0 () Bool) -(declare-fun $Property~0.ok$3 () Bool) -(declare-fun $Sofar~0.X$3 () Bool) -(declare-fun $Environment~0.ok$3 () Bool) -(declare-fun $Sofar~0.Sofar$0 () Bool) -(declare-fun $Property~0.cpt$3 () Int) -(declare-fun $Environment~0.minus$0 () Bool) -(declare-fun $Property~0.speed$3 () Int) -(declare-fun $Property~0.cpt$0 () Int) - -(assert (let ((a!1 (and (ite $Environment~0.minus$0 (<= $diff$1 (- 0 1)) true) - (ite $Environment~0.plus$0 (>= $diff$1 1) true) - (<= $diff$1 4) - (<= (- 0 4) $diff$1))) - (a!4 (or (not (<= (- 4) $diff$1)) - (not (<= $diff$1 4)) - (and $Environment~0.plus$0 (not (>= $diff$1 1))) - (and $Environment~0.minus$0 (not (<= $diff$1 (- 1))))))) -(let ((a!2 (and $Sofar~0.Sofar$0 (and (< 8 16) a!1 (<= 0 8))))) -(let ((a!3 (and (= $realistic$3 a!1) - (= $Environment~0.ok$3 a!1) - (= $OK$3 (or (<= $Property~0.cpt$0 7) (not a!2))) - (= $Sofar~0.Sofar$3 a!2) - (= $Property~0.ok$3 (<= $Property~0.cpt$0 7)) - (= $Environment~0.diff$3 $diff$1) - (= $Environment~0.plus$3 false) - (= $plus$3 false) - (= $Environment~0.minus$3 false) - (= $minus$3 false) - (= $Sofar~0.X$3 (and (< 8 16) a!1 (<= 0 8))) - (= $speed$3 8) - (= $Property~0.speed$3 8) - (= $Property~0.acceptable$3 true) - (= $Property~0.cpt$3 0)))) - (ite (and (or (not $Sofar~0.Sofar$0) (<= $Property~0.cpt$0 7)) - (<= (- 4) $diff$1) - (<= $diff$1 4) - (or (not $Environment~0.plus$0) (>= $diff$1 1)) - (or (not $Environment~0.minus$0) (<= $diff$1 (- 1)))) - a!3 - (ite a!4 a!3 true)))))) -(check-sat) diff --git a/bench/skolems/cd_base3_skolem.smt2 b/bench/skolems/cd_base3_skolem.smt2 deleted file mode 100644 index 21871cc43..000000000 --- a/bench/skolems/cd_base3_skolem.smt2 +++ /dev/null @@ -1,69 +0,0 @@ -(declare-fun $speed$4 () Int) -(declare-fun $Environment~0.minus$4 () Bool) -(declare-fun $plus$4 () Bool) -(declare-fun $Environment~0.plus$4 () Bool) -(declare-fun $minus$4 () Bool) -(declare-fun $Environment~0.diff$4 () Int) -(declare-fun $OK$4 () Bool) -(declare-fun $Property~0.cpt$1 () Int) -(declare-fun $Sofar~0.Sofar$4 () Bool) -(declare-fun $Property~0.ok$4 () Bool) -(declare-fun $Environment~0.ok$4 () Bool) -(declare-fun $Property~0.acceptable$4 () Bool) -(declare-fun $realistic$4 () Bool) -(declare-fun $Property~0.cpt$4 () Int) -(declare-fun $Sofar~0.Sofar$1 () Bool) -(declare-fun $Property~0.speed$4 () Int) -(declare-fun $Environment~0.plus$1 () Bool) -(declare-fun $diff$2 () Int) -(declare-fun $Sofar~0.X$4 () Bool) -(declare-fun $Environment~0.minus$1 () Bool) - -(assert (let ((a!1 (and (ite $Environment~0.minus$1 (<= $diff$2 (- 0 1)) true) - (ite $Environment~0.plus$1 (>= $diff$2 1) true) - (<= $diff$2 4) - (<= (- 0 4) $diff$2))) - (a!4 (or (not (<= (- 4) $diff$2)) - (not (<= $diff$2 4)) - (and $Environment~0.plus$1 (not (>= $diff$2 1))) - (and $Environment~0.minus$1 (not (<= $diff$2 (- 1))))))) -(let ((a!2 (and $Sofar~0.Sofar$1 (and (< 8 16) a!1 (<= 0 8)))) - (a!5 (and $Sofar~0.Sofar$1 (and (< 13 16) a!1 (<= 0 13))))) -(let ((a!3 (and (= $realistic$4 a!1) - (= $Environment~0.ok$4 a!1) - (= $OK$4 (or (<= $Property~0.cpt$1 7) (not a!2))) - (= $Sofar~0.Sofar$4 a!2) - (= $Property~0.ok$4 (<= $Property~0.cpt$1 7)) - (= $Environment~0.diff$4 $diff$2) - (= $Environment~0.plus$4 false) - (= $plus$4 false) - (= $Environment~0.minus$4 false) - (= $minus$4 false) - (= $Sofar~0.X$4 (and (< 8 16) a!1 (<= 0 8))) - (= $speed$4 8) - (= $Property~0.speed$4 8) - (= $Property~0.acceptable$4 true) - (= $Property~0.cpt$4 0))) - (a!6 (and (= $realistic$4 a!1) - (= $Environment~0.ok$4 a!1) - (= $OK$4 (or (<= $Property~0.cpt$1 7) (not a!5))) - (= $Sofar~0.Sofar$4 a!5) - (= $Property~0.ok$4 (<= $Property~0.cpt$1 7)) - (= $Environment~0.diff$4 $diff$2) - (= $Environment~0.plus$4 false) - (= $plus$4 false) - (= $Environment~0.minus$4 false) - (= $minus$4 false) - (= $Sofar~0.X$4 (and (< 13 16) a!1 (<= 0 13))) - (= $speed$4 13) - (= $Property~0.speed$4 13) - (= $Property~0.acceptable$4 false) - (= $Property~0.cpt$4 (+ $Property~0.cpt$1 1))))) - (ite (and (or (not $Sofar~0.Sofar$1) (<= $Property~0.cpt$1 7)) - (<= (- 4) $diff$2) - (<= $diff$2 4) - (or (not $Environment~0.plus$1) (>= $diff$2 1)) - (or (not $Environment~0.minus$1) (<= $diff$2 (- 1)))) - a!3 - (ite a!4 a!6 true)))))) -(check-sat) diff --git a/bench/skolems/cd_e7_621_e8_714_base1_skolem.smt2 b/bench/skolems/cd_e7_621_e8_714_base1_skolem.smt2 deleted file mode 100644 index f0df2ae41..000000000 --- a/bench/skolems/cd_e7_621_e8_714_base1_skolem.smt2 +++ /dev/null @@ -1,18 +0,0 @@ -(declare-fun $V109_cpt$2 () Int) -(declare-fun $V25_realistic$2 () Bool) -(declare-fun $V93_X$2 () Bool) -(declare-fun $diff$0 () Int) -(declare-fun $V110_acceptable$2 () Bool) -(declare-fun $V22_speed$2 () Int) -(declare-fun $V98_Sofar$2 () Bool) -(declare-fun $OK$2 () Bool) - -(assert (let ((a!1 (and true (<= (- 0 4) $diff$0) (<= $diff$0 4) (>= $diff$0 1)))) - (and (= $OK$2 true) - (= $V98_Sofar$2 (and (< 8 16) a!1 (<= 0 8))) - (= $V25_realistic$2 a!1) - (= $V93_X$2 (and (< 8 16) a!1 (<= 0 8))) - (= $V22_speed$2 8) - (= $V109_cpt$2 0) - (= $V110_acceptable$2 true)))) -(check-sat) diff --git a/bench/skolems/cd_e7_621_e8_714_base2_skolem.smt2 b/bench/skolems/cd_e7_621_e8_714_base2_skolem.smt2 deleted file mode 100644 index fb4457d4d..000000000 --- a/bench/skolems/cd_e7_621_e8_714_base2_skolem.smt2 +++ /dev/null @@ -1,33 +0,0 @@ -(declare-fun $V22_speed$3 () Int) -(declare-fun $V109_cpt$3 () Int) -(declare-fun $V25_realistic$3 () Bool) -(declare-fun $OK$3 () Bool) -(declare-fun $V24_minus$0 () Bool) -(declare-fun $V109_cpt$0 () Int) -(declare-fun $V98_Sofar$0 () Bool) -(declare-fun $V98_Sofar$3 () Bool) -(declare-fun $V110_acceptable$3 () Bool) -(declare-fun $V23_plus$0 () Bool) -(declare-fun $V93_X$3 () Bool) -(declare-fun $diff$1 () Int) - -(assert (let ((a!1 (or (not (<= (- 4) $diff$1)) - (not (<= $diff$1 4)) - (and $V23_plus$0 (not (>= $diff$1 1))) - (and $V24_minus$0 (not (<= $diff$1 (- 1)))) - (not $V98_Sofar$0) - (<= $V109_cpt$0 7))) - (a!2 (and (<= (- 0 4) $diff$1) - (<= $diff$1 4) - (ite $V23_plus$0 (>= $diff$1 1) true) - (ite $V24_minus$0 (<= $diff$1 (- 0 1)) true)))) -(let ((a!3 (and $V98_Sofar$0 (and (< 8 16) a!2 (<= 0 8))))) -(let ((a!4 (and (= $OK$3 (or (<= $V109_cpt$0 7) (not a!3))) - (= $V98_Sofar$3 a!3) - (= $V25_realistic$3 a!2) - (= $V93_X$3 (and (< 8 16) a!2 (<= 0 8))) - (= $V22_speed$3 8) - (= $V109_cpt$3 0) - (= $V110_acceptable$3 true)))) - (ite a!1 a!4 true))))) -(check-sat) diff --git a/bench/skolems/cd_e7_621_e8_714_extend_skolem.smt2 b/bench/skolems/cd_e7_621_e8_714_extend_skolem.smt2 deleted file mode 100644 index fa2f48c86..000000000 --- a/bench/skolems/cd_e7_621_e8_714_extend_skolem.smt2 +++ /dev/null @@ -1,56 +0,0 @@ -(declare-fun $V109_cpt$2 () Int) -(declare-fun $V23_plus$~1 () Bool) -(declare-fun $V22_speed$2 () Int) -(declare-fun $V98_Sofar$2 () Bool) -(declare-fun $V93_X$2 () Bool) -(declare-fun $V25_realistic$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $V98_Sofar$~1 () Bool) -(declare-fun $V109_cpt$~1 () Int) -(declare-fun $diff$0 () Int) -(declare-fun $V24_minus$~1 () Bool) -(declare-fun $V110_acceptable$2 () Bool) -(declare-fun %init () Bool) - -(assert (let ((a!1 (or (not (<= (- 4) $diff$0)) - (not (<= $diff$0 4)) - (and (or %init $V23_plus$~1) (not (>= $diff$0 1))) - (and (not %init) $V24_minus$~1 (not (<= $diff$0 (- 1)))))) - (a!2 (or (not (<= (- 4) $diff$0)) - (not (<= $diff$0 4)) - (and (or %init $V23_plus$~1) (not (>= $diff$0 1))) - (and (not %init) $V24_minus$~1 (not (<= $diff$0 (- 1)))) - (not $V98_Sofar$~1))) - (a!3 (and (and (<= (- 0 4) $diff$0) (<= $diff$0 4)) - (ite (ite true true $V23_plus$~1) (>= $diff$0 1) true) - (ite (ite true false $V24_minus$~1) (<= $diff$0 (- 0 1)) true))) - (a!4 (and (and (<= (- 0 4) $diff$0) (<= $diff$0 4)) - (ite (ite %init true $V23_plus$~1) (>= $diff$0 1) true) - (ite (ite %init false $V24_minus$~1) (<= $diff$0 (- 0 1)) true)))) -(let ((a!5 (ite %init - (and (< 8 16) a!3 (<= 0 8)) - (and (and (< 8 16) a!4 (<= 0 8)) $V98_Sofar$~1))) - (a!8 (ite %init - (and (< (- 1) 16) a!3 (<= 0 (- 1))) - (and (and (< (- 1) 16) a!4 (<= 0 (- 1))) $V98_Sofar$~1)))) -(let ((a!6 (= $OK$2 (or (ite %init true (<= $V109_cpt$~1 7)) (not a!5)))) - (a!9 (= $OK$2 (or (ite %init true (<= $V109_cpt$~1 7)) (not a!8))))) -(let ((a!7 (and a!6 - (= $V98_Sofar$2 a!5) - (= $V25_realistic$2 a!4) - (= $V93_X$2 (and (< 8 16) a!4 (<= 0 8))) - (= $V22_speed$2 8) - (= $V109_cpt$2 0) - (= $V110_acceptable$2 true))) - (a!10 (and a!9 - (= $V98_Sofar$2 a!8) - (= $V25_realistic$2 a!4) - (= $V93_X$2 (and (< (- 1) 16) a!4 (<= 0 (- 1)))) - (= $V22_speed$2 (- 1)) - (= $V109_cpt$2 (+ 1 $V109_cpt$~1)) - (= $V110_acceptable$2 false)))) -(let ((a!11 (ite (or (and %init (= $V109_cpt$~1 (- 1))) (not %init)) a!10 true))) - (ite (or (and %init a!1) (and (not %init) a!2) %init (<= $V109_cpt$~1 7)) - a!7 - a!11))))))) -(check-sat) diff --git a/bench/skolems/cd_extend_skolem.smt2 b/bench/skolems/cd_extend_skolem.smt2 deleted file mode 100644 index c81f21b22..000000000 --- a/bench/skolems/cd_extend_skolem.smt2 +++ /dev/null @@ -1,126 +0,0 @@ -(declare-fun $Sofar~0.X$2 () Bool) -(declare-fun $plus$2 () Bool) -(declare-fun $Property~0.speed$2 () Int) -(declare-fun $Sofar~0.Sofar$~1 () Bool) -(declare-fun $Environment~0.diff$2 () Int) -(declare-fun $Property~0.ok$2 () Bool) -(declare-fun $Sofar~0.Sofar$2 () Bool) -(declare-fun $Environment~0.minus$~1 () Bool) -(declare-fun $Environment~0.ok$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $Property~0.acceptable$2 () Bool) -(declare-fun $Environment~0.plus$2 () Bool) -(declare-fun $realistic$2 () Bool) -(declare-fun $minus$2 () Bool) -(declare-fun $Property~0.cpt$~1 () Int) -(declare-fun $Environment~0.minus$2 () Bool) -(declare-fun $Environment~0.plus$~1 () Bool) -(declare-fun %init () Bool) -(declare-fun $Property~0.cpt$2 () Int) -(declare-fun $speed$2 () Int) -(declare-fun $diff$0 () Int) - -(assert (let ((a!1 (or (not (<= (- 4) $diff$0)) - (not (<= $diff$0 4)) - (and (or %init $Environment~0.plus$~1) (not (>= $diff$0 1))) - (and (not %init) - $Environment~0.minus$~1 - (not (<= $diff$0 (- 1)))))) - (a!3 (and (ite (ite %init false $Environment~0.minus$~1) - (<= $diff$0 (- 0 1)) - true) - (ite (ite %init true $Environment~0.plus$~1) - (>= $diff$0 1) - true) - (and (<= $diff$0 4) (<= (- 0 4) $diff$0)))) - (a!4 (and (ite (ite true false $Environment~0.minus$~1) - (<= $diff$0 (- 0 1)) - true) - (ite (ite true true $Environment~0.plus$~1) (>= $diff$0 1) true) - (and (<= $diff$0 4) (<= (- 0 4) $diff$0)))) - (a!9 (and (<= (- 4) $diff$0) - (<= $diff$0 4) - (or (and (not %init) (not $Environment~0.plus$~1)) - (>= $diff$0 1)) - (or %init (not $Environment~0.minus$~1) (<= $diff$0 (- 1))) - (or %init (and (not %init) (= $Property~0.cpt$~1 (- 1)))))) - (a!14 (and (<= (- 4) $diff$0) - (<= $diff$0 4) - (or (and (not %init) (not $Environment~0.plus$~1)) - (>= $diff$0 1)) - (or %init (not $Environment~0.minus$~1) (<= $diff$0 (- 1))) - (or (and %init (= $Property~0.cpt$~1 (- 1))) (not %init))))) -(let ((a!2 (and a!1 (or %init (and (not %init) (= $Property~0.cpt$~1 (- 1)))))) - (a!5 (ite %init - (and (< 13 16) a!4 (<= 0 13)) - (and (and (< 13 16) a!3 (<= 0 13)) $Sofar~0.Sofar$~1))) - (a!7 (= $Sofar~0.X$2 (and (< 13 16) a!3 (<= 0 13)))) - (a!10 (ite %init - (and (< 16 16) a!4 (<= 0 16)) - (and (and (< 16 16) a!3 (<= 0 16)) $Sofar~0.Sofar$~1))) - (a!12 (= $Sofar~0.X$2 (and (< 16 16) a!3 (<= 0 16)))) - (a!16 (and a!1 (or (and %init (= $Property~0.cpt$~1 (- 1))) (not %init))))) -(let ((a!6 (= $OK$2 (or (ite %init true (<= $Property~0.cpt$~1 7)) (not a!5)))) - (a!11 (= $OK$2 (or (ite %init true (<= $Property~0.cpt$~1 7)) (not a!10))))) -(let ((a!8 (and (= $realistic$2 a!3) - (= $Environment~0.ok$2 a!3) - a!6 - (= $Sofar~0.Sofar$2 a!5) - (= $Property~0.ok$2 (ite %init true (<= $Property~0.cpt$~1 7))) - (= $Environment~0.diff$2 $diff$0) - (= $Environment~0.plus$2 false) - (= $plus$2 false) - (= $Environment~0.minus$2 false) - (= $minus$2 false) - a!7 - (= $speed$2 13) - (= $Property~0.speed$2 13) - (= $Property~0.acceptable$2 false) - (= $Property~0.cpt$2 0))) - (a!13 (and (= $realistic$2 a!3) - (= $Environment~0.ok$2 a!3) - a!11 - (= $Sofar~0.Sofar$2 a!10) - (= $Property~0.ok$2 (ite %init true (<= $Property~0.cpt$~1 7))) - (= $Environment~0.diff$2 $diff$0) - (= $Environment~0.plus$2 false) - (= $plus$2 false) - (= $Environment~0.minus$2 false) - (= $minus$2 false) - a!12 - (= $speed$2 16) - (= $Property~0.speed$2 16) - (= $Property~0.acceptable$2 false) - (= $Property~0.cpt$2 0))) - (a!15 (and (= $realistic$2 a!3) - (= $Environment~0.ok$2 a!3) - a!11 - (= $Sofar~0.Sofar$2 a!10) - (= $Property~0.ok$2 (ite %init true (<= $Property~0.cpt$~1 7))) - (= $Environment~0.diff$2 $diff$0) - (= $Environment~0.plus$2 false) - (= $plus$2 false) - (= $Environment~0.minus$2 false) - (= $minus$2 false) - a!12 - (= $speed$2 16) - (= $Property~0.speed$2 16) - (= $Property~0.acceptable$2 false) - (= $Property~0.cpt$2 (+ 1 $Property~0.cpt$~1)))) - (a!17 (and (= $realistic$2 a!3) - (= $Environment~0.ok$2 a!3) - a!6 - (= $Sofar~0.Sofar$2 a!5) - (= $Property~0.ok$2 (ite %init true (<= $Property~0.cpt$~1 7))) - (= $Environment~0.diff$2 $diff$0) - (= $Environment~0.plus$2 false) - (= $plus$2 false) - (= $Environment~0.minus$2 false) - (= $minus$2 false) - a!7 - (= $speed$2 13) - (= $Property~0.speed$2 13) - (= $Property~0.acceptable$2 false) - (= $Property~0.cpt$2 (+ 1 $Property~0.cpt$~1))))) - (ite a!2 a!8 (ite a!9 a!13 (ite a!14 a!15 (ite a!16 a!17 true))))))))) -(check-sat) diff --git a/bench/skolems/cruise_controller_01_base_skolem.smt2 b/bench/skolems/cruise_controller_01_base_skolem.smt2 deleted file mode 100644 index 310c9ef46..000000000 --- a/bench/skolems/cruise_controller_01_base_skolem.smt2 +++ /dev/null @@ -1,2454 +0,0 @@ -(declare-fun $OK$2 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - () - Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$2 - () - Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$2 - () - Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$2 - () - Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$2 - () - Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$2 - () - Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$2 - () - Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$2 - () - Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$2 - () - Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$2 - () - Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$2 - () - Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$2 - () - Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$2 - () - Bool) -(declare-fun $cancel$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$2 - () - Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$2 - () - Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$2 - () - Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$2 - () - Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - () - Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - () - Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - () - Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - () - Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$2 - () - Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$2 - () - Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$2 - () - Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$2 - () - Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$2 - () - Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$2 - () - Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - () - Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$2 - () - Int) -(declare-fun $carSpeed$0 () Real) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$2 - () - Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$2 - () - Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$2 - () - Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$2 - () - Int) -(declare-fun $accelResume$0 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$2 - () - Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$2 - () - Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_accel$2 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_set$2 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_onOff$2 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_setEvent_Out$2 - () - Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$2 - () - Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic____wakeup___$2 - () - Bool) -(declare-fun $carGear$0 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$2 - () - Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - () - Int) -(declare-fun $onOff$0 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - () - Bool) -(declare-fun $decelSet$0 () Bool) -(declare-fun $validInputs$0 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_decel$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - () - Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$2 - () - Bool) -(declare-fun $brakePedal$0 () Bool) - -(assert (let ((a!1 (or $cancel$0 - $brakePedal$0 - (not (= $carGear$0 3)) - (not (>= $carSpeed$0 15.0)) - (not $validInputs$0))) - (a!2 (and $validInputs$0 - (>= $carSpeed$0 (to_real (div 150 10))) - (not $cancel$0) - (not $brakePedal$0) - (= $carGear$0 3)))) -(let ((a!3 (ite (and (not $accelResume$0) - (not $decelSet$0) - $onOff$0 - (not $cancel$0) - (not $brakePedal$0) - (= $carGear$0 3) - (>= $carSpeed$0 15.0) - $validInputs$0) - (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_onOff$2 1) - (= $chart_CruiseController_ModeLogic_mode_logic_decel$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_set$2 0) - (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$2 - false) - (= $chart_CruiseController_ModeLogic_mode_logic_accel$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$2 - 1) - (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$2 - a!2) - (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$2 - 1) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 1) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 7) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$2 - false) - (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 2) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - true) - (= $OK$2 true)) - (ite (and (not $accelResume$0) (not $decelSet$0) $onOff$0 a!1) - (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_onOff$2 - 1) - (= $chart_CruiseController_ModeLogic_mode_logic_decel$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_set$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$2 - false) - (= $chart_CruiseController_ModeLogic_mode_logic_accel$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$2 - a!2) - (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$2 - 1) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 1) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 7) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$2 - false) - (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 2) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - true) - (= $OK$2 true)) - true)))) -(let ((a!4 (ite (and $accelResume$0 - (not $decelSet$0) - $onOff$0 - (not $cancel$0) - (not $brakePedal$0) - (= $carGear$0 3) - (>= $carSpeed$0 15.0) - $validInputs$0) - (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$2 - 1) - (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_onOff$2 1) - (= $chart_CruiseController_ModeLogic_mode_logic_decel$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_set$2 0) - (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$2 - false) - (= $chart_CruiseController_ModeLogic_mode_logic_accel$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$2 - 1) - (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$2 - a!2) - (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$2 - 1) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 1) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 7) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$2 - false) - (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 2) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - true) - (= $OK$2 true)) - (ite (and $accelResume$0 (not $decelSet$0) $onOff$0 a!1) - (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$2 - 1) - (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_onOff$2 - 1) - (= $chart_CruiseController_ModeLogic_mode_logic_decel$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_set$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$2 - false) - (= $chart_CruiseController_ModeLogic_mode_logic_accel$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$2 - a!2) - (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$2 - 1) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 1) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 7) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$2 - false) - (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 2) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - true) - (= $OK$2 true)) - a!3)))) -(let ((a!5 (ite (and $accelResume$0 (not $decelSet$0) (not $onOff$0) a!1) - (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$2 - 1) - (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_onOff$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_decel$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_set$2 0) - (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$2 - false) - (= $chart_CruiseController_ModeLogic_mode_logic_accel$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$2 - a!2) - (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$2 - 1) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 1) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 7) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$2 - false) - (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 2) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - true) - (= $OK$2 true)) - (ite (and $accelResume$0 - (not $decelSet$0) - (not $onOff$0) - (not $cancel$0) - (not $brakePedal$0) - (= $carGear$0 3) - (>= $carSpeed$0 15.0) - $validInputs$0) - (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$2 - 1) - (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_onOff$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_decel$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_set$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$2 - false) - (= $chart_CruiseController_ModeLogic_mode_logic_accel$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$2 - 1) - (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$2 - a!2) - (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$2 - 1) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 1) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 7) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$2 - false) - (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 2) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - true) - (= $OK$2 true)) - a!4)))) -(let ((a!6 (ite (and (not $accelResume$0) - (not $decelSet$0) - (not $onOff$0) - (not $cancel$0) - (not $brakePedal$0) - (= $carGear$0 3) - (>= $carSpeed$0 15.0) - $validInputs$0) - (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_onOff$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_decel$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_set$2 0) - (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$2 - false) - (= $chart_CruiseController_ModeLogic_mode_logic_accel$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$2 - 1) - (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$2 - a!2) - (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$2 - 1) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 1) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 7) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$2 - false) - (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 2) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - true) - (= $OK$2 true)) - (ite (and (not $accelResume$0) - (not $decelSet$0) - (not $onOff$0) - a!1) - (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_onOff$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_decel$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_set$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$2 - false) - (= $chart_CruiseController_ModeLogic_mode_logic_accel$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$2 - a!2) - (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$2 - 1) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 1) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 7) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$2 - false) - (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 2) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - true) - (= $OK$2 true)) - a!5)))) -(let ((a!7 (ite (and $accelResume$0 - $decelSet$0 - (not $onOff$0) - (not $cancel$0) - (not $brakePedal$0) - (= $carGear$0 3) - (>= $carSpeed$0 15.0) - $validInputs$0) - (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$2 - 1) - (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$2 - 1) - (= $chart_CruiseController_ModeLogic_mode_logic_onOff$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_decel$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_set$2 0) - (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$2 - false) - (= $chart_CruiseController_ModeLogic_mode_logic_accel$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$2 - 1) - (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$2 - a!2) - (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$2 - 1) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 1) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 7) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$2 - false) - (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 2) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - true) - (= $OK$2 true)) - (ite (and (not $accelResume$0) - $decelSet$0 - (not $onOff$0) - (not $cancel$0) - (not $brakePedal$0) - (= $carGear$0 3) - (>= $carSpeed$0 15.0) - $validInputs$0) - (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$2 - 1) - (= $chart_CruiseController_ModeLogic_mode_logic_onOff$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_decel$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_set$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$2 - false) - (= $chart_CruiseController_ModeLogic_mode_logic_accel$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$2 - 1) - (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$2 - a!2) - (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$2 - 1) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 1) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 7) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$2 - false) - (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 2) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - true) - (= $OK$2 true)) - a!6)))) -(let ((a!8 (ite (and $accelResume$0 $decelSet$0 $onOff$0 a!1) - (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$2 - 1) - (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$2 - 1) - (= $chart_CruiseController_ModeLogic_mode_logic_onOff$2 1) - (= $chart_CruiseController_ModeLogic_mode_logic_decel$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_set$2 0) - (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$2 - false) - (= $chart_CruiseController_ModeLogic_mode_logic_accel$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$2 - a!2) - (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$2 - 1) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 1) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 7) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$2 - false) - (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 2) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - true) - (= $OK$2 true)) - (ite (and $accelResume$0 - $decelSet$0 - $onOff$0 - (not $cancel$0) - (not $brakePedal$0) - (= $carGear$0 3) - (>= $carSpeed$0 15.0) - $validInputs$0) - (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$2 - 1) - (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$2 - 1) - (= $chart_CruiseController_ModeLogic_mode_logic_onOff$2 - 1) - (= $chart_CruiseController_ModeLogic_mode_logic_decel$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_set$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$2 - false) - (= $chart_CruiseController_ModeLogic_mode_logic_accel$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$2 - 1) - (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$2 - a!2) - (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$2 - 1) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 1) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 7) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$2 - false) - (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 2) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - true) - (= $OK$2 true)) - a!7)))) -(let ((a!9 (ite (and (not $accelResume$0) $decelSet$0 (not $onOff$0) a!1) - (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$2 - 1) - (= $chart_CruiseController_ModeLogic_mode_logic_onOff$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_decel$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_set$2 0) - (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$2 - false) - (= $chart_CruiseController_ModeLogic_mode_logic_accel$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$2 - a!2) - (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$2 - 1) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 1) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 7) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$2 - false) - (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 2) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - true) - (= $OK$2 true)) - (ite (and $accelResume$0 $decelSet$0 (not $onOff$0) a!1) - (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$2 - 1) - (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$2 - 1) - (= $chart_CruiseController_ModeLogic_mode_logic_onOff$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_decel$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_set$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$2 - false) - (= $chart_CruiseController_ModeLogic_mode_logic_accel$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$2 - a!2) - (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$2 - 1) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 1) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 7) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$2 - false) - (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 2) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - true) - (= $OK$2 true)) - a!8)))) - (ite (and (not $accelResume$0) $decelSet$0 $onOff$0 a!1) - (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$2 - 1) - (= $chart_CruiseController_ModeLogic_mode_logic_onOff$2 1) - (= $chart_CruiseController_ModeLogic_mode_logic_decel$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_set$2 0) - (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$2 - false) - (= $chart_CruiseController_ModeLogic_mode_logic_accel$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$2 0) - (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$2 - a!2) - (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$2 true) - (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$2 - 1) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 1) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 7) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$2 - false) - (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 2) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - true) - (= $OK$2 true)) - (ite (and (not $accelResume$0) - $decelSet$0 - $onOff$0 - (not $cancel$0) - (not $brakePedal$0) - (= $carGear$0 3) - (>= $carSpeed$0 15.0) - $validInputs$0) - (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$2 - 1) - (= $chart_CruiseController_ModeLogic_mode_logic_onOff$2 1) - (= $chart_CruiseController_ModeLogic_mode_logic_decel$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_set$2 0) - (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$2 - false) - (= $chart_CruiseController_ModeLogic_mode_logic_accel$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$2 - 1) - (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$2 - a!2) - (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$2 - 1) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 1) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 7) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$2 - false) - (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 2) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - true) - (= $OK$2 true)) - a!9))))))))))) -(check-sat) diff --git a/bench/skolems/cruise_controller_02_base_skolem.smt2 b/bench/skolems/cruise_controller_02_base_skolem.smt2 deleted file mode 100644 index 2bd2407fc..000000000 --- a/bench/skolems/cruise_controller_02_base_skolem.smt2 +++ /dev/null @@ -1,2454 +0,0 @@ -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - () - Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - () - Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$2 - () - Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$2 - () - Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$2 - () - Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$2 - () - Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - () - Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$2 - () - Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$2 - () - Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$2 - () - Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - () - Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$2 - () - Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$2 - () - Int) -(declare-fun $accelResume$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$2 - () - Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$2 - () - Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$2 - () - Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$2 - () - Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - () - Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$2 - () - Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$2 - () - Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - () - Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$2 - () - Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_onOff$2 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$2 - () - Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$2 - () - Bool) -(declare-fun $brakePedal$0 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - () - Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$2 - () - Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$2 - () - Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$2 - () - Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$2 - () - Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$2 - () - Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$2 - () - Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$2 - () - Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$2 - () - Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_accel$2 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_setEvent_Out$2 - () - Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$2 - () - Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$2 - () - Int) -(declare-fun $validInputs$0 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_set$2 () Int) -(declare-fun $carSpeed$0 () Real) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$2 - () - Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$2 - () - Bool) -(declare-fun $carGear$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$2 - () - Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_decel$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$2 - () - Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic____wakeup___$2 - () - Bool) -(declare-fun $decelSet$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - () - Int) -(declare-fun $cancel$0 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$2 - () - Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$2 - () - Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - () - Int) -(declare-fun $onOff$0 () Bool) - -(assert (let ((a!1 (or $cancel$0 - $brakePedal$0 - (not (= $carGear$0 3)) - (not (>= $carSpeed$0 15.0)) - (not $validInputs$0))) - (a!2 (and $validInputs$0 - (>= $carSpeed$0 (to_real (div 150 10))) - (not $cancel$0) - (not $brakePedal$0) - (= $carGear$0 3)))) -(let ((a!3 (ite (and $accelResume$0 - (not $decelSet$0) - $onOff$0 - (not $cancel$0) - (not $brakePedal$0) - (= $carGear$0 3) - (>= $carSpeed$0 15.0) - $validInputs$0) - (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$2 - 1) - (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_onOff$2 1) - (= $chart_CruiseController_ModeLogic_mode_logic_decel$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_set$2 0) - (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$2 - false) - (= $chart_CruiseController_ModeLogic_mode_logic_accel$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$2 - 1) - (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$2 - a!2) - (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$2 - 1) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 1) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 7) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$2 - false) - (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 2) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - true) - (= $OK$2 true)) - (ite (and $accelResume$0 (not $decelSet$0) $onOff$0 a!1) - (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$2 - 1) - (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_onOff$2 - 1) - (= $chart_CruiseController_ModeLogic_mode_logic_decel$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_set$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$2 - false) - (= $chart_CruiseController_ModeLogic_mode_logic_accel$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$2 - a!2) - (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$2 - 1) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 1) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 7) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$2 - false) - (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 2) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - true) - (= $OK$2 true)) - true)))) -(let ((a!4 (ite (and (not $accelResume$0) - (not $decelSet$0) - $onOff$0 - (not $cancel$0) - (not $brakePedal$0) - (= $carGear$0 3) - (>= $carSpeed$0 15.0) - $validInputs$0) - (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_onOff$2 1) - (= $chart_CruiseController_ModeLogic_mode_logic_decel$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_set$2 0) - (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$2 - false) - (= $chart_CruiseController_ModeLogic_mode_logic_accel$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$2 - 1) - (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$2 - a!2) - (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$2 - 1) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 1) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 7) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$2 - false) - (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 2) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - true) - (= $OK$2 true)) - (ite (and (not $accelResume$0) (not $decelSet$0) $onOff$0 a!1) - (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_onOff$2 - 1) - (= $chart_CruiseController_ModeLogic_mode_logic_decel$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_set$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$2 - false) - (= $chart_CruiseController_ModeLogic_mode_logic_accel$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$2 - a!2) - (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$2 - 1) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 1) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 7) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$2 - false) - (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 2) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - true) - (= $OK$2 true)) - a!3)))) -(let ((a!5 (ite (and $accelResume$0 - (not $decelSet$0) - (not $onOff$0) - (not $cancel$0) - (not $brakePedal$0) - (= $carGear$0 3) - (>= $carSpeed$0 15.0) - $validInputs$0) - (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$2 - 1) - (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_onOff$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_decel$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_set$2 0) - (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$2 - false) - (= $chart_CruiseController_ModeLogic_mode_logic_accel$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$2 - 1) - (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$2 - a!2) - (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$2 - 1) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 1) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 7) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$2 - false) - (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 2) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - true) - (= $OK$2 true)) - (ite (and $accelResume$0 (not $decelSet$0) (not $onOff$0) a!1) - (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$2 - 1) - (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_onOff$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_decel$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_set$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$2 - false) - (= $chart_CruiseController_ModeLogic_mode_logic_accel$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$2 - a!2) - (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$2 - 1) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 1) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 7) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$2 - false) - (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 2) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - true) - (= $OK$2 true)) - a!4)))) -(let ((a!6 (ite (and (not $accelResume$0) - (not $decelSet$0) - (not $onOff$0) - (not $cancel$0) - (not $brakePedal$0) - (= $carGear$0 3) - (>= $carSpeed$0 15.0) - $validInputs$0) - (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_onOff$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_decel$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_set$2 0) - (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$2 - false) - (= $chart_CruiseController_ModeLogic_mode_logic_accel$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$2 - 1) - (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$2 - a!2) - (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$2 - 1) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 1) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 7) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$2 - false) - (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 2) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - true) - (= $OK$2 true)) - (ite (and (not $accelResume$0) - (not $decelSet$0) - (not $onOff$0) - a!1) - (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_onOff$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_decel$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_set$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$2 - false) - (= $chart_CruiseController_ModeLogic_mode_logic_accel$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$2 - a!2) - (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$2 - 1) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 1) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 7) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$2 - false) - (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 2) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - true) - (= $OK$2 true)) - a!5)))) -(let ((a!7 (ite (and $accelResume$0 $decelSet$0 $onOff$0 a!1) - (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$2 - 1) - (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$2 - 1) - (= $chart_CruiseController_ModeLogic_mode_logic_onOff$2 1) - (= $chart_CruiseController_ModeLogic_mode_logic_decel$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_set$2 0) - (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$2 - false) - (= $chart_CruiseController_ModeLogic_mode_logic_accel$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$2 - a!2) - (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$2 - 1) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 1) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 7) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$2 - false) - (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 2) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - true) - (= $OK$2 true)) - (ite (and $accelResume$0 - $decelSet$0 - $onOff$0 - (not $cancel$0) - (not $brakePedal$0) - (= $carGear$0 3) - (>= $carSpeed$0 15.0) - $validInputs$0) - (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$2 - 1) - (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$2 - 1) - (= $chart_CruiseController_ModeLogic_mode_logic_onOff$2 - 1) - (= $chart_CruiseController_ModeLogic_mode_logic_decel$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_set$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$2 - false) - (= $chart_CruiseController_ModeLogic_mode_logic_accel$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$2 - 1) - (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$2 - a!2) - (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$2 - 1) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 1) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 7) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$2 - false) - (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 2) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - true) - (= $OK$2 true)) - a!6)))) -(let ((a!8 (ite (and $accelResume$0 - $decelSet$0 - (not $onOff$0) - (not $cancel$0) - (not $brakePedal$0) - (= $carGear$0 3) - (>= $carSpeed$0 15.0) - $validInputs$0) - (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$2 - 1) - (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$2 - 1) - (= $chart_CruiseController_ModeLogic_mode_logic_onOff$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_decel$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_set$2 0) - (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$2 - false) - (= $chart_CruiseController_ModeLogic_mode_logic_accel$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$2 - 1) - (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$2 - a!2) - (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$2 - 1) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 1) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 7) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$2 - false) - (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 2) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - true) - (= $OK$2 true)) - (ite (and $accelResume$0 $decelSet$0 (not $onOff$0) a!1) - (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$2 - 1) - (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$2 - 1) - (= $chart_CruiseController_ModeLogic_mode_logic_onOff$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_decel$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_set$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$2 - false) - (= $chart_CruiseController_ModeLogic_mode_logic_accel$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$2 - a!2) - (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$2 - 1) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 1) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 7) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$2 - false) - (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 2) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - true) - (= $OK$2 true)) - a!7)))) -(let ((a!9 (ite (and (not $accelResume$0) $decelSet$0 (not $onOff$0) a!1) - (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$2 - 1) - (= $chart_CruiseController_ModeLogic_mode_logic_onOff$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_decel$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_set$2 0) - (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$2 - false) - (= $chart_CruiseController_ModeLogic_mode_logic_accel$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$2 - a!2) - (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$2 - 1) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 1) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 7) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$2 - false) - (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 2) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - true) - (= $OK$2 true)) - (ite (and (not $accelResume$0) - $decelSet$0 - (not $onOff$0) - (not $cancel$0) - (not $brakePedal$0) - (= $carGear$0 3) - (>= $carSpeed$0 15.0) - $validInputs$0) - (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$2 - 1) - (= $chart_CruiseController_ModeLogic_mode_logic_onOff$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_decel$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_set$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$2 - false) - (= $chart_CruiseController_ModeLogic_mode_logic_accel$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$2 - 1) - (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$2 - a!2) - (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$2 - 1) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 1) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 7) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$2 - false) - (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 2) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - true) - (= $OK$2 true)) - a!8)))) - (ite (and (not $accelResume$0) $decelSet$0 $onOff$0 a!1) - (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$2 - 1) - (= $chart_CruiseController_ModeLogic_mode_logic_onOff$2 1) - (= $chart_CruiseController_ModeLogic_mode_logic_decel$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_set$2 0) - (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$2 - false) - (= $chart_CruiseController_ModeLogic_mode_logic_accel$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$2 0) - (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$2 - a!2) - (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$2 true) - (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$2 - 1) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 1) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 7) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$2 - false) - (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 2) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - true) - (= $OK$2 true)) - (ite (and (not $accelResume$0) - $decelSet$0 - $onOff$0 - (not $cancel$0) - (not $brakePedal$0) - (= $carGear$0 3) - (>= $carSpeed$0 15.0) - $validInputs$0) - (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$2 - 0) - (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$2 - 1) - (= $chart_CruiseController_ModeLogic_mode_logic_onOff$2 1) - (= $chart_CruiseController_ModeLogic_mode_logic_decel$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_set$2 0) - (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$2 - false) - (= $chart_CruiseController_ModeLogic_mode_logic_accel$2 0) - (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$2 - 1) - (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$2 - a!2) - (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$2 - true) - (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$2 - 0) - (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$2 - 1) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 1) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 7) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$2 - false) - (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$2 - 4) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$2 - 0) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$2 - false) - (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$2 - 0) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$2 - 3) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 - true) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 - 2) - (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 - true) - (= $OK$2 true)) - a!9))))))))))) -(check-sat) diff --git a/bench/skolems/cruise_controller_06_base_skolem.smt2 b/bench/skolems/cruise_controller_06_base_skolem.smt2 deleted file mode 100644 index 71e44964e..000000000 --- a/bench/skolems/cruise_controller_06_base_skolem.smt2 +++ /dev/null @@ -1,5 +0,0 @@ -(declare-fun $cruiseThrottle$2 () Real) -(declare-fun $OK$2 () Bool) - -(assert (and (= $OK$2 true) (= $cruiseThrottle$2 0.0))) -(check-sat) diff --git a/bench/skolems/cruise_controller_06_extend_skolem.smt2 b/bench/skolems/cruise_controller_06_extend_skolem.smt2 deleted file mode 100644 index 71e44964e..000000000 --- a/bench/skolems/cruise_controller_06_extend_skolem.smt2 +++ /dev/null @@ -1,5 +0,0 @@ -(declare-fun $cruiseThrottle$2 () Real) -(declare-fun $OK$2 () Bool) - -(assert (and (= $OK$2 true) (= $cruiseThrottle$2 0.0))) -(check-sat) diff --git a/bench/skolems/cruise_controller_07_base_skolem.smt2 b/bench/skolems/cruise_controller_07_base_skolem.smt2 deleted file mode 100644 index b2eaeae9e..000000000 --- a/bench/skolems/cruise_controller_07_base_skolem.smt2 +++ /dev/null @@ -1,5 +0,0 @@ -(declare-fun $desiredSpeed$2 () Real) -(declare-fun $OK$2 () Bool) - -(assert (and (= $OK$2 true) (= $desiredSpeed$2 0.0))) -(check-sat) diff --git a/bench/skolems/cruise_controller_07_extend_skolem.smt2 b/bench/skolems/cruise_controller_07_extend_skolem.smt2 deleted file mode 100644 index b2eaeae9e..000000000 --- a/bench/skolems/cruise_controller_07_extend_skolem.smt2 +++ /dev/null @@ -1,5 +0,0 @@ -(declare-fun $desiredSpeed$2 () Real) -(declare-fun $OK$2 () Bool) - -(assert (and (= $OK$2 true) (= $desiredSpeed$2 0.0))) -(check-sat) diff --git a/bench/skolems/cruise_controller_09_base_skolem.smt2 b/bench/skolems/cruise_controller_09_base_skolem.smt2 deleted file mode 100644 index 9a46a4d50..000000000 --- a/bench/skolems/cruise_controller_09_base_skolem.smt2 +++ /dev/null @@ -1,9 +0,0 @@ -(declare-fun $desiredSpeed$2 () Real) -(declare-fun $carSpeed$0 () Real) -(declare-fun $desiredSpeed$~1 () Real) -(declare-fun $OK$2 () Bool) - -(assert (let ((a!1 (= 0.0 (ite true (to_real (div 0 10)) $desiredSpeed$~1)))) -(let ((a!2 (or a!1 (= 0.0 $carSpeed$0) (= 0.0 (to_real (div 0 10)))))) - (and (= $OK$2 a!2) (= $desiredSpeed$2 0.0))))) -(check-sat) diff --git a/bench/skolems/cruise_controller_09_extend_skolem.smt2 b/bench/skolems/cruise_controller_09_extend_skolem.smt2 deleted file mode 100644 index 97e7ea18b..000000000 --- a/bench/skolems/cruise_controller_09_extend_skolem.smt2 +++ /dev/null @@ -1,18 +0,0 @@ -(declare-fun $desiredSpeed$2 () Real) -(declare-fun $carSpeed$0 () Real) -(declare-fun $desiredSpeed$~1 () Real) -(declare-fun $OK$2 () Bool) -(declare-fun %init () Bool) - -(assert (let ((a!1 (= $desiredSpeed$~1 - (ite %init (to_real (div 0 10)) $desiredSpeed$~1)))) -(let ((a!2 (or (= $desiredSpeed$~1 (to_real (div 0 10))) - (= $desiredSpeed$~1 $carSpeed$0) - a!1))) - (ite (or (and %init (= $desiredSpeed$~1 0.0)) - (not %init) - (= $desiredSpeed$~1 $carSpeed$0) - (= $desiredSpeed$~1 0.0)) - (and (= $OK$2 a!2) (= $desiredSpeed$2 $desiredSpeed$~1)) - (and (= $OK$2 true) (= $desiredSpeed$2 $carSpeed$0)))))) -(check-sat) diff --git a/bench/skolems/cruise_controller_11_base_skolem.smt2 b/bench/skolems/cruise_controller_11_base_skolem.smt2 deleted file mode 100644 index 1846944fa..000000000 --- a/bench/skolems/cruise_controller_11_base_skolem.smt2 +++ /dev/null @@ -1,6 +0,0 @@ -(declare-fun $mode$2 () Int) -(declare-fun $cruiseThrottle$2 () Real) -(declare-fun $OK$2 () Bool) - -(assert (and (= $OK$2 true) (= $mode$2 4) (= $cruiseThrottle$2 0.0))) -(check-sat) diff --git a/bench/skolems/cruise_controller_11_extend_skolem.smt2 b/bench/skolems/cruise_controller_11_extend_skolem.smt2 deleted file mode 100644 index 731f2a89a..000000000 --- a/bench/skolems/cruise_controller_11_extend_skolem.smt2 +++ /dev/null @@ -1,6 +0,0 @@ -(declare-fun $cruiseThrottle$2 () Real) -(declare-fun $mode$2 () Int) -(declare-fun $OK$2 () Bool) - -(assert (and (= $OK$2 true) (= $mode$2 4) (= $cruiseThrottle$2 0.0))) -(check-sat) diff --git a/bench/skolems/cruise_controller_15_base_skolem.smt2 b/bench/skolems/cruise_controller_15_base_skolem.smt2 deleted file mode 100644 index 5fd96a6b2..000000000 --- a/bench/skolems/cruise_controller_15_base_skolem.smt2 +++ /dev/null @@ -1,6 +0,0 @@ -(declare-fun $desiredSpeed$2 () Real) -(declare-fun $mode$2 () Int) -(declare-fun $OK$2 () Bool) - -(assert (and (= $OK$2 true) (= $mode$2 4) (= $desiredSpeed$2 0.0))) -(check-sat) diff --git a/bench/skolems/cruise_controller_15_extend_skolem.smt2 b/bench/skolems/cruise_controller_15_extend_skolem.smt2 deleted file mode 100644 index 5fd96a6b2..000000000 --- a/bench/skolems/cruise_controller_15_extend_skolem.smt2 +++ /dev/null @@ -1,6 +0,0 @@ -(declare-fun $desiredSpeed$2 () Real) -(declare-fun $mode$2 () Int) -(declare-fun $OK$2 () Bool) - -(assert (and (= $OK$2 true) (= $mode$2 4) (= $desiredSpeed$2 0.0))) -(check-sat) diff --git a/bench/skolems/cruise_controller_16_base_skolem.smt2 b/bench/skolems/cruise_controller_16_base_skolem.smt2 deleted file mode 100644 index b26bef49e..000000000 --- a/bench/skolems/cruise_controller_16_base_skolem.smt2 +++ /dev/null @@ -1,6 +0,0 @@ -(declare-fun $desiredSpeed$2 () Real) -(declare-fun $mode$2 () Int) -(declare-fun $OK$2 () Bool) - -(assert (and (= $OK$2 true) (= $mode$2 7) (= $desiredSpeed$2 0.0))) -(check-sat) diff --git a/bench/skolems/cruise_controller_16_extend_skolem.smt2 b/bench/skolems/cruise_controller_16_extend_skolem.smt2 deleted file mode 100644 index 8a0d3a5c4..000000000 --- a/bench/skolems/cruise_controller_16_extend_skolem.smt2 +++ /dev/null @@ -1,6 +0,0 @@ -(declare-fun $mode$2 () Int) -(declare-fun $desiredSpeed$2 () Real) -(declare-fun $OK$2 () Bool) - -(assert (and (= $OK$2 true) (= $mode$2 7) (= $desiredSpeed$2 0.0))) -(check-sat) diff --git a/bench/skolems/cruise_controller_17_base1_skolem.smt2 b/bench/skolems/cruise_controller_17_base1_skolem.smt2 deleted file mode 100644 index 5d25eb2b8..000000000 --- a/bench/skolems/cruise_controller_17_base1_skolem.smt2 +++ /dev/null @@ -1,9 +0,0 @@ -(declare-fun $cruiseThrottle$2 () Real) -(declare-fun $mode$2 () Int) -(declare-fun $cruiseThrottle$~1 () Real) -(declare-fun $OK$2 () Bool) - -(assert (let ((a!1 (= 0.0 (ite true (to_real (div 0 10)) $cruiseThrottle$~1)))) -(let ((a!2 (= $OK$2 (or (not (= 5 4)) a!1)))) - (and a!2 (= $mode$2 5) (= $cruiseThrottle$2 0.0))))) -(check-sat) diff --git a/bench/skolems/cruise_controller_17_base2_skolem.smt2 b/bench/skolems/cruise_controller_17_base2_skolem.smt2 deleted file mode 100644 index 882786101..000000000 --- a/bench/skolems/cruise_controller_17_base2_skolem.smt2 +++ /dev/null @@ -1,9 +0,0 @@ -(declare-fun $cruiseThrottle$3 () Real) -(declare-fun $mode$3 () Int) -(declare-fun $cruiseThrottle$0 () Real) -(declare-fun $OK$3 () Bool) - -(assert (let ((a!1 (= 0.0 (ite false (to_real (div 0 10)) $cruiseThrottle$0)))) -(let ((a!2 (= $OK$3 (or (not (= 5 4)) a!1)))) - (and a!2 (= $mode$3 5) (= $cruiseThrottle$3 0.0))))) -(check-sat) diff --git a/bench/skolems/cruise_controller_17_extend_skolem.smt2 b/bench/skolems/cruise_controller_17_extend_skolem.smt2 deleted file mode 100644 index d68aa9b35..000000000 --- a/bench/skolems/cruise_controller_17_extend_skolem.smt2 +++ /dev/null @@ -1,10 +0,0 @@ -(declare-fun $mode$2 () Int) -(declare-fun $cruiseThrottle$~1 () Real) -(declare-fun %init () Bool) -(declare-fun $cruiseThrottle$2 () Real) -(declare-fun $OK$2 () Bool) - -(assert (let ((a!1 (= 0.0 (ite %init (to_real (div 0 10)) $cruiseThrottle$~1)))) -(let ((a!2 (= $OK$2 (or (not (= 5 4)) a!1)))) - (and a!2 (= $mode$2 5) (= $cruiseThrottle$2 0.0))))) -(check-sat) diff --git a/bench/skolems/cruise_controller_20_base_skolem.smt2 b/bench/skolems/cruise_controller_20_base_skolem.smt2 deleted file mode 100644 index d6381d45e..000000000 --- a/bench/skolems/cruise_controller_20_base_skolem.smt2 +++ /dev/null @@ -1,9 +0,0 @@ -(declare-fun $desiredSpeed$~1 () Real) -(declare-fun $desiredSpeed$2 () Real) -(declare-fun $mode$~1 () Int) -(declare-fun $OK$2 () Bool) - -(assert (let ((a!1 (= 0.0 (ite true (to_real (div 0 10)) $desiredSpeed$~1)))) -(let ((a!2 (or (not (ite true false (= $mode$~1 4))) a!1))) - (and (= $OK$2 a!2) (= $desiredSpeed$2 0.0))))) -(check-sat) diff --git a/bench/skolems/cruise_controller_20_extend_skolem.smt2 b/bench/skolems/cruise_controller_20_extend_skolem.smt2 deleted file mode 100644 index 8b9ec1072..000000000 --- a/bench/skolems/cruise_controller_20_extend_skolem.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -(declare-fun $desiredSpeed$2 () Real) -(declare-fun $desiredSpeed$~1 () Real) -(declare-fun $mode$~1 () Int) -(declare-fun %init () Bool) -(declare-fun $OK$2 () Bool) - -(assert (let ((a!1 (= $desiredSpeed$~1 - (ite %init (to_real (div 0 10)) $desiredSpeed$~1)))) -(let ((a!2 (or (not (ite %init false (= $mode$~1 4))) a!1))) - (and (= $OK$2 a!2) (= $desiredSpeed$2 $desiredSpeed$~1))))) -(check-sat) diff --git a/bench/skolems/cruise_controller_23_base_skolem.smt2 b/bench/skolems/cruise_controller_23_base_skolem.smt2 deleted file mode 100644 index 52737cc99..000000000 --- a/bench/skolems/cruise_controller_23_base_skolem.smt2 +++ /dev/null @@ -1,5 +0,0 @@ -(declare-fun $desiredSpeed$2 () Real) -(declare-fun $OK$2 () Bool) - -(assert (and (= $OK$2 true) (= $desiredSpeed$2 15.0))) -(check-sat) diff --git a/bench/skolems/cruise_controller_23_extend_skolem.smt2 b/bench/skolems/cruise_controller_23_extend_skolem.smt2 deleted file mode 100644 index 52737cc99..000000000 --- a/bench/skolems/cruise_controller_23_extend_skolem.smt2 +++ /dev/null @@ -1,5 +0,0 @@ -(declare-fun $desiredSpeed$2 () Real) -(declare-fun $OK$2 () Bool) - -(assert (and (= $OK$2 true) (= $desiredSpeed$2 15.0))) -(check-sat) diff --git a/bench/skolems/ex3_e7_590_base_skolem.smt2 b/bench/skolems/ex3_e7_590_base_skolem.smt2 deleted file mode 100644 index 5aa6b3923..000000000 --- a/bench/skolems/ex3_e7_590_base_skolem.smt2 +++ /dev/null @@ -1,5 +0,0 @@ -(declare-fun $V19_late$2 () Bool) -(declare-fun $OK$2 () Bool) - -(assert (and (= $OK$2 true) (= $V19_late$2 true))) -(check-sat) diff --git a/bench/skolems/ex3_e7_590_e7_590_base_skolem.smt2 b/bench/skolems/ex3_e7_590_e7_590_base_skolem.smt2 deleted file mode 100644 index 5aa6b3923..000000000 --- a/bench/skolems/ex3_e7_590_e7_590_base_skolem.smt2 +++ /dev/null @@ -1,5 +0,0 @@ -(declare-fun $V19_late$2 () Bool) -(declare-fun $OK$2 () Bool) - -(assert (and (= $OK$2 true) (= $V19_late$2 true))) -(check-sat) diff --git a/bench/skolems/ex3_e7_590_e7_590_extend_skolem.smt2 b/bench/skolems/ex3_e7_590_e7_590_extend_skolem.smt2 deleted file mode 100644 index 35ef85f38..000000000 --- a/bench/skolems/ex3_e7_590_e7_590_extend_skolem.smt2 +++ /dev/null @@ -1,8 +0,0 @@ -(declare-fun $V19_late$2 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun %init () Bool) -(declare-fun $OK$2 () Bool) - -(assert (let ((a!1 (= $OK$2 (ite %init true (or (not $V20_early$~1) (not false)))))) - (and a!1 (= $V19_late$2 false)))) -(check-sat) diff --git a/bench/skolems/ex3_e7_590_e8_550_base_skolem.smt2 b/bench/skolems/ex3_e7_590_e8_550_base_skolem.smt2 deleted file mode 100644 index 5aa6b3923..000000000 --- a/bench/skolems/ex3_e7_590_e8_550_base_skolem.smt2 +++ /dev/null @@ -1,5 +0,0 @@ -(declare-fun $V19_late$2 () Bool) -(declare-fun $OK$2 () Bool) - -(assert (and (= $OK$2 true) (= $V19_late$2 true))) -(check-sat) diff --git a/bench/skolems/ex3_e7_590_e8_550_extend_skolem.smt2 b/bench/skolems/ex3_e7_590_e8_550_extend_skolem.smt2 deleted file mode 100644 index 746e89c88..000000000 --- a/bench/skolems/ex3_e7_590_e8_550_extend_skolem.smt2 +++ /dev/null @@ -1,8 +0,0 @@ -(declare-fun $V19_late$2 () Bool) -(declare-fun %init () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$2 () Bool) - -(assert (let ((a!1 (= $OK$2 (ite %init true (or (not $V20_early$~1) (not false)))))) - (and a!1 (= $V19_late$2 false)))) -(check-sat) diff --git a/bench/skolems/ex3_e7_590_extend_skolem.smt2 b/bench/skolems/ex3_e7_590_extend_skolem.smt2 deleted file mode 100644 index 4ef6b3682..000000000 --- a/bench/skolems/ex3_e7_590_extend_skolem.smt2 +++ /dev/null @@ -1,8 +0,0 @@ -(declare-fun %init () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$2 () Bool) - -(assert (let ((a!1 (= $OK$2 (ite %init true (or (not $V20_early$~1) (not false)))))) - (and a!1 (= $V19_late$2 false)))) -(check-sat) diff --git a/bench/skolems/ex3_e8_120_base_skolem.smt2 b/bench/skolems/ex3_e8_120_base_skolem.smt2 deleted file mode 100644 index 5aa6b3923..000000000 --- a/bench/skolems/ex3_e8_120_base_skolem.smt2 +++ /dev/null @@ -1,5 +0,0 @@ -(declare-fun $V19_late$2 () Bool) -(declare-fun $OK$2 () Bool) - -(assert (and (= $OK$2 true) (= $V19_late$2 true))) -(check-sat) diff --git a/bench/skolems/ex3_e8_120_extend_skolem.smt2 b/bench/skolems/ex3_e8_120_extend_skolem.smt2 deleted file mode 100644 index 746e89c88..000000000 --- a/bench/skolems/ex3_e8_120_extend_skolem.smt2 +++ /dev/null @@ -1,8 +0,0 @@ -(declare-fun $V19_late$2 () Bool) -(declare-fun %init () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$2 () Bool) - -(assert (let ((a!1 (= $OK$2 (ite %init true (or (not $V20_early$~1) (not false)))))) - (and a!1 (= $V19_late$2 false)))) -(check-sat) diff --git a/bench/skolems/ex3_e8_381_e7_224_base_skolem.smt2 b/bench/skolems/ex3_e8_381_e7_224_base_skolem.smt2 deleted file mode 100644 index 5aa6b3923..000000000 --- a/bench/skolems/ex3_e8_381_e7_224_base_skolem.smt2 +++ /dev/null @@ -1,5 +0,0 @@ -(declare-fun $V19_late$2 () Bool) -(declare-fun $OK$2 () Bool) - -(assert (and (= $OK$2 true) (= $V19_late$2 true))) -(check-sat) diff --git a/bench/skolems/ex3_e8_381_e7_224_extend_skolem.smt2 b/bench/skolems/ex3_e8_381_e7_224_extend_skolem.smt2 deleted file mode 100644 index 746e89c88..000000000 --- a/bench/skolems/ex3_e8_381_e7_224_extend_skolem.smt2 +++ /dev/null @@ -1,8 +0,0 @@ -(declare-fun $V19_late$2 () Bool) -(declare-fun %init () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$2 () Bool) - -(assert (let ((a!1 (= $OK$2 (ite %init true (or (not $V20_early$~1) (not false)))))) - (and a!1 (= $V19_late$2 false)))) -(check-sat) diff --git a/bench/skolems/example_base1_skolem.smt2 b/bench/skolems/example_base1_skolem.smt2 deleted file mode 100644 index a185f3345..000000000 --- a/bench/skolems/example_base1_skolem.smt2 +++ /dev/null @@ -1,18 +0,0 @@ -(declare-fun $prop4$2 () Bool) -(declare-fun $state$2 () Int) -(declare-fun $prop3$2 () Bool) -(declare-fun $prop2$2 () Bool) -(declare-fun $prop_all$2 () Bool) -(declare-fun $prop1$2 () Bool) -(declare-fun $bias_max$2 () Bool) -(declare-fun $bias$2 () Int) - -(assert (and (= $bias$2 0) - (= $bias_max$2 false) - (= $prop1$2 true) - (= $state$2 0) - (= $prop2$2 true) - (= $prop3$2 true) - (= $prop4$2 true) - (= $prop_all$2 true))) -(check-sat) diff --git a/bench/skolems/example_base2_skolem.smt2 b/bench/skolems/example_base2_skolem.smt2 deleted file mode 100644 index 47641fc89..000000000 --- a/bench/skolems/example_base2_skolem.smt2 +++ /dev/null @@ -1,69 +0,0 @@ -(declare-fun $prop_all$3 () Bool) -(declare-fun $prop1$3 () Bool) -(declare-fun $prop3$3 () Bool) -(declare-fun $prop4$3 () Bool) -(declare-fun $prop2$3 () Bool) -(declare-fun $state$3 () Int) -(declare-fun $bias$3 () Int) -(declare-fun $state$0 () Int) -(declare-fun $bias_max$3 () Bool) -(declare-fun $bias$0 () Int) -(declare-fun $bias_max$0 () Bool) -(declare-fun $x$1 () Bool) - -(assert (let ((a!1 (and (not $x$1) - (not (<= 3 $bias$0)) - (not (<= $bias$0 (- 1))) - (not $bias_max$0) - (or (not (= $state$0 0)) (not $x$1)) - (or (not (= $state$0 0)) $x$1))) - (a!2 (or $bias_max$0 - (>= (+ (- 1) $bias$0) 2) - (<= (+ (- 1) $bias$0) (- 0 2)))) - (a!3 (or (= (+ (- 1) $bias$0) 0) (not (= 3 0)))) - (a!4 (or (not (and (= $state$0 0) $x$1)) (= 3 2))) - (a!5 (or (not (and (= $state$0 0) (not $x$1))) (= 3 1))) - (a!6 (and (not $x$1) - (not (<= 3 $bias$0)) - (not (<= $bias$0 (- 1))) - (not $bias_max$0) - (or (not (= $state$0 0)) (not $x$1)))) - (a!7 (or (= (+ (- 1) $bias$0) 0) (not (= 1 0)))) - (a!8 (or (not (and (= $state$0 0) $x$1)) (= 1 2))) - (a!11 (and $x$1 - (not (<= 1 $bias$0)) - (not (<= $bias$0 (- 3))) - (not $bias_max$0) - (or (not (= $state$0 0)) $x$1))) - (a!12 (or $bias_max$0 (>= (+ 1 $bias$0) 2) (<= (+ 1 $bias$0) (- 0 2)))) - (a!13 (or (= (+ 1 $bias$0) 0) (not (= 2 0)))) - (a!14 (or (not (and (= $state$0 0) (not $x$1))) (= 2 1)))) -(let ((a!9 (= $prop_all$3 (and (or (not a!2) (= 1 3)) true a!7 a!8))) - (a!15 (= $prop_all$3 (and (or (not a!12) (= 2 3)) a!14 true a!13)))) -(let ((a!10 (and (= $bias$3 (+ (- 1) $bias$0)) - (= $bias_max$3 a!2) - (= $prop1$3 a!7) - (= $state$3 1) - (= $prop2$3 a!8) - (= $prop3$3 true) - (= $prop4$3 (or (not a!2) (= 1 3))) - a!9)) - (a!16 (and (= $bias$3 (+ 1 $bias$0)) - (= $bias_max$3 a!12) - (= $prop1$3 a!13) - (= $state$3 2) - (= $prop2$3 true) - (= $prop3$3 a!14) - (= $prop4$3 (or (not a!12) (= 2 3))) - a!15))) - (ite a!1 - (and (= $bias$3 (+ (- 1) $bias$0)) - (= $bias_max$3 a!2) - (= $prop1$3 a!3) - (= $state$3 3) - (= $prop2$3 a!4) - (= $prop3$3 a!5) - (= $prop4$3 true) - (= $prop_all$3 (and true a!5 a!3 a!4))) - (ite a!6 a!10 (ite a!11 a!16 true))))))) -(check-sat) diff --git a/bench/skolems/example_base3_skolem.smt2 b/bench/skolems/example_base3_skolem.smt2 deleted file mode 100644 index 33e8599d7..000000000 --- a/bench/skolems/example_base3_skolem.smt2 +++ /dev/null @@ -1,67 +0,0 @@ -(declare-fun $prop4$4 () Bool) -(declare-fun $state$4 () Int) -(declare-fun $prop_all$4 () Bool) -(declare-fun $bias$4 () Int) -(declare-fun $prop3$4 () Bool) -(declare-fun $prop2$4 () Bool) -(declare-fun $state$1 () Int) -(declare-fun $prop1$4 () Bool) -(declare-fun $bias_max$4 () Bool) -(declare-fun $bias_max$1 () Bool) -(declare-fun $bias$1 () Int) -(declare-fun $x$2 () Bool) - -(assert (let ((a!1 (and (or (and $x$2 (= $bias$1 (- 1))) (and (not $x$2) (= $bias$1 1))) - (not $bias_max$1) - (or (not (= $state$1 0)) (not $x$2)) - (or (not (= $state$1 0)) $x$2))) - (a!2 (= $bias_max$4 (or $bias_max$1 (>= 0 2) (<= 0 (- 0 2))))) - (a!3 (or (not (and (= $state$1 0) $x$2)) (= 3 2))) - (a!4 (or (not (and (= $state$1 0) (not $x$2))) (= 3 1))) - (a!5 (and $x$2 - (or (>= $bias$1 1) (<= $bias$1 (- 3)) $bias_max$1) - (or (not (= $state$1 0)) (not $x$2)) - (or (not (= $state$1 0)) $x$2))) - (a!6 (= $bias_max$4 - (or $bias_max$1 (>= (+ 1 $bias$1) 2) (<= (+ 1 $bias$1) (- 0 2))))) - (a!7 (or (= (+ 1 $bias$1) 0) (not (= 3 0)))) - (a!8 (and (not $x$2) - (or (>= $bias$1 3) (<= $bias$1 (- 1)) $bias_max$1) - (or (not (= $state$1 0)) (not $x$2)) - (or (not (= $state$1 0)) $x$2))) - (a!9 (= $bias_max$4 - (or $bias_max$1 - (>= (+ (- 1) $bias$1) 2) - (<= (+ (- 1) $bias$1) (- 0 2))))) - (a!10 (or (not (= 3 0)) (= (+ (- 1) $bias$1) 0)))) -(let ((a!11 (ite a!8 - (and (= $bias$4 (+ (- 1) $bias$1)) - a!9 - (= $prop1$4 a!10) - (= $state$4 3) - (= $prop2$4 a!3) - (= $prop3$4 a!4) - (= $prop4$4 true) - (= $prop_all$4 (and true a!4 a!3 a!10))) - true))) -(let ((a!12 (ite a!5 - (and (= $bias$4 (+ 1 $bias$1)) - a!6 - (= $prop1$4 a!7) - (= $state$4 3) - (= $prop2$4 a!3) - (= $prop3$4 a!4) - (= $prop4$4 true) - (= $prop_all$4 (and true a!4 a!3 a!7))) - a!11))) - (ite a!1 - (and (= $bias$4 0) - a!2 - (= $prop1$4 true) - (= $state$4 3) - (= $prop2$4 a!3) - (= $prop3$4 a!4) - (= $prop4$4 true) - (= $prop_all$4 (and true a!4 true a!3))) - a!12))))) -(check-sat) diff --git a/bench/skolems/example_extend_skolem.smt2 b/bench/skolems/example_extend_skolem.smt2 deleted file mode 100644 index dc815c759..000000000 --- a/bench/skolems/example_extend_skolem.smt2 +++ /dev/null @@ -1,103 +0,0 @@ -(declare-fun $prop3$3 () Bool) -(declare-fun $prop2$3 () Bool) -(declare-fun $prop1$3 () Bool) -(declare-fun $state$3 () Int) -(declare-fun $prop4$3 () Bool) -(declare-fun $bias$3 () Int) -(declare-fun $prop_all$3 () Bool) -(declare-fun $bias_max$0 () Bool) -(declare-fun $bias_max$3 () Bool) -(declare-fun $state$0 () Int) -(declare-fun $x$1 () Bool) -(declare-fun $bias$0 () Int) - -(assert (let ((a!1 (and (not $x$1) - (not (<= 3 $bias$0)) - (not (<= $bias$0 (- 1))) - (not $bias_max$0) - (or (not (= $state$0 0)) (not $x$1)) - (or (not (= $state$0 0)) $x$1))) - (a!2 (or $bias_max$0 - (>= (+ (- 1) $bias$0) 2) - (<= (+ (- 1) $bias$0) (- 0 2)))) - (a!3 (or (= (+ (- 1) $bias$0) 0) (not (= 3 0)))) - (a!4 (or (not (and (= $state$0 0) $x$1)) (= 3 2))) - (a!5 (or (not (and (= $state$0 0) (not $x$1))) (= 3 1))) - (a!7 (and (not $x$1) - (not (<= 3 $bias$0)) - (not (<= $bias$0 (- 1))) - (not $bias_max$0) - (or (not (= $state$0 0)) (not $x$1)))) - (a!8 (or (= (+ (- 1) $bias$0) 0) (not (= 1 0)))) - (a!9 (or (not (and (= $state$0 0) $x$1)) (= 1 2))) - (a!12 (and (not $x$1) - (or (>= $bias$0 3) (<= $bias$0 (- 1)) $bias_max$0) - (or (not (= $state$0 0)) (not $x$1)) - (or (not (= $state$0 0)) $x$1))) - (a!13 (and (or (and $x$1 (= $bias$0 (- 1))) - (and (not $x$1) (= $bias$0 1))) - (not $bias_max$0) - (or (not (= $state$0 0)) (not $x$1)) - (or (not (= $state$0 0)) $x$1))) - (a!14 (= $bias_max$3 (or $bias_max$0 (>= 0 2) (<= 0 (- 0 2))))) - (a!15 (and $x$1 - (or (>= $bias$0 1) (<= $bias$0 (- 3)) $bias_max$0) - (or (not (= $state$0 0)) (not $x$1)) - (or (not (= $state$0 0)) $x$1))) - (a!16 (or $bias_max$0 (>= (+ 1 $bias$0) 2) (<= (+ 1 $bias$0) (- 0 2)))) - (a!17 (or (not (= 3 0)) (= (+ 1 $bias$0) 0))) - (a!18 (and $x$1 - (not (<= 1 $bias$0)) - (not (<= $bias$0 (- 3))) - (not $bias_max$0) - (or (not (= $state$0 0)) $x$1))) - (a!19 (or (= (+ 1 $bias$0) 0) (not (= 2 0)))) - (a!20 (or (not (and (= $state$0 0) (not $x$1))) (= 2 1)))) -(let ((a!6 (and (= $bias$3 (+ (- 1) $bias$0)) - (= $bias_max$3 a!2) - (= $prop1$3 a!3) - (= $state$3 3) - (= $prop2$3 a!4) - (= $prop3$3 a!5) - (= $prop4$3 true) - (= $prop_all$3 (and true a!5 a!3 a!4)))) - (a!10 (= $prop_all$3 (and (or (not a!2) (= 1 3)) true a!8 a!9))) - (a!21 (= $prop_all$3 (and (or (not a!16) (= 2 3)) a!20 true a!19)))) -(let ((a!11 (and (= $bias$3 (+ (- 1) $bias$0)) - (= $bias_max$3 a!2) - (= $prop1$3 a!8) - (= $state$3 1) - (= $prop2$3 a!9) - (= $prop3$3 true) - (= $prop4$3 (or (not a!2) (= 1 3))) - a!10)) - (a!22 (and (= $bias$3 (+ 1 $bias$0)) - (= $bias_max$3 a!16) - (= $prop1$3 a!19) - (= $state$3 2) - (= $prop2$3 true) - (= $prop3$3 a!20) - (= $prop4$3 (or (not a!16) (= 2 3))) - a!21))) -(let ((a!23 (ite a!15 - (and (= $bias$3 (+ 1 $bias$0)) - (= $bias_max$3 a!16) - (= $prop1$3 a!17) - (= $state$3 3) - (= $prop2$3 a!4) - (= $prop3$3 a!5) - (= $prop4$3 true) - (= $prop_all$3 (and true a!5 a!4 a!17))) - (ite a!18 a!22 true)))) -(let ((a!24 (ite a!13 - (and (= $bias$3 0) - a!14 - (= $prop1$3 true) - (= $state$3 3) - (= $prop2$3 a!4) - (= $prop3$3 a!5) - (= $prop4$3 true) - (= $prop_all$3 (and true a!5 true a!4))) - a!23))) - (ite a!1 a!6 (ite a!7 a!11 (ite a!12 a!6 a!24))))))))) -(check-sat) diff --git a/bench/skolems/fast_1_e7_2044_e8_1396_base_skolem.smt2 b/bench/skolems/fast_1_e7_2044_e8_1396_base_skolem.smt2 deleted file mode 100644 index 7fbd91717..000000000 --- a/bench/skolems/fast_1_e7_2044_e8_1396_base_skolem.smt2 +++ /dev/null @@ -1,5 +0,0 @@ -(declare-fun $V83_cca$2 () Bool) -(declare-fun $OK$2 () Bool) - -(assert (and (= $OK$2 true) (= $V83_cca$2 true))) -(check-sat) diff --git a/bench/skolems/fast_1_e7_2044_e8_1396_extend_skolem.smt2 b/bench/skolems/fast_1_e7_2044_e8_1396_extend_skolem.smt2 deleted file mode 100644 index 99845e7a7..000000000 --- a/bench/skolems/fast_1_e7_2044_e8_1396_extend_skolem.smt2 +++ /dev/null @@ -1,15 +0,0 @@ -(declare-fun $ccr$0 () Bool) -(declare-fun $V83_cca$2 () Bool) -(declare-fun $ccsetd$~1 () Bool) -(declare-fun $ccsetd$0 () Bool) -(declare-fun $ccr$~1 () Bool) -(declare-fun $ccseti$0 () Bool) -(declare-fun %init () Bool) -(declare-fun $ccseti$~1 () Bool) -(declare-fun $OK$2 () Bool) - -(assert (let ((a!1 (or (ite %init false (and $ccseti$0 (not $ccseti$~1))) - (ite %init false (and $ccsetd$0 (not $ccsetd$~1))) - (ite %init false (and $ccr$0 (not $ccr$~1)))))) - (and (= $OK$2 (ite (ite %init false false) a!1 true)) (= $V83_cca$2 false)))) -(check-sat) diff --git a/bench/skolems/fast_1_e8_747_base1_skolem.smt2 b/bench/skolems/fast_1_e8_747_base1_skolem.smt2 deleted file mode 100644 index 7fbd91717..000000000 --- a/bench/skolems/fast_1_e8_747_base1_skolem.smt2 +++ /dev/null @@ -1,5 +0,0 @@ -(declare-fun $V83_cca$2 () Bool) -(declare-fun $OK$2 () Bool) - -(assert (and (= $OK$2 true) (= $V83_cca$2 true))) -(check-sat) diff --git a/bench/skolems/fast_1_e8_747_base2_skolem.smt2 b/bench/skolems/fast_1_e8_747_base2_skolem.smt2 deleted file mode 100644 index 86b908261..000000000 --- a/bench/skolems/fast_1_e8_747_base2_skolem.smt2 +++ /dev/null @@ -1,14 +0,0 @@ -(declare-fun $ccr$0 () Bool) -(declare-fun $V83_cca$3 () Bool) -(declare-fun $OK$3 () Bool) -(declare-fun $ccsetd$0 () Bool) -(declare-fun $ccsetd$1 () Bool) -(declare-fun $ccseti$0 () Bool) -(declare-fun $ccr$1 () Bool) -(declare-fun $ccseti$1 () Bool) - -(assert (let ((a!1 (or (ite false false (and $ccseti$1 (not $ccseti$0))) - (ite false false (and $ccsetd$1 (not $ccsetd$0))) - (ite false false (and $ccr$1 (not $ccr$0)))))) - (and (= $OK$3 (ite false a!1 true)) (= $V83_cca$3 false)))) -(check-sat) diff --git a/bench/skolems/fast_1_e8_747_e8_1041_base_skolem.smt2 b/bench/skolems/fast_1_e8_747_e8_1041_base_skolem.smt2 deleted file mode 100644 index 7fbd91717..000000000 --- a/bench/skolems/fast_1_e8_747_e8_1041_base_skolem.smt2 +++ /dev/null @@ -1,5 +0,0 @@ -(declare-fun $V83_cca$2 () Bool) -(declare-fun $OK$2 () Bool) - -(assert (and (= $OK$2 true) (= $V83_cca$2 true))) -(check-sat) diff --git a/bench/skolems/fast_1_e8_747_e8_1041_extend_skolem.smt2 b/bench/skolems/fast_1_e8_747_e8_1041_extend_skolem.smt2 deleted file mode 100644 index b62b3ad67..000000000 --- a/bench/skolems/fast_1_e8_747_e8_1041_extend_skolem.smt2 +++ /dev/null @@ -1,15 +0,0 @@ -(declare-fun $ccsetd$~1 () Bool) -(declare-fun $ccseti$~1 () Bool) -(declare-fun $ccr$~1 () Bool) -(declare-fun $ccsetd$0 () Bool) -(declare-fun $V83_cca$2 () Bool) -(declare-fun $ccseti$0 () Bool) -(declare-fun $ccr$0 () Bool) -(declare-fun %init () Bool) -(declare-fun $OK$2 () Bool) - -(assert (let ((a!1 (or (ite %init false (and $ccseti$0 (not $ccseti$~1))) - (ite %init false (and $ccsetd$0 (not $ccsetd$~1))) - (ite %init false (and $ccr$0 (not $ccr$~1)))))) - (and (= $OK$2 (ite (ite %init false false) a!1 true)) (= $V83_cca$2 false)))) -(check-sat) diff --git a/bench/skolems/fast_1_e8_747_extend_skolem.smt2 b/bench/skolems/fast_1_e8_747_extend_skolem.smt2 deleted file mode 100644 index 99845e7a7..000000000 --- a/bench/skolems/fast_1_e8_747_extend_skolem.smt2 +++ /dev/null @@ -1,15 +0,0 @@ -(declare-fun $ccr$0 () Bool) -(declare-fun $V83_cca$2 () Bool) -(declare-fun $ccsetd$~1 () Bool) -(declare-fun $ccsetd$0 () Bool) -(declare-fun $ccr$~1 () Bool) -(declare-fun $ccseti$0 () Bool) -(declare-fun %init () Bool) -(declare-fun $ccseti$~1 () Bool) -(declare-fun $OK$2 () Bool) - -(assert (let ((a!1 (or (ite %init false (and $ccseti$0 (not $ccseti$~1))) - (ite %init false (and $ccsetd$0 (not $ccsetd$~1))) - (ite %init false (and $ccr$0 (not $ccr$~1)))))) - (and (= $OK$2 (ite (ite %init false false) a!1 true)) (= $V83_cca$2 false)))) -(check-sat) diff --git a/bench/skolems/fast_2_e7_2526_e8_1145_base1_skolem.smt2 b/bench/skolems/fast_2_e7_2526_e8_1145_base1_skolem.smt2 deleted file mode 100644 index 9322e9799..000000000 --- a/bench/skolems/fast_2_e7_2526_e8_1145_base1_skolem.smt2 +++ /dev/null @@ -1,37 +0,0 @@ -(declare-fun $V87_cca$2 () Bool) -(declare-fun $V84_p3$2 () Bool) -(declare-fun $V86_ccont$2 () Bool) -(declare-fun $V82_p1$2 () Bool) -(declare-fun $cccanc$0 () Bool) -(declare-fun $sdok$~1 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $accok$0 () Bool) -(declare-fun $sdok$0 () Bool) -(declare-fun $qfok$0 () Bool) -(declare-fun $battok$0 () Bool) -(declare-fun $V85_p4$2 () Bool) -(declare-fun $bpa$0 () Bool) -(declare-fun $V83_p2$2 () Bool) -(declare-fun $gearok$0 () Bool) -(declare-fun $vs$0 () Int) -(declare-fun $OK$2 () Bool) - -(assert (let ((a!1 (not (and true - (not $bpa$0) - $battok$0 - $gearok$0 - $qfok$0 - (ite true false (and $sdok$~1 $sdok$0)) - (<= 35 $vs$0) - (<= $vs$0 200) - (ite true false (and $~flatten0$~1 $accok$0)) - (not $cccanc$0))))) -(let ((a!2 (= $OK$2 (and true true true (ite a!1 (not false) true))))) - (and a!2 - (= $V82_p1$2 true) - (= $V83_p2$2 (ite a!1 (not false) true)) - (= $V84_p3$2 true) - (= $V85_p4$2 true) - (= $V87_cca$2 false) - (= $V86_ccont$2 true))))) -(check-sat) diff --git a/bench/skolems/fast_2_e7_2526_e8_1145_base2_skolem.smt2 b/bench/skolems/fast_2_e7_2526_e8_1145_base2_skolem.smt2 deleted file mode 100644 index 52a68497f..000000000 --- a/bench/skolems/fast_2_e7_2526_e8_1145_base2_skolem.smt2 +++ /dev/null @@ -1,66 +0,0 @@ -(declare-fun $V85_p4$3 () Bool) -(declare-fun $V83_p2$3 () Bool) -(declare-fun $V86_ccont$3 () Bool) -(declare-fun $cccanc$1 () Bool) -(declare-fun $V87_cca$3 () Bool) -(declare-fun $~flatten0$0 () Bool) -(declare-fun $sdok$1 () Bool) -(declare-fun $accok$1 () Bool) -(declare-fun $qfok$1 () Bool) -(declare-fun $sdok$0 () Bool) -(declare-fun $OK$3 () Bool) -(declare-fun $gearok$1 () Bool) -(declare-fun $cconoff$0 () Bool) -(declare-fun $ccd$1 () Bool) -(declare-fun $bpa$1 () Bool) -(declare-fun $battok$1 () Bool) -(declare-fun $igsw$0 () Bool) -(declare-fun $vs$1 () Int) -(declare-fun $V86_ccont$0 () Bool) -(declare-fun $V82_p1$3 () Bool) -(declare-fun $igsw$1 () Bool) -(declare-fun $V84_p3$3 () Bool) -(declare-fun $cconoff$1 () Bool) - -(assert (let ((a!1 (not (or (and $igsw$1 (not $igsw$0)) (and (not $igsw$1) $igsw$0)))) - (a!2 (not (and true - (not $bpa$1) - $battok$1 - $gearok$1 - $qfok$1 - (ite false false (and $sdok$0 $sdok$1)) - (<= 35 $vs$1) - (<= $vs$1 200) - (ite false false (and $~flatten0$0 $accok$1)) - (not $cccanc$1)))) - (a!3 (ite false - false - (or (and $igsw$1 (not $igsw$0)) (and (not $igsw$1) $igsw$0)))) - (a!5 (ite (or (and (not $igsw$0) $igsw$1) (and $igsw$0 (not $igsw$1))) - (not false) - true))) -(let ((a!4 (and (not a!3) - (not $ccd$1) - (ite false false (and $cconoff$1 (not $cconoff$0)))))) -(let ((a!6 (and true - (ite a!2 (not false) true) - (ite (and true (not $V86_ccont$0)) a!4 true) - a!5)) - (a!7 (= $V84_p3$3 (ite (and true (not $V86_ccont$0)) a!4 true)))) -(let ((a!8 (and (= $OK$3 a!6) - (= $V82_p1$3 true) - (= $V83_p2$3 (ite a!2 (not false) true)) - a!7 - (= $V85_p4$3 a!5) - (= $V87_cca$3 false) - (= $V86_ccont$3 true)))) - (ite (or $V86_ccont$0 (and a!1 (not $ccd$1) $cconoff$1 (not $cconoff$0))) - a!8 - (and (= $OK$3 (and true a!5)) - (= $V82_p1$3 true) - (= $V83_p2$3 true) - (= $V84_p3$3 true) - (= $V85_p4$3 a!5) - (= $V87_cca$3 false) - (= $V86_ccont$3 false)))))))) -(check-sat) diff --git a/bench/skolems/fast_2_e7_2526_e8_1145_extend_skolem.smt2 b/bench/skolems/fast_2_e7_2526_e8_1145_extend_skolem.smt2 deleted file mode 100644 index c13373541..000000000 --- a/bench/skolems/fast_2_e7_2526_e8_1145_extend_skolem.smt2 +++ /dev/null @@ -1,72 +0,0 @@ -(declare-fun $V85_p4$2 () Bool) -(declare-fun $V83_p2$2 () Bool) -(declare-fun $V82_p1$2 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $V87_cca$2 () Bool) -(declare-fun $cccanc$0 () Bool) -(declare-fun $sdok$0 () Bool) -(declare-fun $cconoff$0 () Bool) -(declare-fun $vs$0 () Int) -(declare-fun $qfok$0 () Bool) -(declare-fun %init () Bool) -(declare-fun $battok$0 () Bool) -(declare-fun $cconoff$~1 () Bool) -(declare-fun $igsw$~1 () Bool) -(declare-fun $bpa$0 () Bool) -(declare-fun $V84_p3$2 () Bool) -(declare-fun $sdok$~1 () Bool) -(declare-fun $ccd$0 () Bool) -(declare-fun $gearok$0 () Bool) -(declare-fun $accok$0 () Bool) -(declare-fun $igsw$0 () Bool) -(declare-fun $V86_ccont$2 () Bool) -(declare-fun $V86_ccont$~1 () Bool) -(declare-fun $OK$2 () Bool) - -(assert (let ((a!1 (and (not %init) - (or (and $igsw$0 (not $igsw$~1)) (and (not $igsw$0) $igsw$~1)))) - (a!3 (not (and true - (not $bpa$0) - $battok$0 - $gearok$0 - $qfok$0 - (ite %init false (and $sdok$~1 $sdok$0)) - (<= 35 $vs$0) - (<= $vs$0 200) - (ite %init false (and $~flatten0$~1 $accok$0)) - (not $cccanc$0)))) - (a!4 (ite %init - false - (or (and $igsw$0 (not $igsw$~1)) (and (not $igsw$0) $igsw$~1))))) -(let ((a!2 (or (not (and (not %init) (not $V86_ccont$~1))) - (and (not a!1) - (not $ccd$0) - (not %init) - $cconoff$0 - (not $cconoff$~1)))) - (a!5 (and (not a!4) - (not $ccd$0) - (ite %init false (and $cconoff$0 (not $cconoff$~1))))) - (a!9 (= $OK$2 (and true (ite a!4 (not false) true))))) -(let ((a!6 (ite (ite %init false (and true (not $V86_ccont$~1))) a!5 true)) - (a!10 (and a!9 - (= $V82_p1$2 true) - (= $V83_p2$2 true) - (= $V84_p3$2 true) - (= $V85_p4$2 (ite a!4 (not false) true)) - (= $V87_cca$2 false) - (= $V86_ccont$2 false)))) -(let ((a!7 (= $OK$2 - (and true - (ite a!3 (not false) true) - a!6 - (ite a!4 (not false) true))))) -(let ((a!8 (and a!7 - (= $V82_p1$2 true) - (= $V83_p2$2 (ite a!3 (not false) true)) - (= $V84_p3$2 a!6) - (= $V85_p4$2 (ite a!4 (not false) true)) - (= $V87_cca$2 false) - (= $V86_ccont$2 true)))) - (ite a!2 a!8 a!10))))))) -(check-sat) diff --git a/bench/skolems/fast_2_e8_460_base_skolem.smt2 b/bench/skolems/fast_2_e8_460_base_skolem.smt2 deleted file mode 100644 index 8e885351a..000000000 --- a/bench/skolems/fast_2_e8_460_base_skolem.smt2 +++ /dev/null @@ -1,37 +0,0 @@ -(declare-fun $V85_p4$2 () Bool) -(declare-fun $V84_p3$2 () Bool) -(declare-fun $V83_p2$2 () Bool) -(declare-fun $V82_p1$2 () Bool) -(declare-fun $cccanc$0 () Bool) -(declare-fun $accok$0 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $vs$0 () Int) -(declare-fun $sdok$0 () Bool) -(declare-fun $sdok$~1 () Bool) -(declare-fun $V87_cca$2 () Bool) -(declare-fun $battok$0 () Bool) -(declare-fun $V86_ccont$2 () Bool) -(declare-fun $qfok$0 () Bool) -(declare-fun $gearok$0 () Bool) -(declare-fun $bpa$0 () Bool) - -(assert (let ((a!1 (not (and true - (not $bpa$0) - $battok$0 - $gearok$0 - $qfok$0 - (ite true false (and $sdok$~1 $sdok$0)) - (<= 35 $vs$0) - (<= $vs$0 200) - (ite true false (and $~flatten0$~1 $accok$0)) - (not $cccanc$0))))) -(let ((a!2 (= $OK$2 (and true true true (ite a!1 (not false) true))))) - (and a!2 - (= $V82_p1$2 true) - (= $V83_p2$2 (ite a!1 (not false) true)) - (= $V84_p3$2 true) - (= $V85_p4$2 true) - (= $V87_cca$2 false) - (= $V86_ccont$2 true))))) -(check-sat) diff --git a/bench/skolems/fast_2_e8_460_e8_1920_base_skolem.smt2 b/bench/skolems/fast_2_e8_460_e8_1920_base_skolem.smt2 deleted file mode 100644 index 2f215edf5..000000000 --- a/bench/skolems/fast_2_e8_460_e8_1920_base_skolem.smt2 +++ /dev/null @@ -1,37 +0,0 @@ -(declare-fun $V86_ccont$2 () Bool) -(declare-fun $V87_cca$2 () Bool) -(declare-fun $V84_p3$2 () Bool) -(declare-fun $V83_p2$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $gearok$0 () Bool) -(declare-fun $cccanc$0 () Bool) -(declare-fun $V85_p4$2 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $accok$0 () Bool) -(declare-fun $vs$0 () Int) -(declare-fun $sdok$0 () Bool) -(declare-fun $battok$0 () Bool) -(declare-fun $sdok$~1 () Bool) -(declare-fun $V82_p1$2 () Bool) -(declare-fun $qfok$0 () Bool) -(declare-fun $bpa$0 () Bool) - -(assert (let ((a!1 (not (and true - (not $bpa$0) - $battok$0 - $gearok$0 - $qfok$0 - (ite true false (and $sdok$~1 $sdok$0)) - (<= 35 $vs$0) - (<= $vs$0 200) - (ite true false (and $~flatten0$~1 $accok$0)) - (not $cccanc$0))))) -(let ((a!2 (= $OK$2 (and true true true (ite a!1 (not false) true))))) - (and a!2 - (= $V82_p1$2 true) - (= $V83_p2$2 (ite a!1 (not false) true)) - (= $V84_p3$2 true) - (= $V85_p4$2 true) - (= $V87_cca$2 false) - (= $V86_ccont$2 true))))) -(check-sat) diff --git a/bench/skolems/fast_2_e8_460_e8_1920_extend_skolem.smt2 b/bench/skolems/fast_2_e8_460_e8_1920_extend_skolem.smt2 deleted file mode 100644 index 144702f93..000000000 --- a/bench/skolems/fast_2_e8_460_e8_1920_extend_skolem.smt2 +++ /dev/null @@ -1,24 +0,0 @@ -(declare-fun $V87_cca$2 () Bool) -(declare-fun $V83_p2$2 () Bool) -(declare-fun $V86_ccont$2 () Bool) -(declare-fun $V82_p1$2 () Bool) -(declare-fun $igsw$~1 () Bool) -(declare-fun $igsw$0 () Bool) -(declare-fun $V85_p4$2 () Bool) -(declare-fun $V84_p3$2 () Bool) -(declare-fun %init () Bool) -(declare-fun $OK$2 () Bool) - -(assert (let ((a!1 (ite (ite %init - false - (and $igsw$0 (not $igsw$~1) (not $igsw$0) $igsw$~1)) - (not false) - true))) - (and (= $OK$2 (and true a!1)) - (= $V82_p1$2 true) - (= $V83_p2$2 true) - (= $V84_p3$2 true) - (= $V85_p4$2 a!1) - (= $V87_cca$2 false) - (= $V86_ccont$2 false)))) -(check-sat) diff --git a/bench/skolems/fast_2_e8_460_extend_skolem.smt2 b/bench/skolems/fast_2_e8_460_extend_skolem.smt2 deleted file mode 100644 index 073d738d7..000000000 --- a/bench/skolems/fast_2_e8_460_extend_skolem.smt2 +++ /dev/null @@ -1,24 +0,0 @@ -(declare-fun $V86_ccont$2 () Bool) -(declare-fun $V87_cca$2 () Bool) -(declare-fun $V84_p3$2 () Bool) -(declare-fun $V82_p1$2 () Bool) -(declare-fun $igsw$~1 () Bool) -(declare-fun %init () Bool) -(declare-fun $V85_p4$2 () Bool) -(declare-fun $V83_p2$2 () Bool) -(declare-fun $igsw$0 () Bool) -(declare-fun $OK$2 () Bool) - -(assert (let ((a!1 (ite (ite %init - false - (and $igsw$0 (not $igsw$~1) (not $igsw$0) $igsw$~1)) - (not false) - true))) - (and (= $OK$2 (and true a!1)) - (= $V82_p1$2 true) - (= $V83_p2$2 true) - (= $V84_p3$2 true) - (= $V85_p4$2 a!1) - (= $V87_cca$2 false) - (= $V86_ccont$2 false)))) -(check-sat) diff --git a/bench/skolems/hysteresis_1_base_skolem.smt2 b/bench/skolems/hysteresis_1_base_skolem.smt2 deleted file mode 100644 index 437754233..000000000 --- a/bench/skolems/hysteresis_1_base_skolem.smt2 +++ /dev/null @@ -1,6 +0,0 @@ -(declare-fun $V20_early$2 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $OK$2 () Bool) - -(assert (and (= $OK$2 true) (= $V19_late$2 false) (= $V20_early$2 true))) -(check-sat) diff --git a/bench/skolems/hysteresis_1_extend_skolem.smt2 b/bench/skolems/hysteresis_1_extend_skolem.smt2 deleted file mode 100644 index 437754233..000000000 --- a/bench/skolems/hysteresis_1_extend_skolem.smt2 +++ /dev/null @@ -1,6 +0,0 @@ -(declare-fun $V20_early$2 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $OK$2 () Bool) - -(assert (and (= $OK$2 true) (= $V19_late$2 false) (= $V20_early$2 true))) -(check-sat) diff --git a/bench/skolems/hysteresis_2_base_skolem.smt2 b/bench/skolems/hysteresis_2_base_skolem.smt2 deleted file mode 100644 index 5aa6b3923..000000000 --- a/bench/skolems/hysteresis_2_base_skolem.smt2 +++ /dev/null @@ -1,5 +0,0 @@ -(declare-fun $V19_late$2 () Bool) -(declare-fun $OK$2 () Bool) - -(assert (and (= $OK$2 true) (= $V19_late$2 true))) -(check-sat) diff --git a/bench/skolems/hysteresis_2_extend_skolem.smt2 b/bench/skolems/hysteresis_2_extend_skolem.smt2 deleted file mode 100644 index 9f6554447..000000000 --- a/bench/skolems/hysteresis_2_extend_skolem.smt2 +++ /dev/null @@ -1,6 +0,0 @@ -(declare-fun $V19_late$2 () Bool) -(declare-fun %init () Bool) -(declare-fun $OK$2 () Bool) - -(assert (and (= $OK$2 (ite %init true (not false))) (= $V19_late$2 false))) -(check-sat) diff --git a/bench/skolems/hysteresis_3_base_skolem.smt2 b/bench/skolems/hysteresis_3_base_skolem.smt2 deleted file mode 100644 index 9d2f6672d..000000000 --- a/bench/skolems/hysteresis_3_base_skolem.smt2 +++ /dev/null @@ -1,5 +0,0 @@ -(declare-fun $V20_early$2 () Bool) -(declare-fun $OK$2 () Bool) - -(assert (and (= $OK$2 true) (= $V20_early$2 true))) -(check-sat) diff --git a/bench/skolems/hysteresis_3_extend_skolem.smt2 b/bench/skolems/hysteresis_3_extend_skolem.smt2 deleted file mode 100644 index 865fa169d..000000000 --- a/bench/skolems/hysteresis_3_extend_skolem.smt2 +++ /dev/null @@ -1,6 +0,0 @@ -(declare-fun $V20_early$2 () Bool) -(declare-fun %init () Bool) -(declare-fun $OK$2 () Bool) - -(assert (and (= $OK$2 (ite %init true (not false))) (= $V20_early$2 false))) -(check-sat) diff --git a/bench/skolems/hysteresis_all_base_skolem.smt2 b/bench/skolems/hysteresis_all_base_skolem.smt2 deleted file mode 100644 index 437754233..000000000 --- a/bench/skolems/hysteresis_all_base_skolem.smt2 +++ /dev/null @@ -1,6 +0,0 @@ -(declare-fun $V20_early$2 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $OK$2 () Bool) - -(assert (and (= $OK$2 true) (= $V19_late$2 false) (= $V20_early$2 true))) -(check-sat) diff --git a/bench/skolems/hysteresis_all_extend_skolem.smt2 b/bench/skolems/hysteresis_all_extend_skolem.smt2 deleted file mode 100644 index a7f1a651c..000000000 --- a/bench/skolems/hysteresis_all_extend_skolem.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -(declare-fun $V19_late$2 () Bool) -(declare-fun $V20_early$2 () Bool) -(declare-fun %init () Bool) -(declare-fun $OK$2 () Bool) - -(assert (let ((a!1 (= $OK$2 - (and (not false) - (ite %init true (not false)) - (ite %init true (not false)))))) - (and a!1 (= $V19_late$2 false) (= $V20_early$2 false)))) -(check-sat) diff --git a/bench/skolems/newexample_base1_skolem.smt2 b/bench/skolems/newexample_base1_skolem.smt2 deleted file mode 100644 index b3b84eb20..000000000 --- a/bench/skolems/newexample_base1_skolem.smt2 +++ /dev/null @@ -1,23 +0,0 @@ -(declare-fun $guarantee_all$2 () Bool) -(declare-fun $guarantee5$2 () Bool) -(declare-fun $guarantee4$2 () Bool) -(declare-fun $guarantee3$2 () Bool) -(declare-fun $guarantee2$2 () Bool) -(declare-fun $bias_max$2 () Bool) -(declare-fun $state$2 () Int) -(declare-fun $guarantee1$2 () Bool) -(declare-fun $bias$2 () Int) -(declare-fun $x$0 () Int) - -(assert (ite (or (= $x$0 0) (= $x$0 1)) - (and (= $bias$2 0) - (= $bias_max$2 false) - (= $guarantee1$2 true) - (= $state$2 3) - (= $guarantee2$2 true) - (= $guarantee3$2 true) - (= $guarantee4$2 true) - (= $guarantee5$2 true) - (= $guarantee_all$2 true)) - true)) -(check-sat) diff --git a/bench/skolems/newexample_base2_skolem.smt2 b/bench/skolems/newexample_base2_skolem.smt2 deleted file mode 100644 index 189b0aa85..000000000 --- a/bench/skolems/newexample_base2_skolem.smt2 +++ /dev/null @@ -1,56 +0,0 @@ -(declare-fun $guarantee_all$3 () Bool) -(declare-fun $guarantee5$3 () Bool) -(declare-fun $guarantee4$3 () Bool) -(declare-fun $state$3 () Int) -(declare-fun $guarantee2$3 () Bool) -(declare-fun $state$0 () Int) -(declare-fun $bias_max$0 () Bool) -(declare-fun $guarantee3$3 () Bool) -(declare-fun $guarantee1$3 () Bool) -(declare-fun $bias_max$3 () Bool) -(declare-fun $bias$3 () Int) -(declare-fun $x$1 () Int) -(declare-fun $bias$0 () Int) - -(assert (let ((a!1 (and (= $x$1 1) - (not (<= 1 $bias$0)) - (not (<= $bias$0 (- 3))) - (not $bias_max$0) - (or (not (= $state$0 0)) (not (= $x$1 0))) - (or (= $x$1 0) (= $x$1 1)))) - (a!2 (or $bias_max$0 (>= (+ 1 $bias$0) 2) (<= (+ 1 $bias$0) (- 0 2)))) - (a!3 (or (= (+ 1 $bias$0) 0) (not (= 2 0)))) - (a!4 (or (not (and (= $state$0 0) (= $x$1 0))) (= 2 1))) - (a!7 (and (not (= $x$1 1)) - (not (<= 3 $bias$0)) - (not (<= $bias$0 (- 1))) - (not $bias_max$0) - (or (not (= $state$0 0)) (not (= $x$1 1))) - (or (= $x$1 0) (= $x$1 1)))) - (a!8 (or $bias_max$0 - (>= (+ (- 1) $bias$0) 2) - (<= (+ (- 1) $bias$0) (- 0 2)))) - (a!9 (or (= (+ (- 1) $bias$0) 0) (not (= 1 0)))) - (a!10 (or (not (and (= $state$0 0) (= $x$1 1))) (= 1 2)))) -(let ((a!5 (= $guarantee_all$3 (and true (or (not a!2) (= 2 3)) a!4 true a!3))) - (a!11 (= $guarantee_all$3 (and true (or (not a!8) (= 1 3)) true a!9 a!10)))) -(let ((a!6 (and (= $bias$3 (+ 1 $bias$0)) - (= $bias_max$3 a!2) - (= $guarantee1$3 a!3) - (= $state$3 2) - (= $guarantee2$3 true) - (= $guarantee3$3 a!4) - (= $guarantee4$3 (or (not a!2) (= 2 3))) - (= $guarantee5$3 true) - a!5)) - (a!12 (and (= $bias$3 (+ (- 1) $bias$0)) - (= $bias_max$3 a!8) - (= $guarantee1$3 a!9) - (= $state$3 1) - (= $guarantee2$3 a!10) - (= $guarantee3$3 true) - (= $guarantee4$3 (or (not a!8) (= 1 3))) - (= $guarantee5$3 true) - a!11))) - (ite a!1 a!6 (ite a!7 a!12 true)))))) -(check-sat) diff --git a/bench/skolems/newexample_base3_skolem.smt2 b/bench/skolems/newexample_base3_skolem.smt2 deleted file mode 100644 index 6dff6ef09..000000000 --- a/bench/skolems/newexample_base3_skolem.smt2 +++ /dev/null @@ -1,78 +0,0 @@ -(declare-fun $guarantee5$4 () Bool) -(declare-fun $bias$1 () Int) -(declare-fun $guarantee4$4 () Bool) -(declare-fun $guarantee1$4 () Bool) -(declare-fun $bias_max$4 () Bool) -(declare-fun $bias$4 () Int) -(declare-fun $state$1 () Int) -(declare-fun $x$2 () Int) -(declare-fun $guarantee2$4 () Bool) -(declare-fun $bias_max$1 () Bool) -(declare-fun $guarantee3$4 () Bool) -(declare-fun $guarantee_all$4 () Bool) -(declare-fun $state$4 () Int) - -(assert (let ((a!1 (or (and (= $x$2 1) (= $bias$1 (- 1))) - (and (not (= $x$2 1)) (= $bias$1 1)))) - (a!3 (or $bias_max$1 (>= 0 2) (<= 0 (- 0 2)))) - (a!4 (or (not (and (= $state$1 0) (= $x$2 1))) (= 0 2))) - (a!5 (or (not (and (= $state$1 0) (= $x$2 0))) (= 0 1))) - (a!8 (and (= $x$2 1) - (or (>= $bias$1 1) (<= $bias$1 (- 3)) $bias_max$1) - (or (not (= $state$1 0)) (not (= $x$2 1))) - (or (not (= $state$1 0)) (not (= $x$2 0))) - (or (= $x$2 0) (= $x$2 1)))) - (a!9 (= $bias_max$4 - (or $bias_max$1 (>= (+ 1 $bias$1) 2) (<= (+ 1 $bias$1) (- 0 2))))) - (a!10 (or (= (+ 1 $bias$1) 0) (not (= 3 0)))) - (a!11 (or (not (and (= $state$1 0) (= $x$2 1))) (= 3 2))) - (a!12 (or (not (and (= $state$1 0) (= $x$2 0))) (= 3 1))) - (a!13 (and (not (= $x$2 1)) - (or (>= $bias$1 3) (<= $bias$1 (- 1)) $bias_max$1) - (or (not (= $state$1 0)) (not (= $x$2 1))) - (or (not (= $state$1 0)) (not (= $x$2 0))) - (or (= $x$2 0) (= $x$2 1)))) - (a!14 (= $bias_max$4 - (or $bias_max$1 - (>= (+ (- 1) $bias$1) 2) - (<= (+ (- 1) $bias$1) (- 0 2))))) - (a!15 (or (not (= 3 0)) (= (+ (- 1) $bias$1) 0)))) -(let ((a!2 (and a!1 - (not $bias_max$1) - (or (not (= $state$1 0)) (not (= $x$2 1))) - (or (not (= $state$1 0)) (not (= $x$2 0))) - (or (= $x$2 0) (= $x$2 1)))) - (a!6 (= $guarantee_all$4 (and true (or (not a!3) (= 0 3)) a!5 true a!4))) - (a!16 (ite a!13 - (and (= $bias$4 (+ (- 1) $bias$1)) - a!14 - (= $guarantee1$4 a!15) - (= $state$4 3) - (= $guarantee2$4 a!11) - (= $guarantee3$4 a!12) - (= $guarantee4$4 true) - (= $guarantee5$4 true) - (= $guarantee_all$4 (and true true a!12 a!11 a!15))) - true))) -(let ((a!7 (and (= $bias$4 0) - (= $bias_max$4 a!3) - (= $guarantee1$4 true) - (= $state$4 0) - (= $guarantee2$4 a!4) - (= $guarantee3$4 a!5) - (= $guarantee4$4 (or (not a!3) (= 0 3))) - (= $guarantee5$4 true) - a!6)) - (a!17 (ite a!8 - (and (= $bias$4 (+ 1 $bias$1)) - a!9 - (= $guarantee1$4 a!10) - (= $state$4 3) - (= $guarantee2$4 a!11) - (= $guarantee3$4 a!12) - (= $guarantee4$4 true) - (= $guarantee5$4 true) - (= $guarantee_all$4 (and true true a!12 a!10 a!11))) - a!16))) - (ite a!2 a!7 a!17))))) -(check-sat) diff --git a/bench/skolems/newexample_extend_skolem.smt2 b/bench/skolems/newexample_extend_skolem.smt2 deleted file mode 100644 index b48184448..000000000 --- a/bench/skolems/newexample_extend_skolem.smt2 +++ /dev/null @@ -1,93 +0,0 @@ -(declare-fun $guarantee5$3 () Bool) -(declare-fun $guarantee4$3 () Bool) -(declare-fun $guarantee3$3 () Bool) -(declare-fun $guarantee1$3 () Bool) -(declare-fun $state$0 () Int) -(declare-fun $bias_max$0 () Bool) -(declare-fun $state$3 () Int) -(declare-fun $bias$3 () Int) -(declare-fun $guarantee2$3 () Bool) -(declare-fun $bias$0 () Int) -(declare-fun $bias_max$3 () Bool) -(declare-fun $guarantee_all$3 () Bool) -(declare-fun $x$1 () Int) - -(assert (let ((a!1 (and (= $x$1 1) - (not (<= 1 $bias$0)) - (not (<= $bias$0 (- 3))) - (not $bias_max$0) - (or (not (= $state$0 0)) (not (= $x$1 0))) - (or (= $x$1 0) (= $x$1 1)))) - (a!2 (or $bias_max$0 (>= (+ 1 $bias$0) 2) (<= (+ 1 $bias$0) (- 0 2)))) - (a!3 (or (= (+ 1 $bias$0) 0) (not (= 2 0)))) - (a!4 (or (not (and (= $state$0 0) (= $x$1 0))) (= 2 1))) - (a!7 (and (= $x$1 1) - (or (>= $bias$0 1) (<= $bias$0 (- 3)) $bias_max$0) - (or (not (= $state$0 0)) (not (= $x$1 1))) - (or (not (= $state$0 0)) (not (= $x$1 0))) - (or (= $x$1 0) (= $x$1 1)))) - (a!8 (or (= (+ 1 $bias$0) 0) (not (= 3 0)))) - (a!9 (or (not (and (= $state$0 0) (= $x$1 1))) (= 3 2))) - (a!10 (or (not (and (= $state$0 0) (= $x$1 0))) (= 3 1))) - (a!11 (and (not (= $x$1 1)) - (not (<= 3 $bias$0)) - (not (<= $bias$0 (- 1))) - (not $bias_max$0) - (or (not (= $state$0 0)) (not (= $x$1 1))) - (or (= $x$1 0) (= $x$1 1)))) - (a!12 (or $bias_max$0 - (>= (+ (- 1) $bias$0) 2) - (<= (+ (- 1) $bias$0) (- 0 2)))) - (a!13 (or (= (+ (- 1) $bias$0) 0) (not (= 1 0)))) - (a!14 (or (not (and (= $state$0 0) (= $x$1 1))) (= 1 2))) - (a!17 (and (not (= $x$1 1)) - (or (>= $bias$0 3) (<= $bias$0 (- 1)) $bias_max$0) - (or (not (= $state$0 0)) (not (= $x$1 1))) - (or (not (= $state$0 0)) (not (= $x$1 0))) - (or (= $x$1 0) (= $x$1 1)))) - (a!18 (or (not (= 3 0)) (= (+ (- 1) $bias$0) 0)))) -(let ((a!5 (= $guarantee_all$3 (and true (or (not a!2) (= 2 3)) a!4 true a!3))) - (a!15 (= $guarantee_all$3 - (and true (or (not a!12) (= 1 3)) true a!13 a!14))) - (a!19 (ite a!17 - (and (= $bias$3 (+ (- 1) $bias$0)) - (= $bias_max$3 a!12) - (= $guarantee1$3 a!18) - (= $state$3 3) - (= $guarantee2$3 a!9) - (= $guarantee3$3 a!10) - (= $guarantee4$3 true) - (= $guarantee5$3 true) - (= $guarantee_all$3 (and true true a!10 a!9 a!18))) - true))) -(let ((a!6 (and (= $bias$3 (+ 1 $bias$0)) - (= $bias_max$3 a!2) - (= $guarantee1$3 a!3) - (= $state$3 2) - (= $guarantee2$3 true) - (= $guarantee3$3 a!4) - (= $guarantee4$3 (or (not a!2) (= 2 3))) - (= $guarantee5$3 true) - a!5)) - (a!16 (and (= $bias$3 (+ (- 1) $bias$0)) - (= $bias_max$3 a!12) - (= $guarantee1$3 a!13) - (= $state$3 1) - (= $guarantee2$3 a!14) - (= $guarantee3$3 true) - (= $guarantee4$3 (or (not a!12) (= 1 3))) - (= $guarantee5$3 true) - a!15))) -(let ((a!20 (ite a!7 - (and (= $bias$3 (+ 1 $bias$0)) - (= $bias_max$3 a!2) - (= $guarantee1$3 a!8) - (= $state$3 3) - (= $guarantee2$3 a!9) - (= $guarantee3$3 a!10) - (= $guarantee4$3 true) - (= $guarantee5$3 true) - (= $guarantee_all$3 (and true true a!10 a!8 a!9))) - (ite a!11 a!16 a!19)))) - (ite a!1 a!6 a!20)))))) -(check-sat) diff --git a/bench/skolems/rtp_1_base_skolem.smt2 b/bench/skolems/rtp_1_base_skolem.smt2 deleted file mode 100644 index 1497582d4..000000000 --- a/bench/skolems/rtp_1_base_skolem.smt2 +++ /dev/null @@ -1,115 +0,0 @@ -(declare-fun $V170_X$2 () Bool) -(declare-fun $V76_erreur$2 () Bool) -(declare-fun $V175_Sofar$2 () Bool) -(declare-fun $e12$0 () Bool) -(declare-fun $e11$0 () Bool) -(declare-fun $e04$0 () Bool) -(declare-fun $e10$0 () Bool) -(declare-fun $e09$0 () Bool) -(declare-fun $e08$0 () Bool) -(declare-fun $e03$0 () Bool) -(declare-fun $e07$0 () Bool) -(declare-fun $e05$0 () Bool) -(declare-fun $e01$0 () Bool) -(declare-fun $e06$0 () Bool) -(declare-fun $e02$0 () Bool) -(declare-fun $OK$2 () Bool) - -(assert (let ((a!1 (and (and (and (not $e01$0) (not $e02$0)) (not $e03$0)) (not $e04$0))) - (a!4 (and (not $e12$0) - (not $e11$0) - (not $e10$0) - (not $e09$0) - (not $e08$0) - (not $e07$0) - (not $e06$0) - (not $e05$0) - (and (and (not $e01$0) (not $e02$0)) (not $e03$0)) - $e04$0))) -(let ((a!2 (and (and (and a!1 (not $e05$0)) (not $e06$0)) (not $e07$0))) - (a!5 (and (not $e12$0) - (not $e11$0) - (not $e10$0) - (not $e09$0) - (not $e08$0) - (and (and a!1 (not $e05$0)) (not $e06$0)) - $e07$0))) -(let ((a!3 (and (and (and a!2 (not $e08$0)) (not $e09$0)) (not $e10$0))) - (a!6 (and (not $e12$0) - (not $e11$0) - (and (and a!2 (not $e08$0)) (not $e09$0)) - $e10$0))) -(let ((a!7 (or (and (and a!3 (not $e11$0)) $e12$0) - (and (and a!3 (not $e11$0)) (not $e12$0)) - (and (not $e12$0) - (not $e11$0) - (not $e10$0) - (not $e09$0) - (not $e08$0) - (not $e07$0) - (not $e06$0) - (not $e05$0) - (not $e04$0) - (not $e03$0) - $e01$0 - (not $e02$0)) - (and (not $e12$0) - (not $e11$0) - (not $e10$0) - (not $e09$0) - (not $e08$0) - (not $e07$0) - (not $e06$0) - (not $e05$0) - (not $e04$0) - (not $e03$0) - (not $e01$0) - $e02$0) - (and (not $e12$0) - (not $e11$0) - (not $e10$0) - (not $e09$0) - (not $e08$0) - (not $e07$0) - (not $e06$0) - (not $e05$0) - (not $e04$0) - (and (not $e01$0) (not $e02$0)) - $e03$0) - a!4 - (and (not $e12$0) - (not $e11$0) - (not $e10$0) - (not $e09$0) - (not $e08$0) - (not $e07$0) - (not $e06$0) - a!1 - $e05$0) - (and (not $e12$0) - (not $e11$0) - (not $e10$0) - (not $e09$0) - (not $e08$0) - (not $e07$0) - (and a!1 (not $e05$0)) - $e06$0) - a!5 - (and (not $e12$0) - (not $e11$0) - (not $e10$0) - (not $e09$0) - a!2 - $e08$0) - (and (not $e12$0) - (not $e11$0) - (not $e10$0) - (and a!2 (not $e08$0)) - $e09$0) - a!6 - (and (not $e12$0) a!3 $e11$0)))) - (and (= $OK$2 (or (not a!7) (not false))) - (= $V175_Sofar$2 a!7) - (= $V76_erreur$2 false) - (= $V170_X$2 a!7))))))) -(check-sat) diff --git a/bench/skolems/rtp_1_extend_skolem.smt2 b/bench/skolems/rtp_1_extend_skolem.smt2 deleted file mode 100644 index 2c08a722a..000000000 --- a/bench/skolems/rtp_1_extend_skolem.smt2 +++ /dev/null @@ -1,118 +0,0 @@ -(declare-fun $V170_X$2 () Bool) -(declare-fun $V175_Sofar$~1 () Bool) -(declare-fun $e11$0 () Bool) -(declare-fun $V175_Sofar$2 () Bool) -(declare-fun $e10$0 () Bool) -(declare-fun $e12$0 () Bool) -(declare-fun $e06$0 () Bool) -(declare-fun $e09$0 () Bool) -(declare-fun $e02$0 () Bool) -(declare-fun $e07$0 () Bool) -(declare-fun $e04$0 () Bool) -(declare-fun $e05$0 () Bool) -(declare-fun $e01$0 () Bool) -(declare-fun $V76_erreur$2 () Bool) -(declare-fun $e08$0 () Bool) -(declare-fun $e03$0 () Bool) -(declare-fun %init () Bool) -(declare-fun $OK$2 () Bool) - -(assert (let ((a!1 (and (and (and (not $e01$0) (not $e02$0)) (not $e03$0)) (not $e04$0))) - (a!4 (and (not $e12$0) - (not $e11$0) - (not $e10$0) - (not $e09$0) - (not $e08$0) - (not $e07$0) - (not $e06$0) - (not $e05$0) - (and (and (not $e01$0) (not $e02$0)) (not $e03$0)) - $e04$0))) -(let ((a!2 (and (and (and a!1 (not $e05$0)) (not $e06$0)) (not $e07$0))) - (a!5 (and (not $e12$0) - (not $e11$0) - (not $e10$0) - (not $e09$0) - (not $e08$0) - (and (and a!1 (not $e05$0)) (not $e06$0)) - $e07$0))) -(let ((a!3 (and (and (and a!2 (not $e08$0)) (not $e09$0)) (not $e10$0))) - (a!6 (and (not $e12$0) - (not $e11$0) - (and (and a!2 (not $e08$0)) (not $e09$0)) - $e10$0))) -(let ((a!7 (or (and (and a!3 (not $e11$0)) $e12$0) - (and (and a!3 (not $e11$0)) (not $e12$0)) - (and (not $e12$0) - (not $e11$0) - (not $e10$0) - (not $e09$0) - (not $e08$0) - (not $e07$0) - (not $e06$0) - (not $e05$0) - (not $e04$0) - (not $e03$0) - $e01$0 - (not $e02$0)) - (and (not $e12$0) - (not $e11$0) - (not $e10$0) - (not $e09$0) - (not $e08$0) - (not $e07$0) - (not $e06$0) - (not $e05$0) - (not $e04$0) - (not $e03$0) - (not $e01$0) - $e02$0) - (and (not $e12$0) - (not $e11$0) - (not $e10$0) - (not $e09$0) - (not $e08$0) - (not $e07$0) - (not $e06$0) - (not $e05$0) - (not $e04$0) - (and (not $e01$0) (not $e02$0)) - $e03$0) - a!4 - (and (not $e12$0) - (not $e11$0) - (not $e10$0) - (not $e09$0) - (not $e08$0) - (not $e07$0) - (not $e06$0) - a!1 - $e05$0) - (and (not $e12$0) - (not $e11$0) - (not $e10$0) - (not $e09$0) - (not $e08$0) - (not $e07$0) - (and a!1 (not $e05$0)) - $e06$0) - a!5 - (and (not $e12$0) - (not $e11$0) - (not $e10$0) - (not $e09$0) - a!2 - $e08$0) - (and (not $e12$0) - (not $e11$0) - (not $e10$0) - (and a!2 (not $e08$0)) - $e09$0) - a!6 - (and (not $e12$0) a!3 $e11$0)))) -(let ((a!8 (or (not (ite %init a!7 (and a!7 $V175_Sofar$~1))) (not false)))) - (and (= $OK$2 a!8) - (= $V175_Sofar$2 (ite %init a!7 (and a!7 $V175_Sofar$~1))) - (= $V76_erreur$2 false) - (= $V170_X$2 a!7)))))))) -(check-sat) diff --git a/bench/skolems/speed_e7_207_base_skolem.smt2 b/bench/skolems/speed_e7_207_base_skolem.smt2 deleted file mode 100644 index 437754233..000000000 --- a/bench/skolems/speed_e7_207_base_skolem.smt2 +++ /dev/null @@ -1,6 +0,0 @@ -(declare-fun $V20_early$2 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $OK$2 () Bool) - -(assert (and (= $OK$2 true) (= $V19_late$2 false) (= $V20_early$2 true))) -(check-sat) diff --git a/bench/skolems/speed_e7_207_e7_538_base_skolem.smt2 b/bench/skolems/speed_e7_207_e7_538_base_skolem.smt2 deleted file mode 100644 index 437754233..000000000 --- a/bench/skolems/speed_e7_207_e7_538_base_skolem.smt2 +++ /dev/null @@ -1,6 +0,0 @@ -(declare-fun $V20_early$2 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $OK$2 () Bool) - -(assert (and (= $OK$2 true) (= $V19_late$2 false) (= $V20_early$2 true))) -(check-sat) diff --git a/bench/skolems/speed_e7_207_e7_538_extend_skolem.smt2 b/bench/skolems/speed_e7_207_e7_538_extend_skolem.smt2 deleted file mode 100644 index 437754233..000000000 --- a/bench/skolems/speed_e7_207_e7_538_extend_skolem.smt2 +++ /dev/null @@ -1,6 +0,0 @@ -(declare-fun $V20_early$2 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $OK$2 () Bool) - -(assert (and (= $OK$2 true) (= $V19_late$2 false) (= $V20_early$2 true))) -(check-sat) diff --git a/bench/skolems/speed_e7_207_e8_507_base1_skolem.smt2 b/bench/skolems/speed_e7_207_e8_507_base1_skolem.smt2 deleted file mode 100644 index 437754233..000000000 --- a/bench/skolems/speed_e7_207_e8_507_base1_skolem.smt2 +++ /dev/null @@ -1,6 +0,0 @@ -(declare-fun $V20_early$2 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $OK$2 () Bool) - -(assert (and (= $OK$2 true) (= $V19_late$2 false) (= $V20_early$2 true))) -(check-sat) diff --git a/bench/skolems/speed_e7_207_e8_507_base2_skolem.smt2 b/bench/skolems/speed_e7_207_e8_507_base2_skolem.smt2 deleted file mode 100644 index 9c4d24ce8..000000000 --- a/bench/skolems/speed_e7_207_e8_507_base2_skolem.smt2 +++ /dev/null @@ -1,6 +0,0 @@ -(declare-fun $V20_early$3 () Bool) -(declare-fun $V19_late$3 () Bool) -(declare-fun $OK$3 () Bool) - -(assert (and (= $OK$3 true) (= $V19_late$3 false) (= $V20_early$3 true))) -(check-sat) diff --git a/bench/skolems/speed_e7_207_e8_507_extend_skolem.smt2 b/bench/skolems/speed_e7_207_e8_507_extend_skolem.smt2 deleted file mode 100644 index 437754233..000000000 --- a/bench/skolems/speed_e7_207_e8_507_extend_skolem.smt2 +++ /dev/null @@ -1,6 +0,0 @@ -(declare-fun $V20_early$2 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $OK$2 () Bool) - -(assert (and (= $OK$2 true) (= $V19_late$2 false) (= $V20_early$2 true))) -(check-sat) diff --git a/bench/skolems/speed_e7_207_extend_skolem.smt2 b/bench/skolems/speed_e7_207_extend_skolem.smt2 deleted file mode 100644 index 437754233..000000000 --- a/bench/skolems/speed_e7_207_extend_skolem.smt2 +++ /dev/null @@ -1,6 +0,0 @@ -(declare-fun $V20_early$2 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $OK$2 () Bool) - -(assert (and (= $OK$2 true) (= $V19_late$2 false) (= $V20_early$2 true))) -(check-sat) diff --git a/bench/skolems/speed_e8_136_base_skolem.smt2 b/bench/skolems/speed_e8_136_base_skolem.smt2 deleted file mode 100644 index 437754233..000000000 --- a/bench/skolems/speed_e8_136_base_skolem.smt2 +++ /dev/null @@ -1,6 +0,0 @@ -(declare-fun $V20_early$2 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $OK$2 () Bool) - -(assert (and (= $OK$2 true) (= $V19_late$2 false) (= $V20_early$2 true))) -(check-sat) diff --git a/bench/skolems/speed_e8_136_extend_skolem.smt2 b/bench/skolems/speed_e8_136_extend_skolem.smt2 deleted file mode 100644 index 437754233..000000000 --- a/bench/skolems/speed_e8_136_extend_skolem.smt2 +++ /dev/null @@ -1,6 +0,0 @@ -(declare-fun $V20_early$2 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $OK$2 () Bool) - -(assert (and (= $OK$2 true) (= $V19_late$2 false) (= $V20_early$2 true))) -(check-sat) diff --git a/bench/skolems/speed_e8_649_e7_709_base_skolem.smt2 b/bench/skolems/speed_e8_649_e7_709_base_skolem.smt2 deleted file mode 100644 index 437754233..000000000 --- a/bench/skolems/speed_e8_649_e7_709_base_skolem.smt2 +++ /dev/null @@ -1,6 +0,0 @@ -(declare-fun $V20_early$2 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $OK$2 () Bool) - -(assert (and (= $OK$2 true) (= $V19_late$2 false) (= $V20_early$2 true))) -(check-sat) diff --git a/bench/skolems/speed_e8_649_e7_709_extend_skolem.smt2 b/bench/skolems/speed_e8_649_e7_709_extend_skolem.smt2 deleted file mode 100644 index 437754233..000000000 --- a/bench/skolems/speed_e8_649_e7_709_extend_skolem.smt2 +++ /dev/null @@ -1,6 +0,0 @@ -(declare-fun $V20_early$2 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $OK$2 () Bool) - -(assert (and (= $OK$2 true) (= $V19_late$2 false) (= $V20_early$2 true))) -(check-sat) diff --git a/bench/skolems/tramway_e7_1834_base1_skolem.smt2 b/bench/skolems/tramway_e7_1834_base1_skolem.smt2 deleted file mode 100644 index 585131ccc..000000000 --- a/bench/skolems/tramway_e7_1834_base1_skolem.smt2 +++ /dev/null @@ -1,76 +0,0 @@ -(declare-fun $~flatten0$2 () Bool) -(declare-fun $V274_X$2 () Bool) -(declare-fun $V61_close_door$2 () Bool) -(declare-fun $V276_X$2 () Bool) -(declare-fun $V273_X$2 () Bool) -(declare-fun $V60_open_door$2 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$2 - () - Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$2 () Bool) -(declare-fun $V253_between_A_and_X$2 () Bool) -(declare-fun $V252_X$2 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$2 () Bool) -(declare-fun $V264_env_ok$2 () Bool) -(declare-fun $V271_warning_start_only_in_station$2 () Bool) -(declare-fun $warning_start$0 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$2 () Bool) -(declare-fun $V58_env_always_ok$2 () Bool) -(declare-fun $V59_prop_ok$2 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$2 - () - Bool) -(declare-fun $V276_X$~1 () Bool) -(declare-fun $V269_initially_not_in_station$2 () Bool) -(declare-fun $V275_X$2 () Bool) -(declare-fun $in_station$0 () Bool) -(declare-fun $V275_X$~1 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $V268_door_initially_closed$2 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$2 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$2 () Bool) -(declare-fun $door_is_open$0 () Bool) - -(assert (let ((a!1 (not (and (not $door_is_open$0) - (not $in_station$0) - (or (not $warning_start$0) $in_station$0)))) - (a!2 (= (ite true false (or (not $in_station$0) (not $V275_X$~1))) - (ite true false (or (not $warning_start$0) (not $V276_X$~1))))) - (a!5 (= $V59_prop_ok$2 - (and true (or $in_station$0 (not $door_is_open$0)))))) -(let ((a!3 (and true - (not $in_station$0) - true - (not $door_is_open$0) - a!2 - (or $in_station$0 (not $warning_start$0))))) -(let ((a!4 (or (not a!3) (and true (or $in_station$0 (not $door_is_open$0)))))) -(let ((a!6 (and (= $OK$2 a!4) - (= $V58_env_always_ok$2 a!3) - a!5 - (= $V264_env_ok$2 a!3) - (= $V250_door_doesnt_open_out_of_station$2 - (or $in_station$0 (not $door_is_open$0))) - (= $V251_door_opens_before_leaving_station$2 true) - (= $V253_between_A_and_X$2 false) - (= $V252_X$2 (not $in_station$0)) - (= $V266_door_doesnt_open_if_not_asked$2 true) - (= $V265_door_doesnt_close_if_not_asked$2 true) - (= $V267_tramway_doesnt_start_if_not_door_ok$2 true) - (= $V268_door_initially_closed$2 (not $door_is_open$0)) - (= $V269_initially_not_in_station$2 (not $in_station$0)) - (= $V270_warning_start_and_in_station_go_down_simultaneously$2 - a!2) - (= $V271_warning_start_only_in_station$2 - (or $in_station$0 (not $warning_start$0))) - (= $V272_warning_start_cant_become_true_when_door_is_opening$2 - true) - (= $V60_open_door$2 true) - (= $V273_X$2 (not $door_is_open$0)) - (= $V61_close_door$2 true) - (= $V274_X$2 (not $in_station$0)) - (= $V275_X$2 (not $in_station$0)) - (= $V276_X$2 (not $warning_start$0)) - (= $~flatten0$2 false)))) - (ite (or a!1 (not $door_is_open$0) $in_station$0) a!6 true)))))) -(check-sat) diff --git a/bench/skolems/tramway_e7_1834_base2_skolem.smt2 b/bench/skolems/tramway_e7_1834_base2_skolem.smt2 deleted file mode 100644 index 87ac13b78..000000000 --- a/bench/skolems/tramway_e7_1834_base2_skolem.smt2 +++ /dev/null @@ -1,109 +0,0 @@ -(declare-fun $~flatten0$3 () Bool) -(declare-fun $V275_X$3 () Bool) -(declare-fun $V274_X$3 () Bool) -(declare-fun $V273_X$3 () Bool) -(declare-fun $V60_open_door$3 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$3 - () - Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$3 - () - Bool) -(declare-fun $V276_X$3 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$3 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$3 () Bool) -(declare-fun $V269_initially_not_in_station$3 () Bool) -(declare-fun $V252_X$0 () Bool) -(declare-fun $V252_X$3 () Bool) -(declare-fun $V253_between_A_and_X$3 () Bool) -(declare-fun $door_is_open$0 () Bool) -(declare-fun $V268_door_initially_closed$3 () Bool) -(declare-fun $V59_prop_ok$3 () Bool) -(declare-fun $V264_env_ok$3 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$3 () Bool) -(declare-fun $V58_env_always_ok$3 () Bool) -(declare-fun $V253_between_A_and_X$0 () Bool) -(declare-fun $~flatten0$0 () Bool) -(declare-fun $in_station$1 () Bool) -(declare-fun $V58_env_always_ok$0 () Bool) -(declare-fun $V61_close_door$3 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$3 () Bool) -(declare-fun $warning_start$0 () Bool) -(declare-fun $V62_door_ok$0 () Bool) -(declare-fun $V276_X$0 () Bool) -(declare-fun $OK$3 () Bool) -(declare-fun $warning_start$1 () Bool) -(declare-fun $V273_X$0 () Bool) -(declare-fun $door_is_open$1 () Bool) -(declare-fun $V271_warning_start_only_in_station$3 () Bool) -(declare-fun $V275_X$0 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$3 () Bool) -(declare-fun $V274_X$0 () Bool) -(declare-fun $request_door$0 () Bool) - -(assert (let ((a!1 (or (not (or (not $in_station$1) (not $V274_X$0))) $V62_door_ok$0)) - (a!3 (and (or (and $request_door$0 (not $warning_start$0)) - (and (not $~flatten0$0) $V253_between_A_and_X$0)) - (or (not $in_station$1) (not $V252_X$0)))) - (a!5 (or false (not (or (not $door_is_open$1) (not $V273_X$0))))) - (a!6 (or $V62_door_ok$0 (not (or (not $in_station$1) (not $V274_X$0))))) - (a!7 (= (ite false false (or (not $in_station$1) (not $V275_X$0))) - (ite false false (or (not $warning_start$1) (not $V276_X$0))))) - (a!8 (or (not (or $warning_start$1 (not $warning_start$0))) (not true))) - (a!10 (ite (and (not $warning_start$0) $request_door$0) - true - (ite (ite false false $~flatten0$0) - false - $V253_between_A_and_X$0)))) -(let ((a!2 (and (not (or (not $door_is_open$1) (not $V273_X$0))) - a!1 - (= (or (not $in_station$1) (not $V275_X$0)) - (or (not $warning_start$1) (not $V276_X$0))) - (or (not $warning_start$1) $in_station$1) - (not (or $warning_start$1 (not $warning_start$0))) - $V58_env_always_ok$0)) - (a!9 (and true - true - true - a!5 - a!6 - a!7 - (or $in_station$1 (not $warning_start$1)) - a!8)) - (a!11 (and a!10 - (ite false false (or (not $in_station$1) (not $V252_X$0)))))) -(let ((a!4 (or (not a!2) - (and (or (not $door_is_open$1) $in_station$1) (not a!3)))) - (a!12 (or (not (and $V58_env_always_ok$0 a!9)) - (and (or $in_station$1 (not $door_is_open$1)) (not a!11)))) - (a!13 (= $V59_prop_ok$3 - (and (or $in_station$1 (not $door_is_open$1)) (not a!11))))) -(let ((a!14 (and (= $OK$3 a!12) - (= $V58_env_always_ok$3 (and $V58_env_always_ok$0 a!9)) - a!13 - (= $V264_env_ok$3 a!9) - (= $V250_door_doesnt_open_out_of_station$3 - (or $in_station$1 (not $door_is_open$1))) - (= $V251_door_opens_before_leaving_station$3 (not a!11)) - (= $V253_between_A_and_X$3 a!10) - (= $V252_X$3 (not $in_station$1)) - (= $V266_door_doesnt_open_if_not_asked$3 a!5) - (= $V265_door_doesnt_close_if_not_asked$3 true) - (= $V267_tramway_doesnt_start_if_not_door_ok$3 a!6) - (= $V268_door_initially_closed$3 true) - (= $V269_initially_not_in_station$3 true) - (= $V270_warning_start_and_in_station_go_down_simultaneously$3 - a!7) - (= $V271_warning_start_only_in_station$3 - (or $in_station$1 (not $warning_start$1))) - (= $V272_warning_start_cant_become_true_when_door_is_opening$3 - a!8) - (= $V60_open_door$3 true) - (= $V273_X$3 (not $door_is_open$1)) - (= $V61_close_door$3 false) - (= $V274_X$3 (not $in_station$1)) - (= $V275_X$3 (not $in_station$1)) - (= $V276_X$3 (not $warning_start$1)) - (= $~flatten0$3 $door_is_open$0)))) - (ite a!4 a!14 true)))))) -(check-sat) diff --git a/bench/skolems/tramway_e7_1834_base3_skolem.smt2 b/bench/skolems/tramway_e7_1834_base3_skolem.smt2 deleted file mode 100644 index 632bbf408..000000000 --- a/bench/skolems/tramway_e7_1834_base3_skolem.smt2 +++ /dev/null @@ -1,109 +0,0 @@ -(declare-fun $~flatten0$4 () Bool) -(declare-fun $V275_X$4 () Bool) -(declare-fun $V61_close_door$4 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$4 - () - Bool) -(declare-fun $door_is_open$1 () Bool) -(declare-fun $V271_warning_start_only_in_station$4 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$4 - () - Bool) -(declare-fun $V269_initially_not_in_station$4 () Bool) -(declare-fun $V268_door_initially_closed$4 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$4 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$4 () Bool) -(declare-fun $V264_env_ok$4 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$4 () Bool) -(declare-fun $V253_between_A_and_X$4 () Bool) -(declare-fun $V252_X$4 () Bool) -(declare-fun $V252_X$1 () Bool) -(declare-fun $V58_env_always_ok$1 () Bool) -(declare-fun $~flatten0$1 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$4 () Bool) -(declare-fun $in_station$2 () Bool) -(declare-fun $V59_prop_ok$4 () Bool) -(declare-fun $V273_X$4 () Bool) -(declare-fun $OK$4 () Bool) -(declare-fun $V276_X$4 () Bool) -(declare-fun $V274_X$4 () Bool) -(declare-fun $V275_X$1 () Bool) -(declare-fun $V253_between_A_and_X$1 () Bool) -(declare-fun $request_door$1 () Bool) -(declare-fun $warning_start$1 () Bool) -(declare-fun $V58_env_always_ok$4 () Bool) -(declare-fun $V274_X$1 () Bool) -(declare-fun $V276_X$1 () Bool) -(declare-fun $door_is_open$2 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$4 () Bool) -(declare-fun $V60_open_door$4 () Bool) -(declare-fun $warning_start$2 () Bool) -(declare-fun $V273_X$1 () Bool) -(declare-fun $V62_door_ok$1 () Bool) - -(assert (let ((a!1 (or (not (or (not $in_station$2) (not $V274_X$1))) $V62_door_ok$1)) - (a!3 (and (or (and $request_door$1 (not $warning_start$1)) - (and (not $~flatten0$1) $V253_between_A_and_X$1)) - (or (not $in_station$2) (not $V252_X$1)))) - (a!5 (or false (not (or (not $door_is_open$2) (not $V273_X$1))))) - (a!6 (or $V62_door_ok$1 (not (or (not $in_station$2) (not $V274_X$1))))) - (a!7 (= (ite false false (or (not $in_station$2) (not $V275_X$1))) - (ite false false (or (not $warning_start$2) (not $V276_X$1))))) - (a!8 (or (not (or $warning_start$2 (not $warning_start$1))) (not true))) - (a!10 (ite (and (not $warning_start$1) $request_door$1) - true - (ite (ite false false $~flatten0$1) - false - $V253_between_A_and_X$1)))) -(let ((a!2 (and (not (or (not $door_is_open$2) (not $V273_X$1))) - a!1 - (= (or (not $in_station$2) (not $V275_X$1)) - (or (not $warning_start$2) (not $V276_X$1))) - (or (not $warning_start$2) $in_station$2) - (not (or $warning_start$2 (not $warning_start$1))) - $V58_env_always_ok$1)) - (a!9 (and true - true - true - a!5 - a!6 - a!7 - (or $in_station$2 (not $warning_start$2)) - a!8)) - (a!11 (and a!10 - (ite false false (or (not $in_station$2) (not $V252_X$1)))))) -(let ((a!4 (or (not a!2) - (and (or (not $door_is_open$2) $in_station$2) (not a!3)))) - (a!12 (or (not (and $V58_env_always_ok$1 a!9)) - (and (or $in_station$2 (not $door_is_open$2)) (not a!11)))) - (a!13 (= $V59_prop_ok$4 - (and (or $in_station$2 (not $door_is_open$2)) (not a!11))))) -(let ((a!14 (and (= $OK$4 a!12) - (= $V58_env_always_ok$4 (and $V58_env_always_ok$1 a!9)) - a!13 - (= $V264_env_ok$4 a!9) - (= $V250_door_doesnt_open_out_of_station$4 - (or $in_station$2 (not $door_is_open$2))) - (= $V251_door_opens_before_leaving_station$4 (not a!11)) - (= $V253_between_A_and_X$4 a!10) - (= $V252_X$4 (not $in_station$2)) - (= $V266_door_doesnt_open_if_not_asked$4 a!5) - (= $V265_door_doesnt_close_if_not_asked$4 true) - (= $V267_tramway_doesnt_start_if_not_door_ok$4 a!6) - (= $V268_door_initially_closed$4 true) - (= $V269_initially_not_in_station$4 true) - (= $V270_warning_start_and_in_station_go_down_simultaneously$4 - a!7) - (= $V271_warning_start_only_in_station$4 - (or $in_station$2 (not $warning_start$2))) - (= $V272_warning_start_cant_become_true_when_door_is_opening$4 - a!8) - (= $V60_open_door$4 true) - (= $V273_X$4 (not $door_is_open$2)) - (= $V61_close_door$4 false) - (= $V274_X$4 (not $in_station$2)) - (= $V275_X$4 (not $in_station$2)) - (= $V276_X$4 (not $warning_start$2)) - (= $~flatten0$4 $door_is_open$1)))) - (ite a!4 a!14 true)))))) -(check-sat) diff --git a/bench/skolems/tramway_e7_1834_base4_skolem.smt2 b/bench/skolems/tramway_e7_1834_base4_skolem.smt2 deleted file mode 100644 index 2870bd811..000000000 --- a/bench/skolems/tramway_e7_1834_base4_skolem.smt2 +++ /dev/null @@ -1,109 +0,0 @@ -(declare-fun $~flatten0$5 () Bool) -(declare-fun $V276_X$5 () Bool) -(declare-fun $V275_X$5 () Bool) -(declare-fun $V274_X$5 () Bool) -(declare-fun $V61_close_door$5 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$5 - () - Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$5 - () - Bool) -(declare-fun $V268_door_initially_closed$5 () Bool) -(declare-fun $V273_X$5 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$5 () Bool) -(declare-fun $V253_between_A_and_X$5 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$5 () Bool) -(declare-fun $V252_X$5 () Bool) -(declare-fun $V269_initially_not_in_station$5 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$5 () Bool) -(declare-fun $V59_prop_ok$5 () Bool) -(declare-fun $OK$5 () Bool) -(declare-fun $V253_between_A_and_X$2 () Bool) -(declare-fun $V252_X$2 () Bool) -(declare-fun $V271_warning_start_only_in_station$5 () Bool) -(declare-fun $~flatten0$2 () Bool) -(declare-fun $request_door$2 () Bool) -(declare-fun $warning_start$2 () Bool) -(declare-fun $V276_X$2 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$5 () Bool) -(declare-fun $V274_X$2 () Bool) -(declare-fun $V62_door_ok$2 () Bool) -(declare-fun $V58_env_always_ok$2 () Bool) -(declare-fun $in_station$3 () Bool) -(declare-fun $warning_start$3 () Bool) -(declare-fun $V275_X$2 () Bool) -(declare-fun $V60_open_door$5 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$5 () Bool) -(declare-fun $V273_X$2 () Bool) -(declare-fun $V264_env_ok$5 () Bool) -(declare-fun $V58_env_always_ok$5 () Bool) -(declare-fun $door_is_open$2 () Bool) -(declare-fun $door_is_open$3 () Bool) - -(assert (let ((a!1 (or (not (or (not $in_station$3) (not $V274_X$2))) $V62_door_ok$2)) - (a!3 (and (or (and $request_door$2 (not $warning_start$2)) - (and (not $~flatten0$2) $V253_between_A_and_X$2)) - (or (not $in_station$3) (not $V252_X$2)))) - (a!5 (or false (not (or (not $door_is_open$3) (not $V273_X$2))))) - (a!6 (or $V62_door_ok$2 (not (or (not $in_station$3) (not $V274_X$2))))) - (a!7 (= (ite false false (or (not $in_station$3) (not $V275_X$2))) - (ite false false (or (not $warning_start$3) (not $V276_X$2))))) - (a!8 (or (not (or $warning_start$3 (not $warning_start$2))) (not true))) - (a!10 (ite (and (not $warning_start$2) $request_door$2) - true - (ite (ite false false $~flatten0$2) - false - $V253_between_A_and_X$2)))) -(let ((a!2 (and (not (or (not $door_is_open$3) (not $V273_X$2))) - a!1 - (= (or (not $in_station$3) (not $V275_X$2)) - (or (not $warning_start$3) (not $V276_X$2))) - (or (not $warning_start$3) $in_station$3) - (not (or $warning_start$3 (not $warning_start$2))) - $V58_env_always_ok$2)) - (a!9 (and true - true - true - a!5 - a!6 - a!7 - (or $in_station$3 (not $warning_start$3)) - a!8)) - (a!11 (and a!10 - (ite false false (or (not $in_station$3) (not $V252_X$2)))))) -(let ((a!4 (or (not a!2) - (and (or (not $door_is_open$3) $in_station$3) (not a!3)))) - (a!12 (or (not (and $V58_env_always_ok$2 a!9)) - (and (or $in_station$3 (not $door_is_open$3)) (not a!11)))) - (a!13 (= $V59_prop_ok$5 - (and (or $in_station$3 (not $door_is_open$3)) (not a!11))))) -(let ((a!14 (and (= $OK$5 a!12) - (= $V58_env_always_ok$5 (and $V58_env_always_ok$2 a!9)) - a!13 - (= $V264_env_ok$5 a!9) - (= $V250_door_doesnt_open_out_of_station$5 - (or $in_station$3 (not $door_is_open$3))) - (= $V251_door_opens_before_leaving_station$5 (not a!11)) - (= $V253_between_A_and_X$5 a!10) - (= $V252_X$5 (not $in_station$3)) - (= $V266_door_doesnt_open_if_not_asked$5 a!5) - (= $V265_door_doesnt_close_if_not_asked$5 true) - (= $V267_tramway_doesnt_start_if_not_door_ok$5 a!6) - (= $V268_door_initially_closed$5 true) - (= $V269_initially_not_in_station$5 true) - (= $V270_warning_start_and_in_station_go_down_simultaneously$5 - a!7) - (= $V271_warning_start_only_in_station$5 - (or $in_station$3 (not $warning_start$3))) - (= $V272_warning_start_cant_become_true_when_door_is_opening$5 - a!8) - (= $V60_open_door$5 true) - (= $V273_X$5 (not $door_is_open$3)) - (= $V61_close_door$5 false) - (= $V274_X$5 (not $in_station$3)) - (= $V275_X$5 (not $in_station$3)) - (= $V276_X$5 (not $warning_start$3)) - (= $~flatten0$5 $door_is_open$2)))) - (ite a!4 a!14 true)))))) -(check-sat) diff --git a/bench/skolems/tramway_e7_1834_e7_2363_base1_skolem.smt2 b/bench/skolems/tramway_e7_1834_e7_2363_base1_skolem.smt2 deleted file mode 100644 index 5ff48d09d..000000000 --- a/bench/skolems/tramway_e7_1834_e7_2363_base1_skolem.smt2 +++ /dev/null @@ -1,79 +0,0 @@ -(declare-fun $~flatten0$2 () Bool) -(declare-fun $V276_X$2 () Bool) -(declare-fun $V274_X$2 () Bool) -(declare-fun $V61_close_door$2 () Bool) -(declare-fun $V273_X$2 () Bool) -(declare-fun $V60_open_door$2 () Bool) -(declare-fun $V271_warning_start_only_in_station$2 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$2 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$2 - () - Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$2 - () - Bool) -(declare-fun $V268_door_initially_closed$2 () Bool) -(declare-fun $door_is_open$0 () Bool) -(declare-fun $in_station$0 () Bool) -(declare-fun $V253_between_A_and_X$2 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $V59_prop_ok$2 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$2 () Bool) -(declare-fun $V252_X$~1 () Bool) -(declare-fun $V276_X$~1 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$2 () Bool) -(declare-fun $V264_env_ok$2 () Bool) -(declare-fun $V275_X$2 () Bool) -(declare-fun $V252_X$2 () Bool) -(declare-fun $V58_env_always_ok$2 () Bool) -(declare-fun $V275_X$~1 () Bool) -(declare-fun $V269_initially_not_in_station$2 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$2 () Bool) -(declare-fun $warning_start$0 () Bool) - -(assert (let ((a!1 (not (and (not $door_is_open$0) - (not $in_station$0) - (or (not $warning_start$0) $in_station$0)))) - (a!2 (= (ite true false (or (not $in_station$0) (not $V275_X$~1))) - (ite true false (or (not $warning_start$0) (not $V276_X$~1))))) - (a!4 (or false (ite true false (or (not $in_station$0) (not $V252_X$~1)))))) -(let ((a!3 (and true - (not $in_station$0) - true - (not $door_is_open$0) - a!2 - (or $in_station$0 (not $warning_start$0)))) - (a!6 (= $V59_prop_ok$2 - (and (or $in_station$0 (not $door_is_open$0)) (not a!4))))) -(let ((a!5 (or (not a!3) - (and (or $in_station$0 (not $door_is_open$0)) (not a!4))))) -(let ((a!7 (and (= $OK$2 a!5) - (= $V58_env_always_ok$2 a!3) - a!6 - (= $V264_env_ok$2 a!3) - (= $V250_door_doesnt_open_out_of_station$2 - (or $in_station$0 (not $door_is_open$0))) - (= $V251_door_opens_before_leaving_station$2 (not a!4)) - (= $V253_between_A_and_X$2 false) - (= $V252_X$2 (not $in_station$0)) - (= $V266_door_doesnt_open_if_not_asked$2 true) - (= $V265_door_doesnt_close_if_not_asked$2 true) - (= $V267_tramway_doesnt_start_if_not_door_ok$2 true) - (= $V268_door_initially_closed$2 (not $door_is_open$0)) - (= $V269_initially_not_in_station$2 (not $in_station$0)) - (= $V270_warning_start_and_in_station_go_down_simultaneously$2 - a!2) - (= $V271_warning_start_only_in_station$2 - (or $in_station$0 (not $warning_start$0))) - (= $V272_warning_start_cant_become_true_when_door_is_opening$2 - true) - (= $V60_open_door$2 true) - (= $V273_X$2 (not $door_is_open$0)) - (= $V61_close_door$2 true) - (= $V274_X$2 (not $in_station$0)) - (= $V275_X$2 (not $in_station$0)) - (= $V276_X$2 (not $warning_start$0)) - (= $~flatten0$2 false)))) - (ite (or a!1 (not $door_is_open$0) $in_station$0) a!7 true)))))) -(check-sat) diff --git a/bench/skolems/tramway_e7_1834_e7_2363_base2_skolem.smt2 b/bench/skolems/tramway_e7_1834_e7_2363_base2_skolem.smt2 deleted file mode 100644 index ea4c66c07..000000000 --- a/bench/skolems/tramway_e7_1834_e7_2363_base2_skolem.smt2 +++ /dev/null @@ -1,108 +0,0 @@ -(declare-fun $~flatten0$3 () Bool) -(declare-fun $V273_X$3 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$3 - () - Bool) -(declare-fun $V271_warning_start_only_in_station$3 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$3 - () - Bool) -(declare-fun $V274_X$3 () Bool) -(declare-fun $V268_door_initially_closed$3 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$3 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$3 () Bool) -(declare-fun $V60_open_door$3 () Bool) -(declare-fun $V253_between_A_and_X$3 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$3 () Bool) -(declare-fun $V264_env_ok$3 () Bool) -(declare-fun $V252_X$0 () Bool) -(declare-fun $V58_env_always_ok$3 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$3 () Bool) -(declare-fun $V252_X$3 () Bool) -(declare-fun $request_door$0 () Bool) -(declare-fun $OK$3 () Bool) -(declare-fun $V62_door_ok$0 () Bool) -(declare-fun $V253_between_A_and_X$0 () Bool) -(declare-fun $V59_prop_ok$3 () Bool) -(declare-fun $warning_start$0 () Bool) -(declare-fun $V276_X$0 () Bool) -(declare-fun $warning_start$1 () Bool) -(declare-fun $V61_close_door$3 () Bool) -(declare-fun $V269_initially_not_in_station$3 () Bool) -(declare-fun $V275_X$0 () Bool) -(declare-fun $V58_env_always_ok$0 () Bool) -(declare-fun $door_is_open$0 () Bool) -(declare-fun $V276_X$3 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$3 () Bool) -(declare-fun $in_station$1 () Bool) -(declare-fun $V273_X$0 () Bool) -(declare-fun $~flatten0$0 () Bool) -(declare-fun $V274_X$0 () Bool) -(declare-fun $V275_X$3 () Bool) -(declare-fun $door_is_open$1 () Bool) - -(assert (let ((a!1 (or (not (or (not $in_station$1) (not $V274_X$0))) $V62_door_ok$0)) - (a!3 (not (or (and $request_door$0 (not $warning_start$0)) - (and (not $~flatten0$0) $V253_between_A_and_X$0) - (not $in_station$1) - (not $V252_X$0)))) - (a!5 (or false (not (or (not $door_is_open$1) (not $V273_X$0))))) - (a!6 (or $V62_door_ok$0 (not (or (not $in_station$1) (not $V274_X$0))))) - (a!7 (= (ite false false (or (not $in_station$1) (not $V275_X$0))) - (ite false false (or (not $warning_start$1) (not $V276_X$0))))) - (a!8 (or (not (or $warning_start$1 (not $warning_start$0))) (not true))) - (a!10 (ite (and (not $warning_start$0) $request_door$0) - true - (ite (ite false false $~flatten0$0) - false - $V253_between_A_and_X$0)))) -(let ((a!2 (and (not (or (not $door_is_open$1) (not $V273_X$0))) - a!1 - (= (or (not $in_station$1) (not $V275_X$0)) - (or (not $warning_start$1) (not $V276_X$0))) - (or (not $warning_start$1) $in_station$1) - (not (or $warning_start$1 (not $warning_start$0))) - $V58_env_always_ok$0)) - (a!9 (and true - true - true - a!5 - a!6 - a!7 - (or $in_station$1 (not $warning_start$1)) - a!8)) - (a!11 (or a!10 (ite false false (or (not $in_station$1) (not $V252_X$0)))))) -(let ((a!4 (or (not a!2) (and (or (not $door_is_open$1) $in_station$1) a!3))) - (a!12 (or (not (and $V58_env_always_ok$0 a!9)) - (and (or $in_station$1 (not $door_is_open$1)) (not a!11)))) - (a!13 (= $V59_prop_ok$3 - (and (or $in_station$1 (not $door_is_open$1)) (not a!11))))) -(let ((a!14 (and (= $OK$3 a!12) - (= $V58_env_always_ok$3 (and $V58_env_always_ok$0 a!9)) - a!13 - (= $V264_env_ok$3 a!9) - (= $V250_door_doesnt_open_out_of_station$3 - (or $in_station$1 (not $door_is_open$1))) - (= $V251_door_opens_before_leaving_station$3 (not a!11)) - (= $V253_between_A_and_X$3 a!10) - (= $V252_X$3 (not $in_station$1)) - (= $V266_door_doesnt_open_if_not_asked$3 a!5) - (= $V265_door_doesnt_close_if_not_asked$3 true) - (= $V267_tramway_doesnt_start_if_not_door_ok$3 a!6) - (= $V268_door_initially_closed$3 true) - (= $V269_initially_not_in_station$3 true) - (= $V270_warning_start_and_in_station_go_down_simultaneously$3 - a!7) - (= $V271_warning_start_only_in_station$3 - (or $in_station$1 (not $warning_start$1))) - (= $V272_warning_start_cant_become_true_when_door_is_opening$3 - a!8) - (= $V60_open_door$3 true) - (= $V273_X$3 (not $door_is_open$1)) - (= $V61_close_door$3 false) - (= $V274_X$3 (not $in_station$1)) - (= $V275_X$3 (not $in_station$1)) - (= $V276_X$3 (not $warning_start$1)) - (= $~flatten0$3 $door_is_open$0)))) - (ite a!4 a!14 true)))))) -(check-sat) diff --git a/bench/skolems/tramway_e7_1834_e7_2363_base3_skolem.smt2 b/bench/skolems/tramway_e7_1834_e7_2363_base3_skolem.smt2 deleted file mode 100644 index 96819db79..000000000 --- a/bench/skolems/tramway_e7_1834_e7_2363_base3_skolem.smt2 +++ /dev/null @@ -1,108 +0,0 @@ -(declare-fun $door_is_open$1 () Bool) -(declare-fun $V275_X$4 () Bool) -(declare-fun $V274_X$4 () Bool) -(declare-fun $~flatten0$4 () Bool) -(declare-fun $V273_X$4 () Bool) -(declare-fun $V60_open_door$4 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$4 - () - Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$4 - () - Bool) -(declare-fun $V269_initially_not_in_station$4 () Bool) -(declare-fun $V268_door_initially_closed$4 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$4 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$4 () Bool) -(declare-fun $V264_env_ok$4 () Bool) -(declare-fun $V276_X$4 () Bool) -(declare-fun $V59_prop_ok$4 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$4 () Bool) -(declare-fun $OK$4 () Bool) -(declare-fun $~flatten0$1 () Bool) -(declare-fun $V252_X$4 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$4 () Bool) -(declare-fun $warning_start$1 () Bool) -(declare-fun $V252_X$1 () Bool) -(declare-fun $V253_between_A_and_X$1 () Bool) -(declare-fun $V61_close_door$4 () Bool) -(declare-fun $door_is_open$2 () Bool) -(declare-fun $V62_door_ok$1 () Bool) -(declare-fun $V58_env_always_ok$1 () Bool) -(declare-fun $V274_X$1 () Bool) -(declare-fun $V275_X$1 () Bool) -(declare-fun $warning_start$2 () Bool) -(declare-fun $in_station$2 () Bool) -(declare-fun $V253_between_A_and_X$4 () Bool) -(declare-fun $V271_warning_start_only_in_station$4 () Bool) -(declare-fun $V58_env_always_ok$4 () Bool) -(declare-fun $V276_X$1 () Bool) -(declare-fun $V273_X$1 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$4 () Bool) -(declare-fun $request_door$1 () Bool) - -(assert (let ((a!1 (or (not (or (not $in_station$2) (not $V274_X$1))) $V62_door_ok$1)) - (a!3 (not (or (and $request_door$1 (not $warning_start$1)) - (and (not $~flatten0$1) $V253_between_A_and_X$1) - (not $in_station$2) - (not $V252_X$1)))) - (a!5 (or false (not (or (not $door_is_open$2) (not $V273_X$1))))) - (a!6 (or $V62_door_ok$1 (not (or (not $in_station$2) (not $V274_X$1))))) - (a!7 (= (ite false false (or (not $in_station$2) (not $V275_X$1))) - (ite false false (or (not $warning_start$2) (not $V276_X$1))))) - (a!8 (or (not (or $warning_start$2 (not $warning_start$1))) (not true))) - (a!10 (ite (and (not $warning_start$1) $request_door$1) - true - (ite (ite false false $~flatten0$1) - false - $V253_between_A_and_X$1)))) -(let ((a!2 (and (not (or (not $door_is_open$2) (not $V273_X$1))) - a!1 - (= (or (not $in_station$2) (not $V275_X$1)) - (or (not $warning_start$2) (not $V276_X$1))) - (or (not $warning_start$2) $in_station$2) - (not (or $warning_start$2 (not $warning_start$1))) - $V58_env_always_ok$1)) - (a!9 (and true - true - true - a!5 - a!6 - a!7 - (or $in_station$2 (not $warning_start$2)) - a!8)) - (a!11 (or a!10 (ite false false (or (not $in_station$2) (not $V252_X$1)))))) -(let ((a!4 (or (not a!2) (and (or (not $door_is_open$2) $in_station$2) a!3))) - (a!12 (or (not (and $V58_env_always_ok$1 a!9)) - (and (or $in_station$2 (not $door_is_open$2)) (not a!11)))) - (a!13 (= $V59_prop_ok$4 - (and (or $in_station$2 (not $door_is_open$2)) (not a!11))))) -(let ((a!14 (and (= $OK$4 a!12) - (= $V58_env_always_ok$4 (and $V58_env_always_ok$1 a!9)) - a!13 - (= $V264_env_ok$4 a!9) - (= $V250_door_doesnt_open_out_of_station$4 - (or $in_station$2 (not $door_is_open$2))) - (= $V251_door_opens_before_leaving_station$4 (not a!11)) - (= $V253_between_A_and_X$4 a!10) - (= $V252_X$4 (not $in_station$2)) - (= $V266_door_doesnt_open_if_not_asked$4 a!5) - (= $V265_door_doesnt_close_if_not_asked$4 true) - (= $V267_tramway_doesnt_start_if_not_door_ok$4 a!6) - (= $V268_door_initially_closed$4 true) - (= $V269_initially_not_in_station$4 true) - (= $V270_warning_start_and_in_station_go_down_simultaneously$4 - a!7) - (= $V271_warning_start_only_in_station$4 - (or $in_station$2 (not $warning_start$2))) - (= $V272_warning_start_cant_become_true_when_door_is_opening$4 - a!8) - (= $V60_open_door$4 true) - (= $V273_X$4 (not $door_is_open$2)) - (= $V61_close_door$4 false) - (= $V274_X$4 (not $in_station$2)) - (= $V275_X$4 (not $in_station$2)) - (= $V276_X$4 (not $warning_start$2)) - (= $~flatten0$4 $door_is_open$1)))) - (ite a!4 a!14 true)))))) -(check-sat) diff --git a/bench/skolems/tramway_e7_1834_e7_2363_base4_skolem.smt2 b/bench/skolems/tramway_e7_1834_e7_2363_base4_skolem.smt2 deleted file mode 100644 index 167346bd0..000000000 --- a/bench/skolems/tramway_e7_1834_e7_2363_base4_skolem.smt2 +++ /dev/null @@ -1,108 +0,0 @@ -(declare-fun $~flatten0$5 () Bool) -(declare-fun $V275_X$5 () Bool) -(declare-fun $V61_close_door$5 () Bool) -(declare-fun $V268_door_initially_closed$5 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$5 () Bool) -(declare-fun $V271_warning_start_only_in_station$5 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$5 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$5 - () - Bool) -(declare-fun $V253_between_A_and_X$5 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$5 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$5 () Bool) -(declare-fun $V264_env_ok$5 () Bool) -(declare-fun $OK$5 () Bool) -(declare-fun $V269_initially_not_in_station$5 () Bool) -(declare-fun $V252_X$2 () Bool) -(declare-fun $~flatten0$2 () Bool) -(declare-fun $V276_X$2 () Bool) -(declare-fun $V273_X$2 () Bool) -(declare-fun $V252_X$5 () Bool) -(declare-fun $V60_open_door$5 () Bool) -(declare-fun $warning_start$3 () Bool) -(declare-fun $V59_prop_ok$5 () Bool) -(declare-fun $V275_X$2 () Bool) -(declare-fun $V276_X$5 () Bool) -(declare-fun $V274_X$5 () Bool) -(declare-fun $V62_door_ok$2 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$5 - () - Bool) -(declare-fun $request_door$2 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$5 () Bool) -(declare-fun $V253_between_A_and_X$2 () Bool) -(declare-fun $door_is_open$3 () Bool) -(declare-fun $in_station$3 () Bool) -(declare-fun $V274_X$2 () Bool) -(declare-fun $V58_env_always_ok$2 () Bool) -(declare-fun $door_is_open$2 () Bool) -(declare-fun $V273_X$5 () Bool) -(declare-fun $V58_env_always_ok$5 () Bool) -(declare-fun $warning_start$2 () Bool) - -(assert (let ((a!1 (or (not (or (not $in_station$3) (not $V274_X$2))) $V62_door_ok$2)) - (a!3 (not (or (and $request_door$2 (not $warning_start$2)) - (and (not $~flatten0$2) $V253_between_A_and_X$2) - (not $in_station$3) - (not $V252_X$2)))) - (a!5 (or false (not (or (not $door_is_open$3) (not $V273_X$2))))) - (a!6 (or $V62_door_ok$2 (not (or (not $in_station$3) (not $V274_X$2))))) - (a!7 (= (ite false false (or (not $in_station$3) (not $V275_X$2))) - (ite false false (or (not $warning_start$3) (not $V276_X$2))))) - (a!8 (or (not (or $warning_start$3 (not $warning_start$2))) (not true))) - (a!10 (ite (and (not $warning_start$2) $request_door$2) - true - (ite (ite false false $~flatten0$2) - false - $V253_between_A_and_X$2)))) -(let ((a!2 (and (not (or (not $door_is_open$3) (not $V273_X$2))) - a!1 - (= (or (not $in_station$3) (not $V275_X$2)) - (or (not $warning_start$3) (not $V276_X$2))) - (or (not $warning_start$3) $in_station$3) - (not (or $warning_start$3 (not $warning_start$2))) - $V58_env_always_ok$2)) - (a!9 (and true - true - true - a!5 - a!6 - a!7 - (or $in_station$3 (not $warning_start$3)) - a!8)) - (a!11 (or a!10 (ite false false (or (not $in_station$3) (not $V252_X$2)))))) -(let ((a!4 (or (not a!2) (and (or (not $door_is_open$3) $in_station$3) a!3))) - (a!12 (or (not (and $V58_env_always_ok$2 a!9)) - (and (or $in_station$3 (not $door_is_open$3)) (not a!11)))) - (a!13 (= $V59_prop_ok$5 - (and (or $in_station$3 (not $door_is_open$3)) (not a!11))))) -(let ((a!14 (and (= $OK$5 a!12) - (= $V58_env_always_ok$5 (and $V58_env_always_ok$2 a!9)) - a!13 - (= $V264_env_ok$5 a!9) - (= $V250_door_doesnt_open_out_of_station$5 - (or $in_station$3 (not $door_is_open$3))) - (= $V251_door_opens_before_leaving_station$5 (not a!11)) - (= $V253_between_A_and_X$5 a!10) - (= $V252_X$5 (not $in_station$3)) - (= $V266_door_doesnt_open_if_not_asked$5 a!5) - (= $V265_door_doesnt_close_if_not_asked$5 true) - (= $V267_tramway_doesnt_start_if_not_door_ok$5 a!6) - (= $V268_door_initially_closed$5 true) - (= $V269_initially_not_in_station$5 true) - (= $V270_warning_start_and_in_station_go_down_simultaneously$5 - a!7) - (= $V271_warning_start_only_in_station$5 - (or $in_station$3 (not $warning_start$3))) - (= $V272_warning_start_cant_become_true_when_door_is_opening$5 - a!8) - (= $V60_open_door$5 true) - (= $V273_X$5 (not $door_is_open$3)) - (= $V61_close_door$5 false) - (= $V274_X$5 (not $in_station$3)) - (= $V275_X$5 (not $in_station$3)) - (= $V276_X$5 (not $warning_start$3)) - (= $~flatten0$5 $door_is_open$2)))) - (ite a!4 a!14 true)))))) -(check-sat) diff --git a/bench/skolems/tramway_e7_1834_e7_2363_extend_skolem.smt2 b/bench/skolems/tramway_e7_1834_e7_2363_extend_skolem.smt2 deleted file mode 100644 index 7bb5c88f2..000000000 --- a/bench/skolems/tramway_e7_1834_e7_2363_extend_skolem.smt2 +++ /dev/null @@ -1,215 +0,0 @@ -(declare-fun $door_is_open$~1 () Bool) -(declare-fun $V276_X$2 () Bool) -(declare-fun $V275_X$2 () Bool) -(declare-fun $V274_X$2 () Bool) -(declare-fun $V61_close_door$2 () Bool) -(declare-fun $V273_X$2 () Bool) -(declare-fun $V271_warning_start_only_in_station$2 () Bool) -(declare-fun $V268_door_initially_closed$2 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$2 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$2 - () - Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$2 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$2 () Bool) -(declare-fun $V275_X$~1 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$2 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$2 () Bool) -(declare-fun $V264_env_ok$2 () Bool) -(declare-fun $V58_env_always_ok$2 () Bool) -(declare-fun $V269_initially_not_in_station$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$2 - () - Bool) -(declare-fun $V253_between_A_and_X$2 () Bool) -(declare-fun $request_door$~1 () Bool) -(declare-fun $V60_open_door$2 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $V276_X$~1 () Bool) -(declare-fun $warning_start$0 () Bool) -(declare-fun $door_is_open$0 () Bool) -(declare-fun $warning_start$~1 () Bool) -(declare-fun $V58_env_always_ok$~1 () Bool) -(declare-fun $V253_between_A_and_X$~1 () Bool) -(declare-fun $V273_X$~1 () Bool) -(declare-fun $V252_X$~1 () Bool) -(declare-fun $V252_X$2 () Bool) -(declare-fun $V62_door_ok$~1 () Bool) -(declare-fun $~flatten0$2 () Bool) -(declare-fun $V59_prop_ok$2 () Bool) -(declare-fun %init () Bool) -(declare-fun $V274_X$~1 () Bool) -(declare-fun $in_station$0 () Bool) - -(assert (let ((a!1 (not (and (not %init) (or (not $door_is_open$0) (not $V273_X$~1))))) - (a!2 (not (and (not %init) (or (not $in_station$0) (not $V274_X$~1))))) - (a!3 (= (and (not %init) (or (not $in_station$0) (not $V275_X$~1))) - (and (not %init) (or (not $warning_start$0) (not $V276_X$~1))))) - (a!4 (not (and (not %init) (or $warning_start$0 (not $warning_start$~1))))) - (a!7 (and (not (and (not %init) $~flatten0$~1)) - (not %init) - $V253_between_A_and_X$~1)) - (a!10 (not (ite true false (or (not $door_is_open$0) (not $V273_X$~1))))) - (a!11 (not (ite true false (or (not $in_station$0) (not $V274_X$~1))))) - (a!12 (= (ite true false (or (not $in_station$0) (not $V275_X$~1))) - (ite true false (or (not $warning_start$0) (not $V276_X$~1))))) - (a!13 (not (ite true false (or $warning_start$0 (not $warning_start$~1))))) - (a!14 (not (ite %init false (or (not $door_is_open$0) (not $V273_X$~1))))) - (a!15 (not (ite %init false (or (not $in_station$0) (not $V274_X$~1))))) - (a!16 (= (ite %init false (or (not $in_station$0) (not $V275_X$~1))) - (ite %init false (or (not $warning_start$0) (not $V276_X$~1))))) - (a!17 (not (ite %init false (or $warning_start$0 (not $warning_start$~1))))) - (a!20 (ite (ite %init - false - (and $request_door$~1 (not $warning_start$~1))) - true - (ite (ite %init false $~flatten0$~1) - false - (ite %init false $V253_between_A_and_X$~1)))) - (a!25 (not (and (not %init) (or $door_is_open$0 (not $door_is_open$~1))))) - (a!29 (not (ite true false (or $door_is_open$0 (not $door_is_open$~1))))) - (a!30 (not (ite %init false (or $door_is_open$0 (not $door_is_open$~1)))))) -(let ((a!5 (and a!1 - (or a!2 (and (not %init) $V62_door_ok$~1)) - (or (not %init) (not $door_is_open$0)) - (or (not %init) (not $in_station$0)) - a!3 - (or (not $warning_start$0) $in_station$0) - a!4)) - (a!6 (and a!1 - (or a!2 (and (not %init) $V62_door_ok$~1)) - (or (not %init) (not $door_is_open$0)) - (or (not %init) (not $in_station$0)) - a!3 - (or (not $warning_start$0) $in_station$0) - a!4 - $V58_env_always_ok$~1)) - (a!8 (or (and (not %init) $request_door$~1 (not $warning_start$~1)) - a!7 - (and (not %init) (or (not $in_station$0) (not $V252_X$~1))))) - (a!18 (and (ite %init (not $in_station$0) true) - (ite %init (not $door_is_open$0) true) - true - (or false a!14) - (or (ite %init false $V62_door_ok$~1) a!15) - a!16 - (or $in_station$0 (not $warning_start$0)) - (or a!17 (not true)))) - (a!21 (or a!20 - (ite %init false (or (not $in_station$0) (not $V252_X$~1))))) - (a!26 (and a!1 - a!25 - (or a!2 (and (not %init) $V62_door_ok$~1)) - (or (not %init) (not $door_is_open$0)) - (or (not %init) (not $in_station$0)) - a!3 - (or (not $warning_start$0) $in_station$0))) - (a!27 (and a!1 - a!25 - (or a!2 (and (not %init) $V62_door_ok$~1)) - (or (not %init) (not $door_is_open$0)) - (or (not %init) (not $in_station$0)) - a!3 - (or (not $warning_start$0) $in_station$0) - $V58_env_always_ok$~1)) - (a!31 (and (or $in_station$0 (not $warning_start$0)) - a!16 - (ite %init (not $in_station$0) true) - (ite %init (not $door_is_open$0) true) - (or (ite %init false $V62_door_ok$~1) a!15) - (or false a!14) - (or false a!30) - (or a!17 (not false))))) -(let ((a!9 (or (not (ite %init a!5 a!6)) - (and (or (not $door_is_open$0) $in_station$0) (not a!8)))) - (a!19 (ite %init - (and (ite true (not $in_station$0) true) - (ite true (not $door_is_open$0) true) - true - (or false a!10) - (or (ite true false $V62_door_ok$~1) a!11) - a!12 - (or $in_station$0 (not $warning_start$0)) - (or a!13 (not true))) - (and a!18 $V58_env_always_ok$~1))) - (a!23 (= $V59_prop_ok$2 - (and (or $in_station$0 (not $door_is_open$0)) (not a!21)))) - (a!28 (or (not (ite %init a!26 a!27)) - (and (or (not $door_is_open$0) $in_station$0) (not a!8)))) - (a!32 (ite %init - (and (or $in_station$0 (not $warning_start$0)) - a!12 - (ite true (not $in_station$0) true) - (ite true (not $door_is_open$0) true) - (or (ite true false $V62_door_ok$~1) a!11) - (or false a!10) - (or false a!29) - (or a!13 (not false))) - (and a!31 $V58_env_always_ok$~1)))) -(let ((a!22 (or (not a!19) - (and (or $in_station$0 (not $door_is_open$0)) (not a!21)))) - (a!33 (or (and (or $in_station$0 (not $door_is_open$0)) (not a!21)) - (not a!32)))) -(let ((a!24 (and (= $OK$2 a!22) - (= $V58_env_always_ok$2 a!19) - a!23 - (= $V264_env_ok$2 a!18) - (= $V250_door_doesnt_open_out_of_station$2 - (or $in_station$0 (not $door_is_open$0))) - (= $V251_door_opens_before_leaving_station$2 (not a!21)) - (= $V253_between_A_and_X$2 a!20) - (= $V252_X$2 (not $in_station$0)) - (= $V266_door_doesnt_open_if_not_asked$2 (or false a!14)) - (= $V265_door_doesnt_close_if_not_asked$2 true) - (= $V267_tramway_doesnt_start_if_not_door_ok$2 - (or (ite %init false $V62_door_ok$~1) a!15)) - (= $V268_door_initially_closed$2 - (ite %init (not $door_is_open$0) true)) - (= $V269_initially_not_in_station$2 - (ite %init (not $in_station$0) true)) - (= $V270_warning_start_and_in_station_go_down_simultaneously$2 - a!16) - (= $V271_warning_start_only_in_station$2 - (or $in_station$0 (not $warning_start$0))) - (= $V272_warning_start_cant_become_true_when_door_is_opening$2 - (or a!17 (not true))) - (= $V60_open_door$2 true) - (= $V273_X$2 (not $door_is_open$0)) - (= $V61_close_door$2 false) - (= $V274_X$2 (not $in_station$0)) - (= $V275_X$2 (not $in_station$0)) - (= $V276_X$2 (not $warning_start$0)) - (= $~flatten0$2 (ite %init false $door_is_open$~1)))) - (a!34 (and (= $OK$2 a!33) - (= $V58_env_always_ok$2 a!32) - a!23 - (= $V264_env_ok$2 a!31) - (= $V250_door_doesnt_open_out_of_station$2 - (or $in_station$0 (not $door_is_open$0))) - (= $V251_door_opens_before_leaving_station$2 (not a!21)) - (= $V253_between_A_and_X$2 a!20) - (= $V252_X$2 (not $in_station$0)) - (= $V266_door_doesnt_open_if_not_asked$2 (or false a!14)) - (= $V265_door_doesnt_close_if_not_asked$2 (or false a!30)) - (= $V267_tramway_doesnt_start_if_not_door_ok$2 - (or (ite %init false $V62_door_ok$~1) a!15)) - (= $V268_door_initially_closed$2 - (ite %init (not $door_is_open$0) true)) - (= $V269_initially_not_in_station$2 - (ite %init (not $in_station$0) true)) - (= $V270_warning_start_and_in_station_go_down_simultaneously$2 - a!16) - (= $V271_warning_start_only_in_station$2 - (or $in_station$0 (not $warning_start$0))) - (= $V272_warning_start_cant_become_true_when_door_is_opening$2 - (or a!17 (not false))) - (= $V60_open_door$2 false) - (= $V273_X$2 (not $door_is_open$0)) - (= $V61_close_door$2 false) - (= $V274_X$2 (not $in_station$0)) - (= $V275_X$2 (not $in_station$0)) - (= $V276_X$2 (not $warning_start$0)) - (= $~flatten0$2 (ite %init false $door_is_open$~1))))) - (ite a!9 a!24 (ite a!28 a!34 true)))))))) -(check-sat) diff --git a/bench/skolems/tramway_e7_1834_extend_skolem.smt2 b/bench/skolems/tramway_e7_1834_extend_skolem.smt2 deleted file mode 100644 index 979b5a301..000000000 --- a/bench/skolems/tramway_e7_1834_extend_skolem.smt2 +++ /dev/null @@ -1,216 +0,0 @@ -(declare-fun $door_is_open$~1 () Bool) -(declare-fun $~flatten0$2 () Bool) -(declare-fun $V276_X$2 () Bool) -(declare-fun $V275_X$2 () Bool) -(declare-fun $V274_X$2 () Bool) -(declare-fun $V60_open_door$2 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$2 - () - Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$2 - () - Bool) -(declare-fun $V269_initially_not_in_station$2 () Bool) -(declare-fun $V268_door_initially_closed$2 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$2 () Bool) -(declare-fun $warning_start$0 () Bool) -(declare-fun $V59_prop_ok$2 () Bool) -(declare-fun $V252_X$2 () Bool) -(declare-fun $V61_close_door$2 () Bool) -(declare-fun $V253_between_A_and_X$2 () Bool) -(declare-fun $V273_X$~1 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$2 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$2 () Bool) -(declare-fun $V253_between_A_and_X$~1 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$2 () Bool) -(declare-fun $V276_X$~1 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $V264_env_ok$2 () Bool) -(declare-fun $V273_X$2 () Bool) -(declare-fun $door_is_open$0 () Bool) -(declare-fun $request_door$~1 () Bool) -(declare-fun $V275_X$~1 () Bool) -(declare-fun $V62_door_ok$~1 () Bool) -(declare-fun $V58_env_always_ok$~1 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$2 () Bool) -(declare-fun $warning_start$~1 () Bool) -(declare-fun $V274_X$~1 () Bool) -(declare-fun $V58_env_always_ok$2 () Bool) -(declare-fun $V271_warning_start_only_in_station$2 () Bool) -(declare-fun $V252_X$~1 () Bool) -(declare-fun %init () Bool) -(declare-fun $in_station$0 () Bool) - -(assert (let ((a!1 (not (and (not %init) (or (not $door_is_open$0) (not $V273_X$~1))))) - (a!2 (not (and (not %init) (or (not $in_station$0) (not $V274_X$~1))))) - (a!3 (= (and (not %init) (or (not $in_station$0) (not $V275_X$~1))) - (and (not %init) (or (not $warning_start$0) (not $V276_X$~1))))) - (a!4 (not (and (not %init) (or $warning_start$0 (not $warning_start$~1))))) - (a!7 (and (not (and (not %init) $~flatten0$~1)) - (not %init) - $V253_between_A_and_X$~1)) - (a!10 (not (ite true false (or (not $door_is_open$0) (not $V273_X$~1))))) - (a!11 (not (ite true false (or (not $in_station$0) (not $V274_X$~1))))) - (a!12 (= (ite true false (or (not $in_station$0) (not $V275_X$~1))) - (ite true false (or (not $warning_start$0) (not $V276_X$~1))))) - (a!13 (not (ite true false (or $warning_start$0 (not $warning_start$~1))))) - (a!14 (not (ite %init false (or (not $door_is_open$0) (not $V273_X$~1))))) - (a!15 (not (ite %init false (or (not $in_station$0) (not $V274_X$~1))))) - (a!16 (= (ite %init false (or (not $in_station$0) (not $V275_X$~1))) - (ite %init false (or (not $warning_start$0) (not $V276_X$~1))))) - (a!17 (not (ite %init false (or $warning_start$0 (not $warning_start$~1))))) - (a!20 (ite (ite %init - false - (and $request_door$~1 (not $warning_start$~1))) - true - (ite (ite %init false $~flatten0$~1) - false - (ite %init false $V253_between_A_and_X$~1)))) - (a!25 (not (and (not %init) (or $door_is_open$0 (not $door_is_open$~1))))) - (a!29 (not (ite true false (or $door_is_open$0 (not $door_is_open$~1))))) - (a!30 (not (ite %init false (or $door_is_open$0 (not $door_is_open$~1)))))) -(let ((a!5 (and a!1 - (or a!2 (and (not %init) $V62_door_ok$~1)) - (or (not %init) (not $door_is_open$0)) - (or (not %init) (not $in_station$0)) - a!3 - (or (not $warning_start$0) $in_station$0) - a!4)) - (a!6 (and a!1 - (or a!2 (and (not %init) $V62_door_ok$~1)) - (or (not %init) (not $door_is_open$0)) - (or (not %init) (not $in_station$0)) - a!3 - (or (not $warning_start$0) $in_station$0) - a!4 - $V58_env_always_ok$~1)) - (a!8 (and (or (and (not %init) $request_door$~1 (not $warning_start$~1)) - a!7) - (not %init) - (or (not $in_station$0) (not $V252_X$~1)))) - (a!18 (and (ite %init (not $in_station$0) true) - (ite %init (not $door_is_open$0) true) - true - (or false a!14) - (or (ite %init false $V62_door_ok$~1) a!15) - a!16 - (or $in_station$0 (not $warning_start$0)) - (or a!17 (not true)))) - (a!21 (and a!20 - (ite %init false (or (not $in_station$0) (not $V252_X$~1))))) - (a!26 (and a!1 - a!25 - (or a!2 (and (not %init) $V62_door_ok$~1)) - (or (not %init) (not $door_is_open$0)) - (or (not %init) (not $in_station$0)) - a!3 - (or (not $warning_start$0) $in_station$0))) - (a!27 (and a!1 - a!25 - (or a!2 (and (not %init) $V62_door_ok$~1)) - (or (not %init) (not $door_is_open$0)) - (or (not %init) (not $in_station$0)) - a!3 - (or (not $warning_start$0) $in_station$0) - $V58_env_always_ok$~1)) - (a!31 (and (or $in_station$0 (not $warning_start$0)) - a!16 - (ite %init (not $in_station$0) true) - (ite %init (not $door_is_open$0) true) - (or (ite %init false $V62_door_ok$~1) a!15) - (or false a!14) - (or false a!30) - (or a!17 (not false))))) -(let ((a!9 (or (not (ite %init a!5 a!6)) - (and (or (not $door_is_open$0) $in_station$0) (not a!8)))) - (a!19 (ite %init - (and (ite true (not $in_station$0) true) - (ite true (not $door_is_open$0) true) - true - (or false a!10) - (or (ite true false $V62_door_ok$~1) a!11) - a!12 - (or $in_station$0 (not $warning_start$0)) - (or a!13 (not true))) - (and a!18 $V58_env_always_ok$~1))) - (a!23 (= $V59_prop_ok$2 - (and (or $in_station$0 (not $door_is_open$0)) (not a!21)))) - (a!28 (or (not (ite %init a!26 a!27)) - (and (or (not $door_is_open$0) $in_station$0) (not a!8)))) - (a!32 (ite %init - (and (or $in_station$0 (not $warning_start$0)) - a!12 - (ite true (not $in_station$0) true) - (ite true (not $door_is_open$0) true) - (or (ite true false $V62_door_ok$~1) a!11) - (or false a!10) - (or false a!29) - (or a!13 (not false))) - (and a!31 $V58_env_always_ok$~1)))) -(let ((a!22 (or (not a!19) - (and (or $in_station$0 (not $door_is_open$0)) (not a!21)))) - (a!33 (or (and (or $in_station$0 (not $door_is_open$0)) (not a!21)) - (not a!32)))) -(let ((a!24 (and (= $OK$2 a!22) - (= $V58_env_always_ok$2 a!19) - a!23 - (= $V264_env_ok$2 a!18) - (= $V250_door_doesnt_open_out_of_station$2 - (or $in_station$0 (not $door_is_open$0))) - (= $V251_door_opens_before_leaving_station$2 (not a!21)) - (= $V253_between_A_and_X$2 a!20) - (= $V252_X$2 (not $in_station$0)) - (= $V266_door_doesnt_open_if_not_asked$2 (or false a!14)) - (= $V265_door_doesnt_close_if_not_asked$2 true) - (= $V267_tramway_doesnt_start_if_not_door_ok$2 - (or (ite %init false $V62_door_ok$~1) a!15)) - (= $V268_door_initially_closed$2 - (ite %init (not $door_is_open$0) true)) - (= $V269_initially_not_in_station$2 - (ite %init (not $in_station$0) true)) - (= $V270_warning_start_and_in_station_go_down_simultaneously$2 - a!16) - (= $V271_warning_start_only_in_station$2 - (or $in_station$0 (not $warning_start$0))) - (= $V272_warning_start_cant_become_true_when_door_is_opening$2 - (or a!17 (not true))) - (= $V60_open_door$2 true) - (= $V273_X$2 (not $door_is_open$0)) - (= $V61_close_door$2 false) - (= $V274_X$2 (not $in_station$0)) - (= $V275_X$2 (not $in_station$0)) - (= $V276_X$2 (not $warning_start$0)) - (= $~flatten0$2 (ite %init false $door_is_open$~1)))) - (a!34 (and (= $OK$2 a!33) - (= $V58_env_always_ok$2 a!32) - a!23 - (= $V264_env_ok$2 a!31) - (= $V250_door_doesnt_open_out_of_station$2 - (or $in_station$0 (not $door_is_open$0))) - (= $V251_door_opens_before_leaving_station$2 (not a!21)) - (= $V253_between_A_and_X$2 a!20) - (= $V252_X$2 (not $in_station$0)) - (= $V266_door_doesnt_open_if_not_asked$2 (or false a!14)) - (= $V265_door_doesnt_close_if_not_asked$2 (or false a!30)) - (= $V267_tramway_doesnt_start_if_not_door_ok$2 - (or (ite %init false $V62_door_ok$~1) a!15)) - (= $V268_door_initially_closed$2 - (ite %init (not $door_is_open$0) true)) - (= $V269_initially_not_in_station$2 - (ite %init (not $in_station$0) true)) - (= $V270_warning_start_and_in_station_go_down_simultaneously$2 - a!16) - (= $V271_warning_start_only_in_station$2 - (or $in_station$0 (not $warning_start$0))) - (= $V272_warning_start_cant_become_true_when_door_is_opening$2 - (or a!17 (not false))) - (= $V60_open_door$2 false) - (= $V273_X$2 (not $door_is_open$0)) - (= $V61_close_door$2 false) - (= $V274_X$2 (not $in_station$0)) - (= $V275_X$2 (not $in_station$0)) - (= $V276_X$2 (not $warning_start$0)) - (= $~flatten0$2 (ite %init false $door_is_open$~1))))) - (ite a!9 a!24 (ite a!28 a!34 true)))))))) -(check-sat) diff --git a/bench/tasks/PRODUCER_CONSUMER_2_base_s_part.smt2 b/bench/tasks/PRODUCER_CONSUMER_2_base_s_part.smt2 deleted file mode 100755 index fef2590b9..000000000 --- a/bench/tasks/PRODUCER_CONSUMER_2_base_s_part.smt2 +++ /dev/null @@ -1,25 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($etat1$0 Bool) ($etat2$0 Bool) ($etat3$0 Bool) ($a_init$0 Int) ($V26_i$0 Int) ($OK$0 Bool) ($V31_env$0 Bool) ($V74_X$0 Bool) ($V79_Sofar$0 Bool) ($V87_First$0 Int) ($etat1$1 Bool) ($etat2$1 Bool) ($etat3$1 Bool) ($a_init$1 Int) ($V26_i$1 Int) ($OK$1 Bool) ($V31_env$1 Bool) ($V74_X$1 Bool) ($V79_Sofar$1 Bool) ($V87_First$1 Int)) Bool (and (= $OK$1 (=> $V31_env$1 (>= $V26_i$1 0))) (= $V31_env$1 (and (and $V79_Sofar$1 (ite %init (not $etat1$1) true)) (> $V87_First$1 0))) (= $V74_X$1 (not (and $etat2$1 $etat3$1))) (= $V79_Sofar$1 (ite %init $V74_X$1 (and $V74_X$1 $V79_Sofar$0))) (= $V87_First$1 (ite %init $a_init$1 $V87_First$0)))) -; Universally quantified variables -(declare-fun $etat1$~1 () Bool) -(declare-fun $etat2$~1 () Bool) -(declare-fun $etat3$~1 () Bool) -(declare-fun $a_init$~1 () Int) -(declare-fun $V26_i$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V31_env$~1 () Bool) -(declare-fun $V74_X$~1 () Bool) -(declare-fun $V79_Sofar$~1 () Bool) -(declare-fun $V87_First$~1 () Int) -(declare-fun $etat1$0 () Bool) -(declare-fun $etat2$0 () Bool) -(declare-fun $etat3$0 () Bool) -(declare-fun $a_init$0 () Int) -(declare-fun $V26_i$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V31_env$0 () Bool) -(declare-fun $V74_X$0 () Bool) -(declare-fun $V79_Sofar$0 () Bool) -(declare-fun $V87_First$0 () Int) -(assert (T true $etat1$~1 $etat2$~1 $etat3$~1 $a_init$~1 $V26_i$~1 $OK$~1 $V31_env$~1 $V74_X$~1 $V79_Sofar$~1 $V87_First$~1 $etat1$0 $etat2$0 $etat3$0 $a_init$0 $V26_i$0 $OK$0 $V31_env$0 $V74_X$0 $V79_Sofar$0 $V87_First$0)) diff --git a/bench/tasks/PRODUCER_CONSUMER_2_base_t_part.smt2 b/bench/tasks/PRODUCER_CONSUMER_2_base_t_part.smt2 deleted file mode 100755 index eb9df018e..000000000 --- a/bench/tasks/PRODUCER_CONSUMER_2_base_t_part.smt2 +++ /dev/null @@ -1,25 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($etat1$0 Bool) ($etat2$0 Bool) ($etat3$0 Bool) ($a_init$0 Int) ($V26_i$0 Int) ($OK$0 Bool) ($V31_env$0 Bool) ($V74_X$0 Bool) ($V79_Sofar$0 Bool) ($V87_First$0 Int) ($etat1$1 Bool) ($etat2$1 Bool) ($etat3$1 Bool) ($a_init$1 Int) ($V26_i$1 Int) ($OK$1 Bool) ($V31_env$1 Bool) ($V74_X$1 Bool) ($V79_Sofar$1 Bool) ($V87_First$1 Int)) Bool (and (= $OK$1 (=> $V31_env$1 (>= $V26_i$1 0))) (= $V31_env$1 (and (and $V79_Sofar$1 (ite %init (not $etat1$1) true)) (> $V87_First$1 0))) (= $V74_X$1 (not (and $etat2$1 $etat3$1))) (= $V79_Sofar$1 (ite %init $V74_X$1 (and $V74_X$1 $V79_Sofar$0))) (= $V87_First$1 (ite %init $a_init$1 $V87_First$0)))) -; Universally quantified variables -(declare-fun $etat1$~1 () Bool) -(declare-fun $etat2$~1 () Bool) -(declare-fun $etat3$~1 () Bool) -(declare-fun $a_init$~1 () Int) -(declare-fun $V26_i$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V31_env$~1 () Bool) -(declare-fun $V74_X$~1 () Bool) -(declare-fun $V79_Sofar$~1 () Bool) -(declare-fun $V87_First$~1 () Int) -(declare-fun $etat1$0 () Bool) -(declare-fun $etat2$0 () Bool) -(declare-fun $etat3$0 () Bool) -(declare-fun $a_init$0 () Int) -(declare-fun $V26_i$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V31_env$2 () Bool) -(declare-fun $V74_X$2 () Bool) -(declare-fun $V79_Sofar$2 () Bool) -(declare-fun $V87_First$2 () Int) -(assert (and (T true $etat1$~1 $etat2$~1 $etat3$~1 $a_init$~1 $V26_i$~1 $OK$~1 $V31_env$~1 $V74_X$~1 $V79_Sofar$~1 $V87_First$~1 $etat1$0 $etat2$0 $etat3$0 $a_init$0 $V26_i$2 $OK$2 $V31_env$2 $V74_X$2 $V79_Sofar$2 $V87_First$2) $OK$2)) diff --git a/bench/tasks/PRODUCER_CONSUMER_2_extend_s_part.smt2 b/bench/tasks/PRODUCER_CONSUMER_2_extend_s_part.smt2 deleted file mode 100755 index fd3b62fe4..000000000 --- a/bench/tasks/PRODUCER_CONSUMER_2_extend_s_part.smt2 +++ /dev/null @@ -1,26 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($etat1$0 Bool) ($etat2$0 Bool) ($etat3$0 Bool) ($a_init$0 Int) ($V26_i$0 Int) ($OK$0 Bool) ($V31_env$0 Bool) ($V74_X$0 Bool) ($V79_Sofar$0 Bool) ($V87_First$0 Int) ($etat1$1 Bool) ($etat2$1 Bool) ($etat3$1 Bool) ($a_init$1 Int) ($V26_i$1 Int) ($OK$1 Bool) ($V31_env$1 Bool) ($V74_X$1 Bool) ($V79_Sofar$1 Bool) ($V87_First$1 Int)) Bool (and (= $OK$1 (=> $V31_env$1 (>= $V26_i$1 0))) (= $V31_env$1 (and (and $V79_Sofar$1 (ite %init (not $etat1$1) true)) (> $V87_First$1 0))) (= $V74_X$1 (not (and $etat2$1 $etat3$1))) (= $V79_Sofar$1 (ite %init $V74_X$1 (and $V74_X$1 $V79_Sofar$0))) (= $V87_First$1 (ite %init $a_init$1 $V87_First$0)))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $etat1$~1 () Bool) -(declare-fun $etat2$~1 () Bool) -(declare-fun $etat3$~1 () Bool) -(declare-fun $a_init$~1 () Int) -(declare-fun $V26_i$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V31_env$~1 () Bool) -(declare-fun $V74_X$~1 () Bool) -(declare-fun $V79_Sofar$~1 () Bool) -(declare-fun $V87_First$~1 () Int) -(declare-fun $etat1$0 () Bool) -(declare-fun $etat2$0 () Bool) -(declare-fun $etat3$0 () Bool) -(declare-fun $a_init$0 () Int) -(declare-fun $V26_i$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V31_env$0 () Bool) -(declare-fun $V74_X$0 () Bool) -(declare-fun $V79_Sofar$0 () Bool) -(declare-fun $V87_First$0 () Int) -(assert (T %init $etat1$~1 $etat2$~1 $etat3$~1 $a_init$~1 $V26_i$~1 $OK$~1 $V31_env$~1 $V74_X$~1 $V79_Sofar$~1 $V87_First$~1 $etat1$0 $etat2$0 $etat3$0 $a_init$0 $V26_i$0 $OK$0 $V31_env$0 $V74_X$0 $V79_Sofar$0 $V87_First$0)) diff --git a/bench/tasks/PRODUCER_CONSUMER_2_extend_t_part.smt2 b/bench/tasks/PRODUCER_CONSUMER_2_extend_t_part.smt2 deleted file mode 100755 index 717231b54..000000000 --- a/bench/tasks/PRODUCER_CONSUMER_2_extend_t_part.smt2 +++ /dev/null @@ -1,26 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($etat1$0 Bool) ($etat2$0 Bool) ($etat3$0 Bool) ($a_init$0 Int) ($V26_i$0 Int) ($OK$0 Bool) ($V31_env$0 Bool) ($V74_X$0 Bool) ($V79_Sofar$0 Bool) ($V87_First$0 Int) ($etat1$1 Bool) ($etat2$1 Bool) ($etat3$1 Bool) ($a_init$1 Int) ($V26_i$1 Int) ($OK$1 Bool) ($V31_env$1 Bool) ($V74_X$1 Bool) ($V79_Sofar$1 Bool) ($V87_First$1 Int)) Bool (and (= $OK$1 (=> $V31_env$1 (>= $V26_i$1 0))) (= $V31_env$1 (and (and $V79_Sofar$1 (ite %init (not $etat1$1) true)) (> $V87_First$1 0))) (= $V74_X$1 (not (and $etat2$1 $etat3$1))) (= $V79_Sofar$1 (ite %init $V74_X$1 (and $V74_X$1 $V79_Sofar$0))) (= $V87_First$1 (ite %init $a_init$1 $V87_First$0)))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $etat1$~1 () Bool) -(declare-fun $etat2$~1 () Bool) -(declare-fun $etat3$~1 () Bool) -(declare-fun $a_init$~1 () Int) -(declare-fun $V26_i$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V31_env$~1 () Bool) -(declare-fun $V74_X$~1 () Bool) -(declare-fun $V79_Sofar$~1 () Bool) -(declare-fun $V87_First$~1 () Int) -(declare-fun $etat1$0 () Bool) -(declare-fun $etat2$0 () Bool) -(declare-fun $etat3$0 () Bool) -(declare-fun $a_init$0 () Int) -(declare-fun $V26_i$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V31_env$2 () Bool) -(declare-fun $V74_X$2 () Bool) -(declare-fun $V79_Sofar$2 () Bool) -(declare-fun $V87_First$2 () Int) -(assert (and (T %init $etat1$~1 $etat2$~1 $etat3$~1 $a_init$~1 $V26_i$~1 $OK$~1 $V31_env$~1 $V74_X$~1 $V79_Sofar$~1 $V87_First$~1 $etat1$0 $etat2$0 $etat3$0 $a_init$0 $V26_i$2 $OK$2 $V31_env$2 $V74_X$2 $V79_Sofar$2 $V87_First$2) $OK$2)) diff --git a/bench/tasks/SYNAPSE_2_e8_1118_e7_1043_base_s_part.smt2 b/bench/tasks/SYNAPSE_2_e8_1118_e7_1043_base_s_part.smt2 deleted file mode 100755 index 19576ab31..000000000 --- a/bench/tasks/SYNAPSE_2_e8_1118_e7_1043_base_s_part.smt2 +++ /dev/null @@ -1,25 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($e_s1$0 Bool) ($e_s2$0 Bool) ($e_s3$0 Bool) ($init_invalid_s$0 Int) ($V27_invalid_s$0 Int) ($V28_valid_s$0 Int) ($V29_dirty_s$0 Int) ($OK$0 Bool) ($V31_env$0 Bool) ($V83_X$0 Bool) ($e_s1$1 Bool) ($e_s2$1 Bool) ($e_s3$1 Bool) ($init_invalid_s$1 Int) ($V27_invalid_s$1 Int) ($V28_valid_s$1 Int) ($V29_dirty_s$1 Int) ($OK$1 Bool) ($V31_env$1 Bool) ($V83_X$1 Bool)) Bool (and (= $OK$1 (=> $V31_env$1 (ite %init true (= (+ (+ $V27_invalid_s$1 $V28_valid_s$1) $V29_dirty_s$1) (+ (+ $V27_invalid_s$0 $V28_valid_s$0) $V29_dirty_s$0))))) (= $V31_env$1 (ite %init $V83_X$1 (or $V83_X$1 $V31_env$0))) (= $V83_X$1 (and (not (or (and (and (and $e_s1$1 $e_s2$1) $e_s1$1) $e_s3$1) (and $e_s2$1 $e_s3$1))) (>= $init_invalid_s$1 0))))) -; Universally quantified variables -(declare-fun $e_s1$~1 () Bool) -(declare-fun $e_s2$~1 () Bool) -(declare-fun $e_s3$~1 () Bool) -(declare-fun $init_invalid_s$~1 () Int) -(declare-fun $V27_invalid_s$~1 () Int) -(declare-fun $V28_valid_s$~1 () Int) -(declare-fun $V29_dirty_s$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V31_env$~1 () Bool) -(declare-fun $V83_X$~1 () Bool) -(declare-fun $e_s1$0 () Bool) -(declare-fun $e_s2$0 () Bool) -(declare-fun $e_s3$0 () Bool) -(declare-fun $init_invalid_s$0 () Int) -(declare-fun $V27_invalid_s$0 () Int) -(declare-fun $V28_valid_s$0 () Int) -(declare-fun $V29_dirty_s$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V31_env$0 () Bool) -(declare-fun $V83_X$0 () Bool) -(assert (T true $e_s1$~1 $e_s2$~1 $e_s3$~1 $init_invalid_s$~1 $V27_invalid_s$~1 $V28_valid_s$~1 $V29_dirty_s$~1 $OK$~1 $V31_env$~1 $V83_X$~1 $e_s1$0 $e_s2$0 $e_s3$0 $init_invalid_s$0 $V27_invalid_s$0 $V28_valid_s$0 $V29_dirty_s$0 $OK$0 $V31_env$0 $V83_X$0)) diff --git a/bench/tasks/SYNAPSE_2_e8_1118_e7_1043_base_t_part.smt2 b/bench/tasks/SYNAPSE_2_e8_1118_e7_1043_base_t_part.smt2 deleted file mode 100755 index d4d09383e..000000000 --- a/bench/tasks/SYNAPSE_2_e8_1118_e7_1043_base_t_part.smt2 +++ /dev/null @@ -1,25 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($e_s1$0 Bool) ($e_s2$0 Bool) ($e_s3$0 Bool) ($init_invalid_s$0 Int) ($V27_invalid_s$0 Int) ($V28_valid_s$0 Int) ($V29_dirty_s$0 Int) ($OK$0 Bool) ($V31_env$0 Bool) ($V83_X$0 Bool) ($e_s1$1 Bool) ($e_s2$1 Bool) ($e_s3$1 Bool) ($init_invalid_s$1 Int) ($V27_invalid_s$1 Int) ($V28_valid_s$1 Int) ($V29_dirty_s$1 Int) ($OK$1 Bool) ($V31_env$1 Bool) ($V83_X$1 Bool)) Bool (and (= $OK$1 (=> $V31_env$1 (ite %init true (= (+ (+ $V27_invalid_s$1 $V28_valid_s$1) $V29_dirty_s$1) (+ (+ $V27_invalid_s$0 $V28_valid_s$0) $V29_dirty_s$0))))) (= $V31_env$1 (ite %init $V83_X$1 (or $V83_X$1 $V31_env$0))) (= $V83_X$1 (and (not (or (and (and (and $e_s1$1 $e_s2$1) $e_s1$1) $e_s3$1) (and $e_s2$1 $e_s3$1))) (>= $init_invalid_s$1 0))))) -; Universally quantified variables -(declare-fun $e_s1$~1 () Bool) -(declare-fun $e_s2$~1 () Bool) -(declare-fun $e_s3$~1 () Bool) -(declare-fun $init_invalid_s$~1 () Int) -(declare-fun $V27_invalid_s$~1 () Int) -(declare-fun $V28_valid_s$~1 () Int) -(declare-fun $V29_dirty_s$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V31_env$~1 () Bool) -(declare-fun $V83_X$~1 () Bool) -(declare-fun $e_s1$0 () Bool) -(declare-fun $e_s2$0 () Bool) -(declare-fun $e_s3$0 () Bool) -(declare-fun $init_invalid_s$0 () Int) -(declare-fun $V27_invalid_s$2 () Int) -(declare-fun $V28_valid_s$2 () Int) -(declare-fun $V29_dirty_s$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V31_env$2 () Bool) -(declare-fun $V83_X$2 () Bool) -(assert (and (T true $e_s1$~1 $e_s2$~1 $e_s3$~1 $init_invalid_s$~1 $V27_invalid_s$~1 $V28_valid_s$~1 $V29_dirty_s$~1 $OK$~1 $V31_env$~1 $V83_X$~1 $e_s1$0 $e_s2$0 $e_s3$0 $init_invalid_s$0 $V27_invalid_s$2 $V28_valid_s$2 $V29_dirty_s$2 $OK$2 $V31_env$2 $V83_X$2) $OK$2)) diff --git a/bench/tasks/SYNAPSE_2_e8_1118_e7_1043_extend_s_part.smt2 b/bench/tasks/SYNAPSE_2_e8_1118_e7_1043_extend_s_part.smt2 deleted file mode 100755 index db5f83468..000000000 --- a/bench/tasks/SYNAPSE_2_e8_1118_e7_1043_extend_s_part.smt2 +++ /dev/null @@ -1,26 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($e_s1$0 Bool) ($e_s2$0 Bool) ($e_s3$0 Bool) ($init_invalid_s$0 Int) ($V27_invalid_s$0 Int) ($V28_valid_s$0 Int) ($V29_dirty_s$0 Int) ($OK$0 Bool) ($V31_env$0 Bool) ($V83_X$0 Bool) ($e_s1$1 Bool) ($e_s2$1 Bool) ($e_s3$1 Bool) ($init_invalid_s$1 Int) ($V27_invalid_s$1 Int) ($V28_valid_s$1 Int) ($V29_dirty_s$1 Int) ($OK$1 Bool) ($V31_env$1 Bool) ($V83_X$1 Bool)) Bool (and (= $OK$1 (=> $V31_env$1 (ite %init true (= (+ (+ $V27_invalid_s$1 $V28_valid_s$1) $V29_dirty_s$1) (+ (+ $V27_invalid_s$0 $V28_valid_s$0) $V29_dirty_s$0))))) (= $V31_env$1 (ite %init $V83_X$1 (or $V83_X$1 $V31_env$0))) (= $V83_X$1 (and (not (or (and (and (and $e_s1$1 $e_s2$1) $e_s1$1) $e_s3$1) (and $e_s2$1 $e_s3$1))) (>= $init_invalid_s$1 0))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $e_s1$~1 () Bool) -(declare-fun $e_s2$~1 () Bool) -(declare-fun $e_s3$~1 () Bool) -(declare-fun $init_invalid_s$~1 () Int) -(declare-fun $V27_invalid_s$~1 () Int) -(declare-fun $V28_valid_s$~1 () Int) -(declare-fun $V29_dirty_s$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V31_env$~1 () Bool) -(declare-fun $V83_X$~1 () Bool) -(declare-fun $e_s1$0 () Bool) -(declare-fun $e_s2$0 () Bool) -(declare-fun $e_s3$0 () Bool) -(declare-fun $init_invalid_s$0 () Int) -(declare-fun $V27_invalid_s$0 () Int) -(declare-fun $V28_valid_s$0 () Int) -(declare-fun $V29_dirty_s$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V31_env$0 () Bool) -(declare-fun $V83_X$0 () Bool) -(assert (T %init $e_s1$~1 $e_s2$~1 $e_s3$~1 $init_invalid_s$~1 $V27_invalid_s$~1 $V28_valid_s$~1 $V29_dirty_s$~1 $OK$~1 $V31_env$~1 $V83_X$~1 $e_s1$0 $e_s2$0 $e_s3$0 $init_invalid_s$0 $V27_invalid_s$0 $V28_valid_s$0 $V29_dirty_s$0 $OK$0 $V31_env$0 $V83_X$0)) diff --git a/bench/tasks/SYNAPSE_2_e8_1118_e7_1043_extend_t_part.smt2 b/bench/tasks/SYNAPSE_2_e8_1118_e7_1043_extend_t_part.smt2 deleted file mode 100755 index 6f9f1215c..000000000 --- a/bench/tasks/SYNAPSE_2_e8_1118_e7_1043_extend_t_part.smt2 +++ /dev/null @@ -1,26 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($e_s1$0 Bool) ($e_s2$0 Bool) ($e_s3$0 Bool) ($init_invalid_s$0 Int) ($V27_invalid_s$0 Int) ($V28_valid_s$0 Int) ($V29_dirty_s$0 Int) ($OK$0 Bool) ($V31_env$0 Bool) ($V83_X$0 Bool) ($e_s1$1 Bool) ($e_s2$1 Bool) ($e_s3$1 Bool) ($init_invalid_s$1 Int) ($V27_invalid_s$1 Int) ($V28_valid_s$1 Int) ($V29_dirty_s$1 Int) ($OK$1 Bool) ($V31_env$1 Bool) ($V83_X$1 Bool)) Bool (and (= $OK$1 (=> $V31_env$1 (ite %init true (= (+ (+ $V27_invalid_s$1 $V28_valid_s$1) $V29_dirty_s$1) (+ (+ $V27_invalid_s$0 $V28_valid_s$0) $V29_dirty_s$0))))) (= $V31_env$1 (ite %init $V83_X$1 (or $V83_X$1 $V31_env$0))) (= $V83_X$1 (and (not (or (and (and (and $e_s1$1 $e_s2$1) $e_s1$1) $e_s3$1) (and $e_s2$1 $e_s3$1))) (>= $init_invalid_s$1 0))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $e_s1$~1 () Bool) -(declare-fun $e_s2$~1 () Bool) -(declare-fun $e_s3$~1 () Bool) -(declare-fun $init_invalid_s$~1 () Int) -(declare-fun $V27_invalid_s$~1 () Int) -(declare-fun $V28_valid_s$~1 () Int) -(declare-fun $V29_dirty_s$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V31_env$~1 () Bool) -(declare-fun $V83_X$~1 () Bool) -(declare-fun $e_s1$0 () Bool) -(declare-fun $e_s2$0 () Bool) -(declare-fun $e_s3$0 () Bool) -(declare-fun $init_invalid_s$0 () Int) -(declare-fun $V27_invalid_s$2 () Int) -(declare-fun $V28_valid_s$2 () Int) -(declare-fun $V29_dirty_s$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V31_env$2 () Bool) -(declare-fun $V83_X$2 () Bool) -(assert (and (T %init $e_s1$~1 $e_s2$~1 $e_s3$~1 $init_invalid_s$~1 $V27_invalid_s$~1 $V28_valid_s$~1 $V29_dirty_s$~1 $OK$~1 $V31_env$~1 $V83_X$~1 $e_s1$0 $e_s2$0 $e_s3$0 $init_invalid_s$0 $V27_invalid_s$2 $V28_valid_s$2 $V29_dirty_s$2 $OK$2 $V31_env$2 $V83_X$2) $OK$2)) diff --git a/bench/tasks/SYNAPSE_4_e8_420_e8_1525_base_s_part.smt2 b/bench/tasks/SYNAPSE_4_e8_420_e8_1525_base_s_part.smt2 deleted file mode 100755 index b16f81fe4..000000000 --- a/bench/tasks/SYNAPSE_4_e8_420_e8_1525_base_s_part.smt2 +++ /dev/null @@ -1,23 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($e_s1$0 Bool) ($e_s2$0 Bool) ($e_s3$0 Bool) ($init_invalid_s$0 Int) ($V28_valid_s$0 Int) ($V29_dirty_s$0 Int) ($OK$0 Bool) ($V31_env$0 Bool) ($V84_X$0 Bool) ($e_s1$1 Bool) ($e_s2$1 Bool) ($e_s3$1 Bool) ($init_invalid_s$1 Int) ($V28_valid_s$1 Int) ($V29_dirty_s$1 Int) ($OK$1 Bool) ($V31_env$1 Bool) ($V84_X$1 Bool)) Bool (and (= $OK$1 (or (=> $V31_env$1 (< $V29_dirty_s$1 1)) (< $V28_valid_s$1 1))) (= $V31_env$1 (ite %init $V84_X$1 (and $V84_X$1 $V31_env$0))) (= $V84_X$1 (and (not (and (and (and (and (and $e_s1$1 $e_s2$1) $e_s1$1) $e_s3$1) $e_s2$1) $e_s3$1)) (>= $init_invalid_s$1 0))))) -; Universally quantified variables -(declare-fun $e_s1$~1 () Bool) -(declare-fun $e_s2$~1 () Bool) -(declare-fun $e_s3$~1 () Bool) -(declare-fun $init_invalid_s$~1 () Int) -(declare-fun $V28_valid_s$~1 () Int) -(declare-fun $V29_dirty_s$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V31_env$~1 () Bool) -(declare-fun $V84_X$~1 () Bool) -(declare-fun $e_s1$0 () Bool) -(declare-fun $e_s2$0 () Bool) -(declare-fun $e_s3$0 () Bool) -(declare-fun $init_invalid_s$0 () Int) -(declare-fun $V28_valid_s$0 () Int) -(declare-fun $V29_dirty_s$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V31_env$0 () Bool) -(declare-fun $V84_X$0 () Bool) -(assert (T true $e_s1$~1 $e_s2$~1 $e_s3$~1 $init_invalid_s$~1 $V28_valid_s$~1 $V29_dirty_s$~1 $OK$~1 $V31_env$~1 $V84_X$~1 $e_s1$0 $e_s2$0 $e_s3$0 $init_invalid_s$0 $V28_valid_s$0 $V29_dirty_s$0 $OK$0 $V31_env$0 $V84_X$0)) diff --git a/bench/tasks/SYNAPSE_4_e8_420_e8_1525_base_t_part.smt2 b/bench/tasks/SYNAPSE_4_e8_420_e8_1525_base_t_part.smt2 deleted file mode 100755 index 03a6b004e..000000000 --- a/bench/tasks/SYNAPSE_4_e8_420_e8_1525_base_t_part.smt2 +++ /dev/null @@ -1,23 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($e_s1$0 Bool) ($e_s2$0 Bool) ($e_s3$0 Bool) ($init_invalid_s$0 Int) ($V28_valid_s$0 Int) ($V29_dirty_s$0 Int) ($OK$0 Bool) ($V31_env$0 Bool) ($V84_X$0 Bool) ($e_s1$1 Bool) ($e_s2$1 Bool) ($e_s3$1 Bool) ($init_invalid_s$1 Int) ($V28_valid_s$1 Int) ($V29_dirty_s$1 Int) ($OK$1 Bool) ($V31_env$1 Bool) ($V84_X$1 Bool)) Bool (and (= $OK$1 (or (=> $V31_env$1 (< $V29_dirty_s$1 1)) (< $V28_valid_s$1 1))) (= $V31_env$1 (ite %init $V84_X$1 (and $V84_X$1 $V31_env$0))) (= $V84_X$1 (and (not (and (and (and (and (and $e_s1$1 $e_s2$1) $e_s1$1) $e_s3$1) $e_s2$1) $e_s3$1)) (>= $init_invalid_s$1 0))))) -; Universally quantified variables -(declare-fun $e_s1$~1 () Bool) -(declare-fun $e_s2$~1 () Bool) -(declare-fun $e_s3$~1 () Bool) -(declare-fun $init_invalid_s$~1 () Int) -(declare-fun $V28_valid_s$~1 () Int) -(declare-fun $V29_dirty_s$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V31_env$~1 () Bool) -(declare-fun $V84_X$~1 () Bool) -(declare-fun $e_s1$0 () Bool) -(declare-fun $e_s2$0 () Bool) -(declare-fun $e_s3$0 () Bool) -(declare-fun $init_invalid_s$0 () Int) -(declare-fun $V28_valid_s$2 () Int) -(declare-fun $V29_dirty_s$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V31_env$2 () Bool) -(declare-fun $V84_X$2 () Bool) -(assert (and (T true $e_s1$~1 $e_s2$~1 $e_s3$~1 $init_invalid_s$~1 $V28_valid_s$~1 $V29_dirty_s$~1 $OK$~1 $V31_env$~1 $V84_X$~1 $e_s1$0 $e_s2$0 $e_s3$0 $init_invalid_s$0 $V28_valid_s$2 $V29_dirty_s$2 $OK$2 $V31_env$2 $V84_X$2) $OK$2)) diff --git a/bench/tasks/SYNAPSE_4_e8_420_e8_1525_extend_s_part.smt2 b/bench/tasks/SYNAPSE_4_e8_420_e8_1525_extend_s_part.smt2 deleted file mode 100755 index f8ed5b8d0..000000000 --- a/bench/tasks/SYNAPSE_4_e8_420_e8_1525_extend_s_part.smt2 +++ /dev/null @@ -1,24 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($e_s1$0 Bool) ($e_s2$0 Bool) ($e_s3$0 Bool) ($init_invalid_s$0 Int) ($V28_valid_s$0 Int) ($V29_dirty_s$0 Int) ($OK$0 Bool) ($V31_env$0 Bool) ($V84_X$0 Bool) ($e_s1$1 Bool) ($e_s2$1 Bool) ($e_s3$1 Bool) ($init_invalid_s$1 Int) ($V28_valid_s$1 Int) ($V29_dirty_s$1 Int) ($OK$1 Bool) ($V31_env$1 Bool) ($V84_X$1 Bool)) Bool (and (= $OK$1 (or (=> $V31_env$1 (< $V29_dirty_s$1 1)) (< $V28_valid_s$1 1))) (= $V31_env$1 (ite %init $V84_X$1 (and $V84_X$1 $V31_env$0))) (= $V84_X$1 (and (not (and (and (and (and (and $e_s1$1 $e_s2$1) $e_s1$1) $e_s3$1) $e_s2$1) $e_s3$1)) (>= $init_invalid_s$1 0))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $e_s1$~1 () Bool) -(declare-fun $e_s2$~1 () Bool) -(declare-fun $e_s3$~1 () Bool) -(declare-fun $init_invalid_s$~1 () Int) -(declare-fun $V28_valid_s$~1 () Int) -(declare-fun $V29_dirty_s$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V31_env$~1 () Bool) -(declare-fun $V84_X$~1 () Bool) -(declare-fun $e_s1$0 () Bool) -(declare-fun $e_s2$0 () Bool) -(declare-fun $e_s3$0 () Bool) -(declare-fun $init_invalid_s$0 () Int) -(declare-fun $V28_valid_s$0 () Int) -(declare-fun $V29_dirty_s$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V31_env$0 () Bool) -(declare-fun $V84_X$0 () Bool) -(assert (T %init $e_s1$~1 $e_s2$~1 $e_s3$~1 $init_invalid_s$~1 $V28_valid_s$~1 $V29_dirty_s$~1 $OK$~1 $V31_env$~1 $V84_X$~1 $e_s1$0 $e_s2$0 $e_s3$0 $init_invalid_s$0 $V28_valid_s$0 $V29_dirty_s$0 $OK$0 $V31_env$0 $V84_X$0)) diff --git a/bench/tasks/SYNAPSE_4_e8_420_e8_1525_extend_t_part.smt2 b/bench/tasks/SYNAPSE_4_e8_420_e8_1525_extend_t_part.smt2 deleted file mode 100755 index 8efcc409e..000000000 --- a/bench/tasks/SYNAPSE_4_e8_420_e8_1525_extend_t_part.smt2 +++ /dev/null @@ -1,24 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($e_s1$0 Bool) ($e_s2$0 Bool) ($e_s3$0 Bool) ($init_invalid_s$0 Int) ($V28_valid_s$0 Int) ($V29_dirty_s$0 Int) ($OK$0 Bool) ($V31_env$0 Bool) ($V84_X$0 Bool) ($e_s1$1 Bool) ($e_s2$1 Bool) ($e_s3$1 Bool) ($init_invalid_s$1 Int) ($V28_valid_s$1 Int) ($V29_dirty_s$1 Int) ($OK$1 Bool) ($V31_env$1 Bool) ($V84_X$1 Bool)) Bool (and (= $OK$1 (or (=> $V31_env$1 (< $V29_dirty_s$1 1)) (< $V28_valid_s$1 1))) (= $V31_env$1 (ite %init $V84_X$1 (and $V84_X$1 $V31_env$0))) (= $V84_X$1 (and (not (and (and (and (and (and $e_s1$1 $e_s2$1) $e_s1$1) $e_s3$1) $e_s2$1) $e_s3$1)) (>= $init_invalid_s$1 0))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $e_s1$~1 () Bool) -(declare-fun $e_s2$~1 () Bool) -(declare-fun $e_s3$~1 () Bool) -(declare-fun $init_invalid_s$~1 () Int) -(declare-fun $V28_valid_s$~1 () Int) -(declare-fun $V29_dirty_s$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V31_env$~1 () Bool) -(declare-fun $V84_X$~1 () Bool) -(declare-fun $e_s1$0 () Bool) -(declare-fun $e_s2$0 () Bool) -(declare-fun $e_s3$0 () Bool) -(declare-fun $init_invalid_s$0 () Int) -(declare-fun $V28_valid_s$2 () Int) -(declare-fun $V29_dirty_s$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V31_env$2 () Bool) -(declare-fun $V84_X$2 () Bool) -(assert (and (T %init $e_s1$~1 $e_s2$~1 $e_s3$~1 $init_invalid_s$~1 $V28_valid_s$~1 $V29_dirty_s$~1 $OK$~1 $V31_env$~1 $V84_X$~1 $e_s1$0 $e_s2$0 $e_s3$0 $init_invalid_s$0 $V28_valid_s$2 $V29_dirty_s$2 $OK$2 $V31_env$2 $V84_X$2) $OK$2)) diff --git a/bench/tasks/car_1_extend_s_part.smt2 b/bench/tasks/car_1_extend_s_part.smt2 deleted file mode 100755 index ae5a0ac9e..000000000 --- a/bench/tasks/car_1_extend_s_part.smt2 +++ /dev/null @@ -1,20 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V27_dist$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V91_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V27_dist$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V91_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (>= $V27_dist$1 0))) (= $V33_env$1 (ite %init $V91_X$1 (and $V91_X$1 $V33_env$0))) (= $V91_X$1 (and (not (and $m$1 $s$1)) (< $V27_dist$1 32767))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V27_dist$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V91_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V27_dist$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V91_X$0 () Bool) -; Existentially quantified variables -; Assertions for universal part of the formula -(assert (T %init $m$~1 $s$~1 $V27_dist$~1 $OK$~1 $V33_env$~1 $V91_X$~1 $m$0 $s$0 $V27_dist$0 $OK$0 $V33_env$0 $V91_X$0)) diff --git a/bench/tasks/car_1_extend_t_part.smt2 b/bench/tasks/car_1_extend_t_part.smt2 deleted file mode 100755 index 031473a4e..000000000 --- a/bench/tasks/car_1_extend_t_part.smt2 +++ /dev/null @@ -1,20 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V27_dist$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V91_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V27_dist$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V91_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (>= $V27_dist$1 0))) (= $V33_env$1 (ite %init $V91_X$1 (and $V91_X$1 $V33_env$0))) (= $V91_X$1 (and (not (and $m$1 $s$1)) (< $V27_dist$1 32767))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V27_dist$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V91_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V27_dist$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V91_X$2 () Bool) - -; Assertion for existential part of the formula -(assert (and (T %init $m$~1 $s$~1 $V27_dist$~1 $OK$~1 $V33_env$~1 $V91_X$~1 $m$0 $s$0 $V27_dist$2 $OK$2 $V33_env$2 $V91_X$2) $OK$2)) diff --git a/bench/tasks/car_2_base1_s_part.smt2 b/bench/tasks/car_2_base1_s_part.smt2 deleted file mode 100755 index ed5d328ed..000000000 --- a/bench/tasks/car_2_base1_s_part.smt2 +++ /dev/null @@ -1,19 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V27_dist$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V91_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V27_dist$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V91_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (< $V27_dist$1 11))) (= $V33_env$1 (ite %init $V91_X$1 (and $V91_X$1 $V33_env$0))) (= $V91_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V27_dist$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V91_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V27_dist$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V91_X$0 () Bool) -; Existentially quantified variables -; Assertions for universal part of the formula -(assert (T true $m$~1 $s$~1 $V27_dist$~1 $OK$~1 $V33_env$~1 $V91_X$~1 $m$0 $s$0 $V27_dist$0 $OK$0 $V33_env$0 $V91_X$0)) diff --git a/bench/tasks/car_2_base1_t_part.smt2 b/bench/tasks/car_2_base1_t_part.smt2 deleted file mode 100755 index 1d516c8c2..000000000 --- a/bench/tasks/car_2_base1_t_part.smt2 +++ /dev/null @@ -1,18 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V27_dist$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V91_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V27_dist$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V91_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (< $V27_dist$1 11))) (= $V33_env$1 (ite %init $V91_X$1 (and $V91_X$1 $V33_env$0))) (= $V91_X$1 (not (and $m$1 $s$1))))) -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V27_dist$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V91_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V27_dist$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V91_X$2 () Bool) - -; Assertion for existential part of the formula -(assert (and (T true $m$~1 $s$~1 $V27_dist$~1 $OK$~1 $V33_env$~1 $V91_X$~1 $m$0 $s$0 $V27_dist$2 $OK$2 $V33_env$2 $V91_X$2) $OK$2)) diff --git a/bench/tasks/car_2_base2_s_part.smt2 b/bench/tasks/car_2_base2_s_part.smt2 deleted file mode 100755 index 1572bbe0a..000000000 --- a/bench/tasks/car_2_base2_s_part.smt2 +++ /dev/null @@ -1,27 +0,0 @@ -; K = 2 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V27_dist$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V91_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V27_dist$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V91_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (< $V27_dist$1 11))) (= $V33_env$1 (ite %init $V91_X$1 (and $V91_X$1 $V33_env$0))) (= $V91_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V27_dist$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V91_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V27_dist$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V91_X$0 () Bool) -(declare-fun $m$1 () Bool) -(declare-fun $s$1 () Bool) -(declare-fun $V27_dist$1 () Int) -(declare-fun $OK$1 () Bool) -(declare-fun $V33_env$1 () Bool) -(declare-fun $V91_X$1 () Bool) -; Existentially quantified variables -; Assertions for universal part of the formula -(assert (T true $m$~1 $s$~1 $V27_dist$~1 $OK$~1 $V33_env$~1 $V91_X$~1 $m$0 $s$0 $V27_dist$0 $OK$0 $V33_env$0 $V91_X$0)) -(assert $OK$0) -(assert (T false $m$0 $s$0 $V27_dist$0 $OK$0 $V33_env$0 $V91_X$0 $m$1 $s$1 $V27_dist$1 $OK$1 $V33_env$1 $V91_X$1)) diff --git a/bench/tasks/car_2_base2_t_part.smt2 b/bench/tasks/car_2_base2_t_part.smt2 deleted file mode 100755 index 5d9c3df3a..000000000 --- a/bench/tasks/car_2_base2_t_part.smt2 +++ /dev/null @@ -1,18 +0,0 @@ -; K = 2 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V27_dist$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V91_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V27_dist$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V91_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (< $V27_dist$1 11))) (= $V33_env$1 (ite %init $V91_X$1 (and $V91_X$1 $V33_env$0))) (= $V91_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V27_dist$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V91_X$0 () Bool) -(declare-fun $m$1 () Bool) -(declare-fun $s$1 () Bool) -(declare-fun $V27_dist$3 () Int) -(declare-fun $OK$3 () Bool) -(declare-fun $V33_env$3 () Bool) -(declare-fun $V91_X$3 () Bool) -; Assertion for existential part of the formula -(assert (and (T false $m$0 $s$0 $V27_dist$0 $OK$0 $V33_env$0 $V91_X$0 $m$1 $s$1 $V27_dist$3 $OK$3 $V33_env$3 $V91_X$3) $OK$3)) diff --git a/bench/tasks/car_2_extend_s_part.smt2 b/bench/tasks/car_2_extend_s_part.smt2 deleted file mode 100755 index 7c8df658b..000000000 --- a/bench/tasks/car_2_extend_s_part.smt2 +++ /dev/null @@ -1,20 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V27_dist$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V91_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V27_dist$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V91_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (< $V27_dist$1 11))) (= $V33_env$1 (ite %init $V91_X$1 (and $V91_X$1 $V33_env$0))) (= $V91_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V27_dist$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V91_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V27_dist$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V91_X$0 () Bool) -; Existentially quantified variables -; Assertions for universal part of the formula -(assert (T %init $m$~1 $s$~1 $V27_dist$~1 $OK$~1 $V33_env$~1 $V91_X$~1 $m$0 $s$0 $V27_dist$0 $OK$0 $V33_env$0 $V91_X$0)) diff --git a/bench/tasks/car_2_extend_t_part.smt2 b/bench/tasks/car_2_extend_t_part.smt2 deleted file mode 100755 index 9d62d76de..000000000 --- a/bench/tasks/car_2_extend_t_part.smt2 +++ /dev/null @@ -1,19 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V27_dist$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V91_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V27_dist$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V91_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (< $V27_dist$1 11))) (= $V33_env$1 (ite %init $V91_X$1 (and $V91_X$1 $V33_env$0))) (= $V91_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V27_dist$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V91_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V27_dist$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V91_X$2 () Bool) -; Assertion for existential part of the formula -(assert (and (T %init $m$~1 $s$~1 $V27_dist$~1 $OK$~1 $V33_env$~1 $V91_X$~1 $m$0 $s$0 $V27_dist$2 $OK$2 $V33_env$2 $V91_X$2) $OK$2)) diff --git a/bench/tasks/car_3_base1_s_part.smt2 b/bench/tasks/car_3_base1_s_part.smt2 deleted file mode 100755 index 2dc013ae1..000000000 --- a/bench/tasks/car_3_base1_s_part.smt2 +++ /dev/null @@ -1,19 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (< $V28_speed$1 4))) (= $V33_env$1 (ite %init $V90_X$1 (and $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V90_X$0 () Bool) -; Existentially quantified variables -; Assertions for universal part of the formula -(assert (T true $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$0 $OK$0 $V33_env$0 $V90_X$0)) diff --git a/bench/tasks/car_3_base1_t_part.smt2 b/bench/tasks/car_3_base1_t_part.smt2 deleted file mode 100755 index e8feae0aa..000000000 --- a/bench/tasks/car_3_base1_t_part.smt2 +++ /dev/null @@ -1,17 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (< $V28_speed$1 4))) (= $V33_env$1 (ite %init $V90_X$1 (and $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V90_X$2 () Bool) -(assert (and (T true $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$2 $OK$2 $V33_env$2 $V90_X$2) $OK$2)) diff --git a/bench/tasks/car_3_base2_s_part.smt2 b/bench/tasks/car_3_base2_s_part.smt2 deleted file mode 100755 index e52559d6a..000000000 --- a/bench/tasks/car_3_base2_s_part.smt2 +++ /dev/null @@ -1,25 +0,0 @@ -; K = 2 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (< $V28_speed$1 4))) (= $V33_env$1 (ite %init $V90_X$1 (and $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V90_X$0 () Bool) -(declare-fun $m$1 () Bool) -(declare-fun $s$1 () Bool) -(declare-fun $V28_speed$1 () Int) -(declare-fun $OK$1 () Bool) -(declare-fun $V33_env$1 () Bool) -(declare-fun $V90_X$1 () Bool) -(assert (T true $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$0 $OK$0 $V33_env$0 $V90_X$0)) -(assert $OK$0) -(assert (T false $m$0 $s$0 $V28_speed$0 $OK$0 $V33_env$0 $V90_X$0 $m$1 $s$1 $V28_speed$1 $OK$1 $V33_env$1 $V90_X$1)) diff --git a/bench/tasks/car_3_base2_t_part.smt2 b/bench/tasks/car_3_base2_t_part.smt2 deleted file mode 100755 index b20f05d52..000000000 --- a/bench/tasks/car_3_base2_t_part.smt2 +++ /dev/null @@ -1,24 +0,0 @@ -; K = 2 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (< $V28_speed$1 4))) (= $V33_env$1 (ite %init $V90_X$1 (and $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V90_X$0 () Bool) -(declare-fun $m$1 () Bool) -(declare-fun $s$1 () Bool) -(declare-fun $V28_speed$3 () Int) -(declare-fun $OK$3 () Bool) -(declare-fun $V33_env$3 () Bool) -(declare-fun $V90_X$3 () Bool) -; Assertion for existential part of the formula -(assert (and (T false $m$0 $s$0 $V28_speed$0 $OK$0 $V33_env$0 $V90_X$0 $m$1 $s$1 $V28_speed$3 $OK$3 $V33_env$3 $V90_X$3) $OK$3)) diff --git a/bench/tasks/car_3_e2_695_base1_s_part.smt2 b/bench/tasks/car_3_e2_695_base1_s_part.smt2 deleted file mode 100755 index edabd2a52..000000000 --- a/bench/tasks/car_3_e2_695_base1_s_part.smt2 +++ /dev/null @@ -1,18 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (< $V28_speed$1 4))) (= $V33_env$1 (ite %init $V90_X$1 (and $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V90_X$0 () Bool) -; Assertions for universal part of the formula -(assert (T true $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$0 $OK$0 $V33_env$0 $V90_X$0)) diff --git a/bench/tasks/car_3_e2_695_base1_t_part.smt2 b/bench/tasks/car_3_e2_695_base1_t_part.smt2 deleted file mode 100755 index e8feae0aa..000000000 --- a/bench/tasks/car_3_e2_695_base1_t_part.smt2 +++ /dev/null @@ -1,17 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (< $V28_speed$1 4))) (= $V33_env$1 (ite %init $V90_X$1 (and $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V90_X$2 () Bool) -(assert (and (T true $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$2 $OK$2 $V33_env$2 $V90_X$2) $OK$2)) diff --git a/bench/tasks/car_3_e2_695_base2_s_part.smt2 b/bench/tasks/car_3_e2_695_base2_s_part.smt2 deleted file mode 100755 index 2f84fe627..000000000 --- a/bench/tasks/car_3_e2_695_base2_s_part.smt2 +++ /dev/null @@ -1,27 +0,0 @@ -; K = 2 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (< $V28_speed$1 4))) (= $V33_env$1 (ite %init $V90_X$1 (and $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V90_X$0 () Bool) -(declare-fun $m$1 () Bool) -(declare-fun $s$1 () Bool) -(declare-fun $V28_speed$1 () Int) -(declare-fun $OK$1 () Bool) -(declare-fun $V33_env$1 () Bool) -(declare-fun $V90_X$1 () Bool) -; Existentially quantified variables -; Assertions for universal part of the formula -(assert (T true $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$0 $OK$0 $V33_env$0 $V90_X$0)) -(assert $OK$0) -(assert (T false $m$0 $s$0 $V28_speed$0 $OK$0 $V33_env$0 $V90_X$0 $m$1 $s$1 $V28_speed$1 $OK$1 $V33_env$1 $V90_X$1)) diff --git a/bench/tasks/car_3_e2_695_base2_t_part.smt2 b/bench/tasks/car_3_e2_695_base2_t_part.smt2 deleted file mode 100755 index b20f05d52..000000000 --- a/bench/tasks/car_3_e2_695_base2_t_part.smt2 +++ /dev/null @@ -1,24 +0,0 @@ -; K = 2 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (< $V28_speed$1 4))) (= $V33_env$1 (ite %init $V90_X$1 (and $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V90_X$0 () Bool) -(declare-fun $m$1 () Bool) -(declare-fun $s$1 () Bool) -(declare-fun $V28_speed$3 () Int) -(declare-fun $OK$3 () Bool) -(declare-fun $V33_env$3 () Bool) -(declare-fun $V90_X$3 () Bool) -; Assertion for existential part of the formula -(assert (and (T false $m$0 $s$0 $V28_speed$0 $OK$0 $V33_env$0 $V90_X$0 $m$1 $s$1 $V28_speed$3 $OK$3 $V33_env$3 $V90_X$3) $OK$3)) diff --git a/bench/tasks/car_3_e2_695_extend_s_part.smt2 b/bench/tasks/car_3_e2_695_extend_s_part.smt2 deleted file mode 100755 index 34d1d9333..000000000 --- a/bench/tasks/car_3_e2_695_extend_s_part.smt2 +++ /dev/null @@ -1,20 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (< $V28_speed$1 4))) (= $V33_env$1 (ite %init $V90_X$1 (and $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V90_X$0 () Bool) -; Existentially quantified variables -; Assertions for universal part of the formula -(assert (T %init $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$0 $OK$0 $V33_env$0 $V90_X$0)) diff --git a/bench/tasks/car_3_e2_695_extend_t_part.smt2 b/bench/tasks/car_3_e2_695_extend_t_part.smt2 deleted file mode 100755 index b22eadb41..000000000 --- a/bench/tasks/car_3_e2_695_extend_t_part.smt2 +++ /dev/null @@ -1,18 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (< $V28_speed$1 4))) (= $V33_env$1 (ite %init $V90_X$1 (and $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V90_X$2 () Bool) -(assert (and (T %init $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$2 $OK$2 $V33_env$2 $V90_X$2) $OK$2)) diff --git a/bench/tasks/car_3_e7_626_base_s_part.smt2 b/bench/tasks/car_3_e7_626_base_s_part.smt2 deleted file mode 100755 index 6e4211881..000000000 --- a/bench/tasks/car_3_e7_626_base_s_part.smt2 +++ /dev/null @@ -1,17 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (< $V28_speed$1 4))) (= $V33_env$1 (ite %init $V90_X$1 (or $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V90_X$0 () Bool) -(assert (T true $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$0 $OK$0 $V33_env$0 $V90_X$0)) diff --git a/bench/tasks/car_3_e7_626_base_t_part.smt2 b/bench/tasks/car_3_e7_626_base_t_part.smt2 deleted file mode 100755 index d7bf16f6a..000000000 --- a/bench/tasks/car_3_e7_626_base_t_part.smt2 +++ /dev/null @@ -1,17 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (< $V28_speed$1 4))) (= $V33_env$1 (ite %init $V90_X$1 (or $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V90_X$2 () Bool) -(assert (and (T true $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$2 $OK$2 $V33_env$2 $V90_X$2) $OK$2)) diff --git a/bench/tasks/car_3_e7_626_extend_s_part.smt2 b/bench/tasks/car_3_e7_626_extend_s_part.smt2 deleted file mode 100755 index c10090a9b..000000000 --- a/bench/tasks/car_3_e7_626_extend_s_part.smt2 +++ /dev/null @@ -1,18 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (< $V28_speed$1 4))) (= $V33_env$1 (ite %init $V90_X$1 (or $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V90_X$0 () Bool) -(assert (T %init $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$0 $OK$0 $V33_env$0 $V90_X$0)) diff --git a/bench/tasks/car_3_e7_626_extend_t_part.smt2 b/bench/tasks/car_3_e7_626_extend_t_part.smt2 deleted file mode 100755 index 552e478d5..000000000 --- a/bench/tasks/car_3_e7_626_extend_t_part.smt2 +++ /dev/null @@ -1,18 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (< $V28_speed$1 4))) (= $V33_env$1 (ite %init $V90_X$1 (or $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V90_X$2 () Bool) -(assert (and (T %init $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$2 $OK$2 $V33_env$2 $V90_X$2) $OK$2)) diff --git a/bench/tasks/car_3_e8_33_base_s_part.smt2 b/bench/tasks/car_3_e8_33_base_s_part.smt2 deleted file mode 100755 index 4e51fcd15..000000000 --- a/bench/tasks/car_3_e8_33_base_s_part.smt2 +++ /dev/null @@ -1,17 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (< $V28_speed$1 4))) (= $V33_env$1 (ite %init $V90_X$1 (and $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V90_X$0 () Bool) -(assert (T true $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$0 $OK$0 $V33_env$0 $V90_X$0)) diff --git a/bench/tasks/car_3_e8_33_base_t_part.smt2 b/bench/tasks/car_3_e8_33_base_t_part.smt2 deleted file mode 100755 index e8feae0aa..000000000 --- a/bench/tasks/car_3_e8_33_base_t_part.smt2 +++ /dev/null @@ -1,17 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (< $V28_speed$1 4))) (= $V33_env$1 (ite %init $V90_X$1 (and $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V90_X$2 () Bool) -(assert (and (T true $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$2 $OK$2 $V33_env$2 $V90_X$2) $OK$2)) diff --git a/bench/tasks/car_3_e8_33_e2_1010_base_s_part.smt2 b/bench/tasks/car_3_e8_33_e2_1010_base_s_part.smt2 deleted file mode 100755 index 4e51fcd15..000000000 --- a/bench/tasks/car_3_e8_33_e2_1010_base_s_part.smt2 +++ /dev/null @@ -1,17 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (< $V28_speed$1 4))) (= $V33_env$1 (ite %init $V90_X$1 (and $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V90_X$0 () Bool) -(assert (T true $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$0 $OK$0 $V33_env$0 $V90_X$0)) diff --git a/bench/tasks/car_3_e8_33_e2_1010_base_t_part.smt2 b/bench/tasks/car_3_e8_33_e2_1010_base_t_part.smt2 deleted file mode 100755 index e8feae0aa..000000000 --- a/bench/tasks/car_3_e8_33_e2_1010_base_t_part.smt2 +++ /dev/null @@ -1,17 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (< $V28_speed$1 4))) (= $V33_env$1 (ite %init $V90_X$1 (and $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V90_X$2 () Bool) -(assert (and (T true $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$2 $OK$2 $V33_env$2 $V90_X$2) $OK$2)) diff --git a/bench/tasks/car_3_e8_33_e2_1010_extend_s_part.smt2 b/bench/tasks/car_3_e8_33_e2_1010_extend_s_part.smt2 deleted file mode 100755 index c10090a9b..000000000 --- a/bench/tasks/car_3_e8_33_e2_1010_extend_s_part.smt2 +++ /dev/null @@ -1,18 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (< $V28_speed$1 4))) (= $V33_env$1 (ite %init $V90_X$1 (or $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V90_X$0 () Bool) -(assert (T %init $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$0 $OK$0 $V33_env$0 $V90_X$0)) diff --git a/bench/tasks/car_3_e8_33_e2_1010_extend_t_part.smt2 b/bench/tasks/car_3_e8_33_e2_1010_extend_t_part.smt2 deleted file mode 100755 index 552e478d5..000000000 --- a/bench/tasks/car_3_e8_33_e2_1010_extend_t_part.smt2 +++ /dev/null @@ -1,18 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (< $V28_speed$1 4))) (= $V33_env$1 (ite %init $V90_X$1 (or $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V90_X$2 () Bool) -(assert (and (T %init $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$2 $OK$2 $V33_env$2 $V90_X$2) $OK$2)) diff --git a/bench/tasks/car_3_e8_33_e7_220_base_s_part.smt2 b/bench/tasks/car_3_e8_33_e7_220_base_s_part.smt2 deleted file mode 100755 index 3ca67d934..000000000 --- a/bench/tasks/car_3_e8_33_e7_220_base_s_part.smt2 +++ /dev/null @@ -1,19 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (< $V28_speed$1 4))) (= $V33_env$1 (ite %init $V90_X$1 (or $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V90_X$0 () Bool) -; Existentially quantified variables -; Assertions for universal part of the formula -(assert (T true $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$0 $OK$0 $V33_env$0 $V90_X$0)) diff --git a/bench/tasks/car_3_e8_33_e7_220_base_t_part.smt2 b/bench/tasks/car_3_e8_33_e7_220_base_t_part.smt2 deleted file mode 100755 index d7bf16f6a..000000000 --- a/bench/tasks/car_3_e8_33_e7_220_base_t_part.smt2 +++ /dev/null @@ -1,17 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (< $V28_speed$1 4))) (= $V33_env$1 (ite %init $V90_X$1 (or $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V90_X$2 () Bool) -(assert (and (T true $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$2 $OK$2 $V33_env$2 $V90_X$2) $OK$2)) diff --git a/bench/tasks/car_3_e8_33_e7_220_extend_s_part.smt2 b/bench/tasks/car_3_e8_33_e7_220_extend_s_part.smt2 deleted file mode 100755 index 2d14abad6..000000000 --- a/bench/tasks/car_3_e8_33_e7_220_extend_s_part.smt2 +++ /dev/null @@ -1,20 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (< $V28_speed$1 4))) (= $V33_env$1 (ite %init $V90_X$1 (or $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V90_X$0 () Bool) -; Existentially quantified variables -; Assertions for universal part of the formula -(assert (T %init $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$0 $OK$0 $V33_env$0 $V90_X$0)) diff --git a/bench/tasks/car_3_e8_33_e7_220_extend_t_part.smt2 b/bench/tasks/car_3_e8_33_e7_220_extend_t_part.smt2 deleted file mode 100755 index 552e478d5..000000000 --- a/bench/tasks/car_3_e8_33_e7_220_extend_t_part.smt2 +++ /dev/null @@ -1,18 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (< $V28_speed$1 4))) (= $V33_env$1 (ite %init $V90_X$1 (or $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V90_X$2 () Bool) -(assert (and (T %init $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$2 $OK$2 $V33_env$2 $V90_X$2) $OK$2)) diff --git a/bench/tasks/car_3_e8_33_extend_s_part.smt2 b/bench/tasks/car_3_e8_33_extend_s_part.smt2 deleted file mode 100755 index f43c2137a..000000000 --- a/bench/tasks/car_3_e8_33_extend_s_part.smt2 +++ /dev/null @@ -1,18 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (< $V28_speed$1 4))) (= $V33_env$1 (ite %init $V90_X$1 (and $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V90_X$0 () Bool) -(assert (T %init $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$0 $OK$0 $V33_env$0 $V90_X$0)) diff --git a/bench/tasks/car_3_e8_33_extend_t_part.smt2 b/bench/tasks/car_3_e8_33_extend_t_part.smt2 deleted file mode 100755 index b22eadb41..000000000 --- a/bench/tasks/car_3_e8_33_extend_t_part.smt2 +++ /dev/null @@ -1,18 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (< $V28_speed$1 4))) (= $V33_env$1 (ite %init $V90_X$1 (and $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V90_X$2 () Bool) -(assert (and (T %init $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$2 $OK$2 $V33_env$2 $V90_X$2) $OK$2)) diff --git a/bench/tasks/car_3_extend_s_part.smt2 b/bench/tasks/car_3_extend_s_part.smt2 deleted file mode 100755 index 34d1d9333..000000000 --- a/bench/tasks/car_3_extend_s_part.smt2 +++ /dev/null @@ -1,20 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (< $V28_speed$1 4))) (= $V33_env$1 (ite %init $V90_X$1 (and $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V90_X$0 () Bool) -; Existentially quantified variables -; Assertions for universal part of the formula -(assert (T %init $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$0 $OK$0 $V33_env$0 $V90_X$0)) diff --git a/bench/tasks/car_3_extend_t_part.smt2 b/bench/tasks/car_3_extend_t_part.smt2 deleted file mode 100755 index 6f6b2fe3c..000000000 --- a/bench/tasks/car_3_extend_t_part.smt2 +++ /dev/null @@ -1,19 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (< $V28_speed$1 4))) (= $V33_env$1 (ite %init $V90_X$1 (and $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V90_X$2 () Bool) -; Assertion for existential part of the formula -(assert (and (T %init $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$2 $OK$2 $V33_env$2 $V90_X$2) $OK$2)) diff --git a/bench/tasks/car_4_e3_57_e4_1047_base_s_part.smt2 b/bench/tasks/car_4_e3_57_e4_1047_base_s_part.smt2 deleted file mode 100755 index 4940ece2c..000000000 --- a/bench/tasks/car_4_e3_57_e4_1047_base_s_part.smt2 +++ /dev/null @@ -1,19 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (>= $V28_speed$1 0))) (= $V33_env$1 (ite %init $V90_X$1 (and $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V90_X$0 () Bool) -; Existentially quantified variables -; Assertions for universal part of the formula -(assert (T true $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$0 $OK$0 $V33_env$0 $V90_X$0)) diff --git a/bench/tasks/car_4_e3_57_e4_1047_base_t_part.smt2 b/bench/tasks/car_4_e3_57_e4_1047_base_t_part.smt2 deleted file mode 100755 index 67418708a..000000000 --- a/bench/tasks/car_4_e3_57_e4_1047_base_t_part.smt2 +++ /dev/null @@ -1,17 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (>= $V28_speed$1 0))) (= $V33_env$1 (ite %init $V90_X$1 (and $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V90_X$2 () Bool) -(assert (and (T true $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$2 $OK$2 $V33_env$2 $V90_X$2) $OK$2)) diff --git a/bench/tasks/car_4_e3_57_e4_1047_extend_s_part.smt2 b/bench/tasks/car_4_e3_57_e4_1047_extend_s_part.smt2 deleted file mode 100755 index 495a00378..000000000 --- a/bench/tasks/car_4_e3_57_e4_1047_extend_s_part.smt2 +++ /dev/null @@ -1,18 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (>= $V28_speed$1 0))) (= $V33_env$1 (ite %init $V90_X$1 (and $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V90_X$0 () Bool) -(assert (T %init $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$0 $OK$0 $V33_env$0 $V90_X$0)) diff --git a/bench/tasks/car_4_e3_57_e4_1047_extend_t_part.smt2 b/bench/tasks/car_4_e3_57_e4_1047_extend_t_part.smt2 deleted file mode 100755 index a7fc582f5..000000000 --- a/bench/tasks/car_4_e3_57_e4_1047_extend_t_part.smt2 +++ /dev/null @@ -1,18 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (>= $V28_speed$1 0))) (= $V33_env$1 (ite %init $V90_X$1 (and $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V90_X$2 () Bool) -(assert (and (T %init $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$2 $OK$2 $V33_env$2 $V90_X$2) $OK$2)) diff --git a/bench/tasks/car_4_e3_57_e6_784_base_s_part.smt2 b/bench/tasks/car_4_e3_57_e6_784_base_s_part.smt2 deleted file mode 100755 index 4940ece2c..000000000 --- a/bench/tasks/car_4_e3_57_e6_784_base_s_part.smt2 +++ /dev/null @@ -1,19 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (>= $V28_speed$1 0))) (= $V33_env$1 (ite %init $V90_X$1 (and $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V90_X$0 () Bool) -; Existentially quantified variables -; Assertions for universal part of the formula -(assert (T true $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$0 $OK$0 $V33_env$0 $V90_X$0)) diff --git a/bench/tasks/car_4_e3_57_e6_784_base_t_part.smt2 b/bench/tasks/car_4_e3_57_e6_784_base_t_part.smt2 deleted file mode 100755 index 67418708a..000000000 --- a/bench/tasks/car_4_e3_57_e6_784_base_t_part.smt2 +++ /dev/null @@ -1,17 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (>= $V28_speed$1 0))) (= $V33_env$1 (ite %init $V90_X$1 (and $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V90_X$2 () Bool) -(assert (and (T true $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$2 $OK$2 $V33_env$2 $V90_X$2) $OK$2)) diff --git a/bench/tasks/car_4_e3_57_e6_784_extend_s_part.smt2 b/bench/tasks/car_4_e3_57_e6_784_extend_s_part.smt2 deleted file mode 100755 index 641dc6023..000000000 --- a/bench/tasks/car_4_e3_57_e6_784_extend_s_part.smt2 +++ /dev/null @@ -1,20 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (>= $V28_speed$1 0))) (= $V33_env$1 (ite %init $V90_X$1 (and $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V90_X$0 () Bool) -; Existentially quantified variables -; Assertions for universal part of the formula -(assert (T %init $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$0 $OK$0 $V33_env$0 $V90_X$0)) diff --git a/bench/tasks/car_4_e3_57_e6_784_extend_t_part.smt2 b/bench/tasks/car_4_e3_57_e6_784_extend_t_part.smt2 deleted file mode 100755 index a7fc582f5..000000000 --- a/bench/tasks/car_4_e3_57_e6_784_extend_t_part.smt2 +++ /dev/null @@ -1,18 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (>= $V28_speed$1 0))) (= $V33_env$1 (ite %init $V90_X$1 (and $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V90_X$2 () Bool) -(assert (and (T %init $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$2 $OK$2 $V33_env$2 $V90_X$2) $OK$2)) diff --git a/bench/tasks/car_4_e7_592_base1_s_part.smt2 b/bench/tasks/car_4_e7_592_base1_s_part.smt2 deleted file mode 100755 index 1eb95c92d..000000000 --- a/bench/tasks/car_4_e7_592_base1_s_part.smt2 +++ /dev/null @@ -1,19 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (>= $V28_speed$1 0))) (= $V33_env$1 (ite %init $V90_X$1 (or $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V90_X$0 () Bool) -; Existentially quantified variables -; Assertions for universal part of the formula -(assert (T true $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$0 $OK$0 $V33_env$0 $V90_X$0)) diff --git a/bench/tasks/car_4_e7_592_base1_t_part.smt2 b/bench/tasks/car_4_e7_592_base1_t_part.smt2 deleted file mode 100755 index 617d1d3b8..000000000 --- a/bench/tasks/car_4_e7_592_base1_t_part.smt2 +++ /dev/null @@ -1,17 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (>= $V28_speed$1 0))) (= $V33_env$1 (ite %init $V90_X$1 (or $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V90_X$2 () Bool) -(assert (and (T true $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$2 $OK$2 $V33_env$2 $V90_X$2) $OK$2)) diff --git a/bench/tasks/car_4_e7_592_base2_s_part.smt2 b/bench/tasks/car_4_e7_592_base2_s_part.smt2 deleted file mode 100755 index 4a8c399e8..000000000 --- a/bench/tasks/car_4_e7_592_base2_s_part.smt2 +++ /dev/null @@ -1,25 +0,0 @@ -; K = 2 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (>= $V28_speed$1 0))) (= $V33_env$1 (ite %init $V90_X$1 (or $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V90_X$0 () Bool) -(declare-fun $m$1 () Bool) -(declare-fun $s$1 () Bool) -(declare-fun $V28_speed$1 () Int) -(declare-fun $OK$1 () Bool) -(declare-fun $V33_env$1 () Bool) -(declare-fun $V90_X$1 () Bool) -(assert (T true $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$0 $OK$0 $V33_env$0 $V90_X$0)) -(assert $OK$0) -(assert (T false $m$0 $s$0 $V28_speed$0 $OK$0 $V33_env$0 $V90_X$0 $m$1 $s$1 $V28_speed$1 $OK$1 $V33_env$1 $V90_X$1)) diff --git a/bench/tasks/car_4_e7_592_base2_t_part.smt2 b/bench/tasks/car_4_e7_592_base2_t_part.smt2 deleted file mode 100755 index 18aa875a3..000000000 --- a/bench/tasks/car_4_e7_592_base2_t_part.smt2 +++ /dev/null @@ -1,23 +0,0 @@ -; K = 2 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (>= $V28_speed$1 0))) (= $V33_env$1 (ite %init $V90_X$1 (or $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V90_X$0 () Bool) -(declare-fun $m$1 () Bool) -(declare-fun $s$1 () Bool) -(declare-fun $V28_speed$3 () Int) -(declare-fun $OK$3 () Bool) -(declare-fun $V33_env$3 () Bool) -(declare-fun $V90_X$3 () Bool) -(assert (and (T false $m$0 $s$0 $V28_speed$0 $OK$0 $V33_env$0 $V90_X$0 $m$1 $s$1 $V28_speed$3 $OK$3 $V33_env$3 $V90_X$3) $OK$3)) diff --git a/bench/tasks/car_4_e7_592_extend_s_part.smt2 b/bench/tasks/car_4_e7_592_extend_s_part.smt2 deleted file mode 100755 index 19abafdde..000000000 --- a/bench/tasks/car_4_e7_592_extend_s_part.smt2 +++ /dev/null @@ -1,20 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (>= $V28_speed$1 0))) (= $V33_env$1 (ite %init $V90_X$1 (or $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V90_X$0 () Bool) -; Existentially quantified variables -; Assertions for universal part of the formula -(assert (T %init $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$0 $OK$0 $V33_env$0 $V90_X$0)) diff --git a/bench/tasks/car_4_e7_592_extend_t_part.smt2 b/bench/tasks/car_4_e7_592_extend_t_part.smt2 deleted file mode 100755 index 11466cc92..000000000 --- a/bench/tasks/car_4_e7_592_extend_t_part.smt2 +++ /dev/null @@ -1,18 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (>= $V28_speed$1 0))) (= $V33_env$1 (ite %init $V90_X$1 (or $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V90_X$2 () Bool) -(assert (and (T %init $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$2 $OK$2 $V33_env$2 $V90_X$2) $OK$2)) diff --git a/bench/tasks/car_4_e8_118_base_s_part.smt2 b/bench/tasks/car_4_e8_118_base_s_part.smt2 deleted file mode 100755 index 4940ece2c..000000000 --- a/bench/tasks/car_4_e8_118_base_s_part.smt2 +++ /dev/null @@ -1,19 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (>= $V28_speed$1 0))) (= $V33_env$1 (ite %init $V90_X$1 (and $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V90_X$0 () Bool) -; Existentially quantified variables -; Assertions for universal part of the formula -(assert (T true $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$0 $OK$0 $V33_env$0 $V90_X$0)) diff --git a/bench/tasks/car_4_e8_118_base_t_part.smt2 b/bench/tasks/car_4_e8_118_base_t_part.smt2 deleted file mode 100755 index 67418708a..000000000 --- a/bench/tasks/car_4_e8_118_base_t_part.smt2 +++ /dev/null @@ -1,17 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (>= $V28_speed$1 0))) (= $V33_env$1 (ite %init $V90_X$1 (and $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V90_X$2 () Bool) -(assert (and (T true $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$2 $OK$2 $V33_env$2 $V90_X$2) $OK$2)) diff --git a/bench/tasks/car_4_e8_118_extend_s_part.smt2 b/bench/tasks/car_4_e8_118_extend_s_part.smt2 deleted file mode 100755 index 641dc6023..000000000 --- a/bench/tasks/car_4_e8_118_extend_s_part.smt2 +++ /dev/null @@ -1,20 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (>= $V28_speed$1 0))) (= $V33_env$1 (ite %init $V90_X$1 (and $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V90_X$0 () Bool) -; Existentially quantified variables -; Assertions for universal part of the formula -(assert (T %init $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$0 $OK$0 $V33_env$0 $V90_X$0)) diff --git a/bench/tasks/car_4_e8_118_extend_t_part.smt2 b/bench/tasks/car_4_e8_118_extend_t_part.smt2 deleted file mode 100755 index a7fc582f5..000000000 --- a/bench/tasks/car_4_e8_118_extend_t_part.smt2 +++ /dev/null @@ -1,18 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V90_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V90_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (>= $V28_speed$1 0))) (= $V33_env$1 (ite %init $V90_X$1 (and $V90_X$1 $V33_env$0))) (= $V90_X$1 (not (and $m$1 $s$1))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V90_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V28_speed$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V90_X$2 () Bool) -(assert (and (T %init $m$~1 $s$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V90_X$~1 $m$0 $s$0 $V28_speed$2 $OK$2 $V33_env$2 $V90_X$2) $OK$2)) diff --git a/bench/tasks/car_all_e2_108_base1_s_part.smt2 b/bench/tasks/car_all_e2_108_base1_s_part.smt2 deleted file mode 100755 index 7c7bccf53..000000000 --- a/bench/tasks/car_all_e2_108_base1_s_part.smt2 +++ /dev/null @@ -1,19 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V27_dist$0 Int) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V92_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V27_dist$1 Int) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V92_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (and (and (and (>= $V27_dist$1 0) (< $V27_dist$1 11)) (< $V28_speed$1 4)) (>= $V28_speed$1 0)))) (= $V33_env$1 (ite %init $V92_X$1 (and $V92_X$1 $V33_env$0))) (= $V92_X$1 (and (not (and $m$1 $s$1)) (< $V27_dist$1 32767))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V27_dist$~1 () Int) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V92_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V27_dist$0 () Int) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V92_X$0 () Bool) -(assert (T true $m$~1 $s$~1 $V27_dist$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V92_X$~1 $m$0 $s$0 $V27_dist$0 $V28_speed$0 $OK$0 $V33_env$0 $V92_X$0)) diff --git a/bench/tasks/car_all_e2_108_base1_t_part.smt2 b/bench/tasks/car_all_e2_108_base1_t_part.smt2 deleted file mode 100755 index 0b97574b5..000000000 --- a/bench/tasks/car_all_e2_108_base1_t_part.smt2 +++ /dev/null @@ -1,19 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V27_dist$0 Int) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V92_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V27_dist$1 Int) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V92_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (and (and (and (>= $V27_dist$1 0) (< $V27_dist$1 11)) (< $V28_speed$1 4)) (>= $V28_speed$1 0)))) (= $V33_env$1 (ite %init $V92_X$1 (and $V92_X$1 $V33_env$0))) (= $V92_X$1 (and (not (and $m$1 $s$1)) (< $V27_dist$1 32767))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V27_dist$~1 () Int) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V92_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V27_dist$2 () Int) -(declare-fun $V28_speed$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V92_X$2 () Bool) -(assert (and (T true $m$~1 $s$~1 $V27_dist$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V92_X$~1 $m$0 $s$0 $V27_dist$2 $V28_speed$2 $OK$2 $V33_env$2 $V92_X$2) $OK$2)) diff --git a/bench/tasks/car_all_e2_108_base2_s_part.smt2 b/bench/tasks/car_all_e2_108_base2_s_part.smt2 deleted file mode 100755 index a81fd57d9..000000000 --- a/bench/tasks/car_all_e2_108_base2_s_part.smt2 +++ /dev/null @@ -1,30 +0,0 @@ -; K = 2 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V27_dist$0 Int) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V92_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V27_dist$1 Int) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V92_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (and (and (and (>= $V27_dist$1 0) (< $V27_dist$1 11)) (< $V28_speed$1 4)) (>= $V28_speed$1 0)))) (= $V33_env$1 (ite %init $V92_X$1 (and $V92_X$1 $V33_env$0))) (= $V92_X$1 (and (not (and $m$1 $s$1)) (< $V27_dist$1 32767))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V27_dist$~1 () Int) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V92_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V27_dist$0 () Int) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V92_X$0 () Bool) -(declare-fun $m$1 () Bool) -(declare-fun $s$1 () Bool) -(declare-fun $V27_dist$1 () Int) -(declare-fun $V28_speed$1 () Int) -(declare-fun $OK$1 () Bool) -(declare-fun $V33_env$1 () Bool) -(declare-fun $V92_X$1 () Bool) -; Existentially quantified variables -; Assertions for universal part of the formula -(assert (T true $m$~1 $s$~1 $V27_dist$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V92_X$~1 $m$0 $s$0 $V27_dist$0 $V28_speed$0 $OK$0 $V33_env$0 $V92_X$0)) -(assert $OK$0) -(assert (T false $m$0 $s$0 $V27_dist$0 $V28_speed$0 $OK$0 $V33_env$0 $V92_X$0 $m$1 $s$1 $V27_dist$1 $V28_speed$1 $OK$1 $V33_env$1 $V92_X$1)) diff --git a/bench/tasks/car_all_e2_108_base2_t_part.smt2 b/bench/tasks/car_all_e2_108_base2_t_part.smt2 deleted file mode 100755 index 47858ac64..000000000 --- a/bench/tasks/car_all_e2_108_base2_t_part.smt2 +++ /dev/null @@ -1,26 +0,0 @@ -; K = 2 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V27_dist$0 Int) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V92_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V27_dist$1 Int) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V92_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (and (and (and (>= $V27_dist$1 0) (< $V27_dist$1 11)) (< $V28_speed$1 4)) (>= $V28_speed$1 0)))) (= $V33_env$1 (ite %init $V92_X$1 (and $V92_X$1 $V33_env$0))) (= $V92_X$1 (and (not (and $m$1 $s$1)) (< $V27_dist$1 32767))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V27_dist$~1 () Int) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V92_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V27_dist$0 () Int) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V92_X$0 () Bool) -(declare-fun $m$1 () Bool) -(declare-fun $s$1 () Bool) -(declare-fun $V27_dist$3 () Int) -(declare-fun $V28_speed$3 () Int) -(declare-fun $OK$3 () Bool) -(declare-fun $V33_env$3 () Bool) -(declare-fun $V92_X$3 () Bool) -(assert (and (T false $m$0 $s$0 $V27_dist$0 $V28_speed$0 $OK$0 $V33_env$0 $V92_X$0 $m$1 $s$1 $V27_dist$3 $V28_speed$3 $OK$3 $V33_env$3 $V92_X$3) $OK$3)) diff --git a/bench/tasks/car_all_e2_108_extend_s_part.smt2 b/bench/tasks/car_all_e2_108_extend_s_part.smt2 deleted file mode 100755 index d762fecfa..000000000 --- a/bench/tasks/car_all_e2_108_extend_s_part.smt2 +++ /dev/null @@ -1,20 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V27_dist$0 Int) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V92_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V27_dist$1 Int) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V92_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (and (and (and (>= $V27_dist$1 0) (< $V27_dist$1 11)) (< $V28_speed$1 4)) (>= $V28_speed$1 0)))) (= $V33_env$1 (ite %init $V92_X$1 (and $V92_X$1 $V33_env$0))) (= $V92_X$1 (and (not (and $m$1 $s$1)) (< $V27_dist$1 32767))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V27_dist$~1 () Int) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V92_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V27_dist$0 () Int) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V92_X$0 () Bool) -(assert (T %init $m$~1 $s$~1 $V27_dist$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V92_X$~1 $m$0 $s$0 $V27_dist$0 $V28_speed$0 $OK$0 $V33_env$0 $V92_X$0)) diff --git a/bench/tasks/car_all_e2_108_extend_t_part.smt2 b/bench/tasks/car_all_e2_108_extend_t_part.smt2 deleted file mode 100755 index 9240b1361..000000000 --- a/bench/tasks/car_all_e2_108_extend_t_part.smt2 +++ /dev/null @@ -1,20 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V27_dist$0 Int) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V92_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V27_dist$1 Int) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V92_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (and (and (and (>= $V27_dist$1 0) (< $V27_dist$1 11)) (< $V28_speed$1 4)) (>= $V28_speed$1 0)))) (= $V33_env$1 (ite %init $V92_X$1 (and $V92_X$1 $V33_env$0))) (= $V92_X$1 (and (not (and $m$1 $s$1)) (< $V27_dist$1 32767))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V27_dist$~1 () Int) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V92_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V27_dist$2 () Int) -(declare-fun $V28_speed$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V92_X$2 () Bool) -(assert (and (T %init $m$~1 $s$~1 $V27_dist$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V92_X$~1 $m$0 $s$0 $V27_dist$2 $V28_speed$2 $OK$2 $V33_env$2 $V92_X$2) $OK$2)) diff --git a/bench/tasks/car_all_e2_142_e8_194_base1_s_part.smt2 b/bench/tasks/car_all_e2_142_e8_194_base1_s_part.smt2 deleted file mode 100755 index 7c7bccf53..000000000 --- a/bench/tasks/car_all_e2_142_e8_194_base1_s_part.smt2 +++ /dev/null @@ -1,19 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V27_dist$0 Int) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V92_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V27_dist$1 Int) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V92_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (and (and (and (>= $V27_dist$1 0) (< $V27_dist$1 11)) (< $V28_speed$1 4)) (>= $V28_speed$1 0)))) (= $V33_env$1 (ite %init $V92_X$1 (and $V92_X$1 $V33_env$0))) (= $V92_X$1 (and (not (and $m$1 $s$1)) (< $V27_dist$1 32767))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V27_dist$~1 () Int) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V92_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V27_dist$0 () Int) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V92_X$0 () Bool) -(assert (T true $m$~1 $s$~1 $V27_dist$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V92_X$~1 $m$0 $s$0 $V27_dist$0 $V28_speed$0 $OK$0 $V33_env$0 $V92_X$0)) diff --git a/bench/tasks/car_all_e2_142_e8_194_base1_t_part.smt2 b/bench/tasks/car_all_e2_142_e8_194_base1_t_part.smt2 deleted file mode 100755 index 0b97574b5..000000000 --- a/bench/tasks/car_all_e2_142_e8_194_base1_t_part.smt2 +++ /dev/null @@ -1,19 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V27_dist$0 Int) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V92_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V27_dist$1 Int) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V92_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (and (and (and (>= $V27_dist$1 0) (< $V27_dist$1 11)) (< $V28_speed$1 4)) (>= $V28_speed$1 0)))) (= $V33_env$1 (ite %init $V92_X$1 (and $V92_X$1 $V33_env$0))) (= $V92_X$1 (and (not (and $m$1 $s$1)) (< $V27_dist$1 32767))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V27_dist$~1 () Int) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V92_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V27_dist$2 () Int) -(declare-fun $V28_speed$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V92_X$2 () Bool) -(assert (and (T true $m$~1 $s$~1 $V27_dist$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V92_X$~1 $m$0 $s$0 $V27_dist$2 $V28_speed$2 $OK$2 $V33_env$2 $V92_X$2) $OK$2)) diff --git a/bench/tasks/car_all_e2_142_e8_194_base2_s_part.smt2 b/bench/tasks/car_all_e2_142_e8_194_base2_s_part.smt2 deleted file mode 100755 index a81fd57d9..000000000 --- a/bench/tasks/car_all_e2_142_e8_194_base2_s_part.smt2 +++ /dev/null @@ -1,30 +0,0 @@ -; K = 2 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V27_dist$0 Int) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V92_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V27_dist$1 Int) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V92_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (and (and (and (>= $V27_dist$1 0) (< $V27_dist$1 11)) (< $V28_speed$1 4)) (>= $V28_speed$1 0)))) (= $V33_env$1 (ite %init $V92_X$1 (and $V92_X$1 $V33_env$0))) (= $V92_X$1 (and (not (and $m$1 $s$1)) (< $V27_dist$1 32767))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V27_dist$~1 () Int) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V92_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V27_dist$0 () Int) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V92_X$0 () Bool) -(declare-fun $m$1 () Bool) -(declare-fun $s$1 () Bool) -(declare-fun $V27_dist$1 () Int) -(declare-fun $V28_speed$1 () Int) -(declare-fun $OK$1 () Bool) -(declare-fun $V33_env$1 () Bool) -(declare-fun $V92_X$1 () Bool) -; Existentially quantified variables -; Assertions for universal part of the formula -(assert (T true $m$~1 $s$~1 $V27_dist$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V92_X$~1 $m$0 $s$0 $V27_dist$0 $V28_speed$0 $OK$0 $V33_env$0 $V92_X$0)) -(assert $OK$0) -(assert (T false $m$0 $s$0 $V27_dist$0 $V28_speed$0 $OK$0 $V33_env$0 $V92_X$0 $m$1 $s$1 $V27_dist$1 $V28_speed$1 $OK$1 $V33_env$1 $V92_X$1)) diff --git a/bench/tasks/car_all_e2_142_e8_194_base2_t_part.smt2 b/bench/tasks/car_all_e2_142_e8_194_base2_t_part.smt2 deleted file mode 100755 index 47858ac64..000000000 --- a/bench/tasks/car_all_e2_142_e8_194_base2_t_part.smt2 +++ /dev/null @@ -1,26 +0,0 @@ -; K = 2 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V27_dist$0 Int) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V92_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V27_dist$1 Int) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V92_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (and (and (and (>= $V27_dist$1 0) (< $V27_dist$1 11)) (< $V28_speed$1 4)) (>= $V28_speed$1 0)))) (= $V33_env$1 (ite %init $V92_X$1 (and $V92_X$1 $V33_env$0))) (= $V92_X$1 (and (not (and $m$1 $s$1)) (< $V27_dist$1 32767))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V27_dist$~1 () Int) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V92_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V27_dist$0 () Int) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V92_X$0 () Bool) -(declare-fun $m$1 () Bool) -(declare-fun $s$1 () Bool) -(declare-fun $V27_dist$3 () Int) -(declare-fun $V28_speed$3 () Int) -(declare-fun $OK$3 () Bool) -(declare-fun $V33_env$3 () Bool) -(declare-fun $V92_X$3 () Bool) -(assert (and (T false $m$0 $s$0 $V27_dist$0 $V28_speed$0 $OK$0 $V33_env$0 $V92_X$0 $m$1 $s$1 $V27_dist$3 $V28_speed$3 $OK$3 $V33_env$3 $V92_X$3) $OK$3)) diff --git a/bench/tasks/car_all_e2_142_e8_194_extend_s_part.smt2 b/bench/tasks/car_all_e2_142_e8_194_extend_s_part.smt2 deleted file mode 100755 index d762fecfa..000000000 --- a/bench/tasks/car_all_e2_142_e8_194_extend_s_part.smt2 +++ /dev/null @@ -1,20 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V27_dist$0 Int) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V92_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V27_dist$1 Int) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V92_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (and (and (and (>= $V27_dist$1 0) (< $V27_dist$1 11)) (< $V28_speed$1 4)) (>= $V28_speed$1 0)))) (= $V33_env$1 (ite %init $V92_X$1 (and $V92_X$1 $V33_env$0))) (= $V92_X$1 (and (not (and $m$1 $s$1)) (< $V27_dist$1 32767))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V27_dist$~1 () Int) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V92_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V27_dist$0 () Int) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V92_X$0 () Bool) -(assert (T %init $m$~1 $s$~1 $V27_dist$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V92_X$~1 $m$0 $s$0 $V27_dist$0 $V28_speed$0 $OK$0 $V33_env$0 $V92_X$0)) diff --git a/bench/tasks/car_all_e2_142_e8_194_extend_t_part.smt2 b/bench/tasks/car_all_e2_142_e8_194_extend_t_part.smt2 deleted file mode 100755 index 9240b1361..000000000 --- a/bench/tasks/car_all_e2_142_e8_194_extend_t_part.smt2 +++ /dev/null @@ -1,20 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V27_dist$0 Int) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V92_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V27_dist$1 Int) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V92_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (and (and (and (>= $V27_dist$1 0) (< $V27_dist$1 11)) (< $V28_speed$1 4)) (>= $V28_speed$1 0)))) (= $V33_env$1 (ite %init $V92_X$1 (and $V92_X$1 $V33_env$0))) (= $V92_X$1 (and (not (and $m$1 $s$1)) (< $V27_dist$1 32767))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V27_dist$~1 () Int) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V92_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V27_dist$2 () Int) -(declare-fun $V28_speed$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V92_X$2 () Bool) -(assert (and (T %init $m$~1 $s$~1 $V27_dist$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V92_X$~1 $m$0 $s$0 $V27_dist$2 $V28_speed$2 $OK$2 $V33_env$2 $V92_X$2) $OK$2)) diff --git a/bench/tasks/car_all_e3_1068_e4_275_base_s_part.smt2 b/bench/tasks/car_all_e3_1068_e4_275_base_s_part.smt2 deleted file mode 100755 index 7c7bccf53..000000000 --- a/bench/tasks/car_all_e3_1068_e4_275_base_s_part.smt2 +++ /dev/null @@ -1,19 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V27_dist$0 Int) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V92_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V27_dist$1 Int) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V92_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (and (and (and (>= $V27_dist$1 0) (< $V27_dist$1 11)) (< $V28_speed$1 4)) (>= $V28_speed$1 0)))) (= $V33_env$1 (ite %init $V92_X$1 (and $V92_X$1 $V33_env$0))) (= $V92_X$1 (and (not (and $m$1 $s$1)) (< $V27_dist$1 32767))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V27_dist$~1 () Int) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V92_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V27_dist$0 () Int) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V92_X$0 () Bool) -(assert (T true $m$~1 $s$~1 $V27_dist$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V92_X$~1 $m$0 $s$0 $V27_dist$0 $V28_speed$0 $OK$0 $V33_env$0 $V92_X$0)) diff --git a/bench/tasks/car_all_e3_1068_e4_275_base_t_part.smt2 b/bench/tasks/car_all_e3_1068_e4_275_base_t_part.smt2 deleted file mode 100755 index 0b97574b5..000000000 --- a/bench/tasks/car_all_e3_1068_e4_275_base_t_part.smt2 +++ /dev/null @@ -1,19 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V27_dist$0 Int) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V92_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V27_dist$1 Int) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V92_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (and (and (and (>= $V27_dist$1 0) (< $V27_dist$1 11)) (< $V28_speed$1 4)) (>= $V28_speed$1 0)))) (= $V33_env$1 (ite %init $V92_X$1 (and $V92_X$1 $V33_env$0))) (= $V92_X$1 (and (not (and $m$1 $s$1)) (< $V27_dist$1 32767))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V27_dist$~1 () Int) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V92_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V27_dist$2 () Int) -(declare-fun $V28_speed$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V92_X$2 () Bool) -(assert (and (T true $m$~1 $s$~1 $V27_dist$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V92_X$~1 $m$0 $s$0 $V27_dist$2 $V28_speed$2 $OK$2 $V33_env$2 $V92_X$2) $OK$2)) diff --git a/bench/tasks/car_all_e3_1068_e4_275_extend_s_part.smt2 b/bench/tasks/car_all_e3_1068_e4_275_extend_s_part.smt2 deleted file mode 100755 index d762fecfa..000000000 --- a/bench/tasks/car_all_e3_1068_e4_275_extend_s_part.smt2 +++ /dev/null @@ -1,20 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V27_dist$0 Int) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V92_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V27_dist$1 Int) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V92_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (and (and (and (>= $V27_dist$1 0) (< $V27_dist$1 11)) (< $V28_speed$1 4)) (>= $V28_speed$1 0)))) (= $V33_env$1 (ite %init $V92_X$1 (and $V92_X$1 $V33_env$0))) (= $V92_X$1 (and (not (and $m$1 $s$1)) (< $V27_dist$1 32767))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V27_dist$~1 () Int) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V92_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V27_dist$0 () Int) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V92_X$0 () Bool) -(assert (T %init $m$~1 $s$~1 $V27_dist$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V92_X$~1 $m$0 $s$0 $V27_dist$0 $V28_speed$0 $OK$0 $V33_env$0 $V92_X$0)) diff --git a/bench/tasks/car_all_e3_1068_e4_275_extend_t_part.smt2 b/bench/tasks/car_all_e3_1068_e4_275_extend_t_part.smt2 deleted file mode 100755 index 9240b1361..000000000 --- a/bench/tasks/car_all_e3_1068_e4_275_extend_t_part.smt2 +++ /dev/null @@ -1,20 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V27_dist$0 Int) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V92_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V27_dist$1 Int) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V92_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (and (and (and (>= $V27_dist$1 0) (< $V27_dist$1 11)) (< $V28_speed$1 4)) (>= $V28_speed$1 0)))) (= $V33_env$1 (ite %init $V92_X$1 (and $V92_X$1 $V33_env$0))) (= $V92_X$1 (and (not (and $m$1 $s$1)) (< $V27_dist$1 32767))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V27_dist$~1 () Int) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V92_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V27_dist$2 () Int) -(declare-fun $V28_speed$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V92_X$2 () Bool) -(assert (and (T %init $m$~1 $s$~1 $V27_dist$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V92_X$~1 $m$0 $s$0 $V27_dist$2 $V28_speed$2 $OK$2 $V33_env$2 $V92_X$2) $OK$2)) diff --git a/bench/tasks/car_all_e3_1068_e6_790_base1_s_part.smt2 b/bench/tasks/car_all_e3_1068_e6_790_base1_s_part.smt2 deleted file mode 100755 index 7c7bccf53..000000000 --- a/bench/tasks/car_all_e3_1068_e6_790_base1_s_part.smt2 +++ /dev/null @@ -1,19 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V27_dist$0 Int) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V92_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V27_dist$1 Int) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V92_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (and (and (and (>= $V27_dist$1 0) (< $V27_dist$1 11)) (< $V28_speed$1 4)) (>= $V28_speed$1 0)))) (= $V33_env$1 (ite %init $V92_X$1 (and $V92_X$1 $V33_env$0))) (= $V92_X$1 (and (not (and $m$1 $s$1)) (< $V27_dist$1 32767))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V27_dist$~1 () Int) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V92_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V27_dist$0 () Int) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V92_X$0 () Bool) -(assert (T true $m$~1 $s$~1 $V27_dist$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V92_X$~1 $m$0 $s$0 $V27_dist$0 $V28_speed$0 $OK$0 $V33_env$0 $V92_X$0)) diff --git a/bench/tasks/car_all_e3_1068_e6_790_base1_t_part.smt2 b/bench/tasks/car_all_e3_1068_e6_790_base1_t_part.smt2 deleted file mode 100755 index 0b97574b5..000000000 --- a/bench/tasks/car_all_e3_1068_e6_790_base1_t_part.smt2 +++ /dev/null @@ -1,19 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V27_dist$0 Int) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V92_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V27_dist$1 Int) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V92_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (and (and (and (>= $V27_dist$1 0) (< $V27_dist$1 11)) (< $V28_speed$1 4)) (>= $V28_speed$1 0)))) (= $V33_env$1 (ite %init $V92_X$1 (and $V92_X$1 $V33_env$0))) (= $V92_X$1 (and (not (and $m$1 $s$1)) (< $V27_dist$1 32767))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V27_dist$~1 () Int) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V92_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V27_dist$2 () Int) -(declare-fun $V28_speed$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V92_X$2 () Bool) -(assert (and (T true $m$~1 $s$~1 $V27_dist$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V92_X$~1 $m$0 $s$0 $V27_dist$2 $V28_speed$2 $OK$2 $V33_env$2 $V92_X$2) $OK$2)) diff --git a/bench/tasks/car_all_e3_1068_e6_790_base2_s_part.smt2 b/bench/tasks/car_all_e3_1068_e6_790_base2_s_part.smt2 deleted file mode 100755 index a81fd57d9..000000000 --- a/bench/tasks/car_all_e3_1068_e6_790_base2_s_part.smt2 +++ /dev/null @@ -1,30 +0,0 @@ -; K = 2 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V27_dist$0 Int) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V92_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V27_dist$1 Int) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V92_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (and (and (and (>= $V27_dist$1 0) (< $V27_dist$1 11)) (< $V28_speed$1 4)) (>= $V28_speed$1 0)))) (= $V33_env$1 (ite %init $V92_X$1 (and $V92_X$1 $V33_env$0))) (= $V92_X$1 (and (not (and $m$1 $s$1)) (< $V27_dist$1 32767))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V27_dist$~1 () Int) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V92_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V27_dist$0 () Int) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V92_X$0 () Bool) -(declare-fun $m$1 () Bool) -(declare-fun $s$1 () Bool) -(declare-fun $V27_dist$1 () Int) -(declare-fun $V28_speed$1 () Int) -(declare-fun $OK$1 () Bool) -(declare-fun $V33_env$1 () Bool) -(declare-fun $V92_X$1 () Bool) -; Existentially quantified variables -; Assertions for universal part of the formula -(assert (T true $m$~1 $s$~1 $V27_dist$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V92_X$~1 $m$0 $s$0 $V27_dist$0 $V28_speed$0 $OK$0 $V33_env$0 $V92_X$0)) -(assert $OK$0) -(assert (T false $m$0 $s$0 $V27_dist$0 $V28_speed$0 $OK$0 $V33_env$0 $V92_X$0 $m$1 $s$1 $V27_dist$1 $V28_speed$1 $OK$1 $V33_env$1 $V92_X$1)) diff --git a/bench/tasks/car_all_e3_1068_e6_790_base2_t_part.smt2 b/bench/tasks/car_all_e3_1068_e6_790_base2_t_part.smt2 deleted file mode 100755 index 47858ac64..000000000 --- a/bench/tasks/car_all_e3_1068_e6_790_base2_t_part.smt2 +++ /dev/null @@ -1,26 +0,0 @@ -; K = 2 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V27_dist$0 Int) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V92_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V27_dist$1 Int) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V92_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (and (and (and (>= $V27_dist$1 0) (< $V27_dist$1 11)) (< $V28_speed$1 4)) (>= $V28_speed$1 0)))) (= $V33_env$1 (ite %init $V92_X$1 (and $V92_X$1 $V33_env$0))) (= $V92_X$1 (and (not (and $m$1 $s$1)) (< $V27_dist$1 32767))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V27_dist$~1 () Int) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V92_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V27_dist$0 () Int) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V92_X$0 () Bool) -(declare-fun $m$1 () Bool) -(declare-fun $s$1 () Bool) -(declare-fun $V27_dist$3 () Int) -(declare-fun $V28_speed$3 () Int) -(declare-fun $OK$3 () Bool) -(declare-fun $V33_env$3 () Bool) -(declare-fun $V92_X$3 () Bool) -(assert (and (T false $m$0 $s$0 $V27_dist$0 $V28_speed$0 $OK$0 $V33_env$0 $V92_X$0 $m$1 $s$1 $V27_dist$3 $V28_speed$3 $OK$3 $V33_env$3 $V92_X$3) $OK$3)) diff --git a/bench/tasks/car_all_e3_1068_e6_790_extend_s_part.smt2 b/bench/tasks/car_all_e3_1068_e6_790_extend_s_part.smt2 deleted file mode 100755 index d762fecfa..000000000 --- a/bench/tasks/car_all_e3_1068_e6_790_extend_s_part.smt2 +++ /dev/null @@ -1,20 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V27_dist$0 Int) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V92_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V27_dist$1 Int) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V92_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (and (and (and (>= $V27_dist$1 0) (< $V27_dist$1 11)) (< $V28_speed$1 4)) (>= $V28_speed$1 0)))) (= $V33_env$1 (ite %init $V92_X$1 (and $V92_X$1 $V33_env$0))) (= $V92_X$1 (and (not (and $m$1 $s$1)) (< $V27_dist$1 32767))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V27_dist$~1 () Int) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V92_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V27_dist$0 () Int) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V92_X$0 () Bool) -(assert (T %init $m$~1 $s$~1 $V27_dist$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V92_X$~1 $m$0 $s$0 $V27_dist$0 $V28_speed$0 $OK$0 $V33_env$0 $V92_X$0)) diff --git a/bench/tasks/car_all_e3_1068_e6_790_extend_t_part.smt2 b/bench/tasks/car_all_e3_1068_e6_790_extend_t_part.smt2 deleted file mode 100755 index 9240b1361..000000000 --- a/bench/tasks/car_all_e3_1068_e6_790_extend_t_part.smt2 +++ /dev/null @@ -1,20 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V27_dist$0 Int) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V92_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V27_dist$1 Int) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V92_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (and (and (and (>= $V27_dist$1 0) (< $V27_dist$1 11)) (< $V28_speed$1 4)) (>= $V28_speed$1 0)))) (= $V33_env$1 (ite %init $V92_X$1 (and $V92_X$1 $V33_env$0))) (= $V92_X$1 (and (not (and $m$1 $s$1)) (< $V27_dist$1 32767))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V27_dist$~1 () Int) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V92_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V27_dist$2 () Int) -(declare-fun $V28_speed$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V92_X$2 () Bool) -(assert (and (T %init $m$~1 $s$~1 $V27_dist$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V92_X$~1 $m$0 $s$0 $V27_dist$2 $V28_speed$2 $OK$2 $V33_env$2 $V92_X$2) $OK$2)) diff --git a/bench/tasks/car_all_e8_856_base1_s_part.smt2 b/bench/tasks/car_all_e8_856_base1_s_part.smt2 deleted file mode 100755 index 7c7bccf53..000000000 --- a/bench/tasks/car_all_e8_856_base1_s_part.smt2 +++ /dev/null @@ -1,19 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V27_dist$0 Int) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V92_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V27_dist$1 Int) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V92_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (and (and (and (>= $V27_dist$1 0) (< $V27_dist$1 11)) (< $V28_speed$1 4)) (>= $V28_speed$1 0)))) (= $V33_env$1 (ite %init $V92_X$1 (and $V92_X$1 $V33_env$0))) (= $V92_X$1 (and (not (and $m$1 $s$1)) (< $V27_dist$1 32767))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V27_dist$~1 () Int) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V92_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V27_dist$0 () Int) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V92_X$0 () Bool) -(assert (T true $m$~1 $s$~1 $V27_dist$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V92_X$~1 $m$0 $s$0 $V27_dist$0 $V28_speed$0 $OK$0 $V33_env$0 $V92_X$0)) diff --git a/bench/tasks/car_all_e8_856_base1_t_part.smt2 b/bench/tasks/car_all_e8_856_base1_t_part.smt2 deleted file mode 100755 index 0b97574b5..000000000 --- a/bench/tasks/car_all_e8_856_base1_t_part.smt2 +++ /dev/null @@ -1,19 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V27_dist$0 Int) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V92_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V27_dist$1 Int) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V92_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (and (and (and (>= $V27_dist$1 0) (< $V27_dist$1 11)) (< $V28_speed$1 4)) (>= $V28_speed$1 0)))) (= $V33_env$1 (ite %init $V92_X$1 (and $V92_X$1 $V33_env$0))) (= $V92_X$1 (and (not (and $m$1 $s$1)) (< $V27_dist$1 32767))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V27_dist$~1 () Int) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V92_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V27_dist$2 () Int) -(declare-fun $V28_speed$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V92_X$2 () Bool) -(assert (and (T true $m$~1 $s$~1 $V27_dist$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V92_X$~1 $m$0 $s$0 $V27_dist$2 $V28_speed$2 $OK$2 $V33_env$2 $V92_X$2) $OK$2)) diff --git a/bench/tasks/car_all_e8_856_base2_s_part.smt2 b/bench/tasks/car_all_e8_856_base2_s_part.smt2 deleted file mode 100755 index 46761d7e4..000000000 --- a/bench/tasks/car_all_e8_856_base2_s_part.smt2 +++ /dev/null @@ -1,28 +0,0 @@ -; K = 2 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V27_dist$0 Int) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V92_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V27_dist$1 Int) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V92_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (and (and (and (>= $V27_dist$1 0) (< $V27_dist$1 11)) (< $V28_speed$1 4)) (>= $V28_speed$1 0)))) (= $V33_env$1 (ite %init $V92_X$1 (and $V92_X$1 $V33_env$0))) (= $V92_X$1 (and (not (and $m$1 $s$1)) (< $V27_dist$1 32767))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V27_dist$~1 () Int) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V92_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V27_dist$0 () Int) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V92_X$0 () Bool) -(declare-fun $m$1 () Bool) -(declare-fun $s$1 () Bool) -(declare-fun $V27_dist$1 () Int) -(declare-fun $V28_speed$1 () Int) -(declare-fun $OK$1 () Bool) -(declare-fun $V33_env$1 () Bool) -(declare-fun $V92_X$1 () Bool) -(assert (T true $m$~1 $s$~1 $V27_dist$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V92_X$~1 $m$0 $s$0 $V27_dist$0 $V28_speed$0 $OK$0 $V33_env$0 $V92_X$0)) -(assert $OK$0) -(assert (T false $m$0 $s$0 $V27_dist$0 $V28_speed$0 $OK$0 $V33_env$0 $V92_X$0 $m$1 $s$1 $V27_dist$1 $V28_speed$1 $OK$1 $V33_env$1 $V92_X$1)) diff --git a/bench/tasks/car_all_e8_856_base2_t_part.smt2 b/bench/tasks/car_all_e8_856_base2_t_part.smt2 deleted file mode 100755 index 47858ac64..000000000 --- a/bench/tasks/car_all_e8_856_base2_t_part.smt2 +++ /dev/null @@ -1,26 +0,0 @@ -; K = 2 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V27_dist$0 Int) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V92_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V27_dist$1 Int) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V92_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (and (and (and (>= $V27_dist$1 0) (< $V27_dist$1 11)) (< $V28_speed$1 4)) (>= $V28_speed$1 0)))) (= $V33_env$1 (ite %init $V92_X$1 (and $V92_X$1 $V33_env$0))) (= $V92_X$1 (and (not (and $m$1 $s$1)) (< $V27_dist$1 32767))))) -; Universally quantified variables -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V27_dist$~1 () Int) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V92_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V27_dist$0 () Int) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V92_X$0 () Bool) -(declare-fun $m$1 () Bool) -(declare-fun $s$1 () Bool) -(declare-fun $V27_dist$3 () Int) -(declare-fun $V28_speed$3 () Int) -(declare-fun $OK$3 () Bool) -(declare-fun $V33_env$3 () Bool) -(declare-fun $V92_X$3 () Bool) -(assert (and (T false $m$0 $s$0 $V27_dist$0 $V28_speed$0 $OK$0 $V33_env$0 $V92_X$0 $m$1 $s$1 $V27_dist$3 $V28_speed$3 $OK$3 $V33_env$3 $V92_X$3) $OK$3)) diff --git a/bench/tasks/car_all_e8_856_extend_s_part.smt2 b/bench/tasks/car_all_e8_856_extend_s_part.smt2 deleted file mode 100755 index d762fecfa..000000000 --- a/bench/tasks/car_all_e8_856_extend_s_part.smt2 +++ /dev/null @@ -1,20 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V27_dist$0 Int) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V92_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V27_dist$1 Int) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V92_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (and (and (and (>= $V27_dist$1 0) (< $V27_dist$1 11)) (< $V28_speed$1 4)) (>= $V28_speed$1 0)))) (= $V33_env$1 (ite %init $V92_X$1 (and $V92_X$1 $V33_env$0))) (= $V92_X$1 (and (not (and $m$1 $s$1)) (< $V27_dist$1 32767))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V27_dist$~1 () Int) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V92_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V27_dist$0 () Int) -(declare-fun $V28_speed$0 () Int) -(declare-fun $OK$0 () Bool) -(declare-fun $V33_env$0 () Bool) -(declare-fun $V92_X$0 () Bool) -(assert (T %init $m$~1 $s$~1 $V27_dist$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V92_X$~1 $m$0 $s$0 $V27_dist$0 $V28_speed$0 $OK$0 $V33_env$0 $V92_X$0)) diff --git a/bench/tasks/car_all_e8_856_extend_t_part.smt2 b/bench/tasks/car_all_e8_856_extend_t_part.smt2 deleted file mode 100644 index 9240b1361..000000000 --- a/bench/tasks/car_all_e8_856_extend_t_part.smt2 +++ /dev/null @@ -1,20 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($m$0 Bool) ($s$0 Bool) ($V27_dist$0 Int) ($V28_speed$0 Int) ($OK$0 Bool) ($V33_env$0 Bool) ($V92_X$0 Bool) ($m$1 Bool) ($s$1 Bool) ($V27_dist$1 Int) ($V28_speed$1 Int) ($OK$1 Bool) ($V33_env$1 Bool) ($V92_X$1 Bool)) Bool (and (= $OK$1 (=> $V33_env$1 (and (and (and (>= $V27_dist$1 0) (< $V27_dist$1 11)) (< $V28_speed$1 4)) (>= $V28_speed$1 0)))) (= $V33_env$1 (ite %init $V92_X$1 (and $V92_X$1 $V33_env$0))) (= $V92_X$1 (and (not (and $m$1 $s$1)) (< $V27_dist$1 32767))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $m$~1 () Bool) -(declare-fun $s$~1 () Bool) -(declare-fun $V27_dist$~1 () Int) -(declare-fun $V28_speed$~1 () Int) -(declare-fun $OK$~1 () Bool) -(declare-fun $V33_env$~1 () Bool) -(declare-fun $V92_X$~1 () Bool) -(declare-fun $m$0 () Bool) -(declare-fun $s$0 () Bool) -(declare-fun $V27_dist$2 () Int) -(declare-fun $V28_speed$2 () Int) -(declare-fun $OK$2 () Bool) -(declare-fun $V33_env$2 () Bool) -(declare-fun $V92_X$2 () Bool) -(assert (and (T %init $m$~1 $s$~1 $V27_dist$~1 $V28_speed$~1 $OK$~1 $V33_env$~1 $V92_X$~1 $m$0 $s$0 $V27_dist$2 $V28_speed$2 $OK$2 $V33_env$2 $V92_X$2) $OK$2)) diff --git a/bench/tasks/cd_base1_s_part.smt2 b/bench/tasks/cd_base1_s_part.smt2 deleted file mode 100755 index e2b083906..000000000 --- a/bench/tasks/cd_base1_s_part.smt2 +++ /dev/null @@ -1,37 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($diff$0 Int) ($speed$0 Int) ($plus$0 Bool) ($minus$0 Bool) ($OK$0 Bool) ($realistic$0 Bool) ($Environment~0.diff$0 Int) ($Environment~0.plus$0 Bool) ($Environment~0.minus$0 Bool) ($Environment~0.ok$0 Bool) ($Sofar~0.X$0 Bool) ($Sofar~0.Sofar$0 Bool) ($Property~0.speed$0 Int) ($Property~0.ok$0 Bool) ($Property~0.cpt$0 Int) ($Property~0.acceptable$0 Bool) ($diff$1 Int) ($speed$1 Int) ($plus$1 Bool) ($minus$1 Bool) ($OK$1 Bool) ($realistic$1 Bool) ($Environment~0.diff$1 Int) ($Environment~0.plus$1 Bool) ($Environment~0.minus$1 Bool) ($Environment~0.ok$1 Bool) ($Sofar~0.X$1 Bool) ($Sofar~0.Sofar$1 Bool) ($Property~0.speed$1 Int) ($Property~0.ok$1 Bool) ($Property~0.cpt$1 Int) ($Property~0.acceptable$1 Bool)) Bool (and (= $realistic$1 $Environment~0.ok$1) (= $OK$1 (=> $Sofar~0.Sofar$1 $Property~0.ok$1)) (= $Environment~0.diff$1 $diff$1) (= $Environment~0.plus$1 $plus$1) (= $Environment~0.minus$1 $minus$1) (= $Environment~0.ok$1 (and (and (and (<= (- 0 4) $Environment~0.diff$1) (<= $Environment~0.diff$1 4)) (ite (ite %init true $Environment~0.plus$0) (>= $Environment~0.diff$1 1) true)) (ite (ite %init false $Environment~0.minus$0) (<= $Environment~0.diff$1 (- 0 1)) true))) (= $Sofar~0.X$1 (and (and $realistic$1 (<= 0 $speed$1)) (< $speed$1 16))) (= $Sofar~0.Sofar$1 (ite %init $Sofar~0.X$1 (and $Sofar~0.X$1 $Sofar~0.Sofar$0))) (= $Property~0.speed$1 $speed$1) (= $Property~0.acceptable$1 (and (<= 8 $Property~0.speed$1) (<= $Property~0.speed$1 12))) (= $Property~0.cpt$1 (ite %init 0 (ite $Property~0.acceptable$1 0 (+ $Property~0.cpt$0 1)))) (= $Property~0.ok$1 (ite %init true (<= $Property~0.cpt$0 7))))) -; Universally quantified variables -(declare-fun $diff$~1 () Int) -(declare-fun $speed$~1 () Int) -(declare-fun $plus$~1 () Bool) -(declare-fun $minus$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $realistic$~1 () Bool) -(declare-fun $Environment~0.diff$~1 () Int) -(declare-fun $Environment~0.plus$~1 () Bool) -(declare-fun $Environment~0.minus$~1 () Bool) -(declare-fun $Environment~0.ok$~1 () Bool) -(declare-fun $Sofar~0.X$~1 () Bool) -(declare-fun $Sofar~0.Sofar$~1 () Bool) -(declare-fun $Property~0.speed$~1 () Int) -(declare-fun $Property~0.ok$~1 () Bool) -(declare-fun $Property~0.cpt$~1 () Int) -(declare-fun $Property~0.acceptable$~1 () Bool) -(declare-fun $diff$0 () Int) -(declare-fun $speed$0 () Int) -(declare-fun $plus$0 () Bool) -(declare-fun $minus$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $realistic$0 () Bool) -(declare-fun $Environment~0.diff$0 () Int) -(declare-fun $Environment~0.plus$0 () Bool) -(declare-fun $Environment~0.minus$0 () Bool) -(declare-fun $Environment~0.ok$0 () Bool) -(declare-fun $Sofar~0.X$0 () Bool) -(declare-fun $Sofar~0.Sofar$0 () Bool) -(declare-fun $Property~0.speed$0 () Int) -(declare-fun $Property~0.ok$0 () Bool) -(declare-fun $Property~0.cpt$0 () Int) -(declare-fun $Property~0.acceptable$0 () Bool) -(assert (T true $diff$~1 $speed$~1 $plus$~1 $minus$~1 $OK$~1 $realistic$~1 $Environment~0.diff$~1 $Environment~0.plus$~1 $Environment~0.minus$~1 $Environment~0.ok$~1 $Sofar~0.X$~1 $Sofar~0.Sofar$~1 $Property~0.speed$~1 $Property~0.ok$~1 $Property~0.cpt$~1 $Property~0.acceptable$~1 $diff$0 $speed$0 $plus$0 $minus$0 $OK$0 $realistic$0 $Environment~0.diff$0 $Environment~0.plus$0 $Environment~0.minus$0 $Environment~0.ok$0 $Sofar~0.X$0 $Sofar~0.Sofar$0 $Property~0.speed$0 $Property~0.ok$0 $Property~0.cpt$0 $Property~0.acceptable$0)) diff --git a/bench/tasks/cd_base1_t_part.smt2 b/bench/tasks/cd_base1_t_part.smt2 deleted file mode 100755 index b53b83d01..000000000 --- a/bench/tasks/cd_base1_t_part.smt2 +++ /dev/null @@ -1,37 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($diff$0 Int) ($speed$0 Int) ($plus$0 Bool) ($minus$0 Bool) ($OK$0 Bool) ($realistic$0 Bool) ($Environment~0.diff$0 Int) ($Environment~0.plus$0 Bool) ($Environment~0.minus$0 Bool) ($Environment~0.ok$0 Bool) ($Sofar~0.X$0 Bool) ($Sofar~0.Sofar$0 Bool) ($Property~0.speed$0 Int) ($Property~0.ok$0 Bool) ($Property~0.cpt$0 Int) ($Property~0.acceptable$0 Bool) ($diff$1 Int) ($speed$1 Int) ($plus$1 Bool) ($minus$1 Bool) ($OK$1 Bool) ($realistic$1 Bool) ($Environment~0.diff$1 Int) ($Environment~0.plus$1 Bool) ($Environment~0.minus$1 Bool) ($Environment~0.ok$1 Bool) ($Sofar~0.X$1 Bool) ($Sofar~0.Sofar$1 Bool) ($Property~0.speed$1 Int) ($Property~0.ok$1 Bool) ($Property~0.cpt$1 Int) ($Property~0.acceptable$1 Bool)) Bool (and (= $realistic$1 $Environment~0.ok$1) (= $OK$1 (=> $Sofar~0.Sofar$1 $Property~0.ok$1)) (= $Environment~0.diff$1 $diff$1) (= $Environment~0.plus$1 $plus$1) (= $Environment~0.minus$1 $minus$1) (= $Environment~0.ok$1 (and (and (and (<= (- 0 4) $Environment~0.diff$1) (<= $Environment~0.diff$1 4)) (ite (ite %init true $Environment~0.plus$0) (>= $Environment~0.diff$1 1) true)) (ite (ite %init false $Environment~0.minus$0) (<= $Environment~0.diff$1 (- 0 1)) true))) (= $Sofar~0.X$1 (and (and $realistic$1 (<= 0 $speed$1)) (< $speed$1 16))) (= $Sofar~0.Sofar$1 (ite %init $Sofar~0.X$1 (and $Sofar~0.X$1 $Sofar~0.Sofar$0))) (= $Property~0.speed$1 $speed$1) (= $Property~0.acceptable$1 (and (<= 8 $Property~0.speed$1) (<= $Property~0.speed$1 12))) (= $Property~0.cpt$1 (ite %init 0 (ite $Property~0.acceptable$1 0 (+ $Property~0.cpt$0 1)))) (= $Property~0.ok$1 (ite %init true (<= $Property~0.cpt$0 7))))) -; Universally quantified variables -(declare-fun $diff$~1 () Int) -(declare-fun $speed$~1 () Int) -(declare-fun $plus$~1 () Bool) -(declare-fun $minus$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $realistic$~1 () Bool) -(declare-fun $Environment~0.diff$~1 () Int) -(declare-fun $Environment~0.plus$~1 () Bool) -(declare-fun $Environment~0.minus$~1 () Bool) -(declare-fun $Environment~0.ok$~1 () Bool) -(declare-fun $Sofar~0.X$~1 () Bool) -(declare-fun $Sofar~0.Sofar$~1 () Bool) -(declare-fun $Property~0.speed$~1 () Int) -(declare-fun $Property~0.ok$~1 () Bool) -(declare-fun $Property~0.cpt$~1 () Int) -(declare-fun $Property~0.acceptable$~1 () Bool) -(declare-fun $diff$0 () Int) -(declare-fun $speed$2 () Int) -(declare-fun $plus$2 () Bool) -(declare-fun $minus$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $realistic$2 () Bool) -(declare-fun $Environment~0.diff$2 () Int) -(declare-fun $Environment~0.plus$2 () Bool) -(declare-fun $Environment~0.minus$2 () Bool) -(declare-fun $Environment~0.ok$2 () Bool) -(declare-fun $Sofar~0.X$2 () Bool) -(declare-fun $Sofar~0.Sofar$2 () Bool) -(declare-fun $Property~0.speed$2 () Int) -(declare-fun $Property~0.ok$2 () Bool) -(declare-fun $Property~0.cpt$2 () Int) -(declare-fun $Property~0.acceptable$2 () Bool) -(assert (and (T true $diff$~1 $speed$~1 $plus$~1 $minus$~1 $OK$~1 $realistic$~1 $Environment~0.diff$~1 $Environment~0.plus$~1 $Environment~0.minus$~1 $Environment~0.ok$~1 $Sofar~0.X$~1 $Sofar~0.Sofar$~1 $Property~0.speed$~1 $Property~0.ok$~1 $Property~0.cpt$~1 $Property~0.acceptable$~1 $diff$0 $speed$2 $plus$2 $minus$2 $OK$2 $realistic$2 $Environment~0.diff$2 $Environment~0.plus$2 $Environment~0.minus$2 $Environment~0.ok$2 $Sofar~0.X$2 $Sofar~0.Sofar$2 $Property~0.speed$2 $Property~0.ok$2 $Property~0.cpt$2 $Property~0.acceptable$2) $OK$2)) diff --git a/bench/tasks/cd_base2_s_part.smt2 b/bench/tasks/cd_base2_s_part.smt2 deleted file mode 100755 index 136ffd566..000000000 --- a/bench/tasks/cd_base2_s_part.smt2 +++ /dev/null @@ -1,55 +0,0 @@ -; K = 2 -; Transition relation -(define-fun T ((%init Bool) ($diff$0 Int) ($speed$0 Int) ($plus$0 Bool) ($minus$0 Bool) ($OK$0 Bool) ($realistic$0 Bool) ($Environment~0.diff$0 Int) ($Environment~0.plus$0 Bool) ($Environment~0.minus$0 Bool) ($Environment~0.ok$0 Bool) ($Sofar~0.X$0 Bool) ($Sofar~0.Sofar$0 Bool) ($Property~0.speed$0 Int) ($Property~0.ok$0 Bool) ($Property~0.cpt$0 Int) ($Property~0.acceptable$0 Bool) ($diff$1 Int) ($speed$1 Int) ($plus$1 Bool) ($minus$1 Bool) ($OK$1 Bool) ($realistic$1 Bool) ($Environment~0.diff$1 Int) ($Environment~0.plus$1 Bool) ($Environment~0.minus$1 Bool) ($Environment~0.ok$1 Bool) ($Sofar~0.X$1 Bool) ($Sofar~0.Sofar$1 Bool) ($Property~0.speed$1 Int) ($Property~0.ok$1 Bool) ($Property~0.cpt$1 Int) ($Property~0.acceptable$1 Bool)) Bool (and (= $realistic$1 $Environment~0.ok$1) (= $OK$1 (=> $Sofar~0.Sofar$1 $Property~0.ok$1)) (= $Environment~0.diff$1 $diff$1) (= $Environment~0.plus$1 $plus$1) (= $Environment~0.minus$1 $minus$1) (= $Environment~0.ok$1 (and (and (and (<= (- 0 4) $Environment~0.diff$1) (<= $Environment~0.diff$1 4)) (ite (ite %init true $Environment~0.plus$0) (>= $Environment~0.diff$1 1) true)) (ite (ite %init false $Environment~0.minus$0) (<= $Environment~0.diff$1 (- 0 1)) true))) (= $Sofar~0.X$1 (and (and $realistic$1 (<= 0 $speed$1)) (< $speed$1 16))) (= $Sofar~0.Sofar$1 (ite %init $Sofar~0.X$1 (and $Sofar~0.X$1 $Sofar~0.Sofar$0))) (= $Property~0.speed$1 $speed$1) (= $Property~0.acceptable$1 (and (<= 8 $Property~0.speed$1) (<= $Property~0.speed$1 12))) (= $Property~0.cpt$1 (ite %init 0 (ite $Property~0.acceptable$1 0 (+ $Property~0.cpt$0 1)))) (= $Property~0.ok$1 (ite %init true (<= $Property~0.cpt$0 7))))) -; Universally quantified variables -(declare-fun $diff$~1 () Int) -(declare-fun $speed$~1 () Int) -(declare-fun $plus$~1 () Bool) -(declare-fun $minus$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $realistic$~1 () Bool) -(declare-fun $Environment~0.diff$~1 () Int) -(declare-fun $Environment~0.plus$~1 () Bool) -(declare-fun $Environment~0.minus$~1 () Bool) -(declare-fun $Environment~0.ok$~1 () Bool) -(declare-fun $Sofar~0.X$~1 () Bool) -(declare-fun $Sofar~0.Sofar$~1 () Bool) -(declare-fun $Property~0.speed$~1 () Int) -(declare-fun $Property~0.ok$~1 () Bool) -(declare-fun $Property~0.cpt$~1 () Int) -(declare-fun $Property~0.acceptable$~1 () Bool) -(declare-fun $diff$0 () Int) -(declare-fun $speed$0 () Int) -(declare-fun $plus$0 () Bool) -(declare-fun $minus$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $realistic$0 () Bool) -(declare-fun $Environment~0.diff$0 () Int) -(declare-fun $Environment~0.plus$0 () Bool) -(declare-fun $Environment~0.minus$0 () Bool) -(declare-fun $Environment~0.ok$0 () Bool) -(declare-fun $Sofar~0.X$0 () Bool) -(declare-fun $Sofar~0.Sofar$0 () Bool) -(declare-fun $Property~0.speed$0 () Int) -(declare-fun $Property~0.ok$0 () Bool) -(declare-fun $Property~0.cpt$0 () Int) -(declare-fun $Property~0.acceptable$0 () Bool) -(declare-fun $diff$1 () Int) -(declare-fun $speed$1 () Int) -(declare-fun $plus$1 () Bool) -(declare-fun $minus$1 () Bool) -(declare-fun $OK$1 () Bool) -(declare-fun $realistic$1 () Bool) -(declare-fun $Environment~0.diff$1 () Int) -(declare-fun $Environment~0.plus$1 () Bool) -(declare-fun $Environment~0.minus$1 () Bool) -(declare-fun $Environment~0.ok$1 () Bool) -(declare-fun $Sofar~0.X$1 () Bool) -(declare-fun $Sofar~0.Sofar$1 () Bool) -(declare-fun $Property~0.speed$1 () Int) -(declare-fun $Property~0.ok$1 () Bool) -(declare-fun $Property~0.cpt$1 () Int) -(declare-fun $Property~0.acceptable$1 () Bool) -(assert (T true $diff$~1 $speed$~1 $plus$~1 $minus$~1 $OK$~1 $realistic$~1 $Environment~0.diff$~1 $Environment~0.plus$~1 $Environment~0.minus$~1 $Environment~0.ok$~1 $Sofar~0.X$~1 $Sofar~0.Sofar$~1 $Property~0.speed$~1 $Property~0.ok$~1 $Property~0.cpt$~1 $Property~0.acceptable$~1 $diff$0 $speed$0 $plus$0 $minus$0 $OK$0 $realistic$0 $Environment~0.diff$0 $Environment~0.plus$0 $Environment~0.minus$0 $Environment~0.ok$0 $Sofar~0.X$0 $Sofar~0.Sofar$0 $Property~0.speed$0 $Property~0.ok$0 $Property~0.cpt$0 $Property~0.acceptable$0)) -(assert $OK$0) -(assert (T false $diff$0 $speed$0 $plus$0 $minus$0 $OK$0 $realistic$0 $Environment~0.diff$0 $Environment~0.plus$0 $Environment~0.minus$0 $Environment~0.ok$0 $Sofar~0.X$0 $Sofar~0.Sofar$0 $Property~0.speed$0 $Property~0.ok$0 $Property~0.cpt$0 $Property~0.acceptable$0 $diff$1 $speed$1 $plus$1 $minus$1 $OK$1 $realistic$1 $Environment~0.diff$1 $Environment~0.plus$1 $Environment~0.minus$1 $Environment~0.ok$1 $Sofar~0.X$1 $Sofar~0.Sofar$1 $Property~0.speed$1 $Property~0.ok$1 $Property~0.cpt$1 $Property~0.acceptable$1)) diff --git a/bench/tasks/cd_base2_t_part.smt2 b/bench/tasks/cd_base2_t_part.smt2 deleted file mode 100755 index 6f192ad09..000000000 --- a/bench/tasks/cd_base2_t_part.smt2 +++ /dev/null @@ -1,53 +0,0 @@ -; K = 2 -; Transition relation -(define-fun T ((%init Bool) ($diff$0 Int) ($speed$0 Int) ($plus$0 Bool) ($minus$0 Bool) ($OK$0 Bool) ($realistic$0 Bool) ($Environment~0.diff$0 Int) ($Environment~0.plus$0 Bool) ($Environment~0.minus$0 Bool) ($Environment~0.ok$0 Bool) ($Sofar~0.X$0 Bool) ($Sofar~0.Sofar$0 Bool) ($Property~0.speed$0 Int) ($Property~0.ok$0 Bool) ($Property~0.cpt$0 Int) ($Property~0.acceptable$0 Bool) ($diff$1 Int) ($speed$1 Int) ($plus$1 Bool) ($minus$1 Bool) ($OK$1 Bool) ($realistic$1 Bool) ($Environment~0.diff$1 Int) ($Environment~0.plus$1 Bool) ($Environment~0.minus$1 Bool) ($Environment~0.ok$1 Bool) ($Sofar~0.X$1 Bool) ($Sofar~0.Sofar$1 Bool) ($Property~0.speed$1 Int) ($Property~0.ok$1 Bool) ($Property~0.cpt$1 Int) ($Property~0.acceptable$1 Bool)) Bool (and (= $realistic$1 $Environment~0.ok$1) (= $OK$1 (=> $Sofar~0.Sofar$1 $Property~0.ok$1)) (= $Environment~0.diff$1 $diff$1) (= $Environment~0.plus$1 $plus$1) (= $Environment~0.minus$1 $minus$1) (= $Environment~0.ok$1 (and (and (and (<= (- 0 4) $Environment~0.diff$1) (<= $Environment~0.diff$1 4)) (ite (ite %init true $Environment~0.plus$0) (>= $Environment~0.diff$1 1) true)) (ite (ite %init false $Environment~0.minus$0) (<= $Environment~0.diff$1 (- 0 1)) true))) (= $Sofar~0.X$1 (and (and $realistic$1 (<= 0 $speed$1)) (< $speed$1 16))) (= $Sofar~0.Sofar$1 (ite %init $Sofar~0.X$1 (and $Sofar~0.X$1 $Sofar~0.Sofar$0))) (= $Property~0.speed$1 $speed$1) (= $Property~0.acceptable$1 (and (<= 8 $Property~0.speed$1) (<= $Property~0.speed$1 12))) (= $Property~0.cpt$1 (ite %init 0 (ite $Property~0.acceptable$1 0 (+ $Property~0.cpt$0 1)))) (= $Property~0.ok$1 (ite %init true (<= $Property~0.cpt$0 7))))) -; Universally quantified variables -(declare-fun $diff$~1 () Int) -(declare-fun $speed$~1 () Int) -(declare-fun $plus$~1 () Bool) -(declare-fun $minus$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $realistic$~1 () Bool) -(declare-fun $Environment~0.diff$~1 () Int) -(declare-fun $Environment~0.plus$~1 () Bool) -(declare-fun $Environment~0.minus$~1 () Bool) -(declare-fun $Environment~0.ok$~1 () Bool) -(declare-fun $Sofar~0.X$~1 () Bool) -(declare-fun $Sofar~0.Sofar$~1 () Bool) -(declare-fun $Property~0.speed$~1 () Int) -(declare-fun $Property~0.ok$~1 () Bool) -(declare-fun $Property~0.cpt$~1 () Int) -(declare-fun $Property~0.acceptable$~1 () Bool) -(declare-fun $diff$0 () Int) -(declare-fun $speed$0 () Int) -(declare-fun $plus$0 () Bool) -(declare-fun $minus$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $realistic$0 () Bool) -(declare-fun $Environment~0.diff$0 () Int) -(declare-fun $Environment~0.plus$0 () Bool) -(declare-fun $Environment~0.minus$0 () Bool) -(declare-fun $Environment~0.ok$0 () Bool) -(declare-fun $Sofar~0.X$0 () Bool) -(declare-fun $Sofar~0.Sofar$0 () Bool) -(declare-fun $Property~0.speed$0 () Int) -(declare-fun $Property~0.ok$0 () Bool) -(declare-fun $Property~0.cpt$0 () Int) -(declare-fun $Property~0.acceptable$0 () Bool) -(declare-fun $diff$1 () Int) -(declare-fun $speed$3 () Int) -(declare-fun $plus$3 () Bool) -(declare-fun $minus$3 () Bool) -(declare-fun $OK$3 () Bool) -(declare-fun $realistic$3 () Bool) -(declare-fun $Environment~0.diff$3 () Int) -(declare-fun $Environment~0.plus$3 () Bool) -(declare-fun $Environment~0.minus$3 () Bool) -(declare-fun $Environment~0.ok$3 () Bool) -(declare-fun $Sofar~0.X$3 () Bool) -(declare-fun $Sofar~0.Sofar$3 () Bool) -(declare-fun $Property~0.speed$3 () Int) -(declare-fun $Property~0.ok$3 () Bool) -(declare-fun $Property~0.cpt$3 () Int) -(declare-fun $Property~0.acceptable$3 () Bool) -(assert (and (T false $diff$0 $speed$0 $plus$0 $minus$0 $OK$0 $realistic$0 $Environment~0.diff$0 $Environment~0.plus$0 $Environment~0.minus$0 $Environment~0.ok$0 $Sofar~0.X$0 $Sofar~0.Sofar$0 $Property~0.speed$0 $Property~0.ok$0 $Property~0.cpt$0 $Property~0.acceptable$0 $diff$1 $speed$3 $plus$3 $minus$3 $OK$3 $realistic$3 $Environment~0.diff$3 $Environment~0.plus$3 $Environment~0.minus$3 $Environment~0.ok$3 $Sofar~0.X$3 $Sofar~0.Sofar$3 $Property~0.speed$3 $Property~0.ok$3 $Property~0.cpt$3 $Property~0.acceptable$3) $OK$3)) diff --git a/bench/tasks/cd_base3_s_part.smt2 b/bench/tasks/cd_base3_s_part.smt2 deleted file mode 100755 index 6cff2e04c..000000000 --- a/bench/tasks/cd_base3_s_part.smt2 +++ /dev/null @@ -1,73 +0,0 @@ -; K = 3 -; Transition relation -(define-fun T ((%init Bool) ($diff$0 Int) ($speed$0 Int) ($plus$0 Bool) ($minus$0 Bool) ($OK$0 Bool) ($realistic$0 Bool) ($Environment~0.diff$0 Int) ($Environment~0.plus$0 Bool) ($Environment~0.minus$0 Bool) ($Environment~0.ok$0 Bool) ($Sofar~0.X$0 Bool) ($Sofar~0.Sofar$0 Bool) ($Property~0.speed$0 Int) ($Property~0.ok$0 Bool) ($Property~0.cpt$0 Int) ($Property~0.acceptable$0 Bool) ($diff$1 Int) ($speed$1 Int) ($plus$1 Bool) ($minus$1 Bool) ($OK$1 Bool) ($realistic$1 Bool) ($Environment~0.diff$1 Int) ($Environment~0.plus$1 Bool) ($Environment~0.minus$1 Bool) ($Environment~0.ok$1 Bool) ($Sofar~0.X$1 Bool) ($Sofar~0.Sofar$1 Bool) ($Property~0.speed$1 Int) ($Property~0.ok$1 Bool) ($Property~0.cpt$1 Int) ($Property~0.acceptable$1 Bool)) Bool (and (= $realistic$1 $Environment~0.ok$1) (= $OK$1 (=> $Sofar~0.Sofar$1 $Property~0.ok$1)) (= $Environment~0.diff$1 $diff$1) (= $Environment~0.plus$1 $plus$1) (= $Environment~0.minus$1 $minus$1) (= $Environment~0.ok$1 (and (and (and (<= (- 0 4) $Environment~0.diff$1) (<= $Environment~0.diff$1 4)) (ite (ite %init true $Environment~0.plus$0) (>= $Environment~0.diff$1 1) true)) (ite (ite %init false $Environment~0.minus$0) (<= $Environment~0.diff$1 (- 0 1)) true))) (= $Sofar~0.X$1 (and (and $realistic$1 (<= 0 $speed$1)) (< $speed$1 16))) (= $Sofar~0.Sofar$1 (ite %init $Sofar~0.X$1 (and $Sofar~0.X$1 $Sofar~0.Sofar$0))) (= $Property~0.speed$1 $speed$1) (= $Property~0.acceptable$1 (and (<= 8 $Property~0.speed$1) (<= $Property~0.speed$1 12))) (= $Property~0.cpt$1 (ite %init 0 (ite $Property~0.acceptable$1 0 (+ $Property~0.cpt$0 1)))) (= $Property~0.ok$1 (ite %init true (<= $Property~0.cpt$0 7))))) -; Universally quantified variables -(declare-fun $diff$~1 () Int) -(declare-fun $speed$~1 () Int) -(declare-fun $plus$~1 () Bool) -(declare-fun $minus$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $realistic$~1 () Bool) -(declare-fun $Environment~0.diff$~1 () Int) -(declare-fun $Environment~0.plus$~1 () Bool) -(declare-fun $Environment~0.minus$~1 () Bool) -(declare-fun $Environment~0.ok$~1 () Bool) -(declare-fun $Sofar~0.X$~1 () Bool) -(declare-fun $Sofar~0.Sofar$~1 () Bool) -(declare-fun $Property~0.speed$~1 () Int) -(declare-fun $Property~0.ok$~1 () Bool) -(declare-fun $Property~0.cpt$~1 () Int) -(declare-fun $Property~0.acceptable$~1 () Bool) -(declare-fun $diff$0 () Int) -(declare-fun $speed$0 () Int) -(declare-fun $plus$0 () Bool) -(declare-fun $minus$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $realistic$0 () Bool) -(declare-fun $Environment~0.diff$0 () Int) -(declare-fun $Environment~0.plus$0 () Bool) -(declare-fun $Environment~0.minus$0 () Bool) -(declare-fun $Environment~0.ok$0 () Bool) -(declare-fun $Sofar~0.X$0 () Bool) -(declare-fun $Sofar~0.Sofar$0 () Bool) -(declare-fun $Property~0.speed$0 () Int) -(declare-fun $Property~0.ok$0 () Bool) -(declare-fun $Property~0.cpt$0 () Int) -(declare-fun $Property~0.acceptable$0 () Bool) -(declare-fun $diff$1 () Int) -(declare-fun $speed$1 () Int) -(declare-fun $plus$1 () Bool) -(declare-fun $minus$1 () Bool) -(declare-fun $OK$1 () Bool) -(declare-fun $realistic$1 () Bool) -(declare-fun $Environment~0.diff$1 () Int) -(declare-fun $Environment~0.plus$1 () Bool) -(declare-fun $Environment~0.minus$1 () Bool) -(declare-fun $Environment~0.ok$1 () Bool) -(declare-fun $Sofar~0.X$1 () Bool) -(declare-fun $Sofar~0.Sofar$1 () Bool) -(declare-fun $Property~0.speed$1 () Int) -(declare-fun $Property~0.ok$1 () Bool) -(declare-fun $Property~0.cpt$1 () Int) -(declare-fun $Property~0.acceptable$1 () Bool) -(declare-fun $diff$2 () Int) -(declare-fun $speed$2 () Int) -(declare-fun $plus$2 () Bool) -(declare-fun $minus$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $realistic$2 () Bool) -(declare-fun $Environment~0.diff$2 () Int) -(declare-fun $Environment~0.plus$2 () Bool) -(declare-fun $Environment~0.minus$2 () Bool) -(declare-fun $Environment~0.ok$2 () Bool) -(declare-fun $Sofar~0.X$2 () Bool) -(declare-fun $Sofar~0.Sofar$2 () Bool) -(declare-fun $Property~0.speed$2 () Int) -(declare-fun $Property~0.ok$2 () Bool) -(declare-fun $Property~0.cpt$2 () Int) -(declare-fun $Property~0.acceptable$2 () Bool) -(assert (T true $diff$~1 $speed$~1 $plus$~1 $minus$~1 $OK$~1 $realistic$~1 $Environment~0.diff$~1 $Environment~0.plus$~1 $Environment~0.minus$~1 $Environment~0.ok$~1 $Sofar~0.X$~1 $Sofar~0.Sofar$~1 $Property~0.speed$~1 $Property~0.ok$~1 $Property~0.cpt$~1 $Property~0.acceptable$~1 $diff$0 $speed$0 $plus$0 $minus$0 $OK$0 $realistic$0 $Environment~0.diff$0 $Environment~0.plus$0 $Environment~0.minus$0 $Environment~0.ok$0 $Sofar~0.X$0 $Sofar~0.Sofar$0 $Property~0.speed$0 $Property~0.ok$0 $Property~0.cpt$0 $Property~0.acceptable$0)) -(assert $OK$0) -(assert (T false $diff$0 $speed$0 $plus$0 $minus$0 $OK$0 $realistic$0 $Environment~0.diff$0 $Environment~0.plus$0 $Environment~0.minus$0 $Environment~0.ok$0 $Sofar~0.X$0 $Sofar~0.Sofar$0 $Property~0.speed$0 $Property~0.ok$0 $Property~0.cpt$0 $Property~0.acceptable$0 $diff$1 $speed$1 $plus$1 $minus$1 $OK$1 $realistic$1 $Environment~0.diff$1 $Environment~0.plus$1 $Environment~0.minus$1 $Environment~0.ok$1 $Sofar~0.X$1 $Sofar~0.Sofar$1 $Property~0.speed$1 $Property~0.ok$1 $Property~0.cpt$1 $Property~0.acceptable$1)) -(assert $OK$1) -(assert (T false $diff$1 $speed$1 $plus$1 $minus$1 $OK$1 $realistic$1 $Environment~0.diff$1 $Environment~0.plus$1 $Environment~0.minus$1 $Environment~0.ok$1 $Sofar~0.X$1 $Sofar~0.Sofar$1 $Property~0.speed$1 $Property~0.ok$1 $Property~0.cpt$1 $Property~0.acceptable$1 $diff$2 $speed$2 $plus$2 $minus$2 $OK$2 $realistic$2 $Environment~0.diff$2 $Environment~0.plus$2 $Environment~0.minus$2 $Environment~0.ok$2 $Sofar~0.X$2 $Sofar~0.Sofar$2 $Property~0.speed$2 $Property~0.ok$2 $Property~0.cpt$2 $Property~0.acceptable$2)) diff --git a/bench/tasks/cd_base3_t_part.smt2 b/bench/tasks/cd_base3_t_part.smt2 deleted file mode 100755 index 894002866..000000000 --- a/bench/tasks/cd_base3_t_part.smt2 +++ /dev/null @@ -1,69 +0,0 @@ -; K = 3 -; Transition relation -(define-fun T ((%init Bool) ($diff$0 Int) ($speed$0 Int) ($plus$0 Bool) ($minus$0 Bool) ($OK$0 Bool) ($realistic$0 Bool) ($Environment~0.diff$0 Int) ($Environment~0.plus$0 Bool) ($Environment~0.minus$0 Bool) ($Environment~0.ok$0 Bool) ($Sofar~0.X$0 Bool) ($Sofar~0.Sofar$0 Bool) ($Property~0.speed$0 Int) ($Property~0.ok$0 Bool) ($Property~0.cpt$0 Int) ($Property~0.acceptable$0 Bool) ($diff$1 Int) ($speed$1 Int) ($plus$1 Bool) ($minus$1 Bool) ($OK$1 Bool) ($realistic$1 Bool) ($Environment~0.diff$1 Int) ($Environment~0.plus$1 Bool) ($Environment~0.minus$1 Bool) ($Environment~0.ok$1 Bool) ($Sofar~0.X$1 Bool) ($Sofar~0.Sofar$1 Bool) ($Property~0.speed$1 Int) ($Property~0.ok$1 Bool) ($Property~0.cpt$1 Int) ($Property~0.acceptable$1 Bool)) Bool (and (= $realistic$1 $Environment~0.ok$1) (= $OK$1 (=> $Sofar~0.Sofar$1 $Property~0.ok$1)) (= $Environment~0.diff$1 $diff$1) (= $Environment~0.plus$1 $plus$1) (= $Environment~0.minus$1 $minus$1) (= $Environment~0.ok$1 (and (and (and (<= (- 0 4) $Environment~0.diff$1) (<= $Environment~0.diff$1 4)) (ite (ite %init true $Environment~0.plus$0) (>= $Environment~0.diff$1 1) true)) (ite (ite %init false $Environment~0.minus$0) (<= $Environment~0.diff$1 (- 0 1)) true))) (= $Sofar~0.X$1 (and (and $realistic$1 (<= 0 $speed$1)) (< $speed$1 16))) (= $Sofar~0.Sofar$1 (ite %init $Sofar~0.X$1 (and $Sofar~0.X$1 $Sofar~0.Sofar$0))) (= $Property~0.speed$1 $speed$1) (= $Property~0.acceptable$1 (and (<= 8 $Property~0.speed$1) (<= $Property~0.speed$1 12))) (= $Property~0.cpt$1 (ite %init 0 (ite $Property~0.acceptable$1 0 (+ $Property~0.cpt$0 1)))) (= $Property~0.ok$1 (ite %init true (<= $Property~0.cpt$0 7))))) -; Universally quantified variables -(declare-fun $diff$~1 () Int) -(declare-fun $speed$~1 () Int) -(declare-fun $plus$~1 () Bool) -(declare-fun $minus$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $realistic$~1 () Bool) -(declare-fun $Environment~0.diff$~1 () Int) -(declare-fun $Environment~0.plus$~1 () Bool) -(declare-fun $Environment~0.minus$~1 () Bool) -(declare-fun $Environment~0.ok$~1 () Bool) -(declare-fun $Sofar~0.X$~1 () Bool) -(declare-fun $Sofar~0.Sofar$~1 () Bool) -(declare-fun $Property~0.speed$~1 () Int) -(declare-fun $Property~0.ok$~1 () Bool) -(declare-fun $Property~0.cpt$~1 () Int) -(declare-fun $Property~0.acceptable$~1 () Bool) -(declare-fun $diff$0 () Int) -(declare-fun $speed$0 () Int) -(declare-fun $plus$0 () Bool) -(declare-fun $minus$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $realistic$0 () Bool) -(declare-fun $Environment~0.diff$0 () Int) -(declare-fun $Environment~0.plus$0 () Bool) -(declare-fun $Environment~0.minus$0 () Bool) -(declare-fun $Environment~0.ok$0 () Bool) -(declare-fun $Sofar~0.X$0 () Bool) -(declare-fun $Sofar~0.Sofar$0 () Bool) -(declare-fun $Property~0.speed$0 () Int) -(declare-fun $Property~0.ok$0 () Bool) -(declare-fun $Property~0.cpt$0 () Int) -(declare-fun $Property~0.acceptable$0 () Bool) -(declare-fun $diff$1 () Int) -(declare-fun $speed$1 () Int) -(declare-fun $plus$1 () Bool) -(declare-fun $minus$1 () Bool) -(declare-fun $OK$1 () Bool) -(declare-fun $realistic$1 () Bool) -(declare-fun $Environment~0.diff$1 () Int) -(declare-fun $Environment~0.plus$1 () Bool) -(declare-fun $Environment~0.minus$1 () Bool) -(declare-fun $Environment~0.ok$1 () Bool) -(declare-fun $Sofar~0.X$1 () Bool) -(declare-fun $Sofar~0.Sofar$1 () Bool) -(declare-fun $Property~0.speed$1 () Int) -(declare-fun $Property~0.ok$1 () Bool) -(declare-fun $Property~0.cpt$1 () Int) -(declare-fun $Property~0.acceptable$1 () Bool) -(declare-fun $diff$2 () Int) -(declare-fun $speed$4 () Int) -(declare-fun $plus$4 () Bool) -(declare-fun $minus$4 () Bool) -(declare-fun $OK$4 () Bool) -(declare-fun $realistic$4 () Bool) -(declare-fun $Environment~0.diff$4 () Int) -(declare-fun $Environment~0.plus$4 () Bool) -(declare-fun $Environment~0.minus$4 () Bool) -(declare-fun $Environment~0.ok$4 () Bool) -(declare-fun $Sofar~0.X$4 () Bool) -(declare-fun $Sofar~0.Sofar$4 () Bool) -(declare-fun $Property~0.speed$4 () Int) -(declare-fun $Property~0.ok$4 () Bool) -(declare-fun $Property~0.cpt$4 () Int) -(declare-fun $Property~0.acceptable$4 () Bool) -(assert (and (T false $diff$1 $speed$1 $plus$1 $minus$1 $OK$1 $realistic$1 $Environment~0.diff$1 $Environment~0.plus$1 $Environment~0.minus$1 $Environment~0.ok$1 $Sofar~0.X$1 $Sofar~0.Sofar$1 $Property~0.speed$1 $Property~0.ok$1 $Property~0.cpt$1 $Property~0.acceptable$1 $diff$2 $speed$4 $plus$4 $minus$4 $OK$4 $realistic$4 $Environment~0.diff$4 $Environment~0.plus$4 $Environment~0.minus$4 $Environment~0.ok$4 $Sofar~0.X$4 $Sofar~0.Sofar$4 $Property~0.speed$4 $Property~0.ok$4 $Property~0.cpt$4 $Property~0.acceptable$4) $OK$4)) diff --git a/bench/tasks/cd_e7_621_e8_714_base1_s_part.smt2 b/bench/tasks/cd_e7_621_e8_714_base1_s_part.smt2 deleted file mode 100755 index 76e8010b7..000000000 --- a/bench/tasks/cd_e7_621_e8_714_base1_s_part.smt2 +++ /dev/null @@ -1,25 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($diff$0 Int) ($V22_speed$0 Int) ($V23_plus$0 Bool) ($V24_minus$0 Bool) ($OK$0 Bool) ($V25_realistic$0 Bool) ($V93_X$0 Bool) ($V98_Sofar$0 Bool) ($V109_cpt$0 Int) ($V110_acceptable$0 Bool) ($diff$1 Int) ($V22_speed$1 Int) ($V23_plus$1 Bool) ($V24_minus$1 Bool) ($OK$1 Bool) ($V25_realistic$1 Bool) ($V93_X$1 Bool) ($V98_Sofar$1 Bool) ($V109_cpt$1 Int) ($V110_acceptable$1 Bool)) Bool (and (= $OK$1 (=> $V98_Sofar$1 (ite %init true (<= $V109_cpt$0 7)))) (= $V25_realistic$1 (and (and (and (<= (- 0 4) $diff$1) (<= $diff$1 4)) (ite (ite %init true $V23_plus$0) (>= $diff$1 1) true)) (ite (ite %init false $V24_minus$0) (<= $diff$1 (- 0 1)) true))) (= $V93_X$1 (and (and $V25_realistic$1 (<= 0 $V22_speed$1)) (< $V22_speed$1 16))) (= $V98_Sofar$1 (ite %init $V93_X$1 (and $V93_X$1 $V98_Sofar$0))) (= $V109_cpt$1 (ite %init 0 (ite $V110_acceptable$1 0 (+ $V109_cpt$0 1)))) (= $V110_acceptable$1 (and (<= 8 $V22_speed$1) (<= $V22_speed$1 12))))) -; Universally quantified variables -(declare-fun $diff$~1 () Int) -(declare-fun $V22_speed$~1 () Int) -(declare-fun $V23_plus$~1 () Bool) -(declare-fun $V24_minus$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V25_realistic$~1 () Bool) -(declare-fun $V93_X$~1 () Bool) -(declare-fun $V98_Sofar$~1 () Bool) -(declare-fun $V109_cpt$~1 () Int) -(declare-fun $V110_acceptable$~1 () Bool) -(declare-fun $diff$0 () Int) -(declare-fun $V22_speed$0 () Int) -(declare-fun $V23_plus$0 () Bool) -(declare-fun $V24_minus$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $V25_realistic$0 () Bool) -(declare-fun $V93_X$0 () Bool) -(declare-fun $V98_Sofar$0 () Bool) -(declare-fun $V109_cpt$0 () Int) -(declare-fun $V110_acceptable$0 () Bool) -(assert (T true $diff$~1 $V22_speed$~1 $V23_plus$~1 $V24_minus$~1 $OK$~1 $V25_realistic$~1 $V93_X$~1 $V98_Sofar$~1 $V109_cpt$~1 $V110_acceptable$~1 $diff$0 $V22_speed$0 $V23_plus$0 $V24_minus$0 $OK$0 $V25_realistic$0 $V93_X$0 $V98_Sofar$0 $V109_cpt$0 $V110_acceptable$0)) diff --git a/bench/tasks/cd_e7_621_e8_714_base1_t_part.smt2 b/bench/tasks/cd_e7_621_e8_714_base1_t_part.smt2 deleted file mode 100755 index eeaed9993..000000000 --- a/bench/tasks/cd_e7_621_e8_714_base1_t_part.smt2 +++ /dev/null @@ -1,25 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($diff$0 Int) ($V22_speed$0 Int) ($V23_plus$0 Bool) ($V24_minus$0 Bool) ($OK$0 Bool) ($V25_realistic$0 Bool) ($V93_X$0 Bool) ($V98_Sofar$0 Bool) ($V109_cpt$0 Int) ($V110_acceptable$0 Bool) ($diff$1 Int) ($V22_speed$1 Int) ($V23_plus$1 Bool) ($V24_minus$1 Bool) ($OK$1 Bool) ($V25_realistic$1 Bool) ($V93_X$1 Bool) ($V98_Sofar$1 Bool) ($V109_cpt$1 Int) ($V110_acceptable$1 Bool)) Bool (and (= $OK$1 (=> $V98_Sofar$1 (ite %init true (<= $V109_cpt$0 7)))) (= $V25_realistic$1 (and (and (and (<= (- 0 4) $diff$1) (<= $diff$1 4)) (ite (ite %init true $V23_plus$0) (>= $diff$1 1) true)) (ite (ite %init false $V24_minus$0) (<= $diff$1 (- 0 1)) true))) (= $V93_X$1 (and (and $V25_realistic$1 (<= 0 $V22_speed$1)) (< $V22_speed$1 16))) (= $V98_Sofar$1 (ite %init $V93_X$1 (and $V93_X$1 $V98_Sofar$0))) (= $V109_cpt$1 (ite %init 0 (ite $V110_acceptable$1 0 (+ $V109_cpt$0 1)))) (= $V110_acceptable$1 (and (<= 8 $V22_speed$1) (<= $V22_speed$1 12))))) -; Universally quantified variables -(declare-fun $diff$~1 () Int) -(declare-fun $V22_speed$~1 () Int) -(declare-fun $V23_plus$~1 () Bool) -(declare-fun $V24_minus$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V25_realistic$~1 () Bool) -(declare-fun $V93_X$~1 () Bool) -(declare-fun $V98_Sofar$~1 () Bool) -(declare-fun $V109_cpt$~1 () Int) -(declare-fun $V110_acceptable$~1 () Bool) -(declare-fun $diff$0 () Int) -(declare-fun $V22_speed$2 () Int) -(declare-fun $V23_plus$2 () Bool) -(declare-fun $V24_minus$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $V25_realistic$2 () Bool) -(declare-fun $V93_X$2 () Bool) -(declare-fun $V98_Sofar$2 () Bool) -(declare-fun $V109_cpt$2 () Int) -(declare-fun $V110_acceptable$2 () Bool) -(assert (and (T true $diff$~1 $V22_speed$~1 $V23_plus$~1 $V24_minus$~1 $OK$~1 $V25_realistic$~1 $V93_X$~1 $V98_Sofar$~1 $V109_cpt$~1 $V110_acceptable$~1 $diff$0 $V22_speed$2 $V23_plus$2 $V24_minus$2 $OK$2 $V25_realistic$2 $V93_X$2 $V98_Sofar$2 $V109_cpt$2 $V110_acceptable$2) $OK$2)) diff --git a/bench/tasks/cd_e7_621_e8_714_base2_s_part.smt2 b/bench/tasks/cd_e7_621_e8_714_base2_s_part.smt2 deleted file mode 100755 index 1ec149e60..000000000 --- a/bench/tasks/cd_e7_621_e8_714_base2_s_part.smt2 +++ /dev/null @@ -1,37 +0,0 @@ -; K = 2 -; Transition relation -(define-fun T ((%init Bool) ($diff$0 Int) ($V22_speed$0 Int) ($V23_plus$0 Bool) ($V24_minus$0 Bool) ($OK$0 Bool) ($V25_realistic$0 Bool) ($V93_X$0 Bool) ($V98_Sofar$0 Bool) ($V109_cpt$0 Int) ($V110_acceptable$0 Bool) ($diff$1 Int) ($V22_speed$1 Int) ($V23_plus$1 Bool) ($V24_minus$1 Bool) ($OK$1 Bool) ($V25_realistic$1 Bool) ($V93_X$1 Bool) ($V98_Sofar$1 Bool) ($V109_cpt$1 Int) ($V110_acceptable$1 Bool)) Bool (and (= $OK$1 (=> $V98_Sofar$1 (ite %init true (<= $V109_cpt$0 7)))) (= $V25_realistic$1 (and (and (and (<= (- 0 4) $diff$1) (<= $diff$1 4)) (ite (ite %init true $V23_plus$0) (>= $diff$1 1) true)) (ite (ite %init false $V24_minus$0) (<= $diff$1 (- 0 1)) true))) (= $V93_X$1 (and (and $V25_realistic$1 (<= 0 $V22_speed$1)) (< $V22_speed$1 16))) (= $V98_Sofar$1 (ite %init $V93_X$1 (and $V93_X$1 $V98_Sofar$0))) (= $V109_cpt$1 (ite %init 0 (ite $V110_acceptable$1 0 (+ $V109_cpt$0 1)))) (= $V110_acceptable$1 (and (<= 8 $V22_speed$1) (<= $V22_speed$1 12))))) -; Universally quantified variables -(declare-fun $diff$~1 () Int) -(declare-fun $V22_speed$~1 () Int) -(declare-fun $V23_plus$~1 () Bool) -(declare-fun $V24_minus$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V25_realistic$~1 () Bool) -(declare-fun $V93_X$~1 () Bool) -(declare-fun $V98_Sofar$~1 () Bool) -(declare-fun $V109_cpt$~1 () Int) -(declare-fun $V110_acceptable$~1 () Bool) -(declare-fun $diff$0 () Int) -(declare-fun $V22_speed$0 () Int) -(declare-fun $V23_plus$0 () Bool) -(declare-fun $V24_minus$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $V25_realistic$0 () Bool) -(declare-fun $V93_X$0 () Bool) -(declare-fun $V98_Sofar$0 () Bool) -(declare-fun $V109_cpt$0 () Int) -(declare-fun $V110_acceptable$0 () Bool) -(declare-fun $diff$1 () Int) -(declare-fun $V22_speed$1 () Int) -(declare-fun $V23_plus$1 () Bool) -(declare-fun $V24_minus$1 () Bool) -(declare-fun $OK$1 () Bool) -(declare-fun $V25_realistic$1 () Bool) -(declare-fun $V93_X$1 () Bool) -(declare-fun $V98_Sofar$1 () Bool) -(declare-fun $V109_cpt$1 () Int) -(declare-fun $V110_acceptable$1 () Bool) -(assert (T true $diff$~1 $V22_speed$~1 $V23_plus$~1 $V24_minus$~1 $OK$~1 $V25_realistic$~1 $V93_X$~1 $V98_Sofar$~1 $V109_cpt$~1 $V110_acceptable$~1 $diff$0 $V22_speed$0 $V23_plus$0 $V24_minus$0 $OK$0 $V25_realistic$0 $V93_X$0 $V98_Sofar$0 $V109_cpt$0 $V110_acceptable$0)) -(assert $OK$0) -(assert (T false $diff$0 $V22_speed$0 $V23_plus$0 $V24_minus$0 $OK$0 $V25_realistic$0 $V93_X$0 $V98_Sofar$0 $V109_cpt$0 $V110_acceptable$0 $diff$1 $V22_speed$1 $V23_plus$1 $V24_minus$1 $OK$1 $V25_realistic$1 $V93_X$1 $V98_Sofar$1 $V109_cpt$1 $V110_acceptable$1)) diff --git a/bench/tasks/cd_e7_621_e8_714_base2_t_part.smt2 b/bench/tasks/cd_e7_621_e8_714_base2_t_part.smt2 deleted file mode 100755 index cbd3e910e..000000000 --- a/bench/tasks/cd_e7_621_e8_714_base2_t_part.smt2 +++ /dev/null @@ -1,35 +0,0 @@ -; K = 2 -; Transition relation -(define-fun T ((%init Bool) ($diff$0 Int) ($V22_speed$0 Int) ($V23_plus$0 Bool) ($V24_minus$0 Bool) ($OK$0 Bool) ($V25_realistic$0 Bool) ($V93_X$0 Bool) ($V98_Sofar$0 Bool) ($V109_cpt$0 Int) ($V110_acceptable$0 Bool) ($diff$1 Int) ($V22_speed$1 Int) ($V23_plus$1 Bool) ($V24_minus$1 Bool) ($OK$1 Bool) ($V25_realistic$1 Bool) ($V93_X$1 Bool) ($V98_Sofar$1 Bool) ($V109_cpt$1 Int) ($V110_acceptable$1 Bool)) Bool (and (= $OK$1 (=> $V98_Sofar$1 (ite %init true (<= $V109_cpt$0 7)))) (= $V25_realistic$1 (and (and (and (<= (- 0 4) $diff$1) (<= $diff$1 4)) (ite (ite %init true $V23_plus$0) (>= $diff$1 1) true)) (ite (ite %init false $V24_minus$0) (<= $diff$1 (- 0 1)) true))) (= $V93_X$1 (and (and $V25_realistic$1 (<= 0 $V22_speed$1)) (< $V22_speed$1 16))) (= $V98_Sofar$1 (ite %init $V93_X$1 (and $V93_X$1 $V98_Sofar$0))) (= $V109_cpt$1 (ite %init 0 (ite $V110_acceptable$1 0 (+ $V109_cpt$0 1)))) (= $V110_acceptable$1 (and (<= 8 $V22_speed$1) (<= $V22_speed$1 12))))) -; Universally quantified variables -(declare-fun $diff$~1 () Int) -(declare-fun $V22_speed$~1 () Int) -(declare-fun $V23_plus$~1 () Bool) -(declare-fun $V24_minus$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V25_realistic$~1 () Bool) -(declare-fun $V93_X$~1 () Bool) -(declare-fun $V98_Sofar$~1 () Bool) -(declare-fun $V109_cpt$~1 () Int) -(declare-fun $V110_acceptable$~1 () Bool) -(declare-fun $diff$0 () Int) -(declare-fun $V22_speed$0 () Int) -(declare-fun $V23_plus$0 () Bool) -(declare-fun $V24_minus$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $V25_realistic$0 () Bool) -(declare-fun $V93_X$0 () Bool) -(declare-fun $V98_Sofar$0 () Bool) -(declare-fun $V109_cpt$0 () Int) -(declare-fun $V110_acceptable$0 () Bool) -(declare-fun $diff$1 () Int) -(declare-fun $V22_speed$3 () Int) -(declare-fun $V23_plus$3 () Bool) -(declare-fun $V24_minus$3 () Bool) -(declare-fun $OK$3 () Bool) -(declare-fun $V25_realistic$3 () Bool) -(declare-fun $V93_X$3 () Bool) -(declare-fun $V98_Sofar$3 () Bool) -(declare-fun $V109_cpt$3 () Int) -(declare-fun $V110_acceptable$3 () Bool) -(assert (and (T false $diff$0 $V22_speed$0 $V23_plus$0 $V24_minus$0 $OK$0 $V25_realistic$0 $V93_X$0 $V98_Sofar$0 $V109_cpt$0 $V110_acceptable$0 $diff$1 $V22_speed$3 $V23_plus$3 $V24_minus$3 $OK$3 $V25_realistic$3 $V93_X$3 $V98_Sofar$3 $V109_cpt$3 $V110_acceptable$3) $OK$3)) diff --git a/bench/tasks/cd_e7_621_e8_714_extend_s_part.smt2 b/bench/tasks/cd_e7_621_e8_714_extend_s_part.smt2 deleted file mode 100755 index ab3b11f67..000000000 --- a/bench/tasks/cd_e7_621_e8_714_extend_s_part.smt2 +++ /dev/null @@ -1,26 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($diff$0 Int) ($V22_speed$0 Int) ($V23_plus$0 Bool) ($V24_minus$0 Bool) ($OK$0 Bool) ($V25_realistic$0 Bool) ($V93_X$0 Bool) ($V98_Sofar$0 Bool) ($V109_cpt$0 Int) ($V110_acceptable$0 Bool) ($diff$1 Int) ($V22_speed$1 Int) ($V23_plus$1 Bool) ($V24_minus$1 Bool) ($OK$1 Bool) ($V25_realistic$1 Bool) ($V93_X$1 Bool) ($V98_Sofar$1 Bool) ($V109_cpt$1 Int) ($V110_acceptable$1 Bool)) Bool (and (= $OK$1 (=> $V98_Sofar$1 (ite %init true (<= $V109_cpt$0 7)))) (= $V25_realistic$1 (and (and (and (<= (- 0 4) $diff$1) (<= $diff$1 4)) (ite (ite %init true $V23_plus$0) (>= $diff$1 1) true)) (ite (ite %init false $V24_minus$0) (<= $diff$1 (- 0 1)) true))) (= $V93_X$1 (and (and $V25_realistic$1 (<= 0 $V22_speed$1)) (< $V22_speed$1 16))) (= $V98_Sofar$1 (ite %init $V93_X$1 (and $V93_X$1 $V98_Sofar$0))) (= $V109_cpt$1 (ite %init 0 (ite $V110_acceptable$1 0 (+ $V109_cpt$0 1)))) (= $V110_acceptable$1 (and (<= 8 $V22_speed$1) (<= $V22_speed$1 12))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $diff$~1 () Int) -(declare-fun $V22_speed$~1 () Int) -(declare-fun $V23_plus$~1 () Bool) -(declare-fun $V24_minus$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V25_realistic$~1 () Bool) -(declare-fun $V93_X$~1 () Bool) -(declare-fun $V98_Sofar$~1 () Bool) -(declare-fun $V109_cpt$~1 () Int) -(declare-fun $V110_acceptable$~1 () Bool) -(declare-fun $diff$0 () Int) -(declare-fun $V22_speed$0 () Int) -(declare-fun $V23_plus$0 () Bool) -(declare-fun $V24_minus$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $V25_realistic$0 () Bool) -(declare-fun $V93_X$0 () Bool) -(declare-fun $V98_Sofar$0 () Bool) -(declare-fun $V109_cpt$0 () Int) -(declare-fun $V110_acceptable$0 () Bool) -(assert (T %init $diff$~1 $V22_speed$~1 $V23_plus$~1 $V24_minus$~1 $OK$~1 $V25_realistic$~1 $V93_X$~1 $V98_Sofar$~1 $V109_cpt$~1 $V110_acceptable$~1 $diff$0 $V22_speed$0 $V23_plus$0 $V24_minus$0 $OK$0 $V25_realistic$0 $V93_X$0 $V98_Sofar$0 $V109_cpt$0 $V110_acceptable$0)) diff --git a/bench/tasks/cd_e7_621_e8_714_extend_t_part.smt2 b/bench/tasks/cd_e7_621_e8_714_extend_t_part.smt2 deleted file mode 100755 index 3c8fb9335..000000000 --- a/bench/tasks/cd_e7_621_e8_714_extend_t_part.smt2 +++ /dev/null @@ -1,26 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($diff$0 Int) ($V22_speed$0 Int) ($V23_plus$0 Bool) ($V24_minus$0 Bool) ($OK$0 Bool) ($V25_realistic$0 Bool) ($V93_X$0 Bool) ($V98_Sofar$0 Bool) ($V109_cpt$0 Int) ($V110_acceptable$0 Bool) ($diff$1 Int) ($V22_speed$1 Int) ($V23_plus$1 Bool) ($V24_minus$1 Bool) ($OK$1 Bool) ($V25_realistic$1 Bool) ($V93_X$1 Bool) ($V98_Sofar$1 Bool) ($V109_cpt$1 Int) ($V110_acceptable$1 Bool)) Bool (and (= $OK$1 (=> $V98_Sofar$1 (ite %init true (<= $V109_cpt$0 7)))) (= $V25_realistic$1 (and (and (and (<= (- 0 4) $diff$1) (<= $diff$1 4)) (ite (ite %init true $V23_plus$0) (>= $diff$1 1) true)) (ite (ite %init false $V24_minus$0) (<= $diff$1 (- 0 1)) true))) (= $V93_X$1 (and (and $V25_realistic$1 (<= 0 $V22_speed$1)) (< $V22_speed$1 16))) (= $V98_Sofar$1 (ite %init $V93_X$1 (and $V93_X$1 $V98_Sofar$0))) (= $V109_cpt$1 (ite %init 0 (ite $V110_acceptable$1 0 (+ $V109_cpt$0 1)))) (= $V110_acceptable$1 (and (<= 8 $V22_speed$1) (<= $V22_speed$1 12))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $diff$~1 () Int) -(declare-fun $V22_speed$~1 () Int) -(declare-fun $V23_plus$~1 () Bool) -(declare-fun $V24_minus$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V25_realistic$~1 () Bool) -(declare-fun $V93_X$~1 () Bool) -(declare-fun $V98_Sofar$~1 () Bool) -(declare-fun $V109_cpt$~1 () Int) -(declare-fun $V110_acceptable$~1 () Bool) -(declare-fun $diff$0 () Int) -(declare-fun $V22_speed$2 () Int) -(declare-fun $V23_plus$2 () Bool) -(declare-fun $V24_minus$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $V25_realistic$2 () Bool) -(declare-fun $V93_X$2 () Bool) -(declare-fun $V98_Sofar$2 () Bool) -(declare-fun $V109_cpt$2 () Int) -(declare-fun $V110_acceptable$2 () Bool) -(assert (and (T %init $diff$~1 $V22_speed$~1 $V23_plus$~1 $V24_minus$~1 $OK$~1 $V25_realistic$~1 $V93_X$~1 $V98_Sofar$~1 $V109_cpt$~1 $V110_acceptable$~1 $diff$0 $V22_speed$2 $V23_plus$2 $V24_minus$2 $OK$2 $V25_realistic$2 $V93_X$2 $V98_Sofar$2 $V109_cpt$2 $V110_acceptable$2) $OK$2)) diff --git a/bench/tasks/cd_extend_s_part.smt2 b/bench/tasks/cd_extend_s_part.smt2 deleted file mode 100755 index eb45c6f98..000000000 --- a/bench/tasks/cd_extend_s_part.smt2 +++ /dev/null @@ -1,38 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($diff$0 Int) ($speed$0 Int) ($plus$0 Bool) ($minus$0 Bool) ($OK$0 Bool) ($realistic$0 Bool) ($Environment~0.diff$0 Int) ($Environment~0.plus$0 Bool) ($Environment~0.minus$0 Bool) ($Environment~0.ok$0 Bool) ($Sofar~0.X$0 Bool) ($Sofar~0.Sofar$0 Bool) ($Property~0.speed$0 Int) ($Property~0.ok$0 Bool) ($Property~0.cpt$0 Int) ($Property~0.acceptable$0 Bool) ($diff$1 Int) ($speed$1 Int) ($plus$1 Bool) ($minus$1 Bool) ($OK$1 Bool) ($realistic$1 Bool) ($Environment~0.diff$1 Int) ($Environment~0.plus$1 Bool) ($Environment~0.minus$1 Bool) ($Environment~0.ok$1 Bool) ($Sofar~0.X$1 Bool) ($Sofar~0.Sofar$1 Bool) ($Property~0.speed$1 Int) ($Property~0.ok$1 Bool) ($Property~0.cpt$1 Int) ($Property~0.acceptable$1 Bool)) Bool (and (= $realistic$1 $Environment~0.ok$1) (= $OK$1 (=> $Sofar~0.Sofar$1 $Property~0.ok$1)) (= $Environment~0.diff$1 $diff$1) (= $Environment~0.plus$1 $plus$1) (= $Environment~0.minus$1 $minus$1) (= $Environment~0.ok$1 (and (and (and (<= (- 0 4) $Environment~0.diff$1) (<= $Environment~0.diff$1 4)) (ite (ite %init true $Environment~0.plus$0) (>= $Environment~0.diff$1 1) true)) (ite (ite %init false $Environment~0.minus$0) (<= $Environment~0.diff$1 (- 0 1)) true))) (= $Sofar~0.X$1 (and (and $realistic$1 (<= 0 $speed$1)) (< $speed$1 16))) (= $Sofar~0.Sofar$1 (ite %init $Sofar~0.X$1 (and $Sofar~0.X$1 $Sofar~0.Sofar$0))) (= $Property~0.speed$1 $speed$1) (= $Property~0.acceptable$1 (and (<= 8 $Property~0.speed$1) (<= $Property~0.speed$1 12))) (= $Property~0.cpt$1 (ite %init 0 (ite $Property~0.acceptable$1 0 (+ $Property~0.cpt$0 1)))) (= $Property~0.ok$1 (ite %init true (<= $Property~0.cpt$0 7))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $diff$~1 () Int) -(declare-fun $speed$~1 () Int) -(declare-fun $plus$~1 () Bool) -(declare-fun $minus$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $realistic$~1 () Bool) -(declare-fun $Environment~0.diff$~1 () Int) -(declare-fun $Environment~0.plus$~1 () Bool) -(declare-fun $Environment~0.minus$~1 () Bool) -(declare-fun $Environment~0.ok$~1 () Bool) -(declare-fun $Sofar~0.X$~1 () Bool) -(declare-fun $Sofar~0.Sofar$~1 () Bool) -(declare-fun $Property~0.speed$~1 () Int) -(declare-fun $Property~0.ok$~1 () Bool) -(declare-fun $Property~0.cpt$~1 () Int) -(declare-fun $Property~0.acceptable$~1 () Bool) -(declare-fun $diff$0 () Int) -(declare-fun $speed$0 () Int) -(declare-fun $plus$0 () Bool) -(declare-fun $minus$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $realistic$0 () Bool) -(declare-fun $Environment~0.diff$0 () Int) -(declare-fun $Environment~0.plus$0 () Bool) -(declare-fun $Environment~0.minus$0 () Bool) -(declare-fun $Environment~0.ok$0 () Bool) -(declare-fun $Sofar~0.X$0 () Bool) -(declare-fun $Sofar~0.Sofar$0 () Bool) -(declare-fun $Property~0.speed$0 () Int) -(declare-fun $Property~0.ok$0 () Bool) -(declare-fun $Property~0.cpt$0 () Int) -(declare-fun $Property~0.acceptable$0 () Bool) -(assert (T %init $diff$~1 $speed$~1 $plus$~1 $minus$~1 $OK$~1 $realistic$~1 $Environment~0.diff$~1 $Environment~0.plus$~1 $Environment~0.minus$~1 $Environment~0.ok$~1 $Sofar~0.X$~1 $Sofar~0.Sofar$~1 $Property~0.speed$~1 $Property~0.ok$~1 $Property~0.cpt$~1 $Property~0.acceptable$~1 $diff$0 $speed$0 $plus$0 $minus$0 $OK$0 $realistic$0 $Environment~0.diff$0 $Environment~0.plus$0 $Environment~0.minus$0 $Environment~0.ok$0 $Sofar~0.X$0 $Sofar~0.Sofar$0 $Property~0.speed$0 $Property~0.ok$0 $Property~0.cpt$0 $Property~0.acceptable$0)) diff --git a/bench/tasks/cd_extend_t_part.smt2 b/bench/tasks/cd_extend_t_part.smt2 deleted file mode 100755 index 18a5f9d55..000000000 --- a/bench/tasks/cd_extend_t_part.smt2 +++ /dev/null @@ -1,38 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($diff$0 Int) ($speed$0 Int) ($plus$0 Bool) ($minus$0 Bool) ($OK$0 Bool) ($realistic$0 Bool) ($Environment~0.diff$0 Int) ($Environment~0.plus$0 Bool) ($Environment~0.minus$0 Bool) ($Environment~0.ok$0 Bool) ($Sofar~0.X$0 Bool) ($Sofar~0.Sofar$0 Bool) ($Property~0.speed$0 Int) ($Property~0.ok$0 Bool) ($Property~0.cpt$0 Int) ($Property~0.acceptable$0 Bool) ($diff$1 Int) ($speed$1 Int) ($plus$1 Bool) ($minus$1 Bool) ($OK$1 Bool) ($realistic$1 Bool) ($Environment~0.diff$1 Int) ($Environment~0.plus$1 Bool) ($Environment~0.minus$1 Bool) ($Environment~0.ok$1 Bool) ($Sofar~0.X$1 Bool) ($Sofar~0.Sofar$1 Bool) ($Property~0.speed$1 Int) ($Property~0.ok$1 Bool) ($Property~0.cpt$1 Int) ($Property~0.acceptable$1 Bool)) Bool (and (= $realistic$1 $Environment~0.ok$1) (= $OK$1 (=> $Sofar~0.Sofar$1 $Property~0.ok$1)) (= $Environment~0.diff$1 $diff$1) (= $Environment~0.plus$1 $plus$1) (= $Environment~0.minus$1 $minus$1) (= $Environment~0.ok$1 (and (and (and (<= (- 0 4) $Environment~0.diff$1) (<= $Environment~0.diff$1 4)) (ite (ite %init true $Environment~0.plus$0) (>= $Environment~0.diff$1 1) true)) (ite (ite %init false $Environment~0.minus$0) (<= $Environment~0.diff$1 (- 0 1)) true))) (= $Sofar~0.X$1 (and (and $realistic$1 (<= 0 $speed$1)) (< $speed$1 16))) (= $Sofar~0.Sofar$1 (ite %init $Sofar~0.X$1 (and $Sofar~0.X$1 $Sofar~0.Sofar$0))) (= $Property~0.speed$1 $speed$1) (= $Property~0.acceptable$1 (and (<= 8 $Property~0.speed$1) (<= $Property~0.speed$1 12))) (= $Property~0.cpt$1 (ite %init 0 (ite $Property~0.acceptable$1 0 (+ $Property~0.cpt$0 1)))) (= $Property~0.ok$1 (ite %init true (<= $Property~0.cpt$0 7))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $diff$~1 () Int) -(declare-fun $speed$~1 () Int) -(declare-fun $plus$~1 () Bool) -(declare-fun $minus$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $realistic$~1 () Bool) -(declare-fun $Environment~0.diff$~1 () Int) -(declare-fun $Environment~0.plus$~1 () Bool) -(declare-fun $Environment~0.minus$~1 () Bool) -(declare-fun $Environment~0.ok$~1 () Bool) -(declare-fun $Sofar~0.X$~1 () Bool) -(declare-fun $Sofar~0.Sofar$~1 () Bool) -(declare-fun $Property~0.speed$~1 () Int) -(declare-fun $Property~0.ok$~1 () Bool) -(declare-fun $Property~0.cpt$~1 () Int) -(declare-fun $Property~0.acceptable$~1 () Bool) -(declare-fun $diff$0 () Int) -(declare-fun $speed$2 () Int) -(declare-fun $plus$2 () Bool) -(declare-fun $minus$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $realistic$2 () Bool) -(declare-fun $Environment~0.diff$2 () Int) -(declare-fun $Environment~0.plus$2 () Bool) -(declare-fun $Environment~0.minus$2 () Bool) -(declare-fun $Environment~0.ok$2 () Bool) -(declare-fun $Sofar~0.X$2 () Bool) -(declare-fun $Sofar~0.Sofar$2 () Bool) -(declare-fun $Property~0.speed$2 () Int) -(declare-fun $Property~0.ok$2 () Bool) -(declare-fun $Property~0.cpt$2 () Int) -(declare-fun $Property~0.acceptable$2 () Bool) -(assert (and (T %init $diff$~1 $speed$~1 $plus$~1 $minus$~1 $OK$~1 $realistic$~1 $Environment~0.diff$~1 $Environment~0.plus$~1 $Environment~0.minus$~1 $Environment~0.ok$~1 $Sofar~0.X$~1 $Sofar~0.Sofar$~1 $Property~0.speed$~1 $Property~0.ok$~1 $Property~0.cpt$~1 $Property~0.acceptable$~1 $diff$0 $speed$2 $plus$2 $minus$2 $OK$2 $realistic$2 $Environment~0.diff$2 $Environment~0.plus$2 $Environment~0.minus$2 $Environment~0.ok$2 $Sofar~0.X$2 $Sofar~0.Sofar$2 $Property~0.speed$2 $Property~0.ok$2 $Property~0.cpt$2 $Property~0.acceptable$2) $OK$2)) diff --git a/bench/tasks/cruise_controller_01_base_s_part.smt2 b/bench/tasks/cruise_controller_01_base_s_part.smt2 deleted file mode 100755 index 98ef44df6..000000000 --- a/bench/tasks/cruise_controller_01_base_s_part.smt2 +++ /dev/null @@ -1,161 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($onOff$0 Bool) ($decelSet$0 Bool) ($accelResume$0 Bool) ($cancel$0 Bool) ($brakePedal$0 Bool) ($carGear$0 Int) ($carSpeed$0 Real) ($validInputs$0 Bool) ($OK$0 Bool) ($chart_CruiseController_ModeLogic_mode_logic_onOff$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_decel$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_set$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_accel$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_safetyCondition$0 Int) ($chart_CruiseController_ModeLogic_mode_logic____wakeup___$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$0 Bool) ($chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$0 Int) ($cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 Int) ($cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 Int) ($cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$0 Bool) ($cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$0 Bool) ($cruise_controller_CruiseController_ModeLogic_setEvent_Out$0 Bool) ($onOff$1 Bool) ($decelSet$1 Bool) ($accelResume$1 Bool) ($cancel$1 Bool) ($brakePedal$1 Bool) ($carGear$1 Int) ($carSpeed$1 Real) ($validInputs$1 Bool) ($OK$1 Bool) ($chart_CruiseController_ModeLogic_mode_logic_onOff$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_decel$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_set$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_accel$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 Int) ($chart_CruiseController_ModeLogic_mode_logic____wakeup___$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$1 Bool) ($chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$1 Int) ($cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$1 Int) ($cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$1 Int) ($cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$1 Bool) ($cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$1 Bool) ($cruise_controller_CruiseController_ModeLogic_setEvent_Out$1 Bool)) Bool (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$1 (ite %init (ite (<= (ite (>= 0 (ite $accelResume$1 1 0)) 0 (ite $accelResume$1 1 0)) 20) (ite (>= 0 (ite $accelResume$1 1 0)) 0 (ite $accelResume$1 1 0)) 20) (ite (<= (ite (>= 0 (ite $accelResume$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 1) 0)) 0 (ite $accelResume$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 1) 0)) 20) (ite (>= 0 (ite $accelResume$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 1) 0)) 0 (ite $accelResume$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 1) 0)) 20))) (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$1 (ite %init (ite (<= (ite (>= 0 (ite $decelSet$1 1 0)) 0 (ite $decelSet$1 1 0)) 20) (ite (>= 0 (ite $decelSet$1 1 0)) 0 (ite $decelSet$1 1 0)) 20) (ite (<= (ite (>= 0 (ite $decelSet$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 1) 0)) 0 (ite $decelSet$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 1) 0)) 20) (ite (>= 0 (ite $decelSet$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 1) 0)) 0 (ite $decelSet$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 1) 0)) 20))) (= $chart_CruiseController_ModeLogic_mode_logic_onOff$1 (ite (= $onOff$1 false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic_decel$1 (ite (= (ite (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$1 20) true false) false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic_set$1 (ite (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$1 false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic_accel$1 (ite (= (ite (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$1 20) true false) false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 (ite (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$1 false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$1 true) (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$1 (ite %init true (ite $chart_CruiseController_ModeLogic_mode_logic____wakeup___$0 false $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$0))) (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 (ite %init 0 $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$0)) (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$1 (ite $chart_CruiseController_ModeLogic_mode_logic____wakeup___$1 (ite $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 (ite (and (not $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$1) (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 2) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 8))) (ite (and (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$1) (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 6))) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1)) $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1 (and (and (>= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 2) (<= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 8)) (not (ite (not (= $chart_CruiseController_ModeLogic_mode_logic_onOff$1 0)) true false)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1 (ite (and (>= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 2) (<= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 8)) 0 $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1) $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1 1)) 1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 1) (and (ite (not (= $chart_CruiseController_ModeLogic_mode_logic_onOff$1 0)) true false) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 1) 0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (and (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 6)) (not (ite (not (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 0)) true false)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (ite (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 6)) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 8)) 8 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1 8) (and (and (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_set$1 1) false) 0 1) 0)) true false) (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 1) false) 0 1) 0)) true false)) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1 8) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1 8) (and (and (ite (not (= (ite (= (= (ite (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$1 false) 0 1) 1) false) 0 1) 0)) true false) (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 1) false) 0 1) 0)) true false)) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1 8) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1 7) (and (and (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_set$1 1) false) 0 1) 0)) true false) (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 1) false) 0 1) 0)) true false)) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1 7) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 4) (= $chart_CruiseController_ModeLogic_mode_logic_set$1 1))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 4) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1 4)) 4 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 4) (and (= $chart_CruiseController_ModeLogic_mode_logic_accel$1 1) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 4) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1 5)) 5 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1 4) (and (= $chart_CruiseController_ModeLogic_mode_logic_decel$1 1) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1 4) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1 6)) 6 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1 6) (and (= $chart_CruiseController_ModeLogic_mode_logic_decel$1 0) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1 6) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1 4)) 4 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1 5) (and (= $chart_CruiseController_ModeLogic_mode_logic_accel$1 0) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1 5) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1 4)) 4 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 (ite (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 6))) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$1 (and (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 6))) (and (>= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 3) (<= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 6)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 (ite $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$1 (ite (not (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 4)) 4 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1) $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$1 (or (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 4) (or (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 5) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 6)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 (ite (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 6))) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$1 (and (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 6))) (and (>= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 3) (<= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 6)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 (ite $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$1 (ite (not (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 4)) 4 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1) $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 (ite (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 6))) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (and (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 6))) (and (>= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 3) (<= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 6)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 (ite $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (ite (not (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 4)) 4 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1) $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 (ite (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 2) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 8))) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (and (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 2) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 8))) (and (>= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 2) (<= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 8)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 (ite $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (ite (not (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 7)) 7 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1) $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 (ite (not (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 1)) 1 $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1)) (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$1 (ite %init false (and (not $accelResume$0) $accelResume$1))) (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$1 (and (and (and (and (not $cancel$1) (not $brakePedal$1)) (ite (= $carGear$1 3) true false)) (ite (>= $carSpeed$1 (/ 150 10)) true false)) $validInputs$1)) (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$1 (ite %init false (and (not $decelSet$0) $decelSet$1))) (= $OK$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$1))) -; Universally quantified variables -(declare-fun $onOff$~1 () Bool) -(declare-fun $decelSet$~1 () Bool) -(declare-fun $accelResume$~1 () Bool) -(declare-fun $cancel$~1 () Bool) -(declare-fun $brakePedal$~1 () Bool) -(declare-fun $carGear$~1 () Int) -(declare-fun $carSpeed$~1 () Real) -(declare-fun $validInputs$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_onOff$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_decel$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_set$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_accel$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic____wakeup___$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$~1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$~1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$~1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$~1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$~1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$~1 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$~1 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$~1 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$~1 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$~1 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$~1 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_setEvent_Out$~1 () Bool) -(declare-fun $onOff$0 () Bool) -(declare-fun $decelSet$0 () Bool) -(declare-fun $accelResume$0 () Bool) -(declare-fun $cancel$0 () Bool) -(declare-fun $brakePedal$0 () Bool) -(declare-fun $carGear$0 () Int) -(declare-fun $carSpeed$0 () Real) -(declare-fun $validInputs$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_onOff$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_decel$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_set$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_accel$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic____wakeup___$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$0 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$0 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$0 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$0 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$0 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$0 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$0 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_setEvent_Out$0 () Bool) -; Existentially quantified variables -; Assertions for universal part of the formula -(assert (T true $onOff$~1 $decelSet$~1 $accelResume$~1 $cancel$~1 $brakePedal$~1 $carGear$~1 $carSpeed$~1 $validInputs$~1 $OK$~1 $chart_CruiseController_ModeLogic_mode_logic_onOff$~1 $chart_CruiseController_ModeLogic_mode_logic_decel$~1 $chart_CruiseController_ModeLogic_mode_logic_set$~1 $chart_CruiseController_ModeLogic_mode_logic_accel$~1 $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$~1 $chart_CruiseController_ModeLogic_mode_logic____wakeup___$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$~1 $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$~1 $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$~1 $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$~1 $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$~1 $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$~1 $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$~1 $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$~1 $cruise_controller_CruiseController_ModeLogic_setEvent_Out$~1 $onOff$0 $decelSet$0 $accelResume$0 $cancel$0 $brakePedal$0 $carGear$0 $carSpeed$0 $validInputs$0 $OK$0 $chart_CruiseController_ModeLogic_mode_logic_onOff$0 $chart_CruiseController_ModeLogic_mode_logic_decel$0 $chart_CruiseController_ModeLogic_mode_logic_set$0 $chart_CruiseController_ModeLogic_mode_logic_accel$0 $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$0 $chart_CruiseController_ModeLogic_mode_logic____wakeup___$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$0 $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$0 $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$0 $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$0 $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$0 $cruise_controller_CruiseController_ModeLogic_setEvent_Out$0)) diff --git a/bench/tasks/cruise_controller_01_base_t_part.smt2 b/bench/tasks/cruise_controller_01_base_t_part.smt2 deleted file mode 100755 index 293f4a5ea..000000000 --- a/bench/tasks/cruise_controller_01_base_t_part.smt2 +++ /dev/null @@ -1,160 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($onOff$0 Bool) ($decelSet$0 Bool) ($accelResume$0 Bool) ($cancel$0 Bool) ($brakePedal$0 Bool) ($carGear$0 Int) ($carSpeed$0 Real) ($validInputs$0 Bool) ($OK$0 Bool) ($chart_CruiseController_ModeLogic_mode_logic_onOff$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_decel$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_set$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_accel$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_safetyCondition$0 Int) ($chart_CruiseController_ModeLogic_mode_logic____wakeup___$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$0 Bool) ($chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$0 Int) ($cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 Int) ($cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 Int) ($cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$0 Bool) ($cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$0 Bool) ($cruise_controller_CruiseController_ModeLogic_setEvent_Out$0 Bool) ($onOff$1 Bool) ($decelSet$1 Bool) ($accelResume$1 Bool) ($cancel$1 Bool) ($brakePedal$1 Bool) ($carGear$1 Int) ($carSpeed$1 Real) ($validInputs$1 Bool) ($OK$1 Bool) ($chart_CruiseController_ModeLogic_mode_logic_onOff$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_decel$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_set$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_accel$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 Int) ($chart_CruiseController_ModeLogic_mode_logic____wakeup___$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$1 Bool) ($chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$1 Int) ($cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$1 Int) ($cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$1 Int) ($cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$1 Bool) ($cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$1 Bool) ($cruise_controller_CruiseController_ModeLogic_setEvent_Out$1 Bool)) Bool (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$1 (ite %init (ite (<= (ite (>= 0 (ite $accelResume$1 1 0)) 0 (ite $accelResume$1 1 0)) 20) (ite (>= 0 (ite $accelResume$1 1 0)) 0 (ite $accelResume$1 1 0)) 20) (ite (<= (ite (>= 0 (ite $accelResume$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 1) 0)) 0 (ite $accelResume$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 1) 0)) 20) (ite (>= 0 (ite $accelResume$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 1) 0)) 0 (ite $accelResume$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 1) 0)) 20))) (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$1 (ite %init (ite (<= (ite (>= 0 (ite $decelSet$1 1 0)) 0 (ite $decelSet$1 1 0)) 20) (ite (>= 0 (ite $decelSet$1 1 0)) 0 (ite $decelSet$1 1 0)) 20) (ite (<= (ite (>= 0 (ite $decelSet$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 1) 0)) 0 (ite $decelSet$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 1) 0)) 20) (ite (>= 0 (ite $decelSet$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 1) 0)) 0 (ite $decelSet$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 1) 0)) 20))) (= $chart_CruiseController_ModeLogic_mode_logic_onOff$1 (ite (= $onOff$1 false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic_decel$1 (ite (= (ite (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$1 20) true false) false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic_set$1 (ite (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$1 false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic_accel$1 (ite (= (ite (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$1 20) true false) false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 (ite (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$1 false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$1 true) (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$1 (ite %init true (ite $chart_CruiseController_ModeLogic_mode_logic____wakeup___$0 false $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$0))) (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 (ite %init 0 $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$0)) (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$1 (ite $chart_CruiseController_ModeLogic_mode_logic____wakeup___$1 (ite $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 (ite (and (not $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$1) (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 2) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 8))) (ite (and (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$1) (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 6))) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1)) $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1 (and (and (>= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 2) (<= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 8)) (not (ite (not (= $chart_CruiseController_ModeLogic_mode_logic_onOff$1 0)) true false)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1 (ite (and (>= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 2) (<= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 8)) 0 $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1) $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1 1)) 1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 1) (and (ite (not (= $chart_CruiseController_ModeLogic_mode_logic_onOff$1 0)) true false) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 1) 0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (and (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 6)) (not (ite (not (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 0)) true false)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (ite (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 6)) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 8)) 8 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1 8) (and (and (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_set$1 1) false) 0 1) 0)) true false) (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 1) false) 0 1) 0)) true false)) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1 8) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1 8) (and (and (ite (not (= (ite (= (= (ite (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$1 false) 0 1) 1) false) 0 1) 0)) true false) (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 1) false) 0 1) 0)) true false)) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1 8) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1 7) (and (and (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_set$1 1) false) 0 1) 0)) true false) (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 1) false) 0 1) 0)) true false)) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1 7) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 4) (= $chart_CruiseController_ModeLogic_mode_logic_set$1 1))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 4) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1 4)) 4 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 4) (and (= $chart_CruiseController_ModeLogic_mode_logic_accel$1 1) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 4) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1 5)) 5 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1 4) (and (= $chart_CruiseController_ModeLogic_mode_logic_decel$1 1) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1 4) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1 6)) 6 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1 6) (and (= $chart_CruiseController_ModeLogic_mode_logic_decel$1 0) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1 6) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1 4)) 4 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1 5) (and (= $chart_CruiseController_ModeLogic_mode_logic_accel$1 0) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1 5) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1 4)) 4 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 (ite (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 6))) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$1 (and (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 6))) (and (>= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 3) (<= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 6)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 (ite $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$1 (ite (not (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 4)) 4 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1) $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$1 (or (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 4) (or (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 5) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 6)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 (ite (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 6))) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$1 (and (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 6))) (and (>= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 3) (<= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 6)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 (ite $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$1 (ite (not (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 4)) 4 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1) $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 (ite (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 6))) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (and (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 6))) (and (>= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 3) (<= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 6)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 (ite $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (ite (not (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 4)) 4 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1) $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 (ite (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 2) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 8))) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (and (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 2) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 8))) (and (>= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 2) (<= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 8)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 (ite $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (ite (not (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 7)) 7 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1) $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 (ite (not (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 1)) 1 $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1)) (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$1 (ite %init false (and (not $accelResume$0) $accelResume$1))) (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$1 (and (and (and (and (not $cancel$1) (not $brakePedal$1)) (ite (= $carGear$1 3) true false)) (ite (>= $carSpeed$1 (/ 150 10)) true false)) $validInputs$1)) (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$1 (ite %init false (and (not $decelSet$0) $decelSet$1))) (= $OK$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$1))) -; Universally quantified variables -(declare-fun $onOff$~1 () Bool) -(declare-fun $decelSet$~1 () Bool) -(declare-fun $accelResume$~1 () Bool) -(declare-fun $cancel$~1 () Bool) -(declare-fun $brakePedal$~1 () Bool) -(declare-fun $carGear$~1 () Int) -(declare-fun $carSpeed$~1 () Real) -(declare-fun $validInputs$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_onOff$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_decel$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_set$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_accel$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic____wakeup___$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$~1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$~1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$~1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$~1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$~1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$~1 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$~1 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$~1 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$~1 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$~1 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$~1 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_setEvent_Out$~1 () Bool) -(declare-fun $onOff$0 () Bool) -(declare-fun $decelSet$0 () Bool) -(declare-fun $accelResume$0 () Bool) -(declare-fun $cancel$0 () Bool) -(declare-fun $brakePedal$0 () Bool) -(declare-fun $carGear$0 () Int) -(declare-fun $carSpeed$0 () Real) -(declare-fun $validInputs$0 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_onOff$2 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_decel$2 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_set$2 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_accel$2 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$2 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic____wakeup___$2 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$2 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$2 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$2 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$2 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$2 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$2 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$2 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$2 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$2 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$2 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$2 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$2 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$2 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$2 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$2 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$2 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$2 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$2 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$2 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$2 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$2 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$2 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$2 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$2 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$2 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$2 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$2 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$2 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$2 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$2 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$2 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$2 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$2 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$2 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_setEvent_Out$2 () Bool) -; Assertion for existential part of the formula -(assert (and (T true $onOff$~1 $decelSet$~1 $accelResume$~1 $cancel$~1 $brakePedal$~1 $carGear$~1 $carSpeed$~1 $validInputs$~1 $OK$~1 $chart_CruiseController_ModeLogic_mode_logic_onOff$~1 $chart_CruiseController_ModeLogic_mode_logic_decel$~1 $chart_CruiseController_ModeLogic_mode_logic_set$~1 $chart_CruiseController_ModeLogic_mode_logic_accel$~1 $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$~1 $chart_CruiseController_ModeLogic_mode_logic____wakeup___$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$~1 $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$~1 $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$~1 $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$~1 $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$~1 $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$~1 $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$~1 $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$~1 $cruise_controller_CruiseController_ModeLogic_setEvent_Out$~1 $onOff$0 $decelSet$0 $accelResume$0 $cancel$0 $brakePedal$0 $carGear$0 $carSpeed$0 $validInputs$0 $OK$2 $chart_CruiseController_ModeLogic_mode_logic_onOff$2 $chart_CruiseController_ModeLogic_mode_logic_decel$2 $chart_CruiseController_ModeLogic_mode_logic_set$2 $chart_CruiseController_ModeLogic_mode_logic_accel$2 $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$2 $chart_CruiseController_ModeLogic_mode_logic____wakeup___$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$2 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$2 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$2 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$2 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$2 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$2 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$2 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$2 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$2 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$2 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$2 $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$2 $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$2 $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$2 $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$2 $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$2 $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$2 $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$2 $cruise_controller_CruiseController_ModeLogic_setEvent_Out$2) $OK$2)) diff --git a/bench/tasks/cruise_controller_01_extend_s_part.smt2 b/bench/tasks/cruise_controller_01_extend_s_part.smt2 deleted file mode 100755 index 8412eb265..000000000 --- a/bench/tasks/cruise_controller_01_extend_s_part.smt2 +++ /dev/null @@ -1,240 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($onOff$0 Bool) ($decelSet$0 Bool) ($accelResume$0 Bool) ($cancel$0 Bool) ($brakePedal$0 Bool) ($carGear$0 Int) ($carSpeed$0 Real) ($validInputs$0 Bool) ($OK$0 Bool) ($chart_CruiseController_ModeLogic_mode_logic_onOff$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_decel$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_set$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_accel$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_safetyCondition$0 Int) ($chart_CruiseController_ModeLogic_mode_logic____wakeup___$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$0 Bool) ($chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$0 Int) ($cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 Int) ($cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 Int) ($cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$0 Bool) ($cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$0 Bool) ($cruise_controller_CruiseController_ModeLogic_setEvent_Out$0 Bool) ($onOff$1 Bool) ($decelSet$1 Bool) ($accelResume$1 Bool) ($cancel$1 Bool) ($brakePedal$1 Bool) ($carGear$1 Int) ($carSpeed$1 Real) ($validInputs$1 Bool) ($OK$1 Bool) ($chart_CruiseController_ModeLogic_mode_logic_onOff$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_decel$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_set$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_accel$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 Int) ($chart_CruiseController_ModeLogic_mode_logic____wakeup___$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$1 Bool) ($chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$1 Int) ($cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$1 Int) ($cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$1 Int) ($cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$1 Bool) ($cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$1 Bool) ($cruise_controller_CruiseController_ModeLogic_setEvent_Out$1 Bool)) Bool (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$1 (ite %init (ite (<= (ite (>= 0 (ite $accelResume$1 1 0)) 0 (ite $accelResume$1 1 0)) 20) (ite (>= 0 (ite $accelResume$1 1 0)) 0 (ite $accelResume$1 1 0)) 20) (ite (<= (ite (>= 0 (ite $accelResume$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 1) 0)) 0 (ite $accelResume$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 1) 0)) 20) (ite (>= 0 (ite $accelResume$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 1) 0)) 0 (ite $accelResume$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 1) 0)) 20))) (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$1 (ite %init (ite (<= (ite (>= 0 (ite $decelSet$1 1 0)) 0 (ite $decelSet$1 1 0)) 20) (ite (>= 0 (ite $decelSet$1 1 0)) 0 (ite $decelSet$1 1 0)) 20) (ite (<= (ite (>= 0 (ite $decelSet$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 1) 0)) 0 (ite $decelSet$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 1) 0)) 20) (ite (>= 0 (ite $decelSet$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 1) 0)) 0 (ite $decelSet$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 1) 0)) 20))) (= $chart_CruiseController_ModeLogic_mode_logic_onOff$1 (ite (= $onOff$1 false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic_decel$1 (ite (= (ite (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$1 20) true false) false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic_set$1 (ite (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$1 false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic_accel$1 (ite (= (ite (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$1 20) true false) false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 (ite (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$1 false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$1 true) (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$1 (ite %init true (ite $chart_CruiseController_ModeLogic_mode_logic____wakeup___$0 false $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$0))) (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 (ite %init 0 $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$0)) (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$1 (ite $chart_CruiseController_ModeLogic_mode_logic____wakeup___$1 (ite $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 (ite (and (not $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$1) (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 2) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 8))) (ite (and (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$1) (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 6))) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1)) $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1 (and (and (>= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 2) (<= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 8)) (not (ite (not (= $chart_CruiseController_ModeLogic_mode_logic_onOff$1 0)) true false)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1 (ite (and (>= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 2) (<= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 8)) 0 $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1) $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1 1)) 1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 1) (and (ite (not (= $chart_CruiseController_ModeLogic_mode_logic_onOff$1 0)) true false) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 1) 0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (and (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 6)) (not (ite (not (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 0)) true false)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (ite (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 6)) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 8)) 8 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1 8) (and (and (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_set$1 1) false) 0 1) 0)) true false) (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 1) false) 0 1) 0)) true false)) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1 8) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1 8) (and (and (ite (not (= (ite (= (= (ite (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$1 false) 0 1) 1) false) 0 1) 0)) true false) (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 1) false) 0 1) 0)) true false)) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1 8) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1 7) (and (and (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_set$1 1) false) 0 1) 0)) true false) (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 1) false) 0 1) 0)) true false)) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1 7) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 4) (= $chart_CruiseController_ModeLogic_mode_logic_set$1 1))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 4) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1 4)) 4 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 4) (and (= $chart_CruiseController_ModeLogic_mode_logic_accel$1 1) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 4) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1 5)) 5 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1 4) (and (= $chart_CruiseController_ModeLogic_mode_logic_decel$1 1) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1 4) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1 6)) 6 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1 6) (and (= $chart_CruiseController_ModeLogic_mode_logic_decel$1 0) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1 6) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1 4)) 4 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1 5) (and (= $chart_CruiseController_ModeLogic_mode_logic_accel$1 0) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1 5) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1 4)) 4 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 (ite (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 6))) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$1 (and (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 6))) (and (>= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 3) (<= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 6)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 (ite $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$1 (ite (not (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 4)) 4 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1) $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$1 (or (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 4) (or (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 5) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 6)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 (ite (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 6))) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$1 (and (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 6))) (and (>= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 3) (<= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 6)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 (ite $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$1 (ite (not (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 4)) 4 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1) $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 (ite (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 6))) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (and (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 6))) (and (>= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 3) (<= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 6)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 (ite $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (ite (not (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 4)) 4 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1) $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 (ite (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 2) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 8))) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (and (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 2) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 8))) (and (>= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 2) (<= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 8)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 (ite $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (ite (not (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 7)) 7 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1) $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 (ite (not (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 1)) 1 $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1)) (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$1 (ite %init false (and (not $accelResume$0) $accelResume$1))) (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$1 (and (and (and (and (not $cancel$1) (not $brakePedal$1)) (ite (= $carGear$1 3) true false)) (ite (>= $carSpeed$1 (/ 150 10)) true false)) $validInputs$1)) (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$1 (ite %init false (and (not $decelSet$0) $decelSet$1))) (= $OK$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$1))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $onOff$~1 () Bool) -(declare-fun $decelSet$~1 () Bool) -(declare-fun $accelResume$~1 () Bool) -(declare-fun $cancel$~1 () Bool) -(declare-fun $brakePedal$~1 () Bool) -(declare-fun $carGear$~1 () Int) -(declare-fun $carSpeed$~1 () Real) -(declare-fun $validInputs$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_onOff$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_decel$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_set$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_accel$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic____wakeup___$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$~1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$~1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$~1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$~1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$~1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$~1 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$~1 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$~1 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$~1 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$~1 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$~1 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_setEvent_Out$~1 () Bool) -(declare-fun $onOff$0 () Bool) -(declare-fun $decelSet$0 () Bool) -(declare-fun $accelResume$0 () Bool) -(declare-fun $cancel$0 () Bool) -(declare-fun $brakePedal$0 () Bool) -(declare-fun $carGear$0 () Int) -(declare-fun $carSpeed$0 () Real) -(declare-fun $validInputs$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_onOff$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_decel$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_set$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_accel$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic____wakeup___$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$0 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$0 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$0 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$0 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$0 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$0 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$0 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_setEvent_Out$0 () Bool) -(declare-fun $onOff$1 () Bool) -(declare-fun $decelSet$1 () Bool) -(declare-fun $accelResume$1 () Bool) -(declare-fun $cancel$1 () Bool) -(declare-fun $brakePedal$1 () Bool) -(declare-fun $carGear$1 () Int) -(declare-fun $carSpeed$1 () Real) -(declare-fun $validInputs$1 () Bool) -(declare-fun $OK$1 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_onOff$1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_decel$1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_set$1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_accel$1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic____wakeup___$1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$1 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$1 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$1 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$1 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$1 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$1 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_setEvent_Out$1 () Bool) -; Assertions for universal part of the formula -(assert (T %init $onOff$~1 $decelSet$~1 $accelResume$~1 $cancel$~1 $brakePedal$~1 $carGear$~1 $carSpeed$~1 $validInputs$~1 $OK$~1 $chart_CruiseController_ModeLogic_mode_logic_onOff$~1 $chart_CruiseController_ModeLogic_mode_logic_decel$~1 $chart_CruiseController_ModeLogic_mode_logic_set$~1 $chart_CruiseController_ModeLogic_mode_logic_accel$~1 $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$~1 $chart_CruiseController_ModeLogic_mode_logic____wakeup___$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$~1 $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$~1 $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$~1 $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$~1 $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$~1 $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$~1 $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$~1 $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$~1 $cruise_controller_CruiseController_ModeLogic_setEvent_Out$~1 $onOff$0 $decelSet$0 $accelResume$0 $cancel$0 $brakePedal$0 $carGear$0 $carSpeed$0 $validInputs$0 $OK$0 $chart_CruiseController_ModeLogic_mode_logic_onOff$0 $chart_CruiseController_ModeLogic_mode_logic_decel$0 $chart_CruiseController_ModeLogic_mode_logic_set$0 $chart_CruiseController_ModeLogic_mode_logic_accel$0 $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$0 $chart_CruiseController_ModeLogic_mode_logic____wakeup___$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$0 $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$0 $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$0 $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$0 $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$0 $cruise_controller_CruiseController_ModeLogic_setEvent_Out$0)) -(assert $OK$0) -(assert (T false $onOff$0 $decelSet$0 $accelResume$0 $cancel$0 $brakePedal$0 $carGear$0 $carSpeed$0 $validInputs$0 $OK$0 $chart_CruiseController_ModeLogic_mode_logic_onOff$0 $chart_CruiseController_ModeLogic_mode_logic_decel$0 $chart_CruiseController_ModeLogic_mode_logic_set$0 $chart_CruiseController_ModeLogic_mode_logic_accel$0 $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$0 $chart_CruiseController_ModeLogic_mode_logic____wakeup___$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$0 $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$0 $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$0 $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$0 $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$0 $cruise_controller_CruiseController_ModeLogic_setEvent_Out$0 $onOff$1 $decelSet$1 $accelResume$1 $cancel$1 $brakePedal$1 $carGear$1 $carSpeed$1 $validInputs$1 $OK$1 $chart_CruiseController_ModeLogic_mode_logic_onOff$1 $chart_CruiseController_ModeLogic_mode_logic_decel$1 $chart_CruiseController_ModeLogic_mode_logic_set$1 $chart_CruiseController_ModeLogic_mode_logic_accel$1 $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 $chart_CruiseController_ModeLogic_mode_logic____wakeup___$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$1 $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$1 $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$1 $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$1 $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$1 $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$1 $cruise_controller_CruiseController_ModeLogic_setEvent_Out$1)) diff --git a/bench/tasks/cruise_controller_01_extend_t_part.smt2 b/bench/tasks/cruise_controller_01_extend_t_part.smt2 deleted file mode 100755 index 8fed00efe..000000000 --- a/bench/tasks/cruise_controller_01_extend_t_part.smt2 +++ /dev/null @@ -1,238 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($onOff$0 Bool) ($decelSet$0 Bool) ($accelResume$0 Bool) ($cancel$0 Bool) ($brakePedal$0 Bool) ($carGear$0 Int) ($carSpeed$0 Real) ($validInputs$0 Bool) ($OK$0 Bool) ($chart_CruiseController_ModeLogic_mode_logic_onOff$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_decel$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_set$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_accel$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_safetyCondition$0 Int) ($chart_CruiseController_ModeLogic_mode_logic____wakeup___$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$0 Bool) ($chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$0 Int) ($cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 Int) ($cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 Int) ($cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$0 Bool) ($cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$0 Bool) ($cruise_controller_CruiseController_ModeLogic_setEvent_Out$0 Bool) ($onOff$1 Bool) ($decelSet$1 Bool) ($accelResume$1 Bool) ($cancel$1 Bool) ($brakePedal$1 Bool) ($carGear$1 Int) ($carSpeed$1 Real) ($validInputs$1 Bool) ($OK$1 Bool) ($chart_CruiseController_ModeLogic_mode_logic_onOff$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_decel$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_set$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_accel$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 Int) ($chart_CruiseController_ModeLogic_mode_logic____wakeup___$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$1 Bool) ($chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$1 Int) ($cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$1 Int) ($cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$1 Int) ($cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$1 Bool) ($cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$1 Bool) ($cruise_controller_CruiseController_ModeLogic_setEvent_Out$1 Bool)) Bool (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$1 (ite %init (ite (<= (ite (>= 0 (ite $accelResume$1 1 0)) 0 (ite $accelResume$1 1 0)) 20) (ite (>= 0 (ite $accelResume$1 1 0)) 0 (ite $accelResume$1 1 0)) 20) (ite (<= (ite (>= 0 (ite $accelResume$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 1) 0)) 0 (ite $accelResume$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 1) 0)) 20) (ite (>= 0 (ite $accelResume$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 1) 0)) 0 (ite $accelResume$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 1) 0)) 20))) (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$1 (ite %init (ite (<= (ite (>= 0 (ite $decelSet$1 1 0)) 0 (ite $decelSet$1 1 0)) 20) (ite (>= 0 (ite $decelSet$1 1 0)) 0 (ite $decelSet$1 1 0)) 20) (ite (<= (ite (>= 0 (ite $decelSet$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 1) 0)) 0 (ite $decelSet$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 1) 0)) 20) (ite (>= 0 (ite $decelSet$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 1) 0)) 0 (ite $decelSet$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 1) 0)) 20))) (= $chart_CruiseController_ModeLogic_mode_logic_onOff$1 (ite (= $onOff$1 false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic_decel$1 (ite (= (ite (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$1 20) true false) false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic_set$1 (ite (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$1 false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic_accel$1 (ite (= (ite (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$1 20) true false) false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 (ite (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$1 false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$1 true) (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$1 (ite %init true (ite $chart_CruiseController_ModeLogic_mode_logic____wakeup___$0 false $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$0))) (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 (ite %init 0 $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$0)) (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$1 (ite $chart_CruiseController_ModeLogic_mode_logic____wakeup___$1 (ite $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 (ite (and (not $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$1) (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 2) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 8))) (ite (and (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$1) (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 6))) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1)) $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1 (and (and (>= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 2) (<= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 8)) (not (ite (not (= $chart_CruiseController_ModeLogic_mode_logic_onOff$1 0)) true false)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1 (ite (and (>= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 2) (<= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 8)) 0 $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1) $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1 1)) 1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 1) (and (ite (not (= $chart_CruiseController_ModeLogic_mode_logic_onOff$1 0)) true false) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 1) 0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (and (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 6)) (not (ite (not (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 0)) true false)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (ite (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 6)) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 8)) 8 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1 8) (and (and (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_set$1 1) false) 0 1) 0)) true false) (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 1) false) 0 1) 0)) true false)) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1 8) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1 8) (and (and (ite (not (= (ite (= (= (ite (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$1 false) 0 1) 1) false) 0 1) 0)) true false) (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 1) false) 0 1) 0)) true false)) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1 8) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1 7) (and (and (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_set$1 1) false) 0 1) 0)) true false) (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 1) false) 0 1) 0)) true false)) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1 7) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 4) (= $chart_CruiseController_ModeLogic_mode_logic_set$1 1))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 4) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1 4)) 4 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 4) (and (= $chart_CruiseController_ModeLogic_mode_logic_accel$1 1) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 4) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1 5)) 5 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1 4) (and (= $chart_CruiseController_ModeLogic_mode_logic_decel$1 1) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1 4) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1 6)) 6 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1 6) (and (= $chart_CruiseController_ModeLogic_mode_logic_decel$1 0) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1 6) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1 4)) 4 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1 5) (and (= $chart_CruiseController_ModeLogic_mode_logic_accel$1 0) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1 5) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1 4)) 4 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 (ite (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 6))) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$1 (and (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 6))) (and (>= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 3) (<= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 6)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 (ite $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$1 (ite (not (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 4)) 4 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1) $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$1 (or (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 4) (or (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 5) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 6)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 (ite (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 6))) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$1 (and (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 6))) (and (>= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 3) (<= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 6)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 (ite $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$1 (ite (not (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 4)) 4 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1) $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 (ite (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 6))) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (and (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 6))) (and (>= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 3) (<= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 6)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 (ite $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (ite (not (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 4)) 4 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1) $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 (ite (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 2) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 8))) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (and (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 2) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 8))) (and (>= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 2) (<= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 8)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 (ite $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (ite (not (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 7)) 7 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1) $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 (ite (not (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 1)) 1 $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1)) (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$1 (ite %init false (and (not $accelResume$0) $accelResume$1))) (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$1 (and (and (and (and (not $cancel$1) (not $brakePedal$1)) (ite (= $carGear$1 3) true false)) (ite (>= $carSpeed$1 (/ 150 10)) true false)) $validInputs$1)) (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$1 (ite %init false (and (not $decelSet$0) $decelSet$1))) (= $OK$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$1))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $onOff$~1 () Bool) -(declare-fun $decelSet$~1 () Bool) -(declare-fun $accelResume$~1 () Bool) -(declare-fun $cancel$~1 () Bool) -(declare-fun $brakePedal$~1 () Bool) -(declare-fun $carGear$~1 () Int) -(declare-fun $carSpeed$~1 () Real) -(declare-fun $validInputs$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_onOff$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_decel$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_set$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_accel$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic____wakeup___$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$~1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$~1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$~1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$~1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$~1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$~1 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$~1 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$~1 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$~1 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$~1 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$~1 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_setEvent_Out$~1 () Bool) -(declare-fun $onOff$0 () Bool) -(declare-fun $decelSet$0 () Bool) -(declare-fun $accelResume$0 () Bool) -(declare-fun $cancel$0 () Bool) -(declare-fun $brakePedal$0 () Bool) -(declare-fun $carGear$0 () Int) -(declare-fun $carSpeed$0 () Real) -(declare-fun $validInputs$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_onOff$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_decel$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_set$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_accel$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic____wakeup___$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$0 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$0 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$0 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$0 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$0 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$0 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$0 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_setEvent_Out$0 () Bool) -(declare-fun $onOff$1 () Bool) -(declare-fun $decelSet$1 () Bool) -(declare-fun $accelResume$1 () Bool) -(declare-fun $cancel$1 () Bool) -(declare-fun $brakePedal$1 () Bool) -(declare-fun $carGear$1 () Int) -(declare-fun $carSpeed$1 () Real) -(declare-fun $validInputs$1 () Bool) -(declare-fun $OK$3 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_onOff$3 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_decel$3 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_set$3 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_accel$3 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$3 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic____wakeup___$3 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$3 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$3 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$3 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$3 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$3 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$3 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$3 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$3 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$3 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$3 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$3 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$3 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$3 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$3 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$3 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$3 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$3 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$3 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$3 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$3 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$3 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$3 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$3 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$3 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$3 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$3 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$3 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$3 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$3 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$3 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$3 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$3 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$3 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$3 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$3 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$3 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$3 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$3 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$3 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$3 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_setEvent_Out$3 () Bool) -; Assertion for existential part of the formula -(assert (and (T false $onOff$0 $decelSet$0 $accelResume$0 $cancel$0 $brakePedal$0 $carGear$0 $carSpeed$0 $validInputs$0 $OK$0 $chart_CruiseController_ModeLogic_mode_logic_onOff$0 $chart_CruiseController_ModeLogic_mode_logic_decel$0 $chart_CruiseController_ModeLogic_mode_logic_set$0 $chart_CruiseController_ModeLogic_mode_logic_accel$0 $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$0 $chart_CruiseController_ModeLogic_mode_logic____wakeup___$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$0 $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$0 $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$0 $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$0 $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$0 $cruise_controller_CruiseController_ModeLogic_setEvent_Out$0 $onOff$1 $decelSet$1 $accelResume$1 $cancel$1 $brakePedal$1 $carGear$1 $carSpeed$1 $validInputs$1 $OK$3 $chart_CruiseController_ModeLogic_mode_logic_onOff$3 $chart_CruiseController_ModeLogic_mode_logic_decel$3 $chart_CruiseController_ModeLogic_mode_logic_set$3 $chart_CruiseController_ModeLogic_mode_logic_accel$3 $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$3 $chart_CruiseController_ModeLogic_mode_logic____wakeup___$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$3 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$3 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$3 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_02$3 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$3 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$3 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$3 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$3 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$3 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$3 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$3 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$3 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$3 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$3 $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$3 $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$3 $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$3 $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$3 $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$3 $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$3 $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$3 $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$3 $cruise_controller_CruiseController_ModeLogic_setEvent_Out$3) $OK$3)) diff --git a/bench/tasks/cruise_controller_02_base_s_part.smt2 b/bench/tasks/cruise_controller_02_base_s_part.smt2 deleted file mode 100755 index 7e73b24dc..000000000 --- a/bench/tasks/cruise_controller_02_base_s_part.smt2 +++ /dev/null @@ -1,160 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($onOff$0 Bool) ($decelSet$0 Bool) ($accelResume$0 Bool) ($cancel$0 Bool) ($brakePedal$0 Bool) ($carGear$0 Int) ($carSpeed$0 Real) ($validInputs$0 Bool) ($OK$0 Bool) ($chart_CruiseController_ModeLogic_mode_logic_onOff$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_decel$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_set$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_accel$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_safetyCondition$0 Int) ($chart_CruiseController_ModeLogic_mode_logic____wakeup___$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$0 Bool) ($chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$0 Int) ($cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 Int) ($cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 Int) ($cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$0 Bool) ($cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$0 Bool) ($cruise_controller_CruiseController_ModeLogic_setEvent_Out$0 Bool) ($onOff$1 Bool) ($decelSet$1 Bool) ($accelResume$1 Bool) ($cancel$1 Bool) ($brakePedal$1 Bool) ($carGear$1 Int) ($carSpeed$1 Real) ($validInputs$1 Bool) ($OK$1 Bool) ($chart_CruiseController_ModeLogic_mode_logic_onOff$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_decel$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_set$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_accel$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 Int) ($chart_CruiseController_ModeLogic_mode_logic____wakeup___$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$1 Bool) ($chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$1 Int) ($cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$1 Int) ($cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$1 Int) ($cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$1 Bool) ($cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$1 Bool) ($cruise_controller_CruiseController_ModeLogic_setEvent_Out$1 Bool)) Bool (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$1 (ite %init (ite (<= (ite (>= 0 (ite $accelResume$1 1 0)) 0 (ite $accelResume$1 1 0)) 20) (ite (>= 0 (ite $accelResume$1 1 0)) 0 (ite $accelResume$1 1 0)) 20) (ite (<= (ite (>= 0 (ite $accelResume$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 1) 0)) 0 (ite $accelResume$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 1) 0)) 20) (ite (>= 0 (ite $accelResume$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 1) 0)) 0 (ite $accelResume$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 1) 0)) 20))) (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$1 (ite %init (ite (<= (ite (>= 0 (ite $decelSet$1 1 0)) 0 (ite $decelSet$1 1 0)) 20) (ite (>= 0 (ite $decelSet$1 1 0)) 0 (ite $decelSet$1 1 0)) 20) (ite (<= (ite (>= 0 (ite $decelSet$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 1) 0)) 0 (ite $decelSet$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 1) 0)) 20) (ite (>= 0 (ite $decelSet$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 1) 0)) 0 (ite $decelSet$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 1) 0)) 20))) (= $chart_CruiseController_ModeLogic_mode_logic_onOff$1 (ite (= $onOff$1 false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic_decel$1 (ite (= (ite (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$1 20) true false) false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic_set$1 (ite (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$1 false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic_accel$1 (ite (= (ite (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$1 20) true false) false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 (ite (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$1 false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$1 true) (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$1 (ite %init true (ite $chart_CruiseController_ModeLogic_mode_logic____wakeup___$0 false $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$0))) (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 (ite %init 0 $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$0)) (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$1 (ite $chart_CruiseController_ModeLogic_mode_logic____wakeup___$1 (ite $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 (ite (and (not $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$1) (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 2) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 8))) (ite (and (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$1) (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 6))) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1)) $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1 (and (and (>= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 2) (<= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 8)) (not (ite (not (= $chart_CruiseController_ModeLogic_mode_logic_onOff$1 0)) true false)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1 (ite (and (>= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 2) (<= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 8)) 0 $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1) $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1 1)) 1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 1) (and (ite (not (= $chart_CruiseController_ModeLogic_mode_logic_onOff$1 0)) true false) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 1) 0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (and (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 6)) (not (ite (not (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 0)) true false)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (ite (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 6)) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 8)) 8 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1 8) (and (and (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_set$1 1) false) 0 1) 0)) true false) (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 1) false) 0 1) 0)) true false)) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1 8) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1 8) (and (and (ite (not (= (ite (= (= (ite (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$1 false) 0 1) 1) false) 0 1) 0)) true false) (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 1) false) 0 1) 0)) true false)) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1 8) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1 7) (and (and (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_set$1 1) false) 0 1) 0)) true false) (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 1) false) 0 1) 0)) true false)) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1 7) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 4) (= $chart_CruiseController_ModeLogic_mode_logic_set$1 1))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 4) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1 4)) 4 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 4) (and (= $chart_CruiseController_ModeLogic_mode_logic_accel$1 1) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 4) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1 5)) 5 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1 4) (and (= $chart_CruiseController_ModeLogic_mode_logic_decel$1 1) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1 4) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1 6)) 6 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1 6) (and (= $chart_CruiseController_ModeLogic_mode_logic_decel$1 0) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1 6) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1 4)) 4 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1 5) (and (= $chart_CruiseController_ModeLogic_mode_logic_accel$1 0) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1 5) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1 4)) 4 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 (ite (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 6))) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$1 (and (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 6))) (and (>= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 3) (<= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 6)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 (ite $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$1 (ite (not (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 4)) 4 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1) $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 (ite (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 6))) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$1 (and (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 6))) (and (>= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 3) (<= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 6)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 (ite $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$1 (ite (not (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 4)) 4 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1) $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$1 (or (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 4) (or (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 5) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 6)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 (ite (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 6))) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (and (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 6))) (and (>= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 3) (<= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 6)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 (ite $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (ite (not (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 4)) 4 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1) $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 (ite (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 2) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 8))) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (and (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 2) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 8))) (and (>= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 2) (<= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 8)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 (ite $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (ite (not (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 7)) 7 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1) $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 (ite (not (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 1)) 1 $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1)) (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$1 (ite %init false (and (not $accelResume$0) $accelResume$1))) (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$1 (and (and (and (and (not $cancel$1) (not $brakePedal$1)) (ite (= $carGear$1 3) true false)) (ite (>= $carSpeed$1 (/ 150 10)) true false)) $validInputs$1)) (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$1 (ite %init false (and (not $decelSet$0) $decelSet$1))) (= $OK$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$1))) -; Universally quantified variables -(declare-fun $onOff$~1 () Bool) -(declare-fun $decelSet$~1 () Bool) -(declare-fun $accelResume$~1 () Bool) -(declare-fun $cancel$~1 () Bool) -(declare-fun $brakePedal$~1 () Bool) -(declare-fun $carGear$~1 () Int) -(declare-fun $carSpeed$~1 () Real) -(declare-fun $validInputs$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_onOff$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_decel$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_set$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_accel$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic____wakeup___$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$~1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$~1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$~1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$~1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$~1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$~1 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$~1 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$~1 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$~1 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$~1 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$~1 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_setEvent_Out$~1 () Bool) -(declare-fun $onOff$0 () Bool) -(declare-fun $decelSet$0 () Bool) -(declare-fun $accelResume$0 () Bool) -(declare-fun $cancel$0 () Bool) -(declare-fun $brakePedal$0 () Bool) -(declare-fun $carGear$0 () Int) -(declare-fun $carSpeed$0 () Real) -(declare-fun $validInputs$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_onOff$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_decel$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_set$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_accel$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic____wakeup___$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$0 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$0 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$0 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$0 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$0 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$0 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$0 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_setEvent_Out$0 () Bool) -; Assertions for universal part of the formula -(assert (T true $onOff$~1 $decelSet$~1 $accelResume$~1 $cancel$~1 $brakePedal$~1 $carGear$~1 $carSpeed$~1 $validInputs$~1 $OK$~1 $chart_CruiseController_ModeLogic_mode_logic_onOff$~1 $chart_CruiseController_ModeLogic_mode_logic_decel$~1 $chart_CruiseController_ModeLogic_mode_logic_set$~1 $chart_CruiseController_ModeLogic_mode_logic_accel$~1 $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$~1 $chart_CruiseController_ModeLogic_mode_logic____wakeup___$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$~1 $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$~1 $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$~1 $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$~1 $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$~1 $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$~1 $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$~1 $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$~1 $cruise_controller_CruiseController_ModeLogic_setEvent_Out$~1 $onOff$0 $decelSet$0 $accelResume$0 $cancel$0 $brakePedal$0 $carGear$0 $carSpeed$0 $validInputs$0 $OK$0 $chart_CruiseController_ModeLogic_mode_logic_onOff$0 $chart_CruiseController_ModeLogic_mode_logic_decel$0 $chart_CruiseController_ModeLogic_mode_logic_set$0 $chart_CruiseController_ModeLogic_mode_logic_accel$0 $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$0 $chart_CruiseController_ModeLogic_mode_logic____wakeup___$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$0 $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$0 $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$0 $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$0 $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$0 $cruise_controller_CruiseController_ModeLogic_setEvent_Out$0)) diff --git a/bench/tasks/cruise_controller_02_base_t_part.smt2 b/bench/tasks/cruise_controller_02_base_t_part.smt2 deleted file mode 100755 index 8c588b4cc..000000000 --- a/bench/tasks/cruise_controller_02_base_t_part.smt2 +++ /dev/null @@ -1,161 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($onOff$0 Bool) ($decelSet$0 Bool) ($accelResume$0 Bool) ($cancel$0 Bool) ($brakePedal$0 Bool) ($carGear$0 Int) ($carSpeed$0 Real) ($validInputs$0 Bool) ($OK$0 Bool) ($chart_CruiseController_ModeLogic_mode_logic_onOff$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_decel$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_set$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_accel$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_safetyCondition$0 Int) ($chart_CruiseController_ModeLogic_mode_logic____wakeup___$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$0 Bool) ($chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$0 Int) ($cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 Int) ($cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 Int) ($cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$0 Bool) ($cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$0 Bool) ($cruise_controller_CruiseController_ModeLogic_setEvent_Out$0 Bool) ($onOff$1 Bool) ($decelSet$1 Bool) ($accelResume$1 Bool) ($cancel$1 Bool) ($brakePedal$1 Bool) ($carGear$1 Int) ($carSpeed$1 Real) ($validInputs$1 Bool) ($OK$1 Bool) ($chart_CruiseController_ModeLogic_mode_logic_onOff$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_decel$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_set$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_accel$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 Int) ($chart_CruiseController_ModeLogic_mode_logic____wakeup___$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$1 Bool) ($chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$1 Int) ($cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$1 Int) ($cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$1 Int) ($cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$1 Bool) ($cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$1 Bool) ($cruise_controller_CruiseController_ModeLogic_setEvent_Out$1 Bool)) Bool (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$1 (ite %init (ite (<= (ite (>= 0 (ite $accelResume$1 1 0)) 0 (ite $accelResume$1 1 0)) 20) (ite (>= 0 (ite $accelResume$1 1 0)) 0 (ite $accelResume$1 1 0)) 20) (ite (<= (ite (>= 0 (ite $accelResume$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 1) 0)) 0 (ite $accelResume$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 1) 0)) 20) (ite (>= 0 (ite $accelResume$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 1) 0)) 0 (ite $accelResume$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 1) 0)) 20))) (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$1 (ite %init (ite (<= (ite (>= 0 (ite $decelSet$1 1 0)) 0 (ite $decelSet$1 1 0)) 20) (ite (>= 0 (ite $decelSet$1 1 0)) 0 (ite $decelSet$1 1 0)) 20) (ite (<= (ite (>= 0 (ite $decelSet$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 1) 0)) 0 (ite $decelSet$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 1) 0)) 20) (ite (>= 0 (ite $decelSet$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 1) 0)) 0 (ite $decelSet$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 1) 0)) 20))) (= $chart_CruiseController_ModeLogic_mode_logic_onOff$1 (ite (= $onOff$1 false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic_decel$1 (ite (= (ite (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$1 20) true false) false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic_set$1 (ite (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$1 false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic_accel$1 (ite (= (ite (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$1 20) true false) false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 (ite (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$1 false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$1 true) (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$1 (ite %init true (ite $chart_CruiseController_ModeLogic_mode_logic____wakeup___$0 false $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$0))) (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 (ite %init 0 $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$0)) (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$1 (ite $chart_CruiseController_ModeLogic_mode_logic____wakeup___$1 (ite $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 (ite (and (not $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$1) (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 2) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 8))) (ite (and (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$1) (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 6))) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1)) $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1 (and (and (>= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 2) (<= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 8)) (not (ite (not (= $chart_CruiseController_ModeLogic_mode_logic_onOff$1 0)) true false)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1 (ite (and (>= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 2) (<= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 8)) 0 $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1) $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1 1)) 1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 1) (and (ite (not (= $chart_CruiseController_ModeLogic_mode_logic_onOff$1 0)) true false) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 1) 0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (and (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 6)) (not (ite (not (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 0)) true false)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (ite (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 6)) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 8)) 8 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1 8) (and (and (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_set$1 1) false) 0 1) 0)) true false) (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 1) false) 0 1) 0)) true false)) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1 8) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1 8) (and (and (ite (not (= (ite (= (= (ite (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$1 false) 0 1) 1) false) 0 1) 0)) true false) (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 1) false) 0 1) 0)) true false)) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1 8) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1 7) (and (and (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_set$1 1) false) 0 1) 0)) true false) (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 1) false) 0 1) 0)) true false)) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1 7) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 4) (= $chart_CruiseController_ModeLogic_mode_logic_set$1 1))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 4) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1 4)) 4 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 4) (and (= $chart_CruiseController_ModeLogic_mode_logic_accel$1 1) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 4) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1 5)) 5 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1 4) (and (= $chart_CruiseController_ModeLogic_mode_logic_decel$1 1) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1 4) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1 6)) 6 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1 6) (and (= $chart_CruiseController_ModeLogic_mode_logic_decel$1 0) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1 6) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1 4)) 4 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1 5) (and (= $chart_CruiseController_ModeLogic_mode_logic_accel$1 0) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1 5) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1 4)) 4 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 (ite (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 6))) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$1 (and (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 6))) (and (>= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 3) (<= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 6)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 (ite $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$1 (ite (not (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 4)) 4 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1) $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 (ite (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 6))) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$1 (and (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 6))) (and (>= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 3) (<= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 6)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 (ite $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$1 (ite (not (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 4)) 4 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1) $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$1 (or (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 4) (or (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 5) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 6)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 (ite (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 6))) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (and (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 6))) (and (>= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 3) (<= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 6)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 (ite $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (ite (not (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 4)) 4 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1) $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 (ite (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 2) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 8))) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (and (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 2) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 8))) (and (>= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 2) (<= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 8)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 (ite $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (ite (not (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 7)) 7 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1) $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 (ite (not (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 1)) 1 $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1)) (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$1 (ite %init false (and (not $accelResume$0) $accelResume$1))) (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$1 (and (and (and (and (not $cancel$1) (not $brakePedal$1)) (ite (= $carGear$1 3) true false)) (ite (>= $carSpeed$1 (/ 150 10)) true false)) $validInputs$1)) (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$1 (ite %init false (and (not $decelSet$0) $decelSet$1))) (= $OK$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$1))) -; Universally quantified variables -(declare-fun $onOff$~1 () Bool) -(declare-fun $decelSet$~1 () Bool) -(declare-fun $accelResume$~1 () Bool) -(declare-fun $cancel$~1 () Bool) -(declare-fun $brakePedal$~1 () Bool) -(declare-fun $carGear$~1 () Int) -(declare-fun $carSpeed$~1 () Real) -(declare-fun $validInputs$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_onOff$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_decel$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_set$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_accel$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic____wakeup___$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$~1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$~1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$~1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$~1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$~1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$~1 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$~1 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$~1 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$~1 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$~1 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$~1 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_setEvent_Out$~1 () Bool) -(declare-fun $onOff$0 () Bool) -(declare-fun $decelSet$0 () Bool) -(declare-fun $accelResume$0 () Bool) -(declare-fun $cancel$0 () Bool) -(declare-fun $brakePedal$0 () Bool) -(declare-fun $carGear$0 () Int) -(declare-fun $carSpeed$0 () Real) -(declare-fun $validInputs$0 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_onOff$2 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_decel$2 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_set$2 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_accel$2 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$2 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic____wakeup___$2 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$2 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$2 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$2 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$2 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$2 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$2 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$2 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$2 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$2 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$2 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$2 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$2 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$2 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$2 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$2 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$2 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$2 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$2 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$2 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$2 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$2 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$2 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$2 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$2 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$2 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$2 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$2 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$2 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$2 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$2 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$2 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$2 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$2 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$2 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$2 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_setEvent_Out$2 () Bool) - -; Assertion for existential part of the formula -(assert (and (T true $onOff$~1 $decelSet$~1 $accelResume$~1 $cancel$~1 $brakePedal$~1 $carGear$~1 $carSpeed$~1 $validInputs$~1 $OK$~1 $chart_CruiseController_ModeLogic_mode_logic_onOff$~1 $chart_CruiseController_ModeLogic_mode_logic_decel$~1 $chart_CruiseController_ModeLogic_mode_logic_set$~1 $chart_CruiseController_ModeLogic_mode_logic_accel$~1 $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$~1 $chart_CruiseController_ModeLogic_mode_logic____wakeup___$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$~1 $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$~1 $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$~1 $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$~1 $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$~1 $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$~1 $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$~1 $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$~1 $cruise_controller_CruiseController_ModeLogic_setEvent_Out$~1 $onOff$0 $decelSet$0 $accelResume$0 $cancel$0 $brakePedal$0 $carGear$0 $carSpeed$0 $validInputs$0 $OK$2 $chart_CruiseController_ModeLogic_mode_logic_onOff$2 $chart_CruiseController_ModeLogic_mode_logic_decel$2 $chart_CruiseController_ModeLogic_mode_logic_set$2 $chart_CruiseController_ModeLogic_mode_logic_accel$2 $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$2 $chart_CruiseController_ModeLogic_mode_logic____wakeup___$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$2 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$2 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$2 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$2 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$2 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$2 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$2 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$2 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$2 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$2 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$2 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$2 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$2 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$2 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$2 $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$2 $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$2 $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$2 $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$2 $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$2 $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$2 $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$2 $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$2 $cruise_controller_CruiseController_ModeLogic_setEvent_Out$2) $OK$2)) diff --git a/bench/tasks/cruise_controller_02_extend_s_part.smt2 b/bench/tasks/cruise_controller_02_extend_s_part.smt2 deleted file mode 100755 index 5c28b866c..000000000 --- a/bench/tasks/cruise_controller_02_extend_s_part.smt2 +++ /dev/null @@ -1,240 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($onOff$0 Bool) ($decelSet$0 Bool) ($accelResume$0 Bool) ($cancel$0 Bool) ($brakePedal$0 Bool) ($carGear$0 Int) ($carSpeed$0 Real) ($validInputs$0 Bool) ($OK$0 Bool) ($chart_CruiseController_ModeLogic_mode_logic_onOff$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_decel$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_set$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_accel$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_safetyCondition$0 Int) ($chart_CruiseController_ModeLogic_mode_logic____wakeup___$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$0 Bool) ($chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$0 Int) ($cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 Int) ($cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 Int) ($cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$0 Bool) ($cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$0 Bool) ($cruise_controller_CruiseController_ModeLogic_setEvent_Out$0 Bool) ($onOff$1 Bool) ($decelSet$1 Bool) ($accelResume$1 Bool) ($cancel$1 Bool) ($brakePedal$1 Bool) ($carGear$1 Int) ($carSpeed$1 Real) ($validInputs$1 Bool) ($OK$1 Bool) ($chart_CruiseController_ModeLogic_mode_logic_onOff$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_decel$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_set$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_accel$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 Int) ($chart_CruiseController_ModeLogic_mode_logic____wakeup___$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$1 Bool) ($chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$1 Int) ($cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$1 Int) ($cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$1 Int) ($cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$1 Bool) ($cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$1 Bool) ($cruise_controller_CruiseController_ModeLogic_setEvent_Out$1 Bool)) Bool (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$1 (ite %init (ite (<= (ite (>= 0 (ite $accelResume$1 1 0)) 0 (ite $accelResume$1 1 0)) 20) (ite (>= 0 (ite $accelResume$1 1 0)) 0 (ite $accelResume$1 1 0)) 20) (ite (<= (ite (>= 0 (ite $accelResume$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 1) 0)) 0 (ite $accelResume$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 1) 0)) 20) (ite (>= 0 (ite $accelResume$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 1) 0)) 0 (ite $accelResume$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 1) 0)) 20))) (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$1 (ite %init (ite (<= (ite (>= 0 (ite $decelSet$1 1 0)) 0 (ite $decelSet$1 1 0)) 20) (ite (>= 0 (ite $decelSet$1 1 0)) 0 (ite $decelSet$1 1 0)) 20) (ite (<= (ite (>= 0 (ite $decelSet$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 1) 0)) 0 (ite $decelSet$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 1) 0)) 20) (ite (>= 0 (ite $decelSet$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 1) 0)) 0 (ite $decelSet$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 1) 0)) 20))) (= $chart_CruiseController_ModeLogic_mode_logic_onOff$1 (ite (= $onOff$1 false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic_decel$1 (ite (= (ite (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$1 20) true false) false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic_set$1 (ite (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$1 false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic_accel$1 (ite (= (ite (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$1 20) true false) false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 (ite (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$1 false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$1 true) (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$1 (ite %init true (ite $chart_CruiseController_ModeLogic_mode_logic____wakeup___$0 false $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$0))) (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 (ite %init 0 $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$0)) (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$1 (ite $chart_CruiseController_ModeLogic_mode_logic____wakeup___$1 (ite $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 (ite (and (not $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$1) (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 2) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 8))) (ite (and (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$1) (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 6))) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1)) $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1 (and (and (>= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 2) (<= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 8)) (not (ite (not (= $chart_CruiseController_ModeLogic_mode_logic_onOff$1 0)) true false)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1 (ite (and (>= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 2) (<= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 8)) 0 $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1) $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1 1)) 1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 1) (and (ite (not (= $chart_CruiseController_ModeLogic_mode_logic_onOff$1 0)) true false) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 1) 0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (and (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 6)) (not (ite (not (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 0)) true false)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (ite (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 6)) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 8)) 8 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1 8) (and (and (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_set$1 1) false) 0 1) 0)) true false) (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 1) false) 0 1) 0)) true false)) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1 8) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1 8) (and (and (ite (not (= (ite (= (= (ite (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$1 false) 0 1) 1) false) 0 1) 0)) true false) (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 1) false) 0 1) 0)) true false)) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1 8) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1 7) (and (and (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_set$1 1) false) 0 1) 0)) true false) (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 1) false) 0 1) 0)) true false)) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1 7) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 4) (= $chart_CruiseController_ModeLogic_mode_logic_set$1 1))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 4) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1 4)) 4 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 4) (and (= $chart_CruiseController_ModeLogic_mode_logic_accel$1 1) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 4) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1 5)) 5 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1 4) (and (= $chart_CruiseController_ModeLogic_mode_logic_decel$1 1) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1 4) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1 6)) 6 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1 6) (and (= $chart_CruiseController_ModeLogic_mode_logic_decel$1 0) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1 6) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1 4)) 4 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1 5) (and (= $chart_CruiseController_ModeLogic_mode_logic_accel$1 0) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1 5) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1 4)) 4 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 (ite (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 6))) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$1 (and (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 6))) (and (>= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 3) (<= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 6)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 (ite $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$1 (ite (not (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 4)) 4 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1) $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 (ite (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 6))) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$1 (and (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 6))) (and (>= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 3) (<= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 6)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 (ite $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$1 (ite (not (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 4)) 4 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1) $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$1 (or (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 4) (or (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 5) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 6)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 (ite (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 6))) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (and (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 6))) (and (>= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 3) (<= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 6)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 (ite $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (ite (not (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 4)) 4 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1) $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 (ite (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 2) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 8))) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (and (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 2) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 8))) (and (>= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 2) (<= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 8)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 (ite $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (ite (not (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 7)) 7 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1) $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 (ite (not (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 1)) 1 $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1)) (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$1 (ite %init false (and (not $accelResume$0) $accelResume$1))) (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$1 (and (and (and (and (not $cancel$1) (not $brakePedal$1)) (ite (= $carGear$1 3) true false)) (ite (>= $carSpeed$1 (/ 150 10)) true false)) $validInputs$1)) (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$1 (ite %init false (and (not $decelSet$0) $decelSet$1))) (= $OK$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$1))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $onOff$~1 () Bool) -(declare-fun $decelSet$~1 () Bool) -(declare-fun $accelResume$~1 () Bool) -(declare-fun $cancel$~1 () Bool) -(declare-fun $brakePedal$~1 () Bool) -(declare-fun $carGear$~1 () Int) -(declare-fun $carSpeed$~1 () Real) -(declare-fun $validInputs$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_onOff$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_decel$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_set$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_accel$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic____wakeup___$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$~1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$~1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$~1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$~1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$~1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$~1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$~1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$~1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$~1 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$~1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$~1 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$~1 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$~1 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$~1 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$~1 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_setEvent_Out$~1 () Bool) -(declare-fun $onOff$0 () Bool) -(declare-fun $decelSet$0 () Bool) -(declare-fun $accelResume$0 () Bool) -(declare-fun $cancel$0 () Bool) -(declare-fun $brakePedal$0 () Bool) -(declare-fun $carGear$0 () Int) -(declare-fun $carSpeed$0 () Real) -(declare-fun $validInputs$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_onOff$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_decel$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_set$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_accel$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic____wakeup___$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$0 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$0 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$0 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$0 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$0 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$0 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$0 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_setEvent_Out$0 () Bool) -(declare-fun $onOff$1 () Bool) -(declare-fun $decelSet$1 () Bool) -(declare-fun $accelResume$1 () Bool) -(declare-fun $cancel$1 () Bool) -(declare-fun $brakePedal$1 () Bool) -(declare-fun $carGear$1 () Int) -(declare-fun $carSpeed$1 () Real) -(declare-fun $validInputs$1 () Bool) -(declare-fun $OK$1 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_onOff$1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_decel$1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_set$1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_accel$1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic____wakeup___$1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$1 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$1 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$1 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$1 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$1 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$1 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$1 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_setEvent_Out$1 () Bool) -; Assertions for universal part of the formula -(assert (T %init $onOff$~1 $decelSet$~1 $accelResume$~1 $cancel$~1 $brakePedal$~1 $carGear$~1 $carSpeed$~1 $validInputs$~1 $OK$~1 $chart_CruiseController_ModeLogic_mode_logic_onOff$~1 $chart_CruiseController_ModeLogic_mode_logic_decel$~1 $chart_CruiseController_ModeLogic_mode_logic_set$~1 $chart_CruiseController_ModeLogic_mode_logic_accel$~1 $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$~1 $chart_CruiseController_ModeLogic_mode_logic____wakeup___$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$~1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$~1 $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$~1 $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$~1 $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$~1 $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$~1 $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$~1 $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$~1 $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$~1 $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$~1 $cruise_controller_CruiseController_ModeLogic_setEvent_Out$~1 $onOff$0 $decelSet$0 $accelResume$0 $cancel$0 $brakePedal$0 $carGear$0 $carSpeed$0 $validInputs$0 $OK$0 $chart_CruiseController_ModeLogic_mode_logic_onOff$0 $chart_CruiseController_ModeLogic_mode_logic_decel$0 $chart_CruiseController_ModeLogic_mode_logic_set$0 $chart_CruiseController_ModeLogic_mode_logic_accel$0 $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$0 $chart_CruiseController_ModeLogic_mode_logic____wakeup___$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$0 $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$0 $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$0 $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$0 $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$0 $cruise_controller_CruiseController_ModeLogic_setEvent_Out$0)) -(assert $OK$0) -(assert (T false $onOff$0 $decelSet$0 $accelResume$0 $cancel$0 $brakePedal$0 $carGear$0 $carSpeed$0 $validInputs$0 $OK$0 $chart_CruiseController_ModeLogic_mode_logic_onOff$0 $chart_CruiseController_ModeLogic_mode_logic_decel$0 $chart_CruiseController_ModeLogic_mode_logic_set$0 $chart_CruiseController_ModeLogic_mode_logic_accel$0 $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$0 $chart_CruiseController_ModeLogic_mode_logic____wakeup___$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$0 $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$0 $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$0 $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$0 $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$0 $cruise_controller_CruiseController_ModeLogic_setEvent_Out$0 $onOff$1 $decelSet$1 $accelResume$1 $cancel$1 $brakePedal$1 $carGear$1 $carSpeed$1 $validInputs$1 $OK$1 $chart_CruiseController_ModeLogic_mode_logic_onOff$1 $chart_CruiseController_ModeLogic_mode_logic_decel$1 $chart_CruiseController_ModeLogic_mode_logic_set$1 $chart_CruiseController_ModeLogic_mode_logic_accel$1 $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 $chart_CruiseController_ModeLogic_mode_logic____wakeup___$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$1 $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$1 $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$1 $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$1 $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$1 $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$1 $cruise_controller_CruiseController_ModeLogic_setEvent_Out$1)) diff --git a/bench/tasks/cruise_controller_02_extend_t_part.smt2 b/bench/tasks/cruise_controller_02_extend_t_part.smt2 deleted file mode 100755 index f6f7d3ff5..000000000 --- a/bench/tasks/cruise_controller_02_extend_t_part.smt2 +++ /dev/null @@ -1,162 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($onOff$0 Bool) ($decelSet$0 Bool) ($accelResume$0 Bool) ($cancel$0 Bool) ($brakePedal$0 Bool) ($carGear$0 Int) ($carSpeed$0 Real) ($validInputs$0 Bool) ($OK$0 Bool) ($chart_CruiseController_ModeLogic_mode_logic_onOff$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_decel$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_set$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_accel$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_safetyCondition$0 Int) ($chart_CruiseController_ModeLogic_mode_logic____wakeup___$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$0 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$0 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$0 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$0 Bool) ($chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$0 Int) ($chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$0 Int) ($cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 Int) ($cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 Int) ($cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$0 Bool) ($cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$0 Bool) ($cruise_controller_CruiseController_ModeLogic_setEvent_Out$0 Bool) ($onOff$1 Bool) ($decelSet$1 Bool) ($accelResume$1 Bool) ($cancel$1 Bool) ($brakePedal$1 Bool) ($carGear$1 Int) ($carSpeed$1 Real) ($validInputs$1 Bool) ($OK$1 Bool) ($chart_CruiseController_ModeLogic_mode_logic_onOff$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_decel$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_set$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_accel$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 Int) ($chart_CruiseController_ModeLogic_mode_logic____wakeup___$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 Bool) ($rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$1 Bool) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 Int) ($rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 Int) ($rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$1 Bool) ($chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 Int) ($chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$1 Int) ($cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$1 Int) ($cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$1 Int) ($cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$1 Bool) ($cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$1 Bool) ($cruise_controller_CruiseController_ModeLogic_setEvent_Out$1 Bool)) Bool (and (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$1 (ite %init (ite (<= (ite (>= 0 (ite $accelResume$1 1 0)) 0 (ite $accelResume$1 1 0)) 20) (ite (>= 0 (ite $accelResume$1 1 0)) 0 (ite $accelResume$1 1 0)) 20) (ite (<= (ite (>= 0 (ite $accelResume$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 1) 0)) 0 (ite $accelResume$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 1) 0)) 20) (ite (>= 0 (ite $accelResume$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 1) 0)) 0 (ite $accelResume$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 1) 0)) 20))) (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$1 (ite %init (ite (<= (ite (>= 0 (ite $decelSet$1 1 0)) 0 (ite $decelSet$1 1 0)) 20) (ite (>= 0 (ite $decelSet$1 1 0)) 0 (ite $decelSet$1 1 0)) 20) (ite (<= (ite (>= 0 (ite $decelSet$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 1) 0)) 0 (ite $decelSet$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 1) 0)) 20) (ite (>= 0 (ite $decelSet$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 1) 0)) 0 (ite $decelSet$1 (+ $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 1) 0)) 20))) (= $chart_CruiseController_ModeLogic_mode_logic_onOff$1 (ite (= $onOff$1 false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic_decel$1 (ite (= (ite (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$1 20) true false) false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic_set$1 (ite (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$1 false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic_accel$1 (ite (= (ite (= $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$1 20) true false) false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 (ite (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$1 false) 0 1)) (= $chart_CruiseController_ModeLogic_mode_logic____wakeup___$1 true) (= $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$1 (ite %init true (ite $chart_CruiseController_ModeLogic_mode_logic____wakeup___$0 false $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$0))) (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 (ite %init 0 $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$0)) (= $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$1 (ite $chart_CruiseController_ModeLogic_mode_logic____wakeup___$1 (ite $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 (ite (and (not $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$1) (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 2) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 8))) (ite (and (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$1) (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 6))) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1)) $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1 (and (and (>= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 2) (<= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 8)) (not (ite (not (= $chart_CruiseController_ModeLogic_mode_logic_onOff$1 0)) true false)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1 (ite (and (>= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 2) (<= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 8)) 0 $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1) $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1 1)) 1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 1) (and (ite (not (= $chart_CruiseController_ModeLogic_mode_logic_onOff$1 0)) true false) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 1) 0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (and (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 6)) (not (ite (not (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 0)) true false)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (ite (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1 6)) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 8)) 8 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1 8) (and (and (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_set$1 1) false) 0 1) 0)) true false) (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 1) false) 0 1) 0)) true false)) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1 8) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1 8) (and (and (ite (not (= (ite (= (= (ite (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$1 false) 0 1) 1) false) 0 1) 0)) true false) (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 1) false) 0 1) 0)) true false)) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1 8) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1 7) (and (and (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_set$1 1) false) 0 1) 0)) true false) (ite (not (= (ite (= (= $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$1 1) false) 0 1) 0)) true false)) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1 7) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 4) (= $chart_CruiseController_ModeLogic_mode_logic_set$1 1))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1 4) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1 4)) 4 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 4) (and (= $chart_CruiseController_ModeLogic_mode_logic_accel$1 1) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 4) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1 5)) 5 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1 4) (and (= $chart_CruiseController_ModeLogic_mode_logic_decel$1 1) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1 4) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1 6)) 6 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1 6) (and (= $chart_CruiseController_ModeLogic_mode_logic_decel$1 0) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$1 (or $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1 6) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1 4)) 4 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$1 (and (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1 5) (and (= $chart_CruiseController_ModeLogic_mode_logic_accel$1 0) (not $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$1)))) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$1 (ite (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1 5) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$1)) (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$1 (ite $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$1 (ite (not (= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1 4)) 4 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1) $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 (ite (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 6))) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$1 (and (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$1 6))) (and (>= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 3) (<= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 6)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$1 (ite $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$1 (ite (not (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1 4)) 4 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1) $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 (ite (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 6))) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$1 (and (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$1 6))) (and (>= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 3) (<= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 6)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 (ite $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$1 (ite (not (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1 4)) 4 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1) $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$1 (or (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 4) (or (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 5) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$1 6)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 (ite (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 6))) 3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (and (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 3) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 6))) (and (>= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 3) (<= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 6)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$1 (ite $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$1 (ite (not (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1 4)) 4 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1) $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 (ite (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 2) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 8))) 2 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (and (not (and (>= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 2) (<= $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$1 8))) (and (>= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 2) (<= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 8)))) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$1 (ite $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$1 (ite (not (= $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1 7)) 7 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1) $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$1)) (= $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$1 (ite (not (= $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1 1)) 1 $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$1)) (= $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$1 (ite %init false (and (not $accelResume$0) $accelResume$1))) (= $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$1 (and (and (and (and (not $cancel$1) (not $brakePedal$1)) (ite (= $carGear$1 3) true false)) (ite (>= $carSpeed$1 (/ 150 10)) true false)) $validInputs$1)) (= $cruise_controller_CruiseController_ModeLogic_setEvent_Out$1 (ite %init false (and (not $decelSet$0) $decelSet$1))) (= $OK$1 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$1))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $onOff$0 () Bool) -(declare-fun $decelSet$0 () Bool) -(declare-fun $accelResume$0 () Bool) -(declare-fun $cancel$0 () Bool) -(declare-fun $brakePedal$0 () Bool) -(declare-fun $carGear$0 () Int) -(declare-fun $carSpeed$0 () Real) -(declare-fun $validInputs$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_onOff$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_decel$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_set$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_accel$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic____wakeup___$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$0 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$0 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$0 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$0 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$0 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$0 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$0 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$0 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$0 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$0 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$0 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_setEvent_Out$0 () Bool) -(declare-fun $onOff$3 () Bool) -(declare-fun $decelSet$3 () Bool) -(declare-fun $accelResume$3 () Bool) -(declare-fun $cancel$3 () Bool) -(declare-fun $brakePedal$3 () Bool) -(declare-fun $carGear$3 () Int) -(declare-fun $carSpeed$3 () Real) -(declare-fun $validInputs$3 () Bool) -(declare-fun $OK$3 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_onOff$3 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_decel$3 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_set$3 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_accel$3 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$3 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic____wakeup___$3 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$3 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$3 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$3 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$3 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$3 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$3 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$3 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$3 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$3 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$3 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$3 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$3 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$3 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$3 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$3 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$3 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$3 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$3 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$3 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$3 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$3 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$3 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$3 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$3 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$3 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$3 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$3 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$3 () Bool) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$3 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$3 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$3 () Bool) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$3 () Int) -(declare-fun $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$3 () Int) -(declare-fun $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$3 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$3 () Bool) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$3 () Int) -(declare-fun $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$3 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$3 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$3 () Int) -(declare-fun $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$3 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$3 () Bool) -(declare-fun $cruise_controller_CruiseController_ModeLogic_setEvent_Out$3 () Bool) - -; Assertion for existential part of the formula -(assert (and (T false $onOff$0 $decelSet$0 $accelResume$0 $cancel$0 $brakePedal$0 $carGear$0 $carSpeed$0 $validInputs$0 $OK$0 $chart_CruiseController_ModeLogic_mode_logic_onOff$0 $chart_CruiseController_ModeLogic_mode_logic_decel$0 $chart_CruiseController_ModeLogic_mode_logic_set$0 $chart_CruiseController_ModeLogic_mode_logic_accel$0 $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$0 $chart_CruiseController_ModeLogic_mode_logic____wakeup___$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$0 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$0 $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$0 $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$0 $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$0 $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$0 $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$0 $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$0 $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$0 $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$0 $cruise_controller_CruiseController_ModeLogic_setEvent_Out$0 $onOff$3 $decelSet$3 $accelResume$3 $cancel$3 $brakePedal$3 $carGear$3 $carSpeed$3 $validInputs$3 $OK$3 $chart_CruiseController_ModeLogic_mode_logic_onOff$3 $chart_CruiseController_ModeLogic_mode_logic_decel$3 $chart_CruiseController_ModeLogic_mode_logic_set$3 $chart_CruiseController_ModeLogic_mode_logic_accel$3 $chart_CruiseController_ModeLogic_mode_logic_safetyCondition$3 $chart_CruiseController_ModeLogic_mode_logic____wakeup___$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_2_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_1$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_1$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_4_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_5_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_2$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_2$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_6_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_7_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_3$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_complete_3$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_8_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_9_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_4$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_10_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_15_states___root$3 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root2$3 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_02$3 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root2$3 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root1$3 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_01$3 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rltCheckEntryStateConsistency_01$3 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root1$3 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_1_states___root$3 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_fired_0$3 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_Active_rlt_state_3_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_2_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_1$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_1$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_5_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_2$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_2$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_6_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_7_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_fired_3$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_complete_3$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_9_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_On_rlt_state_10_states___root$3 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_1_states___root$3 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_fired_0$3 $rlt_enter_CruiseController_ModeLogic_mode_logic_On_rlt_state_3_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_0$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_1_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_fired_1$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_complete_1$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_3_states___root$3 $rlt_eval_CruiseController_ModeLogic_mode_logic_rlt_state_4_states___root$3 $rlt_enter_CruiseController_ModeLogic_mode_logic_rlt_state_2_states___root$3 $chart_CruiseController_ModeLogic_mode_logic_rlt_evtInitStep$3 $chart_CruiseController_ModeLogic_mode_logic_begin_state_states___root$3 $chart_CruiseController_ModeLogic_mode_logic_final_state_states___root$3 $cruise_controller_CruiseController_ModeLogic_DelayOnsetAccel_Bounded_Count_Out$3 $cruise_controller_CruiseController_ModeLogic_DelayOnsetDecel_Bounded_Count_Out$3 $cruise_controller_CruiseController_ModeLogic_resumeEvent_Out$3 $cruise_controller_CruiseController_ModeLogic_safetyCondition_safetyCondition$3 $cruise_controller_CruiseController_ModeLogic_setEvent_Out$3) $OK$3)) diff --git a/bench/tasks/cruise_controller_06_base_s_part.smt2 b/bench/tasks/cruise_controller_06_base_s_part.smt2 deleted file mode 100755 index c569be0d9..000000000 --- a/bench/tasks/cruise_controller_06_base_s_part.smt2 +++ /dev/null @@ -1,9 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($cruiseThrottle$0 Real) ($OK$0 Bool) ($cruiseThrottle$1 Real) ($OK$1 Bool)) Bool (= $OK$1 (and (>= $cruiseThrottle$1 (/ 0 10)) (<= $cruiseThrottle$1 (/ 1000 10))))) -; Universally quantified variables -(declare-fun $cruiseThrottle$~1 () Real) -(declare-fun $OK$~1 () Bool) -(declare-fun $cruiseThrottle$0 () Real) -(declare-fun $OK$0 () Bool) -(assert (T true $cruiseThrottle$~1 $OK$~1 $cruiseThrottle$0 $OK$0)) diff --git a/bench/tasks/cruise_controller_06_base_t_part.smt2 b/bench/tasks/cruise_controller_06_base_t_part.smt2 deleted file mode 100755 index eaf956d4a..000000000 --- a/bench/tasks/cruise_controller_06_base_t_part.smt2 +++ /dev/null @@ -1,9 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($cruiseThrottle$0 Real) ($OK$0 Bool) ($cruiseThrottle$1 Real) ($OK$1 Bool)) Bool (= $OK$1 (and (>= $cruiseThrottle$1 (/ 0 10)) (<= $cruiseThrottle$1 (/ 1000 10))))) -; Universally quantified variables -(declare-fun $cruiseThrottle$~1 () Real) -(declare-fun $OK$~1 () Bool) -(declare-fun $cruiseThrottle$2 () Real) -(declare-fun $OK$2 () Bool) -(assert (and (T true $cruiseThrottle$~1 $OK$~1 $cruiseThrottle$2 $OK$2) $OK$2)) diff --git a/bench/tasks/cruise_controller_06_extend_s_part.smt2 b/bench/tasks/cruise_controller_06_extend_s_part.smt2 deleted file mode 100755 index 877e009f0..000000000 --- a/bench/tasks/cruise_controller_06_extend_s_part.smt2 +++ /dev/null @@ -1,10 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($cruiseThrottle$0 Real) ($OK$0 Bool) ($cruiseThrottle$1 Real) ($OK$1 Bool)) Bool (= $OK$1 (and (>= $cruiseThrottle$1 (/ 0 10)) (<= $cruiseThrottle$1 (/ 1000 10))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $cruiseThrottle$~1 () Real) -(declare-fun $OK$~1 () Bool) -(declare-fun $cruiseThrottle$0 () Real) -(declare-fun $OK$0 () Bool) -(assert (T %init $cruiseThrottle$~1 $OK$~1 $cruiseThrottle$0 $OK$0)) diff --git a/bench/tasks/cruise_controller_06_extend_t_part.smt2 b/bench/tasks/cruise_controller_06_extend_t_part.smt2 deleted file mode 100755 index 6a182bcc5..000000000 --- a/bench/tasks/cruise_controller_06_extend_t_part.smt2 +++ /dev/null @@ -1,10 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($cruiseThrottle$0 Real) ($OK$0 Bool) ($cruiseThrottle$1 Real) ($OK$1 Bool)) Bool (= $OK$1 (and (>= $cruiseThrottle$1 (/ 0 10)) (<= $cruiseThrottle$1 (/ 1000 10))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $cruiseThrottle$~1 () Real) -(declare-fun $OK$~1 () Bool) -(declare-fun $cruiseThrottle$2 () Real) -(declare-fun $OK$2 () Bool) -(assert (and (T %init $cruiseThrottle$~1 $OK$~1 $cruiseThrottle$2 $OK$2) $OK$2)) diff --git a/bench/tasks/cruise_controller_07_base_s_part.smt2 b/bench/tasks/cruise_controller_07_base_s_part.smt2 deleted file mode 100755 index 191e9d869..000000000 --- a/bench/tasks/cruise_controller_07_base_s_part.smt2 +++ /dev/null @@ -1,9 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($desiredSpeed$0 Real) ($OK$0 Bool) ($desiredSpeed$1 Real) ($OK$1 Bool)) Bool (= $OK$1 (and (>= $desiredSpeed$1 (/ 0 10)) (<= $desiredSpeed$1 (/ 1000 10))))) -; Universally quantified variables -(declare-fun $desiredSpeed$~1 () Real) -(declare-fun $OK$~1 () Bool) -(declare-fun $desiredSpeed$0 () Real) -(declare-fun $OK$0 () Bool) -(assert (T true $desiredSpeed$~1 $OK$~1 $desiredSpeed$0 $OK$0)) diff --git a/bench/tasks/cruise_controller_07_base_t_part.smt2 b/bench/tasks/cruise_controller_07_base_t_part.smt2 deleted file mode 100755 index b2a7b6d6c..000000000 --- a/bench/tasks/cruise_controller_07_base_t_part.smt2 +++ /dev/null @@ -1,9 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($desiredSpeed$0 Real) ($OK$0 Bool) ($desiredSpeed$1 Real) ($OK$1 Bool)) Bool (= $OK$1 (and (>= $desiredSpeed$1 (/ 0 10)) (<= $desiredSpeed$1 (/ 1000 10))))) -; Universally quantified variables -(declare-fun $desiredSpeed$~1 () Real) -(declare-fun $OK$~1 () Bool) -(declare-fun $desiredSpeed$2 () Real) -(declare-fun $OK$2 () Bool) -(assert (and (T true $desiredSpeed$~1 $OK$~1 $desiredSpeed$2 $OK$2) $OK$2)) diff --git a/bench/tasks/cruise_controller_07_extend_s_part.smt2 b/bench/tasks/cruise_controller_07_extend_s_part.smt2 deleted file mode 100755 index 148afbbd3..000000000 --- a/bench/tasks/cruise_controller_07_extend_s_part.smt2 +++ /dev/null @@ -1,10 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($desiredSpeed$0 Real) ($OK$0 Bool) ($desiredSpeed$1 Real) ($OK$1 Bool)) Bool (= $OK$1 (and (>= $desiredSpeed$1 (/ 0 10)) (<= $desiredSpeed$1 (/ 1000 10))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $desiredSpeed$~1 () Real) -(declare-fun $OK$~1 () Bool) -(declare-fun $desiredSpeed$0 () Real) -(declare-fun $OK$0 () Bool) -(assert (T %init $desiredSpeed$~1 $OK$~1 $desiredSpeed$0 $OK$0)) diff --git a/bench/tasks/cruise_controller_07_extend_t_part.smt2 b/bench/tasks/cruise_controller_07_extend_t_part.smt2 deleted file mode 100755 index 5d1a1b9d2..000000000 --- a/bench/tasks/cruise_controller_07_extend_t_part.smt2 +++ /dev/null @@ -1,10 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($desiredSpeed$0 Real) ($OK$0 Bool) ($desiredSpeed$1 Real) ($OK$1 Bool)) Bool (= $OK$1 (and (>= $desiredSpeed$1 (/ 0 10)) (<= $desiredSpeed$1 (/ 1000 10))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $desiredSpeed$~1 () Real) -(declare-fun $OK$~1 () Bool) -(declare-fun $desiredSpeed$2 () Real) -(declare-fun $OK$2 () Bool) -(assert (and (T %init $desiredSpeed$~1 $OK$~1 $desiredSpeed$2 $OK$2) $OK$2)) diff --git a/bench/tasks/cruise_controller_09_base_s_part.smt2 b/bench/tasks/cruise_controller_09_base_s_part.smt2 deleted file mode 100755 index 696722788..000000000 --- a/bench/tasks/cruise_controller_09_base_s_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($carSpeed$0 Real) ($desiredSpeed$0 Real) ($OK$0 Bool) ($carSpeed$1 Real) ($desiredSpeed$1 Real) ($OK$1 Bool)) Bool (= $OK$1 (or (or (= $desiredSpeed$1 (ite %init (/ 0 10) $desiredSpeed$0)) (= $desiredSpeed$1 $carSpeed$1)) (= $desiredSpeed$1 (/ 0 10))))) -; Universally quantified variables -(declare-fun $carSpeed$~1 () Real) -(declare-fun $desiredSpeed$~1 () Real) -(declare-fun $OK$~1 () Bool) -(declare-fun $carSpeed$0 () Real) -(declare-fun $desiredSpeed$0 () Real) -(declare-fun $OK$0 () Bool) -(assert (T true $carSpeed$~1 $desiredSpeed$~1 $OK$~1 $carSpeed$0 $desiredSpeed$0 $OK$0)) diff --git a/bench/tasks/cruise_controller_09_base_t_part.smt2 b/bench/tasks/cruise_controller_09_base_t_part.smt2 deleted file mode 100644 index 31a933b0b..000000000 --- a/bench/tasks/cruise_controller_09_base_t_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($carSpeed$0 Real) ($desiredSpeed$0 Real) ($OK$0 Bool) ($carSpeed$1 Real) ($desiredSpeed$1 Real) ($OK$1 Bool)) Bool (= $OK$1 (or (or (= $desiredSpeed$1 (ite %init (/ 0 10) $desiredSpeed$0)) (= $desiredSpeed$1 $carSpeed$1)) (= $desiredSpeed$1 (/ 0 10))))) -; Universally quantified variables -(declare-fun $carSpeed$~1 () Real) -(declare-fun $desiredSpeed$~1 () Real) -(declare-fun $OK$~1 () Bool) -(declare-fun $carSpeed$0 () Real) -(declare-fun $desiredSpeed$2 () Real) -(declare-fun $OK$2 () Bool) -(assert (and (T true $carSpeed$~1 $desiredSpeed$~1 $OK$~1 $carSpeed$0 $desiredSpeed$2 $OK$2) $OK$2)) diff --git a/bench/tasks/cruise_controller_09_extend_s_part.smt2 b/bench/tasks/cruise_controller_09_extend_s_part.smt2 deleted file mode 100755 index 23748b743..000000000 --- a/bench/tasks/cruise_controller_09_extend_s_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($carSpeed$0 Real) ($desiredSpeed$0 Real) ($OK$0 Bool) ($carSpeed$1 Real) ($desiredSpeed$1 Real) ($OK$1 Bool)) Bool (= $OK$1 (or (or (= $desiredSpeed$1 (ite %init (/ 0 10) $desiredSpeed$0)) (= $desiredSpeed$1 $carSpeed$1)) (= $desiredSpeed$1 (/ 0 10))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $carSpeed$~1 () Real) -(declare-fun $desiredSpeed$~1 () Real) -(declare-fun $OK$~1 () Bool) -(declare-fun $carSpeed$0 () Real) -(declare-fun $desiredSpeed$0 () Real) -(declare-fun $OK$0 () Bool) -(assert (T %init $carSpeed$~1 $desiredSpeed$~1 $OK$~1 $carSpeed$0 $desiredSpeed$0 $OK$0)) diff --git a/bench/tasks/cruise_controller_09_extend_t_part.smt2 b/bench/tasks/cruise_controller_09_extend_t_part.smt2 deleted file mode 100755 index 1559e1f20..000000000 --- a/bench/tasks/cruise_controller_09_extend_t_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($carSpeed$0 Real) ($desiredSpeed$0 Real) ($OK$0 Bool) ($carSpeed$1 Real) ($desiredSpeed$1 Real) ($OK$1 Bool)) Bool (= $OK$1 (or (or (= $desiredSpeed$1 (ite %init (/ 0 10) $desiredSpeed$0)) (= $desiredSpeed$1 $carSpeed$1)) (= $desiredSpeed$1 (/ 0 10))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $carSpeed$~1 () Real) -(declare-fun $desiredSpeed$~1 () Real) -(declare-fun $OK$~1 () Bool) -(declare-fun $carSpeed$0 () Real) -(declare-fun $desiredSpeed$2 () Real) -(declare-fun $OK$2 () Bool) -(assert (and (T %init $carSpeed$~1 $desiredSpeed$~1 $OK$~1 $carSpeed$0 $desiredSpeed$2 $OK$2) $OK$2)) diff --git a/bench/tasks/cruise_controller_11_base_s_part.smt2 b/bench/tasks/cruise_controller_11_base_s_part.smt2 deleted file mode 100755 index 152b2c57b..000000000 --- a/bench/tasks/cruise_controller_11_base_s_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($mode$0 Int) ($cruiseThrottle$0 Real) ($OK$0 Bool) ($mode$1 Int) ($cruiseThrottle$1 Real) ($OK$1 Bool)) Bool (= $OK$1 (or (or (or (= $mode$1 4) (= $mode$1 5)) (= $mode$1 6)) (= $cruiseThrottle$1 (/ 0 10))))) -; Universally quantified variables -(declare-fun $mode$~1 () Int) -(declare-fun $cruiseThrottle$~1 () Real) -(declare-fun $OK$~1 () Bool) -(declare-fun $mode$0 () Int) -(declare-fun $cruiseThrottle$0 () Real) -(declare-fun $OK$0 () Bool) -(assert (T true $mode$~1 $cruiseThrottle$~1 $OK$~1 $mode$0 $cruiseThrottle$0 $OK$0)) diff --git a/bench/tasks/cruise_controller_11_base_t_part.smt2 b/bench/tasks/cruise_controller_11_base_t_part.smt2 deleted file mode 100755 index fe2ee333d..000000000 --- a/bench/tasks/cruise_controller_11_base_t_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($mode$0 Int) ($cruiseThrottle$0 Real) ($OK$0 Bool) ($mode$1 Int) ($cruiseThrottle$1 Real) ($OK$1 Bool)) Bool (= $OK$1 (or (or (or (= $mode$1 4) (= $mode$1 5)) (= $mode$1 6)) (= $cruiseThrottle$1 (/ 0 10))))) -; Universally quantified variables -(declare-fun $mode$~1 () Int) -(declare-fun $cruiseThrottle$~1 () Real) -(declare-fun $OK$~1 () Bool) -(declare-fun $mode$2 () Int) -(declare-fun $cruiseThrottle$2 () Real) -(declare-fun $OK$2 () Bool) -(assert (and (T true $mode$~1 $cruiseThrottle$~1 $OK$~1 $mode$2 $cruiseThrottle$2 $OK$2) $OK$2)) diff --git a/bench/tasks/cruise_controller_11_extend_s_part.smt2 b/bench/tasks/cruise_controller_11_extend_s_part.smt2 deleted file mode 100755 index 60062fc92..000000000 --- a/bench/tasks/cruise_controller_11_extend_s_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($mode$0 Int) ($cruiseThrottle$0 Real) ($OK$0 Bool) ($mode$1 Int) ($cruiseThrottle$1 Real) ($OK$1 Bool)) Bool (= $OK$1 (or (or (or (= $mode$1 4) (= $mode$1 5)) (= $mode$1 6)) (= $cruiseThrottle$1 (/ 0 10))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $mode$~1 () Int) -(declare-fun $cruiseThrottle$~1 () Real) -(declare-fun $OK$~1 () Bool) -(declare-fun $mode$0 () Int) -(declare-fun $cruiseThrottle$0 () Real) -(declare-fun $OK$0 () Bool) -(assert (T %init $mode$~1 $cruiseThrottle$~1 $OK$~1 $mode$0 $cruiseThrottle$0 $OK$0)) diff --git a/bench/tasks/cruise_controller_11_extend_t_part.smt2 b/bench/tasks/cruise_controller_11_extend_t_part.smt2 deleted file mode 100755 index 954239889..000000000 --- a/bench/tasks/cruise_controller_11_extend_t_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($mode$0 Int) ($cruiseThrottle$0 Real) ($OK$0 Bool) ($mode$1 Int) ($cruiseThrottle$1 Real) ($OK$1 Bool)) Bool (= $OK$1 (or (or (or (= $mode$1 4) (= $mode$1 5)) (= $mode$1 6)) (= $cruiseThrottle$1 (/ 0 10))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $mode$~1 () Int) -(declare-fun $cruiseThrottle$~1 () Real) -(declare-fun $OK$~1 () Bool) -(declare-fun $mode$2 () Int) -(declare-fun $cruiseThrottle$2 () Real) -(declare-fun $OK$2 () Bool) -(assert (and (T %init $mode$~1 $cruiseThrottle$~1 $OK$~1 $mode$2 $cruiseThrottle$2 $OK$2) $OK$2)) diff --git a/bench/tasks/cruise_controller_15_base_s_part.smt2 b/bench/tasks/cruise_controller_15_base_s_part.smt2 deleted file mode 100755 index e33508321..000000000 --- a/bench/tasks/cruise_controller_15_base_s_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($mode$0 Int) ($desiredSpeed$0 Real) ($OK$0 Bool) ($mode$1 Int) ($desiredSpeed$1 Real) ($OK$1 Bool)) Bool (= $OK$1 (or (not (or (= $mode$1 1) (= $mode$1 3))) (= $desiredSpeed$1 (/ 0 10))))) -; Universally quantified variables -(declare-fun $mode$~1 () Int) -(declare-fun $desiredSpeed$~1 () Real) -(declare-fun $OK$~1 () Bool) -(declare-fun $mode$0 () Int) -(declare-fun $desiredSpeed$0 () Real) -(declare-fun $OK$0 () Bool) -(assert (T true $mode$~1 $desiredSpeed$~1 $OK$~1 $mode$0 $desiredSpeed$0 $OK$0)) diff --git a/bench/tasks/cruise_controller_15_base_t_part.smt2 b/bench/tasks/cruise_controller_15_base_t_part.smt2 deleted file mode 100755 index 8988d546a..000000000 --- a/bench/tasks/cruise_controller_15_base_t_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($mode$0 Int) ($desiredSpeed$0 Real) ($OK$0 Bool) ($mode$1 Int) ($desiredSpeed$1 Real) ($OK$1 Bool)) Bool (= $OK$1 (or (not (or (= $mode$1 1) (= $mode$1 3))) (= $desiredSpeed$1 (/ 0 10))))) -; Universally quantified variables -(declare-fun $mode$~1 () Int) -(declare-fun $desiredSpeed$~1 () Real) -(declare-fun $OK$~1 () Bool) -(declare-fun $mode$2 () Int) -(declare-fun $desiredSpeed$2 () Real) -(declare-fun $OK$2 () Bool) -(assert (and (T true $mode$~1 $desiredSpeed$~1 $OK$~1 $mode$2 $desiredSpeed$2 $OK$2) $OK$2)) diff --git a/bench/tasks/cruise_controller_15_extend_s_part.smt2 b/bench/tasks/cruise_controller_15_extend_s_part.smt2 deleted file mode 100755 index 08d36716c..000000000 --- a/bench/tasks/cruise_controller_15_extend_s_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($mode$0 Int) ($desiredSpeed$0 Real) ($OK$0 Bool) ($mode$1 Int) ($desiredSpeed$1 Real) ($OK$1 Bool)) Bool (= $OK$1 (or (not (or (= $mode$1 1) (= $mode$1 3))) (= $desiredSpeed$1 (/ 0 10))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $mode$~1 () Int) -(declare-fun $desiredSpeed$~1 () Real) -(declare-fun $OK$~1 () Bool) -(declare-fun $mode$0 () Int) -(declare-fun $desiredSpeed$0 () Real) -(declare-fun $OK$0 () Bool) -(assert (T %init $mode$~1 $desiredSpeed$~1 $OK$~1 $mode$0 $desiredSpeed$0 $OK$0)) diff --git a/bench/tasks/cruise_controller_15_extend_t_part.smt2 b/bench/tasks/cruise_controller_15_extend_t_part.smt2 deleted file mode 100755 index cfd3329a8..000000000 --- a/bench/tasks/cruise_controller_15_extend_t_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($mode$0 Int) ($desiredSpeed$0 Real) ($OK$0 Bool) ($mode$1 Int) ($desiredSpeed$1 Real) ($OK$1 Bool)) Bool (= $OK$1 (or (not (or (= $mode$1 1) (= $mode$1 3))) (= $desiredSpeed$1 (/ 0 10))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $mode$~1 () Int) -(declare-fun $desiredSpeed$~1 () Real) -(declare-fun $OK$~1 () Bool) -(declare-fun $mode$2 () Int) -(declare-fun $desiredSpeed$2 () Real) -(declare-fun $OK$2 () Bool) -(assert (and (T %init $mode$~1 $desiredSpeed$~1 $OK$~1 $mode$2 $desiredSpeed$2 $OK$2) $OK$2)) diff --git a/bench/tasks/cruise_controller_16_base_s_part.smt2 b/bench/tasks/cruise_controller_16_base_s_part.smt2 deleted file mode 100755 index 79e082066..000000000 --- a/bench/tasks/cruise_controller_16_base_s_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($mode$0 Int) ($desiredSpeed$0 Real) ($OK$0 Bool) ($mode$1 Int) ($desiredSpeed$1 Real) ($OK$1 Bool)) Bool (= $OK$1 (or (not (or (or (or (= $mode$1 4) (= $mode$1 5)) (= $mode$1 6)) (= $mode$1 3))) (>= $desiredSpeed$1 (/ 150 10))))) -; Universally quantified variables -(declare-fun $mode$~1 () Int) -(declare-fun $desiredSpeed$~1 () Real) -(declare-fun $OK$~1 () Bool) -(declare-fun $mode$0 () Int) -(declare-fun $desiredSpeed$0 () Real) -(declare-fun $OK$0 () Bool) -(assert (T true $mode$~1 $desiredSpeed$~1 $OK$~1 $mode$0 $desiredSpeed$0 $OK$0)) diff --git a/bench/tasks/cruise_controller_16_base_t_part.smt2 b/bench/tasks/cruise_controller_16_base_t_part.smt2 deleted file mode 100755 index 2251aac06..000000000 --- a/bench/tasks/cruise_controller_16_base_t_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($mode$0 Int) ($desiredSpeed$0 Real) ($OK$0 Bool) ($mode$1 Int) ($desiredSpeed$1 Real) ($OK$1 Bool)) Bool (= $OK$1 (or (not (or (or (or (= $mode$1 4) (= $mode$1 5)) (= $mode$1 6)) (= $mode$1 3))) (>= $desiredSpeed$1 (/ 150 10))))) -; Universally quantified variables -(declare-fun $mode$~1 () Int) -(declare-fun $desiredSpeed$~1 () Real) -(declare-fun $OK$~1 () Bool) -(declare-fun $mode$2 () Int) -(declare-fun $desiredSpeed$2 () Real) -(declare-fun $OK$2 () Bool) -(assert (and (T true $mode$~1 $desiredSpeed$~1 $OK$~1 $mode$2 $desiredSpeed$2 $OK$2) $OK$2)) diff --git a/bench/tasks/cruise_controller_16_extend_s_part.smt2 b/bench/tasks/cruise_controller_16_extend_s_part.smt2 deleted file mode 100755 index 018331d48..000000000 --- a/bench/tasks/cruise_controller_16_extend_s_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($mode$0 Int) ($desiredSpeed$0 Real) ($OK$0 Bool) ($mode$1 Int) ($desiredSpeed$1 Real) ($OK$1 Bool)) Bool (= $OK$1 (or (not (or (or (or (= $mode$1 4) (= $mode$1 5)) (= $mode$1 6)) (= $mode$1 3))) (>= $desiredSpeed$1 (/ 150 10))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $mode$~1 () Int) -(declare-fun $desiredSpeed$~1 () Real) -(declare-fun $OK$~1 () Bool) -(declare-fun $mode$0 () Int) -(declare-fun $desiredSpeed$0 () Real) -(declare-fun $OK$0 () Bool) -(assert (T %init $mode$~1 $desiredSpeed$~1 $OK$~1 $mode$0 $desiredSpeed$0 $OK$0)) diff --git a/bench/tasks/cruise_controller_16_extend_t_part.smt2 b/bench/tasks/cruise_controller_16_extend_t_part.smt2 deleted file mode 100755 index faa64fd87..000000000 --- a/bench/tasks/cruise_controller_16_extend_t_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($mode$0 Int) ($desiredSpeed$0 Real) ($OK$0 Bool) ($mode$1 Int) ($desiredSpeed$1 Real) ($OK$1 Bool)) Bool (= $OK$1 (or (not (or (or (or (= $mode$1 4) (= $mode$1 5)) (= $mode$1 6)) (= $mode$1 3))) (>= $desiredSpeed$1 (/ 150 10))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $mode$~1 () Int) -(declare-fun $desiredSpeed$~1 () Real) -(declare-fun $OK$~1 () Bool) -(declare-fun $mode$2 () Int) -(declare-fun $desiredSpeed$2 () Real) -(declare-fun $OK$2 () Bool) -(assert (and (T %init $mode$~1 $desiredSpeed$~1 $OK$~1 $mode$2 $desiredSpeed$2 $OK$2) $OK$2)) diff --git a/bench/tasks/cruise_controller_17_base1_s_part.smt2 b/bench/tasks/cruise_controller_17_base1_s_part.smt2 deleted file mode 100755 index e1c8356f9..000000000 --- a/bench/tasks/cruise_controller_17_base1_s_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($mode$0 Int) ($cruiseThrottle$0 Real) ($OK$0 Bool) ($mode$1 Int) ($cruiseThrottle$1 Real) ($OK$1 Bool)) Bool (= $OK$1 (or (not (= $mode$1 4)) (= $cruiseThrottle$1 (ite %init (/ 0 10) $cruiseThrottle$0))))) -; Universally quantified variables -(declare-fun $mode$~1 () Int) -(declare-fun $cruiseThrottle$~1 () Real) -(declare-fun $OK$~1 () Bool) -(declare-fun $mode$0 () Int) -(declare-fun $cruiseThrottle$0 () Real) -(declare-fun $OK$0 () Bool) -(assert (T true $mode$~1 $cruiseThrottle$~1 $OK$~1 $mode$0 $cruiseThrottle$0 $OK$0)) diff --git a/bench/tasks/cruise_controller_17_base1_t_part.smt2 b/bench/tasks/cruise_controller_17_base1_t_part.smt2 deleted file mode 100755 index 218797db2..000000000 --- a/bench/tasks/cruise_controller_17_base1_t_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($mode$0 Int) ($cruiseThrottle$0 Real) ($OK$0 Bool) ($mode$1 Int) ($cruiseThrottle$1 Real) ($OK$1 Bool)) Bool (= $OK$1 (or (not (= $mode$1 4)) (= $cruiseThrottle$1 (ite %init (/ 0 10) $cruiseThrottle$0))))) -; Universally quantified variables -(declare-fun $mode$~1 () Int) -(declare-fun $cruiseThrottle$~1 () Real) -(declare-fun $OK$~1 () Bool) -(declare-fun $mode$2 () Int) -(declare-fun $cruiseThrottle$2 () Real) -(declare-fun $OK$2 () Bool) -(assert (and (T true $mode$~1 $cruiseThrottle$~1 $OK$~1 $mode$2 $cruiseThrottle$2 $OK$2) $OK$2)) diff --git a/bench/tasks/cruise_controller_17_base2_s_part.smt2 b/bench/tasks/cruise_controller_17_base2_s_part.smt2 deleted file mode 100755 index bfe0e6891..000000000 --- a/bench/tasks/cruise_controller_17_base2_s_part.smt2 +++ /dev/null @@ -1,16 +0,0 @@ -; K = 2 -; Transition relation -(define-fun T ((%init Bool) ($mode$0 Int) ($cruiseThrottle$0 Real) ($OK$0 Bool) ($mode$1 Int) ($cruiseThrottle$1 Real) ($OK$1 Bool)) Bool (= $OK$1 (or (not (= $mode$1 4)) (= $cruiseThrottle$1 (ite %init (/ 0 10) $cruiseThrottle$0))))) -; Universally quantified variables -(declare-fun $mode$~1 () Int) -(declare-fun $cruiseThrottle$~1 () Real) -(declare-fun $OK$~1 () Bool) -(declare-fun $mode$0 () Int) -(declare-fun $cruiseThrottle$0 () Real) -(declare-fun $OK$0 () Bool) -(declare-fun $mode$1 () Int) -(declare-fun $cruiseThrottle$1 () Real) -(declare-fun $OK$1 () Bool) -(assert (T true $mode$~1 $cruiseThrottle$~1 $OK$~1 $mode$0 $cruiseThrottle$0 $OK$0)) -(assert $OK$0) -(assert (T false $mode$0 $cruiseThrottle$0 $OK$0 $mode$1 $cruiseThrottle$1 $OK$1)) diff --git a/bench/tasks/cruise_controller_17_base2_t_part.smt2 b/bench/tasks/cruise_controller_17_base2_t_part.smt2 deleted file mode 100755 index ed848319c..000000000 --- a/bench/tasks/cruise_controller_17_base2_t_part.smt2 +++ /dev/null @@ -1,14 +0,0 @@ -; K = 2 -; Transition relation -(define-fun T ((%init Bool) ($mode$0 Int) ($cruiseThrottle$0 Real) ($OK$0 Bool) ($mode$1 Int) ($cruiseThrottle$1 Real) ($OK$1 Bool)) Bool (= $OK$1 (or (not (= $mode$1 4)) (= $cruiseThrottle$1 (ite %init (/ 0 10) $cruiseThrottle$0))))) -; Universally quantified variables -(declare-fun $mode$~1 () Int) -(declare-fun $cruiseThrottle$~1 () Real) -(declare-fun $OK$~1 () Bool) -(declare-fun $mode$0 () Int) -(declare-fun $cruiseThrottle$0 () Real) -(declare-fun $OK$0 () Bool) -(declare-fun $mode$3 () Int) -(declare-fun $cruiseThrottle$3 () Real) -(declare-fun $OK$3 () Bool) -(assert (and (T false $mode$0 $cruiseThrottle$0 $OK$0 $mode$3 $cruiseThrottle$3 $OK$3) $OK$3)) diff --git a/bench/tasks/cruise_controller_17_extend_s_part.smt2 b/bench/tasks/cruise_controller_17_extend_s_part.smt2 deleted file mode 100755 index 0b71b3d75..000000000 --- a/bench/tasks/cruise_controller_17_extend_s_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($mode$0 Int) ($cruiseThrottle$0 Real) ($OK$0 Bool) ($mode$1 Int) ($cruiseThrottle$1 Real) ($OK$1 Bool)) Bool (= $OK$1 (or (not (= $mode$1 4)) (= $cruiseThrottle$1 (ite %init (/ 0 10) $cruiseThrottle$0))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $mode$~1 () Int) -(declare-fun $cruiseThrottle$~1 () Real) -(declare-fun $OK$~1 () Bool) -(declare-fun $mode$0 () Int) -(declare-fun $cruiseThrottle$0 () Real) -(declare-fun $OK$0 () Bool) -(assert (T %init $mode$~1 $cruiseThrottle$~1 $OK$~1 $mode$0 $cruiseThrottle$0 $OK$0)) diff --git a/bench/tasks/cruise_controller_17_extend_t_part.smt2 b/bench/tasks/cruise_controller_17_extend_t_part.smt2 deleted file mode 100755 index 2d79fcf0f..000000000 --- a/bench/tasks/cruise_controller_17_extend_t_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($mode$0 Int) ($cruiseThrottle$0 Real) ($OK$0 Bool) ($mode$1 Int) ($cruiseThrottle$1 Real) ($OK$1 Bool)) Bool (= $OK$1 (or (not (= $mode$1 4)) (= $cruiseThrottle$1 (ite %init (/ 0 10) $cruiseThrottle$0))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $mode$~1 () Int) -(declare-fun $cruiseThrottle$~1 () Real) -(declare-fun $OK$~1 () Bool) -(declare-fun $mode$2 () Int) -(declare-fun $cruiseThrottle$2 () Real) -(declare-fun $OK$2 () Bool) -(assert (and (T %init $mode$~1 $cruiseThrottle$~1 $OK$~1 $mode$2 $cruiseThrottle$2 $OK$2) $OK$2)) diff --git a/bench/tasks/cruise_controller_20_base_s_part.smt2 b/bench/tasks/cruise_controller_20_base_s_part.smt2 deleted file mode 100755 index 7f5fddd69..000000000 --- a/bench/tasks/cruise_controller_20_base_s_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($mode$0 Int) ($desiredSpeed$0 Real) ($OK$0 Bool) ($mode$1 Int) ($desiredSpeed$1 Real) ($OK$1 Bool)) Bool (= $OK$1 (or (not (ite %init false (= $mode$0 4))) (= $desiredSpeed$1 (ite %init (/ 0 10) $desiredSpeed$0))))) -; Universally quantified variables -(declare-fun $mode$~1 () Int) -(declare-fun $desiredSpeed$~1 () Real) -(declare-fun $OK$~1 () Bool) -(declare-fun $mode$0 () Int) -(declare-fun $desiredSpeed$0 () Real) -(declare-fun $OK$0 () Bool) -(assert (T true $mode$~1 $desiredSpeed$~1 $OK$~1 $mode$0 $desiredSpeed$0 $OK$0)) diff --git a/bench/tasks/cruise_controller_20_base_t_part.smt2 b/bench/tasks/cruise_controller_20_base_t_part.smt2 deleted file mode 100755 index 0c6620afa..000000000 --- a/bench/tasks/cruise_controller_20_base_t_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($mode$0 Int) ($desiredSpeed$0 Real) ($OK$0 Bool) ($mode$1 Int) ($desiredSpeed$1 Real) ($OK$1 Bool)) Bool (= $OK$1 (or (not (ite %init false (= $mode$0 4))) (= $desiredSpeed$1 (ite %init (/ 0 10) $desiredSpeed$0))))) -; Universally quantified variables -(declare-fun $mode$~1 () Int) -(declare-fun $desiredSpeed$~1 () Real) -(declare-fun $OK$~1 () Bool) -(declare-fun $mode$2 () Int) -(declare-fun $desiredSpeed$2 () Real) -(declare-fun $OK$2 () Bool) -(assert (and (T true $mode$~1 $desiredSpeed$~1 $OK$~1 $mode$2 $desiredSpeed$2 $OK$2) $OK$2)) diff --git a/bench/tasks/cruise_controller_20_extend_s_part.smt2 b/bench/tasks/cruise_controller_20_extend_s_part.smt2 deleted file mode 100755 index f002984e9..000000000 --- a/bench/tasks/cruise_controller_20_extend_s_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($mode$0 Int) ($desiredSpeed$0 Real) ($OK$0 Bool) ($mode$1 Int) ($desiredSpeed$1 Real) ($OK$1 Bool)) Bool (= $OK$1 (or (not (ite %init false (= $mode$0 4))) (= $desiredSpeed$1 (ite %init (/ 0 10) $desiredSpeed$0))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $mode$~1 () Int) -(declare-fun $desiredSpeed$~1 () Real) -(declare-fun $OK$~1 () Bool) -(declare-fun $mode$0 () Int) -(declare-fun $desiredSpeed$0 () Real) -(declare-fun $OK$0 () Bool) -(assert (T %init $mode$~1 $desiredSpeed$~1 $OK$~1 $mode$0 $desiredSpeed$0 $OK$0)) diff --git a/bench/tasks/cruise_controller_20_extend_t_part.smt2 b/bench/tasks/cruise_controller_20_extend_t_part.smt2 deleted file mode 100755 index 10b01740d..000000000 --- a/bench/tasks/cruise_controller_20_extend_t_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($mode$0 Int) ($desiredSpeed$0 Real) ($OK$0 Bool) ($mode$1 Int) ($desiredSpeed$1 Real) ($OK$1 Bool)) Bool (= $OK$1 (or (not (ite %init false (= $mode$0 4))) (= $desiredSpeed$1 (ite %init (/ 0 10) $desiredSpeed$0))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $mode$~1 () Int) -(declare-fun $desiredSpeed$~1 () Real) -(declare-fun $OK$~1 () Bool) -(declare-fun $mode$2 () Int) -(declare-fun $desiredSpeed$2 () Real) -(declare-fun $OK$2 () Bool) -(assert (and (T %init $mode$~1 $desiredSpeed$~1 $OK$~1 $mode$2 $desiredSpeed$2 $OK$2) $OK$2)) diff --git a/bench/tasks/cruise_controller_23_base_s_part.smt2 b/bench/tasks/cruise_controller_23_base_s_part.smt2 deleted file mode 100755 index 5403bf142..000000000 --- a/bench/tasks/cruise_controller_23_base_s_part.smt2 +++ /dev/null @@ -1,9 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($desiredSpeed$0 Real) ($OK$0 Bool) ($desiredSpeed$1 Real) ($OK$1 Bool)) Bool (= $OK$1 (or (= $desiredSpeed$1 (/ 0 10)) (>= $desiredSpeed$1 (/ 150 10))))) -; Universally quantified variables -(declare-fun $desiredSpeed$~1 () Real) -(declare-fun $OK$~1 () Bool) -(declare-fun $desiredSpeed$0 () Real) -(declare-fun $OK$0 () Bool) -(assert (T true $desiredSpeed$~1 $OK$~1 $desiredSpeed$0 $OK$0)) diff --git a/bench/tasks/cruise_controller_23_base_t_part.smt2 b/bench/tasks/cruise_controller_23_base_t_part.smt2 deleted file mode 100755 index b92735d19..000000000 --- a/bench/tasks/cruise_controller_23_base_t_part.smt2 +++ /dev/null @@ -1,9 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($desiredSpeed$0 Real) ($OK$0 Bool) ($desiredSpeed$1 Real) ($OK$1 Bool)) Bool (= $OK$1 (or (= $desiredSpeed$1 (/ 0 10)) (>= $desiredSpeed$1 (/ 150 10))))) -; Universally quantified variables -(declare-fun $desiredSpeed$~1 () Real) -(declare-fun $OK$~1 () Bool) -(declare-fun $desiredSpeed$2 () Real) -(declare-fun $OK$2 () Bool) -(assert (and (T true $desiredSpeed$~1 $OK$~1 $desiredSpeed$2 $OK$2) $OK$2)) diff --git a/bench/tasks/cruise_controller_23_extend_s_part.smt2 b/bench/tasks/cruise_controller_23_extend_s_part.smt2 deleted file mode 100755 index d6435c41e..000000000 --- a/bench/tasks/cruise_controller_23_extend_s_part.smt2 +++ /dev/null @@ -1,10 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($desiredSpeed$0 Real) ($OK$0 Bool) ($desiredSpeed$1 Real) ($OK$1 Bool)) Bool (= $OK$1 (or (= $desiredSpeed$1 (/ 0 10)) (>= $desiredSpeed$1 (/ 150 10))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $desiredSpeed$~1 () Real) -(declare-fun $OK$~1 () Bool) -(declare-fun $desiredSpeed$0 () Real) -(declare-fun $OK$0 () Bool) -(assert (T %init $desiredSpeed$~1 $OK$~1 $desiredSpeed$0 $OK$0)) diff --git a/bench/tasks/cruise_controller_23_extend_t_part.smt2 b/bench/tasks/cruise_controller_23_extend_t_part.smt2 deleted file mode 100755 index f508c19b7..000000000 --- a/bench/tasks/cruise_controller_23_extend_t_part.smt2 +++ /dev/null @@ -1,10 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($desiredSpeed$0 Real) ($OK$0 Bool) ($desiredSpeed$1 Real) ($OK$1 Bool)) Bool (= $OK$1 (or (= $desiredSpeed$1 (/ 0 10)) (>= $desiredSpeed$1 (/ 150 10))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $desiredSpeed$~1 () Real) -(declare-fun $OK$~1 () Bool) -(declare-fun $desiredSpeed$2 () Real) -(declare-fun $OK$2 () Bool) -(assert (and (T %init $desiredSpeed$~1 $OK$~1 $desiredSpeed$2 $OK$2) $OK$2)) diff --git a/bench/tasks/ex3_e7_590_base_s_part.smt2 b/bench/tasks/ex3_e7_590_base_s_part.smt2 deleted file mode 100755 index d13dc8b91..000000000 --- a/bench/tasks/ex3_e7_590_base_s_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite %init true (or (not $V20_early$0) (not $V19_late$1))))) -; Universally quantified variables -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$0 () Bool) -(declare-fun $V20_early$0 () Bool) -(declare-fun $OK$0 () Bool) -(assert (T true $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$0 $V20_early$0 $OK$0)) diff --git a/bench/tasks/ex3_e7_590_base_t_part.smt2 b/bench/tasks/ex3_e7_590_base_t_part.smt2 deleted file mode 100755 index 666028c52..000000000 --- a/bench/tasks/ex3_e7_590_base_t_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite %init true (or (not $V20_early$0) (not $V19_late$1))))) -; Universally quantified variables -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $V20_early$2 () Bool) -(declare-fun $OK$2 () Bool) -(assert (and (T true $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$2 $V20_early$2 $OK$2) $OK$2)) diff --git a/bench/tasks/ex3_e7_590_e7_590_base_s_part.smt2 b/bench/tasks/ex3_e7_590_e7_590_base_s_part.smt2 deleted file mode 100755 index d13dc8b91..000000000 --- a/bench/tasks/ex3_e7_590_e7_590_base_s_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite %init true (or (not $V20_early$0) (not $V19_late$1))))) -; Universally quantified variables -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$0 () Bool) -(declare-fun $V20_early$0 () Bool) -(declare-fun $OK$0 () Bool) -(assert (T true $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$0 $V20_early$0 $OK$0)) diff --git a/bench/tasks/ex3_e7_590_e7_590_base_t_part.smt2 b/bench/tasks/ex3_e7_590_e7_590_base_t_part.smt2 deleted file mode 100755 index 666028c52..000000000 --- a/bench/tasks/ex3_e7_590_e7_590_base_t_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite %init true (or (not $V20_early$0) (not $V19_late$1))))) -; Universally quantified variables -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $V20_early$2 () Bool) -(declare-fun $OK$2 () Bool) -(assert (and (T true $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$2 $V20_early$2 $OK$2) $OK$2)) diff --git a/bench/tasks/ex3_e7_590_e7_590_extend_s_part.smt2 b/bench/tasks/ex3_e7_590_e7_590_extend_s_part.smt2 deleted file mode 100755 index 5c8c9ae61..000000000 --- a/bench/tasks/ex3_e7_590_e7_590_extend_s_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite %init true (or (not $V20_early$0) (not $V19_late$1))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$0 () Bool) -(declare-fun $V20_early$0 () Bool) -(declare-fun $OK$0 () Bool) -(assert (T %init $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$0 $V20_early$0 $OK$0)) diff --git a/bench/tasks/ex3_e7_590_e7_590_extend_t_part.smt2 b/bench/tasks/ex3_e7_590_e7_590_extend_t_part.smt2 deleted file mode 100755 index 85e70cdc6..000000000 --- a/bench/tasks/ex3_e7_590_e7_590_extend_t_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite %init true (or (not $V20_early$0) (not $V19_late$1))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $V20_early$2 () Bool) -(declare-fun $OK$2 () Bool) -(assert (and (T %init $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$2 $V20_early$2 $OK$2) $OK$2)) diff --git a/bench/tasks/ex3_e7_590_e8_550_base_s_part.smt2 b/bench/tasks/ex3_e7_590_e8_550_base_s_part.smt2 deleted file mode 100755 index d13dc8b91..000000000 --- a/bench/tasks/ex3_e7_590_e8_550_base_s_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite %init true (or (not $V20_early$0) (not $V19_late$1))))) -; Universally quantified variables -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$0 () Bool) -(declare-fun $V20_early$0 () Bool) -(declare-fun $OK$0 () Bool) -(assert (T true $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$0 $V20_early$0 $OK$0)) diff --git a/bench/tasks/ex3_e7_590_e8_550_base_t_part.smt2 b/bench/tasks/ex3_e7_590_e8_550_base_t_part.smt2 deleted file mode 100755 index 666028c52..000000000 --- a/bench/tasks/ex3_e7_590_e8_550_base_t_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite %init true (or (not $V20_early$0) (not $V19_late$1))))) -; Universally quantified variables -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $V20_early$2 () Bool) -(declare-fun $OK$2 () Bool) -(assert (and (T true $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$2 $V20_early$2 $OK$2) $OK$2)) diff --git a/bench/tasks/ex3_e7_590_e8_550_extend_s_part.smt2 b/bench/tasks/ex3_e7_590_e8_550_extend_s_part.smt2 deleted file mode 100755 index 5c8c9ae61..000000000 --- a/bench/tasks/ex3_e7_590_e8_550_extend_s_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite %init true (or (not $V20_early$0) (not $V19_late$1))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$0 () Bool) -(declare-fun $V20_early$0 () Bool) -(declare-fun $OK$0 () Bool) -(assert (T %init $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$0 $V20_early$0 $OK$0)) diff --git a/bench/tasks/ex3_e7_590_e8_550_extend_t_part.smt2 b/bench/tasks/ex3_e7_590_e8_550_extend_t_part.smt2 deleted file mode 100755 index 85e70cdc6..000000000 --- a/bench/tasks/ex3_e7_590_e8_550_extend_t_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite %init true (or (not $V20_early$0) (not $V19_late$1))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $V20_early$2 () Bool) -(declare-fun $OK$2 () Bool) -(assert (and (T %init $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$2 $V20_early$2 $OK$2) $OK$2)) diff --git a/bench/tasks/ex3_e7_590_extend_s_part.smt2 b/bench/tasks/ex3_e7_590_extend_s_part.smt2 deleted file mode 100755 index 5c8c9ae61..000000000 --- a/bench/tasks/ex3_e7_590_extend_s_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite %init true (or (not $V20_early$0) (not $V19_late$1))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$0 () Bool) -(declare-fun $V20_early$0 () Bool) -(declare-fun $OK$0 () Bool) -(assert (T %init $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$0 $V20_early$0 $OK$0)) diff --git a/bench/tasks/ex3_e7_590_extend_t_part.smt2 b/bench/tasks/ex3_e7_590_extend_t_part.smt2 deleted file mode 100755 index 85e70cdc6..000000000 --- a/bench/tasks/ex3_e7_590_extend_t_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite %init true (or (not $V20_early$0) (not $V19_late$1))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $V20_early$2 () Bool) -(declare-fun $OK$2 () Bool) -(assert (and (T %init $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$2 $V20_early$2 $OK$2) $OK$2)) diff --git a/bench/tasks/ex3_e8_120_base_s_part.smt2 b/bench/tasks/ex3_e8_120_base_s_part.smt2 deleted file mode 100755 index d13dc8b91..000000000 --- a/bench/tasks/ex3_e8_120_base_s_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite %init true (or (not $V20_early$0) (not $V19_late$1))))) -; Universally quantified variables -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$0 () Bool) -(declare-fun $V20_early$0 () Bool) -(declare-fun $OK$0 () Bool) -(assert (T true $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$0 $V20_early$0 $OK$0)) diff --git a/bench/tasks/ex3_e8_120_base_t_part.smt2 b/bench/tasks/ex3_e8_120_base_t_part.smt2 deleted file mode 100755 index 666028c52..000000000 --- a/bench/tasks/ex3_e8_120_base_t_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite %init true (or (not $V20_early$0) (not $V19_late$1))))) -; Universally quantified variables -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $V20_early$2 () Bool) -(declare-fun $OK$2 () Bool) -(assert (and (T true $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$2 $V20_early$2 $OK$2) $OK$2)) diff --git a/bench/tasks/ex3_e8_120_extend_s_part.smt2 b/bench/tasks/ex3_e8_120_extend_s_part.smt2 deleted file mode 100755 index 5c8c9ae61..000000000 --- a/bench/tasks/ex3_e8_120_extend_s_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite %init true (or (not $V20_early$0) (not $V19_late$1))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$0 () Bool) -(declare-fun $V20_early$0 () Bool) -(declare-fun $OK$0 () Bool) -(assert (T %init $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$0 $V20_early$0 $OK$0)) diff --git a/bench/tasks/ex3_e8_120_extend_t_part.smt2 b/bench/tasks/ex3_e8_120_extend_t_part.smt2 deleted file mode 100755 index 85e70cdc6..000000000 --- a/bench/tasks/ex3_e8_120_extend_t_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite %init true (or (not $V20_early$0) (not $V19_late$1))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $V20_early$2 () Bool) -(declare-fun $OK$2 () Bool) -(assert (and (T %init $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$2 $V20_early$2 $OK$2) $OK$2)) diff --git a/bench/tasks/ex3_e8_381_e7_224_base_s_part.smt2 b/bench/tasks/ex3_e8_381_e7_224_base_s_part.smt2 deleted file mode 100755 index d13dc8b91..000000000 --- a/bench/tasks/ex3_e8_381_e7_224_base_s_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite %init true (or (not $V20_early$0) (not $V19_late$1))))) -; Universally quantified variables -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$0 () Bool) -(declare-fun $V20_early$0 () Bool) -(declare-fun $OK$0 () Bool) -(assert (T true $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$0 $V20_early$0 $OK$0)) diff --git a/bench/tasks/ex3_e8_381_e7_224_base_t_part.smt2 b/bench/tasks/ex3_e8_381_e7_224_base_t_part.smt2 deleted file mode 100755 index 666028c52..000000000 --- a/bench/tasks/ex3_e8_381_e7_224_base_t_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite %init true (or (not $V20_early$0) (not $V19_late$1))))) -; Universally quantified variables -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $V20_early$2 () Bool) -(declare-fun $OK$2 () Bool) -(assert (and (T true $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$2 $V20_early$2 $OK$2) $OK$2)) diff --git a/bench/tasks/ex3_e8_381_e7_224_extend_s_part.smt2 b/bench/tasks/ex3_e8_381_e7_224_extend_s_part.smt2 deleted file mode 100755 index 5c8c9ae61..000000000 --- a/bench/tasks/ex3_e8_381_e7_224_extend_s_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite %init true (or (not $V20_early$0) (not $V19_late$1))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$0 () Bool) -(declare-fun $V20_early$0 () Bool) -(declare-fun $OK$0 () Bool) -(assert (T %init $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$0 $V20_early$0 $OK$0)) diff --git a/bench/tasks/ex3_e8_381_e7_224_extend_t_part.smt2 b/bench/tasks/ex3_e8_381_e7_224_extend_t_part.smt2 deleted file mode 100755 index 85e70cdc6..000000000 --- a/bench/tasks/ex3_e8_381_e7_224_extend_t_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite %init true (or (not $V20_early$0) (not $V19_late$1))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $V20_early$2 () Bool) -(declare-fun $OK$2 () Bool) -(assert (and (T %init $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$2 $V20_early$2 $OK$2) $OK$2)) diff --git a/bench/tasks/example_base1_s_part.smt2 b/bench/tasks/example_base1_s_part.smt2 deleted file mode 100755 index 521e263be..000000000 --- a/bench/tasks/example_base1_s_part.smt2 +++ /dev/null @@ -1,23 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($x$0 Bool) ($state$0 Int) ($bias$0 Int) ($prop1$0 Bool) ($prop2$0 Bool) ($prop3$0 Bool) ($prop4$0 Bool) ($prop_all$0 Bool) ($bias_max$0 Bool) ($x$1 Bool) ($state$1 Int) ($bias$1 Int) ($prop1$1 Bool) ($prop2$1 Bool) ($prop3$1 Bool) ($prop4$1 Bool) ($prop_all$1 Bool) ($bias_max$1 Bool)) Bool (and (= $bias$1 (ite %init 0 (+ (ite $x$1 1 (- 0 1)) $bias$0))) (= $bias_max$1 (ite %init false (or (or (>= $bias$1 2) (<= $bias$1 (- 0 2))) $bias_max$0))) (= $prop1$1 (=> (= $state$1 0) (= $bias$1 0))) (= $prop2$1 (ite %init true (=> (and (= $state$0 0) $x$1) (= $state$1 2)))) (= $prop3$1 (ite %init true (=> (and (= $state$0 0) (not $x$1)) (= $state$1 1)))) (= $prop4$1 (=> $bias_max$1 (= $state$1 3))) (= $prop_all$1 (and (and (and $prop1$1 $prop2$1) $prop3$1) $prop4$1)))) -; Universally quantified variables -(declare-fun $x$~1 () Bool) -(declare-fun $state$~1 () Int) -(declare-fun $bias$~1 () Int) -(declare-fun $prop1$~1 () Bool) -(declare-fun $prop2$~1 () Bool) -(declare-fun $prop3$~1 () Bool) -(declare-fun $prop4$~1 () Bool) -(declare-fun $prop_all$~1 () Bool) -(declare-fun $bias_max$~1 () Bool) -(declare-fun $x$0 () Bool) -(declare-fun $state$0 () Int) -(declare-fun $bias$0 () Int) -(declare-fun $prop1$0 () Bool) -(declare-fun $prop2$0 () Bool) -(declare-fun $prop3$0 () Bool) -(declare-fun $prop4$0 () Bool) -(declare-fun $prop_all$0 () Bool) -(declare-fun $bias_max$0 () Bool) -(assert (T true $x$~1 $state$~1 $bias$~1 $prop1$~1 $prop2$~1 $prop3$~1 $prop4$~1 $prop_all$~1 $bias_max$~1 $x$0 $state$0 $bias$0 $prop1$0 $prop2$0 $prop3$0 $prop4$0 $prop_all$0 $bias_max$0)) diff --git a/bench/tasks/example_base1_t_part.smt2 b/bench/tasks/example_base1_t_part.smt2 deleted file mode 100755 index 49366dafd..000000000 --- a/bench/tasks/example_base1_t_part.smt2 +++ /dev/null @@ -1,23 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($x$0 Bool) ($state$0 Int) ($bias$0 Int) ($prop1$0 Bool) ($prop2$0 Bool) ($prop3$0 Bool) ($prop4$0 Bool) ($prop_all$0 Bool) ($bias_max$0 Bool) ($x$1 Bool) ($state$1 Int) ($bias$1 Int) ($prop1$1 Bool) ($prop2$1 Bool) ($prop3$1 Bool) ($prop4$1 Bool) ($prop_all$1 Bool) ($bias_max$1 Bool)) Bool (and (= $bias$1 (ite %init 0 (+ (ite $x$1 1 (- 0 1)) $bias$0))) (= $bias_max$1 (ite %init false (or (or (>= $bias$1 2) (<= $bias$1 (- 0 2))) $bias_max$0))) (= $prop1$1 (=> (= $state$1 0) (= $bias$1 0))) (= $prop2$1 (ite %init true (=> (and (= $state$0 0) $x$1) (= $state$1 2)))) (= $prop3$1 (ite %init true (=> (and (= $state$0 0) (not $x$1)) (= $state$1 1)))) (= $prop4$1 (=> $bias_max$1 (= $state$1 3))) (= $prop_all$1 (and (and (and $prop1$1 $prop2$1) $prop3$1) $prop4$1)))) -; Universally quantified variables -(declare-fun $x$~1 () Bool) -(declare-fun $state$~1 () Int) -(declare-fun $bias$~1 () Int) -(declare-fun $prop1$~1 () Bool) -(declare-fun $prop2$~1 () Bool) -(declare-fun $prop3$~1 () Bool) -(declare-fun $prop4$~1 () Bool) -(declare-fun $prop_all$~1 () Bool) -(declare-fun $bias_max$~1 () Bool) -(declare-fun $x$0 () Bool) -(declare-fun $state$2 () Int) -(declare-fun $bias$2 () Int) -(declare-fun $prop1$2 () Bool) -(declare-fun $prop2$2 () Bool) -(declare-fun $prop3$2 () Bool) -(declare-fun $prop4$2 () Bool) -(declare-fun $prop_all$2 () Bool) -(declare-fun $bias_max$2 () Bool) -(assert (and (T true $x$~1 $state$~1 $bias$~1 $prop1$~1 $prop2$~1 $prop3$~1 $prop4$~1 $prop_all$~1 $bias_max$~1 $x$0 $state$2 $bias$2 $prop1$2 $prop2$2 $prop3$2 $prop4$2 $prop_all$2 $bias_max$2) $prop_all$2)) diff --git a/bench/tasks/example_base2_s_part.smt2 b/bench/tasks/example_base2_s_part.smt2 deleted file mode 100755 index 81e5e8eb4..000000000 --- a/bench/tasks/example_base2_s_part.smt2 +++ /dev/null @@ -1,34 +0,0 @@ -; K = 2 -; Transition relation -(define-fun T ((%init Bool) ($x$0 Bool) ($state$0 Int) ($bias$0 Int) ($prop1$0 Bool) ($prop2$0 Bool) ($prop3$0 Bool) ($prop4$0 Bool) ($prop_all$0 Bool) ($bias_max$0 Bool) ($x$1 Bool) ($state$1 Int) ($bias$1 Int) ($prop1$1 Bool) ($prop2$1 Bool) ($prop3$1 Bool) ($prop4$1 Bool) ($prop_all$1 Bool) ($bias_max$1 Bool)) Bool (and (= $bias$1 (ite %init 0 (+ (ite $x$1 1 (- 0 1)) $bias$0))) (= $bias_max$1 (ite %init false (or (or (>= $bias$1 2) (<= $bias$1 (- 0 2))) $bias_max$0))) (= $prop1$1 (=> (= $state$1 0) (= $bias$1 0))) (= $prop2$1 (ite %init true (=> (and (= $state$0 0) $x$1) (= $state$1 2)))) (= $prop3$1 (ite %init true (=> (and (= $state$0 0) (not $x$1)) (= $state$1 1)))) (= $prop4$1 (=> $bias_max$1 (= $state$1 3))) (= $prop_all$1 (and (and (and $prop1$1 $prop2$1) $prop3$1) $prop4$1)))) -; Universally quantified variables -(declare-fun $x$~1 () Bool) -(declare-fun $state$~1 () Int) -(declare-fun $bias$~1 () Int) -(declare-fun $prop1$~1 () Bool) -(declare-fun $prop2$~1 () Bool) -(declare-fun $prop3$~1 () Bool) -(declare-fun $prop4$~1 () Bool) -(declare-fun $prop_all$~1 () Bool) -(declare-fun $bias_max$~1 () Bool) -(declare-fun $x$0 () Bool) -(declare-fun $state$0 () Int) -(declare-fun $bias$0 () Int) -(declare-fun $prop1$0 () Bool) -(declare-fun $prop2$0 () Bool) -(declare-fun $prop3$0 () Bool) -(declare-fun $prop4$0 () Bool) -(declare-fun $prop_all$0 () Bool) -(declare-fun $bias_max$0 () Bool) -(declare-fun $x$1 () Bool) -(declare-fun $state$1 () Int) -(declare-fun $bias$1 () Int) -(declare-fun $prop1$1 () Bool) -(declare-fun $prop2$1 () Bool) -(declare-fun $prop3$1 () Bool) -(declare-fun $prop4$1 () Bool) -(declare-fun $prop_all$1 () Bool) -(declare-fun $bias_max$1 () Bool) -(assert (T true $x$~1 $state$~1 $bias$~1 $prop1$~1 $prop2$~1 $prop3$~1 $prop4$~1 $prop_all$~1 $bias_max$~1 $x$0 $state$0 $bias$0 $prop1$0 $prop2$0 $prop3$0 $prop4$0 $prop_all$0 $bias_max$0)) -(assert $prop_all$0) -(assert (T false $x$0 $state$0 $bias$0 $prop1$0 $prop2$0 $prop3$0 $prop4$0 $prop_all$0 $bias_max$0 $x$1 $state$1 $bias$1 $prop1$1 $prop2$1 $prop3$1 $prop4$1 $prop_all$1 $bias_max$1)) diff --git a/bench/tasks/example_base2_t_part.smt2 b/bench/tasks/example_base2_t_part.smt2 deleted file mode 100755 index cd75b87e1..000000000 --- a/bench/tasks/example_base2_t_part.smt2 +++ /dev/null @@ -1,32 +0,0 @@ -; K = 2 -; Transition relation -(define-fun T ((%init Bool) ($x$0 Bool) ($state$0 Int) ($bias$0 Int) ($prop1$0 Bool) ($prop2$0 Bool) ($prop3$0 Bool) ($prop4$0 Bool) ($prop_all$0 Bool) ($bias_max$0 Bool) ($x$1 Bool) ($state$1 Int) ($bias$1 Int) ($prop1$1 Bool) ($prop2$1 Bool) ($prop3$1 Bool) ($prop4$1 Bool) ($prop_all$1 Bool) ($bias_max$1 Bool)) Bool (and (= $bias$1 (ite %init 0 (+ (ite $x$1 1 (- 0 1)) $bias$0))) (= $bias_max$1 (ite %init false (or (or (>= $bias$1 2) (<= $bias$1 (- 0 2))) $bias_max$0))) (= $prop1$1 (=> (= $state$1 0) (= $bias$1 0))) (= $prop2$1 (ite %init true (=> (and (= $state$0 0) $x$1) (= $state$1 2)))) (= $prop3$1 (ite %init true (=> (and (= $state$0 0) (not $x$1)) (= $state$1 1)))) (= $prop4$1 (=> $bias_max$1 (= $state$1 3))) (= $prop_all$1 (and (and (and $prop1$1 $prop2$1) $prop3$1) $prop4$1)))) -; Universally quantified variables -(declare-fun $x$~1 () Bool) -(declare-fun $state$~1 () Int) -(declare-fun $bias$~1 () Int) -(declare-fun $prop1$~1 () Bool) -(declare-fun $prop2$~1 () Bool) -(declare-fun $prop3$~1 () Bool) -(declare-fun $prop4$~1 () Bool) -(declare-fun $prop_all$~1 () Bool) -(declare-fun $bias_max$~1 () Bool) -(declare-fun $x$0 () Bool) -(declare-fun $state$0 () Int) -(declare-fun $bias$0 () Int) -(declare-fun $prop1$0 () Bool) -(declare-fun $prop2$0 () Bool) -(declare-fun $prop3$0 () Bool) -(declare-fun $prop4$0 () Bool) -(declare-fun $prop_all$0 () Bool) -(declare-fun $bias_max$0 () Bool) -(declare-fun $x$1 () Bool) -(declare-fun $state$3 () Int) -(declare-fun $bias$3 () Int) -(declare-fun $prop1$3 () Bool) -(declare-fun $prop2$3 () Bool) -(declare-fun $prop3$3 () Bool) -(declare-fun $prop4$3 () Bool) -(declare-fun $prop_all$3 () Bool) -(declare-fun $bias_max$3 () Bool) -(assert (and (T false $x$0 $state$0 $bias$0 $prop1$0 $prop2$0 $prop3$0 $prop4$0 $prop_all$0 $bias_max$0 $x$1 $state$3 $bias$3 $prop1$3 $prop2$3 $prop3$3 $prop4$3 $prop_all$3 $bias_max$3) $prop_all$3)) diff --git a/bench/tasks/example_base3_s_part.smt2 b/bench/tasks/example_base3_s_part.smt2 deleted file mode 100755 index 5d308ec5f..000000000 --- a/bench/tasks/example_base3_s_part.smt2 +++ /dev/null @@ -1,45 +0,0 @@ -; K = 3 -; Transition relation -(define-fun T ((%init Bool) ($x$0 Bool) ($state$0 Int) ($bias$0 Int) ($prop1$0 Bool) ($prop2$0 Bool) ($prop3$0 Bool) ($prop4$0 Bool) ($prop_all$0 Bool) ($bias_max$0 Bool) ($x$1 Bool) ($state$1 Int) ($bias$1 Int) ($prop1$1 Bool) ($prop2$1 Bool) ($prop3$1 Bool) ($prop4$1 Bool) ($prop_all$1 Bool) ($bias_max$1 Bool)) Bool (and (= $bias$1 (ite %init 0 (+ (ite $x$1 1 (- 0 1)) $bias$0))) (= $bias_max$1 (ite %init false (or (or (>= $bias$1 2) (<= $bias$1 (- 0 2))) $bias_max$0))) (= $prop1$1 (=> (= $state$1 0) (= $bias$1 0))) (= $prop2$1 (ite %init true (=> (and (= $state$0 0) $x$1) (= $state$1 2)))) (= $prop3$1 (ite %init true (=> (and (= $state$0 0) (not $x$1)) (= $state$1 1)))) (= $prop4$1 (=> $bias_max$1 (= $state$1 3))) (= $prop_all$1 (and (and (and $prop1$1 $prop2$1) $prop3$1) $prop4$1)))) -; Universally quantified variables -(declare-fun $x$~1 () Bool) -(declare-fun $state$~1 () Int) -(declare-fun $bias$~1 () Int) -(declare-fun $prop1$~1 () Bool) -(declare-fun $prop2$~1 () Bool) -(declare-fun $prop3$~1 () Bool) -(declare-fun $prop4$~1 () Bool) -(declare-fun $prop_all$~1 () Bool) -(declare-fun $bias_max$~1 () Bool) -(declare-fun $x$0 () Bool) -(declare-fun $state$0 () Int) -(declare-fun $bias$0 () Int) -(declare-fun $prop1$0 () Bool) -(declare-fun $prop2$0 () Bool) -(declare-fun $prop3$0 () Bool) -(declare-fun $prop4$0 () Bool) -(declare-fun $prop_all$0 () Bool) -(declare-fun $bias_max$0 () Bool) -(declare-fun $x$1 () Bool) -(declare-fun $state$1 () Int) -(declare-fun $bias$1 () Int) -(declare-fun $prop1$1 () Bool) -(declare-fun $prop2$1 () Bool) -(declare-fun $prop3$1 () Bool) -(declare-fun $prop4$1 () Bool) -(declare-fun $prop_all$1 () Bool) -(declare-fun $bias_max$1 () Bool) -(declare-fun $x$2 () Bool) -(declare-fun $state$2 () Int) -(declare-fun $bias$2 () Int) -(declare-fun $prop1$2 () Bool) -(declare-fun $prop2$2 () Bool) -(declare-fun $prop3$2 () Bool) -(declare-fun $prop4$2 () Bool) -(declare-fun $prop_all$2 () Bool) -(declare-fun $bias_max$2 () Bool) -(assert (T true $x$~1 $state$~1 $bias$~1 $prop1$~1 $prop2$~1 $prop3$~1 $prop4$~1 $prop_all$~1 $bias_max$~1 $x$0 $state$0 $bias$0 $prop1$0 $prop2$0 $prop3$0 $prop4$0 $prop_all$0 $bias_max$0)) -(assert $prop_all$0) -(assert (T false $x$0 $state$0 $bias$0 $prop1$0 $prop2$0 $prop3$0 $prop4$0 $prop_all$0 $bias_max$0 $x$1 $state$1 $bias$1 $prop1$1 $prop2$1 $prop3$1 $prop4$1 $prop_all$1 $bias_max$1)) -(assert $prop_all$1) -(assert (T false $x$1 $state$1 $bias$1 $prop1$1 $prop2$1 $prop3$1 $prop4$1 $prop_all$1 $bias_max$1 $x$2 $state$2 $bias$2 $prop1$2 $prop2$2 $prop3$2 $prop4$2 $prop_all$2 $bias_max$2)) diff --git a/bench/tasks/example_base3_t_part.smt2 b/bench/tasks/example_base3_t_part.smt2 deleted file mode 100755 index 521b21c9c..000000000 --- a/bench/tasks/example_base3_t_part.smt2 +++ /dev/null @@ -1,41 +0,0 @@ -; K = 3 -; Transition relation -(define-fun T ((%init Bool) ($x$0 Bool) ($state$0 Int) ($bias$0 Int) ($prop1$0 Bool) ($prop2$0 Bool) ($prop3$0 Bool) ($prop4$0 Bool) ($prop_all$0 Bool) ($bias_max$0 Bool) ($x$1 Bool) ($state$1 Int) ($bias$1 Int) ($prop1$1 Bool) ($prop2$1 Bool) ($prop3$1 Bool) ($prop4$1 Bool) ($prop_all$1 Bool) ($bias_max$1 Bool)) Bool (and (= $bias$1 (ite %init 0 (+ (ite $x$1 1 (- 0 1)) $bias$0))) (= $bias_max$1 (ite %init false (or (or (>= $bias$1 2) (<= $bias$1 (- 0 2))) $bias_max$0))) (= $prop1$1 (=> (= $state$1 0) (= $bias$1 0))) (= $prop2$1 (ite %init true (=> (and (= $state$0 0) $x$1) (= $state$1 2)))) (= $prop3$1 (ite %init true (=> (and (= $state$0 0) (not $x$1)) (= $state$1 1)))) (= $prop4$1 (=> $bias_max$1 (= $state$1 3))) (= $prop_all$1 (and (and (and $prop1$1 $prop2$1) $prop3$1) $prop4$1)))) -; Universally quantified variables -(declare-fun $x$~1 () Bool) -(declare-fun $state$~1 () Int) -(declare-fun $bias$~1 () Int) -(declare-fun $prop1$~1 () Bool) -(declare-fun $prop2$~1 () Bool) -(declare-fun $prop3$~1 () Bool) -(declare-fun $prop4$~1 () Bool) -(declare-fun $prop_all$~1 () Bool) -(declare-fun $bias_max$~1 () Bool) -(declare-fun $x$0 () Bool) -(declare-fun $state$0 () Int) -(declare-fun $bias$0 () Int) -(declare-fun $prop1$0 () Bool) -(declare-fun $prop2$0 () Bool) -(declare-fun $prop3$0 () Bool) -(declare-fun $prop4$0 () Bool) -(declare-fun $prop_all$0 () Bool) -(declare-fun $bias_max$0 () Bool) -(declare-fun $x$1 () Bool) -(declare-fun $state$1 () Int) -(declare-fun $bias$1 () Int) -(declare-fun $prop1$1 () Bool) -(declare-fun $prop2$1 () Bool) -(declare-fun $prop3$1 () Bool) -(declare-fun $prop4$1 () Bool) -(declare-fun $prop_all$1 () Bool) -(declare-fun $bias_max$1 () Bool) -(declare-fun $x$2 () Bool) -(declare-fun $state$4 () Int) -(declare-fun $bias$4 () Int) -(declare-fun $prop1$4 () Bool) -(declare-fun $prop2$4 () Bool) -(declare-fun $prop3$4 () Bool) -(declare-fun $prop4$4 () Bool) -(declare-fun $prop_all$4 () Bool) -(declare-fun $bias_max$4 () Bool) -(assert (and (T false $x$1 $state$1 $bias$1 $prop1$1 $prop2$1 $prop3$1 $prop4$1 $prop_all$1 $bias_max$1 $x$2 $state$4 $bias$4 $prop1$4 $prop2$4 $prop3$4 $prop4$4 $prop_all$4 $bias_max$4) $prop_all$4)) diff --git a/bench/tasks/example_extend_s_part.smt2 b/bench/tasks/example_extend_s_part.smt2 deleted file mode 100755 index 2a2db202d..000000000 --- a/bench/tasks/example_extend_s_part.smt2 +++ /dev/null @@ -1,35 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($x$0 Bool) ($state$0 Int) ($bias$0 Int) ($prop1$0 Bool) ($prop2$0 Bool) ($prop3$0 Bool) ($prop4$0 Bool) ($prop_all$0 Bool) ($bias_max$0 Bool) ($x$1 Bool) ($state$1 Int) ($bias$1 Int) ($prop1$1 Bool) ($prop2$1 Bool) ($prop3$1 Bool) ($prop4$1 Bool) ($prop_all$1 Bool) ($bias_max$1 Bool)) Bool (and (= $bias$1 (ite %init 0 (+ (ite $x$1 1 (- 0 1)) $bias$0))) (= $bias_max$1 (ite %init false (or (or (>= $bias$1 2) (<= $bias$1 (- 0 2))) $bias_max$0))) (= $prop1$1 (=> (= $state$1 0) (= $bias$1 0))) (= $prop2$1 (ite %init true (=> (and (= $state$0 0) $x$1) (= $state$1 2)))) (= $prop3$1 (ite %init true (=> (and (= $state$0 0) (not $x$1)) (= $state$1 1)))) (= $prop4$1 (=> $bias_max$1 (= $state$1 3))) (= $prop_all$1 (and (and (and $prop1$1 $prop2$1) $prop3$1) $prop4$1)))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $x$~1 () Bool) -(declare-fun $state$~1 () Int) -(declare-fun $bias$~1 () Int) -(declare-fun $prop1$~1 () Bool) -(declare-fun $prop2$~1 () Bool) -(declare-fun $prop3$~1 () Bool) -(declare-fun $prop4$~1 () Bool) -(declare-fun $prop_all$~1 () Bool) -(declare-fun $bias_max$~1 () Bool) -(declare-fun $x$0 () Bool) -(declare-fun $state$0 () Int) -(declare-fun $bias$0 () Int) -(declare-fun $prop1$0 () Bool) -(declare-fun $prop2$0 () Bool) -(declare-fun $prop3$0 () Bool) -(declare-fun $prop4$0 () Bool) -(declare-fun $prop_all$0 () Bool) -(declare-fun $bias_max$0 () Bool) -(declare-fun $x$1 () Bool) -(declare-fun $state$1 () Int) -(declare-fun $bias$1 () Int) -(declare-fun $prop1$1 () Bool) -(declare-fun $prop2$1 () Bool) -(declare-fun $prop3$1 () Bool) -(declare-fun $prop4$1 () Bool) -(declare-fun $prop_all$1 () Bool) -(declare-fun $bias_max$1 () Bool) -(assert (T %init $x$~1 $state$~1 $bias$~1 $prop1$~1 $prop2$~1 $prop3$~1 $prop4$~1 $prop_all$~1 $bias_max$~1 $x$0 $state$0 $bias$0 $prop1$0 $prop2$0 $prop3$0 $prop4$0 $prop_all$0 $bias_max$0)) -(assert $prop_all$0) -(assert (T false $x$0 $state$0 $bias$0 $prop1$0 $prop2$0 $prop3$0 $prop4$0 $prop_all$0 $bias_max$0 $x$1 $state$1 $bias$1 $prop1$1 $prop2$1 $prop3$1 $prop4$1 $prop_all$1 $bias_max$1)) diff --git a/bench/tasks/example_extend_t_part.smt2 b/bench/tasks/example_extend_t_part.smt2 deleted file mode 100755 index 2b9c0e35f..000000000 --- a/bench/tasks/example_extend_t_part.smt2 +++ /dev/null @@ -1,33 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($x$0 Bool) ($state$0 Int) ($bias$0 Int) ($prop1$0 Bool) ($prop2$0 Bool) ($prop3$0 Bool) ($prop4$0 Bool) ($prop_all$0 Bool) ($bias_max$0 Bool) ($x$1 Bool) ($state$1 Int) ($bias$1 Int) ($prop1$1 Bool) ($prop2$1 Bool) ($prop3$1 Bool) ($prop4$1 Bool) ($prop_all$1 Bool) ($bias_max$1 Bool)) Bool (and (= $bias$1 (ite %init 0 (+ (ite $x$1 1 (- 0 1)) $bias$0))) (= $bias_max$1 (ite %init false (or (or (>= $bias$1 2) (<= $bias$1 (- 0 2))) $bias_max$0))) (= $prop1$1 (=> (= $state$1 0) (= $bias$1 0))) (= $prop2$1 (ite %init true (=> (and (= $state$0 0) $x$1) (= $state$1 2)))) (= $prop3$1 (ite %init true (=> (and (= $state$0 0) (not $x$1)) (= $state$1 1)))) (= $prop4$1 (=> $bias_max$1 (= $state$1 3))) (= $prop_all$1 (and (and (and $prop1$1 $prop2$1) $prop3$1) $prop4$1)))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $x$~1 () Bool) -(declare-fun $state$~1 () Int) -(declare-fun $bias$~1 () Int) -(declare-fun $prop1$~1 () Bool) -(declare-fun $prop2$~1 () Bool) -(declare-fun $prop3$~1 () Bool) -(declare-fun $prop4$~1 () Bool) -(declare-fun $prop_all$~1 () Bool) -(declare-fun $bias_max$~1 () Bool) -(declare-fun $x$0 () Bool) -(declare-fun $state$0 () Int) -(declare-fun $bias$0 () Int) -(declare-fun $prop1$0 () Bool) -(declare-fun $prop2$0 () Bool) -(declare-fun $prop3$0 () Bool) -(declare-fun $prop4$0 () Bool) -(declare-fun $prop_all$0 () Bool) -(declare-fun $bias_max$0 () Bool) -(declare-fun $x$1 () Bool) -(declare-fun $state$3 () Int) -(declare-fun $bias$3 () Int) -(declare-fun $prop1$3 () Bool) -(declare-fun $prop2$3 () Bool) -(declare-fun $prop3$3 () Bool) -(declare-fun $prop4$3 () Bool) -(declare-fun $prop_all$3 () Bool) -(declare-fun $bias_max$3 () Bool) -(assert (and (T false $x$0 $state$0 $bias$0 $prop1$0 $prop2$0 $prop3$0 $prop4$0 $prop_all$0 $bias_max$0 $x$1 $state$3 $bias$3 $prop1$3 $prop2$3 $prop3$3 $prop4$3 $prop_all$3 $bias_max$3) $prop_all$3)) diff --git a/bench/tasks/fast_1_e7_2044_e8_1396_base_s_part.smt2 b/bench/tasks/fast_1_e7_2044_e8_1396_base_s_part.smt2 deleted file mode 100755 index f061363fa..000000000 --- a/bench/tasks/fast_1_e7_2044_e8_1396_base_s_part.smt2 +++ /dev/null @@ -1,15 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($ccseti$0 Bool) ($ccsetd$0 Bool) ($ccr$0 Bool) ($V83_cca$0 Bool) ($OK$0 Bool) ($ccseti$1 Bool) ($ccsetd$1 Bool) ($ccr$1 Bool) ($V83_cca$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite (ite %init false (and $V83_cca$1 (not $V83_cca$0))) (or (or (ite %init false (and $ccseti$1 (not $ccseti$0))) (ite %init false (and $ccsetd$1 (not $ccsetd$0)))) (ite %init false (and $ccr$1 (not $ccr$0)))) true))) -; Universally quantified variables -(declare-fun $ccseti$~1 () Bool) -(declare-fun $ccsetd$~1 () Bool) -(declare-fun $ccr$~1 () Bool) -(declare-fun $V83_cca$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $ccseti$0 () Bool) -(declare-fun $ccsetd$0 () Bool) -(declare-fun $ccr$0 () Bool) -(declare-fun $V83_cca$0 () Bool) -(declare-fun $OK$0 () Bool) -(assert (T true $ccseti$~1 $ccsetd$~1 $ccr$~1 $V83_cca$~1 $OK$~1 $ccseti$0 $ccsetd$0 $ccr$0 $V83_cca$0 $OK$0)) diff --git a/bench/tasks/fast_1_e7_2044_e8_1396_base_t_part.smt2 b/bench/tasks/fast_1_e7_2044_e8_1396_base_t_part.smt2 deleted file mode 100755 index cb50834ce..000000000 --- a/bench/tasks/fast_1_e7_2044_e8_1396_base_t_part.smt2 +++ /dev/null @@ -1,15 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($ccseti$0 Bool) ($ccsetd$0 Bool) ($ccr$0 Bool) ($V83_cca$0 Bool) ($OK$0 Bool) ($ccseti$1 Bool) ($ccsetd$1 Bool) ($ccr$1 Bool) ($V83_cca$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite (ite %init false (and $V83_cca$1 (not $V83_cca$0))) (or (or (ite %init false (and $ccseti$1 (not $ccseti$0))) (ite %init false (and $ccsetd$1 (not $ccsetd$0)))) (ite %init false (and $ccr$1 (not $ccr$0)))) true))) -; Universally quantified variables -(declare-fun $ccseti$~1 () Bool) -(declare-fun $ccsetd$~1 () Bool) -(declare-fun $ccr$~1 () Bool) -(declare-fun $V83_cca$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $ccseti$0 () Bool) -(declare-fun $ccsetd$0 () Bool) -(declare-fun $ccr$0 () Bool) -(declare-fun $V83_cca$2 () Bool) -(declare-fun $OK$2 () Bool) -(assert (and (T true $ccseti$~1 $ccsetd$~1 $ccr$~1 $V83_cca$~1 $OK$~1 $ccseti$0 $ccsetd$0 $ccr$0 $V83_cca$2 $OK$2) $OK$2)) diff --git a/bench/tasks/fast_1_e7_2044_e8_1396_extend_s_part.smt2 b/bench/tasks/fast_1_e7_2044_e8_1396_extend_s_part.smt2 deleted file mode 100755 index 944ca91c4..000000000 --- a/bench/tasks/fast_1_e7_2044_e8_1396_extend_s_part.smt2 +++ /dev/null @@ -1,16 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($ccseti$0 Bool) ($ccsetd$0 Bool) ($ccr$0 Bool) ($V83_cca$0 Bool) ($OK$0 Bool) ($ccseti$1 Bool) ($ccsetd$1 Bool) ($ccr$1 Bool) ($V83_cca$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite (ite %init false (and $V83_cca$1 (not $V83_cca$0))) (or (or (ite %init false (and $ccseti$1 (not $ccseti$0))) (ite %init false (and $ccsetd$1 (not $ccsetd$0)))) (ite %init false (and $ccr$1 (not $ccr$0)))) true))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $ccseti$~1 () Bool) -(declare-fun $ccsetd$~1 () Bool) -(declare-fun $ccr$~1 () Bool) -(declare-fun $V83_cca$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $ccseti$0 () Bool) -(declare-fun $ccsetd$0 () Bool) -(declare-fun $ccr$0 () Bool) -(declare-fun $V83_cca$0 () Bool) -(declare-fun $OK$0 () Bool) -(assert (T %init $ccseti$~1 $ccsetd$~1 $ccr$~1 $V83_cca$~1 $OK$~1 $ccseti$0 $ccsetd$0 $ccr$0 $V83_cca$0 $OK$0)) diff --git a/bench/tasks/fast_1_e7_2044_e8_1396_extend_t_part.smt2 b/bench/tasks/fast_1_e7_2044_e8_1396_extend_t_part.smt2 deleted file mode 100755 index 79a4a17d2..000000000 --- a/bench/tasks/fast_1_e7_2044_e8_1396_extend_t_part.smt2 +++ /dev/null @@ -1,16 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($ccseti$0 Bool) ($ccsetd$0 Bool) ($ccr$0 Bool) ($V83_cca$0 Bool) ($OK$0 Bool) ($ccseti$1 Bool) ($ccsetd$1 Bool) ($ccr$1 Bool) ($V83_cca$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite (ite %init false (and $V83_cca$1 (not $V83_cca$0))) (or (or (ite %init false (and $ccseti$1 (not $ccseti$0))) (ite %init false (and $ccsetd$1 (not $ccsetd$0)))) (ite %init false (and $ccr$1 (not $ccr$0)))) true))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $ccseti$~1 () Bool) -(declare-fun $ccsetd$~1 () Bool) -(declare-fun $ccr$~1 () Bool) -(declare-fun $V83_cca$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $ccseti$0 () Bool) -(declare-fun $ccsetd$0 () Bool) -(declare-fun $ccr$0 () Bool) -(declare-fun $V83_cca$2 () Bool) -(declare-fun $OK$2 () Bool) -(assert (and (T %init $ccseti$~1 $ccsetd$~1 $ccr$~1 $V83_cca$~1 $OK$~1 $ccseti$0 $ccsetd$0 $ccr$0 $V83_cca$2 $OK$2) $OK$2)) diff --git a/bench/tasks/fast_1_e8_747_base1_s_part.smt2 b/bench/tasks/fast_1_e8_747_base1_s_part.smt2 deleted file mode 100755 index f061363fa..000000000 --- a/bench/tasks/fast_1_e8_747_base1_s_part.smt2 +++ /dev/null @@ -1,15 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($ccseti$0 Bool) ($ccsetd$0 Bool) ($ccr$0 Bool) ($V83_cca$0 Bool) ($OK$0 Bool) ($ccseti$1 Bool) ($ccsetd$1 Bool) ($ccr$1 Bool) ($V83_cca$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite (ite %init false (and $V83_cca$1 (not $V83_cca$0))) (or (or (ite %init false (and $ccseti$1 (not $ccseti$0))) (ite %init false (and $ccsetd$1 (not $ccsetd$0)))) (ite %init false (and $ccr$1 (not $ccr$0)))) true))) -; Universally quantified variables -(declare-fun $ccseti$~1 () Bool) -(declare-fun $ccsetd$~1 () Bool) -(declare-fun $ccr$~1 () Bool) -(declare-fun $V83_cca$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $ccseti$0 () Bool) -(declare-fun $ccsetd$0 () Bool) -(declare-fun $ccr$0 () Bool) -(declare-fun $V83_cca$0 () Bool) -(declare-fun $OK$0 () Bool) -(assert (T true $ccseti$~1 $ccsetd$~1 $ccr$~1 $V83_cca$~1 $OK$~1 $ccseti$0 $ccsetd$0 $ccr$0 $V83_cca$0 $OK$0)) diff --git a/bench/tasks/fast_1_e8_747_base1_t_part.smt2 b/bench/tasks/fast_1_e8_747_base1_t_part.smt2 deleted file mode 100755 index cb50834ce..000000000 --- a/bench/tasks/fast_1_e8_747_base1_t_part.smt2 +++ /dev/null @@ -1,15 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($ccseti$0 Bool) ($ccsetd$0 Bool) ($ccr$0 Bool) ($V83_cca$0 Bool) ($OK$0 Bool) ($ccseti$1 Bool) ($ccsetd$1 Bool) ($ccr$1 Bool) ($V83_cca$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite (ite %init false (and $V83_cca$1 (not $V83_cca$0))) (or (or (ite %init false (and $ccseti$1 (not $ccseti$0))) (ite %init false (and $ccsetd$1 (not $ccsetd$0)))) (ite %init false (and $ccr$1 (not $ccr$0)))) true))) -; Universally quantified variables -(declare-fun $ccseti$~1 () Bool) -(declare-fun $ccsetd$~1 () Bool) -(declare-fun $ccr$~1 () Bool) -(declare-fun $V83_cca$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $ccseti$0 () Bool) -(declare-fun $ccsetd$0 () Bool) -(declare-fun $ccr$0 () Bool) -(declare-fun $V83_cca$2 () Bool) -(declare-fun $OK$2 () Bool) -(assert (and (T true $ccseti$~1 $ccsetd$~1 $ccr$~1 $V83_cca$~1 $OK$~1 $ccseti$0 $ccsetd$0 $ccr$0 $V83_cca$2 $OK$2) $OK$2)) diff --git a/bench/tasks/fast_1_e8_747_base2_s_part.smt2 b/bench/tasks/fast_1_e8_747_base2_s_part.smt2 deleted file mode 100755 index 3706be97f..000000000 --- a/bench/tasks/fast_1_e8_747_base2_s_part.smt2 +++ /dev/null @@ -1,22 +0,0 @@ -; K = 2 -; Transition relation -(define-fun T ((%init Bool) ($ccseti$0 Bool) ($ccsetd$0 Bool) ($ccr$0 Bool) ($V83_cca$0 Bool) ($OK$0 Bool) ($ccseti$1 Bool) ($ccsetd$1 Bool) ($ccr$1 Bool) ($V83_cca$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite (ite %init false (and $V83_cca$1 (not $V83_cca$0))) (or (or (ite %init false (and $ccseti$1 (not $ccseti$0))) (ite %init false (and $ccsetd$1 (not $ccsetd$0)))) (ite %init false (and $ccr$1 (not $ccr$0)))) true))) -; Universally quantified variables -(declare-fun $ccseti$~1 () Bool) -(declare-fun $ccsetd$~1 () Bool) -(declare-fun $ccr$~1 () Bool) -(declare-fun $V83_cca$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $ccseti$0 () Bool) -(declare-fun $ccsetd$0 () Bool) -(declare-fun $ccr$0 () Bool) -(declare-fun $V83_cca$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $ccseti$1 () Bool) -(declare-fun $ccsetd$1 () Bool) -(declare-fun $ccr$1 () Bool) -(declare-fun $V83_cca$1 () Bool) -(declare-fun $OK$1 () Bool) -(assert (T true $ccseti$~1 $ccsetd$~1 $ccr$~1 $V83_cca$~1 $OK$~1 $ccseti$0 $ccsetd$0 $ccr$0 $V83_cca$0 $OK$0)) -(assert $OK$0) -(assert (T false $ccseti$0 $ccsetd$0 $ccr$0 $V83_cca$0 $OK$0 $ccseti$1 $ccsetd$1 $ccr$1 $V83_cca$1 $OK$1)) diff --git a/bench/tasks/fast_1_e8_747_base2_t_part.smt2 b/bench/tasks/fast_1_e8_747_base2_t_part.smt2 deleted file mode 100755 index 125723d54..000000000 --- a/bench/tasks/fast_1_e8_747_base2_t_part.smt2 +++ /dev/null @@ -1,20 +0,0 @@ -; K = 2 -; Transition relation -(define-fun T ((%init Bool) ($ccseti$0 Bool) ($ccsetd$0 Bool) ($ccr$0 Bool) ($V83_cca$0 Bool) ($OK$0 Bool) ($ccseti$1 Bool) ($ccsetd$1 Bool) ($ccr$1 Bool) ($V83_cca$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite (ite %init false (and $V83_cca$1 (not $V83_cca$0))) (or (or (ite %init false (and $ccseti$1 (not $ccseti$0))) (ite %init false (and $ccsetd$1 (not $ccsetd$0)))) (ite %init false (and $ccr$1 (not $ccr$0)))) true))) -; Universally quantified variables -(declare-fun $ccseti$~1 () Bool) -(declare-fun $ccsetd$~1 () Bool) -(declare-fun $ccr$~1 () Bool) -(declare-fun $V83_cca$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $ccseti$0 () Bool) -(declare-fun $ccsetd$0 () Bool) -(declare-fun $ccr$0 () Bool) -(declare-fun $V83_cca$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $ccseti$1 () Bool) -(declare-fun $ccsetd$1 () Bool) -(declare-fun $ccr$1 () Bool) -(declare-fun $V83_cca$3 () Bool) -(declare-fun $OK$3 () Bool) -(assert (and (T false $ccseti$0 $ccsetd$0 $ccr$0 $V83_cca$0 $OK$0 $ccseti$1 $ccsetd$1 $ccr$1 $V83_cca$3 $OK$3) $OK$3)) diff --git a/bench/tasks/fast_1_e8_747_e8_1041_base_s_part.smt2 b/bench/tasks/fast_1_e8_747_e8_1041_base_s_part.smt2 deleted file mode 100755 index f061363fa..000000000 --- a/bench/tasks/fast_1_e8_747_e8_1041_base_s_part.smt2 +++ /dev/null @@ -1,15 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($ccseti$0 Bool) ($ccsetd$0 Bool) ($ccr$0 Bool) ($V83_cca$0 Bool) ($OK$0 Bool) ($ccseti$1 Bool) ($ccsetd$1 Bool) ($ccr$1 Bool) ($V83_cca$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite (ite %init false (and $V83_cca$1 (not $V83_cca$0))) (or (or (ite %init false (and $ccseti$1 (not $ccseti$0))) (ite %init false (and $ccsetd$1 (not $ccsetd$0)))) (ite %init false (and $ccr$1 (not $ccr$0)))) true))) -; Universally quantified variables -(declare-fun $ccseti$~1 () Bool) -(declare-fun $ccsetd$~1 () Bool) -(declare-fun $ccr$~1 () Bool) -(declare-fun $V83_cca$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $ccseti$0 () Bool) -(declare-fun $ccsetd$0 () Bool) -(declare-fun $ccr$0 () Bool) -(declare-fun $V83_cca$0 () Bool) -(declare-fun $OK$0 () Bool) -(assert (T true $ccseti$~1 $ccsetd$~1 $ccr$~1 $V83_cca$~1 $OK$~1 $ccseti$0 $ccsetd$0 $ccr$0 $V83_cca$0 $OK$0)) diff --git a/bench/tasks/fast_1_e8_747_e8_1041_base_t_part.smt2 b/bench/tasks/fast_1_e8_747_e8_1041_base_t_part.smt2 deleted file mode 100755 index cb50834ce..000000000 --- a/bench/tasks/fast_1_e8_747_e8_1041_base_t_part.smt2 +++ /dev/null @@ -1,15 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($ccseti$0 Bool) ($ccsetd$0 Bool) ($ccr$0 Bool) ($V83_cca$0 Bool) ($OK$0 Bool) ($ccseti$1 Bool) ($ccsetd$1 Bool) ($ccr$1 Bool) ($V83_cca$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite (ite %init false (and $V83_cca$1 (not $V83_cca$0))) (or (or (ite %init false (and $ccseti$1 (not $ccseti$0))) (ite %init false (and $ccsetd$1 (not $ccsetd$0)))) (ite %init false (and $ccr$1 (not $ccr$0)))) true))) -; Universally quantified variables -(declare-fun $ccseti$~1 () Bool) -(declare-fun $ccsetd$~1 () Bool) -(declare-fun $ccr$~1 () Bool) -(declare-fun $V83_cca$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $ccseti$0 () Bool) -(declare-fun $ccsetd$0 () Bool) -(declare-fun $ccr$0 () Bool) -(declare-fun $V83_cca$2 () Bool) -(declare-fun $OK$2 () Bool) -(assert (and (T true $ccseti$~1 $ccsetd$~1 $ccr$~1 $V83_cca$~1 $OK$~1 $ccseti$0 $ccsetd$0 $ccr$0 $V83_cca$2 $OK$2) $OK$2)) diff --git a/bench/tasks/fast_1_e8_747_e8_1041_extend_s_part.smt2 b/bench/tasks/fast_1_e8_747_e8_1041_extend_s_part.smt2 deleted file mode 100755 index 944ca91c4..000000000 --- a/bench/tasks/fast_1_e8_747_e8_1041_extend_s_part.smt2 +++ /dev/null @@ -1,16 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($ccseti$0 Bool) ($ccsetd$0 Bool) ($ccr$0 Bool) ($V83_cca$0 Bool) ($OK$0 Bool) ($ccseti$1 Bool) ($ccsetd$1 Bool) ($ccr$1 Bool) ($V83_cca$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite (ite %init false (and $V83_cca$1 (not $V83_cca$0))) (or (or (ite %init false (and $ccseti$1 (not $ccseti$0))) (ite %init false (and $ccsetd$1 (not $ccsetd$0)))) (ite %init false (and $ccr$1 (not $ccr$0)))) true))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $ccseti$~1 () Bool) -(declare-fun $ccsetd$~1 () Bool) -(declare-fun $ccr$~1 () Bool) -(declare-fun $V83_cca$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $ccseti$0 () Bool) -(declare-fun $ccsetd$0 () Bool) -(declare-fun $ccr$0 () Bool) -(declare-fun $V83_cca$0 () Bool) -(declare-fun $OK$0 () Bool) -(assert (T %init $ccseti$~1 $ccsetd$~1 $ccr$~1 $V83_cca$~1 $OK$~1 $ccseti$0 $ccsetd$0 $ccr$0 $V83_cca$0 $OK$0)) diff --git a/bench/tasks/fast_1_e8_747_e8_1041_extend_t_part.smt2 b/bench/tasks/fast_1_e8_747_e8_1041_extend_t_part.smt2 deleted file mode 100755 index 79a4a17d2..000000000 --- a/bench/tasks/fast_1_e8_747_e8_1041_extend_t_part.smt2 +++ /dev/null @@ -1,16 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($ccseti$0 Bool) ($ccsetd$0 Bool) ($ccr$0 Bool) ($V83_cca$0 Bool) ($OK$0 Bool) ($ccseti$1 Bool) ($ccsetd$1 Bool) ($ccr$1 Bool) ($V83_cca$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite (ite %init false (and $V83_cca$1 (not $V83_cca$0))) (or (or (ite %init false (and $ccseti$1 (not $ccseti$0))) (ite %init false (and $ccsetd$1 (not $ccsetd$0)))) (ite %init false (and $ccr$1 (not $ccr$0)))) true))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $ccseti$~1 () Bool) -(declare-fun $ccsetd$~1 () Bool) -(declare-fun $ccr$~1 () Bool) -(declare-fun $V83_cca$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $ccseti$0 () Bool) -(declare-fun $ccsetd$0 () Bool) -(declare-fun $ccr$0 () Bool) -(declare-fun $V83_cca$2 () Bool) -(declare-fun $OK$2 () Bool) -(assert (and (T %init $ccseti$~1 $ccsetd$~1 $ccr$~1 $V83_cca$~1 $OK$~1 $ccseti$0 $ccsetd$0 $ccr$0 $V83_cca$2 $OK$2) $OK$2)) diff --git a/bench/tasks/fast_1_e8_747_extend_s_part.smt2 b/bench/tasks/fast_1_e8_747_extend_s_part.smt2 deleted file mode 100755 index 944ca91c4..000000000 --- a/bench/tasks/fast_1_e8_747_extend_s_part.smt2 +++ /dev/null @@ -1,16 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($ccseti$0 Bool) ($ccsetd$0 Bool) ($ccr$0 Bool) ($V83_cca$0 Bool) ($OK$0 Bool) ($ccseti$1 Bool) ($ccsetd$1 Bool) ($ccr$1 Bool) ($V83_cca$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite (ite %init false (and $V83_cca$1 (not $V83_cca$0))) (or (or (ite %init false (and $ccseti$1 (not $ccseti$0))) (ite %init false (and $ccsetd$1 (not $ccsetd$0)))) (ite %init false (and $ccr$1 (not $ccr$0)))) true))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $ccseti$~1 () Bool) -(declare-fun $ccsetd$~1 () Bool) -(declare-fun $ccr$~1 () Bool) -(declare-fun $V83_cca$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $ccseti$0 () Bool) -(declare-fun $ccsetd$0 () Bool) -(declare-fun $ccr$0 () Bool) -(declare-fun $V83_cca$0 () Bool) -(declare-fun $OK$0 () Bool) -(assert (T %init $ccseti$~1 $ccsetd$~1 $ccr$~1 $V83_cca$~1 $OK$~1 $ccseti$0 $ccsetd$0 $ccr$0 $V83_cca$0 $OK$0)) diff --git a/bench/tasks/fast_1_e8_747_extend_t_part.smt2 b/bench/tasks/fast_1_e8_747_extend_t_part.smt2 deleted file mode 100755 index 79a4a17d2..000000000 --- a/bench/tasks/fast_1_e8_747_extend_t_part.smt2 +++ /dev/null @@ -1,16 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($ccseti$0 Bool) ($ccsetd$0 Bool) ($ccr$0 Bool) ($V83_cca$0 Bool) ($OK$0 Bool) ($ccseti$1 Bool) ($ccsetd$1 Bool) ($ccr$1 Bool) ($V83_cca$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite (ite %init false (and $V83_cca$1 (not $V83_cca$0))) (or (or (ite %init false (and $ccseti$1 (not $ccseti$0))) (ite %init false (and $ccsetd$1 (not $ccsetd$0)))) (ite %init false (and $ccr$1 (not $ccr$0)))) true))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $ccseti$~1 () Bool) -(declare-fun $ccsetd$~1 () Bool) -(declare-fun $ccr$~1 () Bool) -(declare-fun $V83_cca$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $ccseti$0 () Bool) -(declare-fun $ccsetd$0 () Bool) -(declare-fun $ccr$0 () Bool) -(declare-fun $V83_cca$2 () Bool) -(declare-fun $OK$2 () Bool) -(assert (and (T %init $ccseti$~1 $ccsetd$~1 $ccr$~1 $V83_cca$~1 $OK$~1 $ccseti$0 $ccsetd$0 $ccr$0 $V83_cca$2 $OK$2) $OK$2)) diff --git a/bench/tasks/fast_2_e7_2526_e8_1145_base1_s_part.smt2 b/bench/tasks/fast_2_e7_2526_e8_1145_base1_s_part.smt2 deleted file mode 100755 index 577ea0ab5..000000000 --- a/bench/tasks/fast_2_e7_2526_e8_1145_base1_s_part.smt2 +++ /dev/null @@ -1,49 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($igsw$0 Bool) ($ccd$0 Bool) ($cconoff$0 Bool) ($bpa$0 Bool) ($cccanc$0 Bool) ($battok$0 Bool) ($gearok$0 Bool) ($qfok$0 Bool) ($sdok$0 Bool) ($accok$0 Bool) ($ccseti$0 Bool) ($ccsetd$0 Bool) ($ccr$0 Bool) ($vs$0 Int) ($V86_ccont$0 Bool) ($~flatten0$0 Bool) ($V87_cca$0 Bool) ($OK$0 Bool) ($V82_p1$0 Bool) ($V83_p2$0 Bool) ($V84_p3$0 Bool) ($V85_p4$0 Bool) ($igsw$1 Bool) ($ccd$1 Bool) ($cconoff$1 Bool) ($bpa$1 Bool) ($cccanc$1 Bool) ($battok$1 Bool) ($gearok$1 Bool) ($qfok$1 Bool) ($sdok$1 Bool) ($accok$1 Bool) ($ccseti$1 Bool) ($ccsetd$1 Bool) ($ccr$1 Bool) ($vs$1 Int) ($V86_ccont$1 Bool) ($~flatten0$1 Bool) ($V87_cca$1 Bool) ($OK$1 Bool) ($V82_p1$1 Bool) ($V83_p2$1 Bool) ($V84_p3$1 Bool) ($V85_p4$1 Bool)) Bool (and (= $OK$1 (and (and (and $V82_p1$1 $V83_p2$1) $V84_p3$1) $V85_p4$1)) (= $V82_p1$1 (ite (ite %init false (and $V87_cca$1 (not $V87_cca$0))) (or (or (ite %init false (and $ccseti$1 (not $ccseti$0))) (ite %init false (and $ccsetd$1 (not $ccsetd$0)))) (ite %init false (and $ccr$1 (not $ccr$0)))) true)) (= $V83_p2$1 (ite (not (and (and (and (and (and (and (and (and (and $V86_ccont$1 (not $bpa$1)) $battok$1) $gearok$1) $qfok$1) (ite %init false (and $sdok$0 $sdok$1))) (<= 35 $vs$1)) (<= $vs$1 200)) (ite %init false (and $~flatten0$0 $accok$1))) (not $cccanc$1))) (not $V87_cca$1) true)) (= $V84_p3$1 (ite (ite %init false (and $V86_ccont$1 (not $V86_ccont$0))) (and (and (not (ite %init false (or (and $igsw$1 (not $igsw$0)) (and (not $igsw$1) $igsw$0)))) (not $ccd$1)) (ite %init false (and $cconoff$1 (not $cconoff$0)))) true)) (= $V85_p4$1 (ite (ite %init false (or (and $igsw$1 (not $igsw$0)) (and (not $igsw$1) $igsw$0))) (not $V87_cca$1) true)))) -; Universally quantified variables -(declare-fun $igsw$~1 () Bool) -(declare-fun $ccd$~1 () Bool) -(declare-fun $cconoff$~1 () Bool) -(declare-fun $bpa$~1 () Bool) -(declare-fun $cccanc$~1 () Bool) -(declare-fun $battok$~1 () Bool) -(declare-fun $gearok$~1 () Bool) -(declare-fun $qfok$~1 () Bool) -(declare-fun $sdok$~1 () Bool) -(declare-fun $accok$~1 () Bool) -(declare-fun $ccseti$~1 () Bool) -(declare-fun $ccsetd$~1 () Bool) -(declare-fun $ccr$~1 () Bool) -(declare-fun $vs$~1 () Int) -(declare-fun $V86_ccont$~1 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $V87_cca$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V82_p1$~1 () Bool) -(declare-fun $V83_p2$~1 () Bool) -(declare-fun $V84_p3$~1 () Bool) -(declare-fun $V85_p4$~1 () Bool) -(declare-fun $igsw$0 () Bool) -(declare-fun $ccd$0 () Bool) -(declare-fun $cconoff$0 () Bool) -(declare-fun $bpa$0 () Bool) -(declare-fun $cccanc$0 () Bool) -(declare-fun $battok$0 () Bool) -(declare-fun $gearok$0 () Bool) -(declare-fun $qfok$0 () Bool) -(declare-fun $sdok$0 () Bool) -(declare-fun $accok$0 () Bool) -(declare-fun $ccseti$0 () Bool) -(declare-fun $ccsetd$0 () Bool) -(declare-fun $ccr$0 () Bool) -(declare-fun $vs$0 () Int) -(declare-fun $V86_ccont$0 () Bool) -(declare-fun $~flatten0$0 () Bool) -(declare-fun $V87_cca$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $V82_p1$0 () Bool) -(declare-fun $V83_p2$0 () Bool) -(declare-fun $V84_p3$0 () Bool) -(declare-fun $V85_p4$0 () Bool) -(assert (T true $igsw$~1 $ccd$~1 $cconoff$~1 $bpa$~1 $cccanc$~1 $battok$~1 $gearok$~1 $qfok$~1 $sdok$~1 $accok$~1 $ccseti$~1 $ccsetd$~1 $ccr$~1 $vs$~1 $V86_ccont$~1 $~flatten0$~1 $V87_cca$~1 $OK$~1 $V82_p1$~1 $V83_p2$~1 $V84_p3$~1 $V85_p4$~1 $igsw$0 $ccd$0 $cconoff$0 $bpa$0 $cccanc$0 $battok$0 $gearok$0 $qfok$0 $sdok$0 $accok$0 $ccseti$0 $ccsetd$0 $ccr$0 $vs$0 $V86_ccont$0 $~flatten0$0 $V87_cca$0 $OK$0 $V82_p1$0 $V83_p2$0 $V84_p3$0 $V85_p4$0)) diff --git a/bench/tasks/fast_2_e7_2526_e8_1145_base1_t_part.smt2 b/bench/tasks/fast_2_e7_2526_e8_1145_base1_t_part.smt2 deleted file mode 100755 index c6ba333c9..000000000 --- a/bench/tasks/fast_2_e7_2526_e8_1145_base1_t_part.smt2 +++ /dev/null @@ -1,49 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($igsw$0 Bool) ($ccd$0 Bool) ($cconoff$0 Bool) ($bpa$0 Bool) ($cccanc$0 Bool) ($battok$0 Bool) ($gearok$0 Bool) ($qfok$0 Bool) ($sdok$0 Bool) ($accok$0 Bool) ($ccseti$0 Bool) ($ccsetd$0 Bool) ($ccr$0 Bool) ($vs$0 Int) ($V86_ccont$0 Bool) ($~flatten0$0 Bool) ($V87_cca$0 Bool) ($OK$0 Bool) ($V82_p1$0 Bool) ($V83_p2$0 Bool) ($V84_p3$0 Bool) ($V85_p4$0 Bool) ($igsw$1 Bool) ($ccd$1 Bool) ($cconoff$1 Bool) ($bpa$1 Bool) ($cccanc$1 Bool) ($battok$1 Bool) ($gearok$1 Bool) ($qfok$1 Bool) ($sdok$1 Bool) ($accok$1 Bool) ($ccseti$1 Bool) ($ccsetd$1 Bool) ($ccr$1 Bool) ($vs$1 Int) ($V86_ccont$1 Bool) ($~flatten0$1 Bool) ($V87_cca$1 Bool) ($OK$1 Bool) ($V82_p1$1 Bool) ($V83_p2$1 Bool) ($V84_p3$1 Bool) ($V85_p4$1 Bool)) Bool (and (= $OK$1 (and (and (and $V82_p1$1 $V83_p2$1) $V84_p3$1) $V85_p4$1)) (= $V82_p1$1 (ite (ite %init false (and $V87_cca$1 (not $V87_cca$0))) (or (or (ite %init false (and $ccseti$1 (not $ccseti$0))) (ite %init false (and $ccsetd$1 (not $ccsetd$0)))) (ite %init false (and $ccr$1 (not $ccr$0)))) true)) (= $V83_p2$1 (ite (not (and (and (and (and (and (and (and (and (and $V86_ccont$1 (not $bpa$1)) $battok$1) $gearok$1) $qfok$1) (ite %init false (and $sdok$0 $sdok$1))) (<= 35 $vs$1)) (<= $vs$1 200)) (ite %init false (and $~flatten0$0 $accok$1))) (not $cccanc$1))) (not $V87_cca$1) true)) (= $V84_p3$1 (ite (ite %init false (and $V86_ccont$1 (not $V86_ccont$0))) (and (and (not (ite %init false (or (and $igsw$1 (not $igsw$0)) (and (not $igsw$1) $igsw$0)))) (not $ccd$1)) (ite %init false (and $cconoff$1 (not $cconoff$0)))) true)) (= $V85_p4$1 (ite (ite %init false (or (and $igsw$1 (not $igsw$0)) (and (not $igsw$1) $igsw$0))) (not $V87_cca$1) true)))) -; Universally quantified variables -(declare-fun $igsw$~1 () Bool) -(declare-fun $ccd$~1 () Bool) -(declare-fun $cconoff$~1 () Bool) -(declare-fun $bpa$~1 () Bool) -(declare-fun $cccanc$~1 () Bool) -(declare-fun $battok$~1 () Bool) -(declare-fun $gearok$~1 () Bool) -(declare-fun $qfok$~1 () Bool) -(declare-fun $sdok$~1 () Bool) -(declare-fun $accok$~1 () Bool) -(declare-fun $ccseti$~1 () Bool) -(declare-fun $ccsetd$~1 () Bool) -(declare-fun $ccr$~1 () Bool) -(declare-fun $vs$~1 () Int) -(declare-fun $V86_ccont$~1 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $V87_cca$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V82_p1$~1 () Bool) -(declare-fun $V83_p2$~1 () Bool) -(declare-fun $V84_p3$~1 () Bool) -(declare-fun $V85_p4$~1 () Bool) -(declare-fun $igsw$0 () Bool) -(declare-fun $ccd$0 () Bool) -(declare-fun $cconoff$0 () Bool) -(declare-fun $bpa$0 () Bool) -(declare-fun $cccanc$0 () Bool) -(declare-fun $battok$0 () Bool) -(declare-fun $gearok$0 () Bool) -(declare-fun $qfok$0 () Bool) -(declare-fun $sdok$0 () Bool) -(declare-fun $accok$0 () Bool) -(declare-fun $ccseti$0 () Bool) -(declare-fun $ccsetd$0 () Bool) -(declare-fun $ccr$0 () Bool) -(declare-fun $vs$0 () Int) -(declare-fun $V86_ccont$2 () Bool) -(declare-fun $~flatten0$2 () Bool) -(declare-fun $V87_cca$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $V82_p1$2 () Bool) -(declare-fun $V83_p2$2 () Bool) -(declare-fun $V84_p3$2 () Bool) -(declare-fun $V85_p4$2 () Bool) -(assert (and (T true $igsw$~1 $ccd$~1 $cconoff$~1 $bpa$~1 $cccanc$~1 $battok$~1 $gearok$~1 $qfok$~1 $sdok$~1 $accok$~1 $ccseti$~1 $ccsetd$~1 $ccr$~1 $vs$~1 $V86_ccont$~1 $~flatten0$~1 $V87_cca$~1 $OK$~1 $V82_p1$~1 $V83_p2$~1 $V84_p3$~1 $V85_p4$~1 $igsw$0 $ccd$0 $cconoff$0 $bpa$0 $cccanc$0 $battok$0 $gearok$0 $qfok$0 $sdok$0 $accok$0 $ccseti$0 $ccsetd$0 $ccr$0 $vs$0 $V86_ccont$2 $~flatten0$2 $V87_cca$2 $OK$2 $V82_p1$2 $V83_p2$2 $V84_p3$2 $V85_p4$2) $OK$2)) diff --git a/bench/tasks/fast_2_e7_2526_e8_1145_base2_s_part.smt2 b/bench/tasks/fast_2_e7_2526_e8_1145_base2_s_part.smt2 deleted file mode 100755 index 870ee0d4c..000000000 --- a/bench/tasks/fast_2_e7_2526_e8_1145_base2_s_part.smt2 +++ /dev/null @@ -1,73 +0,0 @@ -; K = 2 -; Transition relation -(define-fun T ((%init Bool) ($igsw$0 Bool) ($ccd$0 Bool) ($cconoff$0 Bool) ($bpa$0 Bool) ($cccanc$0 Bool) ($battok$0 Bool) ($gearok$0 Bool) ($qfok$0 Bool) ($sdok$0 Bool) ($accok$0 Bool) ($ccseti$0 Bool) ($ccsetd$0 Bool) ($ccr$0 Bool) ($vs$0 Int) ($V86_ccont$0 Bool) ($~flatten0$0 Bool) ($V87_cca$0 Bool) ($OK$0 Bool) ($V82_p1$0 Bool) ($V83_p2$0 Bool) ($V84_p3$0 Bool) ($V85_p4$0 Bool) ($igsw$1 Bool) ($ccd$1 Bool) ($cconoff$1 Bool) ($bpa$1 Bool) ($cccanc$1 Bool) ($battok$1 Bool) ($gearok$1 Bool) ($qfok$1 Bool) ($sdok$1 Bool) ($accok$1 Bool) ($ccseti$1 Bool) ($ccsetd$1 Bool) ($ccr$1 Bool) ($vs$1 Int) ($V86_ccont$1 Bool) ($~flatten0$1 Bool) ($V87_cca$1 Bool) ($OK$1 Bool) ($V82_p1$1 Bool) ($V83_p2$1 Bool) ($V84_p3$1 Bool) ($V85_p4$1 Bool)) Bool (and (= $OK$1 (and (and (and $V82_p1$1 $V83_p2$1) $V84_p3$1) $V85_p4$1)) (= $V82_p1$1 (ite (ite %init false (and $V87_cca$1 (not $V87_cca$0))) (or (or (ite %init false (and $ccseti$1 (not $ccseti$0))) (ite %init false (and $ccsetd$1 (not $ccsetd$0)))) (ite %init false (and $ccr$1 (not $ccr$0)))) true)) (= $V83_p2$1 (ite (not (and (and (and (and (and (and (and (and (and $V86_ccont$1 (not $bpa$1)) $battok$1) $gearok$1) $qfok$1) (ite %init false (and $sdok$0 $sdok$1))) (<= 35 $vs$1)) (<= $vs$1 200)) (ite %init false (and $~flatten0$0 $accok$1))) (not $cccanc$1))) (not $V87_cca$1) true)) (= $V84_p3$1 (ite (ite %init false (and $V86_ccont$1 (not $V86_ccont$0))) (and (and (not (ite %init false (or (and $igsw$1 (not $igsw$0)) (and (not $igsw$1) $igsw$0)))) (not $ccd$1)) (ite %init false (and $cconoff$1 (not $cconoff$0)))) true)) (= $V85_p4$1 (ite (ite %init false (or (and $igsw$1 (not $igsw$0)) (and (not $igsw$1) $igsw$0))) (not $V87_cca$1) true)))) -; Universally quantified variables -(declare-fun $igsw$~1 () Bool) -(declare-fun $ccd$~1 () Bool) -(declare-fun $cconoff$~1 () Bool) -(declare-fun $bpa$~1 () Bool) -(declare-fun $cccanc$~1 () Bool) -(declare-fun $battok$~1 () Bool) -(declare-fun $gearok$~1 () Bool) -(declare-fun $qfok$~1 () Bool) -(declare-fun $sdok$~1 () Bool) -(declare-fun $accok$~1 () Bool) -(declare-fun $ccseti$~1 () Bool) -(declare-fun $ccsetd$~1 () Bool) -(declare-fun $ccr$~1 () Bool) -(declare-fun $vs$~1 () Int) -(declare-fun $V86_ccont$~1 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $V87_cca$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V82_p1$~1 () Bool) -(declare-fun $V83_p2$~1 () Bool) -(declare-fun $V84_p3$~1 () Bool) -(declare-fun $V85_p4$~1 () Bool) -(declare-fun $igsw$0 () Bool) -(declare-fun $ccd$0 () Bool) -(declare-fun $cconoff$0 () Bool) -(declare-fun $bpa$0 () Bool) -(declare-fun $cccanc$0 () Bool) -(declare-fun $battok$0 () Bool) -(declare-fun $gearok$0 () Bool) -(declare-fun $qfok$0 () Bool) -(declare-fun $sdok$0 () Bool) -(declare-fun $accok$0 () Bool) -(declare-fun $ccseti$0 () Bool) -(declare-fun $ccsetd$0 () Bool) -(declare-fun $ccr$0 () Bool) -(declare-fun $vs$0 () Int) -(declare-fun $V86_ccont$0 () Bool) -(declare-fun $~flatten0$0 () Bool) -(declare-fun $V87_cca$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $V82_p1$0 () Bool) -(declare-fun $V83_p2$0 () Bool) -(declare-fun $V84_p3$0 () Bool) -(declare-fun $V85_p4$0 () Bool) -(declare-fun $igsw$1 () Bool) -(declare-fun $ccd$1 () Bool) -(declare-fun $cconoff$1 () Bool) -(declare-fun $bpa$1 () Bool) -(declare-fun $cccanc$1 () Bool) -(declare-fun $battok$1 () Bool) -(declare-fun $gearok$1 () Bool) -(declare-fun $qfok$1 () Bool) -(declare-fun $sdok$1 () Bool) -(declare-fun $accok$1 () Bool) -(declare-fun $ccseti$1 () Bool) -(declare-fun $ccsetd$1 () Bool) -(declare-fun $ccr$1 () Bool) -(declare-fun $vs$1 () Int) -(declare-fun $V86_ccont$1 () Bool) -(declare-fun $~flatten0$1 () Bool) -(declare-fun $V87_cca$1 () Bool) -(declare-fun $OK$1 () Bool) -(declare-fun $V82_p1$1 () Bool) -(declare-fun $V83_p2$1 () Bool) -(declare-fun $V84_p3$1 () Bool) -(declare-fun $V85_p4$1 () Bool) -(assert (T true $igsw$~1 $ccd$~1 $cconoff$~1 $bpa$~1 $cccanc$~1 $battok$~1 $gearok$~1 $qfok$~1 $sdok$~1 $accok$~1 $ccseti$~1 $ccsetd$~1 $ccr$~1 $vs$~1 $V86_ccont$~1 $~flatten0$~1 $V87_cca$~1 $OK$~1 $V82_p1$~1 $V83_p2$~1 $V84_p3$~1 $V85_p4$~1 $igsw$0 $ccd$0 $cconoff$0 $bpa$0 $cccanc$0 $battok$0 $gearok$0 $qfok$0 $sdok$0 $accok$0 $ccseti$0 $ccsetd$0 $ccr$0 $vs$0 $V86_ccont$0 $~flatten0$0 $V87_cca$0 $OK$0 $V82_p1$0 $V83_p2$0 $V84_p3$0 $V85_p4$0)) -(assert $OK$0) -(assert (T false $igsw$0 $ccd$0 $cconoff$0 $bpa$0 $cccanc$0 $battok$0 $gearok$0 $qfok$0 $sdok$0 $accok$0 $ccseti$0 $ccsetd$0 $ccr$0 $vs$0 $V86_ccont$0 $~flatten0$0 $V87_cca$0 $OK$0 $V82_p1$0 $V83_p2$0 $V84_p3$0 $V85_p4$0 $igsw$1 $ccd$1 $cconoff$1 $bpa$1 $cccanc$1 $battok$1 $gearok$1 $qfok$1 $sdok$1 $accok$1 $ccseti$1 $ccsetd$1 $ccr$1 $vs$1 $V86_ccont$1 $~flatten0$1 $V87_cca$1 $OK$1 $V82_p1$1 $V83_p2$1 $V84_p3$1 $V85_p4$1)) diff --git a/bench/tasks/fast_2_e7_2526_e8_1145_base2_t_part.smt2 b/bench/tasks/fast_2_e7_2526_e8_1145_base2_t_part.smt2 deleted file mode 100755 index 983d296bf..000000000 --- a/bench/tasks/fast_2_e7_2526_e8_1145_base2_t_part.smt2 +++ /dev/null @@ -1,71 +0,0 @@ -; K = 2 -; Transition relation -(define-fun T ((%init Bool) ($igsw$0 Bool) ($ccd$0 Bool) ($cconoff$0 Bool) ($bpa$0 Bool) ($cccanc$0 Bool) ($battok$0 Bool) ($gearok$0 Bool) ($qfok$0 Bool) ($sdok$0 Bool) ($accok$0 Bool) ($ccseti$0 Bool) ($ccsetd$0 Bool) ($ccr$0 Bool) ($vs$0 Int) ($V86_ccont$0 Bool) ($~flatten0$0 Bool) ($V87_cca$0 Bool) ($OK$0 Bool) ($V82_p1$0 Bool) ($V83_p2$0 Bool) ($V84_p3$0 Bool) ($V85_p4$0 Bool) ($igsw$1 Bool) ($ccd$1 Bool) ($cconoff$1 Bool) ($bpa$1 Bool) ($cccanc$1 Bool) ($battok$1 Bool) ($gearok$1 Bool) ($qfok$1 Bool) ($sdok$1 Bool) ($accok$1 Bool) ($ccseti$1 Bool) ($ccsetd$1 Bool) ($ccr$1 Bool) ($vs$1 Int) ($V86_ccont$1 Bool) ($~flatten0$1 Bool) ($V87_cca$1 Bool) ($OK$1 Bool) ($V82_p1$1 Bool) ($V83_p2$1 Bool) ($V84_p3$1 Bool) ($V85_p4$1 Bool)) Bool (and (= $OK$1 (and (and (and $V82_p1$1 $V83_p2$1) $V84_p3$1) $V85_p4$1)) (= $V82_p1$1 (ite (ite %init false (and $V87_cca$1 (not $V87_cca$0))) (or (or (ite %init false (and $ccseti$1 (not $ccseti$0))) (ite %init false (and $ccsetd$1 (not $ccsetd$0)))) (ite %init false (and $ccr$1 (not $ccr$0)))) true)) (= $V83_p2$1 (ite (not (and (and (and (and (and (and (and (and (and $V86_ccont$1 (not $bpa$1)) $battok$1) $gearok$1) $qfok$1) (ite %init false (and $sdok$0 $sdok$1))) (<= 35 $vs$1)) (<= $vs$1 200)) (ite %init false (and $~flatten0$0 $accok$1))) (not $cccanc$1))) (not $V87_cca$1) true)) (= $V84_p3$1 (ite (ite %init false (and $V86_ccont$1 (not $V86_ccont$0))) (and (and (not (ite %init false (or (and $igsw$1 (not $igsw$0)) (and (not $igsw$1) $igsw$0)))) (not $ccd$1)) (ite %init false (and $cconoff$1 (not $cconoff$0)))) true)) (= $V85_p4$1 (ite (ite %init false (or (and $igsw$1 (not $igsw$0)) (and (not $igsw$1) $igsw$0))) (not $V87_cca$1) true)))) -; Universally quantified variables -(declare-fun $igsw$~1 () Bool) -(declare-fun $ccd$~1 () Bool) -(declare-fun $cconoff$~1 () Bool) -(declare-fun $bpa$~1 () Bool) -(declare-fun $cccanc$~1 () Bool) -(declare-fun $battok$~1 () Bool) -(declare-fun $gearok$~1 () Bool) -(declare-fun $qfok$~1 () Bool) -(declare-fun $sdok$~1 () Bool) -(declare-fun $accok$~1 () Bool) -(declare-fun $ccseti$~1 () Bool) -(declare-fun $ccsetd$~1 () Bool) -(declare-fun $ccr$~1 () Bool) -(declare-fun $vs$~1 () Int) -(declare-fun $V86_ccont$~1 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $V87_cca$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V82_p1$~1 () Bool) -(declare-fun $V83_p2$~1 () Bool) -(declare-fun $V84_p3$~1 () Bool) -(declare-fun $V85_p4$~1 () Bool) -(declare-fun $igsw$0 () Bool) -(declare-fun $ccd$0 () Bool) -(declare-fun $cconoff$0 () Bool) -(declare-fun $bpa$0 () Bool) -(declare-fun $cccanc$0 () Bool) -(declare-fun $battok$0 () Bool) -(declare-fun $gearok$0 () Bool) -(declare-fun $qfok$0 () Bool) -(declare-fun $sdok$0 () Bool) -(declare-fun $accok$0 () Bool) -(declare-fun $ccseti$0 () Bool) -(declare-fun $ccsetd$0 () Bool) -(declare-fun $ccr$0 () Bool) -(declare-fun $vs$0 () Int) -(declare-fun $V86_ccont$0 () Bool) -(declare-fun $~flatten0$0 () Bool) -(declare-fun $V87_cca$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $V82_p1$0 () Bool) -(declare-fun $V83_p2$0 () Bool) -(declare-fun $V84_p3$0 () Bool) -(declare-fun $V85_p4$0 () Bool) -(declare-fun $igsw$1 () Bool) -(declare-fun $ccd$1 () Bool) -(declare-fun $cconoff$1 () Bool) -(declare-fun $bpa$1 () Bool) -(declare-fun $cccanc$1 () Bool) -(declare-fun $battok$1 () Bool) -(declare-fun $gearok$1 () Bool) -(declare-fun $qfok$1 () Bool) -(declare-fun $sdok$1 () Bool) -(declare-fun $accok$1 () Bool) -(declare-fun $ccseti$1 () Bool) -(declare-fun $ccsetd$1 () Bool) -(declare-fun $ccr$1 () Bool) -(declare-fun $vs$1 () Int) -(declare-fun $V86_ccont$3 () Bool) -(declare-fun $~flatten0$3 () Bool) -(declare-fun $V87_cca$3 () Bool) -(declare-fun $OK$3 () Bool) -(declare-fun $V82_p1$3 () Bool) -(declare-fun $V83_p2$3 () Bool) -(declare-fun $V84_p3$3 () Bool) -(declare-fun $V85_p4$3 () Bool) -(assert (and (T false $igsw$0 $ccd$0 $cconoff$0 $bpa$0 $cccanc$0 $battok$0 $gearok$0 $qfok$0 $sdok$0 $accok$0 $ccseti$0 $ccsetd$0 $ccr$0 $vs$0 $V86_ccont$0 $~flatten0$0 $V87_cca$0 $OK$0 $V82_p1$0 $V83_p2$0 $V84_p3$0 $V85_p4$0 $igsw$1 $ccd$1 $cconoff$1 $bpa$1 $cccanc$1 $battok$1 $gearok$1 $qfok$1 $sdok$1 $accok$1 $ccseti$1 $ccsetd$1 $ccr$1 $vs$1 $V86_ccont$3 $~flatten0$3 $V87_cca$3 $OK$3 $V82_p1$3 $V83_p2$3 $V84_p3$3 $V85_p4$3) $OK$3)) diff --git a/bench/tasks/fast_2_e7_2526_e8_1145_extend_s_part.smt2 b/bench/tasks/fast_2_e7_2526_e8_1145_extend_s_part.smt2 deleted file mode 100755 index 5500a52f2..000000000 --- a/bench/tasks/fast_2_e7_2526_e8_1145_extend_s_part.smt2 +++ /dev/null @@ -1,50 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($igsw$0 Bool) ($ccd$0 Bool) ($cconoff$0 Bool) ($bpa$0 Bool) ($cccanc$0 Bool) ($battok$0 Bool) ($gearok$0 Bool) ($qfok$0 Bool) ($sdok$0 Bool) ($accok$0 Bool) ($ccseti$0 Bool) ($ccsetd$0 Bool) ($ccr$0 Bool) ($vs$0 Int) ($V86_ccont$0 Bool) ($~flatten0$0 Bool) ($V87_cca$0 Bool) ($OK$0 Bool) ($V82_p1$0 Bool) ($V83_p2$0 Bool) ($V84_p3$0 Bool) ($V85_p4$0 Bool) ($igsw$1 Bool) ($ccd$1 Bool) ($cconoff$1 Bool) ($bpa$1 Bool) ($cccanc$1 Bool) ($battok$1 Bool) ($gearok$1 Bool) ($qfok$1 Bool) ($sdok$1 Bool) ($accok$1 Bool) ($ccseti$1 Bool) ($ccsetd$1 Bool) ($ccr$1 Bool) ($vs$1 Int) ($V86_ccont$1 Bool) ($~flatten0$1 Bool) ($V87_cca$1 Bool) ($OK$1 Bool) ($V82_p1$1 Bool) ($V83_p2$1 Bool) ($V84_p3$1 Bool) ($V85_p4$1 Bool)) Bool (and (= $OK$1 (and (and (and $V82_p1$1 $V83_p2$1) $V84_p3$1) $V85_p4$1)) (= $V82_p1$1 (ite (ite %init false (and $V87_cca$1 (not $V87_cca$0))) (or (or (ite %init false (and $ccseti$1 (not $ccseti$0))) (ite %init false (and $ccsetd$1 (not $ccsetd$0)))) (ite %init false (and $ccr$1 (not $ccr$0)))) true)) (= $V83_p2$1 (ite (not (and (and (and (and (and (and (and (and (and $V86_ccont$1 (not $bpa$1)) $battok$1) $gearok$1) $qfok$1) (ite %init false (and $sdok$0 $sdok$1))) (<= 35 $vs$1)) (<= $vs$1 200)) (ite %init false (and $~flatten0$0 $accok$1))) (not $cccanc$1))) (not $V87_cca$1) true)) (= $V84_p3$1 (ite (ite %init false (and $V86_ccont$1 (not $V86_ccont$0))) (and (and (not (ite %init false (or (and $igsw$1 (not $igsw$0)) (and (not $igsw$1) $igsw$0)))) (not $ccd$1)) (ite %init false (and $cconoff$1 (not $cconoff$0)))) true)) (= $V85_p4$1 (ite (ite %init false (or (and $igsw$1 (not $igsw$0)) (and (not $igsw$1) $igsw$0))) (not $V87_cca$1) true)))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $igsw$~1 () Bool) -(declare-fun $ccd$~1 () Bool) -(declare-fun $cconoff$~1 () Bool) -(declare-fun $bpa$~1 () Bool) -(declare-fun $cccanc$~1 () Bool) -(declare-fun $battok$~1 () Bool) -(declare-fun $gearok$~1 () Bool) -(declare-fun $qfok$~1 () Bool) -(declare-fun $sdok$~1 () Bool) -(declare-fun $accok$~1 () Bool) -(declare-fun $ccseti$~1 () Bool) -(declare-fun $ccsetd$~1 () Bool) -(declare-fun $ccr$~1 () Bool) -(declare-fun $vs$~1 () Int) -(declare-fun $V86_ccont$~1 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $V87_cca$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V82_p1$~1 () Bool) -(declare-fun $V83_p2$~1 () Bool) -(declare-fun $V84_p3$~1 () Bool) -(declare-fun $V85_p4$~1 () Bool) -(declare-fun $igsw$0 () Bool) -(declare-fun $ccd$0 () Bool) -(declare-fun $cconoff$0 () Bool) -(declare-fun $bpa$0 () Bool) -(declare-fun $cccanc$0 () Bool) -(declare-fun $battok$0 () Bool) -(declare-fun $gearok$0 () Bool) -(declare-fun $qfok$0 () Bool) -(declare-fun $sdok$0 () Bool) -(declare-fun $accok$0 () Bool) -(declare-fun $ccseti$0 () Bool) -(declare-fun $ccsetd$0 () Bool) -(declare-fun $ccr$0 () Bool) -(declare-fun $vs$0 () Int) -(declare-fun $V86_ccont$0 () Bool) -(declare-fun $~flatten0$0 () Bool) -(declare-fun $V87_cca$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $V82_p1$0 () Bool) -(declare-fun $V83_p2$0 () Bool) -(declare-fun $V84_p3$0 () Bool) -(declare-fun $V85_p4$0 () Bool) -(assert (T %init $igsw$~1 $ccd$~1 $cconoff$~1 $bpa$~1 $cccanc$~1 $battok$~1 $gearok$~1 $qfok$~1 $sdok$~1 $accok$~1 $ccseti$~1 $ccsetd$~1 $ccr$~1 $vs$~1 $V86_ccont$~1 $~flatten0$~1 $V87_cca$~1 $OK$~1 $V82_p1$~1 $V83_p2$~1 $V84_p3$~1 $V85_p4$~1 $igsw$0 $ccd$0 $cconoff$0 $bpa$0 $cccanc$0 $battok$0 $gearok$0 $qfok$0 $sdok$0 $accok$0 $ccseti$0 $ccsetd$0 $ccr$0 $vs$0 $V86_ccont$0 $~flatten0$0 $V87_cca$0 $OK$0 $V82_p1$0 $V83_p2$0 $V84_p3$0 $V85_p4$0)) diff --git a/bench/tasks/fast_2_e7_2526_e8_1145_extend_t_part.smt2 b/bench/tasks/fast_2_e7_2526_e8_1145_extend_t_part.smt2 deleted file mode 100755 index 501eff331..000000000 --- a/bench/tasks/fast_2_e7_2526_e8_1145_extend_t_part.smt2 +++ /dev/null @@ -1,50 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($igsw$0 Bool) ($ccd$0 Bool) ($cconoff$0 Bool) ($bpa$0 Bool) ($cccanc$0 Bool) ($battok$0 Bool) ($gearok$0 Bool) ($qfok$0 Bool) ($sdok$0 Bool) ($accok$0 Bool) ($ccseti$0 Bool) ($ccsetd$0 Bool) ($ccr$0 Bool) ($vs$0 Int) ($V86_ccont$0 Bool) ($~flatten0$0 Bool) ($V87_cca$0 Bool) ($OK$0 Bool) ($V82_p1$0 Bool) ($V83_p2$0 Bool) ($V84_p3$0 Bool) ($V85_p4$0 Bool) ($igsw$1 Bool) ($ccd$1 Bool) ($cconoff$1 Bool) ($bpa$1 Bool) ($cccanc$1 Bool) ($battok$1 Bool) ($gearok$1 Bool) ($qfok$1 Bool) ($sdok$1 Bool) ($accok$1 Bool) ($ccseti$1 Bool) ($ccsetd$1 Bool) ($ccr$1 Bool) ($vs$1 Int) ($V86_ccont$1 Bool) ($~flatten0$1 Bool) ($V87_cca$1 Bool) ($OK$1 Bool) ($V82_p1$1 Bool) ($V83_p2$1 Bool) ($V84_p3$1 Bool) ($V85_p4$1 Bool)) Bool (and (= $OK$1 (and (and (and $V82_p1$1 $V83_p2$1) $V84_p3$1) $V85_p4$1)) (= $V82_p1$1 (ite (ite %init false (and $V87_cca$1 (not $V87_cca$0))) (or (or (ite %init false (and $ccseti$1 (not $ccseti$0))) (ite %init false (and $ccsetd$1 (not $ccsetd$0)))) (ite %init false (and $ccr$1 (not $ccr$0)))) true)) (= $V83_p2$1 (ite (not (and (and (and (and (and (and (and (and (and $V86_ccont$1 (not $bpa$1)) $battok$1) $gearok$1) $qfok$1) (ite %init false (and $sdok$0 $sdok$1))) (<= 35 $vs$1)) (<= $vs$1 200)) (ite %init false (and $~flatten0$0 $accok$1))) (not $cccanc$1))) (not $V87_cca$1) true)) (= $V84_p3$1 (ite (ite %init false (and $V86_ccont$1 (not $V86_ccont$0))) (and (and (not (ite %init false (or (and $igsw$1 (not $igsw$0)) (and (not $igsw$1) $igsw$0)))) (not $ccd$1)) (ite %init false (and $cconoff$1 (not $cconoff$0)))) true)) (= $V85_p4$1 (ite (ite %init false (or (and $igsw$1 (not $igsw$0)) (and (not $igsw$1) $igsw$0))) (not $V87_cca$1) true)))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $igsw$~1 () Bool) -(declare-fun $ccd$~1 () Bool) -(declare-fun $cconoff$~1 () Bool) -(declare-fun $bpa$~1 () Bool) -(declare-fun $cccanc$~1 () Bool) -(declare-fun $battok$~1 () Bool) -(declare-fun $gearok$~1 () Bool) -(declare-fun $qfok$~1 () Bool) -(declare-fun $sdok$~1 () Bool) -(declare-fun $accok$~1 () Bool) -(declare-fun $ccseti$~1 () Bool) -(declare-fun $ccsetd$~1 () Bool) -(declare-fun $ccr$~1 () Bool) -(declare-fun $vs$~1 () Int) -(declare-fun $V86_ccont$~1 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $V87_cca$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V82_p1$~1 () Bool) -(declare-fun $V83_p2$~1 () Bool) -(declare-fun $V84_p3$~1 () Bool) -(declare-fun $V85_p4$~1 () Bool) -(declare-fun $igsw$0 () Bool) -(declare-fun $ccd$0 () Bool) -(declare-fun $cconoff$0 () Bool) -(declare-fun $bpa$0 () Bool) -(declare-fun $cccanc$0 () Bool) -(declare-fun $battok$0 () Bool) -(declare-fun $gearok$0 () Bool) -(declare-fun $qfok$0 () Bool) -(declare-fun $sdok$0 () Bool) -(declare-fun $accok$0 () Bool) -(declare-fun $ccseti$0 () Bool) -(declare-fun $ccsetd$0 () Bool) -(declare-fun $ccr$0 () Bool) -(declare-fun $vs$0 () Int) -(declare-fun $V86_ccont$2 () Bool) -(declare-fun $~flatten0$2 () Bool) -(declare-fun $V87_cca$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $V82_p1$2 () Bool) -(declare-fun $V83_p2$2 () Bool) -(declare-fun $V84_p3$2 () Bool) -(declare-fun $V85_p4$2 () Bool) -(assert (and (T %init $igsw$~1 $ccd$~1 $cconoff$~1 $bpa$~1 $cccanc$~1 $battok$~1 $gearok$~1 $qfok$~1 $sdok$~1 $accok$~1 $ccseti$~1 $ccsetd$~1 $ccr$~1 $vs$~1 $V86_ccont$~1 $~flatten0$~1 $V87_cca$~1 $OK$~1 $V82_p1$~1 $V83_p2$~1 $V84_p3$~1 $V85_p4$~1 $igsw$0 $ccd$0 $cconoff$0 $bpa$0 $cccanc$0 $battok$0 $gearok$0 $qfok$0 $sdok$0 $accok$0 $ccseti$0 $ccsetd$0 $ccr$0 $vs$0 $V86_ccont$2 $~flatten0$2 $V87_cca$2 $OK$2 $V82_p1$2 $V83_p2$2 $V84_p3$2 $V85_p4$2) $OK$2)) diff --git a/bench/tasks/fast_2_e8_460_base_s_part.smt2 b/bench/tasks/fast_2_e8_460_base_s_part.smt2 deleted file mode 100755 index 3ccdf0bb5..000000000 --- a/bench/tasks/fast_2_e8_460_base_s_part.smt2 +++ /dev/null @@ -1,49 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($igsw$0 Bool) ($ccd$0 Bool) ($cconoff$0 Bool) ($bpa$0 Bool) ($cccanc$0 Bool) ($battok$0 Bool) ($gearok$0 Bool) ($qfok$0 Bool) ($sdok$0 Bool) ($accok$0 Bool) ($ccseti$0 Bool) ($ccsetd$0 Bool) ($ccr$0 Bool) ($vs$0 Int) ($V86_ccont$0 Bool) ($V87_cca$0 Bool) ($~flatten0$0 Bool) ($OK$0 Bool) ($V82_p1$0 Bool) ($V83_p2$0 Bool) ($V84_p3$0 Bool) ($V85_p4$0 Bool) ($igsw$1 Bool) ($ccd$1 Bool) ($cconoff$1 Bool) ($bpa$1 Bool) ($cccanc$1 Bool) ($battok$1 Bool) ($gearok$1 Bool) ($qfok$1 Bool) ($sdok$1 Bool) ($accok$1 Bool) ($ccseti$1 Bool) ($ccsetd$1 Bool) ($ccr$1 Bool) ($vs$1 Int) ($V86_ccont$1 Bool) ($V87_cca$1 Bool) ($~flatten0$1 Bool) ($OK$1 Bool) ($V82_p1$1 Bool) ($V83_p2$1 Bool) ($V84_p3$1 Bool) ($V85_p4$1 Bool)) Bool (and (= $OK$1 (and (and (and $V82_p1$1 $V83_p2$1) $V84_p3$1) $V85_p4$1)) (= $V82_p1$1 (ite (ite %init false (and $V87_cca$1 (not $V87_cca$0))) (or (or (ite %init false (and $ccseti$1 (not $ccseti$0))) (ite %init false (and $ccsetd$1 (not $ccsetd$0)))) (ite %init false (and $ccr$1 (not $ccr$0)))) true)) (= $V83_p2$1 (ite (not (and (and (and (and (and (and (and (and (and $V86_ccont$1 (not $bpa$1)) $battok$1) $gearok$1) $qfok$1) (ite %init false (and $sdok$0 $sdok$1))) (<= 35 $vs$1)) (<= $vs$1 200)) (ite %init false (and $~flatten0$0 $accok$1))) (not $cccanc$1))) (not $V87_cca$1) true)) (= $V84_p3$1 (ite (ite %init false (and $V86_ccont$1 (not $V86_ccont$0))) (and (and (not (ite %init false (and (and (and $igsw$1 (not $igsw$0)) (not $igsw$1)) $igsw$0))) (not $ccd$1)) (ite %init false (and $cconoff$1 (not $cconoff$0)))) true)) (= $V85_p4$1 (ite (ite %init false (and (and (and $igsw$1 (not $igsw$0)) (not $igsw$1)) $igsw$0)) (not $V87_cca$1) true)))) -; Universally quantified variables -(declare-fun $igsw$~1 () Bool) -(declare-fun $ccd$~1 () Bool) -(declare-fun $cconoff$~1 () Bool) -(declare-fun $bpa$~1 () Bool) -(declare-fun $cccanc$~1 () Bool) -(declare-fun $battok$~1 () Bool) -(declare-fun $gearok$~1 () Bool) -(declare-fun $qfok$~1 () Bool) -(declare-fun $sdok$~1 () Bool) -(declare-fun $accok$~1 () Bool) -(declare-fun $ccseti$~1 () Bool) -(declare-fun $ccsetd$~1 () Bool) -(declare-fun $ccr$~1 () Bool) -(declare-fun $vs$~1 () Int) -(declare-fun $V86_ccont$~1 () Bool) -(declare-fun $V87_cca$~1 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V82_p1$~1 () Bool) -(declare-fun $V83_p2$~1 () Bool) -(declare-fun $V84_p3$~1 () Bool) -(declare-fun $V85_p4$~1 () Bool) -(declare-fun $igsw$0 () Bool) -(declare-fun $ccd$0 () Bool) -(declare-fun $cconoff$0 () Bool) -(declare-fun $bpa$0 () Bool) -(declare-fun $cccanc$0 () Bool) -(declare-fun $battok$0 () Bool) -(declare-fun $gearok$0 () Bool) -(declare-fun $qfok$0 () Bool) -(declare-fun $sdok$0 () Bool) -(declare-fun $accok$0 () Bool) -(declare-fun $ccseti$0 () Bool) -(declare-fun $ccsetd$0 () Bool) -(declare-fun $ccr$0 () Bool) -(declare-fun $vs$0 () Int) -(declare-fun $V86_ccont$0 () Bool) -(declare-fun $V87_cca$0 () Bool) -(declare-fun $~flatten0$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $V82_p1$0 () Bool) -(declare-fun $V83_p2$0 () Bool) -(declare-fun $V84_p3$0 () Bool) -(declare-fun $V85_p4$0 () Bool) -(assert (T true $igsw$~1 $ccd$~1 $cconoff$~1 $bpa$~1 $cccanc$~1 $battok$~1 $gearok$~1 $qfok$~1 $sdok$~1 $accok$~1 $ccseti$~1 $ccsetd$~1 $ccr$~1 $vs$~1 $V86_ccont$~1 $V87_cca$~1 $~flatten0$~1 $OK$~1 $V82_p1$~1 $V83_p2$~1 $V84_p3$~1 $V85_p4$~1 $igsw$0 $ccd$0 $cconoff$0 $bpa$0 $cccanc$0 $battok$0 $gearok$0 $qfok$0 $sdok$0 $accok$0 $ccseti$0 $ccsetd$0 $ccr$0 $vs$0 $V86_ccont$0 $V87_cca$0 $~flatten0$0 $OK$0 $V82_p1$0 $V83_p2$0 $V84_p3$0 $V85_p4$0)) diff --git a/bench/tasks/fast_2_e8_460_base_t_part.smt2 b/bench/tasks/fast_2_e8_460_base_t_part.smt2 deleted file mode 100755 index 52e14fcad..000000000 --- a/bench/tasks/fast_2_e8_460_base_t_part.smt2 +++ /dev/null @@ -1,49 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($igsw$0 Bool) ($ccd$0 Bool) ($cconoff$0 Bool) ($bpa$0 Bool) ($cccanc$0 Bool) ($battok$0 Bool) ($gearok$0 Bool) ($qfok$0 Bool) ($sdok$0 Bool) ($accok$0 Bool) ($ccseti$0 Bool) ($ccsetd$0 Bool) ($ccr$0 Bool) ($vs$0 Int) ($V86_ccont$0 Bool) ($V87_cca$0 Bool) ($~flatten0$0 Bool) ($OK$0 Bool) ($V82_p1$0 Bool) ($V83_p2$0 Bool) ($V84_p3$0 Bool) ($V85_p4$0 Bool) ($igsw$1 Bool) ($ccd$1 Bool) ($cconoff$1 Bool) ($bpa$1 Bool) ($cccanc$1 Bool) ($battok$1 Bool) ($gearok$1 Bool) ($qfok$1 Bool) ($sdok$1 Bool) ($accok$1 Bool) ($ccseti$1 Bool) ($ccsetd$1 Bool) ($ccr$1 Bool) ($vs$1 Int) ($V86_ccont$1 Bool) ($V87_cca$1 Bool) ($~flatten0$1 Bool) ($OK$1 Bool) ($V82_p1$1 Bool) ($V83_p2$1 Bool) ($V84_p3$1 Bool) ($V85_p4$1 Bool)) Bool (and (= $OK$1 (and (and (and $V82_p1$1 $V83_p2$1) $V84_p3$1) $V85_p4$1)) (= $V82_p1$1 (ite (ite %init false (and $V87_cca$1 (not $V87_cca$0))) (or (or (ite %init false (and $ccseti$1 (not $ccseti$0))) (ite %init false (and $ccsetd$1 (not $ccsetd$0)))) (ite %init false (and $ccr$1 (not $ccr$0)))) true)) (= $V83_p2$1 (ite (not (and (and (and (and (and (and (and (and (and $V86_ccont$1 (not $bpa$1)) $battok$1) $gearok$1) $qfok$1) (ite %init false (and $sdok$0 $sdok$1))) (<= 35 $vs$1)) (<= $vs$1 200)) (ite %init false (and $~flatten0$0 $accok$1))) (not $cccanc$1))) (not $V87_cca$1) true)) (= $V84_p3$1 (ite (ite %init false (and $V86_ccont$1 (not $V86_ccont$0))) (and (and (not (ite %init false (and (and (and $igsw$1 (not $igsw$0)) (not $igsw$1)) $igsw$0))) (not $ccd$1)) (ite %init false (and $cconoff$1 (not $cconoff$0)))) true)) (= $V85_p4$1 (ite (ite %init false (and (and (and $igsw$1 (not $igsw$0)) (not $igsw$1)) $igsw$0)) (not $V87_cca$1) true)))) -; Universally quantified variables -(declare-fun $igsw$~1 () Bool) -(declare-fun $ccd$~1 () Bool) -(declare-fun $cconoff$~1 () Bool) -(declare-fun $bpa$~1 () Bool) -(declare-fun $cccanc$~1 () Bool) -(declare-fun $battok$~1 () Bool) -(declare-fun $gearok$~1 () Bool) -(declare-fun $qfok$~1 () Bool) -(declare-fun $sdok$~1 () Bool) -(declare-fun $accok$~1 () Bool) -(declare-fun $ccseti$~1 () Bool) -(declare-fun $ccsetd$~1 () Bool) -(declare-fun $ccr$~1 () Bool) -(declare-fun $vs$~1 () Int) -(declare-fun $V86_ccont$~1 () Bool) -(declare-fun $V87_cca$~1 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V82_p1$~1 () Bool) -(declare-fun $V83_p2$~1 () Bool) -(declare-fun $V84_p3$~1 () Bool) -(declare-fun $V85_p4$~1 () Bool) -(declare-fun $igsw$0 () Bool) -(declare-fun $ccd$0 () Bool) -(declare-fun $cconoff$0 () Bool) -(declare-fun $bpa$0 () Bool) -(declare-fun $cccanc$0 () Bool) -(declare-fun $battok$0 () Bool) -(declare-fun $gearok$0 () Bool) -(declare-fun $qfok$0 () Bool) -(declare-fun $sdok$0 () Bool) -(declare-fun $accok$0 () Bool) -(declare-fun $ccseti$0 () Bool) -(declare-fun $ccsetd$0 () Bool) -(declare-fun $ccr$0 () Bool) -(declare-fun $vs$0 () Int) -(declare-fun $V86_ccont$2 () Bool) -(declare-fun $V87_cca$2 () Bool) -(declare-fun $~flatten0$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $V82_p1$2 () Bool) -(declare-fun $V83_p2$2 () Bool) -(declare-fun $V84_p3$2 () Bool) -(declare-fun $V85_p4$2 () Bool) -(assert (and (T true $igsw$~1 $ccd$~1 $cconoff$~1 $bpa$~1 $cccanc$~1 $battok$~1 $gearok$~1 $qfok$~1 $sdok$~1 $accok$~1 $ccseti$~1 $ccsetd$~1 $ccr$~1 $vs$~1 $V86_ccont$~1 $V87_cca$~1 $~flatten0$~1 $OK$~1 $V82_p1$~1 $V83_p2$~1 $V84_p3$~1 $V85_p4$~1 $igsw$0 $ccd$0 $cconoff$0 $bpa$0 $cccanc$0 $battok$0 $gearok$0 $qfok$0 $sdok$0 $accok$0 $ccseti$0 $ccsetd$0 $ccr$0 $vs$0 $V86_ccont$2 $V87_cca$2 $~flatten0$2 $OK$2 $V82_p1$2 $V83_p2$2 $V84_p3$2 $V85_p4$2) $OK$2)) diff --git a/bench/tasks/fast_2_e8_460_e8_1920_base_s_part.smt2 b/bench/tasks/fast_2_e8_460_e8_1920_base_s_part.smt2 deleted file mode 100755 index 3ccdf0bb5..000000000 --- a/bench/tasks/fast_2_e8_460_e8_1920_base_s_part.smt2 +++ /dev/null @@ -1,49 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($igsw$0 Bool) ($ccd$0 Bool) ($cconoff$0 Bool) ($bpa$0 Bool) ($cccanc$0 Bool) ($battok$0 Bool) ($gearok$0 Bool) ($qfok$0 Bool) ($sdok$0 Bool) ($accok$0 Bool) ($ccseti$0 Bool) ($ccsetd$0 Bool) ($ccr$0 Bool) ($vs$0 Int) ($V86_ccont$0 Bool) ($V87_cca$0 Bool) ($~flatten0$0 Bool) ($OK$0 Bool) ($V82_p1$0 Bool) ($V83_p2$0 Bool) ($V84_p3$0 Bool) ($V85_p4$0 Bool) ($igsw$1 Bool) ($ccd$1 Bool) ($cconoff$1 Bool) ($bpa$1 Bool) ($cccanc$1 Bool) ($battok$1 Bool) ($gearok$1 Bool) ($qfok$1 Bool) ($sdok$1 Bool) ($accok$1 Bool) ($ccseti$1 Bool) ($ccsetd$1 Bool) ($ccr$1 Bool) ($vs$1 Int) ($V86_ccont$1 Bool) ($V87_cca$1 Bool) ($~flatten0$1 Bool) ($OK$1 Bool) ($V82_p1$1 Bool) ($V83_p2$1 Bool) ($V84_p3$1 Bool) ($V85_p4$1 Bool)) Bool (and (= $OK$1 (and (and (and $V82_p1$1 $V83_p2$1) $V84_p3$1) $V85_p4$1)) (= $V82_p1$1 (ite (ite %init false (and $V87_cca$1 (not $V87_cca$0))) (or (or (ite %init false (and $ccseti$1 (not $ccseti$0))) (ite %init false (and $ccsetd$1 (not $ccsetd$0)))) (ite %init false (and $ccr$1 (not $ccr$0)))) true)) (= $V83_p2$1 (ite (not (and (and (and (and (and (and (and (and (and $V86_ccont$1 (not $bpa$1)) $battok$1) $gearok$1) $qfok$1) (ite %init false (and $sdok$0 $sdok$1))) (<= 35 $vs$1)) (<= $vs$1 200)) (ite %init false (and $~flatten0$0 $accok$1))) (not $cccanc$1))) (not $V87_cca$1) true)) (= $V84_p3$1 (ite (ite %init false (and $V86_ccont$1 (not $V86_ccont$0))) (and (and (not (ite %init false (and (and (and $igsw$1 (not $igsw$0)) (not $igsw$1)) $igsw$0))) (not $ccd$1)) (ite %init false (and $cconoff$1 (not $cconoff$0)))) true)) (= $V85_p4$1 (ite (ite %init false (and (and (and $igsw$1 (not $igsw$0)) (not $igsw$1)) $igsw$0)) (not $V87_cca$1) true)))) -; Universally quantified variables -(declare-fun $igsw$~1 () Bool) -(declare-fun $ccd$~1 () Bool) -(declare-fun $cconoff$~1 () Bool) -(declare-fun $bpa$~1 () Bool) -(declare-fun $cccanc$~1 () Bool) -(declare-fun $battok$~1 () Bool) -(declare-fun $gearok$~1 () Bool) -(declare-fun $qfok$~1 () Bool) -(declare-fun $sdok$~1 () Bool) -(declare-fun $accok$~1 () Bool) -(declare-fun $ccseti$~1 () Bool) -(declare-fun $ccsetd$~1 () Bool) -(declare-fun $ccr$~1 () Bool) -(declare-fun $vs$~1 () Int) -(declare-fun $V86_ccont$~1 () Bool) -(declare-fun $V87_cca$~1 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V82_p1$~1 () Bool) -(declare-fun $V83_p2$~1 () Bool) -(declare-fun $V84_p3$~1 () Bool) -(declare-fun $V85_p4$~1 () Bool) -(declare-fun $igsw$0 () Bool) -(declare-fun $ccd$0 () Bool) -(declare-fun $cconoff$0 () Bool) -(declare-fun $bpa$0 () Bool) -(declare-fun $cccanc$0 () Bool) -(declare-fun $battok$0 () Bool) -(declare-fun $gearok$0 () Bool) -(declare-fun $qfok$0 () Bool) -(declare-fun $sdok$0 () Bool) -(declare-fun $accok$0 () Bool) -(declare-fun $ccseti$0 () Bool) -(declare-fun $ccsetd$0 () Bool) -(declare-fun $ccr$0 () Bool) -(declare-fun $vs$0 () Int) -(declare-fun $V86_ccont$0 () Bool) -(declare-fun $V87_cca$0 () Bool) -(declare-fun $~flatten0$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $V82_p1$0 () Bool) -(declare-fun $V83_p2$0 () Bool) -(declare-fun $V84_p3$0 () Bool) -(declare-fun $V85_p4$0 () Bool) -(assert (T true $igsw$~1 $ccd$~1 $cconoff$~1 $bpa$~1 $cccanc$~1 $battok$~1 $gearok$~1 $qfok$~1 $sdok$~1 $accok$~1 $ccseti$~1 $ccsetd$~1 $ccr$~1 $vs$~1 $V86_ccont$~1 $V87_cca$~1 $~flatten0$~1 $OK$~1 $V82_p1$~1 $V83_p2$~1 $V84_p3$~1 $V85_p4$~1 $igsw$0 $ccd$0 $cconoff$0 $bpa$0 $cccanc$0 $battok$0 $gearok$0 $qfok$0 $sdok$0 $accok$0 $ccseti$0 $ccsetd$0 $ccr$0 $vs$0 $V86_ccont$0 $V87_cca$0 $~flatten0$0 $OK$0 $V82_p1$0 $V83_p2$0 $V84_p3$0 $V85_p4$0)) diff --git a/bench/tasks/fast_2_e8_460_e8_1920_base_t_part.smt2 b/bench/tasks/fast_2_e8_460_e8_1920_base_t_part.smt2 deleted file mode 100755 index 52e14fcad..000000000 --- a/bench/tasks/fast_2_e8_460_e8_1920_base_t_part.smt2 +++ /dev/null @@ -1,49 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($igsw$0 Bool) ($ccd$0 Bool) ($cconoff$0 Bool) ($bpa$0 Bool) ($cccanc$0 Bool) ($battok$0 Bool) ($gearok$0 Bool) ($qfok$0 Bool) ($sdok$0 Bool) ($accok$0 Bool) ($ccseti$0 Bool) ($ccsetd$0 Bool) ($ccr$0 Bool) ($vs$0 Int) ($V86_ccont$0 Bool) ($V87_cca$0 Bool) ($~flatten0$0 Bool) ($OK$0 Bool) ($V82_p1$0 Bool) ($V83_p2$0 Bool) ($V84_p3$0 Bool) ($V85_p4$0 Bool) ($igsw$1 Bool) ($ccd$1 Bool) ($cconoff$1 Bool) ($bpa$1 Bool) ($cccanc$1 Bool) ($battok$1 Bool) ($gearok$1 Bool) ($qfok$1 Bool) ($sdok$1 Bool) ($accok$1 Bool) ($ccseti$1 Bool) ($ccsetd$1 Bool) ($ccr$1 Bool) ($vs$1 Int) ($V86_ccont$1 Bool) ($V87_cca$1 Bool) ($~flatten0$1 Bool) ($OK$1 Bool) ($V82_p1$1 Bool) ($V83_p2$1 Bool) ($V84_p3$1 Bool) ($V85_p4$1 Bool)) Bool (and (= $OK$1 (and (and (and $V82_p1$1 $V83_p2$1) $V84_p3$1) $V85_p4$1)) (= $V82_p1$1 (ite (ite %init false (and $V87_cca$1 (not $V87_cca$0))) (or (or (ite %init false (and $ccseti$1 (not $ccseti$0))) (ite %init false (and $ccsetd$1 (not $ccsetd$0)))) (ite %init false (and $ccr$1 (not $ccr$0)))) true)) (= $V83_p2$1 (ite (not (and (and (and (and (and (and (and (and (and $V86_ccont$1 (not $bpa$1)) $battok$1) $gearok$1) $qfok$1) (ite %init false (and $sdok$0 $sdok$1))) (<= 35 $vs$1)) (<= $vs$1 200)) (ite %init false (and $~flatten0$0 $accok$1))) (not $cccanc$1))) (not $V87_cca$1) true)) (= $V84_p3$1 (ite (ite %init false (and $V86_ccont$1 (not $V86_ccont$0))) (and (and (not (ite %init false (and (and (and $igsw$1 (not $igsw$0)) (not $igsw$1)) $igsw$0))) (not $ccd$1)) (ite %init false (and $cconoff$1 (not $cconoff$0)))) true)) (= $V85_p4$1 (ite (ite %init false (and (and (and $igsw$1 (not $igsw$0)) (not $igsw$1)) $igsw$0)) (not $V87_cca$1) true)))) -; Universally quantified variables -(declare-fun $igsw$~1 () Bool) -(declare-fun $ccd$~1 () Bool) -(declare-fun $cconoff$~1 () Bool) -(declare-fun $bpa$~1 () Bool) -(declare-fun $cccanc$~1 () Bool) -(declare-fun $battok$~1 () Bool) -(declare-fun $gearok$~1 () Bool) -(declare-fun $qfok$~1 () Bool) -(declare-fun $sdok$~1 () Bool) -(declare-fun $accok$~1 () Bool) -(declare-fun $ccseti$~1 () Bool) -(declare-fun $ccsetd$~1 () Bool) -(declare-fun $ccr$~1 () Bool) -(declare-fun $vs$~1 () Int) -(declare-fun $V86_ccont$~1 () Bool) -(declare-fun $V87_cca$~1 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V82_p1$~1 () Bool) -(declare-fun $V83_p2$~1 () Bool) -(declare-fun $V84_p3$~1 () Bool) -(declare-fun $V85_p4$~1 () Bool) -(declare-fun $igsw$0 () Bool) -(declare-fun $ccd$0 () Bool) -(declare-fun $cconoff$0 () Bool) -(declare-fun $bpa$0 () Bool) -(declare-fun $cccanc$0 () Bool) -(declare-fun $battok$0 () Bool) -(declare-fun $gearok$0 () Bool) -(declare-fun $qfok$0 () Bool) -(declare-fun $sdok$0 () Bool) -(declare-fun $accok$0 () Bool) -(declare-fun $ccseti$0 () Bool) -(declare-fun $ccsetd$0 () Bool) -(declare-fun $ccr$0 () Bool) -(declare-fun $vs$0 () Int) -(declare-fun $V86_ccont$2 () Bool) -(declare-fun $V87_cca$2 () Bool) -(declare-fun $~flatten0$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $V82_p1$2 () Bool) -(declare-fun $V83_p2$2 () Bool) -(declare-fun $V84_p3$2 () Bool) -(declare-fun $V85_p4$2 () Bool) -(assert (and (T true $igsw$~1 $ccd$~1 $cconoff$~1 $bpa$~1 $cccanc$~1 $battok$~1 $gearok$~1 $qfok$~1 $sdok$~1 $accok$~1 $ccseti$~1 $ccsetd$~1 $ccr$~1 $vs$~1 $V86_ccont$~1 $V87_cca$~1 $~flatten0$~1 $OK$~1 $V82_p1$~1 $V83_p2$~1 $V84_p3$~1 $V85_p4$~1 $igsw$0 $ccd$0 $cconoff$0 $bpa$0 $cccanc$0 $battok$0 $gearok$0 $qfok$0 $sdok$0 $accok$0 $ccseti$0 $ccsetd$0 $ccr$0 $vs$0 $V86_ccont$2 $V87_cca$2 $~flatten0$2 $OK$2 $V82_p1$2 $V83_p2$2 $V84_p3$2 $V85_p4$2) $OK$2)) diff --git a/bench/tasks/fast_2_e8_460_e8_1920_extend_s_part.smt2 b/bench/tasks/fast_2_e8_460_e8_1920_extend_s_part.smt2 deleted file mode 100755 index 5e8ee72f3..000000000 --- a/bench/tasks/fast_2_e8_460_e8_1920_extend_s_part.smt2 +++ /dev/null @@ -1,50 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($igsw$0 Bool) ($ccd$0 Bool) ($cconoff$0 Bool) ($bpa$0 Bool) ($cccanc$0 Bool) ($battok$0 Bool) ($gearok$0 Bool) ($qfok$0 Bool) ($sdok$0 Bool) ($accok$0 Bool) ($ccseti$0 Bool) ($ccsetd$0 Bool) ($ccr$0 Bool) ($vs$0 Int) ($V86_ccont$0 Bool) ($V87_cca$0 Bool) ($~flatten0$0 Bool) ($OK$0 Bool) ($V82_p1$0 Bool) ($V83_p2$0 Bool) ($V84_p3$0 Bool) ($V85_p4$0 Bool) ($igsw$1 Bool) ($ccd$1 Bool) ($cconoff$1 Bool) ($bpa$1 Bool) ($cccanc$1 Bool) ($battok$1 Bool) ($gearok$1 Bool) ($qfok$1 Bool) ($sdok$1 Bool) ($accok$1 Bool) ($ccseti$1 Bool) ($ccsetd$1 Bool) ($ccr$1 Bool) ($vs$1 Int) ($V86_ccont$1 Bool) ($V87_cca$1 Bool) ($~flatten0$1 Bool) ($OK$1 Bool) ($V82_p1$1 Bool) ($V83_p2$1 Bool) ($V84_p3$1 Bool) ($V85_p4$1 Bool)) Bool (and (= $OK$1 (and (and (and $V82_p1$1 $V83_p2$1) $V84_p3$1) $V85_p4$1)) (= $V82_p1$1 (ite (ite %init false (and $V87_cca$1 (not $V87_cca$0))) (or (or (ite %init false (and $ccseti$1 (not $ccseti$0))) (ite %init false (and $ccsetd$1 (not $ccsetd$0)))) (ite %init false (and $ccr$1 (not $ccr$0)))) true)) (= $V83_p2$1 (ite (not (and (and (and (and (and (and (and (and (and $V86_ccont$1 (not $bpa$1)) $battok$1) $gearok$1) $qfok$1) (ite %init false (and $sdok$0 $sdok$1))) (<= 35 $vs$1)) (<= $vs$1 200)) (ite %init false (and $~flatten0$0 $accok$1))) (not $cccanc$1))) (not $V87_cca$1) true)) (= $V84_p3$1 (ite (ite %init false (and $V86_ccont$1 (not $V86_ccont$0))) (and (and (not (ite %init false (and (and (and $igsw$1 (not $igsw$0)) (not $igsw$1)) $igsw$0))) (not $ccd$1)) (ite %init false (and $cconoff$1 (not $cconoff$0)))) true)) (= $V85_p4$1 (ite (ite %init false (and (and (and $igsw$1 (not $igsw$0)) (not $igsw$1)) $igsw$0)) (not $V87_cca$1) true)))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $igsw$~1 () Bool) -(declare-fun $ccd$~1 () Bool) -(declare-fun $cconoff$~1 () Bool) -(declare-fun $bpa$~1 () Bool) -(declare-fun $cccanc$~1 () Bool) -(declare-fun $battok$~1 () Bool) -(declare-fun $gearok$~1 () Bool) -(declare-fun $qfok$~1 () Bool) -(declare-fun $sdok$~1 () Bool) -(declare-fun $accok$~1 () Bool) -(declare-fun $ccseti$~1 () Bool) -(declare-fun $ccsetd$~1 () Bool) -(declare-fun $ccr$~1 () Bool) -(declare-fun $vs$~1 () Int) -(declare-fun $V86_ccont$~1 () Bool) -(declare-fun $V87_cca$~1 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V82_p1$~1 () Bool) -(declare-fun $V83_p2$~1 () Bool) -(declare-fun $V84_p3$~1 () Bool) -(declare-fun $V85_p4$~1 () Bool) -(declare-fun $igsw$0 () Bool) -(declare-fun $ccd$0 () Bool) -(declare-fun $cconoff$0 () Bool) -(declare-fun $bpa$0 () Bool) -(declare-fun $cccanc$0 () Bool) -(declare-fun $battok$0 () Bool) -(declare-fun $gearok$0 () Bool) -(declare-fun $qfok$0 () Bool) -(declare-fun $sdok$0 () Bool) -(declare-fun $accok$0 () Bool) -(declare-fun $ccseti$0 () Bool) -(declare-fun $ccsetd$0 () Bool) -(declare-fun $ccr$0 () Bool) -(declare-fun $vs$0 () Int) -(declare-fun $V86_ccont$0 () Bool) -(declare-fun $V87_cca$0 () Bool) -(declare-fun $~flatten0$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $V82_p1$0 () Bool) -(declare-fun $V83_p2$0 () Bool) -(declare-fun $V84_p3$0 () Bool) -(declare-fun $V85_p4$0 () Bool) -(assert (T %init $igsw$~1 $ccd$~1 $cconoff$~1 $bpa$~1 $cccanc$~1 $battok$~1 $gearok$~1 $qfok$~1 $sdok$~1 $accok$~1 $ccseti$~1 $ccsetd$~1 $ccr$~1 $vs$~1 $V86_ccont$~1 $V87_cca$~1 $~flatten0$~1 $OK$~1 $V82_p1$~1 $V83_p2$~1 $V84_p3$~1 $V85_p4$~1 $igsw$0 $ccd$0 $cconoff$0 $bpa$0 $cccanc$0 $battok$0 $gearok$0 $qfok$0 $sdok$0 $accok$0 $ccseti$0 $ccsetd$0 $ccr$0 $vs$0 $V86_ccont$0 $V87_cca$0 $~flatten0$0 $OK$0 $V82_p1$0 $V83_p2$0 $V84_p3$0 $V85_p4$0)) diff --git a/bench/tasks/fast_2_e8_460_e8_1920_extend_t_part.smt2 b/bench/tasks/fast_2_e8_460_e8_1920_extend_t_part.smt2 deleted file mode 100755 index f01f7f05e..000000000 --- a/bench/tasks/fast_2_e8_460_e8_1920_extend_t_part.smt2 +++ /dev/null @@ -1,50 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($igsw$0 Bool) ($ccd$0 Bool) ($cconoff$0 Bool) ($bpa$0 Bool) ($cccanc$0 Bool) ($battok$0 Bool) ($gearok$0 Bool) ($qfok$0 Bool) ($sdok$0 Bool) ($accok$0 Bool) ($ccseti$0 Bool) ($ccsetd$0 Bool) ($ccr$0 Bool) ($vs$0 Int) ($V86_ccont$0 Bool) ($V87_cca$0 Bool) ($~flatten0$0 Bool) ($OK$0 Bool) ($V82_p1$0 Bool) ($V83_p2$0 Bool) ($V84_p3$0 Bool) ($V85_p4$0 Bool) ($igsw$1 Bool) ($ccd$1 Bool) ($cconoff$1 Bool) ($bpa$1 Bool) ($cccanc$1 Bool) ($battok$1 Bool) ($gearok$1 Bool) ($qfok$1 Bool) ($sdok$1 Bool) ($accok$1 Bool) ($ccseti$1 Bool) ($ccsetd$1 Bool) ($ccr$1 Bool) ($vs$1 Int) ($V86_ccont$1 Bool) ($V87_cca$1 Bool) ($~flatten0$1 Bool) ($OK$1 Bool) ($V82_p1$1 Bool) ($V83_p2$1 Bool) ($V84_p3$1 Bool) ($V85_p4$1 Bool)) Bool (and (= $OK$1 (and (and (and $V82_p1$1 $V83_p2$1) $V84_p3$1) $V85_p4$1)) (= $V82_p1$1 (ite (ite %init false (and $V87_cca$1 (not $V87_cca$0))) (or (or (ite %init false (and $ccseti$1 (not $ccseti$0))) (ite %init false (and $ccsetd$1 (not $ccsetd$0)))) (ite %init false (and $ccr$1 (not $ccr$0)))) true)) (= $V83_p2$1 (ite (not (and (and (and (and (and (and (and (and (and $V86_ccont$1 (not $bpa$1)) $battok$1) $gearok$1) $qfok$1) (ite %init false (and $sdok$0 $sdok$1))) (<= 35 $vs$1)) (<= $vs$1 200)) (ite %init false (and $~flatten0$0 $accok$1))) (not $cccanc$1))) (not $V87_cca$1) true)) (= $V84_p3$1 (ite (ite %init false (and $V86_ccont$1 (not $V86_ccont$0))) (and (and (not (ite %init false (and (and (and $igsw$1 (not $igsw$0)) (not $igsw$1)) $igsw$0))) (not $ccd$1)) (ite %init false (and $cconoff$1 (not $cconoff$0)))) true)) (= $V85_p4$1 (ite (ite %init false (and (and (and $igsw$1 (not $igsw$0)) (not $igsw$1)) $igsw$0)) (not $V87_cca$1) true)))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $igsw$~1 () Bool) -(declare-fun $ccd$~1 () Bool) -(declare-fun $cconoff$~1 () Bool) -(declare-fun $bpa$~1 () Bool) -(declare-fun $cccanc$~1 () Bool) -(declare-fun $battok$~1 () Bool) -(declare-fun $gearok$~1 () Bool) -(declare-fun $qfok$~1 () Bool) -(declare-fun $sdok$~1 () Bool) -(declare-fun $accok$~1 () Bool) -(declare-fun $ccseti$~1 () Bool) -(declare-fun $ccsetd$~1 () Bool) -(declare-fun $ccr$~1 () Bool) -(declare-fun $vs$~1 () Int) -(declare-fun $V86_ccont$~1 () Bool) -(declare-fun $V87_cca$~1 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V82_p1$~1 () Bool) -(declare-fun $V83_p2$~1 () Bool) -(declare-fun $V84_p3$~1 () Bool) -(declare-fun $V85_p4$~1 () Bool) -(declare-fun $igsw$0 () Bool) -(declare-fun $ccd$0 () Bool) -(declare-fun $cconoff$0 () Bool) -(declare-fun $bpa$0 () Bool) -(declare-fun $cccanc$0 () Bool) -(declare-fun $battok$0 () Bool) -(declare-fun $gearok$0 () Bool) -(declare-fun $qfok$0 () Bool) -(declare-fun $sdok$0 () Bool) -(declare-fun $accok$0 () Bool) -(declare-fun $ccseti$0 () Bool) -(declare-fun $ccsetd$0 () Bool) -(declare-fun $ccr$0 () Bool) -(declare-fun $vs$0 () Int) -(declare-fun $V86_ccont$2 () Bool) -(declare-fun $V87_cca$2 () Bool) -(declare-fun $~flatten0$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $V82_p1$2 () Bool) -(declare-fun $V83_p2$2 () Bool) -(declare-fun $V84_p3$2 () Bool) -(declare-fun $V85_p4$2 () Bool) -(assert (and (T %init $igsw$~1 $ccd$~1 $cconoff$~1 $bpa$~1 $cccanc$~1 $battok$~1 $gearok$~1 $qfok$~1 $sdok$~1 $accok$~1 $ccseti$~1 $ccsetd$~1 $ccr$~1 $vs$~1 $V86_ccont$~1 $V87_cca$~1 $~flatten0$~1 $OK$~1 $V82_p1$~1 $V83_p2$~1 $V84_p3$~1 $V85_p4$~1 $igsw$0 $ccd$0 $cconoff$0 $bpa$0 $cccanc$0 $battok$0 $gearok$0 $qfok$0 $sdok$0 $accok$0 $ccseti$0 $ccsetd$0 $ccr$0 $vs$0 $V86_ccont$2 $V87_cca$2 $~flatten0$2 $OK$2 $V82_p1$2 $V83_p2$2 $V84_p3$2 $V85_p4$2) $OK$2)) diff --git a/bench/tasks/fast_2_e8_460_extend_s_part.smt2 b/bench/tasks/fast_2_e8_460_extend_s_part.smt2 deleted file mode 100755 index 5e8ee72f3..000000000 --- a/bench/tasks/fast_2_e8_460_extend_s_part.smt2 +++ /dev/null @@ -1,50 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($igsw$0 Bool) ($ccd$0 Bool) ($cconoff$0 Bool) ($bpa$0 Bool) ($cccanc$0 Bool) ($battok$0 Bool) ($gearok$0 Bool) ($qfok$0 Bool) ($sdok$0 Bool) ($accok$0 Bool) ($ccseti$0 Bool) ($ccsetd$0 Bool) ($ccr$0 Bool) ($vs$0 Int) ($V86_ccont$0 Bool) ($V87_cca$0 Bool) ($~flatten0$0 Bool) ($OK$0 Bool) ($V82_p1$0 Bool) ($V83_p2$0 Bool) ($V84_p3$0 Bool) ($V85_p4$0 Bool) ($igsw$1 Bool) ($ccd$1 Bool) ($cconoff$1 Bool) ($bpa$1 Bool) ($cccanc$1 Bool) ($battok$1 Bool) ($gearok$1 Bool) ($qfok$1 Bool) ($sdok$1 Bool) ($accok$1 Bool) ($ccseti$1 Bool) ($ccsetd$1 Bool) ($ccr$1 Bool) ($vs$1 Int) ($V86_ccont$1 Bool) ($V87_cca$1 Bool) ($~flatten0$1 Bool) ($OK$1 Bool) ($V82_p1$1 Bool) ($V83_p2$1 Bool) ($V84_p3$1 Bool) ($V85_p4$1 Bool)) Bool (and (= $OK$1 (and (and (and $V82_p1$1 $V83_p2$1) $V84_p3$1) $V85_p4$1)) (= $V82_p1$1 (ite (ite %init false (and $V87_cca$1 (not $V87_cca$0))) (or (or (ite %init false (and $ccseti$1 (not $ccseti$0))) (ite %init false (and $ccsetd$1 (not $ccsetd$0)))) (ite %init false (and $ccr$1 (not $ccr$0)))) true)) (= $V83_p2$1 (ite (not (and (and (and (and (and (and (and (and (and $V86_ccont$1 (not $bpa$1)) $battok$1) $gearok$1) $qfok$1) (ite %init false (and $sdok$0 $sdok$1))) (<= 35 $vs$1)) (<= $vs$1 200)) (ite %init false (and $~flatten0$0 $accok$1))) (not $cccanc$1))) (not $V87_cca$1) true)) (= $V84_p3$1 (ite (ite %init false (and $V86_ccont$1 (not $V86_ccont$0))) (and (and (not (ite %init false (and (and (and $igsw$1 (not $igsw$0)) (not $igsw$1)) $igsw$0))) (not $ccd$1)) (ite %init false (and $cconoff$1 (not $cconoff$0)))) true)) (= $V85_p4$1 (ite (ite %init false (and (and (and $igsw$1 (not $igsw$0)) (not $igsw$1)) $igsw$0)) (not $V87_cca$1) true)))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $igsw$~1 () Bool) -(declare-fun $ccd$~1 () Bool) -(declare-fun $cconoff$~1 () Bool) -(declare-fun $bpa$~1 () Bool) -(declare-fun $cccanc$~1 () Bool) -(declare-fun $battok$~1 () Bool) -(declare-fun $gearok$~1 () Bool) -(declare-fun $qfok$~1 () Bool) -(declare-fun $sdok$~1 () Bool) -(declare-fun $accok$~1 () Bool) -(declare-fun $ccseti$~1 () Bool) -(declare-fun $ccsetd$~1 () Bool) -(declare-fun $ccr$~1 () Bool) -(declare-fun $vs$~1 () Int) -(declare-fun $V86_ccont$~1 () Bool) -(declare-fun $V87_cca$~1 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V82_p1$~1 () Bool) -(declare-fun $V83_p2$~1 () Bool) -(declare-fun $V84_p3$~1 () Bool) -(declare-fun $V85_p4$~1 () Bool) -(declare-fun $igsw$0 () Bool) -(declare-fun $ccd$0 () Bool) -(declare-fun $cconoff$0 () Bool) -(declare-fun $bpa$0 () Bool) -(declare-fun $cccanc$0 () Bool) -(declare-fun $battok$0 () Bool) -(declare-fun $gearok$0 () Bool) -(declare-fun $qfok$0 () Bool) -(declare-fun $sdok$0 () Bool) -(declare-fun $accok$0 () Bool) -(declare-fun $ccseti$0 () Bool) -(declare-fun $ccsetd$0 () Bool) -(declare-fun $ccr$0 () Bool) -(declare-fun $vs$0 () Int) -(declare-fun $V86_ccont$0 () Bool) -(declare-fun $V87_cca$0 () Bool) -(declare-fun $~flatten0$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $V82_p1$0 () Bool) -(declare-fun $V83_p2$0 () Bool) -(declare-fun $V84_p3$0 () Bool) -(declare-fun $V85_p4$0 () Bool) -(assert (T %init $igsw$~1 $ccd$~1 $cconoff$~1 $bpa$~1 $cccanc$~1 $battok$~1 $gearok$~1 $qfok$~1 $sdok$~1 $accok$~1 $ccseti$~1 $ccsetd$~1 $ccr$~1 $vs$~1 $V86_ccont$~1 $V87_cca$~1 $~flatten0$~1 $OK$~1 $V82_p1$~1 $V83_p2$~1 $V84_p3$~1 $V85_p4$~1 $igsw$0 $ccd$0 $cconoff$0 $bpa$0 $cccanc$0 $battok$0 $gearok$0 $qfok$0 $sdok$0 $accok$0 $ccseti$0 $ccsetd$0 $ccr$0 $vs$0 $V86_ccont$0 $V87_cca$0 $~flatten0$0 $OK$0 $V82_p1$0 $V83_p2$0 $V84_p3$0 $V85_p4$0)) diff --git a/bench/tasks/fast_2_e8_460_extend_t_part.smt2 b/bench/tasks/fast_2_e8_460_extend_t_part.smt2 deleted file mode 100755 index f01f7f05e..000000000 --- a/bench/tasks/fast_2_e8_460_extend_t_part.smt2 +++ /dev/null @@ -1,50 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($igsw$0 Bool) ($ccd$0 Bool) ($cconoff$0 Bool) ($bpa$0 Bool) ($cccanc$0 Bool) ($battok$0 Bool) ($gearok$0 Bool) ($qfok$0 Bool) ($sdok$0 Bool) ($accok$0 Bool) ($ccseti$0 Bool) ($ccsetd$0 Bool) ($ccr$0 Bool) ($vs$0 Int) ($V86_ccont$0 Bool) ($V87_cca$0 Bool) ($~flatten0$0 Bool) ($OK$0 Bool) ($V82_p1$0 Bool) ($V83_p2$0 Bool) ($V84_p3$0 Bool) ($V85_p4$0 Bool) ($igsw$1 Bool) ($ccd$1 Bool) ($cconoff$1 Bool) ($bpa$1 Bool) ($cccanc$1 Bool) ($battok$1 Bool) ($gearok$1 Bool) ($qfok$1 Bool) ($sdok$1 Bool) ($accok$1 Bool) ($ccseti$1 Bool) ($ccsetd$1 Bool) ($ccr$1 Bool) ($vs$1 Int) ($V86_ccont$1 Bool) ($V87_cca$1 Bool) ($~flatten0$1 Bool) ($OK$1 Bool) ($V82_p1$1 Bool) ($V83_p2$1 Bool) ($V84_p3$1 Bool) ($V85_p4$1 Bool)) Bool (and (= $OK$1 (and (and (and $V82_p1$1 $V83_p2$1) $V84_p3$1) $V85_p4$1)) (= $V82_p1$1 (ite (ite %init false (and $V87_cca$1 (not $V87_cca$0))) (or (or (ite %init false (and $ccseti$1 (not $ccseti$0))) (ite %init false (and $ccsetd$1 (not $ccsetd$0)))) (ite %init false (and $ccr$1 (not $ccr$0)))) true)) (= $V83_p2$1 (ite (not (and (and (and (and (and (and (and (and (and $V86_ccont$1 (not $bpa$1)) $battok$1) $gearok$1) $qfok$1) (ite %init false (and $sdok$0 $sdok$1))) (<= 35 $vs$1)) (<= $vs$1 200)) (ite %init false (and $~flatten0$0 $accok$1))) (not $cccanc$1))) (not $V87_cca$1) true)) (= $V84_p3$1 (ite (ite %init false (and $V86_ccont$1 (not $V86_ccont$0))) (and (and (not (ite %init false (and (and (and $igsw$1 (not $igsw$0)) (not $igsw$1)) $igsw$0))) (not $ccd$1)) (ite %init false (and $cconoff$1 (not $cconoff$0)))) true)) (= $V85_p4$1 (ite (ite %init false (and (and (and $igsw$1 (not $igsw$0)) (not $igsw$1)) $igsw$0)) (not $V87_cca$1) true)))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $igsw$~1 () Bool) -(declare-fun $ccd$~1 () Bool) -(declare-fun $cconoff$~1 () Bool) -(declare-fun $bpa$~1 () Bool) -(declare-fun $cccanc$~1 () Bool) -(declare-fun $battok$~1 () Bool) -(declare-fun $gearok$~1 () Bool) -(declare-fun $qfok$~1 () Bool) -(declare-fun $sdok$~1 () Bool) -(declare-fun $accok$~1 () Bool) -(declare-fun $ccseti$~1 () Bool) -(declare-fun $ccsetd$~1 () Bool) -(declare-fun $ccr$~1 () Bool) -(declare-fun $vs$~1 () Int) -(declare-fun $V86_ccont$~1 () Bool) -(declare-fun $V87_cca$~1 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V82_p1$~1 () Bool) -(declare-fun $V83_p2$~1 () Bool) -(declare-fun $V84_p3$~1 () Bool) -(declare-fun $V85_p4$~1 () Bool) -(declare-fun $igsw$0 () Bool) -(declare-fun $ccd$0 () Bool) -(declare-fun $cconoff$0 () Bool) -(declare-fun $bpa$0 () Bool) -(declare-fun $cccanc$0 () Bool) -(declare-fun $battok$0 () Bool) -(declare-fun $gearok$0 () Bool) -(declare-fun $qfok$0 () Bool) -(declare-fun $sdok$0 () Bool) -(declare-fun $accok$0 () Bool) -(declare-fun $ccseti$0 () Bool) -(declare-fun $ccsetd$0 () Bool) -(declare-fun $ccr$0 () Bool) -(declare-fun $vs$0 () Int) -(declare-fun $V86_ccont$2 () Bool) -(declare-fun $V87_cca$2 () Bool) -(declare-fun $~flatten0$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $V82_p1$2 () Bool) -(declare-fun $V83_p2$2 () Bool) -(declare-fun $V84_p3$2 () Bool) -(declare-fun $V85_p4$2 () Bool) -(assert (and (T %init $igsw$~1 $ccd$~1 $cconoff$~1 $bpa$~1 $cccanc$~1 $battok$~1 $gearok$~1 $qfok$~1 $sdok$~1 $accok$~1 $ccseti$~1 $ccsetd$~1 $ccr$~1 $vs$~1 $V86_ccont$~1 $V87_cca$~1 $~flatten0$~1 $OK$~1 $V82_p1$~1 $V83_p2$~1 $V84_p3$~1 $V85_p4$~1 $igsw$0 $ccd$0 $cconoff$0 $bpa$0 $cccanc$0 $battok$0 $gearok$0 $qfok$0 $sdok$0 $accok$0 $ccseti$0 $ccsetd$0 $ccr$0 $vs$0 $V86_ccont$2 $V87_cca$2 $~flatten0$2 $OK$2 $V82_p1$2 $V83_p2$2 $V84_p3$2 $V85_p4$2) $OK$2)) diff --git a/bench/tasks/hysteresis_1_base_s_part.smt2 b/bench/tasks/hysteresis_1_base_s_part.smt2 deleted file mode 100755 index b3917e712..000000000 --- a/bench/tasks/hysteresis_1_base_s_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (not (and $V19_late$1 $V20_early$1)))) -; Universally quantified variables -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$0 () Bool) -(declare-fun $V20_early$0 () Bool) -(declare-fun $OK$0 () Bool) -(assert (T true $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$0 $V20_early$0 $OK$0)) diff --git a/bench/tasks/hysteresis_1_base_t_part.smt2 b/bench/tasks/hysteresis_1_base_t_part.smt2 deleted file mode 100755 index b797196f0..000000000 --- a/bench/tasks/hysteresis_1_base_t_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (not (and $V19_late$1 $V20_early$1)))) -; Universally quantified variables -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $V20_early$2 () Bool) -(declare-fun $OK$2 () Bool) -(assert (and (T true $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$2 $V20_early$2 $OK$2) $OK$2)) diff --git a/bench/tasks/hysteresis_1_extend_s_part.smt2 b/bench/tasks/hysteresis_1_extend_s_part.smt2 deleted file mode 100755 index 0399476f3..000000000 --- a/bench/tasks/hysteresis_1_extend_s_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (not (and $V19_late$1 $V20_early$1)))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$0 () Bool) -(declare-fun $V20_early$0 () Bool) -(declare-fun $OK$0 () Bool) -(assert (T %init $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$0 $V20_early$0 $OK$0)) diff --git a/bench/tasks/hysteresis_1_extend_t_part.smt2 b/bench/tasks/hysteresis_1_extend_t_part.smt2 deleted file mode 100755 index 2ecdd03ce..000000000 --- a/bench/tasks/hysteresis_1_extend_t_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (not (and $V19_late$1 $V20_early$1)))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $V20_early$2 () Bool) -(declare-fun $OK$2 () Bool) -(assert (and (T %init $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$2 $V20_early$2 $OK$2) $OK$2)) diff --git a/bench/tasks/hysteresis_2_base_s_part.smt2 b/bench/tasks/hysteresis_2_base_s_part.smt2 deleted file mode 100755 index 5109e5383..000000000 --- a/bench/tasks/hysteresis_2_base_s_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite %init true (not (and $V19_late$1 $V20_early$0))))) -; Universally quantified variables -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$0 () Bool) -(declare-fun $V20_early$0 () Bool) -(declare-fun $OK$0 () Bool) -(assert (T true $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$0 $V20_early$0 $OK$0)) diff --git a/bench/tasks/hysteresis_2_base_t_part.smt2 b/bench/tasks/hysteresis_2_base_t_part.smt2 deleted file mode 100755 index dbd3d0c79..000000000 --- a/bench/tasks/hysteresis_2_base_t_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite %init true (not (and $V19_late$1 $V20_early$0))))) -; Universally quantified variables -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $V20_early$2 () Bool) -(declare-fun $OK$2 () Bool) -(assert (and (T true $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$2 $V20_early$2 $OK$2) $OK$2)) diff --git a/bench/tasks/hysteresis_2_extend_s_part.smt2 b/bench/tasks/hysteresis_2_extend_s_part.smt2 deleted file mode 100755 index 8eaaa8f75..000000000 --- a/bench/tasks/hysteresis_2_extend_s_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite %init true (not (and $V19_late$1 $V20_early$0))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$0 () Bool) -(declare-fun $V20_early$0 () Bool) -(declare-fun $OK$0 () Bool) -(assert (T %init $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$0 $V20_early$0 $OK$0)) diff --git a/bench/tasks/hysteresis_2_extend_t_part.smt2 b/bench/tasks/hysteresis_2_extend_t_part.smt2 deleted file mode 100755 index 0e90188c0..000000000 --- a/bench/tasks/hysteresis_2_extend_t_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite %init true (not (and $V19_late$1 $V20_early$0))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $V20_early$2 () Bool) -(declare-fun $OK$2 () Bool) -(assert (and (T %init $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$2 $V20_early$2 $OK$2) $OK$2)) diff --git a/bench/tasks/hysteresis_3_base_s_part.smt2 b/bench/tasks/hysteresis_3_base_s_part.smt2 deleted file mode 100755 index fc1afa28d..000000000 --- a/bench/tasks/hysteresis_3_base_s_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite %init true (not (and $V19_late$0 $V20_early$1))))) -; Universally quantified variables -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$0 () Bool) -(declare-fun $V20_early$0 () Bool) -(declare-fun $OK$0 () Bool) -(assert (T true $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$0 $V20_early$0 $OK$0)) diff --git a/bench/tasks/hysteresis_3_base_t_part.smt2 b/bench/tasks/hysteresis_3_base_t_part.smt2 deleted file mode 100755 index 9270b666a..000000000 --- a/bench/tasks/hysteresis_3_base_t_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite %init true (not (and $V19_late$0 $V20_early$1))))) -; Universally quantified variables -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $V20_early$2 () Bool) -(declare-fun $OK$2 () Bool) -(assert (and (T true $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$2 $V20_early$2 $OK$2) $OK$2)) diff --git a/bench/tasks/hysteresis_3_extend_s_part.smt2 b/bench/tasks/hysteresis_3_extend_s_part.smt2 deleted file mode 100755 index c5b622fd3..000000000 --- a/bench/tasks/hysteresis_3_extend_s_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite %init true (not (and $V19_late$0 $V20_early$1))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$0 () Bool) -(declare-fun $V20_early$0 () Bool) -(declare-fun $OK$0 () Bool) -(assert (T %init $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$0 $V20_early$0 $OK$0)) diff --git a/bench/tasks/hysteresis_3_extend_t_part.smt2 b/bench/tasks/hysteresis_3_extend_t_part.smt2 deleted file mode 100755 index cbd3049e1..000000000 --- a/bench/tasks/hysteresis_3_extend_t_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (ite %init true (not (and $V19_late$0 $V20_early$1))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $V20_early$2 () Bool) -(declare-fun $OK$2 () Bool) -(assert (and (T %init $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$2 $V20_early$2 $OK$2) $OK$2)) diff --git a/bench/tasks/hysteresis_all_base_s_part.smt2 b/bench/tasks/hysteresis_all_base_s_part.smt2 deleted file mode 100755 index 2a728e565..000000000 --- a/bench/tasks/hysteresis_all_base_s_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (and (and (not (and $V19_late$1 $V20_early$1)) (ite %init true (not (and $V19_late$1 $V20_early$0)))) (ite %init true (not (and $V19_late$0 $V20_early$1)))))) -; Universally quantified variables -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$0 () Bool) -(declare-fun $V20_early$0 () Bool) -(declare-fun $OK$0 () Bool) -(assert (T true $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$0 $V20_early$0 $OK$0)) diff --git a/bench/tasks/hysteresis_all_base_t_part.smt2 b/bench/tasks/hysteresis_all_base_t_part.smt2 deleted file mode 100755 index 622f32f8b..000000000 --- a/bench/tasks/hysteresis_all_base_t_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (and (and (not (and $V19_late$1 $V20_early$1)) (ite %init true (not (and $V19_late$1 $V20_early$0)))) (ite %init true (not (and $V19_late$0 $V20_early$1)))))) -; Universally quantified variables -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $V20_early$2 () Bool) -(declare-fun $OK$2 () Bool) -(assert (and (T true $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$2 $V20_early$2 $OK$2) $OK$2)) diff --git a/bench/tasks/hysteresis_all_extend_s_part.smt2 b/bench/tasks/hysteresis_all_extend_s_part.smt2 deleted file mode 100755 index ef145c1d7..000000000 --- a/bench/tasks/hysteresis_all_extend_s_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (and (and (not (and $V19_late$1 $V20_early$1)) (ite %init true (not (and $V19_late$1 $V20_early$0)))) (ite %init true (not (and $V19_late$0 $V20_early$1)))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$0 () Bool) -(declare-fun $V20_early$0 () Bool) -(declare-fun $OK$0 () Bool) -(assert (T %init $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$0 $V20_early$0 $OK$0)) diff --git a/bench/tasks/hysteresis_all_extend_t_part.smt2 b/bench/tasks/hysteresis_all_extend_t_part.smt2 deleted file mode 100755 index cbd0baddb..000000000 --- a/bench/tasks/hysteresis_all_extend_t_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (and (and (not (and $V19_late$1 $V20_early$1)) (ite %init true (not (and $V19_late$1 $V20_early$0)))) (ite %init true (not (and $V19_late$0 $V20_early$1)))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $V20_early$2 () Bool) -(declare-fun $OK$2 () Bool) -(assert (and (T %init $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$2 $V20_early$2 $OK$2) $OK$2)) diff --git a/bench/tasks/newexample_base1_s_part.smt2 b/bench/tasks/newexample_base1_s_part.smt2 deleted file mode 100755 index 0a0f2471e..000000000 --- a/bench/tasks/newexample_base1_s_part.smt2 +++ /dev/null @@ -1,25 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($x$0 Int) ($state$0 Int) ($bias$0 Int) ($guarantee1$0 Bool) ($guarantee2$0 Bool) ($guarantee3$0 Bool) ($guarantee4$0 Bool) ($guarantee5$0 Bool) ($guarantee_all$0 Bool) ($bias_max$0 Bool) ($x$1 Int) ($state$1 Int) ($bias$1 Int) ($guarantee1$1 Bool) ($guarantee2$1 Bool) ($guarantee3$1 Bool) ($guarantee4$1 Bool) ($guarantee5$1 Bool) ($guarantee_all$1 Bool) ($bias_max$1 Bool)) Bool (and (= $bias$1 (ite %init 0 (+ (ite (= $x$1 1) 1 (- 0 1)) $bias$0))) (= $bias_max$1 (ite %init false (or (or (>= $bias$1 2) (<= $bias$1 (- 0 2))) $bias_max$0))) (= $guarantee1$1 (=> (= $state$1 0) (= $bias$1 0))) (= $guarantee2$1 (ite %init true (=> (and (= $state$0 0) (= $x$1 1)) (= $state$1 2)))) (= $guarantee3$1 (ite %init true (=> (and (= $state$0 0) (= $x$1 0)) (= $state$1 1)))) (= $guarantee4$1 (=> $bias_max$1 (= $state$1 3))) (= $guarantee5$1 (or (or (or (= $state$1 0) (= $state$1 1)) (= $state$1 2)) (= $state$1 3))) (= $guarantee_all$1 (and (and (and (and $guarantee1$1 $guarantee2$1) $guarantee3$1) $guarantee4$1) $guarantee5$1)) (or (= $x$1 0) (= $x$1 1)))) -; Universally quantified variables -(declare-fun $x$~1 () Int) -(declare-fun $state$~1 () Int) -(declare-fun $bias$~1 () Int) -(declare-fun $guarantee1$~1 () Bool) -(declare-fun $guarantee2$~1 () Bool) -(declare-fun $guarantee3$~1 () Bool) -(declare-fun $guarantee4$~1 () Bool) -(declare-fun $guarantee5$~1 () Bool) -(declare-fun $guarantee_all$~1 () Bool) -(declare-fun $bias_max$~1 () Bool) -(declare-fun $x$0 () Int) -(declare-fun $state$0 () Int) -(declare-fun $bias$0 () Int) -(declare-fun $guarantee1$0 () Bool) -(declare-fun $guarantee2$0 () Bool) -(declare-fun $guarantee3$0 () Bool) -(declare-fun $guarantee4$0 () Bool) -(declare-fun $guarantee5$0 () Bool) -(declare-fun $guarantee_all$0 () Bool) -(declare-fun $bias_max$0 () Bool) -(assert (T true $x$~1 $state$~1 $bias$~1 $guarantee1$~1 $guarantee2$~1 $guarantee3$~1 $guarantee4$~1 $guarantee5$~1 $guarantee_all$~1 $bias_max$~1 $x$0 $state$0 $bias$0 $guarantee1$0 $guarantee2$0 $guarantee3$0 $guarantee4$0 $guarantee5$0 $guarantee_all$0 $bias_max$0)) diff --git a/bench/tasks/newexample_base1_t_part.smt2 b/bench/tasks/newexample_base1_t_part.smt2 deleted file mode 100755 index c591e5db2..000000000 --- a/bench/tasks/newexample_base1_t_part.smt2 +++ /dev/null @@ -1,25 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($x$0 Int) ($state$0 Int) ($bias$0 Int) ($guarantee1$0 Bool) ($guarantee2$0 Bool) ($guarantee3$0 Bool) ($guarantee4$0 Bool) ($guarantee5$0 Bool) ($guarantee_all$0 Bool) ($bias_max$0 Bool) ($x$1 Int) ($state$1 Int) ($bias$1 Int) ($guarantee1$1 Bool) ($guarantee2$1 Bool) ($guarantee3$1 Bool) ($guarantee4$1 Bool) ($guarantee5$1 Bool) ($guarantee_all$1 Bool) ($bias_max$1 Bool)) Bool (and (= $bias$1 (ite %init 0 (+ (ite (= $x$1 1) 1 (- 0 1)) $bias$0))) (= $bias_max$1 (ite %init false (or (or (>= $bias$1 2) (<= $bias$1 (- 0 2))) $bias_max$0))) (= $guarantee1$1 (=> (= $state$1 0) (= $bias$1 0))) (= $guarantee2$1 (ite %init true (=> (and (= $state$0 0) (= $x$1 1)) (= $state$1 2)))) (= $guarantee3$1 (ite %init true (=> (and (= $state$0 0) (= $x$1 0)) (= $state$1 1)))) (= $guarantee4$1 (=> $bias_max$1 (= $state$1 3))) (= $guarantee5$1 (or (or (or (= $state$1 0) (= $state$1 1)) (= $state$1 2)) (= $state$1 3))) (= $guarantee_all$1 (and (and (and (and $guarantee1$1 $guarantee2$1) $guarantee3$1) $guarantee4$1) $guarantee5$1)) (or (= $x$1 0) (= $x$1 1)))) -; Universally quantified variables -(declare-fun $x$~1 () Int) -(declare-fun $state$~1 () Int) -(declare-fun $bias$~1 () Int) -(declare-fun $guarantee1$~1 () Bool) -(declare-fun $guarantee2$~1 () Bool) -(declare-fun $guarantee3$~1 () Bool) -(declare-fun $guarantee4$~1 () Bool) -(declare-fun $guarantee5$~1 () Bool) -(declare-fun $guarantee_all$~1 () Bool) -(declare-fun $bias_max$~1 () Bool) -(declare-fun $x$0 () Int) -(declare-fun $state$2 () Int) -(declare-fun $bias$2 () Int) -(declare-fun $guarantee1$2 () Bool) -(declare-fun $guarantee2$2 () Bool) -(declare-fun $guarantee3$2 () Bool) -(declare-fun $guarantee4$2 () Bool) -(declare-fun $guarantee5$2 () Bool) -(declare-fun $guarantee_all$2 () Bool) -(declare-fun $bias_max$2 () Bool) -(assert (and (T true $x$~1 $state$~1 $bias$~1 $guarantee1$~1 $guarantee2$~1 $guarantee3$~1 $guarantee4$~1 $guarantee5$~1 $guarantee_all$~1 $bias_max$~1 $x$0 $state$2 $bias$2 $guarantee1$2 $guarantee2$2 $guarantee3$2 $guarantee4$2 $guarantee5$2 $guarantee_all$2 $bias_max$2) $guarantee_all$2)) diff --git a/bench/tasks/newexample_base2_s_part.smt2 b/bench/tasks/newexample_base2_s_part.smt2 deleted file mode 100755 index 5cb956056..000000000 --- a/bench/tasks/newexample_base2_s_part.smt2 +++ /dev/null @@ -1,37 +0,0 @@ -; K = 2 -; Transition relation -(define-fun T ((%init Bool) ($x$0 Int) ($state$0 Int) ($bias$0 Int) ($guarantee1$0 Bool) ($guarantee2$0 Bool) ($guarantee3$0 Bool) ($guarantee4$0 Bool) ($guarantee5$0 Bool) ($guarantee_all$0 Bool) ($bias_max$0 Bool) ($x$1 Int) ($state$1 Int) ($bias$1 Int) ($guarantee1$1 Bool) ($guarantee2$1 Bool) ($guarantee3$1 Bool) ($guarantee4$1 Bool) ($guarantee5$1 Bool) ($guarantee_all$1 Bool) ($bias_max$1 Bool)) Bool (and (= $bias$1 (ite %init 0 (+ (ite (= $x$1 1) 1 (- 0 1)) $bias$0))) (= $bias_max$1 (ite %init false (or (or (>= $bias$1 2) (<= $bias$1 (- 0 2))) $bias_max$0))) (= $guarantee1$1 (=> (= $state$1 0) (= $bias$1 0))) (= $guarantee2$1 (ite %init true (=> (and (= $state$0 0) (= $x$1 1)) (= $state$1 2)))) (= $guarantee3$1 (ite %init true (=> (and (= $state$0 0) (= $x$1 0)) (= $state$1 1)))) (= $guarantee4$1 (=> $bias_max$1 (= $state$1 3))) (= $guarantee5$1 (or (or (or (= $state$1 0) (= $state$1 1)) (= $state$1 2)) (= $state$1 3))) (= $guarantee_all$1 (and (and (and (and $guarantee1$1 $guarantee2$1) $guarantee3$1) $guarantee4$1) $guarantee5$1)) (or (= $x$1 0) (= $x$1 1)))) -; Universally quantified variables -(declare-fun $x$~1 () Int) -(declare-fun $state$~1 () Int) -(declare-fun $bias$~1 () Int) -(declare-fun $guarantee1$~1 () Bool) -(declare-fun $guarantee2$~1 () Bool) -(declare-fun $guarantee3$~1 () Bool) -(declare-fun $guarantee4$~1 () Bool) -(declare-fun $guarantee5$~1 () Bool) -(declare-fun $guarantee_all$~1 () Bool) -(declare-fun $bias_max$~1 () Bool) -(declare-fun $x$0 () Int) -(declare-fun $state$0 () Int) -(declare-fun $bias$0 () Int) -(declare-fun $guarantee1$0 () Bool) -(declare-fun $guarantee2$0 () Bool) -(declare-fun $guarantee3$0 () Bool) -(declare-fun $guarantee4$0 () Bool) -(declare-fun $guarantee5$0 () Bool) -(declare-fun $guarantee_all$0 () Bool) -(declare-fun $bias_max$0 () Bool) -(declare-fun $x$1 () Int) -(declare-fun $state$1 () Int) -(declare-fun $bias$1 () Int) -(declare-fun $guarantee1$1 () Bool) -(declare-fun $guarantee2$1 () Bool) -(declare-fun $guarantee3$1 () Bool) -(declare-fun $guarantee4$1 () Bool) -(declare-fun $guarantee5$1 () Bool) -(declare-fun $guarantee_all$1 () Bool) -(declare-fun $bias_max$1 () Bool) -(assert (T true $x$~1 $state$~1 $bias$~1 $guarantee1$~1 $guarantee2$~1 $guarantee3$~1 $guarantee4$~1 $guarantee5$~1 $guarantee_all$~1 $bias_max$~1 $x$0 $state$0 $bias$0 $guarantee1$0 $guarantee2$0 $guarantee3$0 $guarantee4$0 $guarantee5$0 $guarantee_all$0 $bias_max$0)) -(assert $guarantee_all$0) -(assert (T false $x$0 $state$0 $bias$0 $guarantee1$0 $guarantee2$0 $guarantee3$0 $guarantee4$0 $guarantee5$0 $guarantee_all$0 $bias_max$0 $x$1 $state$1 $bias$1 $guarantee1$1 $guarantee2$1 $guarantee3$1 $guarantee4$1 $guarantee5$1 $guarantee_all$1 $bias_max$1)) diff --git a/bench/tasks/newexample_base2_t_part.smt2 b/bench/tasks/newexample_base2_t_part.smt2 deleted file mode 100755 index 3d185c457..000000000 --- a/bench/tasks/newexample_base2_t_part.smt2 +++ /dev/null @@ -1,35 +0,0 @@ -; K = 2 -; Transition relation -(define-fun T ((%init Bool) ($x$0 Int) ($state$0 Int) ($bias$0 Int) ($guarantee1$0 Bool) ($guarantee2$0 Bool) ($guarantee3$0 Bool) ($guarantee4$0 Bool) ($guarantee5$0 Bool) ($guarantee_all$0 Bool) ($bias_max$0 Bool) ($x$1 Int) ($state$1 Int) ($bias$1 Int) ($guarantee1$1 Bool) ($guarantee2$1 Bool) ($guarantee3$1 Bool) ($guarantee4$1 Bool) ($guarantee5$1 Bool) ($guarantee_all$1 Bool) ($bias_max$1 Bool)) Bool (and (= $bias$1 (ite %init 0 (+ (ite (= $x$1 1) 1 (- 0 1)) $bias$0))) (= $bias_max$1 (ite %init false (or (or (>= $bias$1 2) (<= $bias$1 (- 0 2))) $bias_max$0))) (= $guarantee1$1 (=> (= $state$1 0) (= $bias$1 0))) (= $guarantee2$1 (ite %init true (=> (and (= $state$0 0) (= $x$1 1)) (= $state$1 2)))) (= $guarantee3$1 (ite %init true (=> (and (= $state$0 0) (= $x$1 0)) (= $state$1 1)))) (= $guarantee4$1 (=> $bias_max$1 (= $state$1 3))) (= $guarantee5$1 (or (or (or (= $state$1 0) (= $state$1 1)) (= $state$1 2)) (= $state$1 3))) (= $guarantee_all$1 (and (and (and (and $guarantee1$1 $guarantee2$1) $guarantee3$1) $guarantee4$1) $guarantee5$1)) (or (= $x$1 0) (= $x$1 1)))) -; Universally quantified variables -(declare-fun $x$~1 () Int) -(declare-fun $state$~1 () Int) -(declare-fun $bias$~1 () Int) -(declare-fun $guarantee1$~1 () Bool) -(declare-fun $guarantee2$~1 () Bool) -(declare-fun $guarantee3$~1 () Bool) -(declare-fun $guarantee4$~1 () Bool) -(declare-fun $guarantee5$~1 () Bool) -(declare-fun $guarantee_all$~1 () Bool) -(declare-fun $bias_max$~1 () Bool) -(declare-fun $x$0 () Int) -(declare-fun $state$0 () Int) -(declare-fun $bias$0 () Int) -(declare-fun $guarantee1$0 () Bool) -(declare-fun $guarantee2$0 () Bool) -(declare-fun $guarantee3$0 () Bool) -(declare-fun $guarantee4$0 () Bool) -(declare-fun $guarantee5$0 () Bool) -(declare-fun $guarantee_all$0 () Bool) -(declare-fun $bias_max$0 () Bool) -(declare-fun $x$1 () Int) -(declare-fun $state$3 () Int) -(declare-fun $bias$3 () Int) -(declare-fun $guarantee1$3 () Bool) -(declare-fun $guarantee2$3 () Bool) -(declare-fun $guarantee3$3 () Bool) -(declare-fun $guarantee4$3 () Bool) -(declare-fun $guarantee5$3 () Bool) -(declare-fun $guarantee_all$3 () Bool) -(declare-fun $bias_max$3 () Bool) -(assert (and (T false $x$0 $state$0 $bias$0 $guarantee1$0 $guarantee2$0 $guarantee3$0 $guarantee4$0 $guarantee5$0 $guarantee_all$0 $bias_max$0 $x$1 $state$3 $bias$3 $guarantee1$3 $guarantee2$3 $guarantee3$3 $guarantee4$3 $guarantee5$3 $guarantee_all$3 $bias_max$3) $guarantee_all$3)) diff --git a/bench/tasks/newexample_base3_s_part.smt2 b/bench/tasks/newexample_base3_s_part.smt2 deleted file mode 100755 index c8968f39c..000000000 --- a/bench/tasks/newexample_base3_s_part.smt2 +++ /dev/null @@ -1,49 +0,0 @@ -; K = 3 -; Transition relation -(define-fun T ((%init Bool) ($x$0 Int) ($state$0 Int) ($bias$0 Int) ($guarantee1$0 Bool) ($guarantee2$0 Bool) ($guarantee3$0 Bool) ($guarantee4$0 Bool) ($guarantee5$0 Bool) ($guarantee_all$0 Bool) ($bias_max$0 Bool) ($x$1 Int) ($state$1 Int) ($bias$1 Int) ($guarantee1$1 Bool) ($guarantee2$1 Bool) ($guarantee3$1 Bool) ($guarantee4$1 Bool) ($guarantee5$1 Bool) ($guarantee_all$1 Bool) ($bias_max$1 Bool)) Bool (and (= $bias$1 (ite %init 0 (+ (ite (= $x$1 1) 1 (- 0 1)) $bias$0))) (= $bias_max$1 (ite %init false (or (or (>= $bias$1 2) (<= $bias$1 (- 0 2))) $bias_max$0))) (= $guarantee1$1 (=> (= $state$1 0) (= $bias$1 0))) (= $guarantee2$1 (ite %init true (=> (and (= $state$0 0) (= $x$1 1)) (= $state$1 2)))) (= $guarantee3$1 (ite %init true (=> (and (= $state$0 0) (= $x$1 0)) (= $state$1 1)))) (= $guarantee4$1 (=> $bias_max$1 (= $state$1 3))) (= $guarantee5$1 (or (or (or (= $state$1 0) (= $state$1 1)) (= $state$1 2)) (= $state$1 3))) (= $guarantee_all$1 (and (and (and (and $guarantee1$1 $guarantee2$1) $guarantee3$1) $guarantee4$1) $guarantee5$1)) (or (= $x$1 0) (= $x$1 1)))) -; Universally quantified variables -(declare-fun $x$~1 () Int) -(declare-fun $state$~1 () Int) -(declare-fun $bias$~1 () Int) -(declare-fun $guarantee1$~1 () Bool) -(declare-fun $guarantee2$~1 () Bool) -(declare-fun $guarantee3$~1 () Bool) -(declare-fun $guarantee4$~1 () Bool) -(declare-fun $guarantee5$~1 () Bool) -(declare-fun $guarantee_all$~1 () Bool) -(declare-fun $bias_max$~1 () Bool) -(declare-fun $x$0 () Int) -(declare-fun $state$0 () Int) -(declare-fun $bias$0 () Int) -(declare-fun $guarantee1$0 () Bool) -(declare-fun $guarantee2$0 () Bool) -(declare-fun $guarantee3$0 () Bool) -(declare-fun $guarantee4$0 () Bool) -(declare-fun $guarantee5$0 () Bool) -(declare-fun $guarantee_all$0 () Bool) -(declare-fun $bias_max$0 () Bool) -(declare-fun $x$1 () Int) -(declare-fun $state$1 () Int) -(declare-fun $bias$1 () Int) -(declare-fun $guarantee1$1 () Bool) -(declare-fun $guarantee2$1 () Bool) -(declare-fun $guarantee3$1 () Bool) -(declare-fun $guarantee4$1 () Bool) -(declare-fun $guarantee5$1 () Bool) -(declare-fun $guarantee_all$1 () Bool) -(declare-fun $bias_max$1 () Bool) -(declare-fun $x$2 () Int) -(declare-fun $state$2 () Int) -(declare-fun $bias$2 () Int) -(declare-fun $guarantee1$2 () Bool) -(declare-fun $guarantee2$2 () Bool) -(declare-fun $guarantee3$2 () Bool) -(declare-fun $guarantee4$2 () Bool) -(declare-fun $guarantee5$2 () Bool) -(declare-fun $guarantee_all$2 () Bool) -(declare-fun $bias_max$2 () Bool) -(assert (T true $x$~1 $state$~1 $bias$~1 $guarantee1$~1 $guarantee2$~1 $guarantee3$~1 $guarantee4$~1 $guarantee5$~1 $guarantee_all$~1 $bias_max$~1 $x$0 $state$0 $bias$0 $guarantee1$0 $guarantee2$0 $guarantee3$0 $guarantee4$0 $guarantee5$0 $guarantee_all$0 $bias_max$0)) -(assert $guarantee_all$0) -(assert (T false $x$0 $state$0 $bias$0 $guarantee1$0 $guarantee2$0 $guarantee3$0 $guarantee4$0 $guarantee5$0 $guarantee_all$0 $bias_max$0 $x$1 $state$1 $bias$1 $guarantee1$1 $guarantee2$1 $guarantee3$1 $guarantee4$1 $guarantee5$1 $guarantee_all$1 $bias_max$1)) -(assert $guarantee_all$1) -(assert (T false $x$1 $state$1 $bias$1 $guarantee1$1 $guarantee2$1 $guarantee3$1 $guarantee4$1 $guarantee5$1 $guarantee_all$1 $bias_max$1 $x$2 $state$2 $bias$2 $guarantee1$2 $guarantee2$2 $guarantee3$2 $guarantee4$2 $guarantee5$2 $guarantee_all$2 $bias_max$2)) diff --git a/bench/tasks/newexample_base3_t_part.smt2 b/bench/tasks/newexample_base3_t_part.smt2 deleted file mode 100755 index aec031d67..000000000 --- a/bench/tasks/newexample_base3_t_part.smt2 +++ /dev/null @@ -1,45 +0,0 @@ -; K = 3 -; Transition relation -(define-fun T ((%init Bool) ($x$0 Int) ($state$0 Int) ($bias$0 Int) ($guarantee1$0 Bool) ($guarantee2$0 Bool) ($guarantee3$0 Bool) ($guarantee4$0 Bool) ($guarantee5$0 Bool) ($guarantee_all$0 Bool) ($bias_max$0 Bool) ($x$1 Int) ($state$1 Int) ($bias$1 Int) ($guarantee1$1 Bool) ($guarantee2$1 Bool) ($guarantee3$1 Bool) ($guarantee4$1 Bool) ($guarantee5$1 Bool) ($guarantee_all$1 Bool) ($bias_max$1 Bool)) Bool (and (= $bias$1 (ite %init 0 (+ (ite (= $x$1 1) 1 (- 0 1)) $bias$0))) (= $bias_max$1 (ite %init false (or (or (>= $bias$1 2) (<= $bias$1 (- 0 2))) $bias_max$0))) (= $guarantee1$1 (=> (= $state$1 0) (= $bias$1 0))) (= $guarantee2$1 (ite %init true (=> (and (= $state$0 0) (= $x$1 1)) (= $state$1 2)))) (= $guarantee3$1 (ite %init true (=> (and (= $state$0 0) (= $x$1 0)) (= $state$1 1)))) (= $guarantee4$1 (=> $bias_max$1 (= $state$1 3))) (= $guarantee5$1 (or (or (or (= $state$1 0) (= $state$1 1)) (= $state$1 2)) (= $state$1 3))) (= $guarantee_all$1 (and (and (and (and $guarantee1$1 $guarantee2$1) $guarantee3$1) $guarantee4$1) $guarantee5$1)) (or (= $x$1 0) (= $x$1 1)))) -; Universally quantified variables -(declare-fun $x$~1 () Int) -(declare-fun $state$~1 () Int) -(declare-fun $bias$~1 () Int) -(declare-fun $guarantee1$~1 () Bool) -(declare-fun $guarantee2$~1 () Bool) -(declare-fun $guarantee3$~1 () Bool) -(declare-fun $guarantee4$~1 () Bool) -(declare-fun $guarantee5$~1 () Bool) -(declare-fun $guarantee_all$~1 () Bool) -(declare-fun $bias_max$~1 () Bool) -(declare-fun $x$0 () Int) -(declare-fun $state$0 () Int) -(declare-fun $bias$0 () Int) -(declare-fun $guarantee1$0 () Bool) -(declare-fun $guarantee2$0 () Bool) -(declare-fun $guarantee3$0 () Bool) -(declare-fun $guarantee4$0 () Bool) -(declare-fun $guarantee5$0 () Bool) -(declare-fun $guarantee_all$0 () Bool) -(declare-fun $bias_max$0 () Bool) -(declare-fun $x$1 () Int) -(declare-fun $state$1 () Int) -(declare-fun $bias$1 () Int) -(declare-fun $guarantee1$1 () Bool) -(declare-fun $guarantee2$1 () Bool) -(declare-fun $guarantee3$1 () Bool) -(declare-fun $guarantee4$1 () Bool) -(declare-fun $guarantee5$1 () Bool) -(declare-fun $guarantee_all$1 () Bool) -(declare-fun $bias_max$1 () Bool) -(declare-fun $x$2 () Int) -(declare-fun $state$4 () Int) -(declare-fun $bias$4 () Int) -(declare-fun $guarantee1$4 () Bool) -(declare-fun $guarantee2$4 () Bool) -(declare-fun $guarantee3$4 () Bool) -(declare-fun $guarantee4$4 () Bool) -(declare-fun $guarantee5$4 () Bool) -(declare-fun $guarantee_all$4 () Bool) -(declare-fun $bias_max$4 () Bool) -(assert (and (T false $x$1 $state$1 $bias$1 $guarantee1$1 $guarantee2$1 $guarantee3$1 $guarantee4$1 $guarantee5$1 $guarantee_all$1 $bias_max$1 $x$2 $state$4 $bias$4 $guarantee1$4 $guarantee2$4 $guarantee3$4 $guarantee4$4 $guarantee5$4 $guarantee_all$4 $bias_max$4) $guarantee_all$4)) diff --git a/bench/tasks/newexample_extend_s_part.smt2 b/bench/tasks/newexample_extend_s_part.smt2 deleted file mode 100755 index 5bcf86dc8..000000000 --- a/bench/tasks/newexample_extend_s_part.smt2 +++ /dev/null @@ -1,38 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($x$0 Int) ($state$0 Int) ($bias$0 Int) ($guarantee1$0 Bool) ($guarantee2$0 Bool) ($guarantee3$0 Bool) ($guarantee4$0 Bool) ($guarantee5$0 Bool) ($guarantee_all$0 Bool) ($bias_max$0 Bool) ($x$1 Int) ($state$1 Int) ($bias$1 Int) ($guarantee1$1 Bool) ($guarantee2$1 Bool) ($guarantee3$1 Bool) ($guarantee4$1 Bool) ($guarantee5$1 Bool) ($guarantee_all$1 Bool) ($bias_max$1 Bool)) Bool (and (= $bias$1 (ite %init 0 (+ (ite (= $x$1 1) 1 (- 0 1)) $bias$0))) (= $bias_max$1 (ite %init false (or (or (>= $bias$1 2) (<= $bias$1 (- 0 2))) $bias_max$0))) (= $guarantee1$1 (=> (= $state$1 0) (= $bias$1 0))) (= $guarantee2$1 (ite %init true (=> (and (= $state$0 0) (= $x$1 1)) (= $state$1 2)))) (= $guarantee3$1 (ite %init true (=> (and (= $state$0 0) (= $x$1 0)) (= $state$1 1)))) (= $guarantee4$1 (=> $bias_max$1 (= $state$1 3))) (= $guarantee5$1 (or (or (or (= $state$1 0) (= $state$1 1)) (= $state$1 2)) (= $state$1 3))) (= $guarantee_all$1 (and (and (and (and $guarantee1$1 $guarantee2$1) $guarantee3$1) $guarantee4$1) $guarantee5$1)) (or (= $x$1 0) (= $x$1 1)))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $x$~1 () Int) -(declare-fun $state$~1 () Int) -(declare-fun $bias$~1 () Int) -(declare-fun $guarantee1$~1 () Bool) -(declare-fun $guarantee2$~1 () Bool) -(declare-fun $guarantee3$~1 () Bool) -(declare-fun $guarantee4$~1 () Bool) -(declare-fun $guarantee5$~1 () Bool) -(declare-fun $guarantee_all$~1 () Bool) -(declare-fun $bias_max$~1 () Bool) -(declare-fun $x$0 () Int) -(declare-fun $state$0 () Int) -(declare-fun $bias$0 () Int) -(declare-fun $guarantee1$0 () Bool) -(declare-fun $guarantee2$0 () Bool) -(declare-fun $guarantee3$0 () Bool) -(declare-fun $guarantee4$0 () Bool) -(declare-fun $guarantee5$0 () Bool) -(declare-fun $guarantee_all$0 () Bool) -(declare-fun $bias_max$0 () Bool) -(declare-fun $x$1 () Int) -(declare-fun $state$1 () Int) -(declare-fun $bias$1 () Int) -(declare-fun $guarantee1$1 () Bool) -(declare-fun $guarantee2$1 () Bool) -(declare-fun $guarantee3$1 () Bool) -(declare-fun $guarantee4$1 () Bool) -(declare-fun $guarantee5$1 () Bool) -(declare-fun $guarantee_all$1 () Bool) -(declare-fun $bias_max$1 () Bool) -(assert (T %init $x$~1 $state$~1 $bias$~1 $guarantee1$~1 $guarantee2$~1 $guarantee3$~1 $guarantee4$~1 $guarantee5$~1 $guarantee_all$~1 $bias_max$~1 $x$0 $state$0 $bias$0 $guarantee1$0 $guarantee2$0 $guarantee3$0 $guarantee4$0 $guarantee5$0 $guarantee_all$0 $bias_max$0)) -(assert $guarantee_all$0) -(assert (T false $x$0 $state$0 $bias$0 $guarantee1$0 $guarantee2$0 $guarantee3$0 $guarantee4$0 $guarantee5$0 $guarantee_all$0 $bias_max$0 $x$1 $state$1 $bias$1 $guarantee1$1 $guarantee2$1 $guarantee3$1 $guarantee4$1 $guarantee5$1 $guarantee_all$1 $bias_max$1)) diff --git a/bench/tasks/newexample_extend_t_part.smt2 b/bench/tasks/newexample_extend_t_part.smt2 deleted file mode 100755 index 05e5cc26f..000000000 --- a/bench/tasks/newexample_extend_t_part.smt2 +++ /dev/null @@ -1,36 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($x$0 Int) ($state$0 Int) ($bias$0 Int) ($guarantee1$0 Bool) ($guarantee2$0 Bool) ($guarantee3$0 Bool) ($guarantee4$0 Bool) ($guarantee5$0 Bool) ($guarantee_all$0 Bool) ($bias_max$0 Bool) ($x$1 Int) ($state$1 Int) ($bias$1 Int) ($guarantee1$1 Bool) ($guarantee2$1 Bool) ($guarantee3$1 Bool) ($guarantee4$1 Bool) ($guarantee5$1 Bool) ($guarantee_all$1 Bool) ($bias_max$1 Bool)) Bool (and (= $bias$1 (ite %init 0 (+ (ite (= $x$1 1) 1 (- 0 1)) $bias$0))) (= $bias_max$1 (ite %init false (or (or (>= $bias$1 2) (<= $bias$1 (- 0 2))) $bias_max$0))) (= $guarantee1$1 (=> (= $state$1 0) (= $bias$1 0))) (= $guarantee2$1 (ite %init true (=> (and (= $state$0 0) (= $x$1 1)) (= $state$1 2)))) (= $guarantee3$1 (ite %init true (=> (and (= $state$0 0) (= $x$1 0)) (= $state$1 1)))) (= $guarantee4$1 (=> $bias_max$1 (= $state$1 3))) (= $guarantee5$1 (or (or (or (= $state$1 0) (= $state$1 1)) (= $state$1 2)) (= $state$1 3))) (= $guarantee_all$1 (and (and (and (and $guarantee1$1 $guarantee2$1) $guarantee3$1) $guarantee4$1) $guarantee5$1)) (or (= $x$1 0) (= $x$1 1)))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $x$~1 () Int) -(declare-fun $state$~1 () Int) -(declare-fun $bias$~1 () Int) -(declare-fun $guarantee1$~1 () Bool) -(declare-fun $guarantee2$~1 () Bool) -(declare-fun $guarantee3$~1 () Bool) -(declare-fun $guarantee4$~1 () Bool) -(declare-fun $guarantee5$~1 () Bool) -(declare-fun $guarantee_all$~1 () Bool) -(declare-fun $bias_max$~1 () Bool) -(declare-fun $x$0 () Int) -(declare-fun $state$0 () Int) -(declare-fun $bias$0 () Int) -(declare-fun $guarantee1$0 () Bool) -(declare-fun $guarantee2$0 () Bool) -(declare-fun $guarantee3$0 () Bool) -(declare-fun $guarantee4$0 () Bool) -(declare-fun $guarantee5$0 () Bool) -(declare-fun $guarantee_all$0 () Bool) -(declare-fun $bias_max$0 () Bool) -(declare-fun $x$1 () Int) -(declare-fun $state$3 () Int) -(declare-fun $bias$3 () Int) -(declare-fun $guarantee1$3 () Bool) -(declare-fun $guarantee2$3 () Bool) -(declare-fun $guarantee3$3 () Bool) -(declare-fun $guarantee4$3 () Bool) -(declare-fun $guarantee5$3 () Bool) -(declare-fun $guarantee_all$3 () Bool) -(declare-fun $bias_max$3 () Bool) -(assert (and (T false $x$0 $state$0 $bias$0 $guarantee1$0 $guarantee2$0 $guarantee3$0 $guarantee4$0 $guarantee5$0 $guarantee_all$0 $bias_max$0 $x$1 $state$3 $bias$3 $guarantee1$3 $guarantee2$3 $guarantee3$3 $guarantee4$3 $guarantee5$3 $guarantee_all$3 $bias_max$3) $guarantee_all$3)) diff --git a/bench/tasks/rtp_1_base_s_part.smt2 b/bench/tasks/rtp_1_base_s_part.smt2 deleted file mode 100755 index 219e701ec..000000000 --- a/bench/tasks/rtp_1_base_s_part.smt2 +++ /dev/null @@ -1,37 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($e01$0 Bool) ($e02$0 Bool) ($e03$0 Bool) ($e04$0 Bool) ($e05$0 Bool) ($e06$0 Bool) ($e07$0 Bool) ($e08$0 Bool) ($e09$0 Bool) ($e10$0 Bool) ($e11$0 Bool) ($e12$0 Bool) ($V76_erreur$0 Bool) ($OK$0 Bool) ($V170_X$0 Bool) ($V175_Sofar$0 Bool) ($e01$1 Bool) ($e02$1 Bool) ($e03$1 Bool) ($e04$1 Bool) ($e05$1 Bool) ($e06$1 Bool) ($e07$1 Bool) ($e08$1 Bool) ($e09$1 Bool) ($e10$1 Bool) ($e11$1 Bool) ($e12$1 Bool) ($V76_erreur$1 Bool) ($OK$1 Bool) ($V170_X$1 Bool) ($V175_Sofar$1 Bool)) Bool (and (= $OK$1 (=> $V175_Sofar$1 (not $V76_erreur$1))) (= $V170_X$1 (or (or (or (or (or (or (or (or (or (or (or (or (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) (not $e04$1)) (not $e05$1)) (not $e06$1)) (not $e07$1)) (not $e08$1)) (not $e09$1)) (not $e10$1)) (not $e11$1)) (not $e12$1)) (and (and (and (and (and (and (and (and (and (and (and $e01$1 (not $e02$1)) (not $e03$1)) (not $e04$1)) (not $e05$1)) (not $e06$1)) (not $e07$1)) (not $e08$1)) (not $e09$1)) (not $e10$1)) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) $e02$1) (not $e03$1)) (not $e04$1)) (not $e05$1)) (not $e06$1)) (not $e07$1)) (not $e08$1)) (not $e09$1)) (not $e10$1)) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) $e03$1) (not $e04$1)) (not $e05$1)) (not $e06$1)) (not $e07$1)) (not $e08$1)) (not $e09$1)) (not $e10$1)) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) $e04$1) (not $e05$1)) (not $e06$1)) (not $e07$1)) (not $e08$1)) (not $e09$1)) (not $e10$1)) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) (not $e04$1)) $e05$1) (not $e06$1)) (not $e07$1)) (not $e08$1)) (not $e09$1)) (not $e10$1)) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) (not $e04$1)) (not $e05$1)) $e06$1) (not $e07$1)) (not $e08$1)) (not $e09$1)) (not $e10$1)) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) (not $e04$1)) (not $e05$1)) (not $e06$1)) $e07$1) (not $e08$1)) (not $e09$1)) (not $e10$1)) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) (not $e04$1)) (not $e05$1)) (not $e06$1)) (not $e07$1)) $e08$1) (not $e09$1)) (not $e10$1)) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) (not $e04$1)) (not $e05$1)) (not $e06$1)) (not $e07$1)) (not $e08$1)) $e09$1) (not $e10$1)) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) (not $e04$1)) (not $e05$1)) (not $e06$1)) (not $e07$1)) (not $e08$1)) (not $e09$1)) $e10$1) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) (not $e04$1)) (not $e05$1)) (not $e06$1)) (not $e07$1)) (not $e08$1)) (not $e09$1)) (not $e10$1)) $e11$1) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) (not $e04$1)) (not $e05$1)) (not $e06$1)) (not $e07$1)) (not $e08$1)) (not $e09$1)) (not $e10$1)) (not $e11$1)) $e12$1))) (= $V175_Sofar$1 (ite %init $V170_X$1 (and $V170_X$1 $V175_Sofar$0))))) -; Universally quantified variables -(declare-fun $e01$~1 () Bool) -(declare-fun $e02$~1 () Bool) -(declare-fun $e03$~1 () Bool) -(declare-fun $e04$~1 () Bool) -(declare-fun $e05$~1 () Bool) -(declare-fun $e06$~1 () Bool) -(declare-fun $e07$~1 () Bool) -(declare-fun $e08$~1 () Bool) -(declare-fun $e09$~1 () Bool) -(declare-fun $e10$~1 () Bool) -(declare-fun $e11$~1 () Bool) -(declare-fun $e12$~1 () Bool) -(declare-fun $V76_erreur$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V170_X$~1 () Bool) -(declare-fun $V175_Sofar$~1 () Bool) -(declare-fun $e01$0 () Bool) -(declare-fun $e02$0 () Bool) -(declare-fun $e03$0 () Bool) -(declare-fun $e04$0 () Bool) -(declare-fun $e05$0 () Bool) -(declare-fun $e06$0 () Bool) -(declare-fun $e07$0 () Bool) -(declare-fun $e08$0 () Bool) -(declare-fun $e09$0 () Bool) -(declare-fun $e10$0 () Bool) -(declare-fun $e11$0 () Bool) -(declare-fun $e12$0 () Bool) -(declare-fun $V76_erreur$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $V170_X$0 () Bool) -(declare-fun $V175_Sofar$0 () Bool) -(assert (T true $e01$~1 $e02$~1 $e03$~1 $e04$~1 $e05$~1 $e06$~1 $e07$~1 $e08$~1 $e09$~1 $e10$~1 $e11$~1 $e12$~1 $V76_erreur$~1 $OK$~1 $V170_X$~1 $V175_Sofar$~1 $e01$0 $e02$0 $e03$0 $e04$0 $e05$0 $e06$0 $e07$0 $e08$0 $e09$0 $e10$0 $e11$0 $e12$0 $V76_erreur$0 $OK$0 $V170_X$0 $V175_Sofar$0)) diff --git a/bench/tasks/rtp_1_base_t_part.smt2 b/bench/tasks/rtp_1_base_t_part.smt2 deleted file mode 100755 index 5b75df46c..000000000 --- a/bench/tasks/rtp_1_base_t_part.smt2 +++ /dev/null @@ -1,37 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($e01$0 Bool) ($e02$0 Bool) ($e03$0 Bool) ($e04$0 Bool) ($e05$0 Bool) ($e06$0 Bool) ($e07$0 Bool) ($e08$0 Bool) ($e09$0 Bool) ($e10$0 Bool) ($e11$0 Bool) ($e12$0 Bool) ($V76_erreur$0 Bool) ($OK$0 Bool) ($V170_X$0 Bool) ($V175_Sofar$0 Bool) ($e01$1 Bool) ($e02$1 Bool) ($e03$1 Bool) ($e04$1 Bool) ($e05$1 Bool) ($e06$1 Bool) ($e07$1 Bool) ($e08$1 Bool) ($e09$1 Bool) ($e10$1 Bool) ($e11$1 Bool) ($e12$1 Bool) ($V76_erreur$1 Bool) ($OK$1 Bool) ($V170_X$1 Bool) ($V175_Sofar$1 Bool)) Bool (and (= $OK$1 (=> $V175_Sofar$1 (not $V76_erreur$1))) (= $V170_X$1 (or (or (or (or (or (or (or (or (or (or (or (or (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) (not $e04$1)) (not $e05$1)) (not $e06$1)) (not $e07$1)) (not $e08$1)) (not $e09$1)) (not $e10$1)) (not $e11$1)) (not $e12$1)) (and (and (and (and (and (and (and (and (and (and (and $e01$1 (not $e02$1)) (not $e03$1)) (not $e04$1)) (not $e05$1)) (not $e06$1)) (not $e07$1)) (not $e08$1)) (not $e09$1)) (not $e10$1)) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) $e02$1) (not $e03$1)) (not $e04$1)) (not $e05$1)) (not $e06$1)) (not $e07$1)) (not $e08$1)) (not $e09$1)) (not $e10$1)) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) $e03$1) (not $e04$1)) (not $e05$1)) (not $e06$1)) (not $e07$1)) (not $e08$1)) (not $e09$1)) (not $e10$1)) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) $e04$1) (not $e05$1)) (not $e06$1)) (not $e07$1)) (not $e08$1)) (not $e09$1)) (not $e10$1)) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) (not $e04$1)) $e05$1) (not $e06$1)) (not $e07$1)) (not $e08$1)) (not $e09$1)) (not $e10$1)) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) (not $e04$1)) (not $e05$1)) $e06$1) (not $e07$1)) (not $e08$1)) (not $e09$1)) (not $e10$1)) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) (not $e04$1)) (not $e05$1)) (not $e06$1)) $e07$1) (not $e08$1)) (not $e09$1)) (not $e10$1)) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) (not $e04$1)) (not $e05$1)) (not $e06$1)) (not $e07$1)) $e08$1) (not $e09$1)) (not $e10$1)) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) (not $e04$1)) (not $e05$1)) (not $e06$1)) (not $e07$1)) (not $e08$1)) $e09$1) (not $e10$1)) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) (not $e04$1)) (not $e05$1)) (not $e06$1)) (not $e07$1)) (not $e08$1)) (not $e09$1)) $e10$1) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) (not $e04$1)) (not $e05$1)) (not $e06$1)) (not $e07$1)) (not $e08$1)) (not $e09$1)) (not $e10$1)) $e11$1) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) (not $e04$1)) (not $e05$1)) (not $e06$1)) (not $e07$1)) (not $e08$1)) (not $e09$1)) (not $e10$1)) (not $e11$1)) $e12$1))) (= $V175_Sofar$1 (ite %init $V170_X$1 (and $V170_X$1 $V175_Sofar$0))))) -; Universally quantified variables -(declare-fun $e01$~1 () Bool) -(declare-fun $e02$~1 () Bool) -(declare-fun $e03$~1 () Bool) -(declare-fun $e04$~1 () Bool) -(declare-fun $e05$~1 () Bool) -(declare-fun $e06$~1 () Bool) -(declare-fun $e07$~1 () Bool) -(declare-fun $e08$~1 () Bool) -(declare-fun $e09$~1 () Bool) -(declare-fun $e10$~1 () Bool) -(declare-fun $e11$~1 () Bool) -(declare-fun $e12$~1 () Bool) -(declare-fun $V76_erreur$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V170_X$~1 () Bool) -(declare-fun $V175_Sofar$~1 () Bool) -(declare-fun $e01$0 () Bool) -(declare-fun $e02$0 () Bool) -(declare-fun $e03$0 () Bool) -(declare-fun $e04$0 () Bool) -(declare-fun $e05$0 () Bool) -(declare-fun $e06$0 () Bool) -(declare-fun $e07$0 () Bool) -(declare-fun $e08$0 () Bool) -(declare-fun $e09$0 () Bool) -(declare-fun $e10$0 () Bool) -(declare-fun $e11$0 () Bool) -(declare-fun $e12$0 () Bool) -(declare-fun $V76_erreur$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $V170_X$2 () Bool) -(declare-fun $V175_Sofar$2 () Bool) -(assert (and (T true $e01$~1 $e02$~1 $e03$~1 $e04$~1 $e05$~1 $e06$~1 $e07$~1 $e08$~1 $e09$~1 $e10$~1 $e11$~1 $e12$~1 $V76_erreur$~1 $OK$~1 $V170_X$~1 $V175_Sofar$~1 $e01$0 $e02$0 $e03$0 $e04$0 $e05$0 $e06$0 $e07$0 $e08$0 $e09$0 $e10$0 $e11$0 $e12$0 $V76_erreur$2 $OK$2 $V170_X$2 $V175_Sofar$2) $OK$2)) diff --git a/bench/tasks/rtp_1_extend_s_part.smt2 b/bench/tasks/rtp_1_extend_s_part.smt2 deleted file mode 100755 index 9ee3cdaa5..000000000 --- a/bench/tasks/rtp_1_extend_s_part.smt2 +++ /dev/null @@ -1,38 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($e01$0 Bool) ($e02$0 Bool) ($e03$0 Bool) ($e04$0 Bool) ($e05$0 Bool) ($e06$0 Bool) ($e07$0 Bool) ($e08$0 Bool) ($e09$0 Bool) ($e10$0 Bool) ($e11$0 Bool) ($e12$0 Bool) ($V76_erreur$0 Bool) ($OK$0 Bool) ($V170_X$0 Bool) ($V175_Sofar$0 Bool) ($e01$1 Bool) ($e02$1 Bool) ($e03$1 Bool) ($e04$1 Bool) ($e05$1 Bool) ($e06$1 Bool) ($e07$1 Bool) ($e08$1 Bool) ($e09$1 Bool) ($e10$1 Bool) ($e11$1 Bool) ($e12$1 Bool) ($V76_erreur$1 Bool) ($OK$1 Bool) ($V170_X$1 Bool) ($V175_Sofar$1 Bool)) Bool (and (= $OK$1 (=> $V175_Sofar$1 (not $V76_erreur$1))) (= $V170_X$1 (or (or (or (or (or (or (or (or (or (or (or (or (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) (not $e04$1)) (not $e05$1)) (not $e06$1)) (not $e07$1)) (not $e08$1)) (not $e09$1)) (not $e10$1)) (not $e11$1)) (not $e12$1)) (and (and (and (and (and (and (and (and (and (and (and $e01$1 (not $e02$1)) (not $e03$1)) (not $e04$1)) (not $e05$1)) (not $e06$1)) (not $e07$1)) (not $e08$1)) (not $e09$1)) (not $e10$1)) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) $e02$1) (not $e03$1)) (not $e04$1)) (not $e05$1)) (not $e06$1)) (not $e07$1)) (not $e08$1)) (not $e09$1)) (not $e10$1)) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) $e03$1) (not $e04$1)) (not $e05$1)) (not $e06$1)) (not $e07$1)) (not $e08$1)) (not $e09$1)) (not $e10$1)) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) $e04$1) (not $e05$1)) (not $e06$1)) (not $e07$1)) (not $e08$1)) (not $e09$1)) (not $e10$1)) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) (not $e04$1)) $e05$1) (not $e06$1)) (not $e07$1)) (not $e08$1)) (not $e09$1)) (not $e10$1)) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) (not $e04$1)) (not $e05$1)) $e06$1) (not $e07$1)) (not $e08$1)) (not $e09$1)) (not $e10$1)) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) (not $e04$1)) (not $e05$1)) (not $e06$1)) $e07$1) (not $e08$1)) (not $e09$1)) (not $e10$1)) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) (not $e04$1)) (not $e05$1)) (not $e06$1)) (not $e07$1)) $e08$1) (not $e09$1)) (not $e10$1)) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) (not $e04$1)) (not $e05$1)) (not $e06$1)) (not $e07$1)) (not $e08$1)) $e09$1) (not $e10$1)) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) (not $e04$1)) (not $e05$1)) (not $e06$1)) (not $e07$1)) (not $e08$1)) (not $e09$1)) $e10$1) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) (not $e04$1)) (not $e05$1)) (not $e06$1)) (not $e07$1)) (not $e08$1)) (not $e09$1)) (not $e10$1)) $e11$1) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) (not $e04$1)) (not $e05$1)) (not $e06$1)) (not $e07$1)) (not $e08$1)) (not $e09$1)) (not $e10$1)) (not $e11$1)) $e12$1))) (= $V175_Sofar$1 (ite %init $V170_X$1 (and $V170_X$1 $V175_Sofar$0))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $e01$~1 () Bool) -(declare-fun $e02$~1 () Bool) -(declare-fun $e03$~1 () Bool) -(declare-fun $e04$~1 () Bool) -(declare-fun $e05$~1 () Bool) -(declare-fun $e06$~1 () Bool) -(declare-fun $e07$~1 () Bool) -(declare-fun $e08$~1 () Bool) -(declare-fun $e09$~1 () Bool) -(declare-fun $e10$~1 () Bool) -(declare-fun $e11$~1 () Bool) -(declare-fun $e12$~1 () Bool) -(declare-fun $V76_erreur$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V170_X$~1 () Bool) -(declare-fun $V175_Sofar$~1 () Bool) -(declare-fun $e01$0 () Bool) -(declare-fun $e02$0 () Bool) -(declare-fun $e03$0 () Bool) -(declare-fun $e04$0 () Bool) -(declare-fun $e05$0 () Bool) -(declare-fun $e06$0 () Bool) -(declare-fun $e07$0 () Bool) -(declare-fun $e08$0 () Bool) -(declare-fun $e09$0 () Bool) -(declare-fun $e10$0 () Bool) -(declare-fun $e11$0 () Bool) -(declare-fun $e12$0 () Bool) -(declare-fun $V76_erreur$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $V170_X$0 () Bool) -(declare-fun $V175_Sofar$0 () Bool) -(assert (T %init $e01$~1 $e02$~1 $e03$~1 $e04$~1 $e05$~1 $e06$~1 $e07$~1 $e08$~1 $e09$~1 $e10$~1 $e11$~1 $e12$~1 $V76_erreur$~1 $OK$~1 $V170_X$~1 $V175_Sofar$~1 $e01$0 $e02$0 $e03$0 $e04$0 $e05$0 $e06$0 $e07$0 $e08$0 $e09$0 $e10$0 $e11$0 $e12$0 $V76_erreur$0 $OK$0 $V170_X$0 $V175_Sofar$0)) diff --git a/bench/tasks/rtp_1_extend_t_part.smt2 b/bench/tasks/rtp_1_extend_t_part.smt2 deleted file mode 100755 index b5dc93c1f..000000000 --- a/bench/tasks/rtp_1_extend_t_part.smt2 +++ /dev/null @@ -1,38 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($e01$0 Bool) ($e02$0 Bool) ($e03$0 Bool) ($e04$0 Bool) ($e05$0 Bool) ($e06$0 Bool) ($e07$0 Bool) ($e08$0 Bool) ($e09$0 Bool) ($e10$0 Bool) ($e11$0 Bool) ($e12$0 Bool) ($V76_erreur$0 Bool) ($OK$0 Bool) ($V170_X$0 Bool) ($V175_Sofar$0 Bool) ($e01$1 Bool) ($e02$1 Bool) ($e03$1 Bool) ($e04$1 Bool) ($e05$1 Bool) ($e06$1 Bool) ($e07$1 Bool) ($e08$1 Bool) ($e09$1 Bool) ($e10$1 Bool) ($e11$1 Bool) ($e12$1 Bool) ($V76_erreur$1 Bool) ($OK$1 Bool) ($V170_X$1 Bool) ($V175_Sofar$1 Bool)) Bool (and (= $OK$1 (=> $V175_Sofar$1 (not $V76_erreur$1))) (= $V170_X$1 (or (or (or (or (or (or (or (or (or (or (or (or (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) (not $e04$1)) (not $e05$1)) (not $e06$1)) (not $e07$1)) (not $e08$1)) (not $e09$1)) (not $e10$1)) (not $e11$1)) (not $e12$1)) (and (and (and (and (and (and (and (and (and (and (and $e01$1 (not $e02$1)) (not $e03$1)) (not $e04$1)) (not $e05$1)) (not $e06$1)) (not $e07$1)) (not $e08$1)) (not $e09$1)) (not $e10$1)) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) $e02$1) (not $e03$1)) (not $e04$1)) (not $e05$1)) (not $e06$1)) (not $e07$1)) (not $e08$1)) (not $e09$1)) (not $e10$1)) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) $e03$1) (not $e04$1)) (not $e05$1)) (not $e06$1)) (not $e07$1)) (not $e08$1)) (not $e09$1)) (not $e10$1)) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) $e04$1) (not $e05$1)) (not $e06$1)) (not $e07$1)) (not $e08$1)) (not $e09$1)) (not $e10$1)) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) (not $e04$1)) $e05$1) (not $e06$1)) (not $e07$1)) (not $e08$1)) (not $e09$1)) (not $e10$1)) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) (not $e04$1)) (not $e05$1)) $e06$1) (not $e07$1)) (not $e08$1)) (not $e09$1)) (not $e10$1)) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) (not $e04$1)) (not $e05$1)) (not $e06$1)) $e07$1) (not $e08$1)) (not $e09$1)) (not $e10$1)) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) (not $e04$1)) (not $e05$1)) (not $e06$1)) (not $e07$1)) $e08$1) (not $e09$1)) (not $e10$1)) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) (not $e04$1)) (not $e05$1)) (not $e06$1)) (not $e07$1)) (not $e08$1)) $e09$1) (not $e10$1)) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) (not $e04$1)) (not $e05$1)) (not $e06$1)) (not $e07$1)) (not $e08$1)) (not $e09$1)) $e10$1) (not $e11$1)) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) (not $e04$1)) (not $e05$1)) (not $e06$1)) (not $e07$1)) (not $e08$1)) (not $e09$1)) (not $e10$1)) $e11$1) (not $e12$1))) (and (and (and (and (and (and (and (and (and (and (and (not $e01$1) (not $e02$1)) (not $e03$1)) (not $e04$1)) (not $e05$1)) (not $e06$1)) (not $e07$1)) (not $e08$1)) (not $e09$1)) (not $e10$1)) (not $e11$1)) $e12$1))) (= $V175_Sofar$1 (ite %init $V170_X$1 (and $V170_X$1 $V175_Sofar$0))))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $e01$~1 () Bool) -(declare-fun $e02$~1 () Bool) -(declare-fun $e03$~1 () Bool) -(declare-fun $e04$~1 () Bool) -(declare-fun $e05$~1 () Bool) -(declare-fun $e06$~1 () Bool) -(declare-fun $e07$~1 () Bool) -(declare-fun $e08$~1 () Bool) -(declare-fun $e09$~1 () Bool) -(declare-fun $e10$~1 () Bool) -(declare-fun $e11$~1 () Bool) -(declare-fun $e12$~1 () Bool) -(declare-fun $V76_erreur$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V170_X$~1 () Bool) -(declare-fun $V175_Sofar$~1 () Bool) -(declare-fun $e01$0 () Bool) -(declare-fun $e02$0 () Bool) -(declare-fun $e03$0 () Bool) -(declare-fun $e04$0 () Bool) -(declare-fun $e05$0 () Bool) -(declare-fun $e06$0 () Bool) -(declare-fun $e07$0 () Bool) -(declare-fun $e08$0 () Bool) -(declare-fun $e09$0 () Bool) -(declare-fun $e10$0 () Bool) -(declare-fun $e11$0 () Bool) -(declare-fun $e12$0 () Bool) -(declare-fun $V76_erreur$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $V170_X$2 () Bool) -(declare-fun $V175_Sofar$2 () Bool) -(assert (and (T %init $e01$~1 $e02$~1 $e03$~1 $e04$~1 $e05$~1 $e06$~1 $e07$~1 $e08$~1 $e09$~1 $e10$~1 $e11$~1 $e12$~1 $V76_erreur$~1 $OK$~1 $V170_X$~1 $V175_Sofar$~1 $e01$0 $e02$0 $e03$0 $e04$0 $e05$0 $e06$0 $e07$0 $e08$0 $e09$0 $e10$0 $e11$0 $e12$0 $V76_erreur$2 $OK$2 $V170_X$2 $V175_Sofar$2) $OK$2)) diff --git a/bench/tasks/speed_e7_207_base_s_part.smt2 b/bench/tasks/speed_e7_207_base_s_part.smt2 deleted file mode 100755 index b3917e712..000000000 --- a/bench/tasks/speed_e7_207_base_s_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (not (and $V19_late$1 $V20_early$1)))) -; Universally quantified variables -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$0 () Bool) -(declare-fun $V20_early$0 () Bool) -(declare-fun $OK$0 () Bool) -(assert (T true $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$0 $V20_early$0 $OK$0)) diff --git a/bench/tasks/speed_e7_207_base_t_part.smt2 b/bench/tasks/speed_e7_207_base_t_part.smt2 deleted file mode 100755 index b797196f0..000000000 --- a/bench/tasks/speed_e7_207_base_t_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (not (and $V19_late$1 $V20_early$1)))) -; Universally quantified variables -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $V20_early$2 () Bool) -(declare-fun $OK$2 () Bool) -(assert (and (T true $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$2 $V20_early$2 $OK$2) $OK$2)) diff --git a/bench/tasks/speed_e7_207_e7_538_base_s_part.smt2 b/bench/tasks/speed_e7_207_e7_538_base_s_part.smt2 deleted file mode 100755 index b3917e712..000000000 --- a/bench/tasks/speed_e7_207_e7_538_base_s_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (not (and $V19_late$1 $V20_early$1)))) -; Universally quantified variables -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$0 () Bool) -(declare-fun $V20_early$0 () Bool) -(declare-fun $OK$0 () Bool) -(assert (T true $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$0 $V20_early$0 $OK$0)) diff --git a/bench/tasks/speed_e7_207_e7_538_base_t_part.smt2 b/bench/tasks/speed_e7_207_e7_538_base_t_part.smt2 deleted file mode 100755 index b797196f0..000000000 --- a/bench/tasks/speed_e7_207_e7_538_base_t_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (not (and $V19_late$1 $V20_early$1)))) -; Universally quantified variables -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $V20_early$2 () Bool) -(declare-fun $OK$2 () Bool) -(assert (and (T true $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$2 $V20_early$2 $OK$2) $OK$2)) diff --git a/bench/tasks/speed_e7_207_e7_538_extend_s_part.smt2 b/bench/tasks/speed_e7_207_e7_538_extend_s_part.smt2 deleted file mode 100755 index 0399476f3..000000000 --- a/bench/tasks/speed_e7_207_e7_538_extend_s_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (not (and $V19_late$1 $V20_early$1)))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$0 () Bool) -(declare-fun $V20_early$0 () Bool) -(declare-fun $OK$0 () Bool) -(assert (T %init $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$0 $V20_early$0 $OK$0)) diff --git a/bench/tasks/speed_e7_207_e7_538_extend_t_part.smt2 b/bench/tasks/speed_e7_207_e7_538_extend_t_part.smt2 deleted file mode 100755 index 2ecdd03ce..000000000 --- a/bench/tasks/speed_e7_207_e7_538_extend_t_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (not (and $V19_late$1 $V20_early$1)))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $V20_early$2 () Bool) -(declare-fun $OK$2 () Bool) -(assert (and (T %init $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$2 $V20_early$2 $OK$2) $OK$2)) diff --git a/bench/tasks/speed_e7_207_e8_507_base1_s_part.smt2 b/bench/tasks/speed_e7_207_e8_507_base1_s_part.smt2 deleted file mode 100755 index b3917e712..000000000 --- a/bench/tasks/speed_e7_207_e8_507_base1_s_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (not (and $V19_late$1 $V20_early$1)))) -; Universally quantified variables -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$0 () Bool) -(declare-fun $V20_early$0 () Bool) -(declare-fun $OK$0 () Bool) -(assert (T true $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$0 $V20_early$0 $OK$0)) diff --git a/bench/tasks/speed_e7_207_e8_507_base1_t_part.smt2 b/bench/tasks/speed_e7_207_e8_507_base1_t_part.smt2 deleted file mode 100755 index b797196f0..000000000 --- a/bench/tasks/speed_e7_207_e8_507_base1_t_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (not (and $V19_late$1 $V20_early$1)))) -; Universally quantified variables -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $V20_early$2 () Bool) -(declare-fun $OK$2 () Bool) -(assert (and (T true $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$2 $V20_early$2 $OK$2) $OK$2)) diff --git a/bench/tasks/speed_e7_207_e8_507_base2_s_part.smt2 b/bench/tasks/speed_e7_207_e8_507_base2_s_part.smt2 deleted file mode 100755 index 4bfdad883..000000000 --- a/bench/tasks/speed_e7_207_e8_507_base2_s_part.smt2 +++ /dev/null @@ -1,16 +0,0 @@ -; K = 2 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (not (and $V19_late$1 $V20_early$1)))) -; Universally quantified variables -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$0 () Bool) -(declare-fun $V20_early$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $V19_late$1 () Bool) -(declare-fun $V20_early$1 () Bool) -(declare-fun $OK$1 () Bool) -(assert (T true $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$0 $V20_early$0 $OK$0)) -(assert $OK$0) -(assert (T false $V19_late$0 $V20_early$0 $OK$0 $V19_late$1 $V20_early$1 $OK$1)) diff --git a/bench/tasks/speed_e7_207_e8_507_base2_t_part.smt2 b/bench/tasks/speed_e7_207_e8_507_base2_t_part.smt2 deleted file mode 100755 index 05ab11a52..000000000 --- a/bench/tasks/speed_e7_207_e8_507_base2_t_part.smt2 +++ /dev/null @@ -1,14 +0,0 @@ -; K = 2 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (not (and $V19_late$1 $V20_early$1)))) -; Universally quantified variables -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$0 () Bool) -(declare-fun $V20_early$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $V19_late$3 () Bool) -(declare-fun $V20_early$3 () Bool) -(declare-fun $OK$3 () Bool) -(assert (and (T false $V19_late$0 $V20_early$0 $OK$0 $V19_late$3 $V20_early$3 $OK$3) $OK$3)) diff --git a/bench/tasks/speed_e7_207_e8_507_extend_s_part.smt2 b/bench/tasks/speed_e7_207_e8_507_extend_s_part.smt2 deleted file mode 100755 index 0399476f3..000000000 --- a/bench/tasks/speed_e7_207_e8_507_extend_s_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (not (and $V19_late$1 $V20_early$1)))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$0 () Bool) -(declare-fun $V20_early$0 () Bool) -(declare-fun $OK$0 () Bool) -(assert (T %init $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$0 $V20_early$0 $OK$0)) diff --git a/bench/tasks/speed_e7_207_e8_507_extend_t_part.smt2 b/bench/tasks/speed_e7_207_e8_507_extend_t_part.smt2 deleted file mode 100755 index 2ecdd03ce..000000000 --- a/bench/tasks/speed_e7_207_e8_507_extend_t_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (not (and $V19_late$1 $V20_early$1)))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $V20_early$2 () Bool) -(declare-fun $OK$2 () Bool) -(assert (and (T %init $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$2 $V20_early$2 $OK$2) $OK$2)) diff --git a/bench/tasks/speed_e7_207_extend_s_part.smt2 b/bench/tasks/speed_e7_207_extend_s_part.smt2 deleted file mode 100755 index 0399476f3..000000000 --- a/bench/tasks/speed_e7_207_extend_s_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (not (and $V19_late$1 $V20_early$1)))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$0 () Bool) -(declare-fun $V20_early$0 () Bool) -(declare-fun $OK$0 () Bool) -(assert (T %init $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$0 $V20_early$0 $OK$0)) diff --git a/bench/tasks/speed_e7_207_extend_t_part.smt2 b/bench/tasks/speed_e7_207_extend_t_part.smt2 deleted file mode 100755 index 2ecdd03ce..000000000 --- a/bench/tasks/speed_e7_207_extend_t_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (not (and $V19_late$1 $V20_early$1)))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $V20_early$2 () Bool) -(declare-fun $OK$2 () Bool) -(assert (and (T %init $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$2 $V20_early$2 $OK$2) $OK$2)) diff --git a/bench/tasks/speed_e8_136_base_s_part.smt2 b/bench/tasks/speed_e8_136_base_s_part.smt2 deleted file mode 100755 index b3917e712..000000000 --- a/bench/tasks/speed_e8_136_base_s_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (not (and $V19_late$1 $V20_early$1)))) -; Universally quantified variables -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$0 () Bool) -(declare-fun $V20_early$0 () Bool) -(declare-fun $OK$0 () Bool) -(assert (T true $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$0 $V20_early$0 $OK$0)) diff --git a/bench/tasks/speed_e8_136_base_t_part.smt2 b/bench/tasks/speed_e8_136_base_t_part.smt2 deleted file mode 100755 index b797196f0..000000000 --- a/bench/tasks/speed_e8_136_base_t_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (not (and $V19_late$1 $V20_early$1)))) -; Universally quantified variables -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $V20_early$2 () Bool) -(declare-fun $OK$2 () Bool) -(assert (and (T true $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$2 $V20_early$2 $OK$2) $OK$2)) diff --git a/bench/tasks/speed_e8_136_extend_s_part.smt2 b/bench/tasks/speed_e8_136_extend_s_part.smt2 deleted file mode 100755 index 0399476f3..000000000 --- a/bench/tasks/speed_e8_136_extend_s_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (not (and $V19_late$1 $V20_early$1)))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$0 () Bool) -(declare-fun $V20_early$0 () Bool) -(declare-fun $OK$0 () Bool) -(assert (T %init $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$0 $V20_early$0 $OK$0)) diff --git a/bench/tasks/speed_e8_136_extend_t_part.smt2 b/bench/tasks/speed_e8_136_extend_t_part.smt2 deleted file mode 100755 index 2ecdd03ce..000000000 --- a/bench/tasks/speed_e8_136_extend_t_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (not (and $V19_late$1 $V20_early$1)))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $V20_early$2 () Bool) -(declare-fun $OK$2 () Bool) -(assert (and (T %init $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$2 $V20_early$2 $OK$2) $OK$2)) diff --git a/bench/tasks/speed_e8_649_e7_709_base_s_part.smt2 b/bench/tasks/speed_e8_649_e7_709_base_s_part.smt2 deleted file mode 100755 index b3917e712..000000000 --- a/bench/tasks/speed_e8_649_e7_709_base_s_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (not (and $V19_late$1 $V20_early$1)))) -; Universally quantified variables -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$0 () Bool) -(declare-fun $V20_early$0 () Bool) -(declare-fun $OK$0 () Bool) -(assert (T true $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$0 $V20_early$0 $OK$0)) diff --git a/bench/tasks/speed_e8_649_e7_709_base_t_part.smt2 b/bench/tasks/speed_e8_649_e7_709_base_t_part.smt2 deleted file mode 100755 index b797196f0..000000000 --- a/bench/tasks/speed_e8_649_e7_709_base_t_part.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (not (and $V19_late$1 $V20_early$1)))) -; Universally quantified variables -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $V20_early$2 () Bool) -(declare-fun $OK$2 () Bool) -(assert (and (T true $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$2 $V20_early$2 $OK$2) $OK$2)) diff --git a/bench/tasks/speed_e8_649_e7_709_extend_s_part.smt2 b/bench/tasks/speed_e8_649_e7_709_extend_s_part.smt2 deleted file mode 100755 index 0399476f3..000000000 --- a/bench/tasks/speed_e8_649_e7_709_extend_s_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (not (and $V19_late$1 $V20_early$1)))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$0 () Bool) -(declare-fun $V20_early$0 () Bool) -(declare-fun $OK$0 () Bool) -(assert (T %init $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$0 $V20_early$0 $OK$0)) diff --git a/bench/tasks/speed_e8_649_e7_709_extend_t_part.smt2 b/bench/tasks/speed_e8_649_e7_709_extend_t_part.smt2 deleted file mode 100755 index 2ecdd03ce..000000000 --- a/bench/tasks/speed_e8_649_e7_709_extend_t_part.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($V19_late$0 Bool) ($V20_early$0 Bool) ($OK$0 Bool) ($V19_late$1 Bool) ($V20_early$1 Bool) ($OK$1 Bool)) Bool (= $OK$1 (not (and $V19_late$1 $V20_early$1)))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $V19_late$~1 () Bool) -(declare-fun $V20_early$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V19_late$2 () Bool) -(declare-fun $V20_early$2 () Bool) -(declare-fun $OK$2 () Bool) -(assert (and (T %init $V19_late$~1 $V20_early$~1 $OK$~1 $V19_late$2 $V20_early$2 $OK$2) $OK$2)) diff --git a/bench/tasks/tramway_e7_1834_base1_s_part.smt2 b/bench/tasks/tramway_e7_1834_base1_s_part.smt2 deleted file mode 100755 index d445b8cfe..000000000 --- a/bench/tasks/tramway_e7_1834_base1_s_part.smt2 +++ /dev/null @@ -1,61 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($request_door$0 Bool) ($warning_start$0 Bool) ($in_station$0 Bool) ($door_is_open$0 Bool) ($V60_open_door$0 Bool) ($V61_close_door$0 Bool) ($V62_door_ok$0 Bool) ($OK$0 Bool) ($V58_env_always_ok$0 Bool) ($V59_prop_ok$0 Bool) ($V250_door_doesnt_open_out_of_station$0 Bool) ($V251_door_opens_before_leaving_station$0 Bool) ($V252_X$0 Bool) ($V253_between_A_and_X$0 Bool) ($V264_env_ok$0 Bool) ($V265_door_doesnt_close_if_not_asked$0 Bool) ($V266_door_doesnt_open_if_not_asked$0 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$0 Bool) ($V268_door_initially_closed$0 Bool) ($V269_initially_not_in_station$0 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$0 Bool) ($V271_warning_start_only_in_station$0 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$0 Bool) ($V273_X$0 Bool) ($V274_X$0 Bool) ($V275_X$0 Bool) ($V276_X$0 Bool) ($~flatten0$0 Bool) ($request_door$1 Bool) ($warning_start$1 Bool) ($in_station$1 Bool) ($door_is_open$1 Bool) ($V60_open_door$1 Bool) ($V61_close_door$1 Bool) ($V62_door_ok$1 Bool) ($OK$1 Bool) ($V58_env_always_ok$1 Bool) ($V59_prop_ok$1 Bool) ($V250_door_doesnt_open_out_of_station$1 Bool) ($V251_door_opens_before_leaving_station$1 Bool) ($V252_X$1 Bool) ($V253_between_A_and_X$1 Bool) ($V264_env_ok$1 Bool) ($V265_door_doesnt_close_if_not_asked$1 Bool) ($V266_door_doesnt_open_if_not_asked$1 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$1 Bool) ($V268_door_initially_closed$1 Bool) ($V269_initially_not_in_station$1 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$1 Bool) ($V271_warning_start_only_in_station$1 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$1 Bool) ($V273_X$1 Bool) ($V274_X$1 Bool) ($V275_X$1 Bool) ($V276_X$1 Bool) ($~flatten0$1 Bool)) Bool (and (= $OK$1 (=> $V58_env_always_ok$1 $V59_prop_ok$1)) (= $V58_env_always_ok$1 (ite %init $V264_env_ok$1 (and $V264_env_ok$1 $V58_env_always_ok$0))) (= $V59_prop_ok$1 (and $V250_door_doesnt_open_out_of_station$1 $V251_door_opens_before_leaving_station$1)) (= $V250_door_doesnt_open_out_of_station$1 (=> $door_is_open$1 $in_station$1)) (= $V251_door_opens_before_leaving_station$1 (not (and $V253_between_A_and_X$1 (ite %init false (or $V252_X$1 (not $V252_X$0)))))) (= $V252_X$1 (not $in_station$1)) (= $V253_between_A_and_X$1 (ite (ite %init false (and $request_door$0 (not $warning_start$0))) true (ite (ite %init false $~flatten0$0) false (ite %init false $V253_between_A_and_X$0)))) (= $V264_env_ok$1 (and (and (and (and (and (and (and $V266_door_doesnt_open_if_not_asked$1 $V265_door_doesnt_close_if_not_asked$1) $V267_tramway_doesnt_start_if_not_door_ok$1) $V268_door_initially_closed$1) $V269_initially_not_in_station$1) $V270_warning_start_and_in_station_go_down_simultaneously$1) $V271_warning_start_only_in_station$1) $V272_warning_start_cant_become_true_when_door_is_opening$1)) (= $V265_door_doesnt_close_if_not_asked$1 (=> (ite %init false (or $door_is_open$1 (not $door_is_open$0))) $V60_open_door$1)) (= $V266_door_doesnt_open_if_not_asked$1 (=> (ite %init false (or $V273_X$1 (not $V273_X$0))) $V61_close_door$1)) (= $V267_tramway_doesnt_start_if_not_door_ok$1 (=> (ite %init false (or $V274_X$1 (not $V274_X$0))) (ite %init false $V62_door_ok$0))) (= $V268_door_initially_closed$1 (ite %init (not $door_is_open$1) true)) (= $V269_initially_not_in_station$1 (ite %init (not $in_station$1) true)) (= $V270_warning_start_and_in_station_go_down_simultaneously$1 (= (ite %init false (or $V275_X$1 (not $V275_X$0))) (ite %init false (or $V276_X$1 (not $V276_X$0))))) (= $V271_warning_start_only_in_station$1 (=> $warning_start$1 $in_station$1)) (= $V272_warning_start_cant_become_true_when_door_is_opening$1 (=> (ite %init false (or $warning_start$1 (not $warning_start$0))) (not $V60_open_door$1))) (= $V273_X$1 (not $door_is_open$1)) (= $V274_X$1 (not $in_station$1)) (= $V275_X$1 (not $in_station$1)) (= $V276_X$1 (not $warning_start$1)) (= $~flatten0$1 (ite %init false $door_is_open$0)))) -; Universally quantified variables -(declare-fun $request_door$~1 () Bool) -(declare-fun $warning_start$~1 () Bool) -(declare-fun $in_station$~1 () Bool) -(declare-fun $door_is_open$~1 () Bool) -(declare-fun $V60_open_door$~1 () Bool) -(declare-fun $V61_close_door$~1 () Bool) -(declare-fun $V62_door_ok$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V58_env_always_ok$~1 () Bool) -(declare-fun $V59_prop_ok$~1 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$~1 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$~1 () Bool) -(declare-fun $V252_X$~1 () Bool) -(declare-fun $V253_between_A_and_X$~1 () Bool) -(declare-fun $V264_env_ok$~1 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$~1 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$~1 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$~1 () Bool) -(declare-fun $V268_door_initially_closed$~1 () Bool) -(declare-fun $V269_initially_not_in_station$~1 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$~1 () Bool) -(declare-fun $V271_warning_start_only_in_station$~1 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$~1 () Bool) -(declare-fun $V273_X$~1 () Bool) -(declare-fun $V274_X$~1 () Bool) -(declare-fun $V275_X$~1 () Bool) -(declare-fun $V276_X$~1 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $request_door$0 () Bool) -(declare-fun $warning_start$0 () Bool) -(declare-fun $in_station$0 () Bool) -(declare-fun $door_is_open$0 () Bool) -(declare-fun $V60_open_door$0 () Bool) -(declare-fun $V61_close_door$0 () Bool) -(declare-fun $V62_door_ok$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $V58_env_always_ok$0 () Bool) -(declare-fun $V59_prop_ok$0 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$0 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$0 () Bool) -(declare-fun $V252_X$0 () Bool) -(declare-fun $V253_between_A_and_X$0 () Bool) -(declare-fun $V264_env_ok$0 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$0 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$0 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$0 () Bool) -(declare-fun $V268_door_initially_closed$0 () Bool) -(declare-fun $V269_initially_not_in_station$0 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$0 () Bool) -(declare-fun $V271_warning_start_only_in_station$0 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$0 () Bool) -(declare-fun $V273_X$0 () Bool) -(declare-fun $V274_X$0 () Bool) -(declare-fun $V275_X$0 () Bool) -(declare-fun $V276_X$0 () Bool) -(declare-fun $~flatten0$0 () Bool) -(assert (T true $request_door$~1 $warning_start$~1 $in_station$~1 $door_is_open$~1 $V60_open_door$~1 $V61_close_door$~1 $V62_door_ok$~1 $OK$~1 $V58_env_always_ok$~1 $V59_prop_ok$~1 $V250_door_doesnt_open_out_of_station$~1 $V251_door_opens_before_leaving_station$~1 $V252_X$~1 $V253_between_A_and_X$~1 $V264_env_ok$~1 $V265_door_doesnt_close_if_not_asked$~1 $V266_door_doesnt_open_if_not_asked$~1 $V267_tramway_doesnt_start_if_not_door_ok$~1 $V268_door_initially_closed$~1 $V269_initially_not_in_station$~1 $V270_warning_start_and_in_station_go_down_simultaneously$~1 $V271_warning_start_only_in_station$~1 $V272_warning_start_cant_become_true_when_door_is_opening$~1 $V273_X$~1 $V274_X$~1 $V275_X$~1 $V276_X$~1 $~flatten0$~1 $request_door$0 $warning_start$0 $in_station$0 $door_is_open$0 $V60_open_door$0 $V61_close_door$0 $V62_door_ok$0 $OK$0 $V58_env_always_ok$0 $V59_prop_ok$0 $V250_door_doesnt_open_out_of_station$0 $V251_door_opens_before_leaving_station$0 $V252_X$0 $V253_between_A_and_X$0 $V264_env_ok$0 $V265_door_doesnt_close_if_not_asked$0 $V266_door_doesnt_open_if_not_asked$0 $V267_tramway_doesnt_start_if_not_door_ok$0 $V268_door_initially_closed$0 $V269_initially_not_in_station$0 $V270_warning_start_and_in_station_go_down_simultaneously$0 $V271_warning_start_only_in_station$0 $V272_warning_start_cant_become_true_when_door_is_opening$0 $V273_X$0 $V274_X$0 $V275_X$0 $V276_X$0 $~flatten0$0)) diff --git a/bench/tasks/tramway_e7_1834_base1_t_part.smt2 b/bench/tasks/tramway_e7_1834_base1_t_part.smt2 deleted file mode 100755 index 6936e7dd7..000000000 --- a/bench/tasks/tramway_e7_1834_base1_t_part.smt2 +++ /dev/null @@ -1,61 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($request_door$0 Bool) ($warning_start$0 Bool) ($in_station$0 Bool) ($door_is_open$0 Bool) ($V60_open_door$0 Bool) ($V61_close_door$0 Bool) ($V62_door_ok$0 Bool) ($OK$0 Bool) ($V58_env_always_ok$0 Bool) ($V59_prop_ok$0 Bool) ($V250_door_doesnt_open_out_of_station$0 Bool) ($V251_door_opens_before_leaving_station$0 Bool) ($V252_X$0 Bool) ($V253_between_A_and_X$0 Bool) ($V264_env_ok$0 Bool) ($V265_door_doesnt_close_if_not_asked$0 Bool) ($V266_door_doesnt_open_if_not_asked$0 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$0 Bool) ($V268_door_initially_closed$0 Bool) ($V269_initially_not_in_station$0 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$0 Bool) ($V271_warning_start_only_in_station$0 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$0 Bool) ($V273_X$0 Bool) ($V274_X$0 Bool) ($V275_X$0 Bool) ($V276_X$0 Bool) ($~flatten0$0 Bool) ($request_door$1 Bool) ($warning_start$1 Bool) ($in_station$1 Bool) ($door_is_open$1 Bool) ($V60_open_door$1 Bool) ($V61_close_door$1 Bool) ($V62_door_ok$1 Bool) ($OK$1 Bool) ($V58_env_always_ok$1 Bool) ($V59_prop_ok$1 Bool) ($V250_door_doesnt_open_out_of_station$1 Bool) ($V251_door_opens_before_leaving_station$1 Bool) ($V252_X$1 Bool) ($V253_between_A_and_X$1 Bool) ($V264_env_ok$1 Bool) ($V265_door_doesnt_close_if_not_asked$1 Bool) ($V266_door_doesnt_open_if_not_asked$1 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$1 Bool) ($V268_door_initially_closed$1 Bool) ($V269_initially_not_in_station$1 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$1 Bool) ($V271_warning_start_only_in_station$1 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$1 Bool) ($V273_X$1 Bool) ($V274_X$1 Bool) ($V275_X$1 Bool) ($V276_X$1 Bool) ($~flatten0$1 Bool)) Bool (and (= $OK$1 (=> $V58_env_always_ok$1 $V59_prop_ok$1)) (= $V58_env_always_ok$1 (ite %init $V264_env_ok$1 (and $V264_env_ok$1 $V58_env_always_ok$0))) (= $V59_prop_ok$1 (and $V250_door_doesnt_open_out_of_station$1 $V251_door_opens_before_leaving_station$1)) (= $V250_door_doesnt_open_out_of_station$1 (=> $door_is_open$1 $in_station$1)) (= $V251_door_opens_before_leaving_station$1 (not (and $V253_between_A_and_X$1 (ite %init false (or $V252_X$1 (not $V252_X$0)))))) (= $V252_X$1 (not $in_station$1)) (= $V253_between_A_and_X$1 (ite (ite %init false (and $request_door$0 (not $warning_start$0))) true (ite (ite %init false $~flatten0$0) false (ite %init false $V253_between_A_and_X$0)))) (= $V264_env_ok$1 (and (and (and (and (and (and (and $V266_door_doesnt_open_if_not_asked$1 $V265_door_doesnt_close_if_not_asked$1) $V267_tramway_doesnt_start_if_not_door_ok$1) $V268_door_initially_closed$1) $V269_initially_not_in_station$1) $V270_warning_start_and_in_station_go_down_simultaneously$1) $V271_warning_start_only_in_station$1) $V272_warning_start_cant_become_true_when_door_is_opening$1)) (= $V265_door_doesnt_close_if_not_asked$1 (=> (ite %init false (or $door_is_open$1 (not $door_is_open$0))) $V60_open_door$1)) (= $V266_door_doesnt_open_if_not_asked$1 (=> (ite %init false (or $V273_X$1 (not $V273_X$0))) $V61_close_door$1)) (= $V267_tramway_doesnt_start_if_not_door_ok$1 (=> (ite %init false (or $V274_X$1 (not $V274_X$0))) (ite %init false $V62_door_ok$0))) (= $V268_door_initially_closed$1 (ite %init (not $door_is_open$1) true)) (= $V269_initially_not_in_station$1 (ite %init (not $in_station$1) true)) (= $V270_warning_start_and_in_station_go_down_simultaneously$1 (= (ite %init false (or $V275_X$1 (not $V275_X$0))) (ite %init false (or $V276_X$1 (not $V276_X$0))))) (= $V271_warning_start_only_in_station$1 (=> $warning_start$1 $in_station$1)) (= $V272_warning_start_cant_become_true_when_door_is_opening$1 (=> (ite %init false (or $warning_start$1 (not $warning_start$0))) (not $V60_open_door$1))) (= $V273_X$1 (not $door_is_open$1)) (= $V274_X$1 (not $in_station$1)) (= $V275_X$1 (not $in_station$1)) (= $V276_X$1 (not $warning_start$1)) (= $~flatten0$1 (ite %init false $door_is_open$0)))) -; Universally quantified variables -(declare-fun $request_door$~1 () Bool) -(declare-fun $warning_start$~1 () Bool) -(declare-fun $in_station$~1 () Bool) -(declare-fun $door_is_open$~1 () Bool) -(declare-fun $V60_open_door$~1 () Bool) -(declare-fun $V61_close_door$~1 () Bool) -(declare-fun $V62_door_ok$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V58_env_always_ok$~1 () Bool) -(declare-fun $V59_prop_ok$~1 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$~1 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$~1 () Bool) -(declare-fun $V252_X$~1 () Bool) -(declare-fun $V253_between_A_and_X$~1 () Bool) -(declare-fun $V264_env_ok$~1 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$~1 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$~1 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$~1 () Bool) -(declare-fun $V268_door_initially_closed$~1 () Bool) -(declare-fun $V269_initially_not_in_station$~1 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$~1 () Bool) -(declare-fun $V271_warning_start_only_in_station$~1 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$~1 () Bool) -(declare-fun $V273_X$~1 () Bool) -(declare-fun $V274_X$~1 () Bool) -(declare-fun $V275_X$~1 () Bool) -(declare-fun $V276_X$~1 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $request_door$0 () Bool) -(declare-fun $warning_start$0 () Bool) -(declare-fun $in_station$0 () Bool) -(declare-fun $door_is_open$0 () Bool) -(declare-fun $V60_open_door$2 () Bool) -(declare-fun $V61_close_door$2 () Bool) -(declare-fun $V62_door_ok$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $V58_env_always_ok$2 () Bool) -(declare-fun $V59_prop_ok$2 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$2 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$2 () Bool) -(declare-fun $V252_X$2 () Bool) -(declare-fun $V253_between_A_and_X$2 () Bool) -(declare-fun $V264_env_ok$2 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$2 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$2 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$2 () Bool) -(declare-fun $V268_door_initially_closed$2 () Bool) -(declare-fun $V269_initially_not_in_station$2 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$2 () Bool) -(declare-fun $V271_warning_start_only_in_station$2 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$2 () Bool) -(declare-fun $V273_X$2 () Bool) -(declare-fun $V274_X$2 () Bool) -(declare-fun $V275_X$2 () Bool) -(declare-fun $V276_X$2 () Bool) -(declare-fun $~flatten0$2 () Bool) -(assert (and (T true $request_door$~1 $warning_start$~1 $in_station$~1 $door_is_open$~1 $V60_open_door$~1 $V61_close_door$~1 $V62_door_ok$~1 $OK$~1 $V58_env_always_ok$~1 $V59_prop_ok$~1 $V250_door_doesnt_open_out_of_station$~1 $V251_door_opens_before_leaving_station$~1 $V252_X$~1 $V253_between_A_and_X$~1 $V264_env_ok$~1 $V265_door_doesnt_close_if_not_asked$~1 $V266_door_doesnt_open_if_not_asked$~1 $V267_tramway_doesnt_start_if_not_door_ok$~1 $V268_door_initially_closed$~1 $V269_initially_not_in_station$~1 $V270_warning_start_and_in_station_go_down_simultaneously$~1 $V271_warning_start_only_in_station$~1 $V272_warning_start_cant_become_true_when_door_is_opening$~1 $V273_X$~1 $V274_X$~1 $V275_X$~1 $V276_X$~1 $~flatten0$~1 $request_door$0 $warning_start$0 $in_station$0 $door_is_open$0 $V60_open_door$2 $V61_close_door$2 $V62_door_ok$2 $OK$2 $V58_env_always_ok$2 $V59_prop_ok$2 $V250_door_doesnt_open_out_of_station$2 $V251_door_opens_before_leaving_station$2 $V252_X$2 $V253_between_A_and_X$2 $V264_env_ok$2 $V265_door_doesnt_close_if_not_asked$2 $V266_door_doesnt_open_if_not_asked$2 $V267_tramway_doesnt_start_if_not_door_ok$2 $V268_door_initially_closed$2 $V269_initially_not_in_station$2 $V270_warning_start_and_in_station_go_down_simultaneously$2 $V271_warning_start_only_in_station$2 $V272_warning_start_cant_become_true_when_door_is_opening$2 $V273_X$2 $V274_X$2 $V275_X$2 $V276_X$2 $~flatten0$2) $OK$2)) diff --git a/bench/tasks/tramway_e7_1834_base2_s_part.smt2 b/bench/tasks/tramway_e7_1834_base2_s_part.smt2 deleted file mode 100755 index 2507a6ace..000000000 --- a/bench/tasks/tramway_e7_1834_base2_s_part.smt2 +++ /dev/null @@ -1,91 +0,0 @@ -; K = 2 -; Transition relation -(define-fun T ((%init Bool) ($request_door$0 Bool) ($warning_start$0 Bool) ($in_station$0 Bool) ($door_is_open$0 Bool) ($V60_open_door$0 Bool) ($V61_close_door$0 Bool) ($V62_door_ok$0 Bool) ($OK$0 Bool) ($V58_env_always_ok$0 Bool) ($V59_prop_ok$0 Bool) ($V250_door_doesnt_open_out_of_station$0 Bool) ($V251_door_opens_before_leaving_station$0 Bool) ($V252_X$0 Bool) ($V253_between_A_and_X$0 Bool) ($V264_env_ok$0 Bool) ($V265_door_doesnt_close_if_not_asked$0 Bool) ($V266_door_doesnt_open_if_not_asked$0 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$0 Bool) ($V268_door_initially_closed$0 Bool) ($V269_initially_not_in_station$0 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$0 Bool) ($V271_warning_start_only_in_station$0 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$0 Bool) ($V273_X$0 Bool) ($V274_X$0 Bool) ($V275_X$0 Bool) ($V276_X$0 Bool) ($~flatten0$0 Bool) ($request_door$1 Bool) ($warning_start$1 Bool) ($in_station$1 Bool) ($door_is_open$1 Bool) ($V60_open_door$1 Bool) ($V61_close_door$1 Bool) ($V62_door_ok$1 Bool) ($OK$1 Bool) ($V58_env_always_ok$1 Bool) ($V59_prop_ok$1 Bool) ($V250_door_doesnt_open_out_of_station$1 Bool) ($V251_door_opens_before_leaving_station$1 Bool) ($V252_X$1 Bool) ($V253_between_A_and_X$1 Bool) ($V264_env_ok$1 Bool) ($V265_door_doesnt_close_if_not_asked$1 Bool) ($V266_door_doesnt_open_if_not_asked$1 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$1 Bool) ($V268_door_initially_closed$1 Bool) ($V269_initially_not_in_station$1 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$1 Bool) ($V271_warning_start_only_in_station$1 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$1 Bool) ($V273_X$1 Bool) ($V274_X$1 Bool) ($V275_X$1 Bool) ($V276_X$1 Bool) ($~flatten0$1 Bool)) Bool (and (= $OK$1 (=> $V58_env_always_ok$1 $V59_prop_ok$1)) (= $V58_env_always_ok$1 (ite %init $V264_env_ok$1 (and $V264_env_ok$1 $V58_env_always_ok$0))) (= $V59_prop_ok$1 (and $V250_door_doesnt_open_out_of_station$1 $V251_door_opens_before_leaving_station$1)) (= $V250_door_doesnt_open_out_of_station$1 (=> $door_is_open$1 $in_station$1)) (= $V251_door_opens_before_leaving_station$1 (not (and $V253_between_A_and_X$1 (ite %init false (or $V252_X$1 (not $V252_X$0)))))) (= $V252_X$1 (not $in_station$1)) (= $V253_between_A_and_X$1 (ite (ite %init false (and $request_door$0 (not $warning_start$0))) true (ite (ite %init false $~flatten0$0) false (ite %init false $V253_between_A_and_X$0)))) (= $V264_env_ok$1 (and (and (and (and (and (and (and $V266_door_doesnt_open_if_not_asked$1 $V265_door_doesnt_close_if_not_asked$1) $V267_tramway_doesnt_start_if_not_door_ok$1) $V268_door_initially_closed$1) $V269_initially_not_in_station$1) $V270_warning_start_and_in_station_go_down_simultaneously$1) $V271_warning_start_only_in_station$1) $V272_warning_start_cant_become_true_when_door_is_opening$1)) (= $V265_door_doesnt_close_if_not_asked$1 (=> (ite %init false (or $door_is_open$1 (not $door_is_open$0))) $V60_open_door$1)) (= $V266_door_doesnt_open_if_not_asked$1 (=> (ite %init false (or $V273_X$1 (not $V273_X$0))) $V61_close_door$1)) (= $V267_tramway_doesnt_start_if_not_door_ok$1 (=> (ite %init false (or $V274_X$1 (not $V274_X$0))) (ite %init false $V62_door_ok$0))) (= $V268_door_initially_closed$1 (ite %init (not $door_is_open$1) true)) (= $V269_initially_not_in_station$1 (ite %init (not $in_station$1) true)) (= $V270_warning_start_and_in_station_go_down_simultaneously$1 (= (ite %init false (or $V275_X$1 (not $V275_X$0))) (ite %init false (or $V276_X$1 (not $V276_X$0))))) (= $V271_warning_start_only_in_station$1 (=> $warning_start$1 $in_station$1)) (= $V272_warning_start_cant_become_true_when_door_is_opening$1 (=> (ite %init false (or $warning_start$1 (not $warning_start$0))) (not $V60_open_door$1))) (= $V273_X$1 (not $door_is_open$1)) (= $V274_X$1 (not $in_station$1)) (= $V275_X$1 (not $in_station$1)) (= $V276_X$1 (not $warning_start$1)) (= $~flatten0$1 (ite %init false $door_is_open$0)))) -; Universally quantified variables -(declare-fun $request_door$~1 () Bool) -(declare-fun $warning_start$~1 () Bool) -(declare-fun $in_station$~1 () Bool) -(declare-fun $door_is_open$~1 () Bool) -(declare-fun $V60_open_door$~1 () Bool) -(declare-fun $V61_close_door$~1 () Bool) -(declare-fun $V62_door_ok$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V58_env_always_ok$~1 () Bool) -(declare-fun $V59_prop_ok$~1 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$~1 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$~1 () Bool) -(declare-fun $V252_X$~1 () Bool) -(declare-fun $V253_between_A_and_X$~1 () Bool) -(declare-fun $V264_env_ok$~1 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$~1 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$~1 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$~1 () Bool) -(declare-fun $V268_door_initially_closed$~1 () Bool) -(declare-fun $V269_initially_not_in_station$~1 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$~1 () Bool) -(declare-fun $V271_warning_start_only_in_station$~1 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$~1 () Bool) -(declare-fun $V273_X$~1 () Bool) -(declare-fun $V274_X$~1 () Bool) -(declare-fun $V275_X$~1 () Bool) -(declare-fun $V276_X$~1 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $request_door$0 () Bool) -(declare-fun $warning_start$0 () Bool) -(declare-fun $in_station$0 () Bool) -(declare-fun $door_is_open$0 () Bool) -(declare-fun $V60_open_door$0 () Bool) -(declare-fun $V61_close_door$0 () Bool) -(declare-fun $V62_door_ok$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $V58_env_always_ok$0 () Bool) -(declare-fun $V59_prop_ok$0 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$0 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$0 () Bool) -(declare-fun $V252_X$0 () Bool) -(declare-fun $V253_between_A_and_X$0 () Bool) -(declare-fun $V264_env_ok$0 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$0 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$0 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$0 () Bool) -(declare-fun $V268_door_initially_closed$0 () Bool) -(declare-fun $V269_initially_not_in_station$0 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$0 () Bool) -(declare-fun $V271_warning_start_only_in_station$0 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$0 () Bool) -(declare-fun $V273_X$0 () Bool) -(declare-fun $V274_X$0 () Bool) -(declare-fun $V275_X$0 () Bool) -(declare-fun $V276_X$0 () Bool) -(declare-fun $~flatten0$0 () Bool) -(declare-fun $request_door$1 () Bool) -(declare-fun $warning_start$1 () Bool) -(declare-fun $in_station$1 () Bool) -(declare-fun $door_is_open$1 () Bool) -(declare-fun $V60_open_door$1 () Bool) -(declare-fun $V61_close_door$1 () Bool) -(declare-fun $V62_door_ok$1 () Bool) -(declare-fun $OK$1 () Bool) -(declare-fun $V58_env_always_ok$1 () Bool) -(declare-fun $V59_prop_ok$1 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$1 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$1 () Bool) -(declare-fun $V252_X$1 () Bool) -(declare-fun $V253_between_A_and_X$1 () Bool) -(declare-fun $V264_env_ok$1 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$1 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$1 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$1 () Bool) -(declare-fun $V268_door_initially_closed$1 () Bool) -(declare-fun $V269_initially_not_in_station$1 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$1 () Bool) -(declare-fun $V271_warning_start_only_in_station$1 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$1 () Bool) -(declare-fun $V273_X$1 () Bool) -(declare-fun $V274_X$1 () Bool) -(declare-fun $V275_X$1 () Bool) -(declare-fun $V276_X$1 () Bool) -(declare-fun $~flatten0$1 () Bool) -(assert (T true $request_door$~1 $warning_start$~1 $in_station$~1 $door_is_open$~1 $V60_open_door$~1 $V61_close_door$~1 $V62_door_ok$~1 $OK$~1 $V58_env_always_ok$~1 $V59_prop_ok$~1 $V250_door_doesnt_open_out_of_station$~1 $V251_door_opens_before_leaving_station$~1 $V252_X$~1 $V253_between_A_and_X$~1 $V264_env_ok$~1 $V265_door_doesnt_close_if_not_asked$~1 $V266_door_doesnt_open_if_not_asked$~1 $V267_tramway_doesnt_start_if_not_door_ok$~1 $V268_door_initially_closed$~1 $V269_initially_not_in_station$~1 $V270_warning_start_and_in_station_go_down_simultaneously$~1 $V271_warning_start_only_in_station$~1 $V272_warning_start_cant_become_true_when_door_is_opening$~1 $V273_X$~1 $V274_X$~1 $V275_X$~1 $V276_X$~1 $~flatten0$~1 $request_door$0 $warning_start$0 $in_station$0 $door_is_open$0 $V60_open_door$0 $V61_close_door$0 $V62_door_ok$0 $OK$0 $V58_env_always_ok$0 $V59_prop_ok$0 $V250_door_doesnt_open_out_of_station$0 $V251_door_opens_before_leaving_station$0 $V252_X$0 $V253_between_A_and_X$0 $V264_env_ok$0 $V265_door_doesnt_close_if_not_asked$0 $V266_door_doesnt_open_if_not_asked$0 $V267_tramway_doesnt_start_if_not_door_ok$0 $V268_door_initially_closed$0 $V269_initially_not_in_station$0 $V270_warning_start_and_in_station_go_down_simultaneously$0 $V271_warning_start_only_in_station$0 $V272_warning_start_cant_become_true_when_door_is_opening$0 $V273_X$0 $V274_X$0 $V275_X$0 $V276_X$0 $~flatten0$0)) -(assert $OK$0) -(assert (T false $request_door$0 $warning_start$0 $in_station$0 $door_is_open$0 $V60_open_door$0 $V61_close_door$0 $V62_door_ok$0 $OK$0 $V58_env_always_ok$0 $V59_prop_ok$0 $V250_door_doesnt_open_out_of_station$0 $V251_door_opens_before_leaving_station$0 $V252_X$0 $V253_between_A_and_X$0 $V264_env_ok$0 $V265_door_doesnt_close_if_not_asked$0 $V266_door_doesnt_open_if_not_asked$0 $V267_tramway_doesnt_start_if_not_door_ok$0 $V268_door_initially_closed$0 $V269_initially_not_in_station$0 $V270_warning_start_and_in_station_go_down_simultaneously$0 $V271_warning_start_only_in_station$0 $V272_warning_start_cant_become_true_when_door_is_opening$0 $V273_X$0 $V274_X$0 $V275_X$0 $V276_X$0 $~flatten0$0 $request_door$1 $warning_start$1 $in_station$1 $door_is_open$1 $V60_open_door$1 $V61_close_door$1 $V62_door_ok$1 $OK$1 $V58_env_always_ok$1 $V59_prop_ok$1 $V250_door_doesnt_open_out_of_station$1 $V251_door_opens_before_leaving_station$1 $V252_X$1 $V253_between_A_and_X$1 $V264_env_ok$1 $V265_door_doesnt_close_if_not_asked$1 $V266_door_doesnt_open_if_not_asked$1 $V267_tramway_doesnt_start_if_not_door_ok$1 $V268_door_initially_closed$1 $V269_initially_not_in_station$1 $V270_warning_start_and_in_station_go_down_simultaneously$1 $V271_warning_start_only_in_station$1 $V272_warning_start_cant_become_true_when_door_is_opening$1 $V273_X$1 $V274_X$1 $V275_X$1 $V276_X$1 $~flatten0$1)) diff --git a/bench/tasks/tramway_e7_1834_base2_t_part.smt2 b/bench/tasks/tramway_e7_1834_base2_t_part.smt2 deleted file mode 100755 index 2b1204d51..000000000 --- a/bench/tasks/tramway_e7_1834_base2_t_part.smt2 +++ /dev/null @@ -1,89 +0,0 @@ -; K = 2 -; Transition relation -(define-fun T ((%init Bool) ($request_door$0 Bool) ($warning_start$0 Bool) ($in_station$0 Bool) ($door_is_open$0 Bool) ($V60_open_door$0 Bool) ($V61_close_door$0 Bool) ($V62_door_ok$0 Bool) ($OK$0 Bool) ($V58_env_always_ok$0 Bool) ($V59_prop_ok$0 Bool) ($V250_door_doesnt_open_out_of_station$0 Bool) ($V251_door_opens_before_leaving_station$0 Bool) ($V252_X$0 Bool) ($V253_between_A_and_X$0 Bool) ($V264_env_ok$0 Bool) ($V265_door_doesnt_close_if_not_asked$0 Bool) ($V266_door_doesnt_open_if_not_asked$0 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$0 Bool) ($V268_door_initially_closed$0 Bool) ($V269_initially_not_in_station$0 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$0 Bool) ($V271_warning_start_only_in_station$0 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$0 Bool) ($V273_X$0 Bool) ($V274_X$0 Bool) ($V275_X$0 Bool) ($V276_X$0 Bool) ($~flatten0$0 Bool) ($request_door$1 Bool) ($warning_start$1 Bool) ($in_station$1 Bool) ($door_is_open$1 Bool) ($V60_open_door$1 Bool) ($V61_close_door$1 Bool) ($V62_door_ok$1 Bool) ($OK$1 Bool) ($V58_env_always_ok$1 Bool) ($V59_prop_ok$1 Bool) ($V250_door_doesnt_open_out_of_station$1 Bool) ($V251_door_opens_before_leaving_station$1 Bool) ($V252_X$1 Bool) ($V253_between_A_and_X$1 Bool) ($V264_env_ok$1 Bool) ($V265_door_doesnt_close_if_not_asked$1 Bool) ($V266_door_doesnt_open_if_not_asked$1 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$1 Bool) ($V268_door_initially_closed$1 Bool) ($V269_initially_not_in_station$1 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$1 Bool) ($V271_warning_start_only_in_station$1 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$1 Bool) ($V273_X$1 Bool) ($V274_X$1 Bool) ($V275_X$1 Bool) ($V276_X$1 Bool) ($~flatten0$1 Bool)) Bool (and (= $OK$1 (=> $V58_env_always_ok$1 $V59_prop_ok$1)) (= $V58_env_always_ok$1 (ite %init $V264_env_ok$1 (and $V264_env_ok$1 $V58_env_always_ok$0))) (= $V59_prop_ok$1 (and $V250_door_doesnt_open_out_of_station$1 $V251_door_opens_before_leaving_station$1)) (= $V250_door_doesnt_open_out_of_station$1 (=> $door_is_open$1 $in_station$1)) (= $V251_door_opens_before_leaving_station$1 (not (and $V253_between_A_and_X$1 (ite %init false (or $V252_X$1 (not $V252_X$0)))))) (= $V252_X$1 (not $in_station$1)) (= $V253_between_A_and_X$1 (ite (ite %init false (and $request_door$0 (not $warning_start$0))) true (ite (ite %init false $~flatten0$0) false (ite %init false $V253_between_A_and_X$0)))) (= $V264_env_ok$1 (and (and (and (and (and (and (and $V266_door_doesnt_open_if_not_asked$1 $V265_door_doesnt_close_if_not_asked$1) $V267_tramway_doesnt_start_if_not_door_ok$1) $V268_door_initially_closed$1) $V269_initially_not_in_station$1) $V270_warning_start_and_in_station_go_down_simultaneously$1) $V271_warning_start_only_in_station$1) $V272_warning_start_cant_become_true_when_door_is_opening$1)) (= $V265_door_doesnt_close_if_not_asked$1 (=> (ite %init false (or $door_is_open$1 (not $door_is_open$0))) $V60_open_door$1)) (= $V266_door_doesnt_open_if_not_asked$1 (=> (ite %init false (or $V273_X$1 (not $V273_X$0))) $V61_close_door$1)) (= $V267_tramway_doesnt_start_if_not_door_ok$1 (=> (ite %init false (or $V274_X$1 (not $V274_X$0))) (ite %init false $V62_door_ok$0))) (= $V268_door_initially_closed$1 (ite %init (not $door_is_open$1) true)) (= $V269_initially_not_in_station$1 (ite %init (not $in_station$1) true)) (= $V270_warning_start_and_in_station_go_down_simultaneously$1 (= (ite %init false (or $V275_X$1 (not $V275_X$0))) (ite %init false (or $V276_X$1 (not $V276_X$0))))) (= $V271_warning_start_only_in_station$1 (=> $warning_start$1 $in_station$1)) (= $V272_warning_start_cant_become_true_when_door_is_opening$1 (=> (ite %init false (or $warning_start$1 (not $warning_start$0))) (not $V60_open_door$1))) (= $V273_X$1 (not $door_is_open$1)) (= $V274_X$1 (not $in_station$1)) (= $V275_X$1 (not $in_station$1)) (= $V276_X$1 (not $warning_start$1)) (= $~flatten0$1 (ite %init false $door_is_open$0)))) -; Universally quantified variables -(declare-fun $request_door$~1 () Bool) -(declare-fun $warning_start$~1 () Bool) -(declare-fun $in_station$~1 () Bool) -(declare-fun $door_is_open$~1 () Bool) -(declare-fun $V60_open_door$~1 () Bool) -(declare-fun $V61_close_door$~1 () Bool) -(declare-fun $V62_door_ok$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V58_env_always_ok$~1 () Bool) -(declare-fun $V59_prop_ok$~1 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$~1 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$~1 () Bool) -(declare-fun $V252_X$~1 () Bool) -(declare-fun $V253_between_A_and_X$~1 () Bool) -(declare-fun $V264_env_ok$~1 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$~1 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$~1 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$~1 () Bool) -(declare-fun $V268_door_initially_closed$~1 () Bool) -(declare-fun $V269_initially_not_in_station$~1 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$~1 () Bool) -(declare-fun $V271_warning_start_only_in_station$~1 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$~1 () Bool) -(declare-fun $V273_X$~1 () Bool) -(declare-fun $V274_X$~1 () Bool) -(declare-fun $V275_X$~1 () Bool) -(declare-fun $V276_X$~1 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $request_door$0 () Bool) -(declare-fun $warning_start$0 () Bool) -(declare-fun $in_station$0 () Bool) -(declare-fun $door_is_open$0 () Bool) -(declare-fun $V60_open_door$0 () Bool) -(declare-fun $V61_close_door$0 () Bool) -(declare-fun $V62_door_ok$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $V58_env_always_ok$0 () Bool) -(declare-fun $V59_prop_ok$0 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$0 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$0 () Bool) -(declare-fun $V252_X$0 () Bool) -(declare-fun $V253_between_A_and_X$0 () Bool) -(declare-fun $V264_env_ok$0 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$0 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$0 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$0 () Bool) -(declare-fun $V268_door_initially_closed$0 () Bool) -(declare-fun $V269_initially_not_in_station$0 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$0 () Bool) -(declare-fun $V271_warning_start_only_in_station$0 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$0 () Bool) -(declare-fun $V273_X$0 () Bool) -(declare-fun $V274_X$0 () Bool) -(declare-fun $V275_X$0 () Bool) -(declare-fun $V276_X$0 () Bool) -(declare-fun $~flatten0$0 () Bool) -(declare-fun $request_door$1 () Bool) -(declare-fun $warning_start$1 () Bool) -(declare-fun $in_station$1 () Bool) -(declare-fun $door_is_open$1 () Bool) -(declare-fun $V60_open_door$3 () Bool) -(declare-fun $V61_close_door$3 () Bool) -(declare-fun $V62_door_ok$3 () Bool) -(declare-fun $OK$3 () Bool) -(declare-fun $V58_env_always_ok$3 () Bool) -(declare-fun $V59_prop_ok$3 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$3 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$3 () Bool) -(declare-fun $V252_X$3 () Bool) -(declare-fun $V253_between_A_and_X$3 () Bool) -(declare-fun $V264_env_ok$3 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$3 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$3 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$3 () Bool) -(declare-fun $V268_door_initially_closed$3 () Bool) -(declare-fun $V269_initially_not_in_station$3 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$3 () Bool) -(declare-fun $V271_warning_start_only_in_station$3 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$3 () Bool) -(declare-fun $V273_X$3 () Bool) -(declare-fun $V274_X$3 () Bool) -(declare-fun $V275_X$3 () Bool) -(declare-fun $V276_X$3 () Bool) -(declare-fun $~flatten0$3 () Bool) -(assert (and (T false $request_door$0 $warning_start$0 $in_station$0 $door_is_open$0 $V60_open_door$0 $V61_close_door$0 $V62_door_ok$0 $OK$0 $V58_env_always_ok$0 $V59_prop_ok$0 $V250_door_doesnt_open_out_of_station$0 $V251_door_opens_before_leaving_station$0 $V252_X$0 $V253_between_A_and_X$0 $V264_env_ok$0 $V265_door_doesnt_close_if_not_asked$0 $V266_door_doesnt_open_if_not_asked$0 $V267_tramway_doesnt_start_if_not_door_ok$0 $V268_door_initially_closed$0 $V269_initially_not_in_station$0 $V270_warning_start_and_in_station_go_down_simultaneously$0 $V271_warning_start_only_in_station$0 $V272_warning_start_cant_become_true_when_door_is_opening$0 $V273_X$0 $V274_X$0 $V275_X$0 $V276_X$0 $~flatten0$0 $request_door$1 $warning_start$1 $in_station$1 $door_is_open$1 $V60_open_door$3 $V61_close_door$3 $V62_door_ok$3 $OK$3 $V58_env_always_ok$3 $V59_prop_ok$3 $V250_door_doesnt_open_out_of_station$3 $V251_door_opens_before_leaving_station$3 $V252_X$3 $V253_between_A_and_X$3 $V264_env_ok$3 $V265_door_doesnt_close_if_not_asked$3 $V266_door_doesnt_open_if_not_asked$3 $V267_tramway_doesnt_start_if_not_door_ok$3 $V268_door_initially_closed$3 $V269_initially_not_in_station$3 $V270_warning_start_and_in_station_go_down_simultaneously$3 $V271_warning_start_only_in_station$3 $V272_warning_start_cant_become_true_when_door_is_opening$3 $V273_X$3 $V274_X$3 $V275_X$3 $V276_X$3 $~flatten0$3) $OK$3)) diff --git a/bench/tasks/tramway_e7_1834_base3_s_part.smt2 b/bench/tasks/tramway_e7_1834_base3_s_part.smt2 deleted file mode 100755 index 49fd2f772..000000000 --- a/bench/tasks/tramway_e7_1834_base3_s_part.smt2 +++ /dev/null @@ -1,121 +0,0 @@ -; K = 3 -; Transition relation -(define-fun T ((%init Bool) ($request_door$0 Bool) ($warning_start$0 Bool) ($in_station$0 Bool) ($door_is_open$0 Bool) ($V60_open_door$0 Bool) ($V61_close_door$0 Bool) ($V62_door_ok$0 Bool) ($OK$0 Bool) ($V58_env_always_ok$0 Bool) ($V59_prop_ok$0 Bool) ($V250_door_doesnt_open_out_of_station$0 Bool) ($V251_door_opens_before_leaving_station$0 Bool) ($V252_X$0 Bool) ($V253_between_A_and_X$0 Bool) ($V264_env_ok$0 Bool) ($V265_door_doesnt_close_if_not_asked$0 Bool) ($V266_door_doesnt_open_if_not_asked$0 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$0 Bool) ($V268_door_initially_closed$0 Bool) ($V269_initially_not_in_station$0 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$0 Bool) ($V271_warning_start_only_in_station$0 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$0 Bool) ($V273_X$0 Bool) ($V274_X$0 Bool) ($V275_X$0 Bool) ($V276_X$0 Bool) ($~flatten0$0 Bool) ($request_door$1 Bool) ($warning_start$1 Bool) ($in_station$1 Bool) ($door_is_open$1 Bool) ($V60_open_door$1 Bool) ($V61_close_door$1 Bool) ($V62_door_ok$1 Bool) ($OK$1 Bool) ($V58_env_always_ok$1 Bool) ($V59_prop_ok$1 Bool) ($V250_door_doesnt_open_out_of_station$1 Bool) ($V251_door_opens_before_leaving_station$1 Bool) ($V252_X$1 Bool) ($V253_between_A_and_X$1 Bool) ($V264_env_ok$1 Bool) ($V265_door_doesnt_close_if_not_asked$1 Bool) ($V266_door_doesnt_open_if_not_asked$1 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$1 Bool) ($V268_door_initially_closed$1 Bool) ($V269_initially_not_in_station$1 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$1 Bool) ($V271_warning_start_only_in_station$1 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$1 Bool) ($V273_X$1 Bool) ($V274_X$1 Bool) ($V275_X$1 Bool) ($V276_X$1 Bool) ($~flatten0$1 Bool)) Bool (and (= $OK$1 (=> $V58_env_always_ok$1 $V59_prop_ok$1)) (= $V58_env_always_ok$1 (ite %init $V264_env_ok$1 (and $V264_env_ok$1 $V58_env_always_ok$0))) (= $V59_prop_ok$1 (and $V250_door_doesnt_open_out_of_station$1 $V251_door_opens_before_leaving_station$1)) (= $V250_door_doesnt_open_out_of_station$1 (=> $door_is_open$1 $in_station$1)) (= $V251_door_opens_before_leaving_station$1 (not (and $V253_between_A_and_X$1 (ite %init false (or $V252_X$1 (not $V252_X$0)))))) (= $V252_X$1 (not $in_station$1)) (= $V253_between_A_and_X$1 (ite (ite %init false (and $request_door$0 (not $warning_start$0))) true (ite (ite %init false $~flatten0$0) false (ite %init false $V253_between_A_and_X$0)))) (= $V264_env_ok$1 (and (and (and (and (and (and (and $V266_door_doesnt_open_if_not_asked$1 $V265_door_doesnt_close_if_not_asked$1) $V267_tramway_doesnt_start_if_not_door_ok$1) $V268_door_initially_closed$1) $V269_initially_not_in_station$1) $V270_warning_start_and_in_station_go_down_simultaneously$1) $V271_warning_start_only_in_station$1) $V272_warning_start_cant_become_true_when_door_is_opening$1)) (= $V265_door_doesnt_close_if_not_asked$1 (=> (ite %init false (or $door_is_open$1 (not $door_is_open$0))) $V60_open_door$1)) (= $V266_door_doesnt_open_if_not_asked$1 (=> (ite %init false (or $V273_X$1 (not $V273_X$0))) $V61_close_door$1)) (= $V267_tramway_doesnt_start_if_not_door_ok$1 (=> (ite %init false (or $V274_X$1 (not $V274_X$0))) (ite %init false $V62_door_ok$0))) (= $V268_door_initially_closed$1 (ite %init (not $door_is_open$1) true)) (= $V269_initially_not_in_station$1 (ite %init (not $in_station$1) true)) (= $V270_warning_start_and_in_station_go_down_simultaneously$1 (= (ite %init false (or $V275_X$1 (not $V275_X$0))) (ite %init false (or $V276_X$1 (not $V276_X$0))))) (= $V271_warning_start_only_in_station$1 (=> $warning_start$1 $in_station$1)) (= $V272_warning_start_cant_become_true_when_door_is_opening$1 (=> (ite %init false (or $warning_start$1 (not $warning_start$0))) (not $V60_open_door$1))) (= $V273_X$1 (not $door_is_open$1)) (= $V274_X$1 (not $in_station$1)) (= $V275_X$1 (not $in_station$1)) (= $V276_X$1 (not $warning_start$1)) (= $~flatten0$1 (ite %init false $door_is_open$0)))) -; Universally quantified variables -(declare-fun $request_door$~1 () Bool) -(declare-fun $warning_start$~1 () Bool) -(declare-fun $in_station$~1 () Bool) -(declare-fun $door_is_open$~1 () Bool) -(declare-fun $V60_open_door$~1 () Bool) -(declare-fun $V61_close_door$~1 () Bool) -(declare-fun $V62_door_ok$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V58_env_always_ok$~1 () Bool) -(declare-fun $V59_prop_ok$~1 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$~1 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$~1 () Bool) -(declare-fun $V252_X$~1 () Bool) -(declare-fun $V253_between_A_and_X$~1 () Bool) -(declare-fun $V264_env_ok$~1 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$~1 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$~1 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$~1 () Bool) -(declare-fun $V268_door_initially_closed$~1 () Bool) -(declare-fun $V269_initially_not_in_station$~1 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$~1 () Bool) -(declare-fun $V271_warning_start_only_in_station$~1 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$~1 () Bool) -(declare-fun $V273_X$~1 () Bool) -(declare-fun $V274_X$~1 () Bool) -(declare-fun $V275_X$~1 () Bool) -(declare-fun $V276_X$~1 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $request_door$0 () Bool) -(declare-fun $warning_start$0 () Bool) -(declare-fun $in_station$0 () Bool) -(declare-fun $door_is_open$0 () Bool) -(declare-fun $V60_open_door$0 () Bool) -(declare-fun $V61_close_door$0 () Bool) -(declare-fun $V62_door_ok$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $V58_env_always_ok$0 () Bool) -(declare-fun $V59_prop_ok$0 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$0 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$0 () Bool) -(declare-fun $V252_X$0 () Bool) -(declare-fun $V253_between_A_and_X$0 () Bool) -(declare-fun $V264_env_ok$0 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$0 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$0 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$0 () Bool) -(declare-fun $V268_door_initially_closed$0 () Bool) -(declare-fun $V269_initially_not_in_station$0 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$0 () Bool) -(declare-fun $V271_warning_start_only_in_station$0 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$0 () Bool) -(declare-fun $V273_X$0 () Bool) -(declare-fun $V274_X$0 () Bool) -(declare-fun $V275_X$0 () Bool) -(declare-fun $V276_X$0 () Bool) -(declare-fun $~flatten0$0 () Bool) -(declare-fun $request_door$1 () Bool) -(declare-fun $warning_start$1 () Bool) -(declare-fun $in_station$1 () Bool) -(declare-fun $door_is_open$1 () Bool) -(declare-fun $V60_open_door$1 () Bool) -(declare-fun $V61_close_door$1 () Bool) -(declare-fun $V62_door_ok$1 () Bool) -(declare-fun $OK$1 () Bool) -(declare-fun $V58_env_always_ok$1 () Bool) -(declare-fun $V59_prop_ok$1 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$1 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$1 () Bool) -(declare-fun $V252_X$1 () Bool) -(declare-fun $V253_between_A_and_X$1 () Bool) -(declare-fun $V264_env_ok$1 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$1 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$1 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$1 () Bool) -(declare-fun $V268_door_initially_closed$1 () Bool) -(declare-fun $V269_initially_not_in_station$1 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$1 () Bool) -(declare-fun $V271_warning_start_only_in_station$1 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$1 () Bool) -(declare-fun $V273_X$1 () Bool) -(declare-fun $V274_X$1 () Bool) -(declare-fun $V275_X$1 () Bool) -(declare-fun $V276_X$1 () Bool) -(declare-fun $~flatten0$1 () Bool) -(declare-fun $request_door$2 () Bool) -(declare-fun $warning_start$2 () Bool) -(declare-fun $in_station$2 () Bool) -(declare-fun $door_is_open$2 () Bool) -(declare-fun $V60_open_door$2 () Bool) -(declare-fun $V61_close_door$2 () Bool) -(declare-fun $V62_door_ok$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $V58_env_always_ok$2 () Bool) -(declare-fun $V59_prop_ok$2 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$2 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$2 () Bool) -(declare-fun $V252_X$2 () Bool) -(declare-fun $V253_between_A_and_X$2 () Bool) -(declare-fun $V264_env_ok$2 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$2 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$2 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$2 () Bool) -(declare-fun $V268_door_initially_closed$2 () Bool) -(declare-fun $V269_initially_not_in_station$2 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$2 () Bool) -(declare-fun $V271_warning_start_only_in_station$2 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$2 () Bool) -(declare-fun $V273_X$2 () Bool) -(declare-fun $V274_X$2 () Bool) -(declare-fun $V275_X$2 () Bool) -(declare-fun $V276_X$2 () Bool) -(declare-fun $~flatten0$2 () Bool) -(assert (T true $request_door$~1 $warning_start$~1 $in_station$~1 $door_is_open$~1 $V60_open_door$~1 $V61_close_door$~1 $V62_door_ok$~1 $OK$~1 $V58_env_always_ok$~1 $V59_prop_ok$~1 $V250_door_doesnt_open_out_of_station$~1 $V251_door_opens_before_leaving_station$~1 $V252_X$~1 $V253_between_A_and_X$~1 $V264_env_ok$~1 $V265_door_doesnt_close_if_not_asked$~1 $V266_door_doesnt_open_if_not_asked$~1 $V267_tramway_doesnt_start_if_not_door_ok$~1 $V268_door_initially_closed$~1 $V269_initially_not_in_station$~1 $V270_warning_start_and_in_station_go_down_simultaneously$~1 $V271_warning_start_only_in_station$~1 $V272_warning_start_cant_become_true_when_door_is_opening$~1 $V273_X$~1 $V274_X$~1 $V275_X$~1 $V276_X$~1 $~flatten0$~1 $request_door$0 $warning_start$0 $in_station$0 $door_is_open$0 $V60_open_door$0 $V61_close_door$0 $V62_door_ok$0 $OK$0 $V58_env_always_ok$0 $V59_prop_ok$0 $V250_door_doesnt_open_out_of_station$0 $V251_door_opens_before_leaving_station$0 $V252_X$0 $V253_between_A_and_X$0 $V264_env_ok$0 $V265_door_doesnt_close_if_not_asked$0 $V266_door_doesnt_open_if_not_asked$0 $V267_tramway_doesnt_start_if_not_door_ok$0 $V268_door_initially_closed$0 $V269_initially_not_in_station$0 $V270_warning_start_and_in_station_go_down_simultaneously$0 $V271_warning_start_only_in_station$0 $V272_warning_start_cant_become_true_when_door_is_opening$0 $V273_X$0 $V274_X$0 $V275_X$0 $V276_X$0 $~flatten0$0)) -(assert $OK$0) -(assert (T false $request_door$0 $warning_start$0 $in_station$0 $door_is_open$0 $V60_open_door$0 $V61_close_door$0 $V62_door_ok$0 $OK$0 $V58_env_always_ok$0 $V59_prop_ok$0 $V250_door_doesnt_open_out_of_station$0 $V251_door_opens_before_leaving_station$0 $V252_X$0 $V253_between_A_and_X$0 $V264_env_ok$0 $V265_door_doesnt_close_if_not_asked$0 $V266_door_doesnt_open_if_not_asked$0 $V267_tramway_doesnt_start_if_not_door_ok$0 $V268_door_initially_closed$0 $V269_initially_not_in_station$0 $V270_warning_start_and_in_station_go_down_simultaneously$0 $V271_warning_start_only_in_station$0 $V272_warning_start_cant_become_true_when_door_is_opening$0 $V273_X$0 $V274_X$0 $V275_X$0 $V276_X$0 $~flatten0$0 $request_door$1 $warning_start$1 $in_station$1 $door_is_open$1 $V60_open_door$1 $V61_close_door$1 $V62_door_ok$1 $OK$1 $V58_env_always_ok$1 $V59_prop_ok$1 $V250_door_doesnt_open_out_of_station$1 $V251_door_opens_before_leaving_station$1 $V252_X$1 $V253_between_A_and_X$1 $V264_env_ok$1 $V265_door_doesnt_close_if_not_asked$1 $V266_door_doesnt_open_if_not_asked$1 $V267_tramway_doesnt_start_if_not_door_ok$1 $V268_door_initially_closed$1 $V269_initially_not_in_station$1 $V270_warning_start_and_in_station_go_down_simultaneously$1 $V271_warning_start_only_in_station$1 $V272_warning_start_cant_become_true_when_door_is_opening$1 $V273_X$1 $V274_X$1 $V275_X$1 $V276_X$1 $~flatten0$1)) -(assert $OK$1) -(assert (T false $request_door$1 $warning_start$1 $in_station$1 $door_is_open$1 $V60_open_door$1 $V61_close_door$1 $V62_door_ok$1 $OK$1 $V58_env_always_ok$1 $V59_prop_ok$1 $V250_door_doesnt_open_out_of_station$1 $V251_door_opens_before_leaving_station$1 $V252_X$1 $V253_between_A_and_X$1 $V264_env_ok$1 $V265_door_doesnt_close_if_not_asked$1 $V266_door_doesnt_open_if_not_asked$1 $V267_tramway_doesnt_start_if_not_door_ok$1 $V268_door_initially_closed$1 $V269_initially_not_in_station$1 $V270_warning_start_and_in_station_go_down_simultaneously$1 $V271_warning_start_only_in_station$1 $V272_warning_start_cant_become_true_when_door_is_opening$1 $V273_X$1 $V274_X$1 $V275_X$1 $V276_X$1 $~flatten0$1 $request_door$2 $warning_start$2 $in_station$2 $door_is_open$2 $V60_open_door$2 $V61_close_door$2 $V62_door_ok$2 $OK$2 $V58_env_always_ok$2 $V59_prop_ok$2 $V250_door_doesnt_open_out_of_station$2 $V251_door_opens_before_leaving_station$2 $V252_X$2 $V253_between_A_and_X$2 $V264_env_ok$2 $V265_door_doesnt_close_if_not_asked$2 $V266_door_doesnt_open_if_not_asked$2 $V267_tramway_doesnt_start_if_not_door_ok$2 $V268_door_initially_closed$2 $V269_initially_not_in_station$2 $V270_warning_start_and_in_station_go_down_simultaneously$2 $V271_warning_start_only_in_station$2 $V272_warning_start_cant_become_true_when_door_is_opening$2 $V273_X$2 $V274_X$2 $V275_X$2 $V276_X$2 $~flatten0$2)) diff --git a/bench/tasks/tramway_e7_1834_base3_t_part.smt2 b/bench/tasks/tramway_e7_1834_base3_t_part.smt2 deleted file mode 100755 index 1d291bf0b..000000000 --- a/bench/tasks/tramway_e7_1834_base3_t_part.smt2 +++ /dev/null @@ -1,117 +0,0 @@ -; K = 3 -; Transition relation -(define-fun T ((%init Bool) ($request_door$0 Bool) ($warning_start$0 Bool) ($in_station$0 Bool) ($door_is_open$0 Bool) ($V60_open_door$0 Bool) ($V61_close_door$0 Bool) ($V62_door_ok$0 Bool) ($OK$0 Bool) ($V58_env_always_ok$0 Bool) ($V59_prop_ok$0 Bool) ($V250_door_doesnt_open_out_of_station$0 Bool) ($V251_door_opens_before_leaving_station$0 Bool) ($V252_X$0 Bool) ($V253_between_A_and_X$0 Bool) ($V264_env_ok$0 Bool) ($V265_door_doesnt_close_if_not_asked$0 Bool) ($V266_door_doesnt_open_if_not_asked$0 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$0 Bool) ($V268_door_initially_closed$0 Bool) ($V269_initially_not_in_station$0 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$0 Bool) ($V271_warning_start_only_in_station$0 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$0 Bool) ($V273_X$0 Bool) ($V274_X$0 Bool) ($V275_X$0 Bool) ($V276_X$0 Bool) ($~flatten0$0 Bool) ($request_door$1 Bool) ($warning_start$1 Bool) ($in_station$1 Bool) ($door_is_open$1 Bool) ($V60_open_door$1 Bool) ($V61_close_door$1 Bool) ($V62_door_ok$1 Bool) ($OK$1 Bool) ($V58_env_always_ok$1 Bool) ($V59_prop_ok$1 Bool) ($V250_door_doesnt_open_out_of_station$1 Bool) ($V251_door_opens_before_leaving_station$1 Bool) ($V252_X$1 Bool) ($V253_between_A_and_X$1 Bool) ($V264_env_ok$1 Bool) ($V265_door_doesnt_close_if_not_asked$1 Bool) ($V266_door_doesnt_open_if_not_asked$1 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$1 Bool) ($V268_door_initially_closed$1 Bool) ($V269_initially_not_in_station$1 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$1 Bool) ($V271_warning_start_only_in_station$1 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$1 Bool) ($V273_X$1 Bool) ($V274_X$1 Bool) ($V275_X$1 Bool) ($V276_X$1 Bool) ($~flatten0$1 Bool)) Bool (and (= $OK$1 (=> $V58_env_always_ok$1 $V59_prop_ok$1)) (= $V58_env_always_ok$1 (ite %init $V264_env_ok$1 (and $V264_env_ok$1 $V58_env_always_ok$0))) (= $V59_prop_ok$1 (and $V250_door_doesnt_open_out_of_station$1 $V251_door_opens_before_leaving_station$1)) (= $V250_door_doesnt_open_out_of_station$1 (=> $door_is_open$1 $in_station$1)) (= $V251_door_opens_before_leaving_station$1 (not (and $V253_between_A_and_X$1 (ite %init false (or $V252_X$1 (not $V252_X$0)))))) (= $V252_X$1 (not $in_station$1)) (= $V253_between_A_and_X$1 (ite (ite %init false (and $request_door$0 (not $warning_start$0))) true (ite (ite %init false $~flatten0$0) false (ite %init false $V253_between_A_and_X$0)))) (= $V264_env_ok$1 (and (and (and (and (and (and (and $V266_door_doesnt_open_if_not_asked$1 $V265_door_doesnt_close_if_not_asked$1) $V267_tramway_doesnt_start_if_not_door_ok$1) $V268_door_initially_closed$1) $V269_initially_not_in_station$1) $V270_warning_start_and_in_station_go_down_simultaneously$1) $V271_warning_start_only_in_station$1) $V272_warning_start_cant_become_true_when_door_is_opening$1)) (= $V265_door_doesnt_close_if_not_asked$1 (=> (ite %init false (or $door_is_open$1 (not $door_is_open$0))) $V60_open_door$1)) (= $V266_door_doesnt_open_if_not_asked$1 (=> (ite %init false (or $V273_X$1 (not $V273_X$0))) $V61_close_door$1)) (= $V267_tramway_doesnt_start_if_not_door_ok$1 (=> (ite %init false (or $V274_X$1 (not $V274_X$0))) (ite %init false $V62_door_ok$0))) (= $V268_door_initially_closed$1 (ite %init (not $door_is_open$1) true)) (= $V269_initially_not_in_station$1 (ite %init (not $in_station$1) true)) (= $V270_warning_start_and_in_station_go_down_simultaneously$1 (= (ite %init false (or $V275_X$1 (not $V275_X$0))) (ite %init false (or $V276_X$1 (not $V276_X$0))))) (= $V271_warning_start_only_in_station$1 (=> $warning_start$1 $in_station$1)) (= $V272_warning_start_cant_become_true_when_door_is_opening$1 (=> (ite %init false (or $warning_start$1 (not $warning_start$0))) (not $V60_open_door$1))) (= $V273_X$1 (not $door_is_open$1)) (= $V274_X$1 (not $in_station$1)) (= $V275_X$1 (not $in_station$1)) (= $V276_X$1 (not $warning_start$1)) (= $~flatten0$1 (ite %init false $door_is_open$0)))) -; Universally quantified variables -(declare-fun $request_door$~1 () Bool) -(declare-fun $warning_start$~1 () Bool) -(declare-fun $in_station$~1 () Bool) -(declare-fun $door_is_open$~1 () Bool) -(declare-fun $V60_open_door$~1 () Bool) -(declare-fun $V61_close_door$~1 () Bool) -(declare-fun $V62_door_ok$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V58_env_always_ok$~1 () Bool) -(declare-fun $V59_prop_ok$~1 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$~1 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$~1 () Bool) -(declare-fun $V252_X$~1 () Bool) -(declare-fun $V253_between_A_and_X$~1 () Bool) -(declare-fun $V264_env_ok$~1 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$~1 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$~1 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$~1 () Bool) -(declare-fun $V268_door_initially_closed$~1 () Bool) -(declare-fun $V269_initially_not_in_station$~1 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$~1 () Bool) -(declare-fun $V271_warning_start_only_in_station$~1 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$~1 () Bool) -(declare-fun $V273_X$~1 () Bool) -(declare-fun $V274_X$~1 () Bool) -(declare-fun $V275_X$~1 () Bool) -(declare-fun $V276_X$~1 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $request_door$0 () Bool) -(declare-fun $warning_start$0 () Bool) -(declare-fun $in_station$0 () Bool) -(declare-fun $door_is_open$0 () Bool) -(declare-fun $V60_open_door$0 () Bool) -(declare-fun $V61_close_door$0 () Bool) -(declare-fun $V62_door_ok$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $V58_env_always_ok$0 () Bool) -(declare-fun $V59_prop_ok$0 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$0 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$0 () Bool) -(declare-fun $V252_X$0 () Bool) -(declare-fun $V253_between_A_and_X$0 () Bool) -(declare-fun $V264_env_ok$0 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$0 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$0 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$0 () Bool) -(declare-fun $V268_door_initially_closed$0 () Bool) -(declare-fun $V269_initially_not_in_station$0 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$0 () Bool) -(declare-fun $V271_warning_start_only_in_station$0 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$0 () Bool) -(declare-fun $V273_X$0 () Bool) -(declare-fun $V274_X$0 () Bool) -(declare-fun $V275_X$0 () Bool) -(declare-fun $V276_X$0 () Bool) -(declare-fun $~flatten0$0 () Bool) -(declare-fun $request_door$1 () Bool) -(declare-fun $warning_start$1 () Bool) -(declare-fun $in_station$1 () Bool) -(declare-fun $door_is_open$1 () Bool) -(declare-fun $V60_open_door$1 () Bool) -(declare-fun $V61_close_door$1 () Bool) -(declare-fun $V62_door_ok$1 () Bool) -(declare-fun $OK$1 () Bool) -(declare-fun $V58_env_always_ok$1 () Bool) -(declare-fun $V59_prop_ok$1 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$1 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$1 () Bool) -(declare-fun $V252_X$1 () Bool) -(declare-fun $V253_between_A_and_X$1 () Bool) -(declare-fun $V264_env_ok$1 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$1 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$1 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$1 () Bool) -(declare-fun $V268_door_initially_closed$1 () Bool) -(declare-fun $V269_initially_not_in_station$1 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$1 () Bool) -(declare-fun $V271_warning_start_only_in_station$1 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$1 () Bool) -(declare-fun $V273_X$1 () Bool) -(declare-fun $V274_X$1 () Bool) -(declare-fun $V275_X$1 () Bool) -(declare-fun $V276_X$1 () Bool) -(declare-fun $~flatten0$1 () Bool) -(declare-fun $request_door$2 () Bool) -(declare-fun $warning_start$2 () Bool) -(declare-fun $in_station$2 () Bool) -(declare-fun $door_is_open$2 () Bool) -(declare-fun $V60_open_door$4 () Bool) -(declare-fun $V61_close_door$4 () Bool) -(declare-fun $V62_door_ok$4 () Bool) -(declare-fun $OK$4 () Bool) -(declare-fun $V58_env_always_ok$4 () Bool) -(declare-fun $V59_prop_ok$4 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$4 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$4 () Bool) -(declare-fun $V252_X$4 () Bool) -(declare-fun $V253_between_A_and_X$4 () Bool) -(declare-fun $V264_env_ok$4 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$4 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$4 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$4 () Bool) -(declare-fun $V268_door_initially_closed$4 () Bool) -(declare-fun $V269_initially_not_in_station$4 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$4 () Bool) -(declare-fun $V271_warning_start_only_in_station$4 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$4 () Bool) -(declare-fun $V273_X$4 () Bool) -(declare-fun $V274_X$4 () Bool) -(declare-fun $V275_X$4 () Bool) -(declare-fun $V276_X$4 () Bool) -(declare-fun $~flatten0$4 () Bool) -(assert (and (T false $request_door$1 $warning_start$1 $in_station$1 $door_is_open$1 $V60_open_door$1 $V61_close_door$1 $V62_door_ok$1 $OK$1 $V58_env_always_ok$1 $V59_prop_ok$1 $V250_door_doesnt_open_out_of_station$1 $V251_door_opens_before_leaving_station$1 $V252_X$1 $V253_between_A_and_X$1 $V264_env_ok$1 $V265_door_doesnt_close_if_not_asked$1 $V266_door_doesnt_open_if_not_asked$1 $V267_tramway_doesnt_start_if_not_door_ok$1 $V268_door_initially_closed$1 $V269_initially_not_in_station$1 $V270_warning_start_and_in_station_go_down_simultaneously$1 $V271_warning_start_only_in_station$1 $V272_warning_start_cant_become_true_when_door_is_opening$1 $V273_X$1 $V274_X$1 $V275_X$1 $V276_X$1 $~flatten0$1 $request_door$2 $warning_start$2 $in_station$2 $door_is_open$2 $V60_open_door$4 $V61_close_door$4 $V62_door_ok$4 $OK$4 $V58_env_always_ok$4 $V59_prop_ok$4 $V250_door_doesnt_open_out_of_station$4 $V251_door_opens_before_leaving_station$4 $V252_X$4 $V253_between_A_and_X$4 $V264_env_ok$4 $V265_door_doesnt_close_if_not_asked$4 $V266_door_doesnt_open_if_not_asked$4 $V267_tramway_doesnt_start_if_not_door_ok$4 $V268_door_initially_closed$4 $V269_initially_not_in_station$4 $V270_warning_start_and_in_station_go_down_simultaneously$4 $V271_warning_start_only_in_station$4 $V272_warning_start_cant_become_true_when_door_is_opening$4 $V273_X$4 $V274_X$4 $V275_X$4 $V276_X$4 $~flatten0$4) $OK$4)) diff --git a/bench/tasks/tramway_e7_1834_base4_s_part.smt2 b/bench/tasks/tramway_e7_1834_base4_s_part.smt2 deleted file mode 100755 index b21f62753..000000000 --- a/bench/tasks/tramway_e7_1834_base4_s_part.smt2 +++ /dev/null @@ -1,151 +0,0 @@ -; K = 4 -; Transition relation -(define-fun T ((%init Bool) ($request_door$0 Bool) ($warning_start$0 Bool) ($in_station$0 Bool) ($door_is_open$0 Bool) ($V60_open_door$0 Bool) ($V61_close_door$0 Bool) ($V62_door_ok$0 Bool) ($OK$0 Bool) ($V58_env_always_ok$0 Bool) ($V59_prop_ok$0 Bool) ($V250_door_doesnt_open_out_of_station$0 Bool) ($V251_door_opens_before_leaving_station$0 Bool) ($V252_X$0 Bool) ($V253_between_A_and_X$0 Bool) ($V264_env_ok$0 Bool) ($V265_door_doesnt_close_if_not_asked$0 Bool) ($V266_door_doesnt_open_if_not_asked$0 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$0 Bool) ($V268_door_initially_closed$0 Bool) ($V269_initially_not_in_station$0 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$0 Bool) ($V271_warning_start_only_in_station$0 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$0 Bool) ($V273_X$0 Bool) ($V274_X$0 Bool) ($V275_X$0 Bool) ($V276_X$0 Bool) ($~flatten0$0 Bool) ($request_door$1 Bool) ($warning_start$1 Bool) ($in_station$1 Bool) ($door_is_open$1 Bool) ($V60_open_door$1 Bool) ($V61_close_door$1 Bool) ($V62_door_ok$1 Bool) ($OK$1 Bool) ($V58_env_always_ok$1 Bool) ($V59_prop_ok$1 Bool) ($V250_door_doesnt_open_out_of_station$1 Bool) ($V251_door_opens_before_leaving_station$1 Bool) ($V252_X$1 Bool) ($V253_between_A_and_X$1 Bool) ($V264_env_ok$1 Bool) ($V265_door_doesnt_close_if_not_asked$1 Bool) ($V266_door_doesnt_open_if_not_asked$1 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$1 Bool) ($V268_door_initially_closed$1 Bool) ($V269_initially_not_in_station$1 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$1 Bool) ($V271_warning_start_only_in_station$1 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$1 Bool) ($V273_X$1 Bool) ($V274_X$1 Bool) ($V275_X$1 Bool) ($V276_X$1 Bool) ($~flatten0$1 Bool)) Bool (and (= $OK$1 (=> $V58_env_always_ok$1 $V59_prop_ok$1)) (= $V58_env_always_ok$1 (ite %init $V264_env_ok$1 (and $V264_env_ok$1 $V58_env_always_ok$0))) (= $V59_prop_ok$1 (and $V250_door_doesnt_open_out_of_station$1 $V251_door_opens_before_leaving_station$1)) (= $V250_door_doesnt_open_out_of_station$1 (=> $door_is_open$1 $in_station$1)) (= $V251_door_opens_before_leaving_station$1 (not (and $V253_between_A_and_X$1 (ite %init false (or $V252_X$1 (not $V252_X$0)))))) (= $V252_X$1 (not $in_station$1)) (= $V253_between_A_and_X$1 (ite (ite %init false (and $request_door$0 (not $warning_start$0))) true (ite (ite %init false $~flatten0$0) false (ite %init false $V253_between_A_and_X$0)))) (= $V264_env_ok$1 (and (and (and (and (and (and (and $V266_door_doesnt_open_if_not_asked$1 $V265_door_doesnt_close_if_not_asked$1) $V267_tramway_doesnt_start_if_not_door_ok$1) $V268_door_initially_closed$1) $V269_initially_not_in_station$1) $V270_warning_start_and_in_station_go_down_simultaneously$1) $V271_warning_start_only_in_station$1) $V272_warning_start_cant_become_true_when_door_is_opening$1)) (= $V265_door_doesnt_close_if_not_asked$1 (=> (ite %init false (or $door_is_open$1 (not $door_is_open$0))) $V60_open_door$1)) (= $V266_door_doesnt_open_if_not_asked$1 (=> (ite %init false (or $V273_X$1 (not $V273_X$0))) $V61_close_door$1)) (= $V267_tramway_doesnt_start_if_not_door_ok$1 (=> (ite %init false (or $V274_X$1 (not $V274_X$0))) (ite %init false $V62_door_ok$0))) (= $V268_door_initially_closed$1 (ite %init (not $door_is_open$1) true)) (= $V269_initially_not_in_station$1 (ite %init (not $in_station$1) true)) (= $V270_warning_start_and_in_station_go_down_simultaneously$1 (= (ite %init false (or $V275_X$1 (not $V275_X$0))) (ite %init false (or $V276_X$1 (not $V276_X$0))))) (= $V271_warning_start_only_in_station$1 (=> $warning_start$1 $in_station$1)) (= $V272_warning_start_cant_become_true_when_door_is_opening$1 (=> (ite %init false (or $warning_start$1 (not $warning_start$0))) (not $V60_open_door$1))) (= $V273_X$1 (not $door_is_open$1)) (= $V274_X$1 (not $in_station$1)) (= $V275_X$1 (not $in_station$1)) (= $V276_X$1 (not $warning_start$1)) (= $~flatten0$1 (ite %init false $door_is_open$0)))) -; Universally quantified variables -(declare-fun $request_door$~1 () Bool) -(declare-fun $warning_start$~1 () Bool) -(declare-fun $in_station$~1 () Bool) -(declare-fun $door_is_open$~1 () Bool) -(declare-fun $V60_open_door$~1 () Bool) -(declare-fun $V61_close_door$~1 () Bool) -(declare-fun $V62_door_ok$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V58_env_always_ok$~1 () Bool) -(declare-fun $V59_prop_ok$~1 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$~1 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$~1 () Bool) -(declare-fun $V252_X$~1 () Bool) -(declare-fun $V253_between_A_and_X$~1 () Bool) -(declare-fun $V264_env_ok$~1 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$~1 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$~1 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$~1 () Bool) -(declare-fun $V268_door_initially_closed$~1 () Bool) -(declare-fun $V269_initially_not_in_station$~1 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$~1 () Bool) -(declare-fun $V271_warning_start_only_in_station$~1 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$~1 () Bool) -(declare-fun $V273_X$~1 () Bool) -(declare-fun $V274_X$~1 () Bool) -(declare-fun $V275_X$~1 () Bool) -(declare-fun $V276_X$~1 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $request_door$0 () Bool) -(declare-fun $warning_start$0 () Bool) -(declare-fun $in_station$0 () Bool) -(declare-fun $door_is_open$0 () Bool) -(declare-fun $V60_open_door$0 () Bool) -(declare-fun $V61_close_door$0 () Bool) -(declare-fun $V62_door_ok$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $V58_env_always_ok$0 () Bool) -(declare-fun $V59_prop_ok$0 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$0 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$0 () Bool) -(declare-fun $V252_X$0 () Bool) -(declare-fun $V253_between_A_and_X$0 () Bool) -(declare-fun $V264_env_ok$0 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$0 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$0 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$0 () Bool) -(declare-fun $V268_door_initially_closed$0 () Bool) -(declare-fun $V269_initially_not_in_station$0 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$0 () Bool) -(declare-fun $V271_warning_start_only_in_station$0 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$0 () Bool) -(declare-fun $V273_X$0 () Bool) -(declare-fun $V274_X$0 () Bool) -(declare-fun $V275_X$0 () Bool) -(declare-fun $V276_X$0 () Bool) -(declare-fun $~flatten0$0 () Bool) -(declare-fun $request_door$1 () Bool) -(declare-fun $warning_start$1 () Bool) -(declare-fun $in_station$1 () Bool) -(declare-fun $door_is_open$1 () Bool) -(declare-fun $V60_open_door$1 () Bool) -(declare-fun $V61_close_door$1 () Bool) -(declare-fun $V62_door_ok$1 () Bool) -(declare-fun $OK$1 () Bool) -(declare-fun $V58_env_always_ok$1 () Bool) -(declare-fun $V59_prop_ok$1 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$1 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$1 () Bool) -(declare-fun $V252_X$1 () Bool) -(declare-fun $V253_between_A_and_X$1 () Bool) -(declare-fun $V264_env_ok$1 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$1 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$1 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$1 () Bool) -(declare-fun $V268_door_initially_closed$1 () Bool) -(declare-fun $V269_initially_not_in_station$1 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$1 () Bool) -(declare-fun $V271_warning_start_only_in_station$1 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$1 () Bool) -(declare-fun $V273_X$1 () Bool) -(declare-fun $V274_X$1 () Bool) -(declare-fun $V275_X$1 () Bool) -(declare-fun $V276_X$1 () Bool) -(declare-fun $~flatten0$1 () Bool) -(declare-fun $request_door$2 () Bool) -(declare-fun $warning_start$2 () Bool) -(declare-fun $in_station$2 () Bool) -(declare-fun $door_is_open$2 () Bool) -(declare-fun $V60_open_door$2 () Bool) -(declare-fun $V61_close_door$2 () Bool) -(declare-fun $V62_door_ok$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $V58_env_always_ok$2 () Bool) -(declare-fun $V59_prop_ok$2 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$2 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$2 () Bool) -(declare-fun $V252_X$2 () Bool) -(declare-fun $V253_between_A_and_X$2 () Bool) -(declare-fun $V264_env_ok$2 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$2 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$2 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$2 () Bool) -(declare-fun $V268_door_initially_closed$2 () Bool) -(declare-fun $V269_initially_not_in_station$2 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$2 () Bool) -(declare-fun $V271_warning_start_only_in_station$2 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$2 () Bool) -(declare-fun $V273_X$2 () Bool) -(declare-fun $V274_X$2 () Bool) -(declare-fun $V275_X$2 () Bool) -(declare-fun $V276_X$2 () Bool) -(declare-fun $~flatten0$2 () Bool) -(declare-fun $request_door$3 () Bool) -(declare-fun $warning_start$3 () Bool) -(declare-fun $in_station$3 () Bool) -(declare-fun $door_is_open$3 () Bool) -(declare-fun $V60_open_door$3 () Bool) -(declare-fun $V61_close_door$3 () Bool) -(declare-fun $V62_door_ok$3 () Bool) -(declare-fun $OK$3 () Bool) -(declare-fun $V58_env_always_ok$3 () Bool) -(declare-fun $V59_prop_ok$3 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$3 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$3 () Bool) -(declare-fun $V252_X$3 () Bool) -(declare-fun $V253_between_A_and_X$3 () Bool) -(declare-fun $V264_env_ok$3 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$3 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$3 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$3 () Bool) -(declare-fun $V268_door_initially_closed$3 () Bool) -(declare-fun $V269_initially_not_in_station$3 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$3 () Bool) -(declare-fun $V271_warning_start_only_in_station$3 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$3 () Bool) -(declare-fun $V273_X$3 () Bool) -(declare-fun $V274_X$3 () Bool) -(declare-fun $V275_X$3 () Bool) -(declare-fun $V276_X$3 () Bool) -(declare-fun $~flatten0$3 () Bool) -(assert (T true $request_door$~1 $warning_start$~1 $in_station$~1 $door_is_open$~1 $V60_open_door$~1 $V61_close_door$~1 $V62_door_ok$~1 $OK$~1 $V58_env_always_ok$~1 $V59_prop_ok$~1 $V250_door_doesnt_open_out_of_station$~1 $V251_door_opens_before_leaving_station$~1 $V252_X$~1 $V253_between_A_and_X$~1 $V264_env_ok$~1 $V265_door_doesnt_close_if_not_asked$~1 $V266_door_doesnt_open_if_not_asked$~1 $V267_tramway_doesnt_start_if_not_door_ok$~1 $V268_door_initially_closed$~1 $V269_initially_not_in_station$~1 $V270_warning_start_and_in_station_go_down_simultaneously$~1 $V271_warning_start_only_in_station$~1 $V272_warning_start_cant_become_true_when_door_is_opening$~1 $V273_X$~1 $V274_X$~1 $V275_X$~1 $V276_X$~1 $~flatten0$~1 $request_door$0 $warning_start$0 $in_station$0 $door_is_open$0 $V60_open_door$0 $V61_close_door$0 $V62_door_ok$0 $OK$0 $V58_env_always_ok$0 $V59_prop_ok$0 $V250_door_doesnt_open_out_of_station$0 $V251_door_opens_before_leaving_station$0 $V252_X$0 $V253_between_A_and_X$0 $V264_env_ok$0 $V265_door_doesnt_close_if_not_asked$0 $V266_door_doesnt_open_if_not_asked$0 $V267_tramway_doesnt_start_if_not_door_ok$0 $V268_door_initially_closed$0 $V269_initially_not_in_station$0 $V270_warning_start_and_in_station_go_down_simultaneously$0 $V271_warning_start_only_in_station$0 $V272_warning_start_cant_become_true_when_door_is_opening$0 $V273_X$0 $V274_X$0 $V275_X$0 $V276_X$0 $~flatten0$0)) -(assert $OK$0) -(assert (T false $request_door$0 $warning_start$0 $in_station$0 $door_is_open$0 $V60_open_door$0 $V61_close_door$0 $V62_door_ok$0 $OK$0 $V58_env_always_ok$0 $V59_prop_ok$0 $V250_door_doesnt_open_out_of_station$0 $V251_door_opens_before_leaving_station$0 $V252_X$0 $V253_between_A_and_X$0 $V264_env_ok$0 $V265_door_doesnt_close_if_not_asked$0 $V266_door_doesnt_open_if_not_asked$0 $V267_tramway_doesnt_start_if_not_door_ok$0 $V268_door_initially_closed$0 $V269_initially_not_in_station$0 $V270_warning_start_and_in_station_go_down_simultaneously$0 $V271_warning_start_only_in_station$0 $V272_warning_start_cant_become_true_when_door_is_opening$0 $V273_X$0 $V274_X$0 $V275_X$0 $V276_X$0 $~flatten0$0 $request_door$1 $warning_start$1 $in_station$1 $door_is_open$1 $V60_open_door$1 $V61_close_door$1 $V62_door_ok$1 $OK$1 $V58_env_always_ok$1 $V59_prop_ok$1 $V250_door_doesnt_open_out_of_station$1 $V251_door_opens_before_leaving_station$1 $V252_X$1 $V253_between_A_and_X$1 $V264_env_ok$1 $V265_door_doesnt_close_if_not_asked$1 $V266_door_doesnt_open_if_not_asked$1 $V267_tramway_doesnt_start_if_not_door_ok$1 $V268_door_initially_closed$1 $V269_initially_not_in_station$1 $V270_warning_start_and_in_station_go_down_simultaneously$1 $V271_warning_start_only_in_station$1 $V272_warning_start_cant_become_true_when_door_is_opening$1 $V273_X$1 $V274_X$1 $V275_X$1 $V276_X$1 $~flatten0$1)) -(assert $OK$1) -(assert (T false $request_door$1 $warning_start$1 $in_station$1 $door_is_open$1 $V60_open_door$1 $V61_close_door$1 $V62_door_ok$1 $OK$1 $V58_env_always_ok$1 $V59_prop_ok$1 $V250_door_doesnt_open_out_of_station$1 $V251_door_opens_before_leaving_station$1 $V252_X$1 $V253_between_A_and_X$1 $V264_env_ok$1 $V265_door_doesnt_close_if_not_asked$1 $V266_door_doesnt_open_if_not_asked$1 $V267_tramway_doesnt_start_if_not_door_ok$1 $V268_door_initially_closed$1 $V269_initially_not_in_station$1 $V270_warning_start_and_in_station_go_down_simultaneously$1 $V271_warning_start_only_in_station$1 $V272_warning_start_cant_become_true_when_door_is_opening$1 $V273_X$1 $V274_X$1 $V275_X$1 $V276_X$1 $~flatten0$1 $request_door$2 $warning_start$2 $in_station$2 $door_is_open$2 $V60_open_door$2 $V61_close_door$2 $V62_door_ok$2 $OK$2 $V58_env_always_ok$2 $V59_prop_ok$2 $V250_door_doesnt_open_out_of_station$2 $V251_door_opens_before_leaving_station$2 $V252_X$2 $V253_between_A_and_X$2 $V264_env_ok$2 $V265_door_doesnt_close_if_not_asked$2 $V266_door_doesnt_open_if_not_asked$2 $V267_tramway_doesnt_start_if_not_door_ok$2 $V268_door_initially_closed$2 $V269_initially_not_in_station$2 $V270_warning_start_and_in_station_go_down_simultaneously$2 $V271_warning_start_only_in_station$2 $V272_warning_start_cant_become_true_when_door_is_opening$2 $V273_X$2 $V274_X$2 $V275_X$2 $V276_X$2 $~flatten0$2)) -(assert $OK$2) -(assert (T false $request_door$2 $warning_start$2 $in_station$2 $door_is_open$2 $V60_open_door$2 $V61_close_door$2 $V62_door_ok$2 $OK$2 $V58_env_always_ok$2 $V59_prop_ok$2 $V250_door_doesnt_open_out_of_station$2 $V251_door_opens_before_leaving_station$2 $V252_X$2 $V253_between_A_and_X$2 $V264_env_ok$2 $V265_door_doesnt_close_if_not_asked$2 $V266_door_doesnt_open_if_not_asked$2 $V267_tramway_doesnt_start_if_not_door_ok$2 $V268_door_initially_closed$2 $V269_initially_not_in_station$2 $V270_warning_start_and_in_station_go_down_simultaneously$2 $V271_warning_start_only_in_station$2 $V272_warning_start_cant_become_true_when_door_is_opening$2 $V273_X$2 $V274_X$2 $V275_X$2 $V276_X$2 $~flatten0$2 $request_door$3 $warning_start$3 $in_station$3 $door_is_open$3 $V60_open_door$3 $V61_close_door$3 $V62_door_ok$3 $OK$3 $V58_env_always_ok$3 $V59_prop_ok$3 $V250_door_doesnt_open_out_of_station$3 $V251_door_opens_before_leaving_station$3 $V252_X$3 $V253_between_A_and_X$3 $V264_env_ok$3 $V265_door_doesnt_close_if_not_asked$3 $V266_door_doesnt_open_if_not_asked$3 $V267_tramway_doesnt_start_if_not_door_ok$3 $V268_door_initially_closed$3 $V269_initially_not_in_station$3 $V270_warning_start_and_in_station_go_down_simultaneously$3 $V271_warning_start_only_in_station$3 $V272_warning_start_cant_become_true_when_door_is_opening$3 $V273_X$3 $V274_X$3 $V275_X$3 $V276_X$3 $~flatten0$3)) diff --git a/bench/tasks/tramway_e7_1834_base4_t_part.smt2 b/bench/tasks/tramway_e7_1834_base4_t_part.smt2 deleted file mode 100755 index 925a510e6..000000000 --- a/bench/tasks/tramway_e7_1834_base4_t_part.smt2 +++ /dev/null @@ -1,145 +0,0 @@ -; K = 4 -; Transition relation -(define-fun T ((%init Bool) ($request_door$0 Bool) ($warning_start$0 Bool) ($in_station$0 Bool) ($door_is_open$0 Bool) ($V60_open_door$0 Bool) ($V61_close_door$0 Bool) ($V62_door_ok$0 Bool) ($OK$0 Bool) ($V58_env_always_ok$0 Bool) ($V59_prop_ok$0 Bool) ($V250_door_doesnt_open_out_of_station$0 Bool) ($V251_door_opens_before_leaving_station$0 Bool) ($V252_X$0 Bool) ($V253_between_A_and_X$0 Bool) ($V264_env_ok$0 Bool) ($V265_door_doesnt_close_if_not_asked$0 Bool) ($V266_door_doesnt_open_if_not_asked$0 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$0 Bool) ($V268_door_initially_closed$0 Bool) ($V269_initially_not_in_station$0 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$0 Bool) ($V271_warning_start_only_in_station$0 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$0 Bool) ($V273_X$0 Bool) ($V274_X$0 Bool) ($V275_X$0 Bool) ($V276_X$0 Bool) ($~flatten0$0 Bool) ($request_door$1 Bool) ($warning_start$1 Bool) ($in_station$1 Bool) ($door_is_open$1 Bool) ($V60_open_door$1 Bool) ($V61_close_door$1 Bool) ($V62_door_ok$1 Bool) ($OK$1 Bool) ($V58_env_always_ok$1 Bool) ($V59_prop_ok$1 Bool) ($V250_door_doesnt_open_out_of_station$1 Bool) ($V251_door_opens_before_leaving_station$1 Bool) ($V252_X$1 Bool) ($V253_between_A_and_X$1 Bool) ($V264_env_ok$1 Bool) ($V265_door_doesnt_close_if_not_asked$1 Bool) ($V266_door_doesnt_open_if_not_asked$1 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$1 Bool) ($V268_door_initially_closed$1 Bool) ($V269_initially_not_in_station$1 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$1 Bool) ($V271_warning_start_only_in_station$1 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$1 Bool) ($V273_X$1 Bool) ($V274_X$1 Bool) ($V275_X$1 Bool) ($V276_X$1 Bool) ($~flatten0$1 Bool)) Bool (and (= $OK$1 (=> $V58_env_always_ok$1 $V59_prop_ok$1)) (= $V58_env_always_ok$1 (ite %init $V264_env_ok$1 (and $V264_env_ok$1 $V58_env_always_ok$0))) (= $V59_prop_ok$1 (and $V250_door_doesnt_open_out_of_station$1 $V251_door_opens_before_leaving_station$1)) (= $V250_door_doesnt_open_out_of_station$1 (=> $door_is_open$1 $in_station$1)) (= $V251_door_opens_before_leaving_station$1 (not (and $V253_between_A_and_X$1 (ite %init false (or $V252_X$1 (not $V252_X$0)))))) (= $V252_X$1 (not $in_station$1)) (= $V253_between_A_and_X$1 (ite (ite %init false (and $request_door$0 (not $warning_start$0))) true (ite (ite %init false $~flatten0$0) false (ite %init false $V253_between_A_and_X$0)))) (= $V264_env_ok$1 (and (and (and (and (and (and (and $V266_door_doesnt_open_if_not_asked$1 $V265_door_doesnt_close_if_not_asked$1) $V267_tramway_doesnt_start_if_not_door_ok$1) $V268_door_initially_closed$1) $V269_initially_not_in_station$1) $V270_warning_start_and_in_station_go_down_simultaneously$1) $V271_warning_start_only_in_station$1) $V272_warning_start_cant_become_true_when_door_is_opening$1)) (= $V265_door_doesnt_close_if_not_asked$1 (=> (ite %init false (or $door_is_open$1 (not $door_is_open$0))) $V60_open_door$1)) (= $V266_door_doesnt_open_if_not_asked$1 (=> (ite %init false (or $V273_X$1 (not $V273_X$0))) $V61_close_door$1)) (= $V267_tramway_doesnt_start_if_not_door_ok$1 (=> (ite %init false (or $V274_X$1 (not $V274_X$0))) (ite %init false $V62_door_ok$0))) (= $V268_door_initially_closed$1 (ite %init (not $door_is_open$1) true)) (= $V269_initially_not_in_station$1 (ite %init (not $in_station$1) true)) (= $V270_warning_start_and_in_station_go_down_simultaneously$1 (= (ite %init false (or $V275_X$1 (not $V275_X$0))) (ite %init false (or $V276_X$1 (not $V276_X$0))))) (= $V271_warning_start_only_in_station$1 (=> $warning_start$1 $in_station$1)) (= $V272_warning_start_cant_become_true_when_door_is_opening$1 (=> (ite %init false (or $warning_start$1 (not $warning_start$0))) (not $V60_open_door$1))) (= $V273_X$1 (not $door_is_open$1)) (= $V274_X$1 (not $in_station$1)) (= $V275_X$1 (not $in_station$1)) (= $V276_X$1 (not $warning_start$1)) (= $~flatten0$1 (ite %init false $door_is_open$0)))) -; Universally quantified variables -(declare-fun $request_door$~1 () Bool) -(declare-fun $warning_start$~1 () Bool) -(declare-fun $in_station$~1 () Bool) -(declare-fun $door_is_open$~1 () Bool) -(declare-fun $V60_open_door$~1 () Bool) -(declare-fun $V61_close_door$~1 () Bool) -(declare-fun $V62_door_ok$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V58_env_always_ok$~1 () Bool) -(declare-fun $V59_prop_ok$~1 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$~1 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$~1 () Bool) -(declare-fun $V252_X$~1 () Bool) -(declare-fun $V253_between_A_and_X$~1 () Bool) -(declare-fun $V264_env_ok$~1 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$~1 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$~1 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$~1 () Bool) -(declare-fun $V268_door_initially_closed$~1 () Bool) -(declare-fun $V269_initially_not_in_station$~1 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$~1 () Bool) -(declare-fun $V271_warning_start_only_in_station$~1 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$~1 () Bool) -(declare-fun $V273_X$~1 () Bool) -(declare-fun $V274_X$~1 () Bool) -(declare-fun $V275_X$~1 () Bool) -(declare-fun $V276_X$~1 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $request_door$0 () Bool) -(declare-fun $warning_start$0 () Bool) -(declare-fun $in_station$0 () Bool) -(declare-fun $door_is_open$0 () Bool) -(declare-fun $V60_open_door$0 () Bool) -(declare-fun $V61_close_door$0 () Bool) -(declare-fun $V62_door_ok$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $V58_env_always_ok$0 () Bool) -(declare-fun $V59_prop_ok$0 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$0 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$0 () Bool) -(declare-fun $V252_X$0 () Bool) -(declare-fun $V253_between_A_and_X$0 () Bool) -(declare-fun $V264_env_ok$0 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$0 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$0 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$0 () Bool) -(declare-fun $V268_door_initially_closed$0 () Bool) -(declare-fun $V269_initially_not_in_station$0 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$0 () Bool) -(declare-fun $V271_warning_start_only_in_station$0 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$0 () Bool) -(declare-fun $V273_X$0 () Bool) -(declare-fun $V274_X$0 () Bool) -(declare-fun $V275_X$0 () Bool) -(declare-fun $V276_X$0 () Bool) -(declare-fun $~flatten0$0 () Bool) -(declare-fun $request_door$1 () Bool) -(declare-fun $warning_start$1 () Bool) -(declare-fun $in_station$1 () Bool) -(declare-fun $door_is_open$1 () Bool) -(declare-fun $V60_open_door$1 () Bool) -(declare-fun $V61_close_door$1 () Bool) -(declare-fun $V62_door_ok$1 () Bool) -(declare-fun $OK$1 () Bool) -(declare-fun $V58_env_always_ok$1 () Bool) -(declare-fun $V59_prop_ok$1 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$1 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$1 () Bool) -(declare-fun $V252_X$1 () Bool) -(declare-fun $V253_between_A_and_X$1 () Bool) -(declare-fun $V264_env_ok$1 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$1 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$1 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$1 () Bool) -(declare-fun $V268_door_initially_closed$1 () Bool) -(declare-fun $V269_initially_not_in_station$1 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$1 () Bool) -(declare-fun $V271_warning_start_only_in_station$1 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$1 () Bool) -(declare-fun $V273_X$1 () Bool) -(declare-fun $V274_X$1 () Bool) -(declare-fun $V275_X$1 () Bool) -(declare-fun $V276_X$1 () Bool) -(declare-fun $~flatten0$1 () Bool) -(declare-fun $request_door$2 () Bool) -(declare-fun $warning_start$2 () Bool) -(declare-fun $in_station$2 () Bool) -(declare-fun $door_is_open$2 () Bool) -(declare-fun $V60_open_door$2 () Bool) -(declare-fun $V61_close_door$2 () Bool) -(declare-fun $V62_door_ok$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $V58_env_always_ok$2 () Bool) -(declare-fun $V59_prop_ok$2 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$2 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$2 () Bool) -(declare-fun $V252_X$2 () Bool) -(declare-fun $V253_between_A_and_X$2 () Bool) -(declare-fun $V264_env_ok$2 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$2 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$2 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$2 () Bool) -(declare-fun $V268_door_initially_closed$2 () Bool) -(declare-fun $V269_initially_not_in_station$2 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$2 () Bool) -(declare-fun $V271_warning_start_only_in_station$2 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$2 () Bool) -(declare-fun $V273_X$2 () Bool) -(declare-fun $V274_X$2 () Bool) -(declare-fun $V275_X$2 () Bool) -(declare-fun $V276_X$2 () Bool) -(declare-fun $~flatten0$2 () Bool) -(declare-fun $request_door$3 () Bool) -(declare-fun $warning_start$3 () Bool) -(declare-fun $in_station$3 () Bool) -(declare-fun $door_is_open$3 () Bool) -(declare-fun $V60_open_door$5 () Bool) -(declare-fun $V61_close_door$5 () Bool) -(declare-fun $V62_door_ok$5 () Bool) -(declare-fun $OK$5 () Bool) -(declare-fun $V58_env_always_ok$5 () Bool) -(declare-fun $V59_prop_ok$5 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$5 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$5 () Bool) -(declare-fun $V252_X$5 () Bool) -(declare-fun $V253_between_A_and_X$5 () Bool) -(declare-fun $V264_env_ok$5 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$5 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$5 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$5 () Bool) -(declare-fun $V268_door_initially_closed$5 () Bool) -(declare-fun $V269_initially_not_in_station$5 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$5 () Bool) -(declare-fun $V271_warning_start_only_in_station$5 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$5 () Bool) -(declare-fun $V273_X$5 () Bool) -(declare-fun $V274_X$5 () Bool) -(declare-fun $V275_X$5 () Bool) -(declare-fun $V276_X$5 () Bool) -(declare-fun $~flatten0$5 () Bool) -(assert (and (T false $request_door$2 $warning_start$2 $in_station$2 $door_is_open$2 $V60_open_door$2 $V61_close_door$2 $V62_door_ok$2 $OK$2 $V58_env_always_ok$2 $V59_prop_ok$2 $V250_door_doesnt_open_out_of_station$2 $V251_door_opens_before_leaving_station$2 $V252_X$2 $V253_between_A_and_X$2 $V264_env_ok$2 $V265_door_doesnt_close_if_not_asked$2 $V266_door_doesnt_open_if_not_asked$2 $V267_tramway_doesnt_start_if_not_door_ok$2 $V268_door_initially_closed$2 $V269_initially_not_in_station$2 $V270_warning_start_and_in_station_go_down_simultaneously$2 $V271_warning_start_only_in_station$2 $V272_warning_start_cant_become_true_when_door_is_opening$2 $V273_X$2 $V274_X$2 $V275_X$2 $V276_X$2 $~flatten0$2 $request_door$3 $warning_start$3 $in_station$3 $door_is_open$3 $V60_open_door$5 $V61_close_door$5 $V62_door_ok$5 $OK$5 $V58_env_always_ok$5 $V59_prop_ok$5 $V250_door_doesnt_open_out_of_station$5 $V251_door_opens_before_leaving_station$5 $V252_X$5 $V253_between_A_and_X$5 $V264_env_ok$5 $V265_door_doesnt_close_if_not_asked$5 $V266_door_doesnt_open_if_not_asked$5 $V267_tramway_doesnt_start_if_not_door_ok$5 $V268_door_initially_closed$5 $V269_initially_not_in_station$5 $V270_warning_start_and_in_station_go_down_simultaneously$5 $V271_warning_start_only_in_station$5 $V272_warning_start_cant_become_true_when_door_is_opening$5 $V273_X$5 $V274_X$5 $V275_X$5 $V276_X$5 $~flatten0$5) $OK$5)) diff --git a/bench/tasks/tramway_e7_1834_e7_2363_base1_s_part.smt2 b/bench/tasks/tramway_e7_1834_e7_2363_base1_s_part.smt2 deleted file mode 100755 index db93d68a9..000000000 --- a/bench/tasks/tramway_e7_1834_e7_2363_base1_s_part.smt2 +++ /dev/null @@ -1,61 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($request_door$0 Bool) ($warning_start$0 Bool) ($in_station$0 Bool) ($door_is_open$0 Bool) ($V62_door_ok$0 Bool) ($V60_open_door$0 Bool) ($V61_close_door$0 Bool) ($OK$0 Bool) ($V58_env_always_ok$0 Bool) ($V59_prop_ok$0 Bool) ($V251_door_opens_before_leaving_station$0 Bool) ($V253_between_A_and_X$0 Bool) ($V264_env_ok$0 Bool) ($V265_door_doesnt_close_if_not_asked$0 Bool) ($V266_door_doesnt_open_if_not_asked$0 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$0 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$0 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$0 Bool) ($V250_door_doesnt_open_out_of_station$0 Bool) ($V252_X$0 Bool) ($V268_door_initially_closed$0 Bool) ($V269_initially_not_in_station$0 Bool) ($V271_warning_start_only_in_station$0 Bool) ($V273_X$0 Bool) ($V274_X$0 Bool) ($V275_X$0 Bool) ($V276_X$0 Bool) ($~flatten0$0 Bool) ($request_door$1 Bool) ($warning_start$1 Bool) ($in_station$1 Bool) ($door_is_open$1 Bool) ($V62_door_ok$1 Bool) ($V60_open_door$1 Bool) ($V61_close_door$1 Bool) ($OK$1 Bool) ($V58_env_always_ok$1 Bool) ($V59_prop_ok$1 Bool) ($V251_door_opens_before_leaving_station$1 Bool) ($V253_between_A_and_X$1 Bool) ($V264_env_ok$1 Bool) ($V265_door_doesnt_close_if_not_asked$1 Bool) ($V266_door_doesnt_open_if_not_asked$1 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$1 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$1 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$1 Bool) ($V250_door_doesnt_open_out_of_station$1 Bool) ($V252_X$1 Bool) ($V268_door_initially_closed$1 Bool) ($V269_initially_not_in_station$1 Bool) ($V271_warning_start_only_in_station$1 Bool) ($V273_X$1 Bool) ($V274_X$1 Bool) ($V275_X$1 Bool) ($V276_X$1 Bool) ($~flatten0$1 Bool)) Bool (and (= $OK$1 (=> $V58_env_always_ok$1 $V59_prop_ok$1)) (= $V58_env_always_ok$1 (ite %init $V264_env_ok$1 (and $V264_env_ok$1 $V58_env_always_ok$0))) (= $V59_prop_ok$1 (and $V250_door_doesnt_open_out_of_station$1 $V251_door_opens_before_leaving_station$1)) (= $V250_door_doesnt_open_out_of_station$1 (=> $door_is_open$1 $in_station$1)) (= $V251_door_opens_before_leaving_station$1 (not (or $V253_between_A_and_X$1 (ite %init false (or $V252_X$1 (not $V252_X$0)))))) (= $V252_X$1 (not $in_station$1)) (= $V253_between_A_and_X$1 (ite (ite %init false (and $request_door$0 (not $warning_start$0))) true (ite (ite %init false $~flatten0$0) false (ite %init false $V253_between_A_and_X$0)))) (= $V264_env_ok$1 (and (and (and (and (and (and (and $V266_door_doesnt_open_if_not_asked$1 $V265_door_doesnt_close_if_not_asked$1) $V267_tramway_doesnt_start_if_not_door_ok$1) $V268_door_initially_closed$1) $V269_initially_not_in_station$1) $V270_warning_start_and_in_station_go_down_simultaneously$1) $V271_warning_start_only_in_station$1) $V272_warning_start_cant_become_true_when_door_is_opening$1)) (= $V265_door_doesnt_close_if_not_asked$1 (=> (ite %init false (or $door_is_open$1 (not $door_is_open$0))) $V60_open_door$1)) (= $V266_door_doesnt_open_if_not_asked$1 (=> (ite %init false (or $V273_X$1 (not $V273_X$0))) $V61_close_door$1)) (= $V267_tramway_doesnt_start_if_not_door_ok$1 (=> (ite %init false (or $V274_X$1 (not $V274_X$0))) (ite %init false $V62_door_ok$0))) (= $V268_door_initially_closed$1 (ite %init (not $door_is_open$1) true)) (= $V269_initially_not_in_station$1 (ite %init (not $in_station$1) true)) (= $V270_warning_start_and_in_station_go_down_simultaneously$1 (= (ite %init false (or $V275_X$1 (not $V275_X$0))) (ite %init false (or $V276_X$1 (not $V276_X$0))))) (= $V271_warning_start_only_in_station$1 (=> $warning_start$1 $in_station$1)) (= $V272_warning_start_cant_become_true_when_door_is_opening$1 (=> (ite %init false (or $warning_start$1 (not $warning_start$0))) (not $V60_open_door$1))) (= $V273_X$1 (not $door_is_open$1)) (= $V274_X$1 (not $in_station$1)) (= $V275_X$1 (not $in_station$1)) (= $V276_X$1 (not $warning_start$1)) (= $~flatten0$1 (ite %init false $door_is_open$0)))) -; Universally quantified variables -(declare-fun $request_door$~1 () Bool) -(declare-fun $warning_start$~1 () Bool) -(declare-fun $in_station$~1 () Bool) -(declare-fun $door_is_open$~1 () Bool) -(declare-fun $V62_door_ok$~1 () Bool) -(declare-fun $V60_open_door$~1 () Bool) -(declare-fun $V61_close_door$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V58_env_always_ok$~1 () Bool) -(declare-fun $V59_prop_ok$~1 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$~1 () Bool) -(declare-fun $V253_between_A_and_X$~1 () Bool) -(declare-fun $V264_env_ok$~1 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$~1 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$~1 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$~1 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$~1 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$~1 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$~1 () Bool) -(declare-fun $V252_X$~1 () Bool) -(declare-fun $V268_door_initially_closed$~1 () Bool) -(declare-fun $V269_initially_not_in_station$~1 () Bool) -(declare-fun $V271_warning_start_only_in_station$~1 () Bool) -(declare-fun $V273_X$~1 () Bool) -(declare-fun $V274_X$~1 () Bool) -(declare-fun $V275_X$~1 () Bool) -(declare-fun $V276_X$~1 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $request_door$0 () Bool) -(declare-fun $warning_start$0 () Bool) -(declare-fun $in_station$0 () Bool) -(declare-fun $door_is_open$0 () Bool) -(declare-fun $V62_door_ok$0 () Bool) -(declare-fun $V60_open_door$0 () Bool) -(declare-fun $V61_close_door$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $V58_env_always_ok$0 () Bool) -(declare-fun $V59_prop_ok$0 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$0 () Bool) -(declare-fun $V253_between_A_and_X$0 () Bool) -(declare-fun $V264_env_ok$0 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$0 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$0 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$0 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$0 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$0 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$0 () Bool) -(declare-fun $V252_X$0 () Bool) -(declare-fun $V268_door_initially_closed$0 () Bool) -(declare-fun $V269_initially_not_in_station$0 () Bool) -(declare-fun $V271_warning_start_only_in_station$0 () Bool) -(declare-fun $V273_X$0 () Bool) -(declare-fun $V274_X$0 () Bool) -(declare-fun $V275_X$0 () Bool) -(declare-fun $V276_X$0 () Bool) -(declare-fun $~flatten0$0 () Bool) -(assert (T true $request_door$~1 $warning_start$~1 $in_station$~1 $door_is_open$~1 $V62_door_ok$~1 $V60_open_door$~1 $V61_close_door$~1 $OK$~1 $V58_env_always_ok$~1 $V59_prop_ok$~1 $V251_door_opens_before_leaving_station$~1 $V253_between_A_and_X$~1 $V264_env_ok$~1 $V265_door_doesnt_close_if_not_asked$~1 $V266_door_doesnt_open_if_not_asked$~1 $V267_tramway_doesnt_start_if_not_door_ok$~1 $V270_warning_start_and_in_station_go_down_simultaneously$~1 $V272_warning_start_cant_become_true_when_door_is_opening$~1 $V250_door_doesnt_open_out_of_station$~1 $V252_X$~1 $V268_door_initially_closed$~1 $V269_initially_not_in_station$~1 $V271_warning_start_only_in_station$~1 $V273_X$~1 $V274_X$~1 $V275_X$~1 $V276_X$~1 $~flatten0$~1 $request_door$0 $warning_start$0 $in_station$0 $door_is_open$0 $V62_door_ok$0 $V60_open_door$0 $V61_close_door$0 $OK$0 $V58_env_always_ok$0 $V59_prop_ok$0 $V251_door_opens_before_leaving_station$0 $V253_between_A_and_X$0 $V264_env_ok$0 $V265_door_doesnt_close_if_not_asked$0 $V266_door_doesnt_open_if_not_asked$0 $V267_tramway_doesnt_start_if_not_door_ok$0 $V270_warning_start_and_in_station_go_down_simultaneously$0 $V272_warning_start_cant_become_true_when_door_is_opening$0 $V250_door_doesnt_open_out_of_station$0 $V252_X$0 $V268_door_initially_closed$0 $V269_initially_not_in_station$0 $V271_warning_start_only_in_station$0 $V273_X$0 $V274_X$0 $V275_X$0 $V276_X$0 $~flatten0$0)) diff --git a/bench/tasks/tramway_e7_1834_e7_2363_base1_t_part.smt2 b/bench/tasks/tramway_e7_1834_e7_2363_base1_t_part.smt2 deleted file mode 100755 index 98248c02e..000000000 --- a/bench/tasks/tramway_e7_1834_e7_2363_base1_t_part.smt2 +++ /dev/null @@ -1,61 +0,0 @@ -; K = 1 -; Transition relation -(define-fun T ((%init Bool) ($request_door$0 Bool) ($warning_start$0 Bool) ($in_station$0 Bool) ($door_is_open$0 Bool) ($V62_door_ok$0 Bool) ($V60_open_door$0 Bool) ($V61_close_door$0 Bool) ($OK$0 Bool) ($V58_env_always_ok$0 Bool) ($V59_prop_ok$0 Bool) ($V251_door_opens_before_leaving_station$0 Bool) ($V253_between_A_and_X$0 Bool) ($V264_env_ok$0 Bool) ($V265_door_doesnt_close_if_not_asked$0 Bool) ($V266_door_doesnt_open_if_not_asked$0 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$0 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$0 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$0 Bool) ($V250_door_doesnt_open_out_of_station$0 Bool) ($V252_X$0 Bool) ($V268_door_initially_closed$0 Bool) ($V269_initially_not_in_station$0 Bool) ($V271_warning_start_only_in_station$0 Bool) ($V273_X$0 Bool) ($V274_X$0 Bool) ($V275_X$0 Bool) ($V276_X$0 Bool) ($~flatten0$0 Bool) ($request_door$1 Bool) ($warning_start$1 Bool) ($in_station$1 Bool) ($door_is_open$1 Bool) ($V62_door_ok$1 Bool) ($V60_open_door$1 Bool) ($V61_close_door$1 Bool) ($OK$1 Bool) ($V58_env_always_ok$1 Bool) ($V59_prop_ok$1 Bool) ($V251_door_opens_before_leaving_station$1 Bool) ($V253_between_A_and_X$1 Bool) ($V264_env_ok$1 Bool) ($V265_door_doesnt_close_if_not_asked$1 Bool) ($V266_door_doesnt_open_if_not_asked$1 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$1 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$1 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$1 Bool) ($V250_door_doesnt_open_out_of_station$1 Bool) ($V252_X$1 Bool) ($V268_door_initially_closed$1 Bool) ($V269_initially_not_in_station$1 Bool) ($V271_warning_start_only_in_station$1 Bool) ($V273_X$1 Bool) ($V274_X$1 Bool) ($V275_X$1 Bool) ($V276_X$1 Bool) ($~flatten0$1 Bool)) Bool (and (= $OK$1 (=> $V58_env_always_ok$1 $V59_prop_ok$1)) (= $V58_env_always_ok$1 (ite %init $V264_env_ok$1 (and $V264_env_ok$1 $V58_env_always_ok$0))) (= $V59_prop_ok$1 (and $V250_door_doesnt_open_out_of_station$1 $V251_door_opens_before_leaving_station$1)) (= $V250_door_doesnt_open_out_of_station$1 (=> $door_is_open$1 $in_station$1)) (= $V251_door_opens_before_leaving_station$1 (not (or $V253_between_A_and_X$1 (ite %init false (or $V252_X$1 (not $V252_X$0)))))) (= $V252_X$1 (not $in_station$1)) (= $V253_between_A_and_X$1 (ite (ite %init false (and $request_door$0 (not $warning_start$0))) true (ite (ite %init false $~flatten0$0) false (ite %init false $V253_between_A_and_X$0)))) (= $V264_env_ok$1 (and (and (and (and (and (and (and $V266_door_doesnt_open_if_not_asked$1 $V265_door_doesnt_close_if_not_asked$1) $V267_tramway_doesnt_start_if_not_door_ok$1) $V268_door_initially_closed$1) $V269_initially_not_in_station$1) $V270_warning_start_and_in_station_go_down_simultaneously$1) $V271_warning_start_only_in_station$1) $V272_warning_start_cant_become_true_when_door_is_opening$1)) (= $V265_door_doesnt_close_if_not_asked$1 (=> (ite %init false (or $door_is_open$1 (not $door_is_open$0))) $V60_open_door$1)) (= $V266_door_doesnt_open_if_not_asked$1 (=> (ite %init false (or $V273_X$1 (not $V273_X$0))) $V61_close_door$1)) (= $V267_tramway_doesnt_start_if_not_door_ok$1 (=> (ite %init false (or $V274_X$1 (not $V274_X$0))) (ite %init false $V62_door_ok$0))) (= $V268_door_initially_closed$1 (ite %init (not $door_is_open$1) true)) (= $V269_initially_not_in_station$1 (ite %init (not $in_station$1) true)) (= $V270_warning_start_and_in_station_go_down_simultaneously$1 (= (ite %init false (or $V275_X$1 (not $V275_X$0))) (ite %init false (or $V276_X$1 (not $V276_X$0))))) (= $V271_warning_start_only_in_station$1 (=> $warning_start$1 $in_station$1)) (= $V272_warning_start_cant_become_true_when_door_is_opening$1 (=> (ite %init false (or $warning_start$1 (not $warning_start$0))) (not $V60_open_door$1))) (= $V273_X$1 (not $door_is_open$1)) (= $V274_X$1 (not $in_station$1)) (= $V275_X$1 (not $in_station$1)) (= $V276_X$1 (not $warning_start$1)) (= $~flatten0$1 (ite %init false $door_is_open$0)))) -; Universally quantified variables -(declare-fun $request_door$~1 () Bool) -(declare-fun $warning_start$~1 () Bool) -(declare-fun $in_station$~1 () Bool) -(declare-fun $door_is_open$~1 () Bool) -(declare-fun $V62_door_ok$~1 () Bool) -(declare-fun $V60_open_door$~1 () Bool) -(declare-fun $V61_close_door$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V58_env_always_ok$~1 () Bool) -(declare-fun $V59_prop_ok$~1 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$~1 () Bool) -(declare-fun $V253_between_A_and_X$~1 () Bool) -(declare-fun $V264_env_ok$~1 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$~1 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$~1 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$~1 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$~1 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$~1 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$~1 () Bool) -(declare-fun $V252_X$~1 () Bool) -(declare-fun $V268_door_initially_closed$~1 () Bool) -(declare-fun $V269_initially_not_in_station$~1 () Bool) -(declare-fun $V271_warning_start_only_in_station$~1 () Bool) -(declare-fun $V273_X$~1 () Bool) -(declare-fun $V274_X$~1 () Bool) -(declare-fun $V275_X$~1 () Bool) -(declare-fun $V276_X$~1 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $request_door$0 () Bool) -(declare-fun $warning_start$0 () Bool) -(declare-fun $in_station$0 () Bool) -(declare-fun $door_is_open$0 () Bool) -(declare-fun $V62_door_ok$2 () Bool) -(declare-fun $V60_open_door$2 () Bool) -(declare-fun $V61_close_door$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $V58_env_always_ok$2 () Bool) -(declare-fun $V59_prop_ok$2 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$2 () Bool) -(declare-fun $V253_between_A_and_X$2 () Bool) -(declare-fun $V264_env_ok$2 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$2 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$2 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$2 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$2 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$2 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$2 () Bool) -(declare-fun $V252_X$2 () Bool) -(declare-fun $V268_door_initially_closed$2 () Bool) -(declare-fun $V269_initially_not_in_station$2 () Bool) -(declare-fun $V271_warning_start_only_in_station$2 () Bool) -(declare-fun $V273_X$2 () Bool) -(declare-fun $V274_X$2 () Bool) -(declare-fun $V275_X$2 () Bool) -(declare-fun $V276_X$2 () Bool) -(declare-fun $~flatten0$2 () Bool) -(assert (and (T true $request_door$~1 $warning_start$~1 $in_station$~1 $door_is_open$~1 $V62_door_ok$~1 $V60_open_door$~1 $V61_close_door$~1 $OK$~1 $V58_env_always_ok$~1 $V59_prop_ok$~1 $V251_door_opens_before_leaving_station$~1 $V253_between_A_and_X$~1 $V264_env_ok$~1 $V265_door_doesnt_close_if_not_asked$~1 $V266_door_doesnt_open_if_not_asked$~1 $V267_tramway_doesnt_start_if_not_door_ok$~1 $V270_warning_start_and_in_station_go_down_simultaneously$~1 $V272_warning_start_cant_become_true_when_door_is_opening$~1 $V250_door_doesnt_open_out_of_station$~1 $V252_X$~1 $V268_door_initially_closed$~1 $V269_initially_not_in_station$~1 $V271_warning_start_only_in_station$~1 $V273_X$~1 $V274_X$~1 $V275_X$~1 $V276_X$~1 $~flatten0$~1 $request_door$0 $warning_start$0 $in_station$0 $door_is_open$0 $V62_door_ok$2 $V60_open_door$2 $V61_close_door$2 $OK$2 $V58_env_always_ok$2 $V59_prop_ok$2 $V251_door_opens_before_leaving_station$2 $V253_between_A_and_X$2 $V264_env_ok$2 $V265_door_doesnt_close_if_not_asked$2 $V266_door_doesnt_open_if_not_asked$2 $V267_tramway_doesnt_start_if_not_door_ok$2 $V270_warning_start_and_in_station_go_down_simultaneously$2 $V272_warning_start_cant_become_true_when_door_is_opening$2 $V250_door_doesnt_open_out_of_station$2 $V252_X$2 $V268_door_initially_closed$2 $V269_initially_not_in_station$2 $V271_warning_start_only_in_station$2 $V273_X$2 $V274_X$2 $V275_X$2 $V276_X$2 $~flatten0$2) $OK$2)) diff --git a/bench/tasks/tramway_e7_1834_e7_2363_base2_s_part.smt2 b/bench/tasks/tramway_e7_1834_e7_2363_base2_s_part.smt2 deleted file mode 100755 index 373525c9a..000000000 --- a/bench/tasks/tramway_e7_1834_e7_2363_base2_s_part.smt2 +++ /dev/null @@ -1,91 +0,0 @@ -; K = 2 -; Transition relation -(define-fun T ((%init Bool) ($request_door$0 Bool) ($warning_start$0 Bool) ($in_station$0 Bool) ($door_is_open$0 Bool) ($V62_door_ok$0 Bool) ($V60_open_door$0 Bool) ($V61_close_door$0 Bool) ($OK$0 Bool) ($V58_env_always_ok$0 Bool) ($V59_prop_ok$0 Bool) ($V251_door_opens_before_leaving_station$0 Bool) ($V253_between_A_and_X$0 Bool) ($V264_env_ok$0 Bool) ($V265_door_doesnt_close_if_not_asked$0 Bool) ($V266_door_doesnt_open_if_not_asked$0 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$0 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$0 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$0 Bool) ($V250_door_doesnt_open_out_of_station$0 Bool) ($V252_X$0 Bool) ($V268_door_initially_closed$0 Bool) ($V269_initially_not_in_station$0 Bool) ($V271_warning_start_only_in_station$0 Bool) ($V273_X$0 Bool) ($V274_X$0 Bool) ($V275_X$0 Bool) ($V276_X$0 Bool) ($~flatten0$0 Bool) ($request_door$1 Bool) ($warning_start$1 Bool) ($in_station$1 Bool) ($door_is_open$1 Bool) ($V62_door_ok$1 Bool) ($V60_open_door$1 Bool) ($V61_close_door$1 Bool) ($OK$1 Bool) ($V58_env_always_ok$1 Bool) ($V59_prop_ok$1 Bool) ($V251_door_opens_before_leaving_station$1 Bool) ($V253_between_A_and_X$1 Bool) ($V264_env_ok$1 Bool) ($V265_door_doesnt_close_if_not_asked$1 Bool) ($V266_door_doesnt_open_if_not_asked$1 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$1 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$1 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$1 Bool) ($V250_door_doesnt_open_out_of_station$1 Bool) ($V252_X$1 Bool) ($V268_door_initially_closed$1 Bool) ($V269_initially_not_in_station$1 Bool) ($V271_warning_start_only_in_station$1 Bool) ($V273_X$1 Bool) ($V274_X$1 Bool) ($V275_X$1 Bool) ($V276_X$1 Bool) ($~flatten0$1 Bool)) Bool (and (= $OK$1 (=> $V58_env_always_ok$1 $V59_prop_ok$1)) (= $V58_env_always_ok$1 (ite %init $V264_env_ok$1 (and $V264_env_ok$1 $V58_env_always_ok$0))) (= $V59_prop_ok$1 (and $V250_door_doesnt_open_out_of_station$1 $V251_door_opens_before_leaving_station$1)) (= $V250_door_doesnt_open_out_of_station$1 (=> $door_is_open$1 $in_station$1)) (= $V251_door_opens_before_leaving_station$1 (not (or $V253_between_A_and_X$1 (ite %init false (or $V252_X$1 (not $V252_X$0)))))) (= $V252_X$1 (not $in_station$1)) (= $V253_between_A_and_X$1 (ite (ite %init false (and $request_door$0 (not $warning_start$0))) true (ite (ite %init false $~flatten0$0) false (ite %init false $V253_between_A_and_X$0)))) (= $V264_env_ok$1 (and (and (and (and (and (and (and $V266_door_doesnt_open_if_not_asked$1 $V265_door_doesnt_close_if_not_asked$1) $V267_tramway_doesnt_start_if_not_door_ok$1) $V268_door_initially_closed$1) $V269_initially_not_in_station$1) $V270_warning_start_and_in_station_go_down_simultaneously$1) $V271_warning_start_only_in_station$1) $V272_warning_start_cant_become_true_when_door_is_opening$1)) (= $V265_door_doesnt_close_if_not_asked$1 (=> (ite %init false (or $door_is_open$1 (not $door_is_open$0))) $V60_open_door$1)) (= $V266_door_doesnt_open_if_not_asked$1 (=> (ite %init false (or $V273_X$1 (not $V273_X$0))) $V61_close_door$1)) (= $V267_tramway_doesnt_start_if_not_door_ok$1 (=> (ite %init false (or $V274_X$1 (not $V274_X$0))) (ite %init false $V62_door_ok$0))) (= $V268_door_initially_closed$1 (ite %init (not $door_is_open$1) true)) (= $V269_initially_not_in_station$1 (ite %init (not $in_station$1) true)) (= $V270_warning_start_and_in_station_go_down_simultaneously$1 (= (ite %init false (or $V275_X$1 (not $V275_X$0))) (ite %init false (or $V276_X$1 (not $V276_X$0))))) (= $V271_warning_start_only_in_station$1 (=> $warning_start$1 $in_station$1)) (= $V272_warning_start_cant_become_true_when_door_is_opening$1 (=> (ite %init false (or $warning_start$1 (not $warning_start$0))) (not $V60_open_door$1))) (= $V273_X$1 (not $door_is_open$1)) (= $V274_X$1 (not $in_station$1)) (= $V275_X$1 (not $in_station$1)) (= $V276_X$1 (not $warning_start$1)) (= $~flatten0$1 (ite %init false $door_is_open$0)))) -; Universally quantified variables -(declare-fun $request_door$~1 () Bool) -(declare-fun $warning_start$~1 () Bool) -(declare-fun $in_station$~1 () Bool) -(declare-fun $door_is_open$~1 () Bool) -(declare-fun $V62_door_ok$~1 () Bool) -(declare-fun $V60_open_door$~1 () Bool) -(declare-fun $V61_close_door$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V58_env_always_ok$~1 () Bool) -(declare-fun $V59_prop_ok$~1 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$~1 () Bool) -(declare-fun $V253_between_A_and_X$~1 () Bool) -(declare-fun $V264_env_ok$~1 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$~1 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$~1 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$~1 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$~1 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$~1 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$~1 () Bool) -(declare-fun $V252_X$~1 () Bool) -(declare-fun $V268_door_initially_closed$~1 () Bool) -(declare-fun $V269_initially_not_in_station$~1 () Bool) -(declare-fun $V271_warning_start_only_in_station$~1 () Bool) -(declare-fun $V273_X$~1 () Bool) -(declare-fun $V274_X$~1 () Bool) -(declare-fun $V275_X$~1 () Bool) -(declare-fun $V276_X$~1 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $request_door$0 () Bool) -(declare-fun $warning_start$0 () Bool) -(declare-fun $in_station$0 () Bool) -(declare-fun $door_is_open$0 () Bool) -(declare-fun $V62_door_ok$0 () Bool) -(declare-fun $V60_open_door$0 () Bool) -(declare-fun $V61_close_door$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $V58_env_always_ok$0 () Bool) -(declare-fun $V59_prop_ok$0 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$0 () Bool) -(declare-fun $V253_between_A_and_X$0 () Bool) -(declare-fun $V264_env_ok$0 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$0 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$0 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$0 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$0 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$0 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$0 () Bool) -(declare-fun $V252_X$0 () Bool) -(declare-fun $V268_door_initially_closed$0 () Bool) -(declare-fun $V269_initially_not_in_station$0 () Bool) -(declare-fun $V271_warning_start_only_in_station$0 () Bool) -(declare-fun $V273_X$0 () Bool) -(declare-fun $V274_X$0 () Bool) -(declare-fun $V275_X$0 () Bool) -(declare-fun $V276_X$0 () Bool) -(declare-fun $~flatten0$0 () Bool) -(declare-fun $request_door$1 () Bool) -(declare-fun $warning_start$1 () Bool) -(declare-fun $in_station$1 () Bool) -(declare-fun $door_is_open$1 () Bool) -(declare-fun $V62_door_ok$1 () Bool) -(declare-fun $V60_open_door$1 () Bool) -(declare-fun $V61_close_door$1 () Bool) -(declare-fun $OK$1 () Bool) -(declare-fun $V58_env_always_ok$1 () Bool) -(declare-fun $V59_prop_ok$1 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$1 () Bool) -(declare-fun $V253_between_A_and_X$1 () Bool) -(declare-fun $V264_env_ok$1 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$1 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$1 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$1 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$1 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$1 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$1 () Bool) -(declare-fun $V252_X$1 () Bool) -(declare-fun $V268_door_initially_closed$1 () Bool) -(declare-fun $V269_initially_not_in_station$1 () Bool) -(declare-fun $V271_warning_start_only_in_station$1 () Bool) -(declare-fun $V273_X$1 () Bool) -(declare-fun $V274_X$1 () Bool) -(declare-fun $V275_X$1 () Bool) -(declare-fun $V276_X$1 () Bool) -(declare-fun $~flatten0$1 () Bool) -(assert (T true $request_door$~1 $warning_start$~1 $in_station$~1 $door_is_open$~1 $V62_door_ok$~1 $V60_open_door$~1 $V61_close_door$~1 $OK$~1 $V58_env_always_ok$~1 $V59_prop_ok$~1 $V251_door_opens_before_leaving_station$~1 $V253_between_A_and_X$~1 $V264_env_ok$~1 $V265_door_doesnt_close_if_not_asked$~1 $V266_door_doesnt_open_if_not_asked$~1 $V267_tramway_doesnt_start_if_not_door_ok$~1 $V270_warning_start_and_in_station_go_down_simultaneously$~1 $V272_warning_start_cant_become_true_when_door_is_opening$~1 $V250_door_doesnt_open_out_of_station$~1 $V252_X$~1 $V268_door_initially_closed$~1 $V269_initially_not_in_station$~1 $V271_warning_start_only_in_station$~1 $V273_X$~1 $V274_X$~1 $V275_X$~1 $V276_X$~1 $~flatten0$~1 $request_door$0 $warning_start$0 $in_station$0 $door_is_open$0 $V62_door_ok$0 $V60_open_door$0 $V61_close_door$0 $OK$0 $V58_env_always_ok$0 $V59_prop_ok$0 $V251_door_opens_before_leaving_station$0 $V253_between_A_and_X$0 $V264_env_ok$0 $V265_door_doesnt_close_if_not_asked$0 $V266_door_doesnt_open_if_not_asked$0 $V267_tramway_doesnt_start_if_not_door_ok$0 $V270_warning_start_and_in_station_go_down_simultaneously$0 $V272_warning_start_cant_become_true_when_door_is_opening$0 $V250_door_doesnt_open_out_of_station$0 $V252_X$0 $V268_door_initially_closed$0 $V269_initially_not_in_station$0 $V271_warning_start_only_in_station$0 $V273_X$0 $V274_X$0 $V275_X$0 $V276_X$0 $~flatten0$0)) -(assert $OK$0) -(assert (T false $request_door$0 $warning_start$0 $in_station$0 $door_is_open$0 $V62_door_ok$0 $V60_open_door$0 $V61_close_door$0 $OK$0 $V58_env_always_ok$0 $V59_prop_ok$0 $V251_door_opens_before_leaving_station$0 $V253_between_A_and_X$0 $V264_env_ok$0 $V265_door_doesnt_close_if_not_asked$0 $V266_door_doesnt_open_if_not_asked$0 $V267_tramway_doesnt_start_if_not_door_ok$0 $V270_warning_start_and_in_station_go_down_simultaneously$0 $V272_warning_start_cant_become_true_when_door_is_opening$0 $V250_door_doesnt_open_out_of_station$0 $V252_X$0 $V268_door_initially_closed$0 $V269_initially_not_in_station$0 $V271_warning_start_only_in_station$0 $V273_X$0 $V274_X$0 $V275_X$0 $V276_X$0 $~flatten0$0 $request_door$1 $warning_start$1 $in_station$1 $door_is_open$1 $V62_door_ok$1 $V60_open_door$1 $V61_close_door$1 $OK$1 $V58_env_always_ok$1 $V59_prop_ok$1 $V251_door_opens_before_leaving_station$1 $V253_between_A_and_X$1 $V264_env_ok$1 $V265_door_doesnt_close_if_not_asked$1 $V266_door_doesnt_open_if_not_asked$1 $V267_tramway_doesnt_start_if_not_door_ok$1 $V270_warning_start_and_in_station_go_down_simultaneously$1 $V272_warning_start_cant_become_true_when_door_is_opening$1 $V250_door_doesnt_open_out_of_station$1 $V252_X$1 $V268_door_initially_closed$1 $V269_initially_not_in_station$1 $V271_warning_start_only_in_station$1 $V273_X$1 $V274_X$1 $V275_X$1 $V276_X$1 $~flatten0$1)) diff --git a/bench/tasks/tramway_e7_1834_e7_2363_base2_t_part.smt2 b/bench/tasks/tramway_e7_1834_e7_2363_base2_t_part.smt2 deleted file mode 100755 index 21bc32b55..000000000 --- a/bench/tasks/tramway_e7_1834_e7_2363_base2_t_part.smt2 +++ /dev/null @@ -1,89 +0,0 @@ -; K = 2 -; Transition relation -(define-fun T ((%init Bool) ($request_door$0 Bool) ($warning_start$0 Bool) ($in_station$0 Bool) ($door_is_open$0 Bool) ($V62_door_ok$0 Bool) ($V60_open_door$0 Bool) ($V61_close_door$0 Bool) ($OK$0 Bool) ($V58_env_always_ok$0 Bool) ($V59_prop_ok$0 Bool) ($V251_door_opens_before_leaving_station$0 Bool) ($V253_between_A_and_X$0 Bool) ($V264_env_ok$0 Bool) ($V265_door_doesnt_close_if_not_asked$0 Bool) ($V266_door_doesnt_open_if_not_asked$0 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$0 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$0 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$0 Bool) ($V250_door_doesnt_open_out_of_station$0 Bool) ($V252_X$0 Bool) ($V268_door_initially_closed$0 Bool) ($V269_initially_not_in_station$0 Bool) ($V271_warning_start_only_in_station$0 Bool) ($V273_X$0 Bool) ($V274_X$0 Bool) ($V275_X$0 Bool) ($V276_X$0 Bool) ($~flatten0$0 Bool) ($request_door$1 Bool) ($warning_start$1 Bool) ($in_station$1 Bool) ($door_is_open$1 Bool) ($V62_door_ok$1 Bool) ($V60_open_door$1 Bool) ($V61_close_door$1 Bool) ($OK$1 Bool) ($V58_env_always_ok$1 Bool) ($V59_prop_ok$1 Bool) ($V251_door_opens_before_leaving_station$1 Bool) ($V253_between_A_and_X$1 Bool) ($V264_env_ok$1 Bool) ($V265_door_doesnt_close_if_not_asked$1 Bool) ($V266_door_doesnt_open_if_not_asked$1 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$1 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$1 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$1 Bool) ($V250_door_doesnt_open_out_of_station$1 Bool) ($V252_X$1 Bool) ($V268_door_initially_closed$1 Bool) ($V269_initially_not_in_station$1 Bool) ($V271_warning_start_only_in_station$1 Bool) ($V273_X$1 Bool) ($V274_X$1 Bool) ($V275_X$1 Bool) ($V276_X$1 Bool) ($~flatten0$1 Bool)) Bool (and (= $OK$1 (=> $V58_env_always_ok$1 $V59_prop_ok$1)) (= $V58_env_always_ok$1 (ite %init $V264_env_ok$1 (and $V264_env_ok$1 $V58_env_always_ok$0))) (= $V59_prop_ok$1 (and $V250_door_doesnt_open_out_of_station$1 $V251_door_opens_before_leaving_station$1)) (= $V250_door_doesnt_open_out_of_station$1 (=> $door_is_open$1 $in_station$1)) (= $V251_door_opens_before_leaving_station$1 (not (or $V253_between_A_and_X$1 (ite %init false (or $V252_X$1 (not $V252_X$0)))))) (= $V252_X$1 (not $in_station$1)) (= $V253_between_A_and_X$1 (ite (ite %init false (and $request_door$0 (not $warning_start$0))) true (ite (ite %init false $~flatten0$0) false (ite %init false $V253_between_A_and_X$0)))) (= $V264_env_ok$1 (and (and (and (and (and (and (and $V266_door_doesnt_open_if_not_asked$1 $V265_door_doesnt_close_if_not_asked$1) $V267_tramway_doesnt_start_if_not_door_ok$1) $V268_door_initially_closed$1) $V269_initially_not_in_station$1) $V270_warning_start_and_in_station_go_down_simultaneously$1) $V271_warning_start_only_in_station$1) $V272_warning_start_cant_become_true_when_door_is_opening$1)) (= $V265_door_doesnt_close_if_not_asked$1 (=> (ite %init false (or $door_is_open$1 (not $door_is_open$0))) $V60_open_door$1)) (= $V266_door_doesnt_open_if_not_asked$1 (=> (ite %init false (or $V273_X$1 (not $V273_X$0))) $V61_close_door$1)) (= $V267_tramway_doesnt_start_if_not_door_ok$1 (=> (ite %init false (or $V274_X$1 (not $V274_X$0))) (ite %init false $V62_door_ok$0))) (= $V268_door_initially_closed$1 (ite %init (not $door_is_open$1) true)) (= $V269_initially_not_in_station$1 (ite %init (not $in_station$1) true)) (= $V270_warning_start_and_in_station_go_down_simultaneously$1 (= (ite %init false (or $V275_X$1 (not $V275_X$0))) (ite %init false (or $V276_X$1 (not $V276_X$0))))) (= $V271_warning_start_only_in_station$1 (=> $warning_start$1 $in_station$1)) (= $V272_warning_start_cant_become_true_when_door_is_opening$1 (=> (ite %init false (or $warning_start$1 (not $warning_start$0))) (not $V60_open_door$1))) (= $V273_X$1 (not $door_is_open$1)) (= $V274_X$1 (not $in_station$1)) (= $V275_X$1 (not $in_station$1)) (= $V276_X$1 (not $warning_start$1)) (= $~flatten0$1 (ite %init false $door_is_open$0)))) -; Universally quantified variables -(declare-fun $request_door$~1 () Bool) -(declare-fun $warning_start$~1 () Bool) -(declare-fun $in_station$~1 () Bool) -(declare-fun $door_is_open$~1 () Bool) -(declare-fun $V62_door_ok$~1 () Bool) -(declare-fun $V60_open_door$~1 () Bool) -(declare-fun $V61_close_door$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V58_env_always_ok$~1 () Bool) -(declare-fun $V59_prop_ok$~1 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$~1 () Bool) -(declare-fun $V253_between_A_and_X$~1 () Bool) -(declare-fun $V264_env_ok$~1 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$~1 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$~1 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$~1 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$~1 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$~1 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$~1 () Bool) -(declare-fun $V252_X$~1 () Bool) -(declare-fun $V268_door_initially_closed$~1 () Bool) -(declare-fun $V269_initially_not_in_station$~1 () Bool) -(declare-fun $V271_warning_start_only_in_station$~1 () Bool) -(declare-fun $V273_X$~1 () Bool) -(declare-fun $V274_X$~1 () Bool) -(declare-fun $V275_X$~1 () Bool) -(declare-fun $V276_X$~1 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $request_door$0 () Bool) -(declare-fun $warning_start$0 () Bool) -(declare-fun $in_station$0 () Bool) -(declare-fun $door_is_open$0 () Bool) -(declare-fun $V62_door_ok$0 () Bool) -(declare-fun $V60_open_door$0 () Bool) -(declare-fun $V61_close_door$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $V58_env_always_ok$0 () Bool) -(declare-fun $V59_prop_ok$0 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$0 () Bool) -(declare-fun $V253_between_A_and_X$0 () Bool) -(declare-fun $V264_env_ok$0 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$0 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$0 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$0 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$0 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$0 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$0 () Bool) -(declare-fun $V252_X$0 () Bool) -(declare-fun $V268_door_initially_closed$0 () Bool) -(declare-fun $V269_initially_not_in_station$0 () Bool) -(declare-fun $V271_warning_start_only_in_station$0 () Bool) -(declare-fun $V273_X$0 () Bool) -(declare-fun $V274_X$0 () Bool) -(declare-fun $V275_X$0 () Bool) -(declare-fun $V276_X$0 () Bool) -(declare-fun $~flatten0$0 () Bool) -(declare-fun $request_door$1 () Bool) -(declare-fun $warning_start$1 () Bool) -(declare-fun $in_station$1 () Bool) -(declare-fun $door_is_open$1 () Bool) -(declare-fun $V62_door_ok$3 () Bool) -(declare-fun $V60_open_door$3 () Bool) -(declare-fun $V61_close_door$3 () Bool) -(declare-fun $OK$3 () Bool) -(declare-fun $V58_env_always_ok$3 () Bool) -(declare-fun $V59_prop_ok$3 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$3 () Bool) -(declare-fun $V253_between_A_and_X$3 () Bool) -(declare-fun $V264_env_ok$3 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$3 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$3 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$3 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$3 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$3 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$3 () Bool) -(declare-fun $V252_X$3 () Bool) -(declare-fun $V268_door_initially_closed$3 () Bool) -(declare-fun $V269_initially_not_in_station$3 () Bool) -(declare-fun $V271_warning_start_only_in_station$3 () Bool) -(declare-fun $V273_X$3 () Bool) -(declare-fun $V274_X$3 () Bool) -(declare-fun $V275_X$3 () Bool) -(declare-fun $V276_X$3 () Bool) -(declare-fun $~flatten0$3 () Bool) -(assert (and (T false $request_door$0 $warning_start$0 $in_station$0 $door_is_open$0 $V62_door_ok$0 $V60_open_door$0 $V61_close_door$0 $OK$0 $V58_env_always_ok$0 $V59_prop_ok$0 $V251_door_opens_before_leaving_station$0 $V253_between_A_and_X$0 $V264_env_ok$0 $V265_door_doesnt_close_if_not_asked$0 $V266_door_doesnt_open_if_not_asked$0 $V267_tramway_doesnt_start_if_not_door_ok$0 $V270_warning_start_and_in_station_go_down_simultaneously$0 $V272_warning_start_cant_become_true_when_door_is_opening$0 $V250_door_doesnt_open_out_of_station$0 $V252_X$0 $V268_door_initially_closed$0 $V269_initially_not_in_station$0 $V271_warning_start_only_in_station$0 $V273_X$0 $V274_X$0 $V275_X$0 $V276_X$0 $~flatten0$0 $request_door$1 $warning_start$1 $in_station$1 $door_is_open$1 $V62_door_ok$3 $V60_open_door$3 $V61_close_door$3 $OK$3 $V58_env_always_ok$3 $V59_prop_ok$3 $V251_door_opens_before_leaving_station$3 $V253_between_A_and_X$3 $V264_env_ok$3 $V265_door_doesnt_close_if_not_asked$3 $V266_door_doesnt_open_if_not_asked$3 $V267_tramway_doesnt_start_if_not_door_ok$3 $V270_warning_start_and_in_station_go_down_simultaneously$3 $V272_warning_start_cant_become_true_when_door_is_opening$3 $V250_door_doesnt_open_out_of_station$3 $V252_X$3 $V268_door_initially_closed$3 $V269_initially_not_in_station$3 $V271_warning_start_only_in_station$3 $V273_X$3 $V274_X$3 $V275_X$3 $V276_X$3 $~flatten0$3) $OK$3)) diff --git a/bench/tasks/tramway_e7_1834_e7_2363_base3_s_part.smt2 b/bench/tasks/tramway_e7_1834_e7_2363_base3_s_part.smt2 deleted file mode 100755 index 10415b0cd..000000000 --- a/bench/tasks/tramway_e7_1834_e7_2363_base3_s_part.smt2 +++ /dev/null @@ -1,121 +0,0 @@ -; K = 3 -; Transition relation -(define-fun T ((%init Bool) ($request_door$0 Bool) ($warning_start$0 Bool) ($in_station$0 Bool) ($door_is_open$0 Bool) ($V62_door_ok$0 Bool) ($V60_open_door$0 Bool) ($V61_close_door$0 Bool) ($OK$0 Bool) ($V58_env_always_ok$0 Bool) ($V59_prop_ok$0 Bool) ($V251_door_opens_before_leaving_station$0 Bool) ($V253_between_A_and_X$0 Bool) ($V264_env_ok$0 Bool) ($V265_door_doesnt_close_if_not_asked$0 Bool) ($V266_door_doesnt_open_if_not_asked$0 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$0 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$0 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$0 Bool) ($V250_door_doesnt_open_out_of_station$0 Bool) ($V252_X$0 Bool) ($V268_door_initially_closed$0 Bool) ($V269_initially_not_in_station$0 Bool) ($V271_warning_start_only_in_station$0 Bool) ($V273_X$0 Bool) ($V274_X$0 Bool) ($V275_X$0 Bool) ($V276_X$0 Bool) ($~flatten0$0 Bool) ($request_door$1 Bool) ($warning_start$1 Bool) ($in_station$1 Bool) ($door_is_open$1 Bool) ($V62_door_ok$1 Bool) ($V60_open_door$1 Bool) ($V61_close_door$1 Bool) ($OK$1 Bool) ($V58_env_always_ok$1 Bool) ($V59_prop_ok$1 Bool) ($V251_door_opens_before_leaving_station$1 Bool) ($V253_between_A_and_X$1 Bool) ($V264_env_ok$1 Bool) ($V265_door_doesnt_close_if_not_asked$1 Bool) ($V266_door_doesnt_open_if_not_asked$1 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$1 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$1 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$1 Bool) ($V250_door_doesnt_open_out_of_station$1 Bool) ($V252_X$1 Bool) ($V268_door_initially_closed$1 Bool) ($V269_initially_not_in_station$1 Bool) ($V271_warning_start_only_in_station$1 Bool) ($V273_X$1 Bool) ($V274_X$1 Bool) ($V275_X$1 Bool) ($V276_X$1 Bool) ($~flatten0$1 Bool)) Bool (and (= $OK$1 (=> $V58_env_always_ok$1 $V59_prop_ok$1)) (= $V58_env_always_ok$1 (ite %init $V264_env_ok$1 (and $V264_env_ok$1 $V58_env_always_ok$0))) (= $V59_prop_ok$1 (and $V250_door_doesnt_open_out_of_station$1 $V251_door_opens_before_leaving_station$1)) (= $V250_door_doesnt_open_out_of_station$1 (=> $door_is_open$1 $in_station$1)) (= $V251_door_opens_before_leaving_station$1 (not (or $V253_between_A_and_X$1 (ite %init false (or $V252_X$1 (not $V252_X$0)))))) (= $V252_X$1 (not $in_station$1)) (= $V253_between_A_and_X$1 (ite (ite %init false (and $request_door$0 (not $warning_start$0))) true (ite (ite %init false $~flatten0$0) false (ite %init false $V253_between_A_and_X$0)))) (= $V264_env_ok$1 (and (and (and (and (and (and (and $V266_door_doesnt_open_if_not_asked$1 $V265_door_doesnt_close_if_not_asked$1) $V267_tramway_doesnt_start_if_not_door_ok$1) $V268_door_initially_closed$1) $V269_initially_not_in_station$1) $V270_warning_start_and_in_station_go_down_simultaneously$1) $V271_warning_start_only_in_station$1) $V272_warning_start_cant_become_true_when_door_is_opening$1)) (= $V265_door_doesnt_close_if_not_asked$1 (=> (ite %init false (or $door_is_open$1 (not $door_is_open$0))) $V60_open_door$1)) (= $V266_door_doesnt_open_if_not_asked$1 (=> (ite %init false (or $V273_X$1 (not $V273_X$0))) $V61_close_door$1)) (= $V267_tramway_doesnt_start_if_not_door_ok$1 (=> (ite %init false (or $V274_X$1 (not $V274_X$0))) (ite %init false $V62_door_ok$0))) (= $V268_door_initially_closed$1 (ite %init (not $door_is_open$1) true)) (= $V269_initially_not_in_station$1 (ite %init (not $in_station$1) true)) (= $V270_warning_start_and_in_station_go_down_simultaneously$1 (= (ite %init false (or $V275_X$1 (not $V275_X$0))) (ite %init false (or $V276_X$1 (not $V276_X$0))))) (= $V271_warning_start_only_in_station$1 (=> $warning_start$1 $in_station$1)) (= $V272_warning_start_cant_become_true_when_door_is_opening$1 (=> (ite %init false (or $warning_start$1 (not $warning_start$0))) (not $V60_open_door$1))) (= $V273_X$1 (not $door_is_open$1)) (= $V274_X$1 (not $in_station$1)) (= $V275_X$1 (not $in_station$1)) (= $V276_X$1 (not $warning_start$1)) (= $~flatten0$1 (ite %init false $door_is_open$0)))) -; Universally quantified variables -(declare-fun $request_door$~1 () Bool) -(declare-fun $warning_start$~1 () Bool) -(declare-fun $in_station$~1 () Bool) -(declare-fun $door_is_open$~1 () Bool) -(declare-fun $V62_door_ok$~1 () Bool) -(declare-fun $V60_open_door$~1 () Bool) -(declare-fun $V61_close_door$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V58_env_always_ok$~1 () Bool) -(declare-fun $V59_prop_ok$~1 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$~1 () Bool) -(declare-fun $V253_between_A_and_X$~1 () Bool) -(declare-fun $V264_env_ok$~1 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$~1 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$~1 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$~1 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$~1 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$~1 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$~1 () Bool) -(declare-fun $V252_X$~1 () Bool) -(declare-fun $V268_door_initially_closed$~1 () Bool) -(declare-fun $V269_initially_not_in_station$~1 () Bool) -(declare-fun $V271_warning_start_only_in_station$~1 () Bool) -(declare-fun $V273_X$~1 () Bool) -(declare-fun $V274_X$~1 () Bool) -(declare-fun $V275_X$~1 () Bool) -(declare-fun $V276_X$~1 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $request_door$0 () Bool) -(declare-fun $warning_start$0 () Bool) -(declare-fun $in_station$0 () Bool) -(declare-fun $door_is_open$0 () Bool) -(declare-fun $V62_door_ok$0 () Bool) -(declare-fun $V60_open_door$0 () Bool) -(declare-fun $V61_close_door$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $V58_env_always_ok$0 () Bool) -(declare-fun $V59_prop_ok$0 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$0 () Bool) -(declare-fun $V253_between_A_and_X$0 () Bool) -(declare-fun $V264_env_ok$0 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$0 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$0 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$0 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$0 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$0 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$0 () Bool) -(declare-fun $V252_X$0 () Bool) -(declare-fun $V268_door_initially_closed$0 () Bool) -(declare-fun $V269_initially_not_in_station$0 () Bool) -(declare-fun $V271_warning_start_only_in_station$0 () Bool) -(declare-fun $V273_X$0 () Bool) -(declare-fun $V274_X$0 () Bool) -(declare-fun $V275_X$0 () Bool) -(declare-fun $V276_X$0 () Bool) -(declare-fun $~flatten0$0 () Bool) -(declare-fun $request_door$1 () Bool) -(declare-fun $warning_start$1 () Bool) -(declare-fun $in_station$1 () Bool) -(declare-fun $door_is_open$1 () Bool) -(declare-fun $V62_door_ok$1 () Bool) -(declare-fun $V60_open_door$1 () Bool) -(declare-fun $V61_close_door$1 () Bool) -(declare-fun $OK$1 () Bool) -(declare-fun $V58_env_always_ok$1 () Bool) -(declare-fun $V59_prop_ok$1 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$1 () Bool) -(declare-fun $V253_between_A_and_X$1 () Bool) -(declare-fun $V264_env_ok$1 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$1 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$1 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$1 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$1 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$1 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$1 () Bool) -(declare-fun $V252_X$1 () Bool) -(declare-fun $V268_door_initially_closed$1 () Bool) -(declare-fun $V269_initially_not_in_station$1 () Bool) -(declare-fun $V271_warning_start_only_in_station$1 () Bool) -(declare-fun $V273_X$1 () Bool) -(declare-fun $V274_X$1 () Bool) -(declare-fun $V275_X$1 () Bool) -(declare-fun $V276_X$1 () Bool) -(declare-fun $~flatten0$1 () Bool) -(declare-fun $request_door$2 () Bool) -(declare-fun $warning_start$2 () Bool) -(declare-fun $in_station$2 () Bool) -(declare-fun $door_is_open$2 () Bool) -(declare-fun $V62_door_ok$2 () Bool) -(declare-fun $V60_open_door$2 () Bool) -(declare-fun $V61_close_door$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $V58_env_always_ok$2 () Bool) -(declare-fun $V59_prop_ok$2 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$2 () Bool) -(declare-fun $V253_between_A_and_X$2 () Bool) -(declare-fun $V264_env_ok$2 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$2 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$2 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$2 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$2 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$2 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$2 () Bool) -(declare-fun $V252_X$2 () Bool) -(declare-fun $V268_door_initially_closed$2 () Bool) -(declare-fun $V269_initially_not_in_station$2 () Bool) -(declare-fun $V271_warning_start_only_in_station$2 () Bool) -(declare-fun $V273_X$2 () Bool) -(declare-fun $V274_X$2 () Bool) -(declare-fun $V275_X$2 () Bool) -(declare-fun $V276_X$2 () Bool) -(declare-fun $~flatten0$2 () Bool) -(assert (T true $request_door$~1 $warning_start$~1 $in_station$~1 $door_is_open$~1 $V62_door_ok$~1 $V60_open_door$~1 $V61_close_door$~1 $OK$~1 $V58_env_always_ok$~1 $V59_prop_ok$~1 $V251_door_opens_before_leaving_station$~1 $V253_between_A_and_X$~1 $V264_env_ok$~1 $V265_door_doesnt_close_if_not_asked$~1 $V266_door_doesnt_open_if_not_asked$~1 $V267_tramway_doesnt_start_if_not_door_ok$~1 $V270_warning_start_and_in_station_go_down_simultaneously$~1 $V272_warning_start_cant_become_true_when_door_is_opening$~1 $V250_door_doesnt_open_out_of_station$~1 $V252_X$~1 $V268_door_initially_closed$~1 $V269_initially_not_in_station$~1 $V271_warning_start_only_in_station$~1 $V273_X$~1 $V274_X$~1 $V275_X$~1 $V276_X$~1 $~flatten0$~1 $request_door$0 $warning_start$0 $in_station$0 $door_is_open$0 $V62_door_ok$0 $V60_open_door$0 $V61_close_door$0 $OK$0 $V58_env_always_ok$0 $V59_prop_ok$0 $V251_door_opens_before_leaving_station$0 $V253_between_A_and_X$0 $V264_env_ok$0 $V265_door_doesnt_close_if_not_asked$0 $V266_door_doesnt_open_if_not_asked$0 $V267_tramway_doesnt_start_if_not_door_ok$0 $V270_warning_start_and_in_station_go_down_simultaneously$0 $V272_warning_start_cant_become_true_when_door_is_opening$0 $V250_door_doesnt_open_out_of_station$0 $V252_X$0 $V268_door_initially_closed$0 $V269_initially_not_in_station$0 $V271_warning_start_only_in_station$0 $V273_X$0 $V274_X$0 $V275_X$0 $V276_X$0 $~flatten0$0)) -(assert $OK$0) -(assert (T false $request_door$0 $warning_start$0 $in_station$0 $door_is_open$0 $V62_door_ok$0 $V60_open_door$0 $V61_close_door$0 $OK$0 $V58_env_always_ok$0 $V59_prop_ok$0 $V251_door_opens_before_leaving_station$0 $V253_between_A_and_X$0 $V264_env_ok$0 $V265_door_doesnt_close_if_not_asked$0 $V266_door_doesnt_open_if_not_asked$0 $V267_tramway_doesnt_start_if_not_door_ok$0 $V270_warning_start_and_in_station_go_down_simultaneously$0 $V272_warning_start_cant_become_true_when_door_is_opening$0 $V250_door_doesnt_open_out_of_station$0 $V252_X$0 $V268_door_initially_closed$0 $V269_initially_not_in_station$0 $V271_warning_start_only_in_station$0 $V273_X$0 $V274_X$0 $V275_X$0 $V276_X$0 $~flatten0$0 $request_door$1 $warning_start$1 $in_station$1 $door_is_open$1 $V62_door_ok$1 $V60_open_door$1 $V61_close_door$1 $OK$1 $V58_env_always_ok$1 $V59_prop_ok$1 $V251_door_opens_before_leaving_station$1 $V253_between_A_and_X$1 $V264_env_ok$1 $V265_door_doesnt_close_if_not_asked$1 $V266_door_doesnt_open_if_not_asked$1 $V267_tramway_doesnt_start_if_not_door_ok$1 $V270_warning_start_and_in_station_go_down_simultaneously$1 $V272_warning_start_cant_become_true_when_door_is_opening$1 $V250_door_doesnt_open_out_of_station$1 $V252_X$1 $V268_door_initially_closed$1 $V269_initially_not_in_station$1 $V271_warning_start_only_in_station$1 $V273_X$1 $V274_X$1 $V275_X$1 $V276_X$1 $~flatten0$1)) -(assert $OK$1) -(assert (T false $request_door$1 $warning_start$1 $in_station$1 $door_is_open$1 $V62_door_ok$1 $V60_open_door$1 $V61_close_door$1 $OK$1 $V58_env_always_ok$1 $V59_prop_ok$1 $V251_door_opens_before_leaving_station$1 $V253_between_A_and_X$1 $V264_env_ok$1 $V265_door_doesnt_close_if_not_asked$1 $V266_door_doesnt_open_if_not_asked$1 $V267_tramway_doesnt_start_if_not_door_ok$1 $V270_warning_start_and_in_station_go_down_simultaneously$1 $V272_warning_start_cant_become_true_when_door_is_opening$1 $V250_door_doesnt_open_out_of_station$1 $V252_X$1 $V268_door_initially_closed$1 $V269_initially_not_in_station$1 $V271_warning_start_only_in_station$1 $V273_X$1 $V274_X$1 $V275_X$1 $V276_X$1 $~flatten0$1 $request_door$2 $warning_start$2 $in_station$2 $door_is_open$2 $V62_door_ok$2 $V60_open_door$2 $V61_close_door$2 $OK$2 $V58_env_always_ok$2 $V59_prop_ok$2 $V251_door_opens_before_leaving_station$2 $V253_between_A_and_X$2 $V264_env_ok$2 $V265_door_doesnt_close_if_not_asked$2 $V266_door_doesnt_open_if_not_asked$2 $V267_tramway_doesnt_start_if_not_door_ok$2 $V270_warning_start_and_in_station_go_down_simultaneously$2 $V272_warning_start_cant_become_true_when_door_is_opening$2 $V250_door_doesnt_open_out_of_station$2 $V252_X$2 $V268_door_initially_closed$2 $V269_initially_not_in_station$2 $V271_warning_start_only_in_station$2 $V273_X$2 $V274_X$2 $V275_X$2 $V276_X$2 $~flatten0$2)) diff --git a/bench/tasks/tramway_e7_1834_e7_2363_base3_t_part.smt2 b/bench/tasks/tramway_e7_1834_e7_2363_base3_t_part.smt2 deleted file mode 100755 index 6e8f3e4c5..000000000 --- a/bench/tasks/tramway_e7_1834_e7_2363_base3_t_part.smt2 +++ /dev/null @@ -1,117 +0,0 @@ -; K = 3 -; Transition relation -(define-fun T ((%init Bool) ($request_door$0 Bool) ($warning_start$0 Bool) ($in_station$0 Bool) ($door_is_open$0 Bool) ($V62_door_ok$0 Bool) ($V60_open_door$0 Bool) ($V61_close_door$0 Bool) ($OK$0 Bool) ($V58_env_always_ok$0 Bool) ($V59_prop_ok$0 Bool) ($V251_door_opens_before_leaving_station$0 Bool) ($V253_between_A_and_X$0 Bool) ($V264_env_ok$0 Bool) ($V265_door_doesnt_close_if_not_asked$0 Bool) ($V266_door_doesnt_open_if_not_asked$0 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$0 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$0 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$0 Bool) ($V250_door_doesnt_open_out_of_station$0 Bool) ($V252_X$0 Bool) ($V268_door_initially_closed$0 Bool) ($V269_initially_not_in_station$0 Bool) ($V271_warning_start_only_in_station$0 Bool) ($V273_X$0 Bool) ($V274_X$0 Bool) ($V275_X$0 Bool) ($V276_X$0 Bool) ($~flatten0$0 Bool) ($request_door$1 Bool) ($warning_start$1 Bool) ($in_station$1 Bool) ($door_is_open$1 Bool) ($V62_door_ok$1 Bool) ($V60_open_door$1 Bool) ($V61_close_door$1 Bool) ($OK$1 Bool) ($V58_env_always_ok$1 Bool) ($V59_prop_ok$1 Bool) ($V251_door_opens_before_leaving_station$1 Bool) ($V253_between_A_and_X$1 Bool) ($V264_env_ok$1 Bool) ($V265_door_doesnt_close_if_not_asked$1 Bool) ($V266_door_doesnt_open_if_not_asked$1 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$1 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$1 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$1 Bool) ($V250_door_doesnt_open_out_of_station$1 Bool) ($V252_X$1 Bool) ($V268_door_initially_closed$1 Bool) ($V269_initially_not_in_station$1 Bool) ($V271_warning_start_only_in_station$1 Bool) ($V273_X$1 Bool) ($V274_X$1 Bool) ($V275_X$1 Bool) ($V276_X$1 Bool) ($~flatten0$1 Bool)) Bool (and (= $OK$1 (=> $V58_env_always_ok$1 $V59_prop_ok$1)) (= $V58_env_always_ok$1 (ite %init $V264_env_ok$1 (and $V264_env_ok$1 $V58_env_always_ok$0))) (= $V59_prop_ok$1 (and $V250_door_doesnt_open_out_of_station$1 $V251_door_opens_before_leaving_station$1)) (= $V250_door_doesnt_open_out_of_station$1 (=> $door_is_open$1 $in_station$1)) (= $V251_door_opens_before_leaving_station$1 (not (or $V253_between_A_and_X$1 (ite %init false (or $V252_X$1 (not $V252_X$0)))))) (= $V252_X$1 (not $in_station$1)) (= $V253_between_A_and_X$1 (ite (ite %init false (and $request_door$0 (not $warning_start$0))) true (ite (ite %init false $~flatten0$0) false (ite %init false $V253_between_A_and_X$0)))) (= $V264_env_ok$1 (and (and (and (and (and (and (and $V266_door_doesnt_open_if_not_asked$1 $V265_door_doesnt_close_if_not_asked$1) $V267_tramway_doesnt_start_if_not_door_ok$1) $V268_door_initially_closed$1) $V269_initially_not_in_station$1) $V270_warning_start_and_in_station_go_down_simultaneously$1) $V271_warning_start_only_in_station$1) $V272_warning_start_cant_become_true_when_door_is_opening$1)) (= $V265_door_doesnt_close_if_not_asked$1 (=> (ite %init false (or $door_is_open$1 (not $door_is_open$0))) $V60_open_door$1)) (= $V266_door_doesnt_open_if_not_asked$1 (=> (ite %init false (or $V273_X$1 (not $V273_X$0))) $V61_close_door$1)) (= $V267_tramway_doesnt_start_if_not_door_ok$1 (=> (ite %init false (or $V274_X$1 (not $V274_X$0))) (ite %init false $V62_door_ok$0))) (= $V268_door_initially_closed$1 (ite %init (not $door_is_open$1) true)) (= $V269_initially_not_in_station$1 (ite %init (not $in_station$1) true)) (= $V270_warning_start_and_in_station_go_down_simultaneously$1 (= (ite %init false (or $V275_X$1 (not $V275_X$0))) (ite %init false (or $V276_X$1 (not $V276_X$0))))) (= $V271_warning_start_only_in_station$1 (=> $warning_start$1 $in_station$1)) (= $V272_warning_start_cant_become_true_when_door_is_opening$1 (=> (ite %init false (or $warning_start$1 (not $warning_start$0))) (not $V60_open_door$1))) (= $V273_X$1 (not $door_is_open$1)) (= $V274_X$1 (not $in_station$1)) (= $V275_X$1 (not $in_station$1)) (= $V276_X$1 (not $warning_start$1)) (= $~flatten0$1 (ite %init false $door_is_open$0)))) -; Universally quantified variables -(declare-fun $request_door$~1 () Bool) -(declare-fun $warning_start$~1 () Bool) -(declare-fun $in_station$~1 () Bool) -(declare-fun $door_is_open$~1 () Bool) -(declare-fun $V62_door_ok$~1 () Bool) -(declare-fun $V60_open_door$~1 () Bool) -(declare-fun $V61_close_door$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V58_env_always_ok$~1 () Bool) -(declare-fun $V59_prop_ok$~1 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$~1 () Bool) -(declare-fun $V253_between_A_and_X$~1 () Bool) -(declare-fun $V264_env_ok$~1 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$~1 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$~1 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$~1 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$~1 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$~1 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$~1 () Bool) -(declare-fun $V252_X$~1 () Bool) -(declare-fun $V268_door_initially_closed$~1 () Bool) -(declare-fun $V269_initially_not_in_station$~1 () Bool) -(declare-fun $V271_warning_start_only_in_station$~1 () Bool) -(declare-fun $V273_X$~1 () Bool) -(declare-fun $V274_X$~1 () Bool) -(declare-fun $V275_X$~1 () Bool) -(declare-fun $V276_X$~1 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $request_door$0 () Bool) -(declare-fun $warning_start$0 () Bool) -(declare-fun $in_station$0 () Bool) -(declare-fun $door_is_open$0 () Bool) -(declare-fun $V62_door_ok$0 () Bool) -(declare-fun $V60_open_door$0 () Bool) -(declare-fun $V61_close_door$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $V58_env_always_ok$0 () Bool) -(declare-fun $V59_prop_ok$0 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$0 () Bool) -(declare-fun $V253_between_A_and_X$0 () Bool) -(declare-fun $V264_env_ok$0 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$0 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$0 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$0 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$0 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$0 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$0 () Bool) -(declare-fun $V252_X$0 () Bool) -(declare-fun $V268_door_initially_closed$0 () Bool) -(declare-fun $V269_initially_not_in_station$0 () Bool) -(declare-fun $V271_warning_start_only_in_station$0 () Bool) -(declare-fun $V273_X$0 () Bool) -(declare-fun $V274_X$0 () Bool) -(declare-fun $V275_X$0 () Bool) -(declare-fun $V276_X$0 () Bool) -(declare-fun $~flatten0$0 () Bool) -(declare-fun $request_door$1 () Bool) -(declare-fun $warning_start$1 () Bool) -(declare-fun $in_station$1 () Bool) -(declare-fun $door_is_open$1 () Bool) -(declare-fun $V62_door_ok$1 () Bool) -(declare-fun $V60_open_door$1 () Bool) -(declare-fun $V61_close_door$1 () Bool) -(declare-fun $OK$1 () Bool) -(declare-fun $V58_env_always_ok$1 () Bool) -(declare-fun $V59_prop_ok$1 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$1 () Bool) -(declare-fun $V253_between_A_and_X$1 () Bool) -(declare-fun $V264_env_ok$1 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$1 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$1 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$1 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$1 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$1 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$1 () Bool) -(declare-fun $V252_X$1 () Bool) -(declare-fun $V268_door_initially_closed$1 () Bool) -(declare-fun $V269_initially_not_in_station$1 () Bool) -(declare-fun $V271_warning_start_only_in_station$1 () Bool) -(declare-fun $V273_X$1 () Bool) -(declare-fun $V274_X$1 () Bool) -(declare-fun $V275_X$1 () Bool) -(declare-fun $V276_X$1 () Bool) -(declare-fun $~flatten0$1 () Bool) -(declare-fun $request_door$2 () Bool) -(declare-fun $warning_start$2 () Bool) -(declare-fun $in_station$2 () Bool) -(declare-fun $door_is_open$2 () Bool) -(declare-fun $V62_door_ok$4 () Bool) -(declare-fun $V60_open_door$4 () Bool) -(declare-fun $V61_close_door$4 () Bool) -(declare-fun $OK$4 () Bool) -(declare-fun $V58_env_always_ok$4 () Bool) -(declare-fun $V59_prop_ok$4 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$4 () Bool) -(declare-fun $V253_between_A_and_X$4 () Bool) -(declare-fun $V264_env_ok$4 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$4 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$4 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$4 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$4 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$4 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$4 () Bool) -(declare-fun $V252_X$4 () Bool) -(declare-fun $V268_door_initially_closed$4 () Bool) -(declare-fun $V269_initially_not_in_station$4 () Bool) -(declare-fun $V271_warning_start_only_in_station$4 () Bool) -(declare-fun $V273_X$4 () Bool) -(declare-fun $V274_X$4 () Bool) -(declare-fun $V275_X$4 () Bool) -(declare-fun $V276_X$4 () Bool) -(declare-fun $~flatten0$4 () Bool) -(assert (and (T false $request_door$1 $warning_start$1 $in_station$1 $door_is_open$1 $V62_door_ok$1 $V60_open_door$1 $V61_close_door$1 $OK$1 $V58_env_always_ok$1 $V59_prop_ok$1 $V251_door_opens_before_leaving_station$1 $V253_between_A_and_X$1 $V264_env_ok$1 $V265_door_doesnt_close_if_not_asked$1 $V266_door_doesnt_open_if_not_asked$1 $V267_tramway_doesnt_start_if_not_door_ok$1 $V270_warning_start_and_in_station_go_down_simultaneously$1 $V272_warning_start_cant_become_true_when_door_is_opening$1 $V250_door_doesnt_open_out_of_station$1 $V252_X$1 $V268_door_initially_closed$1 $V269_initially_not_in_station$1 $V271_warning_start_only_in_station$1 $V273_X$1 $V274_X$1 $V275_X$1 $V276_X$1 $~flatten0$1 $request_door$2 $warning_start$2 $in_station$2 $door_is_open$2 $V62_door_ok$4 $V60_open_door$4 $V61_close_door$4 $OK$4 $V58_env_always_ok$4 $V59_prop_ok$4 $V251_door_opens_before_leaving_station$4 $V253_between_A_and_X$4 $V264_env_ok$4 $V265_door_doesnt_close_if_not_asked$4 $V266_door_doesnt_open_if_not_asked$4 $V267_tramway_doesnt_start_if_not_door_ok$4 $V270_warning_start_and_in_station_go_down_simultaneously$4 $V272_warning_start_cant_become_true_when_door_is_opening$4 $V250_door_doesnt_open_out_of_station$4 $V252_X$4 $V268_door_initially_closed$4 $V269_initially_not_in_station$4 $V271_warning_start_only_in_station$4 $V273_X$4 $V274_X$4 $V275_X$4 $V276_X$4 $~flatten0$4) $OK$4)) diff --git a/bench/tasks/tramway_e7_1834_e7_2363_base4_s_part.smt2 b/bench/tasks/tramway_e7_1834_e7_2363_base4_s_part.smt2 deleted file mode 100755 index b0175a40c..000000000 --- a/bench/tasks/tramway_e7_1834_e7_2363_base4_s_part.smt2 +++ /dev/null @@ -1,151 +0,0 @@ -; K = 4 -; Transition relation -(define-fun T ((%init Bool) ($request_door$0 Bool) ($warning_start$0 Bool) ($in_station$0 Bool) ($door_is_open$0 Bool) ($V62_door_ok$0 Bool) ($V60_open_door$0 Bool) ($V61_close_door$0 Bool) ($OK$0 Bool) ($V58_env_always_ok$0 Bool) ($V59_prop_ok$0 Bool) ($V251_door_opens_before_leaving_station$0 Bool) ($V253_between_A_and_X$0 Bool) ($V264_env_ok$0 Bool) ($V265_door_doesnt_close_if_not_asked$0 Bool) ($V266_door_doesnt_open_if_not_asked$0 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$0 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$0 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$0 Bool) ($V250_door_doesnt_open_out_of_station$0 Bool) ($V252_X$0 Bool) ($V268_door_initially_closed$0 Bool) ($V269_initially_not_in_station$0 Bool) ($V271_warning_start_only_in_station$0 Bool) ($V273_X$0 Bool) ($V274_X$0 Bool) ($V275_X$0 Bool) ($V276_X$0 Bool) ($~flatten0$0 Bool) ($request_door$1 Bool) ($warning_start$1 Bool) ($in_station$1 Bool) ($door_is_open$1 Bool) ($V62_door_ok$1 Bool) ($V60_open_door$1 Bool) ($V61_close_door$1 Bool) ($OK$1 Bool) ($V58_env_always_ok$1 Bool) ($V59_prop_ok$1 Bool) ($V251_door_opens_before_leaving_station$1 Bool) ($V253_between_A_and_X$1 Bool) ($V264_env_ok$1 Bool) ($V265_door_doesnt_close_if_not_asked$1 Bool) ($V266_door_doesnt_open_if_not_asked$1 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$1 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$1 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$1 Bool) ($V250_door_doesnt_open_out_of_station$1 Bool) ($V252_X$1 Bool) ($V268_door_initially_closed$1 Bool) ($V269_initially_not_in_station$1 Bool) ($V271_warning_start_only_in_station$1 Bool) ($V273_X$1 Bool) ($V274_X$1 Bool) ($V275_X$1 Bool) ($V276_X$1 Bool) ($~flatten0$1 Bool)) Bool (and (= $OK$1 (=> $V58_env_always_ok$1 $V59_prop_ok$1)) (= $V58_env_always_ok$1 (ite %init $V264_env_ok$1 (and $V264_env_ok$1 $V58_env_always_ok$0))) (= $V59_prop_ok$1 (and $V250_door_doesnt_open_out_of_station$1 $V251_door_opens_before_leaving_station$1)) (= $V250_door_doesnt_open_out_of_station$1 (=> $door_is_open$1 $in_station$1)) (= $V251_door_opens_before_leaving_station$1 (not (or $V253_between_A_and_X$1 (ite %init false (or $V252_X$1 (not $V252_X$0)))))) (= $V252_X$1 (not $in_station$1)) (= $V253_between_A_and_X$1 (ite (ite %init false (and $request_door$0 (not $warning_start$0))) true (ite (ite %init false $~flatten0$0) false (ite %init false $V253_between_A_and_X$0)))) (= $V264_env_ok$1 (and (and (and (and (and (and (and $V266_door_doesnt_open_if_not_asked$1 $V265_door_doesnt_close_if_not_asked$1) $V267_tramway_doesnt_start_if_not_door_ok$1) $V268_door_initially_closed$1) $V269_initially_not_in_station$1) $V270_warning_start_and_in_station_go_down_simultaneously$1) $V271_warning_start_only_in_station$1) $V272_warning_start_cant_become_true_when_door_is_opening$1)) (= $V265_door_doesnt_close_if_not_asked$1 (=> (ite %init false (or $door_is_open$1 (not $door_is_open$0))) $V60_open_door$1)) (= $V266_door_doesnt_open_if_not_asked$1 (=> (ite %init false (or $V273_X$1 (not $V273_X$0))) $V61_close_door$1)) (= $V267_tramway_doesnt_start_if_not_door_ok$1 (=> (ite %init false (or $V274_X$1 (not $V274_X$0))) (ite %init false $V62_door_ok$0))) (= $V268_door_initially_closed$1 (ite %init (not $door_is_open$1) true)) (= $V269_initially_not_in_station$1 (ite %init (not $in_station$1) true)) (= $V270_warning_start_and_in_station_go_down_simultaneously$1 (= (ite %init false (or $V275_X$1 (not $V275_X$0))) (ite %init false (or $V276_X$1 (not $V276_X$0))))) (= $V271_warning_start_only_in_station$1 (=> $warning_start$1 $in_station$1)) (= $V272_warning_start_cant_become_true_when_door_is_opening$1 (=> (ite %init false (or $warning_start$1 (not $warning_start$0))) (not $V60_open_door$1))) (= $V273_X$1 (not $door_is_open$1)) (= $V274_X$1 (not $in_station$1)) (= $V275_X$1 (not $in_station$1)) (= $V276_X$1 (not $warning_start$1)) (= $~flatten0$1 (ite %init false $door_is_open$0)))) -; Universally quantified variables -(declare-fun $request_door$~1 () Bool) -(declare-fun $warning_start$~1 () Bool) -(declare-fun $in_station$~1 () Bool) -(declare-fun $door_is_open$~1 () Bool) -(declare-fun $V62_door_ok$~1 () Bool) -(declare-fun $V60_open_door$~1 () Bool) -(declare-fun $V61_close_door$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V58_env_always_ok$~1 () Bool) -(declare-fun $V59_prop_ok$~1 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$~1 () Bool) -(declare-fun $V253_between_A_and_X$~1 () Bool) -(declare-fun $V264_env_ok$~1 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$~1 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$~1 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$~1 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$~1 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$~1 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$~1 () Bool) -(declare-fun $V252_X$~1 () Bool) -(declare-fun $V268_door_initially_closed$~1 () Bool) -(declare-fun $V269_initially_not_in_station$~1 () Bool) -(declare-fun $V271_warning_start_only_in_station$~1 () Bool) -(declare-fun $V273_X$~1 () Bool) -(declare-fun $V274_X$~1 () Bool) -(declare-fun $V275_X$~1 () Bool) -(declare-fun $V276_X$~1 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $request_door$0 () Bool) -(declare-fun $warning_start$0 () Bool) -(declare-fun $in_station$0 () Bool) -(declare-fun $door_is_open$0 () Bool) -(declare-fun $V62_door_ok$0 () Bool) -(declare-fun $V60_open_door$0 () Bool) -(declare-fun $V61_close_door$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $V58_env_always_ok$0 () Bool) -(declare-fun $V59_prop_ok$0 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$0 () Bool) -(declare-fun $V253_between_A_and_X$0 () Bool) -(declare-fun $V264_env_ok$0 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$0 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$0 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$0 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$0 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$0 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$0 () Bool) -(declare-fun $V252_X$0 () Bool) -(declare-fun $V268_door_initially_closed$0 () Bool) -(declare-fun $V269_initially_not_in_station$0 () Bool) -(declare-fun $V271_warning_start_only_in_station$0 () Bool) -(declare-fun $V273_X$0 () Bool) -(declare-fun $V274_X$0 () Bool) -(declare-fun $V275_X$0 () Bool) -(declare-fun $V276_X$0 () Bool) -(declare-fun $~flatten0$0 () Bool) -(declare-fun $request_door$1 () Bool) -(declare-fun $warning_start$1 () Bool) -(declare-fun $in_station$1 () Bool) -(declare-fun $door_is_open$1 () Bool) -(declare-fun $V62_door_ok$1 () Bool) -(declare-fun $V60_open_door$1 () Bool) -(declare-fun $V61_close_door$1 () Bool) -(declare-fun $OK$1 () Bool) -(declare-fun $V58_env_always_ok$1 () Bool) -(declare-fun $V59_prop_ok$1 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$1 () Bool) -(declare-fun $V253_between_A_and_X$1 () Bool) -(declare-fun $V264_env_ok$1 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$1 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$1 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$1 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$1 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$1 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$1 () Bool) -(declare-fun $V252_X$1 () Bool) -(declare-fun $V268_door_initially_closed$1 () Bool) -(declare-fun $V269_initially_not_in_station$1 () Bool) -(declare-fun $V271_warning_start_only_in_station$1 () Bool) -(declare-fun $V273_X$1 () Bool) -(declare-fun $V274_X$1 () Bool) -(declare-fun $V275_X$1 () Bool) -(declare-fun $V276_X$1 () Bool) -(declare-fun $~flatten0$1 () Bool) -(declare-fun $request_door$2 () Bool) -(declare-fun $warning_start$2 () Bool) -(declare-fun $in_station$2 () Bool) -(declare-fun $door_is_open$2 () Bool) -(declare-fun $V62_door_ok$2 () Bool) -(declare-fun $V60_open_door$2 () Bool) -(declare-fun $V61_close_door$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $V58_env_always_ok$2 () Bool) -(declare-fun $V59_prop_ok$2 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$2 () Bool) -(declare-fun $V253_between_A_and_X$2 () Bool) -(declare-fun $V264_env_ok$2 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$2 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$2 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$2 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$2 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$2 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$2 () Bool) -(declare-fun $V252_X$2 () Bool) -(declare-fun $V268_door_initially_closed$2 () Bool) -(declare-fun $V269_initially_not_in_station$2 () Bool) -(declare-fun $V271_warning_start_only_in_station$2 () Bool) -(declare-fun $V273_X$2 () Bool) -(declare-fun $V274_X$2 () Bool) -(declare-fun $V275_X$2 () Bool) -(declare-fun $V276_X$2 () Bool) -(declare-fun $~flatten0$2 () Bool) -(declare-fun $request_door$3 () Bool) -(declare-fun $warning_start$3 () Bool) -(declare-fun $in_station$3 () Bool) -(declare-fun $door_is_open$3 () Bool) -(declare-fun $V62_door_ok$3 () Bool) -(declare-fun $V60_open_door$3 () Bool) -(declare-fun $V61_close_door$3 () Bool) -(declare-fun $OK$3 () Bool) -(declare-fun $V58_env_always_ok$3 () Bool) -(declare-fun $V59_prop_ok$3 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$3 () Bool) -(declare-fun $V253_between_A_and_X$3 () Bool) -(declare-fun $V264_env_ok$3 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$3 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$3 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$3 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$3 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$3 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$3 () Bool) -(declare-fun $V252_X$3 () Bool) -(declare-fun $V268_door_initially_closed$3 () Bool) -(declare-fun $V269_initially_not_in_station$3 () Bool) -(declare-fun $V271_warning_start_only_in_station$3 () Bool) -(declare-fun $V273_X$3 () Bool) -(declare-fun $V274_X$3 () Bool) -(declare-fun $V275_X$3 () Bool) -(declare-fun $V276_X$3 () Bool) -(declare-fun $~flatten0$3 () Bool) -(assert (T true $request_door$~1 $warning_start$~1 $in_station$~1 $door_is_open$~1 $V62_door_ok$~1 $V60_open_door$~1 $V61_close_door$~1 $OK$~1 $V58_env_always_ok$~1 $V59_prop_ok$~1 $V251_door_opens_before_leaving_station$~1 $V253_between_A_and_X$~1 $V264_env_ok$~1 $V265_door_doesnt_close_if_not_asked$~1 $V266_door_doesnt_open_if_not_asked$~1 $V267_tramway_doesnt_start_if_not_door_ok$~1 $V270_warning_start_and_in_station_go_down_simultaneously$~1 $V272_warning_start_cant_become_true_when_door_is_opening$~1 $V250_door_doesnt_open_out_of_station$~1 $V252_X$~1 $V268_door_initially_closed$~1 $V269_initially_not_in_station$~1 $V271_warning_start_only_in_station$~1 $V273_X$~1 $V274_X$~1 $V275_X$~1 $V276_X$~1 $~flatten0$~1 $request_door$0 $warning_start$0 $in_station$0 $door_is_open$0 $V62_door_ok$0 $V60_open_door$0 $V61_close_door$0 $OK$0 $V58_env_always_ok$0 $V59_prop_ok$0 $V251_door_opens_before_leaving_station$0 $V253_between_A_and_X$0 $V264_env_ok$0 $V265_door_doesnt_close_if_not_asked$0 $V266_door_doesnt_open_if_not_asked$0 $V267_tramway_doesnt_start_if_not_door_ok$0 $V270_warning_start_and_in_station_go_down_simultaneously$0 $V272_warning_start_cant_become_true_when_door_is_opening$0 $V250_door_doesnt_open_out_of_station$0 $V252_X$0 $V268_door_initially_closed$0 $V269_initially_not_in_station$0 $V271_warning_start_only_in_station$0 $V273_X$0 $V274_X$0 $V275_X$0 $V276_X$0 $~flatten0$0)) -(assert $OK$0) -(assert (T false $request_door$0 $warning_start$0 $in_station$0 $door_is_open$0 $V62_door_ok$0 $V60_open_door$0 $V61_close_door$0 $OK$0 $V58_env_always_ok$0 $V59_prop_ok$0 $V251_door_opens_before_leaving_station$0 $V253_between_A_and_X$0 $V264_env_ok$0 $V265_door_doesnt_close_if_not_asked$0 $V266_door_doesnt_open_if_not_asked$0 $V267_tramway_doesnt_start_if_not_door_ok$0 $V270_warning_start_and_in_station_go_down_simultaneously$0 $V272_warning_start_cant_become_true_when_door_is_opening$0 $V250_door_doesnt_open_out_of_station$0 $V252_X$0 $V268_door_initially_closed$0 $V269_initially_not_in_station$0 $V271_warning_start_only_in_station$0 $V273_X$0 $V274_X$0 $V275_X$0 $V276_X$0 $~flatten0$0 $request_door$1 $warning_start$1 $in_station$1 $door_is_open$1 $V62_door_ok$1 $V60_open_door$1 $V61_close_door$1 $OK$1 $V58_env_always_ok$1 $V59_prop_ok$1 $V251_door_opens_before_leaving_station$1 $V253_between_A_and_X$1 $V264_env_ok$1 $V265_door_doesnt_close_if_not_asked$1 $V266_door_doesnt_open_if_not_asked$1 $V267_tramway_doesnt_start_if_not_door_ok$1 $V270_warning_start_and_in_station_go_down_simultaneously$1 $V272_warning_start_cant_become_true_when_door_is_opening$1 $V250_door_doesnt_open_out_of_station$1 $V252_X$1 $V268_door_initially_closed$1 $V269_initially_not_in_station$1 $V271_warning_start_only_in_station$1 $V273_X$1 $V274_X$1 $V275_X$1 $V276_X$1 $~flatten0$1)) -(assert $OK$1) -(assert (T false $request_door$1 $warning_start$1 $in_station$1 $door_is_open$1 $V62_door_ok$1 $V60_open_door$1 $V61_close_door$1 $OK$1 $V58_env_always_ok$1 $V59_prop_ok$1 $V251_door_opens_before_leaving_station$1 $V253_between_A_and_X$1 $V264_env_ok$1 $V265_door_doesnt_close_if_not_asked$1 $V266_door_doesnt_open_if_not_asked$1 $V267_tramway_doesnt_start_if_not_door_ok$1 $V270_warning_start_and_in_station_go_down_simultaneously$1 $V272_warning_start_cant_become_true_when_door_is_opening$1 $V250_door_doesnt_open_out_of_station$1 $V252_X$1 $V268_door_initially_closed$1 $V269_initially_not_in_station$1 $V271_warning_start_only_in_station$1 $V273_X$1 $V274_X$1 $V275_X$1 $V276_X$1 $~flatten0$1 $request_door$2 $warning_start$2 $in_station$2 $door_is_open$2 $V62_door_ok$2 $V60_open_door$2 $V61_close_door$2 $OK$2 $V58_env_always_ok$2 $V59_prop_ok$2 $V251_door_opens_before_leaving_station$2 $V253_between_A_and_X$2 $V264_env_ok$2 $V265_door_doesnt_close_if_not_asked$2 $V266_door_doesnt_open_if_not_asked$2 $V267_tramway_doesnt_start_if_not_door_ok$2 $V270_warning_start_and_in_station_go_down_simultaneously$2 $V272_warning_start_cant_become_true_when_door_is_opening$2 $V250_door_doesnt_open_out_of_station$2 $V252_X$2 $V268_door_initially_closed$2 $V269_initially_not_in_station$2 $V271_warning_start_only_in_station$2 $V273_X$2 $V274_X$2 $V275_X$2 $V276_X$2 $~flatten0$2)) -(assert $OK$2) -(assert (T false $request_door$2 $warning_start$2 $in_station$2 $door_is_open$2 $V62_door_ok$2 $V60_open_door$2 $V61_close_door$2 $OK$2 $V58_env_always_ok$2 $V59_prop_ok$2 $V251_door_opens_before_leaving_station$2 $V253_between_A_and_X$2 $V264_env_ok$2 $V265_door_doesnt_close_if_not_asked$2 $V266_door_doesnt_open_if_not_asked$2 $V267_tramway_doesnt_start_if_not_door_ok$2 $V270_warning_start_and_in_station_go_down_simultaneously$2 $V272_warning_start_cant_become_true_when_door_is_opening$2 $V250_door_doesnt_open_out_of_station$2 $V252_X$2 $V268_door_initially_closed$2 $V269_initially_not_in_station$2 $V271_warning_start_only_in_station$2 $V273_X$2 $V274_X$2 $V275_X$2 $V276_X$2 $~flatten0$2 $request_door$3 $warning_start$3 $in_station$3 $door_is_open$3 $V62_door_ok$3 $V60_open_door$3 $V61_close_door$3 $OK$3 $V58_env_always_ok$3 $V59_prop_ok$3 $V251_door_opens_before_leaving_station$3 $V253_between_A_and_X$3 $V264_env_ok$3 $V265_door_doesnt_close_if_not_asked$3 $V266_door_doesnt_open_if_not_asked$3 $V267_tramway_doesnt_start_if_not_door_ok$3 $V270_warning_start_and_in_station_go_down_simultaneously$3 $V272_warning_start_cant_become_true_when_door_is_opening$3 $V250_door_doesnt_open_out_of_station$3 $V252_X$3 $V268_door_initially_closed$3 $V269_initially_not_in_station$3 $V271_warning_start_only_in_station$3 $V273_X$3 $V274_X$3 $V275_X$3 $V276_X$3 $~flatten0$3)) diff --git a/bench/tasks/tramway_e7_1834_e7_2363_base4_t_part.smt2 b/bench/tasks/tramway_e7_1834_e7_2363_base4_t_part.smt2 deleted file mode 100755 index 4c374f8b1..000000000 --- a/bench/tasks/tramway_e7_1834_e7_2363_base4_t_part.smt2 +++ /dev/null @@ -1,145 +0,0 @@ -; K = 4 -; Transition relation -(define-fun T ((%init Bool) ($request_door$0 Bool) ($warning_start$0 Bool) ($in_station$0 Bool) ($door_is_open$0 Bool) ($V62_door_ok$0 Bool) ($V60_open_door$0 Bool) ($V61_close_door$0 Bool) ($OK$0 Bool) ($V58_env_always_ok$0 Bool) ($V59_prop_ok$0 Bool) ($V251_door_opens_before_leaving_station$0 Bool) ($V253_between_A_and_X$0 Bool) ($V264_env_ok$0 Bool) ($V265_door_doesnt_close_if_not_asked$0 Bool) ($V266_door_doesnt_open_if_not_asked$0 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$0 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$0 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$0 Bool) ($V250_door_doesnt_open_out_of_station$0 Bool) ($V252_X$0 Bool) ($V268_door_initially_closed$0 Bool) ($V269_initially_not_in_station$0 Bool) ($V271_warning_start_only_in_station$0 Bool) ($V273_X$0 Bool) ($V274_X$0 Bool) ($V275_X$0 Bool) ($V276_X$0 Bool) ($~flatten0$0 Bool) ($request_door$1 Bool) ($warning_start$1 Bool) ($in_station$1 Bool) ($door_is_open$1 Bool) ($V62_door_ok$1 Bool) ($V60_open_door$1 Bool) ($V61_close_door$1 Bool) ($OK$1 Bool) ($V58_env_always_ok$1 Bool) ($V59_prop_ok$1 Bool) ($V251_door_opens_before_leaving_station$1 Bool) ($V253_between_A_and_X$1 Bool) ($V264_env_ok$1 Bool) ($V265_door_doesnt_close_if_not_asked$1 Bool) ($V266_door_doesnt_open_if_not_asked$1 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$1 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$1 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$1 Bool) ($V250_door_doesnt_open_out_of_station$1 Bool) ($V252_X$1 Bool) ($V268_door_initially_closed$1 Bool) ($V269_initially_not_in_station$1 Bool) ($V271_warning_start_only_in_station$1 Bool) ($V273_X$1 Bool) ($V274_X$1 Bool) ($V275_X$1 Bool) ($V276_X$1 Bool) ($~flatten0$1 Bool)) Bool (and (= $OK$1 (=> $V58_env_always_ok$1 $V59_prop_ok$1)) (= $V58_env_always_ok$1 (ite %init $V264_env_ok$1 (and $V264_env_ok$1 $V58_env_always_ok$0))) (= $V59_prop_ok$1 (and $V250_door_doesnt_open_out_of_station$1 $V251_door_opens_before_leaving_station$1)) (= $V250_door_doesnt_open_out_of_station$1 (=> $door_is_open$1 $in_station$1)) (= $V251_door_opens_before_leaving_station$1 (not (or $V253_between_A_and_X$1 (ite %init false (or $V252_X$1 (not $V252_X$0)))))) (= $V252_X$1 (not $in_station$1)) (= $V253_between_A_and_X$1 (ite (ite %init false (and $request_door$0 (not $warning_start$0))) true (ite (ite %init false $~flatten0$0) false (ite %init false $V253_between_A_and_X$0)))) (= $V264_env_ok$1 (and (and (and (and (and (and (and $V266_door_doesnt_open_if_not_asked$1 $V265_door_doesnt_close_if_not_asked$1) $V267_tramway_doesnt_start_if_not_door_ok$1) $V268_door_initially_closed$1) $V269_initially_not_in_station$1) $V270_warning_start_and_in_station_go_down_simultaneously$1) $V271_warning_start_only_in_station$1) $V272_warning_start_cant_become_true_when_door_is_opening$1)) (= $V265_door_doesnt_close_if_not_asked$1 (=> (ite %init false (or $door_is_open$1 (not $door_is_open$0))) $V60_open_door$1)) (= $V266_door_doesnt_open_if_not_asked$1 (=> (ite %init false (or $V273_X$1 (not $V273_X$0))) $V61_close_door$1)) (= $V267_tramway_doesnt_start_if_not_door_ok$1 (=> (ite %init false (or $V274_X$1 (not $V274_X$0))) (ite %init false $V62_door_ok$0))) (= $V268_door_initially_closed$1 (ite %init (not $door_is_open$1) true)) (= $V269_initially_not_in_station$1 (ite %init (not $in_station$1) true)) (= $V270_warning_start_and_in_station_go_down_simultaneously$1 (= (ite %init false (or $V275_X$1 (not $V275_X$0))) (ite %init false (or $V276_X$1 (not $V276_X$0))))) (= $V271_warning_start_only_in_station$1 (=> $warning_start$1 $in_station$1)) (= $V272_warning_start_cant_become_true_when_door_is_opening$1 (=> (ite %init false (or $warning_start$1 (not $warning_start$0))) (not $V60_open_door$1))) (= $V273_X$1 (not $door_is_open$1)) (= $V274_X$1 (not $in_station$1)) (= $V275_X$1 (not $in_station$1)) (= $V276_X$1 (not $warning_start$1)) (= $~flatten0$1 (ite %init false $door_is_open$0)))) -; Universally quantified variables -(declare-fun $request_door$~1 () Bool) -(declare-fun $warning_start$~1 () Bool) -(declare-fun $in_station$~1 () Bool) -(declare-fun $door_is_open$~1 () Bool) -(declare-fun $V62_door_ok$~1 () Bool) -(declare-fun $V60_open_door$~1 () Bool) -(declare-fun $V61_close_door$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V58_env_always_ok$~1 () Bool) -(declare-fun $V59_prop_ok$~1 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$~1 () Bool) -(declare-fun $V253_between_A_and_X$~1 () Bool) -(declare-fun $V264_env_ok$~1 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$~1 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$~1 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$~1 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$~1 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$~1 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$~1 () Bool) -(declare-fun $V252_X$~1 () Bool) -(declare-fun $V268_door_initially_closed$~1 () Bool) -(declare-fun $V269_initially_not_in_station$~1 () Bool) -(declare-fun $V271_warning_start_only_in_station$~1 () Bool) -(declare-fun $V273_X$~1 () Bool) -(declare-fun $V274_X$~1 () Bool) -(declare-fun $V275_X$~1 () Bool) -(declare-fun $V276_X$~1 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $request_door$0 () Bool) -(declare-fun $warning_start$0 () Bool) -(declare-fun $in_station$0 () Bool) -(declare-fun $door_is_open$0 () Bool) -(declare-fun $V62_door_ok$0 () Bool) -(declare-fun $V60_open_door$0 () Bool) -(declare-fun $V61_close_door$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $V58_env_always_ok$0 () Bool) -(declare-fun $V59_prop_ok$0 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$0 () Bool) -(declare-fun $V253_between_A_and_X$0 () Bool) -(declare-fun $V264_env_ok$0 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$0 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$0 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$0 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$0 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$0 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$0 () Bool) -(declare-fun $V252_X$0 () Bool) -(declare-fun $V268_door_initially_closed$0 () Bool) -(declare-fun $V269_initially_not_in_station$0 () Bool) -(declare-fun $V271_warning_start_only_in_station$0 () Bool) -(declare-fun $V273_X$0 () Bool) -(declare-fun $V274_X$0 () Bool) -(declare-fun $V275_X$0 () Bool) -(declare-fun $V276_X$0 () Bool) -(declare-fun $~flatten0$0 () Bool) -(declare-fun $request_door$1 () Bool) -(declare-fun $warning_start$1 () Bool) -(declare-fun $in_station$1 () Bool) -(declare-fun $door_is_open$1 () Bool) -(declare-fun $V62_door_ok$1 () Bool) -(declare-fun $V60_open_door$1 () Bool) -(declare-fun $V61_close_door$1 () Bool) -(declare-fun $OK$1 () Bool) -(declare-fun $V58_env_always_ok$1 () Bool) -(declare-fun $V59_prop_ok$1 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$1 () Bool) -(declare-fun $V253_between_A_and_X$1 () Bool) -(declare-fun $V264_env_ok$1 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$1 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$1 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$1 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$1 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$1 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$1 () Bool) -(declare-fun $V252_X$1 () Bool) -(declare-fun $V268_door_initially_closed$1 () Bool) -(declare-fun $V269_initially_not_in_station$1 () Bool) -(declare-fun $V271_warning_start_only_in_station$1 () Bool) -(declare-fun $V273_X$1 () Bool) -(declare-fun $V274_X$1 () Bool) -(declare-fun $V275_X$1 () Bool) -(declare-fun $V276_X$1 () Bool) -(declare-fun $~flatten0$1 () Bool) -(declare-fun $request_door$2 () Bool) -(declare-fun $warning_start$2 () Bool) -(declare-fun $in_station$2 () Bool) -(declare-fun $door_is_open$2 () Bool) -(declare-fun $V62_door_ok$2 () Bool) -(declare-fun $V60_open_door$2 () Bool) -(declare-fun $V61_close_door$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $V58_env_always_ok$2 () Bool) -(declare-fun $V59_prop_ok$2 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$2 () Bool) -(declare-fun $V253_between_A_and_X$2 () Bool) -(declare-fun $V264_env_ok$2 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$2 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$2 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$2 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$2 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$2 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$2 () Bool) -(declare-fun $V252_X$2 () Bool) -(declare-fun $V268_door_initially_closed$2 () Bool) -(declare-fun $V269_initially_not_in_station$2 () Bool) -(declare-fun $V271_warning_start_only_in_station$2 () Bool) -(declare-fun $V273_X$2 () Bool) -(declare-fun $V274_X$2 () Bool) -(declare-fun $V275_X$2 () Bool) -(declare-fun $V276_X$2 () Bool) -(declare-fun $~flatten0$2 () Bool) -(declare-fun $request_door$3 () Bool) -(declare-fun $warning_start$3 () Bool) -(declare-fun $in_station$3 () Bool) -(declare-fun $door_is_open$3 () Bool) -(declare-fun $V62_door_ok$5 () Bool) -(declare-fun $V60_open_door$5 () Bool) -(declare-fun $V61_close_door$5 () Bool) -(declare-fun $OK$5 () Bool) -(declare-fun $V58_env_always_ok$5 () Bool) -(declare-fun $V59_prop_ok$5 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$5 () Bool) -(declare-fun $V253_between_A_and_X$5 () Bool) -(declare-fun $V264_env_ok$5 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$5 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$5 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$5 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$5 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$5 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$5 () Bool) -(declare-fun $V252_X$5 () Bool) -(declare-fun $V268_door_initially_closed$5 () Bool) -(declare-fun $V269_initially_not_in_station$5 () Bool) -(declare-fun $V271_warning_start_only_in_station$5 () Bool) -(declare-fun $V273_X$5 () Bool) -(declare-fun $V274_X$5 () Bool) -(declare-fun $V275_X$5 () Bool) -(declare-fun $V276_X$5 () Bool) -(declare-fun $~flatten0$5 () Bool) -(assert (and (T false $request_door$2 $warning_start$2 $in_station$2 $door_is_open$2 $V62_door_ok$2 $V60_open_door$2 $V61_close_door$2 $OK$2 $V58_env_always_ok$2 $V59_prop_ok$2 $V251_door_opens_before_leaving_station$2 $V253_between_A_and_X$2 $V264_env_ok$2 $V265_door_doesnt_close_if_not_asked$2 $V266_door_doesnt_open_if_not_asked$2 $V267_tramway_doesnt_start_if_not_door_ok$2 $V270_warning_start_and_in_station_go_down_simultaneously$2 $V272_warning_start_cant_become_true_when_door_is_opening$2 $V250_door_doesnt_open_out_of_station$2 $V252_X$2 $V268_door_initially_closed$2 $V269_initially_not_in_station$2 $V271_warning_start_only_in_station$2 $V273_X$2 $V274_X$2 $V275_X$2 $V276_X$2 $~flatten0$2 $request_door$3 $warning_start$3 $in_station$3 $door_is_open$3 $V62_door_ok$5 $V60_open_door$5 $V61_close_door$5 $OK$5 $V58_env_always_ok$5 $V59_prop_ok$5 $V251_door_opens_before_leaving_station$5 $V253_between_A_and_X$5 $V264_env_ok$5 $V265_door_doesnt_close_if_not_asked$5 $V266_door_doesnt_open_if_not_asked$5 $V267_tramway_doesnt_start_if_not_door_ok$5 $V270_warning_start_and_in_station_go_down_simultaneously$5 $V272_warning_start_cant_become_true_when_door_is_opening$5 $V250_door_doesnt_open_out_of_station$5 $V252_X$5 $V268_door_initially_closed$5 $V269_initially_not_in_station$5 $V271_warning_start_only_in_station$5 $V273_X$5 $V274_X$5 $V275_X$5 $V276_X$5 $~flatten0$5) $OK$5)) diff --git a/bench/tasks/tramway_e7_1834_e7_2363_extend_s_part.smt2 b/bench/tasks/tramway_e7_1834_e7_2363_extend_s_part.smt2 deleted file mode 100755 index 288d963f7..000000000 --- a/bench/tasks/tramway_e7_1834_e7_2363_extend_s_part.smt2 +++ /dev/null @@ -1,62 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($request_door$0 Bool) ($warning_start$0 Bool) ($in_station$0 Bool) ($door_is_open$0 Bool) ($V62_door_ok$0 Bool) ($V60_open_door$0 Bool) ($V61_close_door$0 Bool) ($OK$0 Bool) ($V58_env_always_ok$0 Bool) ($V59_prop_ok$0 Bool) ($V251_door_opens_before_leaving_station$0 Bool) ($V253_between_A_and_X$0 Bool) ($V264_env_ok$0 Bool) ($V265_door_doesnt_close_if_not_asked$0 Bool) ($V266_door_doesnt_open_if_not_asked$0 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$0 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$0 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$0 Bool) ($V250_door_doesnt_open_out_of_station$0 Bool) ($V252_X$0 Bool) ($V268_door_initially_closed$0 Bool) ($V269_initially_not_in_station$0 Bool) ($V271_warning_start_only_in_station$0 Bool) ($V273_X$0 Bool) ($V274_X$0 Bool) ($V275_X$0 Bool) ($V276_X$0 Bool) ($~flatten0$0 Bool) ($request_door$1 Bool) ($warning_start$1 Bool) ($in_station$1 Bool) ($door_is_open$1 Bool) ($V62_door_ok$1 Bool) ($V60_open_door$1 Bool) ($V61_close_door$1 Bool) ($OK$1 Bool) ($V58_env_always_ok$1 Bool) ($V59_prop_ok$1 Bool) ($V251_door_opens_before_leaving_station$1 Bool) ($V253_between_A_and_X$1 Bool) ($V264_env_ok$1 Bool) ($V265_door_doesnt_close_if_not_asked$1 Bool) ($V266_door_doesnt_open_if_not_asked$1 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$1 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$1 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$1 Bool) ($V250_door_doesnt_open_out_of_station$1 Bool) ($V252_X$1 Bool) ($V268_door_initially_closed$1 Bool) ($V269_initially_not_in_station$1 Bool) ($V271_warning_start_only_in_station$1 Bool) ($V273_X$1 Bool) ($V274_X$1 Bool) ($V275_X$1 Bool) ($V276_X$1 Bool) ($~flatten0$1 Bool)) Bool (and (= $OK$1 (=> $V58_env_always_ok$1 $V59_prop_ok$1)) (= $V58_env_always_ok$1 (ite %init $V264_env_ok$1 (and $V264_env_ok$1 $V58_env_always_ok$0))) (= $V59_prop_ok$1 (and $V250_door_doesnt_open_out_of_station$1 $V251_door_opens_before_leaving_station$1)) (= $V250_door_doesnt_open_out_of_station$1 (=> $door_is_open$1 $in_station$1)) (= $V251_door_opens_before_leaving_station$1 (not (or $V253_between_A_and_X$1 (ite %init false (or $V252_X$1 (not $V252_X$0)))))) (= $V252_X$1 (not $in_station$1)) (= $V253_between_A_and_X$1 (ite (ite %init false (and $request_door$0 (not $warning_start$0))) true (ite (ite %init false $~flatten0$0) false (ite %init false $V253_between_A_and_X$0)))) (= $V264_env_ok$1 (and (and (and (and (and (and (and $V266_door_doesnt_open_if_not_asked$1 $V265_door_doesnt_close_if_not_asked$1) $V267_tramway_doesnt_start_if_not_door_ok$1) $V268_door_initially_closed$1) $V269_initially_not_in_station$1) $V270_warning_start_and_in_station_go_down_simultaneously$1) $V271_warning_start_only_in_station$1) $V272_warning_start_cant_become_true_when_door_is_opening$1)) (= $V265_door_doesnt_close_if_not_asked$1 (=> (ite %init false (or $door_is_open$1 (not $door_is_open$0))) $V60_open_door$1)) (= $V266_door_doesnt_open_if_not_asked$1 (=> (ite %init false (or $V273_X$1 (not $V273_X$0))) $V61_close_door$1)) (= $V267_tramway_doesnt_start_if_not_door_ok$1 (=> (ite %init false (or $V274_X$1 (not $V274_X$0))) (ite %init false $V62_door_ok$0))) (= $V268_door_initially_closed$1 (ite %init (not $door_is_open$1) true)) (= $V269_initially_not_in_station$1 (ite %init (not $in_station$1) true)) (= $V270_warning_start_and_in_station_go_down_simultaneously$1 (= (ite %init false (or $V275_X$1 (not $V275_X$0))) (ite %init false (or $V276_X$1 (not $V276_X$0))))) (= $V271_warning_start_only_in_station$1 (=> $warning_start$1 $in_station$1)) (= $V272_warning_start_cant_become_true_when_door_is_opening$1 (=> (ite %init false (or $warning_start$1 (not $warning_start$0))) (not $V60_open_door$1))) (= $V273_X$1 (not $door_is_open$1)) (= $V274_X$1 (not $in_station$1)) (= $V275_X$1 (not $in_station$1)) (= $V276_X$1 (not $warning_start$1)) (= $~flatten0$1 (ite %init false $door_is_open$0)))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $request_door$~1 () Bool) -(declare-fun $warning_start$~1 () Bool) -(declare-fun $in_station$~1 () Bool) -(declare-fun $door_is_open$~1 () Bool) -(declare-fun $V62_door_ok$~1 () Bool) -(declare-fun $V60_open_door$~1 () Bool) -(declare-fun $V61_close_door$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V58_env_always_ok$~1 () Bool) -(declare-fun $V59_prop_ok$~1 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$~1 () Bool) -(declare-fun $V253_between_A_and_X$~1 () Bool) -(declare-fun $V264_env_ok$~1 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$~1 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$~1 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$~1 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$~1 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$~1 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$~1 () Bool) -(declare-fun $V252_X$~1 () Bool) -(declare-fun $V268_door_initially_closed$~1 () Bool) -(declare-fun $V269_initially_not_in_station$~1 () Bool) -(declare-fun $V271_warning_start_only_in_station$~1 () Bool) -(declare-fun $V273_X$~1 () Bool) -(declare-fun $V274_X$~1 () Bool) -(declare-fun $V275_X$~1 () Bool) -(declare-fun $V276_X$~1 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $request_door$0 () Bool) -(declare-fun $warning_start$0 () Bool) -(declare-fun $in_station$0 () Bool) -(declare-fun $door_is_open$0 () Bool) -(declare-fun $V62_door_ok$0 () Bool) -(declare-fun $V60_open_door$0 () Bool) -(declare-fun $V61_close_door$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $V58_env_always_ok$0 () Bool) -(declare-fun $V59_prop_ok$0 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$0 () Bool) -(declare-fun $V253_between_A_and_X$0 () Bool) -(declare-fun $V264_env_ok$0 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$0 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$0 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$0 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$0 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$0 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$0 () Bool) -(declare-fun $V252_X$0 () Bool) -(declare-fun $V268_door_initially_closed$0 () Bool) -(declare-fun $V269_initially_not_in_station$0 () Bool) -(declare-fun $V271_warning_start_only_in_station$0 () Bool) -(declare-fun $V273_X$0 () Bool) -(declare-fun $V274_X$0 () Bool) -(declare-fun $V275_X$0 () Bool) -(declare-fun $V276_X$0 () Bool) -(declare-fun $~flatten0$0 () Bool) -(assert (T %init $request_door$~1 $warning_start$~1 $in_station$~1 $door_is_open$~1 $V62_door_ok$~1 $V60_open_door$~1 $V61_close_door$~1 $OK$~1 $V58_env_always_ok$~1 $V59_prop_ok$~1 $V251_door_opens_before_leaving_station$~1 $V253_between_A_and_X$~1 $V264_env_ok$~1 $V265_door_doesnt_close_if_not_asked$~1 $V266_door_doesnt_open_if_not_asked$~1 $V267_tramway_doesnt_start_if_not_door_ok$~1 $V270_warning_start_and_in_station_go_down_simultaneously$~1 $V272_warning_start_cant_become_true_when_door_is_opening$~1 $V250_door_doesnt_open_out_of_station$~1 $V252_X$~1 $V268_door_initially_closed$~1 $V269_initially_not_in_station$~1 $V271_warning_start_only_in_station$~1 $V273_X$~1 $V274_X$~1 $V275_X$~1 $V276_X$~1 $~flatten0$~1 $request_door$0 $warning_start$0 $in_station$0 $door_is_open$0 $V62_door_ok$0 $V60_open_door$0 $V61_close_door$0 $OK$0 $V58_env_always_ok$0 $V59_prop_ok$0 $V251_door_opens_before_leaving_station$0 $V253_between_A_and_X$0 $V264_env_ok$0 $V265_door_doesnt_close_if_not_asked$0 $V266_door_doesnt_open_if_not_asked$0 $V267_tramway_doesnt_start_if_not_door_ok$0 $V270_warning_start_and_in_station_go_down_simultaneously$0 $V272_warning_start_cant_become_true_when_door_is_opening$0 $V250_door_doesnt_open_out_of_station$0 $V252_X$0 $V268_door_initially_closed$0 $V269_initially_not_in_station$0 $V271_warning_start_only_in_station$0 $V273_X$0 $V274_X$0 $V275_X$0 $V276_X$0 $~flatten0$0)) diff --git a/bench/tasks/tramway_e7_1834_e7_2363_extend_t_part.smt2 b/bench/tasks/tramway_e7_1834_e7_2363_extend_t_part.smt2 deleted file mode 100755 index fb2b85215..000000000 --- a/bench/tasks/tramway_e7_1834_e7_2363_extend_t_part.smt2 +++ /dev/null @@ -1,63 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($request_door$0 Bool) ($warning_start$0 Bool) ($in_station$0 Bool) ($door_is_open$0 Bool) ($V62_door_ok$0 Bool) ($V60_open_door$0 Bool) ($V61_close_door$0 Bool) ($OK$0 Bool) ($V58_env_always_ok$0 Bool) ($V59_prop_ok$0 Bool) ($V251_door_opens_before_leaving_station$0 Bool) ($V253_between_A_and_X$0 Bool) ($V264_env_ok$0 Bool) ($V265_door_doesnt_close_if_not_asked$0 Bool) ($V266_door_doesnt_open_if_not_asked$0 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$0 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$0 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$0 Bool) ($V250_door_doesnt_open_out_of_station$0 Bool) ($V252_X$0 Bool) ($V268_door_initially_closed$0 Bool) ($V269_initially_not_in_station$0 Bool) ($V271_warning_start_only_in_station$0 Bool) ($V273_X$0 Bool) ($V274_X$0 Bool) ($V275_X$0 Bool) ($V276_X$0 Bool) ($~flatten0$0 Bool) ($request_door$1 Bool) ($warning_start$1 Bool) ($in_station$1 Bool) ($door_is_open$1 Bool) ($V62_door_ok$1 Bool) ($V60_open_door$1 Bool) ($V61_close_door$1 Bool) ($OK$1 Bool) ($V58_env_always_ok$1 Bool) ($V59_prop_ok$1 Bool) ($V251_door_opens_before_leaving_station$1 Bool) ($V253_between_A_and_X$1 Bool) ($V264_env_ok$1 Bool) ($V265_door_doesnt_close_if_not_asked$1 Bool) ($V266_door_doesnt_open_if_not_asked$1 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$1 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$1 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$1 Bool) ($V250_door_doesnt_open_out_of_station$1 Bool) ($V252_X$1 Bool) ($V268_door_initially_closed$1 Bool) ($V269_initially_not_in_station$1 Bool) ($V271_warning_start_only_in_station$1 Bool) ($V273_X$1 Bool) ($V274_X$1 Bool) ($V275_X$1 Bool) ($V276_X$1 Bool) ($~flatten0$1 Bool)) Bool (and (= $OK$1 (=> $V58_env_always_ok$1 $V59_prop_ok$1)) (= $V58_env_always_ok$1 (ite %init $V264_env_ok$1 (and $V264_env_ok$1 $V58_env_always_ok$0))) (= $V59_prop_ok$1 (and $V250_door_doesnt_open_out_of_station$1 $V251_door_opens_before_leaving_station$1)) (= $V250_door_doesnt_open_out_of_station$1 (=> $door_is_open$1 $in_station$1)) (= $V251_door_opens_before_leaving_station$1 (not (or $V253_between_A_and_X$1 (ite %init false (or $V252_X$1 (not $V252_X$0)))))) (= $V252_X$1 (not $in_station$1)) (= $V253_between_A_and_X$1 (ite (ite %init false (and $request_door$0 (not $warning_start$0))) true (ite (ite %init false $~flatten0$0) false (ite %init false $V253_between_A_and_X$0)))) (= $V264_env_ok$1 (and (and (and (and (and (and (and $V266_door_doesnt_open_if_not_asked$1 $V265_door_doesnt_close_if_not_asked$1) $V267_tramway_doesnt_start_if_not_door_ok$1) $V268_door_initially_closed$1) $V269_initially_not_in_station$1) $V270_warning_start_and_in_station_go_down_simultaneously$1) $V271_warning_start_only_in_station$1) $V272_warning_start_cant_become_true_when_door_is_opening$1)) (= $V265_door_doesnt_close_if_not_asked$1 (=> (ite %init false (or $door_is_open$1 (not $door_is_open$0))) $V60_open_door$1)) (= $V266_door_doesnt_open_if_not_asked$1 (=> (ite %init false (or $V273_X$1 (not $V273_X$0))) $V61_close_door$1)) (= $V267_tramway_doesnt_start_if_not_door_ok$1 (=> (ite %init false (or $V274_X$1 (not $V274_X$0))) (ite %init false $V62_door_ok$0))) (= $V268_door_initially_closed$1 (ite %init (not $door_is_open$1) true)) (= $V269_initially_not_in_station$1 (ite %init (not $in_station$1) true)) (= $V270_warning_start_and_in_station_go_down_simultaneously$1 (= (ite %init false (or $V275_X$1 (not $V275_X$0))) (ite %init false (or $V276_X$1 (not $V276_X$0))))) (= $V271_warning_start_only_in_station$1 (=> $warning_start$1 $in_station$1)) (= $V272_warning_start_cant_become_true_when_door_is_opening$1 (=> (ite %init false (or $warning_start$1 (not $warning_start$0))) (not $V60_open_door$1))) (= $V273_X$1 (not $door_is_open$1)) (= $V274_X$1 (not $in_station$1)) (= $V275_X$1 (not $in_station$1)) (= $V276_X$1 (not $warning_start$1)) (= $~flatten0$1 (ite %init false $door_is_open$0)))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $request_door$~1 () Bool) -(declare-fun $warning_start$~1 () Bool) -(declare-fun $in_station$~1 () Bool) -(declare-fun $door_is_open$~1 () Bool) -(declare-fun $V62_door_ok$~1 () Bool) -(declare-fun $V60_open_door$~1 () Bool) -(declare-fun $V61_close_door$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V58_env_always_ok$~1 () Bool) -(declare-fun $V59_prop_ok$~1 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$~1 () Bool) -(declare-fun $V253_between_A_and_X$~1 () Bool) -(declare-fun $V264_env_ok$~1 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$~1 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$~1 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$~1 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$~1 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$~1 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$~1 () Bool) -(declare-fun $V252_X$~1 () Bool) -(declare-fun $V268_door_initially_closed$~1 () Bool) -(declare-fun $V269_initially_not_in_station$~1 () Bool) -(declare-fun $V271_warning_start_only_in_station$~1 () Bool) -(declare-fun $V273_X$~1 () Bool) -(declare-fun $V274_X$~1 () Bool) -(declare-fun $V275_X$~1 () Bool) -(declare-fun $V276_X$~1 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $request_door$0 () Bool) -(declare-fun $warning_start$0 () Bool) -(declare-fun $in_station$0 () Bool) -(declare-fun $door_is_open$0 () Bool) -(declare-fun $V62_door_ok$2 () Bool) -(declare-fun $V60_open_door$2 () Bool) -(declare-fun $V61_close_door$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $V58_env_always_ok$2 () Bool) -(declare-fun $V59_prop_ok$2 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$2 () Bool) -(declare-fun $V253_between_A_and_X$2 () Bool) -(declare-fun $V264_env_ok$2 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$2 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$2 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$2 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$2 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$2 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$2 () Bool) -(declare-fun $V252_X$2 () Bool) -(declare-fun $V268_door_initially_closed$2 () Bool) -(declare-fun $V269_initially_not_in_station$2 () Bool) -(declare-fun $V271_warning_start_only_in_station$2 () Bool) -(declare-fun $V273_X$2 () Bool) -(declare-fun $V274_X$2 () Bool) -(declare-fun $V275_X$2 () Bool) -(declare-fun $V276_X$2 () Bool) -(declare-fun $~flatten0$ () Bool) -(declare-fun $~flatten0$2 () Bool) -(assert (and (T %init $request_door$~1 $warning_start$~1 $in_station$~1 $door_is_open$~1 $V62_door_ok$~1 $V60_open_door$~1 $V61_close_door$~1 $OK$~1 $V58_env_always_ok$~1 $V59_prop_ok$~1 $V251_door_opens_before_leaving_station$~1 $V253_between_A_and_X$~1 $V264_env_ok$~1 $V265_door_doesnt_close_if_not_asked$~1 $V266_door_doesnt_open_if_not_asked$~1 $V267_tramway_doesnt_start_if_not_door_ok$~1 $V270_warning_start_and_in_station_go_down_simultaneously$~1 $V272_warning_start_cant_become_true_when_door_is_opening$~1 $V250_door_doesnt_open_out_of_station$~1 $V252_X$~1 $V268_door_initially_closed$~1 $V269_initially_not_in_station$~1 $V271_warning_start_only_in_station$~1 $V273_X$~1 $V274_X$~1 $V275_X$~1 $V276_X$~1 $~flatten0$~1 $request_door$0 $warning_start$0 $in_station$0 $door_is_open$0 $V62_door_ok$2 $V60_open_door$2 $V61_close_door$2 $OK$2 $V58_env_always_ok$2 $V59_prop_ok$2 $V251_door_opens_before_leaving_station$2 $V253_between_A_and_X$2 $V264_env_ok$2 $V265_door_doesnt_close_if_not_asked$2 $V266_door_doesnt_open_if_not_asked$2 $V267_tramway_doesnt_start_if_not_door_ok$2 $V270_warning_start_and_in_station_go_down_simultaneously$2 $V272_warning_start_cant_become_true_when_door_is_opening$2 $V250_door_doesnt_open_out_of_station$2 $V252_X$2 $V268_door_initially_closed$2 $V269_initially_not_in_station$2 $V271_warning_start_only_in_station$2 $V273_X$2 $V274_X$2 $V275_X$2 $V276_X$2 $~flatten0$2) $OK$2)) diff --git a/bench/tasks/tramway_e7_1834_extend_s_part.smt2 b/bench/tasks/tramway_e7_1834_extend_s_part.smt2 deleted file mode 100755 index 29834933a..000000000 --- a/bench/tasks/tramway_e7_1834_extend_s_part.smt2 +++ /dev/null @@ -1,62 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($request_door$0 Bool) ($warning_start$0 Bool) ($in_station$0 Bool) ($door_is_open$0 Bool) ($V60_open_door$0 Bool) ($V61_close_door$0 Bool) ($V62_door_ok$0 Bool) ($OK$0 Bool) ($V58_env_always_ok$0 Bool) ($V59_prop_ok$0 Bool) ($V250_door_doesnt_open_out_of_station$0 Bool) ($V251_door_opens_before_leaving_station$0 Bool) ($V252_X$0 Bool) ($V253_between_A_and_X$0 Bool) ($V264_env_ok$0 Bool) ($V265_door_doesnt_close_if_not_asked$0 Bool) ($V266_door_doesnt_open_if_not_asked$0 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$0 Bool) ($V268_door_initially_closed$0 Bool) ($V269_initially_not_in_station$0 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$0 Bool) ($V271_warning_start_only_in_station$0 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$0 Bool) ($V273_X$0 Bool) ($V274_X$0 Bool) ($V275_X$0 Bool) ($V276_X$0 Bool) ($~flatten0$0 Bool) ($request_door$1 Bool) ($warning_start$1 Bool) ($in_station$1 Bool) ($door_is_open$1 Bool) ($V60_open_door$1 Bool) ($V61_close_door$1 Bool) ($V62_door_ok$1 Bool) ($OK$1 Bool) ($V58_env_always_ok$1 Bool) ($V59_prop_ok$1 Bool) ($V250_door_doesnt_open_out_of_station$1 Bool) ($V251_door_opens_before_leaving_station$1 Bool) ($V252_X$1 Bool) ($V253_between_A_and_X$1 Bool) ($V264_env_ok$1 Bool) ($V265_door_doesnt_close_if_not_asked$1 Bool) ($V266_door_doesnt_open_if_not_asked$1 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$1 Bool) ($V268_door_initially_closed$1 Bool) ($V269_initially_not_in_station$1 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$1 Bool) ($V271_warning_start_only_in_station$1 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$1 Bool) ($V273_X$1 Bool) ($V274_X$1 Bool) ($V275_X$1 Bool) ($V276_X$1 Bool) ($~flatten0$1 Bool)) Bool (and (= $OK$1 (=> $V58_env_always_ok$1 $V59_prop_ok$1)) (= $V58_env_always_ok$1 (ite %init $V264_env_ok$1 (and $V264_env_ok$1 $V58_env_always_ok$0))) (= $V59_prop_ok$1 (and $V250_door_doesnt_open_out_of_station$1 $V251_door_opens_before_leaving_station$1)) (= $V250_door_doesnt_open_out_of_station$1 (=> $door_is_open$1 $in_station$1)) (= $V251_door_opens_before_leaving_station$1 (not (and $V253_between_A_and_X$1 (ite %init false (or $V252_X$1 (not $V252_X$0)))))) (= $V252_X$1 (not $in_station$1)) (= $V253_between_A_and_X$1 (ite (ite %init false (and $request_door$0 (not $warning_start$0))) true (ite (ite %init false $~flatten0$0) false (ite %init false $V253_between_A_and_X$0)))) (= $V264_env_ok$1 (and (and (and (and (and (and (and $V266_door_doesnt_open_if_not_asked$1 $V265_door_doesnt_close_if_not_asked$1) $V267_tramway_doesnt_start_if_not_door_ok$1) $V268_door_initially_closed$1) $V269_initially_not_in_station$1) $V270_warning_start_and_in_station_go_down_simultaneously$1) $V271_warning_start_only_in_station$1) $V272_warning_start_cant_become_true_when_door_is_opening$1)) (= $V265_door_doesnt_close_if_not_asked$1 (=> (ite %init false (or $door_is_open$1 (not $door_is_open$0))) $V60_open_door$1)) (= $V266_door_doesnt_open_if_not_asked$1 (=> (ite %init false (or $V273_X$1 (not $V273_X$0))) $V61_close_door$1)) (= $V267_tramway_doesnt_start_if_not_door_ok$1 (=> (ite %init false (or $V274_X$1 (not $V274_X$0))) (ite %init false $V62_door_ok$0))) (= $V268_door_initially_closed$1 (ite %init (not $door_is_open$1) true)) (= $V269_initially_not_in_station$1 (ite %init (not $in_station$1) true)) (= $V270_warning_start_and_in_station_go_down_simultaneously$1 (= (ite %init false (or $V275_X$1 (not $V275_X$0))) (ite %init false (or $V276_X$1 (not $V276_X$0))))) (= $V271_warning_start_only_in_station$1 (=> $warning_start$1 $in_station$1)) (= $V272_warning_start_cant_become_true_when_door_is_opening$1 (=> (ite %init false (or $warning_start$1 (not $warning_start$0))) (not $V60_open_door$1))) (= $V273_X$1 (not $door_is_open$1)) (= $V274_X$1 (not $in_station$1)) (= $V275_X$1 (not $in_station$1)) (= $V276_X$1 (not $warning_start$1)) (= $~flatten0$1 (ite %init false $door_is_open$0)))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $request_door$~1 () Bool) -(declare-fun $warning_start$~1 () Bool) -(declare-fun $in_station$~1 () Bool) -(declare-fun $door_is_open$~1 () Bool) -(declare-fun $V60_open_door$~1 () Bool) -(declare-fun $V61_close_door$~1 () Bool) -(declare-fun $V62_door_ok$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V58_env_always_ok$~1 () Bool) -(declare-fun $V59_prop_ok$~1 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$~1 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$~1 () Bool) -(declare-fun $V252_X$~1 () Bool) -(declare-fun $V253_between_A_and_X$~1 () Bool) -(declare-fun $V264_env_ok$~1 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$~1 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$~1 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$~1 () Bool) -(declare-fun $V268_door_initially_closed$~1 () Bool) -(declare-fun $V269_initially_not_in_station$~1 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$~1 () Bool) -(declare-fun $V271_warning_start_only_in_station$~1 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$~1 () Bool) -(declare-fun $V273_X$~1 () Bool) -(declare-fun $V274_X$~1 () Bool) -(declare-fun $V275_X$~1 () Bool) -(declare-fun $V276_X$~1 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $request_door$0 () Bool) -(declare-fun $warning_start$0 () Bool) -(declare-fun $in_station$0 () Bool) -(declare-fun $door_is_open$0 () Bool) -(declare-fun $V60_open_door$0 () Bool) -(declare-fun $V61_close_door$0 () Bool) -(declare-fun $V62_door_ok$0 () Bool) -(declare-fun $OK$0 () Bool) -(declare-fun $V58_env_always_ok$0 () Bool) -(declare-fun $V59_prop_ok$0 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$0 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$0 () Bool) -(declare-fun $V252_X$0 () Bool) -(declare-fun $V253_between_A_and_X$0 () Bool) -(declare-fun $V264_env_ok$0 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$0 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$0 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$0 () Bool) -(declare-fun $V268_door_initially_closed$0 () Bool) -(declare-fun $V269_initially_not_in_station$0 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$0 () Bool) -(declare-fun $V271_warning_start_only_in_station$0 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$0 () Bool) -(declare-fun $V273_X$0 () Bool) -(declare-fun $V274_X$0 () Bool) -(declare-fun $V275_X$0 () Bool) -(declare-fun $V276_X$0 () Bool) -(declare-fun $~flatten0$0 () Bool) -(assert (T %init $request_door$~1 $warning_start$~1 $in_station$~1 $door_is_open$~1 $V60_open_door$~1 $V61_close_door$~1 $V62_door_ok$~1 $OK$~1 $V58_env_always_ok$~1 $V59_prop_ok$~1 $V250_door_doesnt_open_out_of_station$~1 $V251_door_opens_before_leaving_station$~1 $V252_X$~1 $V253_between_A_and_X$~1 $V264_env_ok$~1 $V265_door_doesnt_close_if_not_asked$~1 $V266_door_doesnt_open_if_not_asked$~1 $V267_tramway_doesnt_start_if_not_door_ok$~1 $V268_door_initially_closed$~1 $V269_initially_not_in_station$~1 $V270_warning_start_and_in_station_go_down_simultaneously$~1 $V271_warning_start_only_in_station$~1 $V272_warning_start_cant_become_true_when_door_is_opening$~1 $V273_X$~1 $V274_X$~1 $V275_X$~1 $V276_X$~1 $~flatten0$~1 $request_door$0 $warning_start$0 $in_station$0 $door_is_open$0 $V60_open_door$0 $V61_close_door$0 $V62_door_ok$0 $OK$0 $V58_env_always_ok$0 $V59_prop_ok$0 $V250_door_doesnt_open_out_of_station$0 $V251_door_opens_before_leaving_station$0 $V252_X$0 $V253_between_A_and_X$0 $V264_env_ok$0 $V265_door_doesnt_close_if_not_asked$0 $V266_door_doesnt_open_if_not_asked$0 $V267_tramway_doesnt_start_if_not_door_ok$0 $V268_door_initially_closed$0 $V269_initially_not_in_station$0 $V270_warning_start_and_in_station_go_down_simultaneously$0 $V271_warning_start_only_in_station$0 $V272_warning_start_cant_become_true_when_door_is_opening$0 $V273_X$0 $V274_X$0 $V275_X$0 $V276_X$0 $~flatten0$0)) diff --git a/bench/tasks/tramway_e7_1834_extend_t_part.smt2 b/bench/tasks/tramway_e7_1834_extend_t_part.smt2 deleted file mode 100755 index 86db2774c..000000000 --- a/bench/tasks/tramway_e7_1834_extend_t_part.smt2 +++ /dev/null @@ -1,62 +0,0 @@ -; K = 0 -; Transition relation -(define-fun T ((%init Bool) ($request_door$0 Bool) ($warning_start$0 Bool) ($in_station$0 Bool) ($door_is_open$0 Bool) ($V60_open_door$0 Bool) ($V61_close_door$0 Bool) ($V62_door_ok$0 Bool) ($OK$0 Bool) ($V58_env_always_ok$0 Bool) ($V59_prop_ok$0 Bool) ($V250_door_doesnt_open_out_of_station$0 Bool) ($V251_door_opens_before_leaving_station$0 Bool) ($V252_X$0 Bool) ($V253_between_A_and_X$0 Bool) ($V264_env_ok$0 Bool) ($V265_door_doesnt_close_if_not_asked$0 Bool) ($V266_door_doesnt_open_if_not_asked$0 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$0 Bool) ($V268_door_initially_closed$0 Bool) ($V269_initially_not_in_station$0 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$0 Bool) ($V271_warning_start_only_in_station$0 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$0 Bool) ($V273_X$0 Bool) ($V274_X$0 Bool) ($V275_X$0 Bool) ($V276_X$0 Bool) ($~flatten0$0 Bool) ($request_door$1 Bool) ($warning_start$1 Bool) ($in_station$1 Bool) ($door_is_open$1 Bool) ($V60_open_door$1 Bool) ($V61_close_door$1 Bool) ($V62_door_ok$1 Bool) ($OK$1 Bool) ($V58_env_always_ok$1 Bool) ($V59_prop_ok$1 Bool) ($V250_door_doesnt_open_out_of_station$1 Bool) ($V251_door_opens_before_leaving_station$1 Bool) ($V252_X$1 Bool) ($V253_between_A_and_X$1 Bool) ($V264_env_ok$1 Bool) ($V265_door_doesnt_close_if_not_asked$1 Bool) ($V266_door_doesnt_open_if_not_asked$1 Bool) ($V267_tramway_doesnt_start_if_not_door_ok$1 Bool) ($V268_door_initially_closed$1 Bool) ($V269_initially_not_in_station$1 Bool) ($V270_warning_start_and_in_station_go_down_simultaneously$1 Bool) ($V271_warning_start_only_in_station$1 Bool) ($V272_warning_start_cant_become_true_when_door_is_opening$1 Bool) ($V273_X$1 Bool) ($V274_X$1 Bool) ($V275_X$1 Bool) ($V276_X$1 Bool) ($~flatten0$1 Bool)) Bool (and (= $OK$1 (=> $V58_env_always_ok$1 $V59_prop_ok$1)) (= $V58_env_always_ok$1 (ite %init $V264_env_ok$1 (and $V264_env_ok$1 $V58_env_always_ok$0))) (= $V59_prop_ok$1 (and $V250_door_doesnt_open_out_of_station$1 $V251_door_opens_before_leaving_station$1)) (= $V250_door_doesnt_open_out_of_station$1 (=> $door_is_open$1 $in_station$1)) (= $V251_door_opens_before_leaving_station$1 (not (and $V253_between_A_and_X$1 (ite %init false (or $V252_X$1 (not $V252_X$0)))))) (= $V252_X$1 (not $in_station$1)) (= $V253_between_A_and_X$1 (ite (ite %init false (and $request_door$0 (not $warning_start$0))) true (ite (ite %init false $~flatten0$0) false (ite %init false $V253_between_A_and_X$0)))) (= $V264_env_ok$1 (and (and (and (and (and (and (and $V266_door_doesnt_open_if_not_asked$1 $V265_door_doesnt_close_if_not_asked$1) $V267_tramway_doesnt_start_if_not_door_ok$1) $V268_door_initially_closed$1) $V269_initially_not_in_station$1) $V270_warning_start_and_in_station_go_down_simultaneously$1) $V271_warning_start_only_in_station$1) $V272_warning_start_cant_become_true_when_door_is_opening$1)) (= $V265_door_doesnt_close_if_not_asked$1 (=> (ite %init false (or $door_is_open$1 (not $door_is_open$0))) $V60_open_door$1)) (= $V266_door_doesnt_open_if_not_asked$1 (=> (ite %init false (or $V273_X$1 (not $V273_X$0))) $V61_close_door$1)) (= $V267_tramway_doesnt_start_if_not_door_ok$1 (=> (ite %init false (or $V274_X$1 (not $V274_X$0))) (ite %init false $V62_door_ok$0))) (= $V268_door_initially_closed$1 (ite %init (not $door_is_open$1) true)) (= $V269_initially_not_in_station$1 (ite %init (not $in_station$1) true)) (= $V270_warning_start_and_in_station_go_down_simultaneously$1 (= (ite %init false (or $V275_X$1 (not $V275_X$0))) (ite %init false (or $V276_X$1 (not $V276_X$0))))) (= $V271_warning_start_only_in_station$1 (=> $warning_start$1 $in_station$1)) (= $V272_warning_start_cant_become_true_when_door_is_opening$1 (=> (ite %init false (or $warning_start$1 (not $warning_start$0))) (not $V60_open_door$1))) (= $V273_X$1 (not $door_is_open$1)) (= $V274_X$1 (not $in_station$1)) (= $V275_X$1 (not $in_station$1)) (= $V276_X$1 (not $warning_start$1)) (= $~flatten0$1 (ite %init false $door_is_open$0)))) -; Universally quantified variables -(declare-fun %init () Bool) -(declare-fun $request_door$~1 () Bool) -(declare-fun $warning_start$~1 () Bool) -(declare-fun $in_station$~1 () Bool) -(declare-fun $door_is_open$~1 () Bool) -(declare-fun $V60_open_door$~1 () Bool) -(declare-fun $V61_close_door$~1 () Bool) -(declare-fun $V62_door_ok$~1 () Bool) -(declare-fun $OK$~1 () Bool) -(declare-fun $V58_env_always_ok$~1 () Bool) -(declare-fun $V59_prop_ok$~1 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$~1 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$~1 () Bool) -(declare-fun $V252_X$~1 () Bool) -(declare-fun $V253_between_A_and_X$~1 () Bool) -(declare-fun $V264_env_ok$~1 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$~1 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$~1 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$~1 () Bool) -(declare-fun $V268_door_initially_closed$~1 () Bool) -(declare-fun $V269_initially_not_in_station$~1 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$~1 () Bool) -(declare-fun $V271_warning_start_only_in_station$~1 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$~1 () Bool) -(declare-fun $V273_X$~1 () Bool) -(declare-fun $V274_X$~1 () Bool) -(declare-fun $V275_X$~1 () Bool) -(declare-fun $V276_X$~1 () Bool) -(declare-fun $~flatten0$~1 () Bool) -(declare-fun $request_door$0 () Bool) -(declare-fun $warning_start$0 () Bool) -(declare-fun $in_station$0 () Bool) -(declare-fun $door_is_open$0 () Bool) -(declare-fun $V60_open_door$2 () Bool) -(declare-fun $V61_close_door$2 () Bool) -(declare-fun $V62_door_ok$2 () Bool) -(declare-fun $OK$2 () Bool) -(declare-fun $V58_env_always_ok$2 () Bool) -(declare-fun $V59_prop_ok$2 () Bool) -(declare-fun $V250_door_doesnt_open_out_of_station$2 () Bool) -(declare-fun $V251_door_opens_before_leaving_station$2 () Bool) -(declare-fun $V252_X$2 () Bool) -(declare-fun $V253_between_A_and_X$2 () Bool) -(declare-fun $V264_env_ok$2 () Bool) -(declare-fun $V265_door_doesnt_close_if_not_asked$2 () Bool) -(declare-fun $V266_door_doesnt_open_if_not_asked$2 () Bool) -(declare-fun $V267_tramway_doesnt_start_if_not_door_ok$2 () Bool) -(declare-fun $V268_door_initially_closed$2 () Bool) -(declare-fun $V269_initially_not_in_station$2 () Bool) -(declare-fun $V270_warning_start_and_in_station_go_down_simultaneously$2 () Bool) -(declare-fun $V271_warning_start_only_in_station$2 () Bool) -(declare-fun $V272_warning_start_cant_become_true_when_door_is_opening$2 () Bool) -(declare-fun $V273_X$2 () Bool) -(declare-fun $V274_X$2 () Bool) -(declare-fun $V275_X$2 () Bool) -(declare-fun $V276_X$2 () Bool) -(declare-fun $~flatten0$2 () Bool) -(assert (and (T %init $request_door$~1 $warning_start$~1 $in_station$~1 $door_is_open$~1 $V60_open_door$~1 $V61_close_door$~1 $V62_door_ok$~1 $OK$~1 $V58_env_always_ok$~1 $V59_prop_ok$~1 $V250_door_doesnt_open_out_of_station$~1 $V251_door_opens_before_leaving_station$~1 $V252_X$~1 $V253_between_A_and_X$~1 $V264_env_ok$~1 $V265_door_doesnt_close_if_not_asked$~1 $V266_door_doesnt_open_if_not_asked$~1 $V267_tramway_doesnt_start_if_not_door_ok$~1 $V268_door_initially_closed$~1 $V269_initially_not_in_station$~1 $V270_warning_start_and_in_station_go_down_simultaneously$~1 $V271_warning_start_only_in_station$~1 $V272_warning_start_cant_become_true_when_door_is_opening$~1 $V273_X$~1 $V274_X$~1 $V275_X$~1 $V276_X$~1 $~flatten0$~1 $request_door$0 $warning_start$0 $in_station$0 $door_is_open$0 $V60_open_door$2 $V61_close_door$2 $V62_door_ok$2 $OK$2 $V58_env_always_ok$2 $V59_prop_ok$2 $V250_door_doesnt_open_out_of_station$2 $V251_door_opens_before_leaving_station$2 $V252_X$2 $V253_between_A_and_X$2 $V264_env_ok$2 $V265_door_doesnt_close_if_not_asked$2 $V266_door_doesnt_open_if_not_asked$2 $V267_tramway_doesnt_start_if_not_door_ok$2 $V268_door_initially_closed$2 $V269_initially_not_in_station$2 $V270_warning_start_and_in_station_go_down_simultaneously$2 $V271_warning_start_only_in_station$2 $V272_warning_start_cant_become_true_when_door_is_opening$2 $V273_X$2 $V274_X$2 $V275_X$2 $V276_X$2 $~flatten0$2) $OK$2)) diff --git a/bench_adt/LEON/amortize-queue-goal1.smt2 b/bench_adt/LEON/amortize-queue-goal1.smt2 deleted file mode 100644 index 1c0e38022..000000000 --- a/bench_adt/LEON/amortize-queue-goal1.smt2 +++ /dev/null @@ -1,68 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Nat) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun butlast (Lst) Lst) -(assert (= (butlast nil) nil)) -(assert (forall ((x Nat) (y Lst)) (= (butlast (cons x y)) (ite (= y nil) nil (cons x (butlast y)))))) - -(declare-fun qreva (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (qreva nil x) x))) -(assert (forall ((x Lst) (y Lst) (z Nat)) (= (qreva (cons z x) y) (qreva x (cons z y))))) - -(declare-fun qrev (Lst) Lst) -(assert (forall ((x Lst)) (= (qrev x) (qreva x nil)))) - -; queues -(declare-datatypes () ((Queue (queue (front Lst) (back Lst))))) - -(declare-fun queue-to-lst (Queue) Lst) -(assert (forall ((x Lst) (y Lst)) (= (queue-to-lst (queue x y)) (append x (qrev y))))) - -(declare-fun qlen (Queue) Nat) -(assert (forall ((x Lst) (y Lst)) (= (qlen (queue x y)) (plus (len x) (len y))))) - -(declare-fun isAmortized (Queue) Bool) -(assert (forall ((x Lst) (y Lst)) (= (isAmortized (queue x y)) (leq (len y) (len x))))) - -(declare-fun isEmpty (Queue) Bool) -(assert (forall ((x Lst) (y Lst)) (= (isEmpty (queue x y)) (and (= x nil) (= y nil))))) - -(declare-fun amortizeQueue (Lst Lst) Queue) -(assert (forall ((x Lst) (y Lst)) (= (amortizeQueue x y) (ite (leq (len y) (len x)) (queue x y) (queue (append x (qrev y)) nil))))) - -(declare-fun enqueue (Queue Nat) Queue) -(assert (forall ((x Lst) (y Lst) (n Nat)) (= (enqueue (queue x y) n) (amortizeQueue x (cons n y))))) - -(declare-fun qpop (Queue) Queue) -(assert (forall ((x Lst) (y Lst) (n Nat)) (= (qpop (queue x (cons n y))) (queue x y)))) -(assert (forall ((x Lst)) (= (qpop (queue x nil)) (queue (butlast x) nil)))) - -; proven - -; conjecture -(assert (not -(forall ((x Lst) (y Lst)) (= (len (append x y)) (plus (len x) (len y)))) ; G-amortize-queue-1 -)) -(check-sat) diff --git a/bench_adt/LEON/amortize-queue-goal10.smt2 b/bench_adt/LEON/amortize-queue-goal10.smt2 deleted file mode 100644 index c39814fd3..000000000 --- a/bench_adt/LEON/amortize-queue-goal10.smt2 +++ /dev/null @@ -1,95 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Nat) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun butlast (Lst) Lst) -(assert (= (butlast nil) nil)) -(assert (forall ((x Nat) (y Lst)) (= (butlast (cons x y)) (ite (= y nil) nil (cons x (butlast y)))))) - -(declare-fun qreva (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (qreva nil x) x))) -(assert (forall ((x Lst) (y Lst) (z Nat)) (= (qreva (cons z x) y) (qreva x (cons z y))))) - -(declare-fun qrev (Lst) Lst) -(assert (forall ((x Lst)) (= (qrev x) (qreva x nil)))) - -; queues -(declare-datatypes () ((Queue (queue (front Lst) (back Lst))))) - -(declare-fun queue-to-lst (Queue) Lst) -(assert (forall ((x Lst) (y Lst)) (= (queue-to-lst (queue x y)) (append x (qrev y))))) - -(declare-fun qlen (Queue) Nat) -(assert (forall ((x Lst) (y Lst)) (= (qlen (queue x y)) (plus (len x) (len y))))) - -(declare-fun isAmortized (Queue) Bool) -(assert (forall ((x Lst) (y Lst)) (= (isAmortized (queue x y)) (leq (len y) (len x))))) - -(declare-fun isEmpty (Queue) Bool) -(assert (forall ((x Lst) (y Lst)) (= (isEmpty (queue x y)) (and (= x nil) (= y nil))))) - -(declare-fun amortizeQueue (Lst Lst) Queue) -(assert (forall ((x Lst) (y Lst)) (= (amortizeQueue x y) (ite (leq (len y) (len x)) (queue x y) (queue (append x (qrev y)) nil))))) - -(declare-fun enqueue (Queue Nat) Queue) -(assert (forall ((x Lst) (y Lst) (n Nat)) (= (enqueue (queue x y) n) (amortizeQueue x (cons n y))))) - -(declare-fun qpop (Queue) Queue) -(assert (forall ((x Lst) (y Lst) (n Nat)) (= (qpop (queue x (cons n y))) (queue x y)))) -(assert (forall ((x Lst)) (= (qpop (queue x nil)) (queue (butlast x) nil)))) - -; proven -(assert -(forall ((x Lst) (y Lst)) (= (len (append x y)) (plus (len x) (len y)))) ; G-amortize-queue-1 -) -(assert -(forall ((x Lst) (y Lst)) (= (len (qreva x y)) (plus (len x) (len y)))) ; G-amortize-queue-2 -) -(assert -(forall ((x Lst)) (= (len (qrev x)) (len x))) ; G-amortize-queue-3 -) -(assert -(forall ((x Lst) (y Lst)) (= (plus (len x) (len y)) (qlen (queue x y)))) ; G-amortize-queue-4 -) -(assert -(forall ((x Lst) (y Nat)) (= (succ (len (butlast (cons y x)))) (len (cons y x)))) ; G-amortize-queue-5 -) -(assert -(forall ((q Queue) (n Nat)) (= (qlen (enqueue q n)) (succ (qlen q)))) ; G-amortize-queue-6 -) -(assert -(forall ((q Queue) (n Nat)) (=> (and (isAmortized q) (not (isEmpty q))) (= (succ (qlen (qpop q))) (qlen q)))) ; G-amortize-queue-7 -) -(assert -(forall ((x Lst)) (= (append x nil) x)) ; G-amortize-queue-8 -) -(assert -(forall ((x Lst) (n Nat) (y Lst)) (= (butlast (append x (cons n y))) (append x (butlast (cons n y))))) ; G-amortize-queue-9 -) - -; conjecture -(assert (not -(forall ((x Lst) (y Lst) (z Lst)) (= (qreva (qreva x y) z) (qreva y (append x z)))) ; G-amortize-queue-10 -)) -(check-sat) diff --git a/bench_adt/LEON/amortize-queue-goal11.smt2 b/bench_adt/LEON/amortize-queue-goal11.smt2 deleted file mode 100644 index a6d842f41..000000000 --- a/bench_adt/LEON/amortize-queue-goal11.smt2 +++ /dev/null @@ -1,98 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Nat) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun butlast (Lst) Lst) -(assert (= (butlast nil) nil)) -(assert (forall ((x Nat) (y Lst)) (= (butlast (cons x y)) (ite (= y nil) nil (cons x (butlast y)))))) - -(declare-fun qreva (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (qreva nil x) x))) -(assert (forall ((x Lst) (y Lst) (z Nat)) (= (qreva (cons z x) y) (qreva x (cons z y))))) - -(declare-fun qrev (Lst) Lst) -(assert (forall ((x Lst)) (= (qrev x) (qreva x nil)))) - -; queues -(declare-datatypes () ((Queue (queue (front Lst) (back Lst))))) - -(declare-fun queue-to-lst (Queue) Lst) -(assert (forall ((x Lst) (y Lst)) (= (queue-to-lst (queue x y)) (append x (qrev y))))) - -(declare-fun qlen (Queue) Nat) -(assert (forall ((x Lst) (y Lst)) (= (qlen (queue x y)) (plus (len x) (len y))))) - -(declare-fun isAmortized (Queue) Bool) -(assert (forall ((x Lst) (y Lst)) (= (isAmortized (queue x y)) (leq (len y) (len x))))) - -(declare-fun isEmpty (Queue) Bool) -(assert (forall ((x Lst) (y Lst)) (= (isEmpty (queue x y)) (and (= x nil) (= y nil))))) - -(declare-fun amortizeQueue (Lst Lst) Queue) -(assert (forall ((x Lst) (y Lst)) (= (amortizeQueue x y) (ite (leq (len y) (len x)) (queue x y) (queue (append x (qrev y)) nil))))) - -(declare-fun enqueue (Queue Nat) Queue) -(assert (forall ((x Lst) (y Lst) (n Nat)) (= (enqueue (queue x y) n) (amortizeQueue x (cons n y))))) - -(declare-fun qpop (Queue) Queue) -(assert (forall ((x Lst) (y Lst) (n Nat)) (= (qpop (queue x (cons n y))) (queue x y)))) -(assert (forall ((x Lst)) (= (qpop (queue x nil)) (queue (butlast x) nil)))) - -; proven -(assert -(forall ((x Lst) (y Lst)) (= (len (append x y)) (plus (len x) (len y)))) ; G-amortize-queue-1 -) -(assert -(forall ((x Lst) (y Lst)) (= (len (qreva x y)) (plus (len x) (len y)))) ; G-amortize-queue-2 -) -(assert -(forall ((x Lst)) (= (len (qrev x)) (len x))) ; G-amortize-queue-3 -) -(assert -(forall ((x Lst) (y Lst)) (= (plus (len x) (len y)) (qlen (queue x y)))) ; G-amortize-queue-4 -) -(assert -(forall ((x Lst) (y Nat)) (= (succ (len (butlast (cons y x)))) (len (cons y x)))) ; G-amortize-queue-5 -) -(assert -(forall ((q Queue) (n Nat)) (= (qlen (enqueue q n)) (succ (qlen q)))) ; G-amortize-queue-6 -) -(assert -(forall ((q Queue) (n Nat)) (=> (and (isAmortized q) (not (isEmpty q))) (= (succ (qlen (qpop q))) (qlen q)))) ; G-amortize-queue-7 -) -(assert -(forall ((x Lst)) (= (append x nil) x)) ; G-amortize-queue-8 -) -(assert -(forall ((x Lst) (n Nat) (y Lst)) (= (butlast (append x (cons n y))) (append x (butlast (cons n y))))) ; G-amortize-queue-9 -) -(assert -(forall ((x Lst) (y Lst) (z Lst)) (= (qreva (qreva x y) z) (qreva y (append x z)))) ; G-amortize-queue-10 -) - -; conjecture -(assert (not -(forall ((x Lst) (y Lst) (z Lst)) (= (append x (append y z)) (append (append x y) z))) ; G-amortize-queue-11 -)) -(check-sat) diff --git a/bench_adt/LEON/amortize-queue-goal12.smt2 b/bench_adt/LEON/amortize-queue-goal12.smt2 deleted file mode 100644 index 89da53005..000000000 --- a/bench_adt/LEON/amortize-queue-goal12.smt2 +++ /dev/null @@ -1,101 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Nat) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun butlast (Lst) Lst) -(assert (= (butlast nil) nil)) -(assert (forall ((x Nat) (y Lst)) (= (butlast (cons x y)) (ite (= y nil) nil (cons x (butlast y)))))) - -(declare-fun qreva (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (qreva nil x) x))) -(assert (forall ((x Lst) (y Lst) (z Nat)) (= (qreva (cons z x) y) (qreva x (cons z y))))) - -(declare-fun qrev (Lst) Lst) -(assert (forall ((x Lst)) (= (qrev x) (qreva x nil)))) - -; queues -(declare-datatypes () ((Queue (queue (front Lst) (back Lst))))) - -(declare-fun queue-to-lst (Queue) Lst) -(assert (forall ((x Lst) (y Lst)) (= (queue-to-lst (queue x y)) (append x (qrev y))))) - -(declare-fun qlen (Queue) Nat) -(assert (forall ((x Lst) (y Lst)) (= (qlen (queue x y)) (plus (len x) (len y))))) - -(declare-fun isAmortized (Queue) Bool) -(assert (forall ((x Lst) (y Lst)) (= (isAmortized (queue x y)) (leq (len y) (len x))))) - -(declare-fun isEmpty (Queue) Bool) -(assert (forall ((x Lst) (y Lst)) (= (isEmpty (queue x y)) (and (= x nil) (= y nil))))) - -(declare-fun amortizeQueue (Lst Lst) Queue) -(assert (forall ((x Lst) (y Lst)) (= (amortizeQueue x y) (ite (leq (len y) (len x)) (queue x y) (queue (append x (qrev y)) nil))))) - -(declare-fun enqueue (Queue Nat) Queue) -(assert (forall ((x Lst) (y Lst) (n Nat)) (= (enqueue (queue x y) n) (amortizeQueue x (cons n y))))) - -(declare-fun qpop (Queue) Queue) -(assert (forall ((x Lst) (y Lst) (n Nat)) (= (qpop (queue x (cons n y))) (queue x y)))) -(assert (forall ((x Lst)) (= (qpop (queue x nil)) (queue (butlast x) nil)))) - -; proven -(assert -(forall ((x Lst) (y Lst)) (= (len (append x y)) (plus (len x) (len y)))) ; G-amortize-queue-1 -) -(assert -(forall ((x Lst) (y Lst)) (= (len (qreva x y)) (plus (len x) (len y)))) ; G-amortize-queue-2 -) -(assert -(forall ((x Lst)) (= (len (qrev x)) (len x))) ; G-amortize-queue-3 -) -(assert -(forall ((x Lst) (y Lst)) (= (plus (len x) (len y)) (qlen (queue x y)))) ; G-amortize-queue-4 -) -(assert -(forall ((x Lst) (y Nat)) (= (succ (len (butlast (cons y x)))) (len (cons y x)))) ; G-amortize-queue-5 -) -(assert -(forall ((q Queue) (n Nat)) (= (qlen (enqueue q n)) (succ (qlen q)))) ; G-amortize-queue-6 -) -(assert -(forall ((q Queue) (n Nat)) (=> (and (isAmortized q) (not (isEmpty q))) (= (succ (qlen (qpop q))) (qlen q)))) ; G-amortize-queue-7 -) -(assert -(forall ((x Lst)) (= (append x nil) x)) ; G-amortize-queue-8 -) -(assert -(forall ((x Lst) (n Nat) (y Lst)) (= (butlast (append x (cons n y))) (append x (butlast (cons n y))))) ; G-amortize-queue-9 -) -(assert -(forall ((x Lst) (y Lst) (z Lst)) (= (qreva (qreva x y) z) (qreva y (append x z)))) ; G-amortize-queue-10 -) -(assert -(forall ((x Lst) (y Lst) (z Lst)) (= (append x (append y z)) (append (append x y) z))) ; G-amortize-queue-11 -) - -; conjecture -(assert (not -(forall ((x Lst) (y Lst)) (= (queue-to-lst (queue x y)) (queue-to-lst (amortizeQueue x y)))) ; G-amortize-queue-12 -)) -(check-sat) diff --git a/bench_adt/LEON/amortize-queue-goal13.smt2 b/bench_adt/LEON/amortize-queue-goal13.smt2 deleted file mode 100644 index 1d4ab9504..000000000 --- a/bench_adt/LEON/amortize-queue-goal13.smt2 +++ /dev/null @@ -1,104 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Nat) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun butlast (Lst) Lst) -(assert (= (butlast nil) nil)) -(assert (forall ((x Nat) (y Lst)) (= (butlast (cons x y)) (ite (= y nil) nil (cons x (butlast y)))))) - -(declare-fun qreva (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (qreva nil x) x))) -(assert (forall ((x Lst) (y Lst) (z Nat)) (= (qreva (cons z x) y) (qreva x (cons z y))))) - -(declare-fun qrev (Lst) Lst) -(assert (forall ((x Lst)) (= (qrev x) (qreva x nil)))) - -; queues -(declare-datatypes () ((Queue (queue (front Lst) (back Lst))))) - -(declare-fun queue-to-lst (Queue) Lst) -(assert (forall ((x Lst) (y Lst)) (= (queue-to-lst (queue x y)) (append x (qrev y))))) - -(declare-fun qlen (Queue) Nat) -(assert (forall ((x Lst) (y Lst)) (= (qlen (queue x y)) (plus (len x) (len y))))) - -(declare-fun isAmortized (Queue) Bool) -(assert (forall ((x Lst) (y Lst)) (= (isAmortized (queue x y)) (leq (len y) (len x))))) - -(declare-fun isEmpty (Queue) Bool) -(assert (forall ((x Lst) (y Lst)) (= (isEmpty (queue x y)) (and (= x nil) (= y nil))))) - -(declare-fun amortizeQueue (Lst Lst) Queue) -(assert (forall ((x Lst) (y Lst)) (= (amortizeQueue x y) (ite (leq (len y) (len x)) (queue x y) (queue (append x (qrev y)) nil))))) - -(declare-fun enqueue (Queue Nat) Queue) -(assert (forall ((x Lst) (y Lst) (n Nat)) (= (enqueue (queue x y) n) (amortizeQueue x (cons n y))))) - -(declare-fun qpop (Queue) Queue) -(assert (forall ((x Lst) (y Lst) (n Nat)) (= (qpop (queue x (cons n y))) (queue x y)))) -(assert (forall ((x Lst)) (= (qpop (queue x nil)) (queue (butlast x) nil)))) - -; proven -(assert -(forall ((x Lst) (y Lst)) (= (len (append x y)) (plus (len x) (len y)))) ; G-amortize-queue-1 -) -(assert -(forall ((x Lst) (y Lst)) (= (len (qreva x y)) (plus (len x) (len y)))) ; G-amortize-queue-2 -) -(assert -(forall ((x Lst)) (= (len (qrev x)) (len x))) ; G-amortize-queue-3 -) -(assert -(forall ((x Lst) (y Lst)) (= (plus (len x) (len y)) (qlen (queue x y)))) ; G-amortize-queue-4 -) -(assert -(forall ((x Lst) (y Nat)) (= (succ (len (butlast (cons y x)))) (len (cons y x)))) ; G-amortize-queue-5 -) -(assert -(forall ((q Queue) (n Nat)) (= (qlen (enqueue q n)) (succ (qlen q)))) ; G-amortize-queue-6 -) -(assert -(forall ((q Queue) (n Nat)) (=> (and (isAmortized q) (not (isEmpty q))) (= (succ (qlen (qpop q))) (qlen q)))) ; G-amortize-queue-7 -) -(assert -(forall ((x Lst)) (= (append x nil) x)) ; G-amortize-queue-8 -) -(assert -(forall ((x Lst) (n Nat) (y Lst)) (= (butlast (append x (cons n y))) (append x (butlast (cons n y))))) ; G-amortize-queue-9 -) -(assert -(forall ((x Lst) (y Lst) (z Lst)) (= (qreva (qreva x y) z) (qreva y (append x z)))) ; G-amortize-queue-10 -) -(assert -(forall ((x Lst) (y Lst) (z Lst)) (= (append x (append y z)) (append (append x y) z))) ; G-amortize-queue-11 -) -(assert -(forall ((x Lst) (y Lst)) (= (queue-to-lst (queue x y)) (queue-to-lst (amortizeQueue x y)))) ; G-amortize-queue-12 -) - -; conjecture -(assert (not -(forall ((x Lst) (y Lst)) (= (butlast (queue-to-lst (queue x y))) (queue-to-lst (qpop (queue x y))))) ; G-amortize-queue-13 -)) -(check-sat) diff --git a/bench_adt/LEON/amortize-queue-goal14.smt2 b/bench_adt/LEON/amortize-queue-goal14.smt2 deleted file mode 100644 index b2f5443e5..000000000 --- a/bench_adt/LEON/amortize-queue-goal14.smt2 +++ /dev/null @@ -1,107 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Nat) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun butlast (Lst) Lst) -(assert (= (butlast nil) nil)) -(assert (forall ((x Nat) (y Lst)) (= (butlast (cons x y)) (ite (= y nil) nil (cons x (butlast y)))))) - -(declare-fun qreva (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (qreva nil x) x))) -(assert (forall ((x Lst) (y Lst) (z Nat)) (= (qreva (cons z x) y) (qreva x (cons z y))))) - -(declare-fun qrev (Lst) Lst) -(assert (forall ((x Lst)) (= (qrev x) (qreva x nil)))) - -; queues -(declare-datatypes () ((Queue (queue (front Lst) (back Lst))))) - -(declare-fun queue-to-lst (Queue) Lst) -(assert (forall ((x Lst) (y Lst)) (= (queue-to-lst (queue x y)) (append x (qrev y))))) - -(declare-fun qlen (Queue) Nat) -(assert (forall ((x Lst) (y Lst)) (= (qlen (queue x y)) (plus (len x) (len y))))) - -(declare-fun isAmortized (Queue) Bool) -(assert (forall ((x Lst) (y Lst)) (= (isAmortized (queue x y)) (leq (len y) (len x))))) - -(declare-fun isEmpty (Queue) Bool) -(assert (forall ((x Lst) (y Lst)) (= (isEmpty (queue x y)) (and (= x nil) (= y nil))))) - -(declare-fun amortizeQueue (Lst Lst) Queue) -(assert (forall ((x Lst) (y Lst)) (= (amortizeQueue x y) (ite (leq (len y) (len x)) (queue x y) (queue (append x (qrev y)) nil))))) - -(declare-fun enqueue (Queue Nat) Queue) -(assert (forall ((x Lst) (y Lst) (n Nat)) (= (enqueue (queue x y) n) (amortizeQueue x (cons n y))))) - -(declare-fun qpop (Queue) Queue) -(assert (forall ((x Lst) (y Lst) (n Nat)) (= (qpop (queue x (cons n y))) (queue x y)))) -(assert (forall ((x Lst)) (= (qpop (queue x nil)) (queue (butlast x) nil)))) - -; proven -(assert -(forall ((x Lst) (y Lst)) (= (len (append x y)) (plus (len x) (len y)))) ; G-amortize-queue-1 -) -(assert -(forall ((x Lst) (y Lst)) (= (len (qreva x y)) (plus (len x) (len y)))) ; G-amortize-queue-2 -) -(assert -(forall ((x Lst)) (= (len (qrev x)) (len x))) ; G-amortize-queue-3 -) -(assert -(forall ((x Lst) (y Lst)) (= (plus (len x) (len y)) (qlen (queue x y)))) ; G-amortize-queue-4 -) -(assert -(forall ((x Lst) (y Nat)) (= (succ (len (butlast (cons y x)))) (len (cons y x)))) ; G-amortize-queue-5 -) -(assert -(forall ((q Queue) (n Nat)) (= (qlen (enqueue q n)) (succ (qlen q)))) ; G-amortize-queue-6 -) -(assert -(forall ((q Queue) (n Nat)) (=> (and (isAmortized q) (not (isEmpty q))) (= (succ (qlen (qpop q))) (qlen q)))) ; G-amortize-queue-7 -) -(assert -(forall ((x Lst)) (= (append x nil) x)) ; G-amortize-queue-8 -) -(assert -(forall ((x Lst) (n Nat) (y Lst)) (= (butlast (append x (cons n y))) (append x (butlast (cons n y))))) ; G-amortize-queue-9 -) -(assert -(forall ((x Lst) (y Lst) (z Lst)) (= (qreva (qreva x y) z) (qreva y (append x z)))) ; G-amortize-queue-10 -) -(assert -(forall ((x Lst) (y Lst) (z Lst)) (= (append x (append y z)) (append (append x y) z))) ; G-amortize-queue-11 -) -(assert -(forall ((x Lst) (y Lst)) (= (queue-to-lst (queue x y)) (queue-to-lst (amortizeQueue x y)))) ; G-amortize-queue-12 -) -(assert -(forall ((x Lst) (y Lst)) (= (butlast (queue-to-lst (queue x y))) (queue-to-lst (qpop (queue x y))))) ; G-amortize-queue-13 -) - -; conjecture -(assert (not -(forall ((y Lst) (x Lst) (n Nat)) (= (append (queue-to-lst (queue x y)) (cons n nil)) (queue-to-lst (enqueue (queue x y) n)))) ; G-amortize-queue-14 -)) -(check-sat) diff --git a/bench_adt/LEON/amortize-queue-goal15.smt2 b/bench_adt/LEON/amortize-queue-goal15.smt2 deleted file mode 100644 index c41b07505..000000000 --- a/bench_adt/LEON/amortize-queue-goal15.smt2 +++ /dev/null @@ -1,110 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Nat) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun butlast (Lst) Lst) -(assert (= (butlast nil) nil)) -(assert (forall ((x Nat) (y Lst)) (= (butlast (cons x y)) (ite (= y nil) nil (cons x (butlast y)))))) - -(declare-fun qreva (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (qreva nil x) x))) -(assert (forall ((x Lst) (y Lst) (z Nat)) (= (qreva (cons z x) y) (qreva x (cons z y))))) - -(declare-fun qrev (Lst) Lst) -(assert (forall ((x Lst)) (= (qrev x) (qreva x nil)))) - -; queues -(declare-datatypes () ((Queue (queue (front Lst) (back Lst))))) - -(declare-fun queue-to-lst (Queue) Lst) -(assert (forall ((x Lst) (y Lst)) (= (queue-to-lst (queue x y)) (append x (qrev y))))) - -(declare-fun qlen (Queue) Nat) -(assert (forall ((x Lst) (y Lst)) (= (qlen (queue x y)) (plus (len x) (len y))))) - -(declare-fun isAmortized (Queue) Bool) -(assert (forall ((x Lst) (y Lst)) (= (isAmortized (queue x y)) (leq (len y) (len x))))) - -(declare-fun isEmpty (Queue) Bool) -(assert (forall ((x Lst) (y Lst)) (= (isEmpty (queue x y)) (and (= x nil) (= y nil))))) - -(declare-fun amortizeQueue (Lst Lst) Queue) -(assert (forall ((x Lst) (y Lst)) (= (amortizeQueue x y) (ite (leq (len y) (len x)) (queue x y) (queue (append x (qrev y)) nil))))) - -(declare-fun enqueue (Queue Nat) Queue) -(assert (forall ((x Lst) (y Lst) (n Nat)) (= (enqueue (queue x y) n) (amortizeQueue x (cons n y))))) - -(declare-fun qpop (Queue) Queue) -(assert (forall ((x Lst) (y Lst) (n Nat)) (= (qpop (queue x (cons n y))) (queue x y)))) -(assert (forall ((x Lst)) (= (qpop (queue x nil)) (queue (butlast x) nil)))) - -; proven -(assert -(forall ((x Lst) (y Lst)) (= (len (append x y)) (plus (len x) (len y)))) ; G-amortize-queue-1 -) -(assert -(forall ((x Lst) (y Lst)) (= (len (qreva x y)) (plus (len x) (len y)))) ; G-amortize-queue-2 -) -(assert -(forall ((x Lst)) (= (len (qrev x)) (len x))) ; G-amortize-queue-3 -) -(assert -(forall ((x Lst) (y Lst)) (= (plus (len x) (len y)) (qlen (queue x y)))) ; G-amortize-queue-4 -) -(assert -(forall ((x Lst) (y Nat)) (= (succ (len (butlast (cons y x)))) (len (cons y x)))) ; G-amortize-queue-5 -) -(assert -(forall ((q Queue) (n Nat)) (= (qlen (enqueue q n)) (succ (qlen q)))) ; G-amortize-queue-6 -) -(assert -(forall ((q Queue) (n Nat)) (=> (and (isAmortized q) (not (isEmpty q))) (= (succ (qlen (qpop q))) (qlen q)))) ; G-amortize-queue-7 -) -(assert -(forall ((x Lst)) (= (append x nil) x)) ; G-amortize-queue-8 -) -(assert -(forall ((x Lst) (n Nat) (y Lst)) (= (butlast (append x (cons n y))) (append x (butlast (cons n y))))) ; G-amortize-queue-9 -) -(assert -(forall ((x Lst) (y Lst) (z Lst)) (= (qreva (qreva x y) z) (qreva y (append x z)))) ; G-amortize-queue-10 -) -(assert -(forall ((x Lst) (y Lst) (z Lst)) (= (append x (append y z)) (append (append x y) z))) ; G-amortize-queue-11 -) -(assert -(forall ((x Lst) (y Lst)) (= (queue-to-lst (queue x y)) (queue-to-lst (amortizeQueue x y)))) ; G-amortize-queue-12 -) -(assert -(forall ((x Lst) (y Lst)) (= (butlast (queue-to-lst (queue x y))) (queue-to-lst (qpop (queue x y))))) ; G-amortize-queue-13 -) -(assert -(forall ((y Lst) (x Lst) (n Nat)) (= (append (queue-to-lst (queue x y)) (cons n nil)) (queue-to-lst (enqueue (queue x y) n)))) ; G-amortize-queue-14 -) - -; conjecture -(assert (not -(forall ((x Lst) (y Lst)) (isAmortized (amortizeQueue x y))) ; G-amortize-queue-15 -)) -(check-sat) diff --git a/bench_adt/LEON/amortize-queue-goal2.smt2 b/bench_adt/LEON/amortize-queue-goal2.smt2 deleted file mode 100644 index 0c7602e01..000000000 --- a/bench_adt/LEON/amortize-queue-goal2.smt2 +++ /dev/null @@ -1,71 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Nat) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun butlast (Lst) Lst) -(assert (= (butlast nil) nil)) -(assert (forall ((x Nat) (y Lst)) (= (butlast (cons x y)) (ite (= y nil) nil (cons x (butlast y)))))) - -(declare-fun qreva (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (qreva nil x) x))) -(assert (forall ((x Lst) (y Lst) (z Nat)) (= (qreva (cons z x) y) (qreva x (cons z y))))) - -(declare-fun qrev (Lst) Lst) -(assert (forall ((x Lst)) (= (qrev x) (qreva x nil)))) - -; queues -(declare-datatypes () ((Queue (queue (front Lst) (back Lst))))) - -(declare-fun queue-to-lst (Queue) Lst) -(assert (forall ((x Lst) (y Lst)) (= (queue-to-lst (queue x y)) (append x (qrev y))))) - -(declare-fun qlen (Queue) Nat) -(assert (forall ((x Lst) (y Lst)) (= (qlen (queue x y)) (plus (len x) (len y))))) - -(declare-fun isAmortized (Queue) Bool) -(assert (forall ((x Lst) (y Lst)) (= (isAmortized (queue x y)) (leq (len y) (len x))))) - -(declare-fun isEmpty (Queue) Bool) -(assert (forall ((x Lst) (y Lst)) (= (isEmpty (queue x y)) (and (= x nil) (= y nil))))) - -(declare-fun amortizeQueue (Lst Lst) Queue) -(assert (forall ((x Lst) (y Lst)) (= (amortizeQueue x y) (ite (leq (len y) (len x)) (queue x y) (queue (append x (qrev y)) nil))))) - -(declare-fun enqueue (Queue Nat) Queue) -(assert (forall ((x Lst) (y Lst) (n Nat)) (= (enqueue (queue x y) n) (amortizeQueue x (cons n y))))) - -(declare-fun qpop (Queue) Queue) -(assert (forall ((x Lst) (y Lst) (n Nat)) (= (qpop (queue x (cons n y))) (queue x y)))) -(assert (forall ((x Lst)) (= (qpop (queue x nil)) (queue (butlast x) nil)))) - -; proven -(assert -(forall ((x Lst) (y Lst)) (= (len (append x y)) (plus (len x) (len y)))) ; G-amortize-queue-1 -) - -; conjecture -(assert (not -(forall ((x Lst) (y Lst)) (= (len (qreva x y)) (plus (len x) (len y)))) ; G-amortize-queue-2 -)) -(check-sat) diff --git a/bench_adt/LEON/amortize-queue-goal3.smt2 b/bench_adt/LEON/amortize-queue-goal3.smt2 deleted file mode 100644 index 4105a931e..000000000 --- a/bench_adt/LEON/amortize-queue-goal3.smt2 +++ /dev/null @@ -1,74 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Nat) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun butlast (Lst) Lst) -(assert (= (butlast nil) nil)) -(assert (forall ((x Nat) (y Lst)) (= (butlast (cons x y)) (ite (= y nil) nil (cons x (butlast y)))))) - -(declare-fun qreva (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (qreva nil x) x))) -(assert (forall ((x Lst) (y Lst) (z Nat)) (= (qreva (cons z x) y) (qreva x (cons z y))))) - -(declare-fun qrev (Lst) Lst) -(assert (forall ((x Lst)) (= (qrev x) (qreva x nil)))) - -; queues -(declare-datatypes () ((Queue (queue (front Lst) (back Lst))))) - -(declare-fun queue-to-lst (Queue) Lst) -(assert (forall ((x Lst) (y Lst)) (= (queue-to-lst (queue x y)) (append x (qrev y))))) - -(declare-fun qlen (Queue) Nat) -(assert (forall ((x Lst) (y Lst)) (= (qlen (queue x y)) (plus (len x) (len y))))) - -(declare-fun isAmortized (Queue) Bool) -(assert (forall ((x Lst) (y Lst)) (= (isAmortized (queue x y)) (leq (len y) (len x))))) - -(declare-fun isEmpty (Queue) Bool) -(assert (forall ((x Lst) (y Lst)) (= (isEmpty (queue x y)) (and (= x nil) (= y nil))))) - -(declare-fun amortizeQueue (Lst Lst) Queue) -(assert (forall ((x Lst) (y Lst)) (= (amortizeQueue x y) (ite (leq (len y) (len x)) (queue x y) (queue (append x (qrev y)) nil))))) - -(declare-fun enqueue (Queue Nat) Queue) -(assert (forall ((x Lst) (y Lst) (n Nat)) (= (enqueue (queue x y) n) (amortizeQueue x (cons n y))))) - -(declare-fun qpop (Queue) Queue) -(assert (forall ((x Lst) (y Lst) (n Nat)) (= (qpop (queue x (cons n y))) (queue x y)))) -(assert (forall ((x Lst)) (= (qpop (queue x nil)) (queue (butlast x) nil)))) - -; proven -(assert -(forall ((x Lst) (y Lst)) (= (len (append x y)) (plus (len x) (len y)))) ; G-amortize-queue-1 -) -(assert -(forall ((x Lst) (y Lst)) (= (len (qreva x y)) (plus (len x) (len y)))) ; G-amortize-queue-2 -) - -; conjecture -(assert (not -(forall ((x Lst)) (= (len (qrev x)) (len x))) ; G-amortize-queue-3 -)) -(check-sat) diff --git a/bench_adt/LEON/amortize-queue-goal4.smt2 b/bench_adt/LEON/amortize-queue-goal4.smt2 deleted file mode 100644 index 98e525f03..000000000 --- a/bench_adt/LEON/amortize-queue-goal4.smt2 +++ /dev/null @@ -1,77 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Nat) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun butlast (Lst) Lst) -(assert (= (butlast nil) nil)) -(assert (forall ((x Nat) (y Lst)) (= (butlast (cons x y)) (ite (= y nil) nil (cons x (butlast y)))))) - -(declare-fun qreva (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (qreva nil x) x))) -(assert (forall ((x Lst) (y Lst) (z Nat)) (= (qreva (cons z x) y) (qreva x (cons z y))))) - -(declare-fun qrev (Lst) Lst) -(assert (forall ((x Lst)) (= (qrev x) (qreva x nil)))) - -; queues -(declare-datatypes () ((Queue (queue (front Lst) (back Lst))))) - -(declare-fun queue-to-lst (Queue) Lst) -(assert (forall ((x Lst) (y Lst)) (= (queue-to-lst (queue x y)) (append x (qrev y))))) - -(declare-fun qlen (Queue) Nat) -(assert (forall ((x Lst) (y Lst)) (= (qlen (queue x y)) (plus (len x) (len y))))) - -(declare-fun isAmortized (Queue) Bool) -(assert (forall ((x Lst) (y Lst)) (= (isAmortized (queue x y)) (leq (len y) (len x))))) - -(declare-fun isEmpty (Queue) Bool) -(assert (forall ((x Lst) (y Lst)) (= (isEmpty (queue x y)) (and (= x nil) (= y nil))))) - -(declare-fun amortizeQueue (Lst Lst) Queue) -(assert (forall ((x Lst) (y Lst)) (= (amortizeQueue x y) (ite (leq (len y) (len x)) (queue x y) (queue (append x (qrev y)) nil))))) - -(declare-fun enqueue (Queue Nat) Queue) -(assert (forall ((x Lst) (y Lst) (n Nat)) (= (enqueue (queue x y) n) (amortizeQueue x (cons n y))))) - -(declare-fun qpop (Queue) Queue) -(assert (forall ((x Lst) (y Lst) (n Nat)) (= (qpop (queue x (cons n y))) (queue x y)))) -(assert (forall ((x Lst)) (= (qpop (queue x nil)) (queue (butlast x) nil)))) - -; proven -(assert -(forall ((x Lst) (y Lst)) (= (len (append x y)) (plus (len x) (len y)))) ; G-amortize-queue-1 -) -(assert -(forall ((x Lst) (y Lst)) (= (len (qreva x y)) (plus (len x) (len y)))) ; G-amortize-queue-2 -) -(assert -(forall ((x Lst)) (= (len (qrev x)) (len x))) ; G-amortize-queue-3 -) - -; conjecture -(assert (not -(forall ((x Lst) (y Lst)) (= (plus (len x) (len y)) (qlen (queue x y)))) ; G-amortize-queue-4 -)) -(check-sat) diff --git a/bench_adt/LEON/amortize-queue-goal5.smt2 b/bench_adt/LEON/amortize-queue-goal5.smt2 deleted file mode 100644 index aac5be615..000000000 --- a/bench_adt/LEON/amortize-queue-goal5.smt2 +++ /dev/null @@ -1,80 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Nat) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun butlast (Lst) Lst) -(assert (= (butlast nil) nil)) -(assert (forall ((x Nat) (y Lst)) (= (butlast (cons x y)) (ite (= y nil) nil (cons x (butlast y)))))) - -(declare-fun qreva (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (qreva nil x) x))) -(assert (forall ((x Lst) (y Lst) (z Nat)) (= (qreva (cons z x) y) (qreva x (cons z y))))) - -(declare-fun qrev (Lst) Lst) -(assert (forall ((x Lst)) (= (qrev x) (qreva x nil)))) - -; queues -(declare-datatypes () ((Queue (queue (front Lst) (back Lst))))) - -(declare-fun queue-to-lst (Queue) Lst) -(assert (forall ((x Lst) (y Lst)) (= (queue-to-lst (queue x y)) (append x (qrev y))))) - -(declare-fun qlen (Queue) Nat) -(assert (forall ((x Lst) (y Lst)) (= (qlen (queue x y)) (plus (len x) (len y))))) - -(declare-fun isAmortized (Queue) Bool) -(assert (forall ((x Lst) (y Lst)) (= (isAmortized (queue x y)) (leq (len y) (len x))))) - -(declare-fun isEmpty (Queue) Bool) -(assert (forall ((x Lst) (y Lst)) (= (isEmpty (queue x y)) (and (= x nil) (= y nil))))) - -(declare-fun amortizeQueue (Lst Lst) Queue) -(assert (forall ((x Lst) (y Lst)) (= (amortizeQueue x y) (ite (leq (len y) (len x)) (queue x y) (queue (append x (qrev y)) nil))))) - -(declare-fun enqueue (Queue Nat) Queue) -(assert (forall ((x Lst) (y Lst) (n Nat)) (= (enqueue (queue x y) n) (amortizeQueue x (cons n y))))) - -(declare-fun qpop (Queue) Queue) -(assert (forall ((x Lst) (y Lst) (n Nat)) (= (qpop (queue x (cons n y))) (queue x y)))) -(assert (forall ((x Lst)) (= (qpop (queue x nil)) (queue (butlast x) nil)))) - -; proven -(assert -(forall ((x Lst) (y Lst)) (= (len (append x y)) (plus (len x) (len y)))) ; G-amortize-queue-1 -) -(assert -(forall ((x Lst) (y Lst)) (= (len (qreva x y)) (plus (len x) (len y)))) ; G-amortize-queue-2 -) -(assert -(forall ((x Lst)) (= (len (qrev x)) (len x))) ; G-amortize-queue-3 -) -(assert -(forall ((x Lst) (y Lst)) (= (plus (len x) (len y)) (qlen (queue x y)))) ; G-amortize-queue-4 -) - -; conjecture -(assert (not -(forall ((x Lst) (y Nat)) (= (succ (len (butlast (cons y x)))) (len (cons y x)))) ; G-amortize-queue-5 -)) -(check-sat) diff --git a/bench_adt/LEON/amortize-queue-goal6.smt2 b/bench_adt/LEON/amortize-queue-goal6.smt2 deleted file mode 100644 index 4a940c69f..000000000 --- a/bench_adt/LEON/amortize-queue-goal6.smt2 +++ /dev/null @@ -1,83 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Nat) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun butlast (Lst) Lst) -(assert (= (butlast nil) nil)) -(assert (forall ((x Nat) (y Lst)) (= (butlast (cons x y)) (ite (= y nil) nil (cons x (butlast y)))))) - -(declare-fun qreva (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (qreva nil x) x))) -(assert (forall ((x Lst) (y Lst) (z Nat)) (= (qreva (cons z x) y) (qreva x (cons z y))))) - -(declare-fun qrev (Lst) Lst) -(assert (forall ((x Lst)) (= (qrev x) (qreva x nil)))) - -; queues -(declare-datatypes () ((Queue (queue (front Lst) (back Lst))))) - -(declare-fun queue-to-lst (Queue) Lst) -(assert (forall ((x Lst) (y Lst)) (= (queue-to-lst (queue x y)) (append x (qrev y))))) - -(declare-fun qlen (Queue) Nat) -(assert (forall ((x Lst) (y Lst)) (= (qlen (queue x y)) (plus (len x) (len y))))) - -(declare-fun isAmortized (Queue) Bool) -(assert (forall ((x Lst) (y Lst)) (= (isAmortized (queue x y)) (leq (len y) (len x))))) - -(declare-fun isEmpty (Queue) Bool) -(assert (forall ((x Lst) (y Lst)) (= (isEmpty (queue x y)) (and (= x nil) (= y nil))))) - -(declare-fun amortizeQueue (Lst Lst) Queue) -(assert (forall ((x Lst) (y Lst)) (= (amortizeQueue x y) (ite (leq (len y) (len x)) (queue x y) (queue (append x (qrev y)) nil))))) - -(declare-fun enqueue (Queue Nat) Queue) -(assert (forall ((x Lst) (y Lst) (n Nat)) (= (enqueue (queue x y) n) (amortizeQueue x (cons n y))))) - -(declare-fun qpop (Queue) Queue) -(assert (forall ((x Lst) (y Lst) (n Nat)) (= (qpop (queue x (cons n y))) (queue x y)))) -(assert (forall ((x Lst)) (= (qpop (queue x nil)) (queue (butlast x) nil)))) - -; proven -(assert -(forall ((x Lst) (y Lst)) (= (len (append x y)) (plus (len x) (len y)))) ; G-amortize-queue-1 -) -(assert -(forall ((x Lst) (y Lst)) (= (len (qreva x y)) (plus (len x) (len y)))) ; G-amortize-queue-2 -) -(assert -(forall ((x Lst)) (= (len (qrev x)) (len x))) ; G-amortize-queue-3 -) -(assert -(forall ((x Lst) (y Lst)) (= (plus (len x) (len y)) (qlen (queue x y)))) ; G-amortize-queue-4 -) -(assert -(forall ((x Lst) (y Nat)) (= (succ (len (butlast (cons y x)))) (len (cons y x)))) ; G-amortize-queue-5 -) - -; conjecture -(assert (not -(forall ((q Queue) (n Nat)) (= (qlen (enqueue q n)) (succ (qlen q)))) ; G-amortize-queue-6 -)) -(check-sat) diff --git a/bench_adt/LEON/amortize-queue-goal7.smt2 b/bench_adt/LEON/amortize-queue-goal7.smt2 deleted file mode 100644 index 4276a5b49..000000000 --- a/bench_adt/LEON/amortize-queue-goal7.smt2 +++ /dev/null @@ -1,86 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Nat) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun butlast (Lst) Lst) -(assert (= (butlast nil) nil)) -(assert (forall ((x Nat) (y Lst)) (= (butlast (cons x y)) (ite (= y nil) nil (cons x (butlast y)))))) - -(declare-fun qreva (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (qreva nil x) x))) -(assert (forall ((x Lst) (y Lst) (z Nat)) (= (qreva (cons z x) y) (qreva x (cons z y))))) - -(declare-fun qrev (Lst) Lst) -(assert (forall ((x Lst)) (= (qrev x) (qreva x nil)))) - -; queues -(declare-datatypes () ((Queue (queue (front Lst) (back Lst))))) - -(declare-fun queue-to-lst (Queue) Lst) -(assert (forall ((x Lst) (y Lst)) (= (queue-to-lst (queue x y)) (append x (qrev y))))) - -(declare-fun qlen (Queue) Nat) -(assert (forall ((x Lst) (y Lst)) (= (qlen (queue x y)) (plus (len x) (len y))))) - -(declare-fun isAmortized (Queue) Bool) -(assert (forall ((x Lst) (y Lst)) (= (isAmortized (queue x y)) (leq (len y) (len x))))) - -(declare-fun isEmpty (Queue) Bool) -(assert (forall ((x Lst) (y Lst)) (= (isEmpty (queue x y)) (and (= x nil) (= y nil))))) - -(declare-fun amortizeQueue (Lst Lst) Queue) -(assert (forall ((x Lst) (y Lst)) (= (amortizeQueue x y) (ite (leq (len y) (len x)) (queue x y) (queue (append x (qrev y)) nil))))) - -(declare-fun enqueue (Queue Nat) Queue) -(assert (forall ((x Lst) (y Lst) (n Nat)) (= (enqueue (queue x y) n) (amortizeQueue x (cons n y))))) - -(declare-fun qpop (Queue) Queue) -(assert (forall ((x Lst) (y Lst) (n Nat)) (= (qpop (queue x (cons n y))) (queue x y)))) -(assert (forall ((x Lst)) (= (qpop (queue x nil)) (queue (butlast x) nil)))) - -; proven -(assert -(forall ((x Lst) (y Lst)) (= (len (append x y)) (plus (len x) (len y)))) ; G-amortize-queue-1 -) -(assert -(forall ((x Lst) (y Lst)) (= (len (qreva x y)) (plus (len x) (len y)))) ; G-amortize-queue-2 -) -(assert -(forall ((x Lst)) (= (len (qrev x)) (len x))) ; G-amortize-queue-3 -) -(assert -(forall ((x Lst) (y Lst)) (= (plus (len x) (len y)) (qlen (queue x y)))) ; G-amortize-queue-4 -) -(assert -(forall ((x Lst) (y Nat)) (= (succ (len (butlast (cons y x)))) (len (cons y x)))) ; G-amortize-queue-5 -) -(assert -(forall ((q Queue) (n Nat)) (= (qlen (enqueue q n)) (succ (qlen q)))) ; G-amortize-queue-6 -) - -; conjecture -(assert (not -(forall ((q Queue) (n Nat)) (=> (and (isAmortized q) (not (isEmpty q))) (= (succ (qlen (qpop q))) (qlen q)))) ; G-amortize-queue-7 -)) -(check-sat) diff --git a/bench_adt/LEON/amortize-queue-goal8.smt2 b/bench_adt/LEON/amortize-queue-goal8.smt2 deleted file mode 100644 index 94a724829..000000000 --- a/bench_adt/LEON/amortize-queue-goal8.smt2 +++ /dev/null @@ -1,89 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Nat) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun butlast (Lst) Lst) -(assert (= (butlast nil) nil)) -(assert (forall ((x Nat) (y Lst)) (= (butlast (cons x y)) (ite (= y nil) nil (cons x (butlast y)))))) - -(declare-fun qreva (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (qreva nil x) x))) -(assert (forall ((x Lst) (y Lst) (z Nat)) (= (qreva (cons z x) y) (qreva x (cons z y))))) - -(declare-fun qrev (Lst) Lst) -(assert (forall ((x Lst)) (= (qrev x) (qreva x nil)))) - -; queues -(declare-datatypes () ((Queue (queue (front Lst) (back Lst))))) - -(declare-fun queue-to-lst (Queue) Lst) -(assert (forall ((x Lst) (y Lst)) (= (queue-to-lst (queue x y)) (append x (qrev y))))) - -(declare-fun qlen (Queue) Nat) -(assert (forall ((x Lst) (y Lst)) (= (qlen (queue x y)) (plus (len x) (len y))))) - -(declare-fun isAmortized (Queue) Bool) -(assert (forall ((x Lst) (y Lst)) (= (isAmortized (queue x y)) (leq (len y) (len x))))) - -(declare-fun isEmpty (Queue) Bool) -(assert (forall ((x Lst) (y Lst)) (= (isEmpty (queue x y)) (and (= x nil) (= y nil))))) - -(declare-fun amortizeQueue (Lst Lst) Queue) -(assert (forall ((x Lst) (y Lst)) (= (amortizeQueue x y) (ite (leq (len y) (len x)) (queue x y) (queue (append x (qrev y)) nil))))) - -(declare-fun enqueue (Queue Nat) Queue) -(assert (forall ((x Lst) (y Lst) (n Nat)) (= (enqueue (queue x y) n) (amortizeQueue x (cons n y))))) - -(declare-fun qpop (Queue) Queue) -(assert (forall ((x Lst) (y Lst) (n Nat)) (= (qpop (queue x (cons n y))) (queue x y)))) -(assert (forall ((x Lst)) (= (qpop (queue x nil)) (queue (butlast x) nil)))) - -; proven -(assert -(forall ((x Lst) (y Lst)) (= (len (append x y)) (plus (len x) (len y)))) ; G-amortize-queue-1 -) -(assert -(forall ((x Lst) (y Lst)) (= (len (qreva x y)) (plus (len x) (len y)))) ; G-amortize-queue-2 -) -(assert -(forall ((x Lst)) (= (len (qrev x)) (len x))) ; G-amortize-queue-3 -) -(assert -(forall ((x Lst) (y Lst)) (= (plus (len x) (len y)) (qlen (queue x y)))) ; G-amortize-queue-4 -) -(assert -(forall ((x Lst) (y Nat)) (= (succ (len (butlast (cons y x)))) (len (cons y x)))) ; G-amortize-queue-5 -) -(assert -(forall ((q Queue) (n Nat)) (= (qlen (enqueue q n)) (succ (qlen q)))) ; G-amortize-queue-6 -) -(assert -(forall ((q Queue) (n Nat)) (=> (and (isAmortized q) (not (isEmpty q))) (= (succ (qlen (qpop q))) (qlen q)))) ; G-amortize-queue-7 -) - -; conjecture -(assert (not -(forall ((x Lst)) (= (append x nil) x)) ; G-amortize-queue-8 -)) -(check-sat) diff --git a/bench_adt/LEON/amortize-queue-goal9.smt2 b/bench_adt/LEON/amortize-queue-goal9.smt2 deleted file mode 100644 index 712793e94..000000000 --- a/bench_adt/LEON/amortize-queue-goal9.smt2 +++ /dev/null @@ -1,92 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Nat) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun butlast (Lst) Lst) -(assert (= (butlast nil) nil)) -(assert (forall ((x Nat) (y Lst)) (= (butlast (cons x y)) (ite (= y nil) nil (cons x (butlast y)))))) - -(declare-fun qreva (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (qreva nil x) x))) -(assert (forall ((x Lst) (y Lst) (z Nat)) (= (qreva (cons z x) y) (qreva x (cons z y))))) - -(declare-fun qrev (Lst) Lst) -(assert (forall ((x Lst)) (= (qrev x) (qreva x nil)))) - -; queues -(declare-datatypes () ((Queue (queue (front Lst) (back Lst))))) - -(declare-fun queue-to-lst (Queue) Lst) -(assert (forall ((x Lst) (y Lst)) (= (queue-to-lst (queue x y)) (append x (qrev y))))) - -(declare-fun qlen (Queue) Nat) -(assert (forall ((x Lst) (y Lst)) (= (qlen (queue x y)) (plus (len x) (len y))))) - -(declare-fun isAmortized (Queue) Bool) -(assert (forall ((x Lst) (y Lst)) (= (isAmortized (queue x y)) (leq (len y) (len x))))) - -(declare-fun isEmpty (Queue) Bool) -(assert (forall ((x Lst) (y Lst)) (= (isEmpty (queue x y)) (and (= x nil) (= y nil))))) - -(declare-fun amortizeQueue (Lst Lst) Queue) -(assert (forall ((x Lst) (y Lst)) (= (amortizeQueue x y) (ite (leq (len y) (len x)) (queue x y) (queue (append x (qrev y)) nil))))) - -(declare-fun enqueue (Queue Nat) Queue) -(assert (forall ((x Lst) (y Lst) (n Nat)) (= (enqueue (queue x y) n) (amortizeQueue x (cons n y))))) - -(declare-fun qpop (Queue) Queue) -(assert (forall ((x Lst) (y Lst) (n Nat)) (= (qpop (queue x (cons n y))) (queue x y)))) -(assert (forall ((x Lst)) (= (qpop (queue x nil)) (queue (butlast x) nil)))) - -; proven -(assert -(forall ((x Lst) (y Lst)) (= (len (append x y)) (plus (len x) (len y)))) ; G-amortize-queue-1 -) -(assert -(forall ((x Lst) (y Lst)) (= (len (qreva x y)) (plus (len x) (len y)))) ; G-amortize-queue-2 -) -(assert -(forall ((x Lst)) (= (len (qrev x)) (len x))) ; G-amortize-queue-3 -) -(assert -(forall ((x Lst) (y Lst)) (= (plus (len x) (len y)) (qlen (queue x y)))) ; G-amortize-queue-4 -) -(assert -(forall ((x Lst) (y Nat)) (= (succ (len (butlast (cons y x)))) (len (cons y x)))) ; G-amortize-queue-5 -) -(assert -(forall ((q Queue) (n Nat)) (= (qlen (enqueue q n)) (succ (qlen q)))) ; G-amortize-queue-6 -) -(assert -(forall ((q Queue) (n Nat)) (=> (and (isAmortized q) (not (isEmpty q))) (= (succ (qlen (qpop q))) (qlen q)))) ; G-amortize-queue-7 -) -(assert -(forall ((x Lst)) (= (append x nil) x)) ; G-amortize-queue-8 -) - -; conjecture -(assert (not -(forall ((x Lst) (n Nat) (y Lst)) (= (butlast (append x (cons n y))) (append x (butlast (cons n y))))) ; G-amortize-queue-9 -)) -(check-sat) diff --git a/bench_adt/LEON/bsearch-tree-goal1.smt2 b/bench_adt/LEON/bsearch-tree-goal1.smt2 deleted file mode 100644 index 46d13b9de..000000000 --- a/bench_adt/LEON/bsearch-tree-goal1.smt2 +++ /dev/null @@ -1,87 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -(declare-fun nmax (Nat Nat) Nat) -(assert (forall ((n Nat) (m Nat)) (= (nmax n m) (ite (less n m) m n)))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Nat) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun mem (Nat Lst) Bool) -(assert (forall ((x Nat)) (not (mem x nil)))) -(assert (forall ((x Nat) (y Nat) (z Lst)) (= (mem x (cons y z)) (or (= x y) (mem x z))))) - -; (binary search) tree -(declare-datatypes () ((Tree (node (data Nat) (left Tree) (right Tree)) (leaf)))) - -(declare-fun tinsert (Tree Nat) Tree) -(assert (forall ((i Nat)) (= (tinsert leaf i) (node i leaf leaf)))) -(assert (forall ((r Tree) (l Tree) (d Nat) (i Nat)) (= (tinsert (node d l r) i) (ite (less d i) (node d l (tinsert r i)) (node d (tinsert l i) r))))) - -(declare-fun height (Tree) Nat) -(assert (= (height leaf) zero)) -(assert (forall ((x Nat) (y Tree) (z Tree)) (= (height (node x y z)) (succ (nmax (height y) (height z)))))) - -(declare-fun tinsert-all (Tree Lst) Tree) -(assert (forall ((x Tree)) (= (tinsert-all x nil) x))) -(assert (forall ((x Tree) (n Nat) (l Lst)) (= (tinsert-all x (cons n l)) (tinsert (tinsert-all x l) n)))) - -(declare-fun tsize (Tree) Nat) -(assert (= (tsize leaf) zero)) -(assert (forall ((x Nat) (l Tree) (r Tree)) (= (tsize (node x l r)) (succ (plus (tsize l) (tsize r)))))) - -(declare-fun tremove (Tree Nat) Tree) -(assert (forall ((i Nat)) (= (tremove leaf i) leaf))) -(assert (forall ((i Nat) (d Nat) (l Tree) (r Tree)) (=> (less i d) (= (tremove (node d l r) i) (node d (tremove l i) r))))) -(assert (forall ((i Nat) (d Nat) (l Tree) (r Tree)) (=> (less d i) (= (tremove (node d l r) i) (node d l (tremove r i)))))) -(assert (forall ((d Nat) (r Tree)) (= (tremove (node d leaf r) d) r))) -(assert (forall ((d Nat) (ld Nat) (ll Tree) (lr Tree) (r Tree)) (= (tremove (node d (node ld ll lr) r) d) (node ld (tremove (node ld ll lr) ld) r)))) - -(declare-fun tremove-all (Tree Lst) Tree) -(assert (forall ((x Tree)) (= (tremove-all x nil) x))) -(assert (forall ((x Tree) (n Nat) (l Lst)) (= (tremove-all x (cons n l)) (tremove-all (tremove x n) l)))) - -(declare-fun tcontains (Tree Nat) Bool) -(assert (forall ((i Nat)) (not (tcontains leaf i)))) -(assert (forall ((d Nat) (l Tree) (r Tree) (i Nat)) (= (tcontains (node d l r) i) (or (= d i) (tcontains l i) (tcontains r i))))) - -(declare-fun tsorted (Tree) Bool) -(assert (tsorted leaf)) -(assert (forall ((d Nat) (l Tree) (r Tree)) (= (tsorted (node d l r)) (and (tsorted l) (tsorted r) - (forall ((x Nat)) (=> (tcontains l x) (leq x d))) - (forall ((x Nat)) (=> (tcontains r x) (less d x))))))) - -(declare-fun tmember (Tree Nat) Bool) -(assert (forall ((x Nat)) (not (tmember leaf x)))) -(assert (forall ((d Nat) (l Tree) (r Tree) (i Nat)) (= (tmember (node d l r) i) (ite (= i d) true (tmember (ite (less d i) r l) i))))) - -(declare-fun content (Tree) Lst) -(assert (= (content leaf) nil)) -(assert (forall ((d Nat) (l Tree) (r Tree)) (= (content (node d l r)) (append (content l) (cons d (content r)))))) - -; proven - -; conjecture -(assert (not -(forall ((t Tree) (n Nat)) (= (tsize (tinsert t n)) (succ (tsize t)))) ; G-bsearch-tree-1 -)) -(check-sat) diff --git a/bench_adt/LEON/bsearch-tree-goal10.smt2 b/bench_adt/LEON/bsearch-tree-goal10.smt2 deleted file mode 100644 index 82d18c0a5..000000000 --- a/bench_adt/LEON/bsearch-tree-goal10.smt2 +++ /dev/null @@ -1,114 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -(declare-fun nmax (Nat Nat) Nat) -(assert (forall ((n Nat) (m Nat)) (= (nmax n m) (ite (less n m) m n)))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Nat) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun mem (Nat Lst) Bool) -(assert (forall ((x Nat)) (not (mem x nil)))) -(assert (forall ((x Nat) (y Nat) (z Lst)) (= (mem x (cons y z)) (or (= x y) (mem x z))))) - -; (binary search) tree -(declare-datatypes () ((Tree (node (data Nat) (left Tree) (right Tree)) (leaf)))) - -(declare-fun tinsert (Tree Nat) Tree) -(assert (forall ((i Nat)) (= (tinsert leaf i) (node i leaf leaf)))) -(assert (forall ((r Tree) (l Tree) (d Nat) (i Nat)) (= (tinsert (node d l r) i) (ite (less d i) (node d l (tinsert r i)) (node d (tinsert l i) r))))) - -(declare-fun height (Tree) Nat) -(assert (= (height leaf) zero)) -(assert (forall ((x Nat) (y Tree) (z Tree)) (= (height (node x y z)) (succ (nmax (height y) (height z)))))) - -(declare-fun tinsert-all (Tree Lst) Tree) -(assert (forall ((x Tree)) (= (tinsert-all x nil) x))) -(assert (forall ((x Tree) (n Nat) (l Lst)) (= (tinsert-all x (cons n l)) (tinsert (tinsert-all x l) n)))) - -(declare-fun tsize (Tree) Nat) -(assert (= (tsize leaf) zero)) -(assert (forall ((x Nat) (l Tree) (r Tree)) (= (tsize (node x l r)) (succ (plus (tsize l) (tsize r)))))) - -(declare-fun tremove (Tree Nat) Tree) -(assert (forall ((i Nat)) (= (tremove leaf i) leaf))) -(assert (forall ((i Nat) (d Nat) (l Tree) (r Tree)) (=> (less i d) (= (tremove (node d l r) i) (node d (tremove l i) r))))) -(assert (forall ((i Nat) (d Nat) (l Tree) (r Tree)) (=> (less d i) (= (tremove (node d l r) i) (node d l (tremove r i)))))) -(assert (forall ((d Nat) (r Tree)) (= (tremove (node d leaf r) d) r))) -(assert (forall ((d Nat) (ld Nat) (ll Tree) (lr Tree) (r Tree)) (= (tremove (node d (node ld ll lr) r) d) (node ld (tremove (node ld ll lr) ld) r)))) - -(declare-fun tremove-all (Tree Lst) Tree) -(assert (forall ((x Tree)) (= (tremove-all x nil) x))) -(assert (forall ((x Tree) (n Nat) (l Lst)) (= (tremove-all x (cons n l)) (tremove-all (tremove x n) l)))) - -(declare-fun tcontains (Tree Nat) Bool) -(assert (forall ((i Nat)) (not (tcontains leaf i)))) -(assert (forall ((d Nat) (l Tree) (r Tree) (i Nat)) (= (tcontains (node d l r) i) (or (= d i) (tcontains l i) (tcontains r i))))) - -(declare-fun tsorted (Tree) Bool) -(assert (tsorted leaf)) -(assert (forall ((d Nat) (l Tree) (r Tree)) (= (tsorted (node d l r)) (and (tsorted l) (tsorted r) - (forall ((x Nat)) (=> (tcontains l x) (leq x d))) - (forall ((x Nat)) (=> (tcontains r x) (less d x))))))) - -(declare-fun tmember (Tree Nat) Bool) -(assert (forall ((x Nat)) (not (tmember leaf x)))) -(assert (forall ((d Nat) (l Tree) (r Tree) (i Nat)) (= (tmember (node d l r) i) (ite (= i d) true (tmember (ite (less d i) r l) i))))) - -(declare-fun content (Tree) Lst) -(assert (= (content leaf) nil)) -(assert (forall ((d Nat) (l Tree) (r Tree)) (= (content (node d l r)) (append (content l) (cons d (content r)))))) - -; proven -(assert -(forall ((t Tree) (n Nat)) (= (tsize (tinsert t n)) (succ (tsize t)))) ; G-bsearch-tree-1 -) -(assert -(forall ((l Lst) (t Tree)) (leq (tsize t) (tsize (tinsert-all t l)))) ; G-bsearch-tree-2 -) -(assert -(forall ((l Lst) (t Tree)) (= (tsize (tinsert-all t l)) (plus (tsize t) (len l)))) ; G-bsearch-tree-3 -) -(assert -(forall ((t Tree) (n Nat)) (leq (tsize (tremove t n)) (tsize t))) ; G-bsearch-tree-4 -) -(assert -(forall ((l Lst) (t Tree)) (leq (tsize (tremove-all t l)) (tsize t))) ; G-bsearch-tree-5 -) -(assert -(forall ((x Tree) (i Nat)) (tcontains (tinsert x i) i)) ; G-bsearch-tree-6 -) -(assert -(forall ((i Nat) (x Tree) (j Nat)) (= (or (= i j) (tcontains x j)) (tcontains (tinsert x i) j))) ; G-bsearch-tree-7 -) -(assert -(forall ((x Tree) (i Nat)) (=> (tsorted x) (tsorted (tinsert x i)))) ; G-bsearch-tree-8 -) -(assert -(forall ((x Tree) (i Nat)) (tmember (tinsert x i) i)) ; G-bsearch-tree-9 -) - -; conjecture -(assert (not -(forall ((i Nat) (x Tree) (j Nat)) (= (or (= i j) (tmember x j)) (tmember (tinsert x i) j))) ; G-bsearch-tree-10 -)) -(check-sat) diff --git a/bench_adt/LEON/bsearch-tree-goal11.smt2 b/bench_adt/LEON/bsearch-tree-goal11.smt2 deleted file mode 100644 index 95b7a8083..000000000 --- a/bench_adt/LEON/bsearch-tree-goal11.smt2 +++ /dev/null @@ -1,117 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -(declare-fun nmax (Nat Nat) Nat) -(assert (forall ((n Nat) (m Nat)) (= (nmax n m) (ite (less n m) m n)))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Nat) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun mem (Nat Lst) Bool) -(assert (forall ((x Nat)) (not (mem x nil)))) -(assert (forall ((x Nat) (y Nat) (z Lst)) (= (mem x (cons y z)) (or (= x y) (mem x z))))) - -; (binary search) tree -(declare-datatypes () ((Tree (node (data Nat) (left Tree) (right Tree)) (leaf)))) - -(declare-fun tinsert (Tree Nat) Tree) -(assert (forall ((i Nat)) (= (tinsert leaf i) (node i leaf leaf)))) -(assert (forall ((r Tree) (l Tree) (d Nat) (i Nat)) (= (tinsert (node d l r) i) (ite (less d i) (node d l (tinsert r i)) (node d (tinsert l i) r))))) - -(declare-fun height (Tree) Nat) -(assert (= (height leaf) zero)) -(assert (forall ((x Nat) (y Tree) (z Tree)) (= (height (node x y z)) (succ (nmax (height y) (height z)))))) - -(declare-fun tinsert-all (Tree Lst) Tree) -(assert (forall ((x Tree)) (= (tinsert-all x nil) x))) -(assert (forall ((x Tree) (n Nat) (l Lst)) (= (tinsert-all x (cons n l)) (tinsert (tinsert-all x l) n)))) - -(declare-fun tsize (Tree) Nat) -(assert (= (tsize leaf) zero)) -(assert (forall ((x Nat) (l Tree) (r Tree)) (= (tsize (node x l r)) (succ (plus (tsize l) (tsize r)))))) - -(declare-fun tremove (Tree Nat) Tree) -(assert (forall ((i Nat)) (= (tremove leaf i) leaf))) -(assert (forall ((i Nat) (d Nat) (l Tree) (r Tree)) (=> (less i d) (= (tremove (node d l r) i) (node d (tremove l i) r))))) -(assert (forall ((i Nat) (d Nat) (l Tree) (r Tree)) (=> (less d i) (= (tremove (node d l r) i) (node d l (tremove r i)))))) -(assert (forall ((d Nat) (r Tree)) (= (tremove (node d leaf r) d) r))) -(assert (forall ((d Nat) (ld Nat) (ll Tree) (lr Tree) (r Tree)) (= (tremove (node d (node ld ll lr) r) d) (node ld (tremove (node ld ll lr) ld) r)))) - -(declare-fun tremove-all (Tree Lst) Tree) -(assert (forall ((x Tree)) (= (tremove-all x nil) x))) -(assert (forall ((x Tree) (n Nat) (l Lst)) (= (tremove-all x (cons n l)) (tremove-all (tremove x n) l)))) - -(declare-fun tcontains (Tree Nat) Bool) -(assert (forall ((i Nat)) (not (tcontains leaf i)))) -(assert (forall ((d Nat) (l Tree) (r Tree) (i Nat)) (= (tcontains (node d l r) i) (or (= d i) (tcontains l i) (tcontains r i))))) - -(declare-fun tsorted (Tree) Bool) -(assert (tsorted leaf)) -(assert (forall ((d Nat) (l Tree) (r Tree)) (= (tsorted (node d l r)) (and (tsorted l) (tsorted r) - (forall ((x Nat)) (=> (tcontains l x) (leq x d))) - (forall ((x Nat)) (=> (tcontains r x) (less d x))))))) - -(declare-fun tmember (Tree Nat) Bool) -(assert (forall ((x Nat)) (not (tmember leaf x)))) -(assert (forall ((d Nat) (l Tree) (r Tree) (i Nat)) (= (tmember (node d l r) i) (ite (= i d) true (tmember (ite (less d i) r l) i))))) - -(declare-fun content (Tree) Lst) -(assert (= (content leaf) nil)) -(assert (forall ((d Nat) (l Tree) (r Tree)) (= (content (node d l r)) (append (content l) (cons d (content r)))))) - -; proven -(assert -(forall ((t Tree) (n Nat)) (= (tsize (tinsert t n)) (succ (tsize t)))) ; G-bsearch-tree-1 -) -(assert -(forall ((l Lst) (t Tree)) (leq (tsize t) (tsize (tinsert-all t l)))) ; G-bsearch-tree-2 -) -(assert -(forall ((l Lst) (t Tree)) (= (tsize (tinsert-all t l)) (plus (tsize t) (len l)))) ; G-bsearch-tree-3 -) -(assert -(forall ((t Tree) (n Nat)) (leq (tsize (tremove t n)) (tsize t))) ; G-bsearch-tree-4 -) -(assert -(forall ((l Lst) (t Tree)) (leq (tsize (tremove-all t l)) (tsize t))) ; G-bsearch-tree-5 -) -(assert -(forall ((x Tree) (i Nat)) (tcontains (tinsert x i) i)) ; G-bsearch-tree-6 -) -(assert -(forall ((i Nat) (x Tree) (j Nat)) (= (or (= i j) (tcontains x j)) (tcontains (tinsert x i) j))) ; G-bsearch-tree-7 -) -(assert -(forall ((x Tree) (i Nat)) (=> (tsorted x) (tsorted (tinsert x i)))) ; G-bsearch-tree-8 -) -(assert -(forall ((x Tree) (i Nat)) (tmember (tinsert x i) i)) ; G-bsearch-tree-9 -) -(assert -(forall ((i Nat) (x Tree) (j Nat)) (= (or (= i j) (tmember x j)) (tmember (tinsert x i) j))) ; G-bsearch-tree-10 -) - -; conjecture -(assert (not -(forall ((i Nat) (x Tree)) (=> (tsorted x) (= (tcontains x i) (tmember x i)))) ; G-bsearch-tree-11 -)) -(check-sat) diff --git a/bench_adt/LEON/bsearch-tree-goal12.smt2 b/bench_adt/LEON/bsearch-tree-goal12.smt2 deleted file mode 100644 index bd8eb7381..000000000 --- a/bench_adt/LEON/bsearch-tree-goal12.smt2 +++ /dev/null @@ -1,120 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -(declare-fun nmax (Nat Nat) Nat) -(assert (forall ((n Nat) (m Nat)) (= (nmax n m) (ite (less n m) m n)))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Nat) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun mem (Nat Lst) Bool) -(assert (forall ((x Nat)) (not (mem x nil)))) -(assert (forall ((x Nat) (y Nat) (z Lst)) (= (mem x (cons y z)) (or (= x y) (mem x z))))) - -; (binary search) tree -(declare-datatypes () ((Tree (node (data Nat) (left Tree) (right Tree)) (leaf)))) - -(declare-fun tinsert (Tree Nat) Tree) -(assert (forall ((i Nat)) (= (tinsert leaf i) (node i leaf leaf)))) -(assert (forall ((r Tree) (l Tree) (d Nat) (i Nat)) (= (tinsert (node d l r) i) (ite (less d i) (node d l (tinsert r i)) (node d (tinsert l i) r))))) - -(declare-fun height (Tree) Nat) -(assert (= (height leaf) zero)) -(assert (forall ((x Nat) (y Tree) (z Tree)) (= (height (node x y z)) (succ (nmax (height y) (height z)))))) - -(declare-fun tinsert-all (Tree Lst) Tree) -(assert (forall ((x Tree)) (= (tinsert-all x nil) x))) -(assert (forall ((x Tree) (n Nat) (l Lst)) (= (tinsert-all x (cons n l)) (tinsert (tinsert-all x l) n)))) - -(declare-fun tsize (Tree) Nat) -(assert (= (tsize leaf) zero)) -(assert (forall ((x Nat) (l Tree) (r Tree)) (= (tsize (node x l r)) (succ (plus (tsize l) (tsize r)))))) - -(declare-fun tremove (Tree Nat) Tree) -(assert (forall ((i Nat)) (= (tremove leaf i) leaf))) -(assert (forall ((i Nat) (d Nat) (l Tree) (r Tree)) (=> (less i d) (= (tremove (node d l r) i) (node d (tremove l i) r))))) -(assert (forall ((i Nat) (d Nat) (l Tree) (r Tree)) (=> (less d i) (= (tremove (node d l r) i) (node d l (tremove r i)))))) -(assert (forall ((d Nat) (r Tree)) (= (tremove (node d leaf r) d) r))) -(assert (forall ((d Nat) (ld Nat) (ll Tree) (lr Tree) (r Tree)) (= (tremove (node d (node ld ll lr) r) d) (node ld (tremove (node ld ll lr) ld) r)))) - -(declare-fun tremove-all (Tree Lst) Tree) -(assert (forall ((x Tree)) (= (tremove-all x nil) x))) -(assert (forall ((x Tree) (n Nat) (l Lst)) (= (tremove-all x (cons n l)) (tremove-all (tremove x n) l)))) - -(declare-fun tcontains (Tree Nat) Bool) -(assert (forall ((i Nat)) (not (tcontains leaf i)))) -(assert (forall ((d Nat) (l Tree) (r Tree) (i Nat)) (= (tcontains (node d l r) i) (or (= d i) (tcontains l i) (tcontains r i))))) - -(declare-fun tsorted (Tree) Bool) -(assert (tsorted leaf)) -(assert (forall ((d Nat) (l Tree) (r Tree)) (= (tsorted (node d l r)) (and (tsorted l) (tsorted r) - (forall ((x Nat)) (=> (tcontains l x) (leq x d))) - (forall ((x Nat)) (=> (tcontains r x) (less d x))))))) - -(declare-fun tmember (Tree Nat) Bool) -(assert (forall ((x Nat)) (not (tmember leaf x)))) -(assert (forall ((d Nat) (l Tree) (r Tree) (i Nat)) (= (tmember (node d l r) i) (ite (= i d) true (tmember (ite (less d i) r l) i))))) - -(declare-fun content (Tree) Lst) -(assert (= (content leaf) nil)) -(assert (forall ((d Nat) (l Tree) (r Tree)) (= (content (node d l r)) (append (content l) (cons d (content r)))))) - -; proven -(assert -(forall ((t Tree) (n Nat)) (= (tsize (tinsert t n)) (succ (tsize t)))) ; G-bsearch-tree-1 -) -(assert -(forall ((l Lst) (t Tree)) (leq (tsize t) (tsize (tinsert-all t l)))) ; G-bsearch-tree-2 -) -(assert -(forall ((l Lst) (t Tree)) (= (tsize (tinsert-all t l)) (plus (tsize t) (len l)))) ; G-bsearch-tree-3 -) -(assert -(forall ((t Tree) (n Nat)) (leq (tsize (tremove t n)) (tsize t))) ; G-bsearch-tree-4 -) -(assert -(forall ((l Lst) (t Tree)) (leq (tsize (tremove-all t l)) (tsize t))) ; G-bsearch-tree-5 -) -(assert -(forall ((x Tree) (i Nat)) (tcontains (tinsert x i) i)) ; G-bsearch-tree-6 -) -(assert -(forall ((i Nat) (x Tree) (j Nat)) (= (or (= i j) (tcontains x j)) (tcontains (tinsert x i) j))) ; G-bsearch-tree-7 -) -(assert -(forall ((x Tree) (i Nat)) (=> (tsorted x) (tsorted (tinsert x i)))) ; G-bsearch-tree-8 -) -(assert -(forall ((x Tree) (i Nat)) (tmember (tinsert x i) i)) ; G-bsearch-tree-9 -) -(assert -(forall ((i Nat) (x Tree) (j Nat)) (= (or (= i j) (tmember x j)) (tmember (tinsert x i) j))) ; G-bsearch-tree-10 -) -(assert -(forall ((i Nat) (x Tree)) (=> (tsorted x) (= (tcontains x i) (tmember x i)))) ; G-bsearch-tree-11 -) - -; conjecture -(assert (not -(forall ((i Nat) (x Tree)) (=> (tmember x i) (tcontains x i))) ; G-bsearch-tree-12 -)) -(check-sat) diff --git a/bench_adt/LEON/bsearch-tree-goal13.smt2 b/bench_adt/LEON/bsearch-tree-goal13.smt2 deleted file mode 100644 index 535ed67ce..000000000 --- a/bench_adt/LEON/bsearch-tree-goal13.smt2 +++ /dev/null @@ -1,123 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -(declare-fun nmax (Nat Nat) Nat) -(assert (forall ((n Nat) (m Nat)) (= (nmax n m) (ite (less n m) m n)))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Nat) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun mem (Nat Lst) Bool) -(assert (forall ((x Nat)) (not (mem x nil)))) -(assert (forall ((x Nat) (y Nat) (z Lst)) (= (mem x (cons y z)) (or (= x y) (mem x z))))) - -; (binary search) tree -(declare-datatypes () ((Tree (node (data Nat) (left Tree) (right Tree)) (leaf)))) - -(declare-fun tinsert (Tree Nat) Tree) -(assert (forall ((i Nat)) (= (tinsert leaf i) (node i leaf leaf)))) -(assert (forall ((r Tree) (l Tree) (d Nat) (i Nat)) (= (tinsert (node d l r) i) (ite (less d i) (node d l (tinsert r i)) (node d (tinsert l i) r))))) - -(declare-fun height (Tree) Nat) -(assert (= (height leaf) zero)) -(assert (forall ((x Nat) (y Tree) (z Tree)) (= (height (node x y z)) (succ (nmax (height y) (height z)))))) - -(declare-fun tinsert-all (Tree Lst) Tree) -(assert (forall ((x Tree)) (= (tinsert-all x nil) x))) -(assert (forall ((x Tree) (n Nat) (l Lst)) (= (tinsert-all x (cons n l)) (tinsert (tinsert-all x l) n)))) - -(declare-fun tsize (Tree) Nat) -(assert (= (tsize leaf) zero)) -(assert (forall ((x Nat) (l Tree) (r Tree)) (= (tsize (node x l r)) (succ (plus (tsize l) (tsize r)))))) - -(declare-fun tremove (Tree Nat) Tree) -(assert (forall ((i Nat)) (= (tremove leaf i) leaf))) -(assert (forall ((i Nat) (d Nat) (l Tree) (r Tree)) (=> (less i d) (= (tremove (node d l r) i) (node d (tremove l i) r))))) -(assert (forall ((i Nat) (d Nat) (l Tree) (r Tree)) (=> (less d i) (= (tremove (node d l r) i) (node d l (tremove r i)))))) -(assert (forall ((d Nat) (r Tree)) (= (tremove (node d leaf r) d) r))) -(assert (forall ((d Nat) (ld Nat) (ll Tree) (lr Tree) (r Tree)) (= (tremove (node d (node ld ll lr) r) d) (node ld (tremove (node ld ll lr) ld) r)))) - -(declare-fun tremove-all (Tree Lst) Tree) -(assert (forall ((x Tree)) (= (tremove-all x nil) x))) -(assert (forall ((x Tree) (n Nat) (l Lst)) (= (tremove-all x (cons n l)) (tremove-all (tremove x n) l)))) - -(declare-fun tcontains (Tree Nat) Bool) -(assert (forall ((i Nat)) (not (tcontains leaf i)))) -(assert (forall ((d Nat) (l Tree) (r Tree) (i Nat)) (= (tcontains (node d l r) i) (or (= d i) (tcontains l i) (tcontains r i))))) - -(declare-fun tsorted (Tree) Bool) -(assert (tsorted leaf)) -(assert (forall ((d Nat) (l Tree) (r Tree)) (= (tsorted (node d l r)) (and (tsorted l) (tsorted r) - (forall ((x Nat)) (=> (tcontains l x) (leq x d))) - (forall ((x Nat)) (=> (tcontains r x) (less d x))))))) - -(declare-fun tmember (Tree Nat) Bool) -(assert (forall ((x Nat)) (not (tmember leaf x)))) -(assert (forall ((d Nat) (l Tree) (r Tree) (i Nat)) (= (tmember (node d l r) i) (ite (= i d) true (tmember (ite (less d i) r l) i))))) - -(declare-fun content (Tree) Lst) -(assert (= (content leaf) nil)) -(assert (forall ((d Nat) (l Tree) (r Tree)) (= (content (node d l r)) (append (content l) (cons d (content r)))))) - -; proven -(assert -(forall ((t Tree) (n Nat)) (= (tsize (tinsert t n)) (succ (tsize t)))) ; G-bsearch-tree-1 -) -(assert -(forall ((l Lst) (t Tree)) (leq (tsize t) (tsize (tinsert-all t l)))) ; G-bsearch-tree-2 -) -(assert -(forall ((l Lst) (t Tree)) (= (tsize (tinsert-all t l)) (plus (tsize t) (len l)))) ; G-bsearch-tree-3 -) -(assert -(forall ((t Tree) (n Nat)) (leq (tsize (tremove t n)) (tsize t))) ; G-bsearch-tree-4 -) -(assert -(forall ((l Lst) (t Tree)) (leq (tsize (tremove-all t l)) (tsize t))) ; G-bsearch-tree-5 -) -(assert -(forall ((x Tree) (i Nat)) (tcontains (tinsert x i) i)) ; G-bsearch-tree-6 -) -(assert -(forall ((i Nat) (x Tree) (j Nat)) (= (or (= i j) (tcontains x j)) (tcontains (tinsert x i) j))) ; G-bsearch-tree-7 -) -(assert -(forall ((x Tree) (i Nat)) (=> (tsorted x) (tsorted (tinsert x i)))) ; G-bsearch-tree-8 -) -(assert -(forall ((x Tree) (i Nat)) (tmember (tinsert x i) i)) ; G-bsearch-tree-9 -) -(assert -(forall ((i Nat) (x Tree) (j Nat)) (= (or (= i j) (tmember x j)) (tmember (tinsert x i) j))) ; G-bsearch-tree-10 -) -(assert -(forall ((i Nat) (x Tree)) (=> (tsorted x) (= (tcontains x i) (tmember x i)))) ; G-bsearch-tree-11 -) -(assert -(forall ((i Nat) (x Tree)) (=> (tmember x i) (tcontains x i))) ; G-bsearch-tree-12 -) - -; conjecture -(assert (not -(forall ((l Lst) (x Tree) (n Nat)) (= (tinsert-all (tinsert x n) l) (tinsert-all x (append l (cons n nil))))) ; G-bsearch-tree-13 -)) -(check-sat) diff --git a/bench_adt/LEON/bsearch-tree-goal14.smt2 b/bench_adt/LEON/bsearch-tree-goal14.smt2 deleted file mode 100644 index 74da74385..000000000 --- a/bench_adt/LEON/bsearch-tree-goal14.smt2 +++ /dev/null @@ -1,126 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -(declare-fun nmax (Nat Nat) Nat) -(assert (forall ((n Nat) (m Nat)) (= (nmax n m) (ite (less n m) m n)))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Nat) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun mem (Nat Lst) Bool) -(assert (forall ((x Nat)) (not (mem x nil)))) -(assert (forall ((x Nat) (y Nat) (z Lst)) (= (mem x (cons y z)) (or (= x y) (mem x z))))) - -; (binary search) tree -(declare-datatypes () ((Tree (node (data Nat) (left Tree) (right Tree)) (leaf)))) - -(declare-fun tinsert (Tree Nat) Tree) -(assert (forall ((i Nat)) (= (tinsert leaf i) (node i leaf leaf)))) -(assert (forall ((r Tree) (l Tree) (d Nat) (i Nat)) (= (tinsert (node d l r) i) (ite (less d i) (node d l (tinsert r i)) (node d (tinsert l i) r))))) - -(declare-fun height (Tree) Nat) -(assert (= (height leaf) zero)) -(assert (forall ((x Nat) (y Tree) (z Tree)) (= (height (node x y z)) (succ (nmax (height y) (height z)))))) - -(declare-fun tinsert-all (Tree Lst) Tree) -(assert (forall ((x Tree)) (= (tinsert-all x nil) x))) -(assert (forall ((x Tree) (n Nat) (l Lst)) (= (tinsert-all x (cons n l)) (tinsert (tinsert-all x l) n)))) - -(declare-fun tsize (Tree) Nat) -(assert (= (tsize leaf) zero)) -(assert (forall ((x Nat) (l Tree) (r Tree)) (= (tsize (node x l r)) (succ (plus (tsize l) (tsize r)))))) - -(declare-fun tremove (Tree Nat) Tree) -(assert (forall ((i Nat)) (= (tremove leaf i) leaf))) -(assert (forall ((i Nat) (d Nat) (l Tree) (r Tree)) (=> (less i d) (= (tremove (node d l r) i) (node d (tremove l i) r))))) -(assert (forall ((i Nat) (d Nat) (l Tree) (r Tree)) (=> (less d i) (= (tremove (node d l r) i) (node d l (tremove r i)))))) -(assert (forall ((d Nat) (r Tree)) (= (tremove (node d leaf r) d) r))) -(assert (forall ((d Nat) (ld Nat) (ll Tree) (lr Tree) (r Tree)) (= (tremove (node d (node ld ll lr) r) d) (node ld (tremove (node ld ll lr) ld) r)))) - -(declare-fun tremove-all (Tree Lst) Tree) -(assert (forall ((x Tree)) (= (tremove-all x nil) x))) -(assert (forall ((x Tree) (n Nat) (l Lst)) (= (tremove-all x (cons n l)) (tremove-all (tremove x n) l)))) - -(declare-fun tcontains (Tree Nat) Bool) -(assert (forall ((i Nat)) (not (tcontains leaf i)))) -(assert (forall ((d Nat) (l Tree) (r Tree) (i Nat)) (= (tcontains (node d l r) i) (or (= d i) (tcontains l i) (tcontains r i))))) - -(declare-fun tsorted (Tree) Bool) -(assert (tsorted leaf)) -(assert (forall ((d Nat) (l Tree) (r Tree)) (= (tsorted (node d l r)) (and (tsorted l) (tsorted r) - (forall ((x Nat)) (=> (tcontains l x) (leq x d))) - (forall ((x Nat)) (=> (tcontains r x) (less d x))))))) - -(declare-fun tmember (Tree Nat) Bool) -(assert (forall ((x Nat)) (not (tmember leaf x)))) -(assert (forall ((d Nat) (l Tree) (r Tree) (i Nat)) (= (tmember (node d l r) i) (ite (= i d) true (tmember (ite (less d i) r l) i))))) - -(declare-fun content (Tree) Lst) -(assert (= (content leaf) nil)) -(assert (forall ((d Nat) (l Tree) (r Tree)) (= (content (node d l r)) (append (content l) (cons d (content r)))))) - -; proven -(assert -(forall ((t Tree) (n Nat)) (= (tsize (tinsert t n)) (succ (tsize t)))) ; G-bsearch-tree-1 -) -(assert -(forall ((l Lst) (t Tree)) (leq (tsize t) (tsize (tinsert-all t l)))) ; G-bsearch-tree-2 -) -(assert -(forall ((l Lst) (t Tree)) (= (tsize (tinsert-all t l)) (plus (tsize t) (len l)))) ; G-bsearch-tree-3 -) -(assert -(forall ((t Tree) (n Nat)) (leq (tsize (tremove t n)) (tsize t))) ; G-bsearch-tree-4 -) -(assert -(forall ((l Lst) (t Tree)) (leq (tsize (tremove-all t l)) (tsize t))) ; G-bsearch-tree-5 -) -(assert -(forall ((x Tree) (i Nat)) (tcontains (tinsert x i) i)) ; G-bsearch-tree-6 -) -(assert -(forall ((i Nat) (x Tree) (j Nat)) (= (or (= i j) (tcontains x j)) (tcontains (tinsert x i) j))) ; G-bsearch-tree-7 -) -(assert -(forall ((x Tree) (i Nat)) (=> (tsorted x) (tsorted (tinsert x i)))) ; G-bsearch-tree-8 -) -(assert -(forall ((x Tree) (i Nat)) (tmember (tinsert x i) i)) ; G-bsearch-tree-9 -) -(assert -(forall ((i Nat) (x Tree) (j Nat)) (= (or (= i j) (tmember x j)) (tmember (tinsert x i) j))) ; G-bsearch-tree-10 -) -(assert -(forall ((i Nat) (x Tree)) (=> (tsorted x) (= (tcontains x i) (tmember x i)))) ; G-bsearch-tree-11 -) -(assert -(forall ((i Nat) (x Tree)) (=> (tmember x i) (tcontains x i))) ; G-bsearch-tree-12 -) -(assert -(forall ((l Lst) (x Tree) (n Nat)) (= (tinsert-all (tinsert x n) l) (tinsert-all x (append l (cons n nil))))) ; G-bsearch-tree-13 -) - -; conjecture -(assert (not -(forall ((x Lst)) (tsorted (tinsert-all leaf x))) ; G-bsearch-tree-14 -)) -(check-sat) diff --git a/bench_adt/LEON/bsearch-tree-goal15.smt2 b/bench_adt/LEON/bsearch-tree-goal15.smt2 deleted file mode 100644 index b2cc6c135..000000000 --- a/bench_adt/LEON/bsearch-tree-goal15.smt2 +++ /dev/null @@ -1,129 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -(declare-fun nmax (Nat Nat) Nat) -(assert (forall ((n Nat) (m Nat)) (= (nmax n m) (ite (less n m) m n)))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Nat) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun mem (Nat Lst) Bool) -(assert (forall ((x Nat)) (not (mem x nil)))) -(assert (forall ((x Nat) (y Nat) (z Lst)) (= (mem x (cons y z)) (or (= x y) (mem x z))))) - -; (binary search) tree -(declare-datatypes () ((Tree (node (data Nat) (left Tree) (right Tree)) (leaf)))) - -(declare-fun tinsert (Tree Nat) Tree) -(assert (forall ((i Nat)) (= (tinsert leaf i) (node i leaf leaf)))) -(assert (forall ((r Tree) (l Tree) (d Nat) (i Nat)) (= (tinsert (node d l r) i) (ite (less d i) (node d l (tinsert r i)) (node d (tinsert l i) r))))) - -(declare-fun height (Tree) Nat) -(assert (= (height leaf) zero)) -(assert (forall ((x Nat) (y Tree) (z Tree)) (= (height (node x y z)) (succ (nmax (height y) (height z)))))) - -(declare-fun tinsert-all (Tree Lst) Tree) -(assert (forall ((x Tree)) (= (tinsert-all x nil) x))) -(assert (forall ((x Tree) (n Nat) (l Lst)) (= (tinsert-all x (cons n l)) (tinsert (tinsert-all x l) n)))) - -(declare-fun tsize (Tree) Nat) -(assert (= (tsize leaf) zero)) -(assert (forall ((x Nat) (l Tree) (r Tree)) (= (tsize (node x l r)) (succ (plus (tsize l) (tsize r)))))) - -(declare-fun tremove (Tree Nat) Tree) -(assert (forall ((i Nat)) (= (tremove leaf i) leaf))) -(assert (forall ((i Nat) (d Nat) (l Tree) (r Tree)) (=> (less i d) (= (tremove (node d l r) i) (node d (tremove l i) r))))) -(assert (forall ((i Nat) (d Nat) (l Tree) (r Tree)) (=> (less d i) (= (tremove (node d l r) i) (node d l (tremove r i)))))) -(assert (forall ((d Nat) (r Tree)) (= (tremove (node d leaf r) d) r))) -(assert (forall ((d Nat) (ld Nat) (ll Tree) (lr Tree) (r Tree)) (= (tremove (node d (node ld ll lr) r) d) (node ld (tremove (node ld ll lr) ld) r)))) - -(declare-fun tremove-all (Tree Lst) Tree) -(assert (forall ((x Tree)) (= (tremove-all x nil) x))) -(assert (forall ((x Tree) (n Nat) (l Lst)) (= (tremove-all x (cons n l)) (tremove-all (tremove x n) l)))) - -(declare-fun tcontains (Tree Nat) Bool) -(assert (forall ((i Nat)) (not (tcontains leaf i)))) -(assert (forall ((d Nat) (l Tree) (r Tree) (i Nat)) (= (tcontains (node d l r) i) (or (= d i) (tcontains l i) (tcontains r i))))) - -(declare-fun tsorted (Tree) Bool) -(assert (tsorted leaf)) -(assert (forall ((d Nat) (l Tree) (r Tree)) (= (tsorted (node d l r)) (and (tsorted l) (tsorted r) - (forall ((x Nat)) (=> (tcontains l x) (leq x d))) - (forall ((x Nat)) (=> (tcontains r x) (less d x))))))) - -(declare-fun tmember (Tree Nat) Bool) -(assert (forall ((x Nat)) (not (tmember leaf x)))) -(assert (forall ((d Nat) (l Tree) (r Tree) (i Nat)) (= (tmember (node d l r) i) (ite (= i d) true (tmember (ite (less d i) r l) i))))) - -(declare-fun content (Tree) Lst) -(assert (= (content leaf) nil)) -(assert (forall ((d Nat) (l Tree) (r Tree)) (= (content (node d l r)) (append (content l) (cons d (content r)))))) - -; proven -(assert -(forall ((t Tree) (n Nat)) (= (tsize (tinsert t n)) (succ (tsize t)))) ; G-bsearch-tree-1 -) -(assert -(forall ((l Lst) (t Tree)) (leq (tsize t) (tsize (tinsert-all t l)))) ; G-bsearch-tree-2 -) -(assert -(forall ((l Lst) (t Tree)) (= (tsize (tinsert-all t l)) (plus (tsize t) (len l)))) ; G-bsearch-tree-3 -) -(assert -(forall ((t Tree) (n Nat)) (leq (tsize (tremove t n)) (tsize t))) ; G-bsearch-tree-4 -) -(assert -(forall ((l Lst) (t Tree)) (leq (tsize (tremove-all t l)) (tsize t))) ; G-bsearch-tree-5 -) -(assert -(forall ((x Tree) (i Nat)) (tcontains (tinsert x i) i)) ; G-bsearch-tree-6 -) -(assert -(forall ((i Nat) (x Tree) (j Nat)) (= (or (= i j) (tcontains x j)) (tcontains (tinsert x i) j))) ; G-bsearch-tree-7 -) -(assert -(forall ((x Tree) (i Nat)) (=> (tsorted x) (tsorted (tinsert x i)))) ; G-bsearch-tree-8 -) -(assert -(forall ((x Tree) (i Nat)) (tmember (tinsert x i) i)) ; G-bsearch-tree-9 -) -(assert -(forall ((i Nat) (x Tree) (j Nat)) (= (or (= i j) (tmember x j)) (tmember (tinsert x i) j))) ; G-bsearch-tree-10 -) -(assert -(forall ((i Nat) (x Tree)) (=> (tsorted x) (= (tcontains x i) (tmember x i)))) ; G-bsearch-tree-11 -) -(assert -(forall ((i Nat) (x Tree)) (=> (tmember x i) (tcontains x i))) ; G-bsearch-tree-12 -) -(assert -(forall ((l Lst) (x Tree) (n Nat)) (= (tinsert-all (tinsert x n) l) (tinsert-all x (append l (cons n nil))))) ; G-bsearch-tree-13 -) -(assert -(forall ((x Lst)) (tsorted (tinsert-all leaf x))) ; G-bsearch-tree-14 -) - -; conjecture -(assert (not -(forall ((x Lst) (i Nat)) (= (mem i x) (tcontains (tinsert-all leaf x) i))) ; G-bsearch-tree-15 -)) -(check-sat) diff --git a/bench_adt/LEON/bsearch-tree-goal16.smt2 b/bench_adt/LEON/bsearch-tree-goal16.smt2 deleted file mode 100644 index 03dfe2b72..000000000 --- a/bench_adt/LEON/bsearch-tree-goal16.smt2 +++ /dev/null @@ -1,132 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -(declare-fun nmax (Nat Nat) Nat) -(assert (forall ((n Nat) (m Nat)) (= (nmax n m) (ite (less n m) m n)))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Nat) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun mem (Nat Lst) Bool) -(assert (forall ((x Nat)) (not (mem x nil)))) -(assert (forall ((x Nat) (y Nat) (z Lst)) (= (mem x (cons y z)) (or (= x y) (mem x z))))) - -; (binary search) tree -(declare-datatypes () ((Tree (node (data Nat) (left Tree) (right Tree)) (leaf)))) - -(declare-fun tinsert (Tree Nat) Tree) -(assert (forall ((i Nat)) (= (tinsert leaf i) (node i leaf leaf)))) -(assert (forall ((r Tree) (l Tree) (d Nat) (i Nat)) (= (tinsert (node d l r) i) (ite (less d i) (node d l (tinsert r i)) (node d (tinsert l i) r))))) - -(declare-fun height (Tree) Nat) -(assert (= (height leaf) zero)) -(assert (forall ((x Nat) (y Tree) (z Tree)) (= (height (node x y z)) (succ (nmax (height y) (height z)))))) - -(declare-fun tinsert-all (Tree Lst) Tree) -(assert (forall ((x Tree)) (= (tinsert-all x nil) x))) -(assert (forall ((x Tree) (n Nat) (l Lst)) (= (tinsert-all x (cons n l)) (tinsert (tinsert-all x l) n)))) - -(declare-fun tsize (Tree) Nat) -(assert (= (tsize leaf) zero)) -(assert (forall ((x Nat) (l Tree) (r Tree)) (= (tsize (node x l r)) (succ (plus (tsize l) (tsize r)))))) - -(declare-fun tremove (Tree Nat) Tree) -(assert (forall ((i Nat)) (= (tremove leaf i) leaf))) -(assert (forall ((i Nat) (d Nat) (l Tree) (r Tree)) (=> (less i d) (= (tremove (node d l r) i) (node d (tremove l i) r))))) -(assert (forall ((i Nat) (d Nat) (l Tree) (r Tree)) (=> (less d i) (= (tremove (node d l r) i) (node d l (tremove r i)))))) -(assert (forall ((d Nat) (r Tree)) (= (tremove (node d leaf r) d) r))) -(assert (forall ((d Nat) (ld Nat) (ll Tree) (lr Tree) (r Tree)) (= (tremove (node d (node ld ll lr) r) d) (node ld (tremove (node ld ll lr) ld) r)))) - -(declare-fun tremove-all (Tree Lst) Tree) -(assert (forall ((x Tree)) (= (tremove-all x nil) x))) -(assert (forall ((x Tree) (n Nat) (l Lst)) (= (tremove-all x (cons n l)) (tremove-all (tremove x n) l)))) - -(declare-fun tcontains (Tree Nat) Bool) -(assert (forall ((i Nat)) (not (tcontains leaf i)))) -(assert (forall ((d Nat) (l Tree) (r Tree) (i Nat)) (= (tcontains (node d l r) i) (or (= d i) (tcontains l i) (tcontains r i))))) - -(declare-fun tsorted (Tree) Bool) -(assert (tsorted leaf)) -(assert (forall ((d Nat) (l Tree) (r Tree)) (= (tsorted (node d l r)) (and (tsorted l) (tsorted r) - (forall ((x Nat)) (=> (tcontains l x) (leq x d))) - (forall ((x Nat)) (=> (tcontains r x) (less d x))))))) - -(declare-fun tmember (Tree Nat) Bool) -(assert (forall ((x Nat)) (not (tmember leaf x)))) -(assert (forall ((d Nat) (l Tree) (r Tree) (i Nat)) (= (tmember (node d l r) i) (ite (= i d) true (tmember (ite (less d i) r l) i))))) - -(declare-fun content (Tree) Lst) -(assert (= (content leaf) nil)) -(assert (forall ((d Nat) (l Tree) (r Tree)) (= (content (node d l r)) (append (content l) (cons d (content r)))))) - -; proven -(assert -(forall ((t Tree) (n Nat)) (= (tsize (tinsert t n)) (succ (tsize t)))) ; G-bsearch-tree-1 -) -(assert -(forall ((l Lst) (t Tree)) (leq (tsize t) (tsize (tinsert-all t l)))) ; G-bsearch-tree-2 -) -(assert -(forall ((l Lst) (t Tree)) (= (tsize (tinsert-all t l)) (plus (tsize t) (len l)))) ; G-bsearch-tree-3 -) -(assert -(forall ((t Tree) (n Nat)) (leq (tsize (tremove t n)) (tsize t))) ; G-bsearch-tree-4 -) -(assert -(forall ((l Lst) (t Tree)) (leq (tsize (tremove-all t l)) (tsize t))) ; G-bsearch-tree-5 -) -(assert -(forall ((x Tree) (i Nat)) (tcontains (tinsert x i) i)) ; G-bsearch-tree-6 -) -(assert -(forall ((i Nat) (x Tree) (j Nat)) (= (or (= i j) (tcontains x j)) (tcontains (tinsert x i) j))) ; G-bsearch-tree-7 -) -(assert -(forall ((x Tree) (i Nat)) (=> (tsorted x) (tsorted (tinsert x i)))) ; G-bsearch-tree-8 -) -(assert -(forall ((x Tree) (i Nat)) (tmember (tinsert x i) i)) ; G-bsearch-tree-9 -) -(assert -(forall ((i Nat) (x Tree) (j Nat)) (= (or (= i j) (tmember x j)) (tmember (tinsert x i) j))) ; G-bsearch-tree-10 -) -(assert -(forall ((i Nat) (x Tree)) (=> (tsorted x) (= (tcontains x i) (tmember x i)))) ; G-bsearch-tree-11 -) -(assert -(forall ((i Nat) (x Tree)) (=> (tmember x i) (tcontains x i))) ; G-bsearch-tree-12 -) -(assert -(forall ((l Lst) (x Tree) (n Nat)) (= (tinsert-all (tinsert x n) l) (tinsert-all x (append l (cons n nil))))) ; G-bsearch-tree-13 -) -(assert -(forall ((x Lst)) (tsorted (tinsert-all leaf x))) ; G-bsearch-tree-14 -) -(assert -(forall ((x Lst) (i Nat)) (= (mem i x) (tcontains (tinsert-all leaf x) i))) ; G-bsearch-tree-15 -) - -; conjecture -(assert (not -(forall ((x Lst) (y Lst) (i Nat)) (= (mem i (append x y)) (or (mem i x) (mem i y)))) ; G-bsearch-tree-16 -)) -(check-sat) diff --git a/bench_adt/LEON/bsearch-tree-goal17.smt2 b/bench_adt/LEON/bsearch-tree-goal17.smt2 deleted file mode 100644 index c5875bc19..000000000 --- a/bench_adt/LEON/bsearch-tree-goal17.smt2 +++ /dev/null @@ -1,135 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -(declare-fun nmax (Nat Nat) Nat) -(assert (forall ((n Nat) (m Nat)) (= (nmax n m) (ite (less n m) m n)))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Nat) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun mem (Nat Lst) Bool) -(assert (forall ((x Nat)) (not (mem x nil)))) -(assert (forall ((x Nat) (y Nat) (z Lst)) (= (mem x (cons y z)) (or (= x y) (mem x z))))) - -; (binary search) tree -(declare-datatypes () ((Tree (node (data Nat) (left Tree) (right Tree)) (leaf)))) - -(declare-fun tinsert (Tree Nat) Tree) -(assert (forall ((i Nat)) (= (tinsert leaf i) (node i leaf leaf)))) -(assert (forall ((r Tree) (l Tree) (d Nat) (i Nat)) (= (tinsert (node d l r) i) (ite (less d i) (node d l (tinsert r i)) (node d (tinsert l i) r))))) - -(declare-fun height (Tree) Nat) -(assert (= (height leaf) zero)) -(assert (forall ((x Nat) (y Tree) (z Tree)) (= (height (node x y z)) (succ (nmax (height y) (height z)))))) - -(declare-fun tinsert-all (Tree Lst) Tree) -(assert (forall ((x Tree)) (= (tinsert-all x nil) x))) -(assert (forall ((x Tree) (n Nat) (l Lst)) (= (tinsert-all x (cons n l)) (tinsert (tinsert-all x l) n)))) - -(declare-fun tsize (Tree) Nat) -(assert (= (tsize leaf) zero)) -(assert (forall ((x Nat) (l Tree) (r Tree)) (= (tsize (node x l r)) (succ (plus (tsize l) (tsize r)))))) - -(declare-fun tremove (Tree Nat) Tree) -(assert (forall ((i Nat)) (= (tremove leaf i) leaf))) -(assert (forall ((i Nat) (d Nat) (l Tree) (r Tree)) (=> (less i d) (= (tremove (node d l r) i) (node d (tremove l i) r))))) -(assert (forall ((i Nat) (d Nat) (l Tree) (r Tree)) (=> (less d i) (= (tremove (node d l r) i) (node d l (tremove r i)))))) -(assert (forall ((d Nat) (r Tree)) (= (tremove (node d leaf r) d) r))) -(assert (forall ((d Nat) (ld Nat) (ll Tree) (lr Tree) (r Tree)) (= (tremove (node d (node ld ll lr) r) d) (node ld (tremove (node ld ll lr) ld) r)))) - -(declare-fun tremove-all (Tree Lst) Tree) -(assert (forall ((x Tree)) (= (tremove-all x nil) x))) -(assert (forall ((x Tree) (n Nat) (l Lst)) (= (tremove-all x (cons n l)) (tremove-all (tremove x n) l)))) - -(declare-fun tcontains (Tree Nat) Bool) -(assert (forall ((i Nat)) (not (tcontains leaf i)))) -(assert (forall ((d Nat) (l Tree) (r Tree) (i Nat)) (= (tcontains (node d l r) i) (or (= d i) (tcontains l i) (tcontains r i))))) - -(declare-fun tsorted (Tree) Bool) -(assert (tsorted leaf)) -(assert (forall ((d Nat) (l Tree) (r Tree)) (= (tsorted (node d l r)) (and (tsorted l) (tsorted r) - (forall ((x Nat)) (=> (tcontains l x) (leq x d))) - (forall ((x Nat)) (=> (tcontains r x) (less d x))))))) - -(declare-fun tmember (Tree Nat) Bool) -(assert (forall ((x Nat)) (not (tmember leaf x)))) -(assert (forall ((d Nat) (l Tree) (r Tree) (i Nat)) (= (tmember (node d l r) i) (ite (= i d) true (tmember (ite (less d i) r l) i))))) - -(declare-fun content (Tree) Lst) -(assert (= (content leaf) nil)) -(assert (forall ((d Nat) (l Tree) (r Tree)) (= (content (node d l r)) (append (content l) (cons d (content r)))))) - -; proven -(assert -(forall ((t Tree) (n Nat)) (= (tsize (tinsert t n)) (succ (tsize t)))) ; G-bsearch-tree-1 -) -(assert -(forall ((l Lst) (t Tree)) (leq (tsize t) (tsize (tinsert-all t l)))) ; G-bsearch-tree-2 -) -(assert -(forall ((l Lst) (t Tree)) (= (tsize (tinsert-all t l)) (plus (tsize t) (len l)))) ; G-bsearch-tree-3 -) -(assert -(forall ((t Tree) (n Nat)) (leq (tsize (tremove t n)) (tsize t))) ; G-bsearch-tree-4 -) -(assert -(forall ((l Lst) (t Tree)) (leq (tsize (tremove-all t l)) (tsize t))) ; G-bsearch-tree-5 -) -(assert -(forall ((x Tree) (i Nat)) (tcontains (tinsert x i) i)) ; G-bsearch-tree-6 -) -(assert -(forall ((i Nat) (x Tree) (j Nat)) (= (or (= i j) (tcontains x j)) (tcontains (tinsert x i) j))) ; G-bsearch-tree-7 -) -(assert -(forall ((x Tree) (i Nat)) (=> (tsorted x) (tsorted (tinsert x i)))) ; G-bsearch-tree-8 -) -(assert -(forall ((x Tree) (i Nat)) (tmember (tinsert x i) i)) ; G-bsearch-tree-9 -) -(assert -(forall ((i Nat) (x Tree) (j Nat)) (= (or (= i j) (tmember x j)) (tmember (tinsert x i) j))) ; G-bsearch-tree-10 -) -(assert -(forall ((i Nat) (x Tree)) (=> (tsorted x) (= (tcontains x i) (tmember x i)))) ; G-bsearch-tree-11 -) -(assert -(forall ((i Nat) (x Tree)) (=> (tmember x i) (tcontains x i))) ; G-bsearch-tree-12 -) -(assert -(forall ((l Lst) (x Tree) (n Nat)) (= (tinsert-all (tinsert x n) l) (tinsert-all x (append l (cons n nil))))) ; G-bsearch-tree-13 -) -(assert -(forall ((x Lst)) (tsorted (tinsert-all leaf x))) ; G-bsearch-tree-14 -) -(assert -(forall ((x Lst) (i Nat)) (= (mem i x) (tcontains (tinsert-all leaf x) i))) ; G-bsearch-tree-15 -) -(assert -(forall ((x Lst) (y Lst) (i Nat)) (= (mem i (append x y)) (or (mem i x) (mem i y)))) ; G-bsearch-tree-16 -) - -; conjecture -(assert (not -(forall ((x Tree) (i Nat)) (=> (tsorted x) (= (tmember x i) (mem i (content x))))) ; G-bsearch-tree-17 -)) -(check-sat) diff --git a/bench_adt/LEON/bsearch-tree-goal18.smt2 b/bench_adt/LEON/bsearch-tree-goal18.smt2 deleted file mode 100644 index b3dd1cb11..000000000 --- a/bench_adt/LEON/bsearch-tree-goal18.smt2 +++ /dev/null @@ -1,138 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -(declare-fun nmax (Nat Nat) Nat) -(assert (forall ((n Nat) (m Nat)) (= (nmax n m) (ite (less n m) m n)))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Nat) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun mem (Nat Lst) Bool) -(assert (forall ((x Nat)) (not (mem x nil)))) -(assert (forall ((x Nat) (y Nat) (z Lst)) (= (mem x (cons y z)) (or (= x y) (mem x z))))) - -; (binary search) tree -(declare-datatypes () ((Tree (node (data Nat) (left Tree) (right Tree)) (leaf)))) - -(declare-fun tinsert (Tree Nat) Tree) -(assert (forall ((i Nat)) (= (tinsert leaf i) (node i leaf leaf)))) -(assert (forall ((r Tree) (l Tree) (d Nat) (i Nat)) (= (tinsert (node d l r) i) (ite (less d i) (node d l (tinsert r i)) (node d (tinsert l i) r))))) - -(declare-fun height (Tree) Nat) -(assert (= (height leaf) zero)) -(assert (forall ((x Nat) (y Tree) (z Tree)) (= (height (node x y z)) (succ (nmax (height y) (height z)))))) - -(declare-fun tinsert-all (Tree Lst) Tree) -(assert (forall ((x Tree)) (= (tinsert-all x nil) x))) -(assert (forall ((x Tree) (n Nat) (l Lst)) (= (tinsert-all x (cons n l)) (tinsert (tinsert-all x l) n)))) - -(declare-fun tsize (Tree) Nat) -(assert (= (tsize leaf) zero)) -(assert (forall ((x Nat) (l Tree) (r Tree)) (= (tsize (node x l r)) (succ (plus (tsize l) (tsize r)))))) - -(declare-fun tremove (Tree Nat) Tree) -(assert (forall ((i Nat)) (= (tremove leaf i) leaf))) -(assert (forall ((i Nat) (d Nat) (l Tree) (r Tree)) (=> (less i d) (= (tremove (node d l r) i) (node d (tremove l i) r))))) -(assert (forall ((i Nat) (d Nat) (l Tree) (r Tree)) (=> (less d i) (= (tremove (node d l r) i) (node d l (tremove r i)))))) -(assert (forall ((d Nat) (r Tree)) (= (tremove (node d leaf r) d) r))) -(assert (forall ((d Nat) (ld Nat) (ll Tree) (lr Tree) (r Tree)) (= (tremove (node d (node ld ll lr) r) d) (node ld (tremove (node ld ll lr) ld) r)))) - -(declare-fun tremove-all (Tree Lst) Tree) -(assert (forall ((x Tree)) (= (tremove-all x nil) x))) -(assert (forall ((x Tree) (n Nat) (l Lst)) (= (tremove-all x (cons n l)) (tremove-all (tremove x n) l)))) - -(declare-fun tcontains (Tree Nat) Bool) -(assert (forall ((i Nat)) (not (tcontains leaf i)))) -(assert (forall ((d Nat) (l Tree) (r Tree) (i Nat)) (= (tcontains (node d l r) i) (or (= d i) (tcontains l i) (tcontains r i))))) - -(declare-fun tsorted (Tree) Bool) -(assert (tsorted leaf)) -(assert (forall ((d Nat) (l Tree) (r Tree)) (= (tsorted (node d l r)) (and (tsorted l) (tsorted r) - (forall ((x Nat)) (=> (tcontains l x) (leq x d))) - (forall ((x Nat)) (=> (tcontains r x) (less d x))))))) - -(declare-fun tmember (Tree Nat) Bool) -(assert (forall ((x Nat)) (not (tmember leaf x)))) -(assert (forall ((d Nat) (l Tree) (r Tree) (i Nat)) (= (tmember (node d l r) i) (ite (= i d) true (tmember (ite (less d i) r l) i))))) - -(declare-fun content (Tree) Lst) -(assert (= (content leaf) nil)) -(assert (forall ((d Nat) (l Tree) (r Tree)) (= (content (node d l r)) (append (content l) (cons d (content r)))))) - -; proven -(assert -(forall ((t Tree) (n Nat)) (= (tsize (tinsert t n)) (succ (tsize t)))) ; G-bsearch-tree-1 -) -(assert -(forall ((l Lst) (t Tree)) (leq (tsize t) (tsize (tinsert-all t l)))) ; G-bsearch-tree-2 -) -(assert -(forall ((l Lst) (t Tree)) (= (tsize (tinsert-all t l)) (plus (tsize t) (len l)))) ; G-bsearch-tree-3 -) -(assert -(forall ((t Tree) (n Nat)) (leq (tsize (tremove t n)) (tsize t))) ; G-bsearch-tree-4 -) -(assert -(forall ((l Lst) (t Tree)) (leq (tsize (tremove-all t l)) (tsize t))) ; G-bsearch-tree-5 -) -(assert -(forall ((x Tree) (i Nat)) (tcontains (tinsert x i) i)) ; G-bsearch-tree-6 -) -(assert -(forall ((i Nat) (x Tree) (j Nat)) (= (or (= i j) (tcontains x j)) (tcontains (tinsert x i) j))) ; G-bsearch-tree-7 -) -(assert -(forall ((x Tree) (i Nat)) (=> (tsorted x) (tsorted (tinsert x i)))) ; G-bsearch-tree-8 -) -(assert -(forall ((x Tree) (i Nat)) (tmember (tinsert x i) i)) ; G-bsearch-tree-9 -) -(assert -(forall ((i Nat) (x Tree) (j Nat)) (= (or (= i j) (tmember x j)) (tmember (tinsert x i) j))) ; G-bsearch-tree-10 -) -(assert -(forall ((i Nat) (x Tree)) (=> (tsorted x) (= (tcontains x i) (tmember x i)))) ; G-bsearch-tree-11 -) -(assert -(forall ((i Nat) (x Tree)) (=> (tmember x i) (tcontains x i))) ; G-bsearch-tree-12 -) -(assert -(forall ((l Lst) (x Tree) (n Nat)) (= (tinsert-all (tinsert x n) l) (tinsert-all x (append l (cons n nil))))) ; G-bsearch-tree-13 -) -(assert -(forall ((x Lst)) (tsorted (tinsert-all leaf x))) ; G-bsearch-tree-14 -) -(assert -(forall ((x Lst) (i Nat)) (= (mem i x) (tcontains (tinsert-all leaf x) i))) ; G-bsearch-tree-15 -) -(assert -(forall ((x Lst) (y Lst) (i Nat)) (= (mem i (append x y)) (or (mem i x) (mem i y)))) ; G-bsearch-tree-16 -) -(assert -(forall ((x Tree) (i Nat)) (=> (tsorted x) (= (tmember x i) (mem i (content x))))) ; G-bsearch-tree-17 -) - -; conjecture -(assert (not -(forall ((x Tree) (i Nat)) (= (tcontains x i) (mem i (content x)))) ; G-bsearch-tree-18 -)) -(check-sat) diff --git a/bench_adt/LEON/bsearch-tree-goal2.smt2 b/bench_adt/LEON/bsearch-tree-goal2.smt2 deleted file mode 100644 index 698325dc2..000000000 --- a/bench_adt/LEON/bsearch-tree-goal2.smt2 +++ /dev/null @@ -1,90 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -(declare-fun nmax (Nat Nat) Nat) -(assert (forall ((n Nat) (m Nat)) (= (nmax n m) (ite (less n m) m n)))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Nat) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun mem (Nat Lst) Bool) -(assert (forall ((x Nat)) (not (mem x nil)))) -(assert (forall ((x Nat) (y Nat) (z Lst)) (= (mem x (cons y z)) (or (= x y) (mem x z))))) - -; (binary search) tree -(declare-datatypes () ((Tree (node (data Nat) (left Tree) (right Tree)) (leaf)))) - -(declare-fun tinsert (Tree Nat) Tree) -(assert (forall ((i Nat)) (= (tinsert leaf i) (node i leaf leaf)))) -(assert (forall ((r Tree) (l Tree) (d Nat) (i Nat)) (= (tinsert (node d l r) i) (ite (less d i) (node d l (tinsert r i)) (node d (tinsert l i) r))))) - -(declare-fun height (Tree) Nat) -(assert (= (height leaf) zero)) -(assert (forall ((x Nat) (y Tree) (z Tree)) (= (height (node x y z)) (succ (nmax (height y) (height z)))))) - -(declare-fun tinsert-all (Tree Lst) Tree) -(assert (forall ((x Tree)) (= (tinsert-all x nil) x))) -(assert (forall ((x Tree) (n Nat) (l Lst)) (= (tinsert-all x (cons n l)) (tinsert (tinsert-all x l) n)))) - -(declare-fun tsize (Tree) Nat) -(assert (= (tsize leaf) zero)) -(assert (forall ((x Nat) (l Tree) (r Tree)) (= (tsize (node x l r)) (succ (plus (tsize l) (tsize r)))))) - -(declare-fun tremove (Tree Nat) Tree) -(assert (forall ((i Nat)) (= (tremove leaf i) leaf))) -(assert (forall ((i Nat) (d Nat) (l Tree) (r Tree)) (=> (less i d) (= (tremove (node d l r) i) (node d (tremove l i) r))))) -(assert (forall ((i Nat) (d Nat) (l Tree) (r Tree)) (=> (less d i) (= (tremove (node d l r) i) (node d l (tremove r i)))))) -(assert (forall ((d Nat) (r Tree)) (= (tremove (node d leaf r) d) r))) -(assert (forall ((d Nat) (ld Nat) (ll Tree) (lr Tree) (r Tree)) (= (tremove (node d (node ld ll lr) r) d) (node ld (tremove (node ld ll lr) ld) r)))) - -(declare-fun tremove-all (Tree Lst) Tree) -(assert (forall ((x Tree)) (= (tremove-all x nil) x))) -(assert (forall ((x Tree) (n Nat) (l Lst)) (= (tremove-all x (cons n l)) (tremove-all (tremove x n) l)))) - -(declare-fun tcontains (Tree Nat) Bool) -(assert (forall ((i Nat)) (not (tcontains leaf i)))) -(assert (forall ((d Nat) (l Tree) (r Tree) (i Nat)) (= (tcontains (node d l r) i) (or (= d i) (tcontains l i) (tcontains r i))))) - -(declare-fun tsorted (Tree) Bool) -(assert (tsorted leaf)) -(assert (forall ((d Nat) (l Tree) (r Tree)) (= (tsorted (node d l r)) (and (tsorted l) (tsorted r) - (forall ((x Nat)) (=> (tcontains l x) (leq x d))) - (forall ((x Nat)) (=> (tcontains r x) (less d x))))))) - -(declare-fun tmember (Tree Nat) Bool) -(assert (forall ((x Nat)) (not (tmember leaf x)))) -(assert (forall ((d Nat) (l Tree) (r Tree) (i Nat)) (= (tmember (node d l r) i) (ite (= i d) true (tmember (ite (less d i) r l) i))))) - -(declare-fun content (Tree) Lst) -(assert (= (content leaf) nil)) -(assert (forall ((d Nat) (l Tree) (r Tree)) (= (content (node d l r)) (append (content l) (cons d (content r)))))) - -; proven -(assert -(forall ((t Tree) (n Nat)) (= (tsize (tinsert t n)) (succ (tsize t)))) ; G-bsearch-tree-1 -) - -; conjecture -(assert (not -(forall ((l Lst) (t Tree)) (leq (tsize t) (tsize (tinsert-all t l)))) ; G-bsearch-tree-2 -)) -(check-sat) diff --git a/bench_adt/LEON/bsearch-tree-goal3.smt2 b/bench_adt/LEON/bsearch-tree-goal3.smt2 deleted file mode 100644 index 9f8d049aa..000000000 --- a/bench_adt/LEON/bsearch-tree-goal3.smt2 +++ /dev/null @@ -1,93 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -(declare-fun nmax (Nat Nat) Nat) -(assert (forall ((n Nat) (m Nat)) (= (nmax n m) (ite (less n m) m n)))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Nat) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun mem (Nat Lst) Bool) -(assert (forall ((x Nat)) (not (mem x nil)))) -(assert (forall ((x Nat) (y Nat) (z Lst)) (= (mem x (cons y z)) (or (= x y) (mem x z))))) - -; (binary search) tree -(declare-datatypes () ((Tree (node (data Nat) (left Tree) (right Tree)) (leaf)))) - -(declare-fun tinsert (Tree Nat) Tree) -(assert (forall ((i Nat)) (= (tinsert leaf i) (node i leaf leaf)))) -(assert (forall ((r Tree) (l Tree) (d Nat) (i Nat)) (= (tinsert (node d l r) i) (ite (less d i) (node d l (tinsert r i)) (node d (tinsert l i) r))))) - -(declare-fun height (Tree) Nat) -(assert (= (height leaf) zero)) -(assert (forall ((x Nat) (y Tree) (z Tree)) (= (height (node x y z)) (succ (nmax (height y) (height z)))))) - -(declare-fun tinsert-all (Tree Lst) Tree) -(assert (forall ((x Tree)) (= (tinsert-all x nil) x))) -(assert (forall ((x Tree) (n Nat) (l Lst)) (= (tinsert-all x (cons n l)) (tinsert (tinsert-all x l) n)))) - -(declare-fun tsize (Tree) Nat) -(assert (= (tsize leaf) zero)) -(assert (forall ((x Nat) (l Tree) (r Tree)) (= (tsize (node x l r)) (succ (plus (tsize l) (tsize r)))))) - -(declare-fun tremove (Tree Nat) Tree) -(assert (forall ((i Nat)) (= (tremove leaf i) leaf))) -(assert (forall ((i Nat) (d Nat) (l Tree) (r Tree)) (=> (less i d) (= (tremove (node d l r) i) (node d (tremove l i) r))))) -(assert (forall ((i Nat) (d Nat) (l Tree) (r Tree)) (=> (less d i) (= (tremove (node d l r) i) (node d l (tremove r i)))))) -(assert (forall ((d Nat) (r Tree)) (= (tremove (node d leaf r) d) r))) -(assert (forall ((d Nat) (ld Nat) (ll Tree) (lr Tree) (r Tree)) (= (tremove (node d (node ld ll lr) r) d) (node ld (tremove (node ld ll lr) ld) r)))) - -(declare-fun tremove-all (Tree Lst) Tree) -(assert (forall ((x Tree)) (= (tremove-all x nil) x))) -(assert (forall ((x Tree) (n Nat) (l Lst)) (= (tremove-all x (cons n l)) (tremove-all (tremove x n) l)))) - -(declare-fun tcontains (Tree Nat) Bool) -(assert (forall ((i Nat)) (not (tcontains leaf i)))) -(assert (forall ((d Nat) (l Tree) (r Tree) (i Nat)) (= (tcontains (node d l r) i) (or (= d i) (tcontains l i) (tcontains r i))))) - -(declare-fun tsorted (Tree) Bool) -(assert (tsorted leaf)) -(assert (forall ((d Nat) (l Tree) (r Tree)) (= (tsorted (node d l r)) (and (tsorted l) (tsorted r) - (forall ((x Nat)) (=> (tcontains l x) (leq x d))) - (forall ((x Nat)) (=> (tcontains r x) (less d x))))))) - -(declare-fun tmember (Tree Nat) Bool) -(assert (forall ((x Nat)) (not (tmember leaf x)))) -(assert (forall ((d Nat) (l Tree) (r Tree) (i Nat)) (= (tmember (node d l r) i) (ite (= i d) true (tmember (ite (less d i) r l) i))))) - -(declare-fun content (Tree) Lst) -(assert (= (content leaf) nil)) -(assert (forall ((d Nat) (l Tree) (r Tree)) (= (content (node d l r)) (append (content l) (cons d (content r)))))) - -; proven -(assert -(forall ((t Tree) (n Nat)) (= (tsize (tinsert t n)) (succ (tsize t)))) ; G-bsearch-tree-1 -) -(assert -(forall ((l Lst) (t Tree)) (leq (tsize t) (tsize (tinsert-all t l)))) ; G-bsearch-tree-2 -) - -; conjecture -(assert (not -(forall ((l Lst) (t Tree)) (= (tsize (tinsert-all t l)) (plus (tsize t) (len l)))) ; G-bsearch-tree-3 -)) -(check-sat) diff --git a/bench_adt/LEON/bsearch-tree-goal4.smt2 b/bench_adt/LEON/bsearch-tree-goal4.smt2 deleted file mode 100644 index d1de57559..000000000 --- a/bench_adt/LEON/bsearch-tree-goal4.smt2 +++ /dev/null @@ -1,96 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -(declare-fun nmax (Nat Nat) Nat) -(assert (forall ((n Nat) (m Nat)) (= (nmax n m) (ite (less n m) m n)))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Nat) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun mem (Nat Lst) Bool) -(assert (forall ((x Nat)) (not (mem x nil)))) -(assert (forall ((x Nat) (y Nat) (z Lst)) (= (mem x (cons y z)) (or (= x y) (mem x z))))) - -; (binary search) tree -(declare-datatypes () ((Tree (node (data Nat) (left Tree) (right Tree)) (leaf)))) - -(declare-fun tinsert (Tree Nat) Tree) -(assert (forall ((i Nat)) (= (tinsert leaf i) (node i leaf leaf)))) -(assert (forall ((r Tree) (l Tree) (d Nat) (i Nat)) (= (tinsert (node d l r) i) (ite (less d i) (node d l (tinsert r i)) (node d (tinsert l i) r))))) - -(declare-fun height (Tree) Nat) -(assert (= (height leaf) zero)) -(assert (forall ((x Nat) (y Tree) (z Tree)) (= (height (node x y z)) (succ (nmax (height y) (height z)))))) - -(declare-fun tinsert-all (Tree Lst) Tree) -(assert (forall ((x Tree)) (= (tinsert-all x nil) x))) -(assert (forall ((x Tree) (n Nat) (l Lst)) (= (tinsert-all x (cons n l)) (tinsert (tinsert-all x l) n)))) - -(declare-fun tsize (Tree) Nat) -(assert (= (tsize leaf) zero)) -(assert (forall ((x Nat) (l Tree) (r Tree)) (= (tsize (node x l r)) (succ (plus (tsize l) (tsize r)))))) - -(declare-fun tremove (Tree Nat) Tree) -(assert (forall ((i Nat)) (= (tremove leaf i) leaf))) -(assert (forall ((i Nat) (d Nat) (l Tree) (r Tree)) (=> (less i d) (= (tremove (node d l r) i) (node d (tremove l i) r))))) -(assert (forall ((i Nat) (d Nat) (l Tree) (r Tree)) (=> (less d i) (= (tremove (node d l r) i) (node d l (tremove r i)))))) -(assert (forall ((d Nat) (r Tree)) (= (tremove (node d leaf r) d) r))) -(assert (forall ((d Nat) (ld Nat) (ll Tree) (lr Tree) (r Tree)) (= (tremove (node d (node ld ll lr) r) d) (node ld (tremove (node ld ll lr) ld) r)))) - -(declare-fun tremove-all (Tree Lst) Tree) -(assert (forall ((x Tree)) (= (tremove-all x nil) x))) -(assert (forall ((x Tree) (n Nat) (l Lst)) (= (tremove-all x (cons n l)) (tremove-all (tremove x n) l)))) - -(declare-fun tcontains (Tree Nat) Bool) -(assert (forall ((i Nat)) (not (tcontains leaf i)))) -(assert (forall ((d Nat) (l Tree) (r Tree) (i Nat)) (= (tcontains (node d l r) i) (or (= d i) (tcontains l i) (tcontains r i))))) - -(declare-fun tsorted (Tree) Bool) -(assert (tsorted leaf)) -(assert (forall ((d Nat) (l Tree) (r Tree)) (= (tsorted (node d l r)) (and (tsorted l) (tsorted r) - (forall ((x Nat)) (=> (tcontains l x) (leq x d))) - (forall ((x Nat)) (=> (tcontains r x) (less d x))))))) - -(declare-fun tmember (Tree Nat) Bool) -(assert (forall ((x Nat)) (not (tmember leaf x)))) -(assert (forall ((d Nat) (l Tree) (r Tree) (i Nat)) (= (tmember (node d l r) i) (ite (= i d) true (tmember (ite (less d i) r l) i))))) - -(declare-fun content (Tree) Lst) -(assert (= (content leaf) nil)) -(assert (forall ((d Nat) (l Tree) (r Tree)) (= (content (node d l r)) (append (content l) (cons d (content r)))))) - -; proven -(assert -(forall ((t Tree) (n Nat)) (= (tsize (tinsert t n)) (succ (tsize t)))) ; G-bsearch-tree-1 -) -(assert -(forall ((l Lst) (t Tree)) (leq (tsize t) (tsize (tinsert-all t l)))) ; G-bsearch-tree-2 -) -(assert -(forall ((l Lst) (t Tree)) (= (tsize (tinsert-all t l)) (plus (tsize t) (len l)))) ; G-bsearch-tree-3 -) - -; conjecture -(assert (not -(forall ((t Tree) (n Nat)) (leq (tsize (tremove t n)) (tsize t))) ; G-bsearch-tree-4 -)) -(check-sat) diff --git a/bench_adt/LEON/bsearch-tree-goal5.smt2 b/bench_adt/LEON/bsearch-tree-goal5.smt2 deleted file mode 100644 index 56d99b979..000000000 --- a/bench_adt/LEON/bsearch-tree-goal5.smt2 +++ /dev/null @@ -1,99 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -(declare-fun nmax (Nat Nat) Nat) -(assert (forall ((n Nat) (m Nat)) (= (nmax n m) (ite (less n m) m n)))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Nat) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun mem (Nat Lst) Bool) -(assert (forall ((x Nat)) (not (mem x nil)))) -(assert (forall ((x Nat) (y Nat) (z Lst)) (= (mem x (cons y z)) (or (= x y) (mem x z))))) - -; (binary search) tree -(declare-datatypes () ((Tree (node (data Nat) (left Tree) (right Tree)) (leaf)))) - -(declare-fun tinsert (Tree Nat) Tree) -(assert (forall ((i Nat)) (= (tinsert leaf i) (node i leaf leaf)))) -(assert (forall ((r Tree) (l Tree) (d Nat) (i Nat)) (= (tinsert (node d l r) i) (ite (less d i) (node d l (tinsert r i)) (node d (tinsert l i) r))))) - -(declare-fun height (Tree) Nat) -(assert (= (height leaf) zero)) -(assert (forall ((x Nat) (y Tree) (z Tree)) (= (height (node x y z)) (succ (nmax (height y) (height z)))))) - -(declare-fun tinsert-all (Tree Lst) Tree) -(assert (forall ((x Tree)) (= (tinsert-all x nil) x))) -(assert (forall ((x Tree) (n Nat) (l Lst)) (= (tinsert-all x (cons n l)) (tinsert (tinsert-all x l) n)))) - -(declare-fun tsize (Tree) Nat) -(assert (= (tsize leaf) zero)) -(assert (forall ((x Nat) (l Tree) (r Tree)) (= (tsize (node x l r)) (succ (plus (tsize l) (tsize r)))))) - -(declare-fun tremove (Tree Nat) Tree) -(assert (forall ((i Nat)) (= (tremove leaf i) leaf))) -(assert (forall ((i Nat) (d Nat) (l Tree) (r Tree)) (=> (less i d) (= (tremove (node d l r) i) (node d (tremove l i) r))))) -(assert (forall ((i Nat) (d Nat) (l Tree) (r Tree)) (=> (less d i) (= (tremove (node d l r) i) (node d l (tremove r i)))))) -(assert (forall ((d Nat) (r Tree)) (= (tremove (node d leaf r) d) r))) -(assert (forall ((d Nat) (ld Nat) (ll Tree) (lr Tree) (r Tree)) (= (tremove (node d (node ld ll lr) r) d) (node ld (tremove (node ld ll lr) ld) r)))) - -(declare-fun tremove-all (Tree Lst) Tree) -(assert (forall ((x Tree)) (= (tremove-all x nil) x))) -(assert (forall ((x Tree) (n Nat) (l Lst)) (= (tremove-all x (cons n l)) (tremove-all (tremove x n) l)))) - -(declare-fun tcontains (Tree Nat) Bool) -(assert (forall ((i Nat)) (not (tcontains leaf i)))) -(assert (forall ((d Nat) (l Tree) (r Tree) (i Nat)) (= (tcontains (node d l r) i) (or (= d i) (tcontains l i) (tcontains r i))))) - -(declare-fun tsorted (Tree) Bool) -(assert (tsorted leaf)) -(assert (forall ((d Nat) (l Tree) (r Tree)) (= (tsorted (node d l r)) (and (tsorted l) (tsorted r) - (forall ((x Nat)) (=> (tcontains l x) (leq x d))) - (forall ((x Nat)) (=> (tcontains r x) (less d x))))))) - -(declare-fun tmember (Tree Nat) Bool) -(assert (forall ((x Nat)) (not (tmember leaf x)))) -(assert (forall ((d Nat) (l Tree) (r Tree) (i Nat)) (= (tmember (node d l r) i) (ite (= i d) true (tmember (ite (less d i) r l) i))))) - -(declare-fun content (Tree) Lst) -(assert (= (content leaf) nil)) -(assert (forall ((d Nat) (l Tree) (r Tree)) (= (content (node d l r)) (append (content l) (cons d (content r)))))) - -; proven -(assert -(forall ((t Tree) (n Nat)) (= (tsize (tinsert t n)) (succ (tsize t)))) ; G-bsearch-tree-1 -) -(assert -(forall ((l Lst) (t Tree)) (leq (tsize t) (tsize (tinsert-all t l)))) ; G-bsearch-tree-2 -) -(assert -(forall ((l Lst) (t Tree)) (= (tsize (tinsert-all t l)) (plus (tsize t) (len l)))) ; G-bsearch-tree-3 -) -(assert -(forall ((t Tree) (n Nat)) (leq (tsize (tremove t n)) (tsize t))) ; G-bsearch-tree-4 -) - -; conjecture -(assert (not -(forall ((l Lst) (t Tree)) (leq (tsize (tremove-all t l)) (tsize t))) ; G-bsearch-tree-5 -)) -(check-sat) diff --git a/bench_adt/LEON/bsearch-tree-goal6.smt2 b/bench_adt/LEON/bsearch-tree-goal6.smt2 deleted file mode 100644 index c20d1a95d..000000000 --- a/bench_adt/LEON/bsearch-tree-goal6.smt2 +++ /dev/null @@ -1,102 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -(declare-fun nmax (Nat Nat) Nat) -(assert (forall ((n Nat) (m Nat)) (= (nmax n m) (ite (less n m) m n)))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Nat) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun mem (Nat Lst) Bool) -(assert (forall ((x Nat)) (not (mem x nil)))) -(assert (forall ((x Nat) (y Nat) (z Lst)) (= (mem x (cons y z)) (or (= x y) (mem x z))))) - -; (binary search) tree -(declare-datatypes () ((Tree (node (data Nat) (left Tree) (right Tree)) (leaf)))) - -(declare-fun tinsert (Tree Nat) Tree) -(assert (forall ((i Nat)) (= (tinsert leaf i) (node i leaf leaf)))) -(assert (forall ((r Tree) (l Tree) (d Nat) (i Nat)) (= (tinsert (node d l r) i) (ite (less d i) (node d l (tinsert r i)) (node d (tinsert l i) r))))) - -(declare-fun height (Tree) Nat) -(assert (= (height leaf) zero)) -(assert (forall ((x Nat) (y Tree) (z Tree)) (= (height (node x y z)) (succ (nmax (height y) (height z)))))) - -(declare-fun tinsert-all (Tree Lst) Tree) -(assert (forall ((x Tree)) (= (tinsert-all x nil) x))) -(assert (forall ((x Tree) (n Nat) (l Lst)) (= (tinsert-all x (cons n l)) (tinsert (tinsert-all x l) n)))) - -(declare-fun tsize (Tree) Nat) -(assert (= (tsize leaf) zero)) -(assert (forall ((x Nat) (l Tree) (r Tree)) (= (tsize (node x l r)) (succ (plus (tsize l) (tsize r)))))) - -(declare-fun tremove (Tree Nat) Tree) -(assert (forall ((i Nat)) (= (tremove leaf i) leaf))) -(assert (forall ((i Nat) (d Nat) (l Tree) (r Tree)) (=> (less i d) (= (tremove (node d l r) i) (node d (tremove l i) r))))) -(assert (forall ((i Nat) (d Nat) (l Tree) (r Tree)) (=> (less d i) (= (tremove (node d l r) i) (node d l (tremove r i)))))) -(assert (forall ((d Nat) (r Tree)) (= (tremove (node d leaf r) d) r))) -(assert (forall ((d Nat) (ld Nat) (ll Tree) (lr Tree) (r Tree)) (= (tremove (node d (node ld ll lr) r) d) (node ld (tremove (node ld ll lr) ld) r)))) - -(declare-fun tremove-all (Tree Lst) Tree) -(assert (forall ((x Tree)) (= (tremove-all x nil) x))) -(assert (forall ((x Tree) (n Nat) (l Lst)) (= (tremove-all x (cons n l)) (tremove-all (tremove x n) l)))) - -(declare-fun tcontains (Tree Nat) Bool) -(assert (forall ((i Nat)) (not (tcontains leaf i)))) -(assert (forall ((d Nat) (l Tree) (r Tree) (i Nat)) (= (tcontains (node d l r) i) (or (= d i) (tcontains l i) (tcontains r i))))) - -(declare-fun tsorted (Tree) Bool) -(assert (tsorted leaf)) -(assert (forall ((d Nat) (l Tree) (r Tree)) (= (tsorted (node d l r)) (and (tsorted l) (tsorted r) - (forall ((x Nat)) (=> (tcontains l x) (leq x d))) - (forall ((x Nat)) (=> (tcontains r x) (less d x))))))) - -(declare-fun tmember (Tree Nat) Bool) -(assert (forall ((x Nat)) (not (tmember leaf x)))) -(assert (forall ((d Nat) (l Tree) (r Tree) (i Nat)) (= (tmember (node d l r) i) (ite (= i d) true (tmember (ite (less d i) r l) i))))) - -(declare-fun content (Tree) Lst) -(assert (= (content leaf) nil)) -(assert (forall ((d Nat) (l Tree) (r Tree)) (= (content (node d l r)) (append (content l) (cons d (content r)))))) - -; proven -(assert -(forall ((t Tree) (n Nat)) (= (tsize (tinsert t n)) (succ (tsize t)))) ; G-bsearch-tree-1 -) -(assert -(forall ((l Lst) (t Tree)) (leq (tsize t) (tsize (tinsert-all t l)))) ; G-bsearch-tree-2 -) -(assert -(forall ((l Lst) (t Tree)) (= (tsize (tinsert-all t l)) (plus (tsize t) (len l)))) ; G-bsearch-tree-3 -) -(assert -(forall ((t Tree) (n Nat)) (leq (tsize (tremove t n)) (tsize t))) ; G-bsearch-tree-4 -) -(assert -(forall ((l Lst) (t Tree)) (leq (tsize (tremove-all t l)) (tsize t))) ; G-bsearch-tree-5 -) - -; conjecture -(assert (not -(forall ((x Tree) (i Nat)) (tcontains (tinsert x i) i)) ; G-bsearch-tree-6 -)) -(check-sat) diff --git a/bench_adt/LEON/bsearch-tree-goal7.smt2 b/bench_adt/LEON/bsearch-tree-goal7.smt2 deleted file mode 100644 index bcd817d29..000000000 --- a/bench_adt/LEON/bsearch-tree-goal7.smt2 +++ /dev/null @@ -1,105 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -(declare-fun nmax (Nat Nat) Nat) -(assert (forall ((n Nat) (m Nat)) (= (nmax n m) (ite (less n m) m n)))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Nat) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun mem (Nat Lst) Bool) -(assert (forall ((x Nat)) (not (mem x nil)))) -(assert (forall ((x Nat) (y Nat) (z Lst)) (= (mem x (cons y z)) (or (= x y) (mem x z))))) - -; (binary search) tree -(declare-datatypes () ((Tree (node (data Nat) (left Tree) (right Tree)) (leaf)))) - -(declare-fun tinsert (Tree Nat) Tree) -(assert (forall ((i Nat)) (= (tinsert leaf i) (node i leaf leaf)))) -(assert (forall ((r Tree) (l Tree) (d Nat) (i Nat)) (= (tinsert (node d l r) i) (ite (less d i) (node d l (tinsert r i)) (node d (tinsert l i) r))))) - -(declare-fun height (Tree) Nat) -(assert (= (height leaf) zero)) -(assert (forall ((x Nat) (y Tree) (z Tree)) (= (height (node x y z)) (succ (nmax (height y) (height z)))))) - -(declare-fun tinsert-all (Tree Lst) Tree) -(assert (forall ((x Tree)) (= (tinsert-all x nil) x))) -(assert (forall ((x Tree) (n Nat) (l Lst)) (= (tinsert-all x (cons n l)) (tinsert (tinsert-all x l) n)))) - -(declare-fun tsize (Tree) Nat) -(assert (= (tsize leaf) zero)) -(assert (forall ((x Nat) (l Tree) (r Tree)) (= (tsize (node x l r)) (succ (plus (tsize l) (tsize r)))))) - -(declare-fun tremove (Tree Nat) Tree) -(assert (forall ((i Nat)) (= (tremove leaf i) leaf))) -(assert (forall ((i Nat) (d Nat) (l Tree) (r Tree)) (=> (less i d) (= (tremove (node d l r) i) (node d (tremove l i) r))))) -(assert (forall ((i Nat) (d Nat) (l Tree) (r Tree)) (=> (less d i) (= (tremove (node d l r) i) (node d l (tremove r i)))))) -(assert (forall ((d Nat) (r Tree)) (= (tremove (node d leaf r) d) r))) -(assert (forall ((d Nat) (ld Nat) (ll Tree) (lr Tree) (r Tree)) (= (tremove (node d (node ld ll lr) r) d) (node ld (tremove (node ld ll lr) ld) r)))) - -(declare-fun tremove-all (Tree Lst) Tree) -(assert (forall ((x Tree)) (= (tremove-all x nil) x))) -(assert (forall ((x Tree) (n Nat) (l Lst)) (= (tremove-all x (cons n l)) (tremove-all (tremove x n) l)))) - -(declare-fun tcontains (Tree Nat) Bool) -(assert (forall ((i Nat)) (not (tcontains leaf i)))) -(assert (forall ((d Nat) (l Tree) (r Tree) (i Nat)) (= (tcontains (node d l r) i) (or (= d i) (tcontains l i) (tcontains r i))))) - -(declare-fun tsorted (Tree) Bool) -(assert (tsorted leaf)) -(assert (forall ((d Nat) (l Tree) (r Tree)) (= (tsorted (node d l r)) (and (tsorted l) (tsorted r) - (forall ((x Nat)) (=> (tcontains l x) (leq x d))) - (forall ((x Nat)) (=> (tcontains r x) (less d x))))))) - -(declare-fun tmember (Tree Nat) Bool) -(assert (forall ((x Nat)) (not (tmember leaf x)))) -(assert (forall ((d Nat) (l Tree) (r Tree) (i Nat)) (= (tmember (node d l r) i) (ite (= i d) true (tmember (ite (less d i) r l) i))))) - -(declare-fun content (Tree) Lst) -(assert (= (content leaf) nil)) -(assert (forall ((d Nat) (l Tree) (r Tree)) (= (content (node d l r)) (append (content l) (cons d (content r)))))) - -; proven -(assert -(forall ((t Tree) (n Nat)) (= (tsize (tinsert t n)) (succ (tsize t)))) ; G-bsearch-tree-1 -) -(assert -(forall ((l Lst) (t Tree)) (leq (tsize t) (tsize (tinsert-all t l)))) ; G-bsearch-tree-2 -) -(assert -(forall ((l Lst) (t Tree)) (= (tsize (tinsert-all t l)) (plus (tsize t) (len l)))) ; G-bsearch-tree-3 -) -(assert -(forall ((t Tree) (n Nat)) (leq (tsize (tremove t n)) (tsize t))) ; G-bsearch-tree-4 -) -(assert -(forall ((l Lst) (t Tree)) (leq (tsize (tremove-all t l)) (tsize t))) ; G-bsearch-tree-5 -) -(assert -(forall ((x Tree) (i Nat)) (tcontains (tinsert x i) i)) ; G-bsearch-tree-6 -) - -; conjecture -(assert (not -(forall ((i Nat) (x Tree) (j Nat)) (= (or (= i j) (tcontains x j)) (tcontains (tinsert x i) j))) ; G-bsearch-tree-7 -)) -(check-sat) diff --git a/bench_adt/LEON/bsearch-tree-goal8.smt2 b/bench_adt/LEON/bsearch-tree-goal8.smt2 deleted file mode 100644 index a686a22e7..000000000 --- a/bench_adt/LEON/bsearch-tree-goal8.smt2 +++ /dev/null @@ -1,108 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -(declare-fun nmax (Nat Nat) Nat) -(assert (forall ((n Nat) (m Nat)) (= (nmax n m) (ite (less n m) m n)))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Nat) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun mem (Nat Lst) Bool) -(assert (forall ((x Nat)) (not (mem x nil)))) -(assert (forall ((x Nat) (y Nat) (z Lst)) (= (mem x (cons y z)) (or (= x y) (mem x z))))) - -; (binary search) tree -(declare-datatypes () ((Tree (node (data Nat) (left Tree) (right Tree)) (leaf)))) - -(declare-fun tinsert (Tree Nat) Tree) -(assert (forall ((i Nat)) (= (tinsert leaf i) (node i leaf leaf)))) -(assert (forall ((r Tree) (l Tree) (d Nat) (i Nat)) (= (tinsert (node d l r) i) (ite (less d i) (node d l (tinsert r i)) (node d (tinsert l i) r))))) - -(declare-fun height (Tree) Nat) -(assert (= (height leaf) zero)) -(assert (forall ((x Nat) (y Tree) (z Tree)) (= (height (node x y z)) (succ (nmax (height y) (height z)))))) - -(declare-fun tinsert-all (Tree Lst) Tree) -(assert (forall ((x Tree)) (= (tinsert-all x nil) x))) -(assert (forall ((x Tree) (n Nat) (l Lst)) (= (tinsert-all x (cons n l)) (tinsert (tinsert-all x l) n)))) - -(declare-fun tsize (Tree) Nat) -(assert (= (tsize leaf) zero)) -(assert (forall ((x Nat) (l Tree) (r Tree)) (= (tsize (node x l r)) (succ (plus (tsize l) (tsize r)))))) - -(declare-fun tremove (Tree Nat) Tree) -(assert (forall ((i Nat)) (= (tremove leaf i) leaf))) -(assert (forall ((i Nat) (d Nat) (l Tree) (r Tree)) (=> (less i d) (= (tremove (node d l r) i) (node d (tremove l i) r))))) -(assert (forall ((i Nat) (d Nat) (l Tree) (r Tree)) (=> (less d i) (= (tremove (node d l r) i) (node d l (tremove r i)))))) -(assert (forall ((d Nat) (r Tree)) (= (tremove (node d leaf r) d) r))) -(assert (forall ((d Nat) (ld Nat) (ll Tree) (lr Tree) (r Tree)) (= (tremove (node d (node ld ll lr) r) d) (node ld (tremove (node ld ll lr) ld) r)))) - -(declare-fun tremove-all (Tree Lst) Tree) -(assert (forall ((x Tree)) (= (tremove-all x nil) x))) -(assert (forall ((x Tree) (n Nat) (l Lst)) (= (tremove-all x (cons n l)) (tremove-all (tremove x n) l)))) - -(declare-fun tcontains (Tree Nat) Bool) -(assert (forall ((i Nat)) (not (tcontains leaf i)))) -(assert (forall ((d Nat) (l Tree) (r Tree) (i Nat)) (= (tcontains (node d l r) i) (or (= d i) (tcontains l i) (tcontains r i))))) - -(declare-fun tsorted (Tree) Bool) -(assert (tsorted leaf)) -(assert (forall ((d Nat) (l Tree) (r Tree)) (= (tsorted (node d l r)) (and (tsorted l) (tsorted r) - (forall ((x Nat)) (=> (tcontains l x) (leq x d))) - (forall ((x Nat)) (=> (tcontains r x) (less d x))))))) - -(declare-fun tmember (Tree Nat) Bool) -(assert (forall ((x Nat)) (not (tmember leaf x)))) -(assert (forall ((d Nat) (l Tree) (r Tree) (i Nat)) (= (tmember (node d l r) i) (ite (= i d) true (tmember (ite (less d i) r l) i))))) - -(declare-fun content (Tree) Lst) -(assert (= (content leaf) nil)) -(assert (forall ((d Nat) (l Tree) (r Tree)) (= (content (node d l r)) (append (content l) (cons d (content r)))))) - -; proven -(assert -(forall ((t Tree) (n Nat)) (= (tsize (tinsert t n)) (succ (tsize t)))) ; G-bsearch-tree-1 -) -(assert -(forall ((l Lst) (t Tree)) (leq (tsize t) (tsize (tinsert-all t l)))) ; G-bsearch-tree-2 -) -(assert -(forall ((l Lst) (t Tree)) (= (tsize (tinsert-all t l)) (plus (tsize t) (len l)))) ; G-bsearch-tree-3 -) -(assert -(forall ((t Tree) (n Nat)) (leq (tsize (tremove t n)) (tsize t))) ; G-bsearch-tree-4 -) -(assert -(forall ((l Lst) (t Tree)) (leq (tsize (tremove-all t l)) (tsize t))) ; G-bsearch-tree-5 -) -(assert -(forall ((x Tree) (i Nat)) (tcontains (tinsert x i) i)) ; G-bsearch-tree-6 -) -(assert -(forall ((i Nat) (x Tree) (j Nat)) (= (or (= i j) (tcontains x j)) (tcontains (tinsert x i) j))) ; G-bsearch-tree-7 -) - -; conjecture -(assert (not -(forall ((x Tree) (i Nat)) (=> (tsorted x) (tsorted (tinsert x i)))) ; G-bsearch-tree-8 -)) -(check-sat) diff --git a/bench_adt/LEON/bsearch-tree-goal9.smt2 b/bench_adt/LEON/bsearch-tree-goal9.smt2 deleted file mode 100644 index 26f81fbf7..000000000 --- a/bench_adt/LEON/bsearch-tree-goal9.smt2 +++ /dev/null @@ -1,111 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -(declare-fun nmax (Nat Nat) Nat) -(assert (forall ((n Nat) (m Nat)) (= (nmax n m) (ite (less n m) m n)))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Nat) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun mem (Nat Lst) Bool) -(assert (forall ((x Nat)) (not (mem x nil)))) -(assert (forall ((x Nat) (y Nat) (z Lst)) (= (mem x (cons y z)) (or (= x y) (mem x z))))) - -; (binary search) tree -(declare-datatypes () ((Tree (node (data Nat) (left Tree) (right Tree)) (leaf)))) - -(declare-fun tinsert (Tree Nat) Tree) -(assert (forall ((i Nat)) (= (tinsert leaf i) (node i leaf leaf)))) -(assert (forall ((r Tree) (l Tree) (d Nat) (i Nat)) (= (tinsert (node d l r) i) (ite (less d i) (node d l (tinsert r i)) (node d (tinsert l i) r))))) - -(declare-fun height (Tree) Nat) -(assert (= (height leaf) zero)) -(assert (forall ((x Nat) (y Tree) (z Tree)) (= (height (node x y z)) (succ (nmax (height y) (height z)))))) - -(declare-fun tinsert-all (Tree Lst) Tree) -(assert (forall ((x Tree)) (= (tinsert-all x nil) x))) -(assert (forall ((x Tree) (n Nat) (l Lst)) (= (tinsert-all x (cons n l)) (tinsert (tinsert-all x l) n)))) - -(declare-fun tsize (Tree) Nat) -(assert (= (tsize leaf) zero)) -(assert (forall ((x Nat) (l Tree) (r Tree)) (= (tsize (node x l r)) (succ (plus (tsize l) (tsize r)))))) - -(declare-fun tremove (Tree Nat) Tree) -(assert (forall ((i Nat)) (= (tremove leaf i) leaf))) -(assert (forall ((i Nat) (d Nat) (l Tree) (r Tree)) (=> (less i d) (= (tremove (node d l r) i) (node d (tremove l i) r))))) -(assert (forall ((i Nat) (d Nat) (l Tree) (r Tree)) (=> (less d i) (= (tremove (node d l r) i) (node d l (tremove r i)))))) -(assert (forall ((d Nat) (r Tree)) (= (tremove (node d leaf r) d) r))) -(assert (forall ((d Nat) (ld Nat) (ll Tree) (lr Tree) (r Tree)) (= (tremove (node d (node ld ll lr) r) d) (node ld (tremove (node ld ll lr) ld) r)))) - -(declare-fun tremove-all (Tree Lst) Tree) -(assert (forall ((x Tree)) (= (tremove-all x nil) x))) -(assert (forall ((x Tree) (n Nat) (l Lst)) (= (tremove-all x (cons n l)) (tremove-all (tremove x n) l)))) - -(declare-fun tcontains (Tree Nat) Bool) -(assert (forall ((i Nat)) (not (tcontains leaf i)))) -(assert (forall ((d Nat) (l Tree) (r Tree) (i Nat)) (= (tcontains (node d l r) i) (or (= d i) (tcontains l i) (tcontains r i))))) - -(declare-fun tsorted (Tree) Bool) -(assert (tsorted leaf)) -(assert (forall ((d Nat) (l Tree) (r Tree)) (= (tsorted (node d l r)) (and (tsorted l) (tsorted r) - (forall ((x Nat)) (=> (tcontains l x) (leq x d))) - (forall ((x Nat)) (=> (tcontains r x) (less d x))))))) - -(declare-fun tmember (Tree Nat) Bool) -(assert (forall ((x Nat)) (not (tmember leaf x)))) -(assert (forall ((d Nat) (l Tree) (r Tree) (i Nat)) (= (tmember (node d l r) i) (ite (= i d) true (tmember (ite (less d i) r l) i))))) - -(declare-fun content (Tree) Lst) -(assert (= (content leaf) nil)) -(assert (forall ((d Nat) (l Tree) (r Tree)) (= (content (node d l r)) (append (content l) (cons d (content r)))))) - -; proven -(assert -(forall ((t Tree) (n Nat)) (= (tsize (tinsert t n)) (succ (tsize t)))) ; G-bsearch-tree-1 -) -(assert -(forall ((l Lst) (t Tree)) (leq (tsize t) (tsize (tinsert-all t l)))) ; G-bsearch-tree-2 -) -(assert -(forall ((l Lst) (t Tree)) (= (tsize (tinsert-all t l)) (plus (tsize t) (len l)))) ; G-bsearch-tree-3 -) -(assert -(forall ((t Tree) (n Nat)) (leq (tsize (tremove t n)) (tsize t))) ; G-bsearch-tree-4 -) -(assert -(forall ((l Lst) (t Tree)) (leq (tsize (tremove-all t l)) (tsize t))) ; G-bsearch-tree-5 -) -(assert -(forall ((x Tree) (i Nat)) (tcontains (tinsert x i) i)) ; G-bsearch-tree-6 -) -(assert -(forall ((i Nat) (x Tree) (j Nat)) (= (or (= i j) (tcontains x j)) (tcontains (tinsert x i) j))) ; G-bsearch-tree-7 -) -(assert -(forall ((x Tree) (i Nat)) (=> (tsorted x) (tsorted (tinsert x i)))) ; G-bsearch-tree-8 -) - -; conjecture -(assert (not -(forall ((x Tree) (i Nat)) (tmember (tinsert x i) i)) ; G-bsearch-tree-9 -)) -(check-sat) diff --git a/bench_adt/LEON/heap-goal1.smt2 b/bench_adt/LEON/heap-goal1.smt2 deleted file mode 100644 index 3ea42f428..000000000 --- a/bench_adt/LEON/heap-goal1.smt2 +++ /dev/null @@ -1,91 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun rsorted (Lst) Bool) -(assert (rsorted nil)) -(assert (forall ((x Nat)) (rsorted (cons x nil)))) -(assert (forall ((x Nat) (z Nat) (y Lst)) (= (rsorted (cons x (cons z y))) (and (rsorted (cons z y)) (leq z x))))) - -(declare-fun sorted (Lst) Bool) -(assert (sorted nil)) -(assert (forall ((x Nat)) (sorted (cons x nil)))) -(assert (forall ((x Nat) (z Nat) (y Lst)) (= (sorted (cons x (cons z y))) (and (rsorted (cons z y)) (leq x z))))) - -; heaps -(declare-datatypes () ((Heap (hleaf) (heap (rk Nat) (value Nat) (hleft Heap) (hright Heap))))) - -(declare-fun rightHeight (Heap) Nat) -(assert (= (rightHeight hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (rightHeight (heap k v l r)) (succ (rightHeight r))))) - -(declare-fun rank (Heap) Nat) -(assert (= (rank hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (rank (heap k v l r)) k))) - -(declare-fun hasLeftistProperty (Heap) Bool) -(assert (hasLeftistProperty hleaf)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (hasLeftistProperty (heap k v l r)) (and (hasLeftistProperty l) (hasLeftistProperty r) - (leq (rightHeight r) (rightHeight l)) - (= k (succ (rightHeight r))))))) - -(declare-fun hsize (Heap) Nat) -(assert (= (hsize hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (hsize (heap k v l r)) (succ (plus (hsize l) (hsize r)))))) - -(declare-fun mergea (Nat Heap Heap) Heap) -(assert (forall ((v Nat) (l Heap) (r Heap)) (= (mergea v l r) (ite (leq (rank r) (rank l)) (heap (succ (rank r)) v l r) (heap (succ (rank l)) v r l))))) - -(declare-fun merge (Heap Heap) Heap) -(assert (forall ((h Heap)) (= (merge h hleaf) h))) -(assert (forall ((h Heap)) (= (merge hleaf h) h))) -(assert (forall ((k1 Nat) (v1 Nat) (l1 Heap) (r1 Heap) (k2 Nat) (v2 Nat) (l2 Heap) (r2 Heap)) (= (merge (heap k1 v1 l1 r1) (heap k2 v2 l2 r2)) - (ite (less v2 v1) - (mergea v1 l1 (merge r1 (heap k2 v2 l2 r2))) - (mergea v2 l2 (merge (heap k1 v1 l1 r1) r2)))))) - -(declare-fun hinsert (Heap Nat) Heap) -(assert (forall ((h Heap) (n Nat)) (= (hinsert h n) (merge (heap (succ zero) n hleaf hleaf) h)))) - -(declare-fun hinsert-all (Lst Heap) Heap) -(assert (forall ((h Heap)) (= (hinsert-all nil h) h))) -(assert (forall ((h Heap) (n Nat) (l Lst)) (= (hinsert-all (cons n l) h) (hinsert (hinsert-all l h) n)))) - -(declare-fun qheapsorta (Heap Lst) Lst) -(assert (forall ((l Lst)) (= (qheapsorta hleaf l) l))) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap) (x Lst)) (= (qheapsorta (heap k v l r) x) (qheapsorta (merge l r) (cons v x))))) - -(declare-fun qheapsort (Lst) Lst) -(assert (forall ((l Lst)) (= (qheapsort l) (qheapsorta (hinsert-all l hleaf) nil)))) - -(declare-fun heapsorta (Heap) Lst) -(assert (= (heapsorta hleaf) nil)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (heapsorta (heap k v l r)) (cons v (heapsorta (merge l r)))))) - -(declare-fun heapsort (Lst) Lst) -(assert (forall ((l Lst)) (= (heapsort l) (heapsorta (hinsert-all l hleaf))))) - -; proven - -; conjecture -(assert (not -(forall ((x Heap) (n Nat)) (=> (hasLeftistProperty x) (hasLeftistProperty (hinsert x n)))) ; G-heap-1 -)) -(check-sat) diff --git a/bench_adt/LEON/heap-goal10.smt2 b/bench_adt/LEON/heap-goal10.smt2 deleted file mode 100644 index 53f02072e..000000000 --- a/bench_adt/LEON/heap-goal10.smt2 +++ /dev/null @@ -1,118 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun rsorted (Lst) Bool) -(assert (rsorted nil)) -(assert (forall ((x Nat)) (rsorted (cons x nil)))) -(assert (forall ((x Nat) (z Nat) (y Lst)) (= (rsorted (cons x (cons z y))) (and (rsorted (cons z y)) (leq z x))))) - -(declare-fun sorted (Lst) Bool) -(assert (sorted nil)) -(assert (forall ((x Nat)) (sorted (cons x nil)))) -(assert (forall ((x Nat) (z Nat) (y Lst)) (= (sorted (cons x (cons z y))) (and (rsorted (cons z y)) (leq x z))))) - -; heaps -(declare-datatypes () ((Heap (hleaf) (heap (rk Nat) (value Nat) (hleft Heap) (hright Heap))))) - -(declare-fun rightHeight (Heap) Nat) -(assert (= (rightHeight hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (rightHeight (heap k v l r)) (succ (rightHeight r))))) - -(declare-fun rank (Heap) Nat) -(assert (= (rank hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (rank (heap k v l r)) k))) - -(declare-fun hasLeftistProperty (Heap) Bool) -(assert (hasLeftistProperty hleaf)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (hasLeftistProperty (heap k v l r)) (and (hasLeftistProperty l) (hasLeftistProperty r) - (leq (rightHeight r) (rightHeight l)) - (= k (succ (rightHeight r))))))) - -(declare-fun hsize (Heap) Nat) -(assert (= (hsize hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (hsize (heap k v l r)) (succ (plus (hsize l) (hsize r)))))) - -(declare-fun mergea (Nat Heap Heap) Heap) -(assert (forall ((v Nat) (l Heap) (r Heap)) (= (mergea v l r) (ite (leq (rank r) (rank l)) (heap (succ (rank r)) v l r) (heap (succ (rank l)) v r l))))) - -(declare-fun merge (Heap Heap) Heap) -(assert (forall ((h Heap)) (= (merge h hleaf) h))) -(assert (forall ((h Heap)) (= (merge hleaf h) h))) -(assert (forall ((k1 Nat) (v1 Nat) (l1 Heap) (r1 Heap) (k2 Nat) (v2 Nat) (l2 Heap) (r2 Heap)) (= (merge (heap k1 v1 l1 r1) (heap k2 v2 l2 r2)) - (ite (less v2 v1) - (mergea v1 l1 (merge r1 (heap k2 v2 l2 r2))) - (mergea v2 l2 (merge (heap k1 v1 l1 r1) r2)))))) - -(declare-fun hinsert (Heap Nat) Heap) -(assert (forall ((h Heap) (n Nat)) (= (hinsert h n) (merge (heap (succ zero) n hleaf hleaf) h)))) - -(declare-fun hinsert-all (Lst Heap) Heap) -(assert (forall ((h Heap)) (= (hinsert-all nil h) h))) -(assert (forall ((h Heap) (n Nat) (l Lst)) (= (hinsert-all (cons n l) h) (hinsert (hinsert-all l h) n)))) - -(declare-fun qheapsorta (Heap Lst) Lst) -(assert (forall ((l Lst)) (= (qheapsorta hleaf l) l))) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap) (x Lst)) (= (qheapsorta (heap k v l r) x) (qheapsorta (merge l r) (cons v x))))) - -(declare-fun qheapsort (Lst) Lst) -(assert (forall ((l Lst)) (= (qheapsort l) (qheapsorta (hinsert-all l hleaf) nil)))) - -(declare-fun heapsorta (Heap) Lst) -(assert (= (heapsorta hleaf) nil)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (heapsorta (heap k v l r)) (cons v (heapsorta (merge l r)))))) - -(declare-fun heapsort (Lst) Lst) -(assert (forall ((l Lst)) (= (heapsort l) (heapsorta (hinsert-all l hleaf))))) - -; proven -(assert -(forall ((x Heap) (n Nat)) (=> (hasLeftistProperty x) (hasLeftistProperty (hinsert x n)))) ; G-heap-1 -) -(assert -(forall ((n Lst) (x Heap)) (=> (hasLeftistProperty x) (hasLeftistProperty (hinsert-all n x)))) ; G-heap-2 -) -(assert -(forall ((v Nat) (x Heap) (y Heap)) (=> (and (hasLeftistProperty x) (hasLeftistProperty y)) (hasLeftistProperty (mergea v x y)))) ; G-heap-3 -) -(assert -(forall ((x Heap) (y Heap)) (=> (and (hasLeftistProperty x) (hasLeftistProperty y)) (hasLeftistProperty (merge x y)))) ; G-heap-4 -) -(assert -(forall ((l Lst)) (hasLeftistProperty (hinsert-all l hleaf))) ; G-heap-5 -) -(assert -(forall ((v Nat) (x Heap) (y Heap)) (=> (and (hasLeftistProperty x) (hasLeftistProperty y)) (= (hsize (mergea v x y)) (succ (plus (hsize x) (hsize y)))))) ; G-heap-6 -) -(assert -(forall ((x Heap) (y Heap)) (=> (and (hasLeftistProperty x) (hasLeftistProperty y)) (= (hsize (merge x y)) (plus (hsize x) (hsize y))))) ; G-heap-7 -) -(assert -(forall ((x Heap) (n Nat)) (=> (hasLeftistProperty x) (= (hsize (hinsert x n)) (succ (hsize x))))) ; G-heap-8 -) -(assert -(forall ((l Lst) (x Heap)) (=> (hasLeftistProperty x) (= (hsize (hinsert-all l x)) (plus (hsize x) (len l))))) ; G-heap-9 -) - -; conjecture -(assert (not -(forall ((x Heap)) (=> (hasLeftistProperty x) (= (len (heapsorta x)) (hsize x)))) ; G-heap-10 -)) -(check-sat) diff --git a/bench_adt/LEON/heap-goal11.smt2 b/bench_adt/LEON/heap-goal11.smt2 deleted file mode 100644 index 30a74dadf..000000000 --- a/bench_adt/LEON/heap-goal11.smt2 +++ /dev/null @@ -1,121 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun rsorted (Lst) Bool) -(assert (rsorted nil)) -(assert (forall ((x Nat)) (rsorted (cons x nil)))) -(assert (forall ((x Nat) (z Nat) (y Lst)) (= (rsorted (cons x (cons z y))) (and (rsorted (cons z y)) (leq z x))))) - -(declare-fun sorted (Lst) Bool) -(assert (sorted nil)) -(assert (forall ((x Nat)) (sorted (cons x nil)))) -(assert (forall ((x Nat) (z Nat) (y Lst)) (= (sorted (cons x (cons z y))) (and (rsorted (cons z y)) (leq x z))))) - -; heaps -(declare-datatypes () ((Heap (hleaf) (heap (rk Nat) (value Nat) (hleft Heap) (hright Heap))))) - -(declare-fun rightHeight (Heap) Nat) -(assert (= (rightHeight hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (rightHeight (heap k v l r)) (succ (rightHeight r))))) - -(declare-fun rank (Heap) Nat) -(assert (= (rank hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (rank (heap k v l r)) k))) - -(declare-fun hasLeftistProperty (Heap) Bool) -(assert (hasLeftistProperty hleaf)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (hasLeftistProperty (heap k v l r)) (and (hasLeftistProperty l) (hasLeftistProperty r) - (leq (rightHeight r) (rightHeight l)) - (= k (succ (rightHeight r))))))) - -(declare-fun hsize (Heap) Nat) -(assert (= (hsize hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (hsize (heap k v l r)) (succ (plus (hsize l) (hsize r)))))) - -(declare-fun mergea (Nat Heap Heap) Heap) -(assert (forall ((v Nat) (l Heap) (r Heap)) (= (mergea v l r) (ite (leq (rank r) (rank l)) (heap (succ (rank r)) v l r) (heap (succ (rank l)) v r l))))) - -(declare-fun merge (Heap Heap) Heap) -(assert (forall ((h Heap)) (= (merge h hleaf) h))) -(assert (forall ((h Heap)) (= (merge hleaf h) h))) -(assert (forall ((k1 Nat) (v1 Nat) (l1 Heap) (r1 Heap) (k2 Nat) (v2 Nat) (l2 Heap) (r2 Heap)) (= (merge (heap k1 v1 l1 r1) (heap k2 v2 l2 r2)) - (ite (less v2 v1) - (mergea v1 l1 (merge r1 (heap k2 v2 l2 r2))) - (mergea v2 l2 (merge (heap k1 v1 l1 r1) r2)))))) - -(declare-fun hinsert (Heap Nat) Heap) -(assert (forall ((h Heap) (n Nat)) (= (hinsert h n) (merge (heap (succ zero) n hleaf hleaf) h)))) - -(declare-fun hinsert-all (Lst Heap) Heap) -(assert (forall ((h Heap)) (= (hinsert-all nil h) h))) -(assert (forall ((h Heap) (n Nat) (l Lst)) (= (hinsert-all (cons n l) h) (hinsert (hinsert-all l h) n)))) - -(declare-fun qheapsorta (Heap Lst) Lst) -(assert (forall ((l Lst)) (= (qheapsorta hleaf l) l))) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap) (x Lst)) (= (qheapsorta (heap k v l r) x) (qheapsorta (merge l r) (cons v x))))) - -(declare-fun qheapsort (Lst) Lst) -(assert (forall ((l Lst)) (= (qheapsort l) (qheapsorta (hinsert-all l hleaf) nil)))) - -(declare-fun heapsorta (Heap) Lst) -(assert (= (heapsorta hleaf) nil)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (heapsorta (heap k v l r)) (cons v (heapsorta (merge l r)))))) - -(declare-fun heapsort (Lst) Lst) -(assert (forall ((l Lst)) (= (heapsort l) (heapsorta (hinsert-all l hleaf))))) - -; proven -(assert -(forall ((x Heap) (n Nat)) (=> (hasLeftistProperty x) (hasLeftistProperty (hinsert x n)))) ; G-heap-1 -) -(assert -(forall ((n Lst) (x Heap)) (=> (hasLeftistProperty x) (hasLeftistProperty (hinsert-all n x)))) ; G-heap-2 -) -(assert -(forall ((v Nat) (x Heap) (y Heap)) (=> (and (hasLeftistProperty x) (hasLeftistProperty y)) (hasLeftistProperty (mergea v x y)))) ; G-heap-3 -) -(assert -(forall ((x Heap) (y Heap)) (=> (and (hasLeftistProperty x) (hasLeftistProperty y)) (hasLeftistProperty (merge x y)))) ; G-heap-4 -) -(assert -(forall ((l Lst)) (hasLeftistProperty (hinsert-all l hleaf))) ; G-heap-5 -) -(assert -(forall ((v Nat) (x Heap) (y Heap)) (=> (and (hasLeftistProperty x) (hasLeftistProperty y)) (= (hsize (mergea v x y)) (succ (plus (hsize x) (hsize y)))))) ; G-heap-6 -) -(assert -(forall ((x Heap) (y Heap)) (=> (and (hasLeftistProperty x) (hasLeftistProperty y)) (= (hsize (merge x y)) (plus (hsize x) (hsize y))))) ; G-heap-7 -) -(assert -(forall ((x Heap) (n Nat)) (=> (hasLeftistProperty x) (= (hsize (hinsert x n)) (succ (hsize x))))) ; G-heap-8 -) -(assert -(forall ((l Lst) (x Heap)) (=> (hasLeftistProperty x) (= (hsize (hinsert-all l x)) (plus (hsize x) (len l))))) ; G-heap-9 -) -(assert -(forall ((x Heap)) (=> (hasLeftistProperty x) (= (len (heapsorta x)) (hsize x)))) ; G-heap-10 -) - -; conjecture -(assert (not -(forall ((l Lst)) (sorted (heapsort l))) ; G-heap-11 -)) -(check-sat) diff --git a/bench_adt/LEON/heap-goal12.smt2 b/bench_adt/LEON/heap-goal12.smt2 deleted file mode 100644 index ed834a8a0..000000000 --- a/bench_adt/LEON/heap-goal12.smt2 +++ /dev/null @@ -1,124 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun rsorted (Lst) Bool) -(assert (rsorted nil)) -(assert (forall ((x Nat)) (rsorted (cons x nil)))) -(assert (forall ((x Nat) (z Nat) (y Lst)) (= (rsorted (cons x (cons z y))) (and (rsorted (cons z y)) (leq z x))))) - -(declare-fun sorted (Lst) Bool) -(assert (sorted nil)) -(assert (forall ((x Nat)) (sorted (cons x nil)))) -(assert (forall ((x Nat) (z Nat) (y Lst)) (= (sorted (cons x (cons z y))) (and (rsorted (cons z y)) (leq x z))))) - -; heaps -(declare-datatypes () ((Heap (hleaf) (heap (rk Nat) (value Nat) (hleft Heap) (hright Heap))))) - -(declare-fun rightHeight (Heap) Nat) -(assert (= (rightHeight hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (rightHeight (heap k v l r)) (succ (rightHeight r))))) - -(declare-fun rank (Heap) Nat) -(assert (= (rank hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (rank (heap k v l r)) k))) - -(declare-fun hasLeftistProperty (Heap) Bool) -(assert (hasLeftistProperty hleaf)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (hasLeftistProperty (heap k v l r)) (and (hasLeftistProperty l) (hasLeftistProperty r) - (leq (rightHeight r) (rightHeight l)) - (= k (succ (rightHeight r))))))) - -(declare-fun hsize (Heap) Nat) -(assert (= (hsize hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (hsize (heap k v l r)) (succ (plus (hsize l) (hsize r)))))) - -(declare-fun mergea (Nat Heap Heap) Heap) -(assert (forall ((v Nat) (l Heap) (r Heap)) (= (mergea v l r) (ite (leq (rank r) (rank l)) (heap (succ (rank r)) v l r) (heap (succ (rank l)) v r l))))) - -(declare-fun merge (Heap Heap) Heap) -(assert (forall ((h Heap)) (= (merge h hleaf) h))) -(assert (forall ((h Heap)) (= (merge hleaf h) h))) -(assert (forall ((k1 Nat) (v1 Nat) (l1 Heap) (r1 Heap) (k2 Nat) (v2 Nat) (l2 Heap) (r2 Heap)) (= (merge (heap k1 v1 l1 r1) (heap k2 v2 l2 r2)) - (ite (less v2 v1) - (mergea v1 l1 (merge r1 (heap k2 v2 l2 r2))) - (mergea v2 l2 (merge (heap k1 v1 l1 r1) r2)))))) - -(declare-fun hinsert (Heap Nat) Heap) -(assert (forall ((h Heap) (n Nat)) (= (hinsert h n) (merge (heap (succ zero) n hleaf hleaf) h)))) - -(declare-fun hinsert-all (Lst Heap) Heap) -(assert (forall ((h Heap)) (= (hinsert-all nil h) h))) -(assert (forall ((h Heap) (n Nat) (l Lst)) (= (hinsert-all (cons n l) h) (hinsert (hinsert-all l h) n)))) - -(declare-fun qheapsorta (Heap Lst) Lst) -(assert (forall ((l Lst)) (= (qheapsorta hleaf l) l))) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap) (x Lst)) (= (qheapsorta (heap k v l r) x) (qheapsorta (merge l r) (cons v x))))) - -(declare-fun qheapsort (Lst) Lst) -(assert (forall ((l Lst)) (= (qheapsort l) (qheapsorta (hinsert-all l hleaf) nil)))) - -(declare-fun heapsorta (Heap) Lst) -(assert (= (heapsorta hleaf) nil)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (heapsorta (heap k v l r)) (cons v (heapsorta (merge l r)))))) - -(declare-fun heapsort (Lst) Lst) -(assert (forall ((l Lst)) (= (heapsort l) (heapsorta (hinsert-all l hleaf))))) - -; proven -(assert -(forall ((x Heap) (n Nat)) (=> (hasLeftistProperty x) (hasLeftistProperty (hinsert x n)))) ; G-heap-1 -) -(assert -(forall ((n Lst) (x Heap)) (=> (hasLeftistProperty x) (hasLeftistProperty (hinsert-all n x)))) ; G-heap-2 -) -(assert -(forall ((v Nat) (x Heap) (y Heap)) (=> (and (hasLeftistProperty x) (hasLeftistProperty y)) (hasLeftistProperty (mergea v x y)))) ; G-heap-3 -) -(assert -(forall ((x Heap) (y Heap)) (=> (and (hasLeftistProperty x) (hasLeftistProperty y)) (hasLeftistProperty (merge x y)))) ; G-heap-4 -) -(assert -(forall ((l Lst)) (hasLeftistProperty (hinsert-all l hleaf))) ; G-heap-5 -) -(assert -(forall ((v Nat) (x Heap) (y Heap)) (=> (and (hasLeftistProperty x) (hasLeftistProperty y)) (= (hsize (mergea v x y)) (succ (plus (hsize x) (hsize y)))))) ; G-heap-6 -) -(assert -(forall ((x Heap) (y Heap)) (=> (and (hasLeftistProperty x) (hasLeftistProperty y)) (= (hsize (merge x y)) (plus (hsize x) (hsize y))))) ; G-heap-7 -) -(assert -(forall ((x Heap) (n Nat)) (=> (hasLeftistProperty x) (= (hsize (hinsert x n)) (succ (hsize x))))) ; G-heap-8 -) -(assert -(forall ((l Lst) (x Heap)) (=> (hasLeftistProperty x) (= (hsize (hinsert-all l x)) (plus (hsize x) (len l))))) ; G-heap-9 -) -(assert -(forall ((x Heap)) (=> (hasLeftistProperty x) (= (len (heapsorta x)) (hsize x)))) ; G-heap-10 -) -(assert -(forall ((l Lst)) (sorted (heapsort l))) ; G-heap-11 -) - -; conjecture -(assert (not -(forall ((x Heap) (l Lst) (v Nat)) (=> (hasLeftistProperty x) (= (len (qheapsorta x (cons v l))) (succ (len (qheapsorta x l)))))) ; G-heap-12 -)) -(check-sat) diff --git a/bench_adt/LEON/heap-goal13.smt2 b/bench_adt/LEON/heap-goal13.smt2 deleted file mode 100644 index 8b62bc439..000000000 --- a/bench_adt/LEON/heap-goal13.smt2 +++ /dev/null @@ -1,127 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun rsorted (Lst) Bool) -(assert (rsorted nil)) -(assert (forall ((x Nat)) (rsorted (cons x nil)))) -(assert (forall ((x Nat) (z Nat) (y Lst)) (= (rsorted (cons x (cons z y))) (and (rsorted (cons z y)) (leq z x))))) - -(declare-fun sorted (Lst) Bool) -(assert (sorted nil)) -(assert (forall ((x Nat)) (sorted (cons x nil)))) -(assert (forall ((x Nat) (z Nat) (y Lst)) (= (sorted (cons x (cons z y))) (and (rsorted (cons z y)) (leq x z))))) - -; heaps -(declare-datatypes () ((Heap (hleaf) (heap (rk Nat) (value Nat) (hleft Heap) (hright Heap))))) - -(declare-fun rightHeight (Heap) Nat) -(assert (= (rightHeight hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (rightHeight (heap k v l r)) (succ (rightHeight r))))) - -(declare-fun rank (Heap) Nat) -(assert (= (rank hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (rank (heap k v l r)) k))) - -(declare-fun hasLeftistProperty (Heap) Bool) -(assert (hasLeftistProperty hleaf)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (hasLeftistProperty (heap k v l r)) (and (hasLeftistProperty l) (hasLeftistProperty r) - (leq (rightHeight r) (rightHeight l)) - (= k (succ (rightHeight r))))))) - -(declare-fun hsize (Heap) Nat) -(assert (= (hsize hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (hsize (heap k v l r)) (succ (plus (hsize l) (hsize r)))))) - -(declare-fun mergea (Nat Heap Heap) Heap) -(assert (forall ((v Nat) (l Heap) (r Heap)) (= (mergea v l r) (ite (leq (rank r) (rank l)) (heap (succ (rank r)) v l r) (heap (succ (rank l)) v r l))))) - -(declare-fun merge (Heap Heap) Heap) -(assert (forall ((h Heap)) (= (merge h hleaf) h))) -(assert (forall ((h Heap)) (= (merge hleaf h) h))) -(assert (forall ((k1 Nat) (v1 Nat) (l1 Heap) (r1 Heap) (k2 Nat) (v2 Nat) (l2 Heap) (r2 Heap)) (= (merge (heap k1 v1 l1 r1) (heap k2 v2 l2 r2)) - (ite (less v2 v1) - (mergea v1 l1 (merge r1 (heap k2 v2 l2 r2))) - (mergea v2 l2 (merge (heap k1 v1 l1 r1) r2)))))) - -(declare-fun hinsert (Heap Nat) Heap) -(assert (forall ((h Heap) (n Nat)) (= (hinsert h n) (merge (heap (succ zero) n hleaf hleaf) h)))) - -(declare-fun hinsert-all (Lst Heap) Heap) -(assert (forall ((h Heap)) (= (hinsert-all nil h) h))) -(assert (forall ((h Heap) (n Nat) (l Lst)) (= (hinsert-all (cons n l) h) (hinsert (hinsert-all l h) n)))) - -(declare-fun qheapsorta (Heap Lst) Lst) -(assert (forall ((l Lst)) (= (qheapsorta hleaf l) l))) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap) (x Lst)) (= (qheapsorta (heap k v l r) x) (qheapsorta (merge l r) (cons v x))))) - -(declare-fun qheapsort (Lst) Lst) -(assert (forall ((l Lst)) (= (qheapsort l) (qheapsorta (hinsert-all l hleaf) nil)))) - -(declare-fun heapsorta (Heap) Lst) -(assert (= (heapsorta hleaf) nil)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (heapsorta (heap k v l r)) (cons v (heapsorta (merge l r)))))) - -(declare-fun heapsort (Lst) Lst) -(assert (forall ((l Lst)) (= (heapsort l) (heapsorta (hinsert-all l hleaf))))) - -; proven -(assert -(forall ((x Heap) (n Nat)) (=> (hasLeftistProperty x) (hasLeftistProperty (hinsert x n)))) ; G-heap-1 -) -(assert -(forall ((n Lst) (x Heap)) (=> (hasLeftistProperty x) (hasLeftistProperty (hinsert-all n x)))) ; G-heap-2 -) -(assert -(forall ((v Nat) (x Heap) (y Heap)) (=> (and (hasLeftistProperty x) (hasLeftistProperty y)) (hasLeftistProperty (mergea v x y)))) ; G-heap-3 -) -(assert -(forall ((x Heap) (y Heap)) (=> (and (hasLeftistProperty x) (hasLeftistProperty y)) (hasLeftistProperty (merge x y)))) ; G-heap-4 -) -(assert -(forall ((l Lst)) (hasLeftistProperty (hinsert-all l hleaf))) ; G-heap-5 -) -(assert -(forall ((v Nat) (x Heap) (y Heap)) (=> (and (hasLeftistProperty x) (hasLeftistProperty y)) (= (hsize (mergea v x y)) (succ (plus (hsize x) (hsize y)))))) ; G-heap-6 -) -(assert -(forall ((x Heap) (y Heap)) (=> (and (hasLeftistProperty x) (hasLeftistProperty y)) (= (hsize (merge x y)) (plus (hsize x) (hsize y))))) ; G-heap-7 -) -(assert -(forall ((x Heap) (n Nat)) (=> (hasLeftistProperty x) (= (hsize (hinsert x n)) (succ (hsize x))))) ; G-heap-8 -) -(assert -(forall ((l Lst) (x Heap)) (=> (hasLeftistProperty x) (= (hsize (hinsert-all l x)) (plus (hsize x) (len l))))) ; G-heap-9 -) -(assert -(forall ((x Heap)) (=> (hasLeftistProperty x) (= (len (heapsorta x)) (hsize x)))) ; G-heap-10 -) -(assert -(forall ((l Lst)) (sorted (heapsort l))) ; G-heap-11 -) -(assert -(forall ((x Heap) (l Lst) (v Nat)) (=> (hasLeftistProperty x) (= (len (qheapsorta x (cons v l))) (succ (len (qheapsorta x l)))))) ; G-heap-12 -) - -; conjecture -(assert (not -(forall ((l Lst) (x Heap)) (=> (hasLeftistProperty x) (= (len (qheapsorta x l)) (plus (hsize x) (len l))))) ; G-heap-13 -)) -(check-sat) diff --git a/bench_adt/LEON/heap-goal2.smt2 b/bench_adt/LEON/heap-goal2.smt2 deleted file mode 100644 index 9b5b3c54c..000000000 --- a/bench_adt/LEON/heap-goal2.smt2 +++ /dev/null @@ -1,94 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun rsorted (Lst) Bool) -(assert (rsorted nil)) -(assert (forall ((x Nat)) (rsorted (cons x nil)))) -(assert (forall ((x Nat) (z Nat) (y Lst)) (= (rsorted (cons x (cons z y))) (and (rsorted (cons z y)) (leq z x))))) - -(declare-fun sorted (Lst) Bool) -(assert (sorted nil)) -(assert (forall ((x Nat)) (sorted (cons x nil)))) -(assert (forall ((x Nat) (z Nat) (y Lst)) (= (sorted (cons x (cons z y))) (and (rsorted (cons z y)) (leq x z))))) - -; heaps -(declare-datatypes () ((Heap (hleaf) (heap (rk Nat) (value Nat) (hleft Heap) (hright Heap))))) - -(declare-fun rightHeight (Heap) Nat) -(assert (= (rightHeight hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (rightHeight (heap k v l r)) (succ (rightHeight r))))) - -(declare-fun rank (Heap) Nat) -(assert (= (rank hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (rank (heap k v l r)) k))) - -(declare-fun hasLeftistProperty (Heap) Bool) -(assert (hasLeftistProperty hleaf)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (hasLeftistProperty (heap k v l r)) (and (hasLeftistProperty l) (hasLeftistProperty r) - (leq (rightHeight r) (rightHeight l)) - (= k (succ (rightHeight r))))))) - -(declare-fun hsize (Heap) Nat) -(assert (= (hsize hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (hsize (heap k v l r)) (succ (plus (hsize l) (hsize r)))))) - -(declare-fun mergea (Nat Heap Heap) Heap) -(assert (forall ((v Nat) (l Heap) (r Heap)) (= (mergea v l r) (ite (leq (rank r) (rank l)) (heap (succ (rank r)) v l r) (heap (succ (rank l)) v r l))))) - -(declare-fun merge (Heap Heap) Heap) -(assert (forall ((h Heap)) (= (merge h hleaf) h))) -(assert (forall ((h Heap)) (= (merge hleaf h) h))) -(assert (forall ((k1 Nat) (v1 Nat) (l1 Heap) (r1 Heap) (k2 Nat) (v2 Nat) (l2 Heap) (r2 Heap)) (= (merge (heap k1 v1 l1 r1) (heap k2 v2 l2 r2)) - (ite (less v2 v1) - (mergea v1 l1 (merge r1 (heap k2 v2 l2 r2))) - (mergea v2 l2 (merge (heap k1 v1 l1 r1) r2)))))) - -(declare-fun hinsert (Heap Nat) Heap) -(assert (forall ((h Heap) (n Nat)) (= (hinsert h n) (merge (heap (succ zero) n hleaf hleaf) h)))) - -(declare-fun hinsert-all (Lst Heap) Heap) -(assert (forall ((h Heap)) (= (hinsert-all nil h) h))) -(assert (forall ((h Heap) (n Nat) (l Lst)) (= (hinsert-all (cons n l) h) (hinsert (hinsert-all l h) n)))) - -(declare-fun qheapsorta (Heap Lst) Lst) -(assert (forall ((l Lst)) (= (qheapsorta hleaf l) l))) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap) (x Lst)) (= (qheapsorta (heap k v l r) x) (qheapsorta (merge l r) (cons v x))))) - -(declare-fun qheapsort (Lst) Lst) -(assert (forall ((l Lst)) (= (qheapsort l) (qheapsorta (hinsert-all l hleaf) nil)))) - -(declare-fun heapsorta (Heap) Lst) -(assert (= (heapsorta hleaf) nil)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (heapsorta (heap k v l r)) (cons v (heapsorta (merge l r)))))) - -(declare-fun heapsort (Lst) Lst) -(assert (forall ((l Lst)) (= (heapsort l) (heapsorta (hinsert-all l hleaf))))) - -; proven -(assert -(forall ((x Heap) (n Nat)) (=> (hasLeftistProperty x) (hasLeftistProperty (hinsert x n)))) ; G-heap-1 -) - -; conjecture -(assert (not -(forall ((n Lst) (x Heap)) (=> (hasLeftistProperty x) (hasLeftistProperty (hinsert-all n x)))) ; G-heap-2 -)) -(check-sat) diff --git a/bench_adt/LEON/heap-goal3.smt2 b/bench_adt/LEON/heap-goal3.smt2 deleted file mode 100644 index f435cbe0c..000000000 --- a/bench_adt/LEON/heap-goal3.smt2 +++ /dev/null @@ -1,97 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun rsorted (Lst) Bool) -(assert (rsorted nil)) -(assert (forall ((x Nat)) (rsorted (cons x nil)))) -(assert (forall ((x Nat) (z Nat) (y Lst)) (= (rsorted (cons x (cons z y))) (and (rsorted (cons z y)) (leq z x))))) - -(declare-fun sorted (Lst) Bool) -(assert (sorted nil)) -(assert (forall ((x Nat)) (sorted (cons x nil)))) -(assert (forall ((x Nat) (z Nat) (y Lst)) (= (sorted (cons x (cons z y))) (and (rsorted (cons z y)) (leq x z))))) - -; heaps -(declare-datatypes () ((Heap (hleaf) (heap (rk Nat) (value Nat) (hleft Heap) (hright Heap))))) - -(declare-fun rightHeight (Heap) Nat) -(assert (= (rightHeight hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (rightHeight (heap k v l r)) (succ (rightHeight r))))) - -(declare-fun rank (Heap) Nat) -(assert (= (rank hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (rank (heap k v l r)) k))) - -(declare-fun hasLeftistProperty (Heap) Bool) -(assert (hasLeftistProperty hleaf)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (hasLeftistProperty (heap k v l r)) (and (hasLeftistProperty l) (hasLeftistProperty r) - (leq (rightHeight r) (rightHeight l)) - (= k (succ (rightHeight r))))))) - -(declare-fun hsize (Heap) Nat) -(assert (= (hsize hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (hsize (heap k v l r)) (succ (plus (hsize l) (hsize r)))))) - -(declare-fun mergea (Nat Heap Heap) Heap) -(assert (forall ((v Nat) (l Heap) (r Heap)) (= (mergea v l r) (ite (leq (rank r) (rank l)) (heap (succ (rank r)) v l r) (heap (succ (rank l)) v r l))))) - -(declare-fun merge (Heap Heap) Heap) -(assert (forall ((h Heap)) (= (merge h hleaf) h))) -(assert (forall ((h Heap)) (= (merge hleaf h) h))) -(assert (forall ((k1 Nat) (v1 Nat) (l1 Heap) (r1 Heap) (k2 Nat) (v2 Nat) (l2 Heap) (r2 Heap)) (= (merge (heap k1 v1 l1 r1) (heap k2 v2 l2 r2)) - (ite (less v2 v1) - (mergea v1 l1 (merge r1 (heap k2 v2 l2 r2))) - (mergea v2 l2 (merge (heap k1 v1 l1 r1) r2)))))) - -(declare-fun hinsert (Heap Nat) Heap) -(assert (forall ((h Heap) (n Nat)) (= (hinsert h n) (merge (heap (succ zero) n hleaf hleaf) h)))) - -(declare-fun hinsert-all (Lst Heap) Heap) -(assert (forall ((h Heap)) (= (hinsert-all nil h) h))) -(assert (forall ((h Heap) (n Nat) (l Lst)) (= (hinsert-all (cons n l) h) (hinsert (hinsert-all l h) n)))) - -(declare-fun qheapsorta (Heap Lst) Lst) -(assert (forall ((l Lst)) (= (qheapsorta hleaf l) l))) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap) (x Lst)) (= (qheapsorta (heap k v l r) x) (qheapsorta (merge l r) (cons v x))))) - -(declare-fun qheapsort (Lst) Lst) -(assert (forall ((l Lst)) (= (qheapsort l) (qheapsorta (hinsert-all l hleaf) nil)))) - -(declare-fun heapsorta (Heap) Lst) -(assert (= (heapsorta hleaf) nil)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (heapsorta (heap k v l r)) (cons v (heapsorta (merge l r)))))) - -(declare-fun heapsort (Lst) Lst) -(assert (forall ((l Lst)) (= (heapsort l) (heapsorta (hinsert-all l hleaf))))) - -; proven -(assert -(forall ((x Heap) (n Nat)) (=> (hasLeftistProperty x) (hasLeftistProperty (hinsert x n)))) ; G-heap-1 -) -(assert -(forall ((n Lst) (x Heap)) (=> (hasLeftistProperty x) (hasLeftistProperty (hinsert-all n x)))) ; G-heap-2 -) - -; conjecture -(assert (not -(forall ((v Nat) (x Heap) (y Heap)) (=> (and (hasLeftistProperty x) (hasLeftistProperty y)) (hasLeftistProperty (mergea v x y)))) ; G-heap-3 -)) -(check-sat) diff --git a/bench_adt/LEON/heap-goal4.smt2 b/bench_adt/LEON/heap-goal4.smt2 deleted file mode 100644 index 2d5e778f1..000000000 --- a/bench_adt/LEON/heap-goal4.smt2 +++ /dev/null @@ -1,100 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun rsorted (Lst) Bool) -(assert (rsorted nil)) -(assert (forall ((x Nat)) (rsorted (cons x nil)))) -(assert (forall ((x Nat) (z Nat) (y Lst)) (= (rsorted (cons x (cons z y))) (and (rsorted (cons z y)) (leq z x))))) - -(declare-fun sorted (Lst) Bool) -(assert (sorted nil)) -(assert (forall ((x Nat)) (sorted (cons x nil)))) -(assert (forall ((x Nat) (z Nat) (y Lst)) (= (sorted (cons x (cons z y))) (and (rsorted (cons z y)) (leq x z))))) - -; heaps -(declare-datatypes () ((Heap (hleaf) (heap (rk Nat) (value Nat) (hleft Heap) (hright Heap))))) - -(declare-fun rightHeight (Heap) Nat) -(assert (= (rightHeight hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (rightHeight (heap k v l r)) (succ (rightHeight r))))) - -(declare-fun rank (Heap) Nat) -(assert (= (rank hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (rank (heap k v l r)) k))) - -(declare-fun hasLeftistProperty (Heap) Bool) -(assert (hasLeftistProperty hleaf)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (hasLeftistProperty (heap k v l r)) (and (hasLeftistProperty l) (hasLeftistProperty r) - (leq (rightHeight r) (rightHeight l)) - (= k (succ (rightHeight r))))))) - -(declare-fun hsize (Heap) Nat) -(assert (= (hsize hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (hsize (heap k v l r)) (succ (plus (hsize l) (hsize r)))))) - -(declare-fun mergea (Nat Heap Heap) Heap) -(assert (forall ((v Nat) (l Heap) (r Heap)) (= (mergea v l r) (ite (leq (rank r) (rank l)) (heap (succ (rank r)) v l r) (heap (succ (rank l)) v r l))))) - -(declare-fun merge (Heap Heap) Heap) -(assert (forall ((h Heap)) (= (merge h hleaf) h))) -(assert (forall ((h Heap)) (= (merge hleaf h) h))) -(assert (forall ((k1 Nat) (v1 Nat) (l1 Heap) (r1 Heap) (k2 Nat) (v2 Nat) (l2 Heap) (r2 Heap)) (= (merge (heap k1 v1 l1 r1) (heap k2 v2 l2 r2)) - (ite (less v2 v1) - (mergea v1 l1 (merge r1 (heap k2 v2 l2 r2))) - (mergea v2 l2 (merge (heap k1 v1 l1 r1) r2)))))) - -(declare-fun hinsert (Heap Nat) Heap) -(assert (forall ((h Heap) (n Nat)) (= (hinsert h n) (merge (heap (succ zero) n hleaf hleaf) h)))) - -(declare-fun hinsert-all (Lst Heap) Heap) -(assert (forall ((h Heap)) (= (hinsert-all nil h) h))) -(assert (forall ((h Heap) (n Nat) (l Lst)) (= (hinsert-all (cons n l) h) (hinsert (hinsert-all l h) n)))) - -(declare-fun qheapsorta (Heap Lst) Lst) -(assert (forall ((l Lst)) (= (qheapsorta hleaf l) l))) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap) (x Lst)) (= (qheapsorta (heap k v l r) x) (qheapsorta (merge l r) (cons v x))))) - -(declare-fun qheapsort (Lst) Lst) -(assert (forall ((l Lst)) (= (qheapsort l) (qheapsorta (hinsert-all l hleaf) nil)))) - -(declare-fun heapsorta (Heap) Lst) -(assert (= (heapsorta hleaf) nil)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (heapsorta (heap k v l r)) (cons v (heapsorta (merge l r)))))) - -(declare-fun heapsort (Lst) Lst) -(assert (forall ((l Lst)) (= (heapsort l) (heapsorta (hinsert-all l hleaf))))) - -; proven -(assert -(forall ((x Heap) (n Nat)) (=> (hasLeftistProperty x) (hasLeftistProperty (hinsert x n)))) ; G-heap-1 -) -(assert -(forall ((n Lst) (x Heap)) (=> (hasLeftistProperty x) (hasLeftistProperty (hinsert-all n x)))) ; G-heap-2 -) -(assert -(forall ((v Nat) (x Heap) (y Heap)) (=> (and (hasLeftistProperty x) (hasLeftistProperty y)) (hasLeftistProperty (mergea v x y)))) ; G-heap-3 -) - -; conjecture -(assert (not -(forall ((x Heap) (y Heap)) (=> (and (hasLeftistProperty x) (hasLeftistProperty y)) (hasLeftistProperty (merge x y)))) ; G-heap-4 -)) -(check-sat) diff --git a/bench_adt/LEON/heap-goal5.smt2 b/bench_adt/LEON/heap-goal5.smt2 deleted file mode 100644 index 386d21e8d..000000000 --- a/bench_adt/LEON/heap-goal5.smt2 +++ /dev/null @@ -1,103 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun rsorted (Lst) Bool) -(assert (rsorted nil)) -(assert (forall ((x Nat)) (rsorted (cons x nil)))) -(assert (forall ((x Nat) (z Nat) (y Lst)) (= (rsorted (cons x (cons z y))) (and (rsorted (cons z y)) (leq z x))))) - -(declare-fun sorted (Lst) Bool) -(assert (sorted nil)) -(assert (forall ((x Nat)) (sorted (cons x nil)))) -(assert (forall ((x Nat) (z Nat) (y Lst)) (= (sorted (cons x (cons z y))) (and (rsorted (cons z y)) (leq x z))))) - -; heaps -(declare-datatypes () ((Heap (hleaf) (heap (rk Nat) (value Nat) (hleft Heap) (hright Heap))))) - -(declare-fun rightHeight (Heap) Nat) -(assert (= (rightHeight hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (rightHeight (heap k v l r)) (succ (rightHeight r))))) - -(declare-fun rank (Heap) Nat) -(assert (= (rank hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (rank (heap k v l r)) k))) - -(declare-fun hasLeftistProperty (Heap) Bool) -(assert (hasLeftistProperty hleaf)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (hasLeftistProperty (heap k v l r)) (and (hasLeftistProperty l) (hasLeftistProperty r) - (leq (rightHeight r) (rightHeight l)) - (= k (succ (rightHeight r))))))) - -(declare-fun hsize (Heap) Nat) -(assert (= (hsize hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (hsize (heap k v l r)) (succ (plus (hsize l) (hsize r)))))) - -(declare-fun mergea (Nat Heap Heap) Heap) -(assert (forall ((v Nat) (l Heap) (r Heap)) (= (mergea v l r) (ite (leq (rank r) (rank l)) (heap (succ (rank r)) v l r) (heap (succ (rank l)) v r l))))) - -(declare-fun merge (Heap Heap) Heap) -(assert (forall ((h Heap)) (= (merge h hleaf) h))) -(assert (forall ((h Heap)) (= (merge hleaf h) h))) -(assert (forall ((k1 Nat) (v1 Nat) (l1 Heap) (r1 Heap) (k2 Nat) (v2 Nat) (l2 Heap) (r2 Heap)) (= (merge (heap k1 v1 l1 r1) (heap k2 v2 l2 r2)) - (ite (less v2 v1) - (mergea v1 l1 (merge r1 (heap k2 v2 l2 r2))) - (mergea v2 l2 (merge (heap k1 v1 l1 r1) r2)))))) - -(declare-fun hinsert (Heap Nat) Heap) -(assert (forall ((h Heap) (n Nat)) (= (hinsert h n) (merge (heap (succ zero) n hleaf hleaf) h)))) - -(declare-fun hinsert-all (Lst Heap) Heap) -(assert (forall ((h Heap)) (= (hinsert-all nil h) h))) -(assert (forall ((h Heap) (n Nat) (l Lst)) (= (hinsert-all (cons n l) h) (hinsert (hinsert-all l h) n)))) - -(declare-fun qheapsorta (Heap Lst) Lst) -(assert (forall ((l Lst)) (= (qheapsorta hleaf l) l))) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap) (x Lst)) (= (qheapsorta (heap k v l r) x) (qheapsorta (merge l r) (cons v x))))) - -(declare-fun qheapsort (Lst) Lst) -(assert (forall ((l Lst)) (= (qheapsort l) (qheapsorta (hinsert-all l hleaf) nil)))) - -(declare-fun heapsorta (Heap) Lst) -(assert (= (heapsorta hleaf) nil)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (heapsorta (heap k v l r)) (cons v (heapsorta (merge l r)))))) - -(declare-fun heapsort (Lst) Lst) -(assert (forall ((l Lst)) (= (heapsort l) (heapsorta (hinsert-all l hleaf))))) - -; proven -(assert -(forall ((x Heap) (n Nat)) (=> (hasLeftistProperty x) (hasLeftistProperty (hinsert x n)))) ; G-heap-1 -) -(assert -(forall ((n Lst) (x Heap)) (=> (hasLeftistProperty x) (hasLeftistProperty (hinsert-all n x)))) ; G-heap-2 -) -(assert -(forall ((v Nat) (x Heap) (y Heap)) (=> (and (hasLeftistProperty x) (hasLeftistProperty y)) (hasLeftistProperty (mergea v x y)))) ; G-heap-3 -) -(assert -(forall ((x Heap) (y Heap)) (=> (and (hasLeftistProperty x) (hasLeftistProperty y)) (hasLeftistProperty (merge x y)))) ; G-heap-4 -) - -; conjecture -(assert (not -(forall ((l Lst)) (hasLeftistProperty (hinsert-all l hleaf))) ; G-heap-5 -)) -(check-sat) diff --git a/bench_adt/LEON/heap-goal6.smt2 b/bench_adt/LEON/heap-goal6.smt2 deleted file mode 100644 index 3a3072017..000000000 --- a/bench_adt/LEON/heap-goal6.smt2 +++ /dev/null @@ -1,106 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun rsorted (Lst) Bool) -(assert (rsorted nil)) -(assert (forall ((x Nat)) (rsorted (cons x nil)))) -(assert (forall ((x Nat) (z Nat) (y Lst)) (= (rsorted (cons x (cons z y))) (and (rsorted (cons z y)) (leq z x))))) - -(declare-fun sorted (Lst) Bool) -(assert (sorted nil)) -(assert (forall ((x Nat)) (sorted (cons x nil)))) -(assert (forall ((x Nat) (z Nat) (y Lst)) (= (sorted (cons x (cons z y))) (and (rsorted (cons z y)) (leq x z))))) - -; heaps -(declare-datatypes () ((Heap (hleaf) (heap (rk Nat) (value Nat) (hleft Heap) (hright Heap))))) - -(declare-fun rightHeight (Heap) Nat) -(assert (= (rightHeight hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (rightHeight (heap k v l r)) (succ (rightHeight r))))) - -(declare-fun rank (Heap) Nat) -(assert (= (rank hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (rank (heap k v l r)) k))) - -(declare-fun hasLeftistProperty (Heap) Bool) -(assert (hasLeftistProperty hleaf)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (hasLeftistProperty (heap k v l r)) (and (hasLeftistProperty l) (hasLeftistProperty r) - (leq (rightHeight r) (rightHeight l)) - (= k (succ (rightHeight r))))))) - -(declare-fun hsize (Heap) Nat) -(assert (= (hsize hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (hsize (heap k v l r)) (succ (plus (hsize l) (hsize r)))))) - -(declare-fun mergea (Nat Heap Heap) Heap) -(assert (forall ((v Nat) (l Heap) (r Heap)) (= (mergea v l r) (ite (leq (rank r) (rank l)) (heap (succ (rank r)) v l r) (heap (succ (rank l)) v r l))))) - -(declare-fun merge (Heap Heap) Heap) -(assert (forall ((h Heap)) (= (merge h hleaf) h))) -(assert (forall ((h Heap)) (= (merge hleaf h) h))) -(assert (forall ((k1 Nat) (v1 Nat) (l1 Heap) (r1 Heap) (k2 Nat) (v2 Nat) (l2 Heap) (r2 Heap)) (= (merge (heap k1 v1 l1 r1) (heap k2 v2 l2 r2)) - (ite (less v2 v1) - (mergea v1 l1 (merge r1 (heap k2 v2 l2 r2))) - (mergea v2 l2 (merge (heap k1 v1 l1 r1) r2)))))) - -(declare-fun hinsert (Heap Nat) Heap) -(assert (forall ((h Heap) (n Nat)) (= (hinsert h n) (merge (heap (succ zero) n hleaf hleaf) h)))) - -(declare-fun hinsert-all (Lst Heap) Heap) -(assert (forall ((h Heap)) (= (hinsert-all nil h) h))) -(assert (forall ((h Heap) (n Nat) (l Lst)) (= (hinsert-all (cons n l) h) (hinsert (hinsert-all l h) n)))) - -(declare-fun qheapsorta (Heap Lst) Lst) -(assert (forall ((l Lst)) (= (qheapsorta hleaf l) l))) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap) (x Lst)) (= (qheapsorta (heap k v l r) x) (qheapsorta (merge l r) (cons v x))))) - -(declare-fun qheapsort (Lst) Lst) -(assert (forall ((l Lst)) (= (qheapsort l) (qheapsorta (hinsert-all l hleaf) nil)))) - -(declare-fun heapsorta (Heap) Lst) -(assert (= (heapsorta hleaf) nil)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (heapsorta (heap k v l r)) (cons v (heapsorta (merge l r)))))) - -(declare-fun heapsort (Lst) Lst) -(assert (forall ((l Lst)) (= (heapsort l) (heapsorta (hinsert-all l hleaf))))) - -; proven -(assert -(forall ((x Heap) (n Nat)) (=> (hasLeftistProperty x) (hasLeftistProperty (hinsert x n)))) ; G-heap-1 -) -(assert -(forall ((n Lst) (x Heap)) (=> (hasLeftistProperty x) (hasLeftistProperty (hinsert-all n x)))) ; G-heap-2 -) -(assert -(forall ((v Nat) (x Heap) (y Heap)) (=> (and (hasLeftistProperty x) (hasLeftistProperty y)) (hasLeftistProperty (mergea v x y)))) ; G-heap-3 -) -(assert -(forall ((x Heap) (y Heap)) (=> (and (hasLeftistProperty x) (hasLeftistProperty y)) (hasLeftistProperty (merge x y)))) ; G-heap-4 -) -(assert -(forall ((l Lst)) (hasLeftistProperty (hinsert-all l hleaf))) ; G-heap-5 -) - -; conjecture -(assert (not -(forall ((v Nat) (x Heap) (y Heap)) (=> (and (hasLeftistProperty x) (hasLeftistProperty y)) (= (hsize (mergea v x y)) (succ (plus (hsize x) (hsize y)))))) ; G-heap-6 -)) -(check-sat) diff --git a/bench_adt/LEON/heap-goal7.smt2 b/bench_adt/LEON/heap-goal7.smt2 deleted file mode 100644 index 8c3714d2d..000000000 --- a/bench_adt/LEON/heap-goal7.smt2 +++ /dev/null @@ -1,109 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun rsorted (Lst) Bool) -(assert (rsorted nil)) -(assert (forall ((x Nat)) (rsorted (cons x nil)))) -(assert (forall ((x Nat) (z Nat) (y Lst)) (= (rsorted (cons x (cons z y))) (and (rsorted (cons z y)) (leq z x))))) - -(declare-fun sorted (Lst) Bool) -(assert (sorted nil)) -(assert (forall ((x Nat)) (sorted (cons x nil)))) -(assert (forall ((x Nat) (z Nat) (y Lst)) (= (sorted (cons x (cons z y))) (and (rsorted (cons z y)) (leq x z))))) - -; heaps -(declare-datatypes () ((Heap (hleaf) (heap (rk Nat) (value Nat) (hleft Heap) (hright Heap))))) - -(declare-fun rightHeight (Heap) Nat) -(assert (= (rightHeight hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (rightHeight (heap k v l r)) (succ (rightHeight r))))) - -(declare-fun rank (Heap) Nat) -(assert (= (rank hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (rank (heap k v l r)) k))) - -(declare-fun hasLeftistProperty (Heap) Bool) -(assert (hasLeftistProperty hleaf)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (hasLeftistProperty (heap k v l r)) (and (hasLeftistProperty l) (hasLeftistProperty r) - (leq (rightHeight r) (rightHeight l)) - (= k (succ (rightHeight r))))))) - -(declare-fun hsize (Heap) Nat) -(assert (= (hsize hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (hsize (heap k v l r)) (succ (plus (hsize l) (hsize r)))))) - -(declare-fun mergea (Nat Heap Heap) Heap) -(assert (forall ((v Nat) (l Heap) (r Heap)) (= (mergea v l r) (ite (leq (rank r) (rank l)) (heap (succ (rank r)) v l r) (heap (succ (rank l)) v r l))))) - -(declare-fun merge (Heap Heap) Heap) -(assert (forall ((h Heap)) (= (merge h hleaf) h))) -(assert (forall ((h Heap)) (= (merge hleaf h) h))) -(assert (forall ((k1 Nat) (v1 Nat) (l1 Heap) (r1 Heap) (k2 Nat) (v2 Nat) (l2 Heap) (r2 Heap)) (= (merge (heap k1 v1 l1 r1) (heap k2 v2 l2 r2)) - (ite (less v2 v1) - (mergea v1 l1 (merge r1 (heap k2 v2 l2 r2))) - (mergea v2 l2 (merge (heap k1 v1 l1 r1) r2)))))) - -(declare-fun hinsert (Heap Nat) Heap) -(assert (forall ((h Heap) (n Nat)) (= (hinsert h n) (merge (heap (succ zero) n hleaf hleaf) h)))) - -(declare-fun hinsert-all (Lst Heap) Heap) -(assert (forall ((h Heap)) (= (hinsert-all nil h) h))) -(assert (forall ((h Heap) (n Nat) (l Lst)) (= (hinsert-all (cons n l) h) (hinsert (hinsert-all l h) n)))) - -(declare-fun qheapsorta (Heap Lst) Lst) -(assert (forall ((l Lst)) (= (qheapsorta hleaf l) l))) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap) (x Lst)) (= (qheapsorta (heap k v l r) x) (qheapsorta (merge l r) (cons v x))))) - -(declare-fun qheapsort (Lst) Lst) -(assert (forall ((l Lst)) (= (qheapsort l) (qheapsorta (hinsert-all l hleaf) nil)))) - -(declare-fun heapsorta (Heap) Lst) -(assert (= (heapsorta hleaf) nil)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (heapsorta (heap k v l r)) (cons v (heapsorta (merge l r)))))) - -(declare-fun heapsort (Lst) Lst) -(assert (forall ((l Lst)) (= (heapsort l) (heapsorta (hinsert-all l hleaf))))) - -; proven -(assert -(forall ((x Heap) (n Nat)) (=> (hasLeftistProperty x) (hasLeftistProperty (hinsert x n)))) ; G-heap-1 -) -(assert -(forall ((n Lst) (x Heap)) (=> (hasLeftistProperty x) (hasLeftistProperty (hinsert-all n x)))) ; G-heap-2 -) -(assert -(forall ((v Nat) (x Heap) (y Heap)) (=> (and (hasLeftistProperty x) (hasLeftistProperty y)) (hasLeftistProperty (mergea v x y)))) ; G-heap-3 -) -(assert -(forall ((x Heap) (y Heap)) (=> (and (hasLeftistProperty x) (hasLeftistProperty y)) (hasLeftistProperty (merge x y)))) ; G-heap-4 -) -(assert -(forall ((l Lst)) (hasLeftistProperty (hinsert-all l hleaf))) ; G-heap-5 -) -(assert -(forall ((v Nat) (x Heap) (y Heap)) (=> (and (hasLeftistProperty x) (hasLeftistProperty y)) (= (hsize (mergea v x y)) (succ (plus (hsize x) (hsize y)))))) ; G-heap-6 -) - -; conjecture -(assert (not -(forall ((x Heap) (y Heap)) (=> (and (hasLeftistProperty x) (hasLeftistProperty y)) (= (hsize (merge x y)) (plus (hsize x) (hsize y))))) ; G-heap-7 -)) -(check-sat) diff --git a/bench_adt/LEON/heap-goal8.smt2 b/bench_adt/LEON/heap-goal8.smt2 deleted file mode 100644 index 9ded3fb6c..000000000 --- a/bench_adt/LEON/heap-goal8.smt2 +++ /dev/null @@ -1,112 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun rsorted (Lst) Bool) -(assert (rsorted nil)) -(assert (forall ((x Nat)) (rsorted (cons x nil)))) -(assert (forall ((x Nat) (z Nat) (y Lst)) (= (rsorted (cons x (cons z y))) (and (rsorted (cons z y)) (leq z x))))) - -(declare-fun sorted (Lst) Bool) -(assert (sorted nil)) -(assert (forall ((x Nat)) (sorted (cons x nil)))) -(assert (forall ((x Nat) (z Nat) (y Lst)) (= (sorted (cons x (cons z y))) (and (rsorted (cons z y)) (leq x z))))) - -; heaps -(declare-datatypes () ((Heap (hleaf) (heap (rk Nat) (value Nat) (hleft Heap) (hright Heap))))) - -(declare-fun rightHeight (Heap) Nat) -(assert (= (rightHeight hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (rightHeight (heap k v l r)) (succ (rightHeight r))))) - -(declare-fun rank (Heap) Nat) -(assert (= (rank hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (rank (heap k v l r)) k))) - -(declare-fun hasLeftistProperty (Heap) Bool) -(assert (hasLeftistProperty hleaf)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (hasLeftistProperty (heap k v l r)) (and (hasLeftistProperty l) (hasLeftistProperty r) - (leq (rightHeight r) (rightHeight l)) - (= k (succ (rightHeight r))))))) - -(declare-fun hsize (Heap) Nat) -(assert (= (hsize hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (hsize (heap k v l r)) (succ (plus (hsize l) (hsize r)))))) - -(declare-fun mergea (Nat Heap Heap) Heap) -(assert (forall ((v Nat) (l Heap) (r Heap)) (= (mergea v l r) (ite (leq (rank r) (rank l)) (heap (succ (rank r)) v l r) (heap (succ (rank l)) v r l))))) - -(declare-fun merge (Heap Heap) Heap) -(assert (forall ((h Heap)) (= (merge h hleaf) h))) -(assert (forall ((h Heap)) (= (merge hleaf h) h))) -(assert (forall ((k1 Nat) (v1 Nat) (l1 Heap) (r1 Heap) (k2 Nat) (v2 Nat) (l2 Heap) (r2 Heap)) (= (merge (heap k1 v1 l1 r1) (heap k2 v2 l2 r2)) - (ite (less v2 v1) - (mergea v1 l1 (merge r1 (heap k2 v2 l2 r2))) - (mergea v2 l2 (merge (heap k1 v1 l1 r1) r2)))))) - -(declare-fun hinsert (Heap Nat) Heap) -(assert (forall ((h Heap) (n Nat)) (= (hinsert h n) (merge (heap (succ zero) n hleaf hleaf) h)))) - -(declare-fun hinsert-all (Lst Heap) Heap) -(assert (forall ((h Heap)) (= (hinsert-all nil h) h))) -(assert (forall ((h Heap) (n Nat) (l Lst)) (= (hinsert-all (cons n l) h) (hinsert (hinsert-all l h) n)))) - -(declare-fun qheapsorta (Heap Lst) Lst) -(assert (forall ((l Lst)) (= (qheapsorta hleaf l) l))) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap) (x Lst)) (= (qheapsorta (heap k v l r) x) (qheapsorta (merge l r) (cons v x))))) - -(declare-fun qheapsort (Lst) Lst) -(assert (forall ((l Lst)) (= (qheapsort l) (qheapsorta (hinsert-all l hleaf) nil)))) - -(declare-fun heapsorta (Heap) Lst) -(assert (= (heapsorta hleaf) nil)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (heapsorta (heap k v l r)) (cons v (heapsorta (merge l r)))))) - -(declare-fun heapsort (Lst) Lst) -(assert (forall ((l Lst)) (= (heapsort l) (heapsorta (hinsert-all l hleaf))))) - -; proven -(assert -(forall ((x Heap) (n Nat)) (=> (hasLeftistProperty x) (hasLeftistProperty (hinsert x n)))) ; G-heap-1 -) -(assert -(forall ((n Lst) (x Heap)) (=> (hasLeftistProperty x) (hasLeftistProperty (hinsert-all n x)))) ; G-heap-2 -) -(assert -(forall ((v Nat) (x Heap) (y Heap)) (=> (and (hasLeftistProperty x) (hasLeftistProperty y)) (hasLeftistProperty (mergea v x y)))) ; G-heap-3 -) -(assert -(forall ((x Heap) (y Heap)) (=> (and (hasLeftistProperty x) (hasLeftistProperty y)) (hasLeftistProperty (merge x y)))) ; G-heap-4 -) -(assert -(forall ((l Lst)) (hasLeftistProperty (hinsert-all l hleaf))) ; G-heap-5 -) -(assert -(forall ((v Nat) (x Heap) (y Heap)) (=> (and (hasLeftistProperty x) (hasLeftistProperty y)) (= (hsize (mergea v x y)) (succ (plus (hsize x) (hsize y)))))) ; G-heap-6 -) -(assert -(forall ((x Heap) (y Heap)) (=> (and (hasLeftistProperty x) (hasLeftistProperty y)) (= (hsize (merge x y)) (plus (hsize x) (hsize y))))) ; G-heap-7 -) - -; conjecture -(assert (not -(forall ((x Heap) (n Nat)) (=> (hasLeftistProperty x) (= (hsize (hinsert x n)) (succ (hsize x))))) ; G-heap-8 -)) -(check-sat) diff --git a/bench_adt/LEON/heap-goal9.smt2 b/bench_adt/LEON/heap-goal9.smt2 deleted file mode 100644 index 698720111..000000000 --- a/bench_adt/LEON/heap-goal9.smt2 +++ /dev/null @@ -1,115 +0,0 @@ -; natural numbers -(declare-datatypes () ((Nat (succ (pred Nat)) (zero)))) - -(declare-fun less (Nat Nat) Bool) -(assert (less zero (succ zero))) -(assert (forall ((x Nat)) (less zero (succ x)))) -(assert (forall ((x Nat) (y Nat)) (= (less (succ x) (succ y)) (less x y)))) - -(define-fun leq ((x Nat) (y Nat)) Bool (or (= x y) (less x y))) - -(declare-fun plus (Nat Nat) Nat) -(assert (forall ((n Nat)) (= (plus zero n) n))) -(assert (forall ((n Nat) (m Nat)) (= (plus (succ n) m) (succ (plus n m))))) - -; lists -(declare-datatypes () ((Lst (cons (head Nat) (tail Lst)) (nil)))) - -(declare-fun len (Lst) Nat) -(assert (= (len nil) zero)) -(assert (forall ((x Nat) (y Lst)) (= (len (cons x y)) (succ (len y))))) - -(declare-fun rsorted (Lst) Bool) -(assert (rsorted nil)) -(assert (forall ((x Nat)) (rsorted (cons x nil)))) -(assert (forall ((x Nat) (z Nat) (y Lst)) (= (rsorted (cons x (cons z y))) (and (rsorted (cons z y)) (leq z x))))) - -(declare-fun sorted (Lst) Bool) -(assert (sorted nil)) -(assert (forall ((x Nat)) (sorted (cons x nil)))) -(assert (forall ((x Nat) (z Nat) (y Lst)) (= (sorted (cons x (cons z y))) (and (rsorted (cons z y)) (leq x z))))) - -; heaps -(declare-datatypes () ((Heap (hleaf) (heap (rk Nat) (value Nat) (hleft Heap) (hright Heap))))) - -(declare-fun rightHeight (Heap) Nat) -(assert (= (rightHeight hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (rightHeight (heap k v l r)) (succ (rightHeight r))))) - -(declare-fun rank (Heap) Nat) -(assert (= (rank hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (rank (heap k v l r)) k))) - -(declare-fun hasLeftistProperty (Heap) Bool) -(assert (hasLeftistProperty hleaf)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (hasLeftistProperty (heap k v l r)) (and (hasLeftistProperty l) (hasLeftistProperty r) - (leq (rightHeight r) (rightHeight l)) - (= k (succ (rightHeight r))))))) - -(declare-fun hsize (Heap) Nat) -(assert (= (hsize hleaf) zero)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (hsize (heap k v l r)) (succ (plus (hsize l) (hsize r)))))) - -(declare-fun mergea (Nat Heap Heap) Heap) -(assert (forall ((v Nat) (l Heap) (r Heap)) (= (mergea v l r) (ite (leq (rank r) (rank l)) (heap (succ (rank r)) v l r) (heap (succ (rank l)) v r l))))) - -(declare-fun merge (Heap Heap) Heap) -(assert (forall ((h Heap)) (= (merge h hleaf) h))) -(assert (forall ((h Heap)) (= (merge hleaf h) h))) -(assert (forall ((k1 Nat) (v1 Nat) (l1 Heap) (r1 Heap) (k2 Nat) (v2 Nat) (l2 Heap) (r2 Heap)) (= (merge (heap k1 v1 l1 r1) (heap k2 v2 l2 r2)) - (ite (less v2 v1) - (mergea v1 l1 (merge r1 (heap k2 v2 l2 r2))) - (mergea v2 l2 (merge (heap k1 v1 l1 r1) r2)))))) - -(declare-fun hinsert (Heap Nat) Heap) -(assert (forall ((h Heap) (n Nat)) (= (hinsert h n) (merge (heap (succ zero) n hleaf hleaf) h)))) - -(declare-fun hinsert-all (Lst Heap) Heap) -(assert (forall ((h Heap)) (= (hinsert-all nil h) h))) -(assert (forall ((h Heap) (n Nat) (l Lst)) (= (hinsert-all (cons n l) h) (hinsert (hinsert-all l h) n)))) - -(declare-fun qheapsorta (Heap Lst) Lst) -(assert (forall ((l Lst)) (= (qheapsorta hleaf l) l))) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap) (x Lst)) (= (qheapsorta (heap k v l r) x) (qheapsorta (merge l r) (cons v x))))) - -(declare-fun qheapsort (Lst) Lst) -(assert (forall ((l Lst)) (= (qheapsort l) (qheapsorta (hinsert-all l hleaf) nil)))) - -(declare-fun heapsorta (Heap) Lst) -(assert (= (heapsorta hleaf) nil)) -(assert (forall ((k Nat) (v Nat) (l Heap) (r Heap)) (= (heapsorta (heap k v l r)) (cons v (heapsorta (merge l r)))))) - -(declare-fun heapsort (Lst) Lst) -(assert (forall ((l Lst)) (= (heapsort l) (heapsorta (hinsert-all l hleaf))))) - -; proven -(assert -(forall ((x Heap) (n Nat)) (=> (hasLeftistProperty x) (hasLeftistProperty (hinsert x n)))) ; G-heap-1 -) -(assert -(forall ((n Lst) (x Heap)) (=> (hasLeftistProperty x) (hasLeftistProperty (hinsert-all n x)))) ; G-heap-2 -) -(assert -(forall ((v Nat) (x Heap) (y Heap)) (=> (and (hasLeftistProperty x) (hasLeftistProperty y)) (hasLeftistProperty (mergea v x y)))) ; G-heap-3 -) -(assert -(forall ((x Heap) (y Heap)) (=> (and (hasLeftistProperty x) (hasLeftistProperty y)) (hasLeftistProperty (merge x y)))) ; G-heap-4 -) -(assert -(forall ((l Lst)) (hasLeftistProperty (hinsert-all l hleaf))) ; G-heap-5 -) -(assert -(forall ((v Nat) (x Heap) (y Heap)) (=> (and (hasLeftistProperty x) (hasLeftistProperty y)) (= (hsize (mergea v x y)) (succ (plus (hsize x) (hsize y)))))) ; G-heap-6 -) -(assert -(forall ((x Heap) (y Heap)) (=> (and (hasLeftistProperty x) (hasLeftistProperty y)) (= (hsize (merge x y)) (plus (hsize x) (hsize y))))) ; G-heap-7 -) -(assert -(forall ((x Heap) (n Nat)) (=> (hasLeftistProperty x) (= (hsize (hinsert x n)) (succ (hsize x))))) ; G-heap-8 -) - -; conjecture -(assert (not -(forall ((l Lst) (x Heap)) (=> (hasLeftistProperty x) (= (hsize (hinsert-all l x)) (plus (hsize x) (len l))))) ; G-heap-9 -)) -(check-sat) diff --git a/bench_adt/heap_insert.smt2 b/bench_adt/heap_insert.smt2 deleted file mode 100644 index aca7e872f..000000000 --- a/bench_adt/heap_insert.smt2 +++ /dev/null @@ -1,43 +0,0 @@ -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-datatypes () ((Heap (hleaf) (heap (rk Int) (value Int) (hleft Heap) (hright Heap))))) -(declare-fun rightHeight (Heap) Int) -(assert (= (rightHeight hleaf) 0)) -(assert (forall ((k Int) (v Int) (l Heap) (r Heap)) (= (rightHeight (heap k v l r)) (+ 1 (rightHeight r))))) - -(declare-fun rank (Heap) Int) -(assert (= (rank hleaf) 0)) -(assert (forall ((k Int) (v Int) (l Heap) (r Heap)) (= (rank (heap k v l r)) k))) - -(declare-fun hasLeftistProperty (Heap) Bool) -(assert (hasLeftistProperty hleaf)) -(assert (forall ((k Int) (v Int) (l Heap) (r Heap)) - (= (hasLeftistProperty (heap k v l r)) - (and (hasLeftistProperty l) (hasLeftistProperty r) - (<= (rightHeight r) (rightHeight l)) - (= k (+ 1 (rightHeight r))))))) - -(declare-fun hsize (Heap) Int) -(assert (= (hsize hleaf) 0)) -(assert (forall ((k Int) (v Int) (l Heap) (r Heap)) (= (hsize (heap k v l r)) (+ 1 (+ (hsize l) (hsize r)))))) - -(declare-fun mergea (Int Heap Heap) Heap) -(assert (forall ((v Int) (l Heap) (r Heap)) - (= (mergea v l r) (ite (<= (rank r) (rank l)) (heap (+ 1 (rank r)) v l r) (heap (+ 1 (rank l)) v r l))))) - -(declare-fun merge (Heap Heap) Heap) -(assert (forall ((h Heap)) (= (merge h hleaf) h))) -(assert (forall ((h Heap)) (= (merge hleaf h) h))) -(assert (forall ((k1 Int) (v1 Int) (l1 Heap) (r1 Heap) (k2 Int) (v2 Int) (l2 Heap) (r2 Heap)) - (= (merge (heap k1 v1 l1 r1) (heap k2 v2 l2 r2)) - (ite (< v2 v1) (mergea v1 l1 (merge r1 (heap k2 v2 l2 r2))) - (mergea v2 l2 (merge (heap k1 v1 l1 r1) r2)))))) - -(declare-fun hinsert (Heap Int) Heap) -(assert (forall ((h Heap) (n Int)) (= (hinsert h n) (merge (heap 1 n hleaf hleaf) h)))) - -; extra lemmas -(assert (forall ((x Heap)) (>= (hsize x) 0))) - -(assert (not (forall ((x Heap) (n Int)) (=> (hasLeftistProperty x) (hasLeftistProperty (hinsert x n)))))) -(check-sat) diff --git a/bench_adt/heap_insert_eq.smt2 b/bench_adt/heap_insert_eq.smt2 deleted file mode 100644 index aca7e872f..000000000 --- a/bench_adt/heap_insert_eq.smt2 +++ /dev/null @@ -1,43 +0,0 @@ -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-datatypes () ((Heap (hleaf) (heap (rk Int) (value Int) (hleft Heap) (hright Heap))))) -(declare-fun rightHeight (Heap) Int) -(assert (= (rightHeight hleaf) 0)) -(assert (forall ((k Int) (v Int) (l Heap) (r Heap)) (= (rightHeight (heap k v l r)) (+ 1 (rightHeight r))))) - -(declare-fun rank (Heap) Int) -(assert (= (rank hleaf) 0)) -(assert (forall ((k Int) (v Int) (l Heap) (r Heap)) (= (rank (heap k v l r)) k))) - -(declare-fun hasLeftistProperty (Heap) Bool) -(assert (hasLeftistProperty hleaf)) -(assert (forall ((k Int) (v Int) (l Heap) (r Heap)) - (= (hasLeftistProperty (heap k v l r)) - (and (hasLeftistProperty l) (hasLeftistProperty r) - (<= (rightHeight r) (rightHeight l)) - (= k (+ 1 (rightHeight r))))))) - -(declare-fun hsize (Heap) Int) -(assert (= (hsize hleaf) 0)) -(assert (forall ((k Int) (v Int) (l Heap) (r Heap)) (= (hsize (heap k v l r)) (+ 1 (+ (hsize l) (hsize r)))))) - -(declare-fun mergea (Int Heap Heap) Heap) -(assert (forall ((v Int) (l Heap) (r Heap)) - (= (mergea v l r) (ite (<= (rank r) (rank l)) (heap (+ 1 (rank r)) v l r) (heap (+ 1 (rank l)) v r l))))) - -(declare-fun merge (Heap Heap) Heap) -(assert (forall ((h Heap)) (= (merge h hleaf) h))) -(assert (forall ((h Heap)) (= (merge hleaf h) h))) -(assert (forall ((k1 Int) (v1 Int) (l1 Heap) (r1 Heap) (k2 Int) (v2 Int) (l2 Heap) (r2 Heap)) - (= (merge (heap k1 v1 l1 r1) (heap k2 v2 l2 r2)) - (ite (< v2 v1) (mergea v1 l1 (merge r1 (heap k2 v2 l2 r2))) - (mergea v2 l2 (merge (heap k1 v1 l1 r1) r2)))))) - -(declare-fun hinsert (Heap Int) Heap) -(assert (forall ((h Heap) (n Int)) (= (hinsert h n) (merge (heap 1 n hleaf hleaf) h)))) - -; extra lemmas -(assert (forall ((x Heap)) (>= (hsize x) 0))) - -(assert (not (forall ((x Heap) (n Int)) (=> (hasLeftistProperty x) (hasLeftistProperty (hinsert x n)))))) -(check-sat) diff --git a/bench_adt/heap_insert_multi.smt2 b/bench_adt/heap_insert_multi.smt2 deleted file mode 100644 index 6c1a48004..000000000 --- a/bench_adt/heap_insert_multi.smt2 +++ /dev/null @@ -1,47 +0,0 @@ -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-datatypes () ((Heap (hleaf) (heap (rk Int) (value Int) (hleft Heap) (hright Heap))))) -(declare-fun rightHeight (Heap) Int) -(assert (= (rightHeight hleaf) 0)) -(assert (forall ((k Int) (v Int) (l Heap) (r Heap)) (= (rightHeight (heap k v l r)) (+ 1 (rightHeight r))))) - -(declare-fun rank (Heap) Int) -(assert (= (rank hleaf) 0)) -(assert (forall ((k Int) (v Int) (l Heap) (r Heap)) (= (rank (heap k v l r)) k))) - -(declare-fun hasLeftistProperty (Heap) Bool) -(assert (hasLeftistProperty hleaf)) -(assert (forall ((k Int) (v Int) (l Heap) (r Heap)) - (= (hasLeftistProperty (heap k v l r)) - (and (hasLeftistProperty l) (hasLeftistProperty r) - (<= (rightHeight r) (rightHeight l)) - (= k (+ 1 (rightHeight r))))))) - -(declare-fun hsize (Heap) Int) -(assert (= (hsize hleaf) 0)) -(assert (forall ((k Int) (v Int) (l Heap) (r Heap)) (= (hsize (heap k v l r)) (+ 1 (+ (hsize l) (hsize r)))))) - -(declare-fun mergea (Int Heap Heap) Heap) -(assert (forall ((v Int) (l Heap) (r Heap)) - (= (mergea v l r) (ite (<= (rank r) (rank l)) (heap (+ 1 (rank r)) v l r) (heap (+ 1 (rank l)) v r l))))) - -(declare-fun merge (Heap Heap) Heap) -(assert (forall ((h Heap)) (= (merge h hleaf) h))) -(assert (forall ((h Heap)) (= (merge hleaf h) h))) -(assert (forall ((k1 Int) (v1 Int) (l1 Heap) (r1 Heap) (k2 Int) (v2 Int) (l2 Heap) (r2 Heap)) - (= (merge (heap k1 v1 l1 r1) (heap k2 v2 l2 r2)) - (ite (< v2 v1) (mergea v1 l1 (merge r1 (heap k2 v2 l2 r2))) - (mergea v2 l2 (merge (heap k1 v1 l1 r1) r2)))))) - -(declare-fun hinsert (Heap Int) Heap) -(assert (forall ((h Heap) (n Int)) (= (hinsert h n) (merge (heap 1 n hleaf hleaf) h)))) - -(declare-fun hinsert-all (Lst Heap) Heap) -(assert (forall ((h Heap)) (= (hinsert-all nil h) h))) -(assert (forall ((h Heap) (n Int) (l Lst)) (= (hinsert-all (cons n l) h) (hinsert (hinsert-all l h) n)))) - -; extra lemmas -(assert (forall ((x Heap) (n Int)) (=> (hasLeftistProperty x) (hasLeftistProperty (hinsert x n))))) - -(assert (not (forall ((l Lst) (x Heap)) (=> (hasLeftistProperty x) (hasLeftistProperty (hinsert-all l x)))))) -(check-sat) diff --git a/bench_adt/heap_size.smt2 b/bench_adt/heap_size.smt2 deleted file mode 100644 index b91d1e4ce..000000000 --- a/bench_adt/heap_size.smt2 +++ /dev/null @@ -1,8 +0,0 @@ -(declare-datatypes () ((Heap (hleaf) (heap (rk Int) (value Int) (hleft Heap) (hright Heap))))) - -(declare-fun hsize (Heap) Int) -(assert (= (hsize hleaf) 0)) -(assert (forall ((k Int) (v Int) (l Heap) (r Heap)) (= (hsize (heap k v l r)) (+ 1 (+ (hsize l) (hsize r)))))) - -(assert (not (forall ((x Heap)) (>= (hsize x) 0)))) -(check-sat) diff --git a/bench_adt/list_append_ass.smt2 b/bench_adt/list_append_ass.smt2 deleted file mode 100644 index d5efa5605..000000000 --- a/bench_adt/list_append_ass.smt2 +++ /dev/null @@ -1,8 +0,0 @@ -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Int) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(assert (not (forall ((x Lst) (y Lst) (z Lst)) (= (append x (append y z)) (append (append x y) z))))) -(check-sat) diff --git a/bench_adt/list_append_contains.smt2 b/bench_adt/list_append_contains.smt2 deleted file mode 100644 index dbc72af40..000000000 --- a/bench_adt/list_append_contains.smt2 +++ /dev/null @@ -1,16 +0,0 @@ -(declare-sort Elem) -(declare-datatypes () ((Lst (cons (head Elem) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Elem) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun contains (Elem Lst) Bool) -(assert (forall ((x Elem)) (= (contains x nil) false))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) (= (contains x (cons y xs)) (or (= x y) (contains x xs))))) - -(assert (not (forall ((x Elem) (y Lst) (z Lst)) - (= (contains x (append y z)) - (or (contains x y) (contains x z)))))) - -(check-sat) diff --git a/bench_adt/list_append_len.smt2 b/bench_adt/list_append_len.smt2 deleted file mode 100644 index 2ea8a127f..000000000 --- a/bench_adt/list_append_len.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Int) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun len (Lst) Int) -(assert (= (len nil) 0)) -(assert (forall ((x Int) (y Lst)) (= (len (cons x y)) (+ 1 (len y))))) - -(assert (not (forall ((x Lst) (y Lst)) (= (+ (len x) (len y)) (len (append x y)))))) -(check-sat) diff --git a/bench_adt/list_append_min.smt2 b/bench_adt/list_append_min.smt2 deleted file mode 100644 index 2fbfdbfa4..000000000 --- a/bench_adt/list_append_min.smt2 +++ /dev/null @@ -1,14 +0,0 @@ -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Int) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun min (Lst) Int) -(assert (= (min nil) 0)) -(assert (forall ((x Int) (y Lst)) (= (min (cons x y)) (ite (< (min y) x) (min y) x)))) - -(assert (not (forall ((x Lst) (y Lst)) - (and (<= (min (append x y)) (min x)) - (<= (min (append x y)) (min y)))))) -(check-sat) diff --git a/bench_adt/list_append_nil.smt2 b/bench_adt/list_append_nil.smt2 deleted file mode 100644 index 78aab7857..000000000 --- a/bench_adt/list_append_nil.smt2 +++ /dev/null @@ -1,8 +0,0 @@ -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Int) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(assert (not (forall ((x Lst)) (= x (append x nil))))) -(check-sat) diff --git a/bench_adt/list_append_sum.smt2 b/bench_adt/list_append_sum.smt2 deleted file mode 100644 index 2d3a6d794..000000000 --- a/bench_adt/list_append_sum.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Int) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun sum (Lst) Int) -(assert (= (sum nil) 0)) -(assert (forall ((x Int) (y Lst)) (= (sum (cons x y)) (+ x (sum y))))) - -(assert (not (forall ((x Lst) (y Lst)) (= (+ (sum x) (sum y)) (sum (append x y)))))) -(check-sat) diff --git a/bench_adt/list_len.smt2 b/bench_adt/list_len.smt2 deleted file mode 100644 index f1f1c370a..000000000 --- a/bench_adt/list_len.smt2 +++ /dev/null @@ -1,8 +0,0 @@ -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun len (Lst) Int) -(assert (= (len nil) 0)) -(assert (forall ((x Int) (y Lst)) (= (len (cons x y)) (+ 1 (len y))))) - -(assert (not (forall ((x Lst)) (>= (len x) 0)))) -(check-sat) diff --git a/bench_adt/list_len_butlast.smt2 b/bench_adt/list_len_butlast.smt2 deleted file mode 100644 index dc55c7d40..000000000 --- a/bench_adt/list_len_butlast.smt2 +++ /dev/null @@ -1,16 +0,0 @@ -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Int) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun len (Lst) Int) -(assert (= (len nil) 0)) -(assert (forall ((x Int) (y Lst)) (= (len (cons x y)) (+ 1 (len y))))) - -(declare-fun butlast (Lst) Lst) -(assert (= (butlast nil) nil)) -(assert (forall ((n Int) (x Lst)) (= (butlast (cons n x)) (ite (= x nil) nil (cons n (butlast x)))))) - -(assert (not (forall ((x Lst) (n Int)) (= (+ 1 (len (butlast (cons n x)))) (len (cons n x)))))) -(check-sat) diff --git a/bench_adt/list_len_stren.smt2 b/bench_adt/list_len_stren.smt2 deleted file mode 100644 index 366d70cc0..000000000 --- a/bench_adt/list_len_stren.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun len (Lst) Int) -(assert (= (len nil) 0)) -(assert (forall ((x Int) (y Lst)) (= (len (cons x y)) (+ 1 (len y))))) - -(declare-fun lenstr (Lst) Int) -(assert (= (lenstr nil) 0)) -(assert (forall ((x Int) (y Lst)) (= (lenstr (cons x y)) (+ (len y) (lenstr y))))) - -(assert (not (forall ((x Lst)) (>= (lenstr x) 0)))) -(check-sat) diff --git a/bench_adt/list_min_max.smt2 b/bench_adt/list_min_max.smt2 deleted file mode 100644 index 5d36446f2..000000000 --- a/bench_adt/list_min_max.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun min (Lst) Int) -(assert (= (min nil) 0)) -(assert (forall ((x Int) (y Lst)) (= (min (cons x y)) (ite (< (min y) x) (min y) x)))) - -(declare-fun max (Lst) Int) -(assert (= (max nil) 0)) -(assert (forall ((x Int) (y Lst)) (= (max (cons x y)) (ite (> (max y) x) (max y) x)))) - -(assert (not (forall ((x Lst)) (>= (max x) (min x))))) -(check-sat) diff --git a/bench_adt/list_min_sum.smt2 b/bench_adt/list_min_sum.smt2 deleted file mode 100644 index b87facf26..000000000 --- a/bench_adt/list_min_sum.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun sum (Lst) Int) -(assert (= (sum nil) 0)) -(assert (forall ((x Int) (y Lst)) (= (sum (cons x y)) (+ x (sum y))))) - -(declare-fun min (Lst) Int) -(assert (= (min nil) 0)) -(assert (forall ((x Int) (y Lst)) (= (min (cons x y)) (ite (< (min y) x) (min y) x)))) - -(assert (not (forall ((x Lst)) (=> (>= (min x) 0) (>= (sum x) 0))))) -(check-sat) diff --git a/bench_adt/list_min_sum_len.smt2 b/bench_adt/list_min_sum_len.smt2 deleted file mode 100644 index 2355c82bb..000000000 --- a/bench_adt/list_min_sum_len.smt2 +++ /dev/null @@ -1,16 +0,0 @@ -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun len (Lst) Int) -(assert (= (len nil) 0)) -(assert (forall ((x Int) (y Lst)) (= (len (cons x y)) (+ 1 (len y))))) - -(declare-fun sum (Lst) Int) -(assert (= (sum nil) 0)) -(assert (forall ((x Int) (y Lst)) (= (sum (cons x y)) (+ x (sum y))))) - -(declare-fun min (Lst) Int) -(assert (= (min nil) 0)) -(assert (forall ((x Int) (y Lst)) (= (min (cons x y)) (ite (< (min y) x) (min y) x)))) - -(assert (not (forall ((x Lst)) (=> (> (min x) 0) (>= (sum x) (len x)))))) -(check-sat) diff --git a/bench_adt/list_rev.smt2 b/bench_adt/list_rev.smt2 deleted file mode 100644 index 5e0a26435..000000000 --- a/bench_adt/list_rev.smt2 +++ /dev/null @@ -1,15 +0,0 @@ -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Int) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun rev (Lst) Lst) -(assert (= (rev nil) nil)) -(assert (forall ((x Int) (y Lst)) (= (rev (cons x y)) (append (rev y) (cons x nil))))) - -; extra lemmas -(assert (forall ((x Lst) (y Lst)) (= (rev (append x y)) (append (rev y) (rev x))))) - -(assert (not (forall ((x Lst)) (= (rev (rev x)) x)))) -(check-sat) diff --git a/bench_adt/list_rev2.smt2 b/bench_adt/list_rev2.smt2 deleted file mode 100644 index 4e283cae8..000000000 --- a/bench_adt/list_rev2.smt2 +++ /dev/null @@ -1,21 +0,0 @@ -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Int) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun rev (Lst) Lst) -(assert (= (rev nil) nil)) -(assert (forall ((x Int) (y Lst)) (= (rev (cons x y)) (append (rev y) (cons x nil))))) - -(declare-fun rev2 (Lst Lst) Lst) -(assert (forall ((a Lst)) (= (rev2 nil a) a))) -(assert (forall ((x Int) (t Lst) (a Lst)) (= (rev2 (cons x t) a) (rev2 t (cons x a))))) - -; extra lemmas -(assert (forall ((x Lst) (a Lst)) (= (rev2 x a) (append (rev2 x nil) a)))) - -; needs just "--ind 3,5,6,7" - -(assert (not (forall ((x Lst)) (= (rev2 x nil) (rev x))))) -(check-sat) diff --git a/bench_adt/list_rev2_append.smt2 b/bench_adt/list_rev2_append.smt2 deleted file mode 100644 index 21e038bc3..000000000 --- a/bench_adt/list_rev2_append.smt2 +++ /dev/null @@ -1,15 +0,0 @@ -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Int) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun rev2 (Lst Lst) Lst) -(assert (forall ((a Lst)) (= (rev2 nil a) a))) -(assert (forall ((x Int) (t Lst) (a Lst)) (= (rev2 (cons x t) a) (rev2 t (cons x a))))) - -; extra lemma -(assert (forall ((x Lst) (y Lst) (z Lst)) (= (append (append x y) z) (append x (append y z))))) - -(assert (not (forall ((x Lst) (a Lst)) (= (rev2 x a) (append (rev2 x nil) a))))) -(check-sat) diff --git a/bench_adt/list_rev2_len.smt2 b/bench_adt/list_rev2_len.smt2 deleted file mode 100644 index 270e5d51a..000000000 --- a/bench_adt/list_rev2_len.smt2 +++ /dev/null @@ -1,20 +0,0 @@ -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun len (Lst) Int) -(assert (= (len nil) 0)) -(assert (forall ((x Int) (y Lst)) (= (len (cons x y)) (+ 1 (len y))))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Int) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun rev2 (Lst Lst) Lst) -(assert (forall ((a Lst)) (= (rev2 nil a) a))) -(assert (forall ((x Int) (t Lst) (a Lst)) (= (rev2 (cons x t) a) (rev2 t (cons x a))))) - -;extra lemmas -(assert (forall ((x Lst) (a Lst)) (= (rev2 x a) (append (rev2 x nil) a)))) -(assert (forall ((x Lst) (y Lst)) (= (len (append x y)) (+ (len x) (len y))))) - -(assert (not (forall ((x Lst)) (= (len (rev2 x nil)) (len x))))) -(check-sat) diff --git a/bench_adt/list_rev_append.smt2 b/bench_adt/list_rev_append.smt2 deleted file mode 100644 index ff4737c4c..000000000 --- a/bench_adt/list_rev_append.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Int) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun rev (Lst) Lst) -(assert (= (rev nil) nil)) -(assert (forall ((x Int) (y Lst)) (= (rev (cons x y)) (append (rev y) (cons x nil))))) - -(assert (not (forall ((x Lst) (y Lst)) (= (rev (append x y)) (append (rev y) (rev x)))))) -(check-sat) diff --git a/bench_adt/queue_amort.smt2 b/bench_adt/queue_amort.smt2 deleted file mode 100644 index fc0b73fae..000000000 --- a/bench_adt/queue_amort.smt2 +++ /dev/null @@ -1,32 +0,0 @@ -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) -(declare-datatypes () ((Queue (queue (front Lst) (back Lst))))) - -(declare-fun len (Lst) Int) -(assert (= (len nil) 0)) -(assert (forall ((x Int) (y Lst)) (= (len (cons x y)) (+ 1 (len y))))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Int) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun rev2 (Lst Lst) Lst) -(assert (forall ((a Lst)) (= (rev2 nil a) a))) -(assert (forall ((x Int) (t Lst) (a Lst)) (= (rev2 (cons x t) a) (rev2 t (cons x a))))) - -(declare-fun qrev (Lst) Lst) -(assert (forall ((x Lst)) (= (qrev x) (rev2 x nil)))) - -(declare-fun amortizeQueue (Lst Lst) Queue) -(assert (forall ((x Lst) (y Lst)) (= (amortizeQueue x y) - (ite (<= (len y) (len x)) - (queue x y) - (queue (append x (qrev y)) nil))))) - -(declare-fun isAmortized (Queue) Bool) -(assert (forall ((x Lst) (y Lst)) (= (isAmortized (queue x y)) (<= (len y) (len x))))) - -;extra lemmas: -(assert (forall ((x Lst)) (<= 0 (len x)))) - -(assert (not (forall ((x Lst) (y Lst)) (isAmortized (amortizeQueue x y))))) -(check-sat) diff --git a/bench_adt/queue_len.smt2 b/bench_adt/queue_len.smt2 deleted file mode 100644 index 84fe86626..000000000 --- a/bench_adt/queue_len.smt2 +++ /dev/null @@ -1,33 +0,0 @@ -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) -(declare-datatypes () ((Queue (queue (front Lst) (back Lst))))) - -(declare-fun len (Lst) Int) -(assert (= (len nil) 0)) -(assert (forall ((x Int) (y Lst)) (= (len (cons x y)) (+ 1 (len y))))) - -(declare-fun qlen (Queue) Int) -(assert (forall ((x Lst) (y Lst)) (= (qlen (queue x y)) (+ (len x) (len y))))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Int) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun rev2 (Lst Lst) Lst) -(assert (forall ((a Lst)) (= (rev2 nil a) a))) -(assert (forall ((x Int) (t Lst) (a Lst)) (= (rev2 (cons x t) a) (rev2 t (cons x a))))) - -(declare-fun qrev (Lst) Lst) -(assert (forall ((x Lst)) (= (qrev x) (rev2 x nil)))) - -(declare-fun amortizeQueue (Lst Lst) Queue) -(assert (forall ((x Lst) (y Lst)) (= (amortizeQueue x y) - (ite (<= (len y) (len x)) - (queue x y) - (queue (append x (qrev y)) nil))))) - -; extra lemmas -(assert (forall ((x Lst)) (= (len (rev2 x nil)) (len x)))) -(assert (forall ((x Lst) (y Lst)) (= (len (append x y)) (+ (len x) (len y))))) - -(assert (not (forall ((x Lst) (y Lst)) (= (qlen (amortizeQueue x y)) (+ (len x) (len y)))))) -(check-sat) diff --git a/bench_adt/queue_popback.smt2 b/bench_adt/queue_popback.smt2 deleted file mode 100644 index c5976b9d0..000000000 --- a/bench_adt/queue_popback.smt2 +++ /dev/null @@ -1,34 +0,0 @@ -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) -(declare-datatypes () ((Queue (queue (front Lst) (back Lst))))) - -(declare-fun len (Lst) Int) -(assert (= (len nil) 0)) -(assert (forall ((x Int) (y Lst)) (= (len (cons x y)) (+ 1 (len y))))) - -(declare-fun qlen (Queue) Int) -(assert (forall ((x Lst) (y Lst)) (= (qlen (queue x y)) (+ (len x) (len y))))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Int) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun butlast (Lst) Lst) -(assert (= (butlast nil) nil)) -(assert (forall ((n Int) (x Lst)) (= (butlast (cons n x)) - (ite (= x nil) nil (cons n (butlast x)))))) - -(declare-fun qpopback (Queue) Queue) -(assert (forall ((x Lst) (y Lst) (n Int)) (= (qpopback (queue x (cons n y))) (queue x y)))) -(assert (forall ((x Lst)) (= (qpopback (queue x nil)) (queue (butlast x) nil)))) - -(declare-fun isAmortized (Queue) Bool) -(assert (forall ((x Lst) (y Lst)) (= (isAmortized (queue x y)) (<= (len y) (len x))))) - -(declare-fun isEmpty (Queue) Bool) -(assert (forall ((x Lst) (y Lst)) (= (isEmpty (queue x y)) (and (= x nil) (= y nil))))) - -; extra lemma -(assert (forall ((x Lst) (n Int)) (= (len (butlast (cons n x))) (len x)))) - -(assert (not (forall ((q Queue) (n Int)) (=> (and (isAmortized q) (not (isEmpty q))) (= (+ 1 (qlen (qpopback q))) (qlen q)))))) -(check-sat) diff --git a/bench_adt/queue_push.smt2 b/bench_adt/queue_push.smt2 deleted file mode 100644 index 291c10fab..000000000 --- a/bench_adt/queue_push.smt2 +++ /dev/null @@ -1,35 +0,0 @@ -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) -(declare-datatypes () ((Queue (queue (front Lst) (back Lst))))) - -(declare-fun len (Lst) Int) -(assert (= (len nil) 0)) -(assert (forall ((x Int) (y Lst)) (= (len (cons x y)) (+ 1 (len y))))) - -(declare-fun qlen (Queue) Int) -(assert (forall ((x Lst) (y Lst)) (= (qlen (queue x y)) (+ (len x) (len y))))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Int) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun rev2 (Lst Lst) Lst) -(assert (forall ((a Lst)) (= (rev2 nil a) a))) -(assert (forall ((x Int) (t Lst) (a Lst)) (= (rev2 (cons x t) a) (rev2 t (cons x a))))) - -(declare-fun qrev (Lst) Lst) -(assert (forall ((x Lst)) (= (qrev x) (rev2 x nil)))) - -(declare-fun amortizeQueue (Lst Lst) Queue) -(assert (forall ((x Lst) (y Lst)) (= (amortizeQueue x y) - (ite (<= (len y) (len x)) - (queue x y) - (queue (append x (qrev y)) nil))))) - -(declare-fun qpush (Queue Int) Queue) -(assert (forall ((x Lst) (y Lst) (n Int)) (= (qpush (queue x y) n) (amortizeQueue x (cons n y))))) - -; extra lemma -(assert (forall ((x Lst) (y Lst)) (= (qlen (amortizeQueue x y)) (+ (len x) (len y))))) - -(assert (not (forall ((q Queue) (n Int)) (= (qlen (qpush q n)) (+ 1 (qlen q)))))) -(check-sat) diff --git a/bench_adt/queue_push_to_list.smt2 b/bench_adt/queue_push_to_list.smt2 deleted file mode 100644 index c6ec3ad3d..000000000 --- a/bench_adt/queue_push_to_list.smt2 +++ /dev/null @@ -1,39 +0,0 @@ -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) -(declare-datatypes () ((Queue (queue (front Lst) (back Lst))))) - -(declare-fun len (Lst) Int) -(assert (= (len nil) 0)) -(assert (forall ((x Int) (y Lst)) (= (len (cons x y)) (+ 1 (len y))))) - -(declare-fun qlen (Queue) Int) -(assert (forall ((x Lst) (y Lst)) (= (qlen (queue x y)) (+ (len x) (len y))))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Int) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun rev2 (Lst Lst) Lst) -(assert (forall ((a Lst)) (= (rev2 nil a) a))) -(assert (forall ((x Int) (t Lst) (a Lst)) (= (rev2 (cons x t) a) (rev2 t (cons x a))))) - -(declare-fun qrev (Lst) Lst) -(assert (forall ((x Lst)) (= (qrev x) (rev2 x nil)))) - -(declare-fun amortizeQueue (Lst Lst) Queue) -(assert (forall ((x Lst) (y Lst)) (= (amortizeQueue x y) - (ite (<= (len y) (len x)) - (queue x y) - (queue (append x (qrev y)) nil))))) - -(declare-fun qpush (Queue Int) Queue) -(assert (forall ((x Lst) (y Lst) (n Int)) (= (qpush (queue x y) n) (amortizeQueue x (cons n y))))) - -(declare-fun queue-to-lst (Queue) Lst) -(assert (forall ((x Lst) (y Lst)) (= (queue-to-lst (queue x y)) (append x (qrev y))))) - -; extra lemmas -(assert (forall ((x Lst) (y Lst) (z Lst)) (= (append (append x y) z) (append x (append y z))))) -(assert (forall ((x Lst) (a Lst)) (= (rev2 x a) (append (rev2 x nil) a)))) - -(assert (not (forall ((q Queue) (n Int)) (= (append (queue-to-lst q) (cons n nil)) (queue-to-lst (qpush q n)))))) -(check-sat) diff --git a/bench_adt/run-bench.sh b/bench_adt/run-bench.sh deleted file mode 100755 index a40b591df..000000000 --- a/bench_adt/run-bench.sh +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/bash -echo "This is the script for running regression tests" -echo " - date: $(date '+%Y-%m-%d at %H:%M.%S')" -echo " - host name $(hostname -f)" -echo " - script path: $(readlink -f $0)" - -opensmt=../opensmt -if [[ ! $# -eq 0 ]] ; then - #echo 'Setting path to' $1 - opensmt=$1 -fi - -# run the interpolating version of OpenSMT -opensmt=${opensmt}' -i' - -picky=./utils/picky.smt2 -lookahead=./utils/lookahead.smt2 - -tmpfolder=log-$(date '+%Y-%m-%d-%H-%M-%S') -mkdir ${tmpfolder} - -export outmod=false -export errmod=false -export rtmod=false -export err=false - -for file in $(find . -name '*.smt2' |sort); do - name=$(basename $file) - dir=$(dirname $file) - - sh -c "ulimit -St 60; ${opensmt} $dir/$name > $tmpfolder/$name.out 2>$tmpfolder/$name.err.tmp" 2>/dev/null - grep -v '^;' $tmpfolder/$name.err.tmp > $tmpfolder/$name.err - - if [ -s "$tmpfolder/$name.err" ]; then - echo "stderr not empty for benchmark $file"; - err=true; - fi - - sh -c "ulimit -St 60; ${opensmt} $picky $dir/$name > $tmpfolder/$name.out 2>$tmpfolder/$name.err.tmp" 2>/dev/null - grep -v '^;' $tmpfolder/$name.err.tmp > $tmpfolder/$name.err - - if [ -s "$tmpfolder/$name.err" ]; then - echo "stderr not empty for picky benchmark $file"; - err=true; - fi - - sh -c "ulimit -St 60; ${opensmt} $lookahead $dir/$name > $tmpfolder/$name.out 2>$tmpfolder/$name.err.tmp" 2>/dev/null - grep -v '^;' $tmpfolder/$name.err.tmp > $tmpfolder/$name.err - - if [ -s "$tmpfolder/$name.err" ]; then - echo "stderr not empty for lookahead benchmark $file"; - err=true; - fi - - #diff -q ${tmpfolder}/${name}.out ${dir}/${name}.expected.out - #if [ $? != 0 ]; then - # echo "stdout differs for benchmark $file"; - # outmod=true; - # diff ${tmpfolder}/${name}.out ${dir}/${name}.expected.out - #fi - #diff -q ${tmpfolder}/${name}.err ${dir}/${name}.expected.err - #if [ $? != 0 ]; then - # echo "stderr differs for benchmark $file"; - # errmod=true; - # diff ${tmpfolder}/${name}.err ${dir}/${name}.expected.err - #fi - -done -#echo "Stdout differs: ${outmod}, stderr differs: ${errmod}" - -if [[ ${err} == true ]]; then - echo "There were anomalies: check logs in ${tmpfolder}" - exit 1 -else - rm -rf ${tmpfolder} -fi - diff --git a/bench_adt/simple_if.smt2 b/bench_adt/simple_if.smt2 deleted file mode 100644 index 4d304883e..000000000 --- a/bench_adt/simple_if.smt2 +++ /dev/null @@ -1,163 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((|state_type| 0)) (((|state_type| (|balances| (Array Int Int)))))) -(declare-datatypes ((|bytes_tuple| 0)) (((|bytes_tuple| (|bytes_tuple_accessor_array| (Array Int Int)) (|bytes_tuple_accessor_length| Int))))) -(declare-datatypes ((|tx_type| 0)) (((|tx_type| (|block.basefee| Int) (|block.chainid| Int) (|block.coinbase| Int) (|block.difficulty| Int) (|block.gaslimit| Int) (|block.number| Int) (|block.timestamp| Int) (|blockhash| (Array Int Int)) (|msg.data| |bytes_tuple|) (|msg.sender| Int) (|msg.sig| Int) (|msg.value| Int) (|tx.gasprice| Int) (|tx.origin| Int))))) -(declare-datatypes ((|ecrecover_input_type| 0)) (((|ecrecover_input_type| (|hash| Int) (|v| Int) (|r| Int) (|s| Int))))) -(declare-datatypes ((|crypto_type| 0)) (((|crypto_type| (|ecrecover| (Array |ecrecover_input_type| Int)) (|keccak256| (Array |bytes_tuple| Int)) (|ripemd160| (Array |bytes_tuple| Int)) (|sha256| (Array |bytes_tuple| Int)))))) -(declare-datatypes ((|abi_type| 0)) (((|abi_type|)))) -(declare-fun |interface_0_C_31_0| (Int |abi_type| |crypto_type| |state_type| ) Bool) -(declare-fun |nondet_interface_1_C_31_0| (Int Int |abi_type| |crypto_type| |state_type| |state_type| ) Bool) -(declare-fun |summary_constructor_2_C_31_0| (Int Int |abi_type| |crypto_type| |tx_type| |state_type| |state_type| ) Bool) -(assert -(forall ( (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (state_0 |state_type|) (this_0 Int) (tx_0 |tx_type|)) -(=> (= error_0 0) (nondet_interface_1_C_31_0 error_0 this_0 abi_0 crypto_0 state_0 state_0)))) - - -(declare-fun |summary_3_function_simple_if__30_31_0| (Int Int |abi_type| |crypto_type| |tx_type| |state_type| Int |state_type| Int Int ) Bool) -(declare-fun |summary_4_function_simple_if__30_31_0| (Int Int |abi_type| |crypto_type| |tx_type| |state_type| Int |state_type| Int Int ) Bool) -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_1 Int)) -(=> (and (and (nondet_interface_1_C_31_0 error_0 this_0 abi_0 crypto_0 state_0 state_1) true) (and (= error_0 0) (summary_4_function_simple_if__30_31_0 error_1 this_0 abi_0 crypto_0 tx_0 state_1 a_2_0 state_2 a_2_1 z_5_1))) (nondet_interface_1_C_31_0 error_1 this_0 abi_0 crypto_0 state_0 state_2)))) - - -(declare-fun |block_5_function_simple_if__30_31_0| (Int Int |abi_type| |crypto_type| |tx_type| |state_type| Int |state_type| Int Int ) Bool) -(declare-fun |block_6_simple_if_29_31_0| (Int Int |abi_type| |crypto_type| |tx_type| |state_type| Int |state_type| Int Int ) Bool) -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int)) -(block_5_function_simple_if__30_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1))) - - -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int)) -(=> (and (and (block_5_function_simple_if__30_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1) (and (and (and (and (= state_1 state_0) (= error_0 0)) true) (and true (= a_2_1 a_2_0))) true)) true) (block_6_simple_if_29_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1)))) - - -(declare-fun |block_7_return_function_simple_if__30_31_0| (Int Int |abi_type| |crypto_type| |tx_type| |state_type| Int |state_type| Int Int ) Bool) -(declare-fun |block_8_if_header_simple_if_28_31_0| (Int Int |abi_type| |crypto_type| |tx_type| |state_type| Int |state_type| Int Int ) Bool) -(declare-fun |block_9_if_true_simple_if_18_31_0| (Int Int |abi_type| |crypto_type| |tx_type| |state_type| Int |state_type| Int Int ) Bool) -(declare-fun |block_10_if_false_simple_if_27_31_0| (Int Int |abi_type| |crypto_type| |tx_type| |state_type| Int |state_type| Int Int ) Bool) -(declare-fun |block_11_simple_if_29_31_0| (Int Int |abi_type| |crypto_type| |tx_type| |state_type| Int |state_type| Int Int ) Bool) -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int)) -(=> (and (and (block_6_simple_if_29_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1) (and (= z_5_1 0) (and (and (>= a_2_1 0) (<= a_2_1 115792089237316195423570985008687907853269984665640564039457584007913129639935)) true))) true) (block_8_if_header_simple_if_28_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1)))) - - -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int)) -(=> (and (and (block_8_if_header_simple_if_28_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1) (and (= expr_9_1 (< expr_7_0 expr_8_0)) (and (=> true true) (and (= expr_8_0 5) (and (=> true (and (>= expr_7_0 0) (<= expr_7_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_7_0 a_2_1) true)))))) expr_9_1) (block_9_if_true_simple_if_18_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1)))) - - -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int)) -(=> (and (and (block_8_if_header_simple_if_28_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1) (and (= expr_9_1 (< expr_7_0 expr_8_0)) (and (=> true true) (and (= expr_8_0 5) (and (=> true (and (>= expr_7_0 0) (<= expr_7_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_7_0 a_2_1) true)))))) (not expr_9_1)) (block_10_if_false_simple_if_27_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1)))) - - -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(=> (and (and (block_9_if_true_simple_if_18_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1) (and (= z_5_2 expr_16_0) (and (=> true true) (and (= expr_16_0 0) (and (= a_2_2 expr_14_1) (and (=> true (and (>= expr_14_1 0) (<= expr_14_1 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_14_1 expr_13_1) (and (=> true (and (>= expr_10_0 0) (<= expr_10_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_10_0 a_2_1) (and (=> true (and (>= expr_13_1 0) (<= expr_13_1 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_13_1 (+ expr_11_0 expr_12_0)) (and (=> true true) (and (= expr_12_0 1) (and (=> true (and (>= expr_11_0 0) (<= expr_11_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_11_0 a_2_1) true))))))))))))))) true) (block_7_return_function_simple_if__30_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_2 z_5_2)))) - - -(declare-fun |block_12_return_ghost_simple_if_17_31_0| (Int Int |abi_type| |crypto_type| |tx_type| |state_type| Int |state_type| Int Int ) Bool) -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(=> (and (and (block_12_return_ghost_simple_if_17_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_2 z_5_2) (and (= z_5_2 expr_16_0) (and (=> true true) (and (= expr_16_0 0) (and (= a_2_2 expr_14_1) (and (=> true (and (>= expr_14_1 0) (<= expr_14_1 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_14_1 expr_13_1) (and (=> true (and (>= expr_10_0 0) (<= expr_10_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_10_0 a_2_1) (and (=> true (and (>= expr_13_1 0) (<= expr_13_1 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_13_1 (+ expr_11_0 expr_12_0)) (and (=> true true) (and (= expr_12_0 1) (and (=> true (and (>= expr_11_0 0) (<= expr_11_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_11_0 a_2_1) true))))))))))))))) true) (block_11_simple_if_29_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_2 z_5_2)))) - - -(declare-fun |block_13_function_simple_if__30_31_0| (Int Int |abi_type| |crypto_type| |tx_type| |state_type| Int |state_type| Int Int ) Bool) -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_20_0 Int) (expr_21_0 Int) (expr_22_1 Bool) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(=> (and (and (block_10_if_false_simple_if_27_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1) (and (= expr_22_1 (>= expr_20_0 expr_21_0)) (and (=> true true) (and (= expr_21_0 5) (and (=> true (and (>= expr_20_0 0) (<= expr_20_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_20_0 a_2_1) true)))))) (and (not expr_22_1) (= error_1 1))) (block_13_function_simple_if__30_31_0 error_1 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1)))) - - -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_20_0 Int) (expr_21_0 Int) (expr_22_1 Bool) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(=> (block_13_function_simple_if__30_31_0 error_1 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1) (summary_3_function_simple_if__30_31_0 error_1 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1)))) - - -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_20_0 Int) (expr_21_0 Int) (expr_22_1 Bool) (expr_25_0 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(=> (and (and (block_10_if_false_simple_if_27_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1) (and (= z_5_2 expr_25_0) (and (=> true true) (and (= expr_25_0 1) (and (= error_1 error_0) (and (= expr_22_1 (>= expr_20_0 expr_21_0)) (and (=> true true) (and (= expr_21_0 5) (and (=> true (and (>= expr_20_0 0) (<= expr_20_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_20_0 a_2_1) true)))))))))) true) (block_7_return_function_simple_if__30_31_0 error_1 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_2)))) - - -(declare-fun |block_14_return_ghost_simple_if_26_31_0| (Int Int |abi_type| |crypto_type| |tx_type| |state_type| Int |state_type| Int Int ) Bool) -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_20_0 Int) (expr_21_0 Int) (expr_22_1 Bool) (expr_25_0 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(=> (and (and (block_14_return_ghost_simple_if_26_31_0 error_1 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_2) (and (= z_5_2 expr_25_0) (and (=> true true) (and (= expr_25_0 1) (and (= error_1 error_0) (and (= expr_22_1 (>= expr_20_0 expr_21_0)) (and (=> true true) (and (= expr_21_0 5) (and (=> true (and (>= expr_20_0 0) (<= expr_20_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_20_0 a_2_1) true)))))))))) true) (block_11_simple_if_29_31_0 error_1 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_2)))) - - -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_20_0 Int) (expr_21_0 Int) (expr_22_1 Bool) (expr_25_0 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(=> (and (and (block_11_simple_if_29_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1) true) true) (block_7_return_function_simple_if__30_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1)))) - - -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_20_0 Int) (expr_21_0 Int) (expr_22_1 Bool) (expr_25_0 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(=> (and (and (block_7_return_function_simple_if__30_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1) true) true) (summary_3_function_simple_if__30_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1)))) - - -(declare-fun |block_15_function_simple_if__30_31_0| (Int Int |abi_type| |crypto_type| |tx_type| |state_type| Int |state_type| Int Int ) Bool) -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_20_0 Int) (expr_21_0 Int) (expr_22_1 Bool) (expr_25_0 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(block_15_function_simple_if__30_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1))) - - -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_20_0 Int) (expr_21_0 Int) (expr_22_1 Bool) (expr_25_0 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (funds_2_0 Int) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (state_3 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(=> (and (and (block_15_function_simple_if__30_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1) (and (summary_3_function_simple_if__30_31_0 error_1 this_0 abi_0 crypto_0 tx_0 state_2 a_2_1 state_3 a_2_2 z_5_1) (and (= state_2 (|state_type| (store (|balances| state_1) this_0 (+ (select (|balances| state_1) this_0) funds_2_0)))) (and (and (>= (+ (select (|balances| state_1) this_0) funds_2_0) 0) (<= (+ (select (|balances| state_1) this_0) funds_2_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935)) (and (>= funds_2_0 (|msg.value| tx_0)) (and (and (and (and (and (and (and (and (and (and (and (and (and (>= (|block.basefee| tx_0) 0) (<= (|block.basefee| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935)) (and (>= (|block.chainid| tx_0) 0) (<= (|block.chainid| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.coinbase| tx_0) 0) (<= (|block.coinbase| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|block.difficulty| tx_0) 0) (<= (|block.difficulty| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.gaslimit| tx_0) 0) (<= (|block.gaslimit| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.number| tx_0) 0) (<= (|block.number| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.timestamp| tx_0) 0) (<= (|block.timestamp| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|msg.sender| tx_0) 0) (<= (|msg.sender| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|msg.value| tx_0) 0) (<= (|msg.value| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|tx.origin| tx_0) 0) (<= (|tx.origin| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|tx.gasprice| tx_0) 0) (<= (|tx.gasprice| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (and (and (and (and (and (= (|msg.value| tx_0) 0) (= (|msg.sig| tx_0) 3745062286)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 0) 223)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 1) 57)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 2) 29)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 3) 142)) (>= (|bytes_tuple_accessor_length| (|msg.data| tx_0)) 4))) (and (and (and (and (= state_1 state_0) (= error_0 0)) true) (and true (= a_2_1 a_2_0))) true))))))) true) (summary_4_function_simple_if__30_31_0 error_1 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_3 a_2_2 z_5_1)))) - - -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_20_0 Int) (expr_21_0 Int) (expr_22_1 Bool) (expr_25_0 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (funds_2_0 Int) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (state_3 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(=> (and (and (interface_0_C_31_0 this_0 abi_0 crypto_0 state_0) true) (and (summary_4_function_simple_if__30_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1) (= error_0 0))) (interface_0_C_31_0 this_0 abi_0 crypto_0 state_1)))) - - -(declare-fun |contract_initializer_16_C_31_0| (Int Int |abi_type| |crypto_type| |tx_type| |state_type| |state_type| ) Bool) -(declare-fun |contract_initializer_entry_17_C_31_0| (Int Int |abi_type| |crypto_type| |tx_type| |state_type| |state_type| ) Bool) -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_20_0 Int) (expr_21_0 Int) (expr_22_1 Bool) (expr_25_0 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (funds_2_0 Int) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (state_3 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(=> (and (and (= state_1 state_0) (= error_0 0)) true) (contract_initializer_entry_17_C_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 state_1)))) - - -(declare-fun |contract_initializer_after_init_18_C_31_0| (Int Int |abi_type| |crypto_type| |tx_type| |state_type| |state_type| ) Bool) -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_20_0 Int) (expr_21_0 Int) (expr_22_1 Bool) (expr_25_0 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (funds_2_0 Int) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (state_3 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(=> (and (and (contract_initializer_entry_17_C_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 state_1) true) true) (contract_initializer_after_init_18_C_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 state_1)))) - - -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_20_0 Int) (expr_21_0 Int) (expr_22_1 Bool) (expr_25_0 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (funds_2_0 Int) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (state_3 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(=> (and (and (contract_initializer_after_init_18_C_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 state_1) true) true) (contract_initializer_16_C_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 state_1)))) - - -(declare-fun |implicit_constructor_entry_19_C_31_0| (Int Int |abi_type| |crypto_type| |tx_type| |state_type| |state_type| ) Bool) -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_20_0 Int) (expr_21_0 Int) (expr_22_1 Bool) (expr_25_0 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (funds_2_0 Int) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (state_3 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(=> (and (and (and (and (= state_1 state_0) (= error_0 0)) true) true) (>= (select (|balances| state_1) this_0) (|msg.value| tx_0))) (implicit_constructor_entry_19_C_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 state_1)))) - - -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_20_0 Int) (expr_21_0 Int) (expr_22_1 Bool) (expr_25_0 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (funds_2_0 Int) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (state_3 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(=> (and (and (implicit_constructor_entry_19_C_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 state_1) (and (contract_initializer_16_C_31_0 error_1 this_0 abi_0 crypto_0 tx_0 state_1 state_2) true)) (> error_1 0)) (summary_constructor_2_C_31_0 error_1 this_0 abi_0 crypto_0 tx_0 state_0 state_2)))) - - -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_20_0 Int) (expr_21_0 Int) (expr_22_1 Bool) (expr_25_0 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (funds_2_0 Int) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (state_3 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(=> (and (and (implicit_constructor_entry_19_C_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 state_1) (and (= error_1 0) (and (contract_initializer_16_C_31_0 error_1 this_0 abi_0 crypto_0 tx_0 state_1 state_2) true))) true) (summary_constructor_2_C_31_0 error_1 this_0 abi_0 crypto_0 tx_0 state_0 state_2)))) - - -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_20_0 Int) (expr_21_0 Int) (expr_22_1 Bool) (expr_25_0 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (funds_2_0 Int) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (state_3 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(=> (and (and (summary_constructor_2_C_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 state_1) true) (and (and (and (and (and (and (and (and (and (and (and (and (and (>= (|block.basefee| tx_0) 0) (<= (|block.basefee| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935)) (and (>= (|block.chainid| tx_0) 0) (<= (|block.chainid| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.coinbase| tx_0) 0) (<= (|block.coinbase| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|block.difficulty| tx_0) 0) (<= (|block.difficulty| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.gaslimit| tx_0) 0) (<= (|block.gaslimit| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.number| tx_0) 0) (<= (|block.number| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.timestamp| tx_0) 0) (<= (|block.timestamp| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|msg.sender| tx_0) 0) (<= (|msg.sender| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|msg.value| tx_0) 0) (<= (|msg.value| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|tx.origin| tx_0) 0) (<= (|tx.origin| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|tx.gasprice| tx_0) 0) (<= (|tx.gasprice| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (= (|msg.value| tx_0) 0)) (= error_0 0))) (interface_0_C_31_0 this_0 abi_0 crypto_0 state_1)))) - - -(declare-fun |error_target_3_0| () Bool) -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_20_0 Int) (expr_21_0 Int) (expr_22_1 Bool) (expr_25_0 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (funds_2_0 Int) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (state_3 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(=> (and (and (interface_0_C_31_0 this_0 abi_0 crypto_0 state_0) true) (and (summary_4_function_simple_if__30_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1) (= error_0 1))) error_target_3_0))) - - -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_20_0 Int) (expr_21_0 Int) (expr_22_1 Bool) (expr_25_0 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (funds_2_0 Int) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (state_3 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(=> error_target_3_0 false))) -(check-sat) diff --git a/bench_adt/simple_if_min.smt2 b/bench_adt/simple_if_min.smt2 deleted file mode 100644 index 4d304883e..000000000 --- a/bench_adt/simple_if_min.smt2 +++ /dev/null @@ -1,163 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((|state_type| 0)) (((|state_type| (|balances| (Array Int Int)))))) -(declare-datatypes ((|bytes_tuple| 0)) (((|bytes_tuple| (|bytes_tuple_accessor_array| (Array Int Int)) (|bytes_tuple_accessor_length| Int))))) -(declare-datatypes ((|tx_type| 0)) (((|tx_type| (|block.basefee| Int) (|block.chainid| Int) (|block.coinbase| Int) (|block.difficulty| Int) (|block.gaslimit| Int) (|block.number| Int) (|block.timestamp| Int) (|blockhash| (Array Int Int)) (|msg.data| |bytes_tuple|) (|msg.sender| Int) (|msg.sig| Int) (|msg.value| Int) (|tx.gasprice| Int) (|tx.origin| Int))))) -(declare-datatypes ((|ecrecover_input_type| 0)) (((|ecrecover_input_type| (|hash| Int) (|v| Int) (|r| Int) (|s| Int))))) -(declare-datatypes ((|crypto_type| 0)) (((|crypto_type| (|ecrecover| (Array |ecrecover_input_type| Int)) (|keccak256| (Array |bytes_tuple| Int)) (|ripemd160| (Array |bytes_tuple| Int)) (|sha256| (Array |bytes_tuple| Int)))))) -(declare-datatypes ((|abi_type| 0)) (((|abi_type|)))) -(declare-fun |interface_0_C_31_0| (Int |abi_type| |crypto_type| |state_type| ) Bool) -(declare-fun |nondet_interface_1_C_31_0| (Int Int |abi_type| |crypto_type| |state_type| |state_type| ) Bool) -(declare-fun |summary_constructor_2_C_31_0| (Int Int |abi_type| |crypto_type| |tx_type| |state_type| |state_type| ) Bool) -(assert -(forall ( (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (state_0 |state_type|) (this_0 Int) (tx_0 |tx_type|)) -(=> (= error_0 0) (nondet_interface_1_C_31_0 error_0 this_0 abi_0 crypto_0 state_0 state_0)))) - - -(declare-fun |summary_3_function_simple_if__30_31_0| (Int Int |abi_type| |crypto_type| |tx_type| |state_type| Int |state_type| Int Int ) Bool) -(declare-fun |summary_4_function_simple_if__30_31_0| (Int Int |abi_type| |crypto_type| |tx_type| |state_type| Int |state_type| Int Int ) Bool) -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_1 Int)) -(=> (and (and (nondet_interface_1_C_31_0 error_0 this_0 abi_0 crypto_0 state_0 state_1) true) (and (= error_0 0) (summary_4_function_simple_if__30_31_0 error_1 this_0 abi_0 crypto_0 tx_0 state_1 a_2_0 state_2 a_2_1 z_5_1))) (nondet_interface_1_C_31_0 error_1 this_0 abi_0 crypto_0 state_0 state_2)))) - - -(declare-fun |block_5_function_simple_if__30_31_0| (Int Int |abi_type| |crypto_type| |tx_type| |state_type| Int |state_type| Int Int ) Bool) -(declare-fun |block_6_simple_if_29_31_0| (Int Int |abi_type| |crypto_type| |tx_type| |state_type| Int |state_type| Int Int ) Bool) -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int)) -(block_5_function_simple_if__30_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1))) - - -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int)) -(=> (and (and (block_5_function_simple_if__30_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1) (and (and (and (and (= state_1 state_0) (= error_0 0)) true) (and true (= a_2_1 a_2_0))) true)) true) (block_6_simple_if_29_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1)))) - - -(declare-fun |block_7_return_function_simple_if__30_31_0| (Int Int |abi_type| |crypto_type| |tx_type| |state_type| Int |state_type| Int Int ) Bool) -(declare-fun |block_8_if_header_simple_if_28_31_0| (Int Int |abi_type| |crypto_type| |tx_type| |state_type| Int |state_type| Int Int ) Bool) -(declare-fun |block_9_if_true_simple_if_18_31_0| (Int Int |abi_type| |crypto_type| |tx_type| |state_type| Int |state_type| Int Int ) Bool) -(declare-fun |block_10_if_false_simple_if_27_31_0| (Int Int |abi_type| |crypto_type| |tx_type| |state_type| Int |state_type| Int Int ) Bool) -(declare-fun |block_11_simple_if_29_31_0| (Int Int |abi_type| |crypto_type| |tx_type| |state_type| Int |state_type| Int Int ) Bool) -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int)) -(=> (and (and (block_6_simple_if_29_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1) (and (= z_5_1 0) (and (and (>= a_2_1 0) (<= a_2_1 115792089237316195423570985008687907853269984665640564039457584007913129639935)) true))) true) (block_8_if_header_simple_if_28_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1)))) - - -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int)) -(=> (and (and (block_8_if_header_simple_if_28_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1) (and (= expr_9_1 (< expr_7_0 expr_8_0)) (and (=> true true) (and (= expr_8_0 5) (and (=> true (and (>= expr_7_0 0) (<= expr_7_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_7_0 a_2_1) true)))))) expr_9_1) (block_9_if_true_simple_if_18_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1)))) - - -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int)) -(=> (and (and (block_8_if_header_simple_if_28_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1) (and (= expr_9_1 (< expr_7_0 expr_8_0)) (and (=> true true) (and (= expr_8_0 5) (and (=> true (and (>= expr_7_0 0) (<= expr_7_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_7_0 a_2_1) true)))))) (not expr_9_1)) (block_10_if_false_simple_if_27_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1)))) - - -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(=> (and (and (block_9_if_true_simple_if_18_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1) (and (= z_5_2 expr_16_0) (and (=> true true) (and (= expr_16_0 0) (and (= a_2_2 expr_14_1) (and (=> true (and (>= expr_14_1 0) (<= expr_14_1 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_14_1 expr_13_1) (and (=> true (and (>= expr_10_0 0) (<= expr_10_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_10_0 a_2_1) (and (=> true (and (>= expr_13_1 0) (<= expr_13_1 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_13_1 (+ expr_11_0 expr_12_0)) (and (=> true true) (and (= expr_12_0 1) (and (=> true (and (>= expr_11_0 0) (<= expr_11_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_11_0 a_2_1) true))))))))))))))) true) (block_7_return_function_simple_if__30_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_2 z_5_2)))) - - -(declare-fun |block_12_return_ghost_simple_if_17_31_0| (Int Int |abi_type| |crypto_type| |tx_type| |state_type| Int |state_type| Int Int ) Bool) -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(=> (and (and (block_12_return_ghost_simple_if_17_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_2 z_5_2) (and (= z_5_2 expr_16_0) (and (=> true true) (and (= expr_16_0 0) (and (= a_2_2 expr_14_1) (and (=> true (and (>= expr_14_1 0) (<= expr_14_1 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_14_1 expr_13_1) (and (=> true (and (>= expr_10_0 0) (<= expr_10_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_10_0 a_2_1) (and (=> true (and (>= expr_13_1 0) (<= expr_13_1 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_13_1 (+ expr_11_0 expr_12_0)) (and (=> true true) (and (= expr_12_0 1) (and (=> true (and (>= expr_11_0 0) (<= expr_11_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_11_0 a_2_1) true))))))))))))))) true) (block_11_simple_if_29_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_2 z_5_2)))) - - -(declare-fun |block_13_function_simple_if__30_31_0| (Int Int |abi_type| |crypto_type| |tx_type| |state_type| Int |state_type| Int Int ) Bool) -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_20_0 Int) (expr_21_0 Int) (expr_22_1 Bool) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(=> (and (and (block_10_if_false_simple_if_27_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1) (and (= expr_22_1 (>= expr_20_0 expr_21_0)) (and (=> true true) (and (= expr_21_0 5) (and (=> true (and (>= expr_20_0 0) (<= expr_20_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_20_0 a_2_1) true)))))) (and (not expr_22_1) (= error_1 1))) (block_13_function_simple_if__30_31_0 error_1 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1)))) - - -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_20_0 Int) (expr_21_0 Int) (expr_22_1 Bool) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(=> (block_13_function_simple_if__30_31_0 error_1 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1) (summary_3_function_simple_if__30_31_0 error_1 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1)))) - - -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_20_0 Int) (expr_21_0 Int) (expr_22_1 Bool) (expr_25_0 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(=> (and (and (block_10_if_false_simple_if_27_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1) (and (= z_5_2 expr_25_0) (and (=> true true) (and (= expr_25_0 1) (and (= error_1 error_0) (and (= expr_22_1 (>= expr_20_0 expr_21_0)) (and (=> true true) (and (= expr_21_0 5) (and (=> true (and (>= expr_20_0 0) (<= expr_20_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_20_0 a_2_1) true)))))))))) true) (block_7_return_function_simple_if__30_31_0 error_1 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_2)))) - - -(declare-fun |block_14_return_ghost_simple_if_26_31_0| (Int Int |abi_type| |crypto_type| |tx_type| |state_type| Int |state_type| Int Int ) Bool) -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_20_0 Int) (expr_21_0 Int) (expr_22_1 Bool) (expr_25_0 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(=> (and (and (block_14_return_ghost_simple_if_26_31_0 error_1 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_2) (and (= z_5_2 expr_25_0) (and (=> true true) (and (= expr_25_0 1) (and (= error_1 error_0) (and (= expr_22_1 (>= expr_20_0 expr_21_0)) (and (=> true true) (and (= expr_21_0 5) (and (=> true (and (>= expr_20_0 0) (<= expr_20_0 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (= expr_20_0 a_2_1) true)))))))))) true) (block_11_simple_if_29_31_0 error_1 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_2)))) - - -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_20_0 Int) (expr_21_0 Int) (expr_22_1 Bool) (expr_25_0 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(=> (and (and (block_11_simple_if_29_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1) true) true) (block_7_return_function_simple_if__30_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1)))) - - -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_20_0 Int) (expr_21_0 Int) (expr_22_1 Bool) (expr_25_0 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(=> (and (and (block_7_return_function_simple_if__30_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1) true) true) (summary_3_function_simple_if__30_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1)))) - - -(declare-fun |block_15_function_simple_if__30_31_0| (Int Int |abi_type| |crypto_type| |tx_type| |state_type| Int |state_type| Int Int ) Bool) -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_20_0 Int) (expr_21_0 Int) (expr_22_1 Bool) (expr_25_0 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(block_15_function_simple_if__30_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1))) - - -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_20_0 Int) (expr_21_0 Int) (expr_22_1 Bool) (expr_25_0 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (funds_2_0 Int) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (state_3 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(=> (and (and (block_15_function_simple_if__30_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1) (and (summary_3_function_simple_if__30_31_0 error_1 this_0 abi_0 crypto_0 tx_0 state_2 a_2_1 state_3 a_2_2 z_5_1) (and (= state_2 (|state_type| (store (|balances| state_1) this_0 (+ (select (|balances| state_1) this_0) funds_2_0)))) (and (and (>= (+ (select (|balances| state_1) this_0) funds_2_0) 0) (<= (+ (select (|balances| state_1) this_0) funds_2_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935)) (and (>= funds_2_0 (|msg.value| tx_0)) (and (and (and (and (and (and (and (and (and (and (and (and (and (>= (|block.basefee| tx_0) 0) (<= (|block.basefee| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935)) (and (>= (|block.chainid| tx_0) 0) (<= (|block.chainid| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.coinbase| tx_0) 0) (<= (|block.coinbase| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|block.difficulty| tx_0) 0) (<= (|block.difficulty| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.gaslimit| tx_0) 0) (<= (|block.gaslimit| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.number| tx_0) 0) (<= (|block.number| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.timestamp| tx_0) 0) (<= (|block.timestamp| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|msg.sender| tx_0) 0) (<= (|msg.sender| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|msg.value| tx_0) 0) (<= (|msg.value| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|tx.origin| tx_0) 0) (<= (|tx.origin| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|tx.gasprice| tx_0) 0) (<= (|tx.gasprice| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (and (and (and (and (and (= (|msg.value| tx_0) 0) (= (|msg.sig| tx_0) 3745062286)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 0) 223)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 1) 57)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 2) 29)) (= (select (|bytes_tuple_accessor_array| (|msg.data| tx_0)) 3) 142)) (>= (|bytes_tuple_accessor_length| (|msg.data| tx_0)) 4))) (and (and (and (and (= state_1 state_0) (= error_0 0)) true) (and true (= a_2_1 a_2_0))) true))))))) true) (summary_4_function_simple_if__30_31_0 error_1 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_3 a_2_2 z_5_1)))) - - -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_20_0 Int) (expr_21_0 Int) (expr_22_1 Bool) (expr_25_0 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (funds_2_0 Int) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (state_3 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(=> (and (and (interface_0_C_31_0 this_0 abi_0 crypto_0 state_0) true) (and (summary_4_function_simple_if__30_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1) (= error_0 0))) (interface_0_C_31_0 this_0 abi_0 crypto_0 state_1)))) - - -(declare-fun |contract_initializer_16_C_31_0| (Int Int |abi_type| |crypto_type| |tx_type| |state_type| |state_type| ) Bool) -(declare-fun |contract_initializer_entry_17_C_31_0| (Int Int |abi_type| |crypto_type| |tx_type| |state_type| |state_type| ) Bool) -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_20_0 Int) (expr_21_0 Int) (expr_22_1 Bool) (expr_25_0 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (funds_2_0 Int) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (state_3 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(=> (and (and (= state_1 state_0) (= error_0 0)) true) (contract_initializer_entry_17_C_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 state_1)))) - - -(declare-fun |contract_initializer_after_init_18_C_31_0| (Int Int |abi_type| |crypto_type| |tx_type| |state_type| |state_type| ) Bool) -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_20_0 Int) (expr_21_0 Int) (expr_22_1 Bool) (expr_25_0 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (funds_2_0 Int) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (state_3 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(=> (and (and (contract_initializer_entry_17_C_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 state_1) true) true) (contract_initializer_after_init_18_C_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 state_1)))) - - -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_20_0 Int) (expr_21_0 Int) (expr_22_1 Bool) (expr_25_0 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (funds_2_0 Int) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (state_3 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(=> (and (and (contract_initializer_after_init_18_C_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 state_1) true) true) (contract_initializer_16_C_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 state_1)))) - - -(declare-fun |implicit_constructor_entry_19_C_31_0| (Int Int |abi_type| |crypto_type| |tx_type| |state_type| |state_type| ) Bool) -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_20_0 Int) (expr_21_0 Int) (expr_22_1 Bool) (expr_25_0 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (funds_2_0 Int) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (state_3 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(=> (and (and (and (and (= state_1 state_0) (= error_0 0)) true) true) (>= (select (|balances| state_1) this_0) (|msg.value| tx_0))) (implicit_constructor_entry_19_C_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 state_1)))) - - -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_20_0 Int) (expr_21_0 Int) (expr_22_1 Bool) (expr_25_0 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (funds_2_0 Int) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (state_3 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(=> (and (and (implicit_constructor_entry_19_C_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 state_1) (and (contract_initializer_16_C_31_0 error_1 this_0 abi_0 crypto_0 tx_0 state_1 state_2) true)) (> error_1 0)) (summary_constructor_2_C_31_0 error_1 this_0 abi_0 crypto_0 tx_0 state_0 state_2)))) - - -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_20_0 Int) (expr_21_0 Int) (expr_22_1 Bool) (expr_25_0 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (funds_2_0 Int) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (state_3 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(=> (and (and (implicit_constructor_entry_19_C_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 state_1) (and (= error_1 0) (and (contract_initializer_16_C_31_0 error_1 this_0 abi_0 crypto_0 tx_0 state_1 state_2) true))) true) (summary_constructor_2_C_31_0 error_1 this_0 abi_0 crypto_0 tx_0 state_0 state_2)))) - - -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_20_0 Int) (expr_21_0 Int) (expr_22_1 Bool) (expr_25_0 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (funds_2_0 Int) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (state_3 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(=> (and (and (summary_constructor_2_C_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 state_1) true) (and (and (and (and (and (and (and (and (and (and (and (and (and (>= (|block.basefee| tx_0) 0) (<= (|block.basefee| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935)) (and (>= (|block.chainid| tx_0) 0) (<= (|block.chainid| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.coinbase| tx_0) 0) (<= (|block.coinbase| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|block.difficulty| tx_0) 0) (<= (|block.difficulty| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.gaslimit| tx_0) 0) (<= (|block.gaslimit| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.number| tx_0) 0) (<= (|block.number| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|block.timestamp| tx_0) 0) (<= (|block.timestamp| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|msg.sender| tx_0) 0) (<= (|msg.sender| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|msg.value| tx_0) 0) (<= (|msg.value| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (and (>= (|tx.origin| tx_0) 0) (<= (|tx.origin| tx_0) 1461501637330902918203684832716283019655932542975))) (and (>= (|tx.gasprice| tx_0) 0) (<= (|tx.gasprice| tx_0) 115792089237316195423570985008687907853269984665640564039457584007913129639935))) (= (|msg.value| tx_0) 0)) (= error_0 0))) (interface_0_C_31_0 this_0 abi_0 crypto_0 state_1)))) - - -(declare-fun |error_target_3_0| () Bool) -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_20_0 Int) (expr_21_0 Int) (expr_22_1 Bool) (expr_25_0 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (funds_2_0 Int) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (state_3 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(=> (and (and (interface_0_C_31_0 this_0 abi_0 crypto_0 state_0) true) (and (summary_4_function_simple_if__30_31_0 error_0 this_0 abi_0 crypto_0 tx_0 state_0 a_2_0 state_1 a_2_1 z_5_1) (= error_0 1))) error_target_3_0))) - - -(assert -(forall ( (a_2_0 Int) (a_2_1 Int) (a_2_2 Int) (abi_0 |abi_type|) (crypto_0 |crypto_type|) (error_0 Int) (error_1 Int) (expr_10_0 Int) (expr_11_0 Int) (expr_12_0 Int) (expr_13_1 Int) (expr_14_1 Int) (expr_16_0 Int) (expr_20_0 Int) (expr_21_0 Int) (expr_22_1 Bool) (expr_25_0 Int) (expr_7_0 Int) (expr_8_0 Int) (expr_9_1 Bool) (funds_2_0 Int) (state_0 |state_type|) (state_1 |state_type|) (state_2 |state_type|) (state_3 |state_type|) (this_0 Int) (tx_0 |tx_type|) (z_5_0 Int) (z_5_1 Int) (z_5_2 Int)) -(=> error_target_3_0 false))) -(check-sat) diff --git a/bench_adt/tree_insert_all_size.smt2 b/bench_adt/tree_insert_all_size.smt2 deleted file mode 100644 index 412dc4556..000000000 --- a/bench_adt/tree_insert_all_size.smt2 +++ /dev/null @@ -1,21 +0,0 @@ -(declare-datatypes () ((Tree (node (data Int) (left Tree) (right Tree)) (leaf)))) - -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun tinsert (Tree Int) Tree) -(assert (forall ((i Int)) (= (tinsert leaf i) (node i leaf leaf)))) -(assert (forall ((r Tree) (l Tree) (d Int) (i Int)) (= (tinsert (node d l r) i) (ite (< d i) (node d l (tinsert r i)) (node d (tinsert l i) r))))) - -(declare-fun tinsert-all (Tree Lst) Tree) -(assert (forall ((x Tree)) (= (tinsert-all x nil) x))) -(assert (forall ((x Tree) (n Int) (l Lst)) (= (tinsert-all x (cons n l)) (tinsert (tinsert-all x l) n)))) - -(declare-fun tsize (Tree) Int) -(assert (= (tsize leaf) 0)) -(assert (forall ((x Int) (l Tree) (r Tree)) (= (tsize (node x l r)) (+ 1 (+ (tsize l) (tsize r)))))) - -; extra lemmas -(assert (forall ((t Tree) (n Int)) (= (tsize (tinsert t n)) (+ 1 (tsize t))))) - -(assert (not (forall ((l Lst) (t Tree)) (<= (tsize t) (tsize (tinsert-all t l)))))) -(check-sat) diff --git a/bench_adt/tree_insert_size.smt2 b/bench_adt/tree_insert_size.smt2 deleted file mode 100644 index 9072ee375..000000000 --- a/bench_adt/tree_insert_size.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -(declare-datatypes () ((Tree (node (data Int) (left Tree) (right Tree)) (leaf)))) - -(declare-fun tinsert (Tree Int) Tree) -(assert (forall ((i Int)) (= (tinsert leaf i) (node i leaf leaf)))) -(assert (forall ((r Tree) (l Tree) (d Int) (i Int)) (= (tinsert (node d l r) i) (ite (< d i) (node d l (tinsert r i)) (node d (tinsert l i) r))))) - -(declare-fun tsize (Tree) Int) -(assert (= (tsize leaf) 0)) -(assert (forall ((x Int) (l Tree) (r Tree)) (= (tsize (node x l r)) (+ 1 (+ (tsize l) (tsize r)))))) - -(assert (not (forall ((t Tree) (n Int)) (= (tsize (tinsert t n)) (+ 1 (tsize t)))))) -(check-sat) diff --git a/bench_adt/tree_insert_sum.smt2 b/bench_adt/tree_insert_sum.smt2 deleted file mode 100644 index a177a9e06..000000000 --- a/bench_adt/tree_insert_sum.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -(declare-datatypes () ((Tree (node (data Int) (left Tree) (right Tree)) (leaf)))) - -(declare-fun tinsert (Tree Int) Tree) -(assert (forall ((i Int)) (= (tinsert leaf i) (node i leaf leaf)))) -(assert (forall ((r Tree) (l Tree) (d Int) (i Int)) (= (tinsert (node d l r) i) (ite (< d i) (node d l (tinsert r i)) (node d (tinsert l i) r))))) - -(declare-fun tsum (Tree) Int) -(assert (= (tsum leaf) 0)) -(assert (forall ((x Int) (l Tree) (r Tree)) (= (tsum (node x l r)) (+ x (+ (tsum l) (tsum r)))))) - -(assert (not (forall ((t Tree) (n Int)) (= (tsum (tinsert t n)) (+ n (tsum t)))))) -(check-sat) diff --git a/bench_adt/tree_size.smt2 b/bench_adt/tree_size.smt2 deleted file mode 100644 index 3ff42ce72..000000000 --- a/bench_adt/tree_size.smt2 +++ /dev/null @@ -1,8 +0,0 @@ -(declare-datatypes () ((Tree (node (data Int) (left Tree) (right Tree)) (leaf)))) - -(declare-fun tsize (Tree) Int) -(assert (= (tsize leaf) 0)) -(assert (forall ((x Int) (l Tree) (r Tree)) (= (tsize (node x l r)) (+ 1 (+ (tsize l) (tsize r)))))) - -(assert (not (forall ((x Tree)) (>= (tsize x) 0)))) -(check-sat) diff --git a/bench_horn_adt/ADTIND/heap_size.smt2 b/bench_horn_adt/ADTIND/heap_size.smt2 deleted file mode 100644 index 0eb903d16..000000000 --- a/bench_horn_adt/ADTIND/heap_size.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -(set-logic HORN) -(declare-datatypes () ((Heap (hleaf) (heap (rk Int) (value Int) (hleft Heap) (hright Heap))))) -(declare-fun hsize (Heap Int) Bool) - -(assert (hsize hleaf 0)) -(assert (forall ((k Int) (v Int) (l Heap) (r Heap) (m Heap) (sl Int) (sr Int)) - (=> (and (= m (heap k v l r)) (hsize l sl) (hsize r sr)) (hsize m (+ 1 (+ sl sr)))))) - -(assert (forall ((s Int) (m Heap)) - (=> (and (hsize m s) (not (>= s 0))) false))) -(check-sat) diff --git a/bench_horn_adt/ADTIND/list_append_ass.smt2 b/bench_horn_adt/ADTIND/list_append_ass.smt2 deleted file mode 100644 index b610f62d9..000000000 --- a/bench_horn_adt/ADTIND/list_append_ass.smt2 +++ /dev/null @@ -1,12 +0,0 @@ -(set-logic HORN) -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst Lst) Bool) - -(assert (forall ((xs Lst)) (append nil xs xs))) -(assert (forall ((x Int) (xs Lst) (ys Lst) (zs Lst) (rs Lst) (ts Lst)) - (=> (and (= xs (cons x ys)) (append ys zs rs) (= ts (cons x rs))) (append xs zs ts)))) - -(assert (forall ((xs Lst) (ys Lst) (zs Lst) (rs Lst) (ts Lst) (us Lst) (ws Lst)) - (=> (and (append ys zs rs) (append xs ys ts) (append xs rs us) (append ts zs ws) (not (= ws us))) false))) -(check-sat) \ No newline at end of file diff --git a/bench_horn_adt/ADTIND/list_append_len.smt2 b/bench_horn_adt/ADTIND/list_append_len.smt2 deleted file mode 100644 index aa966e4e2..000000000 --- a/bench_horn_adt/ADTIND/list_append_len.smt2 +++ /dev/null @@ -1,15 +0,0 @@ -(set-logic HORN) -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) -(declare-fun length (Lst Int) Bool) -(declare-fun append (Lst Lst Lst) Bool) - -(assert (length nil 0)) -(assert (forall ((x Int) (xs Lst) (ys Lst) (l Int)) - (=> (and (= xs (cons x ys)) (length ys l)) (length xs (+ l 1))))) - -(assert (forall ((xs Lst)) (append nil xs xs))) -(assert (forall ((x Int) (xs Lst) (ys Lst) (zs Lst) (rs Lst) (ts Lst)) (=> (and (= xs (cons x ys)) (append ys zs rs) (= ts (cons x rs))) (append xs zs ts)))) - -(assert (forall ((xs Lst) (lx Int) (ys Lst) (ly Int) (zs Lst) (lz Int)) - (=> (and (length xs lx) (length ys ly) (append xs ys zs) (length zs lz) (not (= (+ lx ly) lz))) false))) -(check-sat) diff --git a/bench_horn_adt/ADTIND/list_append_min.smt2 b/bench_horn_adt/ADTIND/list_append_min.smt2 deleted file mode 100644 index def469540..000000000 --- a/bench_horn_adt/ADTIND/list_append_min.smt2 +++ /dev/null @@ -1,18 +0,0 @@ -(set-logic HORN) -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst Lst) Bool) - -(assert (forall ((xs Lst)) (append nil xs xs))) -(assert (forall ((x Int) (xs Lst) (ys Lst) (zs Lst) (rs Lst) (ts Lst)) - (=> (and (= xs (cons x ys)) (append ys zs rs) (= ts (cons x rs))) (append xs zs ts)))) - -(declare-fun min (Lst Int) Bool) -(assert (min nil 0)) -(assert (forall ((x Int) (y Lst) (z Int) (r Int)) - (=> (and (min y z) (= r (ite (< z x) z x))) (min (cons x y) r)))) - -(assert (forall ((x Lst) (y Lst) (z Lst) (r Int) (s Int) (t Int)) - (=> (and (append x y z) (min x r) (min y s) (min z t) (not (<= t r))) false))) - -(check-sat) \ No newline at end of file diff --git a/bench_horn_adt/ADTIND/list_append_min2.smt2 b/bench_horn_adt/ADTIND/list_append_min2.smt2 deleted file mode 100644 index cd1036f1e..000000000 --- a/bench_horn_adt/ADTIND/list_append_min2.smt2 +++ /dev/null @@ -1,18 +0,0 @@ -(set-logic HORN) -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst Lst) Bool) - -(assert (forall ((xs Lst)) (append nil xs xs))) -(assert (forall ((x Int) (xs Lst) (ys Lst) (zs Lst) (rs Lst) (ts Lst)) - (=> (and (= xs (cons x ys)) (append ys zs rs) (= ts (cons x rs))) (append xs zs ts)))) - -(declare-fun min (Lst Int) Bool) -(assert (min nil 0)) -(assert (forall ((x Int) (y Lst) (z Int) (r Int)) - (=> (and (min y z) (= r (ite (< z x) z x))) (min (cons x y) r)))) - -(assert (forall ((x Lst) (y Lst) (z Lst) (r Int) (s Int) (t Int)) - (=> (and (append x y z) (min x r) (min y s) (min z t) (not (<= t s))) false))) - -(check-sat) \ No newline at end of file diff --git a/bench_horn_adt/ADTIND/list_append_nil.smt2 b/bench_horn_adt/ADTIND/list_append_nil.smt2 deleted file mode 100644 index 142ba1159..000000000 --- a/bench_horn_adt/ADTIND/list_append_nil.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -(set-logic HORN) -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) -(declare-fun append (Lst Lst Lst) Bool) - -(assert (forall ((xs Lst)) (append nil xs xs))) -(assert (forall ((x Int) (xs Lst) (ys Lst) (zs Lst) (rs Lst) (ts Lst)) - (=> (and (= xs (cons x ys)) (append ys zs rs) (= ts (cons x rs))) (append xs zs ts)))) - -(assert (forall ((xs Lst) (ys Lst)) - (=> (and (append xs nil ys) (not (= xs ys))) false))) -(check-sat) diff --git a/bench_horn_adt/ADTIND/list_append_sum.smt2 b/bench_horn_adt/ADTIND/list_append_sum.smt2 deleted file mode 100644 index 46cc61fe1..000000000 --- a/bench_horn_adt/ADTIND/list_append_sum.smt2 +++ /dev/null @@ -1,18 +0,0 @@ -(set-logic HORN) -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst Lst) Bool) - -(assert (forall ((xs Lst)) (append nil xs xs))) -(assert (forall ((x Int) (xs Lst) (ys Lst) (zs Lst) (rs Lst) (ts Lst)) - (=> (and (= xs (cons x ys)) (append ys zs rs) (= ts (cons x rs))) (append xs zs ts)))) - -(declare-fun sum (Lst Int) Bool) -(assert (sum nil 0)) -(assert (forall ((x Int) (y Lst) (z Int)) - (=> (sum y z) (sum (cons x y) (+ x z))))) - -(assert (forall ((x Lst) (y Lst) (z Lst) (r Int) (s Int) (t Int)) - (=> (and (append x y z) (sum x r) (sum y s) (sum z t) (not (= t (+ r s)))) false))) - -(check-sat) \ No newline at end of file diff --git a/bench_horn_adt/ADTIND/list_interleave.smt2 b/bench_horn_adt/ADTIND/list_interleave.smt2 deleted file mode 100644 index e8a25ec3f..000000000 --- a/bench_horn_adt/ADTIND/list_interleave.smt2 +++ /dev/null @@ -1,20 +0,0 @@ -(set-logic HORN) -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) -(declare-fun interleave (Lst Lst Lst) Bool) -(declare-fun evens (Lst Lst) Bool) -(declare-fun odds (Lst Lst) Bool) - -(assert (evens nil nil)) -(assert (odds nil nil)) -(assert (forall ((xs Lst) (ys Lst) (x Int) (rs Lst)) - (=> (and (= xs (cons x ys)) (odds ys rs)) (evens xs (cons x rs))))) -(assert (forall ((xs Lst) (ys Lst) (x Int) (rs Lst)) - (=> (and (= xs (cons x ys)) (evens ys rs)) (odds xs rs)))) -(assert (forall ((ys Lst) (zs Lst)) (=> (= zs nil) (interleave zs ys ys)))) -(assert (forall ((xs Lst) (ys Lst) (zs Lst) (z Int) (rs Lst)) - (=> (and (= zs (cons z xs)) (interleave ys xs rs)) - (interleave zs ys (cons z rs))))) - -(assert (forall ((xs Lst) (ys Lst) (zs Lst) (rs Lst)) - (=> (and (evens xs ys) (odds xs zs) (interleave ys zs rs) (not (= xs rs))) false))) -(check-sat) diff --git a/bench_horn_adt/ADTIND/list_len.smt2 b/bench_horn_adt/ADTIND/list_len.smt2 deleted file mode 100644 index 7ecf758aa..000000000 --- a/bench_horn_adt/ADTIND/list_len.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -(set-logic HORN) -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) -(declare-fun length (Lst Int) Bool) -(declare-fun ff () Bool) -(assert (length nil 0)) -(assert (forall ((x Int) (xs Lst) (ys Lst) (l Int)) - (=> (and (= xs (cons x ys)) (length ys l)) (length xs (+ l 1))))) -(assert (forall ((l Int) (xs Lst)) - (=> (and (length xs l) (not (>= l 0))) ff))) -(assert (not ff)) -(check-sat) \ No newline at end of file diff --git a/bench_horn_adt/ADTIND/list_len_butlast.smt2 b/bench_horn_adt/ADTIND/list_len_butlast.smt2 deleted file mode 100644 index dee9b4d7d..000000000 --- a/bench_horn_adt/ADTIND/list_len_butlast.smt2 +++ /dev/null @@ -1,17 +0,0 @@ -(set-logic HORN) -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) -(declare-fun length (Lst Int) Bool) -(declare-fun append (Lst Lst Lst) Bool) -(declare-fun butlast (Lst Lst) Bool) - -(assert (length nil 0)) -(assert (forall ((x Int) (xs Lst) (ys Lst) (l Int)) - (=> (and (= xs (cons x ys)) (length ys l)) (length xs (+ l 1))))) - -(assert (butlast nil nil)) -(assert (forall ((n Int) (xs Lst) (rs Lst) (ys Lst) (zs Lst)) - (=> (and (= ys (cons n xs)) (butlast xs zs) (= rs (ite (= xs nil) nil (cons n zs)))) (butlast ys rs)))) - -(assert (forall ((xs Lst) (ys Lst) (zs Lst) (n Int) (l1 Int) (l2 Int)) - (=> (and (= ys (cons n xs)) (butlast ys zs) (length ys l1) (length zs l2) (not (= (+ l2 1) l1))) false))) -(check-sat) diff --git a/bench_horn_adt/ADTIND/list_len_stren.smt2 b/bench_horn_adt/ADTIND/list_len_stren.smt2 deleted file mode 100644 index 562c1b1dd..000000000 --- a/bench_horn_adt/ADTIND/list_len_stren.smt2 +++ /dev/null @@ -1,18 +0,0 @@ -(set-logic HORN) -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun length (Lst Int) Bool) -(declare-fun length_str (Lst Int) Bool) - -(assert (length nil 0)) -(assert (forall ((x Int) (xs Lst) (ys Lst) (l Int)) - (=> (and (= xs (cons x ys)) (length ys l)) (length xs (+ l 1))))) - -(assert (length_str nil 0)) -(assert (forall ((x Int) (xs Lst) (ys Lst) (l1 Int) (l2 Int)) - (=> (and (= xs (cons x ys)) (length ys l1) (length_str ys l2)) (length_str xs (+ l1 l2))))) - -(assert (forall ((l Int) (xs Lst)) - (=> (and (length_str xs l) (not (>= l 0))) false))) - -(check-sat) diff --git a/bench_horn_adt/ADTIND/list_min_max.smt2 b/bench_horn_adt/ADTIND/list_min_max.smt2 deleted file mode 100644 index 7fd75df62..000000000 --- a/bench_horn_adt/ADTIND/list_min_max.smt2 +++ /dev/null @@ -1,15 +0,0 @@ -(set-logic HORN) -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) -(declare-fun min (Lst Int) Bool) -(assert (min nil 0)) -(assert (forall ((x Int) (xs Lst) (ys Lst) (l Int) (r Int)) - (=> (and (= xs (cons x ys)) (min ys l) (= r (ite (< l x) l x))) (min xs r)))) - -(declare-fun max (Lst Int) Bool) -(assert (max nil 0)) -(assert (forall ((x Int) (xs Lst) (ys Lst) (l Int) (r Int)) - (=> (and (= xs (cons x ys)) (max ys l) (= r (ite (> l x) l x))) (max xs r)))) - -(assert (forall ((x Int) (y Int) (xs Lst)) - (=> (and (min xs x) (max xs y) (not (>= y x))) false))) -(check-sat) \ No newline at end of file diff --git a/bench_horn_adt/ADTIND/list_min_sum.smt2 b/bench_horn_adt/ADTIND/list_min_sum.smt2 deleted file mode 100644 index 7bcf4429c..000000000 --- a/bench_horn_adt/ADTIND/list_min_sum.smt2 +++ /dev/null @@ -1,16 +0,0 @@ -(set-logic HORN) -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun min (Lst Int) Bool) -(assert (min nil 0)) -(assert (forall ((x Int) (xs Lst) (ys Lst) (l Int) (r Int)) - (=> (and (= xs (cons x ys)) (min ys l) (= r (ite (< l x) l x))) (min xs r)))) - -(declare-fun sum (Lst Int) Bool) -(assert (sum nil 0)) -(assert (forall ((x Int) (y Lst) (z Int)) - (=> (sum y z) (sum (cons x y) (+ x z))))) - -(assert (forall ((x Int) (y Int) (xs Lst)) - (=> (and (min xs x) (sum xs y) (>= x 0) (not (>= y 0))) false))) -(check-sat) \ No newline at end of file diff --git a/bench_horn_adt/ADTIND/list_min_sum_len.smt2 b/bench_horn_adt/ADTIND/list_min_sum_len.smt2 deleted file mode 100644 index 8fee8b338..000000000 --- a/bench_horn_adt/ADTIND/list_min_sum_len.smt2 +++ /dev/null @@ -1,22 +0,0 @@ -(set-logic HORN) -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun min (Lst Int) Bool) -(assert (min nil 0)) -(assert (forall ((x Int) (xs Lst) (ys Lst) (l Int) (r Int)) - (=> (and (= xs (cons x ys)) (min ys l) (= r (ite (< l x) l x))) (min xs r)))) - -(declare-fun sum (Lst Int) Bool) -(assert (sum nil 0)) -(assert (forall ((x Int) (y Lst) (z Int)) - (=> (sum y z) (sum (cons x y) (+ x z))))) - - -(declare-fun length (Lst Int) Bool) -(assert (length nil 0)) -(assert (forall ((x Int) (xs Lst) (ys Lst) (l Int)) - (=> (and (= xs (cons x ys)) (length ys l)) (length xs (+ l 1))))) - -(assert (forall ((x Int) (s Int) (l Int) (xs Lst)) - (=> (and (min xs x) (sum xs s) (length xs l) (> x 0) (not (>= s l))) false))) -(check-sat) \ No newline at end of file diff --git a/bench_horn_adt/ADTIND/list_rev.smt2 b/bench_horn_adt/ADTIND/list_rev.smt2 deleted file mode 100644 index 61cbe359c..000000000 --- a/bench_horn_adt/ADTIND/list_rev.smt2 +++ /dev/null @@ -1,24 +0,0 @@ -(set-logic HORN) -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst Lst) Bool) -(assert (forall ((xs Lst)) (append nil xs xs))) -(assert (forall ((x Int) (xs Lst) (ys Lst) (zs Lst) (rs Lst) (ts Lst)) - (=> (and (= xs (cons x ys)) (append ys zs rs) (= ts (cons x rs))) (append xs zs ts)))) - -(declare-fun rev (Lst Lst) Bool) -(assert (rev nil nil)) -(assert (forall ((xs Lst) (x Int) (ys Lst) (rs Lst) (ts Lst)) - (=> (and (= xs (cons x ys)) (rev ys rs) (append rs (cons x nil) ts)) (rev xs ts)))) - -; extra lemmas -(assert (forall ((xs Lst) (ys Lst) (zs Lst) (rs Lst) (ts Lst) (us Lst) (ws Lst)) - (=> (and (append ys zs rs) (append xs ys ts) (append xs rs us) (append ts zs ws) (not (= us ws))) false))) -(assert (forall ((xs Lst) (ys Lst)) (=> (and (append xs nil ys) (not (= xs ys))) false))) -(assert (forall ((xs Lst) (ys Lst) (zs Lst) (us Lst) (rs Lst) (ts Lst) (vs Lst)) - (=> (and (append xs ys zs) (rev ys rs) (rev xs ts) (append rs ts us) (rev zs vs) (not (= us vs))) false))) - -(assert (forall ((xs Lst) (ys Lst) (zs Lst)) (=> (and (rev xs ys) (rev ys zs) (not (= xs zs))) false))) - -(check-sat) -(assert (forall ((x Int) (y Int)) (=> (> x y) (max x y x)))) \ No newline at end of file diff --git a/bench_horn_adt/ADTIND/list_rev2_append.smt2 b/bench_horn_adt/ADTIND/list_rev2_append.smt2 deleted file mode 100644 index 0ac67e57a..000000000 --- a/bench_horn_adt/ADTIND/list_rev2_append.smt2 +++ /dev/null @@ -1,25 +0,0 @@ -(set-logic HORN) -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) -(declare-fun append (Lst Lst Lst) Bool) - -(assert (forall ((xs Lst)) (append nil xs xs))) -(assert (forall ((x Int) (xs Lst) (ys Lst) (zs Lst) (rs Lst) (ts Lst)) - (=> (and (= xs (cons x ys)) (append ys zs rs) (= ts (cons x rs))) (append xs zs ts)))) - -(declare-fun rev2 (Lst Lst Lst) Bool) -(assert (forall ((a Lst)) (rev2 nil a a))) -(assert (forall ((x Int) (ts Lst) (xs Lst) (zs Lst) (rs Lst) (us Lst)) - (=> (and (= xs (cons x ts)) (= rs (cons x zs)) (rev2 ts rs us)) (rev2 xs zs us)))) - -; extra lemma -; (assert (forall ((xs Lst) (ys Lst) (zs Lst) (rs Lst) (ts Lst) (us Lst) (vs Lst)) -; (=> (and (append xs ys rs) (append ys zs ts) (append xs ts us) (append rs zs vs) (not (= us vs))) false))) - - -(assert (forall ((xs Lst) (ys Lst) (zs Lst) (rs Lst) (ts Lst) (us Lst)) - (=> (and (append xs ys rs) (append ys zs ts) (append xs ts us)) (append rs zs us)))) - -(assert (forall ((xs Lst) (zs Lst) (ts Lst) (us Lst) (ys Lst)) - (=> (and (rev2 xs zs ts) (rev2 xs nil ys) (append ys zs us) (not (= ts us))) false))) - -(check-sat) diff --git a/bench_horn_adt/ADTIND/list_rev2_len.smt2 b/bench_horn_adt/ADTIND/list_rev2_len.smt2 deleted file mode 100644 index 8a62d2107..000000000 --- a/bench_horn_adt/ADTIND/list_rev2_len.smt2 +++ /dev/null @@ -1,29 +0,0 @@ -(set-logic HORN) -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) -(declare-fun append (Lst Lst Lst) Bool) -(declare-fun rev2 (Lst Lst Lst) Bool) -(declare-fun len (Lst Int) Bool) - -(assert (len nil 0)) -(assert (forall ((x Int) (xs Lst) (ys Lst) (l Int)) - (=> (and (= xs (cons x ys)) (len ys l)) (len xs (+ l 1))))) - -(assert (forall ((xs Lst)) (append nil xs xs))) -(assert (forall ((x Int) (xs Lst) (ys Lst) (zs Lst) (rs Lst) (ts Lst)) - (=> (and (= xs (cons x ys)) (append ys zs rs) (= ts (cons x rs))) (append xs zs ts)))) - -(assert (forall ((xs Lst)) (rev2 nil xs xs))) -(assert (forall ((xs Lst) (ys Lst) (zs Lst) (rs Lst) (x Int) (ts Lst)) - (=> (and (= xs (cons x ys)) (= zs (cons x ts)) (rev2 ys zs rs)) (rev2 xs ts rs)))) - - -; extra lemmas -(assert (forall ((xs Lst) (ys Lst) (zs Lst) (lx Int) (ly Int) (lz Int)) - (=> (and (append xs ys zs) (len xs lx) (len ys ly) (len zs lz) (not (= lz (+ lx ly)))) false))) -(assert (forall ((xs Lst) (ys Lst) (rs Lst) (zs Lst) (vs Lst) ) - (=> (and (rev2 xs nil zs) (append zs ys rs) (rev2 xs ys vs) (not (= vs rs))) false))) - -(assert (forall ((xs Lst) (ys Lst) (lx Int) (ly Int)) - (=> (and (rev2 xs nil ys) (len xs lx) (len ys ly) (not (= lx ly))) false))) - -(check-sat) diff --git a/bench_horn_adt/ADTIND/list_rev_append.smt2 b/bench_horn_adt/ADTIND/list_rev_append.smt2 deleted file mode 100644 index 51e4674b7..000000000 --- a/bench_horn_adt/ADTIND/list_rev_append.smt2 +++ /dev/null @@ -1,17 +0,0 @@ -(set-logic HORN) -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst Lst) Bool) -(assert (forall ((xs Lst)) (append nil xs xs))) -(assert (forall ((x Int) (xs Lst) (ys Lst) (zs Lst) (rs Lst) (ts Lst)) - (=> (and (= xs (cons x ys)) (append ys zs rs) (= ts (cons x rs))) (append xs zs ts)))) - -(declare-fun rev (Lst Lst) Bool) -(assert (rev nil nil)) -(assert (forall ((xs Lst) (x Int) (ys Lst) (rs Lst) (ts Lst)) - (=> (and (= xs (cons x ys)) (rev ys rs) (append rs (cons x nil) ts)) (rev xs ts)))) - -(assert (forall ((xs Lst) (ys Lst) (zs Lst) (rs Lst) (ts Lst) (us Lst) (ws Lst)) - (=> (and (append xs ys zs) (rev zs rs) (rev ys ts) (rev xs us) (append ts us ws) (not (= rs ws))) false))) - -(check-sat) \ No newline at end of file diff --git a/bench_horn_adt/ADTIND/list_rev_len.smt2 b/bench_horn_adt/ADTIND/list_rev_len.smt2 deleted file mode 100644 index 046dace5d..000000000 --- a/bench_horn_adt/ADTIND/list_rev_len.smt2 +++ /dev/null @@ -1,26 +0,0 @@ -(set-logic HORN) -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst Lst) Bool) -(assert (forall ((xs Lst)) (append nil xs xs))) -(assert (forall ((x Int) (xs Lst) (ys Lst) (zs Lst) (rs Lst) (ts Lst)) - (=> (and (= xs (cons x ys)) (append ys zs rs) (= ts (cons x rs))) (append xs zs ts)))) - -(declare-fun rev (Lst Lst) Bool) -(assert (rev nil nil)) -(assert (forall ((xs Lst) (x Int) (ys Lst) (rs Lst) (ts Lst)) - (=> (and (= xs (cons x ys)) (rev ys rs) (append rs (cons x nil) ts)) (rev xs ts)))) - -(declare-fun length (Lst Int) Bool) -(assert (length nil 0)) -(assert (forall ((x Int) (xs Lst) (ys Lst) (l Int)) - (=> (and (= xs (cons x ys)) (length ys l)) (length xs (+ l 1))))) - -(assert (forall ((xs Lst) (lx Int) (ys Lst) (ly Int) (zs Lst) (lz Int)) - (=> (and (length xs lx) (length ys ly) (append xs ys zs) (length zs lz) (not (= (+ lx ly) lz))) false))) - -(assert (forall ((xs Lst) (lx Int) (ys Lst) (ly Int)) - (=> (and (length xs lx) (length ys ly) (rev xs ys) (not (= lx ly))) false))) - - -(check-sat) diff --git a/bench_horn_adt/ADTIND/queue_amort.smt2 b/bench_horn_adt/ADTIND/queue_amort.smt2 deleted file mode 100644 index 2d6458373..000000000 --- a/bench_horn_adt/ADTIND/queue_amort.smt2 +++ /dev/null @@ -1,41 +0,0 @@ -(set-logic HORN) -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) -(declare-datatypes () ((Queue (queue (front Lst) (back Lst))))) - -(declare-fun len (Lst Int) Bool) - -(assert (len nil 0)) -(assert (forall ((x Int) (xs Lst) (ys Lst) (l Int)) - (=> (and (= xs (cons x ys)) (len ys l)) (len xs (+ l 1))))) - -(declare-fun append (Lst Lst Lst) Bool) -(assert (forall ((xs Lst)) (append nil xs xs))) -(assert (forall ((x Int) (xs Lst) (ys Lst) (zs Lst) (rs Lst) (ts Lst)) - (=> (and (= xs (cons x ys)) (append ys zs rs) (= ts (cons x rs))) (append xs zs ts)))) - - -(declare-fun rev2 (Lst Lst Lst) Bool) -(assert (forall ((xs Lst)) (rev2 nil xs xs))) -(assert (forall ((x Int) (ts Lst) (xs Lst) (zs Lst) (rs Lst) (us Lst)) - (=> (and (= xs (cons x ts)) (= rs (cons x zs)) (rev2 ts rs us)) (rev2 xs zs us)))) - -(declare-fun qrev (Lst Lst) Bool) -(assert (forall ((xs Lst) (ys Lst)) (=> (rev2 xs nil ys) (qrev xs ys)))) - -(declare-fun amortizeQueue (Lst Lst Queue) Bool) -(assert (forall ((x Lst) (y Lst) (q Queue) (ly Int) (lx Int) (z Lst) (a Lst)) - (=> (and (len y ly) (len x lx) (qrev y z) (append x z a) - (= q (ite (<= ly lx) (queue x y) (queue a nil)))) (amortizeQueue x y q)))) - -(declare-fun isAmortized (Queue Bool) Bool) -(assert (forall ((x Lst) (y Lst) (lx Int) (ly Int)) - (=> (and (len x lx) (len y ly) (<= ly lx)) (isAmortized (queue x y) true)))) - -; extra lemma -(assert (forall ((l Int) (xs Lst)) - (=> (and (len xs l) (not (>= l 0))) false))) - -(assert (forall ((x Lst) (y Lst) (q Queue)) - (=> (and (amortizeQueue x y q) (not (isAmortized q true))) false))) - -(check-sat) \ No newline at end of file diff --git a/bench_horn_adt/ADTIND/queue_len.smt2 b/bench_horn_adt/ADTIND/queue_len.smt2 deleted file mode 100644 index c070b2362..000000000 --- a/bench_horn_adt/ADTIND/queue_len.smt2 +++ /dev/null @@ -1,43 +0,0 @@ -(set-logic HORN) -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) -(declare-datatypes () ((Queue (queue (front Lst) (back Lst))))) - -(declare-fun len (Lst Int) Bool) - -(assert (len nil 0)) -(assert (forall ((x Int) (xs Lst) (ys Lst) (l Int)) - (=> (and (= xs (cons x ys)) (len ys l)) (len xs (+ l 1))))) - -(declare-fun qlen (Queue Int) Bool) -(assert (forall ((x Lst) (y Lst) (lx Int) (ly Int) (lq Int)) - (=> (and (len x lx) (len y ly)) (qlen (queue x y) (+ lx ly))))) - -(declare-fun append (Lst Lst Lst) Bool) -(assert (forall ((xs Lst)) (append nil xs xs))) -(assert (forall ((x Int) (xs Lst) (ys Lst) (zs Lst) (rs Lst) (ts Lst)) - (=> (and (= xs (cons x ys)) (append ys zs rs) (= ts (cons x rs))) (append xs zs ts)))) - - -(declare-fun rev2 (Lst Lst Lst) Bool) -(assert (forall ((zs Lst)) (rev2 nil zs zs))) -(assert (forall ((x Int) (ts Lst) (xs Lst) (zs Lst) (rs Lst) (us Lst)) - (=> (and (= xs (cons x ts)) (= rs (cons x zs)) (rev2 ts rs us)) (rev2 xs zs us)))) - -(declare-fun qrev (Lst Lst) Bool) -(assert (forall ((xs Lst) (ys Lst)) (=> (rev2 xs nil ys) (qrev xs ys)))) - -(declare-fun amortizeQueue (Lst Lst Queue) Bool) -(assert (forall ((x Lst) (y Lst) (q Queue) (ly Int) (lx Int) (z Lst) (a Lst)) - (=> (and (len y ly) (len x lx) (qrev y z) (append x z a) - (= q (ite (<= ly lx) (queue x y) (queue a nil)))) (amortizeQueue x y q)))) - -; extra lemmas -(assert (forall ((xs Lst) (ys Lst) (lx Int) (ly Int)) - (=> (and (rev2 xs nil ys) (len xs lx) (len ys ly) (not (= ly lx))) false))) -(assert (forall ((x Lst) (y Lst) (z Lst) (lx Int) (ly Int) (lz Int)) - (=> (and (append x y z) (len x lx) (len y ly) (len z lz) (not (= lz (+ lx ly)))) false))) - -(assert (forall ((x Lst) (y Lst) (q Queue) (lx Int) (ly Int) (lq Int)) - (=> (and (amortizeQueue x y q) (qlen q lq) (len x lx) (len y ly) (not (= lq (+ lx ly)))) false))) - -(check-sat) diff --git a/bench_horn_adt/ADTIND/queue_popback.smt2 b/bench_horn_adt/ADTIND/queue_popback.smt2 deleted file mode 100644 index 773c65589..000000000 --- a/bench_horn_adt/ADTIND/queue_popback.smt2 +++ /dev/null @@ -1,44 +0,0 @@ -(set-logic HORN) -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) -(declare-datatypes () ((Queue (queue (front Lst) (back Lst))))) - -(declare-fun len (Lst Int) Bool) -(assert (len nil 0)) -(assert (forall ((x Int) (xs Lst) (ys Lst) (l Int)) - (=> (and (= xs (cons x ys)) (len ys l)) (len xs (+ l 1))))) - -(declare-fun qlen (Queue Int) Bool) -(assert (forall ((x Lst) (y Lst) (lx Int) (ly Int) (lq Int)) - (=> (and (len x lx) (len y ly)) (qlen (queue x y) (+ lx ly))))) - -(declare-fun append (Lst Lst Lst) Bool) -(assert (forall ((xs Lst)) (append nil xs xs))) -(assert (forall ((x Int) (xs Lst) (ys Lst) (zs Lst) (rs Lst) (ts Lst)) - (=> (and (= xs (cons x ys)) (append ys zs rs) (= ts (cons x rs))) (append xs zs ts)))) - - -(declare-fun butlast (Lst Lst) Bool) -(assert (butlast nil nil)) -(assert (forall ((n Int) (x Lst) (y Lst) (z Lst)) - (=> (and (butlast x y) (= z (ite (= x nil) nil (cons n y)))) (butlast (cons n x) z)))) - -(declare-fun qpopback (Queue Queue) Bool) -(assert (forall ((x Lst) (y Lst) (n Int)) (qpopback (queue x (cons n y)) (queue x y)))) -(assert (forall ((x Lst) (y Lst)) (=> (butlast x y) (qpopback (queue x nil) (queue y nil))))) - -(declare-fun isAmortized (Queue Bool) Bool) -(assert (forall ((x Lst) (y Lst) (lx Int) (ly Int)) - (=> (and (len x lx) (len y ly) (<= ly lx)) (isAmortized (queue x y) true)))) - -(declare-fun isNotEmpty (Queue Bool) Bool) -(assert (forall ((x Lst) (y Lst) (n Int) (z Lst)) (=> (= x (cons n y)) (isNotEmpty (queue x z) true)))) -(assert (forall ((x Lst) (y Lst) (n Int) (z Lst)) (=> (= z (cons n y)) (isNotEmpty (queue x z) true)))) - -; extra lemma -(assert (forall ((x Lst) (n Int) (y Lst) (lx Int) (ly Int)) - (=> (and (butlast (cons n x) y) (len y ly) (len x lx) (not (= lx ly))) false))) - -(assert (forall ((q Queue) (n Int) (p Queue) (lp Int) (lq Int)) - (=> (and (isNotEmpty q true) (isAmortized q true) (qpopback q p) (qlen p lp) (qlen q lq) - (not (= (+ 1 lp) lq))) false))) -(check-sat) diff --git a/bench_horn_adt/ADTIND/queue_push.smt2 b/bench_horn_adt/ADTIND/queue_push.smt2 deleted file mode 100644 index a3bb98d87..000000000 --- a/bench_horn_adt/ADTIND/queue_push.smt2 +++ /dev/null @@ -1,47 +0,0 @@ -(set-logic HORN) -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) -(declare-datatypes () ((Queue (queue (front Lst) (back Lst))))) - -(declare-fun len (Lst Int) Bool) - -(assert (len nil 0)) -(assert (forall ((x Int) (xs Lst) (ys Lst) (l Int)) - (=> (and (= xs (cons x ys)) (len ys l)) (len xs (+ l 1))))) - -(declare-fun qlen (Queue Int) Bool) -(assert (forall ((x Lst) (y Lst) (lx Int) (ly Int) (lq Int)) - (=> (and (len x lx) (len y ly)) (qlen (queue x y) (+ lx ly))))) - -(declare-fun append (Lst Lst Lst) Bool) -(assert (forall ((xs Lst)) (append nil xs xs))) -(assert (forall ((x Int) (xs Lst) (ys Lst) (zs Lst) (rs Lst) (ts Lst)) - (=> (and (= xs (cons x ys)) (append ys zs rs) (= ts (cons x rs))) (append xs zs ts)))) - - -(declare-fun rev2 (Lst Lst Lst) Bool) -(assert (forall ((zs Lst)) (rev2 nil zs zs))) -(assert (forall ((x Int) (ts Lst) (xs Lst) (zs Lst) (rs Lst) (us Lst)) - (=> (and (= xs (cons x ts)) (= rs (cons x zs)) (rev2 ts rs us)) (rev2 xs zs us)))) - -(declare-fun qrev (Lst Lst) Bool) -(assert (forall ((xs Lst) (ys Lst)) (=> (rev2 xs nil ys) (qrev xs ys)))) - -(declare-fun amortizeQueue (Lst Lst Queue) Bool) -(assert (forall ((x Lst) (y Lst) (q Queue) (ly Int) (lx Int) (z Lst) (a Lst)) - (=> (and (len y ly) (len x lx) (qrev y z) (append x z a) (<= ly lx) (= q (queue x y))) - (amortizeQueue x y q)))) -(assert (forall ((x Lst) (y Lst) (q Queue) (ly Int) (lx Int) (z Lst) (a Lst)) - (=> (and (len y ly) (len x lx) (qrev y z) (append x z a) (> ly lx) (= q (queue a nil))) - (amortizeQueue x y q)))) - -(declare-fun qpush (Queue Int Queue) Bool) -(assert (forall ((x Lst) (y Lst) (n Int) (q Queue)) - (=> (amortizeQueue x (cons n y) q) (qpush (queue x y) n q)))) - -; extra lemma -(assert (forall ((x Lst) (y Lst) (q Queue) (lx Int) (ly Int) (lq Int)) - (=> (and (len x lx) (len y ly) (amortizeQueue x y q) (qlen q lq) (not (= lq (+ lx ly)))) false))) - -(assert (forall ((q Queue) (n Int) (p Queue) (lp Int) (lq Int)) - (=> (and (qpush q n p) (qlen p lp) (qlen q lq) (not (= lp (+ 1 lq)))) false))) -(check-sat) diff --git a/bench_horn_adt/ADTIND/queue_push_to_list.smt2 b/bench_horn_adt/ADTIND/queue_push_to_list.smt2 deleted file mode 100644 index 99915397a..000000000 --- a/bench_horn_adt/ADTIND/queue_push_to_list.smt2 +++ /dev/null @@ -1,52 +0,0 @@ -(set-logic HORN) -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) -(declare-datatypes () ((Queue (queue (front Lst) (back Lst))))) - -(declare-fun len (Lst Int) Bool) - -(assert (len nil 0)) -(assert (forall ((x Int) (xs Lst) (ys Lst) (l Int)) - (=> (and (= xs (cons x ys)) (len ys l)) (len xs (+ l 1))))) - -(declare-fun qlen (Queue Int) Bool) -(assert (forall ((x Lst) (y Lst) (lx Int) (ly Int) (lq Int)) - (=> (and (len x lx) (len y ly)) (qlen (queue x y) (+ lx ly))))) - -(declare-fun append (Lst Lst Lst) Bool) -(assert (forall ((xs Lst)) (append nil xs xs))) -(assert (forall ((x Int) (xs Lst) (ys Lst) (zs Lst) (rs Lst) (ts Lst)) - (=> (and (= xs (cons x ys)) (append ys zs rs) (= ts (cons x rs))) (append xs zs ts)))) - -(declare-fun rev2 (Lst Lst Lst) Bool) -(assert (forall ((zs Lst)) (rev2 nil zs zs))) -(assert (forall ((x Int) (ts Lst) (xs Lst) (zs Lst) (rs Lst) (us Lst)) - (=> (and (= xs (cons x ts)) (= rs (cons x zs)) (rev2 ts rs us)) (rev2 xs zs us)))) - -(declare-fun qrev (Lst Lst) Bool) -(assert (forall ((xs Lst) (ys Lst)) - (=> (rev2 xs nil ys) (qrev xs ys)))) - -(declare-fun amortizeQueue (Lst Lst Queue) Bool) -(assert (forall ((x Lst) (y Lst) (q Queue) (ly Int) (lx Int) (z Lst) (a Lst)) - (=> (and (len y ly) (len x lx) (qrev y z) (append x z a) - (= q (ite (<= ly lx) (queue x y) (queue a nil)))) (amortizeQueue x y q)))) - -(declare-fun qpush (Queue Int Queue) Bool) -(assert (forall ((x Lst) (y Lst) (n Int) (q Queue)) - (=> (amortizeQueue x (cons n y) q) (qpush (queue x y) n q)))) - - -(declare-fun queue-to-lst (Queue Lst) Bool) -(assert (forall ((x Lst) (y Lst) (q Queue) (z Lst) (a Lst)) - (=> (and (qrev y z) (append x z a)) (queue-to-lst (queue x y) a)))) -; extra lemmas -(assert (forall ((xs Lst) (ys Lst) (zs Lst) (rs Lst) (ts Lst) (us Lst) (vs Lst)) - (=> (and (append xs ys rs) (append ys zs ts) (append xs ts us) (append rs zs vs) (not (= vs us))) false))) -(assert (forall ((x Lst) (a Lst) (y Lst) (z Lst) (r Lst)) - (=> (and (rev2 x nil y) (append y a z) (rev2 x a r) (not (= z r))) false))) - -(assert (forall ((q Queue) (n Int) (x Lst) (y Lst) (p Queue) (z Lst)) - (=> (and (queue-to-lst q x) (append x (cons n nil) y) (qpush q n p) (queue-to-lst p z) (not (= y z))) - false))) - -(check-sat) diff --git a/bench_horn_adt/ADTIND/tree_insert_all_size.smt2 b/bench_horn_adt/ADTIND/tree_insert_all_size.smt2 deleted file mode 100644 index a25427546..000000000 --- a/bench_horn_adt/ADTIND/tree_insert_all_size.smt2 +++ /dev/null @@ -1,30 +0,0 @@ -(set-logic HORN) -(declare-datatypes () ((Tree (node (data Int) (left Tree) (right Tree)) (leaf)))) -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun size (Tree Int) Bool) -(declare-fun insert (Tree Int Tree) Bool) -(declare-fun insert-all (Tree Lst Tree) Bool) - -(assert (size leaf 0)) -(assert (forall ((x Int) (r Tree) (l Tree) (m Tree) (sl Int) (sr Int)) - (=> (and (= m (node x l r)) (size l sl) (size r sr)) (size m (+ 1 (+ sl sr)))))) - -(assert (forall ((i Int)) (insert leaf i (node i leaf leaf)))) - -(assert (forall ((r Tree) (l Tree) (d Int) (i Int) (x Tree) (y Tree) (m Tree)) - (=> (and (insert r i x) (insert l i y) - (= m (ite (< d i) (node d l x) (node d y r)))) (insert (node d l r) i m)))) - -(assert (forall ((x Tree)) (insert-all x nil x))) -(assert (forall ((x Tree) (n Int) (ls Lst) (xs Lst) (z Tree) (y Tree)) - (=> (and (insert-all x ls y) (= xs (cons n ls)) (insert y n z)) (insert-all x xs z)))) - -;extra lemmas -(assert (forall ((t Tree) (n Int) (st Int) (x Tree) (sx Int)) - (=> (and (size t st) (insert t n x) (size x sx) (not (= sx (+ 1 st)))) false))) - -(assert (forall ((l Lst) (t Tree) (i Int) (x Tree) (m Int) (n Int)) - (=> (and (size t n) (insert t i x) (size x m) (not (= m (+ 1 n)))) false))) - -(check-sat) diff --git a/bench_horn_adt/ADTIND/tree_insert_size.smt2 b/bench_horn_adt/ADTIND/tree_insert_size.smt2 deleted file mode 100644 index a3f35680f..000000000 --- a/bench_horn_adt/ADTIND/tree_insert_size.smt2 +++ /dev/null @@ -1,20 +0,0 @@ -(set-logic HORN) -(declare-datatypes () ((Tree (node (data Int) (left Tree) (right Tree)) (leaf)))) - -(declare-fun size (Tree Int) Bool) -(declare-fun insert (Tree Int Tree) Bool) - -(assert (size leaf 0)) -(assert (forall ((x Int) (r Tree) (l Tree) (m Tree) (sl Int) (sr Int)) - (=> (and (= m (node x l r)) (size l sl) (size r sr)) (size m (+ 1 (+ sl sr)))))) - -(assert (forall ((i Int)) (insert leaf i (node i leaf leaf)))) - -(assert (forall ((r Tree) (l Tree) (d Int) (i Int) (x Tree) (y Tree) (m Tree)) - (=> (and (insert r i x) (insert l i y) - (= m (ite (< d i) (node d l x) (node d y r)))) (insert (node d l r) i m)))) - -(assert (forall ((t Tree) (n Int) (ts Int) (rs Int) (r Tree)) - (=> (and (size t ts) (insert t n r) (size r rs) (not (= rs (+ 1 ts)))) false))) - -(check-sat) diff --git a/bench_horn_adt/ADTIND/tree_insert_sum.smt2 b/bench_horn_adt/ADTIND/tree_insert_sum.smt2 deleted file mode 100644 index cf9b60bcb..000000000 --- a/bench_horn_adt/ADTIND/tree_insert_sum.smt2 +++ /dev/null @@ -1,19 +0,0 @@ -(set-logic HORN) -(declare-datatypes () ((Tree (node (data Int) (left Tree) (right Tree)) (leaf)))) - -(declare-fun sum (Tree Int) Bool) -(declare-fun insert (Tree Int Tree) Bool) - -(assert (sum leaf 0)) -(assert (forall ((x Int) (r Tree) (l Tree) (m Tree) (sl Int) (sr Int)) - (=> (and (= m (node x l r)) (sum l sl) (sum r sr)) (sum m (+ x (+ sl sr)))))) - -(assert (forall ((i Int)) (insert leaf i (node i leaf leaf)))) -(assert (forall ((r Tree) (l Tree) (d Int) (i Int) (x Tree) (y Tree) (m Tree)) - (=> (and (insert r i x) (insert l i y) - (= m (ite (< d i) (node d l x) (node d y r)))) (insert (node d l r) i m)))) - -(assert (forall ((t Tree) (n Int) (ts Int) (rs Int) (r Tree)) - (=> (and (sum t ts) (insert t n r) (sum r rs) (not (= rs (+ n ts)))) false))) - -(check-sat) \ No newline at end of file diff --git a/bench_horn_adt/ADTIND/tree_size.smt2 b/bench_horn_adt/ADTIND/tree_size.smt2 deleted file mode 100644 index 53baddd39..000000000 --- a/bench_horn_adt/ADTIND/tree_size.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -(set-logic HORN) -(declare-datatypes () ((Tree (node (data Int) (left Tree) (right Tree)) (nil)))) -(declare-fun size (Tree Int) Bool) - -(assert (size nil 0)) -(assert (forall ((x Int) (r Tree) (l Tree) (m Tree) (sl Int) (sr Int)) - (=> (and (= m (node x l r)) (size l sl) (size r sr)) (size m (+ sl sr))))) - -(assert (forall ((s Int) (m Tree)) - (=> (and (size m s) (not (>= s 0))) false))) -(check-sat) diff --git a/bench_horn_adt/LEON/amortize-queue-goal1.smt2 b/bench_horn_adt/LEON/amortize-queue-goal1.smt2 deleted file mode 100644 index 17353aaca..000000000 --- a/bench_horn_adt/LEON/amortize-queue-goal1.smt2 +++ /dev/null @@ -1,19 +0,0 @@ -(set-logic HORN) - -; lists -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst Lst) Bool) -(assert (forall ((xs Lst)) (append nil xs xs))) -(assert (forall ((x Int) (xs Lst) (ys Lst) (zs Lst) (rs Lst) (ts Lst)) - (=> (and (= xs (cons x ys)) (append ys zs rs) (= ts (cons x rs))) (append xs zs ts)))) - -(declare-fun len (Lst Int) Bool) -(assert (len nil 0)) -(assert (forall ((x Int) (xs Lst) (ys Lst) (l Int)) - (=> (and (= xs (cons x ys)) (len ys l)) (len xs (+ l 1))))) - -; conjecture -(assert (forall ((xs Lst) (lx Int) (ys Lst) (ly Int) (zs Lst) (lz Int)) - (=> (and (len xs lx) (len ys ly) (append xs ys zs) (len zs lz) (not (= (+ lx ly) lz))) false))) ; G-amortize-queue-1 -(check-sat) diff --git a/bench_horn_adt/LEON/amortize-queue-goal10.smt2 b/bench_horn_adt/LEON/amortize-queue-goal10.smt2 deleted file mode 100644 index 2269c4d23..000000000 --- a/bench_horn_adt/LEON/amortize-queue-goal10.smt2 +++ /dev/null @@ -1,19 +0,0 @@ -(set-logic HORN) - -; lists -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst Lst) Bool) -(assert (forall ((xs Lst)) (append nil xs xs))) -(assert (forall ((x Int) (xs Lst) (ys Lst) (zs Lst) (rs Lst) (ts Lst)) - (=> (and (= xs (cons x ys)) (append ys zs rs) (= ts (cons x rs))) (append xs zs ts)))) - -(declare-fun qreva (Lst Lst Lst) Bool) -(assert (forall ((x Lst)) (qreva nil x x))) -(assert (forall ((x Lst) (y Lst) (z Int) (u Lst)) - (=> (qreva x (cons z y) u) (qreva (cons z x) y u)))) - -; conjecture -(assert (forall ((x Lst) (y Lst) (z Lst) (u Lst) (v Lst) (r Lst) (s Lst)) - (=> (and (qreva x y u) (qreva u z v) (append x z r) (qreva y r s) (not (= v s))) false))) ; G-amortize-queue-10 -(check-sat) diff --git a/bench_horn_adt/LEON/amortize-queue-goal11.smt2 b/bench_horn_adt/LEON/amortize-queue-goal11.smt2 deleted file mode 100644 index 2dd88af63..000000000 --- a/bench_horn_adt/LEON/amortize-queue-goal11.smt2 +++ /dev/null @@ -1,15 +0,0 @@ -(set-logic HORN) - -; lists -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst Lst) Bool) -(assert (forall ((xs Lst)) (append nil xs xs))) -(assert (forall ((x Int) (xs Lst) (ys Lst) (zs Lst) (rs Lst) (ts Lst)) - (=> (and (= xs (cons x ys)) (append ys zs rs) (= ts (cons x rs))) (append xs zs ts)))) - -; conjecture -(assert (forall ((x Lst) (y Lst) (z Lst) (s Lst) (r Lst) (u Lst) (v Lst)) - (=> (and (append y z r) (append x r u) (append x y s) (append s z v) (not (= u v))) false))) - -(check-sat) diff --git a/bench_horn_adt/LEON/amortize-queue-goal12.smt2 b/bench_horn_adt/LEON/amortize-queue-goal12.smt2 deleted file mode 100644 index 683e8d35d..000000000 --- a/bench_horn_adt/LEON/amortize-queue-goal12.smt2 +++ /dev/null @@ -1,41 +0,0 @@ -(set-logic HORN) - -; lists -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst Lst) Bool) -(assert (forall ((xs Lst)) (append nil xs xs))) -(assert (forall ((x Int) (xs Lst) (ys Lst) (zs Lst) (rs Lst) (ts Lst)) - (=> (and (= xs (cons x ys)) (append ys zs rs) (= ts (cons x rs))) (append xs zs ts)))) - -(declare-fun len (Lst Int) Bool) -(assert (len nil 0)) -(assert (forall ((x Int) (xs Lst) (ys Lst) (l Int)) - (=> (and (= xs (cons x ys)) (len ys l)) (len xs (+ l 1))))) - -(declare-fun qreva (Lst Lst Lst) Bool) -(assert (forall ((x Lst)) (qreva nil x x))) -(assert (forall ((x Lst) (y Lst) (z Int) (u Lst)) - (=> (qreva x (cons z y) u) (qreva (cons z x) y u)))) - -(declare-fun qrev (Lst Lst) Bool) -(assert (forall ((xs Lst) (ys Lst)) - (=> (qreva xs nil ys) (qrev xs ys)))) - -;queues -(declare-datatypes () ((Queue (queue (front Lst) (back Lst))))) - -(declare-fun queue-to-lst (Queue Lst) Bool) -(assert (forall ((x Lst) (y Lst) (q Queue) (z Lst) (a Lst)) - (=> (and (qrev y z) (append x z a)) (queue-to-lst (queue x y) a)))) - -(declare-fun amortizeQueue (Lst Lst Queue) Bool) -(assert (forall ((x Lst) (y Lst) (q Queue) (ly Int) (lx Int) (z Lst) (a Lst)) - (=> (and (len y ly) (len x lx) (qrev y z) (append x z a) - (= q (ite (<= ly lx) (queue x y) (queue a nil)))) (amortizeQueue x y q)))) - - -; conjecture -(assert (forall ((x Lst) (y Lst) (q Queue) (z Lst) (r Lst)) - (=> (and (queue-to-lst (queue x y) z) (amortizeQueue x y q) (queue-to-lst q r) (not (= r z))) false))); G-amortize-queue-12 -(check-sat) diff --git a/bench_horn_adt/LEON/amortize-queue-goal13.smt2 b/bench_horn_adt/LEON/amortize-queue-goal13.smt2 deleted file mode 100644 index c3ab97b2a..000000000 --- a/bench_horn_adt/LEON/amortize-queue-goal13.smt2 +++ /dev/null @@ -1,53 +0,0 @@ -(set-logic HORN) - -; lists -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst Lst) Bool) -(assert (forall ((xs Lst)) (append nil xs xs))) -(assert (forall ((x Int) (xs Lst) (ys Lst) (zs Lst) (rs Lst) (ts Lst)) - (=> (and (= xs (cons x ys)) (append ys zs rs) (= ts (cons x rs))) (append xs zs ts)))) - -(declare-fun len (Lst Int) Bool) -(assert (len nil 0)) -(assert (forall ((x Int) (xs Lst) (ys Lst) (l Int)) - (=> (and (= xs (cons x ys)) (len ys l)) (len xs (+ l 1))))) - -(declare-fun butlast (Lst Lst) Bool) -(assert (butlast nil nil)) -(assert (forall ((n Int) (xs Lst) (rs Lst) (ys Lst)) - (=> (and (= ys (cons n xs)) (= xs nil)) (butlast ys nil)))) -(assert (forall ((n Int) (xs Lst) (rs Lst) (ys Lst) (x Int) (zs Lst)) - (=> (and (butlast xs rs) (= ys (cons n xs)) (= xs (cons x zs))) (butlast ys (cons n rs))))) - -(declare-fun qreva (Lst Lst Lst) Bool) -(assert (forall ((x Lst)) (qreva nil x x))) -(assert (forall ((x Lst) (y Lst) (z Int) (u Lst)) - (=> (qreva x (cons z y) u) (qreva (cons z x) y u)))) - -(declare-fun qrev (Lst Lst) Bool) -(assert (forall ((xs Lst) (ys Lst)) - (=> (qreva xs nil ys) (qrev xs ys)))) - -;queues -(declare-datatypes () ((Queue (queue (front Lst) (back Lst))))) - -(declare-fun queue-to-lst (Queue Lst) Bool) -(assert (forall ((x Lst) (y Lst) (q Queue) (z Lst) (a Lst)) - (=> (and (qrev y z) (append x z a)) (queue-to-lst (queue x y) a)))) - -(declare-fun amortizeQueue (Lst Lst Queue) Bool) -(assert (forall ((x Lst) (y Lst) (q Queue) (ly Int) (lx Int) (z Lst) (a Lst)) - (=> (and (len y ly) (len x lx) (qrev y z) (append x z a) - (= q (ite (<= ly lx) (queue x y) (queue a nil)))) (amortizeQueue x y q)))) - -(declare-fun qpop (Queue Queue) Bool) -(assert (forall ((x Lst) (y Lst) (n Int)) (qpop (queue x (cons n y)) (queue x y)))) -(assert (forall ((x Lst) (y Lst)) (=> (butlast x y) (qpop (queue x nil) (queue y nil))))) - -; conjecture -(assert (forall ((x Lst) (y Lst) (q Queue) (z Lst) (u Lst) (v Lst)) - (=> (and (queue-to-lst (queue x y) z) (butlast z u) (qpop (queue x y) q) (queue-to-lst q v) (not (= u v))) - false))) ; G-amortize-queue-13 - -(check-sat) diff --git a/bench_horn_adt/LEON/amortize-queue-goal14.smt2 b/bench_horn_adt/LEON/amortize-queue-goal14.smt2 deleted file mode 100644 index 1e7d63cb8..000000000 --- a/bench_horn_adt/LEON/amortize-queue-goal14.smt2 +++ /dev/null @@ -1,56 +0,0 @@ -(set-logic HORN) - -; lists -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst Lst) Bool) -(assert (forall ((xs Lst)) (append nil xs xs))) -(assert (forall ((x Int) (xs Lst) (ys Lst) (zs Lst) (rs Lst) (ts Lst)) - (=> (and (= xs (cons x ys)) (append ys zs rs) (= ts (cons x rs))) (append xs zs ts)))) - -(declare-fun len (Lst Int) Bool) -(assert (len nil 0)) -(assert (forall ((x Int) (xs Lst) (ys Lst) (l Int)) - (=> (and (= xs (cons x ys)) (len ys l)) (len xs (+ l 1))))) - -(declare-fun butlast (Lst Lst) Bool) -(assert (butlast nil nil)) -(assert (forall ((n Int) (xs Lst) (rs Lst) (ys Lst)) - (=> (and (= ys (cons n xs)) (= xs nil)) (butlast ys nil)))) -(assert (forall ((n Int) (xs Lst) (rs Lst) (ys Lst) (x Int) (zs Lst)) - (=> (and (butlast xs rs) (= ys (cons n xs)) (= xs (cons x zs))) (butlast ys (cons n rs))))) - -(declare-fun qreva (Lst Lst Lst) Bool) -(assert (forall ((x Lst)) (qreva nil x x))) -(assert (forall ((x Lst) (y Lst) (z Int) (u Lst)) - (=> (qreva x (cons z y) u) (qreva (cons z x) y u)))) - -(declare-fun qrev (Lst Lst) Bool) -(assert (forall ((xs Lst) (ys Lst)) - (=> (qreva xs nil ys) (qrev xs ys)))) - -;queues -(declare-datatypes () ((Queue (queue (front Lst) (back Lst))))) - -(declare-fun queue-to-lst (Queue Lst) Bool) -(assert (forall ((x Lst) (y Lst) (q Queue) (z Lst) (a Lst)) - (=> (and (qrev y z) (append x z a)) (queue-to-lst (queue x y) a)))) - -(declare-fun amortizeQueue (Lst Lst Queue) Bool) -(assert (forall ((x Lst) (y Lst) (q Queue) (ly Int) (lx Int) (z Lst) (a Lst)) - (=> (and (len y ly) (len x lx) (qrev y z) (append x z a) - (= q (ite (<= ly lx) (queue x y) (queue a nil)))) (amortizeQueue x y q)))) - -(declare-fun enqueue (Queue Int Queue) Bool) -(assert (forall ((x Lst) (y Lst) (n Int) (q Queue)) - (=> (amortizeQueue x (cons n y) q) (enqueue (queue x y) n q)))) - -(declare-fun qpop (Queue Queue) Bool) -(assert (forall ((x Lst) (y Lst) (n Int)) (qpop (queue x (cons n y)) (queue x y)))) -(assert (forall ((x Lst) (y Lst)) (=> (butlast x y) (qpop (queue x nil) (queue y nil))))) - -; conjecture -(assert (forall ((x Lst) (y Lst) (n Int) (z Lst) (u Lst) (v Lst) (q Queue)) - (=> (and (queue-to-lst (queue x y) z) (append z (cons n nil) u) (enqueue (queue x y) n q) (queue-to-lst q v) - (not (= u v))) false))); G-amortize-queue-14 -(check-sat) diff --git a/bench_horn_adt/LEON/amortize-queue-goal15.smt2 b/bench_horn_adt/LEON/amortize-queue-goal15.smt2 deleted file mode 100644 index eaa809ab8..000000000 --- a/bench_horn_adt/LEON/amortize-queue-goal15.smt2 +++ /dev/null @@ -1,63 +0,0 @@ -(set-logic HORN) - -; lists -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst Lst) Bool) -(assert (forall ((xs Lst)) (append nil xs xs))) -(assert (forall ((x Int) (xs Lst) (ys Lst) (zs Lst) (rs Lst) (ts Lst)) - (=> (and (= xs (cons x ys)) (append ys zs rs) (= ts (cons x rs))) (append xs zs ts)))) - -(declare-fun len (Lst Int) Bool) -(assert (len nil 0)) -(assert (forall ((x Int) (xs Lst) (ys Lst) (l Int)) - (=> (and (= xs (cons x ys)) (len ys l)) (len xs (+ l 1))))) - -(declare-fun butlast (Lst Lst) Bool) -(assert (butlast nil nil)) -(assert (forall ((n Int) (xs Lst) (rs Lst) (ys Lst)) - (=> (and (= ys (cons n xs)) (= xs nil)) (butlast ys nil)))) -(assert (forall ((n Int) (xs Lst) (rs Lst) (ys Lst) (x Int) (zs Lst)) - (=> (and (butlast xs rs) (= ys (cons n xs)) (= xs (cons x zs))) (butlast ys (cons n rs))))) - -(declare-fun qreva (Lst Lst Lst) Bool) -(assert (forall ((x Lst)) (qreva nil x x))) -(assert (forall ((x Lst) (y Lst) (z Int) (u Lst)) - (=> (qreva x (cons z y) u) (qreva (cons z x) y u)))) - -(declare-fun qrev (Lst Lst) Bool) -(assert (forall ((xs Lst) (ys Lst)) - (=> (qreva xs nil ys) (qrev xs ys)))) - -;queues -(declare-datatypes () ((Queue (queue (front Lst) (back Lst))))) - -(declare-fun queue-to-lst (Queue Lst) Bool) -(assert (forall ((x Lst) (y Lst) (q Queue) (z Lst) (a Lst)) - (=> (and (qrev y z) (append x z a)) (queue-to-lst (queue x y) a)))) - -(declare-fun isAmortized (Queue Bool) Bool) -(assert (forall ((x Lst) (y Lst) (lx Int) (ly Int)) - (=> (and (len x lx) (len y ly) (<= ly lx)) (isAmortized (queue x y) true)))) - -(declare-fun amortizeQueue (Lst Lst Queue) Bool) -(assert (forall ((x Lst) (y Lst) (q Queue) (ly Int) (lx Int) (z Lst) (a Lst)) - (=> (and (len y ly) (len x lx) (qrev y z) (append x z a) - (= q (ite (<= ly lx) (queue x y) (queue a nil)))) (amortizeQueue x y q)))) - -(declare-fun enqueue (Queue Int Queue) Bool) -(assert (forall ((x Lst) (y Lst) (n Int) (q Queue)) - (=> (amortizeQueue x (cons n y) q) (enqueue (queue x y) n q)))) - -(declare-fun qpop (Queue Queue) Bool) -(assert (forall ((x Lst) (y Lst) (n Int)) (qpop (queue x (cons n y)) (queue x y)))) -(assert (forall ((x Lst) (y Lst)) (=> (butlast x y) (qpop (queue x nil) (queue y nil))))) - -; proven -(assert (forall ((x Lst) (y Lst) (lz Int) (lx Int) (ly Int) (z Lst)) - (=> (and (append x y z) (len z lz) (len x lx) (len y ly)) (= lz (+ lx ly))))) ; G-amortize-queue-1 -; conjecture -(assert (forall ((x Lst) (y Lst) (q Queue)) - (=> (and (amortizeQueue x y q) (not (isAmortized q true))) false))) - -(check-sat) diff --git a/bench_horn_adt/LEON/amortize-queue-goal2.smt2 b/bench_horn_adt/LEON/amortize-queue-goal2.smt2 deleted file mode 100644 index 63f0e81ba..000000000 --- a/bench_horn_adt/LEON/amortize-queue-goal2.smt2 +++ /dev/null @@ -1,25 +0,0 @@ -(set-logic HORN) - -; lists -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst Lst) Bool) -(assert (forall ((xs Lst)) (append nil xs xs))) -(assert (forall ((x Int) (xs Lst) (ys Lst) (zs Lst) (rs Lst) (ts Lst)) - (=> (and (= xs (cons x ys)) (append ys zs rs) (= ts (cons x rs))) (append xs zs ts)))) - -(declare-fun len (Lst Int) Bool) -(assert (len nil 0)) -(assert (forall ((x Int) (xs Lst) (ys Lst) (l Int)) - (=> (and (= xs (cons x ys)) (len ys l)) (len xs (+ l 1))))) - -(declare-fun qreva (Lst Lst Lst) Bool) -(assert (forall ((x Lst)) (qreva nil x x))) -(assert (forall ((x Lst) (y Lst) (z Int) (u Lst)) - (=> (qreva x (cons z y) u) (qreva (cons z x) y u)))) - -; conjecture -(assert (forall ((x Lst) (y Lst) (z Lst) (lx Int) (ly Int) (lz Int)) - (=> (and (qreva x y z) (len z lz) (len x lx) (len y ly) (not (= lz (+ 1(+ lx ly))))) - false))) ; G-amortize-queue-2 -(check-sat) diff --git a/bench_horn_adt/LEON/amortize-queue-goal3.smt2 b/bench_horn_adt/LEON/amortize-queue-goal3.smt2 deleted file mode 100644 index c466858e5..000000000 --- a/bench_horn_adt/LEON/amortize-queue-goal3.smt2 +++ /dev/null @@ -1,29 +0,0 @@ -(set-logic HORN) - -; lists -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst Lst) Bool) -(assert (forall ((xs Lst)) (append nil xs xs))) -(assert (forall ((x Int) (xs Lst) (ys Lst) (zs Lst) (rs Lst) (ts Lst)) - (=> (and (= xs (cons x ys)) (append ys zs rs) (= ts (cons x rs))) (append xs zs ts)))) - -(declare-fun len (Lst Int) Bool) -(assert (len nil 0)) -(assert (forall ((x Int) (xs Lst) (ys Lst) (l Int)) - (=> (and (= xs (cons x ys)) (len ys l)) (len xs (+ l 1))))) - -(declare-fun qreva (Lst Lst Lst) Bool) -(assert (forall ((x Lst)) (qreva nil x x))) -(assert (forall ((x Lst) (y Lst) (z Int) (u Lst)) - (=> (qreva x (cons z y) u) (qreva (cons z x) y u)))) - -(declare-fun qrev (Lst Lst) Bool) -(assert (forall ((xs Lst) (ys Lst)) - (=> (qreva xs nil ys) (qrev xs ys)))) - -; conjecture -(assert (forall ((x Lst) (lx Int) (y Lst) (ly Int)) - (=> (and (qrev x y) (len x lx) (len y ly) (not (= lx ly))) false))) ; G-amortize-queue-3 - -(check-sat) diff --git a/bench_horn_adt/LEON/amortize-queue-goal4.smt2 b/bench_horn_adt/LEON/amortize-queue-goal4.smt2 deleted file mode 100644 index b7f9ba3f9..000000000 --- a/bench_horn_adt/LEON/amortize-queue-goal4.smt2 +++ /dev/null @@ -1,26 +0,0 @@ -(set-logic HORN) - -; lists -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst Lst) Bool) -(assert (forall ((xs Lst)) (append nil xs xs))) -(assert (forall ((x Int) (xs Lst) (ys Lst) (zs Lst) (rs Lst) (ts Lst)) - (=> (and (= xs (cons x ys)) (append ys zs rs) (= ts (cons x rs))) (append xs zs ts)))) - -(declare-fun len (Lst Int) Bool) -(assert (len nil 0)) -(assert (forall ((x Int) (xs Lst) (ys Lst) (l Int)) - (=> (and (= xs (cons x ys)) (len ys l)) (len xs (+ l 1))))) - -;queues -(declare-datatypes () ((Queue (queue (front Lst) (back Lst))))) - -(declare-fun qlen (Queue Int) Bool) -(assert (forall ((x Lst) (y Lst) (lx Int) (ly Int) (lq Int)) - (=> (and (len x lx) (len y ly)) (qlen (queue x y) (+ lx ly))))) - -; conjecture -(assert (forall ((x Lst) (lx Int) (y Lst) (ly Int) (lq Int)) - (=> (and (len x lx) (len y ly) (qlen (queue x y) lq) (not (= (+ lx ly) lq))) false))) ; G-amortize-queue-4 -(check-sat) diff --git a/bench_horn_adt/LEON/amortize-queue-goal5.smt2 b/bench_horn_adt/LEON/amortize-queue-goal5.smt2 deleted file mode 100644 index fb7a45a2f..000000000 --- a/bench_horn_adt/LEON/amortize-queue-goal5.smt2 +++ /dev/null @@ -1,21 +0,0 @@ -(set-logic HORN) - -; lists -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun len (Lst Int) Bool) -(assert (len nil 0)) -(assert (forall ((x Int) (xs Lst) (ys Lst) (l Int)) - (=> (and (= xs (cons x ys)) (len ys l)) (len xs (+ l 1))))) - -(declare-fun butlast (Lst Lst) Bool) -(assert (butlast nil nil)) -(assert (forall ((n Int) (xs Lst) (rs Lst) (ys Lst)) - (=> (and (= ys (cons n xs)) (= xs nil)) (butlast ys nil)))) -(assert (forall ((n Int) (xs Lst) (rs Lst) (ys Lst) (x Int) (zs Lst)) - (=> (and (butlast xs rs) (= ys (cons n xs)) (= xs (cons x zs))) (butlast ys (cons n rs))))) - -; conjecture -(assert (forall ((x Lst) (y Int) (z Lst) (ly Int) (lz Int)) - (=> (and (len (cons y x) ly) (butlast (cons y x) z) (len z lz) (not (= (+ lz 1) ly))) false))) -(check-sat) diff --git a/bench_horn_adt/LEON/amortize-queue-goal6.smt2 b/bench_horn_adt/LEON/amortize-queue-goal6.smt2 deleted file mode 100644 index ec8701993..000000000 --- a/bench_horn_adt/LEON/amortize-queue-goal6.smt2 +++ /dev/null @@ -1,51 +0,0 @@ -(set-logic HORN) - -; lists -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst Lst) Bool) -(assert (forall ((xs Lst)) (append nil xs xs))) -(assert (forall ((x Int) (xs Lst) (ys Lst) (zs Lst) (rs Lst) (ts Lst)) - (=> (and (= xs (cons x ys)) (append ys zs rs) (= ts (cons x rs))) (append xs zs ts)))) - -(declare-fun len (Lst Int) Bool) -(assert (len nil 0)) -(assert (forall ((x Int) (xs Lst) (ys Lst) (l Int)) - (=> (and (= xs (cons x ys)) (len ys l)) (len xs (+ l 1))))) - -(declare-fun butlast (Lst Lst) Bool) -(assert (butlast nil nil)) -(assert (forall ((n Int) (xs Lst) (rs Lst) (ys Lst)) - (=> (and (= ys (cons n xs)) (= xs nil)) (butlast ys nil)))) -(assert (forall ((n Int) (xs Lst) (rs Lst) (ys Lst) (x Int) (zs Lst)) - (=> (and (butlast xs rs) (= ys (cons n xs)) (= xs (cons x zs))) (butlast ys (cons n rs))))) - -(declare-fun qreva (Lst Lst Lst) Bool) -(assert (forall ((x Lst)) (qreva nil x x))) -(assert (forall ((x Lst) (y Lst) (z Int) (u Lst)) - (=> (qreva x (cons z y) u) (qreva (cons z x) y u)))) - -(declare-fun qrev (Lst Lst) Bool) -(assert (forall ((xs Lst) (ys Lst)) - (=> (qreva xs nil ys) (qrev xs ys)))) - -;queues -(declare-datatypes () ((Queue (queue (front Lst) (back Lst))))) - -(declare-fun qlen (Queue Int) Bool) -(assert (forall ((x Lst) (y Lst) (lx Int) (ly Int) (lq Int)) - (=> (and (len x lx) (len y ly)) (qlen (queue x y) (+ lx ly))))) - -(declare-fun amortizeQueue (Lst Lst Queue) Bool) -(assert (forall ((x Lst) (y Lst) (q Queue) (ly Int) (lx Int) (z Lst) (a Lst)) - (=> (and (len y ly) (len x lx) (qrev y z) (append x z a) - (= q (ite (<= ly lx) (queue x y) (queue a nil)))) (amortizeQueue x y q)))) - -(declare-fun enqueue (Queue Int Queue) Bool) -(assert (forall ((x Lst) (y Lst) (n Int) (q Queue)) - (=> (amortizeQueue x (cons n y) q) (enqueue (queue x y) n q)))) - -; conjecture -(assert (forall ((q Queue) (n Int) (p Queue) (lq Int) (lp Int)) - (=> (and (enqueue q n p) (qlen q lq) (qlen p lp) (not (= (+ lq 1) lp))) false))) -(check-sat) \ No newline at end of file diff --git a/bench_horn_adt/LEON/amortize-queue-goal7.smt2 b/bench_horn_adt/LEON/amortize-queue-goal7.smt2 deleted file mode 100644 index 1c98842da..000000000 --- a/bench_horn_adt/LEON/amortize-queue-goal7.smt2 +++ /dev/null @@ -1,62 +0,0 @@ -(set-logic HORN) - -; lists -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst Lst) Bool) -(assert (forall ((xs Lst)) (append nil xs xs))) -(assert (forall ((x Int) (xs Lst) (ys Lst) (zs Lst) (rs Lst) (ts Lst)) - (=> (and (= xs (cons x ys)) (append ys zs rs) (= ts (cons x rs))) (append xs zs ts)))) - -(declare-fun len (Lst Int) Bool) -(assert (len nil 0)) -(assert (forall ((x Int) (xs Lst) (ys Lst) (l Int)) - (=> (and (= xs (cons x ys)) (len ys l)) (len xs (+ l 1))))) - -(declare-fun butlast (Lst Lst) Bool) -(assert (butlast nil nil)) -(assert (forall ((n Int) (xs Lst) (rs Lst) (ys Lst)) - (=> (and (= ys (cons n xs)) (= xs nil)) (butlast ys nil)))) -(assert (forall ((n Int) (xs Lst) (rs Lst) (ys Lst) (x Int) (zs Lst)) - (=> (and (butlast xs rs) (= ys (cons n xs)) (= xs (cons x zs))) (butlast ys (cons n rs))))) - -(declare-fun qreva (Lst Lst Lst) Bool) -(assert (forall ((x Lst)) (qreva nil x x))) -(assert (forall ((x Lst) (y Lst) (z Int) (u Lst)) - (=> (qreva x (cons z y) u) (qreva (cons z x) y u)))) - -(declare-fun qrev (Lst Lst) Bool) -(assert (forall ((xs Lst) (ys Lst)) - (=> (qreva xs nil ys) (qrev xs ys)))) - -;queues -(declare-datatypes () ((Queue (queue (front Lst) (back Lst))))) - -(declare-fun qlen (Queue Int) Bool) -(assert (forall ((x Lst) (y Lst) (lx Int) (ly Int) (lq Int)) - (=> (and (len x lx) (len y ly)) (qlen (queue x y) (+ lx ly))))) - -(declare-fun isAmortized (Queue Bool) Bool) -(assert (forall ((x Lst) (y Lst) (lx Int) (ly Int)) - (=> (and (len x lx) (len y ly) (<= ly lx)) (isAmortized (queue x y) true)))) - -(declare-fun isNotEmpty (Queue Bool) Bool) -(assert (forall ((x Lst) (y Lst) (z Lst) (n Int)) (=> (= x (cons n z)) (isNotEmpty (queue x y) true)))) -(assert (forall ((x Lst) (y Lst) (z Lst) (n Int)) (=> (= y (cons n z)) (isNotEmpty (queue x y) true)))) - -(declare-fun amortizeQueue (Lst Lst Queue) Bool) -(assert (forall ((x Lst) (y Lst) (q Queue) (ly Int) (lx Int) (z Lst) (a Lst)) - (=> (and (len y ly) (len x lx) (qrev y z) (append x z a) - (= q (ite (<= ly lx) (queue x y) (queue a nil)))) (amortizeQueue x y q)))) - -(declare-fun enqueue (Queue Int Queue) Bool) -(assert (forall ((x Lst) (y Lst) (n Int) (q Queue)) - (=> (amortizeQueue x (cons n y) q) (enqueue (queue x y) n q)))) - -(declare-fun qpop (Queue Queue) Bool) -(assert (forall ((x Lst) (y Lst) (n Int)) (qpop (queue x (cons n y)) (queue x y)))) -(assert (forall ((x Lst) (y Lst)) (=> (butlast x y) (qpop (queue x nil) (queue y nil))))) - -; conjecture -(assert (forall ((q Queue) (n Int) (p Queue) (lq Int) (lp Int)) - (=> (and (isAmortized q true) (isNotEmpty q true) (qpop q p) (qlen q lq) (qlen p lp) (not (= (+ lq 1) lp))) false))) diff --git a/bench_horn_adt/LEON/amortize-queue-goal8.smt2 b/bench_horn_adt/LEON/amortize-queue-goal8.smt2 deleted file mode 100644 index 7ea18fa3c..000000000 --- a/bench_horn_adt/LEON/amortize-queue-goal8.smt2 +++ /dev/null @@ -1,15 +0,0 @@ -(set-logic HORN) - -; lists -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst Lst) Bool) -(assert (forall ((xs Lst)) (append nil xs xs))) -(assert (forall ((x Int) (xs Lst) (ys Lst) (zs Lst) (rs Lst) (ts Lst)) - (=> (and (= xs (cons x ys)) (append ys zs rs) (= ts (cons x rs))) (append xs zs ts)))) - -; conjecture -(assert (forall ((x Lst) (y Lst)) - (=> (and (append x nil y) (not (= x y))) false))) ; G-amortize-queue-8 - -(check-sat) diff --git a/bench_horn_adt/LEON/amortize-queue-goal9.smt2 b/bench_horn_adt/LEON/amortize-queue-goal9.smt2 deleted file mode 100644 index 5dc3ae121..000000000 --- a/bench_horn_adt/LEON/amortize-queue-goal9.smt2 +++ /dev/null @@ -1,32 +0,0 @@ -(set-logic HORN) - -; lists -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst Lst) Bool) -(assert (forall ((xs Lst)) (append nil xs xs))) -(assert (forall ((x Int) (xs Lst) (ys Lst) (zs Lst) (rs Lst) (ts Lst)) - (=> (and (= xs (cons x ys)) (append ys zs rs) (= ts (cons x rs))) (append xs zs ts)))) - -(declare-fun len (Lst Int) Bool) -(assert (len nil 0)) -(assert (forall ((x Int) (xs Lst) (ys Lst) (l Int)) - (=> (and (= xs (cons x ys)) (len ys l)) (len xs (+ l 1))))) - -(declare-fun butlast (Lst Lst) Bool) -(assert (butlast nil nil)) -(assert (forall ((n Int) (xs Lst) (rs Lst) (ys Lst)) - (=> (and (= ys (cons n xs)) (= xs nil)) (butlast ys nil)))) -(assert (forall ((n Int) (xs Lst) (rs Lst) (ys Lst) (x Int) (zs Lst)) - (=> (and (butlast xs rs) (= ys (cons n xs)) (= xs (cons x zs))) (butlast ys (cons n rs))))) - -; proven -(assert (forall ((x Lst) (n Int) (y Lst) (l Int)) - (=> (and (butlast (cons n x) y) (len (cons n x) l)) (len y (+ l 1))))) ; G-amortize-queue-5 - -; conjecture -(assert (forall ((x Lst) (y Lst) (z Lst) (r Lst) (u Lst) (v Lst) (n Int)) - (=> (and (append x (cons n y) z) (butlast (cons n y) r) (append x r u) (butlast z v) (not (= v u))) - false))) ; G-amortize-queue-9 - -(check-sat) diff --git a/bench_horn_adt/LEON/bsearch-tree-goal1.smt2 b/bench_horn_adt/LEON/bsearch-tree-goal1.smt2 deleted file mode 100644 index 3cab8d9f5..000000000 --- a/bench_horn_adt/LEON/bsearch-tree-goal1.smt2 +++ /dev/null @@ -1,36 +0,0 @@ -(set-logic HORN) - -; (binary search) tree -(declare-datatypes () ((Tree (node (data Int) (left Tree) (right Tree)) (leaf)))) - -(declare-fun tsize (Tree Int) Bool) -(assert (tsize leaf 0)) -(assert (forall ((x Int) (r Tree) (l Tree) (m Tree) (sl Int) (sr Int)) - (=> (and (= m (node x l r)) (tsize l sl) (tsize r sr)) (tsize m (+ 1 (+ sl sr)))))) - -(declare-fun tinsert (Tree Int Tree) Bool) -(assert (forall ((i Int)) (tinsert leaf i (node i leaf leaf)))) -(assert (forall ((r Tree) (l Tree) (d Int) (i Int) (x Tree) (m Tree)) - (=> (and (tinsert r i x) (< d i) (= m (node d l x))) (tinsert (node d l r) i m)))) -(assert (forall ((r Tree) (l Tree) (d Int) (i Int) (y Tree) (m Tree)) - (=> (and (tinsert l i y) (>= d i) (= m (node d y r))) (tinsert (node d l r) i m)))) - -(declare-fun tcontains (Tree Int Bool) Bool) -(assert (forall ((i Int)) (tcontains leaf i false))) -(assert (forall ((d Int) (l Tree) (r Tree) (i Int)) - (=> (= d i) (tcontains (node d l r) i true)))) -(assert (forall ((d Int) (l Tree) (r Tree) (i Int)) - (=> (tcontains l i true) (tcontains (node d l r) i true)))) -(assert (forall ((d Int) (l Tree) (r Tree) (i Int)) - (=> (tcontains r i true) (tcontains (node d l r) i true)))) - -(declare-fun tsorted (Tree Bool) Bool) -(assert (tsorted leaf true)) -(assert (forall ((d Int) (l Tree) (r Tree) (x Int) (y Int)) - (=> (and (tsorted l true) (tsorted r true) (tcontains l x true) (tcontains r x true) - (<= x d) (< d x)) (tsorted (node d l r) true)))) - -(assert (forall ((t Tree) (n Int) (r Tree) (ts Int) (rs Int)) - (=> (and (tinsert t n r) (tsize r rs) (tsize t ts) (not (= rs (+ 1 ts)))) false))) - -(check-sat) diff --git a/bench_horn_adt/LEON/bsearch-tree-goal10.smt2 b/bench_horn_adt/LEON/bsearch-tree-goal10.smt2 deleted file mode 100644 index 18bc1cb9a..000000000 --- a/bench_horn_adt/LEON/bsearch-tree-goal10.smt2 +++ /dev/null @@ -1,34 +0,0 @@ -(set-logic HORN) - -; (binary search) tree -(declare-datatypes () ((Tree (node (data Int) (left Tree) (right Tree)) (leaf)))) - -(declare-fun tinsert (Tree Int Tree) Bool) -(assert (forall ((i Int)) (tinsert leaf i (node i leaf leaf)))) -(assert (forall ((r Tree) (l Tree) (d Int) (i Int) (x Tree) (m Tree)) - (=> (and (tinsert r i x) (< d i) (= m (node d l x))) (tinsert (node d l r) i m)))) -(assert (forall ((r Tree) (l Tree) (d Int) (i Int) (y Tree) (m Tree)) - (=> (and (tinsert l i y) (>= d i) (= m (node d y r))) (tinsert (node d l r) i m)))) - -(declare-fun tmember (Tree Int Bool) Bool) -(assert (forall ((x Int)) (tmember leaf x false))) -(assert (forall ((d Int) (l Tree) (r Tree) (i Int)) - (=> (= i d) (tmember (node d l r) i true)))) -(assert (forall ((d Int) (l Tree) (r Tree) (i Int)) - (=> (and (< d i) (tmember r i true)) (tmember (node d l r) i true)))) -(assert (forall ((d Int) (l Tree) (r Tree) (i Int)) - (=> (and (< i d) (tmember l i true)) (tmember (node d l r) i true)))) - -(assert (forall ((i Int) (x Tree) (j Int) (r Bool) (s Bool) (t Bool) (y Tree) (a Bool) (b Bool)) - (=> (and (tmember x j b) (tinsert x i y) (tmember y j true) (>= (- i j) 1) (not (= b true))) false))) - -(assert (forall ((i Int) (x Tree) (j Int) (r Bool) (s Bool) (t Bool) (y Tree) (a Bool) (b Bool)) - (=> (and (tmember x j b) (tinsert x i y) (tmember y j true) (>= (- j i) 1) (not (= b true))) false))) - -(assert (forall ((i Int) (x Tree) (j Int) (r Bool) (s Bool) (t Bool) (y Tree) (a Bool) (b Bool)) - (=> (and (tmember x j true) (tinsert x i y) (tmember y j a) (not (= a true))) false))) - -(assert (forall ((i Int) (x Tree) (j Int) (r Bool) (s Bool) (t Bool) (y Tree) (a Bool) (b Bool)) - (=> (and (tmember x i b) (tinsert x i y) (tmember y i a) (not (= a true))) false))) - -(check-sat) \ No newline at end of file diff --git a/bench_horn_adt/LEON/bsearch-tree-goal11.smt2 b/bench_horn_adt/LEON/bsearch-tree-goal11.smt2 deleted file mode 100644 index 1791cbe45..000000000 --- a/bench_horn_adt/LEON/bsearch-tree-goal11.smt2 +++ /dev/null @@ -1,41 +0,0 @@ -(set-logic HORN) - -; (binary search) tree -(declare-datatypes () ((Tree (node (data Int) (left Tree) (right Tree)) (leaf)))) - -(declare-fun tinsert (Tree Int Tree) Bool) -(assert (forall ((i Int)) (tinsert leaf i (node i leaf leaf)))) -(assert (forall ((r Tree) (l Tree) (d Int) (i Int) (x Tree) (m Tree)) - (=> (and (tinsert r i x) (< d i) (= m (node d l x))) (tinsert (node d l r) i m)))) -(assert (forall ((r Tree) (l Tree) (d Int) (i Int) (y Tree) (m Tree)) - (=> (and (tinsert l i y) (>= d i) (= m (node d y r))) (tinsert (node d l r) i m)))) - -(declare-fun tcontains (Tree Int Bool) Bool) -(assert (forall ((i Int)) (tcontains leaf i false))) -(assert (forall ((d Int) (l Tree) (r Tree) (i Int)) - (=> (= d i) (tcontains (node d l r) i true)))) -(assert (forall ((d Int) (l Tree) (r Tree) (i Int)) - (=> (tcontains l i true) (tcontains (node d l r) i true)))) -(assert (forall ((d Int) (l Tree) (r Tree) (i Int)) - (=> (tcontains r i true) (tcontains (node d l r) i true)))) - -(declare-fun tsorted (Tree Bool) Bool) -(assert (tsorted leaf true)) -(assert (forall ((d Int) (l Tree) (r Tree) (x Int) (y Int)) - (=> (and (tsorted l true) (tsorted r true) (tcontains l x true) (tcontains r x true) - (<= x d) (< d x)) (tsorted (node d l r) true)))) - -(declare-fun tmember (Tree Int Bool) Bool) -(assert (forall ((x Int)) (tmember leaf x false))) -(assert (forall ((d Int) (l Tree) (r Tree) (i Int)) - (=> (= i d) (tmember (node d l r) i true)))) -(assert (forall ((d Int) (l Tree) (r Tree) (i Int)) - (=> (and (< d i) (tmember r i true)) (tmember (node d l r) i true)))) -(assert (forall ((d Int) (l Tree) (r Tree) (i Int)) - (=> (and (< i d) (tmember l i true)) (tmember (node d l r) i true)))) - -; conjecture -(assert (forall ((i Int) (x Tree) (r Bool) (s Bool)) - (=> (and (tsorted x true) (tcontains x i r) (tmember x i s) (not (= r s))) false))) ; G-bsearch-tree-11 - -(check-sat) \ No newline at end of file diff --git a/bench_horn_adt/LEON/bsearch-tree-goal12.smt2 b/bench_horn_adt/LEON/bsearch-tree-goal12.smt2 deleted file mode 100644 index 07906c047..000000000 --- a/bench_horn_adt/LEON/bsearch-tree-goal12.smt2 +++ /dev/null @@ -1,28 +0,0 @@ -(set-logic HORN) - -; (binary search) tree -(declare-datatypes () ((Tree (node (data Int) (left Tree) (right Tree)) (leaf)))) - -(declare-fun tcontains (Tree Int Bool) Bool) -(assert (forall ((i Int)) (tcontains leaf i false))) -(assert (forall ((d Int) (l Tree) (r Tree) (i Int)) - (=> (= d i) (tcontains (node d l r) i true)))) -(assert (forall ((d Int) (l Tree) (r Tree) (i Int)) - (=> (tcontains l i true) (tcontains (node d l r) i true)))) -(assert (forall ((d Int) (l Tree) (r Tree) (i Int)) - (=> (tcontains r i true) (tcontains (node d l r) i true)))) - -(declare-fun tmember (Tree Int Bool) Bool) -(assert (forall ((x Int)) (tmember leaf x false))) -(assert (forall ((d Int) (l Tree) (r Tree) (i Int)) - (=> (= i d) (tmember (node d l r) i true)))) -(assert (forall ((d Int) (l Tree) (r Tree) (i Int)) - (=> (and (< d i) (tmember r i true)) (tmember (node d l r) i true)))) -(assert (forall ((d Int) (l Tree) (r Tree) (i Int)) - (=> (and (< i d) (tmember l i true)) (tmember (node d l r) i true)))) - -; conjecture -(assert (forall ((i Int) (x Tree) (r Bool)) - (=> (and (tmember x i true) (tcontains x i r) (not (= r true))) false))); G-bsearch-tree-12 - -(check-sat) diff --git a/bench_horn_adt/LEON/bsearch-tree-goal13.smt2 b/bench_horn_adt/LEON/bsearch-tree-goal13.smt2 deleted file mode 100644 index 9840f90d4..000000000 --- a/bench_horn_adt/LEON/bsearch-tree-goal13.smt2 +++ /dev/null @@ -1,36 +0,0 @@ -(set-logic HORN) - -; lists -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst Lst) Bool) -(assert (forall ((xs Lst)) (append nil xs xs))) -(assert (forall ((x Int) (xs Lst) (ys Lst) (zs Lst) (rs Lst) (ts Lst)) - (=> (and (= xs (cons x ys)) (append ys zs rs) (= ts (cons x rs))) (append xs zs ts)))) - -(declare-fun len (Lst Int) Bool) -(assert (len nil 0)) -(assert (forall ((x Int) (xs Lst) (ys Lst) (l Int)) - (=> (and (= xs (cons x ys)) (len ys l)) (len xs (+ l 1))))) - -; (binary search) tree -(declare-datatypes () ((Tree (node (data Int) (left Tree) (right Tree)) (leaf)))) - -(declare-fun tinsert (Tree Int Tree) Bool) -(assert (forall ((i Int)) (tinsert leaf i (node i leaf leaf)))) -(assert (forall ((r Tree) (l Tree) (d Int) (i Int) (x Tree) (m Tree)) - (=> (and (tinsert r i x) (< d i) (= m (node d l x))) (tinsert (node d l r) i m)))) -(assert (forall ((r Tree) (l Tree) (d Int) (i Int) (y Tree) (m Tree)) - (=> (and (tinsert l i y) (>= d i) (= m (node d y r))) (tinsert (node d l r) i m)))) - -(declare-fun tinsert-all (Tree Lst Tree) Bool) -(assert (forall ((x Tree)) (tinsert-all x nil x))) -(assert (forall ((x Tree) (n Int) (ls Lst) (xs Lst) (z Tree) (y Tree)) - (=> (and (tinsert-all x ls y) (= xs (cons n ls)) (tinsert y n z)) (tinsert-all x xs z)))) - -; conjecture -(assert (forall ((l Lst) (x Tree) (n Int) (z Tree) (k Lst) (u Tree) (y Tree)) - (=> (and (tinsert x n y) (tinsert-all y l z) (append l (cons n nil) k) (tinsert-all x k u) - (not (= z u))) false))) - -(check-sat) diff --git a/bench_horn_adt/LEON/bsearch-tree-goal14.smt2 b/bench_horn_adt/LEON/bsearch-tree-goal14.smt2 deleted file mode 100644 index 02db0ee64..000000000 --- a/bench_horn_adt/LEON/bsearch-tree-goal14.smt2 +++ /dev/null @@ -1,50 +0,0 @@ -(set-logic HORN) - -; lists -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun append (Lst Lst Lst) Bool) -(assert (forall ((xs Lst)) (append nil xs xs))) -(assert (forall ((x Int) (xs Lst) (ys Lst) (zs Lst) (rs Lst) (ts Lst)) - (=> (and (= xs (cons x ys)) (append ys zs rs) (= ts (cons x rs))) (append xs zs ts)))) - -(declare-fun len (Lst Int) Bool) -(assert (len nil 0)) -(assert (forall ((x Int) (xs Lst) (ys Lst) (l Int)) - (=> (and (= xs (cons x ys)) (len ys l)) (len xs (+ l 1))))) - -; (binary search) tree -(declare-datatypes () ((Tree (node (data Int) (left Tree) (right Tree)) (leaf)))) - -(declare-fun tinsert (Tree Int Tree) Bool) -(assert (forall ((i Int)) (tinsert leaf i (node i leaf leaf)))) -(assert (forall ((r Tree) (l Tree) (d Int) (i Int) (x Tree) (m Tree)) - (=> (and (tinsert r i x) (< d i) (= m (node d l x))) (tinsert (node d l r) i m)))) -(assert (forall ((r Tree) (l Tree) (d Int) (i Int) (y Tree) (m Tree)) - (=> (and (tinsert l i y) (>= d i) (= m (node d y r))) (tinsert (node d l r) i m)))) - -(declare-fun tinsert-all (Tree Lst Tree) Bool) -(assert (forall ((x Tree)) (tinsert-all x nil x))) -(assert (forall ((x Tree) (n Int) (ls Lst) (xs Lst) (z Tree) (y Tree)) - (=> (and (tinsert-all x ls y) (= xs (cons n ls)) (tinsert y n z)) (tinsert-all x xs z)))) - -(declare-fun tcontains (Tree Int Bool) Bool) -(assert (forall ((i Int)) (tcontains leaf i false))) -(assert (forall ((d Int) (l Tree) (r Tree) (i Int)) - (=> (= d i) (tcontains (node d l r) i true)))) -(assert (forall ((d Int) (l Tree) (r Tree) (i Int)) - (=> (tcontains l i true) (tcontains (node d l r) i true)))) -(assert (forall ((d Int) (l Tree) (r Tree) (i Int)) - (=> (tcontains r i true) (tcontains (node d l r) i true)))) - -(declare-fun tsorted (Tree Bool) Bool) -(assert (tsorted leaf true)) -(assert (forall ((d Int) (l Tree) (r Tree) (x Int) (y Int)) - (=> (and (tsorted l true) (tsorted r true) (tcontains l x true) (tcontains r x true) - (<= x d) (< d x)) (tsorted (node d l r) true)))) - -; conjecture -(assert (forall ((x Lst) (y Tree)) - (=> (and (tinsert-all leaf x y) (not (tsorted y true))) false))) ; G-bsearch-tree-14 - -(check-sat) diff --git a/bench_horn_adt/LEON/bsearch-tree-goal2.smt2 b/bench_horn_adt/LEON/bsearch-tree-goal2.smt2 deleted file mode 100644 index 3940b80b3..000000000 --- a/bench_horn_adt/LEON/bsearch-tree-goal2.smt2 +++ /dev/null @@ -1,32 +0,0 @@ -(set-logic HORN) - -; lists -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - - -; (binary search) tree -(declare-datatypes () ((Tree (node (data Int) (left Tree) (right Tree)) (leaf)))) - -(declare-fun tsize (Tree Int) Bool) -(assert (tsize leaf 0)) -(assert (forall ((x Int) (r Tree) (l Tree) (m Tree) (sl Int) (sr Int)) - (=> (and (= m (node x l r)) (tsize l sl) (tsize r sr)) (tsize m (+ 1 (+ sl sr)))))) - -(declare-fun tinsert (Tree Int Tree) Bool) -(assert (forall ((i Int)) (tinsert leaf i (node i leaf leaf)))) -(assert (forall ((r Tree) (l Tree) (d Int) (i Int) (x Tree) (m Tree)) - (=> (and (tinsert r i x) (< d i) (= m (node d l x))) (tinsert (node d l r) i m)))) -(assert (forall ((r Tree) (l Tree) (d Int) (i Int) (y Tree) (m Tree)) - (=> (and (tinsert l i y) (>= d i) (= m (node d y r))) (tinsert (node d l r) i m)))) - - -(declare-fun tinsert-all (Tree Lst Tree) Bool) -(assert (forall ((x Tree)) (tinsert-all x nil x))) -(assert (forall ((x Tree) (n Int) (ls Lst) (xs Lst) (z Tree) (y Tree)) - (=> (and (tinsert-all x ls y) (= xs (cons n ls)) (tinsert y n z)) (tinsert-all x xs z)))) - -; conjecture -(assert (forall ((l Lst) (t Tree) (ts Int) (r Tree) (rs Int)) - (=> (and (tsize t ts) (tinsert-all t l r) (tsize r rs) (not (<= ts rs))) false))) ; G-bsearch-tree-2 - -(check-sat) diff --git a/bench_horn_adt/LEON/bsearch-tree-goal3.smt2 b/bench_horn_adt/LEON/bsearch-tree-goal3.smt2 deleted file mode 100644 index 09c0e52fb..000000000 --- a/bench_horn_adt/LEON/bsearch-tree-goal3.smt2 +++ /dev/null @@ -1,36 +0,0 @@ -(set-logic HORN) - -; lists -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun len (Lst Int) Bool) -(assert (len nil 0)) -(assert (forall ((x Int) (xs Lst) (ys Lst) (l Int)) - (=> (and (= xs (cons x ys)) (len ys l)) (len xs (+ l 1))))) - -; (binary search) tree -(declare-datatypes () ((Tree (node (data Int) (left Tree) (right Tree)) (leaf)))) - -(declare-fun tsize (Tree Int) Bool) -(assert (tsize leaf 0)) -(assert (forall ((x Int) (r Tree) (l Tree) (m Tree) (sl Int) (sr Int)) - (=> (and (= m (node x l r)) (tsize l sl) (tsize r sr)) (tsize m (+ 1 (+ sl sr)))))) - -(declare-fun tinsert (Tree Int Tree) Bool) -(assert (forall ((i Int)) (tinsert leaf i (node i leaf leaf)))) -(assert (forall ((r Tree) (l Tree) (d Int) (i Int) (x Tree) (m Tree)) - (=> (and (tinsert r i x) (< d i) (= m (node d l x))) (tinsert (node d l r) i m)))) -(assert (forall ((r Tree) (l Tree) (d Int) (i Int) (y Tree) (m Tree)) - (=> (and (tinsert l i y) (>= d i) (= m (node d y r))) (tinsert (node d l r) i m)))) - - -(declare-fun tinsert-all (Tree Lst Tree) Bool) -(assert (forall ((x Tree)) (tinsert-all x nil x))) -(assert (forall ((x Tree) (n Int) (ls Lst) (xs Lst) (z Tree) (y Tree)) - (=> (and (tinsert-all x ls y) (= xs (cons n ls)) (tinsert y n z)) (tinsert-all x xs z)))) - -; conjecture -(assert (forall ((ls Lst) (t Tree) (r Tree) (rs Int) (ts Int) (l Int)) - (=> (and (tinsert-all t ls r) (tsize r rs) (tsize t ts) (len ls l) (not (= rs (+ ts l)))) false))); G-bsearch-tree-3 - -(check-sat) diff --git a/bench_horn_adt/LEON/bsearch-tree-goal4.smt2 b/bench_horn_adt/LEON/bsearch-tree-goal4.smt2 deleted file mode 100644 index c1d232688..000000000 --- a/bench_horn_adt/LEON/bsearch-tree-goal4.smt2 +++ /dev/null @@ -1,45 +0,0 @@ -(set-logic HORN) - -; lists -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun len (Lst Int) Bool) -(assert (len nil 0)) -(assert (forall ((x Int) (xs Lst) (ys Lst) (l Int)) - (=> (and (= xs (cons x ys)) (len ys l)) (len xs (+ l 1))))) - -; (binary search) tree -(declare-datatypes () ((Tree (node (data Int) (left Tree) (right Tree)) (leaf)))) - -(declare-fun tsize (Tree Int) Bool) -(assert (tsize leaf 0)) -(assert (forall ((x Int) (r Tree) (l Tree) (m Tree) (sl Int) (sr Int)) - (=> (and (= m (node x l r)) (tsize l sl) (tsize r sr)) (tsize m (+ 1 (+ sl sr)))))) - -(declare-fun tinsert (Tree Int Tree) Bool) -(assert (forall ((i Int)) (tinsert leaf i (node i leaf leaf)))) -(assert (forall ((r Tree) (l Tree) (d Int) (i Int) (x Tree) (m Tree)) - (=> (and (tinsert r i x) (< d i) (= m (node d l x))) (tinsert (node d l r) i m)))) -(assert (forall ((r Tree) (l Tree) (d Int) (i Int) (y Tree) (m Tree)) - (=> (and (tinsert l i y) (>= d i) (= m (node d y r))) (tinsert (node d l r) i m)))) - -(declare-fun tinsert-all (Tree Lst Tree) Bool) -(assert (forall ((x Tree)) (tinsert-all x nil x))) -(assert (forall ((x Tree) (n Int) (ls Lst) (xs Lst) (z Tree) (y Tree)) - (=> (and (tinsert-all x ls y) (= xs (cons n ls)) (tinsert y n z)) (tinsert-all x xs z)))) - -(declare-fun tremove (Tree Int Tree) Bool) -(assert (forall ((i Int)) (tremove leaf i leaf))) -(assert (forall ((i Int) (d Int) (l Tree) (r Tree) (m Tree)) - (=> (and (< i d) (tremove l i m)) (tremove (node d l r) i (node d m r))))) -(assert (forall ((i Int) (d Int) (l Tree) (r Tree) (m Tree)) - (=> (and (< d i) (tremove r i m)) (tremove (node d l r) i (node d l m))))) -(assert (forall ((d Int) (r Tree)) (tremove (node d leaf r) d r))) -(assert (forall ((d Int) (ld Int) (ll Tree) (lr Tree) (r Tree) (m Tree)) - (=> (tremove (node ld ll lr) ld m) (tremove (node d (node ld ll lr) r) d (node ld m r))))) - -; conjecture -(assert (forall ((t Tree) (n Int) (r Tree) (rs Int) (ts Int)) - (=> (and (tremove t n r) (tsize t ts) (tsize r rs) (not (<= rs ts))) false))) ; G-bsearch-tree-4 - -(check-sat) diff --git a/bench_horn_adt/LEON/bsearch-tree-goal5.smt2 b/bench_horn_adt/LEON/bsearch-tree-goal5.smt2 deleted file mode 100644 index 2ed797e5d..000000000 --- a/bench_horn_adt/LEON/bsearch-tree-goal5.smt2 +++ /dev/null @@ -1,50 +0,0 @@ -(set-logic HORN) - -; lists -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) - -(declare-fun len (Lst Int) Bool) -(assert (len nil 0)) -(assert (forall ((x Int) (xs Lst) (ys Lst) (l Int)) - (=> (and (= xs (cons x ys)) (len ys l)) (len xs (+ l 1))))) - -; (binary search) tree -(declare-datatypes () ((Tree (node (data Int) (left Tree) (right Tree)) (leaf)))) - -(declare-fun tsize (Tree Int) Bool) -(assert (tsize leaf 0)) -(assert (forall ((x Int) (r Tree) (l Tree) (m Tree) (sl Int) (sr Int)) - (=> (and (= m (node x l r)) (tsize l sl) (tsize r sr)) (tsize m (+ 1 (+ sl sr)))))) - -(declare-fun tinsert (Tree Int Tree) Bool) -(assert (forall ((i Int)) (tinsert leaf i (node i leaf leaf)))) -(assert (forall ((r Tree) (l Tree) (d Int) (i Int) (x Tree) (m Tree)) - (=> (and (tinsert r i x) (< d i) (= m (node d l x))) (tinsert (node d l r) i m)))) -(assert (forall ((r Tree) (l Tree) (d Int) (i Int) (y Tree) (m Tree)) - (=> (and (tinsert l i y) (>= d i) (= m (node d y r))) (tinsert (node d l r) i m)))) - -(declare-fun tinsert-all (Tree Lst Tree) Bool) -(assert (forall ((x Tree)) (tinsert-all x nil x))) -(assert (forall ((x Tree) (n Int) (ls Lst) (xs Lst) (z Tree) (y Tree)) - (=> (and (tinsert-all x ls y) (= xs (cons n ls)) (tinsert y n z)) (tinsert-all x xs z)))) - -(declare-fun tremove (Tree Int Tree) Bool) -(assert (forall ((i Int)) (tremove leaf i leaf))) -(assert (forall ((i Int) (d Int) (l Tree) (r Tree) (m Tree)) - (=> (and (< i d) (tremove l i m)) (tremove (node d l r) i (node d m r))))) -(assert (forall ((i Int) (d Int) (l Tree) (r Tree) (m Tree)) - (=> (and (< d i) (tremove r i m)) (tremove (node d l r) i (node d l m))))) -(assert (forall ((d Int) (r Tree)) (tremove (node d leaf r) d r))) -(assert (forall ((d Int) (ld Int) (ll Tree) (lr Tree) (r Tree) (m Tree)) - (=> (tremove (node ld ll lr) ld m) (tremove (node d (node ld ll lr) r) d (node ld m r))))) - -(declare-fun tremove-all (Tree Lst Tree) Bool) -(assert (forall ((x Tree)) (tremove-all x nil x))) -(assert (forall ((x Tree) (n Int) (l Lst) (y Tree) (z Tree)) - (=> (and (tremove x n y) (tremove-all y l z)) (tremove-all x (cons n l) z)))) - -; conjecture -(assert (forall ((l Lst) (t Tree) (r Tree) (ts Int) (rs Int)) - (=> (and (tremove-all t l r) (tsize t ts) (tsize r rs) (not (<= rs ts))) false))); G-bsearch-tree-5 - -(check-sat) diff --git a/bench_horn_adt/LEON/bsearch-tree-goal6.smt2 b/bench_horn_adt/LEON/bsearch-tree-goal6.smt2 deleted file mode 100644 index dbb535c13..000000000 --- a/bench_horn_adt/LEON/bsearch-tree-goal6.smt2 +++ /dev/null @@ -1,26 +0,0 @@ -(set-logic HORN) - -; (binary search) tree -(declare-datatypes () ((Tree (node (data Int) (left Tree) (right Tree)) (leaf)))) - -(declare-fun tinsert (Tree Int Tree) Bool) -(assert (forall ((i Int)) (tinsert leaf i (node i leaf leaf)))) -(assert (forall ((r Tree) (l Tree) (d Int) (i Int) (x Tree) (m Tree)) - (=> (and (tinsert r i x) (< d i) (= m (node d l x))) (tinsert (node d l r) i m)))) -(assert (forall ((r Tree) (l Tree) (d Int) (i Int) (y Tree) (m Tree)) - (=> (and (tinsert l i y) (>= d i) (= m (node d y r))) (tinsert (node d l r) i m)))) - -(declare-fun tcontains (Tree Int Bool) Bool) -(assert (forall ((i Int)) (tcontains leaf i false))) -(assert (forall ((d Int) (l Tree) (r Tree) (i Int)) - (=> (= d i) (tcontains (node d l r) i true)))) -(assert (forall ((d Int) (l Tree) (r Tree) (i Int)) - (=> (tcontains l i true) (tcontains (node d l r) i true)))) -(assert (forall ((d Int) (l Tree) (r Tree) (i Int)) - (=> (tcontains r i true) (tcontains (node d l r) i true)))) - -; conjecture -(assert (forall ((x Tree) (i Int) (y Tree) (r Bool)) - (=> (and (tinsert x i y) (tcontains y i r) (not r)) false))); G-bsearch-tree-6 - -(check-sat) diff --git a/bench_horn_adt/LEON/bsearch-tree-goal8.smt2 b/bench_horn_adt/LEON/bsearch-tree-goal8.smt2 deleted file mode 100644 index 020a6c4a5..000000000 --- a/bench_horn_adt/LEON/bsearch-tree-goal8.smt2 +++ /dev/null @@ -1,31 +0,0 @@ -(set-logic HORN) - -; (binary search) tree -(declare-datatypes () ((Tree (node (data Int) (left Tree) (right Tree)) (leaf)))) - -(declare-fun tinsert (Tree Int Tree) Bool) -(assert (forall ((i Int)) (tinsert leaf i (node i leaf leaf)))) -(assert (forall ((r Tree) (l Tree) (d Int) (i Int) (x Tree) (m Tree)) - (=> (and (tinsert r i x) (< d i) (= m (node d l x))) (tinsert (node d l r) i m)))) -(assert (forall ((r Tree) (l Tree) (d Int) (i Int) (y Tree) (m Tree)) - (=> (and (tinsert l i y) (>= d i) (= m (node d y r))) (tinsert (node d l r) i m)))) - -(declare-fun tcontains (Tree Int Bool) Bool) -(assert (forall ((i Int)) (tcontains leaf i false))) -(assert (forall ((d Int) (l Tree) (r Tree) (i Int)) - (=> (= d i) (tcontains (node d l r) i true)))) -(assert (forall ((d Int) (l Tree) (r Tree) (i Int)) - (=> (tcontains l i true) (tcontains (node d l r) i true)))) -(assert (forall ((d Int) (l Tree) (r Tree) (i Int)) - (=> (tcontains r i true) (tcontains (node d l r) i true)))) - -(declare-fun tsorted (Tree Bool) Bool) -(assert (tsorted leaf true)) -(assert (forall ((d Int) (l Tree) (r Tree) (x Int) (y Int)) - (=> (and (tsorted l true) (tsorted r true) (tcontains l x true) (tcontains r x true) - (<= x d) (< d x)) (tsorted (node d l r) true)))) - -(assert (forall ((x Tree) (i Int) (y Tree)) - (=> (and (tsorted x true) (tinsert x i y) (not (tsorted y true))) false))); G-bsearch-tree-8 - -(check-sat) diff --git a/bench_horn_adt/LEON/bsearch-tree-goal9.smt2 b/bench_horn_adt/LEON/bsearch-tree-goal9.smt2 deleted file mode 100644 index f17fe8b9d..000000000 --- a/bench_horn_adt/LEON/bsearch-tree-goal9.smt2 +++ /dev/null @@ -1,26 +0,0 @@ -(set-logic HORN) - -; (binary search) tree -(declare-datatypes () ((Tree (node (data Int) (left Tree) (right Tree)) (leaf)))) - -(declare-fun tinsert (Tree Int Tree) Bool) -(assert (forall ((i Int)) (tinsert leaf i (node i leaf leaf)))) -(assert (forall ((r Tree) (l Tree) (d Int) (i Int) (x Tree) (m Tree)) - (=> (and (tinsert r i x) (< d i) (= m (node d l x))) (tinsert (node d l r) i m)))) -(assert (forall ((r Tree) (l Tree) (d Int) (i Int) (y Tree) (m Tree)) - (=> (and (tinsert l i y) (>= d i) (= m (node d y r))) (tinsert (node d l r) i m)))) - -(declare-fun tmember (Tree Int Bool) Bool) -(assert (forall ((x Int)) (tmember leaf x false))) -(assert (forall ((d Int) (l Tree) (r Tree) (i Int)) - (=> (= i d) (tmember (node d l r) i true)))) -(assert (forall ((d Int) (l Tree) (r Tree) (i Int)) - (=> (and (< d i) (tmember r i true)) (tmember (node d l r) i true)))) -(assert (forall ((d Int) (l Tree) (r Tree) (i Int)) - (=> (and (< i d) (tmember l i true)) (tmember (node d l r) i true)))) - -; conjecture -(assert (forall ((x Tree) (i Int) (y Tree) (r Bool)) - (=> (and (tinsert x i y) (tmember y i r) (not r)) false))); G-bsearch-tree-9 - -(check-sat) diff --git a/bench_horn_adt/arrays/arr_map.smt2 b/bench_horn_adt/arrays/arr_map.smt2 deleted file mode 100644 index 693afdced..000000000 --- a/bench_horn_adt/arrays/arr_map.smt2 +++ /dev/null @@ -1,55 +0,0 @@ -(set-logic HORN) -(declare-sort Key) -(declare-sort Value) -(declare-fun empty (Int) Value) - -(declare-datatypes () ((Pair (pair (key Key) (value Value))))) -(declare-datatypes () ((Lst (cons (head Pair) (tail Lst)) (nil)))) -(declare-fun R (Lst (Array Key Value)) Bool) - -(declare-fun get (Key Lst) Value) -(assert (forall ((x Key)) (= (get x nil) (empty 0)))) -(assert (forall ((x Key) (y Key) (z Value) (xs Lst)) - (= (get x (cons (pair y z) xs)) (ite (= x y) z (get x xs))))) - -(declare-fun set (Key Value Lst) Lst) -(assert (forall ((x Key) (v Value)) (= (set x v nil) (cons (pair x v) nil)))) -(assert (forall ((x Key) (v Value) (y Key) (z Value) (xs Lst)) - (= (set x v (cons (pair y z) xs)) - (ite (= x y) (cons (pair x v) xs) (cons (pair y z) (set x v xs)))))) - -(declare-fun remove (Key Lst) Lst) -(assert (forall ((x Key)) (= (remove x nil) nil))) -(assert (forall ((x Key) (y Key) (v Value) (xs Lst)) - (= (remove x (cons (pair y v) xs)) (ite (= x y) xs (cons (pair y v) (remove x xs)))))) - -; init -(assert (forall ((s (Array Key Value)) (xs Lst)) - (=> (and (forall ((a Key)) (= (empty 0) (select s a))) (= xs nil)) (R xs s)))) - -; insert-init -(assert (forall ((s (Array Key Value)) (s1 (Array Key Value)) (xs Lst) (xs1 Lst) (in Key) (v Value)) - (=> (and - (R xs s) - (= s1 (store s in v)) - (= xs1 (set in v xs))) - (R xs1 s1)))) - -; remove-init -(assert (forall ((s (Array Key Value)) (s1 (Array Key Value)) (xs Lst) (xs1 Lst) (in Key)) - (=> (and - (R xs s) - (= xs1 (remove in xs)) - (= s1 (store s in (empty 0)))) - (R xs1 s1)))) - -; contains-out -(assert (forall ((s (Array Key Value)) (xs Lst) (in Key) (out1 Value) (out2 Value)) - (=> (and - (R xs s) - (= out1 (select s in)) - (= out2 (get in xs)) - (not (= out1 out2))) - false))) - -(check-sat) diff --git a/bench_horn_adt/arrays/arr_map_dup.smt2 b/bench_horn_adt/arrays/arr_map_dup.smt2 deleted file mode 100644 index 08134c911..000000000 --- a/bench_horn_adt/arrays/arr_map_dup.smt2 +++ /dev/null @@ -1,49 +0,0 @@ -(set-logic HORN) -(declare-sort Key) -(declare-sort Value) -(declare-fun empty (Int) Value) - -(declare-datatypes () ((Pair (pair (key Key) (value Value))))) -(declare-datatypes () ((Lst (cons (head Pair) (tail Lst)) (nil)))) -(declare-fun R (Lst (Array Key Value)) Bool) - -(declare-fun get (Key Lst) Value) -(assert (forall ((x Key)) (= (get x nil) (empty 0)))) -(assert (forall ((x Key) (y Key) (z Value) (xs Lst)) - (= (get x (cons (pair y z) xs)) (ite (= x y) z (get x xs))))) - -(declare-fun removeall (Key Lst) Lst) -(assert (forall ((x Key)) (= (removeall x nil) nil))) -(assert (forall ((x Key) (y Key) (v Value) (xs Lst)) - (= (removeall x (cons (pair y v) xs)) (ite (= x y) (removeall x xs) (cons (pair y v) (removeall x xs)))))) - -; init -(assert (forall ((s (Array Key Value)) (xs Lst)) - (=> (and (forall ((a Key)) (= (empty 0) (select s a))) (= xs nil)) (R xs s)))) - -; insert-init -(assert (forall ((s (Array Key Value)) (s1 (Array Key Value)) (xs Lst) (xs1 Lst) (in Key) (v Value)) - (=> (and - (R xs s) - (= s1 (store s in v)) - (= xs1 (cons (pair in v) xs))) - (R xs1 s1)))) - -; remove-init -(assert (forall ((s (Array Key Value)) (s1 (Array Key Value)) (xs Lst) (xs1 Lst) (in Key)) - (=> (and - (R xs s) - (= xs1 (removeall in xs)) - (= s1 (store s in (empty 0)))) - (R xs1 s1)))) - -; contains-out -(assert (forall ((s (Array Key Value)) (xs Lst) (in Key) (out1 Value) (out2 Value)) - (=> (and - (R xs s) - (= out1 (select s in)) - (= out2 (get in xs)) - (not (= out1 out2))) - false))) - -(check-sat) diff --git a/bench_horn_adt/arrays/arr_multiset.smt2 b/bench_horn_adt/arrays/arr_multiset.smt2 deleted file mode 100644 index e162dfbbb..000000000 --- a/bench_horn_adt/arrays/arr_multiset.smt2 +++ /dev/null @@ -1,47 +0,0 @@ -(set-logic HORN) -(declare-sort Elem) -(declare-datatypes () ((Lst (cons (head Elem) (tail Lst)) (nil)))) -(declare-fun R (Lst (Array Elem Int)) Bool) - -(declare-fun num (Elem Lst) Int) -(assert (forall ((x Elem)) (= (num x nil) 0))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) (= (num x (cons y xs)) (ite (= x y) (+ 1 (num x xs)) (num x xs))))) - -(declare-fun remove (Elem Lst) Lst) -(assert (forall ((x Elem)) (= (remove x nil) nil))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) (= (remove x (cons y xs)) (ite (= x y) xs (cons y (remove x xs)))))) - -; extras -;(assert (forall ((s (Array Elem Int)) (x Elem)) (>= (select s x) 0))) -(assert (forall ((xs Lst) (a (Elem))) (=> (= 0 (num a xs)) (= (remove a xs) xs)))) - -; init -(assert (forall ((s (Array Elem Int)) (xs Lst)) - (=> (and (forall ((a Elem)) (= (select s a) 0)) (= xs nil)) (R xs s)))) - -; insert-init -(assert (forall ((s (Array Elem Int)) (s1 (Array Elem Int)) (xs Lst) (xs1 Lst) (in Elem)) - (=> (and - (R xs s) - (= s1 (store s in (+ 1 (select s in)))) - (= xs1 (cons in xs))) - (R xs1 s1)))) - -; remove-init -(assert (forall ((s (Array Elem Int)) (s1 (Array Elem Int)) (xs Lst) (xs1 Lst) (in Elem)) - (=> (and - (R xs s) - (= xs1 (remove in xs)) - (= s1 (ite (= (select s in) 0) s (store s in (- (select s in) 1))))) - (R xs1 s1)))) - -; contains-out -(assert (forall ((s (Array Elem Int)) (xs Lst) (in Elem) (out1 Int) (out2 Int)) - (=> (and - (R xs s) - (= out1 (select s in)) - (= out2 (num in xs)) - (not (= out1 out2))) - false))) - -(check-sat) diff --git a/bench_horn_adt/arrays/arr_multiset_clear.smt2 b/bench_horn_adt/arrays/arr_multiset_clear.smt2 deleted file mode 100644 index 9fb5ff935..000000000 --- a/bench_horn_adt/arrays/arr_multiset_clear.smt2 +++ /dev/null @@ -1,44 +0,0 @@ -(set-logic HORN) -(declare-sort Elem) -(declare-datatypes () ((Lst (cons (head Elem) (tail Lst)) (nil)))) -(declare-fun R (Lst (Array Elem Int)) Bool) - -(declare-fun num (Elem Lst) Int) -(assert (forall ((x Elem)) (= (num x nil) 0))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) (= (num x (cons y xs)) (ite (= x y) (+ 1 (num x xs)) (num x xs))))) - -(declare-fun removeall (Elem Lst) Lst) -(assert (forall ((x Elem)) (= (removeall x nil) nil))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) - (= (removeall x (cons y xs)) (ite (= x y) (removeall x xs) (cons y (removeall x xs)))))) - -; init -(assert (forall ((s (Array Elem Int)) (xs Lst)) - (=> (and (forall ((a Elem)) (= (select s a) 0)) (= xs nil)) (R xs s)))) - -; insert-init -(assert (forall ((s (Array Elem Int)) (s1 (Array Elem Int)) (xs Lst) (xs1 Lst) (in Elem)) - (=> (and - (R xs s) - (= s1 (store s in (+ 1 (select s in)))) - (= xs1 (cons in xs))) - (R xs1 s1)))) - -; remove-init -(assert (forall ((s (Array Elem Int)) (s1 (Array Elem Int)) (xs Lst) (xs1 Lst) (in Elem)) - (=> (and - (R xs s) - (= xs1 (removeall in xs)) - (= s1 (store s in 0))) - (R xs1 s1)))) - -; contains-out -(assert (forall ((s (Array Elem Int)) (xs Lst) (in Elem) (out1 Int) (out2 Int)) - (=> (and - (R xs s) - (= out1 (select s in)) - (= out2 (num in xs)) - (not (= out1 out2))) - false))) - -(check-sat) diff --git a/bench_horn_adt/arrays/arr_queue.smt2 b/bench_horn_adt/arrays/arr_queue.smt2 deleted file mode 100644 index 83b28f846..000000000 --- a/bench_horn_adt/arrays/arr_queue.smt2 +++ /dev/null @@ -1,73 +0,0 @@ -(set-logic HORN) -(declare-sort Elem) -(declare-datatypes () ((Lst (cons (head Elem) (tail Lst)) (nil)))) -(declare-fun R (Lst (Array Int Elem) Int Int) Bool) - -(declare-fun allbutlast (Lst) Lst) -(assert (forall ((x Elem)) (= (allbutlast (cons x nil)) nil))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) (= (allbutlast (cons x (cons y xs))) (cons x (allbutlast (cons y xs)))))) - -(declare-fun last (Lst) Elem) -(assert (forall ((x Elem)) (= (last (cons x nil)) x))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) (= (last (cons x (cons y xs))) (last (cons y xs))))) - -; init -(assert (forall ((xs Lst) (a (Array Int Elem)) (m Int) (n Int)) - (=> (and (= n m) (= xs nil)) (R xs a m n)))) - -; enqueue-init -(assert (forall ((xs Lst) (xs1 Lst) (a (Array Int Elem)) (a1 (Array Int Elem)) (m Int) (n Int) (m1 Int) (n1 Int) (in Elem)) - (=> (and - (R xs a m n) - (= a1 (store a n in)) - (= n1 (+ n 1)) - (= m1 m) - (= xs1 (cons in xs))) - (R xs1 a1 m1 n1)))) - -; dequeue-init -(assert (forall ((xs Lst) (xs1 Lst) (a (Array Int Elem)) (a1 (Array Int Elem)) (m Int) (n Int) (m1 Int) (n1 Int) (out1 Elem) (out2 Elem)) - (=> (and - (R xs a m n) - (< m n) - (= m1 (+ m 1)) - (= n1 n) - (= a1 a) - (= out1 (select a m)) - (distinct xs nil) - (= xs1 (allbutlast xs)) - (= out2 (last xs))) - (R xs1 a1 m1 n1)))) - -; dequeue-app-1 -(assert (forall ((xs Lst) (xs1 Lst) (a (Array Int Elem)) (a1 (Array Int Elem)) (m Int) (n Int) (m1 Int) (n1 Int) (out1 Elem) (out2 Elem)) - (=> (and - (R xs a m n) - (< m n) - (= xs nil)) - false))) - -; dequeue-app-2 -(assert (forall ((xs Lst) (xs1 Lst) (a (Array Int Elem)) (a1 (Array Int Elem)) (m Int) (n Int) (m1 Int) (n1 Int) (out1 Elem) (out2 Elem)) - (=> (and - (R xs a m n) - (not (= xs nil)) - (not (< m n))) - false))) - -; dequeue-out -(assert (forall ((xs Lst) (xs1 Lst) (a (Array Int Elem)) (a1 (Array Int Elem)) (m Int) (n Int) (m1 Int) (n1 Int) (out1 Elem) (out2 Elem)) - (=> (and - (R xs a m n) - (< m n) - (= m1 (+ m 1)) - (= n1 n) - (= a1 a) - (= out1 (select a m)) - (distinct xs nil) - (= xs1 (allbutlast xs)) - (= out2 (last xs)) - (not (= out1 out2))) - false))) - -(check-sat) diff --git a/bench_horn_adt/arrays/arr_queue_even.smt2 b/bench_horn_adt/arrays/arr_queue_even.smt2 deleted file mode 100644 index 1280fa2e0..000000000 --- a/bench_horn_adt/arrays/arr_queue_even.smt2 +++ /dev/null @@ -1,73 +0,0 @@ -(set-logic HORN) -(declare-sort Elem) -(declare-datatypes () ((Lst (cons (head Elem) (tail Lst)) (nil)))) -(declare-fun R (Lst (Array Int Elem) Int Int) Bool) - -(declare-fun allbutlast (Lst) Lst) -(assert (forall ((x Elem)) (= (allbutlast (cons x nil)) nil))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) (= (allbutlast (cons x (cons y xs))) (cons x (allbutlast (cons y xs)))))) - -(declare-fun last (Lst) Elem) -(assert (forall ((x Elem)) (= (last (cons x nil)) x))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) (= (last (cons x (cons y xs))) (last (cons y xs))))) - -; init -(assert (forall ((xs Lst) (a (Array Int Elem)) (m Int) (n Int)) - (=> (and (= n m) (= xs nil)) (R xs a m n)))) - -; enqueue-init -(assert (forall ((xs Lst) (xs1 Lst) (a (Array Int Elem)) (a1 (Array Int Elem)) (m Int) (n Int) (m1 Int) (n1 Int) (in Elem)) - (=> (and - (R xs a m n) - (= a1 (store a n in)) - (= n1 (+ n 2)) - (= m1 m) - (= xs1 (cons in xs))) - (R xs1 a1 m1 n1)))) - -; dequeue-init -(assert (forall ((xs Lst) (xs1 Lst) (a (Array Int Elem)) (a1 (Array Int Elem)) (m Int) (n Int) (m1 Int) (n1 Int) (out1 Elem) (out2 Elem)) - (=> (and - (R xs a m n) - (< m n) - (= m1 (+ m 2)) - (= n1 n) - (= a1 a) - (= out1 (select a m)) - (distinct xs nil) - (= xs1 (allbutlast xs)) - (= out2 (last xs))) - (R xs1 a1 m1 n1)))) - -; dequeue-app-1 -(assert (forall ((xs Lst) (xs1 Lst) (a (Array Int Elem)) (a1 (Array Int Elem)) (m Int) (n Int) (m1 Int) (n1 Int) (out1 Elem) (out2 Elem)) - (=> (and - (R xs a m n) - (< m n) - (= xs nil)) - false))) - -; dequeue-app-2 -(assert (forall ((xs Lst) (xs1 Lst) (a (Array Int Elem)) (a1 (Array Int Elem)) (m Int) (n Int) (m1 Int) (n1 Int) (out1 Elem) (out2 Elem)) - (=> (and - (R xs a m n) - (not (= xs nil)) - (not (< m n))) - false))) - -; dequeue-out -(assert (forall ((xs Lst) (xs1 Lst) (a (Array Int Elem)) (a1 (Array Int Elem)) (m Int) (n Int) (m1 Int) (n1 Int) (out1 Elem) (out2 Elem)) - (=> (and - (R xs a m n) - (< m n) - (= m1 (+ m 2)) - (= n1 n) - (= a1 a) - (= out1 (select a m)) - (distinct xs nil) - (= xs1 (allbutlast xs)) - (= out2 (last xs)) - (not (= out1 out2))) - false))) - -(check-sat) diff --git a/bench_horn_adt/arrays/arr_set_remove.smt2 b/bench_horn_adt/arrays/arr_set_remove.smt2 deleted file mode 100644 index 646d5f88c..000000000 --- a/bench_horn_adt/arrays/arr_set_remove.smt2 +++ /dev/null @@ -1,44 +0,0 @@ -(set-logic HORN) -(declare-sort Elem) -(declare-datatypes () ((Lst (cons (head Elem) (tail Lst)) (nil)))) -(declare-fun R (Lst (Array Elem Bool)) Bool) - -(declare-fun contains (Elem Lst) Bool) -(assert (forall ((x Elem)) (= (contains x nil) false))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) - (= (contains x (cons y xs)) (ite (= x y) true (contains x xs))))) - -(declare-fun remove (Elem Lst) Lst) -(assert (forall ((x Elem)) (= (remove x nil) nil))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) (= (remove x (cons y xs)) (ite (= x y) xs (cons y (remove x xs)))))) - -; init -(assert (forall ((s (Array Elem Bool)) (xs Lst)) - (=> (and (forall ((a Elem)) (not (select s a))) (= xs nil)) (R xs s)))) - -; insert-init -(assert (forall ((s (Array Elem Bool)) (s1 (Array Elem Bool)) (xs Lst) (xs1 Lst) (in Elem)) - (=> (and - (R xs s) - (= s1 (store s in true)) - (= xs1 (ite (contains in xs) xs (cons in xs)))) - (R xs1 s1)))) - -; remove-init -(assert (forall ((s (Array Elem Bool)) (s1 (Array Elem Bool)) (xs Lst) (xs1 Lst) (in Elem)) - (=> (and - (R xs s) - (= xs1 (remove in xs)) - (= s1 (store s in false))) - (R xs1 s1)))) - -; contains-out -(assert (forall ((s (Array Elem Bool)) (xs Lst) (in Elem) (out1 Bool) (out2 Bool)) - (=> (and - (R xs s) - (= out1 (select s in)) - (= out2 (contains in xs)) - (not (= out1 out2))) - false))) - -(check-sat) diff --git a/bench_horn_adt/arrays/arr_set_removeall.smt2 b/bench_horn_adt/arrays/arr_set_removeall.smt2 deleted file mode 100644 index ad48f6a50..000000000 --- a/bench_horn_adt/arrays/arr_set_removeall.smt2 +++ /dev/null @@ -1,45 +0,0 @@ -(set-logic HORN) -(declare-sort Elem) -(declare-datatypes () ((Lst (cons (head Elem) (tail Lst)) (nil)))) -(declare-fun R (Lst (Array Elem Bool)) Bool) - -(declare-fun contains (Elem Lst) Bool) -(assert (forall ((x Elem)) (= (contains x nil) false))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) - (= (contains x (cons y xs)) (ite (= x y) true (contains x xs))))) - -(declare-fun removeall (Elem Lst) Lst) -(assert (forall ((x Elem)) (= (removeall x nil) nil))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) - (= (removeall x (cons y xs)) (ite (= x y) (removeall x xs) (cons y (removeall x xs)))))) - -; init -(assert (forall ((s (Array Elem Bool)) (xs Lst)) - (=> (and (forall ((a Elem)) (not (select s a))) (= xs nil)) (R xs s)))) - -; insert-init -(assert (forall ((s (Array Elem Bool)) (s1 (Array Elem Bool)) (xs Lst) (xs1 Lst) (in Elem)) - (=> (and - (R xs s) - (= s1 (store s in true)) - (= xs1 (ite (contains in xs) xs (cons in xs)))) - (R xs1 s1)))) - -; remove-init -(assert (forall ((s (Array Elem Bool)) (s1 (Array Elem Bool)) (xs Lst) (xs1 Lst) (in Elem)) - (=> (and - (R xs s) - (= xs1 (removeall in xs)) - (= s1 (store s in false))) - (R xs1 s1)))) - -; contains-out -(assert (forall ((s (Array Elem Bool)) (xs Lst) (in Elem) (out1 Bool) (out2 Bool)) - (=> (and - (R xs s) - (= out1 (select s in)) - (= out2 (contains in xs)) - (not (= out1 out2))) - false))) - -(check-sat) diff --git a/bench_horn_adt/arrays/arr_stack.smt2 b/bench_horn_adt/arrays/arr_stack.smt2 deleted file mode 100644 index d31b8623f..000000000 --- a/bench_horn_adt/arrays/arr_stack.smt2 +++ /dev/null @@ -1,60 +0,0 @@ -(set-logic HORN) -(declare-sort Elem) -(declare-datatypes () ((Lst (cons (head Elem) (tail Lst)) (nil)))) -(declare-fun R (Lst (Array Int Elem) Int) Bool) - -; init -(assert (forall ((xs Lst) (a (Array Int Elem)) (n Int)) - (=> (and (= n 0) (= xs nil)) (R xs a n)))) - -; push-init -(assert (forall ((xs Lst) (xs1 Lst) (a (Array Int Elem)) (a1 (Array Int Elem)) (n Int) (n1 Int) (in Elem)) - (=> (and - (R xs a n) - (= a1 (store a n in)) - (= n1 (+ n 1)) - (= xs1 (cons in xs))) - (R xs1 a1 n1)))) - -; pop-init -(assert (forall ((xs Lst) (xs1 Lst) (a (Array Int Elem)) (a1 (Array Int Elem)) (n Int) (n1 Int) (out1 Elem) (out2 Elem)) - (=> (and - (R xs a n) - (> n 0) - (= n1 (- n 1)) - (= a1 a) - (= out1 (select a n1)) - (not (= xs nil)) - (= xs (cons out2 xs1))) - (R xs1 a1 n1)))) - -; pop-app-1 -(assert (forall ((xs Lst) (xs1 Lst) (a (Array Int Elem)) (a1 (Array Int Elem)) (n Int) (n1 Int) (out1 Elem) (out2 Elem)) - (=> (and - (R xs a n) - (> n 0) - (= xs nil)) - false))) - -; pop-app-2 -(assert (forall ((xs Lst) (xs1 Lst) (a (Array Int Elem)) (a1 (Array Int Elem)) (n Int) (n1 Int) (out1 Elem) (out2 Elem)) - (=> (and - (R xs a n) - (not (= xs nil)) - (not (> n 0))) - false))) - -; pop-out -(assert (forall ((xs Lst) (xs1 Lst) (a (Array Int Elem)) (a1 (Array Int Elem)) (n Int) (n1 Int) (out1 Elem) (out2 Elem)) - (=> (and - (R xs a n) - (> n 0) - (= n1 (- n 1)) - (= a1 a) - (= out1 (select a n1)) - (not (= xs nil)) - (= xs (cons out2 xs1)) - (not (= out1 out2))) - false))) - -(check-sat) diff --git a/bench_horn_adt/arrays/arr_stack_even.smt2 b/bench_horn_adt/arrays/arr_stack_even.smt2 deleted file mode 100644 index 46c6cc3eb..000000000 --- a/bench_horn_adt/arrays/arr_stack_even.smt2 +++ /dev/null @@ -1,60 +0,0 @@ -(set-logic HORN) -(declare-sort Elem) -(declare-datatypes () ((Lst (cons (head Elem) (tail Lst)) (nil)))) -(declare-fun R (Lst (Array Int Elem) Int) Bool) - -; init -(assert (forall ((xs Lst) (a (Array Int Elem)) (n Int)) - (=> (and (= n 0) (= xs nil)) (R xs a n)))) - -; push-init -(assert (forall ((xs Lst) (xs1 Lst) (a (Array Int Elem)) (a1 (Array Int Elem)) (n Int) (n1 Int) (in Elem)) - (=> (and - (R xs a n) - (= a1 (store a n in)) - (= n1 (+ n 2)) - (= xs1 (cons in xs))) - (R xs1 a1 n1)))) - -; pop-init -(assert (forall ((xs Lst) (xs1 Lst) (a (Array Int Elem)) (a1 (Array Int Elem)) (n Int) (n1 Int) (out1 Elem) (out2 Elem)) - (=> (and - (R xs a n) - (> n 0) - (= n1 (- n 2)) - (= a1 a) - (= out1 (select a n1)) - (not (= xs nil)) - (= xs (cons out2 xs1))) - (R xs1 a1 n1)))) - -; pop-app-1 -(assert (forall ((xs Lst) (xs1 Lst) (a (Array Int Elem)) (a1 (Array Int Elem)) (n Int) (n1 Int) (out1 Elem) (out2 Elem)) - (=> (and - (R xs a n) - (> n 0) - (= xs nil)) - false))) - -; pop-app-2 -(assert (forall ((xs Lst) (xs1 Lst) (a (Array Int Elem)) (a1 (Array Int Elem)) (n Int) (n1 Int) (out1 Elem) (out2 Elem)) - (=> (and - (R xs a n) - (not (= xs nil)) - (not (> n 0))) - false))) - -; pop-out -(assert (forall ((xs Lst) (xs1 Lst) (a (Array Int Elem)) (a1 (Array Int Elem)) (n Int) (n1 Int) (out1 Elem) (out2 Elem)) - (=> (and - (R xs a n) - (> n 0) - (= n1 (- n 2)) - (= a1 a) - (= out1 (select a n1)) - (not (= xs nil)) - (= xs (cons out2 xs1)) - (not (= out1 out2))) - false))) - -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/clam/goal10.smt2 b/bench_horn_adt/benchmarks-vmcai2015/clam/goal10.smt2 deleted file mode 100644 index 8778fee85..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/clam/goal10.smt2 +++ /dev/null @@ -1,51 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun append (listOfInt listOfInt listOfInt) Bool) -(declare-fun rev (listOfInt listOfInt) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A listOfInt) ) - (append nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (append B C D) - (append (cons-listOfInt A B) C (cons-listOfInt A D)) - ) - ) -) -(assert - (rev nil-listOfInt nil-listOfInt) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (and - (rev B D) - (append D (cons-listOfInt A nil-listOfInt) C) - ) - (rev (cons-listOfInt A B) C) - ) - ) -) -(assert - (forall ( (A Bool) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (and - (rev B C) - (rev C D) - (not (= D B)) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/clam/goal11.smt2 b/bench_horn_adt/benchmarks-vmcai2015/clam/goal11.smt2 deleted file mode 100644 index e6d3fca26..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/clam/goal11.smt2 +++ /dev/null @@ -1,54 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun append (listOfInt listOfInt listOfInt) Bool) -(declare-fun rev (listOfInt listOfInt) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A listOfInt) ) - (append nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (append B C D) - (append (cons-listOfInt A B) C (cons-listOfInt A D)) - ) - ) -) -(assert - (rev nil-listOfInt nil-listOfInt) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (and - (rev B D) - (append D (cons-listOfInt A nil-listOfInt) C) - ) - (rev (cons-listOfInt A B) C) - ) - ) -) -(assert - (forall ( (A Bool) (B listOfInt) (C listOfInt) (D listOfInt) (E listOfInt) (F listOfInt) (G listOfInt) (H listOfInt) ) - (=> - (and - (rev B C) - (rev D E) - (append C E F) - (rev F G) - (append D B H) - (not (= G H)) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/clam/goal12.smt2 b/bench_horn_adt/benchmarks-vmcai2015/clam/goal12.smt2 deleted file mode 100644 index e8f32cc7f..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/clam/goal12.smt2 +++ /dev/null @@ -1,66 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun append (listOfInt listOfInt listOfInt) Bool) -(declare-fun rev (listOfInt listOfInt) Bool) -(declare-fun qreva (listOfInt listOfInt listOfInt) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A listOfInt) ) - (append nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (append B C D) - (append (cons-listOfInt A B) C (cons-listOfInt A D)) - ) - ) -) -(assert - (rev nil-listOfInt nil-listOfInt) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (and - (rev B D) - (append D (cons-listOfInt A nil-listOfInt) C) - ) - (rev (cons-listOfInt A B) C) - ) - ) -) -(assert - (forall ( (A listOfInt) ) - (qreva nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (qreva B (cons-listOfInt A C) D) - (qreva (cons-listOfInt A B) C D) - ) - ) -) -(assert - (forall ( (A Bool) (B listOfInt) (C listOfInt) (D listOfInt) (E listOfInt) (F listOfInt) ) - (=> - (and - (qreva B C D) - (rev B E) - (append E C F) - (not (= D F)) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/clam/goal17.smt2 b/bench_horn_adt/benchmarks-vmcai2015/clam/goal17.smt2 deleted file mode 100644 index 0f348fabb..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/clam/goal17.smt2 +++ /dev/null @@ -1,57 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun rev (listOfInt listOfInt) Bool) -(declare-fun append (listOfInt listOfInt listOfInt) Bool) -(declare-fun ff () Bool) - -(assert - (rev nil-listOfInt nil-listOfInt) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (and - (rev B D) - (append D (cons-listOfInt A nil-listOfInt) C) - ) - (rev (cons-listOfInt A B) C) - ) - ) -) -(assert - (forall ( (A listOfInt) ) - (append nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (append B C D) - (append (cons-listOfInt A B) C (cons-listOfInt A D)) - ) - ) -) -(assert - (forall ( (A Bool) (B listOfInt) (C listOfInt) (D listOfInt) (E listOfInt) (F listOfInt) (G listOfInt) (H listOfInt) (I listOfInt) (J listOfInt) (K listOfInt) ) - (=> - (and - (append B C D) - (rev D E) - (rev E F) - (rev B G) - (rev G H) - (rev C I) - (rev I J) - (append H J K) - (not (= F K)) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/clam/goal18.smt2 b/bench_horn_adt/benchmarks-vmcai2015/clam/goal18.smt2 deleted file mode 100644 index 99798082d..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/clam/goal18.smt2 +++ /dev/null @@ -1,54 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun rev (listOfInt listOfInt) Bool) -(declare-fun append (listOfInt listOfInt listOfInt) Bool) -(declare-fun ff () Bool) - -(assert - (rev nil-listOfInt nil-listOfInt) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (and - (rev B D) - (append D (cons-listOfInt A nil-listOfInt) C) - ) - (rev (cons-listOfInt A B) C) - ) - ) -) -(assert - (forall ( (A listOfInt) ) - (append nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (append B C D) - (append (cons-listOfInt A B) C (cons-listOfInt A D)) - ) - ) -) -(assert - (forall ( (A Bool) (B listOfInt) (C listOfInt) (D listOfInt) (E listOfInt) (F listOfInt) (G listOfInt) (H listOfInt) ) - (=> - (and - (rev B C) - (append C D E) - (rev E F) - (rev D G) - (append G B H) - (not (= F H)) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/clam/goal19.smt2 b/bench_horn_adt/benchmarks-vmcai2015/clam/goal19.smt2 deleted file mode 100644 index 72926f4c9..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/clam/goal19.smt2 +++ /dev/null @@ -1,55 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun rev (listOfInt listOfInt) Bool) -(declare-fun append (listOfInt listOfInt listOfInt) Bool) -(declare-fun ff () Bool) - -(assert - (rev nil-listOfInt nil-listOfInt) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (and - (rev B D) - (append D (cons-listOfInt A nil-listOfInt) C) - ) - (rev (cons-listOfInt A B) C) - ) - ) -) -(assert - (forall ( (A listOfInt) ) - (append nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (append B C D) - (append (cons-listOfInt A B) C (cons-listOfInt A D)) - ) - ) -) -(assert - (forall ( (A Bool) (B listOfInt) (C listOfInt) (D listOfInt) (E listOfInt) (F listOfInt) (G listOfInt) (H listOfInt) (I listOfInt) ) - (=> - (and - (rev B C) - (rev C D) - (append D E F) - (append B E G) - (rev G H) - (rev H I) - (not (= F I)) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/clam/goal2.smt2 b/bench_horn_adt/benchmarks-vmcai2015/clam/goal2.smt2 deleted file mode 100644 index 47024a690..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/clam/goal2.smt2 +++ /dev/null @@ -1,58 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun len (listOfInt Int) Bool) -(declare-fun append (listOfInt listOfInt listOfInt) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (len nil-listOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C Int) (D Int) ) - (=> - (and - (= C (+ 1 D)) - (len B D) - ) - (len (cons-listOfInt A B) C) - ) - ) -) -(assert - (forall ( (A listOfInt) ) - (append nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (append B C D) - (append (cons-listOfInt A B) C (cons-listOfInt A D)) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C listOfInt) (D listOfInt) (E listOfInt) (F listOfInt) ) - (=> - (and - (not (= A B)) - (append C D E) - (len E B) - (append D C F) - (len F A) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/clam/goal20.smt2 b/bench_horn_adt/benchmarks-vmcai2015/clam/goal20.smt2 deleted file mode 100644 index 466f2e67e..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/clam/goal20.smt2 +++ /dev/null @@ -1,84 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun rev (listOfInt listOfInt) Bool) -(declare-fun append (listOfInt listOfInt listOfInt) Bool) -(declare-fun id_list (listOfInt listOfInt) Bool) -(declare-fun len (listOfInt Int) Bool) -(declare-fun ff () Bool) - -(assert - (id_list nil-listOfInt nil-listOfInt) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) ) - (=> - (id_list B C) - (id_list (cons-listOfInt A B) (cons-listOfInt A C)) - ) - ) -) -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (len nil-listOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C Int) (D Int) ) - (=> - (and - (= C (+ 1 D)) - (len B D) - ) - (len (cons-listOfInt A B) C) - ) - ) -) -(assert - (rev nil-listOfInt nil-listOfInt) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (and - (rev B D) - (append D (cons-listOfInt A nil-listOfInt) C) - ) - (rev (cons-listOfInt A B) C) - ) - ) -) -(assert - (forall ( (A listOfInt) ) - (append nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (append B C D) - (append (cons-listOfInt A B) C (cons-listOfInt A D)) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C listOfInt) (D listOfInt) (E listOfInt) ) - (=> - (and - (not (= A (* 2 B))) - (id_list C D) - (append C D E) - (len E A) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/clam/goal21.smt2 b/bench_horn_adt/benchmarks-vmcai2015/clam/goal21.smt2 deleted file mode 100644 index d36a3787f..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/clam/goal21.smt2 +++ /dev/null @@ -1,118 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun rev (listOfInt listOfInt) Bool) -(declare-fun append (listOfInt listOfInt listOfInt) Bool) -(declare-fun id_list (listOfInt listOfInt) Bool) -(declare-fun len (listOfInt Int) Bool) -(declare-fun rotate (Int listOfInt listOfInt) Bool) -(declare-fun ff () Bool) - -(assert - (id_list nil-listOfInt nil-listOfInt) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) ) - (=> - (id_list B C) - (id_list (cons-listOfInt A B) (cons-listOfInt A C)) - ) - ) -) -(assert - (forall ( (A Int) (B listOfInt) ) - (=> - (= A 0) - (rotate A B B) - ) - ) -) -(assert - (forall ( (A Int) (B Int) ) - (=> - (and - (= A (+ 1 B)) - (>= B 0) - ) - (rotate A nil-listOfInt nil-listOfInt) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C listOfInt) (D listOfInt) (E Int) (F listOfInt) ) - (=> - (and - (= A (+ 1 E)) - (>= E 0) - (append C (cons-listOfInt B nil-listOfInt) F) - (rotate E F D) - ) - (rotate A (cons-listOfInt B C) D) - ) - ) -) -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (len nil-listOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C Int) (D Int) ) - (=> - (and - (= C (+ 1 D)) - (len B D) - ) - (len (cons-listOfInt A B) C) - ) - ) -) -(assert - (rev nil-listOfInt nil-listOfInt) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (and - (rev B D) - (append D (cons-listOfInt A nil-listOfInt) C) - ) - (rev (cons-listOfInt A B) C) - ) - ) -) -(assert - (forall ( (A listOfInt) ) - (append nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (append B C D) - (append (cons-listOfInt A B) C (cons-listOfInt A D)) - ) - ) -) -(assert - (forall ( (A Bool) (B listOfInt) (C Int) (D listOfInt) (E listOfInt) (F listOfInt) (G listOfInt) ) - (=> - (and - (len B C) - (append B D E) - (rotate C E F) - (append D B G) - (not (= F G)) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/clam/goal27.smt2 b/bench_horn_adt/benchmarks-vmcai2015/clam/goal27.smt2 deleted file mode 100644 index 5a04b9557..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/clam/goal27.smt2 +++ /dev/null @@ -1,65 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun append (listOfInt listOfInt listOfInt) Bool) -(declare-fun qreva (listOfInt listOfInt listOfInt) Bool) -(declare-fun rev (listOfInt listOfInt) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A listOfInt) ) - (append nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (append B C D) - (append (cons-listOfInt A B) C (cons-listOfInt A D)) - ) - ) -) -(assert - (forall ( (A listOfInt) ) - (qreva nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (qreva B (cons-listOfInt A C) D) - (qreva (cons-listOfInt A B) C D) - ) - ) -) -(assert - (rev nil-listOfInt nil-listOfInt) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (and - (rev B D) - (append D (cons-listOfInt A nil-listOfInt) C) - ) - (rev (cons-listOfInt A B) C) - ) - ) -) -(assert - (forall ( (A Bool) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (and - (rev B C) - (qreva B nil-listOfInt D) - (not (= C D)) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/clam/goal3.smt2 b/bench_horn_adt/benchmarks-vmcai2015/clam/goal3.smt2 deleted file mode 100644 index bfb4f55f3..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/clam/goal3.smt2 +++ /dev/null @@ -1,59 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun len (listOfInt Int) Bool) -(declare-fun append (listOfInt listOfInt listOfInt) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (len nil-listOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C Int) (D Int) ) - (=> - (and - (= C (+ 1 D)) - (len B D) - ) - (len (cons-listOfInt A B) C) - ) - ) -) -(assert - (forall ( (A listOfInt) ) - (append nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (append B C D) - (append (cons-listOfInt A B) C (cons-listOfInt A D)) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C Int) (D Int) (E listOfInt) (F listOfInt) (G listOfInt) ) - (=> - (and - (not (= A B)) - (= (+ C D) A) - (append E F G) - (len G B) - (len E C) - (len F D) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/clam/goal4.smt2 b/bench_horn_adt/benchmarks-vmcai2015/clam/goal4.smt2 deleted file mode 100644 index 35dd533d0..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/clam/goal4.smt2 +++ /dev/null @@ -1,56 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun len (listOfInt Int) Bool) -(declare-fun append (listOfInt listOfInt listOfInt) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (len nil-listOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C Int) (D Int) ) - (=> - (and - (= C (+ 1 D)) - (len B D) - ) - (len (cons-listOfInt A B) C) - ) - ) -) -(assert - (forall ( (A listOfInt) ) - (append nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (append B C D) - (append (cons-listOfInt A B) C (cons-listOfInt A D)) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C Int) (D listOfInt) (E listOfInt) (F listOfInt) ) - (=> - (and - (not (= (* 2 C) B)) - (append D D F) - (len F B) - (len D C) - ) - ff - ) - ) -) -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/clam/goal5.smt2 b/bench_horn_adt/benchmarks-vmcai2015/clam/goal5.smt2 deleted file mode 100644 index 33bc94401..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/clam/goal5.smt2 +++ /dev/null @@ -1,72 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun append (listOfInt listOfInt listOfInt) Bool) -(declare-fun len (listOfInt Int) Bool) -(declare-fun rev (listOfInt listOfInt) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A listOfInt) ) - (append nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (append B C D) - (append (cons-listOfInt A B) C (cons-listOfInt A D)) - ) - ) -) -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (len nil-listOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C Int) (D Int) ) - (=> - (and - (= C (+ 1 D)) - (len B D) - ) - (len (cons-listOfInt A B) C) - ) - ) -) -(assert - (rev nil-listOfInt nil-listOfInt) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (and - (rev B D) - (append D (cons-listOfInt A nil-listOfInt) C) - ) - (rev (cons-listOfInt A B) C) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C listOfInt) (D listOfInt) ) - (=> - (and - (not (= A B)) - (rev C D) - (len D B) - (len C A) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/clam/goal6.smt2 b/bench_horn_adt/benchmarks-vmcai2015/clam/goal6.smt2 deleted file mode 100644 index 88b383c93..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/clam/goal6.smt2 +++ /dev/null @@ -1,75 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun len (listOfInt Int) Bool) -(declare-fun rev (listOfInt listOfInt) Bool) -(declare-fun append (listOfInt listOfInt listOfInt) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (len nil-listOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C Int) (D Int) ) - (=> - (and - (= C (+ 1 D)) - (len B D) - ) - (len (cons-listOfInt A B) C) - ) - ) -) -(assert - (rev nil-listOfInt nil-listOfInt) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (and - (rev B D) - (append D (cons-listOfInt A nil-listOfInt) C) - ) - (rev (cons-listOfInt A B) C) - ) - ) -) -(assert - (forall ( (A listOfInt) ) - (append nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (append B C D) - (append (cons-listOfInt A B) C (cons-listOfInt A D)) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C Int) (D Int) (E listOfInt) (F listOfInt) (G listOfInt) (H listOfInt) ) - (=> - (and - (= (+ C D) A) - (not (= B A)) - (append E F G) - (rev G H) - (len H B) - (len E C) - (len F D) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/clam/goal7.smt2 b/bench_horn_adt/benchmarks-vmcai2015/clam/goal7.smt2 deleted file mode 100644 index a9f27d69b..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/clam/goal7.smt2 +++ /dev/null @@ -1,88 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun append (listOfInt listOfInt listOfInt) Bool) -(declare-fun rev (listOfInt listOfInt) Bool) -(declare-fun len (listOfInt Int) Bool) -(declare-fun qreva (listOfInt listOfInt listOfInt) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A listOfInt) ) - (append nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (append B C D) - (append (cons-listOfInt A B) C (cons-listOfInt A D)) - ) - ) -) -(assert - (rev nil-listOfInt nil-listOfInt) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (and - (rev B D) - (append D (cons-listOfInt A nil-listOfInt) C) - ) - (rev (cons-listOfInt A B) C) - ) - ) -) -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (len nil-listOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C Int) (D Int) ) - (=> - (and - (= C (+ 1 D)) - (len B D) - ) - (len (cons-listOfInt A B) C) - ) - ) -) -(assert - (forall ( (A listOfInt) ) - (qreva nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (qreva B (cons-listOfInt A C) D) - (qreva (cons-listOfInt A B) C D) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C Int) (D Int) (E listOfInt) (F listOfInt) (G listOfInt) ) - (=> - (and - (= (+ C D) A) - (not (= A B)) - (qreva E F G) - (len G B) - (len E C) - (len F D) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/clam/goal72.smt2 b/bench_horn_adt/benchmarks-vmcai2015/clam/goal72.smt2 deleted file mode 100644 index eed806aa1..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/clam/goal72.smt2 +++ /dev/null @@ -1,37 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun append (listOfInt listOfInt listOfInt) Bool) -(declare-fun ff () Bool) -(assert - (forall ( (A listOfInt) ) - (append nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (append B C D) - (append (cons-listOfInt A B) C (cons-listOfInt A D)) - ) - ) -) -(assert - (forall ( (A Bool) (B listOfInt) (C listOfInt) (D listOfInt) (E listOfInt) (F listOfInt) (G listOfInt) (H listOfInt) ) - (=> - (and - (append B C D) - (append D E F) - (append C E G) - (append B G H) - (not (= F H)) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/clam/goal8.smt2 b/bench_horn_adt/benchmarks-vmcai2015/clam/goal8.smt2 deleted file mode 100644 index cde050f59..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/clam/goal8.smt2 +++ /dev/null @@ -1,52 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun drop (Int listOfInt listOfInt) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) ) - (drop A nil-listOfInt nil-listOfInt) - ) -) -(assert - (forall ( (A Int) (B listOfInt) ) - (=> - (= A 0) - (drop A B B) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C listOfInt) (D listOfInt) (E Int) ) - (=> - (and - (= A (+ 1 E)) - (>= E 0) - (drop E C D) - ) - (drop A (cons-listOfInt B C) D) - ) - ) -) -(assert - (forall ( (A Bool) (B Int) (C Int) (D listOfInt) (E listOfInt) (F listOfInt) (G listOfInt) (H listOfInt) ) - (=> - (and - (>= B 0) - (>= C 0) - (drop C D E) - (drop B E F) - (drop B D G) - (drop C G H) - (not (= F H)) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/clam/goal9.smt2 b/bench_horn_adt/benchmarks-vmcai2015/clam/goal9.smt2 deleted file mode 100644 index 7ac66f253..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/clam/goal9.smt2 +++ /dev/null @@ -1,55 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun drop (Int listOfInt listOfInt) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) ) - (drop A nil-listOfInt nil-listOfInt) - ) -) -(assert - (forall ( (A Int) (B listOfInt) ) - (=> - (= A 0) - (drop A B B) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C listOfInt) (D listOfInt) (E Int) ) - (=> - (and - (= A (+ 1 E)) - (>= E 0) - (drop E C D) - ) - (drop A (cons-listOfInt B C) D) - ) - ) -) -(assert - (forall ( (A Bool) (B Int) (C Int) (D Int) (E listOfInt) (F listOfInt) (G listOfInt) (H listOfInt) (I listOfInt) (J listOfInt) (K listOfInt) ) - (=> - (and - (>= B 0) - (>= C 0) - (>= D 0) - (drop C E F) - (drop B F G) - (drop D G H) - (drop D E I) - (drop B I J) - (drop C J K) - (not (= H K)) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal1.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal1.smt2 deleted file mode 100644 index 39b766777..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal1.smt2 +++ /dev/null @@ -1,60 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) -(declare-datatypes ((queueOfInt 0) ) -(((queue-queueOfInt (front-queueOfInt listOfInt) (back-queueOfInt listOfInt)) ))) - -(declare-fun append (listOfInt listOfInt listOfInt) Bool) -(declare-fun len (listOfInt Int) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (len nil-listOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C Int) (D Int) ) - (=> - (and - (= C (+ 1 D)) - (len B D) - ) - (len (cons-listOfInt A B) C) - ) - ) -) -(assert - (forall ( (A listOfInt) ) - (append nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (append B C D) - (append (cons-listOfInt A B) C (cons-listOfInt A D)) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C listOfInt) (D listOfInt) (E listOfInt) (F Int) ) - (=> - (and - (not (= F (+ A B))) - (len D B) - (len C A) - (append C D E) - (len E F) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal10.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal10.smt2 deleted file mode 100644 index 1def4eac2..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal10.smt2 +++ /dev/null @@ -1,91 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) -(declare-datatypes ((queueOfInt 0) ) -(((queue-queueOfInt (front-queueOfInt listOfInt) (back-queueOfInt listOfInt)) ))) - -(declare-fun append (listOfInt listOfInt listOfInt) Bool) -(declare-fun butlast (listOfInt listOfInt) Bool) -(declare-fun len (listOfInt Int) Bool) -(declare-fun qreva (listOfInt listOfInt listOfInt) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (len nil-listOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C Int) (D Int) ) - (=> - (and - (= C (+ 1 D)) - (len B D) - ) - (len (cons-listOfInt A B) C) - ) - ) -) -(assert - (forall ( (A listOfInt) ) - (append nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (append B C D) - (append (cons-listOfInt A B) C (cons-listOfInt A D)) - ) - ) -) -(assert - (butlast nil-listOfInt nil-listOfInt) -) -(assert - (forall ( (A Int) ) - (butlast (cons-listOfInt A nil-listOfInt) nil-listOfInt) - ) -) -(assert - (forall ( (A Int) (B Int) (C listOfInt) (D listOfInt) ) - (=> - (butlast (cons-listOfInt B C) D) - (butlast (cons-listOfInt A (cons-listOfInt B C)) (cons-listOfInt A D)) - ) - ) -) -(assert - (forall ( (A listOfInt) ) - (qreva nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (qreva B (cons-listOfInt A C) D) - (qreva (cons-listOfInt A B) C D) - ) - ) -) -(assert - (forall ( (A listOfInt) (B listOfInt) (C listOfInt) (D listOfInt) (E listOfInt) (F listOfInt) (G listOfInt) ) - (=> - (and - (qreva A B D) - (qreva D C E) - (append A C F) - (qreva B F G) - (not (= E G)) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) \ No newline at end of file diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal11.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal11.smt2 deleted file mode 100644 index 3aeb78816..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal11.smt2 +++ /dev/null @@ -1,40 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) -(declare-datatypes ((queueOfInt 0) ) -(((queue-queueOfInt (front-queueOfInt listOfInt) (back-queueOfInt listOfInt)) ))) - -(declare-fun append (listOfInt listOfInt listOfInt) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A listOfInt) ) - (append nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (append B C D) - (append (cons-listOfInt A B) C (cons-listOfInt A D)) - ) - ) -) -(assert - (forall ( (A Bool) (B listOfInt) (C listOfInt) (D listOfInt) (E listOfInt) (F listOfInt) (G listOfInt) (H listOfInt) ) - (=> - (and - (append B C D) - (append E D F) - (append E B G) - (append G C H) - (not (= F H)) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) \ No newline at end of file diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal12.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal12.smt2 deleted file mode 100644 index e3ca9f5ca..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal12.smt2 +++ /dev/null @@ -1,124 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) -(declare-datatypes ((queueOfInt 0) ) -(((queue-queueOfInt (front-queueOfInt listOfInt) (back-queueOfInt listOfInt)) ))) - -(declare-fun len (listOfInt Int) Bool) -(declare-fun append (listOfInt listOfInt listOfInt) Bool) -(declare-fun queuetolst (queueOfInt listOfInt) Bool) -(declare-fun qrev (listOfInt listOfInt) Bool) -(declare-fun qreva (listOfInt listOfInt listOfInt) Bool) -(declare-fun amortizequeue (listOfInt listOfInt queueOfInt) Bool) - -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (len nil-listOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C Int) (D Int) ) - (=> - (and - (= C (+ 1 D)) - (len B D) - ) - (len (cons-listOfInt A B) C) - ) - ) -) -(assert - (forall ( (A listOfInt) ) - (append nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (append B C D) - (append (cons-listOfInt A B) C (cons-listOfInt A D)) - ) - ) -) -(assert - (forall ( (A listOfInt) ) - (qreva nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (qreva B (cons-listOfInt A C) D) - (qreva (cons-listOfInt A B) C D) - ) - ) -) -(assert - (forall ( (A listOfInt) (B listOfInt) ) - (=> - (qreva A nil-listOfInt B) - (qrev A B) - ) - ) -) -(assert - (forall ( (A listOfInt) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (and - (qrev B D) - (append A D C) - ) - (queuetolst (queue-queueOfInt A B) C) - ) - ) -) -(assert - (forall ( (A listOfInt) (B listOfInt) (C Bool) (D Int) (E Int) ) - (=> - (and - (<= D E) - (len A E) - (len B D) - ) - (amortizequeue A B (queue-queueOfInt A B) ) - ) - ) -) -(assert - (forall ( (A listOfInt) (B listOfInt) (C listOfInt) (D Bool) (E Int) (F Int) (G listOfInt) ) - (=> - (and - (> E F) - (len A F) - (len B E) - (append A G C) - (qrev B G) - ) - (amortizequeue A B (queue-queueOfInt C nil-listOfInt) ) - ) - ) -) - -(assert - (forall ( (A Bool) (B listOfInt) (C listOfInt) (D listOfInt) (E queueOfInt) (F listOfInt) ) - (=> - (and - (queuetolst (queue-queueOfInt B C) D) - (amortizequeue B C E) - (queuetolst E F) - (not (= D F)) - ) - ff - ) - ) -) - - -(assert (not ff)) -(check-sat) \ No newline at end of file diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal13.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal13.smt2 deleted file mode 100644 index 3552ff09f..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal13.smt2 +++ /dev/null @@ -1,156 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) -(declare-datatypes ((queueOfInt 0) ) -(((queue-queueOfInt (front-queueOfInt listOfInt) (back-queueOfInt listOfInt)) ))) - -(declare-fun len (listOfInt Int) Bool) -(declare-fun append (listOfInt listOfInt listOfInt) Bool) -(declare-fun queuetolst (queueOfInt listOfInt) Bool) -(declare-fun qrev (listOfInt listOfInt) Bool) -(declare-fun qreva (listOfInt listOfInt listOfInt) Bool) -(declare-fun amortizequeue (listOfInt listOfInt queueOfInt) Bool) -(declare-fun butlast (listOfInt listOfInt) Bool) -(declare-fun qpop (queueOfInt queueOfInt) Bool) - -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (len nil-listOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C Int) (D Int) ) - (=> - (and - (= C (+ 1 D)) - (len B D) - ) - (len (cons-listOfInt A B) C) - ) - ) -) -(assert - (forall ( (A listOfInt) ) - (append nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (append B C D) - (append (cons-listOfInt A B) C (cons-listOfInt A D)) - ) - ) -) -(assert - (forall ( (A listOfInt) ) - (qreva nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (qreva B (cons-listOfInt A C) D) - (qreva (cons-listOfInt A B) C D) - ) - ) -) -(assert - (forall ( (A listOfInt) (B listOfInt) ) - (=> - (qreva A nil-listOfInt B) - (qrev A B) - ) - ) -) -(assert - (forall ( (A listOfInt) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (and - (qrev B D) - (append A D C) - ) - (queuetolst (queue-queueOfInt A B) C) - ) - ) -) -(assert - (forall ( (A listOfInt) (B listOfInt) (C Bool) (D Int) (E Int) ) - (=> - (and - (<= D E) - (len A E) - (len B D) - ) - (amortizequeue A B (queue-queueOfInt A B) ) - ) - ) -) -(assert - (forall ( (A listOfInt) (B listOfInt) (C listOfInt) (D Bool) (E Int) (F Int) (G listOfInt) ) - (=> - (and - (> E F) - (len A F) - (len B E) - (append A G C) - (qrev B G) - ) - (amortizequeue A B (queue-queueOfInt C nil-listOfInt) ) - ) - ) -) -(assert - (butlast nil-listOfInt nil-listOfInt) -) -(assert - (forall ( (A Int) ) - (butlast (cons-listOfInt A nil-listOfInt) nil-listOfInt) - ) -) -(assert - (forall ( (A Int) (B Int) (C listOfInt) (D listOfInt) ) - (=> - (butlast (cons-listOfInt B C) D) - (butlast (cons-listOfInt A (cons-listOfInt B C)) (cons-listOfInt A D)) - ) - ) -) -(assert - (forall ( (A listOfInt) (B Int) (C listOfInt) ) - (qpop (queue-queueOfInt A (cons-listOfInt B C)) (queue-queueOfInt A C) ) - ) -) -(assert - (forall ( (A listOfInt) (B listOfInt) ) - (=> - (butlast A B) - (qpop (queue-queueOfInt A nil-listOfInt) (queue-queueOfInt B nil-listOfInt) ) - ) - ) -) - -(assert - (forall ( (A Bool) (B listOfInt) (C listOfInt) (D listOfInt) (E listOfInt) (F queueOfInt) (G listOfInt) ) - (=> - (and - (queuetolst (queue-queueOfInt B C) D) - (butlast D E) - (qpop (queue-queueOfInt B C) F) - (queuetolst F G) - (not (= E G)) - ) - ff - ) - ) -) - - -(assert (not ff)) -(check-sat) \ No newline at end of file diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal14.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal14.smt2 deleted file mode 100644 index 052c98f02..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal14.smt2 +++ /dev/null @@ -1,164 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) -(declare-datatypes ((queueOfInt 0) ) -(((queue-queueOfInt (front-queueOfInt listOfInt) (back-queueOfInt listOfInt)) ))) - -(declare-fun len (listOfInt Int) Bool) -(declare-fun append (listOfInt listOfInt listOfInt) Bool) -(declare-fun queuetolst (queueOfInt listOfInt) Bool) -(declare-fun qrev (listOfInt listOfInt) Bool) -(declare-fun qreva (listOfInt listOfInt listOfInt) Bool) -(declare-fun amortizequeue (listOfInt listOfInt queueOfInt) Bool) -(declare-fun butlast (listOfInt listOfInt) Bool) -(declare-fun qpop (queueOfInt queueOfInt) Bool) -(declare-fun enqueue (queueOfInt Int queueOfInt) Bool) - -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (len nil-listOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C Int) (D Int) ) - (=> - (and - (= C (+ 1 D)) - (len B D) - ) - (len (cons-listOfInt A B) C) - ) - ) -) -(assert - (forall ( (A listOfInt) ) - (append nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (append B C D) - (append (cons-listOfInt A B) C (cons-listOfInt A D)) - ) - ) -) -(assert - (forall ( (A listOfInt) ) - (qreva nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (qreva B (cons-listOfInt A C) D) - (qreva (cons-listOfInt A B) C D) - ) - ) -) -(assert - (forall ( (A listOfInt) (B listOfInt) ) - (=> - (qreva A nil-listOfInt B) - (qrev A B) - ) - ) -) -(assert - (forall ( (A listOfInt) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (and - (qrev B D) - (append A D C) - ) - (queuetolst (queue-queueOfInt A B) C) - ) - ) -) -(assert - (forall ( (A listOfInt) (B listOfInt) (C Bool) (D Int) (E Int) ) - (=> - (and - (<= D E) - (len A E) - (len B D) - ) - (amortizequeue A B (queue-queueOfInt A B) ) - ) - ) -) -(assert - (forall ( (A listOfInt) (B listOfInt) (C listOfInt) (D Bool) (E Int) (F Int) (G listOfInt) ) - (=> - (and - (> E F) - (len A F) - (len B E) - (append A G C) - (qrev B G) - ) - (amortizequeue A B (queue-queueOfInt C nil-listOfInt) ) - ) - ) -) -(assert - (butlast nil-listOfInt nil-listOfInt) -) -(assert - (forall ( (A Int) ) - (butlast (cons-listOfInt A nil-listOfInt) nil-listOfInt) - ) -) -(assert - (forall ( (A Int) (B Int) (C listOfInt) (D listOfInt) ) - (=> - (butlast (cons-listOfInt B C) D) - (butlast (cons-listOfInt A (cons-listOfInt B C)) (cons-listOfInt A D)) - ) - ) -) -(assert - (forall ( (A listOfInt) (B Int) (C listOfInt) ) - (qpop (queue-queueOfInt A (cons-listOfInt B C)) (queue-queueOfInt A C) ) - ) -) -(assert - (forall ( (A listOfInt) (B listOfInt) ) - (=> - (butlast A B) - (qpop (queue-queueOfInt A nil-listOfInt) (queue-queueOfInt B nil-listOfInt) ) - ) - ) -) -(assert - (forall ( (A listOfInt) (B listOfInt) (C Int) (D queueOfInt) ) - (=> - (amortizequeue A (cons-listOfInt C B) D) - (enqueue (queue-queueOfInt A B) C D) - ) - ) -) -(assert - (forall ( (A Bool) (B listOfInt) (C listOfInt) (D listOfInt) (E Int) (F listOfInt) (G queueOfInt) (H listOfInt) ) - (=> - (and - (queuetolst (queue-queueOfInt B C) D) - (append D (cons-listOfInt E nil-listOfInt) F) - (enqueue (queue-queueOfInt B C) E G) - (queuetolst G H) - (not (= F H)) - ) - ff - ) - ) -) - - -(assert (not ff)) -(check-sat) \ No newline at end of file diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal15.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal15.smt2 deleted file mode 100644 index 69e516549..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal15.smt2 +++ /dev/null @@ -1,122 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) -(declare-datatypes ((queueOfInt 0) ) -(((queue-queueOfInt (front-queueOfInt listOfInt) (back-queueOfInt listOfInt)) ))) - -(declare-fun len (listOfInt Int) Bool) -(declare-fun append (listOfInt listOfInt listOfInt) Bool) -(declare-fun qrev (listOfInt listOfInt) Bool) -(declare-fun qreva (listOfInt listOfInt listOfInt) Bool) -(declare-fun amortizequeue (listOfInt listOfInt queueOfInt) Bool) -(declare-fun isamortized (queueOfInt Bool) Bool) - -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (len nil-listOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C Int) (D Int) ) - (=> - (and - (= C (+ 1 D)) - (len B D) - ) - (len (cons-listOfInt A B) C) - ) - ) -) -(assert - (forall ( (A listOfInt) ) - (append nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (append B C D) - (append (cons-listOfInt A B) C (cons-listOfInt A D)) - ) - ) -) -(assert - (forall ( (A listOfInt) ) - (qreva nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (qreva B (cons-listOfInt A C) D) - (qreva (cons-listOfInt A B) C D) - ) - ) -) -(assert - (forall ( (A listOfInt) (B listOfInt) ) - (=> - (qreva A nil-listOfInt B) - (qrev A B) - ) - ) -) -(assert - (forall ( (A listOfInt) (B listOfInt) (C Bool) (D Int) (E Int) ) - (=> - (and - (<= D E) - (len A E) - (len B D) - ) - (amortizequeue A B (queue-queueOfInt A B) ) - ) - ) -) -(assert - (forall ( (A listOfInt) (B listOfInt) (C listOfInt) (D Bool) (E Int) (F Int) (G listOfInt) ) - (=> - (and - (> E F) - (len A F) - (len B E) - (append A G C) - (qrev B G) - ) - (amortizequeue A B (queue-queueOfInt C nil-listOfInt) ) - ) - ) -) -(assert - (forall ( (A listOfInt) (B listOfInt) (C Bool) (D Int) (E Int) ) - (=> - (and - (len B D) - (len A E) - ) - (isamortized (queue-queueOfInt A B) (<= D E)) - ) - ) -) -(assert - (forall ( (A Bool) (B listOfInt) (C listOfInt) (D queueOfInt) ) - (=> - (and - (not (= A true)) - (amortizequeue B C D) - (isamortized D A) - ) - ff - ) - ) -) - - -(assert (not ff)) -(check-sat) \ No newline at end of file diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal2.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal2.smt2 deleted file mode 100644 index 512e3c489..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal2.smt2 +++ /dev/null @@ -1,74 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) -(declare-datatypes ((queueOfInt 0) ) -(((queue-queueOfInt (front-queueOfInt listOfInt) (back-queueOfInt listOfInt)) ))) - -(declare-fun append (listOfInt listOfInt listOfInt) Bool) -(declare-fun len (listOfInt Int) Bool) -(declare-fun qreva (listOfInt listOfInt listOfInt) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (len nil-listOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C Int) (D Int) ) - (=> - (and - (= C (+ 1 D)) - (len B D) - ) - (len (cons-listOfInt A B) C) - ) - ) -) -(assert - (forall ( (A listOfInt) ) - (qreva nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (qreva B (cons-listOfInt A C) D) - (qreva (cons-listOfInt A B) C D) - ) - ) -) -(assert - (forall ( (A listOfInt) ) - (append nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (append B C D) - (append (cons-listOfInt A B) C (cons-listOfInt A D)) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C Int) (D listOfInt) (E listOfInt) (F listOfInt) (H Int) ) - (=> - (and - (qreva D E F) - (len E B) - (len D A) - (len F C) - (= H (+ A B)) - (not (= C H)) - ) - ff - ) - ) -) -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal3.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal3.smt2 deleted file mode 100644 index e9663da32..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal3.smt2 +++ /dev/null @@ -1,81 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) -(declare-datatypes ((queueOfInt 0) ) -(((queue-queueOfInt (front-queueOfInt listOfInt) (back-queueOfInt listOfInt)) ))) - -(declare-fun append (listOfInt listOfInt listOfInt) Bool) -(declare-fun qrev (listOfInt listOfInt) Bool) -(declare-fun len (listOfInt Int) Bool) -(declare-fun qreva (listOfInt listOfInt listOfInt) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (len nil-listOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C Int) (D Int) ) - (=> - (and - (= C (+ 1 D)) - (len B D) - ) - (len (cons-listOfInt A B) C) - ) - ) -) -(assert - (forall ( (A listOfInt) ) - (qreva nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (qreva B (cons-listOfInt A C) D) - (qreva (cons-listOfInt A B) C D) - ) - ) -) -(assert - (forall ( (A listOfInt) (B listOfInt) ) - (=> - (qreva A nil-listOfInt B) - (qrev A B) - ) - ) -) -(assert - (forall ( (A listOfInt) ) - (append nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (append B C D) - (append (cons-listOfInt A B) C (cons-listOfInt A D)) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C listOfInt) (D listOfInt) ) - (=> - (and - (not (= A B)) - (qrev C D) - (len D B) - (len C A) - ) - ff - ) - ) -) -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal4.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal4.smt2 deleted file mode 100644 index 2f3fca22f..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal4.smt2 +++ /dev/null @@ -1,58 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) -(declare-datatypes ((queueOfInt 0) ) -(((queue-queueOfInt (front-queueOfInt listOfInt) (back-queueOfInt listOfInt)) ))) - -(declare-fun qlen (queueOfInt Int) Bool) -(declare-fun len (listOfInt Int) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A listOfInt) (B listOfInt) (C Int) (D Int) (E Int) ) - (=> - (and - (len A D) - (len B E) - ) - (qlen (queue-queueOfInt A B) (+ D E)) - ) - ) -) -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (len nil-listOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C Int) (D Int) ) - (=> - (and - (= C (+ 1 D)) - (len B D) - ) - (len (cons-listOfInt A B) C) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C Int) (D Int) (E listOfInt) (F listOfInt) ) - (=> - (and - (not (= A B)) - (= (+ C D) B) - (len E C) - (len F D) - (qlen (queue-queueOfInt E F) A) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal5.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal5.smt2 deleted file mode 100644 index 0293d1745..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal5.smt2 +++ /dev/null @@ -1,62 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) -(declare-datatypes ((queueOfInt 0) ) -(((queue-queueOfInt (front-queueOfInt listOfInt) (back-queueOfInt listOfInt)) ))) - -(declare-fun len (listOfInt Int) Bool) -(declare-fun butlast (listOfInt listOfInt) Bool) -(declare-fun ff () Bool) - -(assert - (butlast nil-listOfInt nil-listOfInt) -) -(assert - (forall ( (A Int) ) - (butlast (cons-listOfInt A nil-listOfInt) nil-listOfInt) - ) -) -(assert - (forall ( (A Int) (B Int) (C listOfInt) (D listOfInt) ) - (=> - (butlast (cons-listOfInt B C) D) - (butlast (cons-listOfInt A (cons-listOfInt B C)) (cons-listOfInt A D)) - ) - ) -) -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (len nil-listOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C Int) (D Int) ) - (=> - (and - (= C (+ 1 D)) - (len B D) - ) - (len (cons-listOfInt A B) C) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C Int) (D listOfInt) (E listOfInt) ) - (=> - (and - (not (= (- A B) 1)) - (butlast (cons-listOfInt C D) E) - (len E B) - (len (cons-listOfInt C D) A) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal6.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal6.smt2 deleted file mode 100644 index 56058c62d..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal6.smt2 +++ /dev/null @@ -1,133 +0,0 @@ -; Automatically generated by map2smt - -(set-logic HORN) - -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) -(declare-datatypes ((queueOfInt 0) ) -(((queue-queueOfInt (front-queueOfInt listOfInt) (back-queueOfInt listOfInt)) ))) - -(declare-fun qreva (listOfInt listOfInt listOfInt) Bool) -(declare-fun qrev (listOfInt listOfInt) Bool) -(declare-fun append (listOfInt listOfInt listOfInt) Bool) -(declare-fun qlen (queueOfInt Int) Bool) -(declare-fun len (listOfInt Int) Bool) -(declare-fun amortizequeue (listOfInt listOfInt queueOfInt) Bool) -(declare-fun enqueue (queueOfInt Int queueOfInt) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A listOfInt) ) - (qreva nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (qreva B (cons-listOfInt A C) D) - (qreva (cons-listOfInt A B) C D) - ) - ) -) -(assert - (forall ( (A listOfInt) (B listOfInt) (C Int) (D Int) (E Int) ) - (=> - (and - (len A D) - (len B E) - ) - (qlen (queue-queueOfInt A B) (+ D E) ) - ) - ) -) -(assert - (forall ( (A listOfInt) (B listOfInt) ) - (=> - (qreva A nil-listOfInt B) - (qrev A B) - ) - ) -) -(assert - (forall ( (A listOfInt) (B listOfInt) (C Bool) (D Int) (E Int) ) - (=> - (and - (<= D E) - (len A E) - (len B D) - ) - (amortizequeue A B (queue-queueOfInt A B) ) - ) - ) -) -(assert - (forall ( (A listOfInt) (B listOfInt) (C listOfInt) (D Bool) (E Int) (F Int) (G listOfInt) ) - (=> - (and - (> E F) - (len A F) - (len B E) - (append A G C) - (qrev B G) - ) - (amortizequeue A B (queue-queueOfInt C nil-listOfInt) ) - ) - ) -) -(assert - (forall ( (A listOfInt) (B listOfInt) (C Int) (D queueOfInt) ) - (=> - (amortizequeue A (cons-listOfInt C B) D) - (enqueue (queue-queueOfInt A B) C D) - ) - ) -) -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (len nil-listOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C Int) (D Int) ) - (=> - (and - (= C (+ 1 D)) - (len B D) - ) - (len (cons-listOfInt A B) C) - ) - ) -) -(assert - (forall ( (A listOfInt) ) - (append nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (append B C D) - (append (cons-listOfInt A B) C (cons-listOfInt A D)) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C queueOfInt) (D Int) (E queueOfInt) (F Int) ) - (=> - (and - (not (= A F)) - (enqueue C D E) - (qlen E A) - (qlen C B) - (= F (+ 1 B)) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal7.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal7.smt2 deleted file mode 100644 index e53d5846f..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal7.smt2 +++ /dev/null @@ -1,204 +0,0 @@ -; Automatically generated by map2smt - -(set-logic HORN) - -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) -(declare-datatypes ((queueOfInt 0) ) -(((queue-queueOfInt (front-queueOfInt listOfInt) (back-queueOfInt listOfInt)) ))) - -(declare-fun qreva (listOfInt listOfInt listOfInt) Bool) -(declare-fun qrev (listOfInt listOfInt) Bool) -(declare-fun append (listOfInt listOfInt listOfInt) Bool) -(declare-fun qlen (queueOfInt Int) Bool) -(declare-fun len (listOfInt Int) Bool) -(declare-fun isamortized (queueOfInt Bool) Bool) -(declare-fun isempty (queueOfInt Bool) Bool) -(declare-fun amortizequeue (listOfInt listOfInt queueOfInt) Bool) -(declare-fun enqueue (queueOfInt Int queueOfInt) Bool) -(declare-fun butlast (listOfInt listOfInt) Bool) -(declare-fun qpop (queueOfInt queueOfInt) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A listOfInt) ) - (qreva nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (qreva B (cons-listOfInt A C) D) - (qreva (cons-listOfInt A B) C D) - ) - ) -) -(assert - (forall ( (A listOfInt) (B listOfInt) (C Int) (D Int) (E Int) ) - (=> - (and - (len A D) - (len B E) - ) - (qlen (queue-queueOfInt A B) (+ D E) ) - ) - ) -) -(assert - (forall ( (A listOfInt) (B listOfInt) ) - (=> - (qreva A nil-listOfInt B) - (qrev A B) - ) - ) -) -(assert - (forall ( (A listOfInt) (B listOfInt) (C Bool) (D Int) (E Int) ) - (=> - (and - (<= D E) - (len A E) - (len B D) - ) - (amortizequeue A B (queue-queueOfInt A B) ) - ) - ) -) -(assert - (forall ( (A listOfInt) (B listOfInt) (C listOfInt) (D Bool) (E Int) (F Int) (G listOfInt) ) - (=> - (and - (> E F) - (len A F) - (len B E) - (append A G C) - (qrev B G) - ) - (amortizequeue A B (queue-queueOfInt C nil-listOfInt) ) - ) - ) -) -(assert - (forall ( (A listOfInt) (B listOfInt) (C Int) (D queueOfInt) ) - (=> - (amortizequeue A (cons-listOfInt C B) D) - (enqueue (queue-queueOfInt A B) C D) - ) - ) -) -(assert - (forall ( (A listOfInt) (B listOfInt) (C Bool) (D Int) (E Int) ) - (=> - (and - (len B D) - (len A E) - ) - (isamortized (queue-queueOfInt A B) (<= D E)) - ) - ) -) -(assert - (forall ( (A Bool) ) - (=> - (= A true) - (isempty (queue-queueOfInt nil-listOfInt nil-listOfInt) A) - ) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D Bool) ) - (=> - (= D false) - (isempty (queue-queueOfInt (cons-listOfInt A B) C) D) - ) - ) -) -(assert - (forall ( (A listOfInt) (B Int) (C listOfInt) (D Bool) ) - (=> - (= D false) - (isempty (queue-queueOfInt A (cons-listOfInt B C)) D) - ) - ) -) -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (len nil-listOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C Int) (D Int) ) - (=> - (and - (= C (+ 1 D)) - (len B D) - ) - (len (cons-listOfInt A B) C) - ) - ) -) -(assert - (forall ( (A listOfInt) ) - (append nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (append B C D) - (append (cons-listOfInt A B) C (cons-listOfInt A D)) - ) - ) -) -(assert - (butlast nil-listOfInt nil-listOfInt) -) -(assert - (forall ( (A Int) ) - (butlast (cons-listOfInt A nil-listOfInt) nil-listOfInt) - ) -) -(assert - (forall ( (A Int) (B Int) (C listOfInt) (D listOfInt) ) - (=> - (butlast (cons-listOfInt B C) D) - (butlast (cons-listOfInt A (cons-listOfInt B C)) (cons-listOfInt A D)) - ) - ) -) -(assert - (forall ( (A listOfInt) (B Int) (C listOfInt) ) - (qpop (queue-queueOfInt A (cons-listOfInt B C)) (queue-queueOfInt A C) ) - ) -) -(assert - (forall ( (A listOfInt) (B listOfInt) ) - (=> - (butlast A B) - (qpop (queue-queueOfInt A nil-listOfInt) (queue-queueOfInt B nil-listOfInt) ) - ) - ) -) -(assert - (forall ( (A Bool) (B Bool) (C Int) (D Int) (E queueOfInt) (F queueOfInt) ) - (=> - (and - (= A true) - (= B false) - (not (= (- C D) 1)) - (qpop E F) - (qlen F D) - (qlen E C) - (isamortized E A) - (isempty E B) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal8.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal8.smt2 deleted file mode 100644 index fe83c7b52..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal8.smt2 +++ /dev/null @@ -1,37 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) -(declare-datatypes ((queueOfInt 0) ) -(((queue-queueOfInt (front-queueOfInt listOfInt) (back-queueOfInt listOfInt)) ))) - -(declare-fun append (listOfInt listOfInt listOfInt) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A listOfInt) ) - (append nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (append B C D) - (append (cons-listOfInt A B) C (cons-listOfInt A D)) - ) - ) -) -(assert - (forall ( (A listOfInt) (B listOfInt) ) - (=> - (and - (append A nil-listOfInt B) - (not (= A B)) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal9.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal9.smt2 deleted file mode 100644 index 12c3ae175..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/amortize-queue/amortize-queue-goal9.smt2 +++ /dev/null @@ -1,77 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) -(declare-datatypes ((queueOfInt 0) ) -(((queue-queueOfInt (front-queueOfInt listOfInt) (back-queueOfInt listOfInt)) ))) - -(declare-fun append (listOfInt listOfInt listOfInt) Bool) -(declare-fun butlast (listOfInt listOfInt) Bool) -(declare-fun len (listOfInt Int) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (len nil-listOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C Int) (D Int) ) - (=> - (and - (= C (+ 1 D)) - (len B D) - ) - (len (cons-listOfInt A B) C) - ) - ) -) -(assert - (forall ( (A listOfInt) ) - (append nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (append B C D) - (append (cons-listOfInt A B) C (cons-listOfInt A D)) - ) - ) -) -(assert - (butlast nil-listOfInt nil-listOfInt) -) -(assert - (forall ( (A Int) ) - (butlast (cons-listOfInt A nil-listOfInt) nil-listOfInt) - ) -) -(assert - (forall ( (A Int) (B Int) (C listOfInt) (D listOfInt) ) - (=> - (butlast (cons-listOfInt B C) D) - (butlast (cons-listOfInt A (cons-listOfInt B C)) (cons-listOfInt A D)) - ) - ) -) -(assert - (forall ( (A Bool) (B listOfInt) (C Int) (D listOfInt) (E listOfInt) (F listOfInt) (G listOfInt) (H listOfInt) ) - (=> - (and - (append B (cons-listOfInt C D) E) - (butlast E F) - (butlast (cons-listOfInt C D) G) - (append B G H) - (not (= F H)) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal1.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal1.smt2 deleted file mode 100644 index b191a69d5..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal1.smt2 +++ /dev/null @@ -1,75 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((treeOfInt 0) ) -(((node-treeOfInt (data-treeOfInt Int) (left-treeOfInt treeOfInt) (right-treeOfInt treeOfInt)) (leaf-treeOfInt)))) -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun tinsert (treeOfInt Int treeOfInt) Bool) -(declare-fun tsize (treeOfInt Int) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (tsize leaf-treeOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Int) (F Int) (G Int) ) - (=> - (and - (= D (+ 1 E)) - (= (+ F G) E) - (tsize B F) - (tsize C G) - ) - (tsize (node-treeOfInt A B C) D) - ) - ) -) -(assert - (forall ( (A Int) ) - (tinsert leaf-treeOfInt A (node-treeOfInt A leaf-treeOfInt leaf-treeOfInt) ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E treeOfInt) ) - (=> - (and - (<= A (- D 1)) - (tinsert C D E) - ) - (tinsert (node-treeOfInt A B C) D (node-treeOfInt A B E) ) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E treeOfInt) ) - (=> - (and - (>= A D) - (tinsert B D E) - ) - (tinsert (node-treeOfInt A B C) D (node-treeOfInt A E C) ) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C treeOfInt) (D Int) (E treeOfInt) ) - (=> - (and - (not (= (- A B) 1)) - (tinsert C D E) - (tsize E A) - (tsize C B) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal10.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal10.smt2 deleted file mode 100644 index f468d74d1..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal10.smt2 +++ /dev/null @@ -1,123 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((treeOfInt 0) ) -(((node-treeOfInt (data-treeOfInt Int) (left-treeOfInt treeOfInt) (right-treeOfInt treeOfInt)) (leaf-treeOfInt)))) -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun tinsert (treeOfInt Int treeOfInt) Bool) -(declare-fun tmember (treeOfInt Int Bool) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) ) - (tinsert leaf-treeOfInt A (node-treeOfInt A leaf-treeOfInt leaf-treeOfInt) ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E treeOfInt) ) - (=> - (and - (<= A (- D 1)) - (tinsert C D E) - ) - (tinsert (node-treeOfInt A B C) D (node-treeOfInt A B E) ) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E treeOfInt) ) - (=> - (and - (>= A D) - (tinsert B D E) - ) - (tinsert (node-treeOfInt A B C) D (node-treeOfInt A E C) ) - ) - ) -) -(assert - (forall ( (A Int) (B Bool) ) - (=> - (= B false) - (tmember leaf-treeOfInt A B) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Bool) ) - (=> - (= D true) - (tmember (node-treeOfInt A B C) A D) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Bool) (F Bool) ) - (=> - (and - (>= (- D A) 1) - (tmember C D E) - (< A D) - ) - (tmember (node-treeOfInt A B C) D E) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Bool) (F Bool) ) - (=> - (and - (<= (- D A) (- 1)) - (tmember B D E) - (>= A D) - ) - (tmember (node-treeOfInt A B C) D E) - ) - ) -) -(assert - (forall ( (A Bool) (B Bool) (C Int) (D Int) (E treeOfInt) (F treeOfInt) ) - (=> - (and - (= A true) - (= B false) - (not (= C D)) - (tmember E D B) - (tinsert E C F) - (tmember F D A) - ) - ff - ) - ) -) -(assert - (forall ( (A Bool) (B Bool) (C treeOfInt) (D Int) (E Int) (F treeOfInt) ) - (=> - (and - (not (= A true)) - (= B true) - (tmember C D B) - (tinsert C E F) - (tmember F D A) - ) - ff - ) - ) -) -(assert - (forall ( (A Bool) (B treeOfInt) (C Int) (D Bool) (E treeOfInt) ) - (=> - (and - (not (= A true)) - (tmember B C D) - (tinsert B C E) - (tmember E C A) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal12.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal12.smt2 deleted file mode 100644 index 3ac644ee6..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal12.smt2 +++ /dev/null @@ -1,131 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((treeOfInt 0) ) -(((node-treeOfInt (data-treeOfInt Int) (left-treeOfInt treeOfInt) (right-treeOfInt treeOfInt)) (leaf-treeOfInt)))) -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun tmember (treeOfInt Int Bool) Bool) -(declare-fun tcontains (treeOfInt Int Bool) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) (B Bool) ) - (=> - (= B false) - (tcontains leaf-treeOfInt A B) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Bool) ) - (=> - (= D true) - (tcontains (node-treeOfInt A B C) A D) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Bool) ) - (=> - (and - (= E true) - (tcontains B D E) - ) - (tcontains (node-treeOfInt A B C) D E) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Bool) ) - (=> - (and - (= E true) - (tcontains C D E) - ) - (tcontains (node-treeOfInt A B C) D E) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Bool) ) - (=> - (and - (= E false) - (>= (- D A) 1) - (tcontains B D E) - (tcontains C D E) - ) - (tcontains (node-treeOfInt A B C) D E) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Bool) ) - (=> - (and - (= E false) - (<= (- D A) (- 1)) - (tcontains B D E) - (tcontains C D E) - ) - (tcontains (node-treeOfInt A B C) D E) - ) - ) -) -(assert - (forall ( (A Int) (B Bool) ) - (=> - (= B false) - (tmember leaf-treeOfInt A B) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Bool) ) - (=> - (= D true) - (tmember (node-treeOfInt A B C) A D) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Bool) (F Bool) ) - (=> - (and - (>= (- D A) 1) - (tmember C D E) - (< A D) - ) - (tmember (node-treeOfInt A B C) D E) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Bool) (F Bool) ) - (=> - (and - (<= (- D A) (- 1)) - (tmember B D E) - (>= A D) - ) - (tmember (node-treeOfInt A B C) D E) - ) - ) -) -(assert - (forall ( (A Bool) (B Bool) (C treeOfInt) (D Int) ) - (=> - (and - (= A true) - (not (= B true)) - (tcontains C D B) - (tmember C D A) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal13.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal13.smt2 deleted file mode 100644 index 24a47d10b..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal13.smt2 +++ /dev/null @@ -1,128 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((treeOfInt 0) ) -(((node-treeOfInt (data-treeOfInt Int) (left-treeOfInt treeOfInt) (right-treeOfInt treeOfInt)) (leaf-treeOfInt)))) -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun tinsert (treeOfInt Int treeOfInt) Bool) -(declare-fun tsize (treeOfInt Int) Bool) -(declare-fun tinsertall (treeOfInt listOfInt treeOfInt) Bool) -(declare-fun len (listOfInt Int) Bool) -(declare-fun append (listOfInt listOfInt listOfInt) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (len nil-listOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C Int) (D Int) ) - (=> - (and - (= C (+ 1 D)) - (len B D) - ) - (len (cons-listOfInt A B) C) - ) - ) -) -(assert - (forall ( (A listOfInt) ) - (append nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (append B C D) - (append (cons-listOfInt A B) C (cons-listOfInt A D)) - ) - ) -) -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (tsize leaf-treeOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Int) (F Int) (G Int) ) - (=> - (and - (= D (+ 1 E)) - (= (+ F G) E) - (tsize B F) - (tsize C G) - ) - (tsize (node-treeOfInt A B C) D) - ) - ) -) -(assert - (forall ( (A Int) ) - (tinsert leaf-treeOfInt A (node-treeOfInt A leaf-treeOfInt leaf-treeOfInt) ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E treeOfInt) ) - (=> - (and - (<= A (- D 1)) - (tinsert C D E) - ) - (tinsert (node-treeOfInt A B C) D (node-treeOfInt A B E) ) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E treeOfInt) ) - (=> - (and - (>= A D) - (tinsert B D E) - ) - (tinsert (node-treeOfInt A B C) D (node-treeOfInt A E C) ) - ) - ) -) -(assert - (forall ( (A treeOfInt) ) - (tinsertall A nil-listOfInt A) - ) -) -(assert - (forall ( (A treeOfInt) (B Int) (C listOfInt) (D treeOfInt) (E treeOfInt) ) - (=> - (and - (tinsertall A C E) - (tinsert E B D) - ) - (tinsertall A (cons-listOfInt B C) D) - ) - ) -) -(assert - (forall ( (A Bool) (B treeOfInt) (C Int) (D treeOfInt) (E listOfInt) (F treeOfInt) (G listOfInt) (H treeOfInt) ) - (=> - (and - (= A false) - (tinsert B C D) - (tinsertall D E F) - (append E (cons-listOfInt C nil-listOfInt) G) - (tinsertall B G H) - (not (= F H)) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal15.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal15.smt2 deleted file mode 100644 index e395480b3..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal15.smt2 +++ /dev/null @@ -1,188 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((treeOfInt 0) ) -(((node-treeOfInt (data-treeOfInt Int) (left-treeOfInt treeOfInt) (right-treeOfInt treeOfInt)) (leaf-treeOfInt)))) -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun tinsert (treeOfInt Int treeOfInt) Bool) -(declare-fun tinsertall (treeOfInt listOfInt treeOfInt) Bool) -(declare-fun tcontains (treeOfInt Int Bool) Bool) -(declare-fun mem (Int listOfInt Bool) Bool) - -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) (B Bool) ) - (=> - (= B false) - (mem A nil-listOfInt B) - ) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C Bool) ) - (=> - (= C true) - (mem A (cons-listOfInt A B) C) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C listOfInt) (D Bool) ) - (=> - (and - (= D true) - (mem A C D) - ) - (mem A (cons-listOfInt B C) D) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C listOfInt) (D Bool) ) - (=> - (and - (= D false) - (>= (- B A) 1) - (mem A C D) - ) - (mem A (cons-listOfInt B C) D) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C listOfInt) (D Bool) ) - (=> - (and - (= D false) - (<= (- B A) (- 1)) - (mem A C D) - ) - (mem A (cons-listOfInt B C) D) - ) - ) -) -(assert - (forall ( (A Int) ) - (tinsert leaf-treeOfInt A (node-treeOfInt A leaf-treeOfInt leaf-treeOfInt) ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E treeOfInt) ) - (=> - (and - (<= A (- D 1)) - (tinsert C D E) - ) - (tinsert (node-treeOfInt A B C) D (node-treeOfInt A B E) ) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E treeOfInt) ) - (=> - (and - (>= A D) - (tinsert B D E) - ) - (tinsert (node-treeOfInt A B C) D (node-treeOfInt A E C) ) - ) - ) -) -(assert - (forall ( (A treeOfInt) ) - (tinsertall A nil-listOfInt A) - ) -) -(assert - (forall ( (A treeOfInt) (B Int) (C listOfInt) (D treeOfInt) (E treeOfInt) ) - (=> - (and - (tinsertall A C E) - (tinsert E B D) - ) - (tinsertall A (cons-listOfInt B C) D) - ) - ) -) -(assert - (forall ( (A Int) (B Bool) ) - (=> - (= B false) - (tcontains leaf-treeOfInt A B) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Bool) ) - (=> - (= D true) - (tcontains (node-treeOfInt A B C) A D) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Bool) ) - (=> - (and - (= E true) - (tcontains B D E) - ) - (tcontains (node-treeOfInt A B C) D E) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Bool) ) - (=> - (and - (= E true) - (tcontains C D E) - ) - (tcontains (node-treeOfInt A B C) D E) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Bool) ) - (=> - (and - (= E false) - (>= (- D A) 1) - (tcontains B D E) - (tcontains C D E) - ) - (tcontains (node-treeOfInt A B C) D E) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Bool) ) - (=> - (and - (= E false) - (<= (- D A) (- 1)) - (tcontains B D E) - (tcontains C D E) - ) - (tcontains (node-treeOfInt A B C) D E) - ) - ) -) -(assert - (forall ( (A Bool) (B Bool) (C Int) (D listOfInt) (E treeOfInt) ) - (=> - (and - (not (= A B)) - (mem C D A) - (tinsertall leaf-treeOfInt D E) - (tcontains E C B) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal16.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal16.smt2 deleted file mode 100644 index 17e891196..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal16.smt2 +++ /dev/null @@ -1,141 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((treeOfInt 0) ) -(((node-treeOfInt (data-treeOfInt Int) (left-treeOfInt treeOfInt) (right-treeOfInt treeOfInt)) (leaf-treeOfInt)))) -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun tinsert (treeOfInt Int treeOfInt) Bool) -(declare-fun tinsertall (treeOfInt listOfInt treeOfInt) Bool) -(declare-fun mem (Int listOfInt Bool) Bool) -(declare-fun append (listOfInt listOfInt listOfInt) Bool) - -(declare-fun ff () Bool) - -(assert - (forall ( (A listOfInt) ) - (append nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (append B C D) - (append (cons-listOfInt A B) C (cons-listOfInt A D)) - ) - ) -) -(assert - (forall ( (A Int) (B Bool) ) - (=> - (= B false) - (mem A nil-listOfInt B) - ) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C Bool) ) - (=> - (= C true) - (mem A (cons-listOfInt A B) C) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C listOfInt) (D Bool) ) - (=> - (and - (= D true) - (mem A C D) - ) - (mem A (cons-listOfInt B C) D) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C listOfInt) (D Bool) ) - (=> - (and - (= D false) - (>= (- B A) 1) - (mem A C D) - ) - (mem A (cons-listOfInt B C) D) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C listOfInt) (D Bool) ) - (=> - (and - (= D false) - (<= (- B A) (- 1)) - (mem A C D) - ) - (mem A (cons-listOfInt B C) D) - ) - ) -) -(assert - (forall ( (A Bool) (B Bool) (C Bool) (D listOfInt) (E listOfInt) (F listOfInt) (G Int) ) - (=> - (and - (= A true) - (not (= B true)) - (= C false) - (append D E F) - (mem G F A) - (mem G D B) - (mem G E C) - ) - ff - ) - ) -) -(assert - (forall ( (A Bool) (B Bool) (C Bool) (D listOfInt) (E listOfInt) (F listOfInt) (G Int) ) - (=> - (and - (= A true) - (= B false) - (not (= C true)) - (append D E F) - (mem G F A) - (mem G D B) - (mem G E C) - ) - ff - ) - ) -) -(assert - (forall ( (A Bool) (B Bool) (C listOfInt) (D listOfInt) (E listOfInt) (F Int) ) - (=> - (and - (not (= A true)) - (= B true) - (append C D E) - (mem F E A) - (mem F C B) - ) - ff - ) - ) -) -(assert - (forall ( (A Bool) (B Bool) (C listOfInt) (D listOfInt) (E listOfInt) (F Int) ) - (=> - (and - (not (= A true)) - (= B true) - (append C D E) - (mem F E A) - (mem F D B) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal18.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal18.smt2 deleted file mode 100644 index 747a9a501..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal18.smt2 +++ /dev/null @@ -1,176 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((treeOfInt 0) ) -(((node-treeOfInt (data-treeOfInt Int) (left-treeOfInt treeOfInt) (right-treeOfInt treeOfInt)) (leaf-treeOfInt)))) -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun tinsert (treeOfInt Int treeOfInt) Bool) -(declare-fun tinsertall (treeOfInt listOfInt treeOfInt) Bool) -(declare-fun mem (Int listOfInt Bool) Bool) -(declare-fun append (listOfInt listOfInt listOfInt) Bool) -(declare-fun content (treeOfInt listOfInt) Bool) -(declare-fun tcontains (treeOfInt Int Bool) Bool) - - -(declare-fun ff () Bool) - -(assert - (forall ( (A listOfInt) ) - (append nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C listOfInt) (D listOfInt) ) - (=> - (append B C D) - (append (cons-listOfInt A B) C (cons-listOfInt A D)) - ) - ) -) -(assert - (content leaf-treeOfInt nil-listOfInt) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D listOfInt) (E listOfInt) (F listOfInt) ) - (=> - (and - (content B E) - (content C F) - (append E (cons-listOfInt A F) D) - ) - (content (node-treeOfInt A B C) D) - ) - ) -) -(assert - (forall ( (A Int) (B Bool) ) - (=> - (= B false) - (mem A nil-listOfInt B) - ) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C Bool) ) - (=> - (= C true) - (mem A (cons-listOfInt A B) C) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C listOfInt) (D Bool) ) - (=> - (and - (= D true) - (mem A C D) - ) - (mem A (cons-listOfInt B C) D) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C listOfInt) (D Bool) ) - (=> - (and - (= D false) - (>= (- B A) 1) - (mem A C D) - ) - (mem A (cons-listOfInt B C) D) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C listOfInt) (D Bool) ) - (=> - (and - (= D false) - (<= (- B A) (- 1)) - (mem A C D) - ) - (mem A (cons-listOfInt B C) D) - ) - ) -) -(assert - (forall ( (A Int) (B Bool) ) - (=> - (= B false) - (tcontains leaf-treeOfInt A B) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Bool) ) - (=> - (= D true) - (tcontains (node-treeOfInt A B C) A D) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Bool) ) - (=> - (and - (= E true) - (tcontains B D E) - ) - (tcontains (node-treeOfInt A B C) D E) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Bool) ) - (=> - (and - (= E true) - (tcontains C D E) - ) - (tcontains (node-treeOfInt A B C) D E) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Bool) ) - (=> - (and - (= E false) - (>= (- D A) 1) - (tcontains B D E) - (tcontains C D E) - ) - (tcontains (node-treeOfInt A B C) D E) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Bool) ) - (=> - (and - (= E false) - (<= (- D A) (- 1)) - (tcontains B D E) - (tcontains C D E) - ) - (tcontains (node-treeOfInt A B C) D E) - ) - ) -) -(assert - (forall ( (A Bool) (B Bool) (C treeOfInt) (D Int) (E listOfInt) ) - (=> - (and - (not (= A B)) - (tcontains C D A) - (content C E) - (mem D E B) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal2.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal2.smt2 deleted file mode 100644 index cc102bfbe..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal2.smt2 +++ /dev/null @@ -1,92 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((treeOfInt 0) ) -(((node-treeOfInt (data-treeOfInt Int) (left-treeOfInt treeOfInt) (right-treeOfInt treeOfInt)) (leaf-treeOfInt)))) -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun tinsert (treeOfInt Int treeOfInt) Bool) -(declare-fun tsize (treeOfInt Int) Bool) -(declare-fun tinsertall (treeOfInt listOfInt treeOfInt) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (tsize leaf-treeOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Int) (F Int) (G Int) ) - (=> - (and - (= D (+ 1 E)) - (= (+ F G) E) - (tsize B F) - (tsize C G) - ) - (tsize (node-treeOfInt A B C) D) - ) - ) -) -(assert - (forall ( (A Int) ) - (tinsert leaf-treeOfInt A (node-treeOfInt A leaf-treeOfInt leaf-treeOfInt) ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E treeOfInt) ) - (=> - (and - (<= A (- D 1)) - (tinsert C D E) - ) - (tinsert (node-treeOfInt A B C) D (node-treeOfInt A B E) ) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E treeOfInt) ) - (=> - (and - (>= A D) - (tinsert B D E) - ) - (tinsert (node-treeOfInt A B C) D (node-treeOfInt A E C) ) - ) - ) -) -(assert - (forall ( (A treeOfInt) ) - (tinsertall A nil-listOfInt A) - ) -) -(assert - (forall ( (A treeOfInt) (B Int) (C listOfInt) (D treeOfInt) (E treeOfInt) ) - (=> - (and - (tinsertall A C E) - (tinsert E B D) - ) - (tinsertall A (cons-listOfInt B C) D) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C treeOfInt) (D listOfInt) (E treeOfInt) ) - (=> - (and - (not (<= A B)) - (tsize C A) - (tinsertall C D E) - (tsize E B) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal3.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal3.smt2 deleted file mode 100644 index d29e85328..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal3.smt2 +++ /dev/null @@ -1,114 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((treeOfInt 0) ) -(((node-treeOfInt (data-treeOfInt Int) (left-treeOfInt treeOfInt) (right-treeOfInt treeOfInt)) (leaf-treeOfInt)))) -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun tinsert (treeOfInt Int treeOfInt) Bool) -(declare-fun tsize (treeOfInt Int) Bool) -(declare-fun tinsertall (treeOfInt listOfInt treeOfInt) Bool) -(declare-fun len (listOfInt Int) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (len nil-listOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C Int) (D Int) ) - (=> - (and - (= C (+ 1 D)) - (len B D) - ) - (len (cons-listOfInt A B) C) - ) - ) -) -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (tsize leaf-treeOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Int) (F Int) (G Int) ) - (=> - (and - (= D (+ 1 E)) - (= (+ F G) E) - (tsize B F) - (tsize C G) - ) - (tsize (node-treeOfInt A B C) D) - ) - ) -) -(assert - (forall ( (A Int) ) - (tinsert leaf-treeOfInt A (node-treeOfInt A leaf-treeOfInt leaf-treeOfInt) ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E treeOfInt) ) - (=> - (and - (<= A (- D 1)) - (tinsert C D E) - ) - (tinsert (node-treeOfInt A B C) D (node-treeOfInt A B E) ) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E treeOfInt) ) - (=> - (and - (>= A D) - (tinsert B D E) - ) - (tinsert (node-treeOfInt A B C) D (node-treeOfInt A E C) ) - ) - ) -) -(assert - (forall ( (A treeOfInt) ) - (tinsertall A nil-listOfInt A) - ) -) -(assert - (forall ( (A treeOfInt) (B Int) (C listOfInt) (D treeOfInt) (E treeOfInt) ) - (=> - (and - (tinsertall A C E) - (tinsert E B D) - ) - (tinsertall A (cons-listOfInt B C) D) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C Int) (D Int) (E treeOfInt) (F listOfInt) (G treeOfInt) ) - (=> - (and - (not (= A B)) - (= (+ C D) A) - (tinsertall E F G) - (tsize G B) - (tsize E C) - (len F D) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal4.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal4.smt2 deleted file mode 100644 index 42b852f1d..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal4.smt2 +++ /dev/null @@ -1,89 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((treeOfInt 0) ) -(((node-treeOfInt (data-treeOfInt Int) (left-treeOfInt treeOfInt) (right-treeOfInt treeOfInt)) (leaf-treeOfInt)))) -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun tsize (treeOfInt Int) Bool) -(declare-fun tremove (treeOfInt Int treeOfInt) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) ) - (tremove leaf-treeOfInt A leaf-treeOfInt) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E treeOfInt) ) - (=> - (and - (<= D (- A 1)) - (tremove B D E) - ) - (tremove (node-treeOfInt A B C) D (node-treeOfInt A E C) ) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E treeOfInt) ) - (=> - (and - (<= A (- D 1)) - (tremove C D E) - ) - (tremove (node-treeOfInt A B C) D (node-treeOfInt A B E) ) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) ) - (tremove (node-treeOfInt A leaf-treeOfInt B) A B) - ) -) -(assert - (forall ( (A Int) (B Int) (C treeOfInt) (D treeOfInt) (E treeOfInt) (F treeOfInt) ) - (=> - (tremove (node-treeOfInt B C D) B F) - (tremove (node-treeOfInt A (node-treeOfInt B C D) E) A (node-treeOfInt B F E) ) - ) - ) -) - -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (tsize leaf-treeOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Int) (F Int) (G Int) ) - (=> - (and - (= D (+ 1 E)) - (= (+ F G) E) - (tsize B F) - (tsize C G) - ) - (tsize (node-treeOfInt A B C) D) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C treeOfInt) (D Int) (E treeOfInt) ) - (=> - (and - (not (<= A B)) - (tremove C D E) - (tsize E A) - (tsize C B) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal5.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal5.smt2 deleted file mode 100644 index 322a89369..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal5.smt2 +++ /dev/null @@ -1,106 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((treeOfInt 0) ) -(((node-treeOfInt (data-treeOfInt Int) (left-treeOfInt treeOfInt) (right-treeOfInt treeOfInt)) (leaf-treeOfInt)))) -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun tsize (treeOfInt Int) Bool) -(declare-fun tremove (treeOfInt Int treeOfInt) Bool) -(declare-fun tremoveall (treeOfInt listOfInt treeOfInt) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) ) - (tremove leaf-treeOfInt A leaf-treeOfInt) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E treeOfInt) ) - (=> - (and - (<= D (- A 1)) - (tremove B D E) - ) - (tremove (node-treeOfInt A B C) D (node-treeOfInt A E C) ) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E treeOfInt) ) - (=> - (and - (<= A (- D 1)) - (tremove C D E) - ) - (tremove (node-treeOfInt A B C) D (node-treeOfInt A B E) ) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) ) - (tremove (node-treeOfInt A leaf-treeOfInt B) A B) - ) -) -(assert - (forall ( (A Int) (B Int) (C treeOfInt) (D treeOfInt) (E treeOfInt) (F treeOfInt) ) - (=> - (tremove (node-treeOfInt B C D) B F) - (tremove (node-treeOfInt A (node-treeOfInt B C D) E) A (node-treeOfInt B F E) ) - ) - ) -) - -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (tsize leaf-treeOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Int) (F Int) (G Int) ) - (=> - (and - (= D (+ 1 E)) - (= (+ F G) E) - (tsize B F) - (tsize C G) - ) - (tsize (node-treeOfInt A B C) D) - ) - ) -) -(assert - (forall ( (A treeOfInt) ) - (tremoveall A nil-listOfInt A) - ) -) -(assert - (forall ( (A treeOfInt) (B Int) (C listOfInt) (D treeOfInt) (E treeOfInt) ) - (=> - (and - (tremove A B E) - (tremoveall E C D) - ) - (tremoveall A (cons-listOfInt B C) D) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C treeOfInt) (D listOfInt) (E treeOfInt) ) - (=> - (and - (not (<= A B)) - (tremoveall C D E) - (tsize E A) - (tsize C B) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal6.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal6.smt2 deleted file mode 100644 index 96a064aeb..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal6.smt2 +++ /dev/null @@ -1,139 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((treeOfInt 0) ) -(((node-treeOfInt (data-treeOfInt Int) (left-treeOfInt treeOfInt) (right-treeOfInt treeOfInt)) (leaf-treeOfInt)))) -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun tinsert (treeOfInt Int treeOfInt) Bool) -(declare-fun tsize (treeOfInt Int) Bool) -(declare-fun tcontains (treeOfInt Int Bool) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (tsize leaf-treeOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Int) (F Int) (G Int) ) - (=> - (and - (= D (+ 1 E)) - (= (+ F G) E) - (tsize B F) - (tsize C G) - ) - (tsize (node-treeOfInt A B C) D) - ) - ) -) -(assert - (forall ( (A Int) ) - (tinsert leaf-treeOfInt A (node-treeOfInt A leaf-treeOfInt leaf-treeOfInt) ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E treeOfInt) ) - (=> - (and - (<= A (- D 1)) - (tinsert C D E) - ) - (tinsert (node-treeOfInt A B C) D (node-treeOfInt A B E) ) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E treeOfInt) ) - (=> - (and - (>= A D) - (tinsert B D E) - ) - (tinsert (node-treeOfInt A B C) D (node-treeOfInt A E C) ) - ) - ) -) -(assert - (forall ( (A Int) (B Bool) ) - (=> - (= B false) - (tcontains leaf-treeOfInt A B) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Bool) ) - (=> - (= D true) - (tcontains (node-treeOfInt A B C) A D) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Bool) ) - (=> - (and - (= E true) - (tcontains B D E) - ) - (tcontains (node-treeOfInt A B C) D E) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Bool) ) - (=> - (and - (= E true) - (tcontains C D E) - ) - (tcontains (node-treeOfInt A B C) D E) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Bool) ) - (=> - (and - (= E false) - (>= (- D A) 1) - (tcontains B D E) - (tcontains C D E) - ) - (tcontains (node-treeOfInt A B C) D E) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Bool) ) - (=> - (and - (= E false) - (<= (- D A) (- 1)) - (tcontains B D E) - (tcontains C D E) - ) - (tcontains (node-treeOfInt A B C) D E) - ) - ) -) -(assert - (forall ( (A Bool) (B treeOfInt) (C Int) (D treeOfInt) ) - (=> - (and - (not (= A true)) - (tinsert B C D) - (tcontains D C A) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal7.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal7.smt2 deleted file mode 100644 index a52cb01f6..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal7.smt2 +++ /dev/null @@ -1,169 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((treeOfInt 0) ) -(((node-treeOfInt (data-treeOfInt Int) (left-treeOfInt treeOfInt) (right-treeOfInt treeOfInt)) (leaf-treeOfInt)))) -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun tinsert (treeOfInt Int treeOfInt) Bool) -(declare-fun tsize (treeOfInt Int) Bool) -(declare-fun tcontains (treeOfInt Int Bool) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (tsize leaf-treeOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Int) (F Int) (G Int) ) - (=> - (and - (= D (+ 1 E)) - (= (+ F G) E) - (tsize B F) - (tsize C G) - ) - (tsize (node-treeOfInt A B C) D) - ) - ) -) -(assert - (forall ( (A Int) ) - (tinsert leaf-treeOfInt A (node-treeOfInt A leaf-treeOfInt leaf-treeOfInt) ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E treeOfInt) ) - (=> - (and - (<= A (- D 1)) - (tinsert C D E) - ) - (tinsert (node-treeOfInt A B C) D (node-treeOfInt A B E) ) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E treeOfInt) ) - (=> - (and - (>= A D) - (tinsert B D E) - ) - (tinsert (node-treeOfInt A B C) D (node-treeOfInt A E C) ) - ) - ) -) -(assert - (forall ( (A Int) (B Bool) ) - (=> - (= B false) - (tcontains leaf-treeOfInt A B) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Bool) ) - (=> - (= D true) - (tcontains (node-treeOfInt A B C) A D) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Bool) ) - (=> - (and - (= E true) - (tcontains B D E) - ) - (tcontains (node-treeOfInt A B C) D E) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Bool) ) - (=> - (and - (= E true) - (tcontains C D E) - ) - (tcontains (node-treeOfInt A B C) D E) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Bool) ) - (=> - (and - (= E false) - (>= (- D A) 1) - (tcontains B D E) - (tcontains C D E) - ) - (tcontains (node-treeOfInt A B C) D E) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Bool) ) - (=> - (and - (= E false) - (<= (- D A) (- 1)) - (tcontains B D E) - (tcontains C D E) - ) - (tcontains (node-treeOfInt A B C) D E) - ) - ) -) -(assert - (forall ( (A Bool) (B Bool) (C Int) (D Int) (E treeOfInt) (F treeOfInt) ) - (=> - (and - (= A true) - (= B false) - (not (= C D)) - (tcontains E D B) - (tinsert E C F) - (tcontains F D A) - ) - ff - ) - ) -) -(assert - (forall ( (A Bool) (B Bool) (C treeOfInt) (D Int) (E Int) (F treeOfInt) ) - (=> - (and - (not (= A true)) - (= B true) - (tcontains C D B) - (tinsert C E F) - (tcontains F D A) - ) - ff - ) - ) -) -(assert - (forall ( (A Bool) (B treeOfInt) (C Int) (D Bool) (E treeOfInt) ) - (=> - (and - (not (= A true)) - (tcontains B C D) - (tinsert B C E) - (tcontains E C A) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal8.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal8.smt2 deleted file mode 100644 index 1365ab7c3..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal8.smt2 +++ /dev/null @@ -1,233 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((treeOfInt 0) ) -(((node-treeOfInt (data-treeOfInt Int) (left-treeOfInt treeOfInt) (right-treeOfInt treeOfInt)) (leaf-treeOfInt)))) -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun tinsert (treeOfInt Int treeOfInt) Bool) - (declare-fun tsorted (treeOfInt Bool) Bool) -(declare-fun tallleq (treeOfInt Int Bool) Bool) -(declare-fun tallgt (treeOfInt Int Bool) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) ) - (tinsert leaf-treeOfInt A (node-treeOfInt A leaf-treeOfInt leaf-treeOfInt) ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E treeOfInt) ) - (=> - (and - (<= A (- D 1)) - (tinsert C D E) - ) - (tinsert (node-treeOfInt A B C) D (node-treeOfInt A B E) ) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E treeOfInt) ) - (=> - (and - (>= A D) - (tinsert B D E) - ) - (tinsert (node-treeOfInt A B C) D (node-treeOfInt A E C) ) - ) - ) -) - -(assert - (forall ( (A Bool) ) - (=> - (= A true) - (tsorted leaf-treeOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Bool) ) - (=> - (and - (= D true) - (tsorted B D) - (tsorted C D) - (tallleq B A D) - (tallgt C A D) - ) - (tsorted (node-treeOfInt A B C) D) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Bool) ) - (=> - (and - (= D false) - (tsorted B D) - ) - (tsorted (node-treeOfInt A B C) D) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Bool) ) - (=> - (and - (= D false) - (tsorted C D) - ) - (tsorted (node-treeOfInt A B C) D) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Bool) ) - (=> - (and - (= D false) - (tallleq B A D) - ) - (tsorted (node-treeOfInt A B C) D) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Bool) ) - (=> - (and - (= D false) - (tallgt C A D) - ) - (tsorted (node-treeOfInt A B C) D) - ) - ) -) - -(assert - (forall ( (A Int) (B Bool) ) - (=> - (= B true) - (tallleq leaf-treeOfInt A B) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Bool) ) - (=> - (and - (= E true) - (<= A D) - (tallleq B D E) - (tallleq C D E) - ) - (tallleq (node-treeOfInt A B C) D E) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Bool) ) - (=> - (and - (= E false) - (>= A (+ D 1)) - ) - (tallleq (node-treeOfInt A B C) D E) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Bool) ) - (=> - (and - (= E false) - (tallleq B D E) - ) - (tallleq (node-treeOfInt A B C) D E) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Bool) ) - (=> - (and - (= E false) - (tallleq C D E) - ) - (tallleq (node-treeOfInt A B C) D E) - ) - ) -) -(assert - (forall ( (A Int) (B Bool) ) - (=> - (= B true) - (tallgt leaf-treeOfInt A B) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Bool) ) - (=> - (and - (= E true) - (>= A (+ D 1)) - (tallgt B D E) - (tallgt C D E) - ) - (tallgt (node-treeOfInt A B C) D E) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Bool) ) - (=> - (and - (= E false) - (<= A D) - ) - (tallgt (node-treeOfInt A B C) D E) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Bool) ) - (=> - (and - (= E false) - (tallgt B D E) - ) - (tallgt (node-treeOfInt A B C) D E) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Bool) ) - (=> - (and - (= E false) - (tallgt C D E) - ) - (tallgt (node-treeOfInt A B C) D E) - ) - ) -) -(assert - (forall ( (A Bool) (B Bool) (C treeOfInt) (D Int) (E treeOfInt) ) - (=> - (and - (= A true) - (not (= B true)) - (tinsert C D E) - (tsorted E B) - (tsorted C A) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal9.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal9.smt2 deleted file mode 100644 index 092e044b4..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/bsearch-tree/bsearch-tree-goal9.smt2 +++ /dev/null @@ -1,94 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((treeOfInt 0) ) -(((node-treeOfInt (data-treeOfInt Int) (left-treeOfInt treeOfInt) (right-treeOfInt treeOfInt)) (leaf-treeOfInt)))) -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun tinsert (treeOfInt Int treeOfInt) Bool) -(declare-fun tmember (treeOfInt Int Bool) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) ) - (tinsert leaf-treeOfInt A (node-treeOfInt A leaf-treeOfInt leaf-treeOfInt) ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E treeOfInt) ) - (=> - (and - (<= A (- D 1)) - (tinsert C D E) - ) - (tinsert (node-treeOfInt A B C) D (node-treeOfInt A B E) ) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E treeOfInt) ) - (=> - (and - (>= A D) - (tinsert B D E) - ) - (tinsert (node-treeOfInt A B C) D (node-treeOfInt A E C) ) - ) - ) -) -(assert - (forall ( (A Int) (B Bool) ) - (=> - (= B false) - (tmember leaf-treeOfInt A B) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Bool) ) - (=> - (= D true) - (tmember (node-treeOfInt A B C) A D) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Bool) (F Bool) ) - (=> - (and - (>= (- D A) 1) - (tmember C D E) - (< A D) - ) - (tmember (node-treeOfInt A B C) D E) - ) - ) -) -(assert - (forall ( (A Int) (B treeOfInt) (C treeOfInt) (D Int) (E Bool) (F Bool) ) - (=> - (and - (<= (- D A) (- 1)) - (tmember B D E) - (>= A D) - ) - (tmember (node-treeOfInt A B C) D E) - ) - ) -) - -(assert - (forall ( (A Bool) (B treeOfInt) (C Int) (D treeOfInt) ) - (=> - (and - (not (= A true)) - (tinsert B C D) - (tmember D C A) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal1.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal1.smt2 deleted file mode 100644 index 3306d1829..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal1.smt2 +++ /dev/null @@ -1,210 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((heapOfInt 0) ) -(((heap-heapOfInt (rk-heapOfInt Int) (value-heapOfInt Int) (left-heapOfInt heapOfInt) (right-heapOfInt heapOfInt)) (hleaf-heapOfInt)))) -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun rightheight (heapOfInt Int) Bool) -(declare-fun rank (heapOfInt Int) Bool) -(declare-fun mergea (Int heapOfInt heapOfInt heapOfInt) Bool) -(declare-fun merge (heapOfInt heapOfInt heapOfInt) Bool) -(declare-fun hinsert (heapOfInt Int heapOfInt) Bool) -(declare-fun hasleftistproperty (heapOfInt Bool) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (rightheight hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) ) - (=> - (and - (= E (+ 1 F)) - (rightheight D F) - ) - (rightheight (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (rank hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) ) - (rank (heap-heapOfInt A B C D) A) - ) -) -(assert - (forall ( (A Int) (B heapOfInt) (C heapOfInt) (D Int) (E Bool) (F Int) (G Int) (H Int) ) - (=> - (and - (= D (+ 1 F)) - (<= G H) - (rank B H) - (rank C G) - (rank C F) - ) - (mergea A B C (heap-heapOfInt D A B C) ) - ) - ) -) -(assert - (forall ( (A Int) (B heapOfInt) (C heapOfInt) (D Int) (E Bool) (F Int) (G Int) (H Int) ) - (=> - (and - (= D (+ 1 F)) - (> G H) - (rank B H) - (rank C G) - (rank B F) - ) - (mergea A B C (heap-heapOfInt D A C B) ) - ) - ) -) - -(assert - (forall ( (A heapOfInt) ) - (merge A hleaf-heapOfInt A) - ) -) -(assert - (forall ( (A heapOfInt) ) - (merge hleaf-heapOfInt A A) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) (G heapOfInt) (H heapOfInt) (I heapOfInt) (J Bool) (K heapOfInt) ) - (=> - (and - (< F B) - (mergea B C K I) - (merge D (heap-heapOfInt E F G H) K) - ) - (merge (heap-heapOfInt A B C D) (heap-heapOfInt E F G H) I) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) (G heapOfInt) (H heapOfInt) (I heapOfInt) (J Bool) (K heapOfInt) ) - (=> - (and - (>= F B) - (mergea F G K I) - (merge (heap-heapOfInt A B C D) H K) - ) - (merge (heap-heapOfInt A B C D) (heap-heapOfInt E F G H) I) - ) - ) -) -(assert - (forall ( (A Bool) ) - (=> - (= A true) - (hasleftistproperty hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) (F Int) (G Int) (H Int) ) - (=> - (and - (= E true) - (= A (+ 1 F)) - (hasleftistproperty C E) - (hasleftistproperty D E) - (<= G H) - (rightheight C H) - (rightheight D G) - (rightheight D F) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) ) - (=> - (and - (= E false) - (hasleftistproperty C E) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) ) - (=> - (and - (= E false) - (hasleftistproperty D E) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) (F Int) (G Int) ) - (=> - (and - (= E false) - (> F G) - (rightheight C G) - (rightheight D F) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) (F Int) ) - (=> - (and - (= E false) - (not (= A (+ 1 F))) - (rightheight D F) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A heapOfInt) (B Int) (C heapOfInt) (D Int) ) - (=> - (and - (= D 1) - (merge (heap-heapOfInt D B hleaf-heapOfInt hleaf-heapOfInt) A C) - ) - (hinsert A B C) - ) - ) -) -(assert - (forall ( (A Bool) (B Bool) (C heapOfInt) (D Int) (E heapOfInt) ) - (=> - (and - (= A true) - (not (= B true)) - (hinsert C D E) - (hasleftistproperty E B) - (hasleftistproperty C A) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal10.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal10.smt2 deleted file mode 100644 index 971743ebc..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal10.smt2 +++ /dev/null @@ -1,286 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((heapOfInt 0) ) -(((heap-heapOfInt (rk-heapOfInt Int) (value-heapOfInt Int) (left-heapOfInt heapOfInt) (right-heapOfInt heapOfInt)) (hleaf-heapOfInt)))) -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun len (listOfInt Int) Bool) -(declare-fun rightheight (heapOfInt Int) Bool) -(declare-fun rank (heapOfInt Int) Bool) -(declare-fun mergea (Int heapOfInt heapOfInt heapOfInt) Bool) -(declare-fun merge (heapOfInt heapOfInt heapOfInt) Bool) -(declare-fun hsize (heapOfInt Int) Bool) -(declare-fun hasleftistproperty (heapOfInt Bool) Bool) -(declare-fun hinsert (heapOfInt Int heapOfInt) Bool) -(declare-fun hinsertall (listOfInt heapOfInt heapOfInt) Bool) -(declare-fun heapsorta (heapOfInt listOfInt) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (len nil-listOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C Int) (D Int) ) - (=> - (and - (= C (+ 1 D)) - (len B D) - ) - (len (cons-listOfInt A B) C) - ) - ) -) -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (rightheight hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) ) - (=> - (and - (= E (+ 1 F)) - (rightheight D F) - ) - (rightheight (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (rank hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) ) - (rank (heap-heapOfInt A B C D) A) - ) -) -(assert - (forall ( (A Int) (B heapOfInt) (C heapOfInt) (D Int) (E Bool) (F Int) (G Int) (H Int) ) - (=> - (and - (= D (+ 1 F)) - (<= G H) - (rank B H) - (rank C G) - (rank C F) - ) - (mergea A B C (heap-heapOfInt D A B C) ) - ) - ) -) -(assert - (forall ( (A Int) (B heapOfInt) (C heapOfInt) (D Int) (E Bool) (F Int) (G Int) (H Int) ) - (=> - (and - (= D (+ 1 F)) - (> G H) - (rank B H) - (rank C G) - (rank B F) - ) - (mergea A B C (heap-heapOfInt D A C B) ) - ) - ) -) - -(assert - (forall ( (A heapOfInt) ) - (merge A hleaf-heapOfInt A) - ) -) -(assert - (forall ( (A heapOfInt) ) - (merge hleaf-heapOfInt A A) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) (G heapOfInt) (H heapOfInt) (I heapOfInt) (J Bool) (K heapOfInt) ) - (=> - (and - (< F B) - (mergea B C K I) - (merge D (heap-heapOfInt E F G H) K) - ) - (merge (heap-heapOfInt A B C D) (heap-heapOfInt E F G H) I) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) (G heapOfInt) (H heapOfInt) (I heapOfInt) (J Bool) (K heapOfInt) ) - (=> - (and - (>= F B) - (mergea F G K I) - (merge (heap-heapOfInt A B C D) H K) - ) - (merge (heap-heapOfInt A B C D) (heap-heapOfInt E F G H) I) - ) - ) -) -(assert - (forall ( (A Bool) ) - (=> - (= A true) - (hasleftistproperty hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) (F Int) (G Int) (H Int) ) - (=> - (and - (= E true) - (= A (+ 1 F)) - (hasleftistproperty C E) - (hasleftistproperty D E) - (<= G H) - (rightheight C H) - (rightheight D G) - (rightheight D F) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) ) - (=> - (and - (= E false) - (hasleftistproperty C E) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) ) - (=> - (and - (= E false) - (hasleftistproperty D E) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) (F Int) (G Int) ) - (=> - (and - (= E false) - (> F G) - (rightheight C G) - (rightheight D F) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) (F Int) ) - (=> - (and - (= E false) - (not (= A (+ 1 F))) - (rightheight D F) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (hsize hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) (G Int) (H Int) ) - (=> - (and - (= E (+ 1 F)) - (hsize C G) - (hsize D H) - (= F (+ G H)) - ) - (hsize (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A heapOfInt) (B Int) (C heapOfInt) (D Int) ) - (=> - (and - (= D 1) - (merge (heap-heapOfInt D B hleaf-heapOfInt hleaf-heapOfInt) A C) - ) - (hinsert A B C) - ) - ) -) -(assert - (forall ( (A heapOfInt) ) - (hinsertall nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C heapOfInt) (D heapOfInt) (E heapOfInt) ) - (=> - (and - (hinsertall B C E) - (hinsert E A D) - ) - (hinsertall (cons-listOfInt A B) C D) - ) - ) -) -(assert - (heapsorta hleaf-heapOfInt nil-listOfInt) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E listOfInt) (F heapOfInt) ) - (=> - (and - (merge C D F) - (heapsorta F E) - ) - (heapsorta (heap-heapOfInt A B C D) (cons-listOfInt B E)) - ) - ) -) -(assert - (forall ( (A Bool) (B Int) (C Int) (D heapOfInt) (E listOfInt) ) - (=> - (and - (= A true) - (not (= B C)) - (>= (- B C) 1) - (heapsorta D E) - (len E C) - (hsize D B) - (hasleftistproperty D A) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal12.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal12.smt2 deleted file mode 100644 index c04c7f642..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal12.smt2 +++ /dev/null @@ -1,301 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((heapOfInt 0) ) -(((heap-heapOfInt (rk-heapOfInt Int) (value-heapOfInt Int) (left-heapOfInt heapOfInt) (right-heapOfInt heapOfInt)) (hleaf-heapOfInt)))) -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun len (listOfInt Int) Bool) -(declare-fun rightheight (heapOfInt Int) Bool) -(declare-fun rank (heapOfInt Int) Bool) -(declare-fun mergea (Int heapOfInt heapOfInt heapOfInt) Bool) -(declare-fun merge (heapOfInt heapOfInt heapOfInt) Bool) -(declare-fun hsize (heapOfInt Int) Bool) -(declare-fun qheapsorta (heapOfInt listOfInt listOfInt) Bool) -(declare-fun hasleftistproperty (heapOfInt Bool) Bool) -(declare-fun hinsert (heapOfInt Int heapOfInt) Bool) -(declare-fun hinsertall (listOfInt heapOfInt heapOfInt) Bool) -(declare-fun heapsorta (heapOfInt listOfInt) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (len nil-listOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C Int) (D Int) ) - (=> - (and - (= C (+ 1 D)) - (len B D) - ) - (len (cons-listOfInt A B) C) - ) - ) -) -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (rightheight hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) ) - (=> - (and - (= E (+ 1 F)) - (rightheight D F) - ) - (rightheight (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (rank hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) ) - (rank (heap-heapOfInt A B C D) A) - ) -) -(assert - (forall ( (A Int) (B heapOfInt) (C heapOfInt) (D Int) (E Bool) (F Int) (G Int) (H Int) ) - (=> - (and - (= D (+ 1 F)) - (<= G H) - (rank B H) - (rank C G) - (rank C F) - ) - (mergea A B C (heap-heapOfInt D A B C) ) - ) - ) -) -(assert - (forall ( (A Int) (B heapOfInt) (C heapOfInt) (D Int) (E Bool) (F Int) (G Int) (H Int) ) - (=> - (and - (= D (+ 1 F)) - (> G H) - (rank B H) - (rank C G) - (rank B F) - ) - (mergea A B C (heap-heapOfInt D A C B) ) - ) - ) -) - -(assert - (forall ( (A heapOfInt) ) - (merge A hleaf-heapOfInt A) - ) -) -(assert - (forall ( (A heapOfInt) ) - (merge hleaf-heapOfInt A A) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) (G heapOfInt) (H heapOfInt) (I heapOfInt) (J Bool) (K heapOfInt) ) - (=> - (and - (< F B) - (mergea B C K I) - (merge D (heap-heapOfInt E F G H) K) - ) - (merge (heap-heapOfInt A B C D) (heap-heapOfInt E F G H) I) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) (G heapOfInt) (H heapOfInt) (I heapOfInt) (J Bool) (K heapOfInt) ) - (=> - (and - (>= F B) - (mergea F G K I) - (merge (heap-heapOfInt A B C D) H K) - ) - (merge (heap-heapOfInt A B C D) (heap-heapOfInt E F G H) I) - ) - ) -) -(assert - (forall ( (A Bool) ) - (=> - (= A true) - (hasleftistproperty hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) (F Int) (G Int) (H Int) ) - (=> - (and - (= E true) - (= A (+ 1 F)) - (hasleftistproperty C E) - (hasleftistproperty D E) - (<= G H) - (rightheight C H) - (rightheight D G) - (rightheight D F) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) ) - (=> - (and - (= E false) - (hasleftistproperty C E) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) ) - (=> - (and - (= E false) - (hasleftistproperty D E) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) (F Int) (G Int) ) - (=> - (and - (= E false) - (> F G) - (rightheight C G) - (rightheight D F) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) (F Int) ) - (=> - (and - (= E false) - (not (= A (+ 1 F))) - (rightheight D F) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (hsize hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A listOfInt) ) - (qheapsorta hleaf-heapOfInt A A) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E listOfInt) (F listOfInt) (G heapOfInt) ) - (=> - (and - (merge C D G) - (qheapsorta G (cons-listOfInt B E) F) - ) - (qheapsorta (heap-heapOfInt A B C D) E F) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) (G Int) (H Int) ) - (=> - (and - (= E (+ 1 F)) - (hsize C G) - (hsize D H) - (= F (+ G H)) - ) - (hsize (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A heapOfInt) (B Int) (C heapOfInt) (D Int) ) - (=> - (and - (= D 1) - (merge (heap-heapOfInt D B hleaf-heapOfInt hleaf-heapOfInt) A C) - ) - (hinsert A B C) - ) - ) -) -(assert - (forall ( (A heapOfInt) ) - (hinsertall nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C heapOfInt) (D heapOfInt) (E heapOfInt) ) - (=> - (and - (hinsertall B C E) - (hinsert E A D) - ) - (hinsertall (cons-listOfInt A B) C D) - ) - ) -) -(assert - (heapsorta hleaf-heapOfInt nil-listOfInt) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E listOfInt) (F heapOfInt) ) - (=> - (and - (merge C D F) - (heapsorta F E) - ) - (heapsorta (heap-heapOfInt A B C D) (cons-listOfInt B E)) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D Int) (E listOfInt) (F listOfInt) (G listOfInt) ) - (=> - (and - (not (= (- A B) 1)) - (qheapsorta C (cons-listOfInt D E) F) - (len F A) - (qheapsorta C E G) - (len G B) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal13.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal13.smt2 deleted file mode 100644 index ff75ee16c..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal13.smt2 +++ /dev/null @@ -1,304 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((heapOfInt 0) ) -(((heap-heapOfInt (rk-heapOfInt Int) (value-heapOfInt Int) (left-heapOfInt heapOfInt) (right-heapOfInt heapOfInt)) (hleaf-heapOfInt)))) -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun len (listOfInt Int) Bool) -(declare-fun rightheight (heapOfInt Int) Bool) -(declare-fun rank (heapOfInt Int) Bool) -(declare-fun mergea (Int heapOfInt heapOfInt heapOfInt) Bool) -(declare-fun merge (heapOfInt heapOfInt heapOfInt) Bool) -(declare-fun hsize (heapOfInt Int) Bool) -(declare-fun qheapsorta (heapOfInt listOfInt listOfInt) Bool) -(declare-fun hasleftistproperty (heapOfInt Bool) Bool) -(declare-fun hinsert (heapOfInt Int heapOfInt) Bool) -(declare-fun hinsertall (listOfInt heapOfInt heapOfInt) Bool) -(declare-fun heapsorta (heapOfInt listOfInt) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (len nil-listOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C Int) (D Int) ) - (=> - (and - (= C (+ 1 D)) - (len B D) - ) - (len (cons-listOfInt A B) C) - ) - ) -) -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (rightheight hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) ) - (=> - (and - (= E (+ 1 F)) - (rightheight D F) - ) - (rightheight (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (rank hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) ) - (rank (heap-heapOfInt A B C D) A) - ) -) -(assert - (forall ( (A Int) (B heapOfInt) (C heapOfInt) (D Int) (E Bool) (F Int) (G Int) (H Int) ) - (=> - (and - (= D (+ 1 F)) - (<= G H) - (rank B H) - (rank C G) - (rank C F) - ) - (mergea A B C (heap-heapOfInt D A B C) ) - ) - ) -) -(assert - (forall ( (A Int) (B heapOfInt) (C heapOfInt) (D Int) (E Bool) (F Int) (G Int) (H Int) ) - (=> - (and - (= D (+ 1 F)) - (> G H) - (rank B H) - (rank C G) - (rank B F) - ) - (mergea A B C (heap-heapOfInt D A C B) ) - ) - ) -) - -(assert - (forall ( (A heapOfInt) ) - (merge A hleaf-heapOfInt A) - ) -) -(assert - (forall ( (A heapOfInt) ) - (merge hleaf-heapOfInt A A) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) (G heapOfInt) (H heapOfInt) (I heapOfInt) (J Bool) (K heapOfInt) ) - (=> - (and - (< F B) - (mergea B C K I) - (merge D (heap-heapOfInt E F G H) K) - ) - (merge (heap-heapOfInt A B C D) (heap-heapOfInt E F G H) I) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) (G heapOfInt) (H heapOfInt) (I heapOfInt) (J Bool) (K heapOfInt) ) - (=> - (and - (>= F B) - (mergea F G K I) - (merge (heap-heapOfInt A B C D) H K) - ) - (merge (heap-heapOfInt A B C D) (heap-heapOfInt E F G H) I) - ) - ) -) -(assert - (forall ( (A Bool) ) - (=> - (= A true) - (hasleftistproperty hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) (F Int) (G Int) (H Int) ) - (=> - (and - (= E true) - (= A (+ 1 F)) - (hasleftistproperty C E) - (hasleftistproperty D E) - (<= G H) - (rightheight C H) - (rightheight D G) - (rightheight D F) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) ) - (=> - (and - (= E false) - (hasleftistproperty C E) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) ) - (=> - (and - (= E false) - (hasleftistproperty D E) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) (F Int) (G Int) ) - (=> - (and - (= E false) - (> F G) - (rightheight C G) - (rightheight D F) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) (F Int) ) - (=> - (and - (= E false) - (not (= A (+ 1 F))) - (rightheight D F) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (hsize hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A listOfInt) ) - (qheapsorta hleaf-heapOfInt A A) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E listOfInt) (F listOfInt) (G heapOfInt) ) - (=> - (and - (merge C D G) - (qheapsorta G (cons-listOfInt B E) F) - ) - (qheapsorta (heap-heapOfInt A B C D) E F) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) (G Int) (H Int) ) - (=> - (and - (= E (+ 1 F)) - (hsize C G) - (hsize D H) - (= F (+ G H)) - ) - (hsize (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A heapOfInt) (B Int) (C heapOfInt) (D Int) ) - (=> - (and - (= D 1) - (merge (heap-heapOfInt D B hleaf-heapOfInt hleaf-heapOfInt) A C) - ) - (hinsert A B C) - ) - ) -) -(assert - (forall ( (A heapOfInt) ) - (hinsertall nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C heapOfInt) (D heapOfInt) (E heapOfInt) ) - (=> - (and - (hinsertall B C E) - (hinsert E A D) - ) - (hinsertall (cons-listOfInt A B) C D) - ) - ) -) -(assert - (heapsorta hleaf-heapOfInt nil-listOfInt) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E listOfInt) (F heapOfInt) ) - (=> - (and - (merge C D F) - (heapsorta F E) - ) - (heapsorta (heap-heapOfInt A B C D) (cons-listOfInt B E)) - ) - ) -) -(assert - (forall ( (A Bool) (B Int) (C Int) (D Int) (E Int) (F heapOfInt) (G listOfInt) (H listOfInt) ) - (=> - (and - (= A true) - (not (= B C)) - (= (+ D E) B) - (qheapsorta F G H) - (len H C) - (hsize F D) - (len G E) - (hasleftistproperty F A) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal2.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal2.smt2 deleted file mode 100644 index 8f0ba4fd8..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal2.smt2 +++ /dev/null @@ -1,227 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((heapOfInt 0) ) -(((heap-heapOfInt (rk-heapOfInt Int) (value-heapOfInt Int) (left-heapOfInt heapOfInt) (right-heapOfInt heapOfInt)) (hleaf-heapOfInt)))) -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun rightheight (heapOfInt Int) Bool) -(declare-fun rank (heapOfInt Int) Bool) -(declare-fun mergea (Int heapOfInt heapOfInt heapOfInt) Bool) -(declare-fun merge (heapOfInt heapOfInt heapOfInt) Bool) -(declare-fun hinsert (heapOfInt Int heapOfInt) Bool) -(declare-fun hinsertall (listOfInt heapOfInt heapOfInt) Bool) -(declare-fun hasleftistproperty (heapOfInt Bool) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (rightheight hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) ) - (=> - (and - (= E (+ 1 F)) - (rightheight D F) - ) - (rightheight (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (rank hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) ) - (rank (heap-heapOfInt A B C D) A) - ) -) -(assert - (forall ( (A Int) (B heapOfInt) (C heapOfInt) (D Int) (E Bool) (F Int) (G Int) (H Int) ) - (=> - (and - (= D (+ 1 F)) - (<= G H) - (rank B H) - (rank C G) - (rank C F) - ) - (mergea A B C (heap-heapOfInt D A B C) ) - ) - ) -) -(assert - (forall ( (A Int) (B heapOfInt) (C heapOfInt) (D Int) (E Bool) (F Int) (G Int) (H Int) ) - (=> - (and - (= D (+ 1 F)) - (> G H) - (rank B H) - (rank C G) - (rank B F) - ) - (mergea A B C (heap-heapOfInt D A C B) ) - ) - ) -) - -(assert - (forall ( (A heapOfInt) ) - (merge A hleaf-heapOfInt A) - ) -) -(assert - (forall ( (A heapOfInt) ) - (merge hleaf-heapOfInt A A) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) (G heapOfInt) (H heapOfInt) (I heapOfInt) (J Bool) (K heapOfInt) ) - (=> - (and - (< F B) - (mergea B C K I) - (merge D (heap-heapOfInt E F G H) K) - ) - (merge (heap-heapOfInt A B C D) (heap-heapOfInt E F G H) I) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) (G heapOfInt) (H heapOfInt) (I heapOfInt) (J Bool) (K heapOfInt) ) - (=> - (and - (>= F B) - (mergea F G K I) - (merge (heap-heapOfInt A B C D) H K) - ) - (merge (heap-heapOfInt A B C D) (heap-heapOfInt E F G H) I) - ) - ) -) -(assert - (forall ( (A Bool) ) - (=> - (= A true) - (hasleftistproperty hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) (F Int) (G Int) (H Int) ) - (=> - (and - (= E true) - (= A (+ 1 F)) - (hasleftistproperty C E) - (hasleftistproperty D E) - (<= G H) - (rightheight C H) - (rightheight D G) - (rightheight D F) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) ) - (=> - (and - (= E false) - (hasleftistproperty C E) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) ) - (=> - (and - (= E false) - (hasleftistproperty D E) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) (F Int) (G Int) ) - (=> - (and - (= E false) - (> F G) - (rightheight C G) - (rightheight D F) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) (F Int) ) - (=> - (and - (= E false) - (not (= A (+ 1 F))) - (rightheight D F) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A heapOfInt) (B Int) (C heapOfInt) (D Int) ) - (=> - (and - (= D 1) - (merge (heap-heapOfInt D B hleaf-heapOfInt hleaf-heapOfInt) A C) - ) - (hinsert A B C) - ) - ) -) -(assert - (forall ( (A heapOfInt) ) - (hinsertall nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C heapOfInt) (D heapOfInt) (E heapOfInt) ) - (=> - (and - (hinsertall B C E) - (hinsert E A D) - ) - (hinsertall (cons-listOfInt A B) C D) - ) - ) -) -(assert - (forall ( (A Bool) (B Bool) (C listOfInt) (D heapOfInt) (E heapOfInt) ) - (=> - (and - (= A true) - (not (= B true)) - (hinsertall C D E) - (hasleftistproperty E B) - (hasleftistproperty D A) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal3.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal3.smt2 deleted file mode 100644 index 78881d78b..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal3.smt2 +++ /dev/null @@ -1,201 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((heapOfInt 0) ) -(((heap-heapOfInt (rk-heapOfInt Int) (value-heapOfInt Int) (left-heapOfInt heapOfInt) (right-heapOfInt heapOfInt)) (hleaf-heapOfInt)))) -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun rightheight (heapOfInt Int) Bool) -(declare-fun rank (heapOfInt Int) Bool) -(declare-fun mergea (Int heapOfInt heapOfInt heapOfInt) Bool) -(declare-fun merge (heapOfInt heapOfInt heapOfInt) Bool) -(declare-fun hasleftistproperty (heapOfInt Bool) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (rightheight hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) ) - (=> - (and - (= E (+ 1 F)) - (rightheight D F) - ) - (rightheight (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (rank hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) ) - (rank (heap-heapOfInt A B C D) A) - ) -) -(assert - (forall ( (A Int) (B heapOfInt) (C heapOfInt) (D Int) (E Bool) (F Int) (G Int) (H Int) ) - (=> - (and - (= D (+ 1 F)) - (<= G H) - (rank B H) - (rank C G) - (rank C F) - ) - (mergea A B C (heap-heapOfInt D A B C) ) - ) - ) -) -(assert - (forall ( (A Int) (B heapOfInt) (C heapOfInt) (D Int) (E Bool) (F Int) (G Int) (H Int) ) - (=> - (and - (= D (+ 1 F)) - (> G H) - (rank B H) - (rank C G) - (rank B F) - ) - (mergea A B C (heap-heapOfInt D A C B) ) - ) - ) -) - -(assert - (forall ( (A heapOfInt) ) - (merge A hleaf-heapOfInt A) - ) -) -(assert - (forall ( (A heapOfInt) ) - (merge hleaf-heapOfInt A A) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) (G heapOfInt) (H heapOfInt) (I heapOfInt) (J Bool) (K heapOfInt) ) - (=> - (and - (< F B) - (mergea B C K I) - (merge D (heap-heapOfInt E F G H) K) - ) - (merge (heap-heapOfInt A B C D) (heap-heapOfInt E F G H) I) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) (G heapOfInt) (H heapOfInt) (I heapOfInt) (J Bool) (K heapOfInt) ) - (=> - (and - (>= F B) - (mergea F G K I) - (merge (heap-heapOfInt A B C D) H K) - ) - (merge (heap-heapOfInt A B C D) (heap-heapOfInt E F G H) I) - ) - ) -) -(assert - (forall ( (A Bool) ) - (=> - (= A true) - (hasleftistproperty hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) (F Int) (G Int) (H Int) ) - (=> - (and - (= E true) - (= A (+ 1 F)) - (hasleftistproperty C E) - (hasleftistproperty D E) - (<= G H) - (rightheight C H) - (rightheight D G) - (rightheight D F) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) ) - (=> - (and - (= E false) - (hasleftistproperty C E) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) ) - (=> - (and - (= E false) - (hasleftistproperty D E) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) (F Int) (G Int) ) - (=> - (and - (= E false) - (> F G) - (rightheight C G) - (rightheight D F) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) (F Int) ) - (=> - (and - (= E false) - (not (= A (+ 1 F))) - (rightheight D F) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Bool) (B Bool) (C Int) (D heapOfInt) (E heapOfInt) (F heapOfInt) ) - (=> - (and - (= A true) - (= A true) - (= A true) - (not (= B true)) - (mergea C D E F) - (hasleftistproperty F B) - (hasleftistproperty D A) - (hasleftistproperty E A) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal4.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal4.smt2 deleted file mode 100644 index a2bbdf67b..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal4.smt2 +++ /dev/null @@ -1,201 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((heapOfInt 0) ) -(((heap-heapOfInt (rk-heapOfInt Int) (value-heapOfInt Int) (left-heapOfInt heapOfInt) (right-heapOfInt heapOfInt)) (hleaf-heapOfInt)))) -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun rightheight (heapOfInt Int) Bool) -(declare-fun rank (heapOfInt Int) Bool) -(declare-fun mergea (Int heapOfInt heapOfInt heapOfInt) Bool) -(declare-fun merge (heapOfInt heapOfInt heapOfInt) Bool) -(declare-fun hasleftistproperty (heapOfInt Bool) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (rightheight hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) ) - (=> - (and - (= E (+ 1 F)) - (rightheight D F) - ) - (rightheight (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (rank hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) ) - (rank (heap-heapOfInt A B C D) A) - ) -) -(assert - (forall ( (A Int) (B heapOfInt) (C heapOfInt) (D Int) (E Bool) (F Int) (G Int) (H Int) ) - (=> - (and - (= D (+ 1 F)) - (<= G H) - (rank B H) - (rank C G) - (rank C F) - ) - (mergea A B C (heap-heapOfInt D A B C) ) - ) - ) -) -(assert - (forall ( (A Int) (B heapOfInt) (C heapOfInt) (D Int) (E Bool) (F Int) (G Int) (H Int) ) - (=> - (and - (= D (+ 1 F)) - (> G H) - (rank B H) - (rank C G) - (rank B F) - ) - (mergea A B C (heap-heapOfInt D A C B) ) - ) - ) -) - -(assert - (forall ( (A heapOfInt) ) - (merge A hleaf-heapOfInt A) - ) -) -(assert - (forall ( (A heapOfInt) ) - (merge hleaf-heapOfInt A A) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) (G heapOfInt) (H heapOfInt) (I heapOfInt) (J Bool) (K heapOfInt) ) - (=> - (and - (< F B) - (mergea B C K I) - (merge D (heap-heapOfInt E F G H) K) - ) - (merge (heap-heapOfInt A B C D) (heap-heapOfInt E F G H) I) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) (G heapOfInt) (H heapOfInt) (I heapOfInt) (J Bool) (K heapOfInt) ) - (=> - (and - (>= F B) - (mergea F G K I) - (merge (heap-heapOfInt A B C D) H K) - ) - (merge (heap-heapOfInt A B C D) (heap-heapOfInt E F G H) I) - ) - ) -) -(assert - (forall ( (A Bool) ) - (=> - (= A true) - (hasleftistproperty hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) (F Int) (G Int) (H Int) ) - (=> - (and - (= E true) - (= A (+ 1 F)) - (hasleftistproperty C E) - (hasleftistproperty D E) - (<= G H) - (rightheight C H) - (rightheight D G) - (rightheight D F) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) ) - (=> - (and - (= E false) - (hasleftistproperty C E) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) ) - (=> - (and - (= E false) - (hasleftistproperty D E) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) (F Int) (G Int) ) - (=> - (and - (= E false) - (> F G) - (rightheight C G) - (rightheight D F) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) (F Int) ) - (=> - (and - (= E false) - (not (= A (+ 1 F))) - (rightheight D F) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Bool) (B Bool) (C heapOfInt) (D heapOfInt) (E heapOfInt) ) - (=> - (and - (= A true) - (= A true) - (= A true) - (not (= B true)) - (merge C D E) - (hasleftistproperty E B) - (hasleftistproperty C A) - (hasleftistproperty D A) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal5.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal5.smt2 deleted file mode 100644 index a2bbdf67b..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal5.smt2 +++ /dev/null @@ -1,201 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((heapOfInt 0) ) -(((heap-heapOfInt (rk-heapOfInt Int) (value-heapOfInt Int) (left-heapOfInt heapOfInt) (right-heapOfInt heapOfInt)) (hleaf-heapOfInt)))) -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun rightheight (heapOfInt Int) Bool) -(declare-fun rank (heapOfInt Int) Bool) -(declare-fun mergea (Int heapOfInt heapOfInt heapOfInt) Bool) -(declare-fun merge (heapOfInt heapOfInt heapOfInt) Bool) -(declare-fun hasleftistproperty (heapOfInt Bool) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (rightheight hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) ) - (=> - (and - (= E (+ 1 F)) - (rightheight D F) - ) - (rightheight (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (rank hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) ) - (rank (heap-heapOfInt A B C D) A) - ) -) -(assert - (forall ( (A Int) (B heapOfInt) (C heapOfInt) (D Int) (E Bool) (F Int) (G Int) (H Int) ) - (=> - (and - (= D (+ 1 F)) - (<= G H) - (rank B H) - (rank C G) - (rank C F) - ) - (mergea A B C (heap-heapOfInt D A B C) ) - ) - ) -) -(assert - (forall ( (A Int) (B heapOfInt) (C heapOfInt) (D Int) (E Bool) (F Int) (G Int) (H Int) ) - (=> - (and - (= D (+ 1 F)) - (> G H) - (rank B H) - (rank C G) - (rank B F) - ) - (mergea A B C (heap-heapOfInt D A C B) ) - ) - ) -) - -(assert - (forall ( (A heapOfInt) ) - (merge A hleaf-heapOfInt A) - ) -) -(assert - (forall ( (A heapOfInt) ) - (merge hleaf-heapOfInt A A) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) (G heapOfInt) (H heapOfInt) (I heapOfInt) (J Bool) (K heapOfInt) ) - (=> - (and - (< F B) - (mergea B C K I) - (merge D (heap-heapOfInt E F G H) K) - ) - (merge (heap-heapOfInt A B C D) (heap-heapOfInt E F G H) I) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) (G heapOfInt) (H heapOfInt) (I heapOfInt) (J Bool) (K heapOfInt) ) - (=> - (and - (>= F B) - (mergea F G K I) - (merge (heap-heapOfInt A B C D) H K) - ) - (merge (heap-heapOfInt A B C D) (heap-heapOfInt E F G H) I) - ) - ) -) -(assert - (forall ( (A Bool) ) - (=> - (= A true) - (hasleftistproperty hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) (F Int) (G Int) (H Int) ) - (=> - (and - (= E true) - (= A (+ 1 F)) - (hasleftistproperty C E) - (hasleftistproperty D E) - (<= G H) - (rightheight C H) - (rightheight D G) - (rightheight D F) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) ) - (=> - (and - (= E false) - (hasleftistproperty C E) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) ) - (=> - (and - (= E false) - (hasleftistproperty D E) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) (F Int) (G Int) ) - (=> - (and - (= E false) - (> F G) - (rightheight C G) - (rightheight D F) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) (F Int) ) - (=> - (and - (= E false) - (not (= A (+ 1 F))) - (rightheight D F) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Bool) (B Bool) (C heapOfInt) (D heapOfInt) (E heapOfInt) ) - (=> - (and - (= A true) - (= A true) - (= A true) - (not (= B true)) - (merge C D E) - (hasleftistproperty E B) - (hasleftistproperty C A) - (hasleftistproperty D A) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal6.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal6.smt2 deleted file mode 100644 index b67f137b9..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal6.smt2 +++ /dev/null @@ -1,224 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((heapOfInt 0) ) -(((heap-heapOfInt (rk-heapOfInt Int) (value-heapOfInt Int) (left-heapOfInt heapOfInt) (right-heapOfInt heapOfInt)) (hleaf-heapOfInt)))) -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun rightheight (heapOfInt Int) Bool) -(declare-fun rank (heapOfInt Int) Bool) -(declare-fun mergea (Int heapOfInt heapOfInt heapOfInt) Bool) -(declare-fun merge (heapOfInt heapOfInt heapOfInt) Bool) -(declare-fun hsize (heapOfInt Int) Bool) -(declare-fun hasleftistproperty (heapOfInt Bool) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (rightheight hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) ) - (=> - (and - (= E (+ 1 F)) - (rightheight D F) - ) - (rightheight (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (rank hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) ) - (rank (heap-heapOfInt A B C D) A) - ) -) -(assert - (forall ( (A Int) (B heapOfInt) (C heapOfInt) (D Int) (E Bool) (F Int) (G Int) (H Int) ) - (=> - (and - (= D (+ 1 F)) - (<= G H) - (rank B H) - (rank C G) - (rank C F) - ) - (mergea A B C (heap-heapOfInt D A B C) ) - ) - ) -) -(assert - (forall ( (A Int) (B heapOfInt) (C heapOfInt) (D Int) (E Bool) (F Int) (G Int) (H Int) ) - (=> - (and - (= D (+ 1 F)) - (> G H) - (rank B H) - (rank C G) - (rank B F) - ) - (mergea A B C (heap-heapOfInt D A C B) ) - ) - ) -) - -(assert - (forall ( (A heapOfInt) ) - (merge A hleaf-heapOfInt A) - ) -) -(assert - (forall ( (A heapOfInt) ) - (merge hleaf-heapOfInt A A) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) (G heapOfInt) (H heapOfInt) (I heapOfInt) (J Bool) (K heapOfInt) ) - (=> - (and - (< F B) - (mergea B C K I) - (merge D (heap-heapOfInt E F G H) K) - ) - (merge (heap-heapOfInt A B C D) (heap-heapOfInt E F G H) I) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) (G heapOfInt) (H heapOfInt) (I heapOfInt) (J Bool) (K heapOfInt) ) - (=> - (and - (>= F B) - (mergea F G K I) - (merge (heap-heapOfInt A B C D) H K) - ) - (merge (heap-heapOfInt A B C D) (heap-heapOfInt E F G H) I) - ) - ) -) -(assert - (forall ( (A Bool) ) - (=> - (= A true) - (hasleftistproperty hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) (F Int) (G Int) (H Int) ) - (=> - (and - (= E true) - (= A (+ 1 F)) - (hasleftistproperty C E) - (hasleftistproperty D E) - (<= G H) - (rightheight C H) - (rightheight D G) - (rightheight D F) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) ) - (=> - (and - (= E false) - (hasleftistproperty C E) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) ) - (=> - (and - (= E false) - (hasleftistproperty D E) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) (F Int) (G Int) ) - (=> - (and - (= E false) - (> F G) - (rightheight C G) - (rightheight D F) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) (F Int) ) - (=> - (and - (= E false) - (not (= A (+ 1 F))) - (rightheight D F) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (hsize hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) (G Int) (H Int) ) - (=> - (and - (= E (+ 1 F)) - (hsize C G) - (hsize D H) - (= F (+ G H)) - ) - (hsize (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Bool) (B Int) (C Int) (D Int) (E Int) (F Int) (G heapOfInt) (H heapOfInt) (I heapOfInt) ) - (=> - (and - (= A true) - (not (= B (+ C 1))) - (= (+ D E) C) - (mergea F G H I) - (hsize I B) - (hsize G D) - (hsize H E) - (hasleftistproperty G A) - (hasleftistproperty H A) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal7.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal7.smt2 deleted file mode 100644 index 792749aaf..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal7.smt2 +++ /dev/null @@ -1,224 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((heapOfInt 0) ) -(((heap-heapOfInt (rk-heapOfInt Int) (value-heapOfInt Int) (left-heapOfInt heapOfInt) (right-heapOfInt heapOfInt)) (hleaf-heapOfInt)))) -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun rightheight (heapOfInt Int) Bool) -(declare-fun rank (heapOfInt Int) Bool) -(declare-fun mergea (Int heapOfInt heapOfInt heapOfInt) Bool) -(declare-fun merge (heapOfInt heapOfInt heapOfInt) Bool) -(declare-fun hsize (heapOfInt Int) Bool) -(declare-fun hasleftistproperty (heapOfInt Bool) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (rightheight hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) ) - (=> - (and - (= E (+ 1 F)) - (rightheight D F) - ) - (rightheight (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (rank hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) ) - (rank (heap-heapOfInt A B C D) A) - ) -) -(assert - (forall ( (A Int) (B heapOfInt) (C heapOfInt) (D Int) (E Bool) (F Int) (G Int) (H Int) ) - (=> - (and - (= D (+ 1 F)) - (<= G H) - (rank B H) - (rank C G) - (rank C F) - ) - (mergea A B C (heap-heapOfInt D A B C) ) - ) - ) -) -(assert - (forall ( (A Int) (B heapOfInt) (C heapOfInt) (D Int) (E Bool) (F Int) (G Int) (H Int) ) - (=> - (and - (= D (+ 1 F)) - (> G H) - (rank B H) - (rank C G) - (rank B F) - ) - (mergea A B C (heap-heapOfInt D A C B) ) - ) - ) -) - -(assert - (forall ( (A heapOfInt) ) - (merge A hleaf-heapOfInt A) - ) -) -(assert - (forall ( (A heapOfInt) ) - (merge hleaf-heapOfInt A A) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) (G heapOfInt) (H heapOfInt) (I heapOfInt) (J Bool) (K heapOfInt) ) - (=> - (and - (< F B) - (mergea B C K I) - (merge D (heap-heapOfInt E F G H) K) - ) - (merge (heap-heapOfInt A B C D) (heap-heapOfInt E F G H) I) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) (G heapOfInt) (H heapOfInt) (I heapOfInt) (J Bool) (K heapOfInt) ) - (=> - (and - (>= F B) - (mergea F G K I) - (merge (heap-heapOfInt A B C D) H K) - ) - (merge (heap-heapOfInt A B C D) (heap-heapOfInt E F G H) I) - ) - ) -) -(assert - (forall ( (A Bool) ) - (=> - (= A true) - (hasleftistproperty hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) (F Int) (G Int) (H Int) ) - (=> - (and - (= E true) - (= A (+ 1 F)) - (hasleftistproperty C E) - (hasleftistproperty D E) - (<= G H) - (rightheight C H) - (rightheight D G) - (rightheight D F) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) ) - (=> - (and - (= E false) - (hasleftistproperty C E) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) ) - (=> - (and - (= E false) - (hasleftistproperty D E) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) (F Int) (G Int) ) - (=> - (and - (= E false) - (> F G) - (rightheight C G) - (rightheight D F) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) (F Int) ) - (=> - (and - (= E false) - (not (= A (+ 1 F))) - (rightheight D F) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (hsize hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) (G Int) (H Int) ) - (=> - (and - (= E (+ 1 F)) - (hsize C G) - (hsize D H) - (= F (+ G H)) - ) - (hsize (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Bool) (B Int) (C Int) (D Int) (E Int) (F heapOfInt) (G heapOfInt) (H heapOfInt) ) - (=> - (and - (= A true) - (not (= B C)) - (= (+ D E) B) - (merge F G H) - (hsize H C) - (hsize F D) - (hsize G E) - (hasleftistproperty F A) - (hasleftistproperty G A) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal8.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal8.smt2 deleted file mode 100644 index 72f8fb780..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal8.smt2 +++ /dev/null @@ -1,233 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((heapOfInt 0) ) -(((heap-heapOfInt (rk-heapOfInt Int) (value-heapOfInt Int) (left-heapOfInt heapOfInt) (right-heapOfInt heapOfInt)) (hleaf-heapOfInt)))) -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun rightheight (heapOfInt Int) Bool) -(declare-fun rank (heapOfInt Int) Bool) -(declare-fun mergea (Int heapOfInt heapOfInt heapOfInt) Bool) -(declare-fun merge (heapOfInt heapOfInt heapOfInt) Bool) -(declare-fun hsize (heapOfInt Int) Bool) -(declare-fun hasleftistproperty (heapOfInt Bool) Bool) -(declare-fun hinsert (heapOfInt Int heapOfInt) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (rightheight hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) ) - (=> - (and - (= E (+ 1 F)) - (rightheight D F) - ) - (rightheight (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (rank hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) ) - (rank (heap-heapOfInt A B C D) A) - ) -) -(assert - (forall ( (A Int) (B heapOfInt) (C heapOfInt) (D Int) (E Bool) (F Int) (G Int) (H Int) ) - (=> - (and - (= D (+ 1 F)) - (<= G H) - (rank B H) - (rank C G) - (rank C F) - ) - (mergea A B C (heap-heapOfInt D A B C) ) - ) - ) -) -(assert - (forall ( (A Int) (B heapOfInt) (C heapOfInt) (D Int) (E Bool) (F Int) (G Int) (H Int) ) - (=> - (and - (= D (+ 1 F)) - (> G H) - (rank B H) - (rank C G) - (rank B F) - ) - (mergea A B C (heap-heapOfInt D A C B) ) - ) - ) -) - -(assert - (forall ( (A heapOfInt) ) - (merge A hleaf-heapOfInt A) - ) -) -(assert - (forall ( (A heapOfInt) ) - (merge hleaf-heapOfInt A A) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) (G heapOfInt) (H heapOfInt) (I heapOfInt) (J Bool) (K heapOfInt) ) - (=> - (and - (< F B) - (mergea B C K I) - (merge D (heap-heapOfInt E F G H) K) - ) - (merge (heap-heapOfInt A B C D) (heap-heapOfInt E F G H) I) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) (G heapOfInt) (H heapOfInt) (I heapOfInt) (J Bool) (K heapOfInt) ) - (=> - (and - (>= F B) - (mergea F G K I) - (merge (heap-heapOfInt A B C D) H K) - ) - (merge (heap-heapOfInt A B C D) (heap-heapOfInt E F G H) I) - ) - ) -) -(assert - (forall ( (A Bool) ) - (=> - (= A true) - (hasleftistproperty hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) (F Int) (G Int) (H Int) ) - (=> - (and - (= E true) - (= A (+ 1 F)) - (hasleftistproperty C E) - (hasleftistproperty D E) - (<= G H) - (rightheight C H) - (rightheight D G) - (rightheight D F) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) ) - (=> - (and - (= E false) - (hasleftistproperty C E) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) ) - (=> - (and - (= E false) - (hasleftistproperty D E) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) (F Int) (G Int) ) - (=> - (and - (= E false) - (> F G) - (rightheight C G) - (rightheight D F) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) (F Int) ) - (=> - (and - (= E false) - (not (= A (+ 1 F))) - (rightheight D F) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (hsize hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) (G Int) (H Int) ) - (=> - (and - (= E (+ 1 F)) - (hsize C G) - (hsize D H) - (= F (+ G H)) - ) - (hsize (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A heapOfInt) (B Int) (C heapOfInt) (D Int) ) - (=> - (and - (= D 1) - (merge (heap-heapOfInt D B hleaf-heapOfInt hleaf-heapOfInt) A C) - ) - (hinsert A B C) - ) - ) -) -(assert - (forall ( (A Bool) (B Int) (C Int) (D heapOfInt) (E Int) (F heapOfInt) ) - (=> - (and - (= A true) - (not (= (- B C) 1)) - (hinsert D E F) - (hsize F B) - (hsize D C) - (hasleftistproperty D A) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal9.smt2 b/bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal9.smt2 deleted file mode 100644 index a059d22b5..000000000 --- a/bench_horn_adt/benchmarks-vmcai2015/leon/heap/heap-goal9.smt2 +++ /dev/null @@ -1,272 +0,0 @@ -(set-logic HORN) - -(declare-datatypes ((heapOfInt 0) ) -(((heap-heapOfInt (rk-heapOfInt Int) (value-heapOfInt Int) (left-heapOfInt heapOfInt) (right-heapOfInt heapOfInt)) (hleaf-heapOfInt)))) -(declare-datatypes ((listOfInt 0) ) -(((cons-listOfInt (head-listOfInt Int) (tail-listOfInt listOfInt)) (nil-listOfInt)))) - -(declare-fun len (listOfInt Int) Bool) -(declare-fun rightheight (heapOfInt Int) Bool) -(declare-fun rank (heapOfInt Int) Bool) -(declare-fun mergea (Int heapOfInt heapOfInt heapOfInt) Bool) -(declare-fun merge (heapOfInt heapOfInt heapOfInt) Bool) -(declare-fun hsize (heapOfInt Int) Bool) -(declare-fun hasleftistproperty (heapOfInt Bool) Bool) -(declare-fun hinsert (heapOfInt Int heapOfInt) Bool) -(declare-fun hinsertall (listOfInt heapOfInt heapOfInt) Bool) -(declare-fun ff () Bool) - -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (len nil-listOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C Int) (D Int) ) - (=> - (and - (= C (+ 1 D)) - (len B D) - ) - (len (cons-listOfInt A B) C) - ) - ) -) -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (rightheight hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) ) - (=> - (and - (= E (+ 1 F)) - (rightheight D F) - ) - (rightheight (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (rank hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) ) - (rank (heap-heapOfInt A B C D) A) - ) -) -(assert - (forall ( (A Int) (B heapOfInt) (C heapOfInt) (D Int) (E Bool) (F Int) (G Int) (H Int) ) - (=> - (and - (= D (+ 1 F)) - (<= G H) - (rank B H) - (rank C G) - (rank C F) - ) - (mergea A B C (heap-heapOfInt D A B C) ) - ) - ) -) -(assert - (forall ( (A Int) (B heapOfInt) (C heapOfInt) (D Int) (E Bool) (F Int) (G Int) (H Int) ) - (=> - (and - (= D (+ 1 F)) - (> G H) - (rank B H) - (rank C G) - (rank B F) - ) - (mergea A B C (heap-heapOfInt D A C B) ) - ) - ) -) - -(assert - (forall ( (A heapOfInt) ) - (merge A hleaf-heapOfInt A) - ) -) -(assert - (forall ( (A heapOfInt) ) - (merge hleaf-heapOfInt A A) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) (G heapOfInt) (H heapOfInt) (I heapOfInt) (J Bool) (K heapOfInt) ) - (=> - (and - (< F B) - (mergea B C K I) - (merge D (heap-heapOfInt E F G H) K) - ) - (merge (heap-heapOfInt A B C D) (heap-heapOfInt E F G H) I) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) (G heapOfInt) (H heapOfInt) (I heapOfInt) (J Bool) (K heapOfInt) ) - (=> - (and - (>= F B) - (mergea F G K I) - (merge (heap-heapOfInt A B C D) H K) - ) - (merge (heap-heapOfInt A B C D) (heap-heapOfInt E F G H) I) - ) - ) -) -(assert - (forall ( (A Bool) ) - (=> - (= A true) - (hasleftistproperty hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) (F Int) (G Int) (H Int) ) - (=> - (and - (= E true) - (= A (+ 1 F)) - (hasleftistproperty C E) - (hasleftistproperty D E) - (<= G H) - (rightheight C H) - (rightheight D G) - (rightheight D F) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) ) - (=> - (and - (= E false) - (hasleftistproperty C E) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) ) - (=> - (and - (= E false) - (hasleftistproperty D E) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) (F Int) (G Int) ) - (=> - (and - (= E false) - (> F G) - (rightheight C G) - (rightheight D F) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Bool) (F Int) ) - (=> - (and - (= E false) - (not (= A (+ 1 F))) - (rightheight D F) - ) - (hasleftistproperty (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A Int) ) - (=> - (= A 0) - (hsize hleaf-heapOfInt A) - ) - ) -) -(assert - (forall ( (A Int) (B Int) (C heapOfInt) (D heapOfInt) (E Int) (F Int) (G Int) (H Int) ) - (=> - (and - (= E (+ 1 F)) - (hsize C G) - (hsize D H) - (= F (+ G H)) - ) - (hsize (heap-heapOfInt A B C D) E) - ) - ) -) -(assert - (forall ( (A heapOfInt) (B Int) (C heapOfInt) (D Int) ) - (=> - (and - (= D 1) - (merge (heap-heapOfInt D B hleaf-heapOfInt hleaf-heapOfInt) A C) - ) - (hinsert A B C) - ) - ) -) -(assert - (forall ( (A heapOfInt) ) - (hinsertall nil-listOfInt A A) - ) -) -(assert - (forall ( (A Int) (B listOfInt) (C heapOfInt) (D heapOfInt) (E heapOfInt) ) - (=> - (and - (hinsertall B C E) - (hinsert E A D) - ) - (hinsertall (cons-listOfInt A B) C D) - ) - ) -) -(assert - (forall ( (A Bool) (B Int) (C Int) (D Int) (E Int) (F listOfInt) (G heapOfInt) (H heapOfInt) ) - (=> - (and - (= A true) - (not (= B C)) - (= (+ D E) B) - (hinsertall F G H) - (hsize H C) - (hsize G D) - (len F E) - (hasleftistproperty G A) - ) - ff - ) - ) -) - -(assert (not ff)) -(check-sat) diff --git a/bench_horn_adt/list_remove.smt2 b/bench_horn_adt/list_remove.smt2 deleted file mode 100644 index e610aa552..000000000 --- a/bench_horn_adt/list_remove.smt2 +++ /dev/null @@ -1,26 +0,0 @@ -(set-logic HORN) -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) -(declare-fun length (Lst Int) Bool) - -(assert (length nil 0)) -(assert (forall ((x Int) (xs Lst) (ys Lst) (l Int)) - (=> (and (= xs (cons x ys)) (length ys l)) (length xs (+ l 1))))) - -(declare-fun remove (Lst Int Lst) Bool) - -(assert (forall ((x Int)) (remove nil x nil))) -(assert (forall ((x Int) (xs Lst) (ys Lst)) - (=> (= xs (cons x ys)) (remove xs x ys)))) -(assert (forall ((x Int) (xs Lst) (n Int) (ys Lst) (zs Lst)) - (=> (and (= xs (cons x ys)) (remove ys n zs)) (remove xs n zs)))) - -(declare-fun contains (Lst Int Bool) Bool) -(assert (forall ((x Int)) (contains nil x false))) -(assert (forall ((x Int) (xs Lst)) (contains (cons x xs) x true))) -(assert (forall ((x Int) (xs Lst) (ys Lst) (n Int) (r Bool)) - (=> (and (= xs (cons x ys)) (contains ys n r)) (contains xs n r)))) - -(assert (forall ((n Int) (xs Lst) (ys Lst) (l1 Int) (l2 Int)) - (=> (and (contains xs n true) (remove xs n ys) (length xs l1) (length ys l2) - (not (= l1 l2))) false))) -(check-sat) diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/heap_size.smt2.err b/bench_horn_adt/log-2023-04-19-10-48-12/heap_size.smt2.err deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/heap_size.smt2.err.tmp b/bench_horn_adt/log-2023-04-19-10-48-12/heap_size.smt2.err.tmp deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/heap_size.smt2.out b/bench_horn_adt/log-2023-04-19-10-48-12/heap_size.smt2.out deleted file mode 100644 index 941023b02..000000000 --- a/bench_horn_adt/log-2023-04-19-10-48-12/heap_size.smt2.out +++ /dev/null @@ -1,4 +0,0 @@ -((hsize _FH_0')=_FH_1') -((hsize hleaf)=0) -(forall (INT INT (Heap) (Heap)) (true->((hsize (heap k v _FH_0 _FH_3))=[+ (hsize _FH_0) (hsize _FH_3) 1]))) -sat diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_append_ass.smt2.err b/bench_horn_adt/log-2023-04-19-10-48-12/list_append_ass.smt2.err deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_append_ass.smt2.err.tmp b/bench_horn_adt/log-2023-04-19-10-48-12/list_append_ass.smt2.err.tmp deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_append_ass.smt2.out b/bench_horn_adt/log-2023-04-19-10-48-12/list_append_ass.smt2.out deleted file mode 100644 index e75c6be81..000000000 --- a/bench_horn_adt/log-2023-04-19-10-48-12/list_append_ass.smt2.out +++ /dev/null @@ -1,4 +0,0 @@ -((append _FH_0' _FH_1')=_FH_2') -(forall ((Lst)) ((append nil _FH_2')=_FH_2')) -(forall (INT (Lst) (Lst)) ((append (cons x _FH_0) _FH_1)=(cons x (append _FH_0 _FH_1)))) -sat diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_append_len.smt2.err b/bench_horn_adt/log-2023-04-19-10-48-12/list_append_len.smt2.err deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_append_len.smt2.err.tmp b/bench_horn_adt/log-2023-04-19-10-48-12/list_append_len.smt2.err.tmp deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_append_len.smt2.out b/bench_horn_adt/log-2023-04-19-10-48-12/list_append_len.smt2.out deleted file mode 100644 index 3795bdab4..000000000 --- a/bench_horn_adt/log-2023-04-19-10-48-12/list_append_len.smt2.out +++ /dev/null @@ -1,7 +0,0 @@ -((length _FH_0')=_FH_1') -((length nil)=0) -(forall (INT (Lst)) (true->((length (cons x _FH_0))=((length _FH_0)+1)))) -((append _FH_2' _FH_3')=_FH_4') -(forall ((Lst)) ((append nil _FH_4')=_FH_4')) -(forall (INT (Lst) (Lst)) ((append (cons x _FH_2) _FH_3)=(cons x (append _FH_2 _FH_3)))) -sat diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_append_min.smt2.err b/bench_horn_adt/log-2023-04-19-10-48-12/list_append_min.smt2.err deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_append_min.smt2.err.tmp b/bench_horn_adt/log-2023-04-19-10-48-12/list_append_min.smt2.err.tmp deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_append_min.smt2.out b/bench_horn_adt/log-2023-04-19-10-48-12/list_append_min.smt2.out deleted file mode 100644 index da8f5fe65..000000000 --- a/bench_horn_adt/log-2023-04-19-10-48-12/list_append_min.smt2.out +++ /dev/null @@ -1,7 +0,0 @@ -((append _FH_0' _FH_1')=_FH_2') -(forall ((Lst)) ((append nil _FH_2')=_FH_2')) -(forall (INT (Lst) (Lst)) ((append (cons x _FH_0) _FH_1)=(cons x (append _FH_0 _FH_1)))) -((min _FH_3')=_FH_4') -((min nil)=0) -(forall (INT (Lst)) ((min (cons x _FH_3))=ite((min _FH_3)((sum (cons x _FH_3))=(x+(sum _FH_3))))) -sat diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_interleave.smt2.err b/bench_horn_adt/log-2023-04-19-10-48-12/list_interleave.smt2.err deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_interleave.smt2.err.tmp b/bench_horn_adt/log-2023-04-19-10-48-12/list_interleave.smt2.err.tmp deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_interleave.smt2.out b/bench_horn_adt/log-2023-04-19-10-48-12/list_interleave.smt2.out deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_len.smt2.err b/bench_horn_adt/log-2023-04-19-10-48-12/list_len.smt2.err deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_len.smt2.err.tmp b/bench_horn_adt/log-2023-04-19-10-48-12/list_len.smt2.err.tmp deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_len.smt2.out b/bench_horn_adt/log-2023-04-19-10-48-12/list_len.smt2.out deleted file mode 100644 index 7df8a170e..000000000 --- a/bench_horn_adt/log-2023-04-19-10-48-12/list_len.smt2.out +++ /dev/null @@ -1,4 +0,0 @@ -((length _FH_0')=_FH_1') -((length nil)=0) -(forall (INT (Lst)) (true->((length (cons x _FH_0))=((length _FH_0)+1)))) -sat diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_len_butlast.smt2.err b/bench_horn_adt/log-2023-04-19-10-48-12/list_len_butlast.smt2.err deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_len_butlast.smt2.err.tmp b/bench_horn_adt/log-2023-04-19-10-48-12/list_len_butlast.smt2.err.tmp deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_len_butlast.smt2.out b/bench_horn_adt/log-2023-04-19-10-48-12/list_len_butlast.smt2.out deleted file mode 100644 index 71c182ae1..000000000 --- a/bench_horn_adt/log-2023-04-19-10-48-12/list_len_butlast.smt2.out +++ /dev/null @@ -1,7 +0,0 @@ -((length _FH_0')=_FH_1') -((length nil)=0) -(forall (INT (Lst)) (true->((length (cons x _FH_0))=((length _FH_0)+1)))) -((butlast _FH_2')=_FH_3') -((butlast nil)=nil) -(forall (INT (Lst)) ((butlast (cons n _FH_2))=ite(_FH_2=nil, nil, (cons n (butlast _FH_2))))) -sat diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_len_stren.smt2.err b/bench_horn_adt/log-2023-04-19-10-48-12/list_len_stren.smt2.err deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_len_stren.smt2.err.tmp b/bench_horn_adt/log-2023-04-19-10-48-12/list_len_stren.smt2.err.tmp deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_len_stren.smt2.out b/bench_horn_adt/log-2023-04-19-10-48-12/list_len_stren.smt2.out deleted file mode 100644 index 5a17c2ee1..000000000 --- a/bench_horn_adt/log-2023-04-19-10-48-12/list_len_stren.smt2.out +++ /dev/null @@ -1,7 +0,0 @@ -((length _FH_0')=_FH_1') -((length nil)=0) -(forall (INT (Lst)) (true->((length (cons x _FH_0))=((length _FH_0)+1)))) -((length_str _FH_2')=_FH_3') -((length_str nil)=0) -(forall (INT (Lst)) (true->((length_str (cons x _FH_2))=((length_str _FH_2)+(length _FH_2))))) -sat diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_min_max.smt2.err b/bench_horn_adt/log-2023-04-19-10-48-12/list_min_max.smt2.err deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_min_max.smt2.err.tmp b/bench_horn_adt/log-2023-04-19-10-48-12/list_min_max.smt2.err.tmp deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_min_max.smt2.out b/bench_horn_adt/log-2023-04-19-10-48-12/list_min_max.smt2.out deleted file mode 100644 index 6f92b8b7b..000000000 --- a/bench_horn_adt/log-2023-04-19-10-48-12/list_min_max.smt2.out +++ /dev/null @@ -1,7 +0,0 @@ -((min _FH_0')=_FH_1') -((min nil)=0) -(forall (INT (Lst)) ((min (cons x _FH_0))=ite((min _FH_0)x, (max _FH_2), x))) -sat diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_min_sum.smt2.err b/bench_horn_adt/log-2023-04-19-10-48-12/list_min_sum.smt2.err deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_min_sum.smt2.err.tmp b/bench_horn_adt/log-2023-04-19-10-48-12/list_min_sum.smt2.err.tmp deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_min_sum.smt2.out b/bench_horn_adt/log-2023-04-19-10-48-12/list_min_sum.smt2.out deleted file mode 100644 index 1a50d78ee..000000000 --- a/bench_horn_adt/log-2023-04-19-10-48-12/list_min_sum.smt2.out +++ /dev/null @@ -1,7 +0,0 @@ -((min _FH_0')=_FH_1') -((min nil)=0) -(forall (INT (Lst)) ((min (cons x _FH_0))=ite((min _FH_0)((sum (cons x _FH_2))=(x+(sum _FH_2))))) -sat diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_min_sum_len.smt2.err b/bench_horn_adt/log-2023-04-19-10-48-12/list_min_sum_len.smt2.err deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_min_sum_len.smt2.err.tmp b/bench_horn_adt/log-2023-04-19-10-48-12/list_min_sum_len.smt2.err.tmp deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_min_sum_len.smt2.out b/bench_horn_adt/log-2023-04-19-10-48-12/list_min_sum_len.smt2.out deleted file mode 100644 index 178d10721..000000000 --- a/bench_horn_adt/log-2023-04-19-10-48-12/list_min_sum_len.smt2.out +++ /dev/null @@ -1,10 +0,0 @@ -((min _FH_0')=_FH_1') -((min nil)=0) -(forall (INT (Lst)) ((min (cons x _FH_0))=ite((min _FH_0)((sum (cons x _FH_2))=(x+(sum _FH_2))))) -((length _FH_4')=_FH_5') -((length nil)=0) -(forall (INT (Lst)) (true->((length (cons x _FH_4))=((length _FH_4)+1)))) -sat diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_rev.smt2.err b/bench_horn_adt/log-2023-04-19-10-48-12/list_rev.smt2.err deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_rev.smt2.err.tmp b/bench_horn_adt/log-2023-04-19-10-48-12/list_rev.smt2.err.tmp deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_rev.smt2.out b/bench_horn_adt/log-2023-04-19-10-48-12/list_rev.smt2.out deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_rev2_append.smt2.err b/bench_horn_adt/log-2023-04-19-10-48-12/list_rev2_append.smt2.err deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_rev2_append.smt2.err.tmp b/bench_horn_adt/log-2023-04-19-10-48-12/list_rev2_append.smt2.err.tmp deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_rev2_append.smt2.out b/bench_horn_adt/log-2023-04-19-10-48-12/list_rev2_append.smt2.out deleted file mode 100644 index 04319f50b..000000000 --- a/bench_horn_adt/log-2023-04-19-10-48-12/list_rev2_append.smt2.out +++ /dev/null @@ -1,7 +0,0 @@ -((append _FH_0' _FH_1')=_FH_2') -(forall ((Lst)) ((append nil _FH_2')=_FH_2')) -(forall (INT (Lst) (Lst)) ((append (cons x _FH_0) _FH_1)=(cons x (append _FH_0 _FH_1)))) -((rev2 _FH_3' _FH_4')=_FH_5') -(forall ((Lst)) ((rev2 nil _FH_5')=_FH_5')) -(forall (INT (Lst) (Lst)) ((rev2 (cons x _FH_3) _FH_4')=(rev2 _FH_3 (cons x _FH_4')))) -sat diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_rev2_len.smt2.err b/bench_horn_adt/log-2023-04-19-10-48-12/list_rev2_len.smt2.err deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_rev2_len.smt2.err.tmp b/bench_horn_adt/log-2023-04-19-10-48-12/list_rev2_len.smt2.err.tmp deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_rev2_len.smt2.out b/bench_horn_adt/log-2023-04-19-10-48-12/list_rev2_len.smt2.out deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_rev_append.smt2.err b/bench_horn_adt/log-2023-04-19-10-48-12/list_rev_append.smt2.err deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_rev_append.smt2.err.tmp b/bench_horn_adt/log-2023-04-19-10-48-12/list_rev_append.smt2.err.tmp deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_rev_append.smt2.out b/bench_horn_adt/log-2023-04-19-10-48-12/list_rev_append.smt2.out deleted file mode 100644 index 920733172..000000000 --- a/bench_horn_adt/log-2023-04-19-10-48-12/list_rev_append.smt2.out +++ /dev/null @@ -1,7 +0,0 @@ -((append _FH_0' _FH_1')=_FH_2') -(forall ((Lst)) ((append nil _FH_2')=_FH_2')) -(forall (INT (Lst) (Lst)) ((append (cons x _FH_0) _FH_1)=(cons x (append _FH_0 _FH_1)))) -((rev _FH_3')=_FH_4') -((rev nil)=nil) -(forall (INT (Lst)) ((rev (cons x _FH_3))=(append (rev _FH_3) (cons x nil)))) -sat diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_rev_len.smt2.err b/bench_horn_adt/log-2023-04-19-10-48-12/list_rev_len.smt2.err deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_rev_len.smt2.err.tmp b/bench_horn_adt/log-2023-04-19-10-48-12/list_rev_len.smt2.err.tmp deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/list_rev_len.smt2.out b/bench_horn_adt/log-2023-04-19-10-48-12/list_rev_len.smt2.out deleted file mode 100644 index 166b794fd..000000000 --- a/bench_horn_adt/log-2023-04-19-10-48-12/list_rev_len.smt2.out +++ /dev/null @@ -1,10 +0,0 @@ -((append _FH_0' _FH_1')=_FH_2') -(forall ((Lst)) ((append nil _FH_2')=_FH_2')) -(forall (INT (Lst) (Lst)) ((append (cons x _FH_0) _FH_1)=(cons x (append _FH_0 _FH_1)))) -((rev _FH_3')=_FH_4') -((rev nil)=nil) -(forall (INT (Lst)) ((rev (cons x _FH_3))=(append (rev _FH_3) (cons x nil)))) -((length _FH_5')=_FH_6') -((length nil)=0) -(forall (INT (Lst)) (true->((length (cons x _FH_5))=((length _FH_5)+1)))) -sat diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/queue_amort.smt2.err b/bench_horn_adt/log-2023-04-19-10-48-12/queue_amort.smt2.err deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/queue_amort.smt2.err.tmp b/bench_horn_adt/log-2023-04-19-10-48-12/queue_amort.smt2.err.tmp deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/queue_amort.smt2.out b/bench_horn_adt/log-2023-04-19-10-48-12/queue_amort.smt2.out deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/queue_len.smt2.err.tmp b/bench_horn_adt/log-2023-04-19-10-48-12/queue_len.smt2.err.tmp deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/log-2023-04-19-10-48-12/queue_len.smt2.out b/bench_horn_adt/log-2023-04-19-10-48-12/queue_len.smt2.out deleted file mode 100644 index e69de29bb..000000000 diff --git a/bench_horn_adt/remove_not_contained.smt2 b/bench_horn_adt/remove_not_contained.smt2 deleted file mode 100644 index 146f2602d..000000000 --- a/bench_horn_adt/remove_not_contained.smt2 +++ /dev/null @@ -1,25 +0,0 @@ -(set-logic HORN) -(declare-datatypes () ((Lst (cons (head Int) (tail Lst)) (nil)))) -(declare-fun length (Lst Int) Bool) - -(assert (length nil 0)) -(assert (forall ((x Int) (xs Lst) (ys Lst) (l Int)) - (=> (and (= xs (cons x ys)) (length ys l)) (length xs (+ l 1))))) - -(declare-fun remove (Lst Int Lst) Bool) - -(assert (forall ((x Int)) (remove nil x nil))) -(assert (forall ((x Int) (xs Lst) (ys Lst)) - (=> (= xs (cons x ys)) (remove xs x ys)))) -(assert (forall ((x Int) (xs Lst) (n Int) (ys Lst) (zs Lst)) - (=> (and (= xs (cons x ys)) (remove ys n zs)) (remove xs n zs)))) - -(declare-fun contains (Lst Int Bool) Bool) -(assert (forall ((x Int)) (contains nil x false))) -(assert (forall ((x Int) (xs Lst)) (contains (cons x xs) x true))) -(assert (forall ((x Int) (xs Lst) (ys Lst) (n Int) (r Bool)) - (=> (and (= xs (cons x ys)) (contains ys n r)) (contains xs n r)))) - -(assert (forall ((n Int) (xs Lst) (ys Lst)) - (=> (and (contains xs n false) (remove xs n ys) (not (= xs ys))) false))) -(check-sat) diff --git a/bench_horn_adt/run-bench.sh b/bench_horn_adt/run-bench.sh deleted file mode 100755 index 6c8e41157..000000000 --- a/bench_horn_adt/run-bench.sh +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/bash -echo "This is the script for running regression tests" -echo " - date: $(date '+%Y-%m-%d at %H:%M.%S')" -echo " - host name $(hostname -f)" -echo " - script path: $(readlink -f $0)" - -adtchc=../adtchc -if [[ ! $# -eq 0 ]] ; then - #echo 'Setting path to' $1 - adtchc=$1 -fi - -# run the interpolating version of OpenSMT -adtchc=${adtchc}' -i' - -picky=./utils/picky.smt2 -lookahead=./utils/lookahead.smt2 - -tmpfolder=log-$(date '+%Y-%m-%d-%H-%M-%S') -mkdir ${tmpfolder} - -export outmod=false -export errmod=false -export rtmod=false -export err=false - -for file in $(find . -name '*.smt2' |sort); do - name=$(basename $file) - dir=$(dirname $file) - - sh -c "ulimit -St 60; ${adtchc} $dir/$name > $tmpfolder/$name.out 2>$tmpfolder/$name.err.tmp" 2>/dev/null - grep -v '^;' $tmpfolder/$name.err.tmp > $tmpfolder/$name.err - - if [ -s "$tmpfolder/$name.err" ]; then - echo "stderr not empty for benchmark $file"; - err=true; - fi - - -done -#echo "Stdout differs: ${outmod}, stderr differs: ${errmod}" - -if [[ ${err} == true ]]; then - echo "There were anomalies: check logs in ${tmpfolder}" - exit 1 -else - rm -rf ${tmpfolder} -fi - diff --git a/bench_sim/list_arr_extra_1.smt2 b/bench_sim/list_arr_extra_1.smt2 deleted file mode 100644 index 2898e8d00..000000000 --- a/bench_sim/list_arr_extra_1.smt2 +++ /dev/null @@ -1,20 +0,0 @@ -(declare-sort Elem) -(declare-datatypes () ((Lst (cons (head Elem) (tail Lst)) (nil)))) - -(declare-fun xs () Lst) -(declare-fun xs1 () Lst) -(declare-fun h () Elem) -(declare-fun n () Int) -(declare-fun A () (Array Int Elem)) - -(declare-fun R (Lst Int (Array Int Elem)) Bool) - -(assert (forall ((n Int) (A (Array Int Elem))) (= (R nil n A) (= n 0)))) - -(assert (forall ((xs Lst) (h Elem) (n Int) (A (Array Int Elem))) - (= (R (cons h xs) n A) (and (> n 0) (R xs (- n 1) A) (= h (select A (- n 1))))))) - -(assert (not (forall ((n Int) (n1 Int) (xs Lst) (h Elem) (A (Array Int Elem))) - (=> (and (>= n1 n) (R xs n A)) (R xs n (store A n1 h)))))) - -(check-sat) diff --git a/bench_sim/list_arr_extra_2.smt2 b/bench_sim/list_arr_extra_2.smt2 deleted file mode 100644 index 3d99869de..000000000 --- a/bench_sim/list_arr_extra_2.smt2 +++ /dev/null @@ -1,14 +0,0 @@ -(declare-sort Elem) -(declare-datatypes () ((Lst (cons (head Elem) (tail Lst)) (nil)))) - -(declare-fun R (Lst Int (Array Int Elem)) Bool) - -(assert (forall ((n Int) (A (Array Int Elem))) (= (R nil n A) (= n 0)))) - -(assert (forall ((xs Lst) (h Elem) (n Int) (A (Array Int Elem))) - (= (R (cons h xs) n A) (and (> n 0) (R xs (- n 1) A) (= h (select A (- n 1))))))) - -(assert (not (forall ((xs Lst) (n Int) (A (Array Int Elem))) - (=> (R xs n A) (>= n 0))))) - -(check-sat) diff --git a/bench_sim/list_arr_pop.smt2 b/bench_sim/list_arr_pop.smt2 deleted file mode 100644 index 6c04839e1..000000000 --- a/bench_sim/list_arr_pop.smt2 +++ /dev/null @@ -1,22 +0,0 @@ -(declare-sort Elem) -(declare-datatypes () ((Lst (cons (head Elem) (tail Lst)) (nil)))) - -; pop - -(declare-fun xs () Lst) -(declare-fun xs1 () Lst) -(declare-fun h () Elem) -(declare-fun n () Int) -(declare-fun A () (Array Int Elem)) - -(declare-fun R (Lst Int (Array Int Elem)) Bool) - -(assert (forall ((n Int) (A (Array Int Elem))) (= (R nil n A) (= n 0)))) - -(assert (forall ((xs Lst) (h Elem) (n Int) (A (Array Int Elem))) - (= (R (cons h xs) n A) (and (> n 0) (R xs (- n 1) A) (= h (select A (- n 1))))))) - -(assert (and (= xs1 (cons h xs)) (R xs1 n A))) - -(assert (not (R xs (- n 1) A))) -(check-sat) diff --git a/bench_sim/list_arr_push.smt2 b/bench_sim/list_arr_push.smt2 deleted file mode 100644 index 6a5360d68..000000000 --- a/bench_sim/list_arr_push.smt2 +++ /dev/null @@ -1,32 +0,0 @@ -(declare-sort Elem) -(declare-datatypes () ((Lst (cons (head Elem) (tail Lst)) (nil)))) - -; push - -(declare-fun xs () Lst) -(declare-fun xs1 () Lst) -(declare-fun h () Elem) -(declare-fun n () Int) -(declare-fun n1 () Int) -(declare-fun A () (Array Int Elem)) -(declare-fun A1 () (Array Int Elem)) - -(declare-fun R (Lst Int (Array Int Elem)) Bool) - -(assert (forall ((n Int) (A (Array Int Elem))) (= (R nil n A) (= n 0)))) - -(assert (forall ((xs Lst) (h Elem) (n Int) (A (Array Int Elem))) - (= (R (cons h xs) n A) (and (> n 0) (R xs (- n 1) A) (= h (select A (- n 1))))))) - -;extra lemma: -(assert (forall ((n Int) (n1 Int) (xs Lst) (h Elem) (A (Array Int Elem))) - (=> (and (>= n1 n) (R xs n A)) (R xs n (store A n1 h))))) - -;extra lemma: -(assert (forall ((xs Lst) (n Int) (A (Array Int Elem))) - (=> (R xs n A) (>= n 0)))) - -(assert (and (= xs1 (cons h xs)) (= A1 (store A n h)) (= n1 (+ n 1)) (R xs n A))) - -(assert (not (R xs1 n1 A1))) -(check-sat) diff --git a/bench_sim/queue_arr_de.smt2 b/bench_sim/queue_arr_de.smt2 deleted file mode 100644 index 51b585279..000000000 --- a/bench_sim/queue_arr_de.smt2 +++ /dev/null @@ -1,41 +0,0 @@ -(declare-sort Elem) -(declare-datatypes () ((Lst (cons (head Elem) (tail Lst)) (nil)))) - -(declare-fun allbutlast (Lst) Lst) -(assert (forall ((x Elem)) (= (allbutlast (cons x nil)) nil))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) (= (allbutlast (cons x (cons y xs))) (cons x (allbutlast (cons y xs)))))) - -(declare-fun last (Lst) Elem) -(assert (forall ((x Elem)) (= (last (cons x nil)) x))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) (= (last (cons x (cons y xs))) (last (cons y xs))))) - -; dequeue - -(declare-fun xs () Lst) -(declare-fun n () Int) -(declare-fun m () Int) -(declare-fun A () (Array Int Elem)) - -(declare-fun R (Lst Int Int (Array Int Elem)) Bool) - -(assert (forall ((n Int) (m Int) (A (Array Int Elem))) - (= (R nil m n A) (= m n)))) - -(assert (forall ((xs Lst) (h Elem) (m Int) (n Int) (A (Array Int Elem))) - (= (R (cons h xs) m n A) - (and (< m n) - (= h (select A (- n 1))) - (R xs m (- n 1) A))))) - -; extra lemma -(assert (forall ((xs Lst) (m Int) (n Int) (A (Array Int Elem))) (=> (R xs m n A) (<= m n)))) - -; extra lemma: -(assert (forall ((m Int) (n Int) (n1 Int) (xs Lst) (h Elem) (A (Array Int Elem))) - (=> (and (>= n1 n) (R xs m n A)) (R xs m n (store A n1 h))))) - -(assert (and (R xs m n A) (distinct xs nil))) - -(assert (not (R (allbutlast xs) (+ m 1) n A))) - -(check-sat) diff --git a/bench_sim/queue_arr_en.smt2 b/bench_sim/queue_arr_en.smt2 deleted file mode 100644 index 29e3c0744..000000000 --- a/bench_sim/queue_arr_en.smt2 +++ /dev/null @@ -1,39 +0,0 @@ -(declare-sort Elem) -(declare-datatypes () ((Lst (cons (head Elem) (tail Lst)) (nil)))) - -; enqueue - -(declare-fun xs () Lst) -(declare-fun xs1 () Lst) -(declare-fun h () Elem) -(declare-fun n () Int) -(declare-fun m () Int) -(declare-fun A () (Array Int Elem)) -(declare-fun A1 () (Array Int Elem)) - -(declare-fun R (Lst Int Int (Array Int Elem)) Bool) - -(assert (forall ((n Int) (m Int) (A (Array Int Elem))) - (= (R nil m n A) (= m n)))) - -(assert (forall ((xs Lst) (h Elem) (m Int) (n Int) (A (Array Int Elem))) - (= (R (cons h xs) m n A) - (and (< m n) - (= h (select A (- n 1))) - (R xs m (- n 1) A))))) - -; extra lemma: -(assert (forall ((m Int) (n Int) (n1 Int) (xs Lst) (h Elem) (A (Array Int Elem))) - (=> (and (>= n1 n) (R xs m n A)) (R xs m n (store A n1 h))))) - -; extra lemma -(assert (forall ((xs Lst) (m Int) (n Int) (A (Array Int Elem))) - (=> (R xs m n A) (<= m n)))) - -(assert (and (R xs m n A) - (= xs1 (cons h xs)) - (= A1 (store A n h)))) - -(assert (not (R xs1 m (+ n 1) A1))) - -(check-sat) diff --git a/bench_sim/queue_arr_extra_1.smt2 b/bench_sim/queue_arr_extra_1.smt2 deleted file mode 100644 index f7dcdc4ad..000000000 --- a/bench_sim/queue_arr_extra_1.smt2 +++ /dev/null @@ -1,18 +0,0 @@ -(declare-sort Elem) -(declare-datatypes () ((Lst (cons (head Elem) (tail Lst)) (nil)))) - -(declare-fun allbutlast (Lst) Lst) -(assert (forall ((x Elem)) (= (allbutlast (cons x nil)) nil))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) (= (allbutlast (cons x (cons y xs))) (cons x (allbutlast (cons y xs)))))) - -(declare-fun last (Lst) Elem) -(assert (forall ((x Elem)) (= (last (cons x nil)) x))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) (= (last (cons x (cons y xs))) (last (cons y xs))))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Elem) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(assert (not (forall ((xs Lst)) (=> (not (= xs nil)) (= xs (append (allbutlast xs) (cons (last xs) nil))))))) - -(check-sat) diff --git a/bench_sim/queue_arr_extra_2.smt2 b/bench_sim/queue_arr_extra_2.smt2 deleted file mode 100644 index 965a82d42..000000000 --- a/bench_sim/queue_arr_extra_2.smt2 +++ /dev/null @@ -1,37 +0,0 @@ -(declare-sort Elem) -(declare-datatypes () ((Lst (cons (head Elem) (tail Lst)) (nil)))) - -(declare-fun allbutlast (Lst) Lst) -(assert (forall ((x Elem)) (= (allbutlast (cons x nil)) nil))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) (= (allbutlast (cons x (cons y xs))) (cons x (allbutlast (cons y xs)))))) - -(declare-fun last (Lst) Elem) -(assert (forall ((x Elem)) (= (last (cons x nil)) x))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) (= (last (cons x (cons y xs))) (last (cons y xs))))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Elem) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(declare-fun R (Lst Int Int (Array Int Elem)) Bool) - -(assert (forall ((n Int) (m Int) (A (Array Int Elem))) - (= (R nil m n A) (= m n)))) - -(assert (forall ((xs Lst) (h Elem) (m Int) (n Int) (A (Array Int Elem))) - (= (R (cons h xs) m n A) - (and (< m n) - (= h (select A (- n 1))) - (R xs m (- n 1) A))))) - -; extra lemma - -(assert (forall ((xs Lst) (m Int) (n Int) (A (Array Int Elem))) (=> (R xs m n A) (<= m n)))) - -; extra lemma: -(assert (forall ((xs Lst)) (=> (not (= xs nil)) (= xs (append (allbutlast xs) (cons (last xs) nil)))))) - -; not used -(assert (not (forall ((xs Lst) (m Int) (n Int) (A (Array Int Elem))) (=> (and (distinct xs nil) (R xs m n A)) (R (allbutlast xs) (+ m 1) n A))))) - -(check-sat) diff --git a/bench_sim/queue_arr_extra_3.smt2 b/bench_sim/queue_arr_extra_3.smt2 deleted file mode 100644 index 05326ecfb..000000000 --- a/bench_sim/queue_arr_extra_3.smt2 +++ /dev/null @@ -1,17 +0,0 @@ -(declare-sort Elem) -(declare-datatypes () ((Lst (cons (head Elem) (tail Lst)) (nil)))) - -(declare-fun R (Lst Int Int (Array Int Elem)) Bool) - -(assert (forall ((n Int) (m Int) (A (Array Int Elem))) - (= (R nil m n A) (= m n)))) - -(assert (forall ((xs Lst) (h Elem) (m Int) (n Int) (A (Array Int Elem))) - (= (R (cons h xs) m n A) - (and (< m n) - (= h (select A (- n 1))) - (R xs m (- n 1) A))))) - -(assert (not (forall ((xs Lst) (m Int) (n Int) (A (Array Int Elem))) (=> (R xs m n A) (<= m n))))) - -(check-sat) diff --git a/bench_sim/queue_arr_extra_4.smt2 b/bench_sim/queue_arr_extra_4.smt2 deleted file mode 100644 index d13a24314..000000000 --- a/bench_sim/queue_arr_extra_4.smt2 +++ /dev/null @@ -1,18 +0,0 @@ -(declare-sort Elem) -(declare-datatypes () ((Lst (cons (head Elem) (tail Lst)) (nil)))) - -(declare-fun R (Lst Int Int (Array Int Elem)) Bool) - -(assert (forall ((n Int) (m Int) (A (Array Int Elem))) - (= (R nil m n A) (= m n)))) - -(assert (forall ((xs Lst) (h Elem) (m Int) (n Int) (A (Array Int Elem))) - (= (R (cons h xs) m n A) - (and (< m n) - (= h (select A (- n 1))) - (R xs m (- n 1) A))))) - -(assert (not (forall ((m Int) (n Int) (n1 Int) (xs Lst) (h Elem) (A (Array Int Elem))) - (=> (and (>= n1 n) (R xs m n A)) (R xs m n (store A n1 h)))))) - -(check-sat) diff --git a/bench_sim/queue_rev_extra_1.smt2 b/bench_sim/queue_rev_extra_1.smt2 deleted file mode 100644 index b8181d08b..000000000 --- a/bench_sim/queue_rev_extra_1.smt2 +++ /dev/null @@ -1,14 +0,0 @@ -(declare-sort Elem) -(declare-datatypes () ((Lst (cons (head Elem) (tail Lst)) (nil)))) - -(declare-fun snoc (Lst Elem) Lst) -(assert (forall ((x Elem)) (= (snoc nil x) (cons x nil)))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) (= (snoc (cons y xs) x) (cons y (snoc xs x))))) - -(declare-fun append (Lst Lst) Lst) -(assert (forall ((x Lst)) (= (append nil x) x))) -(assert (forall ((x Elem) (y Lst) (z Lst)) (= (append (cons x y) z) (cons x (append y z))))) - -(assert (not (forall ((xs Lst) (x Elem)) (= (snoc xs x) (append xs (cons x nil)))))) - -(check-sat) diff --git a/bench_sim/run-bench.sh b/bench_sim/run-bench.sh deleted file mode 100755 index 6c8e41157..000000000 --- a/bench_sim/run-bench.sh +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/bash -echo "This is the script for running regression tests" -echo " - date: $(date '+%Y-%m-%d at %H:%M.%S')" -echo " - host name $(hostname -f)" -echo " - script path: $(readlink -f $0)" - -adtchc=../adtchc -if [[ ! $# -eq 0 ]] ; then - #echo 'Setting path to' $1 - adtchc=$1 -fi - -# run the interpolating version of OpenSMT -adtchc=${adtchc}' -i' - -picky=./utils/picky.smt2 -lookahead=./utils/lookahead.smt2 - -tmpfolder=log-$(date '+%Y-%m-%d-%H-%M-%S') -mkdir ${tmpfolder} - -export outmod=false -export errmod=false -export rtmod=false -export err=false - -for file in $(find . -name '*.smt2' |sort); do - name=$(basename $file) - dir=$(dirname $file) - - sh -c "ulimit -St 60; ${adtchc} $dir/$name > $tmpfolder/$name.out 2>$tmpfolder/$name.err.tmp" 2>/dev/null - grep -v '^;' $tmpfolder/$name.err.tmp > $tmpfolder/$name.err - - if [ -s "$tmpfolder/$name.err" ]; then - echo "stderr not empty for benchmark $file"; - err=true; - fi - - -done -#echo "Stdout differs: ${outmod}, stderr differs: ${errmod}" - -if [[ ${err} == true ]]; then - echo "There were anomalies: check logs in ${tmpfolder}" - exit 1 -else - rm -rf ${tmpfolder} -fi - diff --git a/bench_sim/set_dupl_consume.smt2 b/bench_sim/set_dupl_consume.smt2 deleted file mode 100644 index 84c55509b..000000000 --- a/bench_sim/set_dupl_consume.smt2 +++ /dev/null @@ -1,34 +0,0 @@ -(declare-sort Elem) -(declare-datatypes () ((Lst (cons (head Elem) (tail Lst)) (nil)))) - -(declare-fun R (Lst (Array Elem Bool)) Bool) - -(declare-fun C (Elem Lst) Bool) -(assert (forall ((x Elem)) (= (C x nil) false))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) (= (C x (cons y xs)) (or (= x y) (C x xs))))) - -(assert (forall ((A (Array Elem Bool))) (= (R nil A) (forall ((a Elem)) (= false (select A a)))))) -(assert (forall ((xs Lst) (out Elem) (A (Array Elem Bool))) - (= (R (cons out xs) A) (and (select A out) - (ite (C out xs) (R xs A) (R xs (store A out false))))))) - -(declare-fun removeall (Elem Lst) Lst) -(assert (forall ((x Elem)) (= (removeall x nil) nil))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) - (= (removeall x (cons y xs)) (ite (= x y) (removeall x xs) (cons y (removeall x xs)))))) - -(assert (forall ((xs Lst) (x Elem) (y Elem)) - (=> (not (C x xs)) (not (C x (removeall y xs)))))) - -(assert (forall ((xs Lst) (x Elem) (y Elem)) - (=> (and (C x xs) (distinct y x)) (C x (removeall y xs))))) - -(assert (forall ((xs Lst) (x Elem)) - (=> (not (C x xs)) - (= (removeall x xs) xs)))) - -; solved with --early-split 1 - -(assert (not - (forall ((xs Lst) (in Elem) (A (Array Elem Bool))) - (=> (R xs A) (R (removeall in xs) (store A in false)))))) diff --git a/bench_sim/set_dupl_extra_1.smt2 b/bench_sim/set_dupl_extra_1.smt2 deleted file mode 100644 index 842ddd451..000000000 --- a/bench_sim/set_dupl_extra_1.smt2 +++ /dev/null @@ -1,11 +0,0 @@ -(declare-sort Elem) -(declare-datatypes () ((Lst (cons (head Elem) (tail Lst)) (nil)))) - -(declare-fun R (Lst (Array Elem Bool)) Bool) - -(declare-fun C (Elem Lst) Bool) -(assert (forall ((x Elem)) (= (C x nil) false))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) (= (C x (cons y xs)) (or (= x y) (C x xs))))) - -; extra lemmas about C -(assert (not (forall ((xs Lst) (x Elem) (y Elem)) (=> (C x xs) (=> (C y (cons x xs)) (C y xs)))))) diff --git a/bench_sim/set_dupl_extra_2.smt2 b/bench_sim/set_dupl_extra_2.smt2 deleted file mode 100644 index f59852970..000000000 --- a/bench_sim/set_dupl_extra_2.smt2 +++ /dev/null @@ -1,16 +0,0 @@ -(declare-sort Elem) -(declare-datatypes () ((Lst (cons (head Elem) (tail Lst)) (nil)))) - -(declare-fun R (Lst (Array Elem Bool)) Bool) - -(declare-fun C (Elem Lst) Bool) -(assert (forall ((x Elem)) (= (C x nil) false))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) (= (C x (cons y xs)) (or (= x y) (C x xs))))) - -(assert (forall ((A (Array Elem Bool))) (= (R nil A) (forall ((a Elem)) (= false (select A a)))))) -(assert (forall ((xs Lst) (out Elem) (A (Array Elem Bool))) - (= (R (cons out xs) A) (and (select A out) - (ite (C out xs) (R xs A) (R xs (store A out false))))))) - -(assert (not (forall ((xs Lst) (A (Array Elem Bool)) (x Elem)) - (=> (and (R xs A) (not (C x xs))) (= A (store A x false)))))) diff --git a/bench_sim/set_dupl_extra_3.smt2 b/bench_sim/set_dupl_extra_3.smt2 deleted file mode 100644 index 092be9d73..000000000 --- a/bench_sim/set_dupl_extra_3.smt2 +++ /dev/null @@ -1,16 +0,0 @@ -(declare-sort Elem) -(declare-datatypes () ((Lst (cons (head Elem) (tail Lst)) (nil)))) - -(declare-fun R (Lst (Array Elem Bool)) Bool) - -(declare-fun C (Elem Lst) Bool) -(assert (forall ((x Elem)) (= (C x nil) false))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) (= (C x (cons y xs)) (or (= x y) (C x xs))))) - -(assert (forall ((A (Array Elem Bool))) (= (R nil A) (forall ((a Elem)) (= false (select A a)))))) -(assert (forall ((xs Lst) (out Elem) (A (Array Elem Bool))) - (= (R (cons out xs) A) (and (select A out) - (ite (C out xs) (R xs A) (R xs (store A out false))))))) - -(assert (not (forall ((xs Lst) (A (Array Elem Bool)) (y Elem)) - (=> (and (R xs A) (C y xs)) (= A (store A y true)))))) diff --git a/bench_sim/set_dupl_extra_4.smt2 b/bench_sim/set_dupl_extra_4.smt2 deleted file mode 100644 index 0bccde424..000000000 --- a/bench_sim/set_dupl_extra_4.smt2 +++ /dev/null @@ -1,25 +0,0 @@ -(declare-sort Elem) -(declare-datatypes () ((Lst (cons (head Elem) (tail Lst)) (nil)))) - -(declare-fun R (Lst (Array Elem Bool)) Bool) - -(declare-fun C (Elem Lst) Bool) -(assert (forall ((x Elem)) (= (C x nil) false))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) (= (C x (cons y xs)) (or (= x y) (C x xs))))) - -(assert (forall ((A (Array Elem Bool))) (= (R nil A) (forall ((a Elem)) (= false (select A a)))))) -(assert (forall ((xs Lst) (out Elem) (A (Array Elem Bool))) - (= (R (cons out xs) A) (and (select A out) - (ite (C out xs) (R xs A) (R xs (store A out false))))))) - -(declare-fun removeall (Elem Lst) Lst) -(assert (forall ((x Elem)) (= (removeall x nil) nil))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) - (= (removeall x (cons y xs)) (ite (= x y) (removeall x xs) (cons y (removeall x xs)))))) - -; extra lemma 2 -(assert (forall ((xs Lst) (A (Array Elem Bool)) (x Elem)) - (=> (and (R xs A) (not (C x xs))) (= A (store A x false))))) - -(assert (not (forall ((xs Lst) (A (Array Elem Bool)) (x Elem)) - (=> (and (not (C x xs)) (R xs A)) (R (removeall x xs) A))))) diff --git a/bench_sim/set_dupl_extra_5.smt2 b/bench_sim/set_dupl_extra_5.smt2 deleted file mode 100644 index 58870ee11..000000000 --- a/bench_sim/set_dupl_extra_5.smt2 +++ /dev/null @@ -1,16 +0,0 @@ -(declare-sort Elem) -(declare-datatypes () ((Lst (cons (head Elem) (tail Lst)) (nil)))) - -(declare-fun R (Lst (Array Elem Bool)) Bool) - -(declare-fun C (Elem Lst) Bool) -(assert (forall ((x Elem)) (= (C x nil) false))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) (= (C x (cons y xs)) (or (= x y) (C x xs))))) - -(assert (forall ((A (Array Elem Bool))) (= (R nil A) (forall ((a Elem)) (= false (select A a)))))) -(assert (forall ((xs Lst) (out Elem) (A (Array Elem Bool))) - (= (R (cons out xs) A) (and (select A out) - (ite (C out xs) (R xs A) (R xs (store A out false))))))) - -(assert (not (forall ((xs Lst) (A (Array Elem Bool)) (x Elem)) - (=> (and (not (select A x)) (R xs A)) (not (C x xs)))))) diff --git a/bench_sim/set_dupl_extra_6.smt2 b/bench_sim/set_dupl_extra_6.smt2 deleted file mode 100644 index fb947ba3d..000000000 --- a/bench_sim/set_dupl_extra_6.smt2 +++ /dev/null @@ -1,16 +0,0 @@ -(declare-sort Elem) -(declare-datatypes () ((Lst (cons (head Elem) (tail Lst)) (nil)))) - -(declare-fun R (Lst (Array Elem Bool)) Bool) - -(declare-fun C (Elem Lst) Bool) -(assert (forall ((x Elem)) (= (C x nil) false))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) (= (C x (cons y xs)) (or (= x y) (C x xs))))) - -(assert (forall ((A (Array Elem Bool))) (= (R nil A) (forall ((a Elem)) (= false (select A a)))))) -(assert (forall ((xs Lst) (out Elem) (A (Array Elem Bool))) - (= (R (cons out xs) A) (and (select A out) - (ite (C out xs) (R xs A) (R xs (store A out false))))))) - -(assert (not (forall ((xs Lst) (A (Array Elem Bool)) (x Elem)) - (=> (and (select A x) (R xs A)) (C x xs))))) diff --git a/bench_sim/set_dupl_extra_7.smt2 b/bench_sim/set_dupl_extra_7.smt2 deleted file mode 100644 index fb6974550..000000000 --- a/bench_sim/set_dupl_extra_7.smt2 +++ /dev/null @@ -1,22 +0,0 @@ -(declare-sort Elem) -(declare-datatypes () ((Lst (cons (head Elem) (tail Lst)) (nil)))) - -(declare-fun R (Lst (Array Elem Bool)) Bool) - -(declare-fun C (Elem Lst) Bool) -(assert (forall ((x Elem)) (= (C x nil) false))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) (= (C x (cons y xs)) (or (= x y) (C x xs))))) - -(assert (forall ((A (Array Elem Bool))) (= (R nil A) (forall ((a Elem)) (= false (select A a)))))) -(assert (forall ((xs Lst) (out Elem) (A (Array Elem Bool))) - (= (R (cons out xs) A) (and (select A out) - (ite (C out xs) (R xs A) (R xs (store A out false))))))) - -(declare-fun removeall (Elem Lst) Lst) -(assert (forall ((x Elem)) (= (removeall x nil) nil))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) - (= (removeall x (cons y xs)) (ite (= x y) (removeall x xs) (cons y (removeall x xs)))))) - -(assert (not (forall ((xs Lst) (x Elem) (y Elem)) - (=> (not (C x xs)) (not (C x (removeall y xs))))))) - diff --git a/bench_sim/set_dupl_extra_8.smt2 b/bench_sim/set_dupl_extra_8.smt2 deleted file mode 100644 index fa1f43c43..000000000 --- a/bench_sim/set_dupl_extra_8.smt2 +++ /dev/null @@ -1,23 +0,0 @@ -(declare-sort Elem) -(declare-datatypes () ((Lst (cons (head Elem) (tail Lst)) (nil)))) - -(declare-fun R (Lst (Array Elem Bool)) Bool) - -(declare-fun C (Elem Lst) Bool) -(assert (forall ((x Elem)) (= (C x nil) false))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) (= (C x (cons y xs)) (or (= x y) (C x xs))))) - -(assert (forall ((A (Array Elem Bool))) (= (R nil A) (forall ((a Elem)) (= false (select A a)))))) -(assert (forall ((xs Lst) (out Elem) (A (Array Elem Bool))) - (= (R (cons out xs) A) (and (select A out) - (ite (C out xs) (R xs A) (R xs (store A out false))))))) - -(declare-fun removeall (Elem Lst) Lst) -(assert (forall ((x Elem)) (= (removeall x nil) nil))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) - (= (removeall x (cons y xs)) (ite (= x y) (removeall x xs) (cons y (removeall x xs)))))) - -; proved -(assert (not (forall ((xs Lst) (x Elem) (y Elem)) - (=> (and (C x xs) (distinct y x)) (C x (removeall y xs)))))) - diff --git a/bench_sim/set_dupl_extra_9.smt2 b/bench_sim/set_dupl_extra_9.smt2 deleted file mode 100644 index b02ddc61c..000000000 --- a/bench_sim/set_dupl_extra_9.smt2 +++ /dev/null @@ -1,23 +0,0 @@ -(declare-sort Elem) -(declare-datatypes () ((Lst (cons (head Elem) (tail Lst)) (nil)))) - -(declare-fun R (Lst (Array Elem Bool)) Bool) - -(declare-fun C (Elem Lst) Bool) -(assert (forall ((x Elem)) (= (C x nil) false))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) (= (C x (cons y xs)) (or (= x y) (C x xs))))) - -(assert (forall ((A (Array Elem Bool))) (= (R nil A) (forall ((a Elem)) (= false (select A a)))))) -(assert (forall ((xs Lst) (out Elem) (A (Array Elem Bool))) - (= (R (cons out xs) A) (and (select A out) - (ite (C out xs) (R xs A) (R xs (store A out false))))))) - -(declare-fun removeall (Elem Lst) Lst) -(assert (forall ((x Elem)) (= (removeall x nil) nil))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) - (= (removeall x (cons y xs)) (ite (= x y) (removeall x xs) (cons y (removeall x xs)))))) - -; proved -(assert (not (forall ((xs Lst) (x Elem)) - (=> (not (C x xs)) - (= (removeall x xs) xs))))) diff --git a/bench_sim/set_dupl_produce.smt2 b/bench_sim/set_dupl_produce.smt2 deleted file mode 100644 index 9efc35b20..000000000 --- a/bench_sim/set_dupl_produce.smt2 +++ /dev/null @@ -1,27 +0,0 @@ -(declare-sort Elem) -(declare-datatypes () ((Lst (cons (head Elem) (tail Lst)) (nil)))) - -(declare-fun R (Lst (Array Elem Bool)) Bool) - -(declare-fun C (Elem Lst) Bool) -(assert (forall ((x Elem)) (= (C x nil) false))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) (= (C x (cons y xs)) (or (= x y) (C x xs))))) - -(assert (forall ((A (Array Elem Bool))) (= (R nil A) (forall ((a Elem)) (= false (select A a)))))) -(assert (forall ((xs Lst) (out Elem) (A (Array Elem Bool))) - (= (R (cons out xs) A) (and (select A out) - (ite (C out xs) (R xs A) (R xs (store A out false))))))) - -; extra lemma 1 -(assert (forall ((xs Lst) (A (Array Elem Bool)) (x Elem) (y Elem)) - (=> (and (R xs A) (C y xs)) (= A (store A y true))))) - -; extra lemma 2 -(assert (forall ((xs Lst) (A (Array Elem Bool)) (x Elem)) - (=> (and (R xs A) (not (C x xs))) (= A (store A x false))))) - -; producing op check: - -(assert (not - (forall ((xs Lst) (in Elem) (A (Array Elem Bool))) - (=> (R xs A) (R (cons in xs) (store A in true)))))) diff --git a/bench_sim/set_singl_consume.smt2 b/bench_sim/set_singl_consume.smt2 deleted file mode 100644 index 90ea02f50..000000000 --- a/bench_sim/set_singl_consume.smt2 +++ /dev/null @@ -1,16 +0,0 @@ -(declare-sort Elem) -(declare-datatypes () ((Lst (cons (head Elem) (tail Lst)) (nil)))) - -(declare-fun R (Lst (Array Elem Bool)) Bool) - -(assert (forall ((A (Array Elem Bool))) (= (R nil A) (forall ((a Elem)) (= false (select A a)))))) -(assert (forall ((xs Lst) (out Elem) (A (Array Elem Bool))) - (= (R (cons out xs) A) (and (select A out) (R xs (store A out false)))))) - -(declare-fun remove (Elem Lst) Lst) -(assert (forall ((x Elem)) (= (remove x nil) nil))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) (= (remove x (cons y xs)) (ite (= x y) xs (cons y (remove x xs)))))) - -(assert (not - (forall ((xs Lst) (in Elem) (A (Array Elem Bool))) - (=> (R xs A) (R (remove in xs) (store A in false)))))) diff --git a/bench_sim/set_singl_extra_1.smt2 b/bench_sim/set_singl_extra_1.smt2 deleted file mode 100644 index 45d0a9617..000000000 --- a/bench_sim/set_singl_extra_1.smt2 +++ /dev/null @@ -1,15 +0,0 @@ -(declare-sort Elem) -(declare-datatypes () ((Lst (cons (head Elem) (tail Lst)) (nil)))) - -(declare-fun R (Lst (Array Elem Bool)) Bool) - -(declare-fun C (Elem Lst) Bool) -(assert (forall ((x Elem)) (= (C x nil) false))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) (= (C x (cons y xs)) (or (= x y) (C x xs))))) - -(assert (forall ((A (Array Elem Bool))) (= (R nil A) (forall ((a Elem)) (= false (select A a)))))) -(assert (forall ((xs Lst) (out Elem) (A (Array Elem Bool))) - (= (R (cons out xs) A) (and (select A out) (R xs (store A out false)))))) - -(assert (not (forall ((xs Lst) (A (Array Elem Bool)) (x Elem) (y Elem)) - (=> (and (R xs A) (C y xs)) (= A (store A y true)))))) diff --git a/bench_sim/set_singl_produce.smt2 b/bench_sim/set_singl_produce.smt2 deleted file mode 100644 index a86750d3e..000000000 --- a/bench_sim/set_singl_produce.smt2 +++ /dev/null @@ -1,22 +0,0 @@ -(declare-sort Elem) -(declare-datatypes () ((Lst (cons (head Elem) (tail Lst)) (nil)))) - -(declare-fun R (Lst (Array Elem Bool)) Bool) - -(declare-fun C (Elem Lst) Bool) -(assert (forall ((x Elem)) (= (C x nil) false))) -(assert (forall ((x Elem) (y Elem) (xs Lst)) (= (C x (cons y xs)) (or (= x y) (C x xs))))) - -(assert (forall ((A (Array Elem Bool))) (= (R nil A) (forall ((a Elem)) (= false (select A a)))))) -(assert (forall ((xs Lst) (out Elem) (A (Array Elem Bool))) - (= (R (cons out xs) A) (and (select A out) (R xs (store A out false)))))) - -; extra lemma -(assert (forall ((xs Lst) (A (Array Elem Bool)) (x Elem) (y Elem)) - (=> (and (R xs A) (C y xs)) (= A (store A y true))))) - -; producing op check: - -(assert (not - (forall ((xs Lst) (in Elem) (A (Array Elem Bool))) - (=> (R xs A) (R (ite (C in xs) xs (cons in xs)) (store A in true)))))) From b44c4f1a7b4961aae2385f6093aa82b201ee7088 Mon Sep 17 00:00:00 2001 From: BritikovKI Date: Thu, 23 Jan 2025 17:02:48 +0100 Subject: [PATCH 232/236] Refactoring: Remove DS_Store --- include/.DS_Store | Bin 6148 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 include/.DS_Store diff --git a/include/.DS_Store b/include/.DS_Store deleted file mode 100644 index 9f91342ca2f0fd1fb37dd2cb3361cf3e1080ed40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6148 zcmeHK!EVz)5S>k2>a;@20i<4#EcF`Eq^%H$iwWhxwMKA&Dz&iz3)dUP4mm`Te1?zV z%9rpjoZ!vuR%+64joNC*nti)FGrO86d)GrmYB)^?L|r2Cp^V-Rnl-|9)@#zTGaaDf zHT1`%&L{f_dI%|b&*{5v`j0Bjf}zX_?=OAZ$5u|IOqj~m1UgkkPg6%3-TU3Fq3mQ|g z;>jyt^=#9WK9OGW`m^5ajxcL;Uf~ugJJ~1$_U-p~H@d6a%rW2?xD5>O`4B)ELyL_; zIXcit2>|pkErP!M`~w4?0EQMDgP4IR6ACn;%9a?))(*;q!ya1y#-Ir&B|BpsyR)(t zin67L3dEgMXwbEe0mr~H18pe0J;2OukMj7}ALX*0u From 92e6f9250f40d89c55fe3f7ca9852b3d03d25deb Mon Sep 17 00:00:00 2001 From: BritikovKI Date: Thu, 23 Jan 2025 17:21:11 +0100 Subject: [PATCH 233/236] Nested Loops: removed side files --- include/adt/ADTSolver.hpp | 1837 ------- include/adt/CHCSolver.hpp | 619 --- include/adt/SimSynt.hpp | 697 --- include/deep/BndExpl.hpp | 1189 ----- include/deep/DataLearner.hpp | 751 --- include/deep/Distribution.hpp | 160 - include/deep/LBExpl.hpp | 661 --- include/deep/RndLearner.hpp | 693 --- include/deep/RndLearnerV2.hpp | 391 -- include/deep/RndLearnerV3.hpp | 1832 ------- include/sampl/SeedMiner.hpp | 391 -- tools/CMakeLists.txt | 1 - tools/adt/Adt.cpp | 57 - tools/adt/CHC.cpp | 49 - tools/adt/CMakeLists.txt | 3 - tools/aeval/Ae.cpp | 68 - tools/aeval/CMakeLists.txt | 3 - tools/bnd/BoundedExplorer.cpp | 22 - tools/bnd/CMakeLists.txt | 3 - tools/deep/CMakeLists.txt | 3 - tools/deep/DeepHorn.cpp | 132 - tools/deep_bench/README.md | 11 - tools/deep_bench/linux/ansible/inventory | 10 - tools/deep_bench/linux/ansible/playbook.yml | 114 - tools/deep_bench/linux/packer/worker.json | 41 - .../linux/run-freqhorn-benchmarks.sh | 46 - tools/deep_bench/linux/start-cluster.sh | 20 - tools/deep_bench/linux/terraform/cluster.tf | 186 - tools/deep_bench/scripts/Summarize.ipynb | 4288 ----------------- tools/deep_bench/scripts/all-jobs.py | 59 - .../scripts/benchmark-supervisor.py | 329 -- tools/deep_bench/scripts/benchsistency.py | 68 - tools/deep_bench/scripts/ec2-inv.py | 1701 ------- tools/deep_bench/scripts/mcmcify/mcmcify.py | 285 -- .../scripts/mcmcify/smtlibparser.py | 95 - tools/deep_bench/scripts/merge-times.py | 77 - tools/deep_bench/windows/ansible/README.md | 2 - .../windows/ansible/group_vars/windows.yml | 13 - tools/deep_bench/windows/ansible/inventory | 14 - tools/deep_bench/windows/ansible/playbook.yml | 9 - .../windows/ansible/roles/base/tasks/main.yml | 59 - .../ansible/roles/benchscripts/tasks/main.yml | 34 - .../roles/cygwin-sshd/handlers/main.yml | 6 - .../ansible/roles/cygwin-sshd/tasks/main.yml | 71 - .../windows/ansible/roles/ice/tasks/main.yml | 34 - .../windows/ansible/roles/mcmc/tasks/main.yml | 34 - .../ansible/roles/spacer/tasks/main.yml | 33 - tools/deep_bench/windows/files/.gitempty | 0 .../windows/run-other-benchmarks.sh | 36 - tools/deep_bench/windows/start-cluster.sh | 20 - .../deep_bench/windows/terraform/userdata.tpl | 9 - .../windows/terraform/win-cluster.tf | 221 - tools/ivc/CMakeLists.txt | 3 - tools/ivc/Ivc.cpp | 32 - tools/kind/CMakeLists.txt | 3 - tools/kind/KInduction.cpp | 20 - 56 files changed, 17545 deletions(-) delete mode 100644 include/adt/ADTSolver.hpp delete mode 100644 include/adt/CHCSolver.hpp delete mode 100644 include/adt/SimSynt.hpp delete mode 100644 include/deep/BndExpl.hpp delete mode 100644 include/deep/DataLearner.hpp delete mode 100644 include/deep/Distribution.hpp delete mode 100644 include/deep/LBExpl.hpp delete mode 100644 include/deep/RndLearner.hpp delete mode 100644 include/deep/RndLearnerV2.hpp delete mode 100644 include/deep/RndLearnerV3.hpp delete mode 100644 include/sampl/SeedMiner.hpp delete mode 100644 tools/adt/Adt.cpp delete mode 100644 tools/adt/CHC.cpp delete mode 100644 tools/adt/CMakeLists.txt delete mode 100644 tools/aeval/Ae.cpp delete mode 100644 tools/aeval/CMakeLists.txt delete mode 100644 tools/bnd/BoundedExplorer.cpp delete mode 100644 tools/bnd/CMakeLists.txt delete mode 100644 tools/deep/CMakeLists.txt delete mode 100644 tools/deep/DeepHorn.cpp delete mode 100644 tools/deep_bench/README.md delete mode 100644 tools/deep_bench/linux/ansible/inventory delete mode 100644 tools/deep_bench/linux/ansible/playbook.yml delete mode 100644 tools/deep_bench/linux/packer/worker.json delete mode 100755 tools/deep_bench/linux/run-freqhorn-benchmarks.sh delete mode 100755 tools/deep_bench/linux/start-cluster.sh delete mode 100644 tools/deep_bench/linux/terraform/cluster.tf delete mode 100644 tools/deep_bench/scripts/Summarize.ipynb delete mode 100755 tools/deep_bench/scripts/all-jobs.py delete mode 100755 tools/deep_bench/scripts/benchmark-supervisor.py delete mode 100755 tools/deep_bench/scripts/benchsistency.py delete mode 100755 tools/deep_bench/scripts/ec2-inv.py delete mode 100755 tools/deep_bench/scripts/mcmcify/mcmcify.py delete mode 100644 tools/deep_bench/scripts/mcmcify/smtlibparser.py delete mode 100755 tools/deep_bench/scripts/merge-times.py delete mode 100644 tools/deep_bench/windows/ansible/README.md delete mode 100644 tools/deep_bench/windows/ansible/group_vars/windows.yml delete mode 100644 tools/deep_bench/windows/ansible/inventory delete mode 100644 tools/deep_bench/windows/ansible/playbook.yml delete mode 100644 tools/deep_bench/windows/ansible/roles/base/tasks/main.yml delete mode 100644 tools/deep_bench/windows/ansible/roles/benchscripts/tasks/main.yml delete mode 100644 tools/deep_bench/windows/ansible/roles/cygwin-sshd/handlers/main.yml delete mode 100644 tools/deep_bench/windows/ansible/roles/cygwin-sshd/tasks/main.yml delete mode 100644 tools/deep_bench/windows/ansible/roles/ice/tasks/main.yml delete mode 100644 tools/deep_bench/windows/ansible/roles/mcmc/tasks/main.yml delete mode 100644 tools/deep_bench/windows/ansible/roles/spacer/tasks/main.yml delete mode 100644 tools/deep_bench/windows/files/.gitempty delete mode 100755 tools/deep_bench/windows/run-other-benchmarks.sh delete mode 100755 tools/deep_bench/windows/start-cluster.sh delete mode 100644 tools/deep_bench/windows/terraform/userdata.tpl delete mode 100644 tools/deep_bench/windows/terraform/win-cluster.tf delete mode 100644 tools/ivc/CMakeLists.txt delete mode 100644 tools/ivc/Ivc.cpp delete mode 100644 tools/kind/CMakeLists.txt delete mode 100644 tools/kind/KInduction.cpp diff --git a/include/adt/ADTSolver.hpp b/include/adt/ADTSolver.hpp deleted file mode 100644 index 9cacbe2a5..000000000 --- a/include/adt/ADTSolver.hpp +++ /dev/null @@ -1,1837 +0,0 @@ -#ifndef ADTSOLVER__HPP__ -#define ADTSOLVER__HPP__ -#include -#include - -#include "ae/AeValSolver.hpp" -#include "ae/SMTUtils.hpp" -#include "ufo/Smt/EZ3.hh" - -using namespace std; -using namespace boost; -namespace ufo -{ - class ADTSolver - { - private: - - Expr goal; - ExprVector& assumptions; - ExprVector& constructors; - - map baseConstructors; - map indConstructors; - - ExprFactory &efac; - SMTUtils u; - - ExprVector rewriteHistory; - vector rewriteSequence; - int maxDepth; - int maxGrow; - int mergingIts; - int earlySplit; - bool verbose; - int sp = 2; - int glob_ind = 0; - int lev = 0; - bool useZ3 = false; - unsigned to; - ExprVector blockedAssms; - int nestedLevel; - - public: - - ADTSolver(Expr _goal, ExprVector& _assumptions, ExprVector& _constructors, int _glob_ind = 0, int _lev = 0, int _maxDepth = 5, int _maxGrow = 3, int _mergingIts = 3, int _earlySplit = 1, bool _verbose = false, bool _useZ3 = true, unsigned _to = 1000, unsigned _l = 0) : - goal(_goal), assumptions(_assumptions), constructors(_constructors), glob_ind(_glob_ind), lev(_lev), efac(_goal->getFactory()), u(_goal->getFactory(), _to), maxDepth(_maxDepth), maxGrow(_maxGrow), mergingIts(_mergingIts), earlySplit(_earlySplit), verbose(_verbose), useZ3(_useZ3), to (_to), nestedLevel(_l) - { - // for convenience, rename assumptions (to have unique quantified variables) - renameAssumptions(); - } - - void renameAssumptions() - { - int c = 0; - ExprSet allVars; - filter(conjoin(assumptions, efac), bind::IsConst (), inserter(allVars, allVars.begin())); - - for (int i = 0; i < assumptions.size(); i++) - { - map vars; - getQVars(assumptions[i], vars); - ExprMap replFls; - for (auto & e : vars) - { - ExprMap repls; - for (int j = 0; j < e.first->arity() - 1; j++) - { - Expr v = bind::fapp(e.first->arg(j)); - Expr newVar; - while (true) - { - newVar = cloneVar(v, mkTerm ("_qv_" + to_string(++c), efac)); - if (find(allVars.begin(), allVars.end(), newVar) == allVars.end()) break; - } - repls[v->left()->left()] = newVar->left()->left(); - } - Expr newFla = replaceAll(e.first, replFls); - replFls[e.first] = replaceAll(newFla, repls); - } - assumptions[i] = replaceAll(assumptions[i], replFls); - } - } - - bool simplifyGoal() - { - Expr goalQF = goal->last(); - goalQF = liftITEs(goalQF); - goalQF = u.simplifyITE(goalQF); // TODO: more simplification passes - if (u.isEquiv(goalQF, mk(efac))) return true; - - ExprVector args; - for (int i = 0; i < goal->arity() - 1; i++) - { - if (contains(goal->last(), goal->arg(i))) args.push_back(goal->arg(i)); - } - if (args.size() == 0) goal = goalQF; - else - { - args.push_back(goalQF); - goal = mknary(args); - } - rewriteHistory.push_back(goal); - return false; - } - - bool findAssmOccurs(Expr goal, Expr e, Expr eq) - { - for (auto a : assumptions) - { - if (a == eq) continue; - if (contains(a, e)) return true; - } - return (contains(goal, e)); - } - - void eliminateEqualities(Expr& goal) - { - ExprMap allrepls; - for (auto it = assumptions.begin(); it != assumptions.end();) - { - Expr &a = *it; - if (isOpX(a)) - { - ExprMap repls; - if (findAssmOccurs(goal, a->left(), a) > 0 && a->left()->arity() == 1 - && !contains (a->right(), a->left())) - repls[a->left()] = a->right(); - else if (findAssmOccurs(goal, a->right(), a) > 0 && a->right()->arity() == 1 - && !contains (a->left(), a->right())) - repls[a->right()] = a->left(); - - if (repls.empty()) ++it; - else - { - it = assumptions.erase(it); - for (int i = 0; i < assumptions.size(); i++) - assumptions[i] = replaceAll(assumptions[i], repls); - goal = replaceAll(goal, repls); - } - } - else ++it; - } - } - - bool mergeAssumptions(int bnd = -1) - { - // simplify them first - int sz = assumptions.size(); - for (int i = 0; i < sz; i++) // TODO: add mores simplifications - { - Expr &a = assumptions[i]; - a = simplifyBool(a); - } - if (bnd == -1) bnd = mergingIts; // default val - for (int i = 0; i < bnd; i++) - { - ExprSet newAssms; - for (auto a : assumptions) - { - // todo: figure out why there could be NULLs - if (a == NULL) continue; - - if (isOpX(a)) - { - newAssms.insert(a); - continue; // GF: could be useful in principle - } - - if (!isOpX(a) && simplifyAssm(a, newAssms)) - { - return true; - } - if (isOpX(a)) - { - getConj(mkNeg(a->left()), newAssms); - } - else - { - newAssms.insert(a); - } - } - assumptions.clear(); - for (auto & a : newAssms) - { - // some blocking heurisitcs here (TODO: try to block them in early stages, i.e., don't even compute) - if (isOpX(a) && isOpX(a->left()) /*&& isOpX(a->right())*/) continue; - - if (find (blockedAssms.begin(), blockedAssms.end(), a) == blockedAssms.end()) - unique_push_back(a, assumptions); - } - } - return false; - } - - void splitAssumptions() - { - ExprSet newAssms; - for (auto & a : assumptions) - { - if (a != NULL) getConj(a, newAssms); - } - assumptions.clear(); - for (auto & a : newAssms) assumptions.push_back(a); - } - - bool simplifyAssm(Expr assm, ExprSet& newAssms) - { - for (auto a : assumptions) - { - if (a == assm || a == NULL) continue; - if (isOpX(assm) && !isOpX(a)) continue; - - ExprVector result; - if (useAssumption(assm, a, result, true)) { - for (auto & it : result) { - if (it == NULL) continue; - - Expr tmp = it; - if (!u.isTrue(tmp)) - { - if (u.isFalse(tmp)) - { - if (verbose) outs () << string(sp, ' ') - << "inconsistent assumptions: " << *assm << " and " << *a << "\n"; - return true; - } - - tmp = simplifyArithm(tmp); - ExprSet tmps; - getConj(simplifyBool(tmp), tmps); - getConj(simplifyBool(simplifyArr(tmp)), tmps); // duplicate for the case of arrays - for (auto & t : tmps) - { - if (find(assumptions.begin(), assumptions.end(), t) == assumptions.end()) - { - newAssms.insert(t); - } - } - } - } - } - } - return false; - } - - // main method to do rewriting - // TODO: separate the logic for fwd, otherwise the code gets messy - bool useAssumption(Expr subgoal, Expr assm, ExprVector& result, bool fwd = false) - { - if (isOpX(assm)) - { - ExprMap matching; - ExprVector args; - for (int i = 0; i < assm->arity() - 1; i++) args.push_back(bind::fapp(assm->arg(i))); - - Expr assmQF = assm->last(); - Expr repl = assmQF; - - bool isImpl = false; - if (isOpX(assmQF)) - { - if (fwd) assmQF = assmQF->left(); - else assmQF = assmQF->right(); - isImpl = true; - } - - if (isOpX(assmQF)) - { - int res = -1; - if (fwd) - { - if (findMatching (assmQF->left(), subgoal, args, matching)) - { - res = 1; - } - else - { - matching.clear(); - if (findMatching (mkNeg(assmQF->left()), subgoal, args, matching)) - { - res = 2; - } - } - if (res > 0) - { - repl = replaceAll(assmQF->arg(res), matching); - - // sanity removal - for (auto it = args.begin(); it != args.end();) - { - if (contains (repl, *it)) ++it; - else it = args.erase(it); - } - - if (!args.empty()) - { - repl = createQuantifiedFormulaRestr(repl, args); - } - - result.push_back(repl); - return true; - } - } - else - { - // !fwd - - if (findMatching (assmQF->right(), subgoal, args, matching)) - { - res = 1; - } - else - { - matching.clear(); - if (findMatching (assmQF->last(), subgoal, args, matching)) - { - res = 2; - } - } - if (res > 0) - { - if (res == 1) repl = assmQF->left(); - else repl = mkNeg(assmQF->left()); - repl = replaceAll(repl, matching); - - ExprSet vars; - filter(assmQF->left(), bind::IsConst (), inserter(vars, vars.begin())); - - for (auto it = args.begin(); it != args.end();) - { - if (find(vars.begin(), vars.end(), *it) != vars.end()) - { - it = args.erase(it); - } - else - { - ++it; - } - } - if (!args.empty()) repl = createQuantifiedFormulaRestr(repl, args, false); - - result.push_back(repl); - return true; - } - } - } - - std::set matchingSet; - // we first search for a matching of the entire assumption (usually some inequality) - if (findMatchingSubexpr (assmQF, subgoal, args, matchingSet)) - { - for (auto matching : matchingSet) { - Expr auxRepl = repl; - auxRepl = replaceAll(auxRepl, matching); - Expr replaced; - if (isImpl) - { - if (fwd) // used in simplifyAssm - { - if (!isOpX(subgoal) && u.implies(subgoal, auxRepl->left())) - { - ExprSet vars; - filter (assmQF, bind::IsConst (), inserter(vars, vars.begin())); - for (auto it = args.begin(); it != args.end();) - { - bool found = false; - if (find(vars.begin(), vars.end(), *it) != vars.end()) - { - found = true; - it = args.erase(it); - } - if (!found) - { - ++it; - } - } - - // sanity removal - for (auto it = args.begin(); it != args.end();) - { - if (contains (auxRepl->right(), *it)) ++it; - else it = args.erase(it); - } - - if (args.empty()) - { - replaced = auxRepl->right(); - } - else - { - replaced = createQuantifiedFormulaRestr(auxRepl->right(), args); - } - } - } - else - { - ExprSet vars; - filter(assmQF, bind::IsConst (), inserter(vars, vars.begin())); - replaced = replaceAll(subgoal, auxRepl->right(), auxRepl->left()); - - for (auto it = args.begin(); it != args.end();) - { - if (find(vars.begin(), vars.end(), *it) != vars.end()) - { - it = args.erase(it); - } - else - { - ++it; - } - } - if (!args.empty()) - replaced = createQuantifiedFormulaRestr(replaced, args, false); - } - } - else - { - replaced = replaceAll(subgoal, auxRepl, mk(efac)); - } - - if (subgoal != replaced) - { - result.push_back(replaced); - return true; - } - } - } - - if (isImpl) return false; - - if (isOpX(assmQF)) - { - matchingSet.clear(); - // if the assumption is equality, the we search for a matching of its LHS - // (we can try matching the RHS as well, but it will likely give us infinite loops) - if (findMatchingSubexpr (assmQF->left(), subgoal, args, matchingSet)) - { - for (auto matching : matchingSet) { - Expr auxRepl = repl; - auxRepl = replaceAll(auxRepl, matching); - result.push_back(replaceAll(subgoal, auxRepl->left(), auxRepl->right())); - } - return true; - } - // try vice versa (dangerous since it will introduce repeated rewriting) - // matchingSet.clear(); - // if (!fwd && findMatchingSubexpr (assmQF->right(), subgoal, args, matchingSet)) - // { - // for (auto matching : matchingSet) { - // Expr auxRepl = repl; - // auxRepl = replaceAll(auxRepl, matching); - // result.push_back(replaceAll(subgoal, auxRepl->right(), auxRepl->left())); - // } - // return true; - // } - } - - if (isOp(assmQF) && isOp(subgoal)) - { - Expr assmQFtmp = assmQF; - Expr subgoalTmp = subgoal; - assmQF = normalizeArithm(assmQF); - subgoal = normalizeArithm(subgoal); - - if (findMatching (assmQF->left(), subgoal->left(), args, matching)) - { - repl = replaceAll(assmQF, matching); - if (fwd && !u.isSat(repl, subgoal)) - { - result.push_back(mk(efac)); - return true; - } - if (fwd) - { - if (((isOpX(repl) && isOpX(subgoal)) || (isOpX(repl) && isOpX(subgoal))) && - (repl->left() == subgoal->left()) && (repl->right() == subgoal->right())) - { - result.push_back(mk(repl->left(), subgoal->right())); - return true; - } - } - if (!fwd && u.implies(repl, subgoal)) - { - result.push_back(mk(efac)); - return true; - } - } - matching.clear(); - assmQF = assmQFtmp; - subgoal = subgoalTmp; - } - - if (isOpX(subgoal)) - { - matchingSet.clear(); - if (findMatchingSubexpr (assmQF, subgoal->left(), args, matchingSet)) - { - for (auto matching : matchingSet) { - Expr auxRepl = repl; - for (auto & a : matching) auxRepl = replaceAll(auxRepl, a.first, a.second); - if (u.implies(auxRepl, subgoal->left())) result.push_back(subgoal->right()); - else if (u.implies(auxRepl, mkNeg(subgoal->left()))) result.push_back(subgoal->last()); - } - return (result.size() > 0); - } - } - - // try finding inconsistencies - if (fwd && !containsOp(assmQF)) - { - std::set matchingSet1; - ExprVector args1; - filter(subgoal, bind::IsConst (), inserter(args1, args1.begin())); - if (findMatchingSubexpr (subgoal, assmQF, args1, matchingSet1)) - { - for (auto matching1 : matchingSet1) { - Expr auxRepl = assmQF; - for (auto & m : matching1){ - auto it = find(args.begin(), args.end(), m.second); - if (it != args.end()) - { - auxRepl = replaceAll(auxRepl, m.second, m.first); - args.erase(it); - } - else - { - if (m.second != m.first) break; - } - } - if (args.empty()) - { - if (!u.isSat(subgoal, auxRepl)) result.push_back(mk(efac)); - else result.push_back(auxRepl); - return true; - } - } - } - } - } - else - { - // for a quantifier-free assumption (e.g., inductive hypotheses), - // we create an SMT query and check with Z3 - // TODO: we can do so for ALL constistent quantifier-free assumptions at once - - if (isOpX(assm)) // simple (SMT-free) checks first - { - Expr res = replaceAll(subgoal, assm->left(), assm->right()); - if (res != subgoal) - { - result.push_back(res); - return true; - } - } - - if (!fwd && u.implies(assm, subgoal)) - { - result.push_back(mk(efac)); - return true; - } - if (fwd && !u.isSat(assm, subgoal)) { - result.push_back(mk(efac)); - return true; - } - - if (!fwd && isOp(subgoal) && isOp(assm) && - isNumeric(subgoal->left()) && isNumeric(assm->left())) - { - Expr tryAbd = abduce(subgoal, assm); - if (tryAbd != NULL) - { - result.push_back(tryAbd); - return true; - } - } - - // TODO: proper matching - if (isOpX(subgoal)) - { - if (u.implies(subgoal->left(), assm)) - { - result.push_back(subgoal->right()); - return true; - } - } - if (isOpX(subgoal)) - { - if (u.implies(assm, subgoal->left())) - { - result.push_back(subgoal->right()); - return true; - } - if (u.implies(assm, mk(subgoal->left()))) - { - result.push_back(subgoal->last()); - return true; - } - } - - if (isOpX(assm) && fwd) - { - ExprSet dsjs; - getDisj(assm, dsjs); - bool rem = false; - for (auto it = dsjs.begin(); it != dsjs.end();) - { - if (!u.isSat(*it, subgoal)) - { - rem = true; - it = dsjs.erase(it); - } - else ++it; - } - if (rem) - { - Expr res = disjoin(dsjs, efac); - result.push_back(res); - return true; - } - } - if (isOp(assm)) - { - Expr res = replaceAll(subgoal, assm, mk(efac)); - res = replaceAll(res, mkNeg(assm), mk(efac)); - Expr tmp = reBuildCmpSym(assm, assm->left(), assm->right()); - assert((bool)u.isEquiv(assm, tmp)); - res = replaceAll(res, tmp, mk(efac)); - res = replaceAll(res, mkNeg(tmp), mk(efac)); - if (res != subgoal) - { - result.push_back(simplifyBool(res)); - return true; - } - } - - ExprSet stores; - ExprSet selects; - getStores(subgoal, stores); - getSelects(subgoal, selects); - - if (stores.size() > 0) - { - if (isOpX(assm) && contains(subgoal, assm->left()) && contains(subgoal, assm->right())) - { - for (auto & a : stores) - { - if (isOpX(a->left()) && - ((a->right() == assm->right() && a->left()->right() == assm->left()) || - (a->right() == assm->left() && a->left()->right() == assm->right()))) - { - ExprMap substs; - substs[assm->right()] = assm->left(); - substs[assm->left()] = assm->right(); - Expr tmp = replaceAll(a, substs, false); - - if (u.implies(assm, mk(tmp, a))) - { - result.push_back(replaceAll(subgoal, a, tmp)); // very specific heuristic; works for multisets - return true; - } - - if (a->last() != a->left()->last()) - { - substs[a->last()] = a->left()->last(); - substs[a->left()->last()] = a->last(); - } - result.push_back(replaceAll(subgoal, a, replaceAll(a, substs, false))); - return true; - } - } - for (auto & a : selects) - { - if (isOpX(a->left()) && !isOpX(a->left()->left()) && - ((a->right() == assm->right() && a->left()->right() == assm->left()) || - (a->right() == assm->left() && a->left()->right() == assm->right()))) - { - result.push_back(replaceAll(subgoal, a, mk(assm)) - { - - for (auto & a : stores) - { - if (assm->left() == a->left() && - assm->right() == a->right() && - isOpX(a->last())) - { - result.push_back(replaceAll(subgoal, a, a->left())); - return true; - } - } - } - - if (isOpX(assm) && isOpX(*it)) // super big hack - qFreeAssms.insert(*it); - - it = assumptions.erase(it); - } - else ++it; - } - - if (verbose) outs () << "\nProving by induction\n"; - goal = createQuantifiedFormula(mk(conjoin(qFreeAssms, efac), goal), constructors); - if (isOpX(goal)) return solve(); - else return false; - } - - bool solve() - { - unfoldGoal(); - rewriteHistory.push_back(goal); - for (int i = 0; i < 5; i++) - { - if (simplifyGoal()) - { - if (verbose) outs () << "Trivially Proved\n"; - return true; - } - } - - // simple heuristic: if the result of every rewriting made the goal larger, we rollback - bool toRollback = true; - for (int i = 1; i < rewriteHistory.size(); i++) - toRollback = toRollback && - (treeSize(rewriteHistory[i-1]) < treeSize(rewriteHistory[i])); - - if (toRollback) goal = rewriteHistory[0]; - - if (verbose) outs () << "Simplified goal: " << *goal << "\n\n"; - - for (int i = 0; i < goal->arity() - 1; i++) - { - Expr type = goal->arg(i)->last(); - if (baseConstructors[type] != NULL && indConstructors[type] != NULL) - { - if (induction(i)) - { - if (verbose) outs () << "\nProved\n"; - return true; - } - } - } - bool res = simpleSMTcheck(goal); - if (verbose) - { - if (res) outs () << "Proved (with Z3)\n"; - else outs () << "Unknown\n"; - } - return res; - } - - bool simpleSMTcheck(Expr goal) - { - if (!useZ3) return false; - return (bool)u.implies(conjoin(assumptions, efac), goal); - } - }; - - void adtSolve(EZ3& z3, Expr s, int maxDepth, - int maxGrow, int mergingIts, int earlySplit, bool verbose, int useZ3, int to) - { - ExprVector constructors; - for (auto & a : z3.getAdtConstructors()) constructors.push_back(regularizeQF(a)); - - ExprVector assumptions; - Expr goal; - - ExprSet cnjs; - getConj(s, cnjs); - for (auto & c : cnjs) - { - if (isOpX(c)) - { - if (goal != NULL) assert (0 && "cannot identify goal (two asserts with negged formulas)"); - goal = regularizeQF(c->left()); - } - else - { - assumptions.push_back(regularizeQF(c)); - } - } - - if (goal == NULL) - { - outs () << "Unable to parse the query\n"; - return; - } - - ADTSolver sol (goal, assumptions, constructors, 0, 0, maxDepth, maxGrow, mergingIts, earlySplit, verbose, useZ3, to); - bool res = isOpX(goal) ? sol.solve() : sol.solveNoind(); - outs () << (res ? "unsat\n" : "sat\n"); - } -} - -#endif diff --git a/include/adt/CHCSolver.hpp b/include/adt/CHCSolver.hpp deleted file mode 100644 index 45f5820d9..000000000 --- a/include/adt/CHCSolver.hpp +++ /dev/null @@ -1,619 +0,0 @@ -#ifndef CHCSOLVER__HPP__ -#define CHCSOLVER__HPP__ - -#include "deep/HornNonlin.hpp" -#include "ADTSolver.hpp" -#include "SimSynt.hpp" -#include - -using namespace std; -using namespace boost; -namespace ufo -{ - class CHCSolver { - private: - ExprFactory &efac; - ExprSet &adts; - - // Keep the current return values - std::map values_inds; - ExprVector &constructors; - ExprVector &accessors; - ExprVector &assumptions; - - ExprSet &decls; - ExprVector ordered_decls; - vector &chcs; - int number_decls; - bool givePriority = false; - bool ignoreBaseVar = false; - - map baseConstructors; - map indConstructors; - - map baseDefinitions; - map indDefinitions; - map interpretations; - - public: - CHCSolver(ExprVector& _constructors, ExprVector& _accessors, ExprSet& _adts, ExprFactory &_efac, ExprSet &_decls, ExprVector &_assms, vector &_chcs, bool _nonadtPriority = false, bool _ignoreBase = false) : - constructors(_constructors), accessors(_accessors), adts(_adts), efac(_efac), decls(_decls), assumptions(_assms), chcs(_chcs), givePriority(_nonadtPriority), ignoreBaseVar(_ignoreBase) {} - - Expr createNewApp(HornRuleExt chc, int i, int ind) { - ExprVector types; - ExprVector newVars; - for(int j = 0; j < chc.srcRelations[i]->arity() - 2; ++j) { - if (j != ind) { - Expr e = chc.srcRelations[i]->arg(j); - types.push_back(bind::typeOf(chc.srcVars[i][j])); - newVars.push_back(chc.srcVars[i][j]); - } - } - types.push_back(bind::typeOf(chc.srcVars[i][ind])); - Expr rel = bind::fdecl (efac.mkTerm(chc.srcRelations[i]->left()->op()), types); - Expr app = bind::fapp (rel, newVars); - return app; - } - - void replaceDeclsInLeftPart(HornRuleExt chc, ExprVector & cnj) { - for (int i = 0; i < chc.srcRelations.size(); i++) { - if (decls.find(chc.srcRelations[i]) != decls.end()) { - // as we don't allow mutual recursion and decls are sorted, - // we suppose that srcRelations doesn't contain predicates with unknown definition - // TODO: should check the assumption above - int ind = values_inds[chc.srcRelations[i]->left()]; - Expr app = createNewApp(chc, i, ind); - Expr def = mk(app, chc.srcVars[i][ind]); - cnj.push_back(def); - } - else { - Expr tmp = bind::fapp (chc.srcRelations[i], chc.srcVars[i]); - cnj.push_back(tmp); - } - } - } - - bool findMatchingFromElement(HornRuleExt chc, Expr elem, ExprMap &matching) { - if (!chc.isQuery) { - if (elem->left()->arity() == 1 - && std::find(chc.dstVars.begin(), chc.dstVars.end(), elem->left()) != chc.dstVars.end()) { - matching[elem->left()] = elem->right(); - return true; - } - else if (elem->right()->arity() == 1 - && std::find(chc.dstVars.begin(), chc.dstVars.end(), elem->right()) != chc.dstVars.end()) { - matching[elem->right()] = elem->left(); - return true; - } - for (auto & v : chc.dstVars) { - Expr ineq = ineqSimplifier(v, elem); - if (ineq->left() == v) { - matching[ineq->left()] = ineq->right(); - return true; - } - } - } - // TODO: HERE I NEED TO CHECK IF WHAT I HAVE ON THE RIGHT IS AN ACCESSOR - if ((elem->right()->arity() == 2) && isAccessor(bind::fname(elem->right()))) { - matching[elem->right()] = elem->left(); - return true; - } - - else if ((elem->left()->arity() == 2) && isAccessor(bind::fname(elem->left()))) { - matching[elem->left()] = elem->right(); - return true; - } - // TODO: HERE I CAN CHECK IF ACCESSOR, AND THEN DO THE REVERSE MATCHING, SO HEAD(SMTH) -> X, NOT X -> HEAD(SMTH) - if ((elem->left()->arity() == 1) && !(isConstructor(bind::fname(elem->left())))) { - matching[elem->left()] = elem->right(); - return true; - } - else if ((elem->right()->arity() == 1) && !(isConstructor(bind::fname(elem->right())))) { - matching[elem->right()] = elem->left(); - return true; - } - return false; - } - - bool findMatchingFromRule(HornRuleExt chc, ExprMap &matching, Expr rule) { - if (isOpX(rule)) { - rule = rule->left(); - } - if (isOpX(rule)) { - for(int j = 0; j < rule->arity(); ++j) { - Expr elem = rule->arg(j); - if (isOpX(elem) && findMatchingFromElement(chc, elem, matching)) { - return true; - } - } - } - else { - if (isOpX(rule) && findMatchingFromElement(chc, rule, matching)) { - return true; - } - } - return false; - } - - bool isConstructor(Expr elem) { - return std::find(constructors.begin(), constructors.end(), elem) != constructors.end(); - } - - - bool isAccessor(Expr elem) { - return std::find(accessors.begin(), accessors.end(), fname(elem)) != accessors.end(); - } - - Expr createDestination(HornRuleExt chc) { - int ind = values_inds[chc.dstRelation->left()]; - ExprVector types; - ExprVector newVars; - for(int j = 0; j < chc.dstRelation->arity() - 2; ++j) { - if (j != ind) { - types.push_back(bind::typeOf(chc.dstVars[j])); - newVars.push_back(chc.dstVars[j]); - } - } - types.push_back(bind::typeOf(chc.dstVars[ind])); - Expr rel = bind::fdecl (efac.mkTerm(chc.dstRelation->left()->op()), types); - Expr baseApp = bind::fapp (rel, newVars); - Expr destination = mk(baseApp, chc.dstVars[ind]); - return destination; - } - - Expr convertToFunction(HornRuleExt chc) { - ExprVector cnj; - ExprMap matching; - Expr destination = bind::fapp (chc.dstRelation, chc.dstVars); - if (decls.find(chc.dstRelation) != decls.end()) { - destination = createDestination(chc); - interpretations[chc.dstRelation] = destination; - } - replaceDeclsInLeftPart(chc, cnj); - cnj.push_back(chc.body); - Expr asmpt = mk(conjoin(cnj, efac), destination); - while (!isOpX(asmpt) && findMatchingFromRule(chc, matching, asmpt)) { - asmpt = replaceAll(asmpt, matching); - asmpt = simplifyBool(asmpt); - matching.clear(); - } - asmpt = simplifyArithm(asmpt); - if (asmpt->arity() > 0) { - asmpt = createQuantifiedFormula(asmpt, constructors); - } - return asmpt; - } - - bool createAndCheckDefinition(Expr &decl) { - ExprVector current_assumptions = assumptions; - for (auto & chc : chcs) { - if (chc.dstRelation == decl && chc.isFact) { - for (int i = 0; i < chc.dstVars.size(); ++i) { - // inductive variable should be an adt - if (adts.find(bind::typeOf(chc.dstVars[i])) != adts.end()) { - Expr baseConstructor = baseConstructors[bind::typeOf(chc.dstVars[i])]; - int baseConstructorArity = baseConstructor->arity() - 1; - for(int j = 0; j < chc.body->arity(); ++j) { - Expr body_elem = chc.body->arg(j); - if (isOpX(body_elem)) { - if ((body_elem->left() == chc.dstVars[i] && body_elem->right()->arity() == baseConstructorArity) || - (body_elem->right() == chc.dstVars[i] && body_elem->left()->arity() == baseConstructorArity)) { - - Expr base_asmpt = convertToFunction(chc); - baseDefinitions[decl] = base_asmpt; - - Expr indConstructor = indConstructors[bind::typeOf(chc.dstVars[i])]; - if (indConstructor == NULL) { - assumptions.push_back(base_asmpt); - return true; - } - int indConstructorArity = indConstructor->arity() - 1; - ExprVector lemmas; - - // we should check that this variable is inductive in inductive rule - for (auto & ind_chc : chcs) { - if (ind_chc.dstRelation == decl && !ind_chc.isFact) { - for (int k = 0; k < ind_chc.srcRelations.size(); ++k) { - if (ind_chc.srcRelations[k] == decl) { - Expr elem = ind_chc.body; - bool shouldBeChecked = false; - if (isOpX(elem)) { - if ((elem->left() == ind_chc.dstVars[i] && elem->right()->arity() == indConstructorArity) || - (elem->right() == ind_chc.dstVars[i] && elem->left()->arity() == indConstructorArity)) { - shouldBeChecked = true; - } - } - else { - for(int m = 0; m < ind_chc.body->arity(); ++m) { - Expr ind_body_elem = ind_chc.body->arg(m); - if (isOpX(ind_body_elem)) { - // TODO: add comparison of src vars with conctructor - if ((ind_body_elem->left() == ind_chc.dstVars[i] && ind_body_elem->right()->arity() == indConstructorArity) || - (ind_body_elem->right() == ind_chc.dstVars[i] && ind_body_elem->left()->arity() == indConstructorArity)) { - shouldBeChecked = true; - } - } - } - } - if (shouldBeChecked) { - Expr ind_asmpt = convertToFunction(ind_chc); - indDefinitions[decl] = ind_asmpt; - bool foundRecursiveDefinition = true; - // We should check that for all rules (including non-definitive) this definition is correct - for (auto & rule : chcs) { - if (rule.dstRelation == decl) { - Expr goal = convertToFunction(rule); - current_assumptions.clear(); - current_assumptions = assumptions; - current_assumptions.push_back(baseDefinitions[decl]); - current_assumptions.push_back(indDefinitions[decl]); - if (!prove (current_assumptions, goal)) { - foundRecursiveDefinition = false; - break; - } - else { - lemmas.push_back(goal); - } - } - } - if (foundRecursiveDefinition == true) { - for (auto & lemma : lemmas) { - assumptions.push_back(lemma); - } - return true; - } - } - } - } - } - } - } - } - } - } - } - } - } - return false; - } - - bool createAndCheckInterpretations() { - // creating assumptions - for (auto & decl : ordered_decls) { - createAndCheckDefinition(decl); - } - - // creating goals for ADT-ind from CHC-queries - for (auto & chc : chcs) { - if (chc.isQuery) { - Expr destination; - ExprVector cnj; - ExprMap matching; - if (chc.body->arity() > 1) { - for(int j = 0; j < chc.body->arity(); ++j) { - Expr body_elem = chc.body->arg(j); - if (isOpX(body_elem)) { - destination = mkNeg(body_elem); - } - else { - cnj.push_back(body_elem); - } - } - } - else { - destination = mkNeg(chc.body); - } - if (decls.find(destination->left()) != decls.end()) { - int ind = values_inds[destination->left()->left()]; - ExprVector types; - ExprVector newVars; - for(int j = 1; j < destination->arity(); ++j) { - if (j - 1 != ind) { - types.push_back(bind::typeOf(destination->arg(j))); - newVars.push_back(destination->arg(j)); - } - } - types.push_back(bind::typeOf(destination->arg(ind + 1))); - Expr rel = bind::fdecl (efac.mkTerm(destination->left()->left()->op()), types); - Expr baseApp = bind::fapp (rel, newVars); - destination = mk(baseApp, destination->arg(ind + 1)); - } - - replaceDeclsInLeftPart(chc, cnj); - Expr goal = mk(conjoin(cnj, efac), destination); - while (!isOpX(goal) && findMatchingFromRule(chc, matching, goal)) { - goal = replaceAll(goal, matching); - goal = simplifyBool(goal); - matching.clear(); - } - ExprVector current_assumptions = assumptions; - goal = createQuantifiedFormula(goal, constructors); - // Check if the goal may be proved in current interpretations - if (!prove (current_assumptions, goal)) { - return false; - } - else { - assumptions.push_back(goal); - } - } - } - for (auto & decl : ordered_decls) { - outs() << interpretations[decl] << "\n"; - outs() << baseDefinitions[decl] << "\n"; - outs() << indDefinitions[decl] << "\n"; - } - return true; - } - - int baseVar(Expr &decl) { - for (auto & chc : chcs) { - if (chc.dstRelation == decl) { - for (int i = 0; i < chc.dstVars.size(); ++i) { - if (adts.find(bind::typeOf(chc.dstVars[i])) != adts.end()) { - for(int j = 0; j < chc.body->arity(); ++j) { - Expr body_elem = chc.body->arg(j); - if (isOpX(body_elem)) { - if ((body_elem->left() == chc.dstVars[i] && body_elem->right()->arity() == 1) || - (body_elem->right() == chc.dstVars[i] && body_elem->left()->arity() == 1)) { - return i; - } - } - } - } - } - } - } - return -1; - } - - // result is written to ordered_decls - // cur_decls is used to find the mutual recursion - bool orderDecls(Expr decl, ExprSet &cur_decls) { - // Already contains this decl - if (std::find(ordered_decls.begin(), ordered_decls.end(), decl) != ordered_decls.end()) - return true; - cur_decls.insert(decl); - for (auto & chc : chcs) { - if (chc.dstRelation == decl && !chc.isFact) { - for (int i = 0; i < chc.srcRelations.size(); i++) { - // if the src symbol is already in ordered_decls do nothing - if (chc.srcRelations[i] != decl && std::find(ordered_decls.begin(), ordered_decls.end(), chc.srcRelations[i]) == ordered_decls.end()) { - // there is a mutual recursion, for now we cannot handle this - if (cur_decls.find(chc.srcRelations[i]) != cur_decls.end()) { - outs () << "could not order predicates -- mutual recursion is not supported\n"; - return false; - } - else { - // current predicate depends on another, so we need to push this another predicate earlier - orderDecls(chc.srcRelations[i], cur_decls); - } - } - } - } - } - ordered_decls.push_back(decl); - return true; - } - - // Get indexes in right order and remove the base index - void excludeBaseVar(Expr& decl, std::vector &idxs) { - int bv = baseVar(decl); - idxs.erase(idxs.begin() + bv); - } - - void givePriorityNonAdt(Expr& decl, std::vector &idxs) { - std::vector new_idxs; - bool nonadtExists = false; - for (auto & chc : chcs) { - if (chc.dstRelation == decl) { - for (int i = 0; i < idxs.size(); ++i) { - bool is_adt = false; - for (auto & adt : adts) { - if ((*chc.dstRelation)[idxs[i]] == adt) { - is_adt = true; - break; - } - } - if (!is_adt) { - nonadtExists = true; - new_idxs.push_back(idxs[i]); - } - } - if (nonadtExists) { - for (int i = 0; i < idxs.size(); ++i) { - for (auto & adt : adts) { - if ((*chc.dstRelation)[idxs[i]] == adt) { - new_idxs.push_back(idxs[i]); - break; - } - } - } - idxs = new_idxs; - } - break; - } - } - } - - void setConstructors() { - for (auto & a : constructors) { - Expr type = a->last(); - bool ind = false; - for (int i = 0; i < a->arity() - 1; i++) - { - if (a->last() == a->arg(i)) - { - ind = true; - if (indConstructors[type] != NULL && indConstructors[type] != a) - { - outs () << "Several inductive constructors are not supported\n"; - exit(1); - } - indConstructors[type] = a; - } - } - if (!ind) - { - if (baseConstructors[type] != NULL && baseConstructors[type] != a) - { - outs () << "Several base constructors are not supported\n"; - exit(1); - } - baseConstructors[type] = a; - } - } - } - - bool findInterpretations(int idx, std::map &buf) { - if (idx >= ordered_decls.size()) { - values_inds = buf; - assumptions.clear(); - return createAndCheckInterpretations(); - } - // Get the possible version of return variables - Expr cur = ordered_decls[idx]; - for (auto & chc : chcs) { - if (chc.dstRelation == cur) { - size_t vars_size = chc.dstRelation->arity(); - std::vector idxs; - for (int i = 0; i < vars_size - 2; ++i) { - idxs.push_back(i); - } - // add functions for filter variables here - if (ignoreBaseVar) excludeBaseVar(cur, idxs); - if (givePriority) givePriorityNonAdt(cur, idxs); - for (int i = idxs.size() - 1; i >= 0; --i) { - buf[chc.dstRelation->left()] = idxs[i]; - if (findInterpretations(idx + 1, buf)) - return true; - } - break; - } - } - return false; - } - - bool solve() { - // Order current uninterpreted predicate symbols - for (auto & decl: decls) { - ExprSet cur_decls; - if (!orderDecls(decl, cur_decls)) - return false; - } - setConstructors(); - std::map buf; - return findInterpretations(0, buf); - } - - bool solveArr(){ - Expr decl = NULL; - for (auto & d : decls){ - if (containsOp(d)){ - if (decl == NULL) decl = d; - else return false; - } - } - Expr base; - ExprVector opsAdt, opsArr; - set visited; - ExprMap varVersions; - - ExprSet adts; - for (auto & c : constructors) adts.insert(c->last()); - - while (visited.size() != chcs.size()){ - for (int i = 0; i < chcs.size(); i++){ - if (find(visited.begin(), visited.end(), i) != visited.end()) continue; - auto &hr = chcs[i]; - - if (hr.isInductive && varVersions.empty()) - for (int j = 0; j < hr.srcVars[0].size(); j++) - varVersions[hr.srcVars[0][j]] = hr.dstVars[j]; - - if (hr.isFact && varVersions.empty()) continue; - - ExprSet tmp, tmpAdt, tmpArr; - getConj(hr.body, tmp); - for (auto & a : tmp){ - bool adt = false; - for (auto & c : adts) - if (contains(a, c)) { - tmpAdt.insert(a); - adt = true; - break; - } - if (!adt) tmpArr.insert(a); - } - assert (!tmpAdt.empty()); - - if (hr.isFact && !varVersions.empty()){ - base = replaceAllRev(conjoin(tmpArr, efac), varVersions); - } else { - opsAdt.push_back(conjoin(tmpAdt, efac)); - opsArr.push_back(conjoin(tmpArr, efac)); - } - visited.insert(i); - } - } - - // getting a candidate - SimSynt sim (efac, opsAdt, opsArr, varVersions, constructors, decl, assumptions, base); - sim.proc(); - - // proving - for (int i = 0; i < chcs.size(); i++){ - if (!checkCHC(chcs[i])) return false; - } - sim.printSol(); - return true; - } - - bool checkCHC(HornRuleExt& hr, bool print = false) { - ExprVector assms = assumptions; - Expr goal = hr.isQuery ? mk(efac) : bind::fapp (hr.dstRelation, hr.dstVars); - for (int i = 0; i < hr.srcRelations.size(); i++){ - assms.push_back(bind::fapp (hr.srcRelations[i], hr.srcVars[i])); - } - assms.push_back(hr.body); - return prove (assms, goal, 2, print); - } - - bool prove (ExprVector& lemmas, Expr fla, int rounds = 2, bool print = false) - { - ADTSolver sol (fla, lemmas, constructors); // last false is for verbosity - return isOpX(fla) ? sol.solve() : sol.solveNoind(rounds); - } - }; - - void chcSolve(char * smt_file, bool givePriorityNonAdt, bool ignoreBaseVar) - { - ExprFactory efac; - EZ3 z3(efac); - CHCs ruleManager(efac, z3); - ExprSet adts; - ruleManager.parse(smt_file); - // ruleManager.print(); - - ExprVector constructors; - ExprVector accessors; - - ExprSet& decls = ruleManager.decls; - - for (auto & a : z3.getAdtConstructors()) { - constructors.push_back(regularizeQF(a)); - adts.insert(a->last()); - } - - for (auto & a : z3.getAdtAccessors()) { - accessors.push_back(regularizeQF(a)); - adts.insert(a->last()); - } - - CHCSolver sol (constructors, accessors, adts, efac, decls, ruleManager.extras, ruleManager.chcs, - givePriorityNonAdt, ignoreBaseVar); - bool res = containsOp(conjoin(decls, efac)) ? sol.solveArr() : sol.solve(); - outs () << (res ? "sat\n" : "unknown\n"); - } -} - -#endif diff --git a/include/adt/SimSynt.hpp b/include/adt/SimSynt.hpp deleted file mode 100644 index 9eef302ac..000000000 --- a/include/adt/SimSynt.hpp +++ /dev/null @@ -1,697 +0,0 @@ -#ifndef SIMSYNT__HPP__ -#define SIMSYNT__HPP__ - -#include "adt/ADTSolver.hpp" - -using namespace std; -using namespace boost; -namespace ufo -{ - class SimSynt - { - private: - - ExprFactory &efac; - SMTUtils u; - ExprVector &opsAdt; - ExprVector &opsArr; - ExprVector& constructors; - ExprVector &assumptions; - Expr adtType; - Expr baseCon; - Expr indCon; - int indConIndex = -1; - ExprMap& varVersions; - Expr baseFormula; - int stateProducingOp = -1; - int stateConsumingOp = -1; - int stateNoOp = -1; - int arrVarInd = -1; - int indexVarInd = -1; - int adtVarInd = -1; - ExprVector nonstateVars; - ExprSet extras; // aux - Expr nestedRel; - ExprVector extraLemmas; - ExprVector types; - ExprVector vars; - ExprVector varsPrime; - ExprVector argsBase; - ExprVector argsInd; - Expr indexVar; - Expr rel; - map arrayContent; - Expr accessTerm; - Expr baseRule; - Expr indRule; - - public: - - SimSynt(ExprFactory& _efac, ExprVector& _ops1, ExprVector& _ops2, ExprMap& _v, - ExprVector& _c, Expr _r, ExprVector& _l, Expr _b) : - efac(_efac), u(_efac), opsAdt(_ops1), opsArr(_ops2), varVersions(_v), - constructors(_c), rel(_r), assumptions(_l), baseFormula(_b){} - - bool isBaseConstructor(Expr c, Expr type) - { - return (c->last() == type && c->arity() == 2); - } - - bool isIndConstructor(Expr c, Expr type) - { - if (c->last() != type) return false; - for (int j = 0; j < c->arity() - 1; j++) - if (c->last() == c->arg(j)) return true; - - return false; - } - - void checkConstructor(int i) - { - ExprSet allConstrs; - filter(opsAdt[i], bind::IsFApp (), inserter(allConstrs, allConstrs.begin())); - for (auto rit = allConstrs.rbegin(); rit != allConstrs.rend(); ++rit) - { - Expr capp = *rit; - for (auto & c : constructors) - { - if (capp->left() == c) - { - if (isIndConstructor(c, bind::typeOf(capp))) - { - // first comes first serve here (to be generalized) - if (indCon == NULL) - { - indCon = capp; - indConIndex = i; - } - bool found = false; - for (auto & v : varVersions) - found |= contains(capp, v.second); - - if (!found) - { - stateProducingOp = i; // TODO: check if several - } - else - { - stateConsumingOp = i; - } - return; - } - } - } - } - } - - int findStateConsumingOpInAssms() - { - for (int i = 0; i < opsAdt.size(); i++) - { - if (i == stateProducingOp) continue; - - ExprSet allConstrs; - filter(opsAdt[i], bind::IsFApp (), inserter(allConstrs, allConstrs.begin())); - - for (auto & a : allConstrs) - if (a->arity() > 1 && adtType == bind::typeOf(a)) - for (auto & l : assumptions) - { - // very specific test: search for a lemma of the following shape - // \forall x a(f(x)) = baseConstructor - if (isOpX(l) && isOpX(l->last()) && - isOpX(l->last()->left()) && contains(l->last()->left(), a->left()) && - isOpX(l->last()->right()) && - isBaseConstructor(l->last()->right()->left(), adtType)) - return i; - } - - } - return -1; - } - - int findStateProducingOpInAssms() - { - for (int i = 0; i < opsAdt.size(); i++) - { - if (i == stateConsumingOp) continue; - - ExprSet allConstrs; - filter(opsAdt[i], bind::IsFApp (), inserter(allConstrs, allConstrs.begin())); - - for (auto & a : allConstrs) - if (a->arity() > 1 && adtType == bind::typeOf(a)) - for (auto & l : assumptions) - // very specific test: search for a lemma of the following shape - // \forall x a(..) = indConstructor(...) - if (isOpX(l) && isOpX(l->last()) && - isOpX(l->last()->left()) && contains(l->last()->left(), a->left()) && - isOpX(l->last()->right()) && - isIndConstructor(l->last()->right()->left(), adtType)) - return i; - - } - return -1; - } - - Expr createQuantifiedFormula(Expr def) - { - ExprSet vars; - ExprVector args; - filter(def, bind::IsConst (), inserter(vars, vars.begin())); - for (auto & a : vars) if (a != baseCon) args.push_back(a->last()); - args.push_back(def); - return mknary(args); - } - - // relations based on linear scan (e.g., stack, queue) - void guessScanBasedRelations(Expr accessTerm) - { - assert(accessTerm != NULL); - bool traverseDirection = isConstPos(accessTerm); - - // calculate the least fixedpoint over the indexVar variable - // currently, a simple heuristic is used, but it can be extended - ExprSet guesses; - mutateHeuristic (baseFormula, guesses); - Expr invariant; - for (auto & g : guesses) - for (auto & g : guesses) - { - if (u.implies(baseFormula, g) && - u.implies (mk(g, opsArr[indConIndex]), replaceAll(g, varVersions))) - { - invariant = g; - break; - } - } - - // TODO: further, this invariant can be used to generate an auxiliary lemma - // e.g., \forall xs, n, A . R (xs, n, A) => invariant (n) - - // get the "precondition" for the inductive rule of R: - // it should follow the fixedpoint but inconsistent with - // the precondition for the base rule of R (captured in baseFormula) - assert (invariant != NULL); - Expr remainingCnj = mk(invariant, mkNeg(baseFormula)); - - // prepare for the nested call of R in the inductive rule of R - while (true) - { - int nestedInd = -1; - for (int j = 1; j < indCon->arity(); j++) - { - if (adtType == bind::typeOf(indCon->arg(j))) - { - if (isOpX(indCon->arg(j)) && isIndConstructor(indCon->arg(j)->left(), adtType)) - nestedInd = j; - } - else - nonstateVars.push_back(indCon->arg(j)); - } - if (nestedInd == -1) break; - else indCon = indCon->arg(nestedInd); - } - - // get arguments of the nested call of R - ExprVector argsIndNested = argsInd; - for (int j = 0; j < types.size(); j++) - { - if (adtType == types[j]) argsIndNested[j] = vars[j]; - if (argsInd[j] == indexVar - /*types[j] == bind::typeOf(indexVar)*/) argsIndNested[j] = accessTerm; - } - - // prepare the inductive definition of R (i.e., the RHS of the inductive rule) - ExprSet cnjs; - for (auto & a : nonstateVars) // need to match all non-state vars - { // (obtained from the array and the ADT) - auto it = arrayContent[a].begin(); - if (it == arrayContent[a].end()) continue; - Expr accessTermTmp = normalizeArithm(replaceAll(accessTerm, indexVar, *it)); - if (traverseDirection) - cnjs.insert(mk(a, mk(vars[arrVarInd], accessTermTmp))); - arrayContent[a].erase(it); - } - cnjs.insert(remainingCnj); - - // create a quantified formula representing the inductive rule - indRule = createQuantifiedFormula(generalizeInductiveDef(rel, argsInd, argsIndNested, cnjs)); - - // generate and prove extra lemmas - extraLemmas.push_back(createQuantifiedFormula(mk(bind::fapp (rel, vars), invariant))); - Expr newInd = bind::intConst(mkTerm (lexical_cast(indexVar) + "1", efac)); - ExprVector newVars = vars; - newVars[arrVarInd] = mk(vars[arrVarInd], newInd, *nonstateVars.begin()); - extraLemmas.push_back(createQuantifiedFormula(mk(mk( - (traverseDirection ? mk(newInd, indexVar) : mk(newInd, indexVar)), - bind::fapp (rel, vars)), bind::fapp (rel, newVars)))); - } - - // relations based on nonlinear scan and noops (e.g., sets, multisets) - void guessRelations(bool alt = true) - { - // prepare the inductive definition of R (i.e., the RHS of the inductive rule) - ExprSet cnjs; - ExprSet transitionsArr; - ExprSet transitionsAdt; - if (stateNoOp >= 0 && stateNoOp < opsAdt.size()) - { - Expr adtPred; - Expr arrPred; - - getConj(opsArr[stateNoOp], transitionsArr); - getConj(opsAdt[stateNoOp], transitionsAdt); - - if (transitionsArr.empty()) - { - for (auto trAdt : transitionsAdt) - { - if (isOpX(trAdt) && isOpX(trAdt->last())) // coming from the query - { - trAdt = trAdt->last(); - if (containsOp(trAdt->left()) && contains(trAdt->right(), adtType)) - { - adtPred = trAdt->right(); - arrPred = trAdt->left(); - } - else if (containsOp(trAdt->right()) && contains(trAdt->left(), adtType)) - { - adtPred = trAdt->left(); - arrPred = trAdt->right(); - } - } - } - } - else - { - for (auto trArr : transitionsArr) - { - for (auto trAdt : transitionsAdt) - { - if (isOpX(trArr) && isOpX(trAdt)) - { - if (trArr->left() == trAdt->left()) - { - adtPred = trAdt->right(); - arrPred = trArr->right(); - } - else if (trArr->right() == trAdt->right()) - { - adtPred = trAdt->left(); - arrPred = trArr->left(); - } - else if (trArr->left() == trAdt->right()) - { - adtPred = trAdt->left(); - arrPred = trArr->right(); - } - else if (trArr->right() == trAdt->left()) - { - adtPred = trAdt->right(); - arrPred = trArr->left(); - } - } - } - } - } - - if (adtPred != NULL && arrPred != NULL) - { - // prepare app for the definition of R - // unify vars - // step 1: find common occurrences in adtPred and arrPred: - - ExprSet c; - intersect(adtPred, arrPred, c); - assert (!c.empty()); - - // step 2: make sure body uses vars from c - // assume c.size() == 1; - Expr cVar = *c.begin(); - if (!contains(argsInd[adtVarInd], cVar)) - { - ExprVector av; - filter (argsInd[adtVarInd], bind::IsConst (), inserter(av, av.begin())); - for (auto & v : av) - { - if (bind::typeOf(v) == bind::typeOf(cVar)) - { - argsInd[adtVarInd] = replaceAll(argsInd[adtVarInd], v, cVar); - break; - } - } - } - - Expr app = bind::fapp (rel, argsInd); - - // prepare for the nested call of R in the inductive rule of R - ExprVector argsIndNested = argsInd; - for (int j = 0; j < types.size(); j++) - { - if (j == adtVarInd) - { - argsIndNested[j] = vars[j]; - } - else if (j == arrVarInd) - { - // TODO: make sure variables are unified - if (alt) - { - argsIndNested[j] = opsArr[indConIndex]->right(); - if (indConIndex == stateProducingOp) - { - Expr tmp = argsIndNested[j]; - tmp = swapPlusMinusConst(tmp); - if (tmp != argsIndNested[j]) - { - argsIndNested[j] = tmp; - } - else - { - // GF: hack, need a proper replacer - tmp = replaceAll(tmp, mk(efac), mk(efac)); - if (tmp != argsIndNested[j]) - { - argsIndNested[j] = tmp; - } - else - { - // complicated replacement based on noops - - ExprVector av; // sanity check - filter (adtPred, bind::IsConst (), inserter(av, av.begin())); - for (auto & a : av) assert (contains (app, a)); // TODO: proper renaming - - ExprSet c; - intersect(app, tmp, c); - for (auto & a : c) - { - if (bind::typeOf(adtPred) == bind::typeOf(a)) - { - tmp = replaceAll(tmp, a, adtPred); - if (tmp != argsIndNested[j]) - { - argsIndNested[j] = tmp; - break; - } - } - } - } - } - } - } - } - } - nestedRel = bind::fapp (rel, argsIndNested); - - Expr body = - simplifyFormulaWithLemmas( - replaceAll(mk(arrPred, adtPred), - vars[adtVarInd], argsInd[adtVarInd]), - assumptions, constructors); - - cnjs.insert(body); - cnjs.insert(nestedRel); - Expr inductiveDef = mk(app, conjoin(cnjs, efac)); - indRule = createQuantifiedFormula(inductiveDef); - extraLemmas.push_back(createQuantifiedFormula( - mk(bind::fapp (rel, vars), mk(arrPred, adtPred)))); - } - } - } - - Expr simplifyFormulaWithLemmas(Expr fla, ExprVector lemmas, ExprVector& constructors) - { - ADTSolver sol (fla, lemmas, constructors, 0, 0, 3, 0, false); - ExprSet newAssms; - sol.simplifyAssm(fla, newAssms); - if (newAssms.empty()) return fla; - ExprSet newAssmsSimpl; - for (auto & a : newAssms) newAssmsSimpl.insert(/*simplifyArithm*/(simplifyBool(a))); - return *newAssmsSimpl.begin(); // TODO: check if it is meaningful somehow - } - - void preprocessing() - { - assert(opsAdt.size() == opsArr.size()); - - for (int i = 0; i < opsAdt.size(); i++) checkConstructor(i); - - if (indCon == NULL) - { - for (auto & c : constructors) - { - for (int j = 0; j < c->arity() - 1; j++) - { - if (c->last() == c->arg(j)) - { - // found inductive constructor - Expr indConstructor = c; - ExprVector args; - for (int i = 1; i < indConstructor->arity() - 1; i++) - { - Expr s; - if (j == i) - { - // link to the already defined ADT (try guessing for now) - for (auto & p : varVersions) - { - if (containsOp(p.first)) - { - s = p.first; - break; - } - } - assert(s != NULL); - } - else - { - // should be a fresh (nonstate) var - - Expr singleCons = NULL; - for (auto & a : constructors) - { - if (a->last() == indConstructor->arg(i)) - { - if (singleCons != NULL) - { - singleCons = NULL; - break; - } - singleCons = a; - } - } - if (singleCons != NULL && !isIndConstructor(singleCons, indConstructor->arg(i))) - { - // unfold non-recursive definitions - ExprVector argsCons; - for (int j = 1; j < singleCons->arity() - 1; j++) - { - argsCons.push_back(bind::mkConst(mkTerm ("_x_" + to_string(j), efac), singleCons->arg(j))); - } - s = bind::fapp (singleCons, argsCons); - - } - else - { - s = bind::mkConst(mkTerm ("_x_" + to_string(i), efac), indConstructor->arg(i)); - } - } - args.push_back(s); - } - indCon = bind::fapp(indConstructor, args); - break; - } - } - } - } - - adtType = bind::typeOf(indCon); - ExprVector empt; - for (auto & a : constructors) if (a->arity() == 2) baseCon = bind::fapp (a, empt); - - assert(adtType == bind::typeOf(indCon)); - - if (stateProducingOp == -1) stateProducingOp = findStateProducingOpInAssms(); - if (stateConsumingOp == -1) stateConsumingOp = findStateConsumingOpInAssms(); - assert(stateProducingOp >= 0); - assert(stateConsumingOp >= 0); - if (indConIndex == -1) indConIndex = stateConsumingOp; // for the case of crafted ind constructors - - for (stateNoOp = 0; stateNoOp < opsAdt.size(); stateNoOp++) - { - if (stateNoOp != stateProducingOp && - stateNoOp != stateConsumingOp) - { - break; - } - } - assert(baseFormula != NULL); - - // get vars, types and arguments for rules of R - - for (auto & p : varVersions) - { - Expr v = p.first; - vars.push_back(v); - varsPrime.push_back(p.second); - indCon = replaceAll(indCon, p.second, v); - types.push_back(bind::typeOf(v)); - - if (bind::typeOf(v) == adtType) - { - argsBase.push_back(baseCon); - } - else - { - if (varVersions[v] == NULL) - { - outs () << "NO UNPRIMED VAR FOR " << *v <<"\n"; - return; - } - argsBase.push_back(v); - } - if (bind::typeOf(v) == adtType) - argsInd.push_back(indCon); // use the app of the constructor(s) as argument - else - argsInd.push_back(v); // use unprimed versions of other variables - } - - types.push_back (mk (efac)); - Expr baseApp = bind::fapp (rel, argsBase); - Expr baseDef = mk(baseApp, baseFormula); - // create a quantified formula representing the base rule of R - baseRule = createQuantifiedFormula(baseDef); - - // prepare for the inductive rule construction - ExprSet indexVars; - getCounters (opsArr[indConIndex], indexVars); - indexVar = *indexVars.begin(); // proceed with the least one - indexVar = replaceAllRev(indexVar, varVersions); - - // identify how elements in the arrays are accessed (i.e., the indexVar) - // and what content is stored to the array - ExprSet transitions; - getConj(opsArr[indConIndex], transitions); - for (auto tr : transitions) - { - if (contains (tr, indexVar) && !containsOp(tr) && isOpX(tr)) - { - tr = normalizeArithm(tr); - tr = ineqSimplifier(indexVar, tr); - assert(tr->left() == indexVar); - accessTerm = replaceAllRev(tr->right(), varVersions); - if (indConIndex == stateConsumingOp) // maybe will need to be treated more carefully - accessTerm = swapPlusMinusConst(accessTerm); - } - else - { - ExprSet cnj; - getConj(rewriteSelectStore(tr), cnj); - for (auto & a : cnj) - if (isOpX(a) && isOpX(argsInd[arrVarInd], - mk(argsInd[indexVarInd], cur))); - bool res = false; - for (auto it = cnjs.begin(); it != cnjs.end(); ) - { - if (u.implies(*it, a)) - { - res = true; - cnjs.erase(it); - break; - } - else ++it; - } - if (!res) - { - if (nonstateVars.size() > 1) - { - pre.insert(mk(mk(argsInd[indexVarInd], all), mkTerm (mpz_class (i), efac))); - } - } - } - - if (u.isTrue(mk(argsIndNested[indexVarInd], mk(argsInd[indexVarInd], all)))) - { - Expr newDecrement = mk(argsInd[indexVarInd], mkTerm (mpz_class (1), efac)); - pre.insert(mk(nonstateVars.back(), mk(bindVars[l1][arrInds[ai]], bindVars[l1 - 1][-1 * var - 1]); -// allVars.insert(bindVars[l1][arrInds[ai]]); -// ai++; -// } -// vers.push_back(bvar); -// } -// versVars.push_back(vers); -// allVars.insert(vers.begin(), vers.end()); -// } -// } - - void getOptimConstr(vector& versVars, int vs, ExprVector& diseqs) - { - for (auto v : versVars) - for (int i = 0; i < v.size(); i++) - for (int j = i + 1; j < v.size(); j++) - diseqs.push_back(mk(mk(v[i], v[j]), mkMPZ(1, m_efac), mkMPZ(0, m_efac))); - - for (int i = 0; i < vs; i++) - for (int j = 0; j < versVars.size(); j++) - for (int k = j + 1; k < versVars.size(); k++) - diseqs.push_back(mk(mk(versVars[j][i], versVars[k][i]), mkMPZ(1, m_efac), mkMPZ(0, m_efac))); - } - - // used for a loop and a splitter -// bool unrollAndExecuteSplitter( -// Expr srcRel, -// ExprVector& srcVars, -// vector >& models, -// Expr splitter, Expr invs, int k = 10) -// { -// assert (splitter != NULL); -// -// // helper var -// string str = to_string(numeric_limits::max()); -// str = str.substr(0, str.find('.')); -// cpp_int max_double = lexical_cast(str); -// -// for (auto & a : ruleManager.cycles) -// { -// for (int cyc = 0; cyc < a.second.size(); cyc++) -// { -// vector mainInds; -// vector arrInds; -// auto & loop = a.second[cyc]; -// if (srcRel != ruleManager.chcs[loop[0]].srcRelation) continue; -// if (models.size() > 0) continue; -// -// ExprVector vars; -// for (int i = 0; i < ruleManager.chcs[loop[0]].srcVars.size(); i++) -// { -// Expr var = ruleManager.chcs[loop[0]].srcVars[i]; -// if (bind::isIntConst(var)) -// { -// mainInds.push_back(i); -// vars.push_back(var); -// } -// else if (isConst (var) && ruleManager.hasArrays[srcRel]) -// { -// for (auto it : ruleManager.iterators[srcRel]) -// { -// vars.push_back(mk(bvar)) bvar = bvar->left(); -// Expr m = allModels[bvar]; -// if (m == NULL) { toSkip = true; break; } -// equalities.insert(mk(srcVar, m)); -// } -// if (toSkip) continue; -// equalities.insert(splitter); -// -// if (u2.isSat(equalities)) //exclude models that don't satisfy splitter -// { -// vector model; -// -// for (int i = 0; i < vars.size(); i++) { -// Expr bvar = versVars[j][i]; -// Expr m = allModels[bvar]; -// double value; -// if (m != NULL && isOpX(m)) -// { -// if (lexical_cast(m) > max_double || -// lexical_cast(m) < -max_double) -// { -// toSkip = true; -// break; -// } -// value = lexical_cast(m); -// } -// else -// { -// toSkip = true; -// break; -// } -// model.push_back(value); -// if (debug) outs () << *bvar << " = " << *m << ", "; -// // if (j == 0) -// // { -// // if (isOpX(var, ruleManager.chcs[loop[0]].srcVars[it])); -// mainInds.push_back(-1 * it - 1); // to be on the negative side -// arrInds.push_back(i); -// } -// } -// } -// -// if (vars.size() < 2 && cyc == ruleManager.cycles.size() - 1) -// continue; // does not make much sense to run with only one var when it is the last cycle -// srcVars[srcRel] = vars; -// -// auto prefix = ruleManager.getPrefix(srcRel); -// vector trace; -// Expr lastModel = mk(m_efac); -// -// for (int p = 0; p < prefix.size(); p++) -// { -// if (chcsConsidered[prefix[p]] == true) -// { -// Expr lastModelTmp = exprModels[prefix[p]]; -// if (lastModelTmp != NULL) lastModel = lastModelTmp; -// trace.clear(); // to avoid CHCs at the beginning -// } -// trace.push_back(prefix[p]); -// } -// -// int l = trace.size() - 1; // starting index (before the loop) -// if (ruleManager.hasArrays[srcRel]) l++; // first iter is usually useless -// -// for (int j = 0; j < k; j++) -// for (int m = 0; m < loop.size(); m++) -// trace.push_back(loop[m]); -// -// int backCHC = -1; -// for (int i = 0; i < ruleManager.chcs.size(); i++) -// { -// auto & r = ruleManager.chcs[i]; -// if (i != loop[0] && !r.isQuery && r.srcRelation == srcRel) -// { -// backCHC = i; -// chcsConsidered[i] = true; // entry condition for the next loop -// trace.push_back(i); -// break; -// } -// } -// -// ExprVector ssa; -// getSSA(trace, ssa); -// bindVars.pop_back(); -// int traceSz = trace.size(); -// -// // compute vars for opt constraint -// vector versVars; -// ExprSet allVars; -// ExprVector diseqs; -// fillVars(srcRel, vars, l, loop.size(), mainInds, arrInds, versVars, allVars); -// getOptimConstr(versVars, vars.size(), diseqs); -// -// Expr cntvar = bind::intConst(mkTerm ("_FH_cnt", m_efac)); -// allVars.insert(cntvar); -// allVars.insert(bindVars.back().begin(), bindVars.back().end()); -// ssa.insert(ssa.begin(), mk(cntvar, mkplus(diseqs, m_efac))); -// -// bool toContinue = false; -// bool noopt = false; -// while (true) -// { -// if (ssa.size() - loop.size() < 2) -// { -// if (debug) outs () << "Unable to find a suitable unrolling for " << *srcRel << "\n"; -// toContinue = true; -// break; -// } -// -// if (u.isSat(lastModel, conjoin(ssa, m_efac))) -// { -// if (backCHC != -1 && trace.back() != backCHC && -// trace.size() != traceSz - 1) // finalizing the unrolling (exit CHC) -// { -// trace.push_back(backCHC); -// ssa.clear(); // encode from scratch -// getSSA(trace, ssa); -// bindVars.pop_back(); -// noopt = true; // TODO: support optimization queries -// } -// else break; -// } -// else -// { -// noopt = true; // TODO: support -// if (trace.size() == traceSz) -// { -// trace.pop_back(); -// ssa.pop_back(); -// bindVars.pop_back(); -// } -// else -// { -// trace.resize(trace.size()-loop.size()); -// ssa.resize(ssa.size()-loop.size()); -// bindVars.resize(bindVars.size()-loop.size()); -// } -// } -// } -// -// if (toContinue) continue; -// map ms; -// -// ExprMap allModels; -// if (noopt) -// u.getModel(allVars, allModels); -// else -// u.getOptModel(allVars, allModels, cntvar); -// -// if (debug) outs () << "\nUnroll and execute the cycle for " << srcRel << "\n"; -// for (int j = 0; j < versVars.size(); j++) -// { -// vector model; -// bool toSkip = false; -// if (debug) outs () << " model for " << j << ": ["; -// -// for (int i = 0; i < vars.size(); i++) { -// Expr bvar = versVars[j][i]; -// Expr m = allModels[bvar]; -// double value; -// if (m != NULL && isOpX(m)) -// { -// if (lexical_cast(m) > max_double || -// lexical_cast(m) < -max_double) -// { -// toSkip = true; -// break; -// } -// value = lexical_cast(m); -// } -// else -// { -// toSkip = true; -// break; -// } -// model.push_back(value); -// if (debug) outs () << *bvar << " = " << *m << ", "; -// if (!containsOp(bvar)) -// ms[i].insert(mk(vars[i], m)); -// } -// if (toSkip) -// { -// if (debug) outs () << "\b\b < skipping > ]\n"; -// } -// else -// { -// models[srcRel].push_back(model); -// if (debug) outs () << "\b\b]\n"; -// } -// } -// -// // for (auto & a : ms) -// // concrInvs[srcRel].insert(simplifyArithm(disjoin(a.second, m_efac))); -// -// // although we care only about integer variables for the matrix above, -// // we still keep the entire model to bootstrap the model generation for the next loop -// if (chcsConsidered[trace.back()]) -// { -// ExprSet mdls; -// for (auto & a : bindVars.back()) -// if (allModels[a] != NULL) -// mdls.insert(mk(a, allModels[a])); -// exprModels[trace.back()] = replaceAll(conjoin(mdls, m_efac), -// bindVars.back(), ruleManager.chcs[trace.back()].srcVars); -// } -// } -// } -// return true; -// } - - bool findTest(map & newTest) - { - // kVersVals : vector > - for (auto & a : kVersVals) - { - // a : map - bool allTrue = true; - for (auto & b : a) - { - if (b.second.size() == newTest[b.first].size()) - { - for (int i = 0; i < b.second.size(); i++) - { - if (b.second[i] != newTest[b.first][i]) - { - allTrue = false; - break; - } - } - } - else allTrue = false; - if (!allTrue) break; - } - if (allTrue) - { - if (debug) outs () << "test already generated\n"; - return true; - } - } - return false; - } - - ExprVector bodiesCnjs; - bool getTest(bool tryAgain = true, int threshold = 50) - { - map newTest; - ExprVector extra, toCmp; - Expr ten = mkMPZ(threshold, m_efac); - for (auto k : kVers) - for (auto & a : k.second) - { - Expr val = u.getModel(a); - if (val == a) val = mkMPZ(0, m_efac); - assert (isNumeric(val) || isBoolean(val)); - - // heuristic to get small models - if (tryAgain && isNumeric(val) && lexical_cast(val) > threshold) - extra.push_back(mk(a, ten)); - toCmp.push_back(mk(a, val)); - newTest[k.first].push_back(val); - } - - if (debug) - { - outs () << "cur model:\n"; - pprint(toCmp, 3); - } - - if (extra.size() > 0) - { - if (!bodiesCnjs.empty()) // maintained outside - extra.insert(extra.end(), bodiesCnjs.begin(), bodiesCnjs.end()); - - if (true == u.isSat(conjoin(extra, m_efac), false)) - { - if (debug) outs () << "smaller model found\n"; - return getTest(false, threshold); - } - } - - if (findTest(newTest)) return false; - - kVersVals.push_back(newTest); - if (debug) - { - outs () << "adding new test case:"; - pprint(toCmp); - outs () << "\n"; - } - return true; - } - - void printTest() - { - ofstream testfile; - testfile.open ("testgen_" + lexical_cast(kVersVals.size() - 1) + ".h"); - testfile << "#include \n"; - testfile << "int precisions = 10;\n"; - - for (auto k : mKeys) - { - testfile << "int cnt_" << k.first << " = 0;\n"; - testfile << "int tot_" << k.first << " = " << kVers[k.first].size() << ";\n"; - } - testfile << "\n"; - testfile << "void print_value(int v){\n"; - testfile << " FILE* f = fopen(\"number.txt\", \"a\");\n"; - testfile << " if (f != NULL){\n"; - testfile << " fprintf(f, \"%d \", v); \n"; - testfile << " fclose(f); f = NULL;\n"; - testfile << " }\n"; - testfile << "}\n"; - for (auto k : mKeys) - { - testfile << "static const int inp_" << k.first << "[] = {"; - auto& l = kVersVals.back()[k.first]; - - for (int v = 0; v < l.size(); v++) - { - if (isOpX(l[v])) testfile << "1"; - else if (isOpX(l[v])) testfile << "0"; - else testfile << l[v]; - if (v < l.size() - 1) testfile << ", "; - } - testfile << "};\n"; - } - testfile << "\n"; - for (auto k : mKeys) - { - testfile << "const int nondet_" << k.first << "(){\n"; - testfile << " if (cnt_" << k.first << " < tot_" << k.first << "){\n"; - testfile << " print_value(inp_" << k.first << "[cnt_" << k.first << "]);\n"; - testfile << " return inp_" << k.first << "[cnt_" << k.first << "++];}\n"; - testfile << " else {int rr = rand() % precisions; print_value(rr); return rr;}\n"; - testfile << "}\n\n"; - } - testfile.close(); - } - }; - -// inline void unrollAndCheck(string smt, int bnd1, int bnd2, int to, bool skip_elim, int debug) -// { -// ExprFactory m_efac; -// EZ3 z3(m_efac); -// CHCs ruleManager(m_efac, z3, debug); -// if (!ruleManager.parse(smt, !skip_elim)) return; -// BndExpl bnd(ruleManager, to, debug); -// bnd.exploreTraces(bnd1, bnd2, true); -// }; -} - -#endif diff --git a/include/deep/DataLearner.hpp b/include/deep/DataLearner.hpp deleted file mode 100644 index 4d01763aa..000000000 --- a/include/deep/DataLearner.hpp +++ /dev/null @@ -1,751 +0,0 @@ -#ifndef DATALEARNER__HPP__ -#define DATALEARNER__HPP__ - -// currently only polynomials upto degree 2 is supported - -#include -#include -#include -#include -#include -#include - -#include "armadillo" - -#include "Horn.hpp" -#include "BndExpl.hpp" - -using namespace std; -using namespace boost; - -namespace ufo -{ - - const double approxEqualTol = 0.001; - const char approxEqualMethod[] = "absdiff"; - - enum loglevel {NONE, ERROR, INFO, DEBUG}; - - unsigned int LOG_LEVEL = INFO; - - template - void printmsg(T t) - { - std::cout << t << std::endl; - } - - template - void printmsg(T t, Args... args) - { - std::cout << t << " "; - printmsg(args...); - } - - template - void printmsg(loglevel level, Args... args) - { - if (level <= LOG_LEVEL) { - printmsg(args...); - } - } - - //if multipleloops then executes entire program once and caches models of all inductive relations - class loadDataFromSMTHelper - { - private: - static loadDataFromSMTHelper * ptr; - map > > exprToModels; - loadDataFromSMTHelper() {} - - bool - executeEntireProgram(CHCs & rm, ufo::ZSolver & solver) - { - BndExpl bnd(rm); - return bnd.unrollAndExecuteMultiple(solver, exprToModels); - } - - bool - exprModels(const Expr & inv, vector< vector > & models) - { - auto itr = exprToModels.find(inv); - if (itr == exprToModels.end()) { - return false; - } else { - for (auto model : itr->second) { - models.push_back(model); - } - return true; - } - } - - public: - static bool - getModels(bool multipleLoops, const Expr & inv, CHCs & rm, - ufo::ZSolver & solver, vector< vector > & models) - { - if (ptr == nullptr) { - ptr = new loadDataFromSMTHelper(); - if (multipleLoops && !(ptr->executeEntireProgram(rm, solver))) { - return false; - } - } - - if(multipleLoops) { - return ptr->exprModels(inv, models); - } else { - BndExpl bnd(rm); - return bnd.unrollAndExecute(inv, solver, models); - } - } - - }; - class DataLearner - { - - private: - - struct armaApproxEqual - { - bool operator() (const double & a, const double & b) const { - if (!arma::approx_equal(arma::vec(1).fill(a), arma::vec(1).fill(b), - approxEqualMethod, approxEqualTol)) { - return (a < b); - } - return false; - } - }; - - CHCs& ruleManager; - ExprFactory &m_efac; - ufo::ZSolver m_smt_solver; - - Expr inv; - bool multipleLoops; - unsigned int numVars; - int trIndex; - arma::mat dataMatrix; - unsigned int prevDataSize; - - unsigned int curPolyDegree; - unsigned int maxPolyCompute[3]; - unsigned int numPolyCompute; - - map monomialToExpr; - - map largeCoeffToExpr; - - ExprSet polynomialsComputed; - vector basisComputed; - - // return nonzero on error - int - loadDataFromFile(const std::string & fileName) - { - dataMatrix.load(fileName, arma::csv_ascii); - - if (dataMatrix.n_cols != numVars+1) { - printmsg(ERROR, "data load failed from ", fileName); - printmsg(INFO, "vars: ", numVars, "\ncolumns read: ", dataMatrix.n_cols); - dataMatrix.clear(); - return 1; - } - - printmsg(DEBUG, "vars: ", numVars, "\n row x col ", dataMatrix.n_rows, dataMatrix.n_cols); - - return 0; - } - - arma::mat - computeMonomial(arma::mat data) - { - arma::mat monomialMatrix; - monomialMatrix.fill(0); - if (curPolyDegree == 1) { - monomialMatrix.set_size(dataMatrix.n_rows, dataMatrix.n_cols); - for (int i = 0; i < dataMatrix.n_rows; i++) { - for (int j = 0; j < dataMatrix.n_cols; j++) { - monomialMatrix(i,j) = dataMatrix(i,j); - } - } - } else { - //compute all monomials upto degree 2 - monomialMatrix.set_size(dataMatrix.n_rows, (dataMatrix.n_cols * (dataMatrix.n_cols+1)) / 2); - for (int i = 0; i < dataMatrix.n_rows; i++) { - for(int j = 0, dmcol=0; j < dataMatrix.n_cols; j++) { - for (int k = j; k < dataMatrix.n_cols; k++, dmcol++) { - monomialMatrix(i, dmcol) = dataMatrix(i,j) * dataMatrix(i, k); - } - } - } - } - - return monomialMatrix; - } - - arma::mat - gaussjordan(arma::mat input) - { - unsigned int cur_row = 0; - unsigned int cur_col = 0; - arma::vec rowToPivot = arma::vec(input.n_rows); - const unsigned int UNDEFINED_PIVOT = 100; - - rowToPivot.fill(UNDEFINED_PIVOT); - - printmsg(DEBUG, "Before row\n", input); - - //row echleon form - while (cur_col < input.n_cols && cur_row < input.n_rows) { - - if (input(cur_row, cur_col) == 0) { - unsigned int next_nonzero; - for (next_nonzero = cur_row; next_nonzero < input.n_rows; next_nonzero++) { - if (input(next_nonzero, cur_col) != 0) { - break; - } - } - if (next_nonzero == input.n_rows) { - cur_col++; - continue; - } else { - input.swap_rows(cur_row, next_nonzero); - } - } - - if (input(cur_row, cur_col) != 1) { - double inverse = 1/input(cur_row, cur_col); - for (unsigned int k = cur_col; k < input.n_cols; k++) { - input(cur_row, k) = input(cur_row,k)*inverse; - } - } - - for (unsigned int j = cur_row+1; j < input.n_rows; j++) { - double f = input(j, cur_col)/input(cur_row, cur_col); - for (unsigned int k = 0; k < input.n_cols; k++) { - input(j,k) = input(j,k) - input(cur_row, k)*f; - } - input(j,cur_col) = 0; - } - - rowToPivot(cur_row) = cur_col; - - cur_col++; - cur_row++; - } - - rowToPivot(input.n_rows-1) = input.n_cols-1; - - //reduced row echloen form - if (cur_row != input.n_rows) { - //we have found a zero row before we reached last row - cur_row = cur_row-1; - } else { - cur_row = input.n_rows-1; - } - - cur_col = rowToPivot(cur_row); - - while (cur_row < input.n_rows) { - - cur_col = rowToPivot(cur_row); - - if (cur_col == UNDEFINED_PIVOT || input(cur_row,cur_col) == 0) { - cur_row--; - continue; - } - - for (unsigned int j = cur_row-1; j < input.n_rows; j--) { - double f = input(j,cur_col)/input(cur_row,cur_col); - for (unsigned int k = 0; k < input.n_cols; k++) { - input(j,k) = input(j,k) - input(cur_row,k)*f; - } - } - cur_row--; - } - - // printmsg(INFO, "after row reduced\n", input); - - std::vector independentVars; - - for (unsigned col = 0; col < input.n_cols; col++) { - if (col < input.n_rows && input(col, col) == 0) { - independentVars.push_back(col); - } - } - - arma::mat basis(input.n_cols, independentVars.size()); - basis.fill(0); - unsigned int basis_col = 0; - - for (auto indVar : independentVars) { - for (unsigned int row = 0; row < input.n_rows; row++) { - if (rowToPivot[row] == UNDEFINED_PIVOT) { - continue; - } - //TODO: replace -2 with lcm of column - //printmsg(DEBUG, input(row,indVar), row, indVar); - basis(rowToPivot(row), basis_col) = -1*input(row, indVar); - } - basis(indVar,basis_col)=1; - basis_col++; - } - - return basis; - } - - void - computetime(const string & msg, clock_t & start) - { - printmsg(DEBUG, msg, (clock() - start)/(CLOCKS_PER_SEC/1000.0)); - start = clock(); - } - - bool - allowedPolyCoefficient(double val, Expr & coeffExpr) - { - //arma may not store exact 0 as val - if (arma::approx_equal(arma::vec(1).fill(0), arma::vec(1).fill(val), - approxEqualMethod, approxEqualTol)) { - return false; - } - - auto search = largeCoeffToExpr.find(val); - if (search != largeCoeffToExpr.end()) { - coeffExpr = search->second; - // printmsg(DEBUG, "coefficient ", coeffExpr); - return true; - } - - if (val < 10000 && val > -10000) { - return true; - } - - return false; - } - - int - algExprFromBasis(const arma::mat & basis, vector & polynomials) - { - - /*TODO: fix this; not working for 8.c*/ - // if (arma::all(arma::vectorise(basis))) { - // return 1; - // } - - // create equations of the form a_1*x_1 + a_2*x_2 + ... = 0 - // where a_1, a_2, etc are from basis columns values - // and x_1, x_2 etc are monomials from corresponding basis' rows - // to disallow unsound invariants like a_1 = 0 add only candidates with atleast two terms - Expr zero = mkTerm(mpz_class(0), m_efac); - for (int col = 0; col < basis.n_cols; col++) { - int numTerms = 0; - Expr poly = nullptr; - for (int row = 0; row < basis.n_rows; row++) { - //coeffcient is stored in a stream first to avoid incorrect type conversion error - std::stringstream coeffStream; - coeffStream << std::fixed << basis(row,col); - - Expr abstractVar = nullptr; - if (!allowedPolyCoefficient(basis(row,col), abstractVar)) { - continue; - } - - Expr mult; - Expr monomialExpr = monomialToExpr[row]; - if (abstractVar != nullptr && (isNumericConst(monomialExpr) || curPolyDegree > 1)) { - if (!isNumericConst(monomialExpr)) { - mult = mk(abstractVar, monomialExpr); - } else { - int monomialInt = lexical_cast(monomialExpr); - //assumption is that abstractVar will be of the form intConst * var or var * intConst - bool success = true; - Expr var = nullptr; - int varCoeff = 1; - if (!isOpX(abstractVar)) { - success = false; - } else { - for (auto it = abstractVar->args_begin(), end = abstractVar->args_end(); it != end; ++it) { - if (isNumericConst(*it)) { - varCoeff = lexical_cast(*it); - } else if (bind::isIntConst(*it)) { - var = *it; - } else { - success = false; - } - } - } - if (!success || var == nullptr) { - mult = mk(abstractVar, monomialExpr); - } else { - mult = mk(mkTerm(mpz_class(varCoeff*monomialInt), m_efac), var); - } - } - } else { - int coeff; - coeffStream >> coeff; - mult = mk(mkTerm(mpz_class(coeff), m_efac), monomialToExpr[row]); - } - - if (poly != nullptr) { - poly = mk(poly, mult); - } else { - poly = mult; - } - - numTerms++; - } - - if (poly != nullptr && numTerms > 1) { - poly = mk(poly, zero); - polynomials.push_back(poly); - } - } - - return 0; - } - - void - addpolytocands(ExprSet & cands, Expr poly) - { - cands.insert(poly); - } - - void - addpolytocands(ExprVector & cands, Expr poly) - { - cands.push_back(poly); - } - - void - initTrIndex(Expr invDecl) - { - for (int i = 0; i < ruleManager.chcs.size(); i++) { - auto & r = ruleManager.chcs[i]; - if (r.isInductive && r.srcRelation == invDecl && r.dstRelation == invDecl) { - trIndex = i; - } - } - } - - void - initInvVars(Expr invDecl) - { - monomialToExpr.insert(pair(0, mkTerm(mpz_class(1), m_efac))); - - // Expr arg = invDecl->arg(0); - for (auto var : ruleManager.invVars[invDecl]) { - numVars++; - monomialToExpr.insert(pair(numVars, var)); - } - - //degree 2 monomials - for (unsigned int vIndex1 = 1, mIndex = numVars+1; vIndex1 <= numVars; vIndex1++) { - for (int vIndex2 = vIndex1; vIndex2 <= numVars; vIndex2++) { - monomialToExpr.insert(std::pair(mIndex, - mk(monomialToExpr[vIndex1], - monomialToExpr[vIndex2]))); - mIndex++; - } - } - - } - - // adds monomial and constant multiples of it if corresponding - // monomial column in datamatrix is constant - void - initLargeCoeffToExpr() - { - // first column is 1's - for (unsigned int col = 1; col < dataMatrix.n_cols; col++) { - - double tmp = dataMatrix(0, col); - unsigned int row; - - for (row = 1; row < dataMatrix.n_rows; row++) { - if (!arma::approx_equal(arma::vec(1).fill(dataMatrix(row, col)), arma::vec(1).fill(tmp), - approxEqualMethod, approxEqualTol)) { - break; - } - } - - if (row != dataMatrix.n_rows) { - continue; - } - - Expr var = monomialToExpr[col]; - for (int multiple = 1; multiple < 4; multiple++) { - Expr val1 = mk(mkTerm(mpz_class(multiple), m_efac), var); - Expr val2 = mk(mkTerm(mpz_class(-1*multiple), m_efac), var); - largeCoeffToExpr.insert(make_pair(multiple*tmp, val1)); - largeCoeffToExpr.insert(make_pair(-1*multiple*tmp, val2)); - } - - } - } - - - Expr - modelToExpr(vector model) - { - ExprVector eqs; - for (unsigned int index = 0; index < model.size(); index++) { - Expr var = monomialToExpr[index+1]; - eqs.push_back(mk(var, mkTerm(mpz_class(model[index]), m_efac))); - } - - return conjoin(eqs, m_efac); - } - - // return true only if all the data satisfies basis - bool - checkBasisSatisfiesData(arma::mat monomial, arma::vec basis) - { - if (monomial.n_cols != basis.n_elem) { - return false; - } - - arma::rowvec basisRow = arma::conv_to::from(basis); - - for (int row = 0; row < monomial.n_rows; row++) { - double sum = 0; - for (int col = 0; col < monomial.n_cols; col++) { - sum += basisRow(col) * monomial(row, col); - } - if (!arma::approx_equal(arma::vec(1).fill(sum), arma::vec(1).fill(0), - approxEqualMethod, approxEqualTol)) { - return false; - } - } - - return true; - - } - - template - int - getPolynomialsFromData(const arma::mat & data, CONTAINERT & cands, Expr assume = nullptr) - { - if (data.n_elem == 0) { - return -1; - } - - clock_t start = clock(); - - arma::mat monomialMatrix = computeMonomial(data); - - arma::mat basis = gaussjordan(monomialMatrix); - - // printmsg(INFO, "before basis check ", basis); - - if (basis.n_cols == 0) { - return 0; - } - - // cout << endl << basis << endl; //DEBUG - - computetime("basis computation time ", start); - - // check if column of basis is unique - if (assume == nullptr) { - for (int col = 0; col < basis.n_cols; col++) { - int oldcol; - for (oldcol = 0; oldcol < basisComputed[curPolyDegree].n_cols; oldcol++) { - if (arma::approx_equal(basis.col(col), basisComputed[curPolyDegree].col(oldcol), - approxEqualMethod, approxEqualTol)) { - basis.shed_col(col); - break; - } - } - } - - for (int col = 0; col < basis.n_cols; col++) { - basisComputed[curPolyDegree].insert_cols(basisComputed[curPolyDegree].n_cols, basis.col(col)); - } - } - - computetime("data unique check time ", start); - - // for some reason previous monomialmatrix is overwritten so copy to a different matrix - arma::mat monomialMatrix2 = computeMonomial(data); - for (int col = 0; col < basis.n_cols; col++) { - if (!checkBasisSatisfiesData(monomialMatrix2, basis.col(col))) { - basis.shed_col(col); - continue; - } - - } - - // if (assume != nullptr) { - // printmsg(INFO, "\n dataMatrix \n", dataMatrix); - // printmsg(INFO, "\n data \n", data); - // printmsg(INFO, "\n monomial \n", monomialMatrix); - // printmsg(INFO, "\n basis \n", basis); - // } - - vector polynomials; - polynomials.reserve(basis.n_cols); - - if (!algExprFromBasis(basis, polynomials)) { - for (auto poly : polynomials) { - Expr cand = (assume == nullptr) ? poly : mk(assume, poly); - if (polynomialsComputed.find(cand) == polynomialsComputed.end()) { - addpolytocands(cands, cand); - polynomialsComputed.insert(cand); - printmsg(DEBUG, "Adding polynomial: ", cand); - } - } - - computetime("poly conversion time ", start); - - return polynomials.size(); - } - - return 0; - - } - - //non-zero on error - int - loadDataFromSMT() - { - vector > models; - printmsg(DEBUG, "Unrolling and solving via SMT"); - if (!loadDataFromSMTHelper::getModels(multipleLoops, inv, ruleManager, m_smt_solver, models)) { - return 1; - } - - for (auto model : models) { - arma::rowvec row = arma::conv_to::from(model); - row.insert_cols(0, arma::rowvec(1, arma::fill::ones)); - dataMatrix.insert_rows(dataMatrix.n_rows, row); - } - - // cout << dataMatrix << endl; //DEBUG - - return 0; - - } - - public: - - DataLearner(CHCs& r, EZ3 &z3) : - ruleManager(r), m_smt_solver(z3), m_efac(r.m_efac), trIndex(-1), numVars(0), - curPolyDegree(1), numPolyCompute(0), prevDataSize(0) - { - multipleLoops = false; - maxPolyCompute[1] = 5; - maxPolyCompute[2] = numeric_limits::max(); - //to let index start from 1 - basisComputed.push_back(arma::mat()); - basisComputed.push_back(arma::mat()); - } - - - void - setLogLevel(unsigned int l) - { - LOG_LEVEL = l; - } - - - void - initialize(Expr invDecl, bool multiLoop = false, unsigned int loglevel = 2) - { - // cout << *invDecl << endl; - inv = invDecl; - multipleLoops = multiLoop; - setLogLevel(loglevel); - // initTrIndex(invDecl); - initInvVars(invDecl); - } - - // NOTE: should be called after initialize() - bool - computeData(const std::string & dataFile) - { - - assert(numVars != 0); - if (!multipleLoops && trIndex == -1) { - printmsg(ERROR, "Relation without inductive clauses are not supported yet"); - return false; - } - - if (dataFile.empty()) { - if (loadDataFromSMT() != 0) { - printmsg(INFO, "failed to load data from smt (also no input file)"); - return false; - } - } else { - if (loadDataFromFile(dataFile) != 0) { - printmsg(ERROR, "failed to load data from file ", dataFile); - return false; - } - } - - initLargeCoeffToExpr(); - - return true; - } - - // Implementation of "A Data Driven Approach for Algebraic Loop Invariants", Sharma et al. - // return number of candidate polynomials added (< 0 in case of error) - template - int - computePolynomials(CONTAINERT & cands) - { - - if (!multipleLoops && trIndex == -1) { - printmsg(ERROR, "Relations without inductive clauses are not supported yet"); - return -1; - } - - numPolyCompute++; - - if (numPolyCompute > maxPolyCompute[curPolyDegree]) { - curPolyDegree++; - basisComputed.push_back(arma::mat()); - } - - int retVal = getPolynomialsFromData(dataMatrix, cands); - prevDataSize = dataMatrix.n_rows; - return retVal; - } - - void - incPolyDegree() - { - if (curPolyDegree < 2) { - curPolyDegree++; - basisComputed.push_back(arma::mat()); - } - } - - // adds a unique row - void - updateData(vector data) - { - return ; - - arma::rowvec dataRow(data.size() + 1); - dataRow(0) = 1; - for (int i = 0; i < data.size(); i++) { - dataRow(i+1) = data[i]; - } - - for (unsigned int i = 0; i < dataMatrix.n_rows; i++) { - if (arma::approx_equal(dataMatrix.row(i), dataRow, approxEqualMethod, approxEqualTol)) { - return; - } - } - - dataMatrix.insert_rows(dataMatrix.n_rows, dataRow); - - } - - }; - - loadDataFromSMTHelper * loadDataFromSMTHelper::ptr = nullptr; -} - - -#endif diff --git a/include/deep/Distribution.hpp b/include/deep/Distribution.hpp deleted file mode 100644 index 944e7f102..000000000 --- a/include/deep/Distribution.hpp +++ /dev/null @@ -1,160 +0,0 @@ -#ifndef DISTRIBUTION__HPP__ -#define DISTRIBUTION__HPP__ - -#define MAXDISTR 1000 - -using namespace std; -using namespace boost; - -namespace ufo -{ - typedef vector distribution; - typedef vector weights; - typedef map density; - - class Distr - { - public: - - distribution distr; - - Distr() {} - - void setupUniformDistr(int range) - { - for (int i = 1; i < range; i++) - { - int num = i * MAXDISTR / range; - distr.push_back(num); - } - distr.push_back(MAXDISTR); - } - - int guessFromDistr() - { - int rnd = 0; - int range = distr.size(); - int maxd = distr[range-1]; - - int i = std::rand() % maxd; - while (i >= distr[rnd]) rnd ++; - - return rnd; - } - }; - - inline static int chooseByWeight(weights& wg) - { - Distr d; - int w = 0; - for (int i = 0; i < wg.size(); i++) - { - w += wg[i]; - d.distr.push_back(w); - } - return d.guessFromDistr(); - } - - inline static int chooseByWeight(density& den) - { - Distr d; - int w = 0; - for (auto &a : den) // assume the smallest "a.first" comes first - { - w += a.second; - while (d.distr.size() < a.first) d.distr.push_back(0); - d.distr.push_back(w); - } - return d.guessFromDistr(); - } - - inline static int guessUniformly(int range) - { - assert(range > 0); - return std::rand() % range; - } - - inline static void initDistrs(vector& distrs, int sz1, int sz2, int defaultValue = 1000) - { - if (distrs.size() == 0) - { - for (int i = 0; i < sz1; i++) - { - distrs.push_back(weights()); - for (int j = 0; j < sz2; j++) - { - distrs.back().push_back(defaultValue); // should be something greater than zero - } - } - } - } - - inline static bool isDefault(weights& d, int defaultValue = 1000) - { - for (int i = 0; i < d.size(); i++) - { - if (d[i] != defaultValue) return false; - } - return true; - } - - inline static bool isEmpty(density& d) - { - for (int i = 0; i < d.size(); i++) - { - if (d[i] > 0) return false; - } - return true; - } - - inline static void printDistr(weights& distr, string msg) - { - if (msg != "" ) outs () << msg << ": "; - outs () << "["; - for (int j = 0; j < distr.size(); j++) - { - outs() << distr[j] << ", "; - } - outs () << "]\n"; - } - - static inline void getCombinations(vector& data, int start, int rem, vector< set >& res) - { - if (start >= data.size()) return; - if (rem > data.size() - start) return; - - if (rem == 1) - { - for (int i = start; i < data.size(); i++) - { - set res0; - res0.insert(data[i]); - res.push_back(res0); - } - } - else - { - // if include data[start] - vector< set> res1; - getCombinations(data, start + 1, rem - 1, res1); - - for (int i = 0; i < res1.size(); i++) - { - res1[i].insert(data[start]); - res.push_back(res1[i]); - } - - // if skip data[start] - vector< set> res2; - getCombinations(data, start + 1, rem, res2); - - for (int i = 0; i < res2.size(); i++) - { - res.push_back(res2[i]); - } - } - } -} - - -#endif diff --git a/include/deep/LBExpl.hpp b/include/deep/LBExpl.hpp deleted file mode 100644 index 29b8ecebd..000000000 --- a/include/deep/LBExpl.hpp +++ /dev/null @@ -1,661 +0,0 @@ -#ifndef LBEXPL__HPP__ -#define LBEXPL__HPP__ - -#include "BndExpl.hpp" - -using namespace std; -using namespace boost; -namespace ufo -{ - class LBExpl : public BndExpl - { - protected: - bool prio; - - public: - - LBExpl (CHCs& r, int l, bool p, bool d = false) : - BndExpl(r, l, d), prio(p) {} - -// bool checkCovered(int tr, int c, int &tot) -// { -// auto & chc = ruleManager.chcs[c]; -// if (chc.bodies.size() <= 1) -// { -// tot++; -// return true; -// } -// -// for (int i = 0; i < chc.bodies.size(); i++) -// { -// Expr b = chc.bodies[i]; -// if (find(chc.covered.begin(), chc.covered.end(), i) == chc.covered.end()) -// { -// if (!chc.isQuery) -// b = replaceAll(b, chc.dstVars, bindVars[tr]); -// if (!chc.isFact) -// b = replaceAll(b, chc.srcVars, bindVars[tr-1]); -// -// b = replaceAll(b, chc.locVars, bindLocVars[tr]); -// if (bool(u.eval(b))) -// { -// bodiesCnjs.push_back(chc.bodies[i]); -// chc.covered.push_back(i); -// tot++; -// } -// } -// } -// return chc.covered.size() == chc.bodies.size(); -// } -//ToDo ilia updated - - set todoCHCs; -// void fillTodos() -// { -// // get points of control-flow divergence -// for (auto & d : ruleManager.decls) -// if (ruleManager.outgs[d->left()].size() > 1) -// for (auto & o : ruleManager.outgs[d->left()]) -// todoCHCs.insert(o); -// -// // add bodies with disjs -// for (int i = 0; i < ruleManager.chcs.size(); i++) -// if (ruleManager.chcs[i].bodies.size() > 1) -// { -// // outs () << " Hyper egde detected: " << i << "\n"; -// todoCHCs.insert(i); -// } -// -// // if the code is straight, just add queries -// if (todoCHCs.empty()) -// for (int i = 0; i < ruleManager.chcs.size(); i++) -// if (ruleManager.chcs[i].isQuery) -// todoCHCs.insert(i); -// } -//ToDo ilia updated - - int getNumUnvis(vector &g) - { - int n = 0; - for (auto i : g) - if (find(todoCHCs.begin(), todoCHCs.end(), i) != todoCHCs.end()) - n++; - return n; - } - - Expr getPost(Expr loophead, vector &o, int end) - { - for (auto & a : postsRev[loophead]) - { - int i = end; - int j = a.first.size() - 1; - while (i >= 0 && j >= 0) - { - if (o[i] != a.first[j]) break; - i--; - j--; - } - if (j == -1) return a.second; - } - return mk(m_efac); - } - -// void unroll(vector &o, vector> &n) -// { -// for (Expr l : ruleManager.loopheads) -// { -// for (int i = o.size() - 1; i >= 0; i--) -// { -// if (ruleManager.chcs[o[i]].dstRelation == l) -// { -// Expr tmp = getPost(l, o, i); -// // outs () << " unroll: " << tmp << ": " << postPre[l][tmp].size() <<"\n"; -// for (auto & a : (isOpX(tmp) ? ruleManager.cycles[l] : postPre[l][tmp])) -// { -// if (ruleManager.chcs[a.back()].dstRelation != l) continue; -// if (emptCycls[a]) -// { -// if (emptCyclsVisited[a]) continue; -// else emptCyclsVisited[a] = true; // unroll only once -// } -// vector nn = o; -// nn.insert(nn.begin()+i+1, a.begin(), a.end()); -// if (getNumUnvis(nn) == 0) continue; -// unique_push_back(nn, n); -// } -// break; // experiment: exit early, unroll only at the end -// } -// } -// } -// } -//ToDo ilia updated - -// void pruneLast(vector &a) -// { -// while (!a.empty()) -// { -// if (find(todoCHCs.begin(), todoCHCs.end(), a.back()) == todoCHCs.end() && -// find(ruleManager.loopheads.begin(), ruleManager.loopheads.end(), -// ruleManager.chcs[a.back()].dstRelation) == ruleManager.loopheads.end()) -// a.pop_back(); -// else break; -// } -// } -//ToDo ilia updated - - int weight(int i) - { - if (find(todoCHCs.begin(), todoCHCs.end(), i) == todoCHCs.end()) - return 0; - return 1; - // TODO: if (chc.bodies.size() > 1) return.... - // TODO: num of conjuncts - } - -// void print(vector &g) -// { -// outs () << " "; -// for (auto f : g) -// outs () << " " << ruleManager.chcs[f].dstRelation << "(" -// << ruleManager.chcs[f].covered.size() << "/" -// << ruleManager.chcs[f].bodies.size() << ")" << " -> "; -// outs () << "\n"; -// } -//ToDo ilia updated - - bool getNext(vector> & cntr, vector>::iterator & n) - { - int curMax = 0; - for (auto it = cntr.begin(); it != cntr.end();) - { - int cur = 0; - auto & g = *it; - for (auto i : g) cur += weight(i); - if (cur > curMax) - { - n = it; - curMax = cur; - } - ++it; - } - return curMax > 0; - } - -// void success(vector& g, vector> & cntr, vector> & prio1, -// vector> & prio2) -// { -// int rem = todoCHCs.size(); -// int tot = 0; -// for (int i = 0; i < g.size(); i++) -// if (find(todoCHCs.begin(), todoCHCs.end(), g[i]) != todoCHCs.end()) -// if (checkCovered(i, g[i], tot)) -// todoCHCs.erase(g[i]); -// -// if (tot > 0) -// { -// outs () << "\nNEW TEST: "; -// print(g); -// outs () << "\n\n"; -// if (getTest(false)) printTest(); -// } -// -// if (rem == todoCHCs.size()) -// { -// pruneLast(g); -// unique_push_back(g, prio2); -// } -// else -// { -// outs () << "Rem TODOs: " << todoCHCs.size() -// << " (sz = " << g.size() << ")" << "\n"; -// outs().flush(); -// auto f = find(cntr.begin(), cntr.end(), g); -// if (f != cntr.end()) cntr.erase(f); -// pruneLast(g); -// unique_push_back(g, prio1); -// } -// } -//ToDo ilia updated - -// Expr addDisjContr (vector & g) -// { -// ExprVector blocked; -// for (int s = 0; s < g.size(); s++) -// { -// auto & chc = ruleManager.chcs[g[s]]; -// if (chc.bodiesSz > 1) -// { -// ExprVector varsToDisable; -// for (int i = chc.locVars.size() - chc.bodiesSz, j = 0; -// i < chc.locVars.size(); i++, j++) -// if (find(chc.covered.begin(), chc.covered.end(), j) != -// chc.covered.end()) -// varsToDisable.push_back(mk(bindLocVars[s][i])); -// -// if (!varsToDisable.empty()) -// blocked.push_back(conjoin(varsToDisable, m_efac)); -// } -// } -// if (blocked.empty()) return NULL; -// return disjoin(blocked, m_efac); -// } -//ToDo ilia updated - -// void oneRound(vector> & cntr, vector> & prio1, -// vector>& prio2, vector>& prio3) -// { -// int sz; -// while (true) -// { -// vector>::iterator git; -// if (!getNext(cntr, git)) break; -// -// vector g = *git; -// ExprVector ssa; -// getSSA(g, ssa); -// Expr tmp = addDisjContr(g); -// bool added = tmp != NULL; -// if (added) ssa.push_back(tmp);; -// -// auto res = u.isSatIncrem(ssa, sz); -// if (true == res) -// { -// success(g, cntr, prio1, prio2); -// } -// else if (false == res) -// { -// cntr.erase(git); -// if (sz > 0) -// { -// if (ruleManager.chcs[g.back()].isQuery) -// { -// auto h = g; -// h.resize(g.size()-1); -// if (true == u.reSolve(added ? 2 : 1)) -// success(h, cntr, prio1, prio2); -// } -// -// int i; -// for (i = 0; i < g.size() && i < sz; i++) -// if (ruleManager.chcs[g[i]].bodies.size() > 1 || -// ruleManager.chcs[g[i]].covered.size() > 0) -// break; -// if (i == sz || i == g.size()) -// { -// g.resize(i); -// unsat_prefs.insert(g); // currently unuses? TODO -// } -// -// pruneLast(g); -// unique_push_back(g, prio3); -// } -// } -// else -// { -// if (debug) assert(0 && "indeterminate"); -// } -// } -// -// vector> tmp; -// for (auto & a : cntr) -// { -// pruneLast(a); -// unique_push_back(a, tmp); -// } -// cntr = tmp; -// } -//ToDo ilia updated - -// void exploreRec(vector> & traces, int lvl, string name) -// { -// outs () << "\n-----------------\nentering lvl: " << lvl << ", \"" << name << "\"\n"; -// vector> traces_prt; -// -// if (lvl == 0) -// traces_prt = traces; -// else -// for (int j = 0; j < traces.size(); j++) -// unroll(traces[j], traces_prt); -// -// if (traces_prt.empty()) return; -// outs () << "considering " << traces_prt.size() << " traces\n"; -// -// vector> traces_prio, traces_unsat_cond, traces_unsat; -// oneRound(traces_prt, traces_prio, traces_unsat_cond, traces_unsat); -// -// if (!prio) // TODO: check for duplicates, play with order -// { -// traces_prt.insert(traces_prt.end(), traces_prio.begin(), traces_prio.end()); -// traces_prt.insert(traces_prt.end(), traces_unsat_cond.begin(), traces_unsat_cond.end()); -// traces_prt.insert(traces_prt.end(), traces_unsat.begin(), traces_unsat.end()); -// } -// -// // rec.calls : -// exploreRec(traces_prt, lvl + 1, "next"); -// -// if (prio) -// { -// exploreRec(traces_prio, lvl + 1, "prio sats"); -// exploreRec(traces_unsat_cond, lvl + 1, "unsats cond"); -// exploreRec(traces_unsat, lvl + 1, "unsats"); -// } -// -// outs () << "exiting lvl: " << lvl << "\n"; -// } -//ToDo ilia updated - - map>>> pres, posts; - map, Expr>> postsRev; - - // mainly for local comp now, but might be used incrementally? - map, Expr> ppprefs, ppsuffs; - map>>> postPre; - -// void computePrePost(vector & t) -// { -// ExprVector ssa; -// getSSA(t, ssa); -// Expr srcRel = ruleManager.chcs[t[0]].srcRelation; -// Expr dstRel = ruleManager.chcs[t.back()].dstRelation; -// Expr pre = mk(m_efac); -// Expr post = mk(m_efac); -// auto & srcVars = ruleManager.invVars[srcRel]; -// auto & dstVars = ruleManager.invVars[dstRel]; -// -// int sz; -// bool done = false; -// if (!dstVars.empty()) -// { -// for (auto & b : posts[dstRel]) -// { -// ExprVector tmp = ssa; -// tmp.push_back(mkNeg(b.first)); -// if (false == u.isSatIncrem(tmp, sz)) -// { -// b.second.push_back(t); -// postsRev[dstRel][t] = post; -// done = true; -// break; -// } -// } -// -// if (!done) -// { -// for (int i = t.size() < lookahead ? 0 : t.size() - lookahead; i < ssa.size(); i++) -// { -// vector tmp; -// tmp.insert(tmp.begin(), t.begin(), t.begin() + i + 1); -// if (ppprefs[tmp] == NULL) -// { -// post = keepQuantifiers(mk(post, ssa[i]), bindVars[i]); -// ppprefs[tmp] = post; -// } -// else -// { -// post = ppprefs[tmp]; -// } -// } -// post = replaceAll(post, bindVars.back(), dstVars); -// posts[dstRel][post].push_back(t); -// postsRev[dstRel][t] = post; -// } -// } -// if (!srcVars.empty()) -// { -// done = false; -// for (auto & b : pres[srcRel]) -// { -// ExprVector tmp = ssa; -// tmp.push_back(mkNeg(b.first)); -// if (false == u.isSatIncrem(tmp, sz)) -// { -// b.second.push_back(t); -// done = true; -// break; -// } -// } -// if (!done) -// { -// for(int i = t.size() <= lookahead ? ssa.size() - 1 : lookahead; i >= 0; i--) -// { -// vector tmp; -// tmp.insert(tmp.begin(), t.begin() + i, t.end()); -// if (ppsuffs[tmp] == NULL) -// { -// pre = keepQuantifiers(mk(pre, ssa[i]), -// (i == 0 ? srcVars : bindVars[i - 1])); -// ppsuffs[tmp] = pre; -// } -// else -// { -// pre = ppsuffs[tmp]; -// } -// } -// -// pres[srcRel][pre].push_back(t); -// } -// } -// } -//ToDo ilia updated - -// void getPrePostConds() -// { -// SMTUtils u2(m_efac); // to free mem -// -// // proto, for now. to merge -// for (auto it = ruleManager.acyclic.begin(); it != ruleManager.acyclic.end(); ++it) -// { -// auto & t = *it; -// int i = 0; -// int j = 0; -// while (j < t.size()) -// { -// bool lhfound = false; -// for (Expr l : ruleManager.loopheads) -// { -// if (ruleManager.chcs[t[j]].dstRelation == l || j == t.size() - 1) -// { -// vector tmp; -// for (int k = i; k <= j; k++) tmp.push_back(t[k]); -// ExprVector ssa; -// getSSA(tmp, ssa); -// computePrePost(tmp); -// outs () << "."; -// outs ().flush(); -// lhfound = true; -// break; -// } -// } -// if (lhfound) i = j + 1; -// j++; -// } -// } -// -// for (auto & a : ruleManager.cycles) -// { -// int k = 0; -// outs () << "total for " << a.first << ": " << a.second.size() << "\n"; -// for (auto & t : a.second) -// { -// computePrePost(t); -// outs () << '.'; -// outs().flush(); -// } -// outs () << "\n total pres: " << pres[a.first].size() << "\n"; -// outs () << " total posts: " << posts[a.first].size() << "\n"; -// -// for (auto & d : posts[a.first]) -// for (auto & b : pres[a.first]) -// if (true == u2.isSat(b.first, d.first)) -// postPre[a.first][d.first].insert(postPre[a.first][d.first].end(), -// b.second.begin(), b.second.end()); -// } -// } -//ToDo ilia updated - - map, bool> emptCycls, emptCyclsVisited; -// void findUselessPaths() -// { -// SMTUtils u2(m_efac); // to free mem -// outs () << "total for global: " << ruleManager.acyclic.size() << "\n"; -// for (auto it = ruleManager.acyclic.begin(); it != ruleManager.acyclic.end(); ) -// { -// auto & t = *it; -// int i = 0; -// int j = 0; -// bool unsat = false; -// while (j < t.size() && !unsat) -// { -// bool lhfound = false; -// for (Expr l : ruleManager.loopheads) -// { -// if (ruleManager.chcs[t[j]].dstRelation == l || j == t.size() - 1) -// { -// vector tmp; -// for (int k = i; k <= j; k++) tmp.push_back(t[k]); -// ExprVector ssa; -// getSSA(tmp, ssa); -// int sz; -// if (false == u2.isSatIncrem(ssa, sz)) unsat = true; -// lhfound = true; -// break; -// } -// } -// if (lhfound) i = j + 1; -// j++; -// } -// if (unsat) it = ruleManager.acyclic.erase(it); -// else ++it; -// } -// -// outs () << "upd for global: " << ruleManager.acyclic.size() << "\n"; -// -// for (auto & a : ruleManager.cycles) -// { -// outs () << "total for " << a.first << ": " << a.second.size() << "\n"; -// for (auto it = a.second.begin(); it != a.second.end(); ) -// { -// auto & t = *it; -// ExprVector ssa; -// getSSA(t, ssa); -// auto & v1 = ruleManager.chcs[t[0]].srcVars; -// auto & v2 = bindVars.back(); -// assert(v1.size() == v2.size()); -// ExprVector tmp; -// for (int i = 0; i < v1.size(); i++) -// tmp.push_back(mk(v1[i], v2[i])); -// ssa.push_back(mk(conjoin(tmp, m_efac))); -// -// int sz; -// auto res = u2.isSatIncrem(ssa, sz); -// if (res == false && sz != -1) -// { -// if (sz == ssa.size()) emptCycls[t] = true; -// else -// { -// it = a.second.erase(it); -// continue; -// } -// } -// it++; -// } -// outs () << "upd for " << a.first << ": " << a.second.size() << "\n"; -// } -// } -//ToDo ilia updated - -// void exploreTracesMaxLb() -// { -// outs () << "LB-MAX\n"; -// findUselessPaths(); -// getPrePostConds(); -// -// fillTodos(); -// outs () << "Total TODOs: " << todoCHCs.size() << "\n"; -// exploreRec(ruleManager.acyclic, 0, "init"); -// } -//ToDo ilia updated - - // original version; similar to TACAS'22 -// void exploreTracesLBTG(int cur_bnd, int bnd) -// { -// outs () << "exploreTracesLBTG\n"; -// fillTodos(); -// -// while (cur_bnd <= bnd && !todoCHCs.empty()) -// { -// outs () << "new iter with cur_bnd = "<< cur_bnd <<"\n"; -// set toErCHCs; -// for (auto & a : todoCHCs) -// { -// if (find(toErCHCs.begin(), toErCHCs.end(), a) != toErCHCs.end()) -// continue; -// vector> traces; -// getAllTracesTG(mk(m_efac), a, cur_bnd, vector(), traces); -// outs () << " exploring traces (" << traces.size() << ") of length " -// << cur_bnd << "; # of todos = " -// << (todoCHCs.size() - toErCHCs.size()) << "\n"; -// -// int tot = 0; -// bool toBreak = false; -// for (int trNum = 0; trNum < traces.size() && !todoCHCs.empty() && !toBreak; ) -// { -// auto & t = traces[trNum]; -// set apps; -// for (int i = 0; i < t.size(); i++) -// if (find(todoCHCs.begin(), todoCHCs.end(), t[i]) != todoCHCs.end() && -// find(toErCHCs.begin(), toErCHCs.end(), t[i]) == toErCHCs.end()) -// apps.insert(i); -// if (apps.empty()) -// { -// trNum++; -// continue; // should not happen -// } -// tot++; -// -// auto & hr = ruleManager.chcs[t.back()]; -// Expr lms = invs[hr.srcRelation]; -// if (lms != NULL && (bool)u.isFalse(mk(lms, hr.body))) -// { -// outs () << "\n unreachable: " << t.back() << "\n"; -// toErCHCs.insert(t.back()); -// unreach_chcs.insert(t.back()); -// unsat_prefs.insert(t); -// trNum++; -// continue; -// } -// -// if (bool(u.isSat(toExpr(t)))) -// { -// bodiesCnjs.clear(); -// int tot = 0; -// for (auto & b : apps) -// if (checkCovered(b, t[b], tot)) -// { -// toErCHCs.insert(t[b]); -// if (b == t.size() - 1) -// toBreak = true; -// } -// if (tot > 0) -// if (getTest()) printTest(); -// } -// else -// { -// if (ruleManager.chcs[t.back()].bodies.size() <= 1 || -// ruleManager.chcs[t.back()].covered.size() == 0) -// unsat_prefs.insert(t); -// trNum++; -// } -// } -// outs () << " -> actually explored: " << tot << ", |unsat prefs| = " << unsat_prefs.size() << "\n"; -// } -// for (auto a : toErCHCs) todoCHCs.erase(a); -// cur_bnd++; -// } -// outs () << "Done with LBTG\n"; -// } -//ToDo ilia updated - }; -} - -#endif diff --git a/include/deep/RndLearner.hpp b/include/deep/RndLearner.hpp deleted file mode 100644 index f9c72accf..000000000 --- a/include/deep/RndLearner.hpp +++ /dev/null @@ -1,693 +0,0 @@ -#ifndef RNDLEARNER__HPP__ -#define RNDLEARNER__HPP__ - -#include "HornNonlin.hpp" -#include "BndExpl.hpp" -#include "ae/SMTUtils.hpp" -#include "sampl/SeedMiner.hpp" -#include "sampl/Sampl.hpp" - -#include -#include - -using namespace std; -using namespace boost; -namespace ufo -{ - class RndLearner - { - protected: - - ExprFactory &m_efac; - EZ3 &m_z3; - SMTUtils u; - ufo::ZSolver m_smt_solver; - vector> m_smt_safety_solvers; - map safety_progress; - - CHCs& ruleManager; - ExprVector decls; - vector> sfs; - ExprVector curCandidates; - - vector> invarVars; - vector invarVarsShort; - - // for arrays - vector arrCands; - vector arrAccessVars; - vector arrIterRanges; - - int invNumber; - int numOfSMTChecks; - - bool kind_succeeded; // interaction with k-induction - bool oneInductiveProof; - - bool densecode; // catch various statistics about the code (mostly, frequences) and setup the prob.distribution based on them - bool addepsilon; // add some small probability to features that never happen in the code - bool aggressivepruning; // aggressive pruning of the search space based on SAT/UNSAT (WARNING: may miss some invariants) - - bool statsInitialized; - int printLog; - - public: - - RndLearner (ExprFactory &efac, EZ3 &z3, CHCs& r, unsigned to, bool k, bool b1, bool b2, bool b3, int debug) : - m_efac(efac), m_z3(z3), ruleManager(r), m_smt_solver (z3), u(efac, to), - invNumber(0), numOfSMTChecks(0), oneInductiveProof(true), kind_succeeded (!k), - densecode(b1), addepsilon(b2), aggressivepruning(b3), - statsInitialized(false), printLog(debug){} - - bool isTautology (Expr a) // adjusted for big disjunctions - { - if (isOpX(a)) return true; - - ExprSet disjs; - getDisj(a, disjs); - if (disjs.size() == 1) return false; - - map varComb; - for (auto &a : disjs) - { - ExprSet avars; - expr::filter (a, bind::IsConst(), std::inserter (avars, avars.begin ())); - if (avars.size() == 0) continue; - varComb[avars].insert(mkNeg(a)); - } - - if (varComb.size() == 0) return false; - - m_smt_solver.reset(); - - bool res = false; - for (auto &v : varComb) - { - m_smt_solver.assertExpr(conjoin(v.second, m_efac)); - if (!m_smt_solver.solve ()) - { - res = true; break; - } - } - return res; - } - - bool checkCandidates() - { - for (auto &hr: ruleManager.chcs) - { - if (hr.isQuery) continue; - - m_smt_solver.reset(); - - int ind1; // to be identified later - int ind2 = getVarIndex(hr.dstRelation, decls); - - // pushing body - m_smt_solver.assertExpr (hr.body); - Expr cand1; - Expr cand2; - Expr lmApp; - - // pushing src relation -// if (!isOpX(hr.srcRelation)) -// { -// ind1 = getVarIndex(hr.srcRelation, decls); -// SamplFactory& sf1 = sfs[ind1].back(); -// -// cand1 = curCandidates[ind1]; -// -// for (auto & v : invarVars[ind1]) -// { -// cand1 = replaceAll(cand1, v.second, hr.srcVars[v.first]); -// } -// m_smt_solver.assertExpr(cand1); -// -// lmApp = sf1.getAllLemmas(); -// for (auto & v : invarVars[ind1]) -// { -// lmApp = replaceAll(lmApp, v.second, hr.srcVars[v.first]); -// } -// m_smt_solver.assertExpr(lmApp); -// }//ToDo ilia updated - - // pushing dst relation - cand2 = curCandidates[ind2]; - - for (auto & v : invarVars[ind2]) - { - cand2 = replaceAll(cand2, v.second, hr.dstVars[v.first]); - } - - m_smt_solver.assertExpr(mk(cand2)); - - numOfSMTChecks++; - boost::tribool res = m_smt_solver.solve (); - if (res) // SAT == candidate failed - { - curCandidates[ind2] = mk(m_efac); - return checkCandidates(); - } - } - - bool res = false; - for (auto &cand : curCandidates) res = !isOpX(cand); - return res; - } - - void assignPriorities() - { - for (int i = 0; i < invNumber; i++) - { - SamplFactory& sf = sfs[i].back(); - if (isOpX(curCandidates[i])) sf.assignPrioritiesForFailed(); - else sf.assignPrioritiesForLearned(); - } - } - - void reportCheckingResults(bool doRedundancyOptim = true) - { - for (int i = 0; i < invNumber; i++) - { - Expr cand = curCandidates[i]; - SamplFactory& sf = sfs[i].back(); - if (isOpX(cand)) - { - if (printLog) outs () << " => bad candidate for " << *decls[i] << "\n"; - } - else - { - if (printLog) outs () << " => learned lemma for " << *decls[i] << "\n"; - - if (doRedundancyOptim) - { - Expr allLemmas = sf.getAllLemmas(); - if (u.implies(allLemmas, cand)) - { - curCandidates[i] = mk(m_efac); - } - else - { - sf.learnedExprs.insert(cand); - } - } - } - } - } - - void resetlearnedLemmas() - { - for (auto & sf : sfs) sf.back().learnedExprs.clear(); - } - -// void bootstrapBoundedProofs (int bnd, ExprSet& cands) -// { -// for (auto &hr: ruleManager.chcs) -// if (findNonlin(hr.body)) -// { -// outs () << "Nonlinear arithmetic detected.\nInterpolation is skipped\n"; -// return; -// } -// -// BndExpl be(ruleManager, printLog); -// Expr cand; -// int k = 0; -// while (k < bnd) -// { -// cand = be.getBoundedItp(k); -// k++; -// if (cand == NULL) -// { -// outs () << "Counterexample is found.\nThe system does not have a solution.\n"; -// exit(0); -// } -// -// ExprSet cnjs; -// getConj(cand, cnjs); -// -// for (auto & a : cnjs) cands.insert(a); -// } -// } -//ToDo ilia updated - - -// bool checkBoundedProofs (ExprSet& itpCandidates) -// { -// if (invNumber == 1) return false; // not supported yet -// -// for (auto it = itpCandidates.begin(), end = itpCandidates.end(); it != end; ) -// { -// curCandidates[0] = *it; // current limitation -// -// if (printLog) outs () << "itp candidate for " << *decls[0] << ": " << **it << "\n"; -// -// if (checkCandidates()) -// { -// reportCheckingResults(); -// itpCandidates.erase(it++); -// -// if (checkSafety()) -// { -// return true; -// } -// } -// else -// { -// ++it; -// } -// } -// return false; -// } -//ToDo ilia updated - - - void resetSafetySolver() - { - int num = 0; - for (auto &hr: ruleManager.chcs) - { - if (!hr.isQuery) continue; - - m_smt_safety_solvers[num].reset(); - m_smt_safety_solvers[num].assertExpr (hr.body); - safety_progress[num] = false; - num++; - } - } - -// bool checkSafety() -// { -// int num = 0; -// for (auto &hr: ruleManager.chcs) -// { -// if (!hr.isQuery) continue; -// num++; -// -// int ind = getVarIndex(hr.srcRelation, decls); -// Expr invApp = curCandidates[ind]; -// if (safety_progress[num-1] == true) continue; -// -// for (auto & v : invarVars[ind]) -// { -// invApp = replaceAll(invApp, v.second, hr.srcVars[v.first]); -// } -// -// m_smt_safety_solvers[num-1].assertExpr(invApp); -// safety_progress[num-1] = bool(!m_smt_safety_solvers[num-1].solve ()); -// -// numOfSMTChecks++; -// } -// -// for (auto a : safety_progress) if (a.second == false) return false; -// return true; -// } -//ToDo ilia updated - - void setupSafetySolver() - { - // setup the safety solver - for (auto &hr: ruleManager.chcs) - { - if (hr.isQuery) - { - m_smt_safety_solvers.push_back(ufo::ZSolver(m_z3)); - m_smt_safety_solvers.back().assertExpr (hr.body); - safety_progress[safety_progress.size()] = false; - } - } - } - -// void updateRels() -// { -// // this should not affect the learning process for a CHC system with one (declare-rel ...) -// -// set rels2update; -// -// for (int ind = 0; ind < invNumber; ind++) -// { -// Expr cand = curCandidates[ind]; -// SamplFactory& sf = sfs[ind].back(); -// if (!isOpX(cand)) -// { -// for (auto &hr : ruleManager.chcs) -// { -// if (hr.srcRelation == decls[ind] && -// hr.dstRelation != decls[ind] && -// !hr.isQuery) -// { -// Expr lemma2add = curCandidates[ind]; -// -// for (auto & v : invarVars[ind]) -// { -// lemma2add = replaceAll(lemma2add, v.second, hr.srcVars[v.first]); -// } -// -// numOfSMTChecks++; -// if (u.implies(hr.body, lemma2add)) continue; -// -// hr.body = mk(hr.body, lemma2add); -// -// rels2update.insert(getVarIndex(hr.dstRelation, decls)); -// } -// } -// } -// } -// -// for(auto ind : rels2update) -// { -// vector& sf = sfs[ind]; -// sf.push_back(SamplFactory (m_efac, aggressivepruning)); -// -// SamplFactory& sf_before = sf[sf.size()-2]; -// SamplFactory& sf_after = sf.back(); -// -// for (auto & var : invarVars[ind]) sf_after.addVar(var.second); -// sf_after.lf.nonlinVars = sf_before.lf.nonlinVars; -// -// set progConsts, intCoefs; -// ExprSet cands; -// doSeedMining(decls[ind], cands, progConsts, intCoefs); -// initializeSamlp(decls[ind], cands, progConsts, intCoefs); -// -// sf_after.calculateStatistics(densecode, addepsilon); -// for (auto a : sf_before.learnedExprs) -// { -// sf_after.learnedExprs.insert(a); -// sf_after.exprToSampl(a); -// sf_after.assignPrioritiesForLearned(); -// } -// } -// } - - void initializeDecl(Expr invDecl) - { - if (printLog) outs () << "\nINITIALIZE PREDICATE " << invDecl << "\n====================\n"; -// assert (invDecl->arity() > 2); - assert(decls.size() == invNumber); - assert(sfs.size() == invNumber); - assert(curCandidates.size() == invNumber); - - decls.push_back(invDecl); - invarVars.push_back(map()); - invarVarsShort.push_back(ExprVector()); - - curCandidates.push_back(NULL); - - sfs.push_back(vector ()); - sfs.back().push_back(SamplFactory (m_efac, aggressivepruning)); - SamplFactory& sf = sfs.back().back(); - - for (int i = 0; i < ruleManager.invVars[invDecl].size(); i++) - { - Expr var = ruleManager.invVars[invDecl][i]; - if (sf.addVar(var)) - { - invarVars[invNumber][i] = var; - invarVarsShort[invNumber].push_back(var); - } - } - - arrCands.push_back(ExprSet()); - arrAccessVars.push_back(ExprVector()); - arrIterRanges.push_back(ExprSet()); - - invNumber++; - } - - bool initializedDecl(Expr invDecl) - { - return find (decls.begin(), decls.end(), invDecl) != decls.end(); - } - -// virtual void doSeedMining(Expr invRel, ExprSet& cands, set& progConsts, set& intCoefs) -// { -// int ind = getVarIndex(invRel, decls); -// SamplFactory& sf = sfs[ind].back(); -// -// // analyze each rule separately: -// for (auto &hr : ruleManager.chcs) -// { -// if (hr.dstRelation != invRel && hr.srcRelation != invRel) continue; -// -// SeedMiner sm(hr, invRel, invarVars[ind], sf.lf.nonlinVars); -// sm.analyzeCode(); -// -// // convert intConsts to progConsts and add additive inverses (if applicable): -// for (auto &a : sm.intConsts) progConsts.insert(a); -// for (auto &a : sm.intCoefs) intCoefs.insert(a); // same for intCoefs -// for (auto &a : sm.candidates) cands.insert(a); -// } -// } - - void initializeSamlp(Expr invRel, ExprSet& cands, set& progConsts, set& intCoefs) - { - int ind = getVarIndex(invRel, decls); - SamplFactory& sf = sfs[ind].back(); - if (sf.lf.nonlinVars.size() > 0) - { - if (printLog >= 3) outs() << "Multed vars: "; - for (auto &a : sf.lf.nonlinVars) - { - if (printLog >= 3) outs() << *a.first << " = " << *a.second << "\n"; - sf.lf.addVar(a.second); - Expr b = a.first->right(); - if (isNumericConst(b)) intCoefs.insert(lexical_cast(b)); - } - } - - for (auto &c : progConsts) progConsts.insert(-c); - for (auto &a : intCoefs) intCoefs.insert(-a); - for (auto &a : intCoefs) if (a != 0) sf.lf.addIntCoef(a); - - auto progConstsTmp = progConsts; - for (auto &a : progConstsTmp) - for (auto &b : intCoefs) - progConsts.insert(a*b); - - // sort progConsts and push to vector: - while (progConsts.size() > 0) - { - cpp_int min = *progConsts.begin(); - for (auto c : progConsts) - { - if (c < min) - { - min = c; - } - } - progConsts.erase(min); - sf.lf.addConst(min); - } - - sf.initialize(arrCands[ind], arrAccessVars[ind], arrIterRanges[ind]); - - // normalize samples obtained from CHCs - for (auto & cand : cands) Sampl& s = sf.exprToSampl(cand); - } - -// void prepareSeeds (Expr invRel, ExprSet& cands) -// { -// int invNum = getVarIndex(invRel, decls); -// if (invNum < 0) -// { -// if (printLog >= 3) outs () << "\nNo seed mining for " << invRel << " since it was not initialized\n"; -// return; -// } -// if (printLog) outs () << "\nSEED MINING for " << invRel << "\n===========\n"; -// set progConsts, intCoefs; -// doSeedMining(invRel, cands, progConsts, intCoefs); -// initializeSamlp(invRel, cands, progConsts, intCoefs); -// } - - void calculateStatistics() - { - statsInitialized = true; - for (int i = 0; i < invNumber; i++) - { - sfs[i].back().calculateStatistics(densecode, addepsilon); - - if (printLog >= 3) - { - outs() << "\nSTATISTICS for " << *decls[i] << "\n==========\n"; - sfs[i].back().printStatistics(); - } - } - } - -// void synthesize(int maxAttempts, ExprSet& itpCands) -// { -// if (printLog) outs () << "\nSAMPLING\n========\n"; -// bool success = false; -// int iter = 1; -// -// for (int i = 0; i < maxAttempts; i++) -// { -// // first, guess candidates for each inv.declaration -// -// bool skip = false; -// for (int j = 0; j < invNumber; j++) -// { -// if (curCandidates[j] != NULL) continue; // if the current candidate is good enough -// SamplFactory& sf = sfs[j].back(); -// Expr cand = sf.getFreshCandidate(); -// if (cand == NULL) -// { -// skip = true; -// break; -// } -// -// if (isTautology(cand)) // keep searching -// { -// sf.assignPrioritiesForLearned(); -// skip = true; -// break; -// } -// -// if (sf.lf.nonlinVars.size() > 0 && u.isFalse(cand)) // keep searching -// { -// sf.assignPrioritiesForFailed(); -// skip = true; -// break; -// } -// -// curCandidates[j] = cand; -// } -// -// if (skip) continue; -// -// if (printLog) -// { -// outs() << "\n ---- iteration " << iter << " ----\n"; -// for (int j = 0; j < invNumber; j++) -// outs () << "candidate for " << *decls[j] << ": " << *curCandidates[j] << "\n"; -// } -// -// iter++; -// -// // check all the candidates at once for all CHCs : -// -// int isInductive = checkCandidates(); -// if (isInductive) success = checkSafety(); // query is checked here -// -// reportCheckingResults(); -// if (success) break; -// -// if (isInductive) -// success = checkBoundedProofs(itpCands); -// -// if (success) break; -// -// assignPriorities(); -// updateRels(); -// -// for (auto &cand : curCandidates) cand = NULL; // preparing for the next iteration -// } -// -// if (success) outs () << "Success after " << --iter << " iterations\n"; -// else outs () << "Unknown after " << maxAttempts << " iterations\n"; -// -// if (printLog) -// for (int j = 0; j < invNumber; j++) -// outs () << " number of sampled lemmas for " << *decls[j] << ": " -// << sfs[j].back().learnedExprs.size() << "\n"; -// -// if (printLog) outs () << " number of SMT checks: " << numOfSMTChecks << "\n"; -// if (success) printSolution(); -// } -//ToDo ilia updated - -// void checkAllLemmas(vector& lms, vector& curMinLms, int& numTries, int invInd) -// { -// numTries++; -// resetSafetySolver(); -// resetlearnedLemmas(); -// for (int i = 0; i < invNumber; i++) curCandidates[i] = conjoin(lms[i], m_efac); -// -// if (checkCandidates() && checkSafety()) -// { -// if (lms[invInd].size() < curMinLms[invInd].size()) curMinLms[invInd] = lms[invInd]; -// -// for (auto & a : lms[invInd]) -// { -// vector lmsTry = lms; -// lmsTry[invInd].erase(a); -// -// checkAllLemmas(lmsTry, curMinLms, numTries, invInd); -// } -// } -// } -//ToDo ilia updated - - void simplifyLemmas() - { - for (int i = 0; i < decls.size(); i++) - { - Expr rel = decls[i]; - SamplFactory& sf = sfs[i].back(); - u.removeRedundantConjuncts(sf.learnedExprs); - } - } - - void printSolution(bool simplify = true) - { - for (int i = 0; i < decls.size(); i++) - { - Expr rel = decls[i]; - SamplFactory& sf = sfs[i].back(); - ExprSet lms = sf.learnedExprs; - outs () << "(define-fun " << *rel << " ("; - for (auto & b : ruleManager.invVars[rel]) - outs () << "(" << *b << " " << u.varType(b) << ")"; - outs () << ") Bool\n "; - Expr tmp = conjoin(lms, m_efac); - if (simplify && !containsOp(tmp)) u.removeRedundantConjuncts(lms); - Expr res = simplifyArithm(conjoin(lms, m_efac)); - u.print(res); - outs () << ")\n"; - assert(hasOnlyVars(res, ruleManager.invVars[rel])); - } - } - }; - -// inline void learnInvariants(string smt, unsigned to, int maxAttempts, -// bool kind, int itp, bool b1, bool b2, bool b3, int debug) -// { -// ExprFactory m_efac; -// EZ3 z3(m_efac); -// -// CHCs ruleManager(m_efac, z3); -// ruleManager.parse(smt); -// RndLearner ds(m_efac, z3, ruleManager, to, kind, b1, b2, b3, debug); -// -// ds.setupSafetySolver(); -// std::srand(std::time(0)); -// ExprSet itpCands; -// -// if (ruleManager.decls.size() > 1) -// { -// outs () << "WARNING: learning multiple invariants is currently unstable\n" -// << " it is suggested to disable \'aggressivepruning\'\n"; -// } -// else if (itp > 0) -// { -// outs () << "WARNING: For more efficient itp-based bootstrapping,\n" -// << " it is recommended to run --v2\n"; -// // current limitation: ruleManager.decls.size() == 0 -// ds.bootstrapBoundedProofs(itp, itpCands); -// } -// -// for (auto& dcl: ruleManager.decls) -// { -// ds.initializeDecl(dcl->left()); -// ds.prepareSeeds(dcl->left(), itpCands); // itpCands isn't used -// } -// -// ds.calculateStatistics(); -// ds.synthesize(maxAttempts, itpCands); -// }; -//ToDo ilia updated - - -} - -#endif diff --git a/include/deep/RndLearnerV2.hpp b/include/deep/RndLearnerV2.hpp deleted file mode 100644 index bd7e600bf..000000000 --- a/include/deep/RndLearnerV2.hpp +++ /dev/null @@ -1,391 +0,0 @@ -#ifndef RNDLEARNERV2__HPP__ -#define RNDLEARNERV2__HPP__ - -#include "RndLearner.hpp" - -using namespace std; -using namespace boost; -namespace ufo -{ - class RndLearnerV2 : public RndLearner - { - private: - - map modelsOfFailures; - - vector tr; - vector fc; - vector qr; - - ExprSet deferredLearned; - ExprSet deferredFailed; - ExprSet deferredBlocked; - - public: - - RndLearnerV2 (ExprFactory &efac, EZ3 &z3, CHCs& r, unsigned to, bool freqs, bool aggp, int debug) : - RndLearner (efac, z3, r, to, /*k-induction*/ false, freqs, /*epsilon*/ true, aggp, debug){} - - Expr getModel(ExprVector& vars) - { - ExprVector eqs; - ZSolver::Model m = m_smt_solver.getModel(); - for (auto & v : vars) - { - Expr e = m.eval(v); - if (e == NULL) - { - return NULL; - } - else if (e != v) - { - eqs.push_back(mk(v, e)); - } - else - { - if (bind::isBoolConst(v)) - eqs.push_back(mk(v, mk(m_efac))); - else if (bind::isIntConst(v)) - eqs.push_back(mk(v, mkTerm (mpz_class (guessUniformly (1000)-500), m_efac))); - } - } - return conjoin (eqs, m_efac); - } - - ExprSet& getlearnedLemmas(int num) - { - return sfs[num].back().learnedExprs; - } - - void categorizeCHCs() - { - for (auto & a : ruleManager.chcs) - if (a.isInductive) tr.push_back(&a); - else if (a.isFact) fc.push_back(&a); - else if (a.isQuery) qr.push_back(&a); - } - - int redundancyCheck (ExprVector& lemmas, bool deferPriorities) - { - int num = 0; - SamplFactory& sf = sfs[0].back(); - for (auto & l : lemmas) - { - if (deferPriorities) - { - deferredLearned.insert(l); - } - else - { - Sampl& s = sf.exprToSampl(l); - if (!s.empty()) sf.assignPrioritiesForLearned(); - } - numOfSMTChecks++; - if (!u.implies(sf.getAllLemmas(), l)) - { - sf.learnedExprs.insert(l); - num++; - } - } - return num; - } - -// bool checkSafetyAndReset(HornRuleExt* qu) -// { -// m_smt_solver.reset(); -// m_smt_solver.assertExpr (qu->body); -// -// int ind = getVarIndex(qu->srcRelation, decls); -// SamplFactory& sf = sfs[ind].back(); -// -// Expr lmApp = sf.getAllLemmas(); -// for (int i = 0; i < qu->srcVars.size(); i++) -// { -// lmApp = replaceAll(lmApp, invarVars[ind][i], qu->srcVars[i]); -// } -// m_smt_solver.assertExpr(lmApp); -// -// numOfSMTChecks++; -// return bool(!m_smt_solver.solve ()); -// } -//ToDo ilia updated - -// void getIS(HornRuleExt* hr, ExprVector& candSet, bool deferPriorities) -// { -// if (candSet.size() == 0) return; -// SamplFactory& sf = sfs[0].back(); -// -// Expr cands = conjoin (candSet, m_efac); -// -// for (int i = candSet.size() - 1; i >= 0; i--) -// { -// Expr candPrime = candSet[i]; -// -// for (int j = 0; j < hr->srcVars.size(); j++) -// { -// candPrime = replaceAll(candPrime, hr->srcVars[j], hr->dstVars[j]); -// } -// -// m_smt_solver.reset(); -// m_smt_solver.assertExpr (hr->body); -// m_smt_solver.assertExpr (cands); -// m_smt_solver.assertExpr (sf.getAllLemmas()); -// m_smt_solver.assertExpr (mk(candPrime)); -// -// numOfSMTChecks++; -// if (m_smt_solver.solve ()) -// { -// modelsOfFailures[getModel(hr->srcVars)].insert(candSet[i]); -// -// if (deferPriorities) -// { -// deferredBlocked.insert(candSet[i]); -// } -// else -// { -// // GF: to debug (esp. nonlin opers) -// Sampl& s = sf.exprToSampl(candSet[i]); -// sf.assignPrioritiesForBlocked(); -// } -// -// candSet.erase(candSet.begin() + i); -// -// getIS(hr, candSet, deferPriorities); -// return; -// } -// } -// return; -// } -//ToDo ilia updated - -// bool initCheckCand(HornRuleExt* fc, Expr cand) -// { -// Expr candPrime = cand; -// -// for (int j = 0; j < fc->dstVars.size(); j++) -// { -// candPrime = replaceAll(candPrime, invarVars[0][j], fc->dstVars[j]); -// } -// -// m_smt_solver.reset(); -// m_smt_solver.assertExpr (fc->body); -// m_smt_solver.assertExpr (mk(candPrime)); -// -// numOfSMTChecks++; -// return bool(!m_smt_solver.solve ()); -// } - -// bool houdini (ExprSet& cands, bool deferPriorities, bool skipInit) -// { -// SamplFactory& sf = sfs[0].back(); -// ExprVector exprs; -// for (auto & a : cands) exprs.push_back(a); -// -// // initiation: remove crap first -// if (!skipInit) -// { -// for (auto a : fc) -// { -// for (int i = exprs.size() - 1; i >= 0; i--) -// { -// if (!initCheckCand(a, exprs[i])) -// { -// if (deferPriorities) -// { -// deferredFailed.insert(exprs[i]); -// } -// else -// { -// Sampl& s = sf.exprToSampl(exprs[i]); -// if (!s.empty()) sf.assignPrioritiesForFailed(); -// } -// exprs.erase(exprs.begin()+i); -// } -// } -// } -// } -// -// // consecution -// for (auto a : tr) getIS(a, exprs, deferPriorities); -// -// // safety: -// int num = exprs.size(); -// int newLemmaAdded = redundancyCheck(exprs, deferPriorities); -// -// if (newLemmaAdded == 0) return false; -// -// for (auto a : qr) if (!checkSafetyAndReset(a)) return false; -// -// return true; -// } - - void prioritiesDeferred() - { - SamplFactory& sf = sfs[0].back(); - - for (auto & a : deferredLearned) - { - Sampl& s = sf.exprToSampl(a); - sf.assignPrioritiesForLearned(); - } - for (auto & a : deferredFailed) - { - Sampl& s = sf.exprToSampl(a); - sf.assignPrioritiesForFailed(); - } - for (auto & a : deferredBlocked) - { - Sampl& s = sf.exprToSampl(a); - sf.assignPrioritiesForBlocked(); - } - } - -// bool synthesize(int maxAttempts, int batchSz, int scndChSz) -// { -// assert(sfs.size() == 1); // current limitation -// -// SamplFactory& sf = sfs[0].back(); -// -// ExprVector candsBatch; -// -// bool success = false; -// int iter = 1; -// int triggerSecondChance = 0; -// int numFailInit = 0; -// -// for (int i = 0; i < maxAttempts; i++) -// { -// candsBatch.clear(); -// -// if (printLog) outs() << "\n ---- new iteration " << iter << " ----\n"; -// -// while (candsBatch.size() < batchSz) -// { -// Expr cand = sf.getFreshCandidate(); -// if (cand == NULL) continue; -// -// if (isTautology(cand)) // keep searching -// { -// sf.assignPrioritiesForLearned(); -// continue; -// } -// -// if (sf.lf.nonlinVars.size() > 0 && !u.isSat(cand)) // keep searching -// { -// sf.assignPrioritiesForFailed(); -// continue; -// } -// -// iter++; -// -// bool toskip = false; -// for (auto a : fc) -// { -// if (!initCheckCand(a, cand)) -// { -// numFailInit++; -// sf.assignPrioritiesForFailed(); -// toskip = true; -// break; -// } -// } -// if (toskip) continue; -// -// if (printLog) outs () << " candidate for " << *decls[0] << ": " << *cand << "\n"; -// -// candsBatch.push_back(cand); -// } -// -// for (auto a : tr) getIS(a, candsBatch, false); // houdini -// -// if (candsBatch.size() == 0) continue; -// -// success = true; -// for (auto a : qr) success = success && checkSafetyAndReset(a); -// if (success) break; -// -// // second chance candidates -// triggerSecondChance += redundancyCheck(candsBatch, false); -// if (triggerSecondChance < scndChSz) continue; -// -// triggerSecondChance = 0; -// -// ExprSet secondChanceCands; -// for (auto it = modelsOfFailures.begin(); it != modelsOfFailures.end(); ) -// { -// m_smt_solver.reset(); -// m_smt_solver.assertExpr (it->first); -// m_smt_solver.assertExpr (sf.getAllLemmas()); -// -// numOfSMTChecks++; -// if (!m_smt_solver.solve ()) // CE violated -// { -// for (auto & e : it->second) secondChanceCands.insert(e); -// modelsOfFailures.erase(it++); -// } -// else ++it; -// } -// -// if (secondChanceCands.size() > 0) success = houdini(secondChanceCands, false, true); -// if (success) break; -// } -// -// return success; -// } -//ToDo ilia updated - }; - -// inline void learnInvariants2(string smt, unsigned to, int maxAttempts, -// int itp, int batch, int retry, bool freqs, bool aggp, int debug) -// { -// ExprFactory m_efac; -// EZ3 z3(m_efac); -// -// CHCs ruleManager(m_efac, z3); -// ruleManager.parse(smt); -// RndLearnerV2 ds(m_efac, z3, ruleManager, to, freqs, aggp, debug); -// ds.categorizeCHCs(); -// -// std::srand(std::time(0)); -// -// if (ruleManager.decls.size() > 1) -// { -// outs() << "WARNING: learning multiple invariants is unsupported in --v2.\n" -// << " Run --v3\n"; -// return; -// } -// -// for (auto& dcl: ruleManager.decls) ds.initializeDecl(dcl->left()); -// -// ExprSet cands; -// -// if (itp > 0) ds.bootstrapBoundedProofs(itp, cands); -// -// for (auto& dcl: ruleManager.decls) ds.prepareSeeds(dcl->arg(0), cands); // cands isn't used -// -// bool success = ds.houdini(cands, true, false); -// -// if (debug) -// outs () << "Number of bootstrapped lemmas: " << ds.getlearnedLemmas(0).size() << "\n"; -// -// if (success) -// outs () << "Success after the bootstrapping\n"; -// else -// { -// ds.calculateStatistics(); -// ds.prioritiesDeferred(); -// -// success = ds.synthesize(maxAttempts, batch, retry); -// if (debug) -// if (success) outs () << "Total number of learned lemmas: " << ds.getlearnedLemmas(0).size() << "\n"; -// -// if (success) outs () << "Success after sampling\n"; -// else outs () << "No success after " << maxAttempts << " iterations\n"; -// } -// -// if (success) ds.printSolution(); -// } -//ToDo ilia updated -} - -#endif diff --git a/include/deep/RndLearnerV3.hpp b/include/deep/RndLearnerV3.hpp deleted file mode 100644 index d097e2e3f..000000000 --- a/include/deep/RndLearnerV3.hpp +++ /dev/null @@ -1,1832 +0,0 @@ -#ifndef RNDLEARNERV3__HPP__ -#define RNDLEARNERV3__HPP__ - -#include "RndLearnerV2.hpp" -#include "LBExpl.hpp" - -#ifdef HAVE_ARMADILLO -#include "DataLearner.hpp" -#endif - -using namespace std; -using namespace boost; -namespace ufo -{ - struct ArrAccessIter - { - bool grows; - Expr iter; - Expr qv; - Expr precond; - Expr range; - }; - - static bool (*weakeningPriorities[])(Expr, tribool) = -{ - [](Expr cand, tribool val) { return bool(!val); }, -[](Expr cand, tribool val) { return indeterminate(val) && containsOp(cand); }, -[](Expr cand, tribool val) { return indeterminate(val); } -}; - -class RndLearnerV3 : public RndLearnerV2 -{ -private: - - ExprSet checked; - set propped; - map candidates; - map> deferredCandidates; - map tmpFailed; - bool boot = true; - - // extra options for disjunctive invariants - unsigned dCandNum = 0; - unsigned dAttNum = 100; - unsigned dDepNum = 2; - bool dAllMbp; - bool dAddProp; - bool dAddDat; - bool dStrenMbp; - int mbpEqs; - - map postconds; - map ssas; - map prefs; - map mbps; - - map> qvits; // per cycle - map qvars; - -public: - - RndLearnerV3 (ExprFactory &efac, EZ3 &z3, CHCs& r, unsigned to, bool freqs, bool aggp, int _m, - bool _dAllMbp, bool _dAddProp, bool _dAddDat, bool _dStrenMbp, int debug) : - RndLearnerV2 (efac, z3, r, to, freqs, aggp, debug), - mbpEqs(_m), dAllMbp(_dAllMbp), dAddProp(_dAddProp), dAddDat(_dAddDat), dStrenMbp(_dStrenMbp) {} - -// bool checkInit(Expr rel) -// { -// vector adjacent; -// for (auto &hr: ruleManager.chcs) -// { -// if (hr.isFact && hr.dstRelation == rel) -// { -// adjacent.push_back(&hr); -// } -// } -// if (adjacent.empty()) return true; -// return multiHoudini(adjacent); -// } -//ToDo ilia updated - -// bool checkInductiveness(Expr rel) -// { -// vector adjacent; -// for (auto &hr: ruleManager.chcs) -// { -// bool checkedSrc = find(checked.begin(), checked.end(), hr.srcRelation) != checked.end(); -// bool checkedDst = find(checked.begin(), checked.end(), hr.dstRelation) != checked.end(); -// if ((hr.srcRelation == rel && hr.dstRelation == rel) || -// (hr.srcRelation == rel && checkedDst) || -// (hr.dstRelation == rel && checkedSrc) || -// (checkedSrc && checkedDst) || -// (hr.isFact && checkedDst)) -// { -// if (!hr.isQuery) adjacent.push_back(&hr); -// } -// } -// if (adjacent.empty()) return true; -// return multiHoudini(adjacent); -// } -//ToDo ilia updated - - ArrAccessIter* getQvit (int invNum, Expr it) - { - for (auto a : qvits[invNum]) if (a->qv == it) return a; - return NULL; - } - - Expr renameCand(Expr newCand, ExprVector& varsRenameFrom, int invNum) - { - for (auto & v : invarVars[invNum]) - newCand = replaceAll(newCand, varsRenameFrom[v.first], v.second); - return newCand; - } - - Expr eliminateQuantifiers(Expr e, ExprVector& varsRenameFrom, int invNum, bool bwd) - { - Expr eTmp = keepQuantifiersRepl(e, varsRenameFrom); - eTmp = weakenForHardVars(eTmp, varsRenameFrom); - if (bwd) eTmp = mkNeg(eTmp); - eTmp = simplifyBool(/*simplifyArithm*/(eTmp /*, false, true*/)); - eTmp = unfoldITE(eTmp); - eTmp = renameCand(eTmp, varsRenameFrom, invNum); - if (printLog >= 4) - { - outs () << " QE: " << e << "\n vars ((("; pprint(varsRenameFrom); outs () << ")))\n"; - outs () << " QE res: " << eTmp << "\n"; - } - return eTmp; - } - -// void addPropagatedArrayCands(Expr rel, int invNum, Expr candToProp) -// { -// vector tmp = ruleManager.cycles[rel][0]; // todo: extend -// if (tmp.size() != 1) return; // todo: support -// -// Expr fls = candToProp->last()->right(); -// for (auto & q : qvits[invNum]) -// fls = replaceAll(fls, q->qv, q->iter); -// Expr bdy = rewriteSelectStore(ruleManager.chcs[tmp[0]].body); -// -// ExprVector ev; -// for (int h = 0; h < ruleManager.chcs[tmp[0]].dstVars.size(); h++) -// { -// Expr var = ruleManager.chcs[tmp[0]].srcVars[h]; -// bool pushed = false; -// for (auto & q : qvits[invNum]) -// { -// if (q->iter == var) -// { -// ev.push_back(var); -// pushed = true; -// } -// } -// if (!pushed) ev.push_back(ruleManager.chcs[tmp[0]].dstVars[h]); -// } -// -// ExprSet cnjs; -// Expr newCand2; -// cnjs.clear(); -// getConj(eliminateQuantifiers(mk(fls, bdy), ev, invNum, false), cnjs); -// for (auto & c : cnjs) -// { -// if (u.isTrue(c) || u.isFalse(c)) continue; -// Expr e = ineqNegReverter(c); -// if (isOp(e)) -// { -// for (auto & q : qvits[invNum]) -// { -// if (containsOp(e) && !emptyIntersect(q->iter, e)) -// { -// e = replaceAll(e, q->iter, q->qv); -// e = renameCand(e, ruleManager.chcs[tmp[0]].dstVars, invNum); -// -// // workaround: it works only during bootstrapping now -// arrCands[invNum].insert(e); -// } -// } -// } -// } -// } -//ToDo ilia updated - -// bool getCandForAdjacentRel(Expr candToProp, Expr constraint, Expr relFrom, ExprVector& varsRenameFrom, Expr rel, bool seed, bool fwd) -// { -// if (!containsOp(candToProp) && !u.isSat(candToProp, constraint)) -// return false; // sometimes, maybe we should return true. -// -// int invNum = getVarIndex(rel, decls); -// int invNumFrom = getVarIndex(relFrom, decls); -// -// if (containsOp(candToProp)) -// { -// // GF: not tested for backward propagation -// if (fwd == false) return true; -// if (finalizeArrCand(candToProp, constraint, relFrom)) -// { -// assert (isOpX(candToProp)); -// Expr qvar = getQvit(invNumFrom, bind::fapp(candToProp->arg(0)))->qv; // TODO: support nested loops with several qvars -// -// addPropagatedArrayCands(rel, invNum, candToProp); -// Expr newCand = getForallCnj(eliminateQuantifiers( -// mk(candToProp, constraint), varsRenameFrom, invNum, false)); -// if (newCand == NULL) return true; -// -// auto candsTmp = candidates; -// candidates[invNum].push_back(newCand); -// -// bool res = checkCand(invNum, false) && -// propagateRec(rel, conjoin(candidates[invNum], m_efac), false); -// if (!candidates[invNum].empty()) return res; -// -// for (auto & q : qvits[invNum]) -// { -// Expr newCand1 = replaceAll(newCand, qvar->last(), q->qv->last()); -// newCand1 = replaceArrRangeForIndCheck(invNum, newCand1, true); -// if (newCand1 == NULL) continue; -// candidates = candsTmp; -// candidates[invNum].push_back(newCand1); -// if (checkCand(invNum, false) && -// propagateRec(rel, conjoin(candidates[invNum], m_efac), false)) -// res = true; -// } -// return res; -// } -// else -// { -// // very ugly at the moment, to be revisited -// Expr newCand = getForallCnj(eliminateQuantifiers( -// mk(candToProp, constraint), varsRenameFrom, invNum, false)); -// if (newCand == NULL) return true; -// candidates[invNum].push_back(newCand); -// return checkCand(invNum, false) && -// propagateRec(rel, conjoin(candidates[invNum], m_efac), false); -// } -// } -// -// Expr newCand = eliminateQuantifiers( -// (fwd ? mk(candToProp, constraint) : -// mk(constraint, mkNeg(candToProp))), -// varsRenameFrom, invNum, !fwd); -// ExprSet cnjs; -// getConj(newCand, cnjs); -// addCandidates(rel, cnjs); -// -// if (seed) -// { -// if (u.isTrue(newCand)) return true; -// else return propagateRec(rel, newCand, true); -// } -// else -// { -// checkCand(invNum, false); -// return propagateRec(rel, conjoin(candidates[invNum], m_efac), false); -// } -// } -//ToDo ilia updated - - bool addCandidate(int invNum, Expr cnd) - { - if (printLog >= 3) outs () << " Adding candidate [" << invNum << "]: " << cnd << "\n"; - SamplFactory& sf = sfs[invNum].back(); - Expr allLemmas = sf.getAllLemmas(); - if (containsOp(cnd) || containsOp(allLemmas)) - { - if (containsOp(cnd)) - cnd = replaceArrRangeForIndCheck (invNum, cnd); - candidates[invNum].push_back(cnd); - return true; - } - if (!isOpX(allLemmas) && u.implies(allLemmas, cnd)) return false; - - for (auto & a : candidates[invNum]) - if (a == cnd) return false; - candidates[invNum].push_back(cnd); - return true; - } - - void addCandidates(Expr rel, ExprSet& cands) - { - int invNum = getVarIndex(rel, decls); - for (auto & a : cands) - { - ExprSet tmp; -// addAllStrengthenings(a, tmp); -// for (auto & b : tmp) - addCandidate(invNum, a); - } - } - - bool finalizeArrCand(Expr& cand, Expr constraint, Expr relFrom) - { - // only forward currently - if (!isOpX(cand)) return false; - if (!containsOp(cand)) return false; - - // need to make sure the candidate is finalized (i.e., not a nested loop) - int invNum = getVarIndex(relFrom, decls); - if (u.isSat(postconds[invNum], constraint)) return false; - - ExprSet cnj; - for (int i = 0; i < cand->arity()-1; i++) - { - Expr qv = bind::fapp(cand->arg(i)); - auto q = getQvit(invNum, qv); - getConj(q->range, cnj); - } - - cand = replaceAll(cand, cand->last()->left(), conjoin(cnj, m_efac)); - return true; - } - - Expr getForallCnj (Expr cands) - { - ExprSet cnj; - getConj(cands, cnj); - for (auto & cand : cnj) - if (isOpX(cand)) return cand; - return NULL; - } - - Expr replaceArrRangeForIndCheck(int invNum, Expr cand, bool fwd = false) - { - assert(isOpX(cand)); - ExprSet cnjs; - getConj(cand->last()->left(), cnjs); - for (int i = 0; i < cand->arity()-1; i++) - { - auto qv = bind::fapp(cand->arg(i)); - auto str = getQvit(invNum, qv); - Expr itRepl = str->iter; - - if (contains(cand->last()->right(), qv)) - { - if (str->grows && fwd) cnjs.insert(mk(qv, itRepl)); - else if (str->grows && !fwd) cnjs.insert(mk(qv, itRepl)); - else if (!str->grows && fwd) cnjs.insert(mk(qv, itRepl)); - else if (!str->grows && !fwd) cnjs.insert(mk(qv, itRepl)); - } - else - { - for (auto it = cnjs.begin(); it != cnjs.end(); ) - { - if (contains (*it, qv)) it = cnjs.erase(it); - else ++it; - } - } - cand = replaceAll(cand, cand->last()->left(), conjoin(cnjs, m_efac)); - } - return simplifyQuants(cand); - } - -// bool propagate(int invNum, Expr cand, bool seed) { return propagate(decls[invNum], cand, seed); } -//ToDo ilia updated -// bool propagate(Expr rel, Expr cand, bool seed) -// { -// propped.clear(); -// checked.clear(); -// return propagateRec(rel, cand, seed); -// } -//ToDo ilia updated - -// bool propagateRec(Expr rel, Expr cand, bool seed) -// { -// if (printLog >= 3) outs () << " Propagate: " << cand << "\n"; -// bool res = true; -// checked.insert(rel); -// for (auto & hr : ruleManager.chcs) -// { -// if (hr.isQuery || hr.isFact) continue; -// -// Expr constraint = hr.body; -// -// // forward: -// if (hr.srcRelation == rel && find(propped.begin(), propped.end(), &hr) == propped.end()) -// { -// if (hr.isInductive && ruleManager.hasArrays[rel]) continue; // temporary workarond -// propped.insert(&hr); -// SamplFactory* sf1 = &sfs[getVarIndex(hr.srcRelation, decls)].back(); -// Expr replCand = replaceAllRev(cand, sf1->lf.nonlinVars); -// replCand = replaceAll(replCand, ruleManager.invVars[rel], hr.srcVars); -// res = res && getCandForAdjacentRel (replCand, constraint, rel, hr.dstVars, hr.dstRelation, seed, true); -// } -// // backward (very similarly): -// if (hr.dstRelation == rel && find(propped.begin(), propped.end(), &hr) == propped.end()) -// { -// propped.insert(&hr); -// SamplFactory* sf2 = &sfs[getVarIndex(hr.dstRelation, decls)].back(); -// Expr replCand = replaceAllRev(cand, sf2->lf.nonlinVars); -// replCand = replaceAll(replCand, ruleManager.invVars[rel], hr.dstVars); -// res = res && getCandForAdjacentRel (replCand, constraint, rel, hr.srcVars, hr.srcRelation, seed, false); -// } -// } -// return res; -// } -//ToDo ilia updated - -// bool checkCand(int invNum, bool propa = true) -// { -// Expr rel = decls[invNum]; -// if (!checkInit(rel)) return false; -// if (!checkInductiveness(rel)) return false; -// -// return !propa || propagate(invNum, conjoin(candidates[invNum], m_efac), false); -// } -//ToDo ilia updated - - void addLemma (SamplFactory& sf, Expr l) - { - if (printLog) outs () << "Added lemma " << l << "\n"; - sf.learnedExprs.insert(l); - } - - // a simple method to generate properties of a larger Array range, given already proven ranges - void generalizeArrInvars (SamplFactory& sf) - { - if (sf.learnedExprs.size() > 1) - { - ExprVector posts; - ExprVector pres; - map tmp; - ExprVector tmpVars; - ExprVector arrVars; - Expr tmpIt = bind::intConst(mkTerm ("_tmp_it", m_efac)); - - for (auto & a : sf.learnedExprs) - { - if (!isOpX(a)) continue; - Expr learnedQF = a->last(); - if (!isOpX(learnedQF)) continue; - ExprVector se; - filter (learnedQF->last(), bind::IsSelect (), inserter(se, se.begin())); - - // filter out accesses via non-quantified indeces - for (auto it = se.begin(); it != se.end();) - { - bool found = false; - for (int i = 0; i < a->arity(); i++) - { - if (contains(se[0]->right(), a->arg(0))) - { - found = true; - break; - } - } - if (!found) it = se.erase(it); - else ++it; - } - - bool multipleIndex = false; - for (auto & s : se) { - if (se[0]->right() != s->right()) { - multipleIndex = true; - break; - } - } - - if (se.size() == 0 || multipleIndex) continue; - - if (arrVars.size() == 0) { - for (int index = 0; index < se.size(); index++) { - arrVars.push_back(se[index]->left()); - tmpVars.push_back(bind::intConst(mkTerm ("_tmp_var_" + lexical_cast(index), m_efac))); - } - } else { - bool toContinue = false; - for (auto & s : se) { - if (find(arrVars.begin(), arrVars.end(), s->left()) == arrVars.end()) { - toContinue = true; - break; - } - } - if (toContinue) continue; - } - - Expr postReplaced = learnedQF->right(); - for (int index = 0; index < se.size() && index < tmpVars.size(); index++) - postReplaced = replaceAll(postReplaced, se[index], tmpVars[index]); - - ExprSet postVars; - filter(postReplaced, bind::IsConst(), inserter(postVars, postVars.begin())); - for (auto & fhVar : sf.lf.getVars()) postVars.erase(fhVar); - for (auto & tmpVar : tmpVars) postVars.erase(tmpVar); - if (postVars.size() > 0) - { - AeValSolver ae(mk(m_efac), mk(postReplaced, mk(tmpIt, se[0]->right())), postVars); - if (ae.solve()) - { - Expr pr = ae.getValidSubset(); - ExprSet conjs; - getConj(pr, conjs); - if (conjs.size() > 1) - { - for (auto conjItr = conjs.begin(); conjItr != conjs.end();) - { - ExprVector conjVars; - filter (*conjItr, bind::IsConst(), inserter(conjVars, conjVars.begin())); - bool found = false; - for (auto & conjVar : conjVars) - { - if (find (tmpVars.begin(), tmpVars.end(), conjVar) != tmpVars.end()) - { - found = true; - break; - } - } - if (!found) conjItr = conjs.erase(conjItr); - else ++conjItr; - } - } - postReplaced = conjoin(conjs, m_efac); - } - } - - pres.push_back(learnedQF->left()); - posts.push_back(postReplaced); - tmp[mk(learnedQF->left(), postReplaced)].push_back(se[0]->right()); - } - - if (tmp.size() > 0) - { - for (auto & a : tmp) - { - if (a.second.size() > 1) - { - Expr disjIts = mk(m_efac); - for (auto & b : a.second) disjIts = mk(disjIts, mk(tmpIt, b)); - ExprSet elementaryIts; - filter (disjIts, bind::IsConst (), inserter(elementaryIts, elementaryIts.begin())); - for (auto & a : sf.lf.getVars()) elementaryIts.erase(a); - elementaryIts.erase(tmpIt); - if (elementaryIts.size() == 1) - { - AeValSolver ae(mk(m_efac), mk(disjIts, a.first->left()), elementaryIts); - if (ae.solve()) - { - ExprVector args; - Expr it = *elementaryIts.begin(); - args.push_back(it->left()); - Expr newPre = replaceAll(ae.getValidSubset(), tmpIt, it); - Expr newPost = replaceAll(a.first->right(), tmpIt, it); - for (int index = 0; index < tmpVars.size() && index < arrVars.size(); index++) - newPost = replaceAll(newPost, tmpVars[index], mk(normalized)) continue; - - ExprSet vrs; - filter (normalized, bind::IsConst(), std::inserter (vrs, vrs.begin ())); - bool sanitized = true; - for (auto & b : vrs) - { - if (emptyIntersect(b, invAndIterVars)) - { - sanitized = false; - break; - } - } - if (sanitized) newDsjs.insert(normalized); - } - } - - if (newDsjs.size() > 0) - { - Expr cand = disjoin(newDsjs, m_efac); - arrCands.insert(cand); - } - } - - void addSeedHlp(Expr tmpl, ExprVector& vars, ExprSet& actualVars) - { - ExprSet dsjs; - ExprSet newDsjs; - getDisj(tmpl, dsjs); - for (auto & dsj : dsjs) - { - ExprSet vrs; - filter (dsj, bind::IsConst(), std::inserter (vrs, vrs.begin ())); - bool found = true; - - for (auto & a : vrs) - { - if (std::find(std::begin(vars), std::end (vars), a) - == std::end(vars)) { found = false; break; } - } - if (found) newDsjs.insert(dsj); - } - - if (newDsjs.size() == 0) return; - - ExprVector invVarsCstm; - for (auto & a : invVars) invVarsCstm.push_back(a.second); - - tmpl = disjoin (newDsjs, m_efac); - - for (auto &v : actualVars) - { - int index = getVarIndex(v, vars); - if (index >= 0) - { - tmpl = replaceAll(tmpl, v, invVars[index]); - } - } - - tmpl = findNonlinAndRewrite(tmpl, invVarsCstm, extraVars, true); - - for (auto &a : extraVars) invVarsCstm.push_back(a.second); - tmpl = normalizeDisj(tmpl, invVarsCstm); - - if (!isOpX (tmpl) && !isOpX (tmpl)) - { - // get int constants from the normalized candidate - ExprSet intConstsE; - filter (tmpl, bind::IsHardIntConst(), std::inserter (intConstsE, intConstsE.begin ())); - for (auto &a : intConstsE) intConsts.insert(lexical_cast(a)); - if (getLinCombCoefs(tmpl, intCoefs)) candidates.insert(tmpl); - } - } - -// void addSeed(Expr fla) -// { -// if (containsOp